diff --git a/Deprecated-Code/Artudito/.gitattributes b/Deprecated-Code/Artudito/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/Artudito/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/Artudito/.gitignore b/Deprecated-Code/Artudito/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/Artudito/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/Artudito/.project b/Deprecated-Code/Artudito/.project deleted file mode 100644 index 6ff263000..000000000 --- a/Deprecated-Code/Artudito/.project +++ /dev/null @@ -1,11 +0,0 @@ - - - AAArtudito-Trading-Bot - - - - - - - - diff --git a/Deprecated-Code/Artudito/AAArtudito-Trading-Bot.sln b/Deprecated-Code/Artudito/AAArtudito-Trading-Bot.sln deleted file mode 100644 index 0e3d52f62..000000000 --- a/Deprecated-Code/Artudito/AAArtudito-Trading-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "AAArtudito", "AAArtudito.njsproj", "{A54D4656-3DB8-407A-9333-E65115E994AB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A54D4656-3DB8-407A-9333-E65115E994AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A54D4656-3DB8-407A-9333-E65115E994AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A54D4656-3DB8-407A-9333-E65115E994AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A54D4656-3DB8-407A-9333-E65115E994AB}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/Artudito/AAArtudito.njsproj b/Deprecated-Code/Artudito/AAArtudito.njsproj deleted file mode 100644 index c845e44e4..000000000 --- a/Deprecated-Code/Artudito/AAArtudito.njsproj +++ /dev/null @@ -1,89 +0,0 @@ - - - - Debug - 2.0 - {a54d4656-3db8-407a-9333-e65115e994ab} - - ShowAllFiles - User.Bot.js - - - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - Debug|Any CPU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/Artudito/Artudito.png b/Deprecated-Code/Artudito/Artudito.png deleted file mode 100644 index 1a3a0aae5..000000000 Binary files a/Deprecated-Code/Artudito/Artudito.png and /dev/null differ diff --git a/Deprecated-Code/Artudito/LICENSE b/Deprecated-Code/Artudito/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/Artudito/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/Artudito/README.md b/Deprecated-Code/Artudito/README.md deleted file mode 100644 index 66be6dd69..000000000 --- a/Deprecated-Code/Artudito/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# I'm Artudito, a t-bot! -AKA a trading algobot running on the AAPlatform by Advanced Algos Ltd. - -### My Specialty -I work on the USDT-BTC market with a strategy based on linear regression curves. - -### Ideal for -Trading short-lived but established trends. - -### Details - -| **Name** | **Type** | **Version** | **Release Date** | **Current dataSet** | -|----------|----------|----------|----------|----------| -| Artudito |Trading | 1.0 | May 2018 | dataSet.V1 | - -# My Strategy - -### Markets -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC - -### Description - -I use the analysis performed by [AAMasters Gauss i-bot](https://github.com/AAMasters/AAGauss-Indicator-Bot) on recent historic prices in which he applies a [linear regression]( https://en.wikipedia.org/wiki/Linear_regression) to a set of price values in the 15, 30 and 60 minutes candles to obtain model linear regression curves. Based on those curves, I apply my own ruleset. - -#### Basic Rule Set - -* If the tilt of the linear regression curve points up on the 15, 30, and 60 minutes scale then I go long. -* If the tilt of the linear regression curve points down on the 15, 30, and 60 minutes scale then I go short. -* If the linear regression curve of the 15 and 30 minutes scale change direction, I exit. - -#### Examples -* The asset is trending up on the 15, 30 and 60 minutes scale. Then the 15 minutes curve turns down and the 30 minutes curve goes flat: I exit. -* The asset is trending down on all three indicators. Then the 15 minutes curve turns up and the 30 minutes curve turns flat or upwards: I enter. -* The tilt of the 15, 30 and 60 minutes curves is flat: I don't enter or exit. - -### Compatible Plotters -[AAMasters Plotters-Trading](https://github.com/AAMasters/Plotters-Trading) - -### Dependencies -* [AAMasters Bruce](https://github.com/AAMasters/AABruce-Indicator-Bot) -* [AAMasters Olivia](https://github.com/AAMasters/AAOlivia-Indicator-Bot) -* [AAMasters Gauss](https://github.com/AAMasters/AAGauss-Indicator-Bot) - -### Trading as a Service (TaaS) Fees -No fees. - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/Artudito/Trading-Process/User.Bot.js b/Deprecated-Code/Artudito/Trading-Process/User.Bot.js deleted file mode 100644 index a07b687ea..000000000 --- a/Deprecated-Code/Artudito/Trading-Process/User.Bot.js +++ /dev/null @@ -1,521 +0,0 @@ -exports.newUserBot = function newUserBot (bot, logger) { - /* - Creating a new instance from the platform of this bot: - - bot: An instance of the bot configuration - - logger: An instance of the platform logger that allows both: to save logs - on cloud execution and shows logs on the browser console on browser execution - */ - - // Variable used for logs, which will be passed to the logger instance - const MODULE_NAME = 'User Bot' - // Debug log level - const FULL_LOG = true - // Info log level - const LOG_INFO = true - - /* - The reference to the Trading Platform Advanced Algos Assistant that will - allow to: - dataDependencies: Retrieve all dependencies to other bots defined on the configuration - putPosition: Put a buy or sell position at the exchange (only limit orders at this point) - movePosition: Move an existing position - getPositions: Obtain all the positions existing on the exchange - getBalance: Obtain the total balance on the exchange known by the platform (at this point 0.001 BTC) - getAvailableBalance: Obtain the current available balance on the exchange known by the platform - getInvestment: Obtain initial investment known by the platform (at this point 0.001 BTC) - getProfits: Get current profits at this point in time - getCombinedProfits: Get current profits - getROI: Get current ROI - getMarketRate: Get current market rate - getTicker: Gets the current highest bid and lowest ask on the exchange - sendMessage: Put a visual message on the platform (different zoom levels [1-10] can be handled) - rememberThis: Store a string variable across executions by key value pairs - remindMeOf: Get a stored string value by key - sendEmail: Send an email during execution as notifications - */ - let assistant - - /* - This is a dependency example to other bots, in this case to the the - LRC Indicator. - */ - let gaussStorage - - /* - This objects returns two public functions that will be used to integrate - with the platform. - */ - let thisObject = { - initialize: initialize, - start: start - } - return thisObject - - /* - The initialize function must be implemented by all trading bots. - pAssistant: the instance of the platform which methods will allow to put getPositions - pGenes: This variable will be used during initialization to get the parameters - from the platform. At the moment it is not used but in future releases - it will allow to create different clones of the Algobot, to form an Algonet. - */ - function initialize (pAssistant, pGenes, callBackFunction) { - try { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] initialize -> Entering function.') } - - // Integration with platform logger, when running on cloud - logger.fileName = MODULE_NAME - - /* - We keep a local reference to the assistant that allows to put - positions on the exchange, created and managed by the platform - */ - assistant = pAssistant - - /* - On 'assistant.dataDependencies.dataSets' we will receive the data files - retrieved for those defined on the bot configuration. - Note that the key is: - TeamName-BotName-BotProductFolder-BotProcessName-BotDataSetVersion - - In this case, this particular bot will use Gauss indicator; other - indicators are available. You can use any indicator you want, - or create a new one if you should need to. - */ - let key = 'AAVikings-AAGauss-LRC-Points-Multi-Period-Daily-dataSet.V1' - gaussStorage = assistant.dataDependencies.dataSets.get(key) - - /* - Once Completed we must return the global.DEFAULT_OK_RESPONSE - */ - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] initialize -> onDone -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - /* - The start function is called by the platform for executing the bot every 1 minute - */ - function start (callBackFunction) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> Entering function.') } - - /* - This breakpoint will be called once the web platform reaches the graphical stop point. - You can find more details on how this works here: - https://advancedalgos.net/documentation-interface.shtml - */ - if (global.AT_BREAKPOINT === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> Plot Breakpoint Hit."); } // Place breakpoint in this line - } - - const market = global.MARKET - const CHANNEL_DOWN = -1 - const CHANNEL_UP = 1 - const NO_CHANNEL = 0 - - /* - Here we call the main function that will check buy, sell or move conditions. - */ - businessLogic(onDone) - - /* - This function will be called after we complete all validations and operations, - we make sure everything was ok before returning the control to the platform. - The platform will check this 3 situations: - global.DEFAULT_OK_RESPONSE: Proceed with normal execution - global.DEFAULT_RETRY_RESPONSE: Retry after 10 seconds - global.DEFAULT_FAIL_RESPONSE: Finish in failure state - (this allows us to check the logs and fix execution errors when they occur) - */ - function onDone (err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, '[INFO] start -> onDone -> Execution finished well. :-)') - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, '[ERROR] start -> onDone -> Retry Later. Requesting Execution Retry.') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, '[ERROR] start -> onDone -> Operation Failed. Aborting the process. err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> onDone -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - /* - We will check the direction of the channel and based on that create a buy or sell - position in the market. - Here is a detailed explanation of the bot: - https://github.com/AAVikings/AAArtudito-Trading-Bot/blob/master/README.md - */ - function businessLogic (callBack) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> Entering function.') } - - // Simulation for forcing buy or sell on each execution without checking the rules - let forceBuyAndSell = false - if(forceBuyAndSell){ - if (Math.random(1) <= 0.5){ - createBuyPosition(callBack); - }else{ - createSellPosition(callBack); - } - }else{ - // Here we really check the bot business logic - getChannelTilt(firstTiltCheck); - } - - function firstTiltCheck (err, channelTilt) { - try { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> firstTiltCheck -> Entering Function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> businessLogic -> firstTiltCheck -> err = ' + err.message) - callBack(global.DEFAULT_FAIL_RESPONSE) - } else { - if (channelTilt == 1) { - createBuyPosition(callBack) - } else if (channelTilt == -1) { - createSellPosition(callBack) - } else { - if (LOG_INFO === true) { logger.write(MODULE_NAME, "[INFO] start -> businessLogic -> firstTiltCheck -> Nothing to do, there isn't a buy or sell opportunity.") } - callBack(global.DEFAULT_OK_RESPONSE) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> businessLogic -> firstTiltCheck -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } - - /* - Here we will get the file from the indicator bot, that already has all values calculated. - This will provide more efficiency and allow other bots to consume the services as well. - */ - function getChannelTilt (callBack) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> getChannelTilt -> Entering function.') } - - let lrcPoint, previousLRCPoint - let queryDate = new Date(bot.processDatetime) - getLRCPointsFile(queryDate, onLRCPointsFileReceived) - - function onLRCPointsFileReceived (err, lrcPointsFile) { - try { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> getChannelTilt -> onLRCPointsFileReceived.') } - - let lastIndexLrcPointsFile = lrcPointsFile.length - 1 - let lastAvailableDateTime = lrcPointsFile[lastIndexLrcPointsFile][0] - - if (bot.processDatetime.valueOf() <= lastAvailableDateTime || !isExecutionToday()) { - for (let i = 0; i < lrcPointsFile.length; i++) { - if (bot.processDatetime.valueOf() >= lrcPointsFile[i][0] && bot.processDatetime.valueOf() < lrcPointsFile[i][1]) { - lrcPoint = { - begin: lrcPointsFile[i][0], - end: lrcPointsFile[i][1], - min: lrcPointsFile[i][2], - mid: lrcPointsFile[i][3], - max: lrcPointsFile[i][4] - } - - if (i >= 1) { - let previous = i - 1 - previousLRCPoint = { - begin: lrcPointsFile[previous][0], - end: lrcPointsFile[previous][1], - min: lrcPointsFile[previous][2], - mid: lrcPointsFile[previous][3], - max: lrcPointsFile[previous][4] - } - - applyBotRules(lrcPoint, previousLRCPoint, callBack) - } else { - queryDate.setDate(queryDate.getDate() - 1) - getLRCPointsFile(queryDate, onPreviousLRCPointsFileReceived) - } - return - } - } - - logger.write(MODULE_NAME, '[ERROR] start -> businessLogic -> getChannelTilt -> onLRCPointsFileReceived. The expected LRC Point was not found: ' + bot.processDatetime.valueOf()) - callBack(global.DEFAULT_FAIL_RESPONSE) - } else { - // Running live we will process last available LRCPoint only if it's delayed 25 minutes top - let maxTolerance = 25 * 60 * 1000 - if (bot.processDatetime.valueOf() <= (lastAvailableDateTime + maxTolerance)) { - lrcPoint = { - begin: lrcPointsFile[lastIndexLrcPointsFile][0], - end: lrcPointsFile[lastIndexLrcPointsFile][1], - min: lrcPointsFile[lastIndexLrcPointsFile][2], - mid: lrcPointsFile[lastIndexLrcPointsFile][3], - max: lrcPointsFile[lastIndexLrcPointsFile][4] - } - - if (lastIndexLrcPointsFile >= 1) { - let previous = lastIndexLrcPointsFile - 1 - previousLRCPoint = { - begin: lrcPointsFile[previous][0], - end: lrcPointsFile[previous][1], - min: lrcPointsFile[previous][2], - mid: lrcPointsFile[previous][3], - max: lrcPointsFile[previous][4] - } - - applyBotRules(lrcPoint, previousLRCPoint, callBack) - } else { - queryDate.setDate(queryDate.getDate() - 1) - getLRCPointsFile(queryDate, onPreviousLRCPointsFileReceived) - } - } else { - if (LOG_INFO === true) logger.write(MODULE_NAME, '[WARN] start -> getChannelTilt -> onLRCPointsFileReceived. Available candle older than 5 minutes. Skipping execution.') - - callBack(global.DEFAULT_OK_RESPONSE, NO_CHANNEL) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> getChannelTilt -> onLRCPointsFileReceived -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - /* - Depending on the time requested, the necessary information could be on the - file from the day before. - */ - function onPreviousLRCPointsFileReceived (err, lrcPointsFile) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> getChannelTilt -> onLRCPointsFileReceived.') } - - let previous = lrcPointsFile.length - 1 - previousLRCPoint = { - begin: lrcPointsFile[previous][0], - end: lrcPointsFile[previous][1], - min: lrcPointsFile[previous][2], - mid: lrcPointsFile[previous][3], - max: lrcPointsFile[previous][4] - } - - applyBotRules(lrcPoint, previousLRCPoint, callBack) - } - } - - /* - We have all the information needed to proceed to applying all the rules. - */ - function applyBotRules (lrcPoint, previousLRCPoint, callBack) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> applyBotRules -> Entering Function.') } - - let channelTilt = NO_CHANNEL - let ruleApplied = '' - - if (lrcPoint.max < lrcPoint.mid && lrcPoint.min > lrcPoint.mid && lrcPoint.mid < lrcPoint.min) { - if (lrcPoint.min > previousLRCPoint.min && lrcPoint.mid > previousLRCPoint.mid && lrcPoint.max > previousLRCPoint.max) { - // The channel points UP - channelTilt = CHANNEL_UP - ruleApplied += 'Rule_1.' - } - } - - if (lrcPoint.min < lrcPoint.mid && lrcPoint.max > lrcPoint.mid && lrcPoint.mid < lrcPoint.max) { - if (lrcPoint.min < previousLRCPoint.min && lrcPoint.mid < previousLRCPoint.mid && lrcPoint.max < previousLRCPoint.max) { - // The channel points DOWN - channelTilt = CHANNEL_DOWN - ruleApplied += 'Rule_2.' - } - } - - if (lrcPoint.min < previousLRCPoint.min && lrcPoint.mid <= previousLRCPoint.mid) { - // 15 AND 30 changed direction from up to down - channelTilt = CHANNEL_DOWN - ruleApplied += 'Rule_3a.' - } - - if (lrcPoint.min > previousLRCPoint.min && lrcPoint.mid >= previousLRCPoint.mid) { - // 15 AND 30 changed direction from down to up - channelTilt = CHANNEL_UP - ruleApplied += 'Rule_3b.' - } - - let logMessage = bot.processDatetime.toISOString() + '. Rule: ' + ruleApplied + '. Tilt: ' + channelTilt + ' (' + Number(lrcPoint.min).toLocaleString() + '|' + Number(lrcPoint.mid).toLocaleString() + '|' + Number(lrcPoint.max).toLocaleString() + ')' - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> getChannelTilt -> applyBotRules -> Results: ' + logMessage) } - - callBack(global.DEFAULT_OK_RESPONSE, channelTilt) - } - - /* - Here we will get the file from the indicator bot, that already has all values calculated. - This will provide more efficiency and allow other bots to consume the services as well. - */ - function getLRCPointsFile (dateTime, callback) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> getLRCPointsFile -> Entering function.') } - - let datePath = dateTime.getUTCFullYear() + '/' + pad(dateTime.getUTCMonth() + 1, 2) + '/' + pad(dateTime.getUTCDate(), 2) - let filePath = 'LRC-Points/Multi-Period-Daily/30-min/' + datePath - let fileName = market.assetA + '_' + market.assetB + '.json' - - /* - bot.botCache: allows us to keep a map (key value pairs) between executions, - so we don't need to go to the storage to retrieve this value. - If the value already exist on the cache we will get it from there, - otherwise it will be retrieved from the bot storage. - */ - if (bot.startMode === 'Backtest' && bot.botCache.has(filePath)) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> getLRCPointsFile -> Getting the file from local cache.') } - - cleanUpCache(bot.botCache, 'LRC-Points/Multi-Period-Daily/30-min', dateTime) - callback(global.DEFAULT_OK_RESPONSE, bot.botCache.get(filePath)) - } else { - /* - The structure of the indicator files and the retrieved file itself - is explained on the indicator bot readme file. - */ - gaussStorage.getTextFile(filePath, fileName, onFileReceived) - } - - function onFileReceived (err, text) { - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getChannelTilt -> getLRCPointsFile -> onFileReceived > Entering Function.') } - - let lrcPointsFile = JSON.parse(text) - bot.botCache.set(filePath, lrcPointsFile) - callback(global.DEFAULT_OK_RESPONSE, lrcPointsFile) - } else { - logger.write(MODULE_NAME, '[ERROR] start -> getChannelTilt -> getLRCPointsFile -> onFileReceived -> Failed to get the file. Will abort the process and request a retry.') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - } - - function cleanUpCache (fileCache, path, dateTimeCacheFile) { - let date = new Date(dateTimeCacheFile) - date.setDate(date.getDate() - 2) - let datePath = date.getUTCFullYear() + '/' + pad(date.getUTCMonth() + 1, 2) + '/' + pad(date.getUTCDate(), 2) - let cachePosition = path + '/' + datePath - - // Remove and go back one day - if (fileCache.has(cachePosition)) { - fileCache.delete(cachePosition) - date.setDate(date.getDate() - 1) - cleanUpCache(fileCache, date) - } - } - } - - function createBuyPosition (callBack) { - try { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createBuyPosition -> Entering function.') } - - // We get the current positions we have at the exchange - let positions = assistant.getPositions() - let assetABalance = assistant.getAvailableBalance().assetA - let currentRate = assistant.getTicker().ask // *.9 - let amountA = assistant.getAvailableBalance().assetA - let amountB = Number((amountA / currentRate).toFixed(8)) - - if (positions.length > 0 && positions[0].type === 'buy' && positions[0].status !== 'executed') { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createBuyPosition -> Moving an existing BUY position to a new price: $' + Number(currentRate).toLocaleString()) } - - let message = 'Moving an existing buy position to a new price: $' + Number(currentRate).toLocaleString() - message += '. Combined ROI on current execution: ' + getCombinedProfit() + '%. ' - assistant.sendMessage(6, 'Moving Position', message) - message = bot.processDatetime.toISOString() + ' - ' + message - assistant.sendEmail('Alerts', message, bot.emailSubscriptions) - assistant.movePosition(positions[0], currentRate, callBack) - } else if (assetABalance > 0) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createBuyPosition -> Artuditu put a new BUY position at price: $' + Number(currentRate).toLocaleString()) } - - let message = 'Creating a new buy position. Price: $' + Number(currentRate).toLocaleString() - message += '. Combined ROI on current execution: ' + getCombinedProfit() + '%. ' - assistant.sendMessage(7, 'Buying', message) - message = bot.processDatetime.toISOString() + ' - ' + message - assistant.sendEmail('Alerts', message, bot.emailSubscriptions) - assistant.putPosition('buy', currentRate, amountA, amountB, callBack) - } else { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createBuyPosition -> Not enough available balance to buy.') } - - callBack(global.DEFAULT_OK_RESPONSE) - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> businessLogic -> createBuyPosition -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function createSellPosition (callBack) { - try{ - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createSellPosition -> Entering function.') } - - // We get the current positions we have at the exchange - let positions = assistant.getPositions() - let assetBBalance = assistant.getAvailableBalance().assetB - let currentRate = assistant.getTicker().bid // *1.1 - let amountB = assistant.getAvailableBalance().assetB - let amountA = amountB * currentRate - - if (positions.length > 0 && positions[0].type === 'sell' && positions[0].status !== 'executed') { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createSellPosition -> Artuditu is moving an existing SELL position to a new price: $' + Number(currentRate).toLocaleString()) } - - let message = 'Moving an existing sell position to a new price: $' + Number(currentRate).toLocaleString() - message += '. Combined ROI on current execution: ' + getCombinedProfit() + '%. ' - assistant.sendMessage(6, 'Moving Position', message) - message = bot.processDatetime.toISOString() + ' - ' + message - assistant.sendEmail('Alerts', message, bot.emailSubscriptions) - assistant.movePosition(positions[0], currentRate, callBack) - } else if (assetBBalance > 0) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createSellPosition -> Artuditu put a new SELL position at price: $' + Number(currentRate).toLocaleString()) } - - let message = 'Creating a new sell position. Price: $' + Number(currentRate).toLocaleString() - message += '. Combined ROI on current execution: ' + getCombinedProfit() + '%. ' - assistant.sendMessage(7, 'Selling', message) - message = bot.processDatetime.toISOString() + ' - ' + message - assistant.sendEmail('Alerts', message, bot.emailSubscriptions) - assistant.putPosition('sell', currentRate, amountA, amountB, callBack) - } else { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] start -> businessLogic -> createSellPosition -> There is not enough available balance to sell.') } - - callBack(global.DEFAULT_OK_RESPONSE) - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> businessLogic -> createBuyPosition -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function pad (str, max) { - str = str.toString() - return str.length < max ? pad('0' + str, max) : str - } - - function isExecutionToday () { - let localDate = new Date() - let today = new Date(Date.UTC( - localDate.getUTCFullYear(), - localDate.getUTCMonth(), - localDate.getUTCDate())) - - return (today.getUTCFullYear() === bot.processDatetime.getUTCFullYear() - && today.getUTCMonth() === bot.processDatetime.getUTCMonth() - && today.getUTCDate() === bot.processDatetime.getUTCDate()) - } - - function getCombinedProfit () { - if (assistant.getCombinedProfits() !== undefined) { - if (assistant.getCombinedProfits().assetA > 0) { - return Number(assistant.getCombinedProfits().assetA).toLocaleString() - } else { - return Number(assistant.getCombinedProfits().assetB).toLocaleString() - } - } - } - } -} diff --git a/Deprecated-Code/Artudito/package-lock.json b/Deprecated-Code/Artudito/package-lock.json deleted file mode 100644 index 4c1670f94..000000000 --- a/Deprecated-Code/Artudito/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "AAArtudito", - "version": "1.0.0", - "lockfileVersion": 1 -} diff --git a/Deprecated-Code/Artudito/package.json b/Deprecated-Code/Artudito/package.json deleted file mode 100644 index a3a80b8a2..000000000 --- a/Deprecated-Code/Artudito/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "AAArtudito", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Matias-Benitez", - "license": "ISC", - "dependencies": {} -} diff --git a/Deprecated-Code/Artudito/this.bot.config.json b/Deprecated-Code/Artudito/this.bot.config.json deleted file mode 100644 index a86fd9f84..000000000 --- a/Deprecated-Code/Artudito/this.bot.config.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "displayName": "Artudito", - "codeName": "AAArtudito", - "type": "Trading", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "AAVikings", - "profilePicture": "Artudito.png", - "dataSetVersion": "dataSet.V1", - "genes": [ - { - "name": "stopLoss", - "description": "This represent the percentage of the stop loss configuration. It could be from 0 (disabled) to 100.", - "lowerLimit": 0, - "upperLimit": 5 - } - ], - "processes": [ - { - "name": "Trading-Process", - "description": "Simple trading strategy to be used as a template.", - "startMode": { - "live": { - "run": "true", - "resumeExecution": "false" - }, - "backtest": { - "run": "false", - "beginDatetime": "2018-04-11T00:00:00.000Z", - "endDatetime": "2018-06-17T23:59:59.000Z", - "waitTime": 1 - }, - "competition": { - "run": "false", - "beginDatetime": "2018-07-04T00:00:00.000Z", - "endDatetime": "2018-07-06T23:59:59.000Z", - "resumeExecution": "true" - } - }, - "normalWaitTime": 10000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "timePeriod": 1800000, - "statusDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAVikings", - "bot": "AAArtudito", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Trading-Process", - "dataSetVersion": "dataSet.V1" - } - ], - "dataDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "LRC-Points", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "LRC-Points", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AABruce", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "One-Min" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSet": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - } - ] - } - ], - "products": [ - { - "codeName": "Live Trading History", - "displayName": "Live Trading History", - "shortDisplayName": "Live", - "description": "General information about Artudito trading history.", - "storageAccount": "aaartudito", - "dataSets": [ - { - "codeName": "Oficial History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Live.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - }, - { - "codeName": "Backtest Trading History", - "displayName": "Backtest Trading History", - "shortDisplayName": "Backtest", - "description": "General information about Artudito backtest trading history.", - "storageAccount": "aaartudito", - "dataSets": [ - { - "codeName": "Backtest History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Backtest.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - }, - { - "codeName": "Competition Trading History", - "displayName": "Competition Trading History", - "shortDisplayName": "Competition", - "description": "General information about Artudito competition trading history.", - "storageAccount": "aaartudito", - "dataSets": [ - { - "codeName": "Competition History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Competition.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - } - ], - "emailSubscriptions": "vikings.alerts@gmail.com" -} \ No newline at end of file diff --git a/Deprecated-Code/BollingerBands/.gitattributes b/Deprecated-Code/BollingerBands/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/BollingerBands/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/BollingerBands/.gitignore b/Deprecated-Code/BollingerBands/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/BollingerBands/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/BollingerBands/Bollinger-Bands-Indicator-Bot.sln b/Deprecated-Code/BollingerBands/Bollinger-Bands-Indicator-Bot.sln deleted file mode 100644 index da30e179e..000000000 --- a/Deprecated-Code/BollingerBands/Bollinger-Bands-Indicator-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AA2901BC-8F81-40F0-A402-5CA79A3F22AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/BollingerBands/Commons.js b/Deprecated-Code/BollingerBands/Commons.js deleted file mode 100644 index f34bae6c7..000000000 --- a/Deprecated-Code/BollingerBands/Commons.js +++ /dev/null @@ -1 +0,0 @@ -// Nothing here to run \ No newline at end of file diff --git a/Deprecated-Code/BollingerBands/LICENSE b/Deprecated-Code/BollingerBands/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/BollingerBands/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/BollingerBands/Multi-Period-Daily/User.Bot.js b/Deprecated-Code/BollingerBands/Multi-Period-Daily/User.Bot.js deleted file mode 100644 index 3b9e1564d..000000000 --- a/Deprecated-Code/BollingerBands/Multi-Period-Daily/User.Bot.js +++ /dev/null @@ -1,891 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const INTENSIVE_LOG = false; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const BOLLINGER_BANDS_FOLDER_NAME = "Bollinger-Bands"; - const PERCENTAGE_BANDWIDTH_FOLDER_NAME = "Percentage-Bandwidth"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - let statusDependencies; - let beginingOfMarket - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - - This process is going to do the following: - - Read the candles from Candles Volumes and produce daily files with bollinger bands. - - */ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = bot.market; - - /* Context Variables */ - - let contextVariables = { - lastBandFile: undefined, // Datetime of the last file files sucessfully produced by this process. - firstTradeFile: undefined, // Datetime of the first trade file in the whole market history. - maxBandFile: undefined // Datetime of the last file available to be used as an input of this process. - }; - - let previousDay; // Holds the date of the previous day relative to the processing date. - let processDate; // Holds the processing date. - - getContextVariables(); - - function getContextVariables() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Entering function."); } - - let thisReport; - let reportKey; - let statusReport; - - /* We look first for Exchange Raw Data in order to get when the market starts. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet."); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.firstTradeFile = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - - /* Second, we get the report from Candles Volumes, to know when the marted ends. */ - - reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Daily" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.maxBandFile = new Date(thisReport.lastFile.valueOf()); - - /* Finally we get our own Status Report. */ - - reportKey = "Masters" + "-" + "Bollinger-Bands" + "-" + "Multi-Period-Daily" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile !== undefined) { - - beginingOfMarket = new Date(thisReport.beginingOfMarket); - - if (beginingOfMarket.valueOf() !== contextVariables.firstTradeFile.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastBandFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastBandFile = new Date(contextVariables.lastBandFile.valueOf() + ONE_DAY_IN_MILISECONDS); - - buildBands(); - return; - } - - contextVariables.lastBandFile = new Date(thisReport.lastFile); - - /* - The bands objects needs to be calculated over more than one day in some situations. In order to simplify the calculations we will - always load the last 2 days of candles, and run the calculations on that array. - - 1. So first we will load the candles file of processDay -1. - 2. Secondly we will load the candles file of processDay. - - After reading these two files we will add all candles to a unique array. - */ - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> thisReport.lastFile !== undefined"); } - - buildBands(); - return; - - } else { - - /* - In the case when there is no status report, we take the date of the file with the first trades as the begining of the market. Then we will - go one day further in time, so that the previous day does fine a file at the begining of the market. - */ - - contextVariables.lastBandFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastBandFile = new Date(contextVariables.lastBandFile.valueOf() + ONE_DAY_IN_MILISECONDS); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> thisReport.lastFile === undefined"); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> contextVariables.lastBandFile = " + contextVariables.lastBandFile); } - - buildBands(); - return; - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBands() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> Entering function."); } - - let n; - processDate = new Date(contextVariables.lastBandFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well when we advance time at the begining of the loop. - let fromDate = new Date(processDate.valueOf()) - let lastDate = new Date() - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> processDate = " + processDate); } - - advanceTime(); - - function advanceTime() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> advanceTime -> Entering function."); } - - processDate = new Date(processDate.valueOf() + ONE_DAY_IN_MILISECONDS); - previousDay = new Date(processDate.valueOf() - ONE_DAY_IN_MILISECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> advanceTime -> processDate = " + processDate); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> advanceTime -> previousDay = " + previousDay); } - - /* Validation that we are not going past the head of the market. */ - - if (processDate.valueOf() > contextVariables.maxBandFile.valueOf()) { - - const logText = "Head of the market found @ " + previousDay.getUTCFullYear() + "/" + (previousDay.getUTCMonth() + 1) + "/" + previousDay.getUTCDate() + "."; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> advanceTime -> " + logText); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - - } - - /* Telling the world we are alive and doing well */ - let currentDateString = processDate.getUTCFullYear() + '-' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processDate.getUTCDate(), 2); - let currentDate = new Date(processDate) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(currentDateString, percentage) - - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage); - } - periodsLoop(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> advanceTime -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function periodsLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> periodsLoop -> Entering function."); } - - /* - - We will iterate through all posible timeFrames. - - */ - - n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function loopBody() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> Entering function."); } - - const timeFrame = global.dailyFilePeriods[n][1]; - - let candles = []; // Here we will put all the candles of the 2 files read. - - let previousDayFile; - let processDayFile; - - getPreviousDayFile(); - - function getPreviousDayFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getPreviousDayFile -> Entering function."); } - - let dateForPath = previousDay.getUTCFullYear() + '/' + utilities.pad(previousDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(previousDay.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Candles-Volumes" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getPreviousDayFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getPreviousDayFile -> onCurrentDayFileReceived -> text = " + text); } - - previousDayFile = JSON.parse(text); - getProcessDayFile() - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getPreviousDayFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getPreviousDayFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getPreviousDayFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getPreviousDayFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function getProcessDayFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getProcessDayFile -> Entering function."); } - - let dateForPath = processDate.getUTCFullYear() + '/' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(processDate.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Candles-Volumes" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getProcessDayFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> getProcessDayFile -> onCurrentDayFileReceived -> text = " + text); } - - processDayFile = JSON.parse(text); - buildBands(); - - } catch (err) { - - if (processDate.valueOf() > contextVariables.maxBandFile.valueOf()) { - - processDayFile = []; // we are past the head of the market, then no worries if this file is non existent. - buildBands(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getProcessDayFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getProcessDayFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getProcessDayFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> getProcessDayFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBands() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> buildBands -> Entering function."); } - - addCandlesToSingleArray(previousDayFile); - addCandlesToSingleArray(processDayFile); - calculateBands(); - - function addCandlesToSingleArray(candlesFile) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> buildBands -> addCandlesToSingleArray -> Entering function."); } - - for (let i = 0; i < candlesFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = candlesFile[i][0]; - candle.max = candlesFile[i][1]; - - candle.open = candlesFile[i][2]; - candle.close = candlesFile[i][3]; - - candle.begin = candlesFile[i][4]; - candle.end = candlesFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'down'; } - if (candle.open < candle.close) { candle.direction = 'up'; } - if (candle.open === candle.close) { candle.direction = 'side'; } - - candles.push(candle); - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> buildBands -> addCandlesToSingleArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> buildBands -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - function calculateBands() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> calculateBands -> Entering function."); } - - let bandsArray = []; - let pBArray = []; - let numberOfPeriodsBB = 20; - let numberOfStandardDeviations = 2; - let numberOfPeriodsPB = 10; - - /* Building bands */ - - let band; - - for (let i = numberOfPeriodsBB - 1; i < candles.length; i++) { // Go through all the candles to generate a band segment for each of them. - - /* Calculating the bollinger bands. */ - - let movingAverage = 0; - for (let j = i - numberOfPeriodsBB + 1; j < i + 1; j++) { // go through the last n candles to calculate the moving average. - movingAverage = movingAverage + candles[j].close; - } - movingAverage = movingAverage / numberOfPeriodsBB; - - let standardDeviation = 0; - for (let j = i - numberOfPeriodsBB + 1; j < i + 1; j++) { // go through the last n candles to calculate the standard deviation. - standardDeviation = standardDeviation + Math.pow(candles[j].close - movingAverage, 2); - } - standardDeviation = standardDeviation / numberOfPeriodsBB; - standardDeviation = Math.sqrt(standardDeviation); - if (standardDeviation === 0) { standardDeviation = 0.000000001; } // This is to prevent a division by zero later. - - band = { - begin: candles[i].begin, - end: candles[i].end, - movingAverage: movingAverage, - standardDeviation: standardDeviation, - deviation: standardDeviation * numberOfStandardDeviations - }; - - /* Will only add to the array the bands of the current day */ - - if (band.begin >= processDate.valueOf()) { bandsArray.push(band); } - - /* Calculating %B */ - - let lowerBB; - let upperBB; - - lowerBB = band.movingAverage - band.deviation; - upperBB = band.movingAverage + band.deviation; - - let value = (candles[i].close - lowerBB) / (upperBB - lowerBB) * 100; - - /* Moving Average Calculation */ - - let numberOfPreviousPeriods; - let currentPosition = pBArray.length; - - if (currentPosition < numberOfPeriodsPB) { // Avoinding to get into negative array indexes - numberOfPreviousPeriods = currentPosition; - } else { - numberOfPreviousPeriods = numberOfPeriodsPB; - } - - movingAverage = 0; - for (let j = currentPosition - numberOfPreviousPeriods; j < currentPosition; j++) { // go through the last numberOfPeriodsPBs to calculate the moving average. - movingAverage = movingAverage + pBArray[j].value; - } - movingAverage = movingAverage + value; - movingAverage = movingAverage / (numberOfPreviousPeriods + 1); - - let bandwidth = (upperBB - lowerBB) / band.movingAverage; - - let percentageBandwidth = { - begin: candles[i].begin, - end: candles[i].end, - value: value, - movingAverage: movingAverage, - bandwidth: bandwidth - }; - - /* Will only add to the array the pBs of the current day */ - - if (percentageBandwidth.begin >= processDate.valueOf()) { pBArray.push(percentageBandwidth); } - } - - writeBandsFile(bandsArray, pBArray); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> calculateBands -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - function writeBandsFile(pBands, pPB) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writeBandsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < pBands.length; i++) { - - let band = pBands[i]; - - fileContent = fileContent + separator + '[' + - band.begin + "," + - band.end + "," + - band.movingAverage + "," + - band.standardDeviation + "," + - band.deviation + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = processDate.getUTCFullYear() + '/' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(processDate.getUTCDate(), 2); - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + BOLLINGER_BANDS_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writeBandsFile -> onFileCreated -> Entering function."); } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writeBandsFile -> onFileCreated -> Content written = " + fileContent); - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> writeBandBandsFile -> writeBandsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - const logText = "[WARN] Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writeBandsFile -> onFileCreated -> " + logText); } - - writePBFile(pPB); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> writeBandBandsFile -> writeBandsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> writeBandBandsFile -> writeBandsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writePBFile(pPercentageBandwidths) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writePBFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < pPercentageBandwidths.length; i++) { - - let pB = pPercentageBandwidths[i]; - - fileContent = fileContent + separator + '[' + - pB.begin + "," + - pB.end + "," + - pB.value + "," + - pB.movingAverage + "," + - pB.bandwidth + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = processDate.getUTCFullYear() + '/' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(processDate.getUTCDate(), 2); - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + PERCENTAGE_BANDWIDTH_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writePBFile -> onFileCreated -> Entering function."); } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writePBFile -> onFileCreated -> Content written = " + fileContent); - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> writeBandBandsFile -> writePBFile -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - const logText = "[WARN] Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> writeBandBandsFile -> writePBFile -> onFileCreated -> " + logText); } - - controlLoop(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> writeBandBandsFile -> writePBFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> writeBandBandsFile -> writePBFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> loopBody -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function controlLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> controlLoop -> Entering function."); } - - n++; - - if (n < global.dailyFilePeriods.length) { - - loopBody(); - - } else { - - n = 0; - - writeDataRanges(onWritten); - - function onWritten(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> controlLoop -> onWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> controlLoop -> onWritten -> err = " + err.stack); - callBackFunction(err); - return; - } - - writeStatusReport(processDate, advanceTime); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> controlLoop -> onWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> controlLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> err.message = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeDataRanges(callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - writeDataRange(contextVariables.firstTradeFile, processDate, BOLLINGER_BANDS_FOLDER_NAME, onBandsBandsDataRangeWritten); - - function onBandsBandsDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onBandsBandsDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - writeDataRange(contextVariables.firstTradeFile, processDate, PERCENTAGE_BANDWIDTH_FOLDER_NAME, onPercentageBandwidthDataRangeWritten); - - function onPercentageBandwidthDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onBandsBandsDataRangeWritten -> onPercentageBandwidthDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - callBack(global.DEFAULT_OK_RESPONSE); - - } - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRanges -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - - } - - function writeDataRange(pBegin, pEnd, pProductFolder, callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> Entering function."); } - - let dataRange = { - begin: pBegin.valueOf(), - end: pEnd.valueOf() + ONE_DAY_IN_MILISECONDS - }; - - let fileContent = JSON.stringify(dataRange); - - let fileName = 'Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + pProductFolder + "/" + bot.process; - - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> onFileCreated -> err = " + err.stack); - callBack(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Content written = " + fileContent); - } - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(lastFileDate, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastFileDate = " + lastFileDate); } - - try { - - let reportKey = "Masters" + "-" + "Bollinger-Bands" + "-" + "Multi-Period-Daily" - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.file.lastFile = lastFileDate; - thisReport.file.beginingOfMarket = beginingOfMarket.toUTCString() - thisReport.save(callBack); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err.message = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/BollingerBands/Multi-Period-Market/User.Bot.js b/Deprecated-Code/BollingerBands/Multi-Period-Market/User.Bot.js deleted file mode 100644 index 0de295c7a..000000000 --- a/Deprecated-Code/BollingerBands/Multi-Period-Market/User.Bot.js +++ /dev/null @@ -1,495 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const BOLLINGER_BANDS_FOLDER_NAME = "Bollinger-Bands"; - const PERCENTAGE_BANDWIDTH_FOLDER_NAME = "Percentage-Bandwidth"; - - thisObject = { - initialize: initialize, - start: start - }; - - let statusDependencies; - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - - This process is going to do the following: - - Read the candles from Candles Volumes and produce the bollinger bands out of them. - - */ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = bot.market; - - buildBands(); - - function buildBands() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> Entering function."); } - - try { - - let n; - - periodsLoop(); - - function periodsLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> periodsLoop -> Entering function."); } - - /* - - We will iterate through all posible periods. - - */ - - n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> periodsLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function loopBody() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> Entering function."); } - - const outputPeriod = global.marketFilesPeriods[n][0]; - const timeFrame = global.marketFilesPeriods[n][1]; - - nextCandleFile(); - - function nextCandleFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> Entering function."); } - - let fileName = "Data.json"; - - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Candles-Volumes" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> text = " + text); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - return; - - } - - let marketFile = JSON.parse(text); - - let candles = []; - - buildCandles(); - - function buildCandles() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> buildCandles -> Entering function."); } - - try { - - for (let i = 0; i < marketFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = marketFile[i][0]; - candle.max = marketFile[i][1]; - - candle.open = marketFile[i][2]; - candle.close = marketFile[i][3]; - - candle.begin = marketFile[i][4]; - candle.end = marketFile[i][5]; - - candles.push(candle); - - } - - buildBands(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBands() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> buildBands -> Entering function."); } - - let bandsArray = []; - let pBArray = []; - let numberOfPeriodsBB = 20; - let numberOfStandardDeviations = 2; - let numberOfPeriodsPB = 5; - - /* Building bands */ - - let band; - - for (let i = numberOfPeriodsBB - 1; i < candles.length; i++) { // Go through all the candles to generate a band segment for each of them. - - let movingAverage = 0; - for (let j = i - numberOfPeriodsBB + 1; j < i + 1; j++) { // go through the last numberOfPeriodsBB candles to calculate the moving average. - movingAverage = movingAverage + candles[j].close; - } - movingAverage = movingAverage / numberOfPeriodsBB; - - let standardDeviation = 0; - for (let j = i - numberOfPeriodsBB + 1; j < i + 1; j++) { // go through the last numberOfPeriodsBB candles to calculate the standard deviation. - standardDeviation = standardDeviation + Math.pow (candles[j].close - movingAverage, 2); - } - standardDeviation = standardDeviation / numberOfPeriodsBB; - standardDeviation = Math.sqrt(standardDeviation); - if (standardDeviation === 0) { standardDeviation = 0.000000001; } // This is to prevent a division by zero later. - - band = { - begin: candles[i].begin, - end: candles[i].end, - movingAverage: movingAverage, - standardDeviation: standardDeviation, - deviation: standardDeviation * numberOfStandardDeviations - }; - - bandsArray.push(band); - - /* Calculating %B */ - - let lowerBB; - let upperBB; - - lowerBB = band.movingAverage - band.deviation; - upperBB = band.movingAverage + band.deviation; - - let value = (candles[i].close - lowerBB) / (upperBB - lowerBB) * 100; - - /* Moving Average Calculation */ - - let numberOfPreviousPeriods; - let currentPosition = pBArray.length; - - if (currentPosition < numberOfPeriodsPB) { // Avoinding to get into negative array indexes - numberOfPreviousPeriods = currentPosition; - } else { - numberOfPreviousPeriods = numberOfPeriodsPB; - } - - movingAverage = 0; - for (let j = currentPosition - numberOfPreviousPeriods; j < currentPosition; j++) { // go through the last numberOfPeriodsPBs to calculate the moving average. - movingAverage = movingAverage + pBArray[j].value; - } - movingAverage = movingAverage + value; - movingAverage = movingAverage / (numberOfPreviousPeriods + 1); - - let bandwidth = (upperBB- lowerBB) / band.movingAverage; - - let percentageBandwidth = { - begin: candles[i].begin, - end: candles[i].end, - value: value, - movingAverage: movingAverage, - bandwidth: bandwidth - }; - - pBArray.push(percentageBandwidth); - } - - writeBandsFile(bandsArray, pBArray); - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> buildBands -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeBandsFile(pBands, pPB) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < pBands.length; i++) { - - let band = pBands[i]; - - fileContent = fileContent + separator + '[' + - band.begin + "," + - band.end + "," + - band.movingAverage + "," + - band.standardDeviation + "," + - band.deviation + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + BOLLINGER_BANDS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - - callBackFunction(err); - return; - - } - - writePBFile(pPB); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writeBandsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - function writePBFile(pPercentageBandwidths) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < pPercentageBandwidths.length; i++) { - - let pB = pPercentageBandwidths[i]; - - fileContent = fileContent + separator + '[' + - pB.begin + "," + - pB.end + "," + - pB.value + "," + - pB.movingAverage + "," + - pB.bandwidth + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + PERCENTAGE_BANDWIDTH_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - - callBackFunction(err); - return; - - } - - controlLoop(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> writePBFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> nextCandleFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> loopBody -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function controlLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildBands -> controlLoop -> Entering function."); } - - n++; - - if (n < global.marketFilesPeriods.length) { - - loopBody(); - - } else { - - writeStatusReport(callBackFunction); - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> controlLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildBands -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - - try { - - let reportKey = "Masters" + "-" + "Bollinger-Bands" + "-" + "Multi-Period-Market" - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.save(callBack); - - if (global.areEqualDates(bot.processDatetime, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, bot.processDatetime); - } - - /* Telling the world we are alive and doing well */ - let currentDateString = bot.processDatetime.getUTCFullYear() + '-' + utilities.pad(bot.processDatetime.getUTCMonth() + 1, 2) + '-' + utilities.pad(bot.processDatetime.getUTCDate(), 2); - let currentDate = new Date(bot.processDatetime) - let lastDate = new Date() - bot.processHeartBeat(currentDateString, global.getPercentage(currentDate, currentDate, lastDate)) - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/BollingerBands/Project.njsproj b/Deprecated-Code/BollingerBands/Project.njsproj deleted file mode 100644 index 4cab6c556..000000000 --- a/Deprecated-Code/BollingerBands/Project.njsproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - 2.0 - {aa2901bc-8f81-40f0-a402-5ca79a3f22ad} - - ShowAllFiles - - - c:\users\luis\source\repos\AAOlivia\Multi-Period-Market - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/BollingerBands/Project.njsproj.user b/Deprecated-Code/BollingerBands/Project.njsproj.user deleted file mode 100644 index db8622989..000000000 --- a/Deprecated-Code/BollingerBands/Project.njsproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - Debug|Any CPU - - \ No newline at end of file diff --git a/Deprecated-Code/BollingerBands/README.md b/Deprecated-Code/BollingerBands/README.md deleted file mode 100644 index 9c6c59fe1..000000000 --- a/Deprecated-Code/BollingerBands/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# I'm Bollinger Bands, an AA i-Bot! - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/BollingerBands/package.json b/Deprecated-Code/BollingerBands/package.json deleted file mode 100644 index 11cc6a7f1..000000000 --- a/Deprecated-Code/BollingerBands/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AAToma", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": { - } -} diff --git a/Deprecated-Code/BollingerBands/this.bot.config.json b/Deprecated-Code/BollingerBands/this.bot.config.json deleted file mode 100644 index 547ac0a0e..000000000 --- a/Deprecated-Code/BollingerBands/this.bot.config.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "displayName": "Bollinger Bands", - "codeName": "Bollinger-Bands", - "type": "Indicator Bot", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "dataMine": "Masters", - "profilePicture": "Bollinger Bands.png", - "processes": [ - { - "name": "Multi-Period-Market", - "description": "Produces a single file for each Time Frame covering all the market.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Bollinger-Bands", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Percentage-Bandwidth", - "dataSet": "Multi-Period-Market" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Bollinger-Bands", - "process": "Multi-Period-Market" - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "process": "Multi-Period-Market", - "waitUntilNextUpdate": true - } - ] - }, - { - "name": "Multi-Period-Daily", - "description": "Produces a Daily File at each Time Frame.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Bollinger-Bands", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Percentage-Bandwidth", - "dataSet": "Multi-Period-Daily" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-Trades" - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "process": "Multi-Period-Daily", - "waitUntilNextUpdate": true - }, - { - "dataMine": "Masters", - "bot": "Bollinger-Bands", - "process": "Multi-Period-Daily" - } - ] - } - ], - "products": [ - { - "codeName": "Bollinger-Bands", - "displayName": "Bollinger Bands", - "description": "Bollinger Bands", - "storageAccount": "Bollinger-Bands", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersBollingerBands", - "moduleName": "BollingerBands" - } - }, - { - "codeName": "Percentage-Bandwidth", - "displayName": "Percentage Bandwidth", - "description": "Percentage Bandwidth", - "storageAccount": "Bollinger-Bands", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Bollinger-Bands.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersBollingerBands", - "moduleName": "PercentageBandwidth" - } - } - ] -} - - - diff --git a/Deprecated-Code/CandlesVolumes/.gitattributes b/Deprecated-Code/CandlesVolumes/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/CandlesVolumes/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/CandlesVolumes/.gitignore b/Deprecated-Code/CandlesVolumes/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/CandlesVolumes/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/CandlesVolumes/Candles-Volumes-Indicator-Bot.sln b/Deprecated-Code/CandlesVolumes/Candles-Volumes-Indicator-Bot.sln deleted file mode 100644 index da30e179e..000000000 --- a/Deprecated-Code/CandlesVolumes/Candles-Volumes-Indicator-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AA2901BC-8F81-40F0-A402-5CA79A3F22AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/CandlesVolumes/Commons.js b/Deprecated-Code/CandlesVolumes/Commons.js deleted file mode 100644 index f34bae6c7..000000000 --- a/Deprecated-Code/CandlesVolumes/Commons.js +++ /dev/null @@ -1 +0,0 @@ -// Nothing here to run \ No newline at end of file diff --git a/Deprecated-Code/CandlesVolumes/LICENSE b/Deprecated-Code/CandlesVolumes/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/CandlesVolumes/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/CandlesVolumes/Multi-Period-Daily/User.bot.js b/Deprecated-Code/CandlesVolumes/Multi-Period-Daily/User.bot.js deleted file mode 100644 index 3375e5440..000000000 --- a/Deprecated-Code/CandlesVolumes/Multi-Period-Daily/User.bot.js +++ /dev/null @@ -1,812 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const CANDLES_ONE_MIN = "One-Min"; - - const VOLUMES_FOLDER_NAME = "Volumes"; - const VOLUMES_ONE_MIN = "One-Min"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - let statusDependencies; - let beginingOfMarket - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -/* - -This process is going to do the following: - -Read the candles and volumes from Exchange Raw Data and produce a file for each day and for each period with candles and volumes. - -*/ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = bot.market; - - /* Context Variables */ - - let contextVariables = { - lastCandleFile: undefined, // Datetime of the last file files sucessfully produced by this process. - firstTradeFile: undefined, // Datetime of the first trade file in the whole market history. - maxCandleFile: undefined // Datetime of the last file available to be used as an input of this process. - }; - - getContextVariables(); - - function getContextVariables() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Entering function."); } - - let thisReport; - let reportKey; - let statusReport; - - /* We look first for Exchange Raw Data in order to get when the market starts. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet."); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.firstTradeFile = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - - /* Second, we get the report from Exchange Raw Data, to know when the marted ends. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.maxCandleFile = new Date(thisReport.lastFile.year + "-" + thisReport.lastFile.month + "-" + thisReport.lastFile.days + " " + "00:00" + GMT_SECONDS); - - /* Finally we get our own Status Report. */ - - reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Daily" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile !== undefined) { - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running not for the very first time. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(thisReport.beginingOfMarket); - - if (beginingOfMarket.valueOf() !== contextVariables.firstTradeFile.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well. - - buildCandles(); - return; - } - - contextVariables.lastCandleFile = new Date(thisReport.lastFile); - - /* - Here we assume that the last day written might contain incomplete information. This actually happens every time the head of the market is reached. - For that reason we go back one day, the partial information is discarded and added again with whatever new info is available. - */ - - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); - - buildCandles(); - return; - - } else { - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running for the very first time. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well. - - buildCandles(); - return; - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandles() { - - try { - let fromDate = new Date(contextVariables.lastCandleFile.valueOf()) - let lastDate = new Date() - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> Entering function."); } - - let outputCandles; - let outputVolumes; - - advanceTime(); - - function advanceTime() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> Entering function."); } - - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() + ONE_DAY_IN_MILISECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> New processing time @ " + contextVariables.lastCandleFile.getUTCFullYear() + "/" + (contextVariables.lastCandleFile.getUTCMonth() + 1) + "/" + contextVariables.lastCandleFile.getUTCDate() + "."); } - - /* Validation that we are not going past the head of the market. */ - - if (contextVariables.lastCandleFile.valueOf() > contextVariables.maxCandleFile.valueOf()) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> Head of the market found @ " + contextVariables.lastCandleFile.getUTCFullYear() + "/" + (contextVariables.lastCandleFile.getUTCMonth() + 1) + "/" + contextVariables.lastCandleFile.getUTCDate() + "."); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); // Here is where we finish processing and wait for the platform to run this module again. - return; - } - - /* Telling the world we are alive and doing well */ - let currentDateString = contextVariables.lastCandleFile.getUTCFullYear() + '-' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '-' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let currentDate = new Date(contextVariables.lastCandleFile) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(currentDateString, percentage) - - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage); - } - /* - - We prepere the arrays that will accumulate all the information for each output file. - - */ - - outputCandles = []; - outputVolumes = []; - - for (let n = 0; n < global.dailyFilePeriods.length; n++) { - - const emptyArray1 = []; - const emptyArray2 = []; - - outputCandles.push(emptyArray1); - outputVolumes.push(emptyArray2); - - } - - periodsLoop(); - - } - - function periodsLoop() { - - /* - - We will iterate through all posible periods. - - */ - - let n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - function loopBody() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> Entering function."); } - - const outputPeriod = global.dailyFilePeriods[n][0]; - const timeFrame = global.dailyFilePeriods[n][1]; - - nextCandleFile(); - - function nextCandleFile() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> Entering function."); } - - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let fileName = "Data.json" - - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Exchange-Raw-Data" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> getting file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> text = " + text); } - - let candlesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - candlesFile = JSON.parse(text); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } else { - - if (err.message === 'File does not exist.' || err.code === 'The specified key does not exist.') { - - logger.write(MODULE_NAME, "[WARN] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + err.stack); - logger.write(MODULE_NAME, "[WARN] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.stack); - callBackFunction(err); - return; - } - } - - const inputCandlesPerdiod = 60 * 1000; // 1 min - const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs - - let totalOutputCandles = inputFilePeriod / outputPeriod; - let beginingOutputTime = contextVariables.lastCandleFile.valueOf(); - - for (let i = 0; i < totalOutputCandles; i++) { - - let outputCandle = { - open: 0, - close: 0, - min: 0, - max: 0, - begin: 0, - end: 0 - }; - - let saveCandle = false; - - outputCandle.begin = beginingOutputTime + i * outputPeriod; - outputCandle.end = beginingOutputTime + (i + 1) * outputPeriod - 1; - - for (let j = 0; j < candlesFile.length; j++) { - - let candle = { - open: candlesFile[j][2], - close: candlesFile[j][3], - min: candlesFile[j][0], - max: candlesFile[j][1], - begin: candlesFile[j][4], - end: candlesFile[j][5] - }; - - /* Here we discard all the candles out of range. */ - - if (candle.begin >= outputCandle.begin && candle.end <= outputCandle.end) { - - if (saveCandle === false) { // this will set the value only once. - - outputCandle.open = candle.open; - outputCandle.min = candle.min; - outputCandle.max = candle.max; - } - - saveCandle = true; - - outputCandle.close = candle.close; // only the last one will be saved - - if (candle.min < outputCandle.min) { - - outputCandle.min = candle.min; - } - - if (candle.max > outputCandle.max) { - - outputCandle.max = candle.max; - } - } - } - - if (saveCandle === true) { // then we have a valid candle, otherwise it means there were no candles to fill this one in its time range. - - outputCandles[n].push(outputCandle); - } - } - - nextVolumeFile(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - function nextVolumeFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> Entering function."); } - - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let fileName = "Data.json" - - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Exchange-Raw-Data" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> text = " + text); } - - let volumesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - volumesFile = JSON.parse(text); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Received -> err = " + err.stack); - callBackFunction(err); - return; - } - - const inputVolumesPerdiod = 60 * 1000; // 1 min - const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs - - let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. - let beginingOutputTime = contextVariables.lastCandleFile.valueOf(); - - for (let i = 0; i < totalOutputVolumes; i++) { - - let outputVolume = { - buy: 0, - sell: 0, - begin: 0, - end: 0 - }; - - let saveVolume = false; - - outputVolume.begin = beginingOutputTime + i * outputPeriod; - outputVolume.end = beginingOutputTime + (i + 1) * outputPeriod - 1; - - for (let j = 0; j < volumesFile.length; j++) { - - let volume = { - buy: volumesFile[j][0], - sell: volumesFile[j][1], - begin: volumesFile[j][2], - end: volumesFile[j][3] - }; - - /* Here we discard all the Volumes out of range. */ - - if (volume.begin >= outputVolume.begin && volume.end <= outputVolume.end) { - - saveVolume = true; - - outputVolume.buy = outputVolume.buy + volume.buy; - outputVolume.sell = outputVolume.sell + volume.sell; - - } - } - - if (saveVolume === true) { - - outputVolumes[n].push(outputVolume); - - } - } - - writeFiles(outputCandles[n], outputVolumes[n], timeFrame, controlLoop); - - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - function controlLoop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> controlLoop -> Entering function."); } - - n++; - - if (n < global.dailyFilePeriods.length) { - - loopBody(); - - } else { - - writeDataRanges(onWritten); - - function onWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> controlLoop -> onWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onCandlesDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - writeStatusReport(contextVariables.lastCandleFile, advanceTime); - - } - } - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFiles(candles, volumes, timeFrame, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> Entering function."); } - - /* - - Here we will write the contents of the Candles and Volumens files. - - */ - - try { - - writeCandles(); - - function writeCandles() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - let fileContent = ""; - - for (let i = 0; i < candles.length; i++) { - - let candle = candles[i]; - - fileContent = fileContent + separator + '[' + candles[i].min + "," + candles[i].max + "," + candles[i].open + "," + candles[i].close + "," + candles[i].begin + "," + candles[i].end + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeCandles -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Content written = " + fileContent); - } - - logger.write(MODULE_NAME, "[WARN] start -> writeFiles -> writeCandles -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName); - - writeVolumes(); - } - } - - function writeVolumes() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - let fileContent = ""; - - for (let i = 0; i < volumes.length; i++) { - - let candle = volumes[i]; - - fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Content written = " + fileContent); - } - - logger.write(MODULE_NAME, "[WARN] start -> writeFiles -> writeVolumes -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName); - - callBack(); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeDataRanges(callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - writeDataRange(contextVariables.firstTradeFile, contextVariables.lastCandleFile, CANDLES_FOLDER_NAME, onCandlesDataRangeWritten); - - function onCandlesDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onCandlesDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - writeDataRange(contextVariables.firstTradeFile, contextVariables.lastCandleFile, VOLUMES_FOLDER_NAME, onVolumeDataRangeWritten); - - function onVolumeDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] writeDataRanges -> writeDataRanges -> onVolumeDataRangeWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onVolumeDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRanges -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - - } - - function writeDataRange(pBegin, pEnd, pProductFolder, callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> Entering function."); } - - let dataRange = { - begin: pBegin.valueOf(), - end:pEnd.valueOf() + ONE_DAY_IN_MILISECONDS - }; - - let fileContent = JSON.stringify(dataRange); - - let fileName = 'Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + pProductFolder + "/" + bot.process; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> onFileCreated -> err = " + err.stack); - callBack(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Content written = " + fileContent); - } - - let key = bot.dataMine + "-" + bot.codeName + "-" + pProductFolder + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - dateRange: dataRange - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Data Range Updated', event) - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(lastFileDate, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastFileDate = " + lastFileDate); } - - try { - - let reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Daily" - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.file.lastFile = lastFileDate; - thisReport.file.beginingOfMarket = beginingOfMarket.toUTCString() - thisReport.save(callBack); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] 'Start' - ERROR : " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/CandlesVolumes/Multi-Period-Market/User.bot.js b/Deprecated-Code/CandlesVolumes/Multi-Period-Market/User.bot.js deleted file mode 100644 index 1f017ddc0..000000000 --- a/Deprecated-Code/CandlesVolumes/Multi-Period-Market/User.bot.js +++ /dev/null @@ -1,929 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const CANDLES_ONE_MIN = "One-Min"; - - const VOLUMES_FOLDER_NAME = "Volumes"; - const VOLUMES_ONE_MIN = "One-Min"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - let statusDependencies; - let beginingOfMarket - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - callBackFunction(global.DEFAULT_OK_RESPONSE); - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -/* - - This process is going to do the following: - - Read the candles and volumes from Exchange Raw Data and produce a single Index File for Market Period. But this is the situation: - - Exchange Raw Data has a dataset organized with daily files with candles of 1 min. Candles Volumes is writting in this process a single file for each timeFrame for the whole market. - Everytime this process run, must be able to resume its job and process everything pending until reaching the head of the market. So the tactic to do this is the - following: - - 1. First we need to read the last file written by this process, and load all the information into in-memory arrays. We will then append to this arrays the new - information we will get from Exchange Raw Data. - - 2. We know from out status report which was the last DAY we processed from Exchange Raw Data, but we must be carefull, because that day mightn not have been complete, if the - last run found the head of the market. That means that we have to be carefull not to append candles that are already there. To simplify what we do is to discard - all candles of the last processed day, and then we can process that full day again adding all the candles. - -*/ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = bot.market; - - /* Context Variables */ - - let contextVariables = { - lastCandleFile: undefined, // Datetime of the last file files sucessfully produced by this process. - firstTradeFile: undefined, // Datetime of the first trade file in the whole market history. - maxCandleFile: undefined // Datetime of the last file available to be used as an input of this process. - }; - - getContextVariables(); - - function getContextVariables() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Entering function."); } - - let thisReport; - let reportKey; - let statusReport; - - /* We look first for Exchange Raw Data in order to get when the market starts. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet."); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.firstTradeFile = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - - /* Second, we get the report from Exchange Raw Data, to know when the marted ends. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.maxCandleFile = new Date(thisReport.lastFile.year + "-" + thisReport.lastFile.month + "-" + thisReport.lastFile.days + " " + "00:00" + GMT_SECONDS); - - /* Finally we get our own Status Report. */ - - reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Market" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile !== undefined) { - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running not for the very first time. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(thisReport.beginingOfMarket); - - if (beginingOfMarket.valueOf() !== contextVariables.firstTradeFile.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well. - - buildCandles(); - return; - } - - contextVariables.lastCandleFile = new Date(thisReport.lastFile); - - /* - Here we assume that the last day written might contain incomplete information. This actually happens every time the head of the market is reached. - For that reason we go back one day, the partial information is discarded and added again with whatever new info is available. - */ - - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); - - findPreviousContent(); - return; - - } else { - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running for the very first time. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well. - - buildCandles(); - return; - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> Double check that you are not running a process that only can be run at noTime mode at a certain month when it is not prepared to do so."); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function findPreviousContent() { - - /* - This is where we read the current files we have produced at previous runs of this same process. We just read all the content and organize it - in arrays and keep them in memory. - */ - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> Entering function."); } - - let n = 0 // loop Variable representing each possible period as defined at the periods array. - - let allPreviousCandles = []; - let allPreviousVolumes = []; - - loopBody(); - - function loopBody() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> Entering function."); } - - let timeFrame = global.marketFilesPeriods[n][1]; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> timeFrame = " + timeFrame); } - - let previousCandles; - let previousVolumes; - - getCandles(); - - function getCandles() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> Entering function."); } - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> getting file."); - - function onFileReceived(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> text = " + text); } - - let candlesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - candlesFile = JSON.parse(text); - - previousCandles = candlesFile; - - getVolumes(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> fileName = " + fileName); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - } - } - } - - function getVolumes() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> Entering function."); } - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> getting file."); - - function onFileReceived(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> text = " + text); } - - let volumesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - volumesFile = JSON.parse(text); - - previousVolumes = volumesFile; - - allPreviousCandles.push(previousCandles); - allPreviousVolumes.push(previousVolumes); - - controlLoop(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> fileName = " + fileName); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - } - } - } - - } - - function controlLoop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> controlLoop -> Entering function."); } - - n++; - - if (n < global.marketFilesPeriods.length) { - - loopBody(); - - } else { - - buildCandles(allPreviousCandles, allPreviousVolumes); - - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandles(allPreviousCandles, allPreviousVolumes) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> Entering function."); } - - let fromDate = new Date(contextVariables.lastCandleFile.valueOf()) - let lastDate = new Date() - - /* - Firstly we prepere the arrays that will accumulate all the information for each output file. - */ - - let outputCandles = []; - let outputVolumes = []; - - for (let n = 0; n < global.marketFilesPeriods.length; n++) { - - const emptyArray1 = []; - const emptyArray2 = []; - - outputCandles.push(emptyArray1); - outputVolumes.push(emptyArray2); - - } - - advanceTime(); - - function advanceTime() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> Entering function."); } - - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() + ONE_DAY_IN_MILISECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> New processing time @ " + contextVariables.lastCandleFile.getUTCFullYear() + "/" + (contextVariables.lastCandleFile.getUTCMonth() + 1) + "/" + contextVariables.lastCandleFile.getUTCDate() + "."); } - - /* Validation that we are not going past the head of the market. */ - - if (contextVariables.lastCandleFile.valueOf() > contextVariables.maxCandleFile.valueOf()) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> advanceTime -> Head of the market found @ " + contextVariables.lastCandleFile.getUTCFullYear() + "/" + (contextVariables.lastCandleFile.getUTCMonth() + 1) + "/" + contextVariables.lastCandleFile.getUTCDate() + "."); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); // Here is where we finish processing and wait for the platform to run this module again. - return; - } - - /* Telling the world we are alive and doing well */ - let currentDateString = contextVariables.lastCandleFile.getUTCFullYear() + '-' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '-' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let currentDate = new Date(contextVariables.lastCandleFile) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(currentDateString, percentage) - - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage); - } - - periodsLoop(); - - } - - function periodsLoop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> Entering function."); } - - /* - - We will iterate through all posible periods. - - */ - - let n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - function loopBody() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> Entering function."); } - - let previousCandles; - let previousVolumes; - - if (allPreviousCandles !== undefined) { - - previousCandles = allPreviousCandles[n]; - previousVolumes = allPreviousVolumes[n]; - - } - - const outputPeriod = global.marketFilesPeriods[n][0]; - const timeFrame = global.marketFilesPeriods[n][1]; - - /* - Here we are inside a Loop that is going to advance 1 day at the time, at each pass, will ready one of Exchange Raw Data's daily files and - add all its candles to our in memory arrays. At the first iteration of this loop, we will add the candles that we are carrying - from our previous run, the ones we already have in-memory. You can see below how we discard from those candles the ones that - are belonging to the first day we are processing at this run, that it is exactly the same as the last day processed the privious - run. By discarding these candles, we are ready to run after that standard function that will just add ALL the candles found each - day at Exchange Raw Data. - */ - - if (previousCandles !== undefined) { - - for (let i = 0; i < previousCandles.length; i++) { - - let candle = { - open: previousCandles[i][2], - close: previousCandles[i][3], - min: previousCandles[i][0], - max: previousCandles[i][1], - begin: previousCandles[i][4], - end: previousCandles[i][5] - }; - - if (candle.end < contextVariables.lastCandleFile.valueOf()) { - - outputCandles[n].push(candle); - - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> Candle # " + i + " @ " + timeFrame + " discarded for closing past the current process time."); } - } - } - allPreviousCandles[n] = []; // erasing these so as not to duplicate them. - } - - if (previousVolumes !== undefined) { - - for (let i = 0; i < previousVolumes.length; i++) { - - let volume = { - begin: previousVolumes[i][2], - end: previousVolumes[i][3], - buy: previousVolumes[i][0], - sell: previousVolumes[i][1] - }; - - if (volume.end < contextVariables.lastCandleFile.valueOf()) { - - outputVolumes[n].push(volume); - - } else { - if (FULL_LOG === true) {logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> Volume # " + i + " @ " + timeFrame + " discarded for closing past the current process time."); } - } - } - allPreviousVolumes[n] = []; // erasing these so as not to duplicate them. - } - - /* - From here on is where every iteration of the loop fully runs. Here is where we read Exchange Raw Data's files and add their content to whatever - we already have in our arrays in-memory. In this way the process will run as many days needed and it should only stop when it reaches - the head of the market. - */ - - nextCandleFile(); - - function nextCandleFile() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> Entering function."); } - - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let fileName = "Data.json" - - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Exchange-Raw-Data" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> getting file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> text = " + text); } - - let candlesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - candlesFile = JSON.parse(text); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } else { - - if (err.message === 'File does not exist.' || err.code === 'The specified key does not exist.') { - - logger.write(MODULE_NAME, "[WARN] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + JSON.stringify(err)); - logger.write(MODULE_NAME, "[WARN] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.stack); - callBackFunction(err); - return; - } - } - - const inputCandlesPerdiod = 60 * 1000; // 1 min - const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs - - let totalOutputCandles = inputFilePeriod / outputPeriod; // this should be 2 in this case. - let beginingOutputTime = contextVariables.lastCandleFile.valueOf(); - - /* - The algorithm that follows is going to agregate candles of 1 min timeFrame read from Exchange Raw Data, into candles of each timeFrame - that Candles Volumes generates. For market files those timePediods goes from 1h to 24hs. - */ - - for (let i = 0; i < totalOutputCandles; i++) { - - let outputCandle = { - open: 0, - close: 0, - min: 0, - max: 0, - begin: 0, - end: 0 - }; - - let saveCandle = false; - - outputCandle.begin = beginingOutputTime + i * outputPeriod; - outputCandle.end = beginingOutputTime + (i + 1) * outputPeriod - 1; - - for (let j = 0; j < candlesFile.length; j++) { - - let candle = { - open: candlesFile[j][2], - close: candlesFile[j][3], - min: candlesFile[j][0], - max: candlesFile[j][1], - begin: candlesFile[j][4], - end: candlesFile[j][5] - }; - - /* Here we discard all the candles out of range. */ - - if (candle.begin >= outputCandle.begin && candle.end <= outputCandle.end) { - - if (saveCandle === false) { // this will set the value only once. - - outputCandle.open = candle.open; - outputCandle.min = candle.min; - outputCandle.max = candle.max; - } - - saveCandle = true; - - outputCandle.close = candle.close; // only the last one will be saved - - if (candle.min < outputCandle.min) { - - outputCandle.min = candle.min; - } - - if (candle.max > outputCandle.max) { - - outputCandle.max = candle.max; - } - } - } - - if (saveCandle === true) { // then we have a valid candle, otherwise it means there were no candles to fill this one in its time range. - - outputCandles[n].push(outputCandle); - } - } - - nextVolumeFile(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - function nextVolumeFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> Entering function."); } - - let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); - let fileName = "Data.json" - - let filePathRoot = 'Project/' + bot.project + "/" + bot.mineType + "/" + bot.dataMine + "/" + "Exchange-Raw-Data" + '/' + bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset - let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> text = " + text); } - - let volumesFile; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - try { - volumesFile = JSON.parse(text); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Error Received -> err = " + err.stack); - callBackFunction(err); - return; - } - - const inputVolumesPerdiod = 60 * 1000; // 1 min - const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs - - let totalOutputVolumes = inputFilePeriod / outputPeriod; // this should be 2 in this case. - let beginingOutputTime = contextVariables.lastCandleFile.valueOf(); - - for (let i = 0; i < totalOutputVolumes; i++) { - - let outputVolume = { - buy: 0, - sell: 0, - begin: 0, - end: 0 - }; - - let saveVolume = false; - - outputVolume.begin = beginingOutputTime + i * outputPeriod; - outputVolume.end = beginingOutputTime + (i + 1) * outputPeriod - 1; - - for (let j = 0; j < volumesFile.length; j++) { - - let volume = { - buy: volumesFile[j][0], - sell: volumesFile[j][1], - begin: volumesFile[j][2], - end: volumesFile[j][3] - }; - - /* Here we discard all the Volumes out of range. */ - - if (volume.begin >= outputVolume.begin && volume.end <= outputVolume.end) { - - saveVolume = true; - - outputVolume.buy = outputVolume.buy + volume.buy; - outputVolume.sell = outputVolume.sell + volume.sell; - - } - } - - if (saveVolume === true) { - - outputVolumes[n].push(outputVolume); - } - } - - writeFiles(outputCandles[n], outputVolumes[n], timeFrame, controlLoop); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - function controlLoop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> controlLoop -> Entering function."); } - - n++; - - if (n < global.marketFilesPeriods.length) { - - loopBody(); - - } else { - - writeStatusReport(contextVariables.lastCandleFile, advanceTime); - } - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFiles(candles, volumes, timeFrame, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> Entering function."); } - - /* - - Here we will write the contents of the Candles and Volumens files. - - */ - - try { - - writeCandles(); - - function writeCandles() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - let fileContent = ""; - - for (let i = 0; i < candles.length; i++) { - - let candle = candles[i]; - - fileContent = fileContent + separator + '[' + candles[i].min + "," + candles[i].max + "," + candles[i].open + "," + candles[i].close + "," + candles[i].begin + "," + candles[i].end + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeCandles -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Content written = " + fileContent); - } - - logger.write(MODULE_NAME, "[WARN] start -> writeFiles -> writeCandles -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName ); - - writeVolumes(); - } - } - - function writeVolumes() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - let fileContent = ""; - - for (let i = 0; i < volumes.length; i++) { - - let candle = volumes[i]; - - fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Content written = " + fileContent); - } - - logger.write(MODULE_NAME, "[WARN] start -> writeFiles -> writeVolumes -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName); - - callBack(); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(lastFileDate, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastFileDate = " + lastFileDate); } - - try { - - let reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Market" - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.file.lastFile = lastFileDate; - thisReport.file.beginingOfMarket = beginingOfMarket.toUTCString() - thisReport.save(callBack); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/CandlesVolumes/Project.njsproj b/Deprecated-Code/CandlesVolumes/Project.njsproj deleted file mode 100644 index 0e6f1a852..000000000 --- a/Deprecated-Code/CandlesVolumes/Project.njsproj +++ /dev/null @@ -1,80 +0,0 @@ - - - - Debug - 2.0 - {aa2901bc-8f81-40f0-a402-5ca79a3f22ad} - - ShowAllFiles - - - c:\users\luis\source\repos\AAOlivia\Multi-Period-Market - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/CandlesVolumes/Project.njsproj.user b/Deprecated-Code/CandlesVolumes/Project.njsproj.user deleted file mode 100644 index db8622989..000000000 --- a/Deprecated-Code/CandlesVolumes/Project.njsproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - Debug|Any CPU - - \ No newline at end of file diff --git a/Deprecated-Code/CandlesVolumes/README.md b/Deprecated-Code/CandlesVolumes/README.md deleted file mode 100644 index 16d92627a..000000000 --- a/Deprecated-Code/CandlesVolumes/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# Olivia - -Olivia is a middle level Indicator bot that has as an input cnadles and volumes daily files and outputs 2 different datasets at different time-periods also of candles and volumnes. - -## Multi Period Daily - -This process generates files containing 1 day of candles or volumes each. - -### Start Mode - -This process runs every 1 minute under noTime start mode. - -``` -"startMode": { - "noTime": { - "run": "true" - } - } -``` - -## Multi Period Market - -This process generates files containing candles or volumes for the whole history of the market. - -### Start Mode - -This process runs every 1 minute under noTime start mode. - -``` -"startMode": { - "noTime": { - "run": "true" - } - } -``` - -## Output -Several datasets are produced: -* One with candles at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; -* One with candles at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution; -* One with volumes at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; -* One with volumes at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution. - -### Ideal for -Output datasets are the base for most common indicators and they become available at multiple resolution levels. - -### Details - -| **Name** | **Type** | **Version** | **Release Date** | **Current dataSet** | -|----------|----------|----------|----------|----------| -| Olivia | Indicator | 1.0 | 28 Feb 2018 | dataSet.V1 | - -# Products - -## Dataset 1: Daily Candles in Resolutions Below 1 hour - -### Current Dataset - -* **Folder Structure Tree**: Output > Candles > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day -* **Files Structure**: One .json file stored at the Day level of the Folder Tree Structure -* **In-File Record Structure**: - * Minimum, decimal; - * Maximum, decimal; - * Open, decimal; - * Close, decimal; - * Begin, decimal; - * End, decimal; -* **In-File Record Example**: - * [[10194.64038378,10308.25665115,10261.25665108,10236.90000135,1517443200000,1517443799999],[10236.90000135,10300.680924,10236.90000229,10288.10043292,1517443800000,1517444399999], ... ,[10288.10043292,10367.78412393,10288.10043293,10309.00000025,1517444400000,1517444999999],[10201.97490283,10367.78412393,10309.00000025,10201.97490283,1517445000000,1517445599999]] - -## Dataset 2: All-time, Market-long Candles in Resolutions Between 1 and 24 Hours - -### Current Dataset - -* **Folder Structure Tree**: Output > Candles > Multi-Period-Market > (01-hs| 02-hs | 03-hs | 04-hs | 06-hs | 08-hs | 12-hs | 24-hs) -* **Files Structure**: One .json file stored at the deepest level of the Folder Tree Structure -* **In-File Record Structure**: - * Minimum, decimal; - * Maximum, decimal; - * Open, decimal; - * Close, decimal; - * Begin, decimal; - * End, decimal; -* **In-File Record Example**: - * [[10194.64038378,10308.25665115,10261.25665108,10236.90000135,1517443200000,1517443799999],[10236.90000135,10300.680924,10236.90000229,10288.10043292,1517443800000,1517444399999], ... ,[10288.10043292,10367.78412393,10288.10043293,10309.00000025,1517444400000,1517444999999],[10201.97490283,10367.78412393,10309.00000025,10201.97490283,1517445000000,1517445599999]] - -## Dataset 3: Daily Volumes in Resolutions Below 1 hour - -### Current Dataset - -* **Folder Structure Tree**: Output > Volumes > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day -* **Files Structure**: One .json file stored at the Day level of the Folder Tree Structure -* **In-File Record Structure**: - * Buy Volume, decimal; - * Sell Volume, decimal; - * Open Volume, decimal; - * Close Volume, decimal -* **In-File Record Example**: - * [[33271.902671610005,13940.15380426,1514764800000,1514764859999],[15312.391007760001,18734.01756361,1514764860000,1514764919999], ... ,[16261.87486184,2788.53802902,1514764920000,1514764979999],[513.24710259,9896.328325810004,1514764980000,1514765039999]] - -## Dataset 4: All-time, Market-long Volumes in Resolutions Between 1 and 24 Hours - -### Current Dataset - -* **Folder Structure Tree**: Output > Volumes > Multi-Period-Market > (01-hs| 02-hs | 03-hs | 04-hs | 06-hs | 08-hs | 12-hs | 24-hs) > -* **Files Structure**: One .json file stored at the deepest level of the Folder Tree Structure -* **In-File Record Structure**: - * Buy Volume, decimal; - * Sell Volume, decimal; - * Open Volume, decimal; - * Close Volume, decimal -* **In-File Record Example**: - * [[33271.902671610005,13940.15380426,1514764800000,1514764859999],[15312.391007760001,18734.01756361,1514764860000,1514764919999], ... ,[16261.87486184,2788.53802902,1514764920000,1514764979999],[513.24710259,9896.328325810004,1514764980000,1514765039999]] - -### Compatible Plotters -[AAMasters Plotters-Candles-Volumes](https://github.com/AAMasters/Plotters-Candles-Volumes) - -### Dependencies -[AAMasters Charly](https://github.com/AAMasters/AACharly-Extraction-Bot) -[AAMasters Bruce](https://github.com/AAMasters/AABruce-Indicator-Bot) - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/CandlesVolumes/package.json b/Deprecated-Code/CandlesVolumes/package.json deleted file mode 100644 index 90713cac8..000000000 --- a/Deprecated-Code/CandlesVolumes/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "AAOlivia", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": {} -} diff --git a/Deprecated-Code/CandlesVolumes/this.bot.config.json b/Deprecated-Code/CandlesVolumes/this.bot.config.json deleted file mode 100644 index aa1100164..000000000 --- a/Deprecated-Code/CandlesVolumes/this.bot.config.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "displayName": "Candles Volumes", - "codeName": "Candles-Volumes", - "type": "Indicator Bot", - "dataMine": "Masters", - "processes": [ - { - "name": "Multi-Period-Market", - "description": "Produces different files with multi-period candles and volumes for entire markets.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Candles", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Volumes", - "dataSet": "Multi-Period-Market" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-OHLCVs" - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-OHLCVs", - "dataSetSection": "Month", - "waitUntilNextUpdate": true - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "process": "Multi-Period-Market" - } - ] - }, - { - "name": "Multi-Period-Daily", - "description": "Produces different files with multi-period candles and volumes on a daily format.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Candles", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Volumes", - "dataSet": "Multi-Period-Daily" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-OHLCVs" - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-OHLCVs", - "dataSetSection": "Month", - "waitUntilNextUpdate": true - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "process": "Multi-Period-Daily" - } - ] - } - ], - "products": [ - { - "codeName": "Candles", - "displayName": "Candles", - "description": "Two sets of files per period that contains candles.", - "storageAccount": "Candles-Volumes", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Candles" - } - }, - { - "codeName": "Volumes", - "displayName": "Buy and Sell Volumes", - "description": "Two sets of files per period that contains buy and sell volumes.", - "storageAccount": "Candles-Volumes", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Candles-Volumes.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Volumes" - } - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/Client/.gitattributes b/Deprecated-Code/Client/.gitattributes deleted file mode 100644 index eba1110b5..000000000 --- a/Deprecated-Code/Client/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto \ No newline at end of file diff --git a/Deprecated-Code/Client/.gitignore b/Deprecated-Code/Client/.gitignore deleted file mode 100644 index 5471caae2..000000000 --- a/Deprecated-Code/Client/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ - -.vs/* -obj/* -bin/* -/.vscode - -.env -.env.dev - -/node_modules -/dependency - -/.nyc_output -/coverage -debug.log -package-lock.json - diff --git a/Deprecated-Code/Client/.gitmodules b/Deprecated-Code/Client/.gitmodules deleted file mode 100644 index 7e1eb1e2d..000000000 --- a/Deprecated-Code/Client/.gitmodules +++ /dev/null @@ -1,36 +0,0 @@ -[submodule "Plotters/AAMasters/plotters/Plotters-Trading-Simulation"] - path = Plotters/AAMasters/plotters/Plotters-Trading-Simulation - url = https://github.com/AAMasters/Plotters-Trading-Simulation.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Candles-Volumes"] - path = Plotters/AAMasters/plotters/Plotters-Candles-Volumes - url = https://github.com/AAMasters/Plotters-Candles-Volumes.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Bollinger-Channels"] - path = Plotters/AAMasters/plotters/Plotters-Bollinger-Channels - url = https://github.com/AAMasters/Plotters-Bollinger-Channels.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Bollinger-Bands"] - path = Plotters/AAMasters/plotters/Plotters-Bollinger-Bands - url = https://github.com/AAMasters/Plotters-Bollinger-Bands.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Stairs-Patterns"] - path = Plotters/AAMasters/plotters/Plotters-Stairs-Patterns - url = https://github.com/AAMasters/Plotters-Stairs-Patterns.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Trading"] - path = Plotters/AAMasters/plotters/Plotters-Trading - url = https://github.com/AAMasters/Plotters-Trading.git - branch = develop -[submodule "Plotters/AAVikings/plotters/Plotters-Linear-Regression-Curve"] - path = Plotters/AAVikings/plotters/Plotters-Linear-Regression-Curve - url = https://github.com/AAVikings/Plotters-Linear-Regression-Curve.git - branch = master -[submodule "Files-Component"] - path = Files-Component - url = https://github.com/Superalgos/Files-Component.git - branch = develop -[submodule "CanvasApp"] - path = CanvasApp - url = https://github.com/Superalgos/CanvasApp.git - branch = develop \ No newline at end of file diff --git a/Deprecated-Code/Client/BackendServers.sln b/Deprecated-Code/Client/BackendServers.sln deleted file mode 100644 index 5a65b7364..000000000 --- a/Deprecated-Code/Client/BackendServers.sln +++ /dev/null @@ -1,30 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "BackendServers", "BackendServers.njsproj", "{6A53AD2E-C389-4D2C-BDED-23DBAB231315}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BEEFD357-76B2-431F-A1A9-045C52E7F2C6}" - ProjectSection(SolutionItems) = preProject - .env = .env - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6A53AD2E-C389-4D2C-BDED-23DBAB231315}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A53AD2E-C389-4D2C-BDED-23DBAB231315}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A53AD2E-C389-4D2C-BDED-23DBAB231315}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A53AD2E-C389-4D2C-BDED-23DBAB231315}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {9E8A5837-6A3F-44AC-AB5C-7CCAFDE75049} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/Client/CODE_OF_CONDUCT.md b/Deprecated-Code/Client/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/Client/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/Client/CONTRIBUTING.md b/Deprecated-Code/Client/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/Client/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/Client/LICENSE b/Deprecated-Code/Client/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/Client/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/Client/README.md b/Deprecated-Code/Client/README.md deleted file mode 100644 index 22f98f26c..000000000 --- a/Deprecated-Code/Client/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Client - -This repo is one of the repositories built into Superalgos. For more information [read the docs](https://docs.superalgos.org/) or check the [Readme](https://github.com/Superalgos/Superalgos/) at the main repository of the project. - -## Copyright and License Notice - -© Copyright 2020 Superalgos. Please see the [License](/LICENSE) for information on how you can use this software. - -## Disclaimer - -THE SOFTWARE AND ITS ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL SUPERALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SOFTWARE, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -# Maintainer - -[![Luis-Fernando-Molina](https://avatars1.githubusercontent.com/u/9479367?s=130&v=4)](https://github.com/Luis-Fernando-Molina) | ----| -[Luis-Fernando-Molina](https://github.com/Luis-Fernando-Molina) | diff --git a/Deprecated-Code/Client/WebServer/Fonts/Saira-Condensed.woff2 b/Deprecated-Code/Client/WebServer/Fonts/Saira-Condensed.woff2 deleted file mode 100644 index 8a7ff57d0..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/Saira-Condensed.woff2 and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Fonts/Saira.woff2 b/Deprecated-Code/Client/WebServer/Fonts/Saira.woff2 deleted file mode 100644 index 5c1b242e1..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/Saira.woff2 and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.ttf b/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff b/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff2 b/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc604..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Fonts/segoeui.woff b/Deprecated-Code/Client/WebServer/Fonts/segoeui.woff deleted file mode 100644 index afe528bc7..000000000 Binary files a/Deprecated-Code/Client/WebServer/Fonts/segoeui.woff and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-episode-counters-01.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-episode-counters-01.gif deleted file mode 100644 index 49ef056cc..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-episode-counters-01.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-trading-system-highlights.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-trading-system-highlights.gif deleted file mode 100644 index 3841c76f6..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/trading-bot-layers-trading-system-highlights.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-01.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-01.gif deleted file mode 100644 index dcb17d828..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-01.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-02.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-02.gif deleted file mode 100644 index d8c45e3e4..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-backtesting-trading-engine-visualization-02.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-managers-scroll.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-managers-scroll.gif deleted file mode 100644 index c735fe627..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-managers-scroll.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-on.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-on.gif deleted file mode 100644 index 1d5702d00..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-on.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-panels.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-panels.gif deleted file mode 100644 index 5dea3f194..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-layer-panels.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-auto-locked.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-auto-locked.gif deleted file mode 100644 index bb52b737e..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-auto-locked.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-time-frame-scale.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-time-frame-scale.gif deleted file mode 100644 index b8a03adf7..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-time-frame-scale.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-rate-scale.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-rate-scale.gif deleted file mode 100644 index 702577d28..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-rate-scale.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-time-scale.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-time-scale.gif deleted file mode 100644 index 9ae03e1b3..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-charts-scales-unlock-time-scale.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-binance-orders.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-binance-orders.gif deleted file mode 100644 index f90ecd636..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-binance-orders.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-console.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-console.gif deleted file mode 100644 index 3e641bc7e..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-console.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-process-progress.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-process-progress.gif deleted file mode 100644 index 464b6bdd0..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-process-progress.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-run.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-run.gif deleted file mode 100644 index d346eea22..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-live-trading-run.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-start-data-mining-console.gif b/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-start-data-mining-console.gif deleted file mode 100644 index 15938d5ee..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/Tutorial/Gifs/welcome-start-data-mining-console.gif and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/favicon.ico b/Deprecated-Code/Client/WebServer/Images/favicon.ico deleted file mode 100644 index cd2c5d6af..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/sa-beta7-logo-horiz-dark.png b/Deprecated-Code/Client/WebServer/Images/sa-beta7-logo-horiz-dark.png deleted file mode 100644 index 27833094c..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/sa-beta7-logo-horiz-dark.png and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/superalgos-header-background.png b/Deprecated-Code/Client/WebServer/Images/superalgos-header-background.png deleted file mode 100644 index fe2c14c0d..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/superalgos-header-background.png and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/superalgos-logo-for-color-background.png b/Deprecated-Code/Client/WebServer/Images/superalgos-logo-for-color-background.png deleted file mode 100644 index 775da0513..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/superalgos-logo-for-color-background.png and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/superalgos-logo.png b/Deprecated-Code/Client/WebServer/Images/superalgos-logo.png deleted file mode 100644 index 995d19538..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/superalgos-logo.png and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/Images/superalgos-platform.jpg b/Deprecated-Code/Client/WebServer/Images/superalgos-platform.jpg deleted file mode 100644 index 88cd1b230..000000000 Binary files a/Deprecated-Code/Client/WebServer/Images/superalgos-platform.jpg and /dev/null differ diff --git a/Deprecated-Code/Client/WebServer/LegacyPlotter.js b/Deprecated-Code/Client/WebServer/LegacyPlotter.js deleted file mode 100644 index cb4e49753..000000000 --- a/Deprecated-Code/Client/WebServer/LegacyPlotter.js +++ /dev/null @@ -1,6 +0,0 @@ -function getNewPlotter(pDataMineOrHost, pPlotter, pModule) { - let functionName = pDataMineOrHost + pPlotter + pModule; - functionName = functionName.replace(/-/g, ""); - functionName = 'new' + functionName - return window[functionName](); -} diff --git a/Deprecated-Code/Client/WebServer/PlotterPanel.js b/Deprecated-Code/Client/WebServer/PlotterPanel.js deleted file mode 100644 index 40fad93d6..000000000 --- a/Deprecated-Code/Client/WebServer/PlotterPanel.js +++ /dev/null @@ -1,11 +0,0 @@ -function getNewPlotterPanel(pDataMineOrHost, pPlotter, pModule, pPanel) { - let functionName = pDataMineOrHost + pPlotter + pModule + pPanel; - functionName = functionName.replace(/-/g, ""); - functionName = 'new' + functionName - try { - return window[functionName](); - } catch (err) { - console.log('[ERROR] getNewPlotterPanel -> Error trying to Load a Plotter Panel. err = ' + err.stack) - console.log('[ERROR] getNewPlotterPanel -> functionName = ' + functionName) - } -} diff --git a/Deprecated-Code/Client/WebServer/externalScripts/CCapture.all.min.js b/Deprecated-Code/Client/WebServer/externalScripts/CCapture.all.min.js deleted file mode 100644 index bda376d9f..000000000 --- a/Deprecated-Code/Client/WebServer/externalScripts/CCapture.all.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";function download(t,e,i){function n(t){var e=t.split(/[:;,]/),i=e[1],n="base64"==e[2]?atob:decodeURIComponent,r=n(e.pop()),o=r.length,a=0,s=new Uint8Array(o);for(a;a>8,this.data[this.pos++]=t},t.prototype.writeDoubleBE=function(t){for(var e=new Uint8Array(new Float64Array([t]).buffer),i=e.length-1;i>=0;i--)this.writeByte(e[i])},t.prototype.writeFloatBE=function(t){for(var e=new Uint8Array(new Float32Array([t]).buffer),i=e.length-1;i>=0;i--)this.writeByte(e[i])},t.prototype.writeString=function(t){for(var e=0;e>8),this.writeU8(t);break;case 3:this.writeU8(32|t>>16),this.writeU8(t>>8),this.writeU8(t);break;case 4:this.writeU8(16|t>>24),this.writeU8(t>>16),this.writeU8(t>>8),this.writeU8(t);break;case 5:this.writeU8(8|t/4294967296&7),this.writeU8(t>>24),this.writeU8(t>>16),this.writeU8(t>>8),this.writeU8(t);break;default:throw new RuntimeException("Bad EBML VINT size "+e)}},t.prototype.measureEBMLVarInt=function(t){if(t<127)return 1;if(t<16383)return 2;if(t<2097151)return 3;if(t<268435455)return 4;if(t<34359738367)return 5;throw new RuntimeException("EBML VINT size not supported "+t)},t.prototype.writeEBMLVarInt=function(t){this.writeEBMLVarIntWidth(t,this.measureEBMLVarInt(t))},t.prototype.writeUnsignedIntBE=function(t,e){switch(void 0===e&&(e=this.measureUnsignedInt(t)),e){case 5:this.writeU8(Math.floor(t/4294967296));case 4:this.writeU8(t>>24);case 3:this.writeU8(t>>16);case 2:this.writeU8(t>>8);case 1:this.writeU8(t);break;default:throw new RuntimeException("Bad UINT size "+e)}},t.prototype.measureUnsignedInt=function(t){return t<256?1:t<65536?2:t<1<<24?3:t<4294967296?4:5},t.prototype.getAsDataArray=function(){if(this.posthis.length)throw"Seeking beyond the end of file is not allowed";this.pos=t},this.write=function(e){var i={offset:this.pos,data:e,length:r(e)},f=i.offset>=this.length;this.pos+=i.length,this.length=Math.max(this.length,this.pos),a=a.then(function(){if(h)return new Promise(function(e,r){n(i.data).then(function(n){var r=0,o=Buffer.from(n.buffer),a=function(n,o,s){r+=o,r>=s.length?e():t.write(h,s,r,s.length-r,i.offset+r,a)};t.write(h,o,0,o.length,i.offset,a)})});if(s)return new Promise(function(t,e){s.onwriteend=t,s.seek(i.offset),s.write(new Blob([i.data]))});if(!f)for(var e=0;e=r.offset+r.length)){if(i.offsetr.offset+r.length)throw new Error("Overwrite crosses blob boundaries");return i.offset==r.offset&&i.length==r.length?void(r.data=i.data):n(r.data).then(function(t){return r.data=t,n(i.data)}).then(function(t){i.data=t,r.data.set(i.data,i.offset-r.offset)})}}o.push(i)})},this.complete=function(t){return a=h||s?a.then(function(){return null}):a.then(function(){for(var e=[],i=0;i0&&e.trackNumber<127))throw"TrackNumber must be > 0 and < 127";return i.writeEBMLVarInt(e.trackNumber),i.writeU16BE(e.timecode),i.writeByte(128),{id:163,data:[i.getAsDataArray(),e.frame]}}function l(t){return{id:524531317,data:[{id:231,data:Math.round(t.timecode)}]}}function c(t,e,i){_.push({id:187,data:[{id:179,data:e},{id:183,data:[{id:247,data:t},{id:241,data:a(i)}]}]})}function p(){var e={id:475249515,data:_},i=new t(16+32*_.length);h(i,S.pos,e),S.write(i.getAsDataArray()),D.Cues.positionEBML.data=a(e.offset)}function m(){if(0!=T.length){for(var e=0,i=0;i=E&&m()}function y(){var e=new t(x.size),i=S.pos;h(e,x.dataOffset,x.data),S.seek(x.dataOffset),S.write(e.getAsDataArray()),S.seek(i)}function v(){var e=new t(8),i=S.pos;e.writeDoubleBE(U),S.seek(M.dataOffset),S.write(e.getAsDataArray()),S.seek(i)}var b,k,B,x,E=5e3,A=1,L=!1,T=[],U=0,F=0,I={quality:.95,fileWriter:null,fd:null,frameDuration:null,frameRate:null},D={Cues:{id:new Uint8Array([28,83,187,107]),positionEBML:null},SegmentInfo:{id:new Uint8Array([21,73,169,102]),positionEBML:null},Tracks:{id:new Uint8Array([22,84,174,107]),positionEBML:null}},M={id:17545,data:new s(0)},_=[],S=new e(n.fileWriter||n.fd);this.addFrame=function(t){if(L){if(t.width!=b||t.height!=k)throw"Frame size differs from previous frames"}else b=t.width,k=t.height,u(),L=!0;var e=r(t,{quality:n.quality});if(!e)throw"Couldn't decode WebP frame, does the browser support WebP?";g({frame:o(e),duration:n.frameDuration})},this.complete=function(){return m(),p(),y(),v(),S.complete("video/webm")},this.getWrittenSize=function(){return S.length},n=i(I,n||{}),w()}};"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t(require("./ArrayBufferDataStream"),require("./BlobBuffer")):window.WebMWriter=t(ArrayBufferDataStream,BlobBuffer)}(),function(){function t(t){var e,i=new Uint8Array(t);for(e=0;e>18&63]+o[t>>12&63]+o[t>>6&63]+o[63&t]}var i,n,r,a=t.length%3,s="";for(i=0,r=t.length-a;in&&(e.push({blocks:o,length:i}),o=[],i=0),o.push(t),i+=t.headerLength+t.inputLength}),e.push({blocks:o,length:i}),e.forEach(function(e){var i=new Uint8Array(e.length),n=0;e.blocks.forEach(function(t){i.set(t.header,n),n+=t.headerLength,i.set(t.input,n),n+=t.inputLength}),t.push(i)}),t.push(new Uint8Array(2*r)),new Blob(t,{type:"octet/stream"})},t.prototype.clear=function(){this.written=0,this.out=n.clean(e)},window.Tar=t}(),function(t){function e(t,i){if({}.hasOwnProperty.call(e.cache,t))return e.cache[t];var n=e.resolve(t);if(!n)throw new Error("Failed to resolve module "+t);var r={id:t,require:e,filename:t,exports:{},loaded:!1,parent:i,children:[]};i&&i.children.push(r);var o=t.slice(0,t.lastIndexOf("/")+1);return e.cache[t]=r.exports,n.call(r.exports,r,r.exports,o,t),r.loaded=!0,e.cache[t]=r.exports}e.modules={},e.cache={},e.resolve=function(t){return{}.hasOwnProperty.call(e.modules,t)?e.modules[t]:void 0},e.define=function(t,i){e.modules[t]=i};var i=function(e){return e="/",{title:"browser",version:"v0.10.26",browser:!0,env:{},argv:[],nextTick:t.setImmediate||function(t){setTimeout(t,0)},cwd:function(){return e},chdir:function(t){e=t}}}();e.define("/gif.coffee",function(t,i,n,r){function o(t,e){return{}.hasOwnProperty.call(t,e)}function a(t,e){for(var i=0,n=e.length;ithis.frames.length;0<=this.frames.length?++e:--e)t.push(e);return t}.apply(this,arguments),n=0,r=i.length;ne;0<=e?++i:--i)t.push(i);return t}.apply(this,arguments),n=0,r=i.length;nt;this.freeWorkers.length<=t?++i:--i)e.push(i);return e}.apply(this,arguments).forEach(function(t){return function(e){var i;return console.log("spawning worker "+e),i=new Worker(t.options.workerScript),i.onmessage=function(t){return function(e){return t.activeWorkers.splice(t.activeWorkers.indexOf(i),1),t.freeWorkers.push(i),t.frameFinished(e.data)}}(t),t.freeWorkers.push(i)}}(this)),t},e.prototype.frameFinished=function(t){return console.log("frame "+t.index+" finished - "+this.activeWorkers.length+" active"),this.finishedFrames++,this.emit("progress",this.finishedFrames/this.frames.length),this.imageParts[t.index]=t,a(null,this.imageParts)?this.renderNextFrame():this.finishRendering()},e.prototype.finishRendering=function(){var t,e,i,n,r,o,a;r=0;for(var s=0,h=this.imageParts.length;s=this.frames.length?void 0:(t=this.frames[this.nextFrame++],i=this.freeWorkers.shift(),e=this.getTask(t),console.log("starting frame "+(e.index+1)+" of "+this.frames.length),this.activeWorkers.push(i),i.postMessage(e))},e.prototype.getContextData=function(t){return t.getImageData(0,0,this.options.width,this.options.height).data},e.prototype.getImageData=function(t){var e;return null!=this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.width=this.options.width,this._canvas.height=this.options.height),e=this._canvas.getContext("2d"),e.setFill=this.options.background,e.fillRect(0,0,this.options.width,this.options.height),e.drawImage(t,0,0),this.getContextData(e)},e.prototype.getTask=function(t){var e,i;if(e=this.frames.indexOf(t),i={index:e,last:e===this.frames.length-1,delay:t.delay,transparent:t.transparent,width:this.options.width,height:this.options.height,quality:this.options.quality,repeat:this.options.repeat,canTransfer:"chrome"===h.name},null!=t.data)i.data=t.data;else if(null!=t.context)i.data=this.getContextData(t.context);else{if(null==t.image)throw new Error("Invalid frame");i.data=this.getImageData(t.image)}return i},e}(u),t.exports=l}),e.define("/browser.coffee",function(t,e,i,n){var r,o,a,s,h;s=navigator.userAgent.toLowerCase(),a=navigator.platform.toLowerCase(),h=s.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/)||[null,"unknown",0],o="ie"===h[1]&&document.documentMode,r={name:"version"===h[1]?h[3]:h[1],version:o||parseFloat("opera"===h[1]&&h[4]?h[4]:h[2]),platform:{name:s.match(/ip(?:ad|od|hone)/)?"ios":(s.match(/(?:webos|android)/)||a.match(/mac|win|linux/)||["other"])[0]}},r[r.name]=!0,r[r.name+parseInt(r.version,10)]=!0,r.platform[r.platform.name]=!0,t.exports=r}),e.define("events",function(t,e,n,r){i.EventEmitter||(i.EventEmitter=function(){});var o=e.EventEmitter=i.EventEmitter,a="function"==typeof Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},s=10;o.prototype.setMaxListeners=function(t){this._events||(this._events={}),this._events.maxListeners=t},o.prototype.emit=function(t){if("error"===t&&(!this._events||!this._events.error||a(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:new Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var e=this._events[t];if(!e)return!1;if("function"!=typeof e){if(a(e)){for(var i=Array.prototype.slice.call(arguments,1),n=e.slice(),r=0,o=n.length;r0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),console.trace())}this._events[t].push(e)}else this._events[t]=[this._events[t],e];else this._events[t]=e;return this},o.prototype.on=o.prototype.addListener,o.prototype.once=function(t,e){var i=this;return i.on(t,function n(){i.removeListener(t,n),e.apply(this,arguments)}),this},o.prototype.removeListener=function(t,e){if("function"!=typeof e)throw new Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var i=this._events[t];if(a(i)){var n=i.indexOf(e);if(n<0)return this;i.splice(n,1),0==i.length&&delete this._events[t]}else this._events[t]===e&&delete this._events[t];return this},o.prototype.removeAllListeners=function(t){return t&&this._events&&this._events[t]&&(this._events[t]=null),this},o.prototype.listeners=function(t){return this._events||(this._events={}),this._events[t]||(this._events[t]=[]),a(this._events[t])||(this._events[t]=[this._events[t]]),this._events[t]}}),t.GIF=e("/gif.coffee")}.call(this,this),function(){function t(t){return t&&t.Object===Object?t:null}function e(t){return String("0000000"+t).slice(-7)}function i(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()}function n(t){var e={};this.settings=t,this.on=function(t,i){e[t]=i},this.emit=function(t){var i=e[t];i&&i.apply(null,Array.prototype.slice.call(arguments,1))},this.filename=t.name||i(),this.extension="",this.mimeType=""}function r(t){n.call(this,t),this.extension=".tar",this.mimeType="application/x-tar",this.fileExtension="",this.baseFilename=this.filename,this.tape=null,this.count=0,this.part=1,this.frames=0}function o(t){r.call(this,t),this.type="image/png",this.fileExtension=".png"}function a(t){r.call(this,t),this.type="image/jpeg",this.fileExtension=".jpg",this.quality=t.quality/100||.8}function s(t){var e=document.createElement("canvas");"image/webp"!==e.toDataURL("image/webp").substr(5,10)&&console.log("WebP not supported - try another export format"),n.call(this,t),this.quality=t.quality/100||.8,this.extension=".webm",this.mimeType="video/webm",this.baseFilename=this.filename,this.framerate=t.framerate,this.frames=0,this.part=1,this.videoWriter=new WebMWriter({quality:this.quality,fileWriter:null,fd:null,frameRate:this.framerate})}function h(t){n.call(this,t),t.quality=t.quality/100||.8,this.encoder=new FFMpegServer.Video(t),this.encoder.on("process",function(){this.emit("process")}.bind(this)),this.encoder.on("finished",function(t,e){var i=this.callback;i&&(this.callback=void 0,i(t,e))}.bind(this)),this.encoder.on("progress",function(t){this.settings.onProgress&&this.settings.onProgress(t)}.bind(this)),this.encoder.on("error",function(t){alert(JSON.stringify(t,null,2))}.bind(this))}function f(t){n.call(this,t),this.framerate=this.settings.framerate,this.type="video/webm",this.extension=".webm",this.stream=null,this.mediaRecorder=null,this.chunks=[]}function u(t){n.call(this,t),t.quality=31-(30*t.quality/100||10),t.workers=t.workers||4,this.extension=".gif",this.mimeType="image/gif",this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.sizeSet=!1,this.encoder=new GIF({workers:t.workers,quality:t.quality,workerScript:t.workersPath+"gif.worker.js"}),this.encoder.on("progress",function(t){this.settings.onProgress&&this.settings.onProgress(t)}.bind(this)),this.encoder.on("finished",function(t){var e=this.callback;e&&(this.callback=void 0,e(t))}.bind(this))}function d(t){function e(){function t(){return this._hooked||(this._hooked=!0,this._hookedTime=this.currentTime||0,this.pause(),it.push(this)),this._hookedTime+M.startTime}b("Capturer start"),U=window.Date.now(),T=U+M.startTime,I=window.performance.now(),F=I+M.startTime,window.Date.prototype.getTime=function(){return T},window.Date.now=function(){return T},window.setTimeout=function(t,e){var i={callback:t,time:e,triggerTime:T+e};return _.push(i),b("Timeout set to "+i.time),i},window.clearTimeout=function(t){for(var e=0;e<_.length;e++)_[e]!=t||(_.splice(e,1),b("Timeout cleared"))},window.setInterval=function(t,e){var i={callback:t,time:e,triggerTime:T+e};return S.push(i),b("Interval set to "+i.time),i},window.clearInterval=function(t){return b("clear Interval"),null},window.requestAnimationFrame=function(t){W.push(t)},window.performance.now=function(){return F};try{Object.defineProperty(HTMLVideoElement.prototype,"currentTime",{get:t}),Object.defineProperty(HTMLAudioElement.prototype,"currentTime",{get:t})}catch(t){b(t)}}function i(){e(),D.start(),R=!0}function n(){R=!1,D.stop(),l()}function r(t,e){Z(t,0,e)}function d(){r(y)}function l(){b("Capturer stop"),window.setTimeout=Z,window.setInterval=J,window.clearInterval=Y,window.clearTimeout=$,window.requestAnimationFrame=Q,window.Date.prototype.getTime=et,window.Date.now=X,window.performance.now=tt}function c(){var t=C/M.framerate;(M.frameLimit&&C>=M.frameLimit||M.timeLimit&&t>=M.timeLimit)&&(n(),v());var e=new Date(null);e.setSeconds(t),M.motionBlurFrames>2?j.textContent="CCapture "+M.format+" | "+C+" frames ("+O+" inter) | "+e.toISOString().substr(11,8):j.textContent="CCapture "+M.format+" | "+C+" frames | "+e.toISOString().substr(11,8)}function p(t){N.width===t.width&&N.height===t.height||(N.width=t.width,N.height=t.height,z=new Uint16Array(N.height*N.width*4),V.fillStyle="#0",V.fillRect(0,0,N.width,N.height))}function m(t){V.drawImage(t,0,0),q=V.getImageData(0,0,N.width,N.height);for(var e=0;e2?(p(t),m(t),O>=.5*M.motionBlurFrames?w():d()):(D.add(t),C++,b("Full Frame! "+C)))}function y(){var t=1e3/M.framerate,e=(C+O/M.motionBlurFrames)*t;T=U+e,F=I+e,it.forEach(function(t){t._hookedTime=e/1e3}),c(),b("Frame: "+C+" "+O);for(var i=0;i<_.length;i++)T>=_[i].triggerTime&&(r(_[i].callback),_.splice(i,1));for(var i=0;i=S[i].triggerTime&&(r(S[i].callback),S[i].triggerTime+=S[i].time);W.forEach(function(t){r(t,T-k)}),W=[]}function v(t){t||(t=function(t){return download(t,D.filename+D.extension,D.mimeType),!1}),D.save(t)}function b(t){A&&console.log(t)}function B(t,e){P[t]=e}function x(t){var e=P[t];e&&e.apply(null,Array.prototype.slice.call(arguments,1))}function E(t){x("progress",t)}var A,L,T,U,F,I,d,D,M=t||{},_=(new Date,[]),S=[],C=0,O=0,W=[],R=!1,P={};M.framerate=M.framerate||60,M.motionBlurFrames=2*(M.motionBlurFrames||1),A=M.verbose||!1,L=M.display||!1,M.step=1e3/M.framerate,M.timeLimit=M.timeLimit||0,M.frameLimit=M.frameLimit||0,M.startTime=M.startTime||0;var j=document.createElement("div");j.style.position="absolute",j.style.left=j.style.top=0,j.style.backgroundColor="black",j.style.fontFamily="monospace",j.style.fontSize="11px",j.style.padding="5px",j.style.color="red",j.style.zIndex=1e5,M.display&&document.body.appendChild(j);var z,q,N=document.createElement("canvas"),V=N.getContext("2d");b("Step is set to "+M.step+"ms");var G={gif:u,webm:s,ffmpegserver:h,png:o,jpg:a,"webm-mediarecorder":f},H=G[M.format];if(!H)throw"Error: Incorrect or missing format: Valid formats are "+Object.keys(G).join(", ");if(D=new H(M),D.step=d,D.on("process",y),D.on("progress",E),"performance"in window==0&&(window.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in window.performance==0){var K=Date.now();performance.timing&&performance.timing.navigationStart&&(K=performance.timing.navigationStart),window.performance.now=function(){return Date.now()-K}}var Z=window.setTimeout,J=window.setInterval,Y=window.clearInterval,$=window.clearTimeout,Q=window.requestAnimationFrame,X=window.Date.now,tt=window.performance.now,et=window.Date.prototype.getTime,it=[];return{start:i,capture:g,stop:n,save:v,on:B}}var l={function:!0,object:!0},c=(parseFloat,parseInt,l[typeof exports]&&exports&&!exports.nodeType?exports:void 0),p=l[typeof module]&&module&&!module.nodeType?module:void 0,m=p&&p.exports===c?c:void 0,w=t(c&&p&&"object"==typeof global&&global),g=t(l[typeof self]&&self),y=t(l[typeof window]&&window),v=t(l[typeof this]&&this),b=w||y!==(v&&v.window)&&y||g||v||Function("return this")();"gc"in window||(window.gc=function(){}),HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(t,e,i){for(var n=atob(this.toDataURL(e,i).split(",")[1]),r=n.length,o=new Uint8Array(r),a=0;a0&&this.frames/this.settings.framerate>=this.settings.autoSaveTime?this.save(function(t){this.filename=this.baseFilename+"-part-"+e(this.part),download(t,this.filename+this.extension,this.mimeType);var i=this.count;this.dispose(),this.count=i+1,this.part++,this.filename=this.baseFilename+"-part-"+e(this.part),this.frames=0,this.step()}.bind(this)):(this.count++,this.frames++,this.step())}.bind(this),i.readAsArrayBuffer(t)},r.prototype.save=function(t){t(this.tape.save())},r.prototype.dispose=function(){this.tape=new Tar,this.count=0},o.prototype=Object.create(r.prototype),o.prototype.add=function(t){t.toBlob(function(t){r.prototype.add.call(this,t)}.bind(this),this.type)},a.prototype=Object.create(r.prototype),a.prototype.add=function(t){t.toBlob(function(t){r.prototype.add.call(this,t)}.bind(this),this.type,this.quality)},s.prototype=Object.create(n.prototype),s.prototype.start=function(t){this.dispose()},s.prototype.add=function(t){this.videoWriter.addFrame(t),this.settings.autoSaveTime>0&&this.frames/this.settings.framerate>=this.settings.autoSaveTime?this.save(function(t){this.filename=this.baseFilename+"-part-"+e(this.part),download(t,this.filename+this.extension,this.mimeType),this.dispose(),this.part++,this.filename=this.baseFilename+"-part-"+e(this.part),this.step()}.bind(this)):(this.frames++,this.step())},s.prototype.save=function(t){this.videoWriter.complete().then(t)},s.prototype.dispose=function(t){this.frames=0,this.videoWriter=new WebMWriter({quality:this.quality,fileWriter:null,fd:null,frameRate:this.framerate})},h.prototype=Object.create(n.prototype),h.prototype.start=function(){this.encoder.start(this.settings)},h.prototype.add=function(t){this.encoder.add(t)},h.prototype.save=function(t){this.callback=t,this.encoder.end()},h.prototype.safeToProceed=function(){return this.encoder.safeToProceed()},f.prototype=Object.create(n.prototype),f.prototype.add=function(t){this.stream||(this.stream=t.captureStream(this.framerate),this.mediaRecorder=new MediaRecorder(this.stream),this.mediaRecorder.start(),this.mediaRecorder.ondataavailable=function(t){this.chunks.push(t.data)}.bind(this)),this.step()},f.prototype.save=function(t){this.mediaRecorder.onstop=function(e){var i=new Blob(this.chunks,{type:"video/webm"});this.chunks=[],t(i)}.bind(this),this.mediaRecorder.stop()},u.prototype=Object.create(n.prototype),u.prototype.add=function(t){this.sizeSet||(this.encoder.setOption("width",t.width),this.encoder.setOption("height",t.height),this.sizeSet=!0),this.canvas.width=t.width,this.canvas.height=t.height,this.ctx.drawImage(t,0,0),this.encoder.addFrame(this.ctx,{copy:!0,delay:this.settings.step}),this.step()},u.prototype.save=function(t){this.callback=t,this.encoder.render()},(y||g||{}).CCapture=d,"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return d}):c&&p?(m&&((p.exports=d).CCapture=d),c.CCapture=d):b.CCapture=d}(); \ No newline at end of file diff --git a/Deprecated-Code/Client/WebServer/externalScripts/gif.worker.js b/Deprecated-Code/Client/WebServer/externalScripts/gif.worker.js deleted file mode 100644 index 269624e61..000000000 --- a/Deprecated-Code/Client/WebServer/externalScripts/gif.worker.js +++ /dev/null @@ -1,3 +0,0 @@ -// gif.worker.js 0.2.0 - https://github.com/jnordberg/gif.js -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=ByteArray.pageSize)this.newPage();this.pages[this.page][this.cursor++]=val};ByteArray.prototype.writeUTFBytes=function(string){for(var l=string.length,i=0;i=0)this.dispose=disposalCode};GIFEncoder.prototype.setRepeat=function(repeat){this.repeat=repeat};GIFEncoder.prototype.setTransparent=function(color){this.transparent=color};GIFEncoder.prototype.addFrame=function(imageData){this.image=imageData;this.colorTab=this.globalPalette&&this.globalPalette.slice?this.globalPalette:null;this.getImagePixels();this.analyzePixels();if(this.globalPalette===true)this.globalPalette=this.colorTab;if(this.firstFrame){this.writeLSD();this.writePalette();if(this.repeat>=0){this.writeNetscapeExt()}}this.writeGraphicCtrlExt();this.writeImageDesc();if(!this.firstFrame&&!this.globalPalette)this.writePalette();this.writePixels();this.firstFrame=false};GIFEncoder.prototype.finish=function(){this.out.writeByte(59)};GIFEncoder.prototype.setQuality=function(quality){if(quality<1)quality=1;this.sample=quality};GIFEncoder.prototype.setDither=function(dither){if(dither===true)dither="FloydSteinberg";this.dither=dither};GIFEncoder.prototype.setGlobalPalette=function(palette){this.globalPalette=palette};GIFEncoder.prototype.getGlobalPalette=function(){return this.globalPalette&&this.globalPalette.slice&&this.globalPalette.slice(0)||this.globalPalette};GIFEncoder.prototype.writeHeader=function(){this.out.writeUTFBytes("GIF89a")};GIFEncoder.prototype.analyzePixels=function(){if(!this.colorTab){this.neuQuant=new NeuQuant(this.pixels,this.sample);this.neuQuant.buildColormap();this.colorTab=this.neuQuant.getColormap()}if(this.dither){this.ditherPixels(this.dither.replace("-serpentine",""),this.dither.match(/-serpentine/)!==null)}else{this.indexPixels()}this.pixels=null;this.colorDepth=8;this.palSize=7;if(this.transparent!==null){this.transIndex=this.findClosest(this.transparent,true)}};GIFEncoder.prototype.indexPixels=function(imgq){var nPix=this.pixels.length/3;this.indexedPixels=new Uint8Array(nPix);var k=0;for(var j=0;j=0&&x1+x=0&&y1+y>16,(c&65280)>>8,c&255,used)};GIFEncoder.prototype.findClosestRGB=function(r,g,b,used){if(this.colorTab===null)return-1;if(this.neuQuant&&!used){return this.neuQuant.lookupRGB(r,g,b)}var c=b|g<<8|r<<16;var minpos=0;var dmin=256*256*256;var len=this.colorTab.length;for(var i=0,index=0;i=0){disp=dispose&7}disp<<=2;this.out.writeByte(0|disp|0|transp);this.writeShort(this.delay);this.out.writeByte(this.transIndex);this.out.writeByte(0)};GIFEncoder.prototype.writeImageDesc=function(){this.out.writeByte(44);this.writeShort(0);this.writeShort(0);this.writeShort(this.width);this.writeShort(this.height);if(this.firstFrame||this.globalPalette){this.out.writeByte(0)}else{this.out.writeByte(128|0|0|0|this.palSize)}};GIFEncoder.prototype.writeLSD=function(){this.writeShort(this.width);this.writeShort(this.height);this.out.writeByte(128|112|0|this.palSize);this.out.writeByte(0);this.out.writeByte(0)};GIFEncoder.prototype.writeNetscapeExt=function(){this.out.writeByte(33);this.out.writeByte(255);this.out.writeByte(11);this.out.writeUTFBytes("NETSCAPE2.0");this.out.writeByte(3);this.out.writeByte(1);this.writeShort(this.repeat);this.out.writeByte(0)};GIFEncoder.prototype.writePalette=function(){this.out.writeBytes(this.colorTab);var n=3*256-this.colorTab.length;for(var i=0;i>8&255)};GIFEncoder.prototype.writePixels=function(){var enc=new LZWEncoder(this.width,this.height,this.indexedPixels,this.colorDepth);enc.encode(this.out)};GIFEncoder.prototype.stream=function(){return this.out};module.exports=GIFEncoder},{"./LZWEncoder.js":2,"./TypedNeuQuant.js":3}],2:[function(require,module,exports){var EOF=-1;var BITS=12;var HSIZE=5003;var masks=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function LZWEncoder(width,height,pixels,colorDepth){var initCodeSize=Math.max(2,colorDepth);var accum=new Uint8Array(256);var htab=new Int32Array(HSIZE);var codetab=new Int32Array(HSIZE);var cur_accum,cur_bits=0;var a_count;var free_ent=0;var maxcode;var clear_flg=false;var g_init_bits,ClearCode,EOFCode;function char_out(c,outs){accum[a_count++]=c;if(a_count>=254)flush_char(outs)}function cl_block(outs){cl_hash(HSIZE);free_ent=ClearCode+2;clear_flg=true;output(ClearCode,outs)}function cl_hash(hsize){for(var i=0;i=0){disp=hsize_reg-i;if(i===0)disp=1;do{if((i-=disp)<0)i+=hsize_reg;if(htab[i]===fcode){ent=codetab[i];continue outer_loop}}while(htab[i]>=0)}output(ent,outs);ent=c;if(free_ent<1<0){outs.writeByte(a_count);outs.writeBytes(accum,0,a_count);a_count=0}}function MAXCODE(n_bits){return(1<0)cur_accum|=code<=8){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}if(free_ent>maxcode||clear_flg){if(clear_flg){maxcode=MAXCODE(n_bits=g_init_bits);clear_flg=false}else{++n_bits;if(n_bits==BITS)maxcode=1<0){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}flush_char(outs)}}this.encode=encode}module.exports=LZWEncoder},{}],3:[function(require,module,exports){var ncycles=100;var netsize=256;var maxnetpos=netsize-1;var netbiasshift=4;var intbiasshift=16;var intbias=1<>betashift;var betagamma=intbias<>3;var radiusbiasshift=6;var radiusbias=1<>3);var i,v;for(i=0;i>=netbiasshift;network[i][1]>>=netbiasshift;network[i][2]>>=netbiasshift;network[i][3]=i}}function altersingle(alpha,i,b,g,r){network[i][0]-=alpha*(network[i][0]-b)/initalpha;network[i][1]-=alpha*(network[i][1]-g)/initalpha;network[i][2]-=alpha*(network[i][2]-r)/initalpha}function alterneigh(radius,i,b,g,r){var lo=Math.abs(i-radius);var hi=Math.min(i+radius,netsize);var j=i+1;var k=i-1;var m=1;var p,a;while(jlo){a=radpower[m++];if(jlo){p=network[k--];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}}}function contest(b,g,r){var bestd=~(1<<31);var bestbiasd=bestd;var bestpos=-1;var bestbiaspos=bestpos;var i,n,dist,biasdist,betafreq;for(i=0;i>intbiasshift-netbiasshift);if(biasdist>betashift;freq[i]-=betafreq;bias[i]+=betafreq<>1;for(j=previouscol+1;j>1;for(j=previouscol+1;j<256;j++)netindex[j]=maxnetpos}function inxsearch(b,g,r){var a,p,dist;var bestd=1e3;var best=-1;var i=netindex[g];var j=i-1;while(i=0){if(i=bestd)i=netsize;else{i++;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist=0){p=network[j];dist=g-p[1];if(dist>=bestd)j=-1;else{j--;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist>radiusbiasshift;if(rad<=1)rad=0;for(i=0;i=lengthcount)pix-=lengthcount;i++;if(delta===0)delta=1;if(i%delta===0){alpha-=alpha/alphadec;radius-=radius/radiusdec;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(j=0;jli{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} \ No newline at end of file diff --git a/Deprecated-Code/Client/WebServer/index.html b/Deprecated-Code/Client/WebServer/index.html deleted file mode 100644 index 0895149ca..000000000 --- a/Deprecated-Code/Client/WebServer/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Superalgos - - - - - - - - - - - - - - - -
-

Superalgos is free and open-source, and is constantly improving thanks to the involvement of contributors:

-

Luis Fernando Molina, Julian Molina, Andreja Cobeljic, Matías Benitez, Ira Miller, Eduardo Remis, - Jeff Braun, rico4dev, 9808us, Barry Low, Nikola Bjelogrlic, Hirajin Koizuko, Francisco J. Santillán, Viktoria B., Guillermo V., Daniel J., - Javier A., Gustavo J., Romina GS, Pedro P., Thais M., Andrey M., Loui M., Natalia M., Bashar A., Carlos V., Diego M., - Sebastian E., Bogdan P., Marko V., Igor S., Niksa K., Rodrigo M., Nicanor M., Alejandro P., Mateo H., Lan T., Leon A., Uroš R., Filip M., Vladimir J. and Pavle B.

-

You too can help grow and improve Superalgos. Become a contributor!

-
-
-
-
- -
-
- -
-
-
 
- - -
-
-
- - - - - - - -
- - - - - - - -
-
-
- - - \ No newline at end of file diff --git a/Deprecated-Code/Client/WebServer/main.css b/Deprecated-Code/Client/WebServer/main.css deleted file mode 100644 index 18421d890..000000000 --- a/Deprecated-Code/Client/WebServer/main.css +++ /dev/null @@ -1,346 +0,0 @@ -/* latin */ -@font-face { - font-family: 'Saira'; - font-style: normal; - font-weight: 300; - src: local('Saira Light'), local('Saira-Light'), url(Fonts/Saira.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* latin */ -@font-face { - font-family: 'Saira Condensed'; - font-style: normal; - font-weight: 300; - src: local('Saira Condensed Light'), local('SairaCondensed-Light'), url(Fonts/Saira-Condensed.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} - -@font-face { - font-family: segoeui; - src: url(Fonts/segoeui.woff) format('woff'); - font-weight: normal; - font-style: normal; -} - -.credits { - width: 100%; - margin: auto; - margin-bottom: 50; - text-align: center; - position:absolute; - bottom:0; -} - -.credits p { - font-family: 'Saira Condensed'; - font-size: 140%; - color: whitesmoke; - padding: 0 100; -} - -.red { - color: #e3493c; - font-weight: 700; -} - -.tutorial-step { - padding: 15px; - margin-bottom: 20px; - border: 2px solid; - border-color: #1b998b; - border-radius: 8px; - background-color: #fdfdfd; -} - -.tutorial-summary { - font-size:120%; - color: #808080; - margin:20px 0px 20px 0px; - border-left: 5px solid #fd6a33; - padding-left: 10px; - -} - -.tutorial-summary:before { - content: "Summary: "; - font-weight: bold; -} - -.tutorial-definitionTable { - background-color: #f3f3f3; - border-top-color: #a6e1ec; - padding: 15px; - margin: 20px 0; - border: solid 0px; - vertical-align: middle; - min-width: 100px; - width: 100%; -} - -.tutorial-alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; - padding: 15px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #a6e1ec; - width: 90%; -} - -.tutorial-alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; - padding: 15px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #c9e2b3; - width: 90%; -} - -.tutorial-alert-important { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; - padding: 15px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #f7e1b5; - width: 90%; -} - -.tutorial-alert-warning { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; - padding: 15px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #e4b9c0; - width: 90%; -} - -.tutorial-callout { - padding: 20px; - margin: 20px 0; - border: 1px solid #eee; - border-left-width: 5px; - border-radius: 3px; - border-left-color: #bcd643; - font-weight: 500; - width: 90%; -} - -.tutorial-info-circle:before { - content:"\f05a" -} - -.tutorial-check-square-o:before { - content:"\f046" -} - -.tutorial-exclamation-circle:before { - content:"\f06a" -} - -.tutorial-warning:before,.fa-exclamation-triangle:before { - content:"\f06a" -} - -.tutorial-fa { - - font:normal normal normal 14px/1 FontAwesome; - font-size:inherit; - text-rendering:auto; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale -} - -.tutorial-font-small { - - font:normal normal normal 14px/1 "segoeui"; - font-size:inherit; - text-rendering:auto; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale; - line-height: 150% -} - -li > .tutorial-font-small { - margin-bottom:7px; -} - -div.tutorial-font-small { - margin-bottom:7px; -} - -.tutorial-font-medium { - - font:normal normal normal 32px/1 "segoeui"; - text-rendering:auto; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale; - line-height: 150% -} - -.tutorial-font-large { - - font:bold normal normal 40px/1 "segoeui"; - text-rendering:auto; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale; - line-height: 150% -} - -.tutorial-font-bold-small { - - font:bold normal normal 14px/1 "segoeui"; - font-size:inherit; - text-rendering:auto; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale; - line-height: 150% -} - -.tutorial-stop-button { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; - padding: 12px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #e4b9c0; - min-width: 100px; -} - -.tutorial-skip-button { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; - padding: 12px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #f7e1b5; - min-width: 100px; -} - -.tutorial-previous-button { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; - padding: 12px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #c9e2b3; - min-width: 100px; -} - -.tutorial-next-button { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; - padding: 12px; - border: 1px solid transparent; - border-radius: 4px; - margin: 20px 0; - border-top-color: #c9e2b3; - min-width: 100px; -} - -.tutorial-form { - padding: 5px; - border: solid 0px; - margin-left: auto; - margin-right: auto; - margin-bottom: 20px; - width: 100%; -} - -.tutorial-buttonsTable { - border-top-color: #a6e1ec; - border: solid 0px; - vertical-align: middle; - min-width: 100px; - width: 95%; - margin-left: auto; - margin-right: auto; -} - -.tutorial-image-container { - padding: 5px 15px 5px 5px; - border: solid 0px; - margin-left: auto; - margin-right: auto; - width: 100%; -} - -/* Tooltip container */ -.tooltip { - position: relative; - display: inline-block; - border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ -} - -/* Tooltip text */ -.tooltip .tooltiptext { - visibility: hidden; - width: 240px; - background-color: #0295aa; - color: #fff; - font-weight: normal; - font-size: 92%; - line-height: 130%; - text-align: center; - padding: 15px; - border-radius: 6px; - - /* Position the tooltip text */ - position: absolute; - z-index: 1; - bottom: 125%; - left: 50%; - margin-left: -120px; - - - /* Fade in tooltip */ - opacity: 0; - transition: opacity 0.3s; -} - -/* Tooltip arrow */ -.tooltip .tooltiptext::after { - content: ""; - position: absolute; - top: 100%; - left: 50%; - margin-left: -5px; - border-width: 5px; - border-style: solid; - border-color: #0295aa transparent transparent transparent; -} - -/* Show the tooltip text when you mouse over the tooltip container */ -.tooltip:hover .tooltiptext { - visibility: visible; - opacity: 1; -} - -kbd { - padding: 2px 8px; - font-size: 125%; - font-weight: 500; - color: #000; - background-color: #bcd643; - border-radius: 5px; - border-style: outset; - border-width: 1px; -} - diff --git a/Deprecated-Code/Client/WebServer/require.js b/Deprecated-Code/Client/WebServer/require.js deleted file mode 100644 index f9476f532..000000000 --- a/Deprecated-Code/Client/WebServer/require.js +++ /dev/null @@ -1,2145 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. - * Released under MIT license, https://github.com/REQUIREJS/REQUIREJS/blob/master/LICENSE - */ -//Not using strict: uneven strict support in browsers, #392, and causes -//problems with REQUIREJS.exec()/transpiler plugins that may not be strict. -/*jslint regexp: true, nomen: true, sloppy: true */ -/*global window, navigator, document, importScripts, setTimeout, opera */ - -var REQUIREJS, REQUIRE, DEFINE; -(function (global, setTimeout) { - var req, s, head, baseElement, dataMain, src, - interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.3.5', - commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, - cjsRequireRegExp = /[^.]\s*REQUIRE\s*\(\s*["']([^'"\s]+)["']\s*\)/g, - jsSuffixRegExp = /\.js$/, - currDirRegExp = /^\.\//, - op = Object.prototype, - ostring = op.toString, - hasOwn = op.hasOwnProperty, - isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), - isWebWorker = !isBrowser && typeof importScripts !== 'undefined', - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is 'loading', 'loaded', execution, - // then 'complete'. The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = '_', - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', - contexts = {}, - cfg = {}, - globalDefQueue = [], - useInteractive = false; - - //Could match something like ')//comment', do not lose the prefix to comment. - function commentReplace(match, singlePrefix) { - return singlePrefix || ''; - } - - function isFunction(it) { - return ostring.call(it) === '[object Function]'; - } - - function isArray(it) { - return ostring.call(it) === '[object Array]'; - } - - /** - * Helper function for iterating over an array. If the func returns - * a true value, it will break out of the loop. - */ - function each(ary, func) { - if (ary) { - var i; - for (i = 0; i < ary.length; i += 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - /** - * Helper function for iterating over an array backwards. If the func - * returns a true value, it will break out of the loop. - */ - function eachReverse(ary, func) { - if (ary) { - var i; - for (i = ary.length - 1; i > -1; i -= 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - function hasProp(obj, prop) { - return hasOwn.call(obj, prop); - } - - function getOwn(obj, prop) { - return hasProp(obj, prop) && obj[prop]; - } - - /** - * Cycles over properties in an object and calls a function for each - * property value. If the function returns a truthy value, then the - * iteration is stopped. - */ - function eachProp(obj, func) { - var prop; - for (prop in obj) { - if (hasProp(obj, prop)) { - if (func(obj[prop], prop)) { - break; - } - } - } - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - */ - function mixin(target, source, force, deepStringMixin) { - if (source) { - eachProp(source, function (value, prop) { - if (force || !hasProp(target, prop)) { - if (deepStringMixin && typeof value === 'object' && value && - !isArray(value) && !isFunction(value) && - !(value instanceof RegExp)) { - - if (!target[prop]) { - target[prop] = {}; - } - mixin(target[prop], value, force, deepStringMixin); - } else { - target[prop] = value; - } - } - }); - } - return target; - } - - //Similar to Function.prototype.bind, but the 'this' object is specified - //first, since it is easier to read/figure out what 'this' will be. - function bind(obj, fn) { - return function () { - return fn.apply(obj, arguments); - }; - } - - function scripts() { - return document.getElementsByTagName('script'); - } - - function defaultOnError(err) { - throw err; - } - - //Allow getting a global that is expressed in - //dot notation, like 'a.b.c'. - function getGlobal(value) { - if (!value) { - return value; - } - var g = global; - each(value.split('.'), function (part) { - g = g[part]; - }); - return g; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://REQUIREJS.org/docs/errors.html#' + id); - e.requireType = id; - e.requireModules = requireModules; - if (err) { - e.originalError = err; - } - return e; - } - - if (typeof DEFINE !== 'undefined') { - //If a DEFINE is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof REQUIREJS !== 'undefined') { - if (isFunction(REQUIREJS)) { - //Do not overwrite an existing REQUIREJS instance. - return; - } - cfg = REQUIREJS; - REQUIREJS = undefined; - } - - //Allow for a REQUIRE config object - if (typeof REQUIRE !== 'undefined' && !isFunction(REQUIRE)) { - //assume it is a config object. - cfg = REQUIRE; - REQUIRE = undefined; - } - - function newContext(contextName) { - var inCheckLoaded, Module, context, handlers, - checkLoadedTimeoutId, - config = { - //Defaults. Do not set a default for map - //config to speed up normalize(), which - //will run faster if there is no default. - waitSeconds: 60, - baseUrl: './', - paths: {}, - bundles: {}, - pkgs: {}, - shim: {}, - config: {} - }, - registry = {}, - //registry of just enabled modules, to speed - //cycle breaking code when lots of modules - //are registered, but not activated. - enabledRegistry = {}, - undefEvents = {}, - defQueue = [], - defined = {}, - urlFetched = {}, - bundlesMap = {}, - requireCounter = 1, - unnormalizedCounter = 1; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; i < ary.length; i++) { - part = ary[i]; - if (part === '.') { - ary.splice(i, 1); - i -= 1; - } else if (part === '..') { - // If at the start, or previous value is still .., - // keep them so that when converted to a path it may - // still work when converted to a path, even though - // as an ID it is less than ideal. In larger point - // releases, may be better to just kick out an error. - if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { - continue; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @param {Boolean} applyMap apply the map config to the value. Should - * only be done if this normalization is for a dependency ID. - * @returns {String} normalized name - */ - function normalize(name, baseName, applyMap) { - var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, - foundMap, foundI, foundStarMap, starI, normalizedBaseParts, - baseParts = (baseName && baseName.split('/')), - map = config.map, - starMap = map && map['*']; - - //Adjust any relative paths. - if (name) { - name = name.split('/'); - lastIndex = name.length - 1; - - // If wanting node ID compatibility, strip .js from end - // of IDs. Have to do this here, and not in nameToUrl - // because node allows either .js or non .js to map - // to same file. - if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { - name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); - } - - // Starts with a '.' so need the baseName - if (name[0].charAt(0) === '.' && baseParts) { - //Convert baseName to array, and lop off the last part, - //so that . matches that 'directory' and not name of the baseName's - //module. For instance, baseName of 'one/two/three', maps to - //'one/two/three.js', but we want the directory, 'one/two' for - //this normalization. - normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); - name = normalizedBaseParts.concat(name); - } - - trimDots(name); - name = name.join('/'); - } - - //Apply map config if available. - if (applyMap && map && (baseParts || starMap)) { - nameParts = name.split('/'); - - outerLoop: for (i = nameParts.length; i > 0; i -= 1) { - nameSegment = nameParts.slice(0, i).join('/'); - - if (baseParts) { - //Find the longest baseName segment match in the config. - //So, do joins on the biggest to smallest lengths of baseParts. - for (j = baseParts.length; j > 0; j -= 1) { - mapValue = getOwn(map, baseParts.slice(0, j).join('/')); - - //baseName segment has config, find if it has one for - //this name. - if (mapValue) { - mapValue = getOwn(mapValue, nameSegment); - if (mapValue) { - //Match, update name to the new value. - foundMap = mapValue; - foundI = i; - break outerLoop; - } - } - } - } - - //Check for a star map match, but just hold on to it, - //if there is a shorter segment match later in a matching - //config, then favor over this star map. - if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { - foundStarMap = getOwn(starMap, nameSegment); - starI = i; - } - } - - if (!foundMap && foundStarMap) { - foundMap = foundStarMap; - foundI = starI; - } - - if (foundMap) { - nameParts.splice(0, foundI, foundMap); - name = nameParts.join('/'); - } - } - - // If the name points to a package's name, use - // the package main instead. - pkgMain = getOwn(config.pkgs, name); - - return pkgMain ? pkgMain : name; - } - - function removeScript(name) { - if (isBrowser) { - each(scripts(), function (scriptNode) { - if (scriptNode.getAttribute('data-requiremodule') === name && - scriptNode.getAttribute('data-requirecontext') === context.contextName) { - scriptNode.parentNode.removeChild(scriptNode); - return true; - } - }); - } - } - - function hasPathFallback(id) { - var pathConfig = getOwn(config.paths, id); - if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { - //Pop off the first array value, since it failed, and - //retry - pathConfig.shift(); - context.REQUIRE.undef(id); - - //Custom REQUIRE that does not do map translation, since - //ID is "absolute", already mapped/resolved. - context.makeRequire(null, { - skipMap: true - })([id]); - - return true; - } - } - - //Turns a plugin!resource to [plugin, resource] - //with the plugin being undefined if the name - //did not have a plugin prefix. - function splitPrefix(name) { - var prefix, - index = name ? name.indexOf('!') : -1; - if (index > -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - return [prefix, name]; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via REQUIRE.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a DEFINE() module ID. - * @param {Boolean} applyMap: apply the map config to the ID. - * Should only be true if this map is for a dependency. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { - var url, pluginModule, suffix, nameParts, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - isDefine = true, - normalizedName = ''; - - //If no name, then it means it is a REQUIRE call, generate an - //internal name. - if (!name) { - isDefine = false; - name = '_@r' + (requireCounter += 1); - } - - nameParts = splitPrefix(name); - prefix = nameParts[0]; - name = nameParts[1]; - - if (prefix) { - prefix = normalize(prefix, parentName, applyMap); - pluginModule = getOwn(defined, prefix); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - if (isNormalized) { - normalizedName = name; - } else if (pluginModule && pluginModule.normalize) { - //Plugin is loaded, use its normalize method. - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName, applyMap); - }); - } else { - // If nested plugin references, then do not try to - // normalize, as it will not normalize correctly. This - // places a restriction on resourceIds, and the longer - // term solution is not to normalize until plugins are - // loaded and all normalizations to allow for async - // loading of a loader plugin. But for now, fixes the - // common uses. Details in #1131 - normalizedName = name.indexOf('!') === -1 ? - normalize(name, parentName, applyMap) : - name; - } - } else { - //A regular module. - normalizedName = normalize(name, parentName, applyMap); - - //Normalized name may be a plugin ID due to map config - //application in normalize. The map config values must - //already be normalized, so do not need to redo that part. - nameParts = splitPrefix(normalizedName); - prefix = nameParts[0]; - normalizedName = nameParts[1]; - isNormalized = true; - - url = context.nameToUrl(normalizedName); - } - } - - //If the id is a plugin id that cannot be determined if it needs - //normalization, stamp it with a unique ID so two matching relative - //ids that may conflict can be separate. - suffix = prefix && !pluginModule && !isNormalized ? - '_unnormalized' + (unnormalizedCounter += 1) : - ''; - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - unnormalized: !!suffix, - url: url, - originalName: originalName, - isDefine: isDefine, - id: (prefix ? - prefix + '!' + normalizedName : - normalizedName) + suffix - }; - } - - function getModule(depMap) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (!mod) { - mod = registry[id] = new context.Module(depMap); - } - - return mod; - } - - function on(depMap, name, fn) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (hasProp(defined, id) && - (!mod || mod.defineEmitComplete)) { - if (name === 'defined') { - fn(defined[id]); - } - } else { - mod = getModule(depMap); - if (mod.error && name === 'error') { - fn(mod.error); - } else { - mod.on(name, fn); - } - } - } - - function onError(err, errback) { - var ids = err.requireModules, - notified = false; - - if (errback) { - errback(err); - } else { - each(ids, function (id) { - var mod = getOwn(registry, id); - if (mod) { - //Set error on module, so it skips timeout checks. - mod.error = err; - if (mod.events.error) { - notified = true; - mod.emit('error', err); - } - } - }); - - if (!notified) { - req.onError(err); - } - } - } - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - function takeGlobalQueue() { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - each(globalDefQueue, function(queueItem) { - var id = queueItem[0]; - if (typeof id === 'string') { - context.defQueueMap[id] = true; - } - defQueue.push(queueItem); - }); - globalDefQueue = []; - } - } - - handlers = { - 'REQUIRE': function (mod) { - if (mod.REQUIRE) { - return mod.REQUIRE; - } else { - return (mod.REQUIRE = context.makeRequire(mod.map)); - } - }, - 'exports': function (mod) { - mod.usingExports = true; - if (mod.map.isDefine) { - if (mod.exports) { - return (defined[mod.map.id] = mod.exports); - } else { - return (mod.exports = defined[mod.map.id] = {}); - } - } - }, - 'module': function (mod) { - if (mod.module) { - return mod.module; - } else { - return (mod.module = { - id: mod.map.id, - uri: mod.map.url, - config: function () { - return getOwn(config.config, mod.map.id) || {}; - }, - exports: mod.exports || (mod.exports = {}) - }); - } - } - }; - - function cleanRegistry(id) { - //Clean up machinery used for waiting modules. - delete registry[id]; - delete enabledRegistry[id]; - } - - function breakCycle(mod, traced, processed) { - var id = mod.map.id; - - if (mod.error) { - mod.emit('error', mod.error); - } else { - traced[id] = true; - each(mod.depMaps, function (depMap, i) { - var depId = depMap.id, - dep = getOwn(registry, depId); - - //Only force things that have not completed - //being defined, so still in the registry, - //and only if it has not been matched up - //in the module already. - if (dep && !mod.depMatched[i] && !processed[depId]) { - if (getOwn(traced, depId)) { - mod.defineDep(i, defined[depId]); - mod.check(); //pass false? - } else { - breakCycle(dep, traced, processed); - } - } - }); - processed[id] = true; - } - } - - function checkLoaded() { - var err, usingPathFallback, - waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = [], - reqCalls = [], - stillLoading = false, - needCycleCheck = true; - - //Do not bother if this call was a result of a cycle break. - if (inCheckLoaded) { - return; - } - - inCheckLoaded = true; - - //Figure out the state of all the modules. - eachProp(enabledRegistry, function (mod) { - var map = mod.map, - modId = map.id; - - //Skip things that are not enabled or in error state. - if (!mod.enabled) { - return; - } - - if (!map.isDefine) { - reqCalls.push(mod); - } - - if (!mod.error) { - //If the module should be executed, and it has not - //been inited and time is up, remember it. - if (!mod.inited && expired) { - if (hasPathFallback(modId)) { - usingPathFallback = true; - stillLoading = true; - } else { - noLoads.push(modId); - removeScript(modId); - } - } else if (!mod.inited && mod.fetched && map.isDefine) { - stillLoading = true; - if (!map.prefix) { - //No reason to keep looking for unfinished - //loading. If the only stillLoading is a - //plugin resource though, keep going, - //because it may be that a plugin resource - //is waiting on a non-plugin cycle. - return (needCycleCheck = false); - } - } - } - }); - - if (expired && noLoads.length) { - //If wait time expired, throw error of unloaded modules. - err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); - err.contextName = context.contextName; - return onError(err); - } - - //Not expired, check for a cycle. - if (needCycleCheck) { - each(reqCalls, function (mod) { - breakCycle(mod, {}, {}); - }); - } - - //If still waiting on loads, and the waiting load is something - //other than a plugin resource, or there are still outstanding - //scripts, then just try back later. - if ((!expired || usingPathFallback) && stillLoading) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - } - - inCheckLoaded = false; - } - - Module = function (map) { - this.events = getOwn(undefEvents, map.id) || {}; - this.map = map; - this.shim = getOwn(config.shim, map.id); - this.depExports = []; - this.depMaps = []; - this.depMatched = []; - this.pluginMaps = {}; - this.depCount = 0; - - /* this.exports this.factory - this.depMaps = [], - this.enabled, this.fetched - */ - }; - - Module.prototype = { - init: function (depMaps, factory, errback, options) { - options = options || {}; - - //Do not do more inits if already done. Can happen if there - //are multiple DEFINE calls for the same module. That is not - //a normal, common case, but it is also not unexpected. - if (this.inited) { - return; - } - - this.factory = factory; - - if (errback) { - //Register for errors on this module. - this.on('error', errback); - } else if (this.events.error) { - //If no errback already, but there are error listeners - //on this module, set up an errback to pass to the deps. - errback = bind(this, function (err) { - this.emit('error', err); - }); - } - - //Do a copy of the dependency array, so that - //source inputs are not modified. For example - //"shim" deps are passed in here directly, and - //doing a direct modification of the depMaps array - //would affect that config. - this.depMaps = depMaps && depMaps.slice(0); - - this.errback = errback; - - //Indicate this module has be initialized - this.inited = true; - - this.ignore = options.ignore; - - //Could have option to init this module in enabled mode, - //or could have been previously marked as enabled. However, - //the dependencies are not known until init is called. So - //if enabled previously, now trigger dependencies as enabled. - if (options.enabled || this.enabled) { - //Enable this module and dependencies. - //Will call this.check() - this.enable(); - } else { - this.check(); - } - }, - - defineDep: function (i, depExports) { - //Because of cycles, defined callback for a given - //export can be called more than once. - if (!this.depMatched[i]) { - this.depMatched[i] = true; - this.depCount -= 1; - this.depExports[i] = depExports; - } - }, - - fetch: function () { - if (this.fetched) { - return; - } - this.fetched = true; - - context.startTime = (new Date()).getTime(); - - var map = this.map; - - //If the manager is for a plugin managed resource, - //ask the plugin to load it now. - if (this.shim) { - context.makeRequire(this.map, { - enableBuildCallback: true - })(this.shim.deps || [], bind(this, function () { - return map.prefix ? this.callPlugin() : this.load(); - })); - } else { - //Regular dependency. - return map.prefix ? this.callPlugin() : this.load(); - } - }, - - load: function () { - var url = this.map.url; - - //Regular dependency. - if (!urlFetched[url]) { - urlFetched[url] = true; - context.load(this.map.id, url); - } - }, - - /** - * Checks if the module is ready to DEFINE itself, and if so, - * DEFINE it. - */ - check: function () { - if (!this.enabled || this.enabling) { - return; - } - - var err, cjsModule, - id = this.map.id, - depExports = this.depExports, - exports = this.exports, - factory = this.factory; - - if (!this.inited) { - // Only fetch if not already in the defQueue. - if (!hasProp(context.defQueueMap, id)) { - this.fetch(); - } - } else if (this.error) { - this.emit('error', this.error); - } else if (!this.defining) { - //The factory could trigger another REQUIRE call - //that would result in checking this module to - //DEFINE itself again. If already in the process - //of doing that, skip this work. - this.defining = true; - - if (this.depCount < 1 && !this.defined) { - if (isFunction(factory)) { - //If there is an error listener, favor passing - //to that instead of throwing an error. However, - //only do it for DEFINE()'d modules. REQUIRE - //errbacks should not be called for failures in - //their callbacks (#699). However if a global - //onError is set, use that. - if ((this.events.error && this.map.isDefine) || - req.onError !== defaultOnError) { - try { - exports = context.execCb(id, factory, depExports, exports); - } catch (e) { - err = e; - } - } else { - exports = context.execCb(id, factory, depExports, exports); - } - - // Favor return value over exports. If node/cjs in play, - // then will not have a return value anyway. Favor - // module.exports assignment over exports object. - if (this.map.isDefine && exports === undefined) { - cjsModule = this.module; - if (cjsModule) { - exports = cjsModule.exports; - } else if (this.usingExports) { - //exports already set the defined value. - exports = this.exports; - } - } - - if (err) { - err.requireMap = this.map; - err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'DEFINE' : 'REQUIRE'; - return onError((this.error = err)); - } - - } else { - //Just a literal value - exports = factory; - } - - this.exports = exports; - - if (this.map.isDefine && !this.ignore) { - defined[id] = exports; - - if (req.onResourceLoad) { - var resLoadMaps = []; - each(this.depMaps, function (depMap) { - resLoadMaps.push(depMap.normalizedMap || depMap); - }); - req.onResourceLoad(context, this.map, resLoadMaps); - } - } - - //Clean up - cleanRegistry(id); - - this.defined = true; - } - - //Finished the DEFINE stage. Allow calling check again - //to allow DEFINE notifications below in the case of a - //cycle. - this.defining = false; - - if (this.defined && !this.defineEmitted) { - this.defineEmitted = true; - this.emit('defined', this.exports); - this.defineEmitComplete = true; - } - - } - }, - - callPlugin: function () { - var map = this.map, - id = map.id, - //Map already normalized the prefix. - pluginMap = makeModuleMap(map.prefix); - - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(pluginMap); - - on(pluginMap, 'defined', bind(this, function (plugin) { - var load, normalizedMap, normalizedMod, - bundleId = getOwn(bundlesMap, this.map.id), - name = this.map.name, - parentName = this.map.parentMap ? this.map.parentMap.name : null, - localRequire = context.makeRequire(map.parentMap, { - enableBuildCallback: true - }); - - //If current map is not normalized, wait for that - //normalized name to load instead of continuing. - if (this.map.unnormalized) { - //Normalize the ID if the plugin allows it. - if (plugin.normalize) { - name = plugin.normalize(name, function (name) { - return normalize(name, parentName, true); - }) || ''; - } - - //prefix and name should already be normalized, no need - //for applying map config again either. - normalizedMap = makeModuleMap(map.prefix + '!' + name, - this.map.parentMap, - true); - on(normalizedMap, - 'defined', bind(this, function (value) { - this.map.normalizedMap = normalizedMap; - this.init([], function () { return value; }, null, { - enabled: true, - ignore: true - }); - })); - - normalizedMod = getOwn(registry, normalizedMap.id); - if (normalizedMod) { - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(normalizedMap); - - if (this.events.error) { - normalizedMod.on('error', bind(this, function (err) { - this.emit('error', err); - })); - } - normalizedMod.enable(); - } - - return; - } - - //If a paths config, then just load that file instead to - //resolve the plugin, as it is built into that paths layer. - if (bundleId) { - this.map.url = context.nameToUrl(bundleId); - this.load(); - return; - } - - load = bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true - }); - }); - - load.error = bind(this, function (err) { - this.inited = true; - this.error = err; - err.requireModules = [id]; - - //Remove temp unnormalized modules for this module, - //since they will never be resolved otherwise now. - eachProp(registry, function (mod) { - if (mod.map.id.indexOf(id + '_unnormalized') === 0) { - cleanRegistry(mod.map.id); - } - }); - - onError(err); - }); - - //Allow plugins to load other code without having to know the - //context or how to 'complete' the load. - load.fromText = bind(this, function (text, textAlt) { - /*jslint evil: true */ - var moduleName = map.name, - moduleMap = makeModuleMap(moduleName), - hasInteractive = useInteractive; - - //As of 2.1.0, support just passing the text, to reinforce - //fromText only being called once per resource. Still - //support old style of passing moduleName but discard - //that moduleName in favor of the internal ref. - if (textAlt) { - text = textAlt; - } - - //Turn off interactive script matching for IE for any DEFINE - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - //Prime the system by creating a module instance for - //it. - getModule(moduleMap); - - //Transfer any config to this other module. - if (hasProp(config.config, id)) { - config.config[moduleName] = config.config[id]; - } - - try { - req.exec(text); - } catch (e) { - return onError(makeError('fromtexteval', - 'fromText eval for ' + id + - ' failed: ' + e, - e, - [id])); - } - - if (hasInteractive) { - useInteractive = true; - } - - //Mark this as a dependency for the plugin - //resource - this.depMaps.push(moduleMap); - - //Support anonymous modules. - context.completeLoad(moduleName); - - //Bind the value of that module to the value for this - //resource ID. - localRequire([moduleName], load); - }); - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugin.load(map.name, localRequire, load, config); - })); - - context.enable(pluginMap, this); - this.pluginMaps[pluginMap.id] = pluginMap; - }, - - enable: function () { - enabledRegistry[this.map.id] = this; - this.enabled = true; - - //Set flag mentioning that the module is enabling, - //so that immediate calls to the defined callbacks - //for dependencies do not trigger inadvertent load - //with the depCount still being zero. - this.enabling = true; - - //Enable each dependency - each(this.depMaps, bind(this, function (depMap, i) { - var id, mod, handler; - - if (typeof depMap === 'string') { - //Dependency needs to be converted to a depMap - //and wired up to this module. - depMap = makeModuleMap(depMap, - (this.map.isDefine ? this.map : this.map.parentMap), - false, - !this.skipMap); - this.depMaps[i] = depMap; - - handler = getOwn(handlers, depMap.id); - - if (handler) { - this.depExports[i] = handler(this); - return; - } - - this.depCount += 1; - - on(depMap, 'defined', bind(this, function (depExports) { - if (this.undefed) { - return; - } - this.defineDep(i, depExports); - this.check(); - })); - - if (this.errback) { - on(depMap, 'error', bind(this, this.errback)); - } else if (this.events.error) { - // No direct errback on this module, but something - // else is listening for errors, so be sure to - // propagate the error correctly. - on(depMap, 'error', bind(this, function(err) { - this.emit('error', err); - })); - } - } - - id = depMap.id; - mod = registry[id]; - - //Skip special modules like 'REQUIRE', 'exports', 'module' - //Also, don't call enable if it is already enabled, - //important in circular dependency cases. - if (!hasProp(handlers, id) && mod && !mod.enabled) { - context.enable(depMap, this); - } - })); - - //Enable each plugin that is used in - //a dependency - eachProp(this.pluginMaps, bind(this, function (pluginMap) { - var mod = getOwn(registry, pluginMap.id); - if (mod && !mod.enabled) { - context.enable(pluginMap, this); - } - })); - - this.enabling = false; - - this.check(); - }, - - on: function (name, cb) { - var cbs = this.events[name]; - if (!cbs) { - cbs = this.events[name] = []; - } - cbs.push(cb); - }, - - emit: function (name, evt) { - each(this.events[name], function (cb) { - cb(evt); - }); - if (name === 'error') { - //Now that the error handler was triggered, remove - //the listeners, since this broken Module instance - //can stay around for a while in the registry. - delete this.events[name]; - } - } - }; - - function callGetModule(args) { - //Skip modules already defined. - if (!hasProp(defined, args[0])) { - getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); - } - } - - function removeListener(node, func, name, ieName) { - //Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - if (ieName) { - node.detachEvent(ieName, func); - } - } else { - node.removeEventListener(name, func, false); - } - } - - /** - * Given an event from a script node, get the REQUIREJS info from it, - * and then removes the event listeners on the node. - * @param {Event} evt - * @returns {Object} - */ - function getScriptData(evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement; - - //Remove the listeners once here. - removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); - removeListener(node, context.onScriptError, 'error'); - - return { - node: node, - id: node && node.getAttribute('data-requiremodule') - }; - } - - function intakeDefines() { - var args; - - //Any defined modules in the global queue, intake them now. - takeGlobalQueue(); - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous DEFINE() module: ' + - args[args.length - 1])); - } else { - //args are id, deps, factory. Should be normalized by the - //DEFINE() function. - callGetModule(args); - } - } - context.defQueueMap = {}; - } - - context = { - config: config, - contextName: contextName, - registry: registry, - defined: defined, - urlFetched: urlFetched, - defQueue: defQueue, - defQueueMap: {}, - Module: Module, - makeModuleMap: makeModuleMap, - nextTick: req.nextTick, - onError: onError, - - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { - cfg.baseUrl += '/'; - } - } - - // Convert old style urlArgs string to a function. - if (typeof cfg.urlArgs === 'string') { - var urlArgs = cfg.urlArgs; - cfg.urlArgs = function(id, url) { - return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; - }; - } - - //Save off the paths since they REQUIRE special processing, - //they are additive. - var shim = config.shim, - objs = { - paths: true, - bundles: true, - config: true, - map: true - }; - - eachProp(cfg, function (value, prop) { - if (objs[prop]) { - if (!config[prop]) { - config[prop] = {}; - } - mixin(config[prop], value, true, true); - } else { - config[prop] = value; - } - }); - - //Reverse map the bundles - if (cfg.bundles) { - eachProp(cfg.bundles, function (value, prop) { - each(value, function (v) { - if (v !== prop) { - bundlesMap[v] = prop; - } - }); - }); - } - - //Merge shim - if (cfg.shim) { - eachProp(cfg.shim, function (value, id) { - //Normalize the structure - if (isArray(value)) { - value = { - deps: value - }; - } - if ((value.exports || value.init) && !value.exportsFn) { - value.exportsFn = context.makeShimExports(value); - } - shim[id] = value; - }); - config.shim = shim; - } - - //Adjust packages if necessary. - if (cfg.packages) { - each(cfg.packages, function (pkgObj) { - var location, name; - - pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj; - - name = pkgObj.name; - location = pkgObj.location; - if (location) { - config.paths[name] = pkgObj.location; - } - - //Save pointer to main module ID for pkg name. - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, ''); - }); - } - - //If there are any "waiting to execute" modules in the registry, - //update the maps for them, since their info, like URLs to load, - //may have changed. - eachProp(registry, function (mod, id) { - //If module already has init called, since it is too - //late to modify them, and ignore unnormalized ones - //since they are transient. - if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id, null, true); - } - }); - - //If a deps array or a config callback is specified, then call - //REQUIRE with those args. This is useful when REQUIRE is defined as a - //config object before REQUIRE.js is loaded. - if (cfg.deps || cfg.callback) { - context.REQUIRE(cfg.deps || [], cfg.callback); - } - }, - - makeShimExports: function (value) { - function fn() { - var ret; - if (value.init) { - ret = value.init.apply(global, arguments); - } - return ret || (value.exports && getGlobal(value.exports)); - } - return fn; - }, - - makeRequire: function (relMap, options) { - options = options || {}; - - function localRequire(deps, callback, errback) { - var id, map, requireMod; - - if (options.enableBuildCallback && callback && isFunction(callback)) { - callback.__requireJsBuild = true; - } - - if (typeof deps === 'string') { - if (isFunction(callback)) { - //Invalid call - return onError(makeError('requireargs', 'Invalid REQUIRE call'), errback); - } - - //If REQUIRE|exports|module are requested, get the - //value for them from the special handlers. Caveat: - //this only works while module is being defined. - if (relMap && hasProp(handlers, deps)) { - return handlers[deps](registry[relMap.id]); - } - - //Synchronous access to one module. If REQUIRE.get is - //available (as in the Node adapter), prefer that. - if (req.get) { - return req.get(context, deps, relMap, localRequire); - } - - //Normalize module name, if it contains . or .. - map = makeModuleMap(deps, relMap, false, true); - id = map.id; - - if (!hasProp(defined, id)) { - return onError(makeError('notloaded', 'Module name "' + - id + - '" has not been loaded yet for context: ' + - contextName + - (relMap ? '' : '. Use REQUIRE([])'))); - } - return defined[id]; - } - - //Grab defines waiting in the global queue. - intakeDefines(); - - //Mark all the dependencies as needing to be loaded. - context.nextTick(function () { - //Some defines could have been added since the - //REQUIRE call, collect them. - intakeDefines(); - - requireMod = getModule(makeModuleMap(null, relMap)); - - //Store if map config should be applied to this REQUIRE - //call for dependencies. - requireMod.skipMap = options.skipMap; - - requireMod.init(deps, callback, errback, { - enabled: true - }); - - checkLoaded(); - }); - - return localRequire; - } - - mixin(localRequire, { - isBrowser: isBrowser, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt) { - var ext, - index = moduleNamePlusExt.lastIndexOf('.'), - segment = moduleNamePlusExt.split('/')[0], - isRelative = segment === '.' || segment === '..'; - - //Have a file extension alias, and it is not the - //dots from a relative path. - if (index !== -1 && (!isRelative || index > 1)) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(normalize(moduleNamePlusExt, - relMap && relMap.id, true), ext, true); - }, - - defined: function (id) { - return hasProp(defined, makeModuleMap(id, relMap, false, true).id); - }, - - specified: function (id) { - id = makeModuleMap(id, relMap, false, true).id; - return hasProp(defined, id) || hasProp(registry, id); - } - }); - - //Only allow undef on top level REQUIRE calls - if (!relMap) { - localRequire.undef = function (id) { - //Bind any waiting DEFINE() calls to this context, - //fix for #408 - takeGlobalQueue(); - - var map = makeModuleMap(id, relMap, true), - mod = getOwn(registry, id); - - mod.undefed = true; - removeScript(id); - - delete defined[id]; - delete urlFetched[map.url]; - delete undefEvents[id]; - - //Clean queued defines too. Go backwards - //in array so that the splices do not - //mess up the iteration. - eachReverse(defQueue, function(args, i) { - if (args[0] === id) { - defQueue.splice(i, 1); - } - }); - delete context.defQueueMap[id]; - - if (mod) { - //Hold on to listeners in case the - //module will be attempted to be reloaded - //using a different config. - if (mod.events.defined) { - undefEvents[id] = mod.events; - } - - cleanRegistry(id); - } - }; - } - - return localRequire; - }, - - /** - * Called to enable a module if it is still in the registry - * awaiting enablement. A second arg, parent, the parent module, - * is passed in for context, when this method is overridden by - * the optimizer. Not shown here to keep code compact. - */ - enable: function (depMap) { - var mod = getOwn(registry, depMap.id); - if (mod) { - getModule(depMap).enable(); - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var found, args, mod, - shim = getOwn(config.shim, moduleName) || {}, - shExports = shim.exports; - - takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - args[0] = moduleName; - //If already found an anonymous module and bound it - //to this name, then this is some other anon module - //waiting for its completeLoad to fire. - if (found) { - break; - } - found = true; - } else if (args[0] === moduleName) { - //Found matching DEFINE call for this script! - found = true; - } - - callGetModule(args); - } - context.defQueueMap = {}; - - //Do this after the cycle of callGetModule in case the result - //of those calls/init calls changes the registry. - mod = getOwn(registry, moduleName); - - if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { - if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { - if (hasPathFallback(moduleName)) { - return; - } else { - return onError(makeError('nodefine', - 'No DEFINE call for ' + moduleName, - null, - [moduleName])); - } - } else { - //A script that does not call DEFINE(), so just simulate - //the call for it. - callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); - } - } - - checkLoaded(); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - * Note that it **does not** call normalize on the moduleName, - * it is assumed to have already been normalized. This is an - * internal API, not a public one. Use toUrl for the public API. - */ - nameToUrl: function (moduleName, ext, skipExt) { - var paths, syms, i, parentModule, url, - parentPath, bundleId, - pkgMain = getOwn(config.pkgs, moduleName); - - if (pkgMain) { - moduleName = pkgMain; - } - - bundleId = getOwn(bundlesMap, moduleName); - - if (bundleId) { - return context.nameToUrl(bundleId, ext, skipExt); - } - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) - //or ends with .js, then assume the user meant to use an url and not a module id. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext || ''); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - - syms = moduleName.split('/'); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i -= 1) { - parentModule = syms.slice(0, i).join('/'); - - parentPath = getOwn(paths, parentModule); - if (parentPath) { - //If an array, it means there are a few choices, - //Choose the one that is desired - if (isArray(parentPath)) { - parentPath = parentPath[0]; - } - syms.splice(0, i, parentPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join('/'); - url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); - url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; - } - - return config.urlArgs && !/^blob\:/.test(url) ? - url + config.urlArgs(moduleName, url) : url; - }, - - //Delegates to req.load. Broken out as a separate function to - //allow overriding in the optimizer. - load: function (id, url) { - req.load(context, id, url); - }, - - /** - * Executes a module callback function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - execCb: function (name, callback, args, exports) { - return callback.apply(exports, args); - }, - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - */ - onScriptLoad: function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - if (evt.type === 'load' || - (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - var data = getScriptData(evt); - context.completeLoad(data.id); - } - }, - - /** - * Callback for script errors. - */ - onScriptError: function (evt) { - var data = getScriptData(evt); - if (!hasPathFallback(data.id)) { - var parents = []; - eachProp(registry, function(value, key) { - if (key.indexOf('_@r') !== 0) { - each(value.depMaps, function(depMap) { - if (depMap.id === data.id) { - parents.push(key); - return true; - } - }); - } - }); - return onError(makeError('scripterror', 'Script error for "' + data.id + - (parents.length ? - '", needed by: ' + parents.join(', ') : - '"'), evt, [data.id])); - } - } - }; - - context.REQUIRE = context.makeRequire(); - return context; - } - - /** - * Main entry point. - * - * If the only argument to REQUIRE is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a REQUIRE that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = REQUIREJS = function (deps, callback, errback, optional) { - - //Find the right context, use default - var context, config, - contextName = defContextName; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== 'string') { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = errback; - errback = optional; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = getOwn(contexts, contextName); - if (!context) { - context = contexts[contextName] = req.s.newContext(contextName); - } - - if (config) { - context.configure(config); - } - - return context.REQUIRE(deps, callback, errback); - }; - - /** - * Support REQUIRE.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Execute something after the current tick - * of the event loop. Override for other envs - * that have a better solution than setTimeout. - * @param {Function} fn function to execute later. - */ - req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { - setTimeout(fn, 4); - } : function (fn) { fn(); }; - - /** - * Export REQUIRE as a global, but only if it does not already exist. - */ - if (!REQUIRE) { - REQUIRE = req; - } - - req.version = version; - - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - req.isBrowser = isBrowser; - s = req.s = { - contexts: contexts, - newContext: newContext - }; - - //Create default context. - req({}); - - //Exports some context-sensitive methods on global REQUIRE. - each([ - 'toUrl', - 'undef', - 'defined', - 'specified' - ], function (prop) { - //Reference from contexts instead of early binding to default context, - //so that during builds, the latest instance of the default context - //with its config gets used. - req[prop] = function () { - var ctx = contexts[defContextName]; - return ctx.REQUIRE[prop].apply(ctx, arguments); - }; - }); - - if (isBrowser) { - head = s.head = document.getElementsByTagName('head')[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName('base')[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that REQUIRE explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = defaultOnError; - - /** - * Creates the node for the load command. Only used in browser envs. - */ - req.createNode = function (config, moduleName, url) { - var node = config.xhtml ? - document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : - document.createElement('script'); - node.type = config.scriptType || 'text/javascript'; - node.charset = 'utf-8'; - node.async = true; - return node; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the REQUIRE context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var config = (context && context.config) || {}, - node; - if (isBrowser) { - //In the browser so use a script tag - node = req.createNode(config, moduleName, url); - - node.setAttribute('data-requirecontext', context.contextName); - node.setAttribute('data-requiremodule', moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && - //Check if node.attachEvent is artificially added by custom script or - //natively supported by browser - //read https://github.com/REQUIREJS/REQUIREJS/issues/187 - //if we can NOT find [native code] then it must NOT natively supported. - //in IE8, node.attachEvent does not have toString() - //Note the test for "[native code" with no closing brace, see: - //https://github.com/REQUIREJS/REQUIREJS/issues/273 - !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && - !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous DEFINE call to a name. - //However, IE reports the script as being in 'interactive' - //readyState at the time of the DEFINE call. - useInteractive = true; - - node.attachEvent('onreadystatechange', context.onScriptLoad); - //It would be great to add an error handler here to catch - //404s in IE9+. However, onreadystatechange will fire before - //the error handler, so that does not help. If addEventListener - //is used, then IE will fire error before load, but we cannot - //use that pathway given the connect.microsoft.com issue - //mentioned above about not doing the 'script execute, - //then fire the script load event listener before execute - //next script' that other browsers do. - //Best hope: IE10 fixes the issues, - //and then destroys all installs of IE 6-9. - //node.attachEvent('onerror', context.onScriptError); - } else { - node.addEventListener('load', context.onScriptLoad, false); - node.addEventListener('error', context.onScriptError, false); - } - node.src = url; - - //Calling onNodeCreated after all properties on the node have been - //set, but before it is placed in the DOM. - if (config.onNodeCreated) { - config.onNodeCreated(node, config, moduleName, url); - } - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous DEFINE - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - - return node; - } else if (isWebWorker) { - try { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation is that a build has been done so - //that only one script needs to be loaded anyway. This may need - //to be reevaluated if other use cases become common. - - // Post a task to the event loop to work around a bug in WebKit - // where the worker gets garbage-collected after calling - // importScripts(): https://webkit.org/b/153317 - setTimeout(function() {}, 0); - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } catch (e) { - context.onError(makeError('importscripts', - 'importScripts failed for ' + - moduleName + ' at ' + url, - e, - [moduleName])); - } - } - }; - - function getInteractiveScript() { - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - eachReverse(scripts(), function (script) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - }); - return interactiveScript; - } - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with REQUIRE.js in it. - eachReverse(scripts(), function (script) { - //Set the 'head' where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - dataMain = script.getAttribute('data-main'); - if (dataMain) { - //Preserve dataMain in case it is a path (i.e. contains '?') - mainScript = dataMain; - - //Set final baseUrl if there is not already an explicit one, - //but only do so if the data-main value is not a loader plugin - //module ID. - if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = mainScript.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - cfg.baseUrl = subPath; - } - - //Strip off any trailing .js since mainScript is now - //like a module name. - mainScript = mainScript.replace(jsSuffixRegExp, ''); - - //If mainScript is still a path, fall back to dataMain - if (req.jsExtRegExp.test(mainScript)) { - mainScript = dataMain; - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; - - return true; - } - }); - } - - /** - * The function that handles definitions of modules. Differs from - * REQUIRE() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to DEFINE the module corresponding to the first argument's - * name. - */ - DEFINE = function (name, deps, callback) { - var node, context; - - //Allow for anonymous modules - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!isArray(deps)) { - callback = deps; - deps = null; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!deps && isFunction(callback)) { - deps = []; - //Remove comments from the callback string, - //look for REQUIRE calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, commentReplace) - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without REQUIRE calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs REQUIRE. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ['REQUIRE'] : ['REQUIRE', 'exports', 'module']).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous DEFINE() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute('data-requiremodule'); - } - context = contexts[node.getAttribute('data-requirecontext')]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - if (context) { - context.defQueue.push([name, deps, callback]); - context.defQueueMap[name] = true; - } else { - globalDefQueue.push([name, deps, callback]); - } - }; - - DEFINE.amd = { - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a better, environment-specific call. Only used for transpiling - * loader plugins, not for plain JS modules. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - /*jslint evil: true */ - return eval(text); - }; - - //Set up with config info. - req(cfg); -}(this, (typeof setTimeout === 'undefined' ? undefined : setTimeout))); diff --git a/Deprecated-Code/Client/WebServer/suite-dummy.html b/Deprecated-Code/Client/WebServer/suite-dummy.html deleted file mode 100644 index 78b108803..000000000 --- a/Deprecated-Code/Client/WebServer/suite-dummy.html +++ /dev/null @@ -1,54 +0,0 @@ -

Trading Engine

- -
- - - - - -The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others. - -
- -

You will use this hierarchy for two main purposes:

- -

The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users. The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.

- -
    -
  • -

    To let your trading systems: This allows strategies to keep track of and react to current and past events—including those involving the exchange, such as orders placed or filled—as the bot is running.

    -
  • -
  • -

    To keep track of the actions: By analyzing runtime information, you may gain a detailed understanding of what happens, when, and why, throughout a trading session.

    -
  • -
- -

The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.

- -
Este callout se usa para resaltar una idea particularmente importante. Algo se sobresale, como una conclusion, o algo por el estilo.
- -

The hierarchy exposes all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users. The hierarchy exposes all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.

- - - - - - - - - -

Adding a Trading Engine Node

- -

Calculo que con este segundo nivel de titulo alcanza.

- -

Este es otro formato tipico de la doc: Trading Engine

- -
- - - - - -The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others. - -
diff --git a/Deprecated-Code/Client/eventsServer.js b/Deprecated-Code/Client/eventsServer.js deleted file mode 100644 index 16422175f..000000000 --- a/Deprecated-Code/Client/eventsServer.js +++ /dev/null @@ -1,237 +0,0 @@ -exports.newEventsServer = function newEventsServer() { - - const MODULE = "Events Server" - const LOG_INFO = false - - let thisObject = { - initialize: initialize, - finalize: finalize, - run: run, - onMessage: onMessage - } - - let eventHandlers = new Map() - let counter = 0 - - return thisObject - - function finalize() { - - } - - function initialize() { - - } - - function onMessage(data, callbackFunction) { - try { - let command = JSON.parse(data) - - switch (command.action) { - case "greetings": { - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - case "createEventHandler": { - let eventHandler = eventHandlers.get(command.eventHandlerName) - if (eventHandler === undefined) { - /* - We will only create event handlers which were not created before. Remember that someone trying to listen events - at an event handler that does not exist, will create that eventhandler, so it is possible that the emitter - when trying to create the event handler in fact was late and the event handler is already there if the listener - arrived here first. An event handler created with this method is not destroyed if there are no listeners or they - all leave. - */ - eventHandler = newEventHandler() - eventHandler.deleteWhenAllListenersAreGone = false - eventHandlers.set(command.eventHandlerName, eventHandler) - } - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - case "deleteEventHandler": { - let eventHandler = eventHandlers.get(command.eventHandlerName) - if (eventHandler !== undefined) { - /* - We will only delete event handlers which have noone listening, allowing a listener to continue listening even - when the event emitter is gone, asuming that it could come back at some point in time and resume emitting. - */ - if (eventHandler.listeners.length === 0) { - eventHandlers.delete(command.eventHandlerName) - } else { - eventHandler.deleteWhenAllListenersAreGone = true - } - } - - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - case "listenToEvent": { - let eventHandler = eventHandlers.get(command.eventHandlerName) - if (eventHandler === undefined) { - /* - We will create event handlers which were not created before if a listener tries to listen to a handler that does not - exist before the emitter comes and create it. This is to aviod syncronization problems and also problems with emitters life - cycles with higher frecuency that the ones of listeners. Created in this way, event handlers are marked for deletion if - all listeners stop listening at one point in time. - */ - eventHandler = newEventHandler() - eventHandler.deleteWhenAllListenersAreGone = true - eventHandlers.set(command.eventHandlerName, eventHandler) - } - eventSubscriptionId = eventHandler.listenToEvent(command.eventHandlerName, command.eventType, command.callerId, handlerFunction, command.extraData) - - function handlerFunction(event, extraData) { - let outputData = { - action: 'Event Raised', - eventHandlerName: command.eventHandlerName, - eventType: command.eventType, - event: event, - callerId: command.callerId, - extraData: extraData - } - callbackFunction(JSON.stringify(outputData)) - } - - let response = { - result: global.DEFAULT_OK_RESPONSE.result, - message: global.DEFAULT_OK_RESPONSE.message, - eventSubscriptionId: eventSubscriptionId - } - - sendResponse(response) - return - } - case "stopListening": { - let eventHandler = eventHandlers.get(command.eventHandlerName) - - if (eventHandler === undefined) { - - /* If the event handler does not exist anymore, then there is no need to perform further actiions. */ - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - - eventHandler.stopListening(command.eventHandlerName, command.eventType, command.callerId, command.eventSubscriptionId) - - /* - We check here if there are no more listeners and the event handler original emmiter is also gone, then we need to delete - this event handlers since chances are that is not needed anymore. - */ - if (eventHandler.listeners.length === 0 && eventHandler.deleteWhenAllListenersAreGone === true) { - eventHandlers.delete(command.eventHandlerName) - } - - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - case "raiseEvent": { - let eventHandler = eventHandlers.get(command.eventHandlerName) - - if (eventHandler === undefined) { - - eventHandler = newEventHandler() - eventHandlers.set(command.eventHandlerName, eventHandler) - - /* No matter if it is the listener or the emiter the one that acts first, if an event handler does not exist we just create it acan keep it there. */ - - } - //console.log("[INFO] BackendServers -> Events Server -> Raising Event " + command.eventHandlerName + " " + command.eventType) - eventHandler.raiseEvent(command.eventType, command.event) - sendResponse(global.DEFAULT_OK_RESPONSE) - return - } - } - - console.log("[WARN] BackendServers -> Events Server -> onMessage -> Unknown Command Received:" + data) - - function sendResponse(message) { - if (command.callerId !== undefined) { - message.callerId = command.callerId - } - message.action = 'Event Server Response' - callbackFunction(JSON.stringify(message)) - } - - } catch (err) { - console.log("[ERROR] BackendServers -> Events Server -> onMessage -> Bad Command Received:" + data) - console.log("[ERROR] BackendServers -> Events Server -> onMessage -> An Error Happened:" + err.stack) - } - } - - function run() { - console.log('Events Server Started.') - } - - function newEventHandler() { - let thisObject = { - name: undefined, // This is for debugging purposes only. - deleteWhenAllListenersAreGone: false, - listeners: [], // Here we store all the functions we will call when an event is raiseed. - listenToEvent: listenToEvent, - stopListening: stopListening, - raiseEvent: raiseEvent, - finalize: finalize - } - - return thisObject - - function finalize() { - thisObject.listeners = [] - } - - function listenToEvent(eventHandlerName, eventType, callerId, handler, extraData) { - let eventSubscriptionId = Math.trunc(Math.random() * 1000000) - - /* - We can not allow to have the exact same listener more than once. In case that we find a listener trying to listen again, the first record will - be deleted and we are just going to consider the last one comming in. - */ - for (let i = 0; i < thisObject.listeners.length; i++) { - if (eventHandlerName === thisObject.listeners[i][0] && eventType === thisObject.listeners[i][1] && callerId === thisObject.listeners[i][2]) { - thisObject.listeners.splice(i, 1) - break - } - } - - - thisObject.listeners.push([eventHandlerName, eventType, callerId, handler, extraData, eventSubscriptionId]) - - - return eventSubscriptionId - } - - function stopListening(eventHandlerName, eventType, callerId, eventSubscriptionId) { - - if (eventSubscriptionId !== undefined) { - for (let i = 0; i < thisObject.listeners.length; i++) { - if (eventSubscriptionId === thisObject.listeners[i][5]) { - thisObject.listeners.splice(i, 1) - return - } - } - } - if (eventHandlerName !== undefined && eventType !== undefined && callerId !== undefined) { - for (let i = 0; i < thisObject.listeners.length; i++) { - if (eventHandlerName === thisObject.listeners[i][0] && eventType === thisObject.listeners[i][1] && callerId === thisObject.listeners[i][2]) { - thisObject.listeners.splice(i, 1) - return - } - } - } - } - - function raiseEvent(eventType, event) { - for (let i = 0; i < thisObject.listeners.length; i++) { - /* We will execute all the functions listening to this event type. */ - - if (thisObject.listeners[i][1] === eventType) { - let handler = thisObject.listeners[i][3] - let extraData = thisObject.listeners[i][4] - - handler(event, extraData) - } - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Client/package.json b/Deprecated-Code/Client/package.json deleted file mode 100644 index 95e6290cb..000000000 --- a/Deprecated-Code/Client/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "backend-servers", - "version": "0.0.6", - "description": "BackendServer", - "main": "server.js", - "author": { - "name": "Luis-Fernando-Molina" - }, - "dependencies": { - "child_process": "^1.0.2", - "dotenv": "^8.2.0", - "ws": "^7.1.2", - "ccxt": "^1.23.67", - "open": "^6.4.0", - "rimraf": "^3.0.2" - } -} diff --git a/Deprecated-Code/Client/server.js b/Deprecated-Code/Client/server.js deleted file mode 100644 index 429181fa3..000000000 --- a/Deprecated-Code/Client/server.js +++ /dev/null @@ -1,75 +0,0 @@ - -process.on('uncaughtException', function (err) { - if (err.message.indexOf("EADDRINUSE") > 0) { - console.log("A Superalgos Backend Server cannot be started. Reason: the port " + port + " is already in use by another application.") - return - } - console.log('[ERROR] Backend Server -> server -> uncaughtException -> err.message = ' + err.message) - console.log('[ERROR] Backend Server -> server -> uncaughtException -> err.stack = ' + err.stack) - process.exit(1) -}) - -process.on('unhandledRejection', (reason, p) => { - console.log('[ERROR] Backend Server -> server -> unhandledRejection -> reason = ' + JSON.stringify(reason)) - console.log('[ERROR] Backend Server -> server -> unhandledRejection -> p = ' + JSON.stringify(p)) - process.exit(1) -}) - -/* Callbacks default responses. */ - -global.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" -}; - -global.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" -}; - -global.DEFAULT_RETRY_RESPONSE = { - result: 'Retry', - message: 'Retry Later' -} - -global.CUSTOM_OK_RESPONSE = { - result: 'Ok, but check Message', - message: 'Custom Message' -} - -global.CUSTOM_FAIL_RESPONSE = { - result: 'Fail Because', - message: 'Custom Message' -} - - -let EVENTS_SERVER = require('./eventsServer.js'); -let WEB_SOCKETS_SERVER = require('./webSocketsServer.js'); -let TASK_MANAGER_SERVER = require('./taskManagerServer.js'); -let WEB_SERVER = require('./webServer.js'); - -try { - EVENTS_SERVER = EVENTS_SERVER.newEventsServer() - EVENTS_SERVER.initialize() - EVENTS_SERVER.run() - - WEB_SOCKETS_SERVER = WEB_SOCKETS_SERVER.newWebSocketsServer(EVENTS_SERVER) - WEB_SOCKETS_SERVER.initialize() - WEB_SOCKETS_SERVER.run() - - TASK_MANAGER_SERVER = TASK_MANAGER_SERVER.newTaskManagerServer(WEB_SOCKETS_SERVER, EVENTS_SERVER) - TASK_MANAGER_SERVER.initialize() - TASK_MANAGER_SERVER.run() - - WEB_SERVER = WEB_SERVER.newWebServer(EVENTS_SERVER) - WEB_SERVER.initialize() - WEB_SERVER.run() - - console.log("You are running Superalgos Beta 6 SP4: What's new? Some bugs fixed and improved performance.") - - //console.log("You are running Superalgos Beta 7: What's new? Multi-Project & Machine Learning Infrastructure is being implemented here.") - -} catch (err) { - console.log('[ERROR] BackendServers -> Task Manager -> server -> Error = ' + err.stack) -} - diff --git a/Deprecated-Code/Client/taskManagerServer.js b/Deprecated-Code/Client/taskManagerServer.js deleted file mode 100644 index 3e925042c..000000000 --- a/Deprecated-Code/Client/taskManagerServer.js +++ /dev/null @@ -1,331 +0,0 @@ -exports.newTaskManagerServer = function newTaskManagerServer(WEB_SOCKETS_SERVER, EVENTS_SERVER) { - - let thisObject = { - initialize: initialize, - finalize: finalize, - run: run - } - - /* - This server creates and destroys Task Servers according to what is going on at the UI. Each of these created servers will do their own - work. The responsibility of this server is to manage those children processes in order to be in sync with what the end user want and is defining - at the user interface. - */ - - const { fork } = require('child_process') - require('dotenv').config() - tasksMap = new Map() - - return thisObject - - function finalize() { - - } - - function initialize() { - - } - - function run() { - /* - Here we will create an Event Handler for this server. After that we will listen to events happening here. Elements of the UI will raise events here, - as a way to communicate what is going on with the user interacting with UI components. That is the way this server will know for example when a new - task needs to be created or destroyed. - */ - let eventsServerClient = newEventsServerClient() - eventsServerClient.createEventHandler('Task Manager') - eventsServerClient.listenToEvent('Task Manager', 'Run Task', undefined, undefined, undefined, runTask) - eventsServerClient.listenToEvent('Task Manager', 'Stop Task', undefined, undefined, undefined, stopTask) - eventsServerClient.listenToEvent('Task Manager', 'Task Status', undefined, undefined, undefined, taskStatus) - - console.log('Task Manager Server Started.') - - function runTask(message) { - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Entering function.') - - if (message.event === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> runTask -> Message Received Without Event -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - - if (message.event.taskId === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> runTask -> Message Received Without taskId -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - - if (message.event.taskDefinition === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> runTask -> Message Received Without taskDefinition -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - - if (tasksMap.get(message.event.taskId) !== undefined) { - let key = message.event.taskName + '-' + 'Task' + '-' + message.event.taskId - eventsServerClient.raiseEvent(key, 'Running') // Meaning Task Running - return - } - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Task Name = ' + message.event.taskName) - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Task Id = ' + message.event.taskId) - - let path = process.env.TASK_SERVER_PATH + '/server.js' - - /* Workarround to avoid having the same debug port at the forked process which makes it crash. */ - for (let i = 0; i < process.execArgv.length; i++) { - let argument = process.execArgv[i] - if (argument.indexOf('--inspect') > -1) { - process.execArgv[i] = '' - } - } - /* - Forking this process: - - The Task Server is going to run at a fork of this process. In this way we have a some communication capabilities - between processes, which is kind of limited but good enough for what we need. We send to the forked process - the taskId and taskName at the same time we create the process. Once the process is up and running it will - emit an event that is ready, and at that point we will send all the information needed to run the task. - */ - let task = { - childProcess: fork(path, [message.event.taskId], { stdio: 'inherit' }), - id: message.event.taskId, - name: message.event.taskName - } - /* Remember this is a running task now */ - tasksMap.set(message.event.taskId, task) - /* If the Task Server crashes, we remove it from our task map */ - task.childProcess.on('error', (err) => { - console.log('[ERROR] BackendServers -> Task Manager Server -> runTask -> Problem with Task Name = ' + task.name) - console.log('[ERROR] BackendServers -> Task Manager Server -> runTask -> Problem with Task Id = ' + task.id) - console.log(`[ERROR] BackendServers -> Task Manager Server -> runTask -> Task Server exited with error ${err}`) - tasksMap.delete(task.id) - }) - /* If the Tast Server stops, we remove it from our task map */ - task.childProcess.on('close', (code, signal) => { - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Task Terminated. -> Task Name = ' + task.name) - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Task Terminated. -> Task Id = ' + task.id) - tasksMap.delete(task.id) - }) - /* - We listen to the newly created Task Server events, waiting until it is up and ready to receive all the Task specific - instruction, to know what kind of task to execute. - */ - eventsServerClient.listenToEvent('Task Manager - ' + message.event.taskId, 'Nodejs Process Ready for Task', undefined, undefined, undefined, sendStartingEvent) - /* - Here we do send the rest of the task information we have, which is what defines what the Task Server is actually - going to do. From there on, here at the Task Manager, we have nothing to do until either the Task Server crashes or exit, - or the end users requests to stop it. Note that the due to the size of the instructions can not be sent via - intra-process communications. - */ - function sendStartingEvent() { - //console.log('[INFO] BackendServers -> Task Manager Server -> runTask -> Emitting Event -> key = ' + 'Task Server - ' + task.id) - eventsServerClient.raiseEvent('Task Server - ' + task.id, 'Run Task', message.event) - } - } - - function stopTask(message) { - //console.log('[INFO] BackendServers -> Task Manager Server -> stopTask -> Entering function.') - if (message.event === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> stopTask -> Message Received Without Event -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - - if (message.event.taskId === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> stopTask -> Message Received Without taskId -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - //console.log('[INFO] BackendServers -> Task Manager Server -> stopTask -> Task Name = ' + message.event.taskName) - //console.log('[INFO] BackendServers -> Task Manager Server -> stopTask -> Task Id = ' + message.event.taskId) - - let task = tasksMap.get(message.event.taskId) - - /* - The instruction to stop the Task Server process is sent via intra-process messaging. We will remove this task from - our map once we received the onClose event of our forked process. - */ - if (task) { - task.childProcess.send('Stop this Task'); - //console.log('[INFO] BackendServers -> Task Manager Server -> stopTask -> Child Process instructed to finish.') - } else { - console.log('[WARN] BackendServers -> Task Manager Server -> stopTask -> Cannot delete Task that does not exist.') - } - } - - function taskStatus(message) { - //console.log('[INFO] BackendServers -> Task Manager Server -> taskStatus -> Entering function.') - if (message.event === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> taskStatus -> Message Received Without Event -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - - if (message.event.taskId === undefined) { - console.log('[WARN] BackendServers -> Task Manager Server -> taskStatus -> Message Received Without taskId -> message = ' + JSON.stringify(message).substring(0, 1000)) - return - } - //console.log('[INFO] BackendServers -> Task Manager Server -> taskStatus -> Task Name = ' + message.event.taskName) - //console.log('[INFO] BackendServers -> Task Manager Server -> taskStatus -> Task Id = ' + message.event.taskId) - - let task = tasksMap.get(message.event.taskId) - let event = {} - if (task) { - event.status = 'Task Process Running' - eventsServerClient.raiseEvent('Task Client - ' + message.event.taskId, 'Task Status', event) - } else { - event.status = 'Task Process Not Running' - eventsServerClient.raiseEvent('Task Client - ' + message.event.taskId, 'Task Status', event) - } - } - } - - function newEventsServerClient() { - let thisObject = { - initialize: initialize, - finalize: finalize, - createEventHandler: createEventHandler, - deleteEventHandler: deleteEventHandler, - listenToEvent: listenToEvent, - stopListening: stopListening, - raiseEvent: raiseEvent, - onMessage: onMessage - } - - let eventListeners = new Map() - let responseWaiters = new Map() - - return thisObject - - - function finalize() { - /* Before disconnecting we will forze all eventListeners to stop listening. */ - const eventListenersArray = [...eventListeners.values()] - for (let i = 0; i < eventListenersArray.length; i++) { - let handler = eventListenersArray[i] - let eventCommand = { - action: 'stopListening', - eventHandlerName: handler.eventHandlerName, - eventType: handler.eventType, - callerId: handler.callerId - } - sendCommand(eventCommand) - } - } - - function initialize() { - - } - - function onMessage(data) { - try { - let message = JSON.parse(data) - - if (message.action === 'Event Raised') { - let key - if (message.callerId) { - key = message.eventHandlerName + '-' + message.eventType + '-' + message.callerId - } else { - key = message.eventHandlerName + '-' + message.eventType - } - let handler = eventListeners.get(key) - if (handler) { - handler.callBack(message) - } else { - console.log(key + ' not found so could not deliver event raised.') - console.log(' Message = ' + data) - } - return - } - - if (message.action === 'Event Server Response') { - let handler = responseWaiters.get(message.callerId) - if (handler) { - handler(message) - } - return - } - } catch (err) { - console.log('[ERROR] BackendServers -> Task Manager Server -> onMessage -> Error Receiving Message from Events Server -> data = ' + JSON.stringify(data)) - console.log('[ERROR] BackendServers -> Task Manager Server -> onMessage -> Error Receiving Message from Events Server -> error = ' + err.stack) - } - } - - function sendCommand(command, responseCallBack, eventsCallBack) { - try { - if (command.action === 'listenToEvent') { - let key - if (command.callerId) { - key = command.eventHandlerName + '-' + command.eventType + '-' + command.callerId - } else { - key = command.eventHandlerName + '-' + command.eventType - } - let handler = { - eventHandlerName: command.eventHandlerName, - eventType: command.eventType, - callerId: command.callerId, - callBack: eventsCallBack - } - eventListeners.set(key, handler) - } - if (command.callerId && responseCallBack) { - responseWaiters.set(command.callerId, responseCallBack) - } - - EVENTS_SERVER.onMessage(JSON.stringify(command), thisObject.onMessage) - } catch (err) { - console.log('[ERROR] BackendServers -> Task Manager Server -> sendCommand -> Error Sending Command to Events Server -> command = ' + JSON.stringify(command)) - console.log('[ERROR] BackendServers -> Task Manager Server -> sendCommand -> Error Sending Command to Events Server -> error = ' + err.stack) - } - } - - function createEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'createEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function deleteEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'deleteEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function listenToEvent(eventHandlerName, eventType, extraData, callerId, responseCallBack, eventsCallBack) { - let eventCommand = { - action: 'listenToEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - extraData: extraData, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack, eventsCallBack) - } - - function stopListening(eventHandlerName, eventType, eventSubscriptionId, callerId, responseCallBack) { - /* User either needs to specify a valid eventSubscriptionId OR the 3 params: eventHandlerName, eventType, callerId which were used when start listening to events. */ - let eventCommand = { - action: 'stopListening', - eventHandlerName: eventHandlerName, - eventType: eventType, - eventSubscriptionId: eventSubscriptionId, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function raiseEvent(eventHandlerName, eventType, event, callerId, responseCallBack) { - let eventCommand = { - action: 'raiseEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - event: event, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - } -} - - - diff --git a/Deprecated-Code/Client/webServer.js b/Deprecated-Code/Client/webServer.js deleted file mode 100644 index 2d2cfd14f..000000000 --- a/Deprecated-Code/Client/webServer.js +++ /dev/null @@ -1,1032 +0,0 @@ -exports.newWebServer = function newWebServer(EVENTS_SERVER) { - - let thisObject = { - initialize: initialize, - finalize: finalize, - run: run - } - - require('dotenv').config() - const open = require('open') - - CONSOLE_LOG = process.env.CONSOLE_LOG === 'true' - CONSOLE_ERROR_LOG = process.env.CONSOLE_ERROR_LOG === 'true' - LOG_FILE_CONTENT = process.env.LOG_FILE_CONTENT === 'true' - - let port = process.env.WEB_SERVER_PORT - - let http = require('http') - let isHttpServerStarted = false - - let webhook = new Map() - - return thisObject - - function finalize() { - - } - - function initialize() { - - } - - function run() { - startHtttpServer() - } - - function startHtttpServer() { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> startHtttpServer -> Entering function.') } - - try { - if (isHttpServerStarted === false) { - gWebServer = http.createServer(onBrowserRequest).listen(port) - isHttpServerStarted = true - /* Starting the browser now is optional */ - if (process.argv.includes("noBrowser")) { - console.log('Running Backend only with no UI.') - } else { - open('http://localhost:' + port) - } - - console.log('Web Server Started.') - } - } catch (err) { - console.log('[ERROR] webServer -> startHtttpServer -> Error = ' + err.stack) - } - } - - function onBrowserRequest(request, response) { - if (CONSOLE_LOG === true && request.url.indexOf('NO-LOG') === -1) { console.log('[INFO] webServer -> onBrowserRequest -> request.url = ' + request.url) } - - function getBody(callback) { // Gets the de body from a POST request to the web server - try { - - let body = '' - - request.on('data', function (data) { - body += data - // Too much POST data - //if (body.length > 1e6) { - // request.connection.destroy() - //} - }) - - request.on('end', function () { - callback(body) - }) - - request.on('error', function (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> onBrowserRequest -> getBody -> err = ' + err.stack) } - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - }) - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> onBrowserRequest -> getBody -> err = ' + err.stack) } - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } - } - - let requestParameters = request.url.split('/') - - requestParameters = request.url.split('?') // Remove version information - requestParameters = requestParameters[0].split('/') - - switch (requestParameters[1]) { - - case 'CCXT': - { - getBody(processRequest) - - async function processRequest(body) { - try { - let params = JSON.parse(body) - - const ccxt = require('ccxt') - - switch (params.method) { - case 'fetchMarkets': { - - const exchangeClass = ccxt[params.exchangeId] - const exchangeConstructorParams = { - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - } - - let ccxtExchange = new exchangeClass(exchangeConstructorParams) - let ccxtMarkets = [] - - if (ccxtExchange.has.fetchMarkets === true) { - ccxtMarkets = await ccxtExchange.fetchMarkets() - } - respondWithContent(JSON.stringify(ccxtMarkets), response) - return - } - case 'listExchanges': { - let exchanges = [] - for (let i = 0; i < ccxt.exchanges.length; i++) { - let exchangeId = ccxt.exchanges[i] - - const exchangeClass = ccxt[exchangeId] - const exchangeConstructorParams = { - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - } - let ccxtExchange - try { ccxtExchange = new exchangeClass(exchangeConstructorParams) } - catch (err) { } - if (ccxtExchange === undefined) { continue } - - - if (ccxtExchange.has.fetchOHLCV === params.has.fetchOHLCV) { - if (ccxtExchange.has.fetchMarkets === params.has.fetchMarkets) { - if (ccxtExchange.timeframes['1m'] !== undefined) { - let exchange = { - name: ccxtExchange.name, - id: ccxtExchange.id - } - exchanges.push(exchange) - } - } - } - } - respondWithContent(JSON.stringify(exchanges), response) - return - } - } - - let content = { - err: global.DEFAULT_FAIL_RESPONSE // method not supported - } - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> CCXT FetchMarkets -> Could not fetch markets.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - } - break - } - break - - case 'Webhook': - { - switch (requestParameters[2]) { // switch by command - case 'Fetch-Messages': { - let exchange = requestParameters[3] - let market = requestParameters[4] - - /* Some validations */ - if (exchange === undefined) { - console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no Exchange received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - if (market === undefined) { - console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no market received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - - let key = exchange + '-' + market - - let webhookMessages = webhook.get(key) - if (webhookMessages === undefined) { - webhookMessages = [] - } - - respondWithContent(JSON.stringify(webhookMessages), response) - webhookMessages = [] - - webhook.set(key, webhookMessages) - break - } - case 'New-Message': { - getBody(processRequest) - - function processRequest(messageReceived) { - let timestamp = (new Date()).valueOf() - let source = requestParameters[3] - let exchange = requestParameters[4] - let market = requestParameters[5] - - /* Some validations */ - if (source === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Source received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - if (exchange === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Exchange received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - if (market === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no market received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - - let key = exchange + '-' + market - - let webhookMessages = webhook.get(key) - if (webhookMessages === undefined) { - webhookMessages = [] - } - - webhookMessages.push([timestamp, source, messageReceived]) - webhook.set(key, webhookMessages) - - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } - break - } - } - break - } - break - - case 'ResetLogsAndData': - { - try { - let rimraf = require('rimraf') - rimraf.sync(process.env.STORAGE_PATH + '/Masters/Masters/AAJason.1.0') - rimraf.sync(process.env.LOG_PATH) - - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> ResetLogsAndData -> Could not delete Logs and Data.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - break - } - - case 'LegacyPlotter.js': - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/LegacyPlotter.js', response) - } - break - - case 'PlotterPanel.js': - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/PlotterPanel.js', response) - } - break - - case 'Images': // This means the Images folder. - { - let path = process.env.PATH_TO_WEB_SERVER + 'WebServer/Images/' + requestParameters[2] - - if (requestParameters[3] !== undefined) { - path = path + '/' + requestParameters[3] - } - - if (requestParameters[4] !== undefined) { - path = path + '/' + requestParameters[4] - } - - if (requestParameters[5] !== undefined) { - path = path + '/' + requestParameters[5] - } - - path = unescape(path) - - respondWithImage(path, response) - } - break - - case 'Icons': // This means the Icons folder under Projects. - { - let path = process.env.PROJECTS_PATH + '/' + requestParameters[2] + '/Icons' - - if (requestParameters[3] !== undefined) { - path = path + '/' + requestParameters[3] - } - - if (requestParameters[4] !== undefined) { - path = path + '/' + requestParameters[4] - } - - if (requestParameters[5] !== undefined) { - path = path + '/' + requestParameters[5] - } - - path = unescape(path) - respondWithImage(path, response) - } - break - - case 'favicon.ico': // This means the Scripts folder. - { - respondWithImage(process.env.PATH_TO_WEB_SERVER + 'WebServer/Images/' + 'favicon.ico', response) - } - break - - case 'CockpitSpace': // This means the CockpitSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/CockpitSpace/' + requestParameters[2], response) - } - break - - case 'Plotting': // This means the Plotting folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/Plotting/' + requestParameters[2], response) - } - break - - case 'TopSpace': // This means the TopSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/TopSpace/' + requestParameters[2], response) - } - break - - case 'DesignSpace': // This means the DesignSpace folder. - - { - if (requestParameters[3] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2], response) - return - } - if (requestParameters[4] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3], response) - return - } - if (requestParameters[5] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response) - return - } - } - break - - case 'ControlsToolBox': // This means the DesignSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/ControlsToolBox/' + requestParameters[2], response) - } - break - - case 'WebServer': // This means the WebServer folder. - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/' + requestParameters[2], response) - } - break - - case 'externalScripts': // This means the WebServer folder. - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/externalScripts/' + requestParameters[2], response) - } - break - - case 'Plotters': // This means the plotter folder, not to be confused with the Plotters script! - { - let dataMine = requestParameters[2] - let codeName = requestParameters[3] - let moduleName = requestParameters[4] - let filePath = process.env.PLOTTERS_PATH + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName - respondWithFile(filePath, response) - } - break - - case 'PlotterPanels': // This means the PlotterPanels folder, not to be confused with the Plotter Panels scripts! - { - let dataMine = requestParameters[2] - let codeName = requestParameters[3] - let moduleName = requestParameters[4] - let filePath = process.env.PLOTTERS_PATH + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName - respondWithFile(filePath, response) - } - break - - case 'ChartLayers': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Spaces': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Scales': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Files': - { - respondWithFile(process.env.PATH_TO_FILES_COMPONENT + '/' + requestParameters[2], response) - } - break - - case 'Fonts': - { - respondWithFont(process.env.PATH_TO_FONTS + '/' + requestParameters[2], response) - } - break - - case 'ProjectNames': - { - let projects = getDirectories(process.env.PROJECTS_PATH) - respondWithContent(JSON.stringify(projects), response) - } - break - - case 'Schema': - { - sendSchema(process.env.PROJECTS_PATH + '/' + requestParameters[2] + '/Schemas/', requestParameters[3] + '.json') - } - break - - case 'IconNames': - { - let projects = getDirectories(process.env.PROJECTS_PATH) - const fs = require('fs') - - let icons = [] - let totalProjects = projects.length - let projectCounter = 0 - - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - - const folder = process.env.PROJECTS_PATH + '/' + project + '/Icons/' - - fs.readdir(folder, (err, files) => { - for (let j = 0; j < files.length; j++) { - let file = files[j] - icons.push([project, file]) - } - - projectCounter++ - if (projectCounter === totalProjects) { - respondWithContent(JSON.stringify(icons), response) - } - }) - } - } - break - - case 'PluginFileNames': - { - let project = unescape(requestParameters[2]) - let pluginType = unescape(requestParameters[3]) - - const fs = require('fs') - let folder = process.env.PROJECTS_PATH + '/' + project + '/Plugins/' + pluginType - - fs.readdir(folder, (err, files) => { - respondWithContent(JSON.stringify(files), response) - }) - } - break - - - case 'LoadPlugin': - { - let project = unescape(requestParameters[2]) - let pluginType = unescape(requestParameters[3]) - let fileName = unescape(requestParameters[4]) - let filePath = process.env.PROJECTS_PATH + '/' + project + '/Plugins/' + pluginType + '/' + fileName - respondWithFile(filePath, response) - } - break - - case 'Workspace.js': - { - let fs = require('fs') - - try { - let filePath = process.env.DEFAULT_WORKSPACE_PATH + '/Getting-Started.json' - fs.readFile(filePath, onFileRead) - } catch (e) { - console.log('[ERROR] Error reading the Workspace.', e) - } - - function onFileRead(err, workspace) { - if (err) { - respondWithContent(undefined, response) - } else { - let responseContent = 'function getWorkspace(){ return ' + workspace + '}' - respondWithContent(responseContent, response) - } - } - } - break - - case 'ListWorkspaces': - { - let allWorkspaces = [] - let projects = getDirectories(process.env.PROJECTS_PATH) - let projectsCount = 0 - - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - readPluginWorkspaces() - function readPluginWorkspaces() { - let dirPath = process.env.PROJECTS_PATH + '/' + project + '/Plugins/Workspaces' - try { - let fs = require('fs') - fs.readdir(dirPath, onDirRead) - - function onDirRead(err, fileList) { - if (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } else { - let updatedFileList = [] - for (let i = 0; i < fileList.length; i++) { - let name = 'Plugin \u2192 ' + fileList[i] - updatedFileList.push([project, name]) - } - allWorkspaces = allWorkspaces.concat(updatedFileList) - projectsCount++ - if (projectsCount === projects.length) { - readMyWorkspaces() - } - return - } - } - } catch (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - } - } - - function readMyWorkspaces() { - let dirPath = process.env.MY_WORKSPACES_PATH - try { - let fs = require('fs') - fs.readdir(dirPath, onDirRead) - - function onDirRead(err, fileList) { - if (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } else { - let updatedFileList = [] - for (let i = 0; i < fileList.length; i++) { - let name = fileList[i] - updatedFileList.push(['', name]) - } - allWorkspaces = allWorkspaces.concat(updatedFileList) - respondWithContent(JSON.stringify(allWorkspaces), response) - return - } - } - } catch (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - } - } - break - - case 'LoadMyWorkspace': - { - let fileName = unescape(requestParameters[2]) - let filePath = process.env.MY_WORKSPACES_PATH + '/' + fileName + '.json' - respondWithFile(filePath, response) - } - break - - case 'SaveWorkspace': - { - getBody(processRequest) - - async function processRequest(body) { - - let fileContent = body - let fileName = unescape(requestParameters[2]) - let filePath = process.env.MY_WORKSPACES_PATH + '/' + fileName + '.json' - - try { - let fs = require('fs') - let dir = process.env.MY_WORKSPACES_PATH; - - /* Create Dir if it does not exist */ - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); - } - - fs.writeFile(filePath, fileContent, onFileWritten) - - function onFileWritten(err) { - if (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error writting the Workspace file. fileName = ' + fileName) } - respondWithContent(JSON.stringify(exchanges), response) - } else { - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } - } - - } catch (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error writting the Workspace file. fileName = ' + fileName) } - respondWithContent(JSON.stringify(exchanges), response) - } - } - } - break - - case 'ListFunctionLibraries': - { - returnProjectFolderFileList('Function-Libraries') - } - break - - case 'ProjectsSchema': - { - let path = process.env.PROJECTS_PATH + '/' + 'ProjectsSchema.json' - respondWithFile(path, response) - } - break - - case 'ListSpaceFiles': - { - let fs = require('fs') - let allFiles = [] - let projects = getDirectories(process.env.PROJECTS_PATH) - let dirCount = 0 - let totalDirs = 0 - - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - - let dirPath = project + '/Spaces' - let spaces = getDirectories(process.env.PROJECTS_PATH + '/' + dirPath) - - for (let j = 0; j < spaces.length; j++) { - let space = spaces[j] - readDirectory(dirPath + '/' + space) - } - - function readDirectory(path) { - try { - - totalDirs++ - fs.readdir(process.env.PROJECTS_PATH + '/' + path, onDirRead) - - let otherDirs = getDirectories(process.env.PROJECTS_PATH + '/' + path) - for (let m = 0; m < otherDirs.length; m++) { - let otherDir = otherDirs[m] - readDirectory(path + '/' + otherDir) - } - - function onDirRead(err, fileList) { - if (err) { - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - } else { - let updatedFileList = [] - for (let k = 0; k < fileList.length; k++) { - let name = fileList[k] - if (name.indexOf('.js') < 0) { continue } - updatedFileList.push(path + '/' + name) - } - allFiles = allFiles.concat(updatedFileList) - dirCount++ - if (dirCount === totalDirs) { - respondWithContent(JSON.stringify(allFiles), response) - } - } - } - } catch (err) { - console.log('[ERROR] Error reading a directory content. filePath = ' + path) - console.log(err.stack) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - } - } - } - break - - case 'ListUtilitiesFiles': - { - returnProjectFolderFileList('Utilities') - } - break - - case 'ListGlobalFiles': - { - returnProjectFolderFileList('Globals') - } - break - - case 'Projects': - { - let path = '' - for (let i = 2; i < 10; i++) { - if (requestParameters[i] !== undefined) { - let parameter = unescape(requestParameters[i]) - path = path + '/' + parameter - } - - } - let filePath = process.env.PROJECTS_PATH + path - respondWithFile(filePath, response) - } - break - - case 'Storage': - { - respondWithFile(process.env.STORAGE_PATH + '/' + request.url.substring(9), response) - } - break - - case 'main.css': - { - sendStyleSheet('main.css') - } - break - - case 'font-awasome.css': - { - sendStyleSheet('font-awasome.css') - } - break - case 'ExecuteTerminalCommand': - { - let command = unescape(requestParameters[2]) - executeTerminalCommand(command) - } - break - default: - { - homePage() - } - } - - function returnProjectFolderFileList(projectFolderName) { - { - let allLibraries = [] - let projects = getDirectories(process.env.PROJECTS_PATH) - let projectsCount = 0 - - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - - let dirPath = process.env.PROJECTS_PATH + '/' + project + '/' + projectFolderName - try { - let fs = require('fs') - fs.readdir(dirPath, onDirRead) - - function onDirRead(err, fileList) { - if (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - if (CONSOLE_ERROR_LOG === true) { console.log(err.stack) } - return - } else { - let updatedFileList = [] - for (let i = 0; i < fileList.length; i++) { - let name = fileList[i] - updatedFileList.push([project, name]) - } - allLibraries = allLibraries.concat(updatedFileList) - projectsCount++ - if (projectsCount === projects.length) { - respondWithContent(JSON.stringify(allLibraries), response) - } - return - } - } - } catch (err) { - if (CONSOLE_ERROR_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) } - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - } - } - } - - function executeTerminalCommand(command) { - const util = require('util'); - const exec = util.promisify(require('child_process').exec); - async function lsWithGrep() { - try { - const { stdout, stderr } = await exec(command); - console.log('stdout:', stdout); - console.log('stderr:', stderr); - } catch (err) { - console.error(err.stack); - }; - }; - lsWithGrep(); - } - - function sendSchema(filePath, fileName) { - let fs = require('fs') - - try { - filePath = filePath + fileName - fs.readFile(filePath, onFileRead) - } catch (e) { - console.log('[ERROR] Error reading the ' + fileName, e) - } - - function onFileRead(err, schema) { - if (err) { - respondWithContent(undefined, response) - } else { - respondWithContent(schema, response) - } - } - } - - function sendStyleSheet(fileName) { - let fs = require('fs') - try { - let filePath = process.env.PATH_TO_WEB_SERVER + 'WebServer/' + fileName - fs.readFile(filePath, onFileRead) - - function onFileRead(err, file) { - try { - let fileContent = file.toString() - - fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) - fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) - fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) - respondWithContent(fileContent, response, 'text/css') - } catch (err) { - console.log('[ERROR] webServer -> mainCSS -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log(err) - } - } - - function homePage() { - if (requestParameters[1] === '') { - let fs = require('fs') - try { - let fileName = process.env.PATH_TO_WEB_SERVER + 'WebServer/index.html' - fs.readFile(fileName, onFileRead) - - function onFileRead(err, file) { - try { - let fileContent = file.toString() - - fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) - respondWithContent(fileContent, response) - } catch (err) { - console.log('[ERROR] webServer -> homePage -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log(err) - } - } else { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1], response) - } - } - } - - function respondWithFile(fileName, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithFile -> Entering function.') } - let fs = require('fs') - if (fileName.indexOf('undefined') > 0) { - console.log('[WRN] webServer -> respondWithFile -> Received request for undefined file. ') - respondWithContent(undefined, response) - } else { - try { - fs.readFile(fileName, onFileRead) - - function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithFile -> onFileRead -> Entering function.') } - if (!err) { - respondWithContent(file.toString(), response) - } else { - //console.log('File requested not found: ' + fileName) - respondWithContent(undefined, response) - } - } - } catch (err) { - returnEmptyArray() - } - } - } - - function respondWithContent(content, response, contentType) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithContent -> Entering function.') } - - try { - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. - - if (content !== undefined) { - if (contentType !== undefined) { - response.writeHead(200, { 'Content-Type': contentType }) - } else { - response.writeHead(200, { 'Content-Type': 'text/html' }) - } - response.write(content) - } else { - response.writeHead(404, { 'Content-Type': 'text/html' }) - response.write('The specified key does not exist.') - } - response.end('\n') - } catch (err) { - returnEmptyArray(response) - } - } - - function respondWithImage(fileName, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithImage -> Entering function.') } - - let fs = require('fs') - try { - fs.readFile(fileName, onFileRead) - - function onFileRead(err, file) { - if (err) { - console.log('[ERROR] webServer -> respondWithImage -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - return - } - try { - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. - - response.writeHead(200, { 'Content-Type': 'image/png' }) - response.end(file, 'binary') - } catch (err) { - console.log('[ERROR] webServer -> respondWithImage -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] webServer -> respondWithImage -> err = ' + err.stack) - } - } - - function respondWithFont(fileName, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithBinary -> Entering function.') } - - let fs = require('fs') - try { - fs.readFile(fileName, onFileRead) - - function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithBinary -> onFileRead -> Entering function.') } - - try { - if (err) { - console.log('[ERROR] webServer -> respondWithBinary -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - return - } - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. - - if (fileName.indexOf('2') < 0) { - response.writeHead(200, { 'Content-Type': 'font/woff' }) - } else { - response.writeHead(200, { 'Content-Type': 'font/woff2' }) - } - response.end(file, 'binary') - } catch (err) { - console.log('[ERROR] webServer -> respondWithBinary -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] webServer -> respondWithBinary -> err = ' + err.stack) - } - } - - function returnEmptyArray(response) { - try { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> returnEmptyArray -> Entering function.') } - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - - response.writeHead(200, { 'Content-Type': 'text/html' }) - response.write('[]') - response.end('\n') - } catch (err) { - console.log('[ERROR] webServer -> returnEmptyArray -> err.stack ' + err.stack) - } - } - - function getDirectories(path) { - const fs = require('fs') - return fs.readdirSync(path).filter(function (file) { - return fs.statSync(path + '/' + file).isDirectory(); - }); - } -} \ No newline at end of file diff --git a/Deprecated-Code/Client/webSocketsServer.js b/Deprecated-Code/Client/webSocketsServer.js deleted file mode 100644 index 537eb974f..000000000 --- a/Deprecated-Code/Client/webSocketsServer.js +++ /dev/null @@ -1,112 +0,0 @@ -exports.newWebSocketsServer = function newWebSocketsServer(EVENTS_SERVER) { - - const MODULE = "Web Sockets Server" - const LOG_INFO = false - - let thisObject = { - initialize: initialize, - finalize: finalize, - run: run - } - - require('dotenv').config() - const WEB_SOCKET = require('ws') - let socketServer - let port = process.env.WEB_SOCKETS_SERVER_PORT - - return thisObject - - function finalize() { - - } - - function initialize() { - - } - - function run() { - setUpWebSocketServer() - } - - function setUpWebSocketServer() { - try { - socketServer = new WEB_SOCKET.Server({ port: port }) - - socketServer.on('connection', onConnection) - - function onConnection(socket) { - - let lastNonce = -1 - if (LOG_INFO === true) { - console.log('New Websocket Connection.') - } - - socket.on('message', onMenssage) - - function onMenssage(message){ - - try { - if (LOG_INFO === true) { - console.log('Message Received: ' + message.substring(0, 1000)) - } - - let messageArray = message.split('|*|') - - let origin = messageArray[0] - let nonce = messageArray[1] - let messageToEventServer = messageArray[2] - - if (origin === 'Web Browser') { - if (isNaN(nonce) || nonce === "") { - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce is not a Number. message = ' + message.substring(0, 1000)) - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce is not a Number. nonce = ' + nonce) - return - } - - if (nonce === "1") { // this happens once the browser is restarted, and the server is running since a previous session. - lastNonce = 0 - } - - if (Number(nonce) < Number(lastNonce)) { - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. message = ' + message.substring(0, 1000)) - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. nonce = ' + nonce) - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. lastNonce = ' + lastNonce) - return - } - - lastNonce = nonce - - try { - let jsonCheck = JSON.parse(messageToEventServer) - } catch (err) { - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. message = ' + message.substring(0, 1000)) - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. messageToEventServer = ' + messageToEventServer) - return - } - - let acknowledgeMessage = { - action: 'Acknowledge', - nonce: nonce - } - - socket.send(JSON.stringify(acknowledgeMessage)) - } - - - EVENTS_SERVER.onMessage(messageToEventServer, onResponse) - - function onResponse(message) { - socket.send(message) - } - } catch (err) { - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> Nonce received is less than Last Nonce. err = ' + err.stack) - } - } - } - - console.log('Web Sockets Server Started.') - } catch (err) { - console.log('[ERROR] BackendServers -> Web Sockets Server -> run -> setUpWebSocketServer -> err.message = ' + err.message.substring(0, 1000)) - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/DataFiles/.gitattributes b/Deprecated-Code/DataFiles/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/DataFiles/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/DataFiles/CODE_OF_CONDUCT.md b/Deprecated-Code/DataFiles/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/DataFiles/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/DataFiles/CONTRIBUTING.md b/Deprecated-Code/DataFiles/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/DataFiles/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/DataFiles/LICENSE b/Deprecated-Code/DataFiles/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/DataFiles/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/DataFiles/README.md b/Deprecated-Code/DataFiles/README.md deleted file mode 100644 index 1a4136279..000000000 --- a/Deprecated-Code/DataFiles/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Data Files - -This repo is one of the repositories built into Superalgos. For more information [read the docs](https://docs.superalgos.org/) or check the [Readme](https://github.com/Superalgos/Superalgos/) at the main repository of the project. - -## Copyright and License Notice - -© Copyright 2020 Superalgos. Please see the [License](/LICENSE) for information on how you can use this software. - -## Disclaimer - -THE SOFTWARE AND ITS ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL SUPERALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SOFTWARE, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -# Maintainer - -[![Luis-Fernando-Molina](https://avatars1.githubusercontent.com/u/9479367?s=130&v=4)](https://github.com/Luis-Fernando-Molina) | ----| -[Luis-Fernando-Molina](https://github.com/Luis-Fernando-Molina) | diff --git a/Deprecated-Code/DataFiles/src/DailyFiles.js b/Deprecated-Code/DataFiles/src/DailyFiles.js deleted file mode 100644 index 63e10eaaa..000000000 --- a/Deprecated-Code/DataFiles/src/DailyFiles.js +++ /dev/null @@ -1,298 +0,0 @@ - -function newDailyFiles() { - const MODULE_NAME = 'Daily Files' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - eventHandler: undefined, - getFileCursor: getFileCursor, - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - getExpectedFiles: getExpectedFiles, - getFilesLoaded: getFilesLoaded, - initialize: initialize, - finalize: finalize - } - - let filesLoaded = 0 - let expectedFiles = 0 - let fileCloud - let fileCursors = new Map() - let callBackWhenFileReceived - - thisObject.eventHandler = newEventHandler() - - return thisObject - - function finalize() { - try { - thisObject.eventHandler.finalize() - thisObject.eventHandler = undefined - - filesLoaded = undefined - expectedFiles = undefined - fileCloud = undefined - - fileCursors.forEach(finalizeEach) - - function finalizeEach(item, key, mapObj) { - item.finalize() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize(pMine, pBot, pSession, pProduct, pDataset, pExchange, pMarket, pDatetime, pTimeFrame, pHost, pPort, pEventsServerClient, callBackFunction) { - try { - callBackWhenFileReceived = callBackFunction - - let exchange = pExchange - let beginDateRange - let endDateRange - let timeFrames - - fileCloud = newFileCloud() - fileCloud.initialize(pBot, pHost, pPort) - - /* Config Validations */ - if (pDataset.config.validTimeFrames === undefined) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = Can not initialize Daily Files for bot ' + pBot.name) } - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = You need to define validTimeFrames at the Dataset config. ') } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - getDataRangeFile() - - function getDataRangeFile() { - /* First we will get the Data Range */ - fileCloud.getFile(pMine, pBot, pSession, pProduct, pDataset, exchange, pMarket, undefined, undefined, undefined, true, undefined, onDataRangeReceived) - - function onDataRangeReceived(err, pFile) { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - beginDateRange = pFile.begin - endDateRange = pFile.end - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (err.message === 'File does not exist.') { - beginDateRange = new Date() - endDateRange = new Date() - break - } - if (err.message === 'Missing Configuration.') { - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> The needed configuration for the dateRange at the dataSet of the product was not found.') } - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> maxDate will be set to current datetime.') } - - endDateRange = new Date() - break - } - callBackFunction(err) - return - } - default: { - callBackFunction(err) - return - } - } - getTimeFramesFile() - } - } - - function getTimeFramesFile() { - /* First we will get the Data Range */ - fileCloud.getFile(pMine, pBot, pSession, pProduct, pDataset, exchange, pMarket, undefined, undefined, undefined, undefined, true, onTimeFramesReceived) - - function onTimeFramesReceived(err, pFile) { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - timeFrames = pFile - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (err.message === 'File does not exist.') { - /* It is ok, we will deal with this later */ - break - } - if (err.message === 'Configured to not Support This.') { - /* It is ok, we will deal with this later */ - break - } - if (err.message === 'Missing Configuration.') { - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> The needed configuration to locate the timeFrames is missing at the dataSet.') } - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> Time Frames Filters will be ignored -> Product = ' + pProduct.config.codeName) } - break - } - callBackFunction(err) - return - } - default: { - callBackFunction(err) - return - } - } - createFileCursors() - } - } - - function createFileCursors() { - try { - /* Now we will get the daily files */ - for (let i = 0; i < dailyFilePeriods.length; i++) { - let periodTime = dailyFilePeriods[i][0] - let periodName = dailyFilePeriods[i][1] - - if (pDataset.config.validTimeFrames.includes(periodName) === false) { - continue - } - if (timeFrames !== undefined) { - if (timeFrames.includes(periodName) === false) { - continue - } - } - - let fileCursor = newFileCursor() - fileCursor.eventHandler = thisObject.eventHandler // We share our event handler with each file cursor, so that they can raise events there when files are changed.s - fileCursor.initialize(fileCloud, pMine, pBot, pSession, pProduct, pDataset, exchange, pMarket, periodName, periodTime, pDatetime, pTimeFrame, beginDateRange, endDateRange, pEventsServerClient, onInitialized) - function onInitialized(err) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - default: { - callBackWhenFileReceived(err) - return - } - } - fileCursors.set(periodTime, fileCursor) - expectedFiles = expectedFiles + fileCursor.getExpectedFiles() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> onInitialized -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } - loadThemAll() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> createFileCursors -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function loadThemAll() { - try { - for (let i = 0; i < dailyFilePeriods.length; i++) { - let periodTime = dailyFilePeriods[i][0] - let periodName = dailyFilePeriods[i][1] - - if (pDataset.config.validTimeFrames.includes(periodName) === true) { - let fileCursor = fileCursors.get(periodTime) - if (fileCursor !== undefined) { - fileCursor.reload(onFileReceived) - } - } - } - callBackWhenFileReceived(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> loadThemAll -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function onFileReceived(err) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - callBackWhenFileReceived(err) - return - } - default: { - callBackWhenFileReceived(err) - return - } - } - filesLoaded++ - callBackWhenFileReceived(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) // Note that the call back is called for every file loaded at each cursor. - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onFileReceived -> err = ' + err.stack) } - callBackWhenFileReceived(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function getFileCursor(pPeriod) { - try { - return fileCursors.get(pPeriod) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFileCursor -> err = ' + err.stack) } - } - } - - function setDatetime(pDatetime) { - try { - filesLoaded = 0 - expectedFiles = 0 - fileCursors.forEach(setDatetimeToEach) - - function setDatetimeToEach(fileCursor, key, map) { - fileCursor.setDatetime(pDatetime) - expectedFiles = expectedFiles + fileCursor.getExpectedFiles() - fileCursor.reload(onFileReceived) - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setDatetime -> err = ' + err.stack) } - } - } - - function setTimeFrame(pTimeFrame, pDatetime) { - try { - filesLoaded = 0 - expectedFiles = 0 - fileCursors.forEach(setTimeFrameToEach) - - function setTimeFrameToEach(fileCursor, key, map) { - fileCursor.setTimeFrame(pTimeFrame, pDatetime) - expectedFiles = expectedFiles + fileCursor.getExpectedFiles() - fileCursor.reload(onFileReceived) - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setTimeFrame -> err = ' + err.stack) } - } - } - - function getExpectedFiles() { - return expectedFiles - } - - function getFilesLoaded() { - return filesLoaded - } -} diff --git a/Deprecated-Code/DataFiles/src/FileCloud.js b/Deprecated-Code/DataFiles/src/FileCloud.js deleted file mode 100644 index f75327002..000000000 --- a/Deprecated-Code/DataFiles/src/FileCloud.js +++ /dev/null @@ -1,211 +0,0 @@ - -function newFileCloud () { - const MODULE_NAME = 'File Cloud' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - /* - This is the module in the system that actually connects to the cloud storage and grabs from there the needed files. - */ - - let thisObject = { - getFile: getFile, - initialize: initialize - } - - let fileStorage - return thisObject - - function initialize (pBot, pHost, pPort) { - fileStorage = newFileStorage(pHost, pPort) - } - - function getFile (pMine, pBot, pSession, pProduct, pDataset, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, pTimeFrames, callBackFunction) { - try { - const MAX_RETRIES = 3 - getFileRecursively(0, pMine, pBot, pSession, pProduct, pDataset, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, pTimeFrames, callBackFunction) - - function getFileRecursively (pRetryCounter, pMine, pBot, pSession, pProduct, pDataset, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, pTimeFrames, callBackFunction) { - try { - let fileName - let filePath - - if (pDataRange === undefined && pTimeFrames === undefined) { - fileName = pDataset.config.fileName - filePath = pDataset.config.filePath - } else { - if (pDataRange !== undefined) { - if (pDataset.config.dataRange !== undefined) { - fileName = pDataset.config.dataRange.fileName - filePath = pDataset.config.dataRange.filePath - } else { - let customErr = { - result: GLOBAL.CUSTOM_FAIL_RESPONSE.result, - message: 'Missing Configuration.' - } - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> customErr.message = ' + customErr.message) } - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> Data Range configuration could not be found at Dataset ' + pDataset.name) } - callBackFunction(customErr) - return - } - } - if (pTimeFrames !== undefined) { - if (pDataset.config.timeFrames !== undefined) { - if (pDataset.config.timeFrames.fileName !== '') { - fileName = pDataset.config.timeFrames.fileName - filePath = pDataset.config.timeFrames.filePath - } else { - let customErr = { - result: GLOBAL.CUSTOM_FAIL_RESPONSE.result, - message: 'Configured to not Support This.' - } - callBackFunction(customErr) - return - } - } else { - let customErr = { - result: GLOBAL.CUSTOM_FAIL_RESPONSE.result, - message: 'Missing Configuration.' - } - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> customErr.message = ' + customErr.message) } - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> Time Frames configuration could not be found at Dataset ' + pDataset.name) } - callBackFunction(customErr) - return - } - } - } - - if (fileName === undefined) { - logger.write('[ERROR] getFile -> getFileRecursively -> Inconsistant data. Check the following: ') - logger.write('[ERROR] getFile -> getFileRecursively -> pMine = ' + JSON.stringify(pMine)) - logger.write('[ERROR] getFile -> getFileRecursively -> pBot = ' + JSON.stringify(pBot)) - logger.write('[ERROR] getFile -> getFileRecursively -> pDataset = ' + JSON.stringify(pDataset)) - logger.write('[ERROR] getFile -> getFileRecursively -> pExchange = ' + JSON.stringify(pExchange)) - logger.write('[ERROR] getFile -> getFileRecursively -> pMarket = ' + JSON.stringify(pMarket)) - logger.write('[ERROR] getFile -> getFileRecursively -> pPeriodName = ' + JSON.stringify(pPeriodName)) - - throw ('Inconsistant data received.') - } - - if (pMarket !== undefined) { - filePath = filePath.replace('@BaseAsset', pMarket.baseAsset) - filePath = filePath.replace('@QuotedAsset', pMarket.quotedAsset) - } - - if (pMine !== undefined) { - filePath = filePath.replace('@DataMine', pMine.config.codeName) - } - - if (pBot !== undefined) { - filePath = filePath.replace('@Bot', pBot.config.codeName) - } - - if (pSession !== undefined) { - let config - let sessionFolderName = pSession.type.replace(' ', '-').replace(' ', '-') + '-' + pSession.id - if (pSession.config !== undefined) { - if (pSession.config.folderName !== undefined) { - sessionFolderName = pSession.type.replace(' ', '-').replace(' ', '-') + '-' + pSession.config.folderName - } - } - filePath = filePath.replace('@Session', sessionFolderName) - } - - if (pExchange !== undefined) { - filePath = filePath.replace('@Exchange', pExchange.name) - } - - filePath = filePath.replace('@Period', pPeriodName) - filePath = filePath.replace('@Dataset', pDataset.config.codeName) - filePath = filePath.replace('@Product', pProduct.config.codeName) - - if (pDatetime !== undefined) { - filePath = filePath.replace('@Year', pDatetime.getUTCFullYear()) - filePath = filePath.replace('@Month', pad(pDatetime.getUTCMonth() + 1, 2)) - filePath = filePath.replace('@Day', pad(pDatetime.getUTCDate(), 2)) - filePath = filePath.replace('@Hour', pad(pDatetime.getUTCHours(), 2)) - filePath = filePath.replace('@Minute', pad(pDatetime.getUTCMinutes(), 2)) - } - - if (pSequence !== undefined) { - fileName = fileName.replace('@Sequence', pSequence) - } - - fileStorage.getFileFromHost(filePath + '/' + fileName, onFileReceived) - - function onFileReceived (err, text, response) { - try { - let data - - if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - if (err.code === 'BlobNotFound' || err.code === 'FileNotFound' || err.code === 'ParentNotFound' || err.code === 'The specified key does not exist.') { - let customErr = { - result: GLOBAL.CUSTOM_FAIL_RESPONSE.result, - message: 'File does not exist.' - } - callBackFunction(customErr) - return - } - - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> filePath = ' + filePath) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> fileName = ' + fileName) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> Unexpected Error Ocurred.') } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> err = ' + err.stack) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> text = ' + text) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> response = ' + response) } - - if (err.message === 'XHR error') { - if (pRetryCounter < MAX_RETRIES) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> Retrying to get this file. ') } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> MAX_RETRIES = ' + MAX_RETRIES) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> pRetryCounter = ' + pRetryCounter) } - - getFileRecursively(pRetryCounter + 1, pMine, pBot, pDataset, pExchange, pMarket, pPeriodName, pDatetime, pSequence, pDataRange, callBackFunction) - return - } else { - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> Could not get this file from storage. ') } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> MAX_RETRIES = ' + MAX_RETRIES) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> pRetryCounter = ' + pRetryCounter) } - } - } - - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } else { - try { - data = JSON.parse(text) - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, data) - return - } catch (err) { - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> err = ' + err.stack) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> filePath = ' + filePath) } - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> fileName = ' + fileName) } - - let customErr = { - result: GLOBAL.CUSTOM_OK_RESPONSE.result, - message: 'Data not in JSON Format.' - } - - if (ERROR_LOG === true) { logger.write('[WARN] getFile -> getFileRecursively -> onFileReceived -> customErr.message = ' + customErr.message) } - - callBackFunction(customErr, text) - return - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> getFileRecursively -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFile -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } -} diff --git a/Deprecated-Code/DataFiles/src/FileCursor.js b/Deprecated-Code/DataFiles/src/FileCursor.js deleted file mode 100644 index 76693074f..000000000 --- a/Deprecated-Code/DataFiles/src/FileCursor.js +++ /dev/null @@ -1,579 +0,0 @@ - -function newFileCursor() { - const MODULE_NAME = 'File Cursor' - const INFO_LOG = false - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let cursorDate - - let thisObject = { - eventHandler: undefined, // received from parent - reload: reload, - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - files: new Map(), - getExpectedFiles: getExpectedFiles, - initialize: initialize, - finalize: finalize - } - - let minCursorSize = 10 - let maxCursorSize = 30 - - let market - let exchange - let fileCloud - let mine - let bot - let session - let product - let dataset - let periodName - let timeFrame - let beginDateRange - let endDateRange - let eventsServerClient - - let finalized = false - - let eventSubscriptionIdDatasetUpdated - let eventSubscriptionIdDataRangeUpdated - - return thisObject - - function finalize() { - try { - eventsServerClient.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated) - eventsServerClient.stopListening('Data Range Updated', eventSubscriptionIdDataRangeUpdated) - - thisObject.eventHandler = undefined - - market = undefined - exchange = undefined - fileCloud = undefined - mine = undefined - bot = undefined - session = undefined - product = undefined - dataset = undefined - periodName = undefined - timeFrame = undefined - beginDateRange = undefined - endDateRange = undefined - eventsServerClient = undefined - - thisObject.files = undefined - cursorDate = undefined - fileCloud = undefined - periodName = undefined - timeFrame = undefined - finalized = true - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize( - pFileCloud, - pMine, - pBot, - pSession, - pProduct, - pDataset, - pExchange, - pMarket, - pPeriodName, - pTimeFrame, - pCursorDate, - pCurrentTimeFrame, - pBeginDateRange, - pEndDateRange, - pEventsServerClient, - callBackFunction) { - try { - market = pMarket - exchange = pExchange - fileCloud = pFileCloud - mine = pMine - bot = pBot - session = pSession - product = pProduct - dataset = pDataset - periodName = pPeriodName - cursorDate = removeTime(pCursorDate) - timeFrame = pTimeFrame - beginDateRange = pBeginDateRange - endDateRange = pEndDateRange - eventsServerClient = pEventsServerClient - - let key = mine.config.codeName + '-' + bot.config.codeName + '-' + product.config.codeName + '-' + dataset.config.codeName + '-' + exchange.name + '-' + market.baseAsset + '/' + market.quotedAsset - let callerId = key + '-' + periodName + newUniqueId() - eventsServerClient.listenToEvent(key, 'Dataset Updated', undefined, callerId, onResponseDataSet, updateFiles) - - key = mine.config.codeName + '-' + bot.config.codeName + '-' + product.config.codeName + '-' + exchange.name + '-' + market.baseAsset + '/' + market.quotedAsset - callerId = key + '-' + periodName + newUniqueId() - eventsServerClient.listenToEvent(key, 'Data Range Updated', undefined, callerId, onResponseDataRange, updateDataRange) - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - - function onResponseDataSet(message) { - eventSubscriptionIdDatasetUpdated = message.eventSubscriptionId - } - - function onResponseDataRange(message) { - eventSubscriptionIdDataRangeUpdated = message.eventSubscriptionId - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function updateDataRange(message) { - try { - if (finalized === true) { return } - - if (message.event === undefined || message.event.dateRange === undefined) { return } - - beginDateRange = new Date(message.event.dateRange.begin) - endDateRange = new Date(message.event.dateRange.end) - - let minDate = beginDateRange.valueOf() - let maxDate = endDateRange.valueOf() + ONE_DAY_IN_MILISECONDS - - for (let key of thisObject.files.keys()) { - let keyDate = new Date(key) - - if (keyDate.valueOf() < minDate || keyDate.valueOf() > maxDate) { - thisObject.files.delete(key) - thisObject.eventHandler.raiseEvent('Files Updated') - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateDataRange -> err = ' + err.stack) } - } - } - - function updateFiles(message) { - try { - if (finalized === true) { return } - - if (message.event === undefined || message.event.lastFile === undefined) { return } - - let targetDate = new Date(message.event.lastFile) - let dateString - let file - - dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2) - - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, periodName, targetDate, undefined, undefined, undefined, onFileReceived) - - function onFileReceived(err, file) { - try { - if (finalized === true) { return } - - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - thisObject.files.set(dateString, file) - thisObject.eventHandler.raiseEvent('Files Updated') - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> err = ' + err.stack) } - } - } - - function setTimeFrame(pTimeFrame, pDatetime) { - try { - if (finalized === true) { return } - - /* - - We are implementing here an algorithm designed to save bandwidth, memory and processing power at the browser. - We say there is a saving mode where the cursor is running at a minimum size. When the end user aproaches the time period the cursor - is set, then it should exit the saving mode and go to its actual size. - - To do this we are going to measure the distance from the Time Frame received to the one the cursors was initialized with. - If these periods are consecutive, it means that the cursor should exit saving mode and load its full size. - - */ - - cursorDate = removeTime(pDatetime) // Adjust the cursor date to the one received. - - let positionA - - for (let i = 0; i < dailyFilePeriods.length; i++) { - let period = dailyFilePeriods[i] - - if (period[0] === pTimeFrame) { - positionA = i - } - - if (period[0] === timeFrame) { - positionB = i - } - } - - if (Math.abs(positionB - positionA) <= 1) { - exitSavingMode() - } else { - enterSavingMode() - } - - function enterSavingMode() { - try { - switch (timeFrame) { - - case _45_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 30 - } - break - case _40_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 20 - } - break - case _30_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _20_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _15_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _10_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _5_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _4_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _3_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _2_MINUTES_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - case _1_MINUTE_IN_MILISECONDS: - { - minCursorSize = 3 - maxCursorSize = 15 - } - break - default: - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setTimeFrame -> enterSavingMode -> err = ' + err.stack) } - } - } - - function exitSavingMode() { - try { - switch (timeFrame) { - - case _45_MINUTES_IN_MILISECONDS: - { - minCursorSize = 15 - maxCursorSize = 30 - } - break - case _40_MINUTES_IN_MILISECONDS: - { - minCursorSize = 13 - maxCursorSize = 20 - } - break - case _30_MINUTES_IN_MILISECONDS: - { - minCursorSize = 11 - maxCursorSize = 15 - } - break - case _20_MINUTES_IN_MILISECONDS: - { - minCursorSize = 9 - maxCursorSize = 15 - } - break - case _15_MINUTES_IN_MILISECONDS: - { - minCursorSize = 7 - maxCursorSize = 15 - } - break - case _10_MINUTES_IN_MILISECONDS: - { - minCursorSize = 7 - maxCursorSize = 15 - } - break - case _5_MINUTES_IN_MILISECONDS: - { - minCursorSize = 5 - maxCursorSize = 15 - } - break - case _4_MINUTES_IN_MILISECONDS: - { - minCursorSize = 5 - maxCursorSize = 15 - } - break - case _3_MINUTES_IN_MILISECONDS: - { - minCursorSize = 5 - maxCursorSize = 15 - } - break - case _2_MINUTES_IN_MILISECONDS: - { - minCursorSize = 5 - maxCursorSize = 15 - } - break - case _1_MINUTE_IN_MILISECONDS: - { - minCursorSize = 5 - maxCursorSize = 15 - } - break - default: - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setTimeFrame -> exitSavingMode -> err = ' + err.stack) } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setTimeFrame -> err = ' + err.stack) } - } - } - - function setDatetime(pDatetime) { - try { - if (finalized === true) { return } - - if (pDatetime === undefined) { - if (ERROR_LOG === true) { logger.write('[ERROR] setDatetime -> Received undefined datetime.') } - return - } - - cursorDate = removeTime(pDatetime) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setDatetime -> err = ' + err.stack) } - } - } - - function reload(callBackFunction) { - try { - if (finalized === true) { return } - - getFiles(callBackFunction) - - collectGarbage(callBackFunction) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] reload -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function getFiles(callBackFunction) { - try { - if (finalized === true) { return } - - let i = 0 - let j = 0 - - let dateString - - getNextFile() - - function getNextFile() { - try { - let targetDate = new Date(cursorDate) - targetDate.setUTCDate(targetDate.getUTCDate() + j) - - /* Small algorith to allow load first the current date, then alternate between the most forwad and the most backwards ones. */ - if (j === 0) { j++ } else { - if (j < 0) { - j = -j - j++ - } else { - j = -j - } - } - - let compareTargetDate = new Date(targetDate.valueOf()) - - if (beginDateRange !== undefined) { - let compareBeginDate = removeTime(beginDateRange) - - if (compareTargetDate.valueOf() < compareBeginDate.valueOf()) { - controlLoop() - return - } - } - - if (endDateRange !== undefined) { - let compareEndDate = removeTime(endDateRange) - - if (compareTargetDate.valueOf() >= compareEndDate.valueOf()) { - controlLoop() - return - } - } - - dateString = targetDate.getUTCFullYear() + '-' + pad(targetDate.getUTCMonth() + 1, 2) + '-' + pad(targetDate.getUTCDate(), 2) - - let currentDay = Math.trunc((new Date()).valueOf() / (24 * 60 * 60 * 1000)) - let targetDay = Math.trunc(targetDate.valueOf() / (24 * 60 * 60 * 1000)) - - if (targetDay > currentDay) { - controlLoop() - } else { - if (thisObject.files.get(dateString) === undefined) { - // We dont reload files we already have. - - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, periodName, targetDate, undefined, undefined, undefined, onFileReceived) - } else { - controlLoop() - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFiles -> getNextFile -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function onFileReceived(err, file) { - try { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> Entering function.') } - - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> Received OK Response.') } - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> Received FAIL Response.') } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> Received CUSTOM FAIL Response.') } - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> err.message = ' + err.message) } - - if (err.message === 'File does not exist.') { - controlLoop() - return - } else { - callBackFunction(err) - return - } - } - - default: { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> onFileReceived -> Received Unexpected Response.') } - callBackFunction(err) - return - } - } - - thisObject.files.set(dateString, file) - - controlLoop() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFiles -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function controlLoop() { - try { - if (INFO_LOG === true) { logger.write('[INFO] getFiles -> controlLoop -> Entering function.') } - - if (callBackFunction !== undefined) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } - - i++ - - if (i < minCursorSize) { - getNextFile() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFiles -> controlLoop -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFiles -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function collectGarbage(callBackFunction) { - try { - if (finalized === true) { return } - - date = removeTime(cursorDate) - - let minDate = date.valueOf() - maxCursorSize * ONE_DAY_IN_MILISECONDS / 2 - let maxDate = date.valueOf() + maxCursorSize * ONE_DAY_IN_MILISECONDS / 2 - - for (let key of thisObject.files.keys()) { - let keyDate = new Date(key) - - if (keyDate.valueOf() < minDate || keyDate.valueOf() > maxDate) { - thisObject.files.delete(key) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] collectGarbage -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function getExpectedFiles() { - if (finalized === true) { return } - if (INFO_LOG === true) { logger.write('[INFO] getExpectedFiles -> Entering function.') } - - return minCursorSize - } -} diff --git a/Deprecated-Code/DataFiles/src/FileSequence.js b/Deprecated-Code/DataFiles/src/FileSequence.js deleted file mode 100644 index db3752acf..000000000 --- a/Deprecated-Code/DataFiles/src/FileSequence.js +++ /dev/null @@ -1,296 +0,0 @@ - -function newFileSequence () { - const MODULE_NAME = 'File Sequence' - const INFO_LOG = false - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - eventHandler: undefined, - getFile: getFile, - getExpectedFiles: getExpectedFiles, - getFilesLoaded: getFilesLoaded, - initialize: initialize, - finalize: finalize - } - - let filesLoaded = 0 - let fileCloud - let files = new Map() - let maxSequence = -1 // This is replaced by the content of the sequence file, which contains an index that starts on zero. In the case that the sequence file is not found the default value is -1 so when you add 1 it gives you the amount of files in the sequence, zero. - let market - let mine - let bot - let session - let dataset - let product - let finalized = false - let initialized = false - - thisObject.eventHandler = newEventHandler() - - let eventSubscriptionIdDatasetUpdated - let callerId - let eventsServerClient - - return thisObject - - function finalize () { - try { - eventsServerClient.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated) - - thisObject.eventHandler.finalize() - thisObject.eventHandler = undefined - - filesLoaded = undefined - fileCloud = undefined - files = undefined - maxSequence = undefined - market = undefined - mine = undefined - bot = undefined - session = undefined - dataset = undefined - product = undefined - eventsServerClient = undefined - - finalized = true - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize ( - pMine, - pBot, - pSession, - pProduct, - pDataset, - pExchange, - pMarket, - pHost, - pPort, - pEventsServerClient, - callBackFunction) { - try { - exchange = pExchange - market = pMarket - mine = pMine - bot = pBot - session = pSession - dataset = pDataset - product = pProduct - eventsServerClient = pEventsServerClient - - fileCloud = newFileCloud() - fileCloud.initialize(bot, pHost, pPort) - - callerId = newUniqueId() - - let key = mine.config.codeName + '-' + bot.config.codeName + '-' + product.config.codeName + '-' + dataset.config.codeName + '-' + exchange.name + '-' + market.baseAsset + '/' + market.quotedAsset - eventsServerClient.listenToEvent(key, 'Dataset Updated', undefined, callerId, onResponse, updateFiles) - - function onResponse (message) { - eventSubscriptionIdDatasetUpdated = message.eventSubscriptionId - } - - /* First we will get the sequence max number */ - - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, undefined, undefined, 'Sequence', undefined, undefined, onSequenceFileReceived) - - function onSequenceFileReceived (err, file) { - try { - if (finalized === true) { return } - - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_OK_RESPONSE.result: { - if (ERROR_LOG === true) { logger.write('[INFO] initialize -> onSequenceFileReceived -> err.message = ' + err.message) } - initialized = true - callBackFunction(err) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (err.message === 'File does not exist.') { // We will assume that the process which generates the files has never been started, that does not imply that we can wait for data to come later. - initialized = true - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - return - } - if (ERROR_LOG === true) { logger.write('[INFO] initialize -> onSequenceFileReceived -> err.message = ' + err.message) } - callBackFunction(err, thisObject) - return - } - - default: { - callBackFunction(err) - return - } - } - initialized = true - maxSequence = Number(file) - - /* Now we will get the sequence of files */ - - for (let i = 0; i <= maxSequence; i++) { - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, undefined, undefined, i, undefined, undefined, onFileReceived) - - function onFileReceived (err, file) { - try { - if (finalized === true) { return } - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (ERROR_LOG === true) { logger.write('[INFO] initialize -> onSequenceFileReceived -> onFileReceived -> err.message = ' + err.message) } - callBackFunction(err) - return - } - - default: { - callBackFunction(err) - return - } - } - - files.set(i, file) - - filesLoaded++ - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) // Note that the callback is called for every file loaded. - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onSequenceFileReceived -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onSequenceFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function updateFiles () { - try { - if (finalized === true || initialized === false) { return } - - /* - - To keep this data structure up-to-date we need to: - - 1. Re-read the sequence file. - 2. Re-load the current last file. - 3. Re-load all new files after our last one. - - */ - - let currentMaxSequence = maxSequence - - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, undefined, undefined, 'Sequence', undefined, undefined, onSequenceFileReceived) - - function onSequenceFileReceived (err, sequenceFile) { - try { - if (finalized === true) { return } - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - return - } - - case GLOBAL.CUSTOM_OK_RESPONSE.result: { - if (ERROR_LOG === true) { logger.write('[WARN] updateFiles -> onSequenceFileReceived -> err.message = ' + err.message) } - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (ERROR_LOG === true) { logger.write('[WARN] updateFiles -> onSequenceFileReceived -> err.message = ' + err.message) } - return - } - - default: { - if (ERROR_LOG === true) { logger.write('[WARN] updateFiles -> onSequenceFileReceived -> Received Unexpected Response.') } - return - } - } - - maxSequence = Number(sequenceFile) - filesLoaded = 0 - - /* Now we will get the sequence of files, but in this case only from the currentMaxSequence and above. */ - - for (let i = currentMaxSequence; i <= maxSequence; i++) { - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, undefined, undefined, i, undefined, undefined, onFileReceived) - - function onFileReceived (err, file) { - try { - if (finalized === true) { return } - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (ERROR_LOG === true) { logger.write('[WARN] updateFiles -> onSequenceFileReceived -> onFileReceived -> err.message = ' + err.message) } - return - } - } - - files.set(i, file) - - filesLoaded++ - - if (filesLoaded === maxSequence + 1) { - thisObject.eventHandler.raiseEvent('Files Updated', undefined) - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onSequenceFileReceived -> onFileReceived -> err = ' + err.stack) } - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onSequenceFileReceived -> err = ' + err.stack) } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> err = ' + err.stack) } - } - } - - function getFile (pSequence) { - return files.get(pSequence) - } - - function getExpectedFiles () { - return maxSequence + 1 - } - - function getFilesLoaded () { - return filesLoaded - } -} diff --git a/Deprecated-Code/DataFiles/src/FileStorage.js b/Deprecated-Code/DataFiles/src/FileStorage.js deleted file mode 100644 index 77992863c..000000000 --- a/Deprecated-Code/DataFiles/src/FileStorage.js +++ /dev/null @@ -1,78 +0,0 @@ -function newFileStorage(host, port) { - const MODULE_NAME = 'File Storage' - const INFO_LOG = false - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - const MAX_RETRY = 2 - let currentRetry = 0 - - const recoverableErrors = [ - 'SOCKETTIMEDOUT', - 'TIMEDOUT', - 'CONNRESET', - 'CONNREFUSED', - 'NOTFOUND', - 'ENOTFOUND', - 'ECONNREFUSED', - 'CONNREFUSED', - 'NOTFOUND', - 'ESOCKETTIMEDOUT', - 'ECONNRESET', - 'ETIMEDOUT', - 'EAI_AGAIN' - ] - - let thisObject = { - getFileFromHost: getFileFromHost - } - - return thisObject - - async function getFileFromHost(filePath, callBackFunction, pathComplete) { - try { - if (INFO_LOG === true) { logger.write('[INFO] getFileFromHost -> Entering function.') } - - let folder = '' - if (pathComplete === false || pathComplete === undefined) { - folder = 'Storage/' - } - let url = folder + filePath - if (host !== undefined && port !== undefined) { - url = 'http://' + host + ':' + port + '/' + folder + filePath - } else { - url = folder + filePath - } - - callWebServer(undefined, url, (response, fileContent) => { - if (response.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, fileContent) - } else { - callBackFunction(response) - } - }) - } catch (err) { - if (verifyRetry(err.code) && currentRetry < MAX_RETRY) { - currentRetry++ - if (INFO_LOG === true) { console.log('[INFO] getTextFile -> Retrying connection to the server because received error: ' + err.code + '. Retry #: ' + currentRetry) } - getFileFromHost(filePath, callBackFunction) - } else if (err.message === 'Request aborted') { - let err = { code: 'The specified key does not exist.' } - callBackFunction(err) - } else { - console.log('Error geting the file from the serever:', err) - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } - - function verifyRetry(errorCode) { - for (let i = 0; i < recoverableErrors.length; i++) { - const error = recoverableErrors[i] - if (error === errorCode) { - return true - } - } - return false - } -} diff --git a/Deprecated-Code/DataFiles/src/MarketFiles.js b/Deprecated-Code/DataFiles/src/MarketFiles.js deleted file mode 100644 index be0c4f397..000000000 --- a/Deprecated-Code/DataFiles/src/MarketFiles.js +++ /dev/null @@ -1,258 +0,0 @@ - -function newMarketFiles() { - const MODULE_NAME = 'Market Files' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - eventHandler: undefined, - getFile: getFile, - getExpectedFiles: getExpectedFiles, - getFilesLoaded: getFilesLoaded, - getFilesNotLoaded: getFilesNotLoaded, - initialize: initialize, - finalize: finalize - } - - let filesLoaded = 0 - let filesNotLoaded = 0 - let filesExpected = 0 - - let fileCloud - - let files = new Map() - - let market - let exchange - let mine - let bot - let session - let dataset - let product - let periodName - - thisObject.eventHandler = newEventHandler() - - let finalized = false - - let eventSubscriptionIdDatasetUpdated = [] - let eventsServerClient - - return thisObject - - function finalize() { - try { - for (let i = 0; i < eventSubscriptionIdDatasetUpdated.length; i++) { - eventsServerClient.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated[i]) - } - - thisObject.eventHandler.finalize() - thisObject.eventHandler = undefined - - filesLoaded = undefined - files = undefined - - market = undefined - exchange = undefined - mine = undefined - bot = undefined - session = undefined - dataset = undefined - product = undefined - periodName = undefined - eventsServerClient = undefined - - finalized = true - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize( - pMine, - pBot, - pSession, - pProduct, - pDataset, - pExchange, - pMarket, - pHost, - pPort, - pEventsServerClient, - callBackFunction) { - try { - let timeFrames - - exchange = pExchange - market = pMarket - mine = pMine - bot = pBot - session = pSession - dataset = pDataset - product = pProduct - eventsServerClient = pEventsServerClient - - fileCloud = newFileCloud() - fileCloud.initialize(pBot, pHost, pPort) - - /* Some Validations */ - if (dataset.config.validTimeFrames === undefined) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = Can not initialize Market Files for bot ' + pBot.name) } - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = You need to define validTimeFrames at the Dataset config. ') } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - getTimeFramesFile() - - function getTimeFramesFile() { - /* First we will get the Data Range */ - fileCloud.getFile(pMine, pBot, pSession, pProduct, pDataset, exchange, pMarket, undefined, undefined, undefined, undefined, true, onTimeFramesReceived) - - function onTimeFramesReceived(err, pFile) { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - timeFrames = pFile - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (err.message === 'File does not exist.') { - /* It is ok, we will deal with this later */ - break - } - if (err.message === 'Configured to not Support This.') { - /* It is ok, we will deal with this later */ - break - } - if (err.message === 'Missing Configuration.') { - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> The needed configuration to locate the timeFrames is missing at the dataSet.') } - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> onFileReceived -> Time Frames Filters will be ignored -> Product = ' + pProduct.config.codeName) } - break - } - callBackFunction(err) - return - } - default: { - callBackFunction(err) - return - } - } - getMarketFiles() - } - } - - function getMarketFiles() { - /* Now we will get the market files */ - for (let i = 0; i < marketFilesPeriods.length; i++) { - let periodTime = marketFilesPeriods[i][0] - let periodName = marketFilesPeriods[i][1] - - if (dataset.config.validTimeFrames.includes(periodName) === false) { - filesNotLoaded++ - continue - } - if (timeFrames !== undefined) { - if (timeFrames.includes(periodName) === false) { - filesNotLoaded++ - continue - } - } - - filesExpected++ - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, periodName, undefined, undefined, undefined, undefined, onFileReceived) - - function onFileReceived(err, file) { - try { - if (finalized === true) { return } - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - files.set(periodTime, file) - filesLoaded++ - } else { - filesNotLoaded++ - } - - if (filesLoaded + filesNotLoaded === marketFilesPeriods.length) { - let key = mine.config.codeName + '-' + bot.config.codeName + '-' + product.config.codeName + '-' + dataset.config.codeName + '-' + exchange.name + '-' + market.baseAsset + '/' + market.quotedAsset - let callerId = key + '-' + periodName + newUniqueId() - eventsServerClient.listenToEvent(key, 'Dataset Updated', undefined, callerId, onResponse, updateFiles) - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) - - function onResponse(message) { - eventSubscriptionIdDatasetUpdated.push(message.eventSubscriptionId) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject) - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function updateFiles(message) { - try { - if (finalized === true) { return } - let updatedFiles = 0 - - /* Now we will get the market files */ - - for (let i = 0; i < marketFilesPeriods.length; i++) { - let periodTime = marketFilesPeriods[i][0] - let periodName = marketFilesPeriods[i][1] - - if (dataset.config.validTimeFrames.includes(periodName) !== true) { continue } - if (message.event !== undefined) { - if (message.event.timeFrames !== undefined) { - if (message.event.timeFrames.includes(periodName) !== true) { continue } - } - } - fileCloud.getFile(mine, bot, session, product, dataset, exchange, market, periodName, undefined, undefined, undefined, undefined, onFileReceived) - - function onFileReceived(err, file) { - try { - if (finalized === true) { return } - files.set(periodTime, file) - updatedFiles++ - - if (updatedFiles === filesExpected) { - thisObject.eventHandler.raiseEvent('Files Updated') - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onFileReceived -> err = ' + err.stack) } - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> err = ' + err.stack) } - } - } - - function getFile(pPeriod) { - return files.get(pPeriod) - } - - function getExpectedFiles() { - return marketFilesPeriods.length - } - - function getFilesLoaded() { - return filesLoaded - } - - function getFilesNotLoaded() { - return filesNotLoaded - } -} diff --git a/Deprecated-Code/DataFiles/src/SingleFile.js b/Deprecated-Code/DataFiles/src/SingleFile.js deleted file mode 100644 index 5d5da4294..000000000 --- a/Deprecated-Code/DataFiles/src/SingleFile.js +++ /dev/null @@ -1,94 +0,0 @@ -  -function newSingleFile () { - const MODULE_NAME = 'Single File' - const INFO_LOG = false - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - getFile: getFile, - initialize: initialize - } - - let fileCloud - let file - - return thisObject - - function initialize ( - pMine, - pBot, - pSession, - pProduct, - pDataset, - pExchange, - pMarket, - pHost, - pPort, - pEventsServerClient, - callBackFunction) { - try { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> Entering function.') } - if (INFO_LOG === true) { logger.write('[INFO] initialize -> key = ' + pMine.config.codeName + '-' + pBot.config.codeName + '-' + pProduct.config.codeName) } - - let exchange = pExchange - - fileCloud = newFileCloud() - fileCloud.initialize(pBot, pHost, pPort) - - /* Now we will get the file */ - - fileCloud.getFile(pMine, pBot, pSession, pProduct, pDataset, exchange, pMarket, undefined, undefined, undefined, undefined, undefined, onFileReceived) - - function onFileReceived (err, pFile) { - try { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Entering function.') } - - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received OK Response.') } - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received FAIL Response.') } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received CUSTOM FAIL Response.') } - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> err.message = ' + err.message) } - - callBackFunction(err) - return - } - - default: { - if (INFO_LOG === true) { logger.write('[INFO] initialize -> onFileReceived -> Received Unexpected Response.') } - callBackFunction(err) - return - } - } - - file = pFile - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function getFile () { - if (INFO_LOG === true) { logger.write('[INFO] getFile -> Entering function.') } - - return file - } -} diff --git a/Deprecated-Code/EventsClientModule/.eslintignore b/Deprecated-Code/EventsClientModule/.eslintignore deleted file mode 100644 index 1756b4e84..000000000 --- a/Deprecated-Code/EventsClientModule/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -postcss.config.js diff --git a/Deprecated-Code/EventsClientModule/.eslintrc.js b/Deprecated-Code/EventsClientModule/.eslintrc.js deleted file mode 100644 index 237825159..000000000 --- a/Deprecated-Code/EventsClientModule/.eslintrc.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - parser: 'babel-eslint', - extends: [ - 'airbnb-base', - 'plugin:react/recommended', - ], - rules: { - 'max-len': ['error', 140, 2], - 'no-underscore-dangle': 'off', - 'no-param-reassign': 'off', - 'react/prop-types': 0, - 'react/jsx-indent': ['error', 2], - 'import/prefer-default-export': 'off', - }, - settings: { - 'react': { - 'pragma': 'React', - 'version': '16.5', - }, - }, - env: { - 'browser': true, - }, -}; diff --git a/Deprecated-Code/EventsClientModule/.gitignore b/Deprecated-Code/EventsClientModule/.gitignore deleted file mode 100644 index c25e5957f..000000000 --- a/Deprecated-Code/EventsClientModule/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules - -# Optional npm cache directory -.npm - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store diff --git a/Deprecated-Code/EventsClientModule/.npmignore b/Deprecated-Code/EventsClientModule/.npmignore deleted file mode 100644 index e4bf041a8..000000000 --- a/Deprecated-Code/EventsClientModule/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -build -node_modules -.DS_Store diff --git a/Deprecated-Code/EventsClientModule/CODE_OF_CONDUCT.md b/Deprecated-Code/EventsClientModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/EventsClientModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/EventsClientModule/CONTRIBUTING.md b/Deprecated-Code/EventsClientModule/CONTRIBUTING.md deleted file mode 100644 index c67e8d115..000000000 --- a/Deprecated-Code/EventsClientModule/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/EventsClientModule/LICENSE b/Deprecated-Code/EventsClientModule/LICENSE deleted file mode 100644 index 2fe09f449..000000000 --- a/Deprecated-Code/EventsClientModule/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -COPYRIGHT NOTICE - -© Copyright 2018 Superalgos.org - - -LICENSE NOTICE - -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitely agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. \ No newline at end of file diff --git a/Deprecated-Code/EventsClientModule/README.md b/Deprecated-Code/EventsClientModule/README.md deleted file mode 100644 index 4d80d7e95..000000000 --- a/Deprecated-Code/EventsClientModule/README.md +++ /dev/null @@ -1 +0,0 @@ -EventsClient diff --git a/Deprecated-Code/EventsClientModule/package-lock.json b/Deprecated-Code/EventsClientModule/package-lock.json deleted file mode 100644 index f3eb6625a..000000000 --- a/Deprecated-Code/EventsClientModule/package-lock.json +++ /dev/null @@ -1,2625 +0,0 @@ -{ - "name": "@superalgos/events-client", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz", - "integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==", - "dev": true, - "requires": { - "@babel/types": "^7.1.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz", - "integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==", - "dev": true - }, - "@babel/runtime": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", - "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.2", - "@babel/types": "^7.1.2" - } - }, - "@babel/traverse": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz", - "integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.5", - "@babel/types": "^7.1.5", - "debug": "^3.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - } - }, - "@babel/types": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz", - "integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "@material-ui/core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.5.1.tgz", - "integrity": "sha512-yMBwYV5HQ/kZjncSmzHSx4uxJCePdbq9N58Jl0tq9D1gD5fKVJY/lItnQLRlcpCzZUkGxfDhpDutvLDq58ZAkg==", - "requires": { - "@babel/runtime": "7.1.2", - "@material-ui/utils": "^3.0.0-alpha.0", - "@types/jss": "^9.5.6", - "@types/react-transition-group": "^2.0.8", - "brcast": "^3.0.1", - "classnames": "^2.2.5", - "csstype": "^2.5.2", - "debounce": "^1.1.0", - "deepmerge": "^2.0.1", - "dom-helpers": "^3.2.1", - "hoist-non-react-statics": "^3.0.0", - "is-plain-object": "^2.0.4", - "jss": "^9.3.3", - "jss-camel-case": "^6.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-nested": "^6.0.1", - "jss-props-sort": "^6.0.0", - "jss-vendor-prefixer": "^7.0.0", - "keycode": "^2.1.9", - "normalize-scroll-left": "^0.1.2", - "popper.js": "^1.14.1", - "prop-types": "^15.6.0", - "react-event-listener": "^0.6.2", - "react-transition-group": "^2.2.1", - "recompose": "0.28.0 - 0.30.0", - "warning": "^4.0.1" - } - }, - "@material-ui/icons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz", - "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==", - "requires": { - "@babel/runtime": "7.0.0", - "recompose": "^0.29.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", - "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "recompose": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz", - "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - } - } - } - }, - "@material-ui/utils": { - "version": "3.0.0-alpha.0", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.0.tgz", - "integrity": "sha512-HwC/pBcPG81UP4Jh0BaH2i4wAY9aDOrvL5+B/7J6cyFlG/Wip5Li+qI+GDlk9MR3kpG8v0sxfpWA0IlQYcHK6g==", - "requires": { - "@babel/runtime": "7.1.2" - } - }, - "@types/async": { - "version": "2.0.50", - "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.50.tgz", - "integrity": "sha512-VMhZMMQgV1zsR+lX/0IBfAk+8Eb7dPVMWiQGFAt3qjo5x7Ml6b77jUo0e1C3ToD+XRDXqtrfw+6AB0uUsPEr3Q==", - "optional": true - }, - "@types/jss": { - "version": "9.5.7", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.7.tgz", - "integrity": "sha512-OZimStu2QdDMtZ0h72JXqvLVbWUjXd5ZLk8vxLmfuC/nM1AabRyyGoxSufnzixrbpEcVcyy/JV5qeQu2JnjVZw==", - "requires": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" - } - }, - "@types/prop-types": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz", - "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ==" - }, - "@types/react": { - "version": "16.7.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.3.tgz", - "integrity": "sha512-ve/2lnXuLNaTDR1SPvsEX25m+NoNW3PMJxL2jd372UR8oJPwR5+jgtcheUoN27O+qKLFmQy0y0YKRwZcwtny3w==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-transition-group": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.0.14.tgz", - "integrity": "sha512-pa7qB0/mkhwWMBFoXhX8BcntK8G4eQl4sIfSrJCxnivTYRQWjOWf2ClR9bWdm0EUFBDHzMbKYS+QYfDtBzkY4w==", - "requires": { - "@types/react": "*" - } - }, - "@types/zen-observable": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", - "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" - }, - "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.0.tgz", - "integrity": "sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg==", - "dev": true - }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "apollo-cache": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.20.tgz", - "integrity": "sha512-+Du0/4kUSuf5PjPx0+pvgMGV12ezbHA8/hubYuqRQoy/4AWb4faa61CgJNI6cKz2mhDd9m94VTNKTX11NntwkQ==", - "requires": { - "apollo-utilities": "^1.0.25" - } - }, - "apollo-client": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.4.5.tgz", - "integrity": "sha512-nUm06EGa4TP/IY68OzmC3lTD32TqkjLOQdb69uYo+lHl8NnwebtrAw3qFtsQtTEz6ueBp/Z/HasNZng4jwafVQ==", - "requires": { - "@types/async": "2.0.50", - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.1.20", - "apollo-link": "^1.0.0", - "apollo-link-dedup": "^1.0.0", - "apollo-utilities": "1.0.25", - "symbol-observable": "^1.0.2", - "zen-observable": "^0.8.0" - } - }, - "apollo-link": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.3.tgz", - "integrity": "sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw==", - "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.10" - } - }, - "apollo-link-dedup": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.10.tgz", - "integrity": "sha512-tpUI9lMZsidxdNygSY1FxflXEkUZnvKRkMUsXXuQUNoSLeNtEvUX7QtKRAl4k9ubLl8JKKc9X3L3onAFeGTK8w==", - "requires": { - "apollo-link": "^1.2.3" - } - }, - "apollo-utilities": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.25.tgz", - "integrity": "sha512-AXvqkhni3Ir1ffm4SA1QzXn8k8I5BBl4PVKEyak734i4jFdp+xgfUyi2VCqF64TJlFTA/B73TRDUvO2D+tKtZg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "autoprefixer": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.3.1.tgz", - "integrity": "sha512-DY9gOh8z3tnCbJ13JIWaeQsoYncTGdsrgCceBaQSIL4nvdrLxgbRSBPevg2XbX7u4QCSfLheSJEEIUUSlkbx6Q==", - "dev": true, - "requires": { - "browserslist": "^4.3.3", - "caniuse-lite": "^1.0.30000898", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.5", - "postcss-value-parser": "^3.3.1" - } - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brcast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz", - "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==" - }, - "browserslist": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", - "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000899", - "electron-to-chromium": "^1.3.82", - "node-releases": "^1.0.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000907", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz", - "integrity": "sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "core-js": { - "version": "1.2.7", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", - "requires": { - "is-in-browser": "^1.0.2" - } - }, - "csstype": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz", - "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==" - }, - "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", - "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, - "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "fbjs-css-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.1.tgz", - "integrity": "sha512-IM+v/C40MNZWqsLErc32e0TyIk/NhkkQZL0QmjBh6zi1eXv0/GeVKmKmueQX7nn9SXQBQbTUcB8zuexIF3/88w==" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", - "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^3.0.0", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.0.2.tgz", - "integrity": "sha512-gUC4YYsaiSJT1h40krG3J+USGlwhzNTXSb4IOZljn9ag5Tj+RkoXrWp+Kh7WyE3t1NCfab5kzCuxBIvOMERMXw==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-tag": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz", - "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", - "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "hoist-non-react-statics": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz", - "integrity": "sha512-MYcYuROh7SBM69xHGqXEwQqDux34s9tz+sCnxJmN18kgWh6JFdTw/5YdZtqsOdZJXddE/wUpCzfEdDrJj8p0Iw==", - "requires": { - "react-is": "^16.3.2" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", - "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indefinite-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.1.tgz", - "integrity": "sha1-CZFUI8yNb36xy3iCrRNGM8mm7cM=", - "requires": { - "symbol-observable": "1.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", - "requires": { - "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", - "requires": { - "hyphenate-style-name": "^1.0.2" - } - }, - "jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==" - }, - "jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==" - }, - "jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", - "requires": { - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-props-sort": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", - "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==" - }, - "jss-vendor-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", - "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", - "requires": { - "css-vendor": "^0.3.8" - } - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.flowright": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flowright/-/lodash.flowright-3.5.0.tgz", - "integrity": "sha1-K1//OZcW1+fcVyT+k0n2cGUYTWc=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "luxon": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.6.2.tgz", - "integrity": "sha512-vZP3vVTK0aH3W6zleLYefctzpKaUaVtdF7G/WblRrf/lbEASMuV5ZlPR+2GBvaUEuD0TAf/r5NB98s3ER4shnQ==" - }, - "material-ui-pickers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/material-ui-pickers/-/material-ui-pickers-1.0.1.tgz", - "integrity": "sha512-FRJwgeFUQdQxzNAybZvf11204KFBxqKS6sg4JvAO0cWmHULXJhrc9kuEDT8F7Pomwnv6+AyfxygsoMgIRcBMNg==", - "requires": { - "classnames": "^2.2.6", - "keycode": "^2.2.0", - "react-event-listener": "^0.6.4", - "react-text-mask": "=5.4.1", - "react-transition-group": "^2.5.0", - "tslib": "^1.9.3" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-releases": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz", - "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-scroll-left": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", - "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "popper.js": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.5.tgz", - "integrity": "sha512-fs4Sd8bZLgEzrk8aS7Em1qh+wcawtE87kRUJQhK6+LndyV1HerX7+LURzAylVaTyWIn5NTB/lyjnWqw/AZ6Yrw==" - }, - "postcss": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", - "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.5.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "react": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz", - "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" - } - }, - "react-apollo": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.2.4.tgz", - "integrity": "sha512-haS5R30Qvteb65ZLfWomUZQh47VU4ld4Kof3zlqdbLOrYPt3/DdVZC8ZFPZSxd5zPeIJtZqpUfAxD1WHVoMPIA==", - "requires": { - "fbjs": "^1.0.0", - "hoist-non-react-statics": "^3.0.0", - "invariant": "^2.2.2", - "lodash.flowright": "^3.5.0", - "lodash.isequal": "^4.5.0", - "prop-types": "^15.6.0" - }, - "dependencies": { - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "fbjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", - "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", - "requires": { - "core-js": "^2.4.1", - "fbjs-css-vars": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-dom": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", - "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.11.2" - } - }, - "react-event-listener": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.4.tgz", - "integrity": "sha512-t7VSjIuUFmN+GeyKb+wm025YLeojVB85kJL6sSs0wEBJddfmKBEQz+CNBZ2zBLKVWkPy/fZXM6U5yvojjYBVYQ==", - "requires": { - "@babel/runtime": "7.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", - "requires": { - "regenerator-runtime": "^0.12.0" - } - } - } - }, - "react-hot-loader": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.3.12.tgz", - "integrity": "sha512-GMM4TsqUVss2QPe+Y33NlgydA5/+7tAVQxR0rZqWvBpapM8JhD7p6ymMwSZzr5yxjoXXlK/6P6qNQBOqm1dqdg==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==", - "dev": true - } - } - }, - "react-is": { - "version": "16.6.3", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.6.3.tgz", - "integrity": "sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - } - }, - "react-sortable-hoc": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-sortable-hoc/-/react-sortable-hoc-0.8.3.tgz", - "integrity": "sha512-vt2qQ9DnPLjGZ9osM2jBULdi7WfFXtYVuHvjHX8o2em7Rcla9FXIG60aWFbvvpFC1iXyATw5PWZX0B57EUOYfQ==", - "requires": { - "babel-runtime": "^6.11.6", - "invariant": "^2.2.1", - "prop-types": "^15.5.7" - } - }, - "react-text-mask": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/react-text-mask/-/react-text-mask-5.4.1.tgz", - "integrity": "sha512-mGx1n0x0skktwsKcpgAGnrgExFlXDflbWEHh8PC1UaQP8+EdHkW7JYczTghsBo2rnVwU9/4A9x/2bVt3HY46/w==", - "requires": { - "prop-types": "^15.5.6" - } - }, - "react-transition-group": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.0.tgz", - "integrity": "sha512-qYB3JBF+9Y4sE4/Mg/9O6WFpdoYjeeYqx0AFb64PTazVy8RPMiE3A47CG9QmM4WJ/mzDiZYslV+Uly6O1Erlgw==", - "requires": { - "dom-helpers": "^3.3.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - }, - "recompose": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", - "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scheduler": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz", - "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" - }, - "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", - "dev": true, - "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "ua-parser-js": { - "version": "0.7.19", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", - "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" - }, - "warning": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", - "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "zen-observable": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.11.tgz", - "integrity": "sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==" - }, - "zen-observable-ts": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz", - "integrity": "sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ==", - "requires": { - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/EventsClientModule/package.json b/Deprecated-Code/EventsClientModule/package.json deleted file mode 100644 index b04e66be9..000000000 --- a/Deprecated-Code/EventsClientModule/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@superalgos/events-client", - "version": "0.0.2", - "description": "SuperAlgos Event client-side web app", - "author": "", - "license": "", - "main": "src/index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/EventsClientModule.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "standard": { - "parser": "babel-eslint" - }, - "devDependencies": { - "autoprefixer": "^9.2.0", - "babel-eslint": "^10.0.1", - "eslint": "^5.8.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-react": "^7.11.1", - "react-hot-loader": "^4.3.11" - }, - "dependencies": { - "@material-ui/core": "^3.2.0", - "@material-ui/icons": "^3.0.1", - "apollo-client": "^2.4.4", - "graphql": "^14.0.2", - "graphql-tag": "^2.10.0", - "luxon": "^1.4.4", - "material-ui-pickers": "^1.0.1", - "react": "^16.5.2", - "react-apollo": "^2.2.4", - "react-dom": "^16.6.0", - "react-router-dom": "^4.3.1", - "react-sortable-hoc": "^0.8.3" - } -} diff --git a/Deprecated-Code/EventsClientModule/postcss.config.js b/Deprecated-Code/EventsClientModule/postcss.config.js deleted file mode 100644 index eb022cd60..000000000 --- a/Deprecated-Code/EventsClientModule/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - require('autoprefixer'), - ], -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/BannerTopBar/index.js b/Deprecated-Code/EventsClientModule/src/Components/BannerTopBar/index.js deleted file mode 100644 index c006763f9..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/BannerTopBar/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import Typography from '@material-ui/core/Typography'; - -const BannerTopBar = ({ - size, - backgroundUrl, - title, - text, -}) => ( -
-
- {title} - {text} -
-
-); - -export default BannerTopBar; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Basic.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Basic.js deleted file mode 100644 index 6854ea420..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Basic.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import { - TextField, - Button, - FormGroup, - Typography, - Grid, -} from '@material-ui/core'; -import { - ChevronLeft, - ChevronRight, -} from '@material-ui/icons'; -import { DateTimePicker } from 'material-ui-pickers'; - - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class Basic extends React.Component { - render() { - const { - classes, event, edit, create, - } = this.props; - return ( - - - These are the basic information you need to input in order to create an event. - There might be some heavy changes in the near future as the application is still at a very early stage. - - - - - edit('title', newVal.target.value)} - /> - edit('subtitle', newVal.target.value)} - /> - edit('description', newVal.target.value)} - /> - - - - - } - rightArrowIcon={} - value={event.startDatetime} - helperText='Competition start date' - onChange={newVal => edit('startDatetime', newVal)} - /> - - - } - rightArrowIcon={} - value={event.endDatetime} - helperText='Competition ending date' - onChange={newVal => edit('endDatetime', newVal)} - /> - - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Basic); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/PresentationPage.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/PresentationPage.js deleted file mode 100644 index 1c674ddcc..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/PresentationPage.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class PresentationPage extends React.Component { - render() { - const { classes } = this.props; - return ( - - - PresentationPage - - - ); - } -} - -export default withStyles(styles)(PresentationPage); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/TeamsServer.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/TeamsServer.js deleted file mode 100644 index 874c72d6f..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/TeamsServer.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class TeamsServer extends React.Component { - render() { - const { classes } = this.props; - return ( - - - TeamsServer - - - ); - } -} - -export default withStyles(styles)(TeamsServer); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/New.js deleted file mode 100644 index 605782b2d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/New.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { name: '' }; - } - - render() { - const { name } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createFormula-dialog-title' - > - - Create a new formula - - - - At least for now, all the formulas are publically available, creating it here will let you select it in the select element. - - - { - const { events_Formulas: formulas } = store.readQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - data: { events_Formulas: formulas.concat([data.events_CreateFormula]) }, - }); - closeDialogs(); - } - } - > - {createFormula => ( -
{ - e.preventDefault(); - createFormula({ - variables: { - formula: { name }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Formula/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/New.js deleted file mode 100644 index 5dc2b3b06..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/New.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - name: '', - host: '', - repo: '', - moduleName: '', - }; - } - - render() { - const { - name, host, repo, moduleName, - } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createPlotter-dialog-title' - > - - Create a new plotter - - - - At least for now, all the plotters are publically available, creating it here will let you select it in the select element. - - - { - const { events_Plotters: plotters } = store.readQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - data: { events_Plotters: plotters.concat([data.events_CreatePlotter]) }, - }); - closeDialogs(); - } - } - > - {createPlotter => ( -
{ - e.preventDefault(); - createPlotter({ - variables: { - plotter: { - name, - host, - repo, - moduleName, - }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - this.setState({ host: e.target.value })} - fullWidth - /> - this.setState({ repo: e.target.value })} - fullWidth - /> - this.setState({ moduleName: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Plotter/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/List.js deleted file mode 100644 index cc807f2c2..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/List.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deletePrize, index }) => ( -
- - - - - - - - {value.from}{value.to}{value.additional}{value.amount}{value.asset} - - - - - - deletePrize(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deletePrize }) => ( -
- {items.map((value, index) => ( - deletePrize(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(newIndex, 0, newPrizes.splice(oldIndex, 1)[0]); - this.props.edit(newPrizes); - } - - deletePrize = (deletedIndex) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(deletedIndex, 1); - this.props.edit(newPrizes); - } - - render() { - return ( - - this.deletePrize(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/New.js deleted file mode 100644 index 53d702b4e..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/New.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - additional: '', - amount: 0, - asset: '', - }; - } - - render() { - const { - from, to, additional, amount, asset, - } = this.state; - const { addPrize, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addPrize-dialog-title' - > - - - Prizes are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addPrize({ - from, - to, - additional, - amount, - asset, - }); - }} - > - - Conditions : - - - Examples : - If you want to make a price for the best bot only, you set both from and to rank to 1. - If you want the rest of the top 10 to get a price, you add a new price with from rank set to 2 and to rank set to 10. - Caution : - - Leaving "from rank" empty considers it to 0. - - Leaving "to rank" empty considers it as infinite - - Prizes are define in an additive manner, meaning that if a team qualifies for two prices, it gets both. - - Additional allows you to write addionnal textual condition, like "positive ROI only" for example. - - - this.setState({ from: e.target.value })} - type="number" - /> - this.setState({ to: e.target.value })} - type="number" - /> - this.setState({ additional: e.target.value })} - fullWidth - /> - - Pool : - - - Here you define the pool, the amount is a number whereas asset is a text. For example 1BTC, 200$, or whatever. - - this.setState({ amount: e.target.value })} - type="number" - /> - this.setState({ asset: e.target.value })} - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Prizes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/List.js deleted file mode 100644 index e2966ae7d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/List.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deleteRule, index }) => ( -
- - - - - - - - {value.title} - - - {value.description} - - - - deleteRule(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deleteRule }) => ( -
- {items.map((value, index) => ( - deleteRule(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newRules = this.props.rules.slice(0); - newRules.splice(newIndex, 0, newRules.splice(oldIndex, 1)[0]); - this.props.edit(newRules); - } - - deleteRule = (deletedIndex) => { - const newRules = this.props.rules.slice(0); - newRules.splice(deletedIndex, 1); - this.props.edit(newRules); - } - - render() { - return ( - - this.deleteRule(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/New.js deleted file mode 100644 index e133c1508..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/New.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - title: '', - description: '', - }; - } - - render() { - const { - title, description, - } = this.state; - const { addRule, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addRule-dialog-title' - > - - Create a new rule - - - - Rules are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addRule( - title, - description, - ); - }} - > - this.setState({ title: e.target.value })} - fullWidth - /> - this.setState({ description: e.target.value })} - fullWidth - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/Rules/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/index.js deleted file mode 100644 index 1840c37fb..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/Technical/index.js +++ /dev/null @@ -1,196 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; - -import { - Typography, - FormControl, - InputLabel, - Input, - Select, - FormHelperText, - MenuItem, - Grid, - Button, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from '../../styles'; - -import { getOptionsCalls } from '../../../../../GraphQL/Calls/index'; - -import { List as RulesList, New as NewRule } from './Rules'; -import { List as PrizesList, New as NewPrize } from './Prizes'; - -import { New as NewPlotter } from './Plotter'; -import { New as NewFormula } from './Formula'; - -class Technical extends React.Component { - constructor(props) { - super(props); - this.state = { - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }; - } - - addRule = (title, description) => { - this.props.edit('rules', [...this.props.event.rules, { - title, - description, - }]); - this.closeDialogs(); - } - - addPrize = (prize) => { - this.props.edit('prizes', [...this.props.event.prizes, prize]); - this.closeDialogs(); - } - - closeDialogs = () => { - this.setState({ - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }); - } - - render() { - const { - classes, event, edit, create, - } = this.props; - const { - isNewPlotterOpen, isNewFormulaOpen, isNewRuleOpen, isNewPrizeOpen, - } = this.state; - return ( - - - Select the formula and the plotter you want to use, you can also create your own with the corresponding button. - - - - Select the formula - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Formulas.map((formula, index) => ( - {formula.name} - )); - return ( - - - { isNewFormulaOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewFormulaOpen: true }); }}> - To create a new formula, click here - - - - - Select the Plotter - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Plotters.map((plotter, index) => ( - {plotter.name} - )); - return ( - - - { isNewPlotterOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewPlotterOpen: true }); }} > - To create a new plotter, click here - - - - - - Define the rules of your event. - - edit('rules', newVal)} /> - { isNewRuleOpen - ? this.closeDialogs()} addRule={(title, description) => this.addRule(title, description)} /> - : ''} - { this.setState({ isNewRuleOpen: true }); }} > - To add a new rule, click here - - - - - - Define the prizes of your event. - - edit('prizes', newVal)} /> - { isNewPrizeOpen - ? this.closeDialogs()} addPrize={prize => this.addPrize(prize)} /> - : ''} - { this.setState({ isNewPrizeOpen: true }); }} > - To add a new prize, click here - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Technical); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/index.js deleted file mode 100644 index feecaaf55..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/Tabs/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import Basic from './Basic'; -import PresentationPage from './PresentationPage'; -import TeamsServer from './TeamsServer'; -import Technical from './Technical'; - -export { - Basic, - PresentationPage, - TeamsServer, - Technical, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/index.js deleted file mode 100644 index 3288815b5..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/index.js +++ /dev/null @@ -1,212 +0,0 @@ -import React from 'react'; -import { Mutation } from 'react-apollo'; -import { DateTime } from 'luxon'; - -import { - Paper, - Typography, - AppBar, - Tabs, - Tab, -} from '@material-ui/core'; -import { - Face as BasicIcon, - Alarm as TechnicalIcon, - Group as TeamAndServerIcon, - PresentToAll as PresentationIcon, -} from '@material-ui/icons'; -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; - -import BannerTopBar from '../../BannerTopBar'; - -import { - Basic, - PresentationPage, - TeamsServer, - Technical, -} from './Tabs'; - -import { hostedEventsCalls } from '../../../GraphQL/Calls'; - -function TabContainer(props) { - return ( - - {props.children} - - ); -} - -class Create extends React.Component { - constructor(props) { - super(props); - this.state = { - value: 0, - title: '', - subtitle: '', - description: '', - startDatetime: DateTime.local().plus({ days: 1 }).startOf('day'), - endDatetime: DateTime.local().plus({ days: 8 }).startOf('day'), - formulaId: '', - plotterId: '', - prizes: [], - rules: [], - }; - } - - handleTabChange = (event, value) => { - this.setState({ value }); - } - - handleEventChange = (newType, newVal) => { - this.setState({ [newType]: newVal }); - } - - remapPrizes = (prizes) => { - const remappedPrizes = []; - - prizes.forEach((prize) => { - remappedPrizes.push({ - condition: { - from: parseInt(prize.from, 10), - to: parseInt(prize.to, 10), - additional: prize.additional, - }, - pool: { - amount: parseInt(prize.amount, 10), - asset: prize.asset, - }, - }); - }); - return remappedPrizes; - } - - render() { - const { - title, - subtitle, - description, - startDatetime, - endDatetime, - value, - formulaId, - plotterId, - prizes, - rules, - } = this.state; - const { classes } = this.props; - return ( - - - { - this.props.history.push(`/events/edit/${data.events_CreateEvent.id}`); - } - } - > - {hostEvent => ( -
- - - } - /> - } - /> - } - disabled - /> - } - disabled - /> - - -
- - - Create a new event - - {value === 0 && - this.handleEventChange(newType, newVal)} - create={() => hostEvent({ - variables: { - event: { - title, - subtitle, - description, - startDatetime: startDatetime.valueOf() / 1000, - endDatetime: endDatetime.valueOf() / 1000, - formulaId, - plotterId, - prizes: this.remapPrizes(prizes), - rules, - }, - }, - })} - /> - } - {value === 1 && - this.handleEventChange(newType, newVal)} - create={() => hostEvent({ - variables: { - event: { - title, - subtitle, - description, - startDatetime: startDatetime.valueOf() / 1000, - endDatetime: endDatetime.valueOf() / 1000, - formulaId, - plotterId, - prizes: this.remapPrizes(prizes), - rules, - }, - }, - })} - /> - } - {value === 2 && } - {value === 3 && } - -
-
- )} -
-
- ); - } -} - -export default withStyles(styles)(Create); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/styles.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Create/styles.js deleted file mode 100644 index 50a3490ca..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Create/styles.js +++ /dev/null @@ -1,51 +0,0 @@ -const styles = theme => ({ - root: { - flexGrow: 1, - width: '100%', - backgroundColor: theme.palette.background.paper, - padding: 0, - margin: 0, - }, - tabTitle: { - width: '25%', - maxWidth: 'none', - }, - clickable: { - cursor: 'pointer', - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right', - }, - buttonGrid: { - marginTop: -20, - }, - title: { - marginTop: 20, - }, - paperRoot: { - flexGrow: 1, - padding: 10, - marginTop: 25, - marginBottom: 25, - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25, - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - }, - selectEmpty: { - marginTop: theme.spacing.unit * 2, - }, - bottomButton: { - padding: 15, - margin: 20, - }, -}); - -export default styles; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Basic.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Basic.js deleted file mode 100644 index 8210a3720..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Basic.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import { - TextField, - Button, - FormGroup, - Typography, - Grid, -} from '@material-ui/core'; -import { - ChevronLeft, - ChevronRight, -} from '@material-ui/icons'; -import { DateTimePicker } from 'material-ui-pickers'; - - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class Basic extends React.Component { - render() { - const { - classes, event, edit, saveChanges, - } = this.props; - return ( - - - These are the basic information you need to input in order to edit an event. - There might be some heavy changes in the near future as the application is still at a very early stage. - - - - - edit('title', newVal.target.value)} - /> - edit('subtitle', newVal.target.value)} - /> - edit('description', newVal.target.value)} - /> - - - - - } - rightArrowIcon={} - value={event.startDatetime} - helperText='Competition start date' - onChange={newVal => edit('startDatetime', newVal)} - /> - - - } - rightArrowIcon={} - value={event.endDatetime} - helperText='Competition ending date' - onChange={newVal => edit('endDatetime', newVal)} - /> - - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Basic); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/PresentationPage.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/PresentationPage.js deleted file mode 100644 index 1c674ddcc..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/PresentationPage.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class PresentationPage extends React.Component { - render() { - const { classes } = this.props; - return ( - - - PresentationPage - - - ); - } -} - -export default withStyles(styles)(PresentationPage); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/TeamsServer.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/TeamsServer.js deleted file mode 100644 index 874c72d6f..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/TeamsServer.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class TeamsServer extends React.Component { - render() { - const { classes } = this.props; - return ( - - - TeamsServer - - - ); - } -} - -export default withStyles(styles)(TeamsServer); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/New.js deleted file mode 100644 index 605782b2d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/New.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { name: '' }; - } - - render() { - const { name } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createFormula-dialog-title' - > - - Create a new formula - - - - At least for now, all the formulas are publically available, creating it here will let you select it in the select element. - - - { - const { events_Formulas: formulas } = store.readQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - data: { events_Formulas: formulas.concat([data.events_CreateFormula]) }, - }); - closeDialogs(); - } - } - > - {createFormula => ( -
{ - e.preventDefault(); - createFormula({ - variables: { - formula: { name }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Formula/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/New.js deleted file mode 100644 index 5dc2b3b06..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/New.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - name: '', - host: '', - repo: '', - moduleName: '', - }; - } - - render() { - const { - name, host, repo, moduleName, - } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createPlotter-dialog-title' - > - - Create a new plotter - - - - At least for now, all the plotters are publically available, creating it here will let you select it in the select element. - - - { - const { events_Plotters: plotters } = store.readQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - data: { events_Plotters: plotters.concat([data.events_CreatePlotter]) }, - }); - closeDialogs(); - } - } - > - {createPlotter => ( -
{ - e.preventDefault(); - createPlotter({ - variables: { - plotter: { - name, - host, - repo, - moduleName, - }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - this.setState({ host: e.target.value })} - fullWidth - /> - this.setState({ repo: e.target.value })} - fullWidth - /> - this.setState({ moduleName: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Plotter/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/List.js deleted file mode 100644 index cc807f2c2..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/List.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deletePrize, index }) => ( -
- - - - - - - - {value.from}{value.to}{value.additional}{value.amount}{value.asset} - - - - - - deletePrize(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deletePrize }) => ( -
- {items.map((value, index) => ( - deletePrize(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(newIndex, 0, newPrizes.splice(oldIndex, 1)[0]); - this.props.edit(newPrizes); - } - - deletePrize = (deletedIndex) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(deletedIndex, 1); - this.props.edit(newPrizes); - } - - render() { - return ( - - this.deletePrize(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/New.js deleted file mode 100644 index 53d702b4e..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/New.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - additional: '', - amount: 0, - asset: '', - }; - } - - render() { - const { - from, to, additional, amount, asset, - } = this.state; - const { addPrize, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addPrize-dialog-title' - > - - - Prizes are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addPrize({ - from, - to, - additional, - amount, - asset, - }); - }} - > - - Conditions : - - - Examples : - If you want to make a price for the best bot only, you set both from and to rank to 1. - If you want the rest of the top 10 to get a price, you add a new price with from rank set to 2 and to rank set to 10. - Caution : - - Leaving "from rank" empty considers it to 0. - - Leaving "to rank" empty considers it as infinite - - Prizes are define in an additive manner, meaning that if a team qualifies for two prices, it gets both. - - Additional allows you to write addionnal textual condition, like "positive ROI only" for example. - - - this.setState({ from: e.target.value })} - type="number" - /> - this.setState({ to: e.target.value })} - type="number" - /> - this.setState({ additional: e.target.value })} - fullWidth - /> - - Pool : - - - Here you define the pool, the amount is a number whereas asset is a text. For example 1BTC, 200$, or whatever. - - this.setState({ amount: e.target.value })} - type="number" - /> - this.setState({ asset: e.target.value })} - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Prizes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/List.js deleted file mode 100644 index e2966ae7d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/List.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deleteRule, index }) => ( -
- - - - - - - - {value.title} - - - {value.description} - - - - deleteRule(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deleteRule }) => ( -
- {items.map((value, index) => ( - deleteRule(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newRules = this.props.rules.slice(0); - newRules.splice(newIndex, 0, newRules.splice(oldIndex, 1)[0]); - this.props.edit(newRules); - } - - deleteRule = (deletedIndex) => { - const newRules = this.props.rules.slice(0); - newRules.splice(deletedIndex, 1); - this.props.edit(newRules); - } - - render() { - return ( - - this.deleteRule(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/New.js deleted file mode 100644 index e133c1508..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/New.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - title: '', - description: '', - }; - } - - render() { - const { - title, description, - } = this.state; - const { addRule, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addRule-dialog-title' - > - - Create a new rule - - - - Rules are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addRule( - title, - description, - ); - }} - > - this.setState({ title: e.target.value })} - fullWidth - /> - this.setState({ description: e.target.value })} - fullWidth - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/Rules/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/index.js deleted file mode 100644 index 212aa6d50..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/Technical/index.js +++ /dev/null @@ -1,196 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; - -import { - Typography, - FormControl, - InputLabel, - Input, - Select, - FormHelperText, - MenuItem, - Grid, - Button, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from '../../styles'; - -import { getOptionsCalls } from '../../../../../GraphQL/Calls/index'; - -import { List as RulesList, New as NewRule } from './Rules'; -import { List as PrizesList, New as NewPrize } from './Prizes'; - -import { New as NewPlotter } from './Plotter'; -import { New as NewFormula } from './Formula'; - -class Technical extends React.Component { - constructor(props) { - super(props); - this.state = { - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }; - } - - addRule = (title, description) => { - this.props.edit('rules', [...this.props.event.rules, { - title, - description, - }]); - this.closeDialogs(); - } - - addPrize = (prize) => { - this.props.edit('prizes', [...this.props.event.prizes, prize]); - this.closeDialogs(); - } - - closeDialogs = () => { - this.setState({ - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }); - } - - render() { - const { - classes, event, edit, saveChanges, - } = this.props; - const { - isNewPlotterOpen, isNewFormulaOpen, isNewRuleOpen, isNewPrizeOpen, - } = this.state; - return ( - - - Select the formula and the plotter you want to use, you can also create your own with the corresponding button. - - - - Select the formula - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Formulas.map((formula, index) => ( - {formula.name} - )); - return ( - - - { isNewFormulaOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewFormulaOpen: true }); }}> - To create a new formula, click here - - - - - Select the Plotter - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Plotters.map((plotter, index) => ( - {plotter.name} - )); - return ( - - - { isNewPlotterOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewPlotterOpen: true }); }} > - To create a new plotter, click here - - - - - - Define the rules of your event. - - edit('rules', newVal)} /> - { isNewRuleOpen - ? this.closeDialogs()} addRule={(title, description) => this.addRule(title, description)} /> - : ''} - { this.setState({ isNewRuleOpen: true }); }} > - To add a new rule, click here - - - - - - Define the prizes of your event. - - edit('prizes', newVal)} /> - { isNewPrizeOpen - ? this.closeDialogs()} addPrize={prize => this.addPrize(prize)} /> - : ''} - { this.setState({ isNewPrizeOpen: true }); }} > - To add a new prize, click here - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Technical); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/index.js deleted file mode 100644 index feecaaf55..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/Tabs/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import Basic from './Basic'; -import PresentationPage from './PresentationPage'; -import TeamsServer from './TeamsServer'; -import Technical from './Technical'; - -export { - Basic, - PresentationPage, - TeamsServer, - Technical, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/index.js deleted file mode 100644 index 1db70051c..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; -import Queried from './queried'; - -import BannerTopBar from '../../BannerTopBar'; - -import { showEventCalls } from '../../../GraphQL/Calls/index'; - -class Edit extends React.Component { - render() { - return ( - - - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return (); - }} - - - ); - } -} - -export default withStyles(styles)(Edit); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/queried.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/queried.js deleted file mode 100644 index 3ba72b60a..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/queried.js +++ /dev/null @@ -1,228 +0,0 @@ -import React from 'react'; -import { Mutation } from 'react-apollo'; - -import { - Paper, - Typography, - AppBar, - Tabs, - Tab, -} from '@material-ui/core'; -import { - Face as BasicIcon, - Alarm as TechnicalIcon, - Group as TeamAndServerIcon, - PresentToAll as PresentationIcon, -} from '@material-ui/icons'; -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; - -import { - Basic, - PresentationPage, - TeamsServer, - Technical, -} from './Tabs'; - -import { hostedEventsCalls } from '../../../GraphQL/Calls/index'; - -function TabContainer(props) { - return ( - - {props.children} - - ); -} - -class Queried extends React.Component { - constructor(props) { - super(props); - this.state = { - value: 0, - id: this.props.event.id, - title: this.props.event.title, - subtitle: this.props.event.subtitle, - description: this.props.event.description, - startDatetime: this.props.event.startDatetime * 1000, - endDatetime: this.props.event.endDatetime * 1000, - formulaId: this.props.event.formula.id, - plotterId: this.props.event.plotter.id, - prizes: this.counterremapPrizes(this.props.event.prizes), - rules: this.props.event.rules, - }; - } - - handleTabChange = (event, value) => { - this.setState({ value }); - } - - handleEventChange = (newType, newVal) => { - this.setState({ [newType]: newVal }); - } - - counterremapPrizes = (prizes) => { - const counterremapPrizes = []; - prizes.forEach((prize) => { - counterremapPrizes.push({ - from: parseInt(prize.condition.from, 10), - to: parseInt(prize.condition.to, 10), - additional: prize.condition.additional, - amount: parseInt(prize.pool.amount, 10), - asset: prize.pool.asset, - }); - }); - return counterremapPrizes; - } - - remapPrizes = (prizes) => { - const remappedPrizes = []; - - prizes.forEach((prize) => { - remappedPrizes.push({ - condition: { - from: parseInt(prize.from, 10), - to: parseInt(prize.to, 10), - additional: prize.additional, - }, - pool: { - amount: parseInt(prize.amount, 10), - asset: prize.asset, - }, - }); - }); - return remappedPrizes; - } - - render() { - const { - id, - title, - subtitle, - description, - startDatetime, - endDatetime, - value, - formulaId, - plotterId, - prizes, - rules, - } = this.state; - const { classes } = this.props; - return ( - - { - this.props.history.push(`/events/edit/${data.events_EditEvent.id}`); - }} - > - {editHosted => ( -
- - - } - /> - } - /> - } - disabled - /> - } - disabled - /> - - -
- - - Edit an event - - {value === 0 && - this.handleEventChange(newType, newVal)} - saveChanges={() => editHosted({ - variables: { - eventId: id, - event: { - title, - subtitle, - description, - startDatetime: startDatetime.valueOf() / 1000, - endDatetime: endDatetime.valueOf() / 1000, - formulaId, - plotterId, - prizes: this.remapPrizes(prizes), - rules, - }, - }, - })} - /> - } - {value === 1 && - this.handleEventChange(newType, newVal)} - saveChanges={() => editHosted({ - variables: { - eventId: id, - event: { - title, - subtitle, - description, - startDatetime: startDatetime.valueOf() / 1000, - endDatetime: endDatetime.valueOf() / 1000, - formulaId, - plotterId, - prizes: this.remapPrizes(prizes), - rules, - }, - }, - })} - /> - } - {value === 2 && } - {value === 3 && } - -
-
- )} -
-
- ); - } -} - -export default withStyles(styles)(Queried); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/styles.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/styles.js deleted file mode 100644 index 50a3490ca..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Edit/styles.js +++ /dev/null @@ -1,51 +0,0 @@ -const styles = theme => ({ - root: { - flexGrow: 1, - width: '100%', - backgroundColor: theme.palette.background.paper, - padding: 0, - margin: 0, - }, - tabTitle: { - width: '25%', - maxWidth: 'none', - }, - clickable: { - cursor: 'pointer', - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right', - }, - buttonGrid: { - marginTop: -20, - }, - title: { - marginTop: 20, - }, - paperRoot: { - flexGrow: 1, - padding: 10, - marginTop: 25, - marginBottom: 25, - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25, - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - }, - selectEmpty: { - marginTop: theme.spacing.unit * 2, - }, - bottomButton: { - padding: 15, - margin: 20, - }, -}); - -export default styles; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Basic.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Basic.js deleted file mode 100644 index 6854ea420..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Basic.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import { - TextField, - Button, - FormGroup, - Typography, - Grid, -} from '@material-ui/core'; -import { - ChevronLeft, - ChevronRight, -} from '@material-ui/icons'; -import { DateTimePicker } from 'material-ui-pickers'; - - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class Basic extends React.Component { - render() { - const { - classes, event, edit, create, - } = this.props; - return ( - - - These are the basic information you need to input in order to create an event. - There might be some heavy changes in the near future as the application is still at a very early stage. - - - - - edit('title', newVal.target.value)} - /> - edit('subtitle', newVal.target.value)} - /> - edit('description', newVal.target.value)} - /> - - - - - } - rightArrowIcon={} - value={event.startDatetime} - helperText='Competition start date' - onChange={newVal => edit('startDatetime', newVal)} - /> - - - } - rightArrowIcon={} - value={event.endDatetime} - helperText='Competition ending date' - onChange={newVal => edit('endDatetime', newVal)} - /> - - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Basic); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/PresentationPage.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/PresentationPage.js deleted file mode 100644 index 1c674ddcc..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/PresentationPage.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class PresentationPage extends React.Component { - render() { - const { classes } = this.props; - return ( - - - PresentationPage - - - ); - } -} - -export default withStyles(styles)(PresentationPage); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/TeamsServer.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/TeamsServer.js deleted file mode 100644 index 874c72d6f..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/TeamsServer.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - - -class TeamsServer extends React.Component { - render() { - const { classes } = this.props; - return ( - - - TeamsServer - - - ); - } -} - -export default withStyles(styles)(TeamsServer); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/New.js deleted file mode 100644 index 605782b2d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/New.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { name: '' }; - } - - render() { - const { name } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createFormula-dialog-title' - > - - Create a new formula - - - - At least for now, all the formulas are publically available, creating it here will let you select it in the select element. - - - { - const { events_Formulas: formulas } = store.readQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_FORMULAS, - data: { events_Formulas: formulas.concat([data.events_CreateFormula]) }, - }); - closeDialogs(); - } - } - > - {createFormula => ( -
{ - e.preventDefault(); - createFormula({ - variables: { - formula: { name }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Formula/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/New.js deleted file mode 100644 index 5dc2b3b06..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/New.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -import { Mutation } from 'react-apollo'; -import { getOptionsCalls } from '../../../../../../GraphQL/Calls/index'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - name: '', - host: '', - repo: '', - moduleName: '', - }; - } - - render() { - const { - name, host, repo, moduleName, - } = this.state; - const { closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='createPlotter-dialog-title' - > - - Create a new plotter - - - - At least for now, all the plotters are publically available, creating it here will let you select it in the select element. - - - { - const { events_Plotters: plotters } = store.readQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - }); - store.writeQuery({ - query: getOptionsCalls.EVENTS_PLOTTERS, - data: { events_Plotters: plotters.concat([data.events_CreatePlotter]) }, - }); - closeDialogs(); - } - } - > - {createPlotter => ( -
{ - e.preventDefault(); - createPlotter({ - variables: { - plotter: { - name, - host, - repo, - moduleName, - }, - }, - }); - }} - > - this.setState({ name: e.target.value })} - fullWidth - /> - this.setState({ host: e.target.value })} - fullWidth - /> - this.setState({ repo: e.target.value })} - fullWidth - /> - this.setState({ moduleName: e.target.value })} - fullWidth - /> - - - )} -
- -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/index.js deleted file mode 100644 index 6f7047dad..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Plotter/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import New from './New'; - -export { - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/List.js deleted file mode 100644 index cc807f2c2..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/List.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deletePrize, index }) => ( -
- - - - - - - - {value.from}{value.to}{value.additional}{value.amount}{value.asset} - - - - - - deletePrize(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deletePrize }) => ( -
- {items.map((value, index) => ( - deletePrize(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(newIndex, 0, newPrizes.splice(oldIndex, 1)[0]); - this.props.edit(newPrizes); - } - - deletePrize = (deletedIndex) => { - const newPrizes = this.props.prizes.slice(0); - newPrizes.splice(deletedIndex, 1); - this.props.edit(newPrizes); - } - - render() { - return ( - - this.deletePrize(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/New.js deleted file mode 100644 index 53d702b4e..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/New.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - additional: '', - amount: 0, - asset: '', - }; - } - - render() { - const { - from, to, additional, amount, asset, - } = this.state; - const { addPrize, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addPrize-dialog-title' - > - - - Prizes are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addPrize({ - from, - to, - additional, - amount, - asset, - }); - }} - > - - Conditions : - - - Examples : - If you want to make a price for the best bot only, you set both from and to rank to 1. - If you want the rest of the top 10 to get a price, you add a new price with from rank set to 2 and to rank set to 10. - Caution : - - Leaving "from rank" empty considers it to 0. - - Leaving "to rank" empty considers it as infinite - - Prizes are define in an additive manner, meaning that if a team qualifies for two prices, it gets both. - - Additional allows you to write addionnal textual condition, like "positive ROI only" for example. - - - this.setState({ from: e.target.value })} - type="number" - /> - this.setState({ to: e.target.value })} - type="number" - /> - this.setState({ additional: e.target.value })} - fullWidth - /> - - Pool : - - - Here you define the pool, the amount is a number whereas asset is a text. For example 1BTC, 200$, or whatever. - - this.setState({ amount: e.target.value })} - type="number" - /> - this.setState({ asset: e.target.value })} - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Prizes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/List.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/List.js deleted file mode 100644 index e2966ae7d..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/List.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { - Paper, - Grid, - Typography, -} from '@material-ui/core'; -import { - SortableContainer, - SortableElement, - SortableHandle, -} from 'react-sortable-hoc'; - -const DragHandle = SortableHandle(() =>
); - -const SortableItem = SortableElement(({ value, deleteRule, index }) => ( -
- - - - - - - - {value.title} - - - {value.description} - - - - deleteRule(index)} >Remove - - - -
-)); - -const SortableList = SortableContainer(({ items, deleteRule }) => ( -
- {items.map((value, index) => ( - deleteRule(deleteId)} /> - ))} -
-)); - -class List extends React.Component { - onSortEnd = ({ oldIndex, newIndex }) => { - const newRules = this.props.rules.slice(0); - newRules.splice(newIndex, 0, newRules.splice(oldIndex, 1)[0]); - this.props.edit(newRules); - } - - deleteRule = (deletedIndex) => { - const newRules = this.props.rules.slice(0); - newRules.splice(deletedIndex, 1); - this.props.edit(newRules); - } - - render() { - return ( - - this.deleteRule(deleteId)} - /> - - ); - } -} - -export default List; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/New.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/New.js deleted file mode 100644 index e133c1508..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/New.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { - Dialog, - DialogTitle, - DialogContent, - DialogContentText, - Button, - TextField, -} from '@material-ui/core'; - -class New extends React.Component { - constructor() { - super(); - this.state = { - title: '', - description: '', - }; - } - - render() { - const { - title, description, - } = this.state; - const { addRule, closeDialogs } = this.props; - return ( - closeDialogs()} - aria-labelledby='addRule-dialog-title' - > - - Create a new rule - - - - Rules are define textually only. In case of infringement, contact us. - -
{ - e.preventDefault(); - addRule( - title, - description, - ); - }} - > - this.setState({ title: e.target.value })} - fullWidth - /> - this.setState({ description: e.target.value })} - fullWidth - /> - - - -
-
- ); - } -} - -export default New; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/index.js deleted file mode 100644 index 307bbe029..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/Rules/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import List from './List'; -import New from './New'; - -export { - List, - New, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/index.js deleted file mode 100644 index 1840c37fb..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/Technical/index.js +++ /dev/null @@ -1,196 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; - -import { - Typography, - FormControl, - InputLabel, - Input, - Select, - FormHelperText, - MenuItem, - Grid, - Button, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from '../../styles'; - -import { getOptionsCalls } from '../../../../../GraphQL/Calls/index'; - -import { List as RulesList, New as NewRule } from './Rules'; -import { List as PrizesList, New as NewPrize } from './Prizes'; - -import { New as NewPlotter } from './Plotter'; -import { New as NewFormula } from './Formula'; - -class Technical extends React.Component { - constructor(props) { - super(props); - this.state = { - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }; - } - - addRule = (title, description) => { - this.props.edit('rules', [...this.props.event.rules, { - title, - description, - }]); - this.closeDialogs(); - } - - addPrize = (prize) => { - this.props.edit('prizes', [...this.props.event.prizes, prize]); - this.closeDialogs(); - } - - closeDialogs = () => { - this.setState({ - isNewFormulaOpen: false, - isNewPlotterOpen: false, - isNewRuleOpen: false, - isNewPrizeOpen: false, - }); - } - - render() { - const { - classes, event, edit, create, - } = this.props; - const { - isNewPlotterOpen, isNewFormulaOpen, isNewRuleOpen, isNewPrizeOpen, - } = this.state; - return ( - - - Select the formula and the plotter you want to use, you can also create your own with the corresponding button. - - - - Select the formula - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Formulas.map((formula, index) => ( - {formula.name} - )); - return ( - - - { isNewFormulaOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewFormulaOpen: true }); }}> - To create a new formula, click here - - - - - Select the Plotter - - - {({ loading, error, data }) => { - if (loading) { - return ( - - ); - } - if (error) return `Error! ${error.message}`; - const selects = data.events_Plotters.map((plotter, index) => ( - {plotter.name} - )); - return ( - - - { isNewPlotterOpen ? this.closeDialogs()} /> : ''} - - ); - }} - - { this.setState({ isNewPlotterOpen: true }); }} > - To create a new plotter, click here - - - - - - Define the rules of your event. - - edit('rules', newVal)} /> - { isNewRuleOpen - ? this.closeDialogs()} addRule={(title, description) => this.addRule(title, description)} /> - : ''} - { this.setState({ isNewRuleOpen: true }); }} > - To add a new rule, click here - - - - - - Define the prizes of your event. - - edit('prizes', newVal)} /> - { isNewPrizeOpen - ? this.closeDialogs()} addPrize={prize => this.addPrize(prize)} /> - : ''} - { this.setState({ isNewPrizeOpen: true }); }} > - To add a new prize, click here - - - - - - - - - - ); - } -} - -export default withStyles(styles)(Technical); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/index.js deleted file mode 100644 index feecaaf55..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/Tabs/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import Basic from './Basic'; -import PresentationPage from './PresentationPage'; -import TeamsServer from './TeamsServer'; -import Technical from './Technical'; - -export { - Basic, - PresentationPage, - TeamsServer, - Technical, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/index.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/index.js deleted file mode 100644 index b37a17302..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/index.js +++ /dev/null @@ -1,79 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; - -import { - Paper, - Typography, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; - -import { toLocalTime } from '../../../utils'; - -import BannerTopBar from '../../BannerTopBar'; - -import { showEventCalls } from '../../../GraphQL/Calls/index'; - -class Show extends React.Component { - render() { - const { classes } = this.props; - return ( - - -
- - - Event Details : - - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return ( - - - Title : - - - {data.events_Event.title} - - - Subtitle : - - - {data.events_Event.subtitle} - - - Dates : - - - From {toLocalTime(data.events_Event.startDatetime)} to {toLocalTime(data.events_Event.endDatetime)} - - - Formula : - - - {data.events_Event.formula.name} - - - Plotter : - - - {data.events_Event.plotter.name} - - - ); - }} - - -
-
- ); - } -} - -export default withStyles(styles)(Show); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/styles.js b/Deprecated-Code/EventsClientModule/src/Components/Event/Show/styles.js deleted file mode 100644 index 50a3490ca..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Event/Show/styles.js +++ /dev/null @@ -1,51 +0,0 @@ -const styles = theme => ({ - root: { - flexGrow: 1, - width: '100%', - backgroundColor: theme.palette.background.paper, - padding: 0, - margin: 0, - }, - tabTitle: { - width: '25%', - maxWidth: 'none', - }, - clickable: { - cursor: 'pointer', - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right', - }, - buttonGrid: { - marginTop: -20, - }, - title: { - marginTop: 20, - }, - paperRoot: { - flexGrow: 1, - padding: 10, - marginTop: 25, - marginBottom: 25, - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25, - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - }, - selectEmpty: { - marginTop: theme.spacing.unit * 2, - }, - bottomButton: { - padding: 15, - margin: 20, - }, -}); - -export default styles; diff --git a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/Event.js b/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/Event.js deleted file mode 100644 index 4186326b5..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/Event.js +++ /dev/null @@ -1,104 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { Mutation } from 'react-apollo'; - - -import { - Grid, Paper, - Typography, - Button, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; - -import { hostedEventsCalls } from '../../GraphQL/Calls/index'; - -import { toLocalTime } from '../../utils'; - -class Event extends React.Component { - render() { - const { classes, showOnly, event } = this.props; - const { - id, - title, - subtitle, - startDatetime, - endDatetime, - host, - formula, - description, - } = event; - return ( - - - - {title} - {subtitle} - From : {toLocalTime(startDatetime)} - To : {toLocalTime(endDatetime)} - - - Description : - {description} - - - - - - Hosted by: {host.alias} ({host.lastName} {host.firstName}) - - Formula: {formula.name} - - - { !showOnly - ? - { - window.location.reload(); - }} - > - {publishEvent => ( - - )} - - - - : '' - } - - - - - - - ); - } -} - -export default withStyles(styles)(Event); diff --git a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/index.js b/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/index.js deleted file mode 100644 index 2e429fe30..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/index.js +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; -import { Typography } from '@material-ui/core'; -import { DateTime } from 'luxon'; - -import BannerTopBar from '../BannerTopBar'; - -import { hostedEventsCalls } from '../../GraphQL/Calls/index'; - -import Event from './Event'; - - -const HostedEvent = () => ( - - - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - const list = data.events_Events.map((event, index) => ( - - )); - return ( -
- Unpublished : - { list } -
- ); - }} -
- - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - const list = data.events_Events.map((event, index) => ( - - )); - return ( -
- Published : - { list } -
- ); - }} -
- - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - const list = data.events_Events.map((event, index) => ( - - )); - return ( -
- Old : - { list } -
- ); - }} -
-
-); - - -export default HostedEvent; diff --git a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/styles.js b/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/styles.js deleted file mode 100644 index 62239d966..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/HostedEvents/styles.js +++ /dev/null @@ -1,17 +0,0 @@ -const styles = theme => ({ - card: { - flexGrow: 1, - padding: 20, - marginTop: 20, - marginBottom: 20, - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right', - }, - buttonGrid: { - marginTop: -20, - }, -}); - -export default styles; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Event.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Event.js deleted file mode 100644 index 089a06957..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Event.js +++ /dev/null @@ -1,164 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; -import { Mutation } from 'react-apollo'; - -import { - Grid, Paper, - Typography, - Button, - Select, - MenuItem, -} from '@material-ui/core'; -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; -import { hostedEventsCalls } from '../../GraphQL/Calls/index'; - -import { toLocalTime } from '../../utils'; - -class Event extends React.Component { - constructor() { - super(); - this.state = { - keyId: '', - participantId: '', - botId: '', - }; - } - - render() { - const { keyId, participantId, botId } = this.state; - const { - classes, - event, - availableKey = [], - enrollable = false, - } = this.props; - const { - id, - title, - subtitle, - startDatetime, - endDatetime, - host, - formula, - description, - participatingAs, - canParticipateAs, - } = event; - - const fbs = []; - - canParticipateAs.forEach((team) => { - team.fb.forEach((finb) => { - fbs.push({ - value: `${team.id}|${finb.id}`, - text: `${team.name} > ${finb.name}`, - }); - }); - }); - - return ( - - - - {title} - {subtitle} - From : {toLocalTime(startDatetime)} - To : {toLocalTime(endDatetime)} - - - Description : - {description} - - - - - - Hosted by: {host.alias} ({host.lastName} {host.firstName}) - - Formula: {formula.name} - You are participating as : { participatingAs.map(team => `${team.name}, `) } - - - { enrollable && fbs.length - ? { - window.location.reload(); - }} - > - {enrollToEvent => ( - - - - - - )} - - : '' - } - - - - - - - ); - } -} - -export default withStyles(styles)(Event); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Future.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Future.js deleted file mode 100644 index 90fba08a7..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Future.js +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - -import Event from '../Event'; - -class Future extends React.Component { - render() { - const { classes } = this.props; - const { Events, AKey } = this.props; - - const events = Events.map((event, index) => ( - - )); - return ( -
- - Future events - - {events} -
- ); - } -} - -export default withStyles(styles)(Future); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/History.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/History.js deleted file mode 100644 index 10aa4f001..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/History.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - -class History extends React.Component { - render() { - const { classes } = this.props; - return ( -
- - Your old events (comming soon) - -
- ); - } -} - -export default withStyles(styles)(History); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Ongoing.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Ongoing.js deleted file mode 100644 index 24b392491..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Ongoing.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - -import Event from '../Event'; - -class Ongoing extends React.Component { - render() { - const { Events, classes } = this.props; - - const events = Events.map((event, index) => ( - - )); - return ( -
- - Ongoing events: - - {events} -
- ); - } -} - -export default withStyles(styles)(Ongoing); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Past.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Past.js deleted file mode 100644 index c4939b19b..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/Past.js +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import { Typography } from '@material-ui/core'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from '../styles'; - -import Event from '../Event'; - -class Past extends React.Component { - render() { - const { classes } = this.props; - const { PastEvents } = this.props; - - const pastEvents = PastEvents.map((event, index) => ( - - )); - return ( -
- - A list of passed events - - {pastEvents} -
- ); - } -} - -export default withStyles(styles)(Past); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/index.js b/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/index.js deleted file mode 100644 index c7cccd28e..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/Tabs/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import Future from './Future'; -import History from './History'; -import Ongoing from './Ongoing'; -import Past from './Past'; - -export { - Future, - History, - Ongoing, - Past, -}; diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/index.js b/Deprecated-Code/EventsClientModule/src/Components/Search/index.js deleted file mode 100644 index e5f1d5fdd..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/index.js +++ /dev/null @@ -1,157 +0,0 @@ -import React from 'react'; -import { Query } from 'react-apollo'; -import { DateTime } from 'luxon'; - -import { - Typography, - AppBar, - Tabs, - Tab, -} from '@material-ui/core'; -import { - GetApp as OngoingIcon, - AlarmAdd as FutureIcon, - History as HistoryIcon, -} from '@material-ui/icons'; - -import { withStyles } from '@material-ui/core/styles'; -import styles from './styles'; - -import BannerTopBar from '../BannerTopBar'; - -import { hostedEventsCalls } from '../../GraphQL/Calls/index'; - -import { - Future, - History, - Ongoing, - Past, -} from './Tabs'; - -function TabContainer(props) { - return ( - - {props.children} - - ); -} - -class Search extends React.Component { - constructor(props) { - super(props); - this.state = { - value: 0, - }; - } - - handleChange = (event, value) => { - this.setState({ value }); - } - - render() { - const { classes } = this.props; - const { value } = this.state; - const time = { now: Math.floor(DateTime.local().valueOf() / 1000) }; - return ( - - -
- - - } - /> - } - /> - } - /> - } - /> - - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return ( - - {value === 0 && } - - ); - }} - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return ( - - {value === 1 && } - - ); - }} - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return ( - - {value === 2 && } - - ); - }} - - - {({ loading, error, data }) => { - if (loading) return 'Loading...'; - if (error) return `Error! ${error.message}`; - return ( - - {value === 3 && } - - ); - }} - -
-
- ); - } -} - -export default withStyles(styles)(Search); diff --git a/Deprecated-Code/EventsClientModule/src/Components/Search/styles.js b/Deprecated-Code/EventsClientModule/src/Components/Search/styles.js deleted file mode 100644 index 6291210c8..000000000 --- a/Deprecated-Code/EventsClientModule/src/Components/Search/styles.js +++ /dev/null @@ -1,31 +0,0 @@ -const styles = theme => ({ - root: { - flexGrow: 1, - width: '100%', - backgroundColor: theme.palette.background.paper, - padding: 0, - margin: 0, - }, - tabTitle: { - width: '25%', - maxWidth: 'none', - }, - card: { - flexGrow: 1, - padding: 20, - marginTop: 20, - marginBottom: 20, - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right', - }, - buttonGrid: { - marginTop: -20, - }, - title: { - marginTop: 20, - }, -}); - -export default styles; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/getOptions.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/getOptions.js deleted file mode 100644 index 979ab6d2b..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/getOptions.js +++ /dev/null @@ -1,45 +0,0 @@ -import gql from 'graphql-tag'; -import { formulaInfo, plotterInfo } from '../Fragments'; - -const EVENTS_FORMULAS = gql` - query Events_Formulas{ - events_Formulas { - ...FormulaInfo - } - } - ${formulaInfo} -`; - -const EVENTS_PLOTTERS = gql` - query Events_Plotters{ - events_Plotters { - ...PlotterInfo - } - } - ${plotterInfo} -`; - -const EVENTS_CREATEFORMULA = gql` - mutation Events_CreateFormula($formula: events_FormulaInput!) { - events_CreateFormula(formula: $formula) { - ...FormulaInfo - } - } - ${formulaInfo} -`; - -const EVENTS_CREATEPLOTTER = gql` - mutation Events_CreatePlotter($plotter: events_PlotterInput!) { - events_CreatePlotter(plotter: $plotter) { - ...PlotterInfo - } - } - ${plotterInfo} -`; - -export default { - EVENTS_PLOTTERS, - EVENTS_FORMULAS, - EVENTS_CREATEFORMULA, - EVENTS_CREATEPLOTTER, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/hostedEvents.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/hostedEvents.js deleted file mode 100644 index 489119c7f..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/hostedEvents.js +++ /dev/null @@ -1,100 +0,0 @@ -import gql from 'graphql-tag'; -import { eventFullInfo } from '../Fragments'; - -const EVENTS_CREATEEVENT = gql` - mutation Events_CreateEvent($event: events_EventInput!) { - events_CreateEvent(event: $event) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -const EVENTS_EDITEVENT = gql` - mutation Events_EditEvent($eventId: ID!, $event: events_EventInput!) { - events_EditEvent(eventId: $eventId, event: $event) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -const EVENTS_EVENTSBYHOST = gql` - query Events_Events( - $hostId: String, - $state: events_EventStateEnum, - $minStartDate: Int, - $maxStartDate: Int, - $minEndDate: Int, - $maxEndDate: Int - ){ - events_Events( - hostId: $hostId, - state: $state, - minStartDate: $minStartDate, - maxStartDate: $maxStartDate, - minEndDate: $minEndDate, - maxEndDate: $maxEndDate - ) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -const EVENTS_EVENT_AND_AKEY = gql` - query Events_Events( - $hostId: String, - $state: events_EventStateEnum, - $minStartDate: Int, - $maxStartDate: Int, - $minEndDate: Int, - $maxEndDate: Int - ){ - events_Events( - hostId: $hostId, - state: $state, - minStartDate: $minStartDate, - maxStartDate: $maxStartDate, - minEndDate: $minEndDate, - maxEndDate: $maxEndDate - ) { - ...EventFullInfo - } - keyVault_AvailableKeys{ - id - key - } - } - ${eventFullInfo} -`; - -const EVENTS_PUBLISHEVENT = gql` - mutation Events_ChangeEventState($eventId: ID!, $state: events_EventStateEnum) { - events_ChangeEventState(eventId: $eventId, state: $state) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -const REGISTER_EVENT = gql` - mutation Events_RegisterToEvent($eventId: ID!, $keyId: String!, $participantId: String!, $botId: String!) { - events_RegisterToEvent( - eventId: $eventId - participant: { keyId: $keyId, participantId: $participantId, botId: $botId } - ) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -export default { - EVENTS_CREATEEVENT, - EVENTS_EDITEVENT, - EVENTS_EVENTSBYHOST, - EVENTS_EVENT_AND_AKEY, - EVENTS_PUBLISHEVENT, - REGISTER_EVENT, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/index.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/index.js deleted file mode 100644 index b8225b64b..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import hostedEventsCalls from './hostedEvents'; -import listEventsCalls from './listEvents'; -import showEventCalls from './showEvent'; -import getOptionsCalls from './getOptions'; - -export { - hostedEventsCalls, - listEventsCalls, - showEventCalls, - getOptionsCalls, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/listEvents.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/listEvents.js deleted file mode 100644 index 795dd369f..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/listEvents.js +++ /dev/null @@ -1,15 +0,0 @@ -import gql from 'graphql-tag'; -import { eventFullInfo } from '../Fragments'; - -const EVENTS_EVENTS = gql` - query Events_Events($minStartDate: Int, $maxStartDate: Int, $minEndDate: Int, $maxEndDate: Int){ - events_Events(minStartDate: $minStartDate, maxStartDate: $maxStartDate, minEndDate: $minEndDate, maxEndDate: $maxEndDate) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -export default { - EVENTS_EVENTS, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/showEvent.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/showEvent.js deleted file mode 100644 index 855c9b510..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Calls/showEvent.js +++ /dev/null @@ -1,15 +0,0 @@ -import gql from 'graphql-tag'; -import { eventFullInfo } from '../Fragments'; - -const EVENTS_EVENT = gql` - query Events_Event($eventId: ID!) { - events_Event(eventId: $eventId) { - ...EventFullInfo - } - } - ${eventFullInfo} -`; - -export default { - EVENTS_EVENT, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/event.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/event.js deleted file mode 100644 index 10a82f57f..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/event.js +++ /dev/null @@ -1,138 +0,0 @@ -import gql from 'graphql-tag'; - -export const eventMinimalInfo = gql` - fragment EventMinimalInfo on events_Event { - id - state - title - startDatetime - endDatetime - host { - alias - firstName - lastName - } - description - formula{ - name - } - plotter{ - name - } - } -`; - -export const eventFullInfo = gql` - fragment EventFullInfo on events_Event { - id - title - subtitle - hostId - host { - id - email - firstName - middleName - lastName - } - description - startDatetime - endDatetime - state - rules { - title - description - } - prizes { - condition { - from - to - additional - } - pool { - amount - asset - } - } - participants { - participantId - participant { - id - name - } - state - operationId - clone{ - botId - } - } - participatingAs{ - id - name - } - canParticipateAs{ - id - name - fb{ - id - name - } - } - invitations { - inviteeId - invitee { - id - name - } - acceptedDate - refusedDate - by { - date - inviterId - inviter { - id - email - firstName - middleName - lastName - } - } - } - presentation { - banner - profile - page - } - formula { - id - ownerId - - owner { - id - email - firstName - middleName - lastName - } - isTemplate - name - } - - plotter { - id - ownerId - owner { - id - email - firstName - middleName - lastName - } - isTemplate - name - host - repo - moduleName - } - } -`; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/index.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/index.js deleted file mode 100644 index a28f9ce7c..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import { - eventMinimalInfo, - eventFullInfo, -} from './event'; -import { - formulaInfo, - plotterInfo, -} from './options'; - -export { - eventMinimalInfo, - eventFullInfo, - formulaInfo, - plotterInfo, -}; diff --git a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/options.js b/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/options.js deleted file mode 100644 index c25a82d08..000000000 --- a/Deprecated-Code/EventsClientModule/src/GraphQL/Fragments/options.js +++ /dev/null @@ -1,22 +0,0 @@ -import gql from 'graphql-tag'; - -export const plotterInfo = gql` - fragment PlotterInfo on events_Plotter { - id - ownerId - isTemplate - name - host - repo - moduleName - } -`; - -export const formulaInfo = gql` - fragment FormulaInfo on events_Formula { - id - ownerId - isTemplate - name - } -`; diff --git a/Deprecated-Code/EventsClientModule/src/index.js b/Deprecated-Code/EventsClientModule/src/index.js deleted file mode 100644 index b08dca31f..000000000 --- a/Deprecated-Code/EventsClientModule/src/index.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; -import { Route, Switch } from 'react-router-dom'; - -import { MuiPickersUtilsProvider } from 'material-ui-pickers'; -import LuxonUtils from 'material-ui-pickers/utils/luxon-utils'; - -import Search from './Components/Search'; -import HostedEvents from './Components/HostedEvents'; -import EditEvent from './Components/Event/Edit'; -import ShowEvent from './Components/Event/Show'; -import CreateEvent from './Components/Event/Create'; - -import './styles.scss'; - -const App = () => ( - -
- - - - - - - -
-
-); - -export default App; diff --git a/Deprecated-Code/EventsClientModule/src/styles.scss b/Deprecated-Code/EventsClientModule/src/styles.scss deleted file mode 100644 index 09aac0f1c..000000000 --- a/Deprecated-Code/EventsClientModule/src/styles.scss +++ /dev/null @@ -1,22 +0,0 @@ -.eventsModule{ - .sortableListItem{ - padding-top: 15px; - margin-right: 15px; - padding-bottom: 15px; - margin-left: 15px; - border-bottom: 1px solid rgba(142, 144, 146, 0.3); - } -} - -.dragHandle{ - position: relative; - top: 1px; - display: block; - width: 18px; - height: 11px; - opacity: .25; - margin-right: 20px; - cursor: row-resize; - background: -webkit-linear-gradient(top,#000,#000 20%,#fff 0,#fff 40%,#000 0,#000 60%,#fff 0,#fff 80%,#000 0,#000); - background: linear-gradient(180deg,#000,#000 20%,#fff 0,#fff 40%,#000 0,#000 60%,#fff 0,#fff 80%,#000 0,#000); -} diff --git a/Deprecated-Code/EventsClientModule/src/utils/index.js b/Deprecated-Code/EventsClientModule/src/utils/index.js deleted file mode 100644 index 2d2a69e07..000000000 --- a/Deprecated-Code/EventsClientModule/src/utils/index.js +++ /dev/null @@ -1,12 +0,0 @@ -export const toLocalTime = (epoch) => { - const localDate = new Date(0); - localDate.setUTCSeconds(epoch); - const options = { year: 'numeric', month: 'long', day: '2-digit' }; - return ( - `${localDate.toLocaleDateString(options) - } at ${ - localDate.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}` - ); -}; - -export const temporaryFunction = input => input; diff --git a/Deprecated-Code/EventsClientModule/src/utils/local-storage.js b/Deprecated-Code/EventsClientModule/src/utils/local-storage.js deleted file mode 100644 index 9da53f424..000000000 --- a/Deprecated-Code/EventsClientModule/src/utils/local-storage.js +++ /dev/null @@ -1,9 +0,0 @@ -const getItem = async name => window.localStorage.getItem(name); -const setItem = async (name, value) => window.localStorage.setItem(name, value); -const removeItem = async name => window.localStorage.removeItem(name); - -export { - getItem, - setItem, - removeItem, -}; diff --git a/Deprecated-Code/EventsServer/.babelrc b/Deprecated-Code/EventsServer/.babelrc deleted file mode 100644 index f2e312799..000000000 --- a/Deprecated-Code/EventsServer/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env", "stage-2"] -} diff --git a/Deprecated-Code/EventsServer/.dockerignore b/Deprecated-Code/EventsServer/.dockerignore deleted file mode 100644 index fe24f1c90..000000000 --- a/Deprecated-Code/EventsServer/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore files to be uploaded to the image -.env -.env.dev -.env.prod -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/EventsServer/.env.local b/Deprecated-Code/EventsServer/.env.local deleted file mode 100644 index 54e78b48b..000000000 --- a/Deprecated-Code/EventsServer/.env.local +++ /dev/null @@ -1,9 +0,0 @@ -NODE_ENV=production -PORT=4005 - -MONGO_URL=mongodb://mongo/operations - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -PRESHARED_GATEWAY_KEY=events_key - - diff --git a/Deprecated-Code/EventsServer/.eslintrc.js b/Deprecated-Code/EventsServer/.eslintrc.js deleted file mode 100644 index c06bffbce..000000000 --- a/Deprecated-Code/EventsServer/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - parser: 'babel-eslint', - extends: 'airbnb-base', - rules: { - 'max-len': ['error', 140, 2], - 'no-underscore-dangle': 'off', - 'no-param-reassign': 'off', - } -}; diff --git a/Deprecated-Code/EventsServer/.gitignore b/Deprecated-Code/EventsServer/.gitignore deleted file mode 100644 index 8e14c1a3d..000000000 --- a/Deprecated-Code/EventsServer/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store diff --git a/Deprecated-Code/EventsServer/CODE_OF_CONDUCT.md b/Deprecated-Code/EventsServer/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/EventsServer/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/EventsServer/CONTRIBUTING.md b/Deprecated-Code/EventsServer/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/EventsServer/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/EventsServer/Dockerfile b/Deprecated-Code/EventsServer/Dockerfile deleted file mode 100644 index 5ad505fc1..000000000 --- a/Deprecated-Code/EventsServer/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/events-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/EventsServer/Dockerfile.prod b/Deprecated-Code/EventsServer/Dockerfile.prod deleted file mode 100644 index 11d65a1ef..000000000 --- a/Deprecated-Code/EventsServer/Dockerfile.prod +++ /dev/null @@ -1,21 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4005 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/EventsServer/LICENSE b/Deprecated-Code/EventsServer/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/EventsServer/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/EventsServer/README.md b/Deprecated-Code/EventsServer/README.md deleted file mode 100644 index 2914b279c..000000000 --- a/Deprecated-Code/EventsServer/README.md +++ /dev/null @@ -1 +0,0 @@ -EventsServer diff --git a/Deprecated-Code/EventsServer/docker-compose.prod.yml b/Deprecated-Code/EventsServer/docker-compose.prod.yml deleted file mode 100644 index 72508f7e5..000000000 --- a/Deprecated-Code/EventsServer/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: aaeventsapi-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: aaeventsapi - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: npm start - expose: - - 4005 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/EventsServer/package-lock.json b/Deprecated-Code/EventsServer/package-lock.json deleted file mode 100644 index 26f888ecd..000000000 --- a/Deprecated-Code/EventsServer/package-lock.json +++ /dev/null @@ -1,7673 +0,0 @@ -{ - "name": "@superalgos/events-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-upload-server": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-upload-server/-/apollo-upload-server-5.0.3.tgz", - "integrity": "sha512-tGAp3ULNyoA8b5o9LsU2Lq6SwgVPUOKAqKywu2liEtTvrFSGPrObwanhYwArq3GPeOqp2bi+JknSJCIU3oQN1Q==", - "requires": { - "@babel/runtime-corejs2": "^7.0.0-rc.1", - "busboy": "^0.2.14", - "object-path": "^0.11.4" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.4.tgz", - "integrity": "sha512-gwvaQO6/Hv4DEwhDLmmu2tzCU9oPjC5Xl9Kk8Yd0IxyKhYLlLalmkMMjsZLzU5H3fGaalLD96OYfxHL0ClVUDQ==" - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz", - "integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==", - "dev": true, - "requires": { - "@babel/types": "^7.1.5", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz", - "integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==", - "dev": true - }, - "@babel/runtime-corejs2": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.1.5.tgz", - "integrity": "sha512-WsYRwQsFhVmxkAqwypPTZyV9GpkqMEaAr2zOItOmqSX2GBFaI+eq98CN81e13o0zaUKJOQGYyjhNVqj56nnkYg==", - "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" - } - }, - "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.2", - "@babel/types": "^7.1.2" - } - }, - "@babel/traverse": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz", - "integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.5", - "@babel/types": "^7.1.5", - "debug": "^3.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz", - "integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sentry/core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.3.0.tgz", - "integrity": "sha512-VEMRshyF2J2IJkGTF9fnAd2/a/wR+42qrKwCLVeNxHzZm53VAnSfJd8ZA5jnN5RiydQVGDOylqvdfij/LmmsuQ==", - "requires": { - "@sentry/hub": "4.3.0", - "@sentry/minimal": "4.3.0", - "@sentry/types": "4.3.0", - "@sentry/utils": "4.3.0" - } - }, - "@sentry/hub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.3.0.tgz", - "integrity": "sha512-9nh4Hcx2tZQVHr5JGy1XZd1RgwC2C+1tNFXu06rcxYB20nhKOKtOAH9STrv64vpnK+70AC4miRdlCgqHOKLdxA==", - "requires": { - "@sentry/types": "4.3.0", - "@sentry/utils": "4.3.0" - } - }, - "@sentry/minimal": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.3.0.tgz", - "integrity": "sha512-yRN+L3O9mlcjqpWiivqJsm3Cy/YNh0ejQKpxxxPD186tl5nzEkAqRq5jCYelYIAdH1eBvg87H5VNNFr/shHxaQ==", - "requires": { - "@sentry/hub": "4.3.0", - "@sentry/types": "4.3.0" - } - }, - "@sentry/node": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-4.3.0.tgz", - "integrity": "sha512-2TZHi0XYpSVzKGT/M7mMlXidya4+ZmSZxZCMJ8KlWPljuQxzPoUeGwmYGXOHEsktOGG2eGajDv1hjGtHfamlnA==", - "requires": { - "@sentry/core": "4.3.0", - "@sentry/hub": "4.3.0", - "@sentry/types": "4.3.0", - "@sentry/utils": "4.3.0", - "cookie": "0.3.1", - "lsmod": "1.0.0", - "md5": "2.2.1", - "stack-trace": "0.0.10" - } - }, - "@sentry/types": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-4.3.0.tgz", - "integrity": "sha512-oBAusA+/JFJJlNfHgikyBPTyvmCr/YxZsLWL2FNOBNJkMClW+m7tQ63x/ZAqRSEd8lnJQxJSU7LfAYDH6LcChQ==" - }, - "@sentry/utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.3.0.tgz", - "integrity": "sha512-cEGygJbyc1SUGxbanvk3+JYadiywJupdEkp6L8rRfxur/nNQZq1Jd7tkdm4I2rz5YFVg+yayadAquvr4DIu9nA==", - "requires": { - "@sentry/types": "4.3.0" - } - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "http://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" - }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", - "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" - }, - "@types/node": { - "version": "10.12.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.4.tgz", - "integrity": "sha512-0aFZiYCvoxyKP/Mg6PvqBb2UtWGIPf63r6rOAvRBrgyJOfanbL60yUH2U4FSpg+Yn6FW+JVYWtzn6hLTy745Fg==" - }, - "@types/range-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", - "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.0.tgz", - "integrity": "sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg==", - "dev": true - }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "apollo-cache-control": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.3.0.tgz", - "integrity": "sha512-XtkinmravL9/IEAPXzJod9fKx4iesS0TNBV/619xwurv8eopZkbAiKVZ3WB4rbjoGQpBgEs0bekWIAhYGWLyOw==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.3.0" - } - }, - "apollo-datasource": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.2.0.tgz", - "integrity": "sha512-WJM9Ix3uogIfAG7mjL1NZQM9+45rcikn4mPWhE1Iuyw2+Y857J3uKJqQgF5h9Fg64SlCJh9u5WL3N7N5mg1fVw==", - "requires": { - "apollo-server-caching": "0.2.0", - "apollo-server-env": "2.2.0" - } - }, - "apollo-engine-reporting": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-0.1.0.tgz", - "integrity": "sha512-OjG9MmNWRS3ZMSDc44Z6QMFQ66VDzs/E4H1yZELZ77BVrLsDx4i8Fft95byywACUpLvXhrCRtOdSZIwRPDq+cw==", - "requires": { - "apollo-engine-reporting-protobuf": "0.1.0", - "apollo-server-env": "2.2.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.3.0", - "lodash": "^4.17.10" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.1.0.tgz", - "integrity": "sha512-GReJtAYTmpwg0drb9VgFtqObYYTCHkJhlHEYCeXY8bJV4fOgXsAZ7CIXR9nPKO0mBaoHIHaGYvXGcyCLrZ36VA==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-link": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.3.tgz", - "integrity": "sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw==", - "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.10" - } - }, - "apollo-server-caching": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.2.0.tgz", - "integrity": "sha512-/v7xWEcyyahs3hwX4baH/GekuHz3LRt9NoIYwg869G1eeqjuwY6NsowRIujZ100anJQwm9v5A9/sLtHBFvbgYg==", - "requires": { - "lru-cache": "^4.1.3" - } - }, - "apollo-server-core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.2.0.tgz", - "integrity": "sha512-Pd9YpC/xSzpVOr6KM5bDHQdcI8jjKu3hb8x7eyevh/Q7eyrF+ClmfPZvY5EnG4ETIJsTS0+fU1dnoGMmyxCBKw==", - "requires": { - "@apollographql/apollo-upload-server": "^5.0.3", - "@apollographql/graphql-playground-html": "^1.6.4", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.3.0", - "apollo-datasource": "0.2.0", - "apollo-engine-reporting": "0.1.0", - "apollo-server-caching": "0.2.0", - "apollo-server-env": "2.2.0", - "apollo-server-errors": "2.2.0", - "apollo-server-plugin-base": "0.1.0", - "apollo-tracing": "0.3.0", - "graphql-extensions": "0.3.0", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.10", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - } - }, - "apollo-server-env": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz", - "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg==" - }, - "apollo-server-express": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.2.0.tgz", - "integrity": "sha512-E6WpImvCHKR9MHs64gTHhMrehk6/1NRE2+bblsHZg7ot8Iy6hVmzsCIzSmlPYh5uozpcyeRdC1pV0nwERtQKog==", - "requires": { - "@apollographql/apollo-upload-server": "^5.0.3", - "@apollographql/graphql-playground-html": "^1.6.4", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.16.0", - "accepts": "^1.3.5", - "apollo-server-core": "2.2.0", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.1.0.tgz", - "integrity": "sha512-ptaVBjR+Q1swdzsh84tY5Qb0yyTMO/IOBsBJzCdxuAKs+PAVFw7ZMQoe5bT0DJjKJXHjtfMiTF77mRLLBq2dEw==" - }, - "apollo-tracing": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.3.0.tgz", - "integrity": "sha512-fkSpvzldDo1jBFap0d5lJYghEiH55eRVQzrC6vGvwr7rZNK5Moznwn9sBqy+4QsOaIp+wYc6pz/a+hwG4pasig==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.3.0" - } - }, - "apollo-utilities": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.25.tgz", - "integrity": "sha512-AXvqkhni3Ir1ffm4SA1QzXn8k8I5BBl4PVKEyak734i4jFdp+xgfUyi2VCqF64TJlFTA/B73TRDUvO2D+tKtZg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bson": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", - "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000907", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz", - "integrity": "sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", - "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.8.0.tgz", - "integrity": "sha512-Zok6Bru3y2JprqTNm14mgQ15YQu/SMDkWdnmHfFg770DIUlmMFd/gqqzCHekxzjHZJxXv3tmTpH0C1icaYJsRQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "globals": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", - "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", - "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^3.0.0", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", - "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "0.13.2", - "resolved": "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-extensions": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.3.0.tgz", - "integrity": "sha512-+ppyD7g6acX0y2vj5hm5mRlCBngdHD2dE1jW7abAG4PAWg275TrczA3WXUxB6P9Q4uw0XA886Q+aagI5EmTSaA==" - }, - "graphql-subscriptions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", - "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz", - "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==" - }, - "graphql-tools": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.3.tgz", - "integrity": "sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - } - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lsmod": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", - "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true, - "optional": true - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz", - "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mongodb": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.8.tgz", - "integrity": "sha512-yNKwYxQ6m00NV6+pMoWoheFTHSQVv1KkSrfOhRDYMILGWDYtUtQRqHrFqU75rmPIY8hMozVft8zdC4KYMWaM3Q==", - "requires": { - "mongodb-core": "3.1.7", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.7.tgz", - "integrity": "sha512-YffpSrLmgFNmrvkGx+yX00KyBNk64C0BalfEn6vHHkXtcMUGXw8nxrMmhq5eXPLLlYeBpD/CsgNxE2Chf0o4zQ==", - "requires": { - "bson": "^1.1.0", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.3.10.tgz", - "integrity": "sha512-h2cW/vR/7UFOAlOoGMpyWdXE75fvfC61TdX63tXnz8L95OU5p7Lj11FxZoznBKjfBPGUk79tmMz6zxPLyBkClQ==", - "requires": { - "async": "2.6.1", - "bson": "~1.1.0", - "kareem": "2.3.0", - "lodash.get": "4.4.2", - "mongodb": "3.1.8", - "mongodb-core": "3.1.7", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.1", - "mquery": "3.2.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", - "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.1.tgz", - "integrity": "sha512-ObXBpNCD3A/vYQiQtEWl7DuqjAXjfptYFuGHLdPl5U19/6kJuZV+8uMHLrkj3wJrJoyfg4nhgyFixZdaZoAiEQ==" - }, - "nodemon": { - "version": "1.18.10", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz", - "integrity": "sha512-we51yBb1TfEvZamFchRgcfLbVYgg0xlGbyXmOtbBzDwxwgewYS/YbZ5tnlnsH51+AoSTTsT3A2E/FloUbtH8cQ==", - "dev": true, - "requires": { - "chokidar": "^2.1.0", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", - "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "pstree.remy": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", - "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", - "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", - "dev": true, - "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "zen-observable": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.11.tgz", - "integrity": "sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==" - }, - "zen-observable-ts": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz", - "integrity": "sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ==", - "requires": { - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/EventsServer/package.json b/Deprecated-Code/EventsServer/package.json deleted file mode 100644 index fffcb2e3f..000000000 --- a/Deprecated-Code/EventsServer/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@superalgos/events-api", - "version": "0.1.0", - "description": "Superalgos Events backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "main": "src/index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/EventsServerModule.git" - }, - "scripts": { - "start": "nodemon --exec babel-node --presets env,stage-2 src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "standard": { - "ignore": [ - "/src/errors/index.js" - ] - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-eslint": "^10.0.1", - "babel-preset-env": "^1.7.0", - "babel-preset-stage-2": "^6.24.1", - "eslint": "^5.8.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-plugin-import": "^2.14.0", - "nodemon": "^1.18.10" - }, - "dependencies": { - "@sentry/node": "^4.1.1", - "apollo-server-express": "^2.1.0", - "axios": "^0.18.0", - "dotenv": "^6.0.0", - "express": "^4.16.3", - "graphql": "^0.13.2", - "mongoose": "^5.3.4" - } -} diff --git a/Deprecated-Code/EventsServer/src/app.js b/Deprecated-Code/EventsServer/src/app.js deleted file mode 100644 index a146d25d9..000000000 --- a/Deprecated-Code/EventsServer/src/app.js +++ /dev/null @@ -1,52 +0,0 @@ -import 'dotenv/config'; -import express from 'express'; -import { ApolloServer } from 'apollo-server-express'; -import * as Sentry from '@sentry/node'; -import schema from './schema'; -import wrongPreshared from './errors/notAllowed.json'; - -const app = express(); - -// Initialising sentry -Sentry.init({ dsn: process.env.SENTRY_DNS }); -app.use(Sentry.Handlers.requestHandler()); - -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - - -// Starting the graphql server -const server = new ApolloServer({ - schema, - playground: { - settings: { - 'editor.theme': 'dark', - 'editor.cursorShape': 'line', - }, - }, - context: ({ req }) => ({ - userId: req.headers.userid, - authorization: req.headers.authorization, - }), - formatError: error => ({ - code: error.extensions.exception.code, - message: error.message, - path: error.path, - }), - introspection: true, -}); - -server.applyMiddleware({ - app, - cors: true, -}); - -// Sentry error handling middleware if anything pass through -app.use(Sentry.Handlers.errorHandler()); - -export default app; diff --git a/Deprecated-Code/EventsServer/src/db.js b/Deprecated-Code/EventsServer/src/db.js deleted file mode 100644 index e08de13f5..000000000 --- a/Deprecated-Code/EventsServer/src/db.js +++ /dev/null @@ -1,11 +0,0 @@ -import 'dotenv/config'; -import mongoose from 'mongoose'; - -mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }) -mongoose.set('useCreateIndex', true); -mongoose.set('useFindAndModify', false); -mongoose.Promise = global.Promise; - -const db = mongoose.connection; - -export default db; diff --git a/Deprecated-Code/EventsServer/src/enums/EventState.js b/Deprecated-Code/EventsServer/src/enums/EventState.js deleted file mode 100644 index bde343a85..000000000 --- a/Deprecated-Code/EventsServer/src/enums/EventState.js +++ /dev/null @@ -1,21 +0,0 @@ -export const UNPUBLISHED = 'UNPUBLISHED'; -export const PUBLISHED = 'PUBLISHED'; -export const CANCELLED = 'CANCELLED'; -export const STARTING = 'STARTING'; -export const RUNNING = 'RUNNING'; -export const INTERRUPTED = 'INTERRUPTED'; -export const FINISHED = 'FINISHED'; -export const ARCHIVED = 'ARCHIVED'; - -export const EventStateEnum = [ - UNPUBLISHED, - PUBLISHED, - CANCELLED, - STARTING, - RUNNING, - INTERRUPTED, - FINISHED, - ARCHIVED, -]; - -export default EventStateEnum; diff --git a/Deprecated-Code/EventsServer/src/enums/HistoryType.js b/Deprecated-Code/EventsServer/src/enums/HistoryType.js deleted file mode 100644 index 7271d44fe..000000000 --- a/Deprecated-Code/EventsServer/src/enums/HistoryType.js +++ /dev/null @@ -1,11 +0,0 @@ -export const STATECHANGE = 'STATECHANGE'; -export const DATACHANGE = 'DATACHANGE'; -export const OTHER = 'OTHER'; - -export const HistoryTypeEnum = [ - STATECHANGE, - DATACHANGE, - OTHER, -]; - -export default HistoryTypeEnum; diff --git a/Deprecated-Code/EventsServer/src/enums/ParticipantState.js b/Deprecated-Code/EventsServer/src/enums/ParticipantState.js deleted file mode 100644 index 8003fc7fa..000000000 --- a/Deprecated-Code/EventsServer/src/enums/ParticipantState.js +++ /dev/null @@ -1,11 +0,0 @@ -export const ENLISTED = 'ENLISTED'; -export const DELISTED = 'DELISTED'; -export const DISQUALIFIED = 'DISQUALIFIED'; - -export const ParticipantStateEnum = [ - ENLISTED, - DELISTED, - DISQUALIFIED, -]; - -export default ParticipantStateEnum; diff --git a/Deprecated-Code/EventsServer/src/errors/index.js b/Deprecated-Code/EventsServer/src/errors/index.js deleted file mode 100644 index e716afd4f..000000000 --- a/Deprecated-Code/EventsServer/src/errors/index.js +++ /dev/null @@ -1,51 +0,0 @@ -import * as Sentry from '@sentry/node'; - -class ClientError extends Error { - constructor(args) { - super(args); - Sentry.configureScope((scope) => { - scope.setLevel('debug'); - }); - Sentry.captureException(this); - } -} - -class ServerError extends Error { - constructor(args) { - super(args); - Sentry.configureScope((scope) => { - scope.setLevel('error'); - }); - Sentry.captureException(this); - } -} - -export class AuthentificationError extends ClientError { - code = 401 - - message = 'Autentification not found, you have to be authentificated to perform this action' -} - -export class DatabaseError extends ClientError { - code = 404 - - message = `Ressource not found : ${this.message}` -} - -export class WrongArgumentsError extends ClientError { - code = 400 - - message = `Wrong arguments : ${this.message}` -} - -export class NotImplementedYetError extends ServerError { - code = 501 - - message = `This is not implemented yet, but will be soon. ${this.message}` -} - -export class ServiceUnavailableError extends ServerError { - code = 503 - - message = `At least one service is unresponding ${this.message}` -} diff --git a/Deprecated-Code/EventsServer/src/errors/notAllowed.json b/Deprecated-Code/EventsServer/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/EventsServer/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/EventsServer/src/index.js b/Deprecated-Code/EventsServer/src/index.js deleted file mode 100644 index f9b2c65f3..000000000 --- a/Deprecated-Code/EventsServer/src/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable no-console */ -import * as Sentry from '@sentry/node'; -import db from './db'; -import app from './app'; - -// Bind server success and error to sentry -db.on('error', (err) => { - Sentry.configureScope((scope) => { - scope.setLevel('error'); - }); - Sentry.captureException(err); -}); -db.once('open', () => { - Sentry.configureScope((scope) => { - scope.setLevel('info'); - }); - Sentry.captureMessage('Connected to the DB.'); -}); - -app.listen(process.env.PORT, () => { - console.log(`Listening on port ${process.env.PORT}`); -}); diff --git a/Deprecated-Code/EventsServer/src/models/event.js b/Deprecated-Code/EventsServer/src/models/event.js deleted file mode 100644 index f7bbc68af..000000000 --- a/Deprecated-Code/EventsServer/src/models/event.js +++ /dev/null @@ -1,191 +0,0 @@ -import mongoose, { Schema } from 'mongoose'; -import Plotter from './plotter'; -import Formula from './formula'; -import { - UNPUBLISHED, - EventStateEnum, -} from '../enums/EventState'; -import { - ENLISTED, - ParticipantStateEnum, -} from '../enums/ParticipantState'; -import { - OTHER, - HistoryTypeEnum, -} from '../enums/HistoryType'; - -const { ObjectId } = Schema.Types; - -const eventSchema = new Schema({ - title: { - type: String, - required: true, - }, - subtitle: { - type: String, - required: true, - }, - hostId: { - type: String, - required: true, - }, - description: String, - startDatetime: { - type: Number, - required: true, - }, - endDatetime: { - type: Number, - required: true, - }, - state: { - type: String, - enum: EventStateEnum, - default: UNPUBLISHED, - }, - history: [{ - date: { - type: Number, - required: true, - }, - action: { - data: String, - type: { - type: String, - enum: HistoryTypeEnum, - default: OTHER, - }, - comment: String, - }, - }], - rules: [{ - title: { - type: String, - required: true, - }, - description: String, - }], - rulesHistory: [{ - date: { - type: Number, - required: true, - }, - action: { - data: String, - type: { - type: String, - enum: HistoryTypeEnum, - default: OTHER, - }, - comment: String, - }, - }], - prizes: [{ - condition: { - from: Number, - to: Number, - additional: String, - }, - pool: { - amount: { - type: Number, - required: true, - }, - asset: { - type: String, - required: true, - }, - }, - }], - prizesHistory: [{ - date: { - type: Number, - required: true, - }, - action: { - data: String, - type: { - type: String, - enum: HistoryTypeEnum, - default: OTHER, - }, - comment: String, - }, - }], - participants: [{ - participantId: { - type: String, - required: true, - }, - state: { - type: String, - enum: ParticipantStateEnum, - default: ENLISTED, - }, - history: [{ - date: { - type: Number, - required: true, - }, - action: { - data: String, - type: { - type: String, - enum: HistoryTypeEnum, - default: OTHER, - }, - comment: String, - }, - }], - operationId: String, - }], - invitations: [{ - inviteeId: { - type: String, - required: true, - }, - acceptedDate: Number, - refusedDate: Number, - by: { - date: Number, - inviterId: { - type: String, - required: true, - }, - }, - }], - presentation: { - banner: String, - profile: String, - page: String, - }, - formulaId: { - type: ObjectId, - ref: Formula.modelName, - }, - plotterId: { - type: ObjectId, - ref: Plotter.modelName, - }, -}); - -eventSchema.pre('find', function populate() { - this.populate('formulaId').populate('plotterId'); -}); -eventSchema.pre('findOne', function populate() { - this.populate('formulaId').populate('plotterId'); -}); -eventSchema.post('save', (doc, next) => { - doc.populate('formulaId').populate('plotterId').execPopulate().then(() => { - next(); - }); -}); -eventSchema.post('findOneAndUpdate', (doc, next) => { - doc.populate('formulaId').populate('plotterId').execPopulate().then(() => { - next(); - }); -}); - -const Event = mongoose.model('Event', eventSchema); - -export default Event; diff --git a/Deprecated-Code/EventsServer/src/models/formula.js b/Deprecated-Code/EventsServer/src/models/formula.js deleted file mode 100644 index ccc774334..000000000 --- a/Deprecated-Code/EventsServer/src/models/formula.js +++ /dev/null @@ -1,20 +0,0 @@ -import mongoose, { Schema } from 'mongoose'; - -const formulaSchema = new Schema({ - ownerId: { - type: String, - required: true, - }, - isTemplate: { - type: Boolean, - default: false, - }, - name: { - type: String, - required: true, - }, -}); - -const Formula = mongoose.model('Formula', formulaSchema); - -export default Formula; diff --git a/Deprecated-Code/EventsServer/src/models/index.js b/Deprecated-Code/EventsServer/src/models/index.js deleted file mode 100644 index 251eda8ea..000000000 --- a/Deprecated-Code/EventsServer/src/models/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import Plotter from './plotter'; -import Event from './event'; -import Formula from './formula'; - -export { - Event, - Plotter, - Formula, -}; diff --git a/Deprecated-Code/EventsServer/src/models/plotter.js b/Deprecated-Code/EventsServer/src/models/plotter.js deleted file mode 100644 index a9a7feb92..000000000 --- a/Deprecated-Code/EventsServer/src/models/plotter.js +++ /dev/null @@ -1,32 +0,0 @@ -import mongoose, { Schema } from 'mongoose'; - -const plotterSchema = new Schema({ - ownerId: { - type: String, - required: true, - }, - isTemplate: { - type: Boolean, - default: false, - }, - name: { - type: String, - required: true, - }, - host: { - type: String, - required: true, - }, - repo: { - type: String, - required: true, - }, - moduleName: { - type: String, - required: true, - }, -}); - -const Plotter = mongoose.model('Plotter', plotterSchema); - -export default Plotter; diff --git a/Deprecated-Code/EventsServer/src/schema/index.js b/Deprecated-Code/EventsServer/src/schema/index.js deleted file mode 100644 index 81d0b3150..000000000 --- a/Deprecated-Code/EventsServer/src/schema/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { - GraphQLSchema, -} from 'graphql'; - -import Mutation from './mutations'; -import RootQuery from './queries'; - -const Schema = new GraphQLSchema({ - query: RootQuery, - mutation: Mutation, -}); - -export default Schema; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/ChangeEventState.js b/Deprecated-Code/EventsServer/src/schema/mutations/ChangeEventState.js deleted file mode 100644 index 4d005a9e4..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/ChangeEventState.js +++ /dev/null @@ -1,83 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import { - WrongArgumentsError, - AuthentificationError, - NotImplementedYetError, -} from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import EventStateEnum from '../types/enum/EventState'; - -import { - UNPUBLISHED, - PUBLISHED, - CANCELLED, - STARTING, - RUNNING, - INTERRUPTED, - FINISHED, - ARCHIVED, -} from '../../enums/EventState'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - state: { type: EventStateEnum }, -}; - -const resolve = (parent, { eventId: _id, state }, { userId: hostId }) => { - if (!hostId) { - throw new AuthentificationError(); - } - - switch (state) { - case UNPUBLISHED: - throw new NotImplementedYetError('Still working on it'); - case PUBLISHED: - return new Promise((res, rej) => { - Event.findOneAndUpdate({ _id, hostId, state: UNPUBLISHED }, { state }, { new: true }, (err, modifiedEvent) => { - if (err) { - rej(err); - return; - } - res(modifiedEvent); - }); - }); - case CANCELLED: - throw new NotImplementedYetError('We are still wondering about cancellation conditions, ' - + 'if you have any inputs or proposition don\t hesitate to contact us'); - case STARTING: - throw new NotImplementedYetError('Still working on it'); - case RUNNING: - throw new NotImplementedYetError('Still working on it'); - case INTERRUPTED: - throw new NotImplementedYetError('We are still wondering about interuption conditions, ' - + 'if you have any inputs or proposition don\t hesitate to contact us'); - case FINISHED: - throw new NotImplementedYetError('Still working on it'); - case ARCHIVED: - return new Promise((res, rej) => { - Event.findOneAndUpdate({ _id, hostId, state: FINISHED }, { state }, { new: true }, (err, modifiedEvent) => { - if (err) { - rej(err); - return; - } - res(modifiedEvent); - }); - }); - default: - throw new WrongArgumentsError('You shouldn\'t even be allowed to be there'); - } -}; - -const mutation = { - changeEventState: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/CreateEvent.js b/Deprecated-Code/EventsServer/src/schema/mutations/CreateEvent.js deleted file mode 100644 index 2704f53e7..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/CreateEvent.js +++ /dev/null @@ -1,37 +0,0 @@ -import { AuthentificationError } from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import { EventInputType } from '../types/input'; - -export const args = { - event: { type: EventInputType }, -}; - -const resolve = (parent, { event }, { userId: hostId }) => { - if (!hostId) { - throw new AuthentificationError(); - } - - event.hostId = hostId; - const newEvent = new Event(event); - - return new Promise((res, rej) => { - newEvent.save((err) => { - if (err) { - rej(err); - return; - } - res(newEvent); - }); - }); -}; - -const mutation = { - createEvent: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/CreateFormula.js b/Deprecated-Code/EventsServer/src/schema/mutations/CreateFormula.js deleted file mode 100644 index 198c1fd0e..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/CreateFormula.js +++ /dev/null @@ -1,37 +0,0 @@ -import { AuthentificationError } from '../../errors'; -import { FormulaType } from '../types'; -import { Formula } from '../../models'; -import { FormulaInputType } from '../types/input'; - -const args = { - formula: { type: FormulaInputType }, -}; - -const resolve = (parent, { formula }, { userId: ownerId }) => { - if (!ownerId) { - throw new AuthentificationError(); - } - - formula.ownerId = ownerId; - const newFormula = new Formula(formula); - - return new Promise((res, rej) => { - newFormula.save((err) => { - if (err) { - rej(err); - return; - } - res(newFormula); - }); - }); -}; - -const mutation = { - createFormula: { - type: FormulaType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/CreatePlotter.js b/Deprecated-Code/EventsServer/src/schema/mutations/CreatePlotter.js deleted file mode 100644 index 6cf060fbf..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/CreatePlotter.js +++ /dev/null @@ -1,37 +0,0 @@ -import { AuthentificationError } from '../../errors'; -import { PlotterType } from '../types'; -import { Plotter } from '../../models'; -import { PlotterInputType } from '../types/input'; - -const args = { - plotter: { type: PlotterInputType }, -}; - -const resolve = (parent, { plotter }, { userId: ownerId }) => { - if (!ownerId) { - throw new AuthentificationError(); - } - - plotter.ownerId = ownerId; - const newPlotter = new Plotter(plotter); - - return new Promise((res, reject) => { - newPlotter.save((err) => { - if (err) { - reject(err); - return; - } - res(newPlotter); - }); - }); -}; - -const mutation = { - createPlotter: { - type: PlotterType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/EditEvent.js b/Deprecated-Code/EventsServer/src/schema/mutations/EditEvent.js deleted file mode 100644 index 093376207..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/EditEvent.js +++ /dev/null @@ -1,39 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import { AuthentificationError } from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import { EventInputType } from '../types/input'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - event: { type: EventInputType }, -}; - -const resolve = (parent, { eventId: _id, event }, { userId: hostId }) => { - if (!hostId) { - throw new AuthentificationError(); - } - - return new Promise((res, rej) => { - Event.findOneAndUpdate({ _id, hostId }, event, { new: true }, (err, modifiedEvent) => { - if (err) { - rej(err); - return; - } - res(modifiedEvent); - }); - }); -}; - -const mutation = { - editEvent: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/EditParticipant.js b/Deprecated-Code/EventsServer/src/schema/mutations/EditParticipant.js deleted file mode 100644 index 265276a1f..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/EditParticipant.js +++ /dev/null @@ -1,130 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import axios from 'axios'; -import { - AuthentificationError, - WrongArgumentsError, - ServiceUnavailableError, -} from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import { ParticipantInputType } from '../types/input'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - participant: { type: ParticipantInputType }, -}; - -const resolve = (parent, - { eventId: _id, participant: { keyId, participantId, botId } }, - { userId, authorization }) => { - if (!userId) { - throw new AuthentificationError(); - } - return new Promise((res, rej) => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - { - teams_TeamsByRole{ - id - } - } - `, - }, - headers: { authorization }, - }).then( - (result) => { - if (!result.data.data.teams_TeamsByRole.some(team => team.id === participantId)) { - rej(new WrongArgumentsError('You are not eligible to edit this team')); - return; - } - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - const participantIndex = event.participant - .findIndex(participant => participant.participantId === participantId); - - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation { - operations_RemoveClone(id: "${event.participants[participantIndex].operationId}") - } - `, - }, - headers: { authorization }, - }).then( - () => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation { - operations_AddClone( - clone: { - botId: "${botId}" - botType: "Trading" - mode: "competition" - resumeExecution: false - runAsTeam: true - teamId: "${participantId}" - processName: "Trading-Process" - keyId: "${keyId}" - beginDatetime: ${event.startDatetime} - endDatetime: ${event.endDatetime} - } - ) { - id - } - } - `, - }, - headers: { authorization }, - }).then( - (operationCreation) => { - event.participants[participantIndex].operationId = operationCreation.data.data.operations_AddClone.id; - event.save((error) => { - if (error) { - rej(error); - return; - } - res(event); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); -}; - -const mutation = { - editParticipant: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/InviteAtEvent.js b/Deprecated-Code/EventsServer/src/schema/mutations/InviteAtEvent.js deleted file mode 100644 index 786f07f83..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/InviteAtEvent.js +++ /dev/null @@ -1,62 +0,0 @@ -import 'dotenv/config'; -import { - GraphQLNonNull, - GraphQLID, - GraphQLString, -} from 'graphql'; -import { - AuthentificationError, - WrongArgumentsError, -} from '../../errors'; -import { epoch } from '../../utils/functions'; -import { EventType } from '../types'; -import { Event } from '../../models'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - inviteeId: { type: new GraphQLNonNull(GraphQLString) }, -}; - -const resolve = (parent, - { eventId: _id, inviteeId }, - { userId }) => { - if (!userId) { - throw new AuthentificationError(); - } - return new Promise((res, rej) => { - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - if (event.invitations.some(invitee => invitee.inviteeId === inviteeId)) { - rej(new WrongArgumentsError('This user is already invited')); - return; - } - event.invitations.push({ - inviteeId, - by: { - inviterId: userId, - date: epoch(), - }, - }); - event.save((error) => { - if (error) { - rej(error); - return; - } - res(event); - }); - }); - }); -}; - -const mutation = { - inviteAtEvent: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/RegisterToEvent.js b/Deprecated-Code/EventsServer/src/schema/mutations/RegisterToEvent.js deleted file mode 100644 index 6d70cff6c..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/RegisterToEvent.js +++ /dev/null @@ -1,117 +0,0 @@ -import 'dotenv/config'; -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import axios from 'axios'; -import { - AuthentificationError, - WrongArgumentsError, - ServiceUnavailableError, -} from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import { ParticipantInputType } from '../types/input'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - participant: { type: ParticipantInputType }, -}; - -const resolve = (parent, - { eventId: _id, participant: { keyId, participantId, botId } }, - { userId, authorization }) => { - if (!userId) { - throw new AuthentificationError(); - } - return new Promise((res, rej) => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - { - teams_TeamsByRole{ - id - } - } - `, - }, - headers: { authorization }, - }).then( - (result) => { - if (!result.data.data.teams_TeamsByRole.some(team => team.id === participantId)) { - rej(new WrongArgumentsError('You are not eligible to register this team')); - return; - } - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - if (event.participants.some(participant => participant.participantId === participantId)) { - rej(new WrongArgumentsError('You are already registred')); - return; - } - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation { - operations_AddClone( - clone: { - botId: "${botId}" - botType: "Trading" - mode: "competition" - resumeExecution: false - runAsTeam: true - teamId: "${participantId}" - processName: "Trading-Process" - keyId: "${keyId}" - beginDatetime: ${event.startDatetime} - endDatetime: ${event.endDatetime} - } - ) { - id - } - } - `, - }, - headers: { authorization }, - }).then( - (operationCreation) => { - event.participants.push({ - participantId, - operationId: operationCreation.data.data.operations_AddClone.id, - }); - event.save((error) => { - if (error) { - rej(error); - return; - } - res(event); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); -}; - -const mutation = { - registerToEvent: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/RespondToInvitation.js b/Deprecated-Code/EventsServer/src/schema/mutations/RespondToInvitation.js deleted file mode 100644 index e50cf0b6c..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/RespondToInvitation.js +++ /dev/null @@ -1,137 +0,0 @@ -import 'dotenv/config'; -import { - GraphQLNonNull, - GraphQLID, - GraphQLBoolean, -} from 'graphql'; -import axios from 'axios'; -import { - AuthentificationError, - WrongArgumentsError, - ServiceUnavailableError, -} from '../../errors'; -import { epoch } from '../../utils/functions'; -import { EventType } from '../types'; -import { Event } from '../../models'; -import { ParticipantInputType } from '../types/input'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, - answer: { type: new GraphQLNonNull(GraphQLBoolean) }, - participant: { type: ParticipantInputType }, -}; - -const resolve = (parent, - { eventId: _id, answer, participant: { participantId, botId } }, - { userId, authorization }) => { - if (!userId) { - throw new AuthentificationError(); - } - - return new Promise((res, rej) => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - { - teams_TeamsByRole{ - id - } - } - `, - }, - headers: { authorization }, - }).then( - (result) => { - if (!result.data.data.teams_TeamsByRole.some(team => team.id === participantId)) { - rej(new WrongArgumentsError('You are not eligible to register this team')); - return; - } - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - if (event.participants.some(participant => participant.participantId === participantId)) { - rej(new WrongArgumentsError('You are already registred')); - return; - } - if (event.invitations.some(invitee => invitee.inviteeId === userId)) { - const inviteeIndex = event.invitations - .findIndex(invitee => invitee.inviteeId === userId); - if (answer) { - event.invitations[inviteeIndex].acceptedDate = epoch(); - - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation { - operations_AddClone( - clone: { - botId: "${botId}" - botType: "Trading" - mode: "competition" - resumeExecution: false - runAsTeam: true - teamId: "${participantId}" - processName: "${event.title}-${participantId}" - } - ) { - id - } - } - `, - }, - headers: { authorization }, - }).then( - (operationCreation) => { - event.participants.push({ - participantId, - operationId: operationCreation.data.data.operations_AddClone.id, - }); - event.save((error) => { - if (error) { - rej(error); - return; - } - res(event); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - } else { - event.invitations[inviteeIndex].refusedDate = epoch(); - } - } else { - rej(new WrongArgumentsError('You were not invited to that event, you might want to simply register if possible')); - } - event.save((error) => { - if (error) { - rej(error); - return; - } - res(event); - }); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); -}; - -const mutation = { - respondToInvitation: { - type: EventType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/mutations/index.js b/Deprecated-Code/EventsServer/src/schema/mutations/index.js deleted file mode 100644 index 2bd29dc34..000000000 --- a/Deprecated-Code/EventsServer/src/schema/mutations/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import CreateEventMutation from './CreateEvent'; -import EditEventMutation from './EditEvent'; -import RegisterToEventMutation from './RegisterToEvent'; -import EditParticipantMutation from './EditParticipant'; -import CreateFormulaMutation from './CreateFormula'; -import CreatePlotterMutation from './CreatePlotter'; -import ChangeEventStateMutation from './ChangeEventState'; - -const Mutation = new GraphQLObjectType({ - name: 'Mutation', - fields: Object.assign( - CreateEventMutation, - EditEventMutation, - RegisterToEventMutation, - EditParticipantMutation, - CreateFormulaMutation, - CreatePlotterMutation, - ChangeEventStateMutation, - ), -}); - -export default Mutation; diff --git a/Deprecated-Code/EventsServer/src/schema/queries/Event.js b/Deprecated-Code/EventsServer/src/schema/queries/Event.js deleted file mode 100644 index 590aac259..000000000 --- a/Deprecated-Code/EventsServer/src/schema/queries/Event.js +++ /dev/null @@ -1,35 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import { DatabaseError } from '../../errors'; -import { EventType } from '../types'; -import { Event } from '../../models'; - -const args = { - eventId: { type: new GraphQLNonNull(GraphQLID) }, -}; - -const resolve = (parent, { eventId: _id }) => new Promise((res, rej) => { - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - if (!event) { - rej(new DatabaseError('None of the events respond to that id')); - return; - } - res(event); - }); -}); - -const query = { - event: { - type: EventType, - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/EventsServer/src/schema/queries/Events.js b/Deprecated-Code/EventsServer/src/schema/queries/Events.js deleted file mode 100644 index c5e8932a7..000000000 --- a/Deprecated-Code/EventsServer/src/schema/queries/Events.js +++ /dev/null @@ -1,83 +0,0 @@ -import { - GraphQLInt, - GraphQLString, - GraphQLList, -} from 'graphql'; -import { AuthentificationError } from '../../errors'; -import { EventType } from '../types'; -import EventStateEnum from '../types/enum/EventState'; -import { Event } from '../../models'; -import { UNPUBLISHED, ARCHIVED } from '../../enums/EventState'; - -const args = { - state: { type: EventStateEnum }, - hostId: { type: GraphQLString }, - participantId: { type: GraphQLString }, - inviteeId: { type: GraphQLString }, - minStartDate: { type: GraphQLInt }, - maxStartDate: { type: GraphQLInt }, - minEndDate: { type: GraphQLInt }, - maxEndDate: { type: GraphQLInt }, -}; - -const resolve = (parent, { - state, - hostId, - participantId, - inviteeId, - minStartDate, - maxStartDate, - minEndDate, - maxEndDate, -}, { userId }) => { - if (state === UNPUBLISHED && hostId !== userId && hostId !== 'self') { - throw new AuthentificationError('You cannot get unpublished events of other users.'); - } - - - return new Promise((res, rej) => { - Event.find( - Object.assign( - state ? { state } : { state: { $nin: [UNPUBLISHED, ARCHIVED] } }, - (hostId && hostId !== 'self') ? { hostId } : {}, - (hostId === 'self') ? { hostId: userId } : {}, - participantId ? { participants: { $elemMatch: { participantId } } } : {}, - inviteeId ? { invitations: { $elemMatch: { inviteeId } } } : {}, - minStartDate || maxStartDate - ? { - startDatetime: - Object.assign( - minStartDate ? { $gte: minStartDate } : {}, - maxStartDate ? { $lte: maxStartDate } : {}, - ), - } - : {}, - minEndDate || maxEndDate - ? { - endDatetime: - Object.assign( - minEndDate ? { $gte: minEndDate } : {}, - maxEndDate ? { $lte: maxEndDate } : {}, - ), - } - : {}, - ), (err, events) => { - if (err) { - rej(err); - return; - } - res(events); - }, - ); - }); -}; - -const query = { - events: { - type: new GraphQLList(EventType), - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/EventsServer/src/schema/queries/Formulas.js b/Deprecated-Code/EventsServer/src/schema/queries/Formulas.js deleted file mode 100644 index 390587fdc..000000000 --- a/Deprecated-Code/EventsServer/src/schema/queries/Formulas.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLList, -} from 'graphql'; -import { FormulaType } from '../types'; -import { Formula } from '../../models'; - -const args = {}; - -const resolve = () => Formula.find(); - -const query = { - formulas: { - type: new GraphQLList(FormulaType), - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/EventsServer/src/schema/queries/Plotters.js b/Deprecated-Code/EventsServer/src/schema/queries/Plotters.js deleted file mode 100644 index b927041f0..000000000 --- a/Deprecated-Code/EventsServer/src/schema/queries/Plotters.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLList, -} from 'graphql'; -import { PlotterType } from '../types'; -import { Plotter } from '../../models'; - -const args = {}; - -const resolve = () => Plotter.find(); - -const query = { - plotters: { - type: new GraphQLList(PlotterType), - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/EventsServer/src/schema/queries/index.js b/Deprecated-Code/EventsServer/src/schema/queries/index.js deleted file mode 100644 index 09e0a1d9e..000000000 --- a/Deprecated-Code/EventsServer/src/schema/queries/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import EventQuery from './Event'; -import EventsQuery from './Events'; -import FormulasQuery from './Formulas'; -import PlottersQuery from './Plotters'; - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: Object.assign( - EventQuery, - EventsQuery, - FormulasQuery, - PlottersQuery, - ), -}); - -export default RootQuery; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Event.js b/Deprecated-Code/EventsServer/src/schema/types/Event.js deleted file mode 100644 index d20c85fe6..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Event.js +++ /dev/null @@ -1,165 +0,0 @@ -import { - GraphQLObjectType, - GraphQLInt, - GraphQLString, - GraphQLList, - GraphQLID, -} from 'graphql'; -import axios from 'axios'; -import { ServiceUnavailableError } from '../../errors'; -import { Event } from '../../models'; -import { - FormulaType, - PlotterType, - RuleType, - ParticipantType, - PrizeType, - InvitationType, - PresentationType, -} from './index'; -import EventStateEnumType from './enum/EventState'; - -const EventType = new GraphQLObjectType({ - name: 'Event', - description: 'Everything you need to know about an event', - fields: () => ({ - id: { type: GraphQLID }, - title: { type: GraphQLString }, - subtitle: { type: GraphQLString }, - hostId: { type: GraphQLString }, - description: { type: GraphQLString }, - startDatetime: { type: GraphQLInt }, - endDatetime: { type: GraphQLInt }, - state: { type: EventStateEnumType }, - rules: { - type: new GraphQLList(RuleType), - resolve(parent) { - return parent.rules; - }, - }, - prizes: { - type: new GraphQLList(PrizeType), - resolve(parent) { - return parent.prizes; - }, - }, - participants: { - type: new GraphQLList(ParticipantType), - resolve(parent) { - return parent.participants; - }, - }, - participatingAsId: { - type: new GraphQLList(GraphQLString), - resolve({ id: _id }, arg, { authorization }) { - if (!authorization) { - return ({}); - } - return new Promise((res, rej) => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - { - teams_TeamsByRole{ - id - } - } - `, - }, - headers: { authorization }, - }).then( - (result) => { - const ret = []; - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - result.data.data.teams_TeamsByRole.forEach((team) => { - if (event.participants.some(participant => participant.participantId === team.id)) { - ret.push(team.id); - } - }); - res(ret); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); - }, - }, - canParticipateAsId: { - type: new GraphQLList(GraphQLString), - resolve({ id: _id }, arg, { authorization }) { - if (!authorization) { - return ({}); - } - return new Promise((res, rej) => { - axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - { - teams_TeamsByRole{ - id - } - } - `, - }, - headers: { authorization }, - }).then( - (result) => { - const ret = []; - Event.findOne({ _id }).exec((err, event) => { - if (err) { - rej(err); - return; - } - result.data.data.teams_TeamsByRole.forEach((team) => { - if (!(event.participants.some(participant => participant.participantId === team.id))) { - ret.push(team.id); - } - }); - res(ret); - }); - }, - (error) => { - rej(new ServiceUnavailableError(error)); - }, - ); - }); - }, - }, - invitations: { - type: new GraphQLList(InvitationType), - resolve(parent) { - return parent.invitations; - }, - }, - presentation: { - type: PresentationType, - resolve(parent) { - return parent.presentation; - }, - }, - formula: { - type: FormulaType, - resolve(parent) { - return parent.formulaId; - }, - }, - plotter: { - type: PlotterType, - resolve(parent) { - return parent.plotterId; - }, - }, - }), -}); - -export default EventType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Formula.js b/Deprecated-Code/EventsServer/src/schema/types/Formula.js deleted file mode 100644 index 0746dd52e..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Formula.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLObjectType, - GraphQLID, - GraphQLString, - GraphQLBoolean, -} from 'graphql'; - -const FormulaType = new GraphQLObjectType({ - name: 'Formula', - description: 'For now it\'s simply a named field', - fields: () => ({ - id: { type: GraphQLID }, - ownerId: { type: GraphQLString }, - isTemplate: { type: GraphQLBoolean }, - name: { type: GraphQLString }, - }), -}); - -export default FormulaType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Invitation.js b/Deprecated-Code/EventsServer/src/schema/types/Invitation.js deleted file mode 100644 index 2e37622b7..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Invitation.js +++ /dev/null @@ -1,21 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLInt, -} from 'graphql'; -import { - InviterType, -} from './index'; - -const InvitationType = new GraphQLObjectType({ - name: 'Invitation', - description: 'Invitation', - fields: () => ({ - inviteeId: { type: GraphQLString }, - acceptedDate: { type: GraphQLInt }, - refusedDate: { type: GraphQLInt }, - by: { type: InviterType }, - }), -}); - -export default InvitationType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Inviter.js b/Deprecated-Code/EventsServer/src/schema/types/Inviter.js deleted file mode 100644 index c5fb0c1e2..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Inviter.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLInt, -} from 'graphql'; - -const InviterType = new GraphQLObjectType({ - name: 'Inviter', - description: 'Inviter', - fields: () => ({ - date: { type: GraphQLInt }, - inviterId: { type: GraphQLString }, - }), -}); - -export default InviterType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Participant.js b/Deprecated-Code/EventsServer/src/schema/types/Participant.js deleted file mode 100644 index 78dadedc2..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Participant.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, -} from 'graphql'; -import ParticipantStateEnumType from './enum/ParticipantState'; - -const ParticipantType = new GraphQLObjectType({ - name: 'Participant', - description: 'Informations about the participant of an event', - fields: () => ({ - participantId: { type: GraphQLString }, - state: { type: ParticipantStateEnumType }, - operationId: { type: GraphQLString }, - }), -}); - -export default ParticipantType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Plotter.js b/Deprecated-Code/EventsServer/src/schema/types/Plotter.js deleted file mode 100644 index 381c946f4..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Plotter.js +++ /dev/null @@ -1,22 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLBoolean, - GraphQLID, -} from 'graphql'; - -const PlotterType = new GraphQLObjectType({ - name: 'Plotter', - description: 'Will soon change in order to use contained plotter objects', - fields: () => ({ - id: { type: GraphQLID }, - ownerId: { type: GraphQLString }, - isTemplate: { type: GraphQLBoolean }, - name: { type: GraphQLString }, - host: { type: GraphQLString }, - repo: { type: GraphQLString }, - moduleName: { type: GraphQLString }, - }), -}); - -export default PlotterType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Presentation.js b/Deprecated-Code/EventsServer/src/schema/types/Presentation.js deleted file mode 100644 index ef4594263..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Presentation.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, -} from 'graphql'; - -const PresentationType = new GraphQLObjectType({ - name: 'Presentation', - description: 'Presentation page of the event', - fields: () => ({ - banner: { type: GraphQLString }, - profile: { type: GraphQLString }, - page: { type: GraphQLString }, - }), -}); - -export default PresentationType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Prize.js b/Deprecated-Code/EventsServer/src/schema/types/Prize.js deleted file mode 100644 index 7a47fa277..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Prize.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; -import { - PrizeConditionType, - PrizePoolType, -} from './index'; - -const PrizeType = new GraphQLObjectType({ - name: 'Prize', - description: 'Prize, by default in algos', - fields: () => ({ - condition: { type: PrizeConditionType }, - pool: { type: PrizePoolType }, - }), -}); - -export default PrizeType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/PrizeCondition.js b/Deprecated-Code/EventsServer/src/schema/types/PrizeCondition.js deleted file mode 100644 index 575ae60e2..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/PrizeCondition.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLInt, - GraphQLObjectType, - GraphQLString, -} from 'graphql'; - -const PrizeConditionType = new GraphQLObjectType({ - name: 'PrizeCondition', - description: 'PrizeCondition', - fields: () => ({ - from: { type: GraphQLInt }, - to: { type: GraphQLInt }, - additional: { type: GraphQLString }, - }), -}); - -export default PrizeConditionType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/PrizePool.js b/Deprecated-Code/EventsServer/src/schema/types/PrizePool.js deleted file mode 100644 index 1abd065da..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/PrizePool.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLInt, - GraphQLObjectType, - GraphQLString, -} from 'graphql'; - -const PrizePoolType = new GraphQLObjectType({ - name: 'PrizePool', - description: 'PrizePool', - fields: () => ({ - amount: { type: GraphQLInt }, - asset: { type: GraphQLString }, - }), -}); - -export default PrizePoolType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/Rule.js b/Deprecated-Code/EventsServer/src/schema/types/Rule.js deleted file mode 100644 index ced38800a..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/Rule.js +++ /dev/null @@ -1,15 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, -} from 'graphql'; - -const RuleType = new GraphQLObjectType({ - name: 'Rule', - description: 'Textual rules of an event', - fields: () => ({ - title: { type: GraphQLString }, - description: { type: GraphQLString }, - }), -}); - -export default RuleType; diff --git a/Deprecated-Code/EventsServer/src/schema/types/enum/EventState.js b/Deprecated-Code/EventsServer/src/schema/types/enum/EventState.js deleted file mode 100644 index d4ef1304f..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/enum/EventState.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLEnumType, -} from 'graphql'; - -import { EventStateEnum } from '../../../enums/EventState'; - -const values = {}; -EventStateEnum.forEach((EventState) => { - values[EventState] = { value: EventState }; -}); - -const EventStateEnumType = new GraphQLEnumType({ - name: 'EventStateEnum', - values, -}); - -export { - EventStateEnumType as default, -}; diff --git a/Deprecated-Code/EventsServer/src/schema/types/enum/HistoryType.js b/Deprecated-Code/EventsServer/src/schema/types/enum/HistoryType.js deleted file mode 100644 index bdce7cb49..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/enum/HistoryType.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLEnumType, -} from 'graphql'; - -import { HistoryTypeEnum } from '../../../enums/HistoryType'; - -const values = {}; -HistoryTypeEnum.forEach((HistoryType) => { - values[HistoryType] = { value: HistoryType }; -}); - -const HistoryTypeEnumType = new GraphQLEnumType({ - name: 'HistoryTypeEnum', - values, -}); - -export { - HistoryTypeEnumType as default, -}; diff --git a/Deprecated-Code/EventsServer/src/schema/types/enum/ParticipantState.js b/Deprecated-Code/EventsServer/src/schema/types/enum/ParticipantState.js deleted file mode 100644 index 3b3926e82..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/enum/ParticipantState.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLEnumType, -} from 'graphql'; - -import { ParticipantStateEnum } from '../../../enums/ParticipantState'; - -const values = {}; -ParticipantStateEnum.forEach((ParticipantState) => { - values[ParticipantState] = { value: ParticipantState }; -}); - -const ParticipantStateEnumType = new GraphQLEnumType({ - name: 'ParticipantStateEnum', - values, -}); - -export { - ParticipantStateEnumType as default, -}; diff --git a/Deprecated-Code/EventsServer/src/schema/types/index.js b/Deprecated-Code/EventsServer/src/schema/types/index.js deleted file mode 100644 index 9f4cdb58d..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import PlotterType from './Plotter'; -import RuleType from './Rule'; -import ParticipantType from './Participant'; -import PrizeType from './Prize'; -import PrizeConditionType from './PrizeCondition'; -import PrizePoolType from './PrizePool'; -import FormulaType from './Formula'; -import EventType from './Event'; -import InvitationType from './Invitation'; -import InviterType from './Inviter'; -import PresentationType from './Presentation'; - -export { - PlotterType, - RuleType, - ParticipantType, - PrizeType, - PrizeConditionType, - PrizePoolType, - FormulaType, - EventType, - InvitationType, - InviterType, - PresentationType, -}; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Event.js b/Deprecated-Code/EventsServer/src/schema/types/input/Event.js deleted file mode 100644 index fc0d2a814..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Event.js +++ /dev/null @@ -1,29 +0,0 @@ -import { - GraphQLString, - GraphQLInt, - GraphQLInputObjectType, - GraphQLList, -} from 'graphql'; -import InputPrizeType from './Prize'; -import InputPresentationType from './Presentation'; -import InputRuleType from './Rule'; - -const Type = new GraphQLInputObjectType({ - name: 'EventInput', - description: 'Payload for event input', - fields: () => ({ - title: { type: GraphQLString }, - subtitle: { type: GraphQLString }, - hostId: { type: GraphQLString }, - description: { type: GraphQLString }, - startDatetime: { type: GraphQLInt }, - endDatetime: { type: GraphQLInt }, - formulaId: { type: GraphQLString }, - plotterId: { type: GraphQLString }, - prizes: { type: new GraphQLList(InputPrizeType) }, - rules: { type: new GraphQLList(InputRuleType) }, - presentation: { type: InputPresentationType }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Formula.js b/Deprecated-Code/EventsServer/src/schema/types/input/Formula.js deleted file mode 100644 index bd9d070f1..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Formula.js +++ /dev/null @@ -1,15 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, - GraphQLInputObjectType, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'FormulaInput', - description: 'Payload for formula input', - fields: () => ({ - name: { type: new GraphQLNonNull(GraphQLString) }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Participant.js b/Deprecated-Code/EventsServer/src/schema/types/input/Participant.js deleted file mode 100644 index c6fa4f502..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Participant.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'ParticipantInput', - description: 'Payload for formula input', - fields: () => ({ - participantId: { type: new GraphQLNonNull(GraphQLString) }, - keyId: { type: new GraphQLNonNull(GraphQLString) }, - botId: { type: new GraphQLNonNull(GraphQLString) }, - releaseId: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Plotter.js b/Deprecated-Code/EventsServer/src/schema/types/input/Plotter.js deleted file mode 100644 index 1368aecf9..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Plotter.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, - GraphQLInputObjectType, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'PlotterInput', - description: 'Payload for plotter input', - fields: () => ({ - name: { type: new GraphQLNonNull(GraphQLString) }, - host: { type: GraphQLString }, - repo: { type: GraphQLString }, - moduleName: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Presentation.js b/Deprecated-Code/EventsServer/src/schema/types/input/Presentation.js deleted file mode 100644 index d661b0cab..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Presentation.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLString, - GraphQLInputObjectType, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'PresentationInput', - description: 'Payload for presentation input', - fields: () => ({ - banner: { type: GraphQLString }, - profile: { type: GraphQLString }, - page: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Prize.js b/Deprecated-Code/EventsServer/src/schema/types/input/Prize.js deleted file mode 100644 index cfd21fbca..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Prize.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLInputObjectType, -} from 'graphql'; -import InputPrizeConditionType from './PrizeCondition'; -import InputPrizePoolType from './PrizePool'; - -const Type = new GraphQLInputObjectType({ - name: 'PrizeInput', - description: 'Payload for formula input', - fields: () => ({ - condition: { type: InputPrizeConditionType }, - pool: { type: InputPrizePoolType }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/PrizeCondition.js b/Deprecated-Code/EventsServer/src/schema/types/input/PrizeCondition.js deleted file mode 100644 index 3715c6144..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/PrizeCondition.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLInt, - GraphQLString, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'PrizeConditionInput', - description: 'Payload for formula input', - fields: () => ({ - from: { type: GraphQLInt }, - to: { type: GraphQLInt }, - additional: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/PrizePool.js b/Deprecated-Code/EventsServer/src/schema/types/input/PrizePool.js deleted file mode 100644 index 9b741f71c..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/PrizePool.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLInt, - GraphQLString, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'PrizePoolInput', - description: 'Payload for formula input', - fields: () => ({ - amount: { type: GraphQLInt }, - asset: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/Rule.js b/Deprecated-Code/EventsServer/src/schema/types/input/Rule.js deleted file mode 100644 index 40e7b80ba..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/Rule.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, - GraphQLInputObjectType, -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'RuleInput', - description: 'Payload for rule input', - fields: () => ({ - title: { type: new GraphQLNonNull(GraphQLString) }, - description: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/EventsServer/src/schema/types/input/index.js b/Deprecated-Code/EventsServer/src/schema/types/input/index.js deleted file mode 100644 index 9d34f1c96..000000000 --- a/Deprecated-Code/EventsServer/src/schema/types/input/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import PlotterInputType from './Plotter'; -import RuleInputType from './Rule'; -import PrizeInputType from './Prize'; -import FormulaInputType from './Formula'; -import EventInputType from './Event'; -import ParticipantInputType from './Participant'; -import PresentationInputType from './Presentation'; - -export { - PlotterInputType, - RuleInputType, - PrizeInputType, - FormulaInputType, - EventInputType, - ParticipantInputType, - PresentationInputType, -}; diff --git a/Deprecated-Code/EventsServer/src/utils/functions.js b/Deprecated-Code/EventsServer/src/utils/functions.js deleted file mode 100644 index c37b1d87e..000000000 --- a/Deprecated-Code/EventsServer/src/utils/functions.js +++ /dev/null @@ -1,19 +0,0 @@ -export const capitalize = string => (string).charAt(0).toUpperCase() + (string).slice(1); - -export const slugify = text => text.toString().toLowerCase() - .replace(/\s+/g, '-') - .replace(/[^\w-]+/g, '') - .replace(/--+/g, '-') - .replace(/^-+/, '') - .replace(/-+$/, ''); - -export const epoch = () => Math.round(new Date().getTime() / 1000); - -export const isBetween = (value, valA, valB) => { - const min = valA < valB ? valA : valB; - const max = valA > valB ? valA : valB; - if (value >= min && value <= max) { - return true; - } - return false; -}; diff --git a/Deprecated-Code/GaussIndicatorBot/.gitattributes b/Deprecated-Code/GaussIndicatorBot/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/GaussIndicatorBot/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/GaussIndicatorBot/.gitignore b/Deprecated-Code/GaussIndicatorBot/.gitignore deleted file mode 100644 index d473d82c1..000000000 --- a/Deprecated-Code/GaussIndicatorBot/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* -bkp/* diff --git a/Deprecated-Code/GaussIndicatorBot/CODE_OF_CONDUCT.md b/Deprecated-Code/GaussIndicatorBot/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/GaussIndicatorBot/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/GaussIndicatorBot/CONTRIBUTING.md b/Deprecated-Code/GaussIndicatorBot/CONTRIBUTING.md deleted file mode 100644 index 9b7e53fc7..000000000 --- a/Deprecated-Code/GaussIndicatorBot/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/GaussIndicatorBot/Gauss.png b/Deprecated-Code/GaussIndicatorBot/Gauss.png deleted file mode 100644 index a30f030ca..000000000 Binary files a/Deprecated-Code/GaussIndicatorBot/Gauss.png and /dev/null differ diff --git a/Deprecated-Code/GaussIndicatorBot/LICENSE b/Deprecated-Code/GaussIndicatorBot/LICENSE deleted file mode 100644 index 2fe09f449..000000000 --- a/Deprecated-Code/GaussIndicatorBot/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -COPYRIGHT NOTICE - -© Copyright 2018 Superalgos.org - - -LICENSE NOTICE - -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitely agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. \ No newline at end of file diff --git a/Deprecated-Code/GaussIndicatorBot/Multi-Period-Daily/User.bot.js b/Deprecated-Code/GaussIndicatorBot/Multi-Period-Daily/User.bot.js deleted file mode 100644 index 53d61f950..000000000 --- a/Deprecated-Code/GaussIndicatorBot/Multi-Period-Daily/User.bot.js +++ /dev/null @@ -1,758 +0,0 @@ -var LRCIndicator = function (settings) { - this.input = 'price' - this.depth = settings - this.result = false - this.age = 0 - this.history = [] - this.x = [] - /* - * Do not use array(depth) as it might not be implemented - */ - for (var i = 0; i < this.depth; i++) { - this.history.push(0.0) - this.x.push(i) - } - - // log.debug("Created LRC indicator with h: ", this.depth); -} - -LRCIndicator.prototype.update = function (price) { - // We need sufficient history to get the right result. - if (this.result === false && this.age < this.depth) { - this.history[this.age] = price - this.age++ - this.result = false - // log.debug("Waiting for sufficient age: ", this.age, " out of ", this.depth); - return - } - - this.age++ - // shift history - for (var i = 0; i < (this.depth - 1); i++) { - this.history[i] = this.history[i + 1] - } - this.history[this.depth - 1] = price - - this.calculate(price) - - // log.debug("Checking LRC: ", this.result.toFixed(8), "\tH: ", this.age); - return -} - -/* - * Least squares linear regression fitting. - */ -function linreg (values_x, values_y) { - var sum_x = 0 - var sum_y = 0 - var sum_xy = 0 - var sum_xx = 0 - var count = 0 - - /* - * We'll use those variables for faster read/write access. - */ - var x = 0 - var y = 0 - var values_length = values_x.length - - if (values_length != values_y.length) { - throw new Error('The parameters values_x and values_y need to have same size!') - } - - /* - * Nothing to do. - */ - if (values_length === 0) { - return [[], []] - } - - /* - * Calculate the sum for each of the parts necessary. - */ - for (var v = 0; v < values_length; v++) { - x = values_x[v] - y = values_y[v] - sum_x += x - sum_y += y - sum_xx += x * x - sum_xy += x * y - count++ - } - - /* - * Calculate m and b for the formula: y = x * m + b - * - */ - var m = (count * sum_xy - sum_x * sum_y) / (count * sum_xx - sum_x * sum_x) - var b = (sum_y / count) - (m * sum_x) / count - - return [m, b] -} - -/* - * Handle calculations - */ -LRCIndicator.prototype.calculate = function (price) { - // get the reg - var reg = linreg(this.x, this.history) - - // y = a * x + b - this.result = ((this.depth - 1) * reg[0]) + reg[1] -} - -exports.newUserBot = function newUserBot (bot, logger, COMMONS, UTILITIES, fileStorage) { - const FULL_LOG = false - const LOG_FILE_CONTENT = false - const USE_PARTIAL_LAST_CANDLE = true // When running live the last candle generated is a partial candle. - - const ONE_MIN_IN_MILISECONDS = 60 * 1000 - - const MODULE_NAME = 'User Bot' - - const EXCHANGE_NAME = 'Poloniex' - - thisObject = { - initialize: initialize, - start: start - } - - let utilities = UTILITIES.newCloudUtilities(bot, logger) - - let statusDependencies - - return thisObject - - function initialize (pStatusDependencies, pMonth, pYear, callBackFunction) { - try { - logger.fileName = MODULE_NAME - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] initialize -> Entering function.') } - - statusDependencies = pStatusDependencies - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] initialize -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - /* - This process will do the following: - For every period on the market: - a. Get olivia files for the current execution time - i. If the file exist, validate we can get 63 candles - 1) 63 candles exist, proceed - 2) 63 candles doesn't exist, call for previous execution day until have 63 - ii. File doesn't exist, wait until get the files - b. Once we have the 63 candles, calculate LRC - c. Save LRC points - */ - - function start (callBackFunction) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> Entering function.') } - - let market = global.MARKET - let reportFilePath = EXCHANGE_NAME + '/Processes/' + bot.process - let executionTime - let lastCandles - let dateForLastOliviaFile - let dailyFileCache = new Map() - let lrcPointsFileCache = new Map() - - getContextVariables() - - function getContextVariables () { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> Entering function.') } - - let reportKey = 'AAMasters' + '-' + 'AAOlivia' + '-' + 'Multi-Period-Daily' + '-' + 'dataSet.V1' - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> reportKey = ' + reportKey) } - - if (statusDependencies.statusReports.get(reportKey).status === 'Status Report is corrupt.') { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.') - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - let thisReport = statusDependencies.statusReports.get(reportKey).file - - if (thisReport === undefined || thisReport.lastExecution === undefined) { - logger.write(MODULE_NAME, '[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = ' + reportKey) - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: 'Dependency not ready.' - } - logger.write(MODULE_NAME, '[WARN] start -> getContextVariables -> customOK = ' + customOK.message) - callBackFunction(customOK) - return - } else { - dateForLastOliviaFile = new Date(thisReport.lastExecution) - } - - reportKey = 'AAVikings' + '-' + 'AAGauss' + '-' + 'Multi-Period-Daily' + '-' + 'dataSet.V1' - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> reportKey = ' + reportKey) } - - if (statusDependencies.statusReports.get(reportKey).status === 'Status Report is corrupt.') { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.') - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - thisReport = statusDependencies.statusReports.get(reportKey).file - if (thisReport.lastCandles !== undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> thisReport.lastCandles: ' + JSON.stringify(thisReport.lastCandles)) }; - - lastCandles = thisReport.lastCandles - buildLRCPoints() - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> First time running the bot.') } - - lastCandles = [] - - for (n = 0; n < global.dailyFilePeriods.length; n++) { - lastCandles.push(0) - } - - lastCandles[10] = new Date(Date.UTC(2015, 6, 1)).valueOf() - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> Starting at: ' + new Date(lastCandles[10]).toISOString()) } - - buildLRCPoints() - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> err = ' + err.message) - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, '[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. ') - logger.write(MODULE_NAME, '[HINT] start -> getContextVariables -> Dependencies loaded -> keys = ' + JSON.stringify(statusDependencies.keys)) - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function buildLRCPoints () { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> Entering function.') } - - let writeReport = false - - advanceTime() - - function advanceTime () { - try { - logger.newInternalLoop(bot.codeName, bot.process) - executionTime = new Date(lastCandles[10] + ONE_MIN_IN_MILISECONDS) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> advanceTime -> New processing time @ ' + executionTime.toISOString()) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> advanceTime -> Last Candles: ' + JSON.stringify(lastCandles)) }; - - if (isOnHeadOfMarket(executionTime, 10)) { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } else { - periodsLoop() - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> advanceTime -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function isOnHeadOfMarket (timeToValidate, period) { - let candleBeginIndex = 4 - let lastCandlePeriodOnCache - let lastDayIndex = period + '/' + timeToValidate.getUTCFullYear() + '/' + utilities.pad(timeToValidate.getUTCMonth() + 1, 2) + '/' + utilities.pad(timeToValidate.getUTCDate(), 2) - - if (dailyFileCache.has(lastDayIndex)) { - let currentFile = dailyFileCache.get(lastDayIndex) - if (currentFile === undefined || currentFile[currentFile.length - 1] === undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] isOnHeadOfMarket -> Period ' + global.dailyFilePeriods[period][1] + ' on cache. Checking olivia last execution: ' + new Date(dateForLastOliviaFile).toISOString()) } - - let isOnHead = (timeToValidate.valueOf() > dateForLastOliviaFile.valueOf()) - if (isOnHead && FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] isOnHeadOfMarket -> Head of the market found on Olivia ' + global.dailyFilePeriods[period][1] + ' @ ' + new Date(dateForLastOliviaFile).toISOString() + '. Execution: ' + new Date(timeToValidate).toISOString()) } - - return isOnHead - } - - lastCandlePeriodOnCache = currentFile[currentFile.length - 1][candleBeginIndex] - let isOnHead = (timeToValidate.valueOf() > lastCandlePeriodOnCache.valueOf()) - if (isOnHead && FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] isOnHeadOfMarket -> Head of the market found on cache ' + global.dailyFilePeriods[period][1] + ' @ ' + new Date(lastCandlePeriodOnCache).toISOString() + '. Execution: ' + new Date(timeToValidate).toISOString()) } - - return isOnHead - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] isOnHeadOfMarket -> Period ' + global.dailyFilePeriods[period][1] + ' not found on cache. Checking olivia last execution: ' + new Date(dateForLastOliviaFile).toISOString()) } - - let isOnHead = (timeToValidate.valueOf() > dateForLastOliviaFile.valueOf()) - if (isOnHead && FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] isOnHeadOfMarket -> Head of the market found on Olivia ' + global.dailyFilePeriods[period][1] + ' @ ' + new Date(dateForLastOliviaFile).toISOString() + '. Execution: ' + new Date(timeToValidate).toISOString()) } - - return isOnHead - } - } - - function periodsLoop () { - let n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody() - - function loopBody () { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> loopBody -> Entering function. Loop: ' + n) } - - const outputPeriod = global.dailyFilePeriods[n][0] - const folderName = global.dailyFilePeriods[n][1] - const nextExecution = lastCandles[n] + outputPeriod - - isTimeToRun() - - function isTimeToRun () { - if (executionTime.valueOf() >= nextExecution) { - getLRCPoints() - } else { - setTimeout(function () { controlLoop() }, 0) - } - } - - function getLRCPoints () { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> Entering function.') } - - const maxLRCDepth = 63 - const maxBackwardsCount = 3 - - let backwardsCount = 0 - let candleArray = [] - - let queryDate = new Date(executionTime) - let candleFile = getDailyFile(queryDate, onDailyFileReceived) - - function onDailyFileReceived (err, candleFile) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> onDailyFileReceived.') } - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < candleFile.length; i++) { - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined - } - - candle.min = candleFile[i][0] - candle.max = candleFile[i][1] - - candle.open = candleFile[i][2] - candle.close = candleFile[i][3] - - candle.begin = candleFile[i][4] - candle.end = candleFile[i][5] - - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] Candle Date: ' + new Date(candle.begin).toISOString() + '. Process Date: ' + executionTime.toISOString()) } - - let lastCandle = executionTime.valueOf() - (outputPeriod * maxLRCDepth) - - if (candleArray.length < maxLRCDepth && candle.begin > lastCandle && candle.begin <= executionTime.valueOf()) { - candleArray.push(candle) - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> Candle Array Length: ' + candleArray.length) } - - if (candleArray.length >= maxLRCDepth) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> All candles available proceed with LRC calculations.') } - - let lrcPoint = performLRCCalculations(candleArray) - savePoint(lrcPoint) - } else if (backwardsCount <= maxBackwardsCount) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> Getting file for day before.') } - - queryDate.setDate(queryDate.getDate() - 1) - getDailyFile(queryDate, onDailyFileReceived) - backwardsCount++ - } else { - logger.write(MODULE_NAME, '[WARN] start -> getLRCPoints -> Not enough history to calculate LRC.') - - // If the control candle is not ready, advance the execution. - if (n === 10) { - lastCandles[10] += ONE_MIN_IN_MILISECONDS - } - setTimeout(function () { controlLoop() }, 0) - } - } - } - - function getDailyFile (dateTime, onDailyFileReceived) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getDailyFile -> Entering function.') } - - /** - * Let's first check if we can use our own process cache in order to reduce network requests. - * Otherwise, continue with the one from the servers. - * - */ - - let datePath = dateTime.getUTCFullYear() + '/' + utilities.pad(dateTime.getUTCMonth() + 1, 2) + '/' + utilities.pad(dateTime.getUTCDate(), 2) - let cachePosition = n + '/' + datePath - - if (dailyFileCache.has(cachePosition)) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getDailyFile -> Getting the file from local cache.') } - - let cache = dailyFileCache.get(cachePosition) - onDailyFileReceived(global.DEFAULT_OK_RESPONSE, cache) - } else { - let filePath = 'AAMasters/AAOlivia.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Candles/Multi-Period-Daily/' + folderName + '/' + datePath - let fileName = market.assetA + '_' + market.assetB + '.json' - fileStorage.getTextFile(bot.devTeam, filePath + '/' + fileName, onFileReceived) - } - - function onFileReceived (err, text) { - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getDailyFile -> onFileReceived > Entering Function.') } - - let candleFile = JSON.parse(text) - - dailyFileCache.set(cachePosition, candleFile) - onDailyFileReceived(global.DEFAULT_OK_RESPONSE, candleFile) - } else { - logger.write(MODULE_NAME, '[WARN] start -> getLRCPoints -> getDailyFile -> onFileReceived -> Failed to get the file. Dependency not ready.') - - // If the control candle is not ready, advance the execution. - if (n === 10) { - lastCandles[10] += ONE_MIN_IN_MILISECONDS - } - setTimeout(function () { controlLoop() }, 0) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> getLRCPoints -> getDailyFile -> err = ' + err.message) - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - } - } - - function performLRCCalculations (candleArray) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> performLRCCalculations -> Entering function.') } - - /* - * It's needed to order since it's possible that we need to get another file and it will put an older candle at the end of the array. - */ - candleArray.sort(function (a, b) { - return a.begin - b.begin - }) - - if (USE_PARTIAL_LAST_CANDLE === false) candleArray = candleArray.slice(0, candleArray.length - 1) - - let lrcPoints = [] - lrcPoints.push(0) // firstCandleBeginTime 0 - lrcPoints.push(0) // firstCandleEndTime 1 - lrcPoints.push(0) // minimumPointValue 2 - lrcPoints.push(0) // middlePointValue 3 - lrcPoints.push(0) // maximumPointValue 4 - - if (LOG_FILE_CONTENT === true) { lrcPoints.push(candleArray) } // Entire candle array 5 - - calculateLRC(candleArray, lrcPoints) - - let lastCandle = candleArray[0] - let firstCandle = candleArray[candleArray.length - 1] - lrcPoints[0] = firstCandle.begin - lrcPoints[1] = firstCandle.end - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> performLRCCalculations -> LRC Points calculation results: ' + JSON.stringify(lrcPoints)) - } - - return lrcPoints - } - - function calculateLRC (candlesArray, lrcPoints) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> calculateLRC -> Entering function.') } - - let lrcMinIndicator = new LRCIndicator(15) - let lrcMidIndicator = new LRCIndicator(30) - let lrcMaxIndicator = new LRCIndicator(60) - - for (let i = 0; i < candlesArray.length; i++) { - let tempCandle = candlesArray[i] - let averagePrice = (tempCandle.min + tempCandle.max + tempCandle.open + tempCandle.close) / 4 - - lrcMinIndicator.update(averagePrice) - lrcMidIndicator.update(averagePrice) - lrcMaxIndicator.update(averagePrice) - } - - /* - * Only if there is enough history the result will be calculated - */ - if (lrcMinIndicator.result != false && lrcMidIndicator.result != false && lrcMaxIndicator.result != false) { - lrcPoints[2] = lrcMinIndicator.result - lrcPoints[3] = lrcMidIndicator.result - lrcPoints[4] = lrcMaxIndicator.result - - return lrcPoints - } else { - logger.write(MODULE_NAME, '[ERROR] start -> getLRCPoints -> calculateLRC -> There is not enough history to calculate the LRC.') - } - } - - function savePoint (lrcPoint) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> Entering function.') } - - /** - * Let's first check if we can use our own process cache in order to reduce network requests. - * Otherwise, continue with the one from the servers. - * - */ - let datePath = executionTime.getUTCFullYear() + '/' + utilities.pad(executionTime.getUTCMonth() + 1, 2) + '/' + utilities.pad(executionTime.getUTCDate(), 2) - let filePath = bot.filePathRoot + '/Output/LRC-Points/Multi-Period-Daily/' + folderName + '/' + datePath - let fileName = market.assetA + '_' + market.assetB + '.json' - - let cachePosition = n + '/' + datePath - - if (!lrcPointsFileCache.has(cachePosition)) { - lrcPointsFileCache.set(cachePosition, []) - } - - lrcPointsFileCache.get(cachePosition).push(lrcPoint) - - lastCandles[n] = lrcPoint[0] - - let timeToValidate = new Date(executionTime.valueOf() + outputPeriod) - if (isOnHeadOfMarket(timeToValidate, n) || isLastDayExecution()) { - fileStorage.getTextFile(bot.devTeam, filePath + '/' + fileName, onFileRetrieved) - } else { - // Move to the next period without writing report - setTimeout(function () { controlLoop() }, 0) - } - - function onFileRetrieved (err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileRetrieved -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - if (err.message === 'File does not exist.') { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileRetrieved -> Daily file does not exist, creating folders.') } - - createFile() - return - } else { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onFileRetrieved -> err = ' + err.message) - callBackFunction(err) - return - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileRetrieved -> Daily file exist, appending content.') } - - let existingFileContent = JSON.parse(text) - let finalContent = appendLRCPoints(existingFileContent) - appendToFile(finalContent) - } - - function createFile () { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> createFile -> Entering function.') } - - let fileContent = JSON.stringify(lrcPointsFileCache.get(cachePosition)) - fileStorage.createTextFile(bot.devTeam, filePath + '/' + fileName, fileContent, onFileCreated) - - function onFileCreated (err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileCreated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onFileCreated -> err = ' + err.message) - callBackFunction(err) - return - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileCreated -> Content written = ' + JSON.stringify(fileContent)) - } - - saveCleanAndMoveForward() - } - } - - function appendToFile (fileContent) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> appendToFile -> Entering function.') } - - fileStorage.createTextFile(bot.devTeam, filePath + '/' + fileName, JSON.stringify(fileContent), onExistingFileUpdated) - - function onExistingFileUpdated (err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onExistingFileUpdated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onExistingFileUpdated -> err = ' + err.message) - callBackFunction(err) - return - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onExistingFileUpdated -> Content written = ' + JSON.stringify(fileContent)) - } - - saveCleanAndMoveForward() - } - } - - function appendLRCPoints (existingLRCPoints) { - if (existingLRCPoints === undefined) { - return lrcPointsFileCache.get(cachePosition) - } - - for (i = 0; i < lrcPointsFileCache.get(cachePosition).length; i++) { - let lrcPoint = lrcPointsFileCache.get(cachePosition)[i] - let lastCandleOnFile = existingLRCPoints[existingLRCPoints.length - 1] - - if (lastCandleOnFile[0] < lrcPoint[0]) { - existingLRCPoints.push(lrcPoint) - } else { - logger.write(MODULE_NAME, '[WARN] start -> savePoint -> appendLRCPoints -> The LCR Point calculated existed on the file storage period ' + folderName + ', not saving: ' + JSON.stringify(lrcPoint)) - } - } - return existingLRCPoints - } - - function saveCleanAndMoveForward () { - writeReport = true - cleanUpCache(lrcPointsFileCache, executionTime) - cleanUpCache(dailyFileCache, executionTime) - setTimeout(function () { controlLoop() }, 0) - } - - function cleanUpCache (fileCache, dateTime) { - let date = new Date(dateTime) - let datePath = date.getUTCFullYear() + '/' + utilities.pad(date.getUTCMonth() + 1, 2) + '/' + utilities.pad(date.getUTCDate(), 2) - let cachePosition = n + '/' + datePath - - // Remove and go back one day - if (fileCache.has(cachePosition)) { - fileCache.delete(cachePosition) - date.setDate(date.getDate() - 1) - cleanUpCache(fileCache, date) - } - } - - function isLastDayExecution () { - let date = new Date(executionTime.valueOf()) - - date.setUTCHours(23) - let lastMinute = 60 - (outputPeriod / 60 / 1000) - date.setUTCMinutes(lastMinute) - date.setUTCSeconds(0) - date.setUTCMilliseconds(0) - - if (executionTime >= date.valueOf()) { - return true - } - else { - return false - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } - } - - function controlLoop () { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> Entering function. Checking Period: ' + global.dailyFilePeriods[n][1]) } - - n++ - - if (n < global.dailyFilePeriods.length) { - loopBody() - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> Last period reached.') } - if (writeReport) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> About to write the report.') } - writeReport = false - let lastOneMinuteCandle = lastCandles[10] - writeDataRange(lastOneMinuteCandle, onWritten) - - function onWritten (err) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> onWritten -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] writeDataRanges -> writeDataRanges -> onWritten -> err = ' + err.message) - callBack(err) - return - } - - writeStatusReport(advanceTime) - } - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> Advancing time.') } - advanceTime() - } - } - } - } - } - - function writeDataRange (lastOneMinuteCandle, callBack) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDataRange -> Entering function.') } - - let dataRange = { - begin: 1424373300000, - end: lastOneMinuteCandle.valueOf() - } - - let fileContentDataRange = JSON.stringify(dataRange) - - let fileName = 'Data.Range.' + market.assetA + '_' + market.assetB + '.json' - let filePath = bot.filePathRoot + '/Output/LRC-Points/' + bot.process - - fileStorage.createTextFile(bot.devTeam, filePath + '/' + fileName, fileContentDataRange + '\n', onFileCreated) - - function onFileCreated (err) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeDataRange -> onFolderCreated -> onFileCreated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> writeDataRange -> onFolderCreated -> onFileCreated -> err = ' + err.message) - callBack(err) - return - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> writeDataRange -> onFolderCreated -> onFileCreated -> Content written = ' + fileContentDataRange) - } - - callBack(global.DEFAULT_OK_RESPONSE) - } - - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeDataRange -> err = ' + err.message) - callBack(global.DEFAULT_FAIL_RESPONSE) - } - } - - function writeStatusReport (callBack) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeStatusReport -> Entering function.') } - - let key = bot.devTeam + '-' + bot.codeName + '-' + bot.process + '-' + 'dataSet.V1' - - let statusReport = statusDependencies.statusReports.get(key) - - statusReport.file.lastExecution = bot.processDatetime - statusReport.file.lastCandles = lastCandles - statusReport.save(callBack) - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeStatusReport -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } -} diff --git a/Deprecated-Code/GaussIndicatorBot/Multi-Period-Market/User.bot.js b/Deprecated-Code/GaussIndicatorBot/Multi-Period-Market/User.bot.js deleted file mode 100644 index b2829339e..000000000 --- a/Deprecated-Code/GaussIndicatorBot/Multi-Period-Market/User.bot.js +++ /dev/null @@ -1,662 +0,0 @@ -var LRCIndicator = function (settings) { - this.input = 'price' - this.depth = settings - this.result = false - this.age = 0 - this.history = [] - this.x = [] - /* - * Do not use array(depth) as it might not be implemented - */ - for (var i = 0; i < this.depth; i++) { - this.history.push(0.0) - this.x.push(i) - } - - // log.debug("Created LRC indicator with h: ", this.depth); -} - -LRCIndicator.prototype.update = function (price) { - // We need sufficient history to get the right result. - if (this.result === false && this.age < this.depth) { - this.history[this.age] = price - this.age++ - this.result = false - // log.debug("Waiting for sufficient age: ", this.age, " out of ", this.depth); - return - } - - this.age++ - // shift history - for (var i = 0; i < (this.depth - 1); i++) { - this.history[i] = this.history[i + 1] - } - this.history[this.depth - 1] = price - - this.calculate(price) - - // log.debug("Checking LRC: ", this.result.toFixed(8), "\tH: ", this.age); - return -} - -/* - * Least squares linear regression fitting. - */ -function linreg(values_x, values_y) { - var sum_x = 0 - var sum_y = 0 - var sum_xy = 0 - var sum_xx = 0 - var count = 0 - - /* - * We'll use those variables for faster read/write access. - */ - var x = 0 - var y = 0 - var values_length = values_x.length - - if (values_length != values_y.length) { - throw new Error('The parameters values_x and values_y need to have same size!') - } - - /* - * Nothing to do. - */ - if (values_length === 0) { - return [[], []] - } - - /* - * Calculate the sum for each of the parts necessary. - */ - for (var v = 0; v < values_length; v++) { - x = values_x[v] - y = values_y[v] - sum_x += x - sum_y += y - sum_xx += x * x - sum_xy += x * y - count++ - } - - /* - * Calculate m and b for the formula: y = x * m + b - * - */ - var m = (count * sum_xy - sum_x * sum_y) / (count * sum_xx - sum_x * sum_x) - var b = (sum_y / count) - (m * sum_x) / count - - return [m, b] -} - -/* - * Handle calculations - */ -LRCIndicator.prototype.calculate = function (price) { - // get the reg - var reg = linreg(this.x, this.history) - - // y = a * x + b - this.result = ((this.depth - 1) * reg[0]) + reg[1] -} - -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { - const FULL_LOG = false - const LOG_FILE_CONTENT = false - const USE_PARTIAL_LAST_CANDLE = true // When running live the last candle generated is a partial candle. - - const ONE_HOUR_IN_MILISECONDS = 60 * 60 * 1000 - - const MODULE_NAME = 'User Bot' - - thisObject = { - initialize: initialize, - start: start - } - - let statusDependencies - - return thisObject - - function initialize(pStatusDependencies, pMonth, pYear, callBackFunction) { - try { - logger.fileName = MODULE_NAME - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] initialize -> Entering function.') } - - statusDependencies = pStatusDependencies - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] initialize -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - /* - This process will do the following: - For every period on the market: - a. Get olivia files for the current execution time - i. If the file exist, validate we can get 63 candles - 1) 63 candles exist, proceed - 2) 63 candles doesn't exist, call for previous execution day until have 63 - ii. File doesn't exist, wait until get the files - b. Once we have the 63 candles, calculate LRC - c. Save LRC points - */ - - function start(callBackFunction) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> Entering function.') } - - let market = global.MARKET - let reportFilePath = global.EXCHANGE_NAME + '/Processes/' + bot.process - let executionTime - let lastCandles - let marketFileCache = new Map() - let lrcPointsFileCache = new Map() - - getContextVariables() - - function getContextVariables() { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> Entering function.') } - - let reportKey = 'AAMasters' + '-' + 'AAOlivia' + '-' + 'Multi-Period-Market' + '-' + 'dataSet.V1' - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> reportKey = ' + reportKey) } - - if (statusDependencies.statusReports.get(reportKey).status === 'Status Report is corrupt.') { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.') - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - let thisReport = statusDependencies.statusReports.get(reportKey).file - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, '[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = ' + reportKey) - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: 'Dependency not ready.' - } - logger.write(MODULE_NAME, '[WARN] start -> getContextVariables -> customOK = ' + customOK.message) - callBackFunction(customOK) - return - } - - reportKey = 'AAVikings' + '-' + 'AAGauss' + '-' + 'Multi-Period-Market' + '-' + 'dataSet.V1' - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> reportKey = ' + reportKey) } - - if (statusDependencies.statusReports.get(reportKey).status === 'Status Report is corrupt.') { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.') - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - thisReport = statusDependencies.statusReports.get(reportKey).file - if (thisReport.lastCandles !== undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> thisReport.lastCandles: ' + JSON.stringify(thisReport.lastCandles)) }; - - lastCandles = thisReport.lastCandles - buildLRCPoints() - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> First time running the bot.') } - - lastCandles = [] - - for (n = 0; n < global.marketFilesPeriods.length; n++) { - lastCandles.push(0) - } - - lastCandles[7] = new Date(Date.UTC(2015, 1, 20)).valueOf() - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getContextVariables -> Starting at: ' + new Date(lastCandles[7]).toISOString()) } - - buildLRCPoints() - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> getContextVariables -> err = ' + err.message) - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, '[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. ') - logger.write(MODULE_NAME, '[HINT] start -> getContextVariables -> Dependencies loaded -> keys = ' + JSON.stringify(statusDependencies.keys)) - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function buildLRCPoints() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> Entering function.') } - - let writeReport = false - - advanceTime() - - function advanceTime() { - try { - logger.newInternalLoop(bot.codeName, bot.process) - - executionTime = new Date(lastCandles[7] + ONE_HOUR_IN_MILISECONDS) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> advanceTime -> New processing time @ ' + executionTime.toISOString()) } - - /* Validation that we are not going past the head of the market. */ - - if (isExecutionOnHeadOfMarket()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> advanceTime -> Head of the market found @ ' + executionTime.toISOString()) } - - callBackFunction(global.DEFAULT_OK_RESPONSE) // Here is where we finish processing and wait for the platform to run this module again. - return - } - - periodsLoop() - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> advanceTime -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function isExecutionOnHeadOfMarket() { - let candleBeginIndex = 4 - let lastCandlePeriodOnCache - - if (!marketFileCache.has(7)) { - return false - } - - let currentFile = marketFileCache.get(7) - - if (currentFile === undefined || currentFile[currentFile.length - 1] === undefined) { - return false - } else { - lastCandlePeriodOnCache = currentFile[currentFile.length - 1][candleBeginIndex] - } - - return (executionTime.valueOf() >= lastCandlePeriodOnCache.valueOf()) - } - - function periodsLoop() { - let n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody() - - function loopBody() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> loopBody -> Entering function. Time: ' + executionTime.toISOString() + '. Loop: ' + n) } - - const outputPeriod = global.marketFilesPeriods[n][0] - const folderName = global.marketFilesPeriods[n][1] - const nextExecution = lastCandles[n] + outputPeriod - - isTimeToRun() - - function isTimeToRun() { - if (executionTime.valueOf() >= nextExecution && !isPeriodOnHeadOfMarket(executionTime)) { - getLRCPoints() - } else { - setTimeout(function () { controlLoop() }, 0) - } - } - - function getLRCPoints() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> Entering function.') } - - const maxLRCDepth = 63 - const maxBackwardsCount = 3 - - let backwardsCount = 0 - let candleArray = [] - - let candleFile = getMarketFile(onMarketFileReceived) - - function onMarketFileReceived(err, candleFile) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> onMarketFileReceived.') } - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < candleFile.length; i++) { - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined - } - - candle.min = candleFile[i][0] - candle.max = candleFile[i][1] - - candle.open = candleFile[i][2] - candle.close = candleFile[i][3] - - candle.begin = candleFile[i][4] - candle.end = candleFile[i][5] - - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, '[INFO] Candle Date: ' + new Date(candle.begin).toISOString() + '. Process Date: ' + executionTime.toISOString()) } - - let lastCandle = executionTime.valueOf() - (outputPeriod * maxLRCDepth) - - if (candleArray.length < maxLRCDepth && candle.begin > lastCandle && candle.begin <= executionTime.valueOf()) { - candleArray.push(candle) - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> Candle Array Length: ' + candleArray.length) } - - if (candleArray.length >= maxLRCDepth) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> All candles available proceed with LRC calculations.') } - - let lrcPoint = performLRCCalculations(candleArray) - savePoint(lrcPoint) - } else { - logger.write(MODULE_NAME, '[WARN] start -> getLRCPoints -> Not enough history to calculate LRC. Moving to Next Period.') - - // If the control candle is not ready, advance the execution. - if (n === 7) { - lastCandles[7] += ONE_HOUR_IN_MILISECONDS - } - setTimeout(function () { controlLoop() }, 0) - } - } - } - - function getMarketFile(onMarketFileReceived) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getMarketFile -> Entering function.') } - - /** - * Let's first check if we can use our own process cache in order to reduce network requests. - * Otherwise, continue with the one from the servers. - * - */ - - if (marketFileCache.has(n)) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getMarketFile -> Getting the file from local cache.') } - - onMarketFileReceived(global.DEFAULT_OK_RESPONSE, marketFileCache.get(n)) - } else { - let filePath = 'AAMasters/AAOlivia.1.0/AACloud.1.1/' + global.EXCHANGE_NAME + '/dataSet.V1/Output/Candles/Multi-Period-Market/' + folderName - let fileName = market.assetA + '_' + market.assetB + '.json' - - fileStorage.getTextFile(bot.devTeam, filePath + '/' + fileName, onFileReceived) - } - - function onFileReceived(err, text) { - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> getMarketFile -> onFileReceived > Entering Function.') } - - let candleFile = JSON.parse(text) - marketFileCache.set(n, candleFile) // We keep a copy of the results for local use - onMarketFileReceived(global.DEFAULT_OK_RESPONSE, candleFile) - } else { - logger.write(MODULE_NAME, '[WARN] start -> getLRCPoints -> getMarketFile -> onFileReceived -> Failed to get the file. Dependency not ready.') - - // if the dependency is not ready advance the control candle one period. - if (n === 7) { - lastCandles[7] += ONE_HOUR_IN_MILISECONDS - } - setTimeout(function () { controlLoop() }, 0) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> getLRCPoints -> getMarketFile -> err = ' + err.message) - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - } - } - - function performLRCCalculations(candleArray) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> performLRCCalculations -> Entering function.') } - - /* - * It's needed to order since it's possible that we need to get another file and it will put an older candle at the end of the array. - */ - candleArray.sort(function (a, b) { - return a.begin - b.begin - }) - - if (USE_PARTIAL_LAST_CANDLE === false) candleArray = candleArray.slice(0, candleArray.length - 1) - - let lrcPoints = [] - lrcPoints.push(0) // firstCandleBeginTime 0 - lrcPoints.push(0) // firstCandleEndTime 1 - lrcPoints.push(0) // minimumPointValue 2 - lrcPoints.push(0) // middlePointValue 3 - lrcPoints.push(0) // maximumPointValue 4 - - if (LOG_FILE_CONTENT === true) { lrcPoints.push(candleArray) } // Entire candle array 5 - - calculateLRC(candleArray, lrcPoints) - - let lastCandle = candleArray[0] - let firstCandle = candleArray[candleArray.length - 1] - lrcPoints[0] = firstCandle.begin - lrcPoints[1] = firstCandle.end - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> performLRCCalculations -> LRC Points calculation results: ' + JSON.stringify(lrcPoints)) - } - - return lrcPoints - } - - function calculateLRC(candlesArray, lrcPoints) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> getLRCPoints -> calculateLRC -> Entering function.') } - - let lrcMinIndicator = new LRCIndicator(15) - let lrcMidIndicator = new LRCIndicator(30) - let lrcMaxIndicator = new LRCIndicator(60) - - for (let i = 0; i < candlesArray.length; i++) { - let tempCandle = candlesArray[i] - let averagePrice = (tempCandle.min + tempCandle.max + tempCandle.open + tempCandle.close) / 4 - - lrcMinIndicator.update(averagePrice) - lrcMidIndicator.update(averagePrice) - lrcMaxIndicator.update(averagePrice) - } - - /* - * Only if there is enough history the result will be calculated - */ - if (lrcMinIndicator.result != false && lrcMidIndicator.result != false && lrcMaxIndicator.result != false) { - lrcPoints[2] = lrcMinIndicator.result - lrcPoints[3] = lrcMidIndicator.result - lrcPoints[4] = lrcMaxIndicator.result - - return lrcPoints - } else { - logger.write(MODULE_NAME, '[ERROR] start -> getLRCPoints -> calculateLRC -> There is not enough history to calculate the LRC.') - } - } - - function savePoint(lrcPoint) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> Entering function.') } - - let filePath = bot.filePathRoot + '/Output/LRC-Points/Multi-Period-Market/' + folderName - let fileName = market.assetA + '_' + market.assetB + '.json' - - if (!lrcPointsFileCache.has(n)) { - lrcPointsFileCache.set(n, []) - } - - lrcPointsFileCache.get(n).push(lrcPoint) - - lastCandles[n] = lrcPoint[0] - - let timeToValidate = new Date(executionTime.valueOf() + outputPeriod) - if (isPeriodOnHeadOfMarket(timeToValidate)) { - fileStorage.getTextFile(bot.devTeam, filePath + '/' + fileName, onFileRetrieved) - } else { - // Move to the next period without writing report - setTimeout(function () { controlLoop() }, 0) - } - - function onFileRetrieved(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint ->onFileRetrieved -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - if (err.message === 'File does not exist.') { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileRetrieved -> Market file does not exist, creating folders.') } - - createFile() - return - } else { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onFileRetrieved -> err = ' + err.message) - callBackFunction(err) - return - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileRetrieved -> Market file exist, appending content.') } - - let existingFileContent = JSON.parse(text) - let finalContent = appendLRCPoints(existingFileContent) - appendToFile(finalContent) - } - - function createFile() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> createFile -> Entering function.') } - - let fileContent = JSON.stringify(lrcPointsFileCache.get(n)) - fileStorage.createTextFile(bot.devTeam, filePath + '/' + fileName, fileContent, onFileCreated) - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileCreated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onFileCreated -> err = ' + err.message) - callBackFunction(err) - return - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onFileCreated -> Content written = ' + JSON.stringify(existingContent)) - } - - writeReport = true - controlLoop() - } - } - - function appendToFile(fileContent) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> appendToFile -> Entering function.') } - - fileStorage.createTextFile(bot.devTeam, filePath + '/' + fileName, JSON.stringify(fileContent), onExistingFileUpdated) - - function onExistingFileUpdated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onExistingFileUpdated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> onExistingFileUpdated -> err = ' + err.message) - callBackFunction(err) - return - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, '[INFO] start -> savePoint -> onExistingFileUpdated -> Content written = ' + JSON.stringify(fileContent)) - } - - writeReport = true - controlLoop() - } - } - - function appendLRCPoints(existingLRCPoints) { - if (existingLRCPoints === undefined) { - return lrcPointsFileCache.get(n) - } - - for (i = 0; i < lrcPointsFileCache.get(n).length; i++) { - let lrcPoint = lrcPointsFileCache.get(n)[i] - let lastCandleOnFile = existingLRCPoints[existingLRCPoints.length - 1] - - if (lastCandleOnFile[0] < lrcPoint[0]) { - existingLRCPoints.push(lrcPoint) - } else { - logger.write(MODULE_NAME, '[WARN] start -> savePoint -> appendLRCPoints -> The LCR Point calculated existed on the file storage, not saving: ' + JSON.stringify(lrcPoint)) - } - } - return existingLRCPoints - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> savePoint -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } - - function isPeriodOnHeadOfMarket(timeToValidate) { - let candleBeginIndex = 4 - - if (!marketFileCache.has(n)) { - return false - } - - let currentFile = marketFileCache.get(n) - - if (currentFile[currentFile.length - 1] === undefined) { - return false - } - - let lastCandlePeriodOnCache = currentFile[currentFile.length - 1][candleBeginIndex] - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> isPeriodOnHeadOfMarket -> Execution: ' + new Date(timeToValidate).toISOString() + '. lastCandlePeriodOnCache: ' + new Date(lastCandlePeriodOnCache).toISOString()) } - - if (timeToValidate >= lastCandlePeriodOnCache) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> isPeriodOnHeadOfMarket -> Head of the market found @ ' + new Date(lastCandlePeriodOnCache).toISOString()) } - - return true - } else { - return false - } - } - } - - function controlLoop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> buildLRCPoints -> periodsLoop -> controlLoop -> Entering function.') } - - n++ - - if (n < global.marketFilesPeriods.length) { - loopBody() - } else { - if (writeReport) { - writeReport = false - writeStatusReport(advanceTime) - } else { - advanceTime() - } - } - } - } - } - - function writeStatusReport(callBack) { - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> writeStatusReport -> Entering function.') } - - let key = bot.devTeam + '-' + bot.codeName + '-' + bot.process + '-' + bot.dataSetVersion - - let statusReport = statusDependencies.statusReports.get(key) - - statusReport.file.lastExecution = bot.processDatetime - statusReport.file.lastCandles = lastCandles - statusReport.save(callBack) - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> writeStatusReport -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> err = ' + err.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } -} diff --git a/Deprecated-Code/GaussIndicatorBot/README.md b/Deprecated-Code/GaussIndicatorBot/README.md deleted file mode 100644 index bf37b19f0..000000000 --- a/Deprecated-Code/GaussIndicatorBot/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# I'm Gauss, an i-bot! -AKA an indicator algobot running on the AAPlatform by Advanced Algos Ltd. - -### My Specialty -I produce linear regression curves on prices determined by the 15, 30 and 60 minutes resolution candles. - -### Ideal for -My datasets are ideal for statistical analysis of prices and for identifying trends. - -### Details - -| **Name** | **Type** | **Version** | **Release Date** | **Current dataSet** | -|----------|----------|----------|----------|----------| -| Gauss | Indicator | 1.0 | 24 May 2018 | dataSet.V1 | - -# My Products - -## Dataset 1: Pending - -### Current Dataset Scope -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 secs) - -### Current Dataset -Pending. - -### Compatible Plotters -[AAMasters Plotters-Linear-Regression-Curve](https://github.com/AAMasters/Plotters-Linear-Regression-Curve) - -### Dependencies -[AAMasters Olivia](https://github.com/AAMasters/AAOlivia-Indicator-Bot) - -### Data as a Service (DaaS) Fees -No fees. - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/GaussIndicatorBot/package.json b/Deprecated-Code/GaussIndicatorBot/package.json deleted file mode 100644 index 67ad4c636..000000000 --- a/Deprecated-Code/GaussIndicatorBot/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AAGauss", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Matias-Benitez", - "license": "ISC", - "dependencies": { - } -} diff --git a/Deprecated-Code/GaussIndicatorBot/this.bot.config.json b/Deprecated-Code/GaussIndicatorBot/this.bot.config.json deleted file mode 100644 index 042a73d32..000000000 --- a/Deprecated-Code/GaussIndicatorBot/this.bot.config.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "displayName": "Gauss", - "codeName": "AAGauss", - "type": "Indicator", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "AAVikings", - "profilePicture": "Gauss.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Multi-Period-Market", - "description": "Produces files with the LRC Points for the entire market.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "statusDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - } - ] - }, - { - "name": "Multi-Period-Daily", - "description": "Produces files with the LRC Points on a daily format.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "timePeriod": 1800000, - "statusDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - } - ] - } - ], - "products": [ - { - "codeName": "LRCPoints", - "displayName": "LRCPoints", - "description": "Two sets of files per period that contains LRC points.", - "storageAccount": "aagauss", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAVikings", - "codeName": "PlotterLinearRegressionCurve", - "moduleName": "LRC" - } - } - ] - -} diff --git a/Deprecated-Code/Integrations/.gitignore b/Deprecated-Code/Integrations/.gitignore deleted file mode 100644 index 5471caae2..000000000 --- a/Deprecated-Code/Integrations/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ - -.vs/* -obj/* -bin/* -/.vscode - -.env -.env.dev - -/node_modules -/dependency - -/.nyc_output -/coverage -debug.log -package-lock.json - diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/ActionSwitch.js b/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/ActionSwitch.js deleted file mode 100644 index e7f7a2239..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/ActionSwitch.js +++ /dev/null @@ -1,37 +0,0 @@ -function newEthereumActionSwitch() { - - let thisObject = { - executeAction: executeAction, - initialize: initialize, - finalize: finalize - } - - let functionLibraryGeth = newGeth() - - return thisObject - - function finalize() { - functionLibraryGeth = undefined - } - - function initialize() { - /* Nothing to initialize since a Function Library does not hold any state. */ - } - - async function executeAction(action) { - switch (action.name) { - case 'Install Geth': { - functionLibraryGeth.install(action.node) - break - } - case 'Run Geth': { - functionLibraryGeth.run(action.node) - break - } - case 'Stop Geth': { - functionLibraryGeth.stop(action.node) - break - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/Geth.js b/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/Geth.js deleted file mode 100644 index c4e4f2d66..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Function-Libraries/Geth.js +++ /dev/null @@ -1,21 +0,0 @@ -function newGeth() { - thisObject = { - install: install, - run: run, - stop: stop - } - - return thisObject - - function install(node) { - callWebServer('ExecuteTerminalCommand/dir') - } - - function run(node) { - - } - - function stop(node) { - - } -} diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Globals/Placeholder.js b/Deprecated-Code/Integrations/Projects/Ethereum/Globals/Placeholder.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Icons/ethereum.png b/Deprecated-Code/Integrations/Projects/Ethereum/Icons/ethereum.png deleted file mode 100644 index 33b2853a1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Ethereum/Icons/ethereum.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Plugins/Workspaces/Ethereum-Integration-Demo.json b/Deprecated-Code/Integrations/Projects/Ethereum/Plugins/Workspaces/Ethereum-Integration-Demo.json deleted file mode 100644 index da15f8ab2..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Plugins/Workspaces/Ethereum-Integration-Demo.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Workspace","name":"Ethereum Integration Demo","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataMining":{"type":"Data Mining","name":"New Data Mining","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"da7e6d2a-76d5-431c-ba48-aa98ebd2a907","savedPayload":{"position":{"x":23623.030015561097,"y":29888.16403283887},"targetPosition":{"x":23918.47234146476,"y":29836.06957953879},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"f9daa393-935e-4a9d-bdc5-706d97ac5530","savedPayload":{"position":{"x":23918.47234146476,"y":29836.06957953879},"targetPosition":{"x":24213.914667368423,"y":29783.97512623871},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5827edbc-89f8-495a-953a-a568f2fca44e","savedPayload":{"position":{"x":24213.914667368423,"y":29783.97512623871},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"243ecbf4-cb69-42e2-9acb-b03c7c481b79","savedPayload":{"position":{"x":23619.613932037235,"y":29653.83848916277},"targetPosition":{"x":23918.47234146476,"y":29627.69176633847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"c90cb0e5-3e49-40ba-b919-38b0e5f7fcee","savedPayload":{"position":{"x":23646.580005353764,"y":29500.906287816262},"targetPosition":{"x":23918.47234146476,"y":29627.69176633847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"ac31f04b-4d79-4e18-9262-1a9a933b6156","savedPayload":{"position":{"x":23918.47234146476,"y":29627.69176633847},"targetPosition":{"x":24213.914667368423,"y":29679.78621963855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"46c3f665-a9e2-46dc-b569-2a928d2067af","savedPayload":{"position":{"x":24213.914667368423,"y":29679.78621963855},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"12498614-646b-411c-9c82-747bacb8d7a6","savedPayload":{"position":{"x":23699.9640031147,"y":29354.234959407873},"targetPosition":{"x":23989.74175100142,"y":29431.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"941a0543-0cc0-4a5d-a782-728d2835c100"}}},{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"866bebce-56cd-4ea9-890f-a96cbfd6fe77","savedPayload":{"position":{"x":23777.609716645457,"y":29219.748638582667},"targetPosition":{"x":23989.74175100142,"y":29431.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"e598ee86-1e18-4aa1-95c2-64aaf66776ca"}}}],"id":"687d7470-cba5-49d2-8be6-4f3382ece1ec","savedPayload":{"position":{"x":23989.74175100142,"y":29431.88067293863},"targetPosition":{"x":24249.549372136753,"y":29581.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"36c13892-08ac-4079-a6dd-526b4bb04a7d","savedPayload":{"position":{"x":24249.549372136753,"y":29581.88067293863},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Channels","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Channels","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Channels Multi-Period-Market","project":"Superalgos","id":"f77ca7ea-03a9-494e-8240-cd6cf070a2c4","savedPayload":{"position":{"x":23877.938814173463,"y":29100.18107616193},"targetPosition":{"x":24123.68442746016,"y":29272.254007067244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"28be432d-80ca-46b3-859a-55541e24b2b4"}}},{"type":"Indicator Process Instance","name":"Bollinger Channels Multi-Period-Daily","project":"Superalgos","id":"9452ec03-d53c-42e0-828e-9d8bb4c8d4e6","savedPayload":{"position":{"x":23996.898948937953,"y":29000.36167095625},"targetPosition":{"x":24123.68442746016,"y":29272.254007067244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"bc15b49d-4547-4bac-a28b-193eb0158fe3"}}}],"id":"4d7518eb-2f4a-424f-b121-01572e48ee63","savedPayload":{"position":{"x":24123.68442746016,"y":29272.254007067244},"targetPosition":{"x":24316.520710366123,"y":29502.067340002937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9b07c9c7-d838-4d2c-ab99-ad47fbe1b09b","savedPayload":{"position":{"x":24316.520710366123,"y":29502.067340002937},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candle Channels","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candle Channels","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candle Channels Multi-Period-Market","project":"Superalgos","id":"ddd5bfcf-a202-4b88-a07b-52b1364d215d","savedPayload":{"position":{"x":24132.07197637137,"y":28922.319487180386},"targetPosition":{"x":24304.144907276685,"y":29168.065100467084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"2ab8c00c-8e15-4bdc-87fa-291c8d4edadb"}}},{"type":"Indicator Process Instance","name":"Candle Channels Multi-Period-Daily","project":"Superalgos","id":"a6f662f2-d561-4973-a6a7-0a2c9c250f32","savedPayload":{"position":{"x":24277.998184452386,"y":28869.20669103956},"targetPosition":{"x":24304.144907276685,"y":29168.065100467084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"0de6dd1f-5bca-4f66-a5db-cd068dd4190f"}}}],"id":"68f62235-bd64-4f2b-81db-535cb026233a","savedPayload":{"position":{"x":24304.144907276685,"y":29168.065100467084},"targetPosition":{"x":24406.750950274385,"y":29449.972886702857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"83398915-428e-4930-959f-7757e74fac5e","savedPayload":{"position":{"x":24406.750950274385,"y":29449.972886702857},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"be78f104-c139-40a5-a4d4-94ce0451f815","savedPayload":{"position":{"x":24431.71127974133,"y":28842.10292505191},"targetPosition":{"x":24509.356993272086,"y":29131.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"5d9b2729-43fb-4e7e-aa4f-b8477c424e51"}}},{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Daily","project":"Superalgos","id":"85fcf6d1-548d-498a-b6df-525e2bef772c","savedPayload":{"position":{"x":24587.002706802843,"y":28842.10292505191},"targetPosition":{"x":24509.356993272086,"y":29131.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"be19d91b-9337-4f84-96b3-f4e54ea12df5"}}}],"id":"9a86b0e3-018b-4d44-a5d8-d1298d4fb434","savedPayload":{"position":{"x":24509.356993272086,"y":29131.88067293863},"targetPosition":{"x":24509.356993272086,"y":29431.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0f07d5c1-ad65-474c-b7ac-5249806fdc15","savedPayload":{"position":{"x":24509.356993272086,"y":29431.88067293863},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Volume Analysis","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Volume Analysis","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Volume Analysis Multi-Period-Market","project":"Superalgos","id":"4b530b1b-e332-42e5-910c-d81e9095db9e","savedPayload":{"position":{"x":24740.715802091785,"y":28869.20669103956},"targetPosition":{"x":24714.569079267487,"y":29168.065100467084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"2f434c96-d55d-40b8-b58c-51146f1bce5b"}}},{"type":"Indicator Process Instance","name":"Volume Analysis Multi-Period-Daily","project":"Superalgos","id":"52ff8d29-234f-4f92-b7c9-8c1bdece81b6","savedPayload":{"position":{"x":24886.6420101728,"y":28922.319487180386},"targetPosition":{"x":24714.569079267487,"y":29168.065100467084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"6909e701-0c06-46b5-8a26-c5603dadfac6"}}}],"id":"35721a26-7de4-4311-9e41-21f702b50750","savedPayload":{"position":{"x":24714.569079267487,"y":29168.065100467084},"targetPosition":{"x":24611.963036269786,"y":29449.972886702857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3d00670b-ffa6-4cac-95dd-47bd4d946394","savedPayload":{"position":{"x":24611.963036269786,"y":29449.972886702857},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candle Analysis","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candle Analysis","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candle Analysis Multi-Period-Market","project":"Superalgos","id":"488a826b-eb76-4e9b-92fb-5c99def0f97b","savedPayload":{"position":{"x":25021.815037606222,"y":29000.36167095625},"targetPosition":{"x":24895.02955908401,"y":29272.254007067244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"73f1728c-00fb-4806-8aa6-34e5968ed332"}}},{"type":"Indicator Process Instance","name":"Candle Analysis Multi-Period-Daily","project":"Superalgos","id":"5bb26f38-e588-4957-90aa-8caf42cba2a5","savedPayload":{"position":{"x":25140.775172370708,"y":29100.18107616193},"targetPosition":{"x":24895.02955908401,"y":29272.254007067244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"24386401-0992-43bd-b104-b0cc9ae58ce4"}}}],"id":"45ca0767-7438-4f3b-8696-9743057a3242","savedPayload":{"position":{"x":24895.02955908401,"y":29272.254007067244},"targetPosition":{"x":24702.193276178048,"y":29502.067340002937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5c689a96-c22d-466b-a6aa-16b31afbb701","savedPayload":{"position":{"x":24702.193276178048,"y":29502.067340002937},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9a87a8ec-a94e-4218-a45a-9e343563cc43","savedPayload":{"position":{"x":24509.356993272086,"y":29731.88067293863},"targetPosition":{"x":24659.356993272086,"y":29991.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7e826fd0-0a7f-4163-9f65-2dd798c2b259","savedPayload":{"position":{"x":24659.356993272086,"y":29991.688294073963},"targetPosition":{"x":24809.356993272086,"y":30251.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"768d36d8-bb55-4f70-a3b8-680abb8a57cc","savedPayload":{"position":{"x":24809.356993272086,"y":30251.495915209296},"targetPosition":{"x":24959.356993272086,"y":30511.30353634463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"af949a76-a6f4-4ec6-869e-f240480eea81","savedPayload":{"position":{"x":24959.356993272086,"y":30511.30353634463},"targetPosition":{"x":25109.356993272086,"y":30771.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a","savedPayload":{"position":{"x":25109.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMining":{"type":"Learning Mining","name":"New Learning Mining","project":"Superalgos","exchangeLearningTasks":[{"type":"Exchange Learning Tasks","name":"Binance","project":"Superalgos","marketLearningTasks":[{"type":"Market Learning Tasks","name":"Binance BTC/USDT","project":"Superalgos","learningMineTasks":[],"id":"e4187511-775d-463d-bcf1-a6e088f45092","savedPayload":{"position":{"x":25709.356993272086,"y":30251.495915209296},"targetPosition":{"x":25559.356993272086,"y":30511.30353634463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"7386919b-1151-477d-a1a7-c6bd96cd9711","savedPayload":{"position":{"x":25559.356993272086,"y":30511.30353634463},"targetPosition":{"x":25409.356993272086,"y":30771.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"281f7caf-54c2-4211-87c5-6e749dc4281a","savedPayload":{"position":{"x":25409.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingEnvironment":{"type":"Testing Environment","name":"New Testing Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Lightning Strike","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Lightning Strike","config":"{\"folderName\":\"Lightning-Strike\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Trading Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"0e195a97-a767-4705-9c61-e90fde5cafac","savedPayload":{"position":{"x":25449.76718989705,"y":30520.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"a7ad050d-c34c-4df1-be9b-498e078bd444","savedPayload":{"position":{"x":25358.76718989705,"y":30530.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"20eea9df-5598-4caf-aaa9-a55488c3c831","savedPayload":{"position":{"x":25503.76718989705,"y":30672.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"4181dcfd-deec-467b-a6f1-0d12cc781714","savedPayload":{"position":{"x":25496.76718989705,"y":30679.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"1d4c1e1e-5b99-4eab-abc6-def2a6ea2e54","savedPayload":{"position":{"x":25364.76718989705,"y":30551.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"0ff9c7d4-b33b-42c1-821e-9714f12097e9","savedPayload":{"position":{"x":25371.76718989705,"y":30690.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"ef62b007-dd05-403a-a410-2b9e166220ee","savedPayload":{"position":{"x":25425.76718989705,"y":30686.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"576b0b75-c5fd-406e-b382-f934a5784fc4","savedPayload":{"position":{"x":25399.76718989705,"y":30615.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"0873fac3-76f3-4ee6-ac51-45b4c7ecaff3","savedPayload":{"position":{"x":25523.76718989705,"y":30594.24762723981},"targetPosition":{"x":25432.76718989705,"y":30593.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2417e311-a137-49a2-ad4d-9cacdfcf75dc","savedPayload":{"position":{"x":25432.76718989705,"y":30593.24762723981},"targetPosition":{"x":25510.76718989705,"y":30690.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Lightning Strike","project":"Superalgos","id":"e67b90fa-7227-4737-b2c8-80c3eb00cc2c","savedPayload":{"position":{"x":25454.76718989705,"y":30616.24762723981},"targetPosition":{"x":25510.76718989705,"y":30690.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Lightning Strike","id":"628b758d-ffff-445f-9d4f-8aa480a13db3"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"86cac0b6-0373-4d03-8e1a-a4a2245c2b48","savedPayload":{"position":{"x":25490.76718989705,"y":30751.24762723981},"targetPosition":{"x":25510.76718989705,"y":30690.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"356dc8f5-bcd3-4d0a-9bad-8d389ef1f6c2","savedPayload":{"position":{"x":25510.76718989705,"y":30690.24762723981},"targetPosition":{"x":25504.76718989705,"y":30789.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"241dc98f-6737-4621-9b03-322d1368cd1f","savedPayload":{"position":{"x":25504.76718989705,"y":30789.24762723981},"targetPosition":{"x":25532.76718989705,"y":30767.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"50fa6271-4322-48ee-83d7-bbbdacee75f5","savedPayload":{"position":{"x":25532.76718989705,"y":30767.24762723981},"targetPosition":{"x":25614.76718989705,"y":30781.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4ddc432c-6c8f-4c63-be77-d4102ddb68f5","savedPayload":{"position":{"x":25614.76718989705,"y":30781.24762723981},"targetPosition":{"x":25605.76718989705,"y":30760.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b7dadab-d40a-488f-be1f-e9a07b21b3a9","savedPayload":{"position":{"x":26759.356993272086,"y":31030.918778615294},"targetPosition":{"x":26459.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fe342870-8911-489c-8374-6669e1610e14","savedPayload":{"position":{"x":26459.356993272086,"y":31030.918778615294},"targetPosition":{"x":26159.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"d875c749-bea3-40d1-8e07-f57f236234ff","savedPayload":{"position":{"x":26159.356993272086,"y":31030.918778615294},"targetPosition":{"x":25859.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"ba36975c-08d6-458d-b7c0-eb4684a85b5d","savedPayload":{"position":{"x":25859.356993272086,"y":31030.918778615294},"targetPosition":{"x":25559.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"5882d8a8-345b-4188-b1c1-797e9ff805d9","savedPayload":{"position":{"x":25559.356993272086,"y":31030.918778615294},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"productionEnvironment":{"type":"Production Environment","name":"New Production Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Lightning Strike","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Lightning Strike","config":"{\"folderName\":\"Lightning-Strike\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Trading Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"2926793b-e345-4fab-a555-cd0ea2715deb","savedPayload":{"position":{"x":25925.356993272086,"y":31670.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"c7cd7aed-d8e0-4453-9ae1-2e2e0ba3b888","savedPayload":{"position":{"x":25794.356993272086,"y":31577.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"bd9335b9-fd30-4750-81d8-4f0b490b2e87","savedPayload":{"position":{"x":25854.356993272086,"y":31591.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"2f7da92d-2208-485c-965b-b883d1b04adb","savedPayload":{"position":{"x":25919.356993272086,"y":31494.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"0246ffdc-d33c-4b4c-a925-b18e7ad98220","savedPayload":{"position":{"x":25880.356993272086,"y":31577.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"c7233960-94cb-4110-9165-65820332c3b2","savedPayload":{"position":{"x":25828.356993272086,"y":31646.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"e473ac97-865f-4666-836a-32cc4a7db245","savedPayload":{"position":{"x":25838.356993272086,"y":31582.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"cccee1d6-9285-4cbb-86c8-e3c910517a21","savedPayload":{"position":{"x":25921.356993272086,"y":31604.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"52784f19-122c-43af-ac66-36de4cb89db1","savedPayload":{"position":{"x":25932.356993272086,"y":31556.53402088596},"targetPosition":{"x":25844.356993272086,"y":31588.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2460f5a3-cea6-4a8d-a1c2-c6f66be5b909","savedPayload":{"position":{"x":25844.356993272086,"y":31588.53402088596},"targetPosition":{"x":25798.356993272086,"y":31660.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Lightning Strike","project":"Superalgos","id":"84dea2e0-c5b2-457c-9378-82f9ce8b44f6","savedPayload":{"position":{"x":25887.356993272086,"y":31743.53402088596},"targetPosition":{"x":25798.356993272086,"y":31660.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Lightning Strike","id":"628b758d-ffff-445f-9d4f-8aa480a13db3"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"cfa0034e-4c07-4cc0-8240-03d9f7e501da","savedPayload":{"position":{"x":25744.356993272086,"y":31633.53402088596},"targetPosition":{"x":25798.356993272086,"y":31660.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"eb816d48-3d58-41f7-921a-a4237379d379","savedPayload":{"position":{"x":25798.356993272086,"y":31660.53402088596},"targetPosition":{"x":25747.356993272086,"y":31758.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b2112fc1-954e-4b55-916b-ee97d1378ff2","savedPayload":{"position":{"x":25747.356993272086,"y":31758.53402088596},"targetPosition":{"x":25685.356993272086,"y":31701.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"e5f04556-12be-43a2-a685-b636be5f7d65","savedPayload":{"position":{"x":25685.356993272086,"y":31701.53402088596},"targetPosition":{"x":25698.356993272086,"y":31774.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0aec43cc-9f0a-42d7-a81e-e8d90a60cccf","savedPayload":{"position":{"x":25698.356993272086,"y":31774.53402088596},"targetPosition":{"x":25701.356993272086,"y":31721.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a029af37-67c8-4e4f-8ceb-03550c675aaa","savedPayload":{"position":{"x":26009.356993272086,"y":32329.956884291958},"targetPosition":{"x":25859.356993272086,"y":32070.149263156625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e3a25f70-a2fc-4565-8ede-6fa8c20ba8ed","savedPayload":{"position":{"x":25859.356993272086,"y":32070.149263156625},"targetPosition":{"x":25709.356993272086,"y":31810.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"b4f3ffed-2629-41f9-9495-e83c66c5693d","savedPayload":{"position":{"x":25709.356993272086,"y":31810.341642021293},"targetPosition":{"x":25559.356993272086,"y":31550.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"d539c0ac-aaeb-4c44-9dba-ac26df819a8d","savedPayload":{"position":{"x":25559.356993272086,"y":31550.53402088596},"targetPosition":{"x":25409.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"65a40d20-837c-4652-8356-f8054b4e1346","savedPayload":{"position":{"x":25409.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"u"}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","project":"Superalgos","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","project":"Superalgos","dataProducts":[],"dataMineProducts":[{"type":"Data Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Exchange Raw Data","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trades","project":"Superalgos","id":"2f3373fc-2110-48dd-8a39-8f5b7e1e3bf5","savedPayload":{"position":{"x":25340.6484203336,"y":31777.28189552407},"targetPosition":{"x":25265.6484203336,"y":31720.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trades","id":"38dbb942-a15b-450b-a867-02a94030965f"}}},{"type":"Data Product","name":"Candles","project":"Superalgos","id":"e9a96f77-ee5e-4eb2-819c-4c67efb26869","savedPayload":{"position":{"x":25190.6484203336,"y":31641.28189552407},"targetPosition":{"x":25265.6484203336,"y":31720.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"8b6a5ff1-bc1c-4d12-b502-badb4ebd513f","savedPayload":{"position":{"x":25284.6484203336,"y":31760.28189552407},"targetPosition":{"x":25265.6484203336,"y":31720.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"3a43c6f3-bac0-404e-865f-822eb48c8660"}}}],"dataProductFolders":[],"id":"0653673b-c699-4b36-a648-b1b9ad8a73a5","savedPayload":{"position":{"x":25265.6484203336,"y":31720.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Webhooks","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"External Signals","project":"Superalgos","id":"2c2fddd4-ee42-4a5c-bc6e-2c3331bf8426","savedPayload":{"position":{"x":25251.6484203336,"y":31698.28189552407},"targetPosition":{"x":25224.6484203336,"y":31765.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"External Signals","id":"29196db8-4c41-47ea-be7e-952cd9be9a0b"}}}],"dataProductFolders":[],"id":"34e95a2c-509b-46b3-a597-aaa910cfbf15","savedPayload":{"position":{"x":25224.6484203336,"y":31765.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candles Volumes","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles","project":"Superalgos","id":"35b2db18-d9e6-4491-94a5-f99b3ff684ab","savedPayload":{"position":{"x":25279.6484203336,"y":31808.28189552407},"targetPosition":{"x":25249.6484203336,"y":31815.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"ff9d5033-c3b6-4612-a206-e3cfaa56d2d0","savedPayload":{"position":{"x":25340.6484203336,"y":31785.28189552407},"targetPosition":{"x":25249.6484203336,"y":31815.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}}],"dataProductFolders":[],"id":"be98c168-69ac-42c8-9718-fcc686774606","savedPayload":{"position":{"x":25249.6484203336,"y":31815.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Bands","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Bands","project":"Superalgos","id":"3dfbee36-5671-46d2-8135-246c5c7da7f1","savedPayload":{"position":{"x":25226.6484203336,"y":31621.28189552407},"targetPosition":{"x":25219.6484203336,"y":31706.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","project":"Superalgos","id":"b0d61c8d-0d8b-42a3-874a-e3cc297c8f30","savedPayload":{"position":{"x":25136.6484203336,"y":31680.28189552407},"targetPosition":{"x":25219.6484203336,"y":31706.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}}],"dataProductFolders":[],"id":"2889525d-4f30-4e83-9ae6-9094e35cf5db","savedPayload":{"position":{"x":25219.6484203336,"y":31706.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Channels","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Channels Objects","project":"Superalgos","id":"163096b0-76eb-4b22-8fb5-f9593675d6e3","savedPayload":{"position":{"x":25435.6484203336,"y":31878.28189552407},"targetPosition":{"x":25357.6484203336,"y":31829.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Channels","project":"Superalgos","id":"6c67459b-bb1e-435d-91de-06426d1bd4a3","savedPayload":{"position":{"x":25450.6484203336,"y":31871.28189552407},"targetPosition":{"x":25357.6484203336,"y":31829.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels","id":"94bc3958-cc85-43a1-a178-103e84f42910"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","project":"Superalgos","id":"fe561a7b-7453-4bdc-ac2f-596e4e83854e","savedPayload":{"position":{"x":25341.6484203336,"y":31767.28189552407},"targetPosition":{"x":25357.6484203336,"y":31829.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Bollinger Sub-Channels","project":"Superalgos","id":"0ee8225c-fa64-462e-adc6-cef19daf53e3","savedPayload":{"position":{"x":25307.6484203336,"y":31844.28189552407},"targetPosition":{"x":25357.6484203336,"y":31829.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels","id":"79ce9c05-8a4c-4b58-850f-288037acc702"}}}],"dataProductFolders":[],"id":"03f97617-639a-415a-9693-b9b032d9f931","savedPayload":{"position":{"x":25357.6484203336,"y":31829.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candle Channels","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles Channels","project":"Superalgos","id":"e9be1c1b-00a5-4d46-9c61-7c58d8d674a8","savedPayload":{"position":{"x":25254.6484203336,"y":31725.28189552407},"targetPosition":{"x":25323.6484203336,"y":31736.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","project":"Superalgos","id":"c2d145fa-f516-46c3-9868-4d2a0953c7ec","savedPayload":{"position":{"x":25395.6484203336,"y":31730.28189552407},"targetPosition":{"x":25323.6484203336,"y":31736.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}}],"dataProductFolders":[],"id":"ac098803-7de1-4e71-8208-fc6e91127aef","savedPayload":{"position":{"x":25323.6484203336,"y":31736.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Resistances and Supports","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Resistances","project":"Superalgos","id":"99da949c-d4fe-4ebe-ac5b-8180e2c35f2b","savedPayload":{"position":{"x":25397.6484203336,"y":31635.28189552407},"targetPosition":{"x":25344.6484203336,"y":31671.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Resistances","id":"7a734501-a0fb-4305-803e-7e95d477c513"}}},{"type":"Data Product","name":"Supports","project":"Superalgos","id":"bfd82272-44a7-44de-b293-e48728625231","savedPayload":{"position":{"x":25338.6484203336,"y":31671.28189552407},"targetPosition":{"x":25344.6484203336,"y":31671.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Supports","id":"bc3c43de-6312-47d4-ae3d-0c95c1b039e0"}}}],"dataProductFolders":[],"id":"48150db8-fd3c-4657-bdd2-7eb485c3454b","savedPayload":{"position":{"x":25344.6484203336,"y":31671.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Fees Band","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Fees Band 0.2","project":"Superalgos","id":"86e9384d-a022-4af2-b98d-ec2b518a3e03","savedPayload":{"position":{"x":25114.6484203336,"y":31784.28189552407},"targetPosition":{"x":25210.6484203336,"y":31688.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Fees Band 0.2","id":"d6a14ed7-606d-40b9-b663-07ee04927460"}}}],"dataProductFolders":[],"id":"373c942e-11c3-4bce-a2e8-fe7348288e89","savedPayload":{"position":{"x":25210.6484203336,"y":31688.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Volume Analysis","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Volume Analysis","project":"Superalgos","id":"bae93f19-110a-450f-b7a2-ddd85c7ef21d","savedPayload":{"position":{"x":25225.6484203336,"y":31852.28189552407},"targetPosition":{"x":25281.6484203336,"y":31768.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volume Analysis","id":"c10f698e-1ed4-48a6-9c2d-344bcba5ca35"}}}],"dataProductFolders":[],"id":"dff742a3-33d1-4e96-9307-b61537e8efb2","savedPayload":{"position":{"x":25281.6484203336,"y":31768.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candle Analysis","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candle Analysis","project":"Superalgos","id":"2532eebb-09d1-4a98-8044-c2f7b597ddef","savedPayload":{"position":{"x":25139.6484203336,"y":31874.28189552407},"targetPosition":{"x":25214.6484203336,"y":31845.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candle Analysis","id":"e911b94f-c475-4400-a921-def0b207d7a3"}}}],"dataProductFolders":[],"id":"c7684b60-5a48-4731-8771-0eb05a4c7282","savedPayload":{"position":{"x":25214.6484203336,"y":31845.28189552407},"targetPosition":{"x":25303.6484203336,"y":31757.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b25b2a76-5d96-409d-9ad3-7e56f9e4ce58","savedPayload":{"position":{"x":25303.6484203336,"y":31757.28189552407},"targetPosition":{"x":25352.6484203336,"y":31793.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"bc95da18-713b-4244-8d0d-9aa953a9c0e6","savedPayload":{"position":{"x":25352.6484203336,"y":31793.28189552407},"targetPosition":{"x":25264.6484203336,"y":31870.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"9bc0aea4-0596-449c-91bd-4fb4cb672aa8","savedPayload":{"position":{"x":25264.6484203336,"y":31870.28189552407},"targetPosition":{"x":25187.002706802843,"y":31580.504147637348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25187.002706802843,"y":31580.504147637348},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","exchangeTradingProducts":[{"type":"Exchange Trading Products","name":"Binance","project":"Superalgos","marketTradingProducts":[{"type":"Market Trading Products","name":"Binance BTC/USDT","project":"Superalgos","tradingSessionReferences":[{"type":"Trading Session Reference","name":"Lightning Strike Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"f2587138-2010-43cb-b55b-791af40605a9","savedPayload":{"position":{"x":24739.356993272086,"y":31650.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"2bf653f9-d217-4fba-bb95-b97b71df1b91","savedPayload":{"position":{"x":24836.356993272086,"y":31613.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"1a3bc319-24b5-4652-9cd7-48d8470f48ff","savedPayload":{"position":{"x":24898.356993272086,"y":31540.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"1b29dc6a-b187-4889-8f7b-ae4c754220e9","savedPayload":{"position":{"x":24903.356993272086,"y":31634.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"ff13cd74-a43e-42d4-9a4e-cfe6491e662b","savedPayload":{"position":{"x":24831.356993272086,"y":31613.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"951fecfd-177a-420f-ba97-d0c0fd9c40f3","savedPayload":{"position":{"x":24796.356993272086,"y":31637.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"726d3cc4-2415-4dbb-b1a2-73841fef3a9a","savedPayload":{"position":{"x":24842.356993272086,"y":31557.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"038de371-5adf-4ecb-9c5b-70d30ed6590a","savedPayload":{"position":{"x":24839.356993272086,"y":31513.341642021293},"targetPosition":{"x":24810.356993272086,"y":31610.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"4e3ed555-5f49-4623-b90d-7fbf8b67f6b1","savedPayload":{"position":{"x":24810.356993272086,"y":31610.341642021293},"targetPosition":{"x":24890.356993272086,"y":31679.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"a53713cd-7057-472a-95fc-4c5ef43ad3c4","savedPayload":{"position":{"x":24886.356993272086,"y":31686.341642021293},"targetPosition":{"x":24898.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"4d54ad94-75ea-44c2-beff-0a3501b39dde","savedPayload":{"position":{"x":24971.356993272086,"y":31778.341642021293},"targetPosition":{"x":24898.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"ef2fc175-fdfc-4cf0-87c9-4b6811b2230d","savedPayload":{"position":{"x":24898.356993272086,"y":31749.341642021293},"targetPosition":{"x":24890.356993272086,"y":31679.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"acba0a6c-eedf-461f-94e8-764d2d515e3b","savedPayload":{"position":{"x":24895.356993272086,"y":31661.341642021293},"targetPosition":{"x":24877.356993272086,"y":31673.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"c8dcacbf-3a8b-482a-b372-4529412e101c","savedPayload":{"position":{"x":24831.356993272086,"y":31594.341642021293},"targetPosition":{"x":24877.356993272086,"y":31673.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"6ccfb4fb-ab68-47fc-ac1e-87330f7b6533","savedPayload":{"position":{"x":24967.356993272086,"y":31594.341642021293},"targetPosition":{"x":24877.356993272086,"y":31673.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"4897b612-f96d-4448-8e1d-2f744ea3d641","savedPayload":{"position":{"x":24885.356993272086,"y":31660.341642021293},"targetPosition":{"x":24877.356993272086,"y":31673.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"1ffd24e4-6aeb-41f6-a5c0-3981d5fa98a4","savedPayload":{"position":{"x":24877.356993272086,"y":31673.341642021293},"targetPosition":{"x":24890.356993272086,"y":31679.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"592f3f8d-7316-4caa-9c22-63192362ae0c","savedPayload":{"position":{"x":24842.356993272086,"y":31504.341642021293},"targetPosition":{"x":24925.356993272086,"y":31593.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"cfca4cfb-a707-4c76-8959-23c5828050c0","savedPayload":{"position":{"x":24985.356993272086,"y":31534.341642021293},"targetPosition":{"x":24925.356993272086,"y":31593.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"b9b99260-f61c-4f9f-b3d6-8919c6fb4b56","savedPayload":{"position":{"x":24944.356993272086,"y":31501.341642021293},"targetPosition":{"x":24925.356993272086,"y":31593.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"74133b6e-addd-4c83-ac82-6da65029c767","savedPayload":{"position":{"x":24995.356993272086,"y":31650.341642021293},"targetPosition":{"x":24925.356993272086,"y":31593.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"6ec6f091-b89e-42a6-b9c0-3ab645a87466","savedPayload":{"position":{"x":24925.356993272086,"y":31593.341642021293},"targetPosition":{"x":24890.356993272086,"y":31679.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"f31581e2-156c-4755-9453-4325996ea2ff","savedPayload":{"position":{"x":24737.356993272086,"y":31652.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"814bb0ce-160b-4ee9-b7ee-9e946794d700","savedPayload":{"position":{"x":24906.356993272086,"y":31622.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"0a62c212-5fe6-4e58-b323-20e7126fbf0b","savedPayload":{"position":{"x":24880.356993272086,"y":31755.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"470d574f-e91a-4efb-b696-f23b4c00dfff","savedPayload":{"position":{"x":24848.356993272086,"y":31651.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"7fb2d430-73c2-4b68-9315-8856a54b9790","savedPayload":{"position":{"x":24788.356993272086,"y":31750.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"f5ccbbff-dd3c-45a4-ae4b-5d6c8d1c59ff","savedPayload":{"position":{"x":24799.356993272086,"y":31771.341642021293},"targetPosition":{"x":24824.356993272086,"y":31709.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"ec12c645-31ab-46ad-9266-f3a9a83c3463","savedPayload":{"position":{"x":24824.356993272086,"y":31709.341642021293},"targetPosition":{"x":24890.356993272086,"y":31679.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7286767c-9268-4e13-8ff5-69541d143680","savedPayload":{"position":{"x":24890.356993272086,"y":31679.341642021293},"targetPosition":{"x":24943.356993272086,"y":31740.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"7538b239-537b-49a8-adfe-0c1239092f38","savedPayload":{"position":{"x":25063.356993272086,"y":31797.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"fa32499b-c343-4a28-8d42-004c99ee6e20","savedPayload":{"position":{"x":25096.356993272086,"y":31765.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"90c2939f-b2a4-49d9-b9d5-578043efa7eb","savedPayload":{"position":{"x":25129.356993272086,"y":31865.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"52613bd9-031e-4569-be10-ccced31c2fcf","savedPayload":{"position":{"x":25083.356993272086,"y":31691.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"dfdbcb65-8fab-40d6-a90c-d9956187525b","savedPayload":{"position":{"x":24954.356993272086,"y":31876.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"09cd1778-9bac-4628-a700-926ed1b60ef7","savedPayload":{"position":{"x":25027.356993272086,"y":31715.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"0b459bc5-1b93-4db3-be70-6d37d2dcfc4d","savedPayload":{"position":{"x":25078.356993272086,"y":31814.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"d4489533-bb10-4fba-b619-67a4a52d73b1","savedPayload":{"position":{"x":25115.356993272086,"y":31853.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"88c2cc93-1a83-4311-90fc-7eb9319c188a","savedPayload":{"position":{"x":25049.356993272086,"y":31846.341642021293},"targetPosition":{"x":25032.356993272086,"y":31783.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"8ea546b7-57e9-48bd-adcd-1635d27e2629","savedPayload":{"position":{"x":25032.356993272086,"y":31783.341642021293},"targetPosition":{"x":24943.356993272086,"y":31740.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"fd5699b3-2eaa-4e2d-97e4-b2d222b2e274","savedPayload":{"position":{"x":24970.356993272086,"y":31870.341642021293},"targetPosition":{"x":25018.356993272086,"y":31798.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"ed8d1afc-1e73-4137-88a3-b8991560ff9e","savedPayload":{"position":{"x":24985.356993272086,"y":31760.341642021293},"targetPosition":{"x":25018.356993272086,"y":31798.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"f5e4d8fd-711a-4659-af79-faa681a215a8","savedPayload":{"position":{"x":25173.356993272086,"y":31807.341642021293},"targetPosition":{"x":25110.356993272086,"y":31776.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"41eaf787-d0df-434d-a301-89a56347feb7","savedPayload":{"position":{"x":25114.356993272086,"y":31786.341642021293},"targetPosition":{"x":25110.356993272086,"y":31776.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"79611cfe-2cc1-4706-8ab0-aaf55c884f74","savedPayload":{"position":{"x":25203.356993272086,"y":31814.341642021293},"targetPosition":{"x":25110.356993272086,"y":31776.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"f6b0f03a-c6e4-4892-9ebb-b0c3a7d1d903","savedPayload":{"position":{"x":25011.356993272086,"y":31709.341642021293},"targetPosition":{"x":25110.356993272086,"y":31776.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"1ebd976b-d5d9-44f0-b219-bc39aae5cae5","savedPayload":{"position":{"x":25110.356993272086,"y":31776.341642021293},"targetPosition":{"x":25018.356993272086,"y":31798.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"5371e534-45f7-4918-922e-bb4709908e8f","savedPayload":{"position":{"x":25132.356993272086,"y":31752.341642021293},"targetPosition":{"x":25117.356993272086,"y":31796.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"e8130bed-debf-479b-89b3-a79932efee63","savedPayload":{"position":{"x":25165.356993272086,"y":31805.341642021293},"targetPosition":{"x":25117.356993272086,"y":31796.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"69b6e7c5-7e1e-4027-a7f1-0e1f0675256f","savedPayload":{"position":{"x":25027.356993272086,"y":31878.341642021293},"targetPosition":{"x":25117.356993272086,"y":31796.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"f1dde50b-6e9f-48b1-b6b7-efecf3482e6b","savedPayload":{"position":{"x":25030.356993272086,"y":31833.341642021293},"targetPosition":{"x":25117.356993272086,"y":31796.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"173fc298-12d7-482a-9923-6cd4df70b709","savedPayload":{"position":{"x":25117.356993272086,"y":31796.341642021293},"targetPosition":{"x":25018.356993272086,"y":31798.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"43a929cb-ae2c-4c92-ac1b-0512e35698bd","savedPayload":{"position":{"x":25046.356993272086,"y":31973.341642021293},"targetPosition":{"x":24982.356993272086,"y":31897.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"7c9968f7-15dd-4bb8-bc15-c67bb955f862","savedPayload":{"position":{"x":24951.356993272086,"y":31923.341642021293},"targetPosition":{"x":24982.356993272086,"y":31897.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"7d90e89f-6c93-4693-8b95-2ab3bee97d10","savedPayload":{"position":{"x":25034.356993272086,"y":31845.341642021293},"targetPosition":{"x":24982.356993272086,"y":31897.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"dc91b2a5-ebd9-453f-ad82-a266d7b02ddb","savedPayload":{"position":{"x":24946.356993272086,"y":31896.341642021293},"targetPosition":{"x":24982.356993272086,"y":31897.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"baba4109-cd20-480f-8365-29a894345adb","savedPayload":{"position":{"x":25077.356993272086,"y":31821.341642021293},"targetPosition":{"x":24982.356993272086,"y":31897.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"a0ff7161-87f8-4f94-8aea-e6e3755d5840","savedPayload":{"position":{"x":24982.356993272086,"y":31897.341642021293},"targetPosition":{"x":25018.356993272086,"y":31798.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1bf6c22f-6ee0-4e9c-8fdd-c386222174de","savedPayload":{"position":{"x":25018.356993272086,"y":31798.341642021293},"targetPosition":{"x":24943.356993272086,"y":31740.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a19bd93e-77bf-4e49-8461-eb636c13a351","savedPayload":{"position":{"x":24943.356993272086,"y":31740.341642021293},"targetPosition":{"x":24887.356993272086,"y":31836.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cf8d109d-711c-4a77-bbbf-ccf3aec891cf","savedPayload":{"position":{"x":24887.356993272086,"y":31836.341642021293},"targetPosition":{"x":24835.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"09204ea0-9378-4fbb-9b6e-ec7200e7f8ac","savedPayload":{"position":{"x":24835.356993272086,"y":31749.341642021293},"targetPosition":{"x":24755.356993272086,"y":31787.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Lightning Strike","id":"356dc8f5-bcd3-4d0a-9bad-8d389ef1f6c2"}}},{"type":"Trading Session Reference","name":"Lightning Strike Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"2578d2bb-7b5e-4e93-b0e3-08efa77de4ff","savedPayload":{"position":{"x":24723.356993272086,"y":31541.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"63d78303-86e6-4594-a953-7edc7bc0a390","savedPayload":{"position":{"x":24868.356993272086,"y":31635.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"fefa6656-76dd-437f-a219-90f988bd607f","savedPayload":{"position":{"x":24887.356993272086,"y":31640.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"a5cb8a8a-5309-45af-ac9d-5f27d5d923a3","savedPayload":{"position":{"x":24901.356993272086,"y":31592.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"fef8e3d2-7730-48eb-afa3-baf59cfeac3c","savedPayload":{"position":{"x":24803.356993272086,"y":31502.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"25f77993-166a-4a6d-ac8a-6667361b2855","savedPayload":{"position":{"x":24842.356993272086,"y":31526.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"a8f99804-c95c-42c4-bbf6-526ad08fe649","savedPayload":{"position":{"x":24791.356993272086,"y":31583.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"09fb797f-c5c6-45b1-96fa-b08812e48294","savedPayload":{"position":{"x":24755.356993272086,"y":31604.341642021293},"targetPosition":{"x":24823.356993272086,"y":31592.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"cb4b1464-df80-4958-9f83-546da4827fb3","savedPayload":{"position":{"x":24823.356993272086,"y":31592.341642021293},"targetPosition":{"x":24827.356993272086,"y":31650.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"20edf39a-1d12-4727-b653-4581e86c3039","savedPayload":{"position":{"x":24835.356993272086,"y":31621.341642021293},"targetPosition":{"x":24758.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"0efe7277-3fd8-4a96-b62b-e8577c76f06f","savedPayload":{"position":{"x":24797.356993272086,"y":31577.341642021293},"targetPosition":{"x":24758.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"561d027a-1a30-4279-a200-747bebe13fd6","savedPayload":{"position":{"x":24758.356993272086,"y":31663.341642021293},"targetPosition":{"x":24827.356993272086,"y":31650.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"c794ace0-c37f-42fe-9d6c-6da11ccbd805","savedPayload":{"position":{"x":24874.356993272086,"y":31613.341642021293},"targetPosition":{"x":24781.356993272086,"y":31710.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"599983d8-073d-489e-8ad9-858def387f13","savedPayload":{"position":{"x":24859.356993272086,"y":31774.341642021293},"targetPosition":{"x":24781.356993272086,"y":31710.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"a0cef7c7-bd9f-45d5-87d9-7fe5a633cbce","savedPayload":{"position":{"x":24842.356993272086,"y":31684.341642021293},"targetPosition":{"x":24781.356993272086,"y":31710.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"92d892f3-33eb-4ab2-907c-a89de2bdf55c","savedPayload":{"position":{"x":24864.356993272086,"y":31620.341642021293},"targetPosition":{"x":24781.356993272086,"y":31710.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"8e7cad1d-e955-4b0f-85b8-302437bdcc4e","savedPayload":{"position":{"x":24781.356993272086,"y":31710.341642021293},"targetPosition":{"x":24827.356993272086,"y":31650.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"b0e696f5-8a33-4728-9262-c72281c6e97c","savedPayload":{"position":{"x":24930.356993272086,"y":31612.341642021293},"targetPosition":{"x":24871.356993272086,"y":31552.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"e073d2d0-ce62-4b28-af5d-a874876663d1","savedPayload":{"position":{"x":24940.356993272086,"y":31642.341642021293},"targetPosition":{"x":24871.356993272086,"y":31552.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"f654b46d-07df-47ba-8778-96d6b4b53b7b","savedPayload":{"position":{"x":24796.356993272086,"y":31491.341642021293},"targetPosition":{"x":24871.356993272086,"y":31552.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"49d22548-e0b7-4eef-bb46-3fac56d9afe6","savedPayload":{"position":{"x":24871.356993272086,"y":31643.341642021293},"targetPosition":{"x":24871.356993272086,"y":31552.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"2cd592f6-2df3-4037-b82d-fcae78b3dd83","savedPayload":{"position":{"x":24871.356993272086,"y":31552.341642021293},"targetPosition":{"x":24827.356993272086,"y":31650.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"f4a72227-9a41-4792-8e23-41a9c89c9d53","savedPayload":{"position":{"x":24833.356993272086,"y":31671.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"99154ee5-ea7a-4525-8895-19f2b8b06f09","savedPayload":{"position":{"x":24857.356993272086,"y":31670.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"702cd718-be6e-4196-9931-32165a584549","savedPayload":{"position":{"x":24791.356993272086,"y":31646.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"e58f24d7-1932-4017-b1ed-8536dbe5519c","savedPayload":{"position":{"x":24782.356993272086,"y":31573.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"b515f755-1e8a-4b82-9547-b83da2f90333","savedPayload":{"position":{"x":24742.356993272086,"y":31707.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"93e22b41-86f0-4dc3-9c15-878799e8896d","savedPayload":{"position":{"x":24801.356993272086,"y":31636.341642021293},"targetPosition":{"x":24827.356993272086,"y":31663.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"60bf5e22-07ff-44db-ab42-4c4ff488664c","savedPayload":{"position":{"x":24827.356993272086,"y":31663.341642021293},"targetPosition":{"x":24827.356993272086,"y":31650.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fc971de-0a40-4ab5-8e0b-d06f2bccbb94","savedPayload":{"position":{"x":24827.356993272086,"y":31650.341642021293},"targetPosition":{"x":24773.356993272086,"y":31648.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"0daf63f6-b842-4d8a-b566-47ffabb4f77d","savedPayload":{"position":{"x":24692.356993272086,"y":31623.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"c83f8704-df3e-43b8-8e16-1e7a07f81dfc","savedPayload":{"position":{"x":24634.356993272086,"y":31645.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"7e5a1d96-4452-4f40-be57-bb24313a7716","savedPayload":{"position":{"x":24661.356993272086,"y":31794.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"bac5ce4b-bb3a-4bac-846d-8a71ce2a71ad","savedPayload":{"position":{"x":24813.356993272086,"y":31681.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"a1ba4935-f3f3-4c69-8e60-66e93a58705f","savedPayload":{"position":{"x":24818.356993272086,"y":31734.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"cdc7bef2-b4c9-4b12-b8aa-2374b32f6a0d","savedPayload":{"position":{"x":24803.356993272086,"y":31779.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"f9cca75f-04ff-4b25-a9e7-2d289e31d1c2","savedPayload":{"position":{"x":24653.356993272086,"y":31787.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"901870b4-13f3-4b09-972f-e12b34001c4a","savedPayload":{"position":{"x":24817.356993272086,"y":31629.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"a5c91347-e8bd-4b55-913d-359e95e3085c","savedPayload":{"position":{"x":24815.356993272086,"y":31679.341642021293},"targetPosition":{"x":24732.356993272086,"y":31704.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"bb9475bb-1bbc-48db-925f-f6248bd4b5d4","savedPayload":{"position":{"x":24732.356993272086,"y":31704.341642021293},"targetPosition":{"x":24773.356993272086,"y":31648.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"27d81a5c-6067-4ae8-a078-c9ab5a1bef6b","savedPayload":{"position":{"x":24901.356993272086,"y":31717.341642021293},"targetPosition":{"x":24830.356993272086,"y":31688.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"07aa8a17-2d19-479b-b936-7cb24b73677c","savedPayload":{"position":{"x":24921.356993272086,"y":31647.341642021293},"targetPosition":{"x":24830.356993272086,"y":31688.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"3ed2aa32-4780-496a-b0bf-8127ed301f34","savedPayload":{"position":{"x":24817.356993272086,"y":31624.341642021293},"targetPosition":{"x":24917.356993272086,"y":31680.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"dd99ae2d-1300-46ad-9e5f-ada39a2b288a","savedPayload":{"position":{"x":24872.356993272086,"y":31757.341642021293},"targetPosition":{"x":24917.356993272086,"y":31680.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"9ddbbf63-81b6-471d-b989-6acf7d797a7a","savedPayload":{"position":{"x":24873.356993272086,"y":31759.341642021293},"targetPosition":{"x":24917.356993272086,"y":31680.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"1a5721d9-5064-4bd4-9449-4433594e73a8","savedPayload":{"position":{"x":24890.356993272086,"y":31721.341642021293},"targetPosition":{"x":24917.356993272086,"y":31680.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"c290d3de-58f4-4a9b-aedd-6cc2ea4d5959","savedPayload":{"position":{"x":24917.356993272086,"y":31680.341642021293},"targetPosition":{"x":24830.356993272086,"y":31688.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"52afc8a2-90e5-4eea-889b-86e38493cec8","savedPayload":{"position":{"x":24834.356993272086,"y":31652.341642021293},"targetPosition":{"x":24827.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"d781f6a9-3e68-4faa-a822-58a7dc331204","savedPayload":{"position":{"x":24800.356993272086,"y":31804.341642021293},"targetPosition":{"x":24827.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"1a3fc6d2-ec6a-40d1-98e2-c68f0ace5553","savedPayload":{"position":{"x":24899.356993272086,"y":31798.341642021293},"targetPosition":{"x":24827.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"232666b3-d751-4d95-9856-3becc53d579e","savedPayload":{"position":{"x":24788.356993272086,"y":31717.341642021293},"targetPosition":{"x":24827.356993272086,"y":31749.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"c2d9c600-c12a-4f5f-97a4-4599eff8071e","savedPayload":{"position":{"x":24827.356993272086,"y":31749.341642021293},"targetPosition":{"x":24830.356993272086,"y":31688.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"3b12d7ca-5f2c-4275-832d-43ac08651bae","savedPayload":{"position":{"x":24849.356993272086,"y":31740.341642021293},"targetPosition":{"x":24894.356993272086,"y":31708.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"8067f0a7-8073-4ad5-8768-309a38395145","savedPayload":{"position":{"x":24913.356993272086,"y":31782.341642021293},"targetPosition":{"x":24894.356993272086,"y":31708.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"e53bba7e-05b0-4ebd-b054-04b6ad9b2c0f","savedPayload":{"position":{"x":24961.356993272086,"y":31718.341642021293},"targetPosition":{"x":24894.356993272086,"y":31708.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"9a1af2ed-4fa2-4e30-9dc8-7035b0ff628a","savedPayload":{"position":{"x":24969.356993272086,"y":31684.341642021293},"targetPosition":{"x":24894.356993272086,"y":31708.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"ad31c51f-124d-4e4b-bf88-400e8adf94a2","savedPayload":{"position":{"x":24862.356993272086,"y":31790.341642021293},"targetPosition":{"x":24894.356993272086,"y":31708.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"8ad145fe-d2ee-442f-b851-64cb9b686afc","savedPayload":{"position":{"x":24894.356993272086,"y":31708.341642021293},"targetPosition":{"x":24830.356993272086,"y":31688.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7433479e-d949-4427-84e3-9cb74a70f355","savedPayload":{"position":{"x":24830.356993272086,"y":31688.341642021293},"targetPosition":{"x":24773.356993272086,"y":31648.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"207eb88b-14c2-4828-b2d5-e750fa85a2c8","savedPayload":{"position":{"x":24773.356993272086,"y":31648.341642021293},"targetPosition":{"x":24805.356993272086,"y":31675.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dbb24829-a94a-4a9c-b68c-a415bc2a0581","savedPayload":{"position":{"x":24805.356993272086,"y":31675.341642021293},"targetPosition":{"x":24781.356993272086,"y":31775.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"c980b588-ed4a-4858-af10-4b5db38eb591","savedPayload":{"position":{"x":24781.356993272086,"y":31775.341642021293},"targetPosition":{"x":24755.356993272086,"y":31787.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Lightning Strike","id":"eb816d48-3d58-41f7-921a-a4237379d379"}}}],"id":"74a843ba-367c-4830-9c37-9b389c0a89b6","savedPayload":{"position":{"x":24755.356993272086,"y":31787.341642021293},"targetPosition":{"x":24809.356993272086,"y":31810.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"f601d2a7-fada-477f-9b63-3ef7ed42d44a","savedPayload":{"position":{"x":24809.356993272086,"y":31810.341642021293},"targetPosition":{"x":24959.356993272086,"y":31550.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24959.356993272086,"y":31550.53402088596},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","exchangeLearningProducts":[{"type":"Exchange Learning Products","name":"Binance","project":"Superalgos","marketLearningProducts":[{"type":"Market Learning Products","name":"Binance BTC/USDT","project":"Superalgos","learningSessionReferences":[],"id":"8bcfe5b1-13e9-4edc-b220-f3fd003e9325","savedPayload":{"position":{"x":24786.579245385365,"y":31338.372113281384},"targetPosition":{"x":24884.579245385365,"y":31418.372113281384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"9e5362a5-eb2f-4c13-96bb-d2a324b00be0","savedPayload":{"position":{"x":24884.579245385365,"y":31418.372113281384},"targetPosition":{"x":24819.579245385365,"y":31368.372113281384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"1e7b0c6b-ddba-4dbb-b977-eae8a0d4bc66","savedPayload":{"position":{"x":24819.579245385365,"y":31368.372113281384},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25109.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25259.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24959.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"Binance","config":"{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}","project":"Superalgos","assets":[{"type":"Asset","name":"Ethereum","config":"{ \n\"codeName\": \"ETH\"\n}","project":"Superalgos","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa","savedPayload":{"position":{"x":19794.079365950267,"y":30512.325102172115},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Asset","name":"Tether","config":"{ \n\"codeName\": \"USDT\"\n}","project":"Superalgos","id":"f110bfa0-bd5b-469b-a940-4524c8688136","savedPayload":{"position":{"x":20006.21140030623,"y":30724.45713652808},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"95d2c30f-215b-486e-8119-f4eac0279575","savedPayload":{"position":{"x":19716.43365241951,"y":30802.102850058836},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"E"}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","code":"{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}","project":"Superalgos","markets":[{"type":"Market","name":"BTC/USDT","config":"{ \n\"codeName\": \"BTC/USDT\"\n}","project":"Superalgos","baseAsset":{"type":"Market Base Asset","name":"Ethereum","project":"Superalgos","id":"1017b30d-de1b-4212-991e-9fd0a5b6c814","savedPayload":{"position":{"x":20394.079365950267,"y":30936.589170884043},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Ethereum","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},"quotedAsset":{"type":"Market Quoted Asset","name":"Tether","project":"Superalgos","id":"705c4a67-787a-48cd-a3dc-3a557438bf0b","savedPayload":{"position":{"x":20394.079365950267,"y":31091.880597945557},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}},"id":"9a867bf0-a71d-445c-b99a-75b60bbdce09","savedPayload":{"position":{"x":20104.301618063546,"y":31014.2348844148},"targetPosition":{"x":19804.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fd80894-900e-44ac-a1a7-56c14124f7a1","savedPayload":{"position":{"x":19804.301618063546,"y":31014.2348844148},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[{"type":"Exchange Account Asset","name":"Ethereum","project":"Superalgos","id":"ba6f3d5c-b36b-49d9-947f-392068109169","savedPayload":{"position":{"x":20508.121182548915,"y":31438.498953126727},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Ethereum","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},{"type":"Exchange Account Asset","name":"Tether","project":"Superalgos","id":"c90be267-90f9-45ae-b225-0578adb4aad9","savedPayload":{"position":{"x":20430.475469018158,"y":31728.27670101345},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}}],"id":"8ac5c2a9-a238-48ae-ab43-0a0a95a37464","savedPayload":{"position":{"x":20218.343434662194,"y":31516.144666657485},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"Key for Live Test","config":"{ \n\"codeName\": \"\",\n\"secret\": \"\"\n}","project":"Superalgos","id":"e85bbbd6-aca8-450f-9237-788062de5761","savedPayload":{"position":{"x":20083.857113836988,"y":32018.05444890017},"targetPosition":{"x":20006.21140030623,"y":31728.27670101345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"48925cc9-f3cd-4499-8466-1338fed28a0d","savedPayload":{"position":{"x":20006.21140030623,"y":31728.27670101345},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"63794496-c94b-42f9-81cc-c588708617a6","savedPayload":{"position":{"x":19928.565686775473,"y":31438.498953126727},"targetPosition":{"x":19716.43365241951,"y":31226.366918770764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b0c1ac5-515f-44a9-b9b9-e698a9c51eac","savedPayload":{"position":{"x":19716.43365241951,"y":31226.366918770764},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b","savedPayload":{"position":{"x":19504.301618063546,"y":31014.2348844148},"targetPosition":{"x":19204.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"tutorial":{"status":"Done"}}}],"id":"e3879d63-6f8f-41a3-8ac3-0349c4361722","savedPayload":{"position":{"x":19204.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"signalsProviders":[],"id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d","savedPayload":{"position":{"x":18904.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Charting Space","name":"New Charting Space","project":"Superalgos","viewport":{"type":"Viewport","name":"New Viewport","config":"{\"zoom\":\"1.40\"}","project":"Superalgos","id":"01713f1d-91b8-44f9-9c5d-a0c12fd09037","savedPayload":{"position":{"x":19200.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"frame":{"position":{"x":0,"y":-1763}}}},"dashboards":[{"type":"Dashboard","name":"Testing Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer Binance BTC/USDT","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"fromDate\": \"2018-01-01\",\n\"toDate\": \"2020-12-31\"\n}","project":"Superalgos","id":"eb56b7aa-a995-458f-8762-e95317a93130","savedPayload":{"position":{"x":18829.806237131383,"y":25165.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"minValue\": 0,\n\"maxValue\": 25000\n}","project":"Superalgos","id":"4de32cf6-4aff-4153-878d-51ad7f08321f","savedPayload":{"position":{"x":18733.806237131383,"y":25149.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"477083c0-c339-4227-8622-4ae0459cbe2b","savedPayload":{"position":{"x":18722.806237131383,"y":25126.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Counters","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7f50c9cb-d531-4eaf-877e-fb49fe215ff4","savedPayload":{"position":{"x":18885.806237131383,"y":25332.164021674413},"targetPosition":{"x":18888.806237131383,"y":25308.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Counters","id":"2a5783fe-af9a-443c-b4e7-32d8bdabff82"}}}],"id":"c3eebfad-b845-4f25-84ad-fbc7960bc669","savedPayload":{"position":{"x":18888.806237131383,"y":25308.164021674413},"targetPosition":{"x":18872.806237131383,"y":25228.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"ace4b993-697b-40e7-8e22-36ce1a68d7b4","savedPayload":{"position":{"x":18858.806237131383,"y":25290.164021674413},"targetPosition":{"x":18872.806237131383,"y":25228.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"732a86b8-c766-458d-aa8a-dd0101a69bfc","savedPayload":{"position":{"x":18872.806237131383,"y":25228.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"f2587138-2010-43cb-b55b-791af40605a9"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Statistics","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8765d987-231b-4be5-9213-3b4ec55be450","savedPayload":{"position":{"x":18949.806237131383,"y":25315.164021674413},"targetPosition":{"x":18889.806237131383,"y":25261.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Statistics","id":"6ea43033-418d-4d87-b640-02010679aa8b"}}}],"id":"fee704f0-f284-4e26-8448-0ee4960fe32e","savedPayload":{"position":{"x":18889.806237131383,"y":25261.164021674413},"targetPosition":{"x":18981.806237131383,"y":25257.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"c358e36d-59b8-4ee4-acde-3a033d5ecadb","savedPayload":{"position":{"x":19073.806237131383,"y":25271.164021674413},"targetPosition":{"x":18981.806237131383,"y":25257.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8b2b057d-c14b-4f4b-b789-097b57c49485","savedPayload":{"position":{"x":18981.806237131383,"y":25257.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"2bf653f9-d217-4fba-bb95-b97b71df1b91"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"3829d418-ffdd-4101-9a60-ac790b4b1241","savedPayload":{"position":{"x":18919.806237131383,"y":25188.164021674413},"targetPosition":{"x":18940.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"79fa9999-5ad3-49c8-8afe-d2cca1bdda95","savedPayload":{"position":{"x":18983.806237131383,"y":25325.164021674413},"targetPosition":{"x":18940.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"18308d20-f04d-47f9-ad86-d2f71320ef7a","savedPayload":{"position":{"x":18940.806237131383,"y":25243.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"1a3bc319-24b5-4652-9cd7-48d8470f48ff"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Current Balance","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fd406228-7cd4-42a7-8c4b-cf7c91d1562b","savedPayload":{"position":{"x":18899.806237131383,"y":25088.164021674413},"targetPosition":{"x":18843.806237131383,"y":25060.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Current Balance","id":"cb03ef16-522f-4189-ab3a-b410bf1f4176"}}}],"id":"d3ae2a74-d75b-4b1b-9dc0-8f3edb2b7cb3","savedPayload":{"position":{"x":18843.806237131383,"y":25060.164021674413},"targetPosition":{"x":18872.806237131383,"y":25115.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"f1c5096e-0b98-4296-a77a-20fe20602346","savedPayload":{"position":{"x":18791.806237131383,"y":25180.164021674413},"targetPosition":{"x":18872.806237131383,"y":25115.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"93d20dd7-e163-4e4b-9a6f-7d41d43e5e72","savedPayload":{"position":{"x":18872.806237131383,"y":25115.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"1b29dc6a-b187-4889-8f7b-ae4c754220e9"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"13fe01d9-24b4-4219-a4df-55c448bdcbf3","savedPayload":{"position":{"x":18949.806237131383,"y":25124.164021674413},"targetPosition":{"x":18870.806237131383,"y":25211.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"32138dbe-4642-407e-a249-e692413d4b0e","savedPayload":{"position":{"x":18774.806237131383,"y":25120.164021674413},"targetPosition":{"x":18870.806237131383,"y":25211.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1aa696f6-2e78-44e3-bff9-486b84c80dab","savedPayload":{"position":{"x":18870.806237131383,"y":25211.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"ff13cd74-a43e-42d4-9a4e-cfe6491e662b"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"9324e27d-3ac5-43f6-8492-ce468ff7bf1b","savedPayload":{"position":{"x":19045.806237131383,"y":25234.164021674413},"targetPosition":{"x":19002.806237131383,"y":25144.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"3702dadc-80da-41cf-9baf-36d343604ede","savedPayload":{"position":{"x":19005.806237131383,"y":25070.164021674413},"targetPosition":{"x":19002.806237131383,"y":25144.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7942b882-5c92-4053-ab9e-496be80aa056","savedPayload":{"position":{"x":19002.806237131383,"y":25144.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"951fecfd-177a-420f-ba97-d0c0fd9c40f3"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"2ef01ec7-190a-435d-81d1-f2b934b89fc3","savedPayload":{"position":{"x":18941.806237131383,"y":25193.164021674413},"targetPosition":{"x":18851.806237131383,"y":25196.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"cd984d7a-653c-41fa-8bd5-52b867d92217","savedPayload":{"position":{"x":18941.806237131383,"y":25220.164021674413},"targetPosition":{"x":18851.806237131383,"y":25196.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4766145a-f865-4b30-a7c6-7382417b82ee","savedPayload":{"position":{"x":18851.806237131383,"y":25196.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"726d3cc4-2415-4dbb-b1a2-73841fef3a9a"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"06152d0a-5dbf-4759-b3e7-b3e6c59072fd","savedPayload":{"position":{"x":18774.806237131383,"y":25160.164021674413},"targetPosition":{"x":18858.806237131383,"y":25180.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"0beafb78-3618-4c72-9242-2253c6031739","savedPayload":{"position":{"x":18885.806237131383,"y":25186.164021674413},"targetPosition":{"x":18858.806237131383,"y":25180.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"032d831f-27ab-4425-af7c-74c9665e9098","savedPayload":{"position":{"x":18858.806237131383,"y":25180.164021674413},"targetPosition":{"x":18906.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"038de371-5adf-4ecb-9c5b-70d30ed6590a"}}}],"layerFolders":[],"id":"24eed4a0-c370-4eb0-8800-4b70337e885c","savedPayload":{"position":{"x":18906.806237131383,"y":25187.164021674413},"targetPosition":{"x":18896.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"4e0edabf-5d68-4c91-b07d-69d9ec9a2fe5","savedPayload":{"position":{"x":19021.806237131383,"y":25261.164021674413},"targetPosition":{"x":19010.806237131383,"y":25192.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"cfa4d9fb-3c49-4118-ab43-3e6abcde4824","savedPayload":{"position":{"x":18982.806237131383,"y":25237.164021674413},"targetPosition":{"x":19010.806237131383,"y":25192.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e6a2287a-429e-42cd-a947-1a8ffaa5e3e4","savedPayload":{"position":{"x":19010.806237131383,"y":25192.164021674413},"targetPosition":{"x":18986.806237131383,"y":25221.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"a53713cd-7057-472a-95fc-4c5ef43ad3c4"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"3c714200-0138-4143-8df6-b0f399ac73ee","savedPayload":{"position":{"x":18912.806237131383,"y":25376.164021674413},"targetPosition":{"x":18909.806237131383,"y":25282.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"0cef3a5c-07bd-4cf3-b1ce-90b251af1959","savedPayload":{"position":{"x":19002.806237131383,"y":25324.164021674413},"targetPosition":{"x":18909.806237131383,"y":25282.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bcd7cc72-2b8f-4220-8a69-ab26a8513fdd","savedPayload":{"position":{"x":18909.806237131383,"y":25282.164021674413},"targetPosition":{"x":18986.806237131383,"y":25221.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"4d54ad94-75ea-44c2-beff-0a3501b39dde"}}}],"layerFolders":[],"id":"22536706-3d06-4dee-b69f-3b705ad8fd4d","savedPayload":{"position":{"x":18986.806237131383,"y":25221.164021674413},"targetPosition":{"x":18896.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"43583d33-750e-442e-94de-2fc1c0854acd","savedPayload":{"position":{"x":18864.806237131383,"y":25060.164021674413},"targetPosition":{"x":18862.806237131383,"y":25146.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d18262fe-c561-4c2c-a45f-f6e3e1b2cfa8","savedPayload":{"position":{"x":18770.806237131383,"y":25098.164021674413},"targetPosition":{"x":18862.806237131383,"y":25146.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d83ea08a-1c77-4404-8333-0a523b9289d2","savedPayload":{"position":{"x":18862.806237131383,"y":25146.164021674413},"targetPosition":{"x":18801.806237131383,"y":25116.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"acba0a6c-eedf-461f-94e8-764d2d515e3b"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"ff8dbde1-aef0-435b-a31c-cc38fdce0872","savedPayload":{"position":{"x":18712.806237131383,"y":25066.164021674413},"targetPosition":{"x":18765.806237131383,"y":25109.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"6fccbfa5-6cf7-4a33-b2e8-fc0282cc981e","savedPayload":{"position":{"x":18764.806237131383,"y":25135.164021674413},"targetPosition":{"x":18765.806237131383,"y":25109.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bbfe910e-f2f0-4b53-af8d-a756c1e1ce5d","savedPayload":{"position":{"x":18765.806237131383,"y":25109.164021674413},"targetPosition":{"x":18801.806237131383,"y":25116.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"c8dcacbf-3a8b-482a-b372-4529412e101c"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"787d67f0-b177-4b44-bd6e-e7d72e8b7dce","savedPayload":{"position":{"x":18708.806237131383,"y":25050.164021674413},"targetPosition":{"x":18748.806237131383,"y":25035.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4be52cf4-aa93-4316-922d-65f1391f22d4","savedPayload":{"position":{"x":18664.806237131383,"y":25012.164021674413},"targetPosition":{"x":18748.806237131383,"y":25035.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45e62f6b-dd6c-439c-9951-a099dd213cfd","savedPayload":{"position":{"x":18748.806237131383,"y":25035.164021674413},"targetPosition":{"x":18801.806237131383,"y":25116.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"6ccfb4fb-ab68-47fc-ac1e-87330f7b6533"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"cc88d35d-d987-4722-b124-1ece799b5cfd","savedPayload":{"position":{"x":18873.806237131383,"y":25086.164021674413},"targetPosition":{"x":18780.806237131383,"y":25037.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"29b8b749-c554-4237-a059-cf9af854885a","savedPayload":{"position":{"x":18839.806237131383,"y":25046.164021674413},"targetPosition":{"x":18780.806237131383,"y":25037.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b1405a08-c49d-490a-8505-f16aaca47654","savedPayload":{"position":{"x":18780.806237131383,"y":25037.164021674413},"targetPosition":{"x":18801.806237131383,"y":25116.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"4897b612-f96d-4448-8e1d-2f744ea3d641"}}}],"layerFolders":[],"id":"6edc48b2-54f8-47a4-869e-573b67e83238","savedPayload":{"position":{"x":18801.806237131383,"y":25116.164021674413},"targetPosition":{"x":18896.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"1f35278a-b25c-4cc8-9a08-9080e9e0b606","savedPayload":{"position":{"x":18919.806237131383,"y":25013.164021674413},"targetPosition":{"x":18823.806237131383,"y":25017.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"a86e5c17-63b2-43c3-8136-32dfe78aa209","savedPayload":{"position":{"x":18831.806237131383,"y":25071.164021674413},"targetPosition":{"x":18823.806237131383,"y":25017.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e647ecb1-6757-4b98-a6d5-98c20bbab4da","savedPayload":{"position":{"x":18823.806237131383,"y":25017.164021674413},"targetPosition":{"x":18909.806237131383,"y":25088.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"592f3f8d-7316-4caa-9c22-63192362ae0c"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"7f90f955-f269-4eee-8887-c5fed069b0fd","savedPayload":{"position":{"x":18771.806237131383,"y":25051.164021674413},"targetPosition":{"x":18816.806237131383,"y":25069.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"903ca0d4-5aad-442b-b046-4ec4cd9dcc80","savedPayload":{"position":{"x":18742.806237131383,"y":25055.164021674413},"targetPosition":{"x":18816.806237131383,"y":25069.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ee7e8d3f-6c35-43e3-9656-1a8a5c7fa95a","savedPayload":{"position":{"x":18816.806237131383,"y":25069.164021674413},"targetPosition":{"x":18909.806237131383,"y":25088.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"cfca4cfb-a707-4c76-8959-23c5828050c0"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"dfd205a3-3163-4749-a5b5-9048038b7ca2","savedPayload":{"position":{"x":18819.806237131383,"y":24950.164021674413},"targetPosition":{"x":18838.806237131383,"y":25025.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"0d92f5b4-b052-4e51-abb5-d858f7bcf292","savedPayload":{"position":{"x":18746.806237131383,"y":25124.164021674413},"targetPosition":{"x":18838.806237131383,"y":25025.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ac2b7aab-4df4-44f9-abed-467d966fd77e","savedPayload":{"position":{"x":18838.806237131383,"y":25025.164021674413},"targetPosition":{"x":18909.806237131383,"y":25088.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"b9b99260-f61c-4f9f-b3d6-8919c6fb4b56"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"ccf4b5d8-3ccf-4633-99a8-de7afc5c97ae","savedPayload":{"position":{"x":18862.806237131383,"y":25113.164021674413},"targetPosition":{"x":18816.806237131383,"y":25014.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"2290bf46-905b-4720-8f1e-454f7a10c6bb","savedPayload":{"position":{"x":18766.806237131383,"y":24927.164021674413},"targetPosition":{"x":18816.806237131383,"y":25014.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"38e29cbc-fcbc-411c-98d6-ad7e44f21ca5","savedPayload":{"position":{"x":18816.806237131383,"y":25014.164021674413},"targetPosition":{"x":18909.806237131383,"y":25088.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"74133b6e-addd-4c83-ac82-6da65029c767"}}}],"layerFolders":[],"id":"e58ca7e2-28e5-424b-9f11-fbfadeafb60e","savedPayload":{"position":{"x":18909.806237131383,"y":25088.164021674413},"targetPosition":{"x":18896.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"e605141c-3ccb-486f-880a-d90db52c9b1e","savedPayload":{"position":{"x":18867.806237131383,"y":25202.164021674413},"targetPosition":{"x":18826.806237131383,"y":25190.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"817f1a51-f28e-4d0e-a122-64db7c9f5b7b","savedPayload":{"position":{"x":18727.806237131383,"y":25153.164021674413},"targetPosition":{"x":18826.806237131383,"y":25190.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff78e560-a96c-4fa2-b24d-e006438b6f43","savedPayload":{"position":{"x":18826.806237131383,"y":25190.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"f31581e2-156c-4755-9453-4325996ea2ff"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"720b41aa-66cf-4d47-9f56-164f187bf73f","savedPayload":{"position":{"x":18823.806237131383,"y":25302.164021674413},"targetPosition":{"x":18885.806237131383,"y":25298.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"afd72240-2b7e-4b85-adaa-dbb6cc586e31","savedPayload":{"position":{"x":18920.806237131383,"y":25206.164021674413},"targetPosition":{"x":18885.806237131383,"y":25298.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"058dce0d-0263-44bb-a2ac-3502904e02da","savedPayload":{"position":{"x":18885.806237131383,"y":25298.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"814bb0ce-160b-4ee9-b7ee-9e946794d700"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"e2e0504b-d8ca-49a0-b4dd-63794550ac24","savedPayload":{"position":{"x":18786.806237131383,"y":25060.164021674413},"targetPosition":{"x":18822.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"ecd623e1-18d2-4129-8528-264f9e35f599","savedPayload":{"position":{"x":18769.806237131383,"y":25206.164021674413},"targetPosition":{"x":18822.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"35396d0d-7bf1-4b6d-b842-3c6a14b8a8c3","savedPayload":{"position":{"x":18822.806237131383,"y":25135.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"0a62c212-5fe6-4e58-b323-20e7126fbf0b"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"bf939af1-2af8-4609-b5c4-437b2b4a55a8","savedPayload":{"position":{"x":18864.806237131383,"y":25173.164021674413},"targetPosition":{"x":18879.806237131383,"y":25231.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4af73c9b-d584-4ac3-83ee-0a3444ff030c","savedPayload":{"position":{"x":18791.806237131383,"y":25218.164021674413},"targetPosition":{"x":18879.806237131383,"y":25231.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"01686ddf-4288-4d74-8f36-ee7ae2be0f00","savedPayload":{"position":{"x":18879.806237131383,"y":25231.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"470d574f-e91a-4efb-b696-f23b4c00dfff"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"5b50d546-2dfe-4af7-ac97-76ae7722ab4f","savedPayload":{"position":{"x":18684.806237131383,"y":25291.164021674413},"targetPosition":{"x":18724.806237131383,"y":25241.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"36fb1612-2c72-4f8b-9698-b12524c75104","savedPayload":{"position":{"x":18694.806237131383,"y":25294.164021674413},"targetPosition":{"x":18724.806237131383,"y":25241.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d509226f-336c-4af1-a63e-e611e607a1d1","savedPayload":{"position":{"x":18724.806237131383,"y":25241.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"7fb2d430-73c2-4b68-9315-8856a54b9790"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"c5d4b352-1633-46e0-9459-3f26655aebab","savedPayload":{"position":{"x":18846.806237131383,"y":25183.164021674413},"targetPosition":{"x":18827.806237131383,"y":25165.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d1b877c4-a0dd-448f-a128-517450078f13","savedPayload":{"position":{"x":18869.806237131383,"y":25188.164021674413},"targetPosition":{"x":18827.806237131383,"y":25165.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ac5b6fd4-a331-4d8b-938a-6eb509a39bc4","savedPayload":{"position":{"x":18827.806237131383,"y":25165.164021674413},"targetPosition":{"x":18796.806237131383,"y":25202.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"f5ccbbff-dd3c-45a4-ae4b-5d6c8d1c59ff"}}}],"layerFolders":[],"id":"e2ce20da-acaf-4a9c-8d33-2b07bc6921df","savedPayload":{"position":{"x":18796.806237131383,"y":25202.164021674413},"targetPosition":{"x":18896.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c5bc4b6c-47aa-4859-86df-7331db7d516b","savedPayload":{"position":{"x":18896.806237131383,"y":25156.164021674413},"targetPosition":{"x":18873.806237131383,"y":25170.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa200721-21a7-49ad-8f09-28c8e7e46d3a","savedPayload":{"position":{"x":18873.806237131383,"y":25170.164021674413},"targetPosition":{"x":18793.806237131383,"y":25165.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ac0492f6-f381-4430-9167-6372edcc0431","savedPayload":{"position":{"x":18793.806237131383,"y":25165.164021674413},"targetPosition":{"x":18740.806237131383,"y":25087.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"cf8d109d-711c-4a77-bbbf-ccf3aec891cf"}}},"id":"050004d8-d51b-4e47-9691-ce4d719b7eda","savedPayload":{"position":{"x":18740.806237131383,"y":25087.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"5955ddc7-7345-4876-b47e-afed4afdd8f5","savedPayload":{"position":{"x":19009.806237131383,"y":25301.164021674413},"targetPosition":{"x":18956.806237131383,"y":25349.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"34090678-9e76-43d4-b56a-41aa56b27089","savedPayload":{"position":{"x":19014.806237131383,"y":25445.164021674413},"targetPosition":{"x":18956.806237131383,"y":25349.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3989289f-d488-491e-8e0d-a03b5f4cb2d3","savedPayload":{"position":{"x":18956.806237131383,"y":25349.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"7538b239-537b-49a8-adfe-0c1239092f38"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"192a0081-877b-4970-a5de-0caa9cb77a29","savedPayload":{"position":{"x":18877.806237131383,"y":25219.164021674413},"targetPosition":{"x":18840.806237131383,"y":25230.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"3465f3cd-8f26-4b8b-b4c7-9b92e7b103ba","savedPayload":{"position":{"x":18879.806237131383,"y":25226.164021674413},"targetPosition":{"x":18840.806237131383,"y":25230.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"662d9763-6d1c-4590-a0c1-c8418b4cddfc","savedPayload":{"position":{"x":18840.806237131383,"y":25230.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"fa32499b-c343-4a28-8d42-004c99ee6e20"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"241480f3-41d0-4049-aa6d-ff19962fa3af","savedPayload":{"position":{"x":18808.806237131383,"y":25340.164021674413},"targetPosition":{"x":18837.806237131383,"y":25390.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"358fc4bb-b0fb-42c1-b866-e31eb36969d1","savedPayload":{"position":{"x":18909.806237131383,"y":25373.164021674413},"targetPosition":{"x":18837.806237131383,"y":25390.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cef6ac60-e734-4509-a738-e3eb44e9aa98","savedPayload":{"position":{"x":18837.806237131383,"y":25390.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"90c2939f-b2a4-49d9-b9d5-578043efa7eb"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"e43d2b52-34a0-43de-8250-dff58ed1a790","savedPayload":{"position":{"x":18978.806237131383,"y":25328.164021674413},"targetPosition":{"x":18913.806237131383,"y":25394.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4de8a7a3-33f7-41a4-af9d-6db31460b931","savedPayload":{"position":{"x":18868.806237131383,"y":25374.164021674413},"targetPosition":{"x":18913.806237131383,"y":25394.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a860ab3e-c3c3-4fcf-a2e9-d81152f779db","savedPayload":{"position":{"x":18913.806237131383,"y":25394.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"52613bd9-031e-4569-be10-ccced31c2fcf"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"8f2e50e4-81c6-475d-baa0-24c9e4642a5b","savedPayload":{"position":{"x":18889.806237131383,"y":25139.164021674413},"targetPosition":{"x":18793.806237131383,"y":25237.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"5140f772-9d2f-403a-af38-15d31414c008","savedPayload":{"position":{"x":18762.806237131383,"y":25209.164021674413},"targetPosition":{"x":18793.806237131383,"y":25237.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3811381a-f1ad-4939-b763-b180dfa1e9d0","savedPayload":{"position":{"x":18793.806237131383,"y":25237.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"dfdbcb65-8fab-40d6-a90c-d9956187525b"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"a7e34dce-eb76-49cc-a99e-6ce9124e3107","savedPayload":{"position":{"x":18790.806237131383,"y":25263.164021674413},"targetPosition":{"x":18840.806237131383,"y":25264.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"700119d1-400c-4e77-bdbd-f336e08896b0","savedPayload":{"position":{"x":18901.806237131383,"y":25205.164021674413},"targetPosition":{"x":18840.806237131383,"y":25264.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f686f0ac-aa12-4184-bbe7-0f83af12e9e1","savedPayload":{"position":{"x":18840.806237131383,"y":25264.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"09cd1778-9bac-4628-a700-926ed1b60ef7"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"42de941f-c785-48ed-bc57-fb0ce3ce78ad","savedPayload":{"position":{"x":19010.806237131383,"y":25307.164021674413},"targetPosition":{"x":18917.806237131383,"y":25293.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d730097b-5989-46ab-b941-b33beb2236fe","savedPayload":{"position":{"x":18925.806237131383,"y":25259.164021674413},"targetPosition":{"x":18917.806237131383,"y":25293.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f8e973cb-6804-46c7-a02b-08c0d114a911","savedPayload":{"position":{"x":18917.806237131383,"y":25293.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"0b459bc5-1b93-4db3-be70-6d37d2dcfc4d"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"4575cfb4-e8e6-4abb-993c-4f4bc8795ae7","savedPayload":{"position":{"x":18851.806237131383,"y":25417.164021674413},"targetPosition":{"x":18806.806237131383,"y":25335.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"dd62d113-2644-4a94-adab-f715a7207d21","savedPayload":{"position":{"x":18830.806237131383,"y":25430.164021674413},"targetPosition":{"x":18806.806237131383,"y":25335.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9f2d5592-af21-4c52-b765-4f987d1b3b57","savedPayload":{"position":{"x":18806.806237131383,"y":25335.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"d4489533-bb10-4fba-b619-67a4a52d73b1"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"d9db41d4-a1ab-4943-ae21-f0eebea12d0b","savedPayload":{"position":{"x":18899.806237131383,"y":25268.164021674413},"targetPosition":{"x":18912.806237131383,"y":25236.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"be73c76b-c34e-4aca-b8bc-62f2a0c3181c","savedPayload":{"position":{"x":18889.806237131383,"y":25274.164021674413},"targetPosition":{"x":18912.806237131383,"y":25236.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"751880ef-ae32-4eee-b824-7490e314cc6d","savedPayload":{"position":{"x":18912.806237131383,"y":25236.164021674413},"targetPosition":{"x":18891.806237131383,"y":25317.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"88c2cc93-1a83-4311-90fc-7eb9319c188a"}}}],"layerFolders":[],"id":"e49d9ae8-f25a-44c5-bca2-3927c4faf344","savedPayload":{"position":{"x":18891.806237131383,"y":25317.164021674413},"targetPosition":{"x":18892.806237131383,"y":25265.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cf4f212b-3bbf-4147-819d-b7d7c5e47548","savedPayload":{"position":{"x":18892.806237131383,"y":25265.164021674413},"targetPosition":{"x":18859.806237131383,"y":25174.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"93930406-2edc-4024-b75c-6c89aa19c9dd","savedPayload":{"position":{"x":18859.806237131383,"y":25174.164021674413},"targetPosition":{"x":18784.806237131383,"y":25117.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"cf8d109d-711c-4a77-bbbf-ccf3aec891cf"}}},"id":"61d729ca-0a96-4541-a287-696113379ae8","savedPayload":{"position":{"x":18784.806237131383,"y":25117.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"47ebb994-920d-4a06-9869-82da5983e31a","savedPayload":{"position":{"x":18750.806237131383,"y":25209.164021674413},"targetPosition":{"x":18680.806237131383,"y":25232.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Object","id":"bcbb3368-ea4c-466b-8423-8f0517ad35da"}}},{"type":"Layer Panel","name":"Episode Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e93e9b33-840a-4b90-98e0-baa96b73e936","savedPayload":{"position":{"x":18739.806237131383,"y":25238.164021674413},"targetPosition":{"x":18680.806237131383,"y":25232.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Base Asset","id":"b18a5300-448b-4165-9b36-dc5ee37e58cd"}}},{"type":"Layer Panel","name":"Episode Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"41476331-6847-4a72-8e4e-e03e515372d5","savedPayload":{"position":{"x":18730.806237131383,"y":25206.164021674413},"targetPosition":{"x":18680.806237131383,"y":25232.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Quoted Asset","id":"dbdd55de-9279-48ef-a0b1-e50024f284e9"}}}],"id":"8ee23023-39a9-40de-aedd-aeb4447f4aff","savedPayload":{"position":{"x":18680.806237131383,"y":25232.164021674413},"targetPosition":{"x":18761.806237131383,"y":25166.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4c507703-4a9e-4e4b-b278-d01206d56f62","savedPayload":{"position":{"x":18770.806237131383,"y":25191.164021674413},"targetPosition":{"x":18763.806237131383,"y":25151.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"7237c558-a0e5-46c6-8cf5-ebc555e98efb"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1532aaed-8dc0-405b-a1e0-f44b1ec9d682","savedPayload":{"position":{"x":18701.806237131383,"y":25228.164021674413},"targetPosition":{"x":18763.806237131383,"y":25151.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"4958982a-b51a-40ef-8764-dd5451cf9837"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"64d6e67f-b26d-466f-a9fe-58f2b83d585d","savedPayload":{"position":{"x":18740.806237131383,"y":25194.164021674413},"targetPosition":{"x":18763.806237131383,"y":25151.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"86fefa5e-8de8-4d00-a632-e1827ce60030"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0a3bf4de-c8b6-4117-9d6b-ffc9210fdb3a","savedPayload":{"position":{"x":18816.806237131383,"y":25158.164021674413},"targetPosition":{"x":18763.806237131383,"y":25151.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"79a3b846-3b23-4c01-9aa1-cedcebb5ca03"}}}],"id":"0e122efb-6166-45a4-8ec9-9c5795ceca29","savedPayload":{"position":{"x":18763.806237131383,"y":25151.164021674413},"targetPosition":{"x":18761.806237131383,"y":25166.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fd21a8c9-f4e2-4480-91f6-11e869eea831","savedPayload":{"position":{"x":18761.806237131383,"y":25166.164021674413},"targetPosition":{"x":18839.806237131383,"y":25089.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"fd5699b3-2eaa-4e2d-97e4-b2d222b2e274"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Strategy Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"de7073d9-7905-4ca7-99b8-02f06998c304","savedPayload":{"position":{"x":18783.806237131383,"y":25005.164021674413},"targetPosition":{"x":18773.806237131383,"y":25039.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Strategy Object","id":"b256b76c-3834-4d62-aa56-f42cce9f47e9"}}}],"id":"3dbff7c6-8faf-4ca4-b75c-62fdd78a2ede","savedPayload":{"position":{"x":18773.806237131383,"y":25039.164021674413},"targetPosition":{"x":18818.806237131383,"y":25095.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d73796e2-75ad-4eb2-beae-aee8447db9de","savedPayload":{"position":{"x":18847.806237131383,"y":25093.164021674413},"targetPosition":{"x":18790.806237131383,"y":25076.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9ae59a68-71fd-4ec8-9a70-da743f33baee"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"53117cd0-517d-4656-ba1b-2d6b713bdf39","savedPayload":{"position":{"x":18837.806237131383,"y":24980.164021674413},"targetPosition":{"x":18790.806237131383,"y":25076.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"504f327c-a08d-4c3d-8e77-850299cc30ed"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"93fc3c73-f052-4ee8-adfb-a0a931fadee1","savedPayload":{"position":{"x":18809.806237131383,"y":25103.164021674413},"targetPosition":{"x":18790.806237131383,"y":25076.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"f9500afd-e0f4-45d3-9647-45ec778554e8"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9d34fd2f-97c2-4ffb-899f-0a00fa169ef7","savedPayload":{"position":{"x":18719.806237131383,"y":25018.164021674413},"targetPosition":{"x":18790.806237131383,"y":25076.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"354102dd-fd58-4f84-8e90-0d891defa0c8"}}}],"id":"a6eff60d-aa8a-4257-9613-a4811b367101","savedPayload":{"position":{"x":18790.806237131383,"y":25076.164021674413},"targetPosition":{"x":18818.806237131383,"y":25095.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bd7e5d80-9ed8-461b-abc1-bf5a24c73b1f","savedPayload":{"position":{"x":18818.806237131383,"y":25095.164021674413},"targetPosition":{"x":18839.806237131383,"y":25089.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"ed8d1afc-1e73-4137-88a3-b8991560ff9e"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Market Buy Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"06457762-5b9f-4897-86d7-6b22d45974d3","savedPayload":{"position":{"x":18827.806237131383,"y":25071.164021674413},"targetPosition":{"x":18768.806237131383,"y":25103.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order","id":"12929733-5964-4948-877b-b1edda37162a"}}},{"type":"Layer Panel","name":"Market Buy Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"52a18137-5f19-4db1-9faa-21e5ee2a12b7","savedPayload":{"position":{"x":18775.806237131383,"y":25089.164021674413},"targetPosition":{"x":18768.806237131383,"y":25103.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Stats","id":"81a88e44-189c-44ec-9607-cb1e4de8baa1"}}},{"type":"Layer Panel","name":"Market Buy Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"902ff063-3e4e-4a4a-b575-2b1c3d901303","savedPayload":{"position":{"x":18863.806237131383,"y":25116.164021674413},"targetPosition":{"x":18768.806237131383,"y":25103.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Base Asset","id":"608a9068-7324-4f4c-8fdd-d9d8e42e26c6"}}},{"type":"Layer Panel","name":"Market Buy Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d67b1e4a-dfa8-4921-9b70-d63c38cf5576","savedPayload":{"position":{"x":18831.806237131383,"y":25069.164021674413},"targetPosition":{"x":18768.806237131383,"y":25103.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Quoted Asset","id":"1a55af5e-821d-4421-80d2-2c543d25ea1a"}}}],"id":"6eec74a9-b89a-4489-be55-bf25d599725b","savedPayload":{"position":{"x":18768.806237131383,"y":25103.164021674413},"targetPosition":{"x":18827.806237131383,"y":25037.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6193b4c1-6aaa-47c7-8fee-d55ca7f8a55e","savedPayload":{"position":{"x":18920.806237131383,"y":25030.164021674413},"targetPosition":{"x":18868.806237131383,"y":24983.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"6217d021-ea5b-4b20-b093-758a2d2fb5d4"}}}],"id":"08732d33-addd-402c-8656-5387a4b0a809","savedPayload":{"position":{"x":18868.806237131383,"y":24983.164021674413},"targetPosition":{"x":18827.806237131383,"y":25037.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"be8dc9e5-0b68-4b97-83c0-cc1301123a49","savedPayload":{"position":{"x":18827.806237131383,"y":25037.164021674413},"targetPosition":{"x":18895.806237131383,"y":25059.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"f5e4d8fd-711a-4659-af79-faa681a215a8"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Market Sell Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f4846038-5a37-4b30-8ede-69dd74f474b0","savedPayload":{"position":{"x":18708.806237131383,"y":25084.164021674413},"targetPosition":{"x":18722.806237131383,"y":25128.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order","id":"a5856620-e9ce-4ee1-830c-5b5dc45e9139"}}},{"type":"Layer Panel","name":"Market Sell Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f3088050-8aef-4093-8b89-c8dd61854c3a","savedPayload":{"position":{"x":18673.806237131383,"y":25065.164021674413},"targetPosition":{"x":18722.806237131383,"y":25128.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Stats","id":"fb23f6bb-8383-4276-8a77-5180e622653a"}}},{"type":"Layer Panel","name":"Market Sell Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"76561bbb-7797-4805-b0e4-c2405ec71e39","savedPayload":{"position":{"x":18729.806237131383,"y":25202.164021674413},"targetPosition":{"x":18722.806237131383,"y":25128.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Base Asset","id":"3e9e4e57-bd41-41f5-8d52-c92d3a707e80"}}},{"type":"Layer Panel","name":"Market Sell Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"419ebb13-1370-4eb6-bcc4-1a9505537cb8","savedPayload":{"position":{"x":18749.806237131383,"y":25211.164021674413},"targetPosition":{"x":18722.806237131383,"y":25128.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Quoted Asset","id":"51d59c30-3a02-4d74-aa62-f1524ea544ee"}}}],"id":"e4305f29-f59f-4dee-b076-c05aa34b47c5","savedPayload":{"position":{"x":18722.806237131383,"y":25128.164021674413},"targetPosition":{"x":18810.806237131383,"y":25148.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9edd62b6-cc8c-4539-b4de-0cdfc846a6d1","savedPayload":{"position":{"x":18804.806237131383,"y":25084.164021674413},"targetPosition":{"x":18883.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"5b8dcb5c-6b20-4edf-aae5-1c526cdca536"}}}],"id":"09fd8806-e757-428d-bcb1-69ba692e4970","savedPayload":{"position":{"x":18883.806237131383,"y":25142.164021674413},"targetPosition":{"x":18810.806237131383,"y":25148.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30c9b660-a3a1-4391-a46d-c593aa029bd5","savedPayload":{"position":{"x":18810.806237131383,"y":25148.164021674413},"targetPosition":{"x":18895.806237131383,"y":25059.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"41eaf787-d0df-434d-a301-89a56347feb7"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Limit Buy Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a6a41e54-797c-44fa-8957-2517ebaa3063","savedPayload":{"position":{"x":18811.806237131383,"y":25096.164021674413},"targetPosition":{"x":18847.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order","id":"48ec80a7-6f68-4284-9bb5-f04ce3c1052b"}}},{"type":"Layer Panel","name":"Limit Buy Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7dd02c8f-fc4b-4c48-9acb-ff07702c945c","savedPayload":{"position":{"x":18753.806237131383,"y":25191.164021674413},"targetPosition":{"x":18847.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Stats","id":"90bd6690-de93-4158-a17f-728c28defc38"}}},{"type":"Layer Panel","name":"Limit Buy Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"81477050-90bb-4ac9-9c52-b3bc38306965","savedPayload":{"position":{"x":18874.806237131383,"y":25083.164021674413},"targetPosition":{"x":18847.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Base Asset","id":"8504b6e3-83c8-45ea-959a-41303f9d4274"}}},{"type":"Layer Panel","name":"Limit Buy Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a4b1e729-99fe-4457-b272-f1a229d1b0be","savedPayload":{"position":{"x":18864.806237131383,"y":25057.164021674413},"targetPosition":{"x":18847.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Quoted Asset","id":"b60e7e48-8ae7-4701-848b-8faa9ba58c11"}}}],"id":"18c21e0a-966e-4a17-b9f7-b718e365a4e7","savedPayload":{"position":{"x":18847.806237131383,"y":25135.164021674413},"targetPosition":{"x":18829.806237131383,"y":25111.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Status Open","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d87c554a-da9b-4144-9150-5a6e434a08db","savedPayload":{"position":{"x":18836.806237131383,"y":25199.164021674413},"targetPosition":{"x":18819.806237131383,"y":25158.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Open","id":"7be8ba85-07e7-4800-8988-ce76d2105b73"}}},{"type":"Layer Polygon","name":"Status Closed Cancel Event","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"86b47a32-c1bb-4ecc-9026-61d4522ca43e","savedPayload":{"position":{"x":18786.806237131383,"y":25153.164021674413},"targetPosition":{"x":18819.806237131383,"y":25158.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Cancel Event","id":"ab881143-5631-4b27-a97a-94138dbd370d"}}},{"type":"Layer Polygon","name":"Status Closed Filled","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2c91ecee-0c95-40fa-a60a-f7da3078aebb","savedPayload":{"position":{"x":18885.806237131383,"y":25074.164021674413},"targetPosition":{"x":18819.806237131383,"y":25158.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Filled","id":"a54693cf-8ec1-469d-afb9-2a724e4f6af7"}}}],"id":"975ea65b-5619-4ae7-acd2-038b72e5199f","savedPayload":{"position":{"x":18819.806237131383,"y":25158.164021674413},"targetPosition":{"x":18829.806237131383,"y":25111.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3c8a6efb-8d45-4614-8574-ead4d97f2635","savedPayload":{"position":{"x":18829.806237131383,"y":25111.164021674413},"targetPosition":{"x":18895.806237131383,"y":25059.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"79611cfe-2cc1-4706-8ab0-aaf55c884f74"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Limit Sell Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"cf5fbaa1-db3d-467e-a837-ab2ad0da1c64","savedPayload":{"position":{"x":19023.806237131383,"y":25154.164021674413},"targetPosition":{"x":19043.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order","id":"5d485d15-9919-42cc-9399-54c679d7085d"}}},{"type":"Layer Panel","name":"Limit Sell Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fd5ac986-45ba-4f0d-bf33-31f676656fa2","savedPayload":{"position":{"x":18972.806237131383,"y":25120.164021674413},"targetPosition":{"x":19043.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Stats","id":"db2f6e9c-ce79-4465-a0dc-8ea02fac26b7"}}},{"type":"Layer Panel","name":"Limit Sell Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8728d673-253a-465e-9a2b-652090c93ba4","savedPayload":{"position":{"x":18982.806237131383,"y":25257.164021674413},"targetPosition":{"x":19043.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Base Asset","id":"3e34000e-ad8c-4049-9eee-89e8ea362a0f"}}},{"type":"Layer Panel","name":"Limit Sell Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"088a1f8d-8d68-4b2e-8dc9-5cc7dfed7fbb","savedPayload":{"position":{"x":18993.806237131383,"y":25131.164021674413},"targetPosition":{"x":19043.806237131383,"y":25187.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Quoted Asset","id":"ae18b041-f16e-4d96-8a83-56845dddf64a"}}}],"id":"cbe01c83-cd6b-4d27-b377-53586c346083","savedPayload":{"position":{"x":19043.806237131383,"y":25187.164021674413},"targetPosition":{"x":18978.806237131383,"y":25090.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Status Open","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a04e420c-7446-4b0e-bb22-54b670c652fb","savedPayload":{"position":{"x":18943.806237131383,"y":24936.164021674413},"targetPosition":{"x":18952.806237131383,"y":24998.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Open","id":"186d1b59-7d04-4b40-83c9-acc361b8a12a"}}},{"type":"Layer Polygon","name":"Status Closed Cancel Event","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"726802c1-1997-4336-a7bc-f7adb5cf3ea4","savedPayload":{"position":{"x":18894.806237131383,"y":25072.164021674413},"targetPosition":{"x":18952.806237131383,"y":24998.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Cancel Event","id":"8e993263-dbfc-4d41-864a-9470e70d7e4f"}}},{"type":"Layer Polygon","name":"Status Closed Filled","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0acda214-7a0c-4987-86bf-a9fea147368e","savedPayload":{"position":{"x":18861.806237131383,"y":24963.164021674413},"targetPosition":{"x":18952.806237131383,"y":24998.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Filled","id":"bf0751d6-fdb2-4e66-a39c-2bd99252bd60"}}}],"id":"4bba301c-bfd6-402d-9e33-51e5d4fb7b75","savedPayload":{"position":{"x":18952.806237131383,"y":24998.164021674413},"targetPosition":{"x":18978.806237131383,"y":25090.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a229fb8-3174-4110-a88a-4a9e3bb3c0a1","savedPayload":{"position":{"x":18978.806237131383,"y":25090.164021674413},"targetPosition":{"x":18895.806237131383,"y":25059.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"f6b0f03a-c6e4-4892-9ebb-b0c3a7d1d903"}}}],"layerFolders":[],"id":"d9592d8c-340e-452a-9231-6875987a6d08","savedPayload":{"position":{"x":18895.806237131383,"y":25059.164021674413},"targetPosition":{"x":18839.806237131383,"y":25089.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Trigger Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a01359de-3574-4242-a211-fb6ddaa6f4c5","savedPayload":{"position":{"x":18937.806237131383,"y":25105.164021674413},"targetPosition":{"x":18855.806237131383,"y":25100.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Trigger Stage Object","id":"c10b9b7b-04d8-460b-9dcc-2eaed24e17df"}}}],"id":"9811145e-5370-4b70-9b78-465321ab45fc","savedPayload":{"position":{"x":18855.806237131383,"y":25100.164021674413},"targetPosition":{"x":18761.806237131383,"y":25052.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"51962ef2-41d4-47ac-af7a-347903dd082b","savedPayload":{"position":{"x":18568.806237131383,"y":24914.164021674413},"targetPosition":{"x":18661.806237131383,"y":24990.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9e88f3a0-09ad-44fd-a84e-731228860e66"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0be6765d-eece-4bc1-b2ce-7648eaded19d","savedPayload":{"position":{"x":18651.806237131383,"y":24984.164021674413},"targetPosition":{"x":18661.806237131383,"y":24990.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"e2e18af7-af5f-4634-b8a4-4fabd2ddd7a5"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"919317ba-a982-4923-8424-3e08276f9c80","savedPayload":{"position":{"x":18586.806237131383,"y":24948.164021674413},"targetPosition":{"x":18661.806237131383,"y":24990.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"08d916aa-6d2d-497b-8738-9b0966e3901e"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"eea71221-9673-487b-981f-45715215f7fb","savedPayload":{"position":{"x":18750.806237131383,"y":24994.164021674413},"targetPosition":{"x":18661.806237131383,"y":24990.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"70de0f73-5a2d-4a5a-a5f7-1863f192a14d"}}}],"id":"8ee672f3-81b7-4c57-897d-1b3d7bbab104","savedPayload":{"position":{"x":18661.806237131383,"y":24990.164021674413},"targetPosition":{"x":18761.806237131383,"y":25052.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"79a850a4-d468-4e98-ac7a-7a1f74672edb","savedPayload":{"position":{"x":18761.806237131383,"y":25052.164021674413},"targetPosition":{"x":18750.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"5371e534-45f7-4918-922e-bb4709908e8f"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Open Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ea0320d1-98dc-43a9-b97c-564745198dab","savedPayload":{"position":{"x":18788.806237131383,"y":25013.164021674413},"targetPosition":{"x":18777.806237131383,"y":25094.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Open Stage Object","id":"be56e169-d089-4aea-a18a-c01cf16a3485"}}}],"id":"22ad5b2f-17b9-4c69-a776-fa22c29eeb0d","savedPayload":{"position":{"x":18777.806237131383,"y":25094.164021674413},"targetPosition":{"x":18831.806237131383,"y":25043.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6e9d517c-2a3c-4aeb-bcac-d88b2b3bfefb","savedPayload":{"position":{"x":18754.806237131383,"y":25092.164021674413},"targetPosition":{"x":18786.806237131383,"y":25126.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"21db891e-4c47-4a5a-88a5-036297086138"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d6b177e0-e847-4f59-ac34-78be1d59611e","savedPayload":{"position":{"x":18877.806237131383,"y":25122.164021674413},"targetPosition":{"x":18786.806237131383,"y":25126.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"2a3d0d93-13d9-4a9e-8d32-c0aa5d7ab1e3"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"feda2b0b-f67e-4d64-9877-d415cec3e7d3","savedPayload":{"position":{"x":18884.806237131383,"y":25215.164021674413},"targetPosition":{"x":18786.806237131383,"y":25126.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"616f49d0-daaa-4b82-be0d-56504b402616"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c4f61de2-3aec-4070-9441-ef29c2b5cbb9","savedPayload":{"position":{"x":18836.806237131383,"y":25119.164021674413},"targetPosition":{"x":18786.806237131383,"y":25126.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"0fab39ff-8caf-45f8-8650-33d7a65fa6e1"}}}],"id":"827bba27-3604-4d8d-8835-72ee3dbe7105","savedPayload":{"position":{"x":18786.806237131383,"y":25126.164021674413},"targetPosition":{"x":18831.806237131383,"y":25043.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0f55b273-b321-45b7-b259-c43390214404","savedPayload":{"position":{"x":18831.806237131383,"y":25043.164021674413},"targetPosition":{"x":18750.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"e8130bed-debf-479b-89b3-a79932efee63"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Manage Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b55bf1c4-5b28-4cb8-b981-16dd2b6663ae","savedPayload":{"position":{"x":18521.806237131383,"y":25282.164021674413},"targetPosition":{"x":18588.806237131383,"y":25226.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Manage Stage Object","id":"3db5604f-cacf-4c87-b1ea-5aa364bf9f48"}}}],"id":"dd4e7fb7-9a81-4771-b578-db8f4e19310d","savedPayload":{"position":{"x":18588.806237131383,"y":25226.164021674413},"targetPosition":{"x":18660.806237131383,"y":25149.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"158a6a17-790b-41bf-925f-5fa72dd3c4c6","savedPayload":{"position":{"x":18647.806237131383,"y":25155.164021674413},"targetPosition":{"x":18645.806237131383,"y":25082.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"43435aed-68cb-4a56-88c4-2574d91f5b32"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4ef79278-afa0-411b-9be6-fe8c127abf72","savedPayload":{"position":{"x":18708.806237131383,"y":25104.164021674413},"targetPosition":{"x":18645.806237131383,"y":25082.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"904be022-f1e2-475e-9115-88224353cfa2"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"418370a4-83ca-45ee-b946-b70471c42297","savedPayload":{"position":{"x":18680.806237131383,"y":25171.164021674413},"targetPosition":{"x":18645.806237131383,"y":25082.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"4c74d4d8-d0a4-4581-bee7-36485d7a91a5"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6579b13c-115e-4cdc-a911-3b540f56524b","savedPayload":{"position":{"x":18552.806237131383,"y":24986.164021674413},"targetPosition":{"x":18645.806237131383,"y":25082.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"9fc6d2c4-a67b-42e8-841b-7523f7ab4962"}}}],"id":"b7ecddd9-7d3a-4cb7-94e8-d802f001fa44","savedPayload":{"position":{"x":18645.806237131383,"y":25082.164021674413},"targetPosition":{"x":18660.806237131383,"y":25149.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0178be92-3f61-4b14-b789-cf6ca61169d7","savedPayload":{"position":{"x":18660.806237131383,"y":25149.164021674413},"targetPosition":{"x":18750.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"69b6e7c5-7e1e-4027-a7f1-0e1f0675256f"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Close Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8b5e4cad-bc55-430b-8357-b834ef5e2a15","savedPayload":{"position":{"x":18806.806237131383,"y":25220.164021674413},"targetPosition":{"x":18833.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Close Stage Object","id":"069885e7-351f-45dc-8423-113db65b9592"}}}],"id":"fbe53d46-adca-46cd-b690-42d159303a60","savedPayload":{"position":{"x":18833.806237131383,"y":25245.164021674413},"targetPosition":{"x":18740.806237131383,"y":25162.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5d9162e8-a271-4987-84e8-e35bba82b0d7","savedPayload":{"position":{"x":18748.806237131383,"y":25222.164021674413},"targetPosition":{"x":18769.806237131383,"y":25184.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9463d512-21f5-48c1-8cd6-b14747b338cf"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"317a91f6-f8b0-40ef-a734-c529d42aee5b","savedPayload":{"position":{"x":18806.806237131383,"y":25153.164021674413},"targetPosition":{"x":18769.806237131383,"y":25184.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"c3249cad-9f26-4ff2-ab0d-968c66bb7f2d"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bf151b30-7f4e-4dad-8e3b-bc9baef11df2","savedPayload":{"position":{"x":18855.806237131383,"y":25104.164021674413},"targetPosition":{"x":18769.806237131383,"y":25184.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"dbd9d421-d90c-4ab8-a26b-c2254d7abec1"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4e1d5e2c-366a-4f27-aec4-c65baf3b2ce6","savedPayload":{"position":{"x":18715.806237131383,"y":25085.164021674413},"targetPosition":{"x":18769.806237131383,"y":25184.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"a5e40c24-183d-4896-97b0-f9f0f104c240"}}}],"id":"a3abc3cd-c881-4d93-bb98-2ea2fd7a2aba","savedPayload":{"position":{"x":18769.806237131383,"y":25184.164021674413},"targetPosition":{"x":18740.806237131383,"y":25162.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"83bbf174-2468-429a-bba8-88fc0953b43a","savedPayload":{"position":{"x":18740.806237131383,"y":25162.164021674413},"targetPosition":{"x":18750.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"f1dde50b-6e9f-48b1-b6b7-efecf3482e6b"}}}],"layerFolders":[],"id":"92f5dc32-f3d5-4b2e-9be4-86f39e9b7cae","savedPayload":{"position":{"x":18750.806237131383,"y":25142.164021674413},"targetPosition":{"x":18839.806237131383,"y":25089.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"378d77ca-8445-4c72-accb-49b930231842","savedPayload":{"position":{"x":18651.806237131383,"y":25166.164021674413},"targetPosition":{"x":18703.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Object","id":"3d274e02-8896-4311-a0c8-9041b6507090"}}},{"type":"Layer Panel","name":"Position Combined Statistics","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c910697e-89d4-4a5e-8826-6a0801a858f1","savedPayload":{"position":{"x":18644.806237131383,"y":25143.164021674413},"targetPosition":{"x":18703.806237131383,"y":25135.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Combined Statistics","id":"05d6bb3e-f975-471f-be1f-3215025ce6fe"}}}],"id":"2f5544c4-cba0-459e-90b0-7a5e381881f4","savedPayload":{"position":{"x":18703.806237131383,"y":25135.164021674413},"targetPosition":{"x":18670.806237131383,"y":25185.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Entry Target Rate Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0db82cfe-02bf-46d2-882b-93f8beacb61d","savedPayload":{"position":{"x":18637.806237131383,"y":25207.164021674413},"targetPosition":{"x":18699.806237131383,"y":25259.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Entry Target Rate Line","id":"543ebae2-5624-49ad-a00f-df63335e92a9"}}},{"type":"Layer Polygon","name":"Exit Target Rate Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a3ae3f70-15c0-48e7-84f5-8ccfe3966d14","savedPayload":{"position":{"x":18677.806237131383,"y":25173.164021674413},"targetPosition":{"x":18699.806237131383,"y":25259.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Exit Target Rate Line","id":"b066c240-8552-4622-9597-77e812491910"}}}],"id":"61b69ddb-05c1-4a5e-b561-5709e3f1e2c0","savedPayload":{"position":{"x":18699.806237131383,"y":25259.164021674413},"targetPosition":{"x":18670.806237131383,"y":25185.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2f667dca-017a-4aa4-b83b-562e4d4c60a5","savedPayload":{"position":{"x":18670.806237131383,"y":25185.164021674413},"targetPosition":{"x":18762.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"43a929cb-ae2c-4c92-ac1b-0512e35698bd"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"3f1d375b-b266-4a59-9b77-f44524da79a2","savedPayload":{"position":{"x":18858.806237131383,"y":25195.164021674413},"targetPosition":{"x":18777.806237131383,"y":25142.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Base Asset","id":"b4298480-8922-4c40-ac79-b4484f8558bd"}}}],"id":"48c9506d-2074-4dd2-8540-ce1558a0ab53","savedPayload":{"position":{"x":18777.806237131383,"y":25142.164021674413},"targetPosition":{"x":18794.806237131383,"y":25150.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Profit Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"92f75035-f637-4979-b3a8-ac1392b22a2e","savedPayload":{"position":{"x":18886.806237131383,"y":25118.164021674413},"targetPosition":{"x":18873.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Profit Triangle","id":"2628b290-a09a-4807-8a45-7ff5a880d195"}}},{"type":"Layer Polygon","name":"Loss Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"eed5bc5d-2ba7-4cec-88de-942e5c99df62","savedPayload":{"position":{"x":18937.806237131383,"y":25215.164021674413},"targetPosition":{"x":18873.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Loss Triangle","id":"e37cfbb4-fe54-49ad-9525-29b0d77e082b"}}},{"type":"Layer Polygon","name":"Empty Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1e3bd91f-5034-409d-9142-cf4bf550d67e","savedPayload":{"position":{"x":18951.806237131383,"y":25110.164021674413},"targetPosition":{"x":18873.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Empty Triangle","id":"23c30ca5-95ec-47b2-a65f-01969b1a5a78"}}}],"id":"4f2e33b2-07ca-4487-8066-f86007e8e429","savedPayload":{"position":{"x":18873.806237131383,"y":25143.164021674413},"targetPosition":{"x":18794.806237131383,"y":25150.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"59c8665c-ee77-49f1-91ef-dbe4a1a581ec","savedPayload":{"position":{"x":18794.806237131383,"y":25150.164021674413},"targetPosition":{"x":18762.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"7c9968f7-15dd-4bb8-bc15-c67bb955f862"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2e8d9280-4605-440d-90bb-7cdc4f7c8e52","savedPayload":{"position":{"x":18942.806237131383,"y":25087.164021674413},"targetPosition":{"x":18852.806237131383,"y":25139.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Quoted Asset","id":"f15d0a31-30bd-49a6-8c45-1bcd1a9cc5a8"}}}],"id":"4496f7b2-e8eb-4691-ab98-e4d3ebeea502","savedPayload":{"position":{"x":18852.806237131383,"y":25139.164021674413},"targetPosition":{"x":18765.806237131383,"y":25173.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Profit Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6d125c9a-367b-4d3c-ab46-14b0c84ffacf","savedPayload":{"position":{"x":18654.806237131383,"y":25176.164021674413},"targetPosition":{"x":18706.806237131383,"y":25218.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Profit Triangle","id":"9cf82ef4-557e-498e-b121-ff28235b3a25"}}},{"type":"Layer Polygon","name":"Loss Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"aaa456ad-da05-4b89-b923-d7fdc1a51f97","savedPayload":{"position":{"x":18804.806237131383,"y":25172.164021674413},"targetPosition":{"x":18706.806237131383,"y":25218.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Loss Triangle","id":"61faa796-9697-48b0-a582-613e1b351931"}}},{"type":"Layer Polygon","name":"Empty Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"3a9c54bf-1605-4a64-b3b1-db89f7fc7b5d","savedPayload":{"position":{"x":18750.806237131383,"y":25158.164021674413},"targetPosition":{"x":18706.806237131383,"y":25218.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Empty Triangle","id":"58c807a3-8443-43d9-82e9-81c3d0545399"}}}],"id":"30641549-d9d1-46c0-ac63-add98566d8ae","savedPayload":{"position":{"x":18706.806237131383,"y":25218.164021674413},"targetPosition":{"x":18765.806237131383,"y":25173.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81fa059d-4803-4178-b2aa-48809b3ec6bf","savedPayload":{"position":{"x":18765.806237131383,"y":25173.164021674413},"targetPosition":{"x":18762.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"7d90e89f-6c93-4693-8b95-2ab3bee97d10"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Stop Loss Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4aaf5c35-9ec0-4765-b7ec-20413f0ebb82","savedPayload":{"position":{"x":18573.806237131383,"y":25155.164021674413},"targetPosition":{"x":18628.806237131383,"y":25060.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Stop Loss Panel","id":"1b6d3bd0-e594-4b09-9f1c-021177676d84"}}}],"id":"65ea10cb-240d-4f57-a442-f15d134c4731","savedPayload":{"position":{"x":18628.806237131383,"y":25060.164021674413},"targetPosition":{"x":18707.806237131383,"y":25107.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"77b43031-e86b-42db-b4b8-05108b96d302","savedPayload":{"position":{"x":18849.806237131383,"y":25093.164021674413},"targetPosition":{"x":18789.806237131383,"y":25039.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"9d351f29-6a3e-4c2b-b008-ebe1414d2aa8"}}}],"id":"bacc05d5-21bc-42c3-be14-9e00adf08bb5","savedPayload":{"position":{"x":18789.806237131383,"y":25039.164021674413},"targetPosition":{"x":18707.806237131383,"y":25107.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"541f7dc5-5782-4ce7-8f64-7cbf1613050b","savedPayload":{"position":{"x":18707.806237131383,"y":25107.164021674413},"targetPosition":{"x":18762.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"dc91b2a5-ebd9-453f-ad82-a266d7b02ddb"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Take Profit Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"718fad7a-fc90-468f-bb44-efcc1bb74093","savedPayload":{"position":{"x":18761.806237131383,"y":25034.164021674413},"targetPosition":{"x":18773.806237131383,"y":25133.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Take Profit Panel","id":"33aa2293-7958-4cc3-bb41-fc97c17ccd67"}}}],"id":"b8fe91a5-9101-4a3a-a2d9-cb26528f4c35","savedPayload":{"position":{"x":18773.806237131383,"y":25133.164021674413},"targetPosition":{"x":18679.806237131383,"y":25119.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"06cf4a77-5f64-4ef3-848c-420db03ca6b0","savedPayload":{"position":{"x":18785.806237131383,"y":25214.164021674413},"targetPosition":{"x":18721.806237131383,"y":25166.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"a0b598d2-cdb6-4ce7-96c5-ef3317ae1768"}}}],"id":"868fc623-3375-4465-8650-493bb4d96a0b","savedPayload":{"position":{"x":18721.806237131383,"y":25166.164021674413},"targetPosition":{"x":18679.806237131383,"y":25119.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"12efab9a-e794-45fb-8128-5b9b38e0cc55","savedPayload":{"position":{"x":18679.806237131383,"y":25119.164021674413},"targetPosition":{"x":18762.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"baba4109-cd20-480f-8365-29a894345adb"}}}],"layerFolders":[],"id":"c09a6170-b410-48cb-b9a9-d579a1d89508","savedPayload":{"position":{"x":18762.806237131383,"y":25124.164021674413},"targetPosition":{"x":18839.806237131383,"y":25089.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f32f7d17-4c93-45ad-ad8f-154ec80c1003","savedPayload":{"position":{"x":18839.806237131383,"y":25089.164021674413},"targetPosition":{"x":18769.806237131383,"y":25134.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"01e914cc-67f2-4c2b-aaa8-70326a5fe591","savedPayload":{"position":{"x":18769.806237131383,"y":25134.164021674413},"targetPosition":{"x":18819.806237131383,"y":25200.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6251334e-e6ef-4a49-9c62-6e14be48aa79","savedPayload":{"position":{"x":18819.806237131383,"y":25200.164021674413},"targetPosition":{"x":18855.806237131383,"y":25124.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"cf8d109d-711c-4a77-bbbf-ccf3aec891cf"}}},"id":"ea8d8a43-f709-4c73-80fa-215279bae448","savedPayload":{"position":{"x":18855.806237131383,"y":25124.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Masters Data","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Exchange Raw Data","project":"Superalgos","layers":[],"layerFolders":[],"id":"d04c6f38-017c-4618-883a-c4f2c27e4f9f","savedPayload":{"position":{"x":18839.806237131383,"y":25358.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Webhooks","project":"Superalgos","layers":[],"layerFolders":[],"id":"78ce77cf-7751-4761-963a-1d6d60c93db6","savedPayload":{"position":{"x":18729.806237131383,"y":25316.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2ae7ba37-8bfc-45bc-a89f-213369830426","savedPayload":{"position":{"x":18762.806237131383,"y":25523.164021674413},"targetPosition":{"x":18716.806237131383,"y":25477.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candle","id":"9336f4e6-d56b-4ed4-819d-0bb762ba1fdd"}}}],"id":"937f1b91-38a7-4311-8a52-b3f158a5890a","savedPayload":{"position":{"x":18716.806237131383,"y":25477.164021674413},"targetPosition":{"x":18738.806237131383,"y":25417.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4327230d-af40-4cf0-891d-384d5847d518","savedPayload":{"position":{"x":18640.806237131383,"y":25434.164021674413},"targetPosition":{"x":18738.806237131383,"y":25417.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07ba075c-a8dd-4251-b88d-d7848f88ae8e","savedPayload":{"position":{"x":18738.806237131383,"y":25417.164021674413},"targetPosition":{"x":18707.806237131383,"y":25379.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"35b2db18-d9e6-4491-94a5-f99b3ff684ab"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Volume","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f2796bcc-46ea-49f1-a6c4-5b22176c9d05","savedPayload":{"position":{"x":18684.806237131383,"y":25281.164021674413},"targetPosition":{"x":18586.806237131383,"y":25274.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Volume","id":"42dbd098-4550-44a0-987f-54a28dd5f40b"}}}],"id":"a8c15f06-8b52-44e5-9655-59e211378415","savedPayload":{"position":{"x":18586.806237131383,"y":25274.164021674413},"targetPosition":{"x":18659.806237131383,"y":25322.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"90c030eb-7d7b-45d2-8f9e-09c22ed5e604","savedPayload":{"position":{"x":18664.806237131383,"y":25321.164021674413},"targetPosition":{"x":18659.806237131383,"y":25322.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"737ac1b7-e858-4e57-be1e-743b919f0c4a","savedPayload":{"position":{"x":18659.806237131383,"y":25322.164021674413},"targetPosition":{"x":18707.806237131383,"y":25379.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"ff9d5033-c3b6-4612-a206-e3cfaa56d2d0"}}}],"layerFolders":[],"id":"eae4be61-6636-40a6-ad17-69bdd50a256a","savedPayload":{"position":{"x":18707.806237131383,"y":25379.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"27b13382-f9e8-411d-bbc9-06a1deabc606","savedPayload":{"position":{"x":18692.806237131383,"y":25151.164021674413},"targetPosition":{"x":18707.806237131383,"y":25236.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Band","id":"de7b7008-6f66-4d7d-96dd-1aa7b1ede335"}}}],"id":"e4c10077-e579-45a7-9cae-240394dd8665","savedPayload":{"position":{"x":18707.806237131383,"y":25236.164021674413},"targetPosition":{"x":18701.806237131383,"y":25269.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"0c011ebd-a113-4d96-b000-390896ddd4e5","savedPayload":{"position":{"x":18800.806237131383,"y":25201.164021674413},"targetPosition":{"x":18701.806237131383,"y":25269.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b457abc6-bf71-4577-b275-267085de9436","savedPayload":{"position":{"x":18701.806237131383,"y":25269.164021674413},"targetPosition":{"x":18732.806237131383,"y":25220.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"3dfbee36-5671-46d2-8135-246c5c7da7f1"}}},{"type":"Layer","name":"Percentage Bandwidth","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"%B Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b3d80a43-f8da-4fb8-9d3f-a465daf60e55","savedPayload":{"position":{"x":18601.806237131383,"y":25323.164021674413},"targetPosition":{"x":18656.806237131383,"y":25291.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"%B Panel","id":"36548f31-d96c-4c80-b923-dea5dd5b56c7"}}}],"id":"b08cd767-567a-469c-a258-7bf1387ab1fc","savedPayload":{"position":{"x":18656.806237131383,"y":25291.164021674413},"targetPosition":{"x":18694.806237131383,"y":25193.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Area From 0 to 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"52054935-e9c3-4a2a-87c1-656c91edcae9","savedPayload":{"position":{"x":18647.806237131383,"y":25116.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 0 to 30","id":"d76f185f-5219-4f0b-adb3-9a339b0468c6"}}},{"type":"Layer Polygon","name":"Area From 30 to 70","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b598eb37-5a8c-4e6f-a556-93d247145f60","savedPayload":{"position":{"x":18733.806237131383,"y":25159.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 30 to 70","id":"1a7969dd-af18-4e44-b4c9-96dd2be57f7c"}}},{"type":"Layer Polygon","name":"Area From 70 to 100","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"626cddf7-f233-473c-914d-dffdc64d5859","savedPayload":{"position":{"x":18754.806237131383,"y":25178.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 70 to 100","id":"cb1bcd11-0fb0-4377-bff2-dee4630e0f3f"}}},{"type":"Layer Polygon","name":"Line 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7a3063c7-cbf0-46ef-9d34-6d9ce9f2a1cb","savedPayload":{"position":{"x":18600.806237131383,"y":25087.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Line 30","id":"857043cc-f467-44d2-89eb-2e73f35f638d"}}},{"type":"Layer Polygon","name":"Line 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"40bd3044-c7b5-462f-94d1-1453c0c73e8f","savedPayload":{"position":{"x":18682.806237131383,"y":25121.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Line 30","id":"984a1917-1d81-4142-a50f-269a18a07c9d"}}},{"type":"Layer Polygon","name":"Bandwidth","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2c4831d9-d952-493f-a240-9d77698adb4a","savedPayload":{"position":{"x":18629.806237131383,"y":25001.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Bandwidth","id":"0f7a4004-177c-4412-b0ef-2608f3c13da6"}}},{"type":"Layer Polygon","name":"Value","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"af305180-3a30-4b47-8436-8c2e852cf6dc","savedPayload":{"position":{"x":18712.806237131383,"y":25069.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Value","id":"4598a671-83b9-4460-9e65-175df73eba71"}}},{"type":"Layer Polygon","name":"Moving Average","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"59b0bfdd-101d-45a4-a69e-8840e6b063f2","savedPayload":{"position":{"x":18778.806237131383,"y":25140.164021674413},"targetPosition":{"x":18700.806237131383,"y":25098.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Moving Average","id":"69c19382-ed5b-48d1-9249-426a8e1e4e51"}}}],"id":"688473fd-f2c4-4e96-a96d-78e539bfcc9d","savedPayload":{"position":{"x":18700.806237131383,"y":25098.164021674413},"targetPosition":{"x":18694.806237131383,"y":25193.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"eb22cd29-8a1a-47c4-a912-d96db2c5763e","savedPayload":{"position":{"x":18694.806237131383,"y":25193.164021674413},"targetPosition":{"x":18732.806237131383,"y":25220.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Percentage Bandwidth","id":"b0d61c8d-0d8b-42a3-874a-e3cc297c8f30"}}}],"layerFolders":[],"id":"2f62c52e-2ae1-4c83-96c8-79149681117f","savedPayload":{"position":{"x":18732.806237131383,"y":25220.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"781cb0cf-ae5c-45fc-8668-ee2b70a7b65d","savedPayload":{"position":{"x":19004.806237131383,"y":25366.164021674413},"targetPosition":{"x":18981.806237131383,"y":25296.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Channels Objects","id":"09c8f781-3e54-4bed-bd9a-83e8179fdd66"}}}],"id":"1933dcdb-af4b-41e6-9ed3-d9d246478b67","savedPayload":{"position":{"x":18981.806237131383,"y":25296.164021674413},"targetPosition":{"x":18904.806237131383,"y":25244.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4e8e202a-1443-4783-86b5-dc6a5976859d","savedPayload":{"position":{"x":18869.806237131383,"y":25130.164021674413},"targetPosition":{"x":18964.806237131383,"y":25198.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"6e21446c-93e7-44ad-814d-3cd2fa8f8baf"}}}],"id":"3e60681e-2869-43d6-bb5e-3471957996cb","savedPayload":{"position":{"x":18964.806237131383,"y":25198.164021674413},"targetPosition":{"x":18904.806237131383,"y":25244.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"459dcd36-df47-41d5-ba76-9c8e98d2259e","savedPayload":{"position":{"x":18904.806237131383,"y":25244.164021674413},"targetPosition":{"x":18824.806237131383,"y":25254.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels Objects","id":"163096b0-76eb-4b22-8fb5-f9593675d6e3"}}},{"type":"Layer","name":"Bollinger Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b92e7ab7-5abd-4b49-b123-e6033f83673e","savedPayload":{"position":{"x":18901.806237131383,"y":25101.164021674413},"targetPosition":{"x":18887.806237131383,"y":25082.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Channels","id":"abb4f289-c374-43e0-b8dc-d586d8e3328e"}}}],"id":"ed75e3d5-f6e5-4b8d-b296-72d493bedd16","savedPayload":{"position":{"x":18887.806237131383,"y":25082.164021674413},"targetPosition":{"x":18852.806237131383,"y":25164.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"7350bfc8-25e0-4d27-bcb5-334f48c12974","savedPayload":{"position":{"x":18933.806237131383,"y":25170.164021674413},"targetPosition":{"x":18852.806237131383,"y":25164.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d89bb079-aa4f-4b73-98ef-d6f6db32c4c8","savedPayload":{"position":{"x":18852.806237131383,"y":25164.164021674413},"targetPosition":{"x":18824.806237131383,"y":25254.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels","id":"6c67459b-bb1e-435d-91de-06426d1bd4a3"}}},{"type":"Layer","name":"Bollinger Sub-Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Sub Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b5d15389-f620-4111-a798-456e4915feb7","savedPayload":{"position":{"x":18804.806237131383,"y":25354.164021674413},"targetPosition":{"x":18764.806237131383,"y":25293.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Sub Channels Objects","id":"8ce4c7ca-3496-4df8-9d57-335d40cc77a0"}}}],"id":"e0be5e64-fc9f-446a-ade6-281347a92ca9","savedPayload":{"position":{"x":18764.806237131383,"y":25293.164021674413},"targetPosition":{"x":18773.806237131383,"y":25257.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"58fe233c-74df-4cac-ae07-e0b077e59ee6","savedPayload":{"position":{"x":18821.806237131383,"y":25261.164021674413},"targetPosition":{"x":18773.806237131383,"y":25257.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7fea49e5-c0f5-498a-ac60-42d434cd0751","savedPayload":{"position":{"x":18773.806237131383,"y":25257.164021674413},"targetPosition":{"x":18824.806237131383,"y":25254.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"fe561a7b-7453-4bdc-ac2f-596e4e83854e"}}},{"type":"Layer","name":"Bollinger Sub-Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Sub Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"991d2499-9c6d-4288-a569-19cc1fc18eec","savedPayload":{"position":{"x":18913.806237131383,"y":25229.164021674413},"targetPosition":{"x":18824.806237131383,"y":25294.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Sub Channels","id":"1beae26c-7235-46ef-a732-1d0c9f18dda5"}}}],"id":"61a0c095-fcf7-4982-9c54-5848719c906a","savedPayload":{"position":{"x":18824.806237131383,"y":25294.164021674413},"targetPosition":{"x":18755.806237131383,"y":25277.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d7aa06c1-3daf-4e20-b1be-cc287fd74c2d","savedPayload":{"position":{"x":18850.806237131383,"y":25253.164021674413},"targetPosition":{"x":18755.806237131383,"y":25277.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c33f5067-9feb-4b47-9184-aec8bcb25779","savedPayload":{"position":{"x":18755.806237131383,"y":25277.164021674413},"targetPosition":{"x":18824.806237131383,"y":25254.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels","id":"0ee8225c-fa64-462e-adc6-cef19daf53e3"}}}],"layerFolders":[],"id":"3f2abcb9-f500-4881-8f94-633370bd6195","savedPayload":{"position":{"x":18824.806237131383,"y":25254.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candle Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Candles Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candles Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c492f2df-26b8-4a65-a907-0ad2cca8560a","savedPayload":{"position":{"x":18946.806237131383,"y":25352.164021674413},"targetPosition":{"x":18865.806237131383,"y":25408.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candles Channels","id":"d21f5c62-0455-4671-89c1-f9d96a75f349"}}}],"id":"872d7086-5be6-4f20-9f09-19b38c498306","savedPayload":{"position":{"x":18865.806237131383,"y":25408.164021674413},"targetPosition":{"x":18838.806237131383,"y":25347.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"e3c0529f-44da-4573-89d8-9c15a4f9a590","savedPayload":{"position":{"x":18821.806237131383,"y":25388.164021674413},"targetPosition":{"x":18838.806237131383,"y":25347.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"902f0c26-1e23-410a-8f04-76e34cc65476","savedPayload":{"position":{"x":18838.806237131383,"y":25347.164021674413},"targetPosition":{"x":18819.806237131383,"y":25256.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles Channels","id":"e9be1c1b-00a5-4d46-9c61-7c58d8d674a8"}}},{"type":"Layer","name":"Candles Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candles Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6cc98bf6-6794-4890-bbf4-fcf531e46745","savedPayload":{"position":{"x":18749.806237131383,"y":25158.164021674413},"targetPosition":{"x":18832.806237131383,"y":25240.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candles Channels Objects","id":"8b63674c-b728-4a00-8b3c-331d7ba2a93b"}}}],"id":"6f715c9e-4c87-4cdc-9f07-b4967afb7f89","savedPayload":{"position":{"x":18832.806237131383,"y":25240.164021674413},"targetPosition":{"x":18814.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5877d279-fd90-4d49-978e-235ee9557ce5","savedPayload":{"position":{"x":18888.806237131383,"y":25141.164021674413},"targetPosition":{"x":18875.806237131383,"y":25200.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"5383ea8f-c9ed-463e-a7d4-dc5cb6c40dff"}}}],"id":"5264726a-b017-4928-91dc-15d976b0f01c","savedPayload":{"position":{"x":18875.806237131383,"y":25200.164021674413},"targetPosition":{"x":18814.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a18bf59b-b2be-4895-9646-6b650decbc0b","savedPayload":{"position":{"x":18814.806237131383,"y":25172.164021674413},"targetPosition":{"x":18819.806237131383,"y":25256.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles Channels Objects","id":"c2d145fa-f516-46c3-9868-4d2a0953c7ec"}}}],"layerFolders":[],"id":"b601cd88-fef3-41b4-a496-4e88d6897d00","savedPayload":{"position":{"x":18819.806237131383,"y":25256.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Resistances and Supports","project":"Superalgos","layers":[{"type":"Layer","name":"Resistances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Resistance Bounces","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0e79be13-5a13-471d-b32a-cc77b906ba86","savedPayload":{"position":{"x":18780.806237131383,"y":25275.164021674413},"targetPosition":{"x":18722.806237131383,"y":25214.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Bounces","id":"ae66154f-2772-495c-a77b-1989dba9a3e7"}}},{"type":"Layer Panel","name":"Resistance Levels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"63ebf34a-98b7-4217-92ab-d6722582a9c8","savedPayload":{"position":{"x":18778.806237131383,"y":25181.164021674413},"targetPosition":{"x":18722.806237131383,"y":25214.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Levels","id":"dfd9d091-e377-4ece-be8c-5916271e161b"}}},{"type":"Layer Panel","name":"Resistance Zone Sizes","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7b7919cb-9bd9-40a1-9938-d2a931ef41ca","savedPayload":{"position":{"x":18776.806237131383,"y":25156.164021674413},"targetPosition":{"x":18722.806237131383,"y":25214.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Zone Sizes","id":"5341a87b-52b4-455d-b8f6-d1cbc4102fb1"}}}],"id":"57101252-4bc6-44dc-87f5-c2c5e408f3c1","savedPayload":{"position":{"x":18722.806237131383,"y":25214.164021674413},"targetPosition":{"x":18658.806237131383,"y":25198.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Resistance Line 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"80808482-6006-4a87-a7ab-fa41e3e83be1","savedPayload":{"position":{"x":18768.806237131383,"y":25196.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 1","id":"0c38b25a-d207-430e-ae5a-9ba55227c974"}}},{"type":"Layer Polygon","name":"Resistance Line 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0059d8ef-0264-45e9-a322-e990d7ef7f36","savedPayload":{"position":{"x":18815.806237131383,"y":25114.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 2","id":"532beef7-8d2e-4899-9c99-850db799d9a2"}}},{"type":"Layer Polygon","name":"Resistance Line 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7f4c7e3d-c33e-4fa0-8334-eeefc654f9ac","savedPayload":{"position":{"x":18693.806237131383,"y":25223.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 3","id":"9eb7ed64-8225-41de-ab73-3297d19e1529"}}},{"type":"Layer Polygon","name":"Resistance Line 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9b3095cb-a2d0-4dd8-9ef9-6d60754a5d51","savedPayload":{"position":{"x":18821.806237131383,"y":25060.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 4","id":"b8b29e5a-49aa-45cb-b6f3-0ba78dd97899"}}},{"type":"Layer Polygon","name":"Resistance Line 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5ba8ac8d-047a-4a81-8b0d-9f4db12bbdd3","savedPayload":{"position":{"x":18636.806237131383,"y":25180.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 5","id":"0582dc0b-1512-4762-8340-aabeadad6643"}}},{"type":"Layer Polygon","name":"Resistance Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b53a4418-1623-4c4c-b529-59fc9b4bed6b","savedPayload":{"position":{"x":18649.806237131383,"y":25078.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Base","id":"c62d156c-4686-45a4-af42-283999dd1200"}}},{"type":"Layer Polygon","name":"Resistance Zone 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ab743b5e-8594-4b9c-9989-2b8546d5f9c6","savedPayload":{"position":{"x":18732.806237131383,"y":25193.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 1","id":"ca9666cf-e40b-46af-902d-050c1956b702"}}},{"type":"Layer Polygon","name":"Resistance Zone 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b30512e6-3ddf-4b0a-bd2f-189b0bc00282","savedPayload":{"position":{"x":18676.806237131383,"y":25144.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 2","id":"3032c972-5916-496b-9aec-fb9f49a9237f"}}},{"type":"Layer Polygon","name":"Resistance Zone 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8e538f83-ea12-4ec1-970a-170a2d1ea46c","savedPayload":{"position":{"x":18798.806237131383,"y":25188.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 3","id":"753efd9a-f48d-4826-89ac-7f046667a26c"}}},{"type":"Layer Polygon","name":"Resistance Zone 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7d642a5c-9f95-435b-a59b-f31e2c7f8b3e","savedPayload":{"position":{"x":18678.806237131383,"y":25181.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 4","id":"0fb57b23-fb5d-429c-bc75-84008becc00e"}}},{"type":"Layer Polygon","name":"Resistance Zone 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"34e78e94-0097-459d-823f-2ad5e5f32e24","savedPayload":{"position":{"x":18828.806237131383,"y":25081.164021674413},"targetPosition":{"x":18733.806237131383,"y":25156.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 5","id":"550e31bb-a95f-4fad-bfbb-b42aae7dc5d3"}}}],"id":"0c0a5ec7-b2e2-4e4b-bf7d-8f5524576479","savedPayload":{"position":{"x":18733.806237131383,"y":25156.164021674413},"targetPosition":{"x":18658.806237131383,"y":25198.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"31826a42-0ce1-4036-9f86-0cc4ecc5d8bd","savedPayload":{"position":{"x":18658.806237131383,"y":25198.164021674413},"targetPosition":{"x":18727.806237131383,"y":25231.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Resistances","id":"99da949c-d4fe-4ebe-ac5b-8180e2c35f2b"}}},{"type":"Layer","name":"Supports","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Support Levels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1cb7690a-0f7d-4e60-b26f-57c9e0fd4ea2","savedPayload":{"position":{"x":18737.806237131383,"y":25248.164021674413},"targetPosition":{"x":18780.806237131383,"y":25195.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Levels","id":"635f72c8-0556-46db-87cf-4c15449c1e70"}}},{"type":"Layer Panel","name":"Support Bounces","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"032f1c1d-5b0e-4a03-9332-51663a807fb4","savedPayload":{"position":{"x":18843.806237131383,"y":25132.164021674413},"targetPosition":{"x":18780.806237131383,"y":25195.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Bounces","id":"7d34b4e7-0593-4b2a-8e4f-a06e6625f6d5"}}},{"type":"Layer Panel","name":"Support Zone Sizes","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"18af54fe-80fd-44e5-ac21-3b5baa8d4a78","savedPayload":{"position":{"x":18841.806237131383,"y":25161.164021674413},"targetPosition":{"x":18780.806237131383,"y":25195.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Zone Sizes","id":"24739677-7e84-4013-81db-db4de744c467"}}}],"id":"ade95f1d-35ba-45a3-8d83-aab21619bc31","savedPayload":{"position":{"x":18780.806237131383,"y":25195.164021674413},"targetPosition":{"x":18761.806237131383,"y":25221.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Support Line 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"81c501e8-0d84-42fa-b292-e90b6db20ea5","savedPayload":{"position":{"x":18712.806237131383,"y":25289.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 1","id":"8baf5a5e-fde5-4405-aea2-035bfa3872c1"}}},{"type":"Layer Polygon","name":"Support Line 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ac08a6f8-83ff-4b6c-8778-1cd3b5d92815","savedPayload":{"position":{"x":18730.806237131383,"y":25232.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 2","id":"baca2e09-2b91-4b8b-9176-e758bfcb4258"}}},{"type":"Layer Polygon","name":"Support Line 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1bb94278-2f35-4d7b-8a75-c47a2e40810e","savedPayload":{"position":{"x":18583.806237131383,"y":25339.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 3","id":"fbe179c2-99ac-44f0-952c-c9ebb205b252"}}},{"type":"Layer Polygon","name":"Support Line 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4e219ff6-1fc9-44e7-be8b-f8edb7496663","savedPayload":{"position":{"x":18668.806237131383,"y":25286.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 4","id":"764238be-83c1-4523-a7a8-8f8245651b61"}}},{"type":"Layer Polygon","name":"Support Line 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a854d971-a46f-4cbd-a538-5da40ad52294","savedPayload":{"position":{"x":18635.806237131383,"y":25161.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 5","id":"96977063-3da0-4745-9c71-782818e4a157"}}},{"type":"Layer Polygon","name":"Support Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"97558f43-d068-4084-b0c3-aa8ec8a71eaa","savedPayload":{"position":{"x":18774.806237131383,"y":25341.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Base","id":"b4567b9b-e1e1-463b-bf64-ab3e25bcbced"}}},{"type":"Layer Polygon","name":"Support Zone 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bc2946c2-8b2f-4591-aebf-ebc01a4c8595","savedPayload":{"position":{"x":18724.806237131383,"y":25193.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 1","id":"d4705ff6-d94b-4f94-8fd0-9215cf9844ad"}}},{"type":"Layer Polygon","name":"Support Zone 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8ef4d195-b8ef-4a21-b5f0-560e7740a7d9","savedPayload":{"position":{"x":18640.806237131383,"y":25154.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 2","id":"40c0fced-4d4b-476f-becb-4201ccb21c2f"}}},{"type":"Layer Polygon","name":"Support Zone 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d300e1b7-4c3c-40c0-b9d0-b92dfc9d00fa","savedPayload":{"position":{"x":18671.806237131383,"y":25256.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 3","id":"dfa786b7-df65-4c51-b088-dd550ae0c5df"}}},{"type":"Layer Polygon","name":"Support Zone 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ad21f3b2-2b2f-422a-a07e-4655b8f4b8da","savedPayload":{"position":{"x":18681.806237131383,"y":25251.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 4","id":"c246d453-c21e-4977-a94c-395c8ddfcee1"}}},{"type":"Layer Polygon","name":"Support Zone 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1f34f07c-7183-4bff-b489-a074f04425f4","savedPayload":{"position":{"x":18775.806237131383,"y":25288.164021674413},"targetPosition":{"x":18679.806237131383,"y":25245.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 5","id":"be7397f9-5610-4d38-86ee-90c2dfceceef"}}}],"id":"0cda18ec-951e-4d4a-a845-9dee57a303f3","savedPayload":{"position":{"x":18679.806237131383,"y":25245.164021674413},"targetPosition":{"x":18761.806237131383,"y":25221.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"507d5e7e-f0cb-4593-8485-c79d86fc0259","savedPayload":{"position":{"x":18761.806237131383,"y":25221.164021674413},"targetPosition":{"x":18727.806237131383,"y":25231.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Supports","id":"bfd82272-44a7-44de-b293-e48728625231"}}}],"layerFolders":[],"id":"dfe8714a-5dbf-4293-a86c-71a90ba8a796","savedPayload":{"position":{"x":18727.806237131383,"y":25231.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Fees Band","project":"Superalgos","layers":[{"type":"Layer","name":"Fees Band 0.2","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"e9d2c915-8d45-4003-97c2-47128d7f579b","savedPayload":{"position":{"x":18919.806237131383,"y":25188.164021674413},"targetPosition":{"x":18870.806237131383,"y":25240.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1933ce4e-f80e-4a2a-a63c-229146c4e16e","savedPayload":{"position":{"x":18957.806237131383,"y":25227.164021674413},"targetPosition":{"x":18966.806237131383,"y":25249.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"170768fe-218b-4efc-84b1-7fe4360c4bc6"}}},{"type":"Layer Polygon","name":"Upper Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"832fa150-9bcc-4db8-96b8-35e13945c241","savedPayload":{"position":{"x":19040.806237131383,"y":25216.164021674413},"targetPosition":{"x":18966.806237131383,"y":25249.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Upper Line","id":"93a6b8eb-8c5d-4661-858f-9eb37058f104"}}},{"type":"Layer Polygon","name":"Lower Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"06520c13-7c70-4b1d-95df-4619aaae66e1","savedPayload":{"position":{"x":18929.806237131383,"y":25320.164021674413},"targetPosition":{"x":18966.806237131383,"y":25249.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Lower Line","id":"3ccd3764-3fbe-4da1-929f-4b349e4cc8fa"}}}],"id":"6d468503-ab8f-4705-ac0f-3358eaf6fe2b","savedPayload":{"position":{"x":18966.806237131383,"y":25249.164021674413},"targetPosition":{"x":18870.806237131383,"y":25240.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f153a22e-6c62-4cee-96cc-991ee8d67c01","savedPayload":{"position":{"x":18870.806237131383,"y":25240.164021674413},"targetPosition":{"x":18781.806237131383,"y":25211.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Fees Band 0.2","id":"86e9384d-a022-4af2-b98d-ec2b518a3e03"}}}],"layerFolders":[],"id":"ff71ddef-5a7c-48ce-9912-90065bf5af0a","savedPayload":{"position":{"x":18781.806237131383,"y":25211.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Volume Analysis","project":"Superalgos","layers":[{"type":"Layer","name":"Volume Analysis","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"8dc4ac11-72f1-4efd-b1f0-c7af4f36d632","savedPayload":{"position":{"x":18657.806237131383,"y":25214.164021674413},"targetPosition":{"x":18602.806237131383,"y":25271.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Buy Volume Bar","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"30aa6aa9-d26a-4b65-b2d8-9d1206bc95a8","savedPayload":{"position":{"x":18732.806237131383,"y":25209.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy Volume Bar","id":"11f192dc-eb4a-48ee-81cc-a484285bfe6f"}}},{"type":"Layer Polygon","name":"Sell Volume Bar","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bbcac53f-8e6e-459c-bffb-f79ad56e62a6","savedPayload":{"position":{"x":18679.806237131383,"y":25267.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell Volume Bar","id":"480b24b1-8ee9-4018-86d1-362f149f7881"}}},{"type":"Layer Polygon","name":"Buy SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5cc29f79-de60-4bbf-9d99-5dd42b245647","savedPayload":{"position":{"x":18709.806237131383,"y":25101.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy SMA 20","id":"ec629e5c-341a-4cc3-8ebd-61327c596cbd"}}},{"type":"Layer Polygon","name":"Sell SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"282f3657-e179-4152-95fc-e3c9bc3b0634","savedPayload":{"position":{"x":18615.806237131383,"y":25242.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell SMA 20","id":"b85ff160-cf73-452a-b824-58010659c377"}}},{"type":"Layer Polygon","name":"Buy SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bf6935fa-008d-47a4-8d58-6c41a58fdfb0","savedPayload":{"position":{"x":18586.806237131383,"y":25240.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy SMA 20","id":"6b7e1de7-03c6-42e1-b965-83f3ed9f0c29"}}},{"type":"Layer Polygon","name":"Sell SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4830d10b-a4bc-41e1-a19a-c151499628fb","savedPayload":{"position":{"x":18592.806237131383,"y":25205.164021674413},"targetPosition":{"x":18666.806237131383,"y":25172.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell SMA 20","id":"79bbc8bc-1138-4669-b0b3-9113cdde1353"}}}],"id":"bb697421-192b-456f-ba41-478f52178290","savedPayload":{"position":{"x":18666.806237131383,"y":25172.164021674413},"targetPosition":{"x":18602.806237131383,"y":25271.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8bdc9fc0-c824-4f0f-a06c-69e876588d51","savedPayload":{"position":{"x":18602.806237131383,"y":25271.164021674413},"targetPosition":{"x":18687.806237131383,"y":25307.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volume Analysis","id":"bae93f19-110a-450f-b7a2-ddd85c7ef21d"}}}],"layerFolders":[],"id":"dbb416c6-7dfa-4cb7-b332-73cb089d06bc","savedPayload":{"position":{"x":18687.806237131383,"y":25307.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candle Analysis","project":"Superalgos","layers":[{"type":"Layer","name":"Candle Analysis","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Current Candle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c59ba0a0-9fd7-49b9-a018-8f2c24e01f83","savedPayload":{"position":{"x":18704.806237131383,"y":25303.164021674413},"targetPosition":{"x":18802.806237131383,"y":25358.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Current Candle","id":"2e9d7744-eb1c-40f0-bc8c-46426e14691d"}}},{"type":"Layer Panel","name":"Last 24 Hs","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e769d7da-4d00-4a25-b434-27bca36bc623","savedPayload":{"position":{"x":18742.806237131383,"y":25400.164021674413},"targetPosition":{"x":18802.806237131383,"y":25358.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Last 24 Hs","id":"7a840ca8-b174-45f5-a23e-eb333d46e295"}}}],"id":"8ee102b5-8550-4d40-a864-d959e1795f53","savedPayload":{"position":{"x":18802.806237131383,"y":25358.164021674413},"targetPosition":{"x":18818.806237131383,"y":25310.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Min Max Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6f044c8c-e43e-4785-b5a6-713719c146c0","savedPayload":{"position":{"x":18823.806237131383,"y":25219.164021674413},"targetPosition":{"x":18821.806237131383,"y":25228.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Min Max Band","id":"b055b3b0-ee85-4d6a-bb97-7c746bf75cb3"}}},{"type":"Layer Polygon","name":"Open Close Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c37ff91b-062a-45a7-bdb9-a8b74edb5c37","savedPayload":{"position":{"x":18882.806237131383,"y":25157.164021674413},"targetPosition":{"x":18821.806237131383,"y":25228.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Close Band","id":"d43d1db4-07e3-4e86-a7e7-c71774e461d7"}}}],"id":"478896b3-572f-4d8b-bcd1-de8f6038146b","savedPayload":{"position":{"x":18821.806237131383,"y":25228.164021674413},"targetPosition":{"x":18818.806237131383,"y":25310.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"86c8f0e9-8293-495b-ac6b-e56eef10b0b1","savedPayload":{"position":{"x":18818.806237131383,"y":25310.164021674413},"targetPosition":{"x":18822.806237131383,"y":25258.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candle Analysis","id":"2532eebb-09d1-4a98-8044-c2f7b597ddef"}}}],"layerFolders":[],"id":"e4600746-3302-48e9-b8ed-60da4a2e8c9e","savedPayload":{"position":{"x":18822.806237131383,"y":25258.164021674413},"targetPosition":{"x":18763.806237131383,"y":25306.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8f0a7090-c222-4108-aa4b-e8faf7e3ef7c","savedPayload":{"position":{"x":18763.806237131383,"y":25306.164021674413},"targetPosition":{"x":18807.806237131383,"y":25214.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"b25b2a76-5d96-409d-9ad3-7e56f9e4ce58"}}},"id":"30a0880b-21ee-4c7d-8e4b-b4b9cd4d3f7c","savedPayload":{"position":{"x":18807.806237131383,"y":25214.164021674413},"targetPosition":{"x":18785.806237131383,"y":25143.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"786a79c7-d630-4f8c-9e51-76442e8a0234","savedPayload":{"position":{"x":18600.806237131383,"y":25502.971642809745},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Lightning Strike","id":"356dc8f5-bcd3-4d0a-9bad-8d389ef1f6c2"}}}],"id":"97979c42-ea93-4e10-8af1-20a6658b6d57","savedPayload":{"position":{"x":18750.806237131383,"y":25243.164021674413},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Testing Environment","name":"New Testing Environment","id":"5882d8a8-345b-4188-b1c1-797e9ff805d9"}}},{"type":"Dashboard","name":"Production Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Lightning Strike Live Trading Session My Computer Binance BTC/USDT","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"fromDate\": \"2018-01-01\",\n\"toDate\": \"2020-12-31\"\n}","project":"Superalgos","id":"9e4c17be-e9ce-4267-86d7-a7322ae3169f","savedPayload":{"position":{"x":18857.806237131383,"y":24716.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"minValue\": 0,\n\"maxValue\": 25000\n}","project":"Superalgos","id":"7cad3fd5-55b0-40bc-bc2d-1929acc19b99","savedPayload":{"position":{"x":18680.806237131383,"y":24729.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"bc20a578-8f79-48ac-afdf-3ef8eabdf531","savedPayload":{"position":{"x":18836.806237131383,"y":24541.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Counters","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2cd46e8e-2c0a-41e6-bc74-7ec8425208df","savedPayload":{"position":{"x":18738.806237131383,"y":24482.548779403747},"targetPosition":{"x":18671.806237131383,"y":24502.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Counters","id":"2a5783fe-af9a-443c-b4e7-32d8bdabff82"}}}],"id":"d878019c-a098-4deb-8440-44363c74d0ac","savedPayload":{"position":{"x":18671.806237131383,"y":24502.548779403747},"targetPosition":{"x":18744.806237131383,"y":24570.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"ac77c6b0-8704-4ba9-b8d0-e070962e3b13","savedPayload":{"position":{"x":18792.806237131383,"y":24643.548779403747},"targetPosition":{"x":18744.806237131383,"y":24570.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff83b565-c27b-41ac-bc78-eecd96aa5012","savedPayload":{"position":{"x":18744.806237131383,"y":24570.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"2578d2bb-7b5e-4e93-b0e3-08efa77de4ff"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Statistics","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7fa9b970-ffd5-4c7d-aa1e-02bd9eeb60fc","savedPayload":{"position":{"x":18744.806237131383,"y":24319.548779403747},"targetPosition":{"x":18744.806237131383,"y":24415.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Statistics","id":"6ea43033-418d-4d87-b640-02010679aa8b"}}}],"id":"c5f45985-c433-487a-b50f-869de356cea8","savedPayload":{"position":{"x":18744.806237131383,"y":24415.548779403747},"targetPosition":{"x":18645.806237131383,"y":24509.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"fd339049-85c7-4383-a848-a03189c41cb0","savedPayload":{"position":{"x":18558.806237131383,"y":24575.548779403747},"targetPosition":{"x":18645.806237131383,"y":24509.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"37bfc28d-4220-4447-876f-2532c88cf779","savedPayload":{"position":{"x":18645.806237131383,"y":24509.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"63d78303-86e6-4594-a953-7edc7bc0a390"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"343b3b29-37ff-4d7c-9d8d-6b2b045604a1","savedPayload":{"position":{"x":18529.806237131383,"y":24629.548779403747},"targetPosition":{"x":18603.806237131383,"y":24632.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"20b4e30b-93c5-4fd9-bef0-4d6810a225d9","savedPayload":{"position":{"x":18561.806237131383,"y":24715.548779403747},"targetPosition":{"x":18603.806237131383,"y":24632.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fab5210e-be81-4010-87e1-b9a4c8291279","savedPayload":{"position":{"x":18603.806237131383,"y":24632.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"fefa6656-76dd-437f-a219-90f988bd607f"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Current Balance","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c0b7c85d-6a2d-4cb6-a1d0-81b65ce6db4a","savedPayload":{"position":{"x":18580.806237131383,"y":24508.548779403747},"targetPosition":{"x":18628.806237131383,"y":24448.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Current Balance","id":"cb03ef16-522f-4189-ab3a-b410bf1f4176"}}}],"id":"050a05d5-3619-4dd9-a5df-28d89033da01","savedPayload":{"position":{"x":18628.806237131383,"y":24448.548779403747},"targetPosition":{"x":18606.806237131383,"y":24518.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"1894091f-c17c-41a5-a86a-4396b09a3e83","savedPayload":{"position":{"x":18569.806237131383,"y":24498.548779403747},"targetPosition":{"x":18606.806237131383,"y":24518.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d1dd5908-9248-4210-aa91-20db7bd2de8c","savedPayload":{"position":{"x":18606.806237131383,"y":24518.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"a5cb8a8a-5309-45af-ac9d-5f27d5d923a3"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"8699233b-f630-4077-b89e-b75585daffdf","savedPayload":{"position":{"x":18664.806237131383,"y":24689.548779403747},"targetPosition":{"x":18646.806237131383,"y":24605.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"32b79fdd-bb25-47ee-b38f-17fc29dac05a","savedPayload":{"position":{"x":18579.806237131383,"y":24616.548779403747},"targetPosition":{"x":18646.806237131383,"y":24605.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"93aa9ff8-8106-4070-8d32-41b920821fb9","savedPayload":{"position":{"x":18646.806237131383,"y":24605.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"fef8e3d2-7730-48eb-afa3-baf59cfeac3c"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"2b8e6c31-f7c8-4f31-9582-dd89ff4f1fc0","savedPayload":{"position":{"x":18707.806237131383,"y":24587.548779403747},"targetPosition":{"x":18668.806237131383,"y":24609.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"11c48654-2bb9-4a51-b703-1f71b3c73a18","savedPayload":{"position":{"x":18764.806237131383,"y":24583.548779403747},"targetPosition":{"x":18668.806237131383,"y":24609.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"37ba2b51-40ba-4389-acac-025904c372e6","savedPayload":{"position":{"x":18668.806237131383,"y":24609.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"25f77993-166a-4a6d-ac8a-6667361b2855"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"997a259c-1144-4c8e-b381-f3dcb3297de2","savedPayload":{"position":{"x":18813.806237131383,"y":24636.548779403747},"targetPosition":{"x":18729.806237131383,"y":24651.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"47d9ffcc-d012-447f-a481-238d383d7c29","savedPayload":{"position":{"x":18711.806237131383,"y":24686.548779403747},"targetPosition":{"x":18729.806237131383,"y":24651.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"54b8aa67-c645-4a36-af61-c6b090ea41cf","savedPayload":{"position":{"x":18729.806237131383,"y":24651.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"a8f99804-c95c-42c4-bbf6-526ad08fe649"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"b7c52faa-fafb-4078-85e5-c7e78cc80ad8","savedPayload":{"position":{"x":18669.806237131383,"y":24545.548779403747},"targetPosition":{"x":18601.806237131383,"y":24503.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"5fe45e66-410f-410d-8031-7815b933ff6e","savedPayload":{"position":{"x":18510.806237131383,"y":24487.548779403747},"targetPosition":{"x":18601.806237131383,"y":24503.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"04b500bb-f4f5-4eb8-941c-8e52e72015b0","savedPayload":{"position":{"x":18601.806237131383,"y":24503.548779403747},"targetPosition":{"x":18670.806237131383,"y":24603.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"09fb797f-c5c6-45b1-96fa-b08812e48294"}}}],"layerFolders":[],"id":"d20f1ae3-0a3f-4856-8aa1-ff64973d50b8","savedPayload":{"position":{"x":18670.806237131383,"y":24603.548779403747},"targetPosition":{"x":18676.806237131383,"y":24701.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"ae231cdb-0739-498b-96df-53985ed5057c","savedPayload":{"position":{"x":18603.806237131383,"y":24666.548779403747},"targetPosition":{"x":18669.806237131383,"y":24717.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"09db7857-411f-4147-941a-a18d1e8cf0e1","savedPayload":{"position":{"x":18720.806237131383,"y":24715.548779403747},"targetPosition":{"x":18669.806237131383,"y":24717.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"750d389f-5ee8-4887-a6ca-b412d1dd8a9f","savedPayload":{"position":{"x":18669.806237131383,"y":24717.548779403747},"targetPosition":{"x":18613.806237131383,"y":24668.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"20edf39a-1d12-4727-b653-4581e86c3039"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"e47abf9f-a028-46b9-a52d-bb4b08be9c9d","savedPayload":{"position":{"x":18709.806237131383,"y":24634.548779403747},"targetPosition":{"x":18691.806237131383,"y":24620.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"fc5fecca-56fb-414e-a793-4dcca3ab7c06","savedPayload":{"position":{"x":18629.806237131383,"y":24676.548779403747},"targetPosition":{"x":18691.806237131383,"y":24620.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"65e96365-3449-4245-a7c8-ccbf6bd97327","savedPayload":{"position":{"x":18691.806237131383,"y":24620.548779403747},"targetPosition":{"x":18613.806237131383,"y":24668.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"0efe7277-3fd8-4a96-b62b-e8577c76f06f"}}}],"layerFolders":[],"id":"4a56b396-3e2e-4159-8f69-d6c7b017f99d","savedPayload":{"position":{"x":18613.806237131383,"y":24668.548779403747},"targetPosition":{"x":18676.806237131383,"y":24701.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"685b0a8e-f63f-4bf4-a142-d82d2ae2c7c2","savedPayload":{"position":{"x":18664.806237131383,"y":24871.548779403747},"targetPosition":{"x":18699.806237131383,"y":24774.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"c0e8df4d-1df6-4fa6-894c-64dd5533ead7","savedPayload":{"position":{"x":18675.806237131383,"y":24871.548779403747},"targetPosition":{"x":18699.806237131383,"y":24774.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a111b1f-cd03-409d-9a49-7cf9b847d2ab","savedPayload":{"position":{"x":18699.806237131383,"y":24774.548779403747},"targetPosition":{"x":18709.806237131383,"y":24751.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"c794ace0-c37f-42fe-9d6c-6da11ccbd805"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"7979583f-ed1e-478f-9ca3-f0e61019f38f","savedPayload":{"position":{"x":18670.806237131383,"y":24758.548779403747},"targetPosition":{"x":18624.806237131383,"y":24664.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"f7b1d1c2-fb74-4af0-b96f-f69bf0820635","savedPayload":{"position":{"x":18554.806237131383,"y":24703.548779403747},"targetPosition":{"x":18624.806237131383,"y":24664.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"46a77b68-cceb-4053-8cc9-8b8f4bbfdf7b","savedPayload":{"position":{"x":18624.806237131383,"y":24664.548779403747},"targetPosition":{"x":18709.806237131383,"y":24751.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"599983d8-073d-489e-8ad9-858def387f13"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"6212c51c-54b2-463a-a89f-ddcfa677edd9","savedPayload":{"position":{"x":18681.806237131383,"y":24863.548779403747},"targetPosition":{"x":18669.806237131383,"y":24828.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4c66580e-ecdb-4c98-946c-51b94a75c175","savedPayload":{"position":{"x":18637.806237131383,"y":24757.548779403747},"targetPosition":{"x":18669.806237131383,"y":24828.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4032650b-47a5-4e0c-9759-bf7726bd2272","savedPayload":{"position":{"x":18669.806237131383,"y":24828.548779403747},"targetPosition":{"x":18709.806237131383,"y":24751.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"a0cef7c7-bd9f-45d5-87d9-7fe5a633cbce"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"9ccf95bd-db9a-4e2d-b636-b3fb003039a1","savedPayload":{"position":{"x":18619.806237131383,"y":24755.548779403747},"targetPosition":{"x":18628.806237131383,"y":24661.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"c2398255-264b-4c8b-abf7-955c8b7902d5","savedPayload":{"position":{"x":18622.806237131383,"y":24661.548779403747},"targetPosition":{"x":18628.806237131383,"y":24661.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6cf2d39a-9e78-4faa-8b44-9ce116cc5f14","savedPayload":{"position":{"x":18628.806237131383,"y":24661.548779403747},"targetPosition":{"x":18709.806237131383,"y":24751.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"92d892f3-33eb-4ab2-907c-a89de2bdf55c"}}}],"layerFolders":[],"id":"1b070bca-6426-483f-975e-1435a3cfd74b","savedPayload":{"position":{"x":18709.806237131383,"y":24751.548779403747},"targetPosition":{"x":18676.806237131383,"y":24701.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"b2f5f858-3b59-451b-b2de-7d8b1fcf7cf9","savedPayload":{"position":{"x":18754.806237131383,"y":24702.548779403747},"targetPosition":{"x":18690.806237131383,"y":24711.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"bbf35ffd-80e6-4453-96ea-cc6a694b5ec4","savedPayload":{"position":{"x":18601.806237131383,"y":24747.548779403747},"targetPosition":{"x":18690.806237131383,"y":24711.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff01c2ae-4e0a-4227-bad6-31299819263d","savedPayload":{"position":{"x":18690.806237131383,"y":24711.548779403747},"targetPosition":{"x":18758.806237131383,"y":24760.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"b0e696f5-8a33-4728-9262-c72281c6e97c"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"fe568c0d-2192-4909-b106-ebb075223166","savedPayload":{"position":{"x":18850.806237131383,"y":24889.548779403747},"targetPosition":{"x":18852.806237131383,"y":24821.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d1499113-760e-44dd-b59f-c5074eb16cc8","savedPayload":{"position":{"x":18801.806237131383,"y":24906.548779403747},"targetPosition":{"x":18852.806237131383,"y":24821.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9e432775-38c9-4767-a92f-8afb75a16db8","savedPayload":{"position":{"x":18852.806237131383,"y":24821.548779403747},"targetPosition":{"x":18758.806237131383,"y":24760.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"e073d2d0-ce62-4b28-af5d-a874876663d1"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"ba39fb26-0350-407f-b6a7-c5acedf81a87","savedPayload":{"position":{"x":18689.806237131383,"y":24747.548779403747},"targetPosition":{"x":18668.806237131383,"y":24679.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"2cdb4e35-12bb-4324-ad06-298425b22189","savedPayload":{"position":{"x":18621.806237131383,"y":24645.548779403747},"targetPosition":{"x":18668.806237131383,"y":24679.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e146be83-4397-4af1-b871-1953b13aed18","savedPayload":{"position":{"x":18668.806237131383,"y":24679.548779403747},"targetPosition":{"x":18758.806237131383,"y":24760.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"f654b46d-07df-47ba-8778-96d6b4b53b7b"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"fb0c44db-d0fe-46a3-bc36-7a470354ae9d","savedPayload":{"position":{"x":18752.806237131383,"y":24922.548779403747},"targetPosition":{"x":18824.806237131383,"y":24831.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"f1fd3b7a-fb30-4349-9dc7-4cf9848d7ccd","savedPayload":{"position":{"x":18900.806237131383,"y":24892.548779403747},"targetPosition":{"x":18824.806237131383,"y":24831.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"019e7e93-3392-455c-8944-eef74fa2055d","savedPayload":{"position":{"x":18824.806237131383,"y":24831.548779403747},"targetPosition":{"x":18758.806237131383,"y":24760.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"49d22548-e0b7-4eef-bb46-3fac56d9afe6"}}}],"layerFolders":[],"id":"422bfbe8-0894-4d2d-9e87-47550ef9dc1a","savedPayload":{"position":{"x":18758.806237131383,"y":24760.548779403747},"targetPosition":{"x":18676.806237131383,"y":24701.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"672c58a5-4e55-4b44-8e13-3dec665fba2c","savedPayload":{"position":{"x":18661.806237131383,"y":24785.548779403747},"targetPosition":{"x":18696.806237131383,"y":24730.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"99cac0b8-9730-4c51-bcb6-e227d17cc5ac","savedPayload":{"position":{"x":18600.806237131383,"y":24727.548779403747},"targetPosition":{"x":18696.806237131383,"y":24730.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1b8219d7-bc08-4b4e-a1e3-1cc729321ce5","savedPayload":{"position":{"x":18696.806237131383,"y":24730.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"f4a72227-9a41-4792-8e23-41a9c89c9d53"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"adeca9b9-4790-4cd6-963f-796a5b7c6840","savedPayload":{"position":{"x":18738.806237131383,"y":24681.548779403747},"targetPosition":{"x":18779.806237131383,"y":24628.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"dccd4bf7-4849-4084-985b-f85fa18a9a6d","savedPayload":{"position":{"x":18743.806237131383,"y":24706.548779403747},"targetPosition":{"x":18779.806237131383,"y":24628.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bde92523-03b0-4bae-9c12-78bf023b719a","savedPayload":{"position":{"x":18779.806237131383,"y":24628.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"99154ee5-ea7a-4525-8895-19f2b8b06f09"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"11c13e3e-6cda-491c-a60c-676e8c699b97","savedPayload":{"position":{"x":18748.806237131383,"y":24647.548779403747},"targetPosition":{"x":18719.806237131383,"y":24596.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"88079f4e-f82c-444c-935b-aaea79cd93e8","savedPayload":{"position":{"x":18733.806237131383,"y":24545.548779403747},"targetPosition":{"x":18719.806237131383,"y":24596.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a47161ed-cdbc-4dfd-9f2e-aaed2337534d","savedPayload":{"position":{"x":18719.806237131383,"y":24596.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"702cd718-be6e-4196-9931-32165a584549"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"71f83d1f-6690-4691-b6d5-36a2f3791777","savedPayload":{"position":{"x":18690.806237131383,"y":24692.548779403747},"targetPosition":{"x":18753.806237131383,"y":24619.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"f5154fb5-a430-43ee-9088-cd676b2501de","savedPayload":{"position":{"x":18682.806237131383,"y":24533.548779403747},"targetPosition":{"x":18753.806237131383,"y":24619.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"31c8b66a-504f-48fe-900b-a6a9b074751a","savedPayload":{"position":{"x":18753.806237131383,"y":24619.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"e58f24d7-1932-4017-b1ed-8536dbe5519c"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"94d3f9db-7ddf-41fd-8f56-597b5b522da6","savedPayload":{"position":{"x":18732.806237131383,"y":24547.548779403747},"targetPosition":{"x":18681.806237131383,"y":24597.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"2ad49e24-b87f-4eaa-8494-c32ce6201a13","savedPayload":{"position":{"x":18727.806237131383,"y":24527.548779403747},"targetPosition":{"x":18681.806237131383,"y":24597.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff618651-0710-4fe2-bc75-5d72176eb83c","savedPayload":{"position":{"x":18681.806237131383,"y":24597.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"b515f755-1e8a-4b82-9547-b83da2f90333"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"21070553-e958-42a2-84ed-b44e5b1d9deb","savedPayload":{"position":{"x":18621.806237131383,"y":24717.548779403747},"targetPosition":{"x":18632.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"4780fec9-84ac-46c9-ae28-8d2e72a01d42","savedPayload":{"position":{"x":18625.806237131383,"y":24661.548779403747},"targetPosition":{"x":18632.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8c83c850-a665-46c9-a660-5ed1950c9f15","savedPayload":{"position":{"x":18632.806237131383,"y":24634.548779403747},"targetPosition":{"x":18725.806237131383,"y":24639.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"93e22b41-86f0-4dc3-9c15-878799e8896d"}}}],"layerFolders":[],"id":"7174afc8-947b-4cf7-a514-d86c5438cdde","savedPayload":{"position":{"x":18725.806237131383,"y":24639.548779403747},"targetPosition":{"x":18676.806237131383,"y":24701.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c0305769-b625-4290-93c7-736630771858","savedPayload":{"position":{"x":18676.806237131383,"y":24701.548779403747},"targetPosition":{"x":18714.806237131383,"y":24773.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"eb23f0f9-8786-469f-b5c7-abb62f088385","savedPayload":{"position":{"x":18714.806237131383,"y":24773.548779403747},"targetPosition":{"x":18628.806237131383,"y":24756.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04299e82-ac66-4a7b-aec6-37ad4336e01b","savedPayload":{"position":{"x":18628.806237131383,"y":24756.548779403747},"targetPosition":{"x":18722.806237131383,"y":24685.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"dbb24829-a94a-4a9c-b68c-a415bc2a0581"}}},"id":"370f7e33-9122-4005-ad15-5eca88a6d87e","savedPayload":{"position":{"x":18722.806237131383,"y":24685.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"13e53f93-f539-4fab-9a4b-2440b21d712b","savedPayload":{"position":{"x":18641.806237131383,"y":24662.548779403747},"targetPosition":{"x":18712.806237131383,"y":24759.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"0762278d-44b8-485a-9f6a-781c0c69f921","savedPayload":{"position":{"x":18712.806237131383,"y":24791.548779403747},"targetPosition":{"x":18712.806237131383,"y":24759.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"90ffe934-c087-406e-90c4-3f4ee009e4bc","savedPayload":{"position":{"x":18712.806237131383,"y":24759.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"0daf63f6-b842-4d8a-b566-47ffabb4f77d"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"753fd771-9f78-443e-877c-b1669ce36f48","savedPayload":{"position":{"x":18793.806237131383,"y":24723.548779403747},"targetPosition":{"x":18833.806237131383,"y":24771.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"291a682e-3bb0-4e55-a33a-d3e5d302ece4","savedPayload":{"position":{"x":18790.806237131383,"y":24697.548779403747},"targetPosition":{"x":18833.806237131383,"y":24771.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b1bc5ec7-0725-4dfe-b4d0-974ba79a70e6","savedPayload":{"position":{"x":18833.806237131383,"y":24771.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"c83f8704-df3e-43b8-8e16-1e7a07f81dfc"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"f8a87803-ac86-481d-a45f-40845cfa8edb","savedPayload":{"position":{"x":18663.806237131383,"y":24835.548779403747},"targetPosition":{"x":18695.806237131383,"y":24773.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"da506366-1dd7-40d6-a800-63b6d2036311","savedPayload":{"position":{"x":18793.806237131383,"y":24856.548779403747},"targetPosition":{"x":18695.806237131383,"y":24773.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e1ab1a4-701a-44d6-afab-b3baf8c1df04","savedPayload":{"position":{"x":18695.806237131383,"y":24773.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"7e5a1d96-4452-4f40-be57-bb24313a7716"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"48a52beb-f003-48c9-82bd-3dfff30c289d","savedPayload":{"position":{"x":18805.806237131383,"y":24875.548779403747},"targetPosition":{"x":18824.806237131383,"y":24828.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d78215aa-8d5c-42f6-8a1e-6c039f25528b","savedPayload":{"position":{"x":18917.806237131383,"y":24775.548779403747},"targetPosition":{"x":18824.806237131383,"y":24828.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cba5fb0f-4322-4703-b5fc-b91e182c51e5","savedPayload":{"position":{"x":18824.806237131383,"y":24828.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"bac5ce4b-bb3a-4bac-846d-8a71ce2a71ad"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"48460c41-6e50-4134-93fc-ed548adff990","savedPayload":{"position":{"x":18692.806237131383,"y":24731.548779403747},"targetPosition":{"x":18722.806237131383,"y":24715.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"357243fe-2672-450f-aad4-1701dd82e062","savedPayload":{"position":{"x":18801.806237131383,"y":24779.548779403747},"targetPosition":{"x":18722.806237131383,"y":24715.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"77b0619d-08f8-4b57-86b3-150bdb124fd4","savedPayload":{"position":{"x":18722.806237131383,"y":24715.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"a1ba4935-f3f3-4c69-8e60-66e93a58705f"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"663181d4-8959-4274-a5cf-6fcd17a5cc03","savedPayload":{"position":{"x":18771.806237131383,"y":24716.548779403747},"targetPosition":{"x":18677.806237131383,"y":24814.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"a89a5084-6cdd-48d2-9fa2-fd9644f3d600","savedPayload":{"position":{"x":18651.806237131383,"y":24913.548779403747},"targetPosition":{"x":18677.806237131383,"y":24814.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5f859fb5-a5f7-4bdc-a04d-f18753b214df","savedPayload":{"position":{"x":18677.806237131383,"y":24814.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"cdc7bef2-b4c9-4b12-b8aa-2374b32f6a0d"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"9b751c1c-5b70-46b9-a076-3e132ab09c1c","savedPayload":{"position":{"x":18749.806237131383,"y":24788.548779403747},"targetPosition":{"x":18673.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"9673c556-2658-4207-a607-19f9949f470f","savedPayload":{"position":{"x":18769.806237131383,"y":24819.548779403747},"targetPosition":{"x":18673.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2cf574f3-19e5-455b-a91d-48fc3ea9b72c","savedPayload":{"position":{"x":18673.806237131383,"y":24741.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"f9cca75f-04ff-4b25-a9e7-2d289e31d1c2"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"4e113651-e659-4ce7-97ec-fefeacf49092","savedPayload":{"position":{"x":18788.806237131383,"y":24739.548779403747},"targetPosition":{"x":18819.806237131383,"y":24839.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"60c0e587-5e64-40cc-add6-7479c1ab772b","savedPayload":{"position":{"x":18908.806237131383,"y":24872.548779403747},"targetPosition":{"x":18819.806237131383,"y":24839.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5add06b2-8c5b-47e8-90ec-e80b505f8970","savedPayload":{"position":{"x":18819.806237131383,"y":24839.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"901870b4-13f3-4b09-972f-e12b34001c4a"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"19f0ba3b-3a0b-4867-96a5-56733020d582","savedPayload":{"position":{"x":18711.806237131383,"y":24889.548779403747},"targetPosition":{"x":18770.806237131383,"y":24870.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"a4707292-2f55-4cb6-97fe-acf36fd9a216","savedPayload":{"position":{"x":18698.806237131383,"y":24777.548779403747},"targetPosition":{"x":18770.806237131383,"y":24870.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"68a46946-804f-4fc8-b1b2-821f142184c4","savedPayload":{"position":{"x":18770.806237131383,"y":24870.548779403747},"targetPosition":{"x":18770.806237131383,"y":24779.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"a5c91347-e8bd-4b55-913d-359e95e3085c"}}}],"layerFolders":[],"id":"6003a248-8d00-4a3a-9e4f-4bf8701e379b","savedPayload":{"position":{"x":18770.806237131383,"y":24779.548779403747},"targetPosition":{"x":18807.806237131383,"y":24873.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b24b4974-ccdc-483a-9108-546a172ec382","savedPayload":{"position":{"x":18807.806237131383,"y":24873.548779403747},"targetPosition":{"x":18773.806237131383,"y":24785.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d2ea348f-a1e9-4dbb-ab47-58d32e1a6d21","savedPayload":{"position":{"x":18773.806237131383,"y":24785.548779403747},"targetPosition":{"x":18722.806237131383,"y":24710.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"dbb24829-a94a-4a9c-b68c-a415bc2a0581"}}},"id":"87d1058b-22f2-4e60-8828-22ef05814d1c","savedPayload":{"position":{"x":18722.806237131383,"y":24710.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Episode Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8d9a375b-1d27-4917-9179-0b55764e5f29","savedPayload":{"position":{"x":19016.806237131383,"y":24560.548779403747},"targetPosition":{"x":19020.806237131383,"y":24617.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Object","id":"bcbb3368-ea4c-466b-8423-8f0517ad35da"}}},{"type":"Layer Panel","name":"Episode Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"dbe75e52-7fc1-4a03-abe5-125b3828b9d4","savedPayload":{"position":{"x":18933.806237131383,"y":24623.548779403747},"targetPosition":{"x":19020.806237131383,"y":24617.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Base Asset","id":"b18a5300-448b-4165-9b36-dc5ee37e58cd"}}},{"type":"Layer Panel","name":"Episode Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ffae9ccf-65d0-4abb-be5e-5bec5faa66d8","savedPayload":{"position":{"x":18946.806237131383,"y":24604.548779403747},"targetPosition":{"x":19020.806237131383,"y":24617.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Episode Quoted Asset","id":"dbdd55de-9279-48ef-a0b1-e50024f284e9"}}}],"id":"f2a49bd1-ff86-4432-8f38-636dc67311e3","savedPayload":{"position":{"x":19020.806237131383,"y":24617.548779403747},"targetPosition":{"x":18991.806237131383,"y":24560.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b62ed550-1e25-447c-b163-164be3c42b3a","savedPayload":{"position":{"x":18834.806237131383,"y":24396.548779403747},"targetPosition":{"x":18894.806237131383,"y":24470.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"7237c558-a0e5-46c6-8cf5-ebc555e98efb"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a3bcaf93-a176-4341-88ab-c12f7708af33","savedPayload":{"position":{"x":18848.806237131383,"y":24436.548779403747},"targetPosition":{"x":18894.806237131383,"y":24470.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"4958982a-b51a-40ef-8764-dd5451cf9837"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6de6ec23-0c89-44ea-9981-14d29085e292","savedPayload":{"position":{"x":18938.806237131383,"y":24517.548779403747},"targetPosition":{"x":18894.806237131383,"y":24470.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"86fefa5e-8de8-4d00-a632-e1827ce60030"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"41ad0f15-067e-4496-955e-2c60257edb3b","savedPayload":{"position":{"x":18978.806237131383,"y":24543.548779403747},"targetPosition":{"x":18894.806237131383,"y":24470.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"79a3b846-3b23-4c01-9aa1-cedcebb5ca03"}}}],"id":"68e1c79c-d226-4c10-9722-2a66d1ef02a1","savedPayload":{"position":{"x":18894.806237131383,"y":24470.548779403747},"targetPosition":{"x":18991.806237131383,"y":24560.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3408737d-408f-43b6-9933-5b3734ba3776","savedPayload":{"position":{"x":18991.806237131383,"y":24560.548779403747},"targetPosition":{"x":18949.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"27d81a5c-6067-4ae8-a078-c9ab5a1bef6b"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Strategy Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"21b21689-641f-4de5-9b90-1e1e9103e254","savedPayload":{"position":{"x":19055.806237131383,"y":24576.548779403747},"targetPosition":{"x":19003.806237131383,"y":24524.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Strategy Object","id":"b256b76c-3834-4d62-aa56-f42cce9f47e9"}}}],"id":"036bf426-69ba-45cd-ba5b-44df1c5cea39","savedPayload":{"position":{"x":19003.806237131383,"y":24524.548779403747},"targetPosition":{"x":19037.806237131383,"y":24433.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6d22e97e-0049-49a2-9f06-d14bd4c0ac01","savedPayload":{"position":{"x":18994.806237131383,"y":24491.548779403747},"targetPosition":{"x":18975.806237131383,"y":24439.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9ae59a68-71fd-4ec8-9a70-da743f33baee"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8436fded-081e-46aa-b4cd-a6fa35131c06","savedPayload":{"position":{"x":18884.806237131383,"y":24383.548779403747},"targetPosition":{"x":18975.806237131383,"y":24439.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"504f327c-a08d-4c3d-8e77-850299cc30ed"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7ab896db-5b6e-471a-ad10-f248c5128374","savedPayload":{"position":{"x":18998.806237131383,"y":24472.548779403747},"targetPosition":{"x":18975.806237131383,"y":24439.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"f9500afd-e0f4-45d3-9647-45ec778554e8"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1f5f4be5-3f1b-4245-b27d-9830a91eacf8","savedPayload":{"position":{"x":18887.806237131383,"y":24460.548779403747},"targetPosition":{"x":18975.806237131383,"y":24439.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"354102dd-fd58-4f84-8e90-0d891defa0c8"}}}],"id":"d0353cb7-bbcd-4b01-a2c7-f1dacc3f0995","savedPayload":{"position":{"x":18975.806237131383,"y":24439.548779403747},"targetPosition":{"x":19037.806237131383,"y":24433.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5c2dfaf8-7591-41ff-8690-472befba1e58","savedPayload":{"position":{"x":19037.806237131383,"y":24433.548779403747},"targetPosition":{"x":18949.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"07aa8a17-2d19-479b-b936-7cb24b73677c"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Market Buy Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ca4fca46-97c9-4890-abed-99742320e26a","savedPayload":{"position":{"x":19073.806237131383,"y":24634.548779403747},"targetPosition":{"x":18975.806237131383,"y":24536.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order","id":"12929733-5964-4948-877b-b1edda37162a"}}},{"type":"Layer Panel","name":"Market Buy Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ced36028-851e-4941-aee1-ba95a3c1f76d","savedPayload":{"position":{"x":19014.806237131383,"y":24562.548779403747},"targetPosition":{"x":18975.806237131383,"y":24536.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Stats","id":"81a88e44-189c-44ec-9607-cb1e4de8baa1"}}},{"type":"Layer Panel","name":"Market Buy Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"dc960513-44d9-4c51-801c-8f48b119d952","savedPayload":{"position":{"x":18922.806237131383,"y":24620.548779403747},"targetPosition":{"x":18975.806237131383,"y":24536.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Base Asset","id":"608a9068-7324-4f4c-8fdd-d9d8e42e26c6"}}},{"type":"Layer Panel","name":"Market Buy Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7924f5d8-5db0-4c59-aa3c-bd58c4f53ba1","savedPayload":{"position":{"x":18998.806237131383,"y":24546.548779403747},"targetPosition":{"x":18975.806237131383,"y":24536.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Buy Order Quoted Asset","id":"1a55af5e-821d-4421-80d2-2c543d25ea1a"}}}],"id":"475d802d-cce0-48a5-bf9b-f5efd56c68ef","savedPayload":{"position":{"x":18975.806237131383,"y":24536.548779403747},"targetPosition":{"x":18977.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"3d48c1a0-a6cb-432b-a636-cdfebc77f4a8","savedPayload":{"position":{"x":19032.806237131383,"y":24701.548779403747},"targetPosition":{"x":19034.806237131383,"y":24632.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"6217d021-ea5b-4b20-b093-758a2d2fb5d4"}}}],"id":"d8647c46-61cc-4d21-9db3-26436b4f2a77","savedPayload":{"position":{"x":19034.806237131383,"y":24632.548779403747},"targetPosition":{"x":18977.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"423e7aad-fb10-4e5d-b688-91dac0902e83","savedPayload":{"position":{"x":18977.806237131383,"y":24569.548779403747},"targetPosition":{"x":19030.806237131383,"y":24552.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"3ed2aa32-4780-496a-b0bf-8127ed301f34"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Market Sell Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"02b10faf-aa54-4aec-9887-a022586d5377","savedPayload":{"position":{"x":18959.806237131383,"y":24544.548779403747},"targetPosition":{"x":19041.806237131383,"y":24546.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order","id":"a5856620-e9ce-4ee1-830c-5b5dc45e9139"}}},{"type":"Layer Panel","name":"Market Sell Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e7991938-9e82-45ef-9aae-8c13322f3239","savedPayload":{"position":{"x":19049.806237131383,"y":24544.548779403747},"targetPosition":{"x":19041.806237131383,"y":24546.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Stats","id":"fb23f6bb-8383-4276-8a77-5180e622653a"}}},{"type":"Layer Panel","name":"Market Sell Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"81c81dd6-58f3-4138-a80d-d153c193732c","savedPayload":{"position":{"x":19112.806237131383,"y":24516.548779403747},"targetPosition":{"x":19041.806237131383,"y":24546.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Base Asset","id":"3e9e4e57-bd41-41f5-8d52-c92d3a707e80"}}},{"type":"Layer Panel","name":"Market Sell Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1697ab3c-2aba-4515-87f8-24205abc66ef","savedPayload":{"position":{"x":18999.806237131383,"y":24566.548779403747},"targetPosition":{"x":19041.806237131383,"y":24546.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Market Sell Order Quoted Asset","id":"51d59c30-3a02-4d74-aa62-f1524ea544ee"}}}],"id":"163576cc-892d-4037-ad28-113c7f4a3286","savedPayload":{"position":{"x":19041.806237131383,"y":24546.548779403747},"targetPosition":{"x":18942.806237131383,"y":24502.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d4b183c9-6f6f-432e-b1d9-8582d909c272","savedPayload":{"position":{"x":18902.806237131383,"y":24393.548779403747},"targetPosition":{"x":18944.806237131383,"y":24404.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"5b8dcb5c-6b20-4edf-aae5-1c526cdca536"}}}],"id":"caa21aaa-0248-4456-99df-2495d2f2a8ae","savedPayload":{"position":{"x":18944.806237131383,"y":24404.548779403747},"targetPosition":{"x":18942.806237131383,"y":24502.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2659ab0f-66da-4be1-9b4f-6f3ee37a151c","savedPayload":{"position":{"x":18942.806237131383,"y":24502.548779403747},"targetPosition":{"x":19030.806237131383,"y":24552.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"dd99ae2d-1300-46ad-9e5f-ada39a2b288a"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Limit Buy Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1a559513-1dc8-4c5e-802a-5f90582679af","savedPayload":{"position":{"x":18997.806237131383,"y":24419.548779403747},"targetPosition":{"x":18971.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order","id":"48ec80a7-6f68-4284-9bb5-f04ce3c1052b"}}},{"type":"Layer Panel","name":"Limit Buy Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fa6c56f8-c672-4cae-a2c0-23e8e511c606","savedPayload":{"position":{"x":18969.806237131383,"y":24536.548779403747},"targetPosition":{"x":18971.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Stats","id":"90bd6690-de93-4158-a17f-728c28defc38"}}},{"type":"Layer Panel","name":"Limit Buy Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bb423a24-06d0-478f-9ee8-c457dfa33847","savedPayload":{"position":{"x":18988.806237131383,"y":24542.548779403747},"targetPosition":{"x":18971.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Base Asset","id":"8504b6e3-83c8-45ea-959a-41303f9d4274"}}},{"type":"Layer Panel","name":"Limit Buy Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"547e013d-1ada-4562-b0d1-53acd18b9ced","savedPayload":{"position":{"x":19057.806237131383,"y":24599.548779403747},"targetPosition":{"x":18971.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Buy Order Quoted Asset","id":"b60e7e48-8ae7-4701-848b-8faa9ba58c11"}}}],"id":"1be48eea-82d9-41ef-a9b0-79ca3cdc368a","savedPayload":{"position":{"x":18971.806237131383,"y":24513.548779403747},"targetPosition":{"x":19067.806237131383,"y":24593.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Status Open","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"437f49ab-f48a-477a-9929-c34a54df394f","savedPayload":{"position":{"x":19056.806237131383,"y":24460.548779403747},"targetPosition":{"x":19090.806237131383,"y":24545.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Open","id":"7be8ba85-07e7-4800-8988-ce76d2105b73"}}},{"type":"Layer Polygon","name":"Status Closed Cancel Event","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f017f5cd-9da1-4b31-95c6-7d4b34046cdd","savedPayload":{"position":{"x":18999.806237131383,"y":24585.548779403747},"targetPosition":{"x":19090.806237131383,"y":24545.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Cancel Event","id":"ab881143-5631-4b27-a97a-94138dbd370d"}}},{"type":"Layer Polygon","name":"Status Closed Filled","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"cabe3bef-ebdb-4d05-b592-04c5b0559382","savedPayload":{"position":{"x":18994.806237131383,"y":24498.548779403747},"targetPosition":{"x":19090.806237131383,"y":24545.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Filled","id":"a54693cf-8ec1-469d-afb9-2a724e4f6af7"}}}],"id":"d737c99e-bd5a-4d72-b6d5-7eaeda6db62b","savedPayload":{"position":{"x":19090.806237131383,"y":24545.548779403747},"targetPosition":{"x":19067.806237131383,"y":24593.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4081aee1-5cfc-404e-9e13-f016d9cfb02e","savedPayload":{"position":{"x":19067.806237131383,"y":24593.548779403747},"targetPosition":{"x":19030.806237131383,"y":24552.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"9ddbbf63-81b6-471d-b989-6acf7d797a7a"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Limit Sell Order","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e0329e82-251e-43f2-919f-7a2b709eea05","savedPayload":{"position":{"x":18976.806237131383,"y":24613.548779403747},"targetPosition":{"x":19042.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order","id":"5d485d15-9919-42cc-9399-54c679d7085d"}}},{"type":"Layer Panel","name":"Limit Sell Order Stats","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e3fe675f-973d-4ff4-acaa-3b813cdf9053","savedPayload":{"position":{"x":19089.806237131383,"y":24636.548779403747},"targetPosition":{"x":19042.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Stats","id":"db2f6e9c-ce79-4465-a0dc-8ea02fac26b7"}}},{"type":"Layer Panel","name":"Limit Sell Order Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"101286ab-1a93-4712-909d-268066f03b68","savedPayload":{"position":{"x":19095.806237131383,"y":24482.548779403747},"targetPosition":{"x":19042.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Base Asset","id":"3e34000e-ad8c-4049-9eee-89e8ea362a0f"}}},{"type":"Layer Panel","name":"Limit Sell Order Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"306efe19-683d-4507-b502-d478ddcdf971","savedPayload":{"position":{"x":19059.806237131383,"y":24652.548779403747},"targetPosition":{"x":19042.806237131383,"y":24569.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Limit Sell Order Quoted Asset","id":"ae18b041-f16e-4d96-8a83-56845dddf64a"}}}],"id":"92f1a3ae-21bd-4346-bde1-219cfd314330","savedPayload":{"position":{"x":19042.806237131383,"y":24569.548779403747},"targetPosition":{"x":19062.806237131383,"y":24526.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Status Open","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"52d8d314-ad68-4d2f-81fd-c524a3466b5a","savedPayload":{"position":{"x":19177.806237131383,"y":24580.548779403747},"targetPosition":{"x":19113.806237131383,"y":24622.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Open","id":"186d1b59-7d04-4b40-83c9-acc361b8a12a"}}},{"type":"Layer Polygon","name":"Status Closed Cancel Event","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b3a9310b-f872-49aa-9317-b3e29ccd53f7","savedPayload":{"position":{"x":19069.806237131383,"y":24696.548779403747},"targetPosition":{"x":19113.806237131383,"y":24622.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Cancel Event","id":"8e993263-dbfc-4d41-864a-9470e70d7e4f"}}},{"type":"Layer Polygon","name":"Status Closed Filled","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"729e8b24-0cc5-488e-beaa-e72906f5899e","savedPayload":{"position":{"x":19114.806237131383,"y":24661.548779403747},"targetPosition":{"x":19113.806237131383,"y":24622.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Status Closed Filled","id":"bf0751d6-fdb2-4e66-a39c-2bd99252bd60"}}}],"id":"77d2d4dc-3a99-416b-ae80-503433766fd1","savedPayload":{"position":{"x":19113.806237131383,"y":24622.548779403747},"targetPosition":{"x":19062.806237131383,"y":24526.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c1412383-ba04-4772-81dd-79293a03626e","savedPayload":{"position":{"x":19062.806237131383,"y":24526.548779403747},"targetPosition":{"x":19030.806237131383,"y":24552.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"1a5721d9-5064-4bd4-9449-4433594e73a8"}}}],"layerFolders":[],"id":"18a4b80e-7d91-489c-9cf9-2c89fca7e719","savedPayload":{"position":{"x":19030.806237131383,"y":24552.548779403747},"targetPosition":{"x":18949.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Trigger Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7e6dee9a-d8e1-49be-a993-7343f1d0a450","savedPayload":{"position":{"x":19166.806237131383,"y":24660.548779403747},"targetPosition":{"x":19150.806237131383,"y":24599.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Trigger Stage Object","id":"c10b9b7b-04d8-460b-9dcc-2eaed24e17df"}}}],"id":"5e0d4fca-da72-479e-b04e-2edec03c9545","savedPayload":{"position":{"x":19150.806237131383,"y":24599.548779403747},"targetPosition":{"x":19063.806237131383,"y":24549.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4b77f7c1-e7e2-4e3a-9930-bc4c42eb465e","savedPayload":{"position":{"x":19023.806237131383,"y":24589.548779403747},"targetPosition":{"x":19103.806237131383,"y":24522.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9e88f3a0-09ad-44fd-a84e-731228860e66"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ebf59a06-cfe8-4029-aaf3-4d9a3a5cfdbb","savedPayload":{"position":{"x":19070.806237131383,"y":24423.548779403747},"targetPosition":{"x":19103.806237131383,"y":24522.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"e2e18af7-af5f-4634-b8a4-4fabd2ddd7a5"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7565a37c-3298-4760-95fe-16332204105f","savedPayload":{"position":{"x":19032.806237131383,"y":24614.548779403747},"targetPosition":{"x":19103.806237131383,"y":24522.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"08d916aa-6d2d-497b-8738-9b0966e3901e"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4e2ebbcf-80ae-455d-aee5-20014be91dac","savedPayload":{"position":{"x":19187.806237131383,"y":24518.548779403747},"targetPosition":{"x":19103.806237131383,"y":24522.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"70de0f73-5a2d-4a5a-a5f7-1863f192a14d"}}}],"id":"f375881f-6595-42d7-81c1-e1c465e5e526","savedPayload":{"position":{"x":19103.806237131383,"y":24522.548779403747},"targetPosition":{"x":19063.806237131383,"y":24549.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd6cda15-e0e1-4a12-99ed-293d085cd528","savedPayload":{"position":{"x":19063.806237131383,"y":24549.548779403747},"targetPosition":{"x":19039.806237131383,"y":24533.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"52afc8a2-90e5-4eea-889b-86e38493cec8"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Open Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"3c698528-a248-4942-8822-a70ae36b49d3","savedPayload":{"position":{"x":19065.806237131383,"y":24604.548779403747},"targetPosition":{"x":19031.806237131383,"y":24695.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Open Stage Object","id":"be56e169-d089-4aea-a18a-c01cf16a3485"}}}],"id":"122c9979-1381-4f65-bddc-b10a3e4cb5f2","savedPayload":{"position":{"x":19031.806237131383,"y":24695.548779403747},"targetPosition":{"x":19079.806237131383,"y":24624.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d28a4f27-918c-4a02-8dd0-7d4ea8765209","savedPayload":{"position":{"x":19227.806237131383,"y":24661.548779403747},"targetPosition":{"x":19158.806237131383,"y":24641.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"21db891e-4c47-4a5a-88a5-036297086138"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b7cf9888-6219-4b54-ae4c-3aeb98ff8e92","savedPayload":{"position":{"x":19127.806237131383,"y":24601.548779403747},"targetPosition":{"x":19158.806237131383,"y":24641.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"2a3d0d93-13d9-4a9e-8d32-c0aa5d7ab1e3"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2441ba47-4d12-4b04-a822-3c7b54e2ba1e","savedPayload":{"position":{"x":19241.806237131383,"y":24564.548779403747},"targetPosition":{"x":19158.806237131383,"y":24641.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"616f49d0-daaa-4b82-be0d-56504b402616"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1f1bb65a-a20e-4b93-9537-fcb3043b1470","savedPayload":{"position":{"x":19142.806237131383,"y":24680.548779403747},"targetPosition":{"x":19158.806237131383,"y":24641.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"0fab39ff-8caf-45f8-8650-33d7a65fa6e1"}}}],"id":"6baa301a-76a1-418e-a95a-e5443fd70e8d","savedPayload":{"position":{"x":19158.806237131383,"y":24641.548779403747},"targetPosition":{"x":19079.806237131383,"y":24624.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4ed50562-0421-48b8-9833-e16dc1e0171a","savedPayload":{"position":{"x":19079.806237131383,"y":24624.548779403747},"targetPosition":{"x":19039.806237131383,"y":24533.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"d781f6a9-3e68-4faa-a822-58a7dc331204"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Manage Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9fe9a385-1e7f-47a2-ad19-7081a0bfb010","savedPayload":{"position":{"x":19059.806237131383,"y":24357.548779403747},"targetPosition":{"x":19120.806237131383,"y":24427.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Manage Stage Object","id":"3db5604f-cacf-4c87-b1ea-5aa364bf9f48"}}}],"id":"13712ca8-8d29-4c39-a7fc-3e1f11b74392","savedPayload":{"position":{"x":19120.806237131383,"y":24427.548779403747},"targetPosition":{"x":19069.806237131383,"y":24526.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e469c7e9-03f4-4faa-9aab-55161edccb3d","savedPayload":{"position":{"x":19176.806237131383,"y":24427.548779403747},"targetPosition":{"x":19081.806237131383,"y":24512.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"43435aed-68cb-4a56-88c4-2574d91f5b32"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d5e8d181-d19d-427e-8305-1d96e0fa6dc8","savedPayload":{"position":{"x":19072.806237131383,"y":24451.548779403747},"targetPosition":{"x":19081.806237131383,"y":24512.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"904be022-f1e2-475e-9115-88224353cfa2"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a42c2210-0879-4f53-8f42-c70c561f1a71","savedPayload":{"position":{"x":19176.806237131383,"y":24518.548779403747},"targetPosition":{"x":19081.806237131383,"y":24512.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"4c74d4d8-d0a4-4581-bee7-36485d7a91a5"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d20fb8ef-d000-40d0-95bd-45cd5ab7863c","savedPayload":{"position":{"x":19095.806237131383,"y":24431.548779403747},"targetPosition":{"x":19081.806237131383,"y":24512.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"9fc6d2c4-a67b-42e8-841b-7523f7ab4962"}}}],"id":"02e5f0eb-24aa-4977-89a6-55616988e5be","savedPayload":{"position":{"x":19081.806237131383,"y":24512.548779403747},"targetPosition":{"x":19069.806237131383,"y":24526.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b9203612-72b4-46e9-966e-33205b11aad7","savedPayload":{"position":{"x":19069.806237131383,"y":24526.548779403747},"targetPosition":{"x":19039.806237131383,"y":24533.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"1a3fc6d2-ec6a-40d1-98e2-c68f0ace5553"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Close Stage Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"921cdb21-471f-4a09-89ea-c50d34dcb7ed","savedPayload":{"position":{"x":18909.806237131383,"y":24559.548779403747},"targetPosition":{"x":18961.806237131383,"y":24517.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Close Stage Object","id":"069885e7-351f-45dc-8423-113db65b9592"}}}],"id":"2a404a4a-378d-4af4-bc88-3493bd8edf90","savedPayload":{"position":{"x":18961.806237131383,"y":24517.548779403747},"targetPosition":{"x":19035.806237131383,"y":24584.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Closed Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7f73d3a7-9221-4b81-9fe8-5354ce9cd086","savedPayload":{"position":{"x":19014.806237131383,"y":24637.548779403747},"targetPosition":{"x":18948.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Closed Base","id":"9463d512-21f5-48c1-8cd6-b14747b338cf"}}},{"type":"Layer Polygon","name":"Open Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f2fb75e9-4b0c-4d1c-8803-24057f0afef5","savedPayload":{"position":{"x":19041.806237131383,"y":24621.548779403747},"targetPosition":{"x":18948.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Base","id":"c3249cad-9f26-4ff2-ab0d-968c66bb7f2d"}}},{"type":"Layer Polygon","name":"Left Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7190b437-b4e4-4481-aa8d-0b098507f923","savedPayload":{"position":{"x":18996.806237131383,"y":24617.548779403747},"targetPosition":{"x":18948.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Left Line","id":"dbd9d421-d90c-4ab8-a26b-c2254d7abec1"}}},{"type":"Layer Polygon","name":"Right Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8958f1f5-3e92-40ee-8e27-b8bdbefc8bd1","savedPayload":{"position":{"x":18983.806237131383,"y":24533.548779403747},"targetPosition":{"x":18948.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Right Line","id":"a5e40c24-183d-4896-97b0-f9f0f104c240"}}}],"id":"431537e0-2754-43f0-877a-c1bf674b9810","savedPayload":{"position":{"x":18948.806237131383,"y":24607.548779403747},"targetPosition":{"x":19035.806237131383,"y":24584.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"af2722a5-76ba-4fdd-80af-698dc15c36bc","savedPayload":{"position":{"x":19035.806237131383,"y":24584.548779403747},"targetPosition":{"x":19039.806237131383,"y":24533.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"232666b3-d751-4d95-9856-3becc53d579e"}}}],"layerFolders":[],"id":"545681fa-67ff-406d-9b9c-24648d870189","savedPayload":{"position":{"x":19039.806237131383,"y":24533.548779403747},"targetPosition":{"x":18949.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Object","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ff5970f3-c7c1-45e5-a5ed-f9532223ec6e","savedPayload":{"position":{"x":18677.806237131383,"y":24703.548779403747},"targetPosition":{"x":18766.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Object","id":"3d274e02-8896-4311-a0c8-9041b6507090"}}},{"type":"Layer Panel","name":"Position Combined Statistics","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"ad4887e0-af45-4cee-a896-47eca690937c","savedPayload":{"position":{"x":18721.806237131383,"y":24590.548779403747},"targetPosition":{"x":18766.806237131383,"y":24607.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Combined Statistics","id":"05d6bb3e-f975-471f-be1f-3215025ce6fe"}}}],"id":"9a8fc75b-7111-4d79-8dbd-fda5ad7e1c19","savedPayload":{"position":{"x":18766.806237131383,"y":24607.548779403747},"targetPosition":{"x":18786.806237131383,"y":24519.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Entry Target Rate Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d67585ba-eae4-4ff6-89b0-85f38a935c2f","savedPayload":{"position":{"x":18685.806237131383,"y":24566.548779403747},"targetPosition":{"x":18715.806237131383,"y":24489.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Entry Target Rate Line","id":"543ebae2-5624-49ad-a00f-df63335e92a9"}}},{"type":"Layer Polygon","name":"Exit Target Rate Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"64a71915-3900-4542-b713-42fd34528671","savedPayload":{"position":{"x":18762.806237131383,"y":24493.548779403747},"targetPosition":{"x":18715.806237131383,"y":24489.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Exit Target Rate Line","id":"b066c240-8552-4622-9597-77e812491910"}}}],"id":"f7765068-7305-4647-a0a2-fa110160c169","savedPayload":{"position":{"x":18715.806237131383,"y":24489.548779403747},"targetPosition":{"x":18786.806237131383,"y":24519.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"76570d26-14ee-4683-a409-11a007419685","savedPayload":{"position":{"x":18786.806237131383,"y":24519.548779403747},"targetPosition":{"x":18874.806237131383,"y":24469.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"3b12d7ca-5f2c-4275-832d-43ac08651bae"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Base Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a5d49c01-ef1c-490b-945e-79a67e694c71","savedPayload":{"position":{"x":19029.806237131383,"y":24424.548779403747},"targetPosition":{"x":18945.806237131383,"y":24450.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Base Asset","id":"b4298480-8922-4c40-ac79-b4484f8558bd"}}}],"id":"ea55a898-133e-4d9f-b30a-2b1ed09e8a27","savedPayload":{"position":{"x":18945.806237131383,"y":24450.548779403747},"targetPosition":{"x":18940.806237131383,"y":24548.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Profit Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5c1e4068-1ce6-493d-8d59-257f78c0853f","savedPayload":{"position":{"x":18800.806237131383,"y":24582.548779403747},"targetPosition":{"x":18882.806237131383,"y":24516.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Profit Triangle","id":"2628b290-a09a-4807-8a45-7ff5a880d195"}}},{"type":"Layer Polygon","name":"Loss Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"92db9d83-c0db-42a6-b4e5-83a8e96649c3","savedPayload":{"position":{"x":18967.806237131383,"y":24584.548779403747},"targetPosition":{"x":18882.806237131383,"y":24516.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Loss Triangle","id":"e37cfbb4-fe54-49ad-9525-29b0d77e082b"}}},{"type":"Layer Polygon","name":"Empty Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"78e9bec9-d16d-4798-8050-1e4aa1be76d9","savedPayload":{"position":{"x":18820.806237131383,"y":24452.548779403747},"targetPosition":{"x":18882.806237131383,"y":24516.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Empty Triangle","id":"23c30ca5-95ec-47b2-a65f-01969b1a5a78"}}}],"id":"8088abc9-ccc5-4ee3-b622-e8c167bf83cc","savedPayload":{"position":{"x":18882.806237131383,"y":24516.548779403747},"targetPosition":{"x":18940.806237131383,"y":24548.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"14391564-010b-489b-97aa-2f1a8fc936eb","savedPayload":{"position":{"x":18940.806237131383,"y":24548.548779403747},"targetPosition":{"x":18874.806237131383,"y":24469.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"8067f0a7-8073-4ad5-8768-309a38395145"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Position Quoted Asset","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a1f56ec7-4db7-4eac-853b-3a4b0ebbb23e","savedPayload":{"position":{"x":18988.806237131383,"y":24490.548779403747},"targetPosition":{"x":18911.806237131383,"y":24535.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Position Quoted Asset","id":"f15d0a31-30bd-49a6-8c45-1bcd1a9cc5a8"}}}],"id":"109138d2-3770-40c2-bb0f-2b902575ad3b","savedPayload":{"position":{"x":18911.806237131383,"y":24535.548779403747},"targetPosition":{"x":18937.806237131383,"y":24560.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Profit Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"09c5281d-252f-4ef6-b691-e054c7e99734","savedPayload":{"position":{"x":19015.806237131383,"y":24543.548779403747},"targetPosition":{"x":18955.806237131383,"y":24468.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Profit Triangle","id":"9cf82ef4-557e-498e-b121-ff28235b3a25"}}},{"type":"Layer Polygon","name":"Loss Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c3243af8-3556-48b1-96ec-578e11985c38","savedPayload":{"position":{"x":18883.806237131383,"y":24453.548779403747},"targetPosition":{"x":18955.806237131383,"y":24468.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Loss Triangle","id":"61faa796-9697-48b0-a582-613e1b351931"}}},{"type":"Layer Polygon","name":"Empty Triangle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"157c1d74-3a9f-4423-b7b7-d26fed9abeb3","savedPayload":{"position":{"x":19014.806237131383,"y":24553.548779403747},"targetPosition":{"x":18955.806237131383,"y":24468.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Empty Triangle","id":"58c807a3-8443-43d9-82e9-81c3d0545399"}}}],"id":"21c51814-e5ec-4e66-ba46-f339b44bae50","savedPayload":{"position":{"x":18955.806237131383,"y":24468.548779403747},"targetPosition":{"x":18937.806237131383,"y":24560.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"303df3f4-d21c-481b-be27-6e6502118a82","savedPayload":{"position":{"x":18937.806237131383,"y":24560.548779403747},"targetPosition":{"x":18874.806237131383,"y":24469.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"e53bba7e-05b0-4ebd-b054-04b6ad9b2c0f"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Stop Loss Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6844104e-d575-4b25-87b9-1c7d19b9c245","savedPayload":{"position":{"x":18953.806237131383,"y":24534.548779403747},"targetPosition":{"x":18912.806237131383,"y":24475.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Stop Loss Panel","id":"1b6d3bd0-e594-4b09-9f1c-021177676d84"}}}],"id":"c423bfd6-6321-4b5b-a161-2c2f132dcf60","savedPayload":{"position":{"x":18912.806237131383,"y":24475.548779403747},"targetPosition":{"x":18969.806237131383,"y":24563.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c41f484b-4a72-425b-b813-f32b27eb138e","savedPayload":{"position":{"x":18882.806237131383,"y":24591.548779403747},"targetPosition":{"x":18908.806237131383,"y":24525.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"9d351f29-6a3e-4c2b-b008-ebe1414d2aa8"}}}],"id":"8e8e47d3-1832-4ab0-8057-518c29e43a28","savedPayload":{"position":{"x":18908.806237131383,"y":24525.548779403747},"targetPosition":{"x":18969.806237131383,"y":24563.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"508df894-ce6a-4068-b34c-0f8157cc4776","savedPayload":{"position":{"x":18969.806237131383,"y":24563.548779403747},"targetPosition":{"x":18874.806237131383,"y":24469.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"9a1af2ed-4fa2-4e30-9dc8-7035b0ff628a"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Take Profit Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"10fed578-da9d-480f-8333-584375b4790f","savedPayload":{"position":{"x":19120.806237131383,"y":24498.548779403747},"targetPosition":{"x":19028.806237131383,"y":24432.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Take Profit Panel","id":"33aa2293-7958-4cc3-bb41-fc97c17ccd67"}}}],"id":"15b9d4a5-523c-467f-a5cf-82cedc860db7","savedPayload":{"position":{"x":19028.806237131383,"y":24432.548779403747},"targetPosition":{"x":18969.806237131383,"y":24427.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"5ddd134c-ca75-4369-a59c-304584d07a58","savedPayload":{"position":{"x":18884.806237131383,"y":24393.548779403747},"targetPosition":{"x":18920.806237131383,"y":24381.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"a0b598d2-cdb6-4ce7-96c5-ef3317ae1768"}}}],"id":"80f5a40e-06af-4c5c-8a11-0bb1c37a15d9","savedPayload":{"position":{"x":18920.806237131383,"y":24381.548779403747},"targetPosition":{"x":18969.806237131383,"y":24427.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d62bfaff-aca6-4e9d-a723-b14150d7e0ec","savedPayload":{"position":{"x":18969.806237131383,"y":24427.548779403747},"targetPosition":{"x":18874.806237131383,"y":24469.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"ad31c51f-124d-4e4b-bf88-400e8adf94a2"}}}],"layerFolders":[],"id":"d1e09819-72c1-4514-b530-7d74445b6502","savedPayload":{"position":{"x":18874.806237131383,"y":24469.548779403747},"targetPosition":{"x":18949.806237131383,"y":24513.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8d0a4d2-f608-4a09-aa0f-8359c5fe8b4a","savedPayload":{"position":{"x":18949.806237131383,"y":24513.548779403747},"targetPosition":{"x":18892.806237131383,"y":24550.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"438394a6-6bac-42fc-bb13-817d74ce1623","savedPayload":{"position":{"x":18892.806237131383,"y":24550.548779403747},"targetPosition":{"x":18863.806237131383,"y":24596.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f7895eb1-326b-4dda-b2c5-943ab7a44973","savedPayload":{"position":{"x":18863.806237131383,"y":24596.548779403747},"targetPosition":{"x":18860.806237131383,"y":24616.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"dbb24829-a94a-4a9c-b68c-a415bc2a0581"}}},"id":"7c376ff6-4640-4c0c-9cfa-1ad93cac23dc","savedPayload":{"position":{"x":18860.806237131383,"y":24616.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Masters Data","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{ \n\"visibleLayers\": 5\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Exchange Raw Data","project":"Superalgos","layers":[],"layerFolders":[],"id":"c4ac8a0b-1eb2-45a0-9f0b-691a3395bbee","savedPayload":{"position":{"x":18661.806237131383,"y":24706.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Webhooks","project":"Superalgos","layers":[],"layerFolders":[],"id":"9685008b-0ac5-43fd-8943-d56cfcf8e9d6","savedPayload":{"position":{"x":18609.806237131383,"y":24674.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f69061ed-9582-4432-b3dd-0e50e039bddf","savedPayload":{"position":{"x":18758.806237131383,"y":25105.548779403747},"targetPosition":{"x":18675.806237131383,"y":25016.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candle","id":"9336f4e6-d56b-4ed4-819d-0bb762ba1fdd"}}}],"id":"84b83fb7-fec2-4e68-9109-a9dcb34bbca7","savedPayload":{"position":{"x":18675.806237131383,"y":25016.548779403747},"targetPosition":{"x":18695.806237131383,"y":24939.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"be05526d-a985-4f58-bfb5-2446c39a6d51","savedPayload":{"position":{"x":18726.806237131383,"y":24947.548779403747},"targetPosition":{"x":18695.806237131383,"y":24939.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1d22b700-4c4c-45aa-99d4-66553aebce03","savedPayload":{"position":{"x":18695.806237131383,"y":24939.548779403747},"targetPosition":{"x":18729.806237131383,"y":24854.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"35b2db18-d9e6-4491-94a5-f99b3ff684ab"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Volume","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0d39f0a2-441e-4175-9d66-4b52b2e56b7b","savedPayload":{"position":{"x":18715.806237131383,"y":24660.548779403747},"targetPosition":{"x":18763.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Volume","id":"42dbd098-4550-44a0-987f-54a28dd5f40b"}}}],"id":"a01b2222-8c1f-4048-92bb-7379997181a6","savedPayload":{"position":{"x":18763.806237131383,"y":24723.548779403747},"targetPosition":{"x":18674.806237131383,"y":24818.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"d5bcaba9-d4be-40da-b9e5-8b1afa9208f7","savedPayload":{"position":{"x":18760.806237131383,"y":24911.548779403747},"targetPosition":{"x":18674.806237131383,"y":24818.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fb8cde51-e7e3-4ad9-970a-61defba4264f","savedPayload":{"position":{"x":18674.806237131383,"y":24818.548779403747},"targetPosition":{"x":18729.806237131383,"y":24854.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"ff9d5033-c3b6-4612-a206-e3cfaa56d2d0"}}}],"layerFolders":[],"id":"65d421c2-d8e1-40bf-abaa-cbdea7355d25","savedPayload":{"position":{"x":18729.806237131383,"y":24854.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9ac015c7-15d4-449e-acc4-fb6273d7f970","savedPayload":{"position":{"x":18673.806237131383,"y":24691.548779403747},"targetPosition":{"x":18743.806237131383,"y":24676.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Band","id":"de7b7008-6f66-4d7d-96dd-1aa7b1ede335"}}}],"id":"0f06dc03-5344-4ef3-ad43-5013d68c7cfc","savedPayload":{"position":{"x":18743.806237131383,"y":24676.548779403747},"targetPosition":{"x":18738.806237131383,"y":24715.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"b3fae7bb-f93e-4d66-9b35-84ef4639f197","savedPayload":{"position":{"x":18837.806237131383,"y":24776.548779403747},"targetPosition":{"x":18738.806237131383,"y":24715.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"57d999ca-95c9-4d37-9116-62b92132ef29","savedPayload":{"position":{"x":18738.806237131383,"y":24715.548779403747},"targetPosition":{"x":18702.806237131383,"y":24712.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"3dfbee36-5671-46d2-8135-246c5c7da7f1"}}},{"type":"Layer","name":"Percentage Bandwidth","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"%B Panel","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9d56c603-6096-43ef-9f35-10cf256d14d7","savedPayload":{"position":{"x":18747.806237131383,"y":24718.548779403747},"targetPosition":{"x":18673.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"%B Panel","id":"36548f31-d96c-4c80-b923-dea5dd5b56c7"}}}],"id":"953a81c5-06ac-4dd7-a2ff-f9fc14f906c3","savedPayload":{"position":{"x":18673.806237131383,"y":24741.548779403747},"targetPosition":{"x":18629.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Area From 0 to 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"1e61dd0a-508c-42a2-8c63-0c81ce5f2833","savedPayload":{"position":{"x":18733.806237131383,"y":24711.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 0 to 30","id":"d76f185f-5219-4f0b-adb3-9a339b0468c6"}}},{"type":"Layer Polygon","name":"Area From 30 to 70","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"dafe5936-6670-400a-b421-886909bef4b5","savedPayload":{"position":{"x":18694.806237131383,"y":24661.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 30 to 70","id":"1a7969dd-af18-4e44-b4c9-96dd2be57f7c"}}},{"type":"Layer Polygon","name":"Area From 70 to 100","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"335840c8-0724-4964-8798-5f70951173f8","savedPayload":{"position":{"x":18610.806237131383,"y":24620.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Area From 70 to 100","id":"cb1bcd11-0fb0-4377-bff2-dee4630e0f3f"}}},{"type":"Layer Polygon","name":"Line 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"929560ae-9c10-4695-9927-1ccf9f9d5d8e","savedPayload":{"position":{"x":18702.806237131383,"y":24685.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Line 30","id":"857043cc-f467-44d2-89eb-2e73f35f638d"}}},{"type":"Layer Polygon","name":"Line 30","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"816952f2-e84e-4a3c-a055-7e86452c19be","savedPayload":{"position":{"x":18704.806237131383,"y":24752.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Line 30","id":"984a1917-1d81-4142-a50f-269a18a07c9d"}}},{"type":"Layer Polygon","name":"Bandwidth","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a3574130-71a5-4e73-8ac3-7c0e725c8eff","savedPayload":{"position":{"x":18585.806237131383,"y":24794.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Bandwidth","id":"0f7a4004-177c-4412-b0ef-2608f3c13da6"}}},{"type":"Layer Polygon","name":"Value","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"68a5ba99-a115-4e28-a395-7a72d7c9db81","savedPayload":{"position":{"x":18599.806237131383,"y":24802.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Value","id":"4598a671-83b9-4460-9e65-175df73eba71"}}},{"type":"Layer Polygon","name":"Moving Average","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"44b5246b-d317-43c8-9c51-e3bef13065b0","savedPayload":{"position":{"x":18685.806237131383,"y":24651.548779403747},"targetPosition":{"x":18654.806237131383,"y":24719.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Moving Average","id":"69c19382-ed5b-48d1-9249-426a8e1e4e51"}}}],"id":"4cb465ff-dfa7-4049-9d0c-9e8271601a76","savedPayload":{"position":{"x":18654.806237131383,"y":24719.548779403747},"targetPosition":{"x":18629.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5d5e1eef-01dd-4469-af29-ed6518d05e55","savedPayload":{"position":{"x":18629.806237131383,"y":24741.548779403747},"targetPosition":{"x":18702.806237131383,"y":24712.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Percentage Bandwidth","id":"b0d61c8d-0d8b-42a3-874a-e3cc297c8f30"}}}],"layerFolders":[],"id":"87c84b55-8156-4f46-9a63-4c849330f1fc","savedPayload":{"position":{"x":18702.806237131383,"y":24712.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"df7c9c62-786d-446b-9f17-ba9eab636583","savedPayload":{"position":{"x":18725.806237131383,"y":24769.548779403747},"targetPosition":{"x":18655.806237131383,"y":24761.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Channels Objects","id":"09c8f781-3e54-4bed-bd9a-83e8179fdd66"}}}],"id":"59c4e69f-f62c-4ab3-badd-d3c6dabcdd41","savedPayload":{"position":{"x":18655.806237131383,"y":24761.548779403747},"targetPosition":{"x":18598.806237131383,"y":24734.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bfa59f6f-5480-46ea-b2e3-1eb4fb1d034e","savedPayload":{"position":{"x":18582.806237131383,"y":24688.548779403747},"targetPosition":{"x":18583.806237131383,"y":24787.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"6e21446c-93e7-44ad-814d-3cd2fa8f8baf"}}}],"id":"d7af4f7a-bbd2-4b92-8117-ed780b12d1f6","savedPayload":{"position":{"x":18583.806237131383,"y":24787.548779403747},"targetPosition":{"x":18598.806237131383,"y":24734.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"04923534-ac10-4e0e-95a7-850567de9746","savedPayload":{"position":{"x":18598.806237131383,"y":24734.548779403747},"targetPosition":{"x":18665.806237131383,"y":24692.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels Objects","id":"163096b0-76eb-4b22-8fb5-f9593675d6e3"}}},{"type":"Layer","name":"Bollinger Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fa33b57d-7342-4660-8a72-99029523f60f","savedPayload":{"position":{"x":18571.806237131383,"y":24898.548779403747},"targetPosition":{"x":18644.806237131383,"y":24826.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Channels","id":"abb4f289-c374-43e0-b8dc-d586d8e3328e"}}}],"id":"c23a1ec3-dd02-45ba-a3f6-ce7fbbed30c0","savedPayload":{"position":{"x":18644.806237131383,"y":24826.548779403747},"targetPosition":{"x":18597.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"cbc7d5fb-33dc-443e-9f5f-3076356959fc","savedPayload":{"position":{"x":18522.806237131383,"y":24810.548779403747},"targetPosition":{"x":18597.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"593fecfc-a5d9-451d-9682-5f26ec21ff5e","savedPayload":{"position":{"x":18597.806237131383,"y":24769.548779403747},"targetPosition":{"x":18665.806237131383,"y":24692.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels","id":"6c67459b-bb1e-435d-91de-06426d1bd4a3"}}},{"type":"Layer","name":"Bollinger Sub-Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Sub Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"678e38f2-ada3-4056-9685-e36af206a3c0","savedPayload":{"position":{"x":18798.806237131383,"y":24742.548779403747},"targetPosition":{"x":18782.806237131383,"y":24704.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Sub Channels Objects","id":"8ce4c7ca-3496-4df8-9d57-335d40cc77a0"}}}],"id":"6f5518a7-af31-4d7d-bef5-feda690fcfd2","savedPayload":{"position":{"x":18782.806237131383,"y":24704.548779403747},"targetPosition":{"x":18713.806237131383,"y":24620.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"8f586dad-8018-4f4e-8856-9159d5d9c5f6","savedPayload":{"position":{"x":18650.806237131383,"y":24564.548779403747},"targetPosition":{"x":18713.806237131383,"y":24620.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"52d180da-6210-4c23-bbdd-f692f6e6912d","savedPayload":{"position":{"x":18713.806237131383,"y":24620.548779403747},"targetPosition":{"x":18665.806237131383,"y":24692.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"fe561a7b-7453-4bdc-ac2f-596e4e83854e"}}},{"type":"Layer","name":"Bollinger Sub-Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Bollinger Sub Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c755e644-347b-47ea-87ad-9a4f7e211c5e","savedPayload":{"position":{"x":18663.806237131383,"y":24739.548779403747},"targetPosition":{"x":18624.806237131383,"y":24729.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Bollinger Sub Channels","id":"1beae26c-7235-46ef-a732-1d0c9f18dda5"}}}],"id":"226b6395-2856-4c2b-afcc-4463af522ce0","savedPayload":{"position":{"x":18624.806237131383,"y":24729.548779403747},"targetPosition":{"x":18581.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"31ff10e3-abec-43c3-952b-affa6470806d","savedPayload":{"position":{"x":18570.806237131383,"y":24791.548779403747},"targetPosition":{"x":18581.806237131383,"y":24741.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"80605063-6195-4e6a-a01d-b2e41f9dfb0f","savedPayload":{"position":{"x":18581.806237131383,"y":24741.548779403747},"targetPosition":{"x":18665.806237131383,"y":24692.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels","id":"0ee8225c-fa64-462e-adc6-cef19daf53e3"}}}],"layerFolders":[],"id":"49889c57-1adf-4430-b59f-d9d14e7c40af","savedPayload":{"position":{"x":18665.806237131383,"y":24692.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candle Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Candles Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candles Channels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"7c8d80f3-b264-4249-8e35-c61711bf4631","savedPayload":{"position":{"x":18699.806237131383,"y":24825.548779403747},"targetPosition":{"x":18600.806237131383,"y":24857.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candles Channels","id":"d21f5c62-0455-4671-89c1-f9d96a75f349"}}}],"id":"00ecdf6f-2429-4160-a6b9-52be7df931c2","savedPayload":{"position":{"x":18600.806237131383,"y":24857.548779403747},"targetPosition":{"x":18635.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[],"id":"7ae9aaf2-a086-4b8c-b886-772f27ebbc39","savedPayload":{"position":{"x":18716.806237131383,"y":24775.548779403747},"targetPosition":{"x":18635.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"11916594-63d1-45c3-b751-66c812f5e95c","savedPayload":{"position":{"x":18635.806237131383,"y":24769.548779403747},"targetPosition":{"x":18719.806237131383,"y":24802.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles Channels","id":"e9be1c1b-00a5-4d46-9c61-7c58d8d674a8"}}},{"type":"Layer","name":"Candles Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Candles Channels Objects","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"4bd70d46-a955-453c-814c-dddc24a4a2ba","savedPayload":{"position":{"x":18679.806237131383,"y":24755.548779403747},"targetPosition":{"x":18767.806237131383,"y":24817.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Candles Channels Objects","id":"8b63674c-b728-4a00-8b3c-331d7ba2a93b"}}}],"id":"0d041519-4608-44f5-ad01-2dfa3a1e7f51","savedPayload":{"position":{"x":18767.806237131383,"y":24817.548779403747},"targetPosition":{"x":18788.806237131383,"y":24876.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e41c023c-4625-4586-9679-e1fb245cd457","savedPayload":{"position":{"x":18755.806237131383,"y":24873.548779403747},"targetPosition":{"x":18694.806237131383,"y":24870.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"5383ea8f-c9ed-463e-a7d4-dc5cb6c40dff"}}}],"id":"be053ade-2dc7-4b01-b2ee-aa58f0f8470d","savedPayload":{"position":{"x":18694.806237131383,"y":24870.548779403747},"targetPosition":{"x":18788.806237131383,"y":24876.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dacad979-2ebc-418b-a2ad-2418bcfc2dd8","savedPayload":{"position":{"x":18788.806237131383,"y":24876.548779403747},"targetPosition":{"x":18719.806237131383,"y":24802.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles Channels Objects","id":"c2d145fa-f516-46c3-9868-4d2a0953c7ec"}}}],"layerFolders":[],"id":"d60411dc-6e3b-4bca-b85f-40f58505765a","savedPayload":{"position":{"x":18719.806237131383,"y":24802.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Resistances and Supports","project":"Superalgos","layers":[{"type":"Layer","name":"Resistances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Resistance Bounces","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fee2d590-f97c-4784-a983-35ad8526e97a","savedPayload":{"position":{"x":18678.806237131383,"y":24608.548779403747},"targetPosition":{"x":18647.806237131383,"y":24614.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Bounces","id":"ae66154f-2772-495c-a77b-1989dba9a3e7"}}},{"type":"Layer Panel","name":"Resistance Levels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"38b44d15-dbf2-4f10-a377-c78106176c7e","savedPayload":{"position":{"x":18636.806237131383,"y":24645.548779403747},"targetPosition":{"x":18647.806237131383,"y":24614.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Levels","id":"dfd9d091-e377-4ece-be8c-5916271e161b"}}},{"type":"Layer Panel","name":"Resistance Zone Sizes","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a3e3a313-0bb8-4c87-97ef-28a7d7ddc070","savedPayload":{"position":{"x":18667.806237131383,"y":24571.548779403747},"targetPosition":{"x":18647.806237131383,"y":24614.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Resistance Zone Sizes","id":"5341a87b-52b4-455d-b8f6-d1cbc4102fb1"}}}],"id":"cfc85382-45a3-4a6a-a42d-9fba9aed0f94","savedPayload":{"position":{"x":18647.806237131383,"y":24614.548779403747},"targetPosition":{"x":18640.806237131383,"y":24673.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Resistance Line 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"93c4e0ae-a0e1-4bfa-8e21-441de99c88fc","savedPayload":{"position":{"x":18794.806237131383,"y":24715.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 1","id":"0c38b25a-d207-430e-ae5a-9ba55227c974"}}},{"type":"Layer Polygon","name":"Resistance Line 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"82de2fc8-64e0-4d27-b23c-6cb0fefe3706","savedPayload":{"position":{"x":18766.806237131383,"y":24756.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 2","id":"532beef7-8d2e-4899-9c99-850db799d9a2"}}},{"type":"Layer Polygon","name":"Resistance Line 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9f1a5bd6-5681-4bc5-a931-176d95d1c8af","savedPayload":{"position":{"x":18780.806237131383,"y":24799.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 3","id":"9eb7ed64-8225-41de-ab73-3297d19e1529"}}},{"type":"Layer Polygon","name":"Resistance Line 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"217a1251-cc57-4f4f-a18a-4ef7d797493e","savedPayload":{"position":{"x":18682.806237131383,"y":24739.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 4","id":"b8b29e5a-49aa-45cb-b6f3-0ba78dd97899"}}},{"type":"Layer Polygon","name":"Resistance Line 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e2d616c7-4211-4bb8-9bed-80c49c3bac43","savedPayload":{"position":{"x":18626.806237131383,"y":24805.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Line 5","id":"0582dc0b-1512-4762-8340-aabeadad6643"}}},{"type":"Layer Polygon","name":"Resistance Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"131281fe-4c80-4b94-a166-96c50849a60b","savedPayload":{"position":{"x":18676.806237131383,"y":24696.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Base","id":"c62d156c-4686-45a4-af42-283999dd1200"}}},{"type":"Layer Polygon","name":"Resistance Zone 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"23bc4ead-bb58-40e8-97b7-5d7a61fd20d3","savedPayload":{"position":{"x":18663.806237131383,"y":24710.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 1","id":"ca9666cf-e40b-46af-902d-050c1956b702"}}},{"type":"Layer Polygon","name":"Resistance Zone 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d3337541-9978-406f-9597-74c4d0171244","savedPayload":{"position":{"x":18644.806237131383,"y":24618.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 2","id":"3032c972-5916-496b-9aec-fb9f49a9237f"}}},{"type":"Layer Polygon","name":"Resistance Zone 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6014ba50-5a7b-4d26-896c-2de3c31d7b6e","savedPayload":{"position":{"x":18725.806237131383,"y":24636.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 3","id":"753efd9a-f48d-4826-89ac-7f046667a26c"}}},{"type":"Layer Polygon","name":"Resistance Zone 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a6c121a2-b849-41da-8a4e-f1fa65230097","savedPayload":{"position":{"x":18734.806237131383,"y":24772.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 4","id":"0fb57b23-fb5d-429c-bc75-84008becc00e"}}},{"type":"Layer Polygon","name":"Resistance Zone 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d95e2a6e-f480-44b9-83ba-915a962798d0","savedPayload":{"position":{"x":18728.806237131383,"y":24722.548779403747},"targetPosition":{"x":18719.806237131383,"y":24707.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Resistance Zone 5","id":"550e31bb-a95f-4fad-bfbb-b42aae7dc5d3"}}}],"id":"a84976c2-05d3-4415-bcec-e605c2a7e783","savedPayload":{"position":{"x":18719.806237131383,"y":24707.548779403747},"targetPosition":{"x":18640.806237131383,"y":24673.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"78f59728-77b2-43f7-bbf7-4914094be6e1","savedPayload":{"position":{"x":18640.806237131383,"y":24673.548779403747},"targetPosition":{"x":18694.806237131383,"y":24684.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Resistances","id":"99da949c-d4fe-4ebe-ac5b-8180e2c35f2b"}}},{"type":"Layer","name":"Supports","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Support Levels","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"6e5612d7-de18-46aa-8f66-61e02f18c931","savedPayload":{"position":{"x":18740.806237131383,"y":24668.548779403747},"targetPosition":{"x":18666.806237131383,"y":24703.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Levels","id":"635f72c8-0556-46db-87cf-4c15449c1e70"}}},{"type":"Layer Panel","name":"Support Bounces","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a9ea9c44-5546-45c0-a1e5-3040b0fae552","savedPayload":{"position":{"x":18751.806237131383,"y":24636.548779403747},"targetPosition":{"x":18666.806237131383,"y":24703.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Bounces","id":"7d34b4e7-0593-4b2a-8e4f-a06e6625f6d5"}}},{"type":"Layer Panel","name":"Support Zone Sizes","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d4949443-6b70-4ef3-885c-8840d54a2eab","savedPayload":{"position":{"x":18618.806237131383,"y":24618.548779403747},"targetPosition":{"x":18666.806237131383,"y":24703.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Support Zone Sizes","id":"24739677-7e84-4013-81db-db4de744c467"}}}],"id":"30fa3bfb-5f84-4fa4-9603-daf5606bdf5c","savedPayload":{"position":{"x":18666.806237131383,"y":24703.548779403747},"targetPosition":{"x":18708.806237131383,"y":24734.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Support Line 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"a8495406-1d55-4f0e-893c-91affcda1002","savedPayload":{"position":{"x":18657.806237131383,"y":24662.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 1","id":"8baf5a5e-fde5-4405-aea2-035bfa3872c1"}}},{"type":"Layer Polygon","name":"Support Line 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"55792ac3-19a6-4851-a6fd-70fcf0964705","savedPayload":{"position":{"x":18717.806237131383,"y":24757.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 2","id":"baca2e09-2b91-4b8b-9176-e758bfcb4258"}}},{"type":"Layer Polygon","name":"Support Line 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b770950c-17b6-461f-aa44-b0ec7dc01414","savedPayload":{"position":{"x":18732.806237131383,"y":24775.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 3","id":"fbe179c2-99ac-44f0-952c-c9ebb205b252"}}},{"type":"Layer Polygon","name":"Support Line 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"91f66b78-4e3f-4555-8ea5-209957b17fcd","savedPayload":{"position":{"x":18709.806237131383,"y":24641.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 4","id":"764238be-83c1-4523-a7a8-8f8245651b61"}}},{"type":"Layer Polygon","name":"Support Line 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"bdcbfdd4-52e0-4887-8bf3-8d004a3ac7f9","savedPayload":{"position":{"x":18661.806237131383,"y":24715.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Line 5","id":"96977063-3da0-4745-9c71-782818e4a157"}}},{"type":"Layer Polygon","name":"Support Base","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f56c7de6-23fe-4529-b34f-977c5b983d84","savedPayload":{"position":{"x":18769.806237131383,"y":24637.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Base","id":"b4567b9b-e1e1-463b-bf64-ab3e25bcbced"}}},{"type":"Layer Polygon","name":"Support Zone 1","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"2cc077ae-3b49-4696-b2e8-ba5d985b8fd2","savedPayload":{"position":{"x":18721.806237131383,"y":24698.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 1","id":"d4705ff6-d94b-4f94-8fd0-9215cf9844ad"}}},{"type":"Layer Polygon","name":"Support Zone 2","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"95811a71-f83d-46dc-8114-fb7f0aff15be","savedPayload":{"position":{"x":18694.806237131383,"y":24694.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 2","id":"40c0fced-4d4b-476f-becb-4201ccb21c2f"}}},{"type":"Layer Polygon","name":"Support Zone 3","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"77c6c10e-a9d9-4182-be84-01c8d32b9f73","savedPayload":{"position":{"x":18694.806237131383,"y":24737.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 3","id":"dfa786b7-df65-4c51-b088-dd550ae0c5df"}}},{"type":"Layer Polygon","name":"Support Zone 4","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"b5080c80-92b3-4151-9904-d7c13e86ef18","savedPayload":{"position":{"x":18719.806237131383,"y":24625.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 4","id":"c246d453-c21e-4977-a94c-395c8ddfcee1"}}},{"type":"Layer Polygon","name":"Support Zone 5","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"d6707c00-7af6-4a96-b12c-85fcdafcf237","savedPayload":{"position":{"x":18788.806237131383,"y":24605.548779403747},"targetPosition":{"x":18739.806237131383,"y":24678.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Support Zone 5","id":"be7397f9-5610-4d38-86ee-90c2dfceceef"}}}],"id":"0a206137-9b47-4394-9413-b99166c063ee","savedPayload":{"position":{"x":18739.806237131383,"y":24678.548779403747},"targetPosition":{"x":18708.806237131383,"y":24734.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08f92c18-6dbe-4305-b2cc-ed84bffe9836","savedPayload":{"position":{"x":18708.806237131383,"y":24734.548779403747},"targetPosition":{"x":18694.806237131383,"y":24684.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Supports","id":"bfd82272-44a7-44de-b293-e48728625231"}}}],"layerFolders":[],"id":"e87c2659-3d15-4605-8301-9e3ef2f1b1ac","savedPayload":{"position":{"x":18694.806237131383,"y":24684.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Fees Band","project":"Superalgos","layers":[{"type":"Layer","name":"Fees Band 0.2","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"61b062a5-263d-4d54-a8e0-0946a2bcc4ae","savedPayload":{"position":{"x":18742.806237131383,"y":24828.548779403747},"targetPosition":{"x":18782.806237131383,"y":24854.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"New Polygon","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c21aa09c-7ea6-44e4-a3cc-12386b653a0d","savedPayload":{"position":{"x":18835.806237131383,"y":24918.548779403747},"targetPosition":{"x":18860.806237131383,"y":24897.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"New Polygon","id":"170768fe-218b-4efc-84b1-7fe4360c4bc6"}}},{"type":"Layer Polygon","name":"Upper Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"fd93d54d-f37a-498c-b6ec-6f6dfe71cb97","savedPayload":{"position":{"x":18824.806237131383,"y":24911.548779403747},"targetPosition":{"x":18860.806237131383,"y":24897.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Upper Line","id":"93a6b8eb-8c5d-4661-858f-9eb37058f104"}}},{"type":"Layer Polygon","name":"Lower Line","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"17b065b0-fccd-44e9-8bb9-e7e2c41be556","savedPayload":{"position":{"x":18906.806237131383,"y":24876.548779403747},"targetPosition":{"x":18860.806237131383,"y":24897.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Lower Line","id":"3ccd3764-3fbe-4da1-929f-4b349e4cc8fa"}}}],"id":"96e3e981-31d7-4a1b-8439-273dac3ba141","savedPayload":{"position":{"x":18860.806237131383,"y":24897.548779403747},"targetPosition":{"x":18782.806237131383,"y":24854.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"edc2ed96-0921-4326-bc69-186410380668","savedPayload":{"position":{"x":18782.806237131383,"y":24854.548779403747},"targetPosition":{"x":18697.806237131383,"y":24857.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Fees Band 0.2","id":"86e9384d-a022-4af2-b98d-ec2b518a3e03"}}}],"layerFolders":[],"id":"4872d621-98ab-49ac-93d0-fba90f501adc","savedPayload":{"position":{"x":18697.806237131383,"y":24857.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Volume Analysis","project":"Superalgos","layers":[{"type":"Layer","name":"Volume Analysis","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[],"id":"8105d5c0-f78f-4879-bf4a-213b0adc3d0c","savedPayload":{"position":{"x":18815.806237131383,"y":24794.548779403747},"targetPosition":{"x":18772.806237131383,"y":24862.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Buy Volume Bar","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"461ecfa9-fd33-496f-8f6f-7add74a6ce14","savedPayload":{"position":{"x":18727.806237131383,"y":24935.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy Volume Bar","id":"11f192dc-eb4a-48ee-81cc-a484285bfe6f"}}},{"type":"Layer Polygon","name":"Sell Volume Bar","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"e2bc22ff-7ed3-49b5-920b-71c8f3a499d2","savedPayload":{"position":{"x":18774.806237131383,"y":24806.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell Volume Bar","id":"480b24b1-8ee9-4018-86d1-362f149f7881"}}},{"type":"Layer Polygon","name":"Buy SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"dab8f516-e198-41d1-ac78-f3f6b1cdb291","savedPayload":{"position":{"x":18613.806237131383,"y":24811.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy SMA 20","id":"ec629e5c-341a-4cc3-8ebd-61327c596cbd"}}},{"type":"Layer Polygon","name":"Sell SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"97be4fae-9160-4dfb-b89a-f03f35735cb2","savedPayload":{"position":{"x":18744.806237131383,"y":24820.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell SMA 20","id":"b85ff160-cf73-452a-b824-58010659c377"}}},{"type":"Layer Polygon","name":"Buy SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"8af47956-9fad-4389-9a8d-f26c0d5ed907","savedPayload":{"position":{"x":18696.806237131383,"y":24765.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Buy SMA 20","id":"6b7e1de7-03c6-42e1-b965-83f3ed9f0c29"}}},{"type":"Layer Polygon","name":"Sell SMA 20","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"f3a2f217-0079-4119-bfb0-bfe810158082","savedPayload":{"position":{"x":18626.806237131383,"y":24792.548779403747},"targetPosition":{"x":18696.806237131383,"y":24855.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Sell SMA 20","id":"79bbc8bc-1138-4669-b0b3-9113cdde1353"}}}],"id":"e247d9eb-4af5-4d54-bbe3-59f903173f57","savedPayload":{"position":{"x":18696.806237131383,"y":24855.548779403747},"targetPosition":{"x":18772.806237131383,"y":24862.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81b1294f-94a9-47e2-bda2-115108b3a205","savedPayload":{"position":{"x":18772.806237131383,"y":24862.548779403747},"targetPosition":{"x":18706.806237131383,"y":24826.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volume Analysis","id":"bae93f19-110a-450f-b7a2-ddd85c7ef21d"}}}],"layerFolders":[],"id":"e7eac769-67c3-4bc1-a0b3-b331cb15e267","savedPayload":{"position":{"x":18706.806237131383,"y":24826.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candle Analysis","project":"Superalgos","layers":[{"type":"Layer","name":"Candle Analysis","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","layerPanels":{"type":"Layer Panels","name":"New Layer Panels","project":"Superalgos","layerPanels":[{"type":"Layer Panel","name":"Current Candle","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"9fb94919-3075-46c8-a88a-4946189521df","savedPayload":{"position":{"x":18468.806237131383,"y":24549.548779403747},"targetPosition":{"x":18547.806237131383,"y":24633.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Current Candle","id":"2e9d7744-eb1c-40f0-bc8c-46426e14691d"}}},{"type":"Layer Panel","name":"Last 24 Hs","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"0f280fc7-6aa3-4081-9af6-d0f261c4912a","savedPayload":{"position":{"x":18614.806237131383,"y":24641.548779403747},"targetPosition":{"x":18547.806237131383,"y":24633.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Panel","name":"Last 24 Hs","id":"7a840ca8-b174-45f5-a23e-eb333d46e295"}}}],"id":"50103c50-fe9c-425f-bc05-b3d5826f8daa","savedPayload":{"position":{"x":18547.806237131383,"y":24633.548779403747},"targetPosition":{"x":18548.806237131383,"y":24730.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"layerPolygons":{"type":"Layer Polygons","name":"New Layer Polygons","project":"Superalgos","layerPolygons":[{"type":"Layer Polygon","name":"Min Max Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"3b82097e-22d9-4e68-9468-9486fcf97ace","savedPayload":{"position":{"x":18660.806237131383,"y":24669.548779403747},"targetPosition":{"x":18600.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Min Max Band","id":"b055b3b0-ee85-4d6a-bb97-7c746bf75cb3"}}},{"type":"Layer Polygon","name":"Open Close Band","config":"{ \n\"status\": \"on\"\n}","project":"Superalgos","id":"c5a63816-414e-4c46-ae61-86af887d2758","savedPayload":{"position":{"x":18669.806237131383,"y":24734.548779403747},"targetPosition":{"x":18600.806237131383,"y":24769.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Polygon","name":"Open Close Band","id":"d43d1db4-07e3-4e86-a7e7-c71774e461d7"}}}],"id":"86622ee3-2baf-49e0-8fff-e737f0cb768d","savedPayload":{"position":{"x":18600.806237131383,"y":24769.548779403747},"targetPosition":{"x":18548.806237131383,"y":24730.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61c6e4bc-b848-41b2-97a0-ec0faaba109d","savedPayload":{"position":{"x":18548.806237131383,"y":24730.548779403747},"targetPosition":{"x":18647.806237131383,"y":24768.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candle Analysis","id":"2532eebb-09d1-4a98-8044-c2f7b597ddef"}}}],"layerFolders":[],"id":"97c1d63c-4cf5-49b1-9540-5b47dd6ceb0d","savedPayload":{"position":{"x":18647.806237131383,"y":24768.548779403747},"targetPosition":{"x":18686.806237131383,"y":24772.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f42ca6be-6dbe-480f-8d32-150619462c7c","savedPayload":{"position":{"x":18686.806237131383,"y":24772.548779403747},"targetPosition":{"x":18741.806237131383,"y":24680.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"b25b2a76-5d96-409d-9ad3-7e56f9e4ce58"}}},"id":"1de1e068-9b93-44dd-acdf-a622c89d20b3","savedPayload":{"position":{"x":18741.806237131383,"y":24680.548779403747},"targetPosition":{"x":18769.806237131383,"y":24634.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8064eabd-75a2-4dfb-82f3-e2145311d079","savedPayload":{"position":{"x":18600.806237131383,"y":24463.741158268414},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Lightning Strike","id":"eb816d48-3d58-41f7-921a-a4237379d379"}}}],"id":"b7e04999-97b0-400a-bd6b-63d9ef43a028","savedPayload":{"position":{"x":18750.806237131383,"y":24723.548779403747},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Production Environment","name":"New Production Environment","id":"65a40d20-837c-4652-8356-f8054b4e1346"}}}],"id":"21d2ec55-9e56-4652-8e96-c7e451262c36","savedPayload":{"position":{"x":18900.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Plugins","name":"New Plugins","project":"Superalgos","pluginProjects":[{"type":"Plugin Project","name":"Ethereum","config":"{\"codeName\":\"Ethereum\"}","project":"Superalgos","id":"080ae7ae-0647-404f-854a-a46db8136612","savedPayload":{"position":{"x":31120.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plugin Project","name":"Superalgos","config":"{\"codeName\":\"Superalgos\"}","project":"Superalgos","pluginDataMines":{"type":"Plugin Data Mines","name":"New Plugin Data Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","id":"62acab22-6e55-4189-b932-17b344adfbe6","savedPayload":{"position":{"x":30894.472162370268,"y":19147.901265375764},"targetPosition":{"x":30707.42522181265,"y":18913.351820635355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9d87e0c6-13e5-496d-88b4-14ba61a0e4d3","savedPayload":{"position":{"x":30707.42522181265,"y":18913.351820635355},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingMines":{"type":"Plugin Trading Mines","name":"New Plugin Trading Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","id":"6d6003e5-e377-41f6-b8a5-6184273f46a8","savedPayload":{"position":{"x":30386.86572088124,"y":19263.75912320404},"targetPosition":{"x":30453.622001068135,"y":18971.280749549493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2f2fe9c3-d8d4-4a99-856e-2195c85e62c3","savedPayload":{"position":{"x":30453.622001068135,"y":18971.280749549493},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingSystems":{"type":"Plugin Trading Systems","name":"New Plugin Trading Systems","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters-Lightning-Strike","project":"Superalgos","id":"b51e293d-6367-4ac2-9d88-7935c8fa4d84","savedPayload":{"position":{"x":29979.796960513577,"y":18939.13261936548},"targetPosition":{"x":30250.087620884304,"y":18808.967497630212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f229165f-60e8-4348-bd37-655e492723d2","savedPayload":{"position":{"x":30250.087620884304,"y":18808.967497630212},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingEngines":{"type":"Plugin Trading Engines","name":"New Plugin Trading Engines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Low-Frequency","project":"Superalgos","id":"42b817b7-33ec-492b-a1b8-e01e71a4a576","savedPayload":{"position":{"x":29979.796960513577,"y":18418.472132424413},"targetPosition":{"x":30250.087620884304,"y":18548.63725415968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bdfc297d-7b5b-4838-a9c4-16014e15b479","savedPayload":{"position":{"x":30250.087620884304,"y":18548.63725415968},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginSuperScripts":{"type":"Plugin Super Scripts","name":"New Plugin Super Scripts","project":"Superalgos","pluginFiles":[],"id":"dea5908f-4e0c-4582-9fc0-651453584254","savedPayload":{"position":{"x":30453.622001068135,"y":18386.3240022404},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTutorials":{"type":"Plugin Tutorials","name":"New Plugin Tutorials","project":"Superalgos","pluginFiles":[],"id":"ae6e3f80-0770-474b-88d7-4a6bf4698873","savedPayload":{"position":{"x":30707.42522181265,"y":18444.252931154537},"targetPosition":{"x":30520.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"770aafde-9b69-4cc0-9839-d6fd9aec7dc8","savedPayload":{"position":{"x":30520.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6","savedPayload":{"position":{"x":30820.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Design Space","name":"My Design Space","project":"Superalgos","spaceStyle":{"type":"Space Style","name":"My Space Style","config":" {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }","project":"Superalgos","id":"fad0e429-f7a7-4b62-a2a5-2ead29b8f695","savedPayload":{"position":{"x":25236.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"spaceSettings":{"type":"Space Settings","name":"New Space Settings","config":"{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}","project":"Superalgos","id":"05c9d6d5-24c4-4eec-9aca-9668d6486fdd","savedPayload":{"position":{"x":24636.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8485ce5-67f3-4476-b9e2-80994e49c318","savedPayload":{"position":{"x":24936.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":255,"y":588.3125}}}},{"type":"Ethereum Project","name":"My Ethereum Project","project":"Ethereum","id":"11f56dab-fa41-4d8c-973f-cc18546aecde","savedPayload":{"position":{"x":27514,"y":24995.5},"targetPosition":{"x":27514,"y":24995.5},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Superalgos Project","name":"My Superalgos Project","project":"Superalgos","id":"88808da0-70a8-4757-a3f0-cbd558027db3","savedPayload":{"position":{"x":22436,"y":25008.5},"targetPosition":{"x":22436,"y":25008.5},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Ethereum Blockchain","name":"New Ethereum Blockchain","project":"Ethereum","blockchainNetworks":[{"type":"Blockchain Network","name":"Mainnet","project":"Ethereum","networkClients":[],"id":"444955ee-4f69-4610-b6ec-e3295da4cd8a","savedPayload":{"position":{"x":37131,"y":25014.25},"targetPosition":{"x":36831,"y":25014.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Blockchain Network","name":"Ropsten","project":"Ethereum","networkClients":[{"type":"Network Client","name":"New Network Client","config":"{ \n\"host\": \"localhost\", \n\"webSocketsPort\": \"8545\"\n}","project":"Ethereum","id":"215466f1-a96f-4efa-88c8-cb95d13819ab","savedPayload":{"position":{"x":36531,"y":25533.865242270665},"targetPosition":{"x":36681,"y":25274.057621135333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"a119dfa0-3430-46f7-a531-b796c4f4c7ea","savedPayload":{"position":{"x":36681,"y":25274.057621135333},"targetPosition":{"x":36831,"y":25014.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Blockchain Network","name":"Ganache","project":"Ethereum","networkClients":[],"id":"03c820ff-4391-41ad-91ff-ad8316cd9e17","savedPayload":{"position":{"x":36681,"y":24754.442378864667},"targetPosition":{"x":36831,"y":25014.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8eb8027b-9e7b-4769-b45a-79bb44a684dd","savedPayload":{"position":{"x":36831,"y":25014.25},"targetPosition":{"x":36831,"y":25014.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Ethereum Token Definitions","name":"New Ethereum Token Definitions","project":"Ethereum","erc-20TokenType":{"type":"ERC-20 Token Type","name":"New ERC-20 Token Type","project":"Ethereum","ethereumToken":{"type":"Ethereum Token","name":"USDT","config":"{ \n\"codeName\": \"\"\n}","project":"Ethereum","id":"bd51930a-be0f-474e-82a9-d1531aaaab9f","savedPayload":{"position":{"x":42853.666666666664,"y":24985},"targetPosition":{"x":42553.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"119dd8ba-f4f6-4542-ac7c-2a588b306c25","savedPayload":{"position":{"x":42553.666666666664,"y":24985},"targetPosition":{"x":42253.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"erc-223TokenType":{"type":"ERC-223 Token Type","name":"New ERC-223 Token Type","project":"Ethereum","id":"d284d761-20e0-4aa7-a22f-61967052c0e2","savedPayload":{"position":{"x":42253.666666666664,"y":25285},"targetPosition":{"x":42253.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"erc-721TokenType":{"type":"ERC-721 Token Type","name":"New ERC-721 Token Type","project":"Ethereum","id":"0343fbc9-aff7-40dc-9629-62f3afb06fba","savedPayload":{"position":{"x":41953.666666666664,"y":24985},"targetPosition":{"x":42253.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"erc-777TokenType":{"type":"ERC-777 Token Type","name":"New ERC-777 Token Type","project":"Ethereum","id":"a592b3a7-4f97-4f27-9a90-9037200ad6cf","savedPayload":{"position":{"x":42253.666666666664,"y":24685},"targetPosition":{"x":42253.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ed9737c6-13dd-4f06-ae13-ca1dcbfaba79","savedPayload":{"position":{"x":42253.666666666664,"y":24985},"targetPosition":{"x":42253.666666666664,"y":24985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Ethereum Wallet","name":"New Ethereum Wallet","project":"Ethereum","walletKeys":{"type":"Wallet Keys","name":"New Wallet Keys","config":"{ \n\"privateKey\": \"\", \n\"publicKey\": \"\"\n}","project":"Ethereum","id":"0c1c8cdf-7527-41db-8f40-a0577bb09ff5","savedPayload":{"position":{"x":48022.708333333336,"y":24950.35087719298},"targetPosition":{"x":47722.708333333336,"y":24950.35087719298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"walletAccount":[{"type":"Wallet Account","name":"New Wallet Account","config":"{ \n\"value\": \"\"\n}","project":"Ethereum","ethBalance":{"type":"ETH Balance","name":"New ETH Balance","project":"Ethereum","id":"dc1dcd5d-7d16-42dd-9590-aebe15851d12","savedPayload":{"position":{"x":47722.708333333336,"y":25469.966119463646},"targetPosition":{"x":47572.708333333336,"y":25210.158498328314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"tokenBalance":[{"type":"Token Balance","name":"USDT","project":"Ethereum","id":"ac760f28-bed9-4c00-861b-afecbd3e1645","savedPayload":{"position":{"x":47272.708333333336,"y":25210.158498328314},"targetPosition":{"x":47572.708333333336,"y":25210.158498328314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Ethereum Token","name":"USDT","id":"bd51930a-be0f-474e-82a9-d1531aaaab9f"}}}],"id":"370daa35-9505-4ba8-a753-a90b5702d2b7","savedPayload":{"position":{"x":47572.708333333336,"y":25210.158498328314},"targetPosition":{"x":47722.708333333336,"y":24950.35087719298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Wallet Account","name":"New Wallet Account","config":"{ \n\"value\": \"\"\n}","project":"Ethereum","tokenBalance":[],"id":"288c38f9-da13-433d-883c-7a301293e60f","savedPayload":{"position":{"x":47572.708333333336,"y":24690.54325605765},"targetPosition":{"x":47722.708333333336,"y":24950.35087719298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"edfe9b91-34bd-44ad-af34-bd003bd4e2c8","savedPayload":{"position":{"x":47722.708333333336,"y":24950.35087719298},"targetPosition":{"x":47722.708333333336,"y":24950.35087719298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Ethereum Decentralized Application","name":"Sample DAPP","project":"Ethereum","smartContracts":[{"type":"Smart Contract","name":"New Smart Contract","project":"Ethereum","smartContractAccount":{"type":"Smart Contract Account","name":"New Smart Contract Account","config":"{ \n\"value\": \"\"\n}","project":"Ethereum","id":"94d5feb2-1490-4fd5-bb32-22e65fccaa5b","savedPayload":{"position":{"x":37298,"y":30721.692378864667},"targetPosition":{"x":37148,"y":30981.5},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"solidityCode":{"type":"Solidity Code","name":"New Solidity Code","code":"// Type your smart contract code here.","project":"Ethereum","id":"e966b1b9-148a-456a-953a-bb916a2d131f","savedPayload":{"position":{"x":37298,"y":31241.307621135333},"targetPosition":{"x":37148,"y":30981.5},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"42b1e7ae-c46a-4f0c-bcc5-3b3c0093f1af","savedPayload":{"position":{"x":37148,"y":30981.5},"targetPosition":{"x":36848,"y":30981.5},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Smart Contract","name":"New Smart Contract","project":"Ethereum","id":"8bfb30a0-cdde-4563-b2ff-f08b3d62e96d","savedPayload":{"position":{"x":36698,"y":31241.307621135333},"targetPosition":{"x":36848,"y":30981.5},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Smart Contract","name":"New Smart Contract","project":"Ethereum","id":"cfb5da23-5d6e-4d73-bc01-002b47bb08c5","savedPayload":{"position":{"x":36698,"y":30721.692378864667},"targetPosition":{"x":36848,"y":30981.5},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"25c9d2d2-127d-4c88-a97d-f03bbbb1980e","savedPayload":{"position":{"x":36821,"y":32715.25},"targetPosition":{"x":36821,"y":32715.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}]} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/AppSchema.json b/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/AppSchema.json deleted file mode 100644 index c893bac5e..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/AppSchema.json +++ /dev/null @@ -1,725 +0,0 @@ -[ - { - "type": "Ethereum Project", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Blockchain", - "relatedUiObject": "Ethereum Blockchain", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Decentralized Application", - "relatedUiObject": "Ethereum Decentralized Application", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Token Definitions", - "relatedUiObject": "Ethereum Token Definitions", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Wallet", - "relatedUiObject": "Ethereum Wallet", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isProjectHead": true, - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "isPinned": true, - "positionLocked": true, - "icon": "ethereum" - }, - { - "type": "Ethereum Wallet", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Wallet Keys", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "walletKeys", - "relatedUiObject": "Wallet Keys", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Wallet Account", - "relatedUiObject": "Wallet Account", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "walletKeys", - "type": "node", - "childType": "Wallet Keys", - "autoAdd": true - }, - { - "name": "walletAccount", - "type": "array", - "childType": "Wallet Account" - } - ], - "icon": "ethereum" - }, - { - "type": "Wallet Keys", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"privateKey\": \"\", \n\"publicKey\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Wallet->" - }, - "propertyNameAtParent": "walletKeys", - "isPersonalData": true, - "icon": "ethereum" - }, - { - "type": "Wallet Account", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add ETH Balance", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "ethBalance", - "relatedUiObject": "ETH Balance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Token Balance", - "relatedUiObject": "Token Balance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"value\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Wallet->" - }, - "propertyNameAtParent": "walletAccount", - "properties": [ - { - "name": "ethBalance", - "type": "node", - "childType": "ETH Balance" - }, - { - "name": "tokenBalance", - "type": "array", - "childType": "Token Balance" - } - ], - "icon": "ethereum" - }, - { - "type": "ETH Balance", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Wallet Account->" - }, - "propertyNameAtParent": "ethBalance", - "icon": "ethereum" - }, - { - "type": "Token Balance", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 4, - "referenceAttachesTo": { - "compatibleTypes": "->Ethereum Token->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Wallet Account->" - }, - "propertyNameAtParent": "tokenBalance", - "icon": "ethereum" - }, - { - "type": "Ethereum Token Definitions", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Ethereum Token Definitions", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "erc-20TokenType", - "type": "node", - "childType": "ERC-20 Token Type" - }, - { - "name": "erc-223TokenType", - "type": "node", - "childType": "ERC-223 Token Type" - }, - { - "name": "erc-721TokenType", - "type": "node", - "childType": "ERC-721 Token Type" - }, - { - "name": "erc-777TokenType", - "type": "node", - "childType": "ERC-777 Token Type" - } - ], - "icon": "ethereum" - }, - { - "type": "ERC-20 Token Type", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Token Definition", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "ethereumToken", - "relatedUiObject": "Ethereum Token", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Token Definitions->" - }, - "propertyNameAtParent": "erc-20TokenType", - "properties": [ - { - "name": "ethereumToken", - "type": "node", - "childType": "Ethereum Token" - } - ], - "icon": "ethereum" - }, - { - "type": "ERC-223 Token Type", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Token Definition", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "ethereumToken", - "relatedUiObject": "Ethereum Token", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Token Definitions->" - }, - "propertyNameAtParent": "erc-223TokenType", - "properties": [ - { - "name": "ethereumToken", - "type": "node", - "childType": "Ethereum Token" - } - ], - "icon": "ethereum" - }, - { - "type": "ERC-721 Token Type", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Token Definition", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "ethereumToken", - "relatedUiObject": "Ethereum Token", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Token Definitions->" - }, - "propertyNameAtParent": "erc-721TokenType", - "properties": [ - { - "name": "ethereumToken", - "type": "node", - "childType": "Ethereum Token" - } - ], - "icon": "ethereum" - }, - { - "type": "ERC-777 Token Type", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Token Definition", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "ethereumToken", - "relatedUiObject": "Ethereum Token", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Token Definitions->" - }, - "propertyNameAtParent": "erc-777TokenType", - "properties": [ - { - "name": "ethereumToken", - "type": "node", - "childType": "Ethereum Token" - } - ], - "icon": "ethereum" - }, - { - "type": "Ethereum Token", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Smart Contract", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "smartContract", - "relatedUiObject": "Smart Contract", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"codeName\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->ERC-20 Token Type->ERC-223 Token Type->ERC-721 Token Type->ERC-777 Token Type->" - }, - "propertyNameAtParent": "ethereumToken", - "properties": [ - { - "name": "smartContracts", - "type": "node", - "childType": "Smart Contract" - } - ], - "icon": "ethereum" - }, - { - "type": "Ethereum Blockchain", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Blockchain Network", - "relatedUiObject": "Blockchain Network", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "blockchainNetworks", - "type": "array", - "childType": "Blockchain Network" - } - ], - "icon": "ethereum" - }, - { - "type": "Blockchain Network", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Network Client", - "relatedUiObject": "Network Client", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Ethereum Blockchain->" - }, - "propertyNameAtParent": "blockchainNetworks", - "properties": [ - { - "name": "networkClients", - "type": "array", - "childType": "Network Client" - } - ], - "icon": "ethereum" - }, - { - "type": "Network Client", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"host\": \"localhost\", \n\"webSocketsPort\": \"8545\"\n}" - }, - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Blockchain Network->" - }, - "propertyNameAtParent": "networkClients", - "icon": "ethereum" - }, - { - "type": "Ethereum Decentralized Application", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Smart Contract", - "relatedUiObject": "Smart Contract", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "smartContracts", - "type": "array", - "childType": "Smart Contract" - } - ], - "icon": "ethereum" - }, - { - "type": "Smart Contract", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "smartContractAccount", - "label": "Add Smart Contract Account", - "relatedUiObject": "Smart Contract Account", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "solidityCode", - "label": "Add Solidity Code", - "relatedUiObject": "Solidity Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "chainAttachesTo": { - "compatibleTypes": "->Token Definition->Ethereum Decentralized Application->" - }, - "propertyNameAtParent": "smartContracts", - "addLeftIcons": true, - "level": 1, - "properties": [ - { - "name": "smartContractAccount", - "type": "node", - "childType": "Smart Contract Account" - }, - { - "name": "solidityCode", - "type": "node", - "childType": "Solidity Code" - } - ], - "icon": "ethereum" - }, - { - "type": "Smart Contract Account", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"value\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Smart Contract->" - }, - "propertyNameAtParent": "smartContractAccount", - "icon": "ethereum" - }, - { - "type": "Solidity Code", - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "ethereum", - "iconPathOff": "ethereum" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "code": true - }, - "initialValues": { - "code": "// Type your smart contract code here." - }, - "chainAttachesTo": { - "compatibleTypes": "->Smart Contract->" - }, - "propertyNameAtParent": "solidityCode", - "addLeftIcons": true, - "level": 2, - "icon": "ethereum" - } -] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/ConceptSchema.json b/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/ConceptSchema.json deleted file mode 100644 index 32960f8ce..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/ConceptSchema.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/DocSchema.json b/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/DocSchema.json deleted file mode 100644 index 32960f8ce..000000000 --- a/Deprecated-Code/Integrations/Projects/Ethereum/Schemas/DocSchema.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Spaces/Placeholder.js b/Deprecated-Code/Integrations/Projects/Ethereum/Spaces/Placeholder.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/Integrations/Projects/Ethereum/Utilities/Placeholder.js b/Deprecated-Code/Integrations/Projects/Ethereum/Utilities/Placeholder.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/Integrations/Projects/ProjectsSchema.json b/Deprecated-Code/Integrations/Projects/ProjectsSchema.json deleted file mode 100644 index a3c88bc1c..000000000 --- a/Deprecated-Code/Integrations/Projects/ProjectsSchema.json +++ /dev/null @@ -1,224 +0,0 @@ -[ - { - "name": "Superalgos", - "propertyName": "superalgos", - "globals": [ - { - "name": "Docs", - "propertyName": "docs", - "functionName": "newSuperalgosGlobalsDocs" - }, - { - "name": "Zoom", - "propertyName": "zoom", - "functionName": "newSuperalgosGlobalsZoom" - } - ], - "utilities": [ - { - "name": "Branches", - "propertyName": "branches", - "functionName": "newSuperalgosUtilitiesBranches" - }, - { - "name": "Clipboard", - "propertyName": "clipboard", - "functionName": "newSuperalgosUtilitiesClipboard" - }, - { - "name": "Coordinate Transformations", - "propertyName": "coordinateTransformations", - "functionName": "newSuperalgosUtilitiesCoordinateTransformations" - }, - { - "name": "Date Rate Transformations", - "propertyName": "dateRateTransformations", - "functionName": "newSuperalgosUtilitiesDateRateTransformations" - }, - { - "name": "Dates", - "propertyName": "dates", - "functionName": "newSuperalgosUtilitiesDates" - }, - { - "name": "Download", - "propertyName": "download", - "functionName": "newSuperalgosUtilitiesDownload" - }, - { - "name": "Draw Print", - "propertyName": "drawPrint", - "functionName": "newSuperalgosUtilitiesDrawPrint" - }, - { - "name": "Hierarchy", - "propertyName": "hierarchy", - "functionName": "newSuperalgosUtilitiesHierarchy" - }, - { - "name": "Load Save Frame", - "propertyName": "loadSaveFrame", - "functionName": "newSuperalgosUtilitiesLoadSaveFrame" - }, - { - "name": "Tutorial", - "propertyName": "tutorial", - "functionName": "newSuperalgosUtilitiesTutorial" - }, - { - "name": "Menu", - "propertyName": "menu", - "functionName": "newSuperalgosUtilitiesMenu" - }, - { - "name": "Meshes", - "propertyName": "meshes", - "functionName": "newSuperalgosUtilitiesMeshes" - }, - { - "name": "Children", - "propertyName": "children", - "functionName": "newSuperalgosUtilitiesNodeChildren" - }, - { - "name": "Node Config", - "propertyName": "nodeConfig", - "functionName": "newSuperalgosUtilitiesNodeConfig" - }, - { - "name": "Folders", - "propertyName": "folders", - "functionName": "newSuperalgosUtilitiesFolders" - } - ], - "spaces": [ - { - "name": "Floating Space", - "folderName": "Floating-Space", - "propertyName": "floatingSpace", - "functionName": "newSuperalgosFloatingSpace", - "initializationIndex": 0, - "animationPhysicsIndex": 1, - "animationDrawIndex": 0, - "onMouseWheelIndex": 6, - "onMouseOverIndex": 8, - "onMouseClickIndex": 8, - "onMouseDownIndex": 8 - }, - { - "name": "Top Space", - "folderName": "Top-Space", - "propertyName": "topSpace", - "functionName": "newSuperalgosTopSpace", - "initializationIndex": 1, - "animationPhysicsIndex": 7, - "animationDrawIndex": 6, - "onMouseOverIndex": 4, - "onMouseClickIndex": 4, - "onMouseDownIndex": 4 - }, - { - "name": "Cockpit Space", - "folderName": "Cocksit-Space", - "propertyName": "cockpitSpace", - "functionName": "newSuperalgosCockpitSpace", - "initializationIndex": 2, - "animationPhysicsIndex": 0, - "animationDrawIndex": 7, - "onMouseWheelIndex": 4, - "onMouseOverIndex": 5, - "onMouseClickIndex": 5, - "onMouseDownIndex": 5 - }, - { - "name": "Design Space", - "folderName": "Design-Space", - "propertyName": "designSpace", - "functionName": "newSuperalgosDesignSpace", - "initializationIndex": 3, - "animationPhysicsIndex": 3, - "animationDrawIndex": 2, - "onMouseWheelIndex": 0, - "onMouseOverIndex": 3, - "onMouseClickIndex": 3, - "onMouseDownIndex": 3 - }, - { - "name": "Panel Space", - "folderName": "Panel-Space", - "propertyName": "panelSpace", - "functionName": "newSuperalgosPanelSpace", - "initializationIndex": 4, - "animationPhysicsIndex": 4, - "animationDrawIndex": 3, - "onMouseWheelIndex": 3, - "onMouseOverIndex": 6, - "onMouseClickIndex": 6, - "onMouseDownIndex": 6 - }, - { - "name": "Charting Space", - "folderName": "Charting-Space", - "propertyName": "chartingSpace", - "functionName": "newSuperalgosChartingSpace", - "initializationIndex": 5, - "animationPhysicsIndex": 2, - "animationDrawIndex": 1, - "onMouseWheelIndex": 5, - "onMouseOverIndex": 7, - "onMouseClickIndex": 7, - "onMouseDownIndex": 7 - }, - { - "name": "Side Space", - "folderName": "Floating-Space", - "propertyName": "sideSpace", - "functionName": "newSuperalgosSideSpace", - "initializationIndex": 6, - "animationPhysicsIndex": 8, - "animationDrawIndex": 8, - "onMouseWheelIndex": 2, - "onMouseOverIndex": 2, - "onMouseClickIndex": 2, - "onMouseDownIndex": 2 - }, - { - "name": "Doc Space", - "folderName": "Doc-Space", - "propertyName": "docSpace", - "functionName": "newSuperalgosDocSpace", - "initializationIndex": 7, - "animationPhysicsIndex": 5, - "animationDrawIndex": 4, - "onMouseWheelIndex": 1, - "onMouseOverIndex": 1, - "onMouseClickIndex": 1, - "onMouseDownIndex": 1 - }, - { - "name": "Chat Space", - "folderName": "Chat-Space", - "propertyName": "chatSpace", - "functionName": "newSuperalgosChatSpace" - }, - { - "name": "Tutorial Space", - "folderName": "Tutorial-Space", - "propertyName": "tutorialSpace", - "functionName": "newSuperalgosTutorialSpace", - "initializationIndex": 8, - "animationPhysicsIndex": 6, - "animationDrawIndex": 5, - "onMouseWheelIndex": 0, - "onMouseOverIndex": 0, - "onMouseClickIndex": 0, - "onMouseDownIndex": 0 - } - ] - }, - { - "name": "Ethereum", - "propertyName": "ethereum", - "spaces": [] - } -] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ActionSwitch.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ActionSwitch.js deleted file mode 100644 index abdbded26..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ActionSwitch.js +++ /dev/null @@ -1,661 +0,0 @@ -function newSuperalgosActionSwitch() { - - let thisObject = { - executeAction: executeAction, - initialize: initialize, - finalize: finalize - } - - let functionLibraryReferenceAttachDetach = newReferenceAttachDetach() - let functionLibraryChainAttachDetach = newChainAttachDetach() - let functionLibraryNodeDeleter = newNodeDeleter() - let functionLibraryUiObjectsFromNodes = newUiObjectsFromNodes() - let functionLibraryProtocolNode = newProtocolNode() - let functionLibraryNodeCloning = newNodeCloning() - let functionLibraryShortcutKeys = newShortcutKeys() - let functionLibraryOnFocus = newOnFocus() - let functionLibrarySuperScripts = newSuperScriptsFunctions() - let functionLibraryWebhookFunctions = newWebhookFunctions() - let functionLibraryDependenciesFilter = newDependenciesFilter() - let functionLibraryNodePath = newNodePath() - let functionLibraryTaskFunctions = newTaskFunctions() - let functionLibraryTradingSessionFunctions = newTradingSessionFunctions() - let functionLibraryLearningSessionFunctions = newLearningSessionFunctions() - let functionLibraryCryptoEcosystemFunctions = newCryptoEcosystemFunctions() - let functionLibraryMineFunctions = newMineFunctions() - let functionLibraryDataStorageFunctions = newDataStorageFunctions() - let functionLibraryChartingSpaceFunctions = newChartingSpaceFunctions() - let functionLibraryPluginsFunctions = newPluginsFunctions() - let functionLibraryWorkspaceFunctions = newWorkspaceFunctions() - - return thisObject - - function finalize() { - functionLibraryReferenceAttachDetach = undefined - functionLibraryChainAttachDetach = undefined - functionLibraryNodeDeleter = undefined - functionLibraryUiObjectsFromNodes = undefined - functionLibraryProtocolNode = undefined - functionLibraryNodeCloning = undefined - functionLibraryShortcutKeys = undefined - functionLibraryOnFocus = undefined - functionLibrarySuperScripts = undefined - functionLibraryWebhookFunctions = undefined - functionLibraryDependenciesFilter = undefined - functionLibraryNodePath = undefined - functionLibraryTaskFunctions = undefined - functionLibraryTradingSessionFunctions = undefined - functionLibraryLearningSessionFunctions = undefined - functionLibraryCryptoEcosystemFunctions = undefined - functionLibraryMineFunctions = undefined - functionLibraryDataStorageFunctions = undefined - functionLibraryChartingSpaceFunctions = undefined - functionLibraryPluginsFunctions = undefined - functionLibraryWorkspaceFunctions = undefined - } - - function initialize() { - /* Nothing to initialize since a Function Library does not hold any state. */ - } - - async function executeAction(action) { - switch (action.name) { - case 'Get Node On Focus': { - return functionLibraryOnFocus.getNodeThatIsOnFocus(action.node) - } - - case 'Get Node By Shortcut Key': { - return functionLibraryShortcutKeys.getNodeByShortcutKey(action.node, action.extraParameter) - } - - case 'Get Node Data Structure': { - return functionLibraryProtocolNode.getProtocolNode(action.node, action.extraParameter, false, true, true, true) - } - - case 'Create UI Object': { - functionLibraryUiObjectsFromNodes.createUiObjectFromNode(action.node, undefined, undefined, action.extraParameter) - } - break - case 'Connect Children to Reference Parents': { - functionLibraryUiObjectsFromNodes.tryToConnectChildrenWithReferenceParents() - } - break - case 'Get Node By Id': { - return functionLibraryUiObjectsFromNodes.getNodeById(action.relatedNodeId) - } - - case 'Syncronize Tasks': { - functionLibraryUiObjectsFromNodes.syncronizeTasksFoundAtWorkspaceWithBackEnd(functionLibraryTaskFunctions) - } - break - case 'Syncronize Trading Sessions': { - functionLibraryUiObjectsFromNodes.syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd(functionLibraryTradingSessionFunctions) - } - break - case 'Syncronize Learning Sessions': { - functionLibraryUiObjectsFromNodes.syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd(functionLibraryLearningSessionFunctions) - } - break - case 'Play Tutorials': { - functionLibraryUiObjectsFromNodes.playTutorials() - } - break - case 'Recreate Workspace': { - functionLibraryUiObjectsFromNodes.recreateWorkspace(action.node, action.callBackFunction) - } - break - case 'Delete Workspace': { - return functionLibraryNodeDeleter.deleteWorkspace(action.node, action.rootNodes) - } - break - case 'Copy Node Path': - { - let nodePath = functionLibraryNodePath.getNodePath(action.node) - - UI.projects.superalgos.utilities.clipboard.copyTextToClipboard(nodePath) - - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - nodePath + ' copied to the Clipboard.' - , 50, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.ALL_GOOD) - } - break - case 'Copy Node Value': - { - let value = action.node.payload.uiObject.getValue() - - UI.projects.superalgos.utilities.clipboard.copyTextToClipboard(value) - - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - value + ' copied to the Clipboard.' - , 50, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.ALL_GOOD) - } - break - case 'Copy Node Type': - { - let value = action.node.type - - UI.projects.superalgos.utilities.clipboard.copyTextToClipboard(value) - - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - value + ' copied to the Clipboard.' - , 50, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.ALL_GOOD) - } - break - case 'Add UI Object': - { - functionLibraryUiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes) - } - break - case 'Add Missing Children': - { - functionLibraryUiObjectsFromNodes.addMissingChildren(action.node, action.rootNodes) - } - break - case 'Delete UI Object': - { - functionLibraryNodeDeleter.deleteUIObject(action.node, action.rootNodes) - } - break - case 'Edit Code': - - break - case 'Share': - { - let text = JSON.stringify(functionLibraryProtocolNode.getProtocolNode(action.node, true, false, true, true, true)) - - let nodeName = action.node.name - if (nodeName === undefined) { - nodeName = '' - } else { - nodeName = '.' + nodeName - } - let fileName = 'Share - ' + action.node.type + ' - ' + nodeName + '.json' - UI.projects.superalgos.utilities.download.downloadText(fileName, text) - } - - break - case 'Backup': - { - let text = JSON.stringify(functionLibraryProtocolNode.getProtocolNode(action.node, false, false, true, true, true)) - - let nodeName = action.node.name - if (nodeName === undefined) { - nodeName = '' - } else { - nodeName = ' ' + nodeName - } - let fileName = 'Backup - ' + action.node.type + ' - ' + nodeName + '.json' - UI.projects.superalgos.utilities.download.downloadText(fileName, text) - } - - break - case 'Clone': - { - let text = JSON.stringify(functionLibraryNodeCloning.getNodeClone(action.node)) - - let nodeName = action.node.name - if (nodeName === undefined) { - nodeName = '' - } else { - nodeName = ' ' + nodeName - } - let fileName = 'Clone - ' + action.node.type + ' - ' + nodeName + '.json' - UI.projects.superalgos.utilities.download.downloadText(fileName, text) - } - - break - case 'Debug Task': - { - functionLibraryTaskFunctions.runTask(action.node, functionLibraryProtocolNode, true, action.callBackFunction) - } - break - case 'Run Task': - { - functionLibraryTaskFunctions.runTask(action.node, functionLibraryProtocolNode, false, action.callBackFunction) - } - break - case 'Stop Task': - { - functionLibraryTaskFunctions.stopTask(action.node, functionLibraryProtocolNode, action.callBackFunction) - } - break - case 'Run All Tasks': - { - functionLibraryTaskFunctions.runAllTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Tasks': - { - functionLibraryTaskFunctions.stopAllTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Task Managers': - { - functionLibraryTaskFunctions.runAllTaskManagers(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Task Managers': - { - functionLibraryTaskFunctions.stopAllTaskManagers(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Exchange Data Tasks': - { - functionLibraryTaskFunctions.runAllExchangeDataTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Exchange Data Tasks': - { - functionLibraryTaskFunctions.stopAllExchangeDataTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Exchange Trading Tasks': - { - functionLibraryTaskFunctions.runAllExchangeTradingTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Exchange Trading Tasks': - { - functionLibraryTaskFunctions.stopAllExchangeTradingTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Exchange Learning Tasks': - { - functionLibraryTaskFunctions.runAllExchangeLearningTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Exchange Learning Tasks': - { - functionLibraryTaskFunctions.stopAllExchangeLearningTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Market Data Tasks': - { - functionLibraryTaskFunctions.runAllMarketDataTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Market Data Tasks': - { - functionLibraryTaskFunctions.stopAllMarketDataTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Market Trading Tasks': - { - functionLibraryTaskFunctions.runAllMarketTradingTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Market Trading Tasks': - { - functionLibraryTaskFunctions.stopAllMarketTradingTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Market Learning Tasks': - { - functionLibraryTaskFunctions.runAllMarketLearningTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Market Learning Tasks': - { - functionLibraryTaskFunctions.stopAllMarketLearningTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Data Mine Tasks': - { - functionLibraryTaskFunctions.runAllDataMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Data Mine Tasks': - { - functionLibraryTaskFunctions.stopAllDataMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Trading Mine Tasks': - { - functionLibraryTaskFunctions.runAllTradingMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Trading Mine Tasks': - { - functionLibraryTaskFunctions.stopAllTradingMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Run All Learning Mine Tasks': - { - functionLibraryTaskFunctions.runAllLearningMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Stop All Learning Mine Tasks': - { - functionLibraryTaskFunctions.stopAllLearningMineTasks(action.node, functionLibraryProtocolNode) - } - break - case 'Add Missing Exchange Data Tasks': - { - functionLibraryTaskFunctions.addMissingExchangeDataTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Market Data Tasks': - { - functionLibraryTaskFunctions.addMissingMarketDataTasks(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Data Mine Tasks': - { - functionLibraryTaskFunctions.addMissingDataMineTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Exchange Trading Tasks': - { - functionLibraryTaskFunctions.addMissingExchangeTradingTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Market Trading Tasks': - { - functionLibraryTaskFunctions.addMissingMarketTradingTasks(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Trading Mine Tasks': - { - functionLibraryTaskFunctions.addMissingTradingMineTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Exchange Learning Tasks': - { - functionLibraryTaskFunctions.addMissingExchangeLearningTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Market Learning Tasks': - { - functionLibraryTaskFunctions.addMissingMarketLearningTasks(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Learning Mine Tasks': - { - functionLibraryTaskFunctions.addMissingLearningMineTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Tasks': - { - functionLibraryTaskFunctions.addAllTasks(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Crypto Exchanges': - { - functionLibraryCryptoEcosystemFunctions.addMissingExchanges(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Assets': - { - functionLibraryCryptoEcosystemFunctions.addMissingAssets(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Markets': - { - functionLibraryCryptoEcosystemFunctions.addMissingMarkets(action.node, functionLibraryUiObjectsFromNodes, functionLibraryNodeCloning) - } - break - case 'Install Market': - { - functionLibraryCryptoEcosystemFunctions.installMarket(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions) - } - break - case 'Uninstall Market': - { - functionLibraryCryptoEcosystemFunctions.uninstallMarket(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions) - } - break - case 'Add All Output Datasets': - { - functionLibraryMineFunctions.addAllOutputDatasets(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Data Products': - { - functionLibraryDataStorageFunctions.addAllDataProducts(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Data Mine Products': - { - functionLibraryDataStorageFunctions.addAllDataMineProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Learning Mine Products': - { - functionLibraryDataStorageFunctions.addAllLearningMineProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Trading Mine Products': - { - functionLibraryDataStorageFunctions.addAllTradingMineProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Trading Session References': - { - functionLibraryDataStorageFunctions.addMissingTradingSessionReferences(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Learning Session References': - { - functionLibraryDataStorageFunctions.addMissingLearningSessionReferences(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Market Data Products': - { - functionLibraryDataStorageFunctions.addMissingMarketDataProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Market Trading Products': - { - functionLibraryDataStorageFunctions.addMissingMarketTradingProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Exchange Trading Products': - { - functionLibraryDataStorageFunctions.addMissingExchangeTradingProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Exchange Data Products': - { - functionLibraryDataStorageFunctions.addMissingExchangeDataProducts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Data Dependencies': - { - functionLibraryMineFunctions.addAllDataDependencies(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Data Mine Dependencies': - { - functionLibraryMineFunctions.addAllDataMineDataDependencies(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Layer Panels': - { - functionLibraryChartingSpaceFunctions.addAllLayerPanels(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Layer Polygons': - { - functionLibraryChartingSpaceFunctions.addAllLayerPolygons(action.node, functionLibraryUiObjectsFromNodes) - } - break - case 'Add All Mine Layers': - { - functionLibraryChartingSpaceFunctions.addAllMineLayers(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - break - case 'Add Missing Time Machines': - { - functionLibraryChartingSpaceFunctions.addMissingTimeMachines(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - break - case 'Add Missing Dashboards': - { - functionLibraryChartingSpaceFunctions.addMissingDashboards(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - break - case 'Play Tutorial': - { - UI.projects.superalgos.spaces.tutorialSpace.playTutorial(action.node) - } - break - case 'Play Tutorial Topic': - { - UI.projects.superalgos.spaces.tutorialSpace.playTutorialTopic(action.node) - } - break - case 'Play Tutorial Step': - { - UI.projects.superalgos.spaces.tutorialSpace.playTutorialStep(action.node) - } - break - case 'Resume Tutorial': - { - UI.projects.superalgos.spaces.tutorialSpace.resumeTutorial(action.node) - } - break - case 'Resume Tutorial Topic': - { - UI.projects.superalgos.spaces.tutorialSpace.resumeTutorialTopic(action.node) - } - break - case 'Resume Tutorial Step': - { - UI.projects.superalgos.spaces.tutorialSpace.resumeTutorialStep(action.node) - } - break - case 'Reset Tutorial Progress': - { - UI.projects.superalgos.spaces.tutorialSpace.resetTutorialProgress(action.node) - } - break - case 'Send Webhook Test Message': - { - functionLibraryWebhookFunctions.sendTestMessage(action.node, action.callBackFunction) - } - break - case 'Run Trading Session': - { - functionLibraryTradingSessionFunctions.runSession(action.node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, false, action.callBackFunction) - } - break - case 'Resume Trading Session': - { - functionLibraryTradingSessionFunctions.runSession(action.node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, true, action.callBackFunction) - } - break - case 'Stop Trading Session': - { - functionLibraryTradingSessionFunctions.stopSession(action.node, functionLibraryProtocolNode, action.callBackFunction) - } - break - case 'Run Learning Session': - { - functionLibraryLearningSessionFunctions.runSession(action.node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, false, action.callBackFunction) - } - break - case 'Resume Learning Session': - { - functionLibraryLearningSessionFunctions.runSession(action.node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, true, action.callBackFunction) - } - break - case 'Stop Learning Session': - { - functionLibraryLearningSessionFunctions.stopSession(action.node, functionLibraryProtocolNode, action.callBackFunction) - } - break - case 'Run Super Action': - { - functionLibrarySuperScripts.runSuperScript(action.node, action.rootNodes, functionLibraryNodeCloning, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - break - case 'Parent Attach': { - functionLibraryChainAttachDetach.chainAttachNode(action.node, action.relatedNode, action.rootNodes) - } - break - case 'Reference Attach': { - functionLibraryReferenceAttachDetach.referenceAttachNode(action.node, action.relatedNode, action.rootNodes) - } - break - case 'Parent Detach': - { - functionLibraryChainAttachDetach.chainDetachNode(action.node, action.rootNodes) - } - break - case 'Reference Detach': - { - functionLibraryReferenceAttachDetach.referenceDetachNode(action.node) - } - break - case 'Push Code to Javascript Code': - { - action.node.javascriptCode.code = action.node.code - } - break - case 'Fetch Code to Javascript Code': - { - action.node.code = action.node.javascriptCode.code - } - break - case 'Open Documentation': - { - let definition = getNodeDefinition(action.node) - if (definition !== undefined) { - if (definition.docURL !== undefined) { - UI.projects.superalgos.spaces.docSpace.navigateTo(definition.docURL) - } else { - let headName = UI.projects.superalgos.utilities.hierarchy.getHiriarchyHead(action.node).type - headName = headName.toLowerCase() - headName = headName.split(" ").join("-") - let nodeName = action.node.type - nodeName = nodeName.toLowerCase() - nodeName = nodeName.split(" ").join("-") - url = UI.projects.superalgos.globals.docs.DOCUMENTATION_URL_PREFIX + "suite-hierarchy-" + headName + ".html#" + nodeName - UI.projects.superalgos.spaces.docSpace.navigateTo(url) - } - } - } - break - case 'Add Missing Plugin Projects': - { - functionLibraryPluginsFunctions.pluginMissingProjects(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Data Mines': - { - functionLibraryPluginsFunctions.pluginMissingDataMines(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Trading Mines': - { - functionLibraryPluginsFunctions.pluginMissingTradingMines(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Trading Systems': - { - functionLibraryPluginsFunctions.pluginMissingTradingSystems(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Trading Engines': - { - functionLibraryPluginsFunctions.pluginMissingTradingEngines(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Super Scripts': - { - functionLibraryPluginsFunctions.pluginMissingSuperScripts(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Plugin Tutorials': - { - functionLibraryPluginsFunctions.pluginMissingTutorials(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - case 'Add Missing Workspace Projects': - { - functionLibraryWorkspaceFunctions.addMissingWorkspaceProjects(action.node, action.rootNodes, functionLibraryUiObjectsFromNodes) - } - break - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChainAttachDetach.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChainAttachDetach.js deleted file mode 100644 index faff8bafb..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChainAttachDetach.js +++ /dev/null @@ -1,221 +0,0 @@ -function newChainAttachDetach() { - thisObject = { - chainDetachNode: chainDetachNode, - chainAttachNode: chainAttachNode - } - - return thisObject - - function chainDetachNode(node, rootNodes) { - if (node.payload.parentNode === undefined) { return } - switch (node.type) { - case 'Phase': { - let payload = node.payload - for (let i = 0; i < payload.parentNode.phases.length; i++) { - let phase = payload.parentNode.phases[i] - if (phase.id === node.id) { - if (i < payload.parentNode.phases.length - 1) { - let nextPhase = payload.parentNode.phases[i + 1] - if (i > 0) { - let previousPhase = payload.parentNode.phases[i - 1] - nextPhase.payload.chainParent = previousPhase - } else { - nextPhase.payload.chainParent = payload.parentNode - } - } - payload.parentNode.phases.splice(i, 1) - completeDetachment(node, rootNodes) - return - } - } - return - } - default: { - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - /* Detach from parent */ - if (node.payload.parentNode !== undefined) { - let parentNodeDefinition = getNodeDefinition(node.payload.parentNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (nodeDefinition.propertyNameAtParent === property.name) { - switch (property.type) { - case 'node': { - node.payload.parentNode[property.name] = undefined - } - break - case 'array': { - let nodePropertyArray = node.payload.parentNode[property.name] - if (nodePropertyArray !== undefined) { - for (let j = 0; j < nodePropertyArray.length; j++) { - let arrayItem = nodePropertyArray[j] - if (arrayItem.id === node.id) { - nodePropertyArray.splice(j, 1) - } - } - } - } - break - } - } - } - } - } - } - completeDetachment(node, rootNodes) - } - } - } - } - - function chainAttachNode(node, attachToNode, rootNodes) { - switch (node.type) { - - case 'Exchange Account Key': { - node.payload.parentNode = attachToNode - node.payload.chainParent = attachToNode - if (node.payload.parentNode.keys !== undefined) { - node.payload.parentNode.keys.push(node) - } else { - node.payload.parentNode.key = node - } - completeAttachment(node, rootNodes) - } - break - - case 'Phase': { - switch (attachToNode.type) { - case 'Stop': { - node.payload.parentNode = attachToNode - if (attachToNode.phases.length > 0) { - let phase = attachToNode.phases[attachToNode.phases.length - 1] - node.payload.chainParent = phase - } else { - node.payload.chainParent = attachToNode - } - attachToNode.phases.push(node) - completeAttachment(node, rootNodes) - } - break - case 'Take Profit': { - node.payload.parentNode = attachToNode - if (attachToNode.phases.length > 0) { - let phase = attachToNode.phases[attachToNode.phases.length - 1] - node.payload.chainParent = phase - } else { - node.payload.chainParent = attachToNode - } - attachToNode.phases.push(node) - completeAttachment(node, rootNodes) - } - break - case 'Initial Stop': { - if (attachToNode.phases.length >= 1) { - return - } - - node.payload.parentNode = attachToNode - if (attachToNode.phases.length > 0) { - let phase = attachToNode.phases[attachToNode.phases.length - 1] - node.payload.chainParent = phase - } else { - node.payload.chainParent = attachToNode - } - attachToNode.phases.push(node) - completeAttachment(node, rootNodes) - } - break - case 'Initial Take Profit': { - if (attachToNode.phases.length >= 1) { - return - } - node.payload.parentNode = attachToNode - if (attachToNode.phases.length > 0) { - let phase = attachToNode.phases[attachToNode.phases.length - 1] - node.payload.chainParent = phase - } else { - node.payload.chainParent = attachToNode - } - attachToNode.phases.push(node) - completeAttachment(node, rootNodes) - } - break - case 'Phase': { - node.payload.parentNode = attachToNode.payload.parentNode - for (let i = 0; i < node.payload.parentNode.phases.length; i++) { - let phase = node.payload.parentNode.phases[i] - if (attachToNode.id === phase.id) { - if (i === node.payload.parentNode.phases.length - 1) { - node.payload.chainParent = attachToNode - node.payload.parentNode.phases.push(node) - completeAttachment(node, rootNodes) - } else { - node.payload.chainParent = attachToNode - let nextPhase = node.payload.parentNode.phases[i + 1] - nextPhase.payload.chainParent = node - node.payload.parentNode.phases.splice(i + 1, 0, node) - completeAttachment(node, rootNodes) - return - } - } - } - } - } - } - break - default: { - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - node.payload.parentNode = attachToNode - node.payload.chainParent = attachToNode - /* Attach to new parent */ - if (node.payload.parentNode !== undefined) { - let parentNodeDefinition = getNodeDefinition(node.payload.parentNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (nodeDefinition.propertyNameAtParent === property.name) { - switch (property.type) { - case 'node': { - node.payload.parentNode[property.name] = node - } - break - case 'array': { - if (node.payload.parentNode[property.name] === undefined) { - node.payload.parentNode[property.name] = [] - } - let nodePropertyArray = node.payload.parentNode[property.name] - nodePropertyArray.push(node) - } - break - } - } - } - } - } - } - completeAttachment(node, rootNodes) - } - } - } - } - - function completeDetachment(node, rootNodes) { - node.payload.parentNode = undefined - node.payload.chainParent = undefined - rootNodes.push(node) - } - - function completeAttachment(node, rootNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.id === node.id) { - rootNodes.splice(i, 1) - return - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js deleted file mode 100644 index 1912f11a8..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ChartingSpaceFunctions.js +++ /dev/null @@ -1,380 +0,0 @@ -function newChartingSpaceFunctions() { - thisObject = { - addAllLayerPanels: addAllLayerPanels, - addAllLayerPolygons: addAllLayerPolygons, - addAllMineLayers: addAllMineLayers, - addMissingDashboards: addMissingDashboards, - addMissingTimeMachines: addMissingTimeMachines, - createTimeMachine: createTimeMachine - } - - return thisObject - - function addAllMineLayers(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (node.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - if (node.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - - /* - We are going to go through the referenced branch and recreate the structure - we find there inside the layers manager. We will end up having at the end - all layers referencing the data products inside the referenced branch. - */ - let mine = node.payload.referenceParent - scanBotArray(mine.botProducts) - - function scanBotArray(botArray) { - for (let i = 0; i < botArray.length; i++) { - let bot = botArray[i] - let botLayers = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Bot Layers') - botLayers.name = bot.name - - UI.projects.superalgos.utilities.folders.asymetricalFolderStructureCloning( - bot, - botLayers, - 'dataProducts', - 'dataProductFolders', - 'layerFolders', - 'Layer', - 'Layer Folder', - undefined, - functionLibraryUiObjectsFromNodes - ) - /* - There are some layers that should not exist, for example the ones related to Data Products - that do not have a plotter module. Since our previous action created all layers no matter - what, we need now to delete all the ones that do not have a plotter module. - */ - let allLayers = UI.projects.superalgos.utilities.branches.nodeBranchToArray(botLayers, 'Layer') - for (let j = 0; j < allLayers.length; j++) { - let layer = allLayers[j] - layer.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_45 - - let plotterModule = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(layer, 'Plotter Module', undefined, true, false, false, true) - if (plotterModule === undefined) { - functionLibraryNodeDeleter.deleteUIObject(layer, rootNodes) - } - } - /* - For each of the layers we will not create the Layer Panels and Layer Polygons. - */ - allLayers = UI.projects.superalgos.utilities.branches.nodeBranchToArray(botLayers, 'Layer') - for (let j = 0; j < allLayers.length; j++) { - let layer = allLayers[j] - let menu = layer.payload.uiObject.menu - menu.internalClick('Add Missing Children') - - layer.layerPanels.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - layer.layerPolygons.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - - menu = layer.layerPanels.payload.uiObject.menu - menu.internalClick('Add All Layer Panels') - - menu = layer.layerPolygons.payload.uiObject.menu - menu.internalClick('Add All Layer Polygons') - - layer.layerPanels.payload.floatingObject.collapseToggle() - layer.layerPolygons.payload.floatingObject.collapseToggle() - layer.payload.floatingObject.collapseToggle() - } - } - } - } - - function addMissingTimeMachines(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - if (node.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('This node needs to have a Reference Parent for this command tu run.') - return - } - - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Network') { - let networkNode = rootNode - scanNetworkNode(networkNode) - } - } - - function scanNetworkNode(networkNode) { - if (networkNode === undefined) { return } - - let backtestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Backtesting Session') - let fordwardTestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Forward Testing Session') - let paperTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Paper Trading Session') - let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Live Trading Session') - let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Learning Session') - - scanSessionArray(backtestingSessionsArray) - scanSessionArray(fordwardTestingSessionsArray) - scanSessionArray(paperTradingSessionsArray) - scanSessionArray(liveTradingSessionsArray) - scanSessionArray(learningSessionsArray) - - function scanSessionArray(sessionsArray) { - for (let i = 0; i < sessionsArray.length; i++) { - let session = sessionsArray[i] - let environment = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, node.payload.referenceParent.type, undefined, true, false, true, false) - if (environment === undefined) { continue } - if (environment.id !== node.payload.referenceParent.id) { continue } - let market = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false) - if (market.payload.referenceParent === undefined) { continue } - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, session, true) === true) { - createTimeMachine(node, session, market.payload.referenceParent, networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - } - } - } - } - - function createTimeMachine(dashboard, session, market, networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - let mineProducts - let timeMachine = functionLibraryUiObjectsFromNodes.addUIObject(dashboard, 'Time Machine') - let exchange = market.payload.parentNode.payload.parentNode - timeMachine.payload.referenceParent = session - timeMachine.name = session.name + ' ' + session.type + ' ' + networkNode.name + ' ' + exchange.name + ' ' + market.name - timeMachine.payload.floatingObject.collapseToggle() - timeMachine.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timeMachine.timeFrameScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timeMachine.timeScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timeMachine.rateScale.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - /* - We will create 3 Time Line Charts for the Trading Mine Products - */ - mineProducts = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Trading Mine Products') - for (let j = 0; j < mineProducts.length; j++) { - let mineProduct = mineProducts[j] - /* - The mine products found so far, belongs to any session. To filer all the sessions - that are not the one we are interested in, we do the following: - */ - if (mineProduct.payload.parentNode === undefined) { continue } - if (mineProduct.payload.parentNode.payload.referenceParent.id !== session.id) { continue } - /* - At the current version of Superalgos, beta 6, there is only one Trading Mine, - with only one bot, and it has so many data products that we want to put them - in 3 different timeline charts. So we will create 3 charts, connect them, - and delete from each one 1/3 of the layers. We do all that next: - */ - - for (let k = 0; k < 3; k++) { - let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart') - - timelineChart.layerManager.payload.referenceParent = mineProduct - timelineChart.payload.floatingObject.collapseToggle() - timelineChart.layerManager.payload.floatingObject.collapseToggle() - timelineChart.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timelineChart.layerManager.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - - let menu = timelineChart.layerManager.payload.uiObject.menu - menu.internalClick('Add All Mine Layers') - menu.internalClick('Add All Mine Layers') - - switch (k) { - case 0: { - timelineChart.name = 'Trading Engine' - deleteNodeByName('Trading System') - deleteNodeByName('Simulation Objects') - break - } - case 1: { - timelineChart.name = 'Trading System' - deleteNodeByName('Trading Engine') - deleteNodeByName('Simulation Objects') - break - } - case 2: { - timelineChart.name = 'Simulation Objects' - deleteNodeByName('Trading Engine') - deleteNodeByName('Trading System') - break - } - } - function deleteNodeByName(nodeName) { - let nodeToDelete = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(timelineChart.layerManager, undefined, nodeName, true, true, false, false) - if (nodeToDelete === undefined) { return } - functionLibraryNodeDeleter.deleteUIObject(nodeToDelete, rootNodes) - } - } - } - /* - We need to create a Timeline Chart for each Data Mine Products. - */ - mineProducts = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Data Mine Products') - for (let j = 0; j < mineProducts.length; j++) { - let mineProduct = mineProducts[j] - /* - We need to filter out the ones that do not belong to the market where - the session is running at. - */ - if (mineProduct.payload.parentNode.payload.referenceParent === undefined) { continue } - if (mineProduct.payload.parentNode.payload.referenceParent.id !== market.id) { continue } - - let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart') - /* - The Mine Product Node might be collapesd and since its creation it never - received the physics call, so we will do the call so that it properly - sets its own name, which we are going to reuse here. - */ - mineProduct.payload.uiObject.invisiblePhysics() - timelineChart.name = mineProduct.name + ' Data' - timelineChart.layerManager.payload.referenceParent = mineProduct - timelineChart.payload.floatingObject.collapseToggle() - timelineChart.layerManager.payload.floatingObject.collapseToggle() - timelineChart.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timelineChart.layerManager.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - - let menu = timelineChart.layerManager.payload.uiObject.menu - menu.internalClick('Add All Mine Layers') - menu.internalClick('Add All Mine Layers') - } - /* - We need to create a Timeline Chart for each Learning Mine Products. - */ - mineProducts = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Learning Mine Products') - for (let j = 0; j < mineProducts.length; j++) { - let mineProduct = mineProducts[j] - /* - We need to filter out the ones that do not belong to the market where - the session is running at. - */ - if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent === undefined) { continue } - if (mineProduct.payload.parentNode.payload.parentNode.payload.referenceParent.id !== market.id) { continue } - - let timelineChart = functionLibraryUiObjectsFromNodes.addUIObject(timeMachine, 'Timeline Chart') - /* - The Mine Product Node might be collapesd and since its creation it never - received the physics call, so we will do the call so that it properly - sets its own name, which we are going to reuse here. - */ - mineProduct.payload.uiObject.invisiblePhysics() - timelineChart.name = mineProduct.name + ' Learning' - timelineChart.layerManager.payload.referenceParent = mineProduct - timelineChart.payload.floatingObject.collapseToggle() - timelineChart.layerManager.payload.floatingObject.collapseToggle() - timelineChart.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - timelineChart.layerManager.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - - let menu = timelineChart.layerManager.payload.uiObject.menu - menu.internalClick('Add All Mine Layers') - menu.internalClick('Add All Mine Layers') - } - } - - function addMissingDashboards(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Network') { - let network = rootNode - scanNetwork(network) - } - } - - function scanNetwork(network) { - if (network === undefined) { return } - - for (let j = 0; j < network.networkNodes.length; j++) { - let networkNode = network.networkNodes[j] - scanNetworkNode(networkNode) - } - - function scanNetworkNode(networkNode) { - let testingEnvironment = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Testing Environment', node, true) - let productionEnvironment = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Production Environment', node, true) - - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, testingEnvironment, true) === true) { - let dashboard = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Dashboard') - dashboard.payload.referenceParent = testingEnvironment - dashboard.name = testingEnvironment.type + ' ' + networkNode.name - } - - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, productionEnvironment, true) === true) { - let dashboard = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Dashboard') - dashboard.payload.referenceParent = productionEnvironment - dashboard.name = productionEnvironment.type + ' ' + networkNode.name - } - } - } - } - - function addAllLayerPanels(node, functionLibraryUiObjectsFromNodes) { - if (validateReferences(node) !== true) { return } - let layerNode = node.payload.parentNode - - let plotterModule = layerNode.payload.referenceParent.payload.referenceParent.payload.referenceParent - for (let i = 0; i < plotterModule.panels.length; i++) { - let plotterPanel = plotterModule.panels[i] - let layerPanel = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Layer Panel') - layerPanel.payload.referenceParent = plotterPanel - } - } - - function addAllLayerPolygons(node, functionLibraryUiObjectsFromNodes) { - if (validateReferences(node) !== true) { return } - let layerNode = node.payload.parentNode - - let plotterModule = layerNode.payload.referenceParent.payload.referenceParent.payload.referenceParent - - if (plotterModule.shapes === undefined) { - node.payload.uiObject.setWarningMessage('Referenced Plotter Module does not have a Shapes child.') - return - } - - for (let i = 0; i < plotterModule.shapes.polygons.length; i++) { - let polygon = plotterModule.shapes.polygons[i] - let layerPolygon = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Layer Polygon') - layerPolygon.payload.referenceParent = polygon - } - } - - function validateReferences(node) { - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a Layer node as a parent to execute this action.') - return - } - if (node.payload.parentNode.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a Layer node as a parent to execute this action.') - return - } - let layerNode = node.payload.parentNode - - if (layerNode.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node needs to have a reference parent node to execute this action.') - return - } - if (layerNode.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node needs to have a reference parent node to execute this action.') - return - } - if (layerNode.payload.referenceParent.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node needs to have a reference grand parent node to execute this action.') - return - } - if (layerNode.payload.referenceParent.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node needs to have a reference grand parent node to execute this action.') - return - } - if (layerNode.payload.referenceParent.payload.referenceParent.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node to have a reference grand grand parent node to execute this action.') - return - } - if (layerNode.payload.referenceParent.payload.referenceParent.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('The Layer node to have a reference grand grand parent node to execute this action.') - return - } - return true - } - -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js deleted file mode 100644 index c2373a016..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/CryptoEcosystemFunctions.js +++ /dev/null @@ -1,576 +0,0 @@ -function newCryptoEcosystemFunctions() { - thisObject = { - addMissingExchanges: addMissingExchanges, - addMissingAssets: addMissingAssets, - addMissingMarkets: addMissingMarkets, - installMarket: installMarket, - uninstallMarket: uninstallMarket - } - - return thisObject - - function addMissingExchanges(node, functionLibraryUiObjectsFromNodes) { - currentExchanges = new Map() - let parent = node.payload.parentNode - if (parent !== undefined) { - for (let i = 0; i < parent.cryptoExchanges.length; i++) { - let cryptoExchanges = parent.cryptoExchanges[i] - for (let j = 0; j < cryptoExchanges.exchanges.length; j++) { - let exchange = cryptoExchanges.exchanges[j] - let codeName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(exchange.payload, 'codeName') - currentExchanges.set(codeName, exchange) - } - } - } - - let params = { - method: 'listExchanges', - has: { - fetchOHLCV: true, - fetchMarkets: true - } - } - - callWebServer(JSON.stringify(params), 'CCXT', onResponse) - - function onResponse(err, data) { - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - node.payload.uiObject.setErrorMessage('Failed to Fetch Assets from the Exchange') - return - } - - let exchanges = JSON.parse(data) - for (let i = 0; i < exchanges.length; i++) { - let exchange = exchanges[i] - let existingExchange = currentExchanges.get(exchange.id) - if (existingExchange === undefined) { - let newExchange = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Crypto Exchange') - newExchange.name = exchange.name - newExchange.config = '{ \n\"codeName\": \"' + exchange.id + '\"\n}' - newExchange.payload.floatingObject.collapseToggle() - newExchange.exchangeAssets.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - newExchange.exchangeMarkets.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - newExchange.exchangeAccounts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - newExchange.exchangeAssets.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_050X - newExchange.exchangeMarkets.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - newExchange.exchangeAccounts.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_025X - newExchange.exchangeAssets.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - newExchange.exchangeMarkets.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - newExchange.exchangeAccounts.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - } - } - } - } - - function addMissingAssets(node, functionLibraryUiObjectsFromNodes) { - if (node.payload.parentNode === undefined) { return } - - let currentAssets = new Map() - for (let j = 0; j < node.assets.length; j++) { - let asset = node.assets[j] - let codeName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(asset.payload, 'codeName') - currentAssets.set(codeName, asset) - } - - let exchangeId = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload.parentNode.payload, 'codeName') - - try { - let params = { - exchangeId: exchangeId, - method: 'fetchMarkets' - } - callWebServer(JSON.stringify(params), 'CCXT', onResponse) - - function onResponse(err, data) { - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - node.payload.uiObject.setErrorMessage('Failed to Fetch Assets from the Exchange') - return - } - let queryParams = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload, 'addMissingAssetsFilter') - - let markets = JSON.parse(data) - - let totalAdded = 0 - for (let i = 0; i < markets.length; i++) { - let market = markets[i] - - if (queryParams !== undefined) { - if (queryParams.baseAsset !== undefined) { - if (market.base.indexOf(queryParams.baseAsset) < 0) { - continue - } - } - if (queryParams.quotedAsset !== undefined) { - if (market.quote.indexOf(queryParams.quotedAsset) < 0) { - continue - } - } - } - if (currentAssets.get(market.base) === undefined) { - addAsset(market.base) - totalAdded++ - currentAssets.set(market.base, market.base) - } - if (currentAssets.get(market.quote) === undefined) { - addAsset(market.quote) - totalAdded++ - currentAssets.set(market.quote, market.quote) - } - - function addAsset(name) { - let newAsseet = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Asset') - newAsseet.name = name - newAsseet.config = '{ \n\"codeName\": \"' + name + '\"\n}' - } - } - node.payload.uiObject.setInfoMessage(node.payload.parentNode.name + ' supports ' + markets.length + ' markets. Applying the filters at this node config ' + node.config + ' this process added ' + totalAdded + ' assets.', 4) - - } - } catch (err) { - node.payload.uiObject.setErrorMessage('Failed to Fetch Assets from the Exchange') - console.log(err.stack) - } - } - - function addMissingMarkets(node, functionLibraryUiObjectsFromNodes, functionLibraryNodeCloning) { - if (node.payload.parentNode === undefined) { return } - if (node.payload.parentNode.exchangeAssets === undefined) { return } - if (node.payload.parentNode.payload.parentNode === undefined) { return } - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return } - - let currentAssets = new Map() - let exchangeAssets = node.payload.parentNode.exchangeAssets - for (let j = 0; j < exchangeAssets.assets.length; j++) { - let asset = exchangeAssets.assets[j] - let codeName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(asset.payload, 'codeName') - currentAssets.set(codeName, asset) - } - - let currentMarkets = new Map() - let exchangeMarkets = node - for (let j = 0; j < exchangeMarkets.markets.length; j++) { - let asset = exchangeMarkets.markets[j] - let codeName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(asset.payload, 'codeName') - currentMarkets.set(codeName, asset) - } - - let exchangeId = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload.parentNode.payload, 'codeName') - - try { - let params = { - exchangeId: exchangeId, - method: 'fetchMarkets' - } - callWebServer(JSON.stringify(params), 'CCXT', onResponse) - - function onResponse(err, data) { - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - node.payload.uiObject.setErrorMessage('Failed to Fetch Assets from the Exchange') - return - } - - let markets = JSON.parse(data) - for (let i = 0; i < markets.length; i++) { - let market = markets[i] - let baseAsset = currentAssets.get(market.base) - let quotedAsset = currentAssets.get(market.quote) - - if (baseAsset === undefined) { - continue - } - if (quotedAsset === undefined) { - continue - } - - if (currentMarkets.get(market.symbol) === undefined) { - addMarket(market.symbol, baseAsset, quotedAsset) - } - - function addMarket(name, baseAsset, quotedAsset) { - let newMarket = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Market') - newMarket.name = name - newMarket.config = '{ \n\"codeName\": \"' + name + '\"\n}' - newMarket.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - newMarket.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - newMarket.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - newMarket.baseAsset.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_45 - newMarket.quotedAsset.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_45 - newMarket.baseAsset.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - newMarket.quotedAsset.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - newMarket.baseAsset.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - newMarket.quotedAsset.payload.floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - newMarket.baseAsset.payload.referenceParent = baseAsset - newMarket.quotedAsset.payload.referenceParent = quotedAsset - - currentMarkets.set(name, newMarket) - } - } - } - } catch (err) { - node.payload.uiObject.setErrorMessage('Failed to Fetch Assets from the Exchange') - console.log(err.stack) - } - } - - function installMarket( - node, - rootNodes, - functionLibraryUiObjectsFromNodes, - functionLibraryNodeDeleter, - functionLibraryChartingSpaceFunctions, - functionLibraryDataStorageFunctions - ) { - - let market = node - let cryptoExchange = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(node, 'Crypto Exchange', undefined, true, false, true, false) - if (cryptoExchange === undefined) { - node.payload.uiObject.setErrorMessage('Market must be a descendant of a Crypto Exchange') - return - } - node.payload.uiObject.setInfoMessage('This market is being installed. This might take a minute or two. Please hold on while we connect all the dots for you. ') - - setTimeout(installMarketProcedure, 500) - - function installMarketProcedure() { - let dashboardsArray = [] - - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Network') { - installInNetwork(rootNode) - } - } - - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Charting Space') { - installInChartingSpace(rootNode) - } - } - - node.payload.uiObject.setInfoMessage('Market installation is complete.') - - function installInNetwork(network) { - - for (let j = 0; j < network.networkNodes.length; j++) { - let networkNode = network.networkNodes[j] - installInNetworkNode(networkNode) - } - - function installInNetworkNode(networkNode) { - - let tradingSessionsCreatedArray = [] - let learningSessionsCreatedArray = [] - - installDataMiningTasks() - installLearningMiningTasks() - isntallTradingMiningTasks() - - installDataMinesData() - installLearningMinesData() - installTradingMineData() - - function installDataMiningTasks() { - /* - Here we complete the missing stuff at Data Mining - */ - let dataMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mining', node, true) - if (dataMining === undefined) { - node.payload.uiObject.setErrorMessage('Data Mining node not found at Network Node ' + networkNode.name) - return - } - - let exchangeDataTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMining, 'Exchange Data Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeDataTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketDataTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataTasks, 'Market Data Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - - UI.projects.superalgos.utilities.menu.menuClick(marketDataTask, 'Add Missing Data Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataTask.dataMineTasks, 'Add All Tasks', true) - } - - function installLearningMiningTasks() { - /* - Here we complete the missing stuff at Learning Mining - */ - let learningMining = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mining', node, true) - if (learningMining === undefined) { - node.payload.uiObject.setErrorMessage('Learning Mining node not found at Network Node ' + networkNode.name) - return - } - - let exchangeLearningTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMining, 'Exchange Learning Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeLearningTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketLearningTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningTasks, 'Market Learning Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - - UI.projects.superalgos.utilities.menu.menuClick(marketLearningTask, 'Add Missing Learning Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketLearningTask.learningMineTasks, 'Add All Tasks', true) - - /* This will be needed at the charting space, for creating Dashboards */ - let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketLearningTask, 'Learning Session') - learningSessionsCreatedArray = learningSessionsCreatedArray.concat(learningSessionsArray) - } - - function isntallTradingMiningTasks() { - /* - Next we complete the missing stuff at Testing Environment - */ - installEnvironment('Testing Environment') - /* - Next we complete the missing stuff at Production Environment - */ - installEnvironment('Production Environment') - - function installEnvironment(environment) { - /* - Now we install the environmnet at the current Network Node - */ - let environmentFound = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, environment, node, true) - if (environmentFound === undefined) { - node.payload.uiObject.setErrorMessage(environment + ' node not found at Network Node ' + networkNode.name) - return - } - - let exchangeTradingTasks = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(environmentFound, 'Exchange Trading Tasks', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeTradingTasks.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketTradingTask = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingTasks, 'Market Trading Tasks', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - - UI.projects.superalgos.utilities.menu.menuClick(marketTradingTask, 'Add Missing Trading Mine Tasks', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketTradingTask.tradingMineTasks, 'Add All Tasks', true) - - /* This will be needed at the charting space, for creating Dashboards */ - let backtestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Backtesting Session') - let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Live Trading Session') - let paperTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Paper Trading Session') - let forwardSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(marketTradingTask, 'Forward Testing Session') - let allSessionsArray = backtestingSessionsArray - .concat(liveTradingSessionsArray) - .concat(paperTradingSessionsArray) - .concat(forwardSessionsArray) - tradingSessionsCreatedArray = tradingSessionsCreatedArray.concat(allSessionsArray) - - dashboardsArray.push({ environmentNode: environmentFound, networkNode: networkNode, sessionsArray: allSessionsArray }) - } - } - - function installDataMinesData() { - /* - Here we complete the missing stuff at Data Mines Data - */ - let dataMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Data Mines Data', node, true) - if (dataMinesData === undefined) { - node.payload.uiObject.setErrorMessage('Data Mines Data node not found at Network Node ' + networkNode.name) - return - } - - let exchangeDataProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(dataMinesData, 'Exchange Data Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeDataProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketDataProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeDataProducts, 'Market Data Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketDataProducts.payload.floatingObject.collapseToggle() - - UI.projects.superalgos.utilities.menu.menuClick(marketDataProducts, 'Add All Data Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(marketDataProducts.dataMineProducts, 'Add All Data Products', true) - } - - function installLearningMinesData() { - /* - Here we complete the missing stuff at Learning Mines Data - */ - let learningMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Learning Mines Data', node, true) - if (learningMinesData === undefined) { - node.payload.uiObject.setErrorMessage('Learning Mines Data node not found at Network Node ' + networkNode.name) - return - } - - let exchangeLearningProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(learningMinesData, 'Exchange Learning Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeLearningProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketLearningProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeLearningProducts, 'Market Learning Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketLearningProducts.payload.floatingObject.collapseToggle() - /* - Create the new session references. - */ - for (let i = 0; i < learningSessionsCreatedArray.length; i++) { - let session = learningSessionsCreatedArray[i] - if (UI.projects.superalgos.utilities.children.isMissingChildren(marketLearningProducts, session, true) === true) { - functionLibraryDataStorageFunctions.createSessionReference(marketLearningProducts, session, 'Learning Session Reference', functionLibraryUiObjectsFromNodes) - } - } - /* - Create everything inside the session references. - */ - for (let j = 0; j < marketLearningProducts.learningSessionReferences.length; j++) { - let sessionReference = marketLearningProducts.learningSessionReferences[j] - UI.projects.superalgos.utilities.menu.menuClick(sessionReference, 'Add All Learning Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(sessionReference.learningMineProducts, 'Add All Data Products', true) - sessionReference.payload.floatingObject.collapseToggle() - } - } - - function installTradingMineData() { - /* - Finally we complete the missing stuff at Trading Mines Data - */ - let tradingMinesData = UI.projects.superalgos.utilities.branches.findInBranch(networkNode, 'Trading Mines Data', node, true) - if (tradingMinesData === undefined) { - node.payload.uiObject.setErrorMessage('Trading Mines Data node not found at Network Node ' + networkNode.name) - return - } - - let exchangeTradingProducts = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(tradingMinesData, 'Exchange Trading Products', cryptoExchange, functionLibraryUiObjectsFromNodes) - exchangeTradingProducts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - let marketTradingProducts = UI.projects.superalgos.utilities.children.findAndRecreateChildWithReference(exchangeTradingProducts, 'Market Trading Products', market, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - marketTradingProducts.payload.floatingObject.collapseToggle() - /* - Create the new session references. - */ - for (let i = 0; i < tradingSessionsCreatedArray.length; i++) { - let session = tradingSessionsCreatedArray[i] - if (UI.projects.superalgos.utilities.children.isMissingChildren(marketTradingProducts, session, true) === true) { - functionLibraryDataStorageFunctions.createSessionReference(marketTradingProducts, session, 'Trading Session Reference', functionLibraryUiObjectsFromNodes) - } - } - /* - Create everything inside the session references. - */ - for (let j = 0; j < marketTradingProducts.tradingSessionReferences.length; j++) { - let sessionReference = marketTradingProducts.tradingSessionReferences[j] - UI.projects.superalgos.utilities.menu.menuClick(sessionReference, 'Add All Trading Mine Products', true) - UI.projects.superalgos.utilities.menu.menuClickOfNodeArray(sessionReference.tradingMineProducts, 'Add All Data Products', true) - sessionReference.payload.floatingObject.collapseToggle() - } - } - } - } - - function installInChartingSpace(chartingSpace) { - - for (let i = 0; i < dashboardsArray.length; i++) { - /* - If the Dashboard we need is not already there we create a new one. - */ - let arrayItem = dashboardsArray[i] - let dashboard = UI.projects.superalgos.utilities.children.findOrCreateChildWithReference(chartingSpace, 'Dashboard', arrayItem.environmentNode, functionLibraryUiObjectsFromNodes) - dashboard.name = arrayItem.environmentNode.type + ' ' + arrayItem.networkNode.name - /* - We delete all the existing Time Machines related to the market we are currently installing. - For that, we make a new array with the existing Time Machines so that the deleting - of each node does not affect the proccessing of the whole set. - */ - let timeMachines = [] - for (let i = 0; i < dashboard.timeMachines.length; i++) { - let timeMachine = dashboard.timeMachines[i] - timeMachines.push(timeMachine) - } - for (let i = 0; i < timeMachines.length; i++) { - let timeMachine = timeMachines[i] - let session = timeMachine.payload.referenceParent - if (session === undefined || session.cleaned === true) { - /* - This is what usually happens, that the intall process make these - time machines to lose their reference parent since the install - process deletes them. - */ - functionLibraryNodeDeleter.deleteUIObject(timeMachine, rootNodes) - continue - } - let marketTradingTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false) - if (marketTradingTasks === undefined) { continue } - if (marketTradingTasks.payload === undefined) { continue } - if (marketTradingTasks.payload.referenceParent === undefined) { continue } - if (marketTradingTasks.payload.referenceParent.id === market.id) { - functionLibraryNodeDeleter.deleteUIObject(timeMachine, rootNodes) - } - } - /* - We create a time machine for each session added during the previous processing. - */ - for (let j = 0; j < arrayItem.sessionsArray.length; j++) { - let session = arrayItem.sessionsArray[j] - functionLibraryChartingSpaceFunctions.createTimeMachine(dashboard, session, node, arrayItem.networkNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) - } - } - } - } - } - - function uninstallMarket(node, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter, functionLibraryChartingSpaceFunctions, functionLibraryDataStorageFunctions) { - - node.payload.uiObject.setInfoMessage('This market is being uninstalled. Please hold on that it might take a while.') - - setTimeout(uninstallMarketProcedure, 500) - - function uninstallMarketProcedure() { - let market = node - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Charting Space') { - uninstallInChartingSpace(rootNode) - } - } - - node.payload.uiObject.setInfoMessage('Market uninstall is complete.') - - function uninstallInChartingSpace(chartingSpace) { - - /* Delete all time machines which are referencing sessions inside the market being unistalled. */ - let timeMachines = UI.projects.superalgos.utilities.branches.nodeBranchToArray(chartingSpace, 'Time Machine') - for (let i = 0; i < timeMachines.length; i++) { - let timeMachine = timeMachines[i] - let session = timeMachine.payload.referenceParent - if (session === undefined) { continue } - let marketTradingTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false) - if (marketTradingTasks === undefined) { continue } - if (marketTradingTasks.payload === undefined) { continue } - if (marketTradingTasks.payload.referenceParent === undefined) { continue } - if (marketTradingTasks.payload.referenceParent.id === market.id) { - functionLibraryNodeDeleter.deleteUIObject(timeMachine, rootNodes) - } - } - - /* Delete all Dashboards that does not have time machines inside. */ - let dashboardArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(chartingSpace, 'Dashboard') - for (let i = 0; i < dashboardArray.length; i++) { - let dashboard = dashboardArray[i] - if (dashboard.timeMachines.length === 0) { - functionLibraryNodeDeleter.deleteUIObject(dashboard, rootNodes) - } - } - - /* Scan Networks for the market being unistalled to delete it. */ - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Network') { - uninstallInNetwork(rootNode) - } - } - } - - function uninstallInNetwork(network) { - - let marketDataTasksArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Data Tasks') - let marketTradingTasksArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Trading Tasks') - let marketLearningTasksArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Learning Tasks') - let marketDataProductsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Data Products') - let marketTradingProductsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Trading Products') - let marketLearningProductsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(network, 'Market Learning Products') - - uninstalMarketArray(marketDataTasksArray) - uninstalMarketArray(marketTradingTasksArray) - uninstalMarketArray(marketLearningTasksArray) - uninstalMarketArray(marketDataProductsArray) - uninstalMarketArray(marketTradingProductsArray) - uninstalMarketArray(marketLearningProductsArray) - - function uninstalMarketArray(marketArray) { - for (let i = 0; i < marketArray.length; i++) { - let marketReference = marketArray[i] - if (marketReference.payload === undefined) { continue } - if (marketReference.payload.referenceParent === undefined) { continue } - if (marketReference.payload.referenceParent.id === market.id) { - functionLibraryNodeDeleter.deleteUIObject(marketReference, rootNodes) - } - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js deleted file mode 100644 index e75a2055c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DataStorageFunctions.js +++ /dev/null @@ -1,202 +0,0 @@ -function newDataStorageFunctions() { - thisObject = { - addAllDataProducts: addAllDataProducts, - addAllDataMineProducts: addAllDataMineProducts, - addAllTradingMineProducts: addAllTradingMineProducts, - addAllLearningMineProducts: addAllLearningMineProducts, - addMissingTradingSessionReferences: addMissingTradingSessionReferences, - addMissingLearningSessionReferences: addMissingLearningSessionReferences, - addMissingMarketDataProducts: addMissingMarketDataProducts, - addMissingMarketTradingProducts: addMissingMarketTradingProducts, - addMissingExchangeTradingProducts: addMissingExchangeTradingProducts, - addMissingExchangeDataProducts: addMissingExchangeDataProducts, - createSessionReference: createSessionReference - } - - return thisObject - - function addAllDataProducts(node, functionLibraryUiObjectsFromNodes) { - - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (node.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - if (node.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - - /* - Next, we are going to scan through all the bots of the Data Mine referenced, and for each bot we will - create a Bots Products node. Later we will scan all the Products Definitions of each bot, and for each one - we will create a Data Product. In case we find Product Definition Folders, we will recreate that structure - too, using in this case Data Product Folders. - */ - let mine = node.payload.referenceParent - scanBotArray(mine.sensorBots) - scanBotArray(mine.indicatorBots) - scanBotArray(mine.tradingBots) - scanBotArray(mine.learningBots) - - function scanBotArray(botArray) { - if (botArray === undefined) { return } - - for (let i = 0; i < botArray.length; i++) { - let bot = botArray[i] - let botProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Bot Products') - botProducts.name = bot.name - botProducts.payload.floatingObject.collapseToggle() - - UI.projects.superalgos.utilities.folders.asymetricalFolderStructureCloning( - bot, - botProducts, - 'products', - 'productDefinitionFolders', - 'dataProductFolders', - 'Data Product', - 'Data Product Folder', - undefined, - functionLibraryUiObjectsFromNodes - ) - } - } - } - - function addAllDataMineProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - - if (rootNode.type === 'Data Mine') { - let dataMineProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Data Mine Products') - dataMineProducts.payload.referenceParent = rootNode - } - } - } - - function addAllTradingMineProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - - if (rootNode.type === 'Trading Mine') { - let tradingMineProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Trading Mine Products') - tradingMineProducts.payload.referenceParent = rootNode - } - } - } - - function addAllLearningMineProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - - if (rootNode.type === 'Learning Mine') { - let learningMineProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Learning Mine Products') - learningMineProducts.payload.referenceParent = rootNode - } - } - } - - function addMissingTradingSessionReferences(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let networkNode = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false) - if (networkNode === undefined) { return } - - let backtestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Backtesting Session') - let fordwardTestingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Forward Testing Session') - let paperTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Paper Trading Session') - let liveTradingSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Live Trading Session') - - addMissingSession(backtestingSessionsArray) - addMissingSession(fordwardTestingSessionsArray) - addMissingSession(paperTradingSessionsArray) - addMissingSession(liveTradingSessionsArray) - - function addMissingSession(sessionsArray) { - for (let i = 0; i < sessionsArray.length; i++) { - let session = sessionsArray[i] - /* We will filter out all the sessions that does not belong to the market we are in */ - let marketTradingTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Trading Tasks', undefined, true, false, true, false) - if (node.payload.referenceParent.id !== marketTradingTasks.payload.referenceParent.id) { continue } - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, session, true) === true) { - createSessionReference(node, session, 'Trading Session Reference', functionLibraryUiObjectsFromNodes) - } - } - } - } - - function addMissingLearningSessionReferences(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let networkNode = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(node, 'Network Node', undefined, true, false, true, false) - if (networkNode === undefined) { return } - - let learningSessionsArray = UI.projects.superalgos.utilities.branches.nodeBranchToArray(networkNode, 'Learning Session') - - addMissingSession(learningSessionsArray) - - function addMissingSession(sessionsArray) { - for (let i = 0; i < sessionsArray.length; i++) { - let session = sessionsArray[i] - /* We will filter out all the sessions that does not belong to the market we are in */ - let marketLearningTasks = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(session, 'Market Learning Tasks', undefined, true, false, true, false) - if (node.payload.referenceParent.id !== marketLearningTasks.payload.referenceParent.id) { continue } - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, session, true) === true) { - createSessionReference(node, session, 'Learning Session Reference', functionLibraryUiObjectsFromNodes) - } - } - } - } - - function createSessionReference(node, session, nodeType, functionLibraryUiObjectsFromNodes) { - let sessionReference = functionLibraryUiObjectsFromNodes.addUIObject(node, nodeType) - sessionReference.payload.referenceParent = session - } - - function addMissingMarketDataProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingMarketProducts(node, rootNodes, 'Market Data Products', functionLibraryUiObjectsFromNodes) - } - - function addMissingMarketTradingProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingMarketProducts(node, rootNodes, 'Market Trading Products', functionLibraryUiObjectsFromNodes) - } - - function addMissingMarketProducts(node, rootNodes, newNodeType, functionLibraryUiObjectsFromNodes) { - if (node.payload.referenceParent === undefined) { return } - if (node.payload.referenceParent.exchangeMarkets === undefined) { return } - let marketsArray = node.payload.referenceParent.exchangeMarkets.markets - - for (let i = 0; i < marketsArray.length; i++) { - let market = marketsArray[i] - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, market, true) === true) { - let marketDataProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, newNodeType) - marketDataProducts.payload.referenceParent = market - } - } - } - - function addMissingExchangeTradingProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingExchange(node, rootNodes, 'Exchange Trading Products', functionLibraryUiObjectsFromNodes) - } - - function addMissingExchangeDataProducts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingExchange(node, rootNodes, 'Exchange Data Products', functionLibraryUiObjectsFromNodes) - } - - function addMissingExchange(node, rootNodes, newNodeType, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Crypto Ecosystem') { - let cryptoEcosystem = rootNode - for (let j = 0; j < cryptoEcosystem.cryptoExchanges.length; j++) { - let cryptoExchanges = cryptoEcosystem.cryptoExchanges[j] - for (let k = 0; k < cryptoExchanges.exchanges.length; k++) { - let cryptoExchange = cryptoExchanges.exchanges[k] - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, cryptoExchange, true) === true) { - let exchange = functionLibraryUiObjectsFromNodes.addUIObject(node, newNodeType) - exchange.payload.referenceParent = cryptoExchange - } - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DependenciesFilter.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DependenciesFilter.js deleted file mode 100644 index 88b9eb45d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/DependenciesFilter.js +++ /dev/null @@ -1,74 +0,0 @@ -function newDependenciesFilter() { - thisObject = { - createFilter: createFilter - } - - return thisObject - - function createFilter(node) { - let filters = new Map() - recursiveFilter(node) - - return Array.from(filters.keys()) - - function recursiveFilter(node) { - filter(node.code) - - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - recursiveFilter(node[property.name]) - } - previousPropertyName = property.name - } - } - break - case 'array': { - let nodePropertyArray = node[property.name] - if (nodePropertyArray !== undefined) { - for (let j = 0; j < nodePropertyArray.length; j++) { - let nodeProperty = nodePropertyArray[j] - recursiveFilter(nodeProperty) - } - } - } - break - } - } - } - } - } - - function filter(code) { - if (code === undefined) { return } - - let instructionsArray = code.split(' ') - for (let i = 0; i < instructionsArray.length; i++) { - let instruction = instructionsArray[i] - if (instruction.indexOf('chart') >= 0) { - let parts = instruction.split('.') - let timeFrame = parts[1] - let product = parts[2] - let productParts = product.split(',') - product = productParts[0] - productParts = product.split(')') - product = productParts[0] - - // Example: chart.at01hs.popularSMA.sma200 - chart.at01hs.popularSMA.sma100 < 10 - if (timeFrame !== 'atAnyTimeFrame') { - timeFrame = timeFrame.substring(2, 4) + '-' + timeFrame.substring(4, 7) - } - filters.set(timeFrame + '-' + product, true) - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/LearningSessionFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/LearningSessionFunctions.js deleted file mode 100644 index 5be5aa6fe..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/LearningSessionFunctions.js +++ /dev/null @@ -1,235 +0,0 @@ -function newLearningSessionFunctions() { - thisObject = { - syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, - runSession: runSession, - stopSession: stopSession - } - - return thisObject - - function syncronizeSessionWithBackEnd(node) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* Nodes that do not belong to a network can not get ready. */ - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - /* First we setup everything so as to listen to the response from the Task Server */ - let eventSubscriptionIdOnStatus - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.listenToEvent(key, 'Status Response', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id) - if (message.event.status === 'Learning Session Runnning' ) { - node.payload.uiObject.menu.internalClick('Run Learning Session') - } - } - - /* Second we ask the Task Server if this Session is Running. */ - eventsServerClient.raiseEvent(key, 'Learning Session Status') - } - - function runSession(node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, resume, callBackFunction) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - node.payload.uiObject.run(eventsServerClient, callBackFunction) - - let key = node.name + '-' + node.type + '-' + node.id - - let lightingPath = '' + - 'Trading System->' + - 'Dynamic Indicators->Indicator Function->Formula->' + - 'Trading Strategy->' + - 'Trigger Stage->Trigger On Event->Trigger Off Event->Take Position Event->' + - 'Announcement->Announcement Formula->' + - 'Open Stage->' + - 'Manage Stage->' + - 'Managed Stop Loss->Managed Take Profit->' + - 'Phase->Formula->Next Phase Event->Move To Phase Event->Phase->' + - 'Situation->Condition->Javascript Code->' + - 'Close Stage->' + - 'Initial Targets->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Formula->' + - 'Announcement->Announcement Formula->' + - 'Open Execution->Close Execution->' + - 'Execution Algorithm->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->' + - 'Order Rate->Formula->' + - 'Create Order Event->Cancel Order Event->' + - 'Size In Base Asset->Size In Quoted Asset->Position Rate->Formula->' + - 'Situation->Condition->Javascript Code->' + - 'Market Order->Limit Order->' + - 'Simulated Exchange Events->Simulated Partial Fill->Simulated Actual Rate->Simulated Fees Paid->Formula->' - - let tradingSystem = functionLibraryProtocolNode.getProtocolNode(node.tradingSystemReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Trading Engine->' + - 'Dynamic Indicators->Indicator Function->' + - 'Current->Last->Previous->' + - 'Episode->' + - 'Episode Base Asset->Episode Quoted Asset->Episode Counters->Episode Statistics->' + - 'Strategies->Positions->Orders->Hits->Fails->' + - 'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' + - 'Candle->Cycle->' + - 'Begin->End->Last Begin->Last End->Open->Close->Min->Max->Index->' + - 'Distance To Event->' + - 'Head Of The Market->Process Date->' + - 'Trigger On->Trigger Off->Take Position->Close Position->Next Phase->Move To Phase->Create Order->Cancel Order->Close Order->' + - 'Strategy->' + - 'Strategy Counters->' + - 'Position->' + - 'Entry Target Rate->Exit Target Rate->' + - 'Stop Loss->Stop Loss Phase->Stop Loss Position->Begin->End->Initial Value->Final Value->' + - 'Take Profit->Take Profit Phase->Take Profit Position->Begin->End->Initial Value->Final Value->' + - 'Position Counters->' + - 'Position Statistics->Days->User Defined Statistic->' + - 'Position Base Asset->Position Quoted Asset->Entry Target Size->Exit Target Size->' + - 'Profit Loss->ROI->Hit Fail->' + - 'Exchange Orders->Market Buy Orders->Market Sell Orders->Limit Buy Orders->Limit Sell Orders->' + - 'Market Order->Limit Order->' + - 'Exchange Id->Rate->Order Name->Algorithm Name->Lock->' + - 'Order Counters->' + - 'Order Base Asset->Order Quoted Asset->' + - 'Actual Size->Size->Size Filled->Amount Received->Fees Paid->Fees To Be Paid->' + - 'Order Statistics->Percentage Filled->Actual Rate->Days->User Defined Statistic->' + - 'Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->' + - 'Begin->End->Exit Type->Status->Begin Rate->End Rate->Stage Base Asset->Stage Quoted Asset->Size Placed->Target Size->Size Filled->Fees Paid->Stage Defined In->' + - 'Serial Number->Identifier->Begin->End->Begin Rate->End Rate->Strategy Name->Status->Exit Type->' + - 'Balance->Begin Balance->End Balance->' + - 'Index->Situation Name->Formula->Periods->' - - let tradingEngine = functionLibraryProtocolNode.getProtocolNode(node.tradingEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Learning Session->' + - 'Learning Parameters->' + - 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + - 'Exchange Account Asset->Asset->' + - 'Social Bots->Telegram Bot->' - - let session = functionLibraryProtocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath) - - let dependencyFilter = functionLibraryDependenciesFilter.createFilter(node.tradingSystemReference.payload.referenceParent) - - /* Raise event to run the session */ - let event = { - session: JSON.stringify(session), - tradingSystem: JSON.stringify(tradingSystem), - tradingEngine: JSON.stringify(tradingEngine), - dependencyFilter: JSON.stringify(dependencyFilter), - resume: resume - } - - if (resume !== true) { - eventsServerClient.raiseEvent(key, 'Run Learning Session', event) - } else { - eventsServerClient.raiseEvent(key, 'Resume Learning Session', event) - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - } - - function stopSession(node, functionLibraryProtocolNode, callBackFunction) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.raiseEvent(key, 'Stop Learning Session') - - node.payload.uiObject.stop(callBackFunction, undefined, true) - } - - function validations(node) { - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a Process Instance parent to be able to run.') - return - } - - if (node.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Process Instance node.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task Manager.') - return - } - - let taskManager = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (taskManager.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Mine Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Market Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Exchange Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Testing or Production Environment.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Network Node.') - return - } - - let networkNode = taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (node.tradingSystemReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading System Reference.') - return - } - - if (node.tradingEngineReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading Engine Reference.') - return - } - - if (node.tradingSystemReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading System Reference needs to reference a Trading System.') - return - } - - if (node.tradingEngineReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading Engine Reference needs to reference a Trading Engine.') - return - } - return networkNode - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/MineFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/MineFunctions.js deleted file mode 100644 index 1f8d55c6a..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/MineFunctions.js +++ /dev/null @@ -1,104 +0,0 @@ -function newMineFunctions() { - thisObject = { - addAllOutputDatasets: addAllOutputDatasets, - addAllDataDependencies: addAllDataDependencies, - addAllDataMineDataDependencies: addAllDataMineDataDependencies - } - - return thisObject - - function addAllOutputDatasets(node, functionLibraryUiObjectsFromNodes) { - - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a parent node to execute this action.') - return - } - if (node.payload.parentNode.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a parent node to execute this action.') - return - } - if (node.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a grand parent node to execute this action.') - return - } - - /* - Next, we are going to scan recursively through all nodes of type Product Definition Folder - and Product Definition. For each Product Definition Folder we will create a counterpart - Output Dataset Folder, and for each Product Definition found we will create a Output Definition - for each Dataset defined inside the Product Definition. - */ - UI.projects.superalgos.utilities.folders.asymetricalFolderStructureCloning( - node.payload.parentNode.payload.parentNode, - node, - 'products', - 'productDefinitionFolders', - 'outputDatasetFolders', - 'Output Dataset', - 'Output Dataset Folder', - 'datasets', - functionLibraryUiObjectsFromNodes - ) - } - - function addAllDataDependencies(node, functionLibraryUiObjectsFromNodes) { - - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (node.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - if (node.payload.referenceParent.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a reference parent node to execute this action.') - return - } - - /* - Next, we are going to scan through all the bots of the Data Mine referenced, and for each bot we will - create a Bots Data Dependency node. Later we will scan all the Products Definitions of each bot, and for each - Dataset of each Product we will create a Data Dependency. In case we find Product Definition Folders, we will - recreate that structure too, using in this case Data Dependency Folders. - */ - let dataMine = node.payload.referenceParent - scanBotArray(dataMine.sensorBots) - scanBotArray(dataMine.indicatorBots) - scanBotArray(dataMine.tradingBots) - scanBotArray(dataMine.learningBots) - - function scanBotArray(botArray) { - for (let i = 0; i < botArray.length; i++) { - let bot = botArray[i] - let botProducts = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Bot Data Dependencies') - botProducts.name = bot.name - - UI.projects.superalgos.utilities.folders.asymetricalFolderStructureCloning( - bot, - botProducts, - 'products', - 'productDefinitionFolders', - 'dataDependencyFolders', - 'Data Dependency', - 'Data Dependency Folder', - 'datasets', - functionLibraryUiObjectsFromNodes - ) - } - } - } - - function addAllDataMineDataDependencies(node, rootNodes, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - - if (rootNode.type === 'Data Mine') { - let dataMineDataDependencies = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Data Mine Data Dependencies') - dataMineDataDependencies.payload.referenceParent = rootNode - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeChildren.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeChildren.js deleted file mode 100644 index 30178d28f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeChildren.js +++ /dev/null @@ -1,67 +0,0 @@ -function newNodeChildren() { - thisObject = { - childrenCount: childrenCount - } - - return thisObject - - function childrenCount(parentNode, childNode) { - return countChildrenUiObject(parentNode, childNode) - } - - function countChildrenUiObject(parentNode, childNode) { - let response = { - childrenCount: 0, - childIndex: undefined - } - let parentNodeDefinition = getNodeDefinition(parentNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (parentNode[property.name] !== undefined) { - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - response.childrenCount++ - if (parentNode[property.name].id === childNode.id) { - response.childIndex = response.childrenCount - } - previousPropertyName = property.name - } - } - break - case 'array': { - let nodeDefinition = getNodeDefinition(childNode) - if (nodeDefinition !== undefined) { - let nodePropertyArray = parentNode[property.name] - for (let j = 0; j < nodePropertyArray.length; j++) { - let child = nodePropertyArray[j] - if (nodeDefinition.chainedToSameType === true) { - if (j < 1) { - response.childrenCount++ - if (child.id === childNode.id) { - response.childIndex = response.childrenCount - } - } - } else { - response.childrenCount++ - if (child.id === childNode.id) { - response.childIndex = response.childrenCount - } - } - } - } - } - break - } - } - } - } - } - - return response - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeCloning.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeCloning.js deleted file mode 100644 index 78d08b249..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeCloning.js +++ /dev/null @@ -1,179 +0,0 @@ -function newNodeCloning() { - const MODULE_NAME = 'Node Cloning' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - thisObject = { - getNodeClone: getNodeClone - } - return thisObject - - function getNodeClone(node) { - let idConversionMap = new Map() - - let inmatureClone = cloneNode(node) - let matureClone = redirectReferenceParents(inmatureClone) - - return matureClone - - function cloneNode(node) { - if (node === undefined) { return } - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - let object = { - type: node.type, - name: node.name, - code: node.code, - config: node.config, - project: node.project - } - - /* Children Nodes */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - object[property.name] = cloneNode(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - object[property.name] = [] - for (let m = 0; m < nodePropertyArray.length; m++) { - let protocolNode = cloneNode(nodePropertyArray[m]) - if (protocolNode !== undefined) { - object[property.name].push(protocolNode) - } - } - } - break - } - } - } - } - - object.id = newUniqueId() - idConversionMap.set(node.id, object.id) - - object.savedPayload = getSavedPayload(node) - - return object - } - } - - function redirectReferenceParents(node) { - if (node === undefined) { return } - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - let object = { - type: node.type, - name: node.name, - code: node.code, - config: node.config, - project: node.project - } - - /* Children Nodes */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - object[property.name] = redirectReferenceParents(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - object[property.name] = [] - for (let m = 0; m < nodePropertyArray.length; m++) { - let protocolNode = redirectReferenceParents(nodePropertyArray[m]) - if (protocolNode !== undefined) { - object[property.name].push(protocolNode) - } - } - } - break - } - } - } - } - - object.id = node.id - - object.savedPayload = node.savedPayload - - if (object.savedPayload !== undefined) { - if (object.savedPayload.referenceParent !== undefined) { - let newId = idConversionMap.get(object.savedPayload.referenceParent.id) - if (newId !== undefined) { - object.savedPayload.referenceParent.id = newId - } - } - } - - return object - } - } - } - - function getSavedPayload(node) { - if (node.payload === undefined) { return } - let savedPayload = { - position: { - x: node.payload.position.x, - y: node.payload.position.y - }, - targetPosition: { - x: node.payload.targetPosition.x, - y: node.payload.targetPosition.y - }, - floatingObject: { - isPinned: node.payload.floatingObject.isPinned, - isFrozen: (node.payload.floatingObject.isFrozen && node.payload.floatingObject.frozenManually), - isCollapsed: (node.payload.floatingObject.isCollapsed && node.payload.floatingObject.collapsedManually), - angleToParent: (node.payload.floatingObject.angleToParent), - distanceToParent: (node.payload.floatingObject.distanceToParent), - arrangementStyle: (node.payload.floatingObject.arrangementStyle) - }, - uiObject: { - isPlaying: node.payload.uiObject.isPlaying, - isRunning: node.payload.uiObject.isRunning, - shortcutKey: node.payload.uiObject.shortcutKey - } - } - - /* Next for the ones that have a reference parent, we include it */ - if (node.payload.referenceParent !== undefined) { - savedPayload.referenceParent = { - type: node.payload.referenceParent.type, - name: node.payload.referenceParent.name, - id: node.payload.referenceParent.id - } - } else { - /* The referenceParent property can be inherited from the previous saved payload. */ - if (node.savedPayload !== undefined) { - savedPayload.referenceParent = node.savedPayload.referenceParent - } - } - - return savedPayload - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeDeleter.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeDeleter.js deleted file mode 100644 index 5247f28be..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodeDeleter.js +++ /dev/null @@ -1,149 +0,0 @@ -function newNodeDeleter() { - thisObject = { - deleteWorkspace: deleteWorkspace, - deleteUIObject: deleteUIObject - } - - return thisObject - - function destroyUiObject(node) { - UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.destroyUiObject(node.payload) - } - - function deleteWorkspace(node, rootNodes) { - if (node.rootNodes !== undefined) { - while (node.rootNodes.length > 0) { - let rootNode = node.rootNodes[0] - let result = deleteUIObject(rootNode, rootNodes) - if (result === false) { return false} - } - } - - completeDeletion(node, rootNodes) - destroyUiObject(node) - cleanNode(node) - } - - function deleteUIObject(node, rootNodes) { - - /* First we restore the reference parent to its default state */ - if (node.payload !== undefined && node.payload.referenceParent !== undefined && node.payload.referenceParent.payload !== undefined && node.payload.referenceParent.payload.uiObject !== undefined) { - node.payload.referenceParent.payload.uiObject.isShowing = false - } - - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - /* Remove all of its own children nodes. */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - let result = deleteUIObject(node[property.name], rootNodes) - if (result === false) { return false} - } - previousPropertyName = property.name - } - } - break - case 'array': { - let nodePropertyArray = node[property.name] - if (nodePropertyArray !== undefined) { - while (nodePropertyArray.length > 0) { - let result = deleteUIObject(nodePropertyArray[0], rootNodes) - if (result === false) { return false} - } - } - } - break - } - } - } - - /* Remove node from parent */ - let removedFromParent = false - if (node.payload !== undefined) { - if (node.payload.parentNode !== undefined) { - let parentNodeDefinition = getNodeDefinition(node.payload.parentNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (nodeDefinition.propertyNameAtParent === property.name) { - switch (property.type) { - case 'node': { - node.payload.parentNode[property.name] = undefined - removedFromParent = true - } - break - case 'array': { - let nodePropertyArray = node.payload.parentNode[property.name] - if (nodePropertyArray !== undefined) { - for (let j = 0; j < nodePropertyArray.length; j++) { - let arrayItem = nodePropertyArray[j] - if (arrayItem.id === node.id) { - /* If this object is chained to the ones of the same type we need to give the next in the chain the reference to the current chain parent */ - if (nodeDefinition.chainedToSameType === true) { - if (j < nodePropertyArray.length - 1) { - let nextArrayItem = nodePropertyArray[j + 1] - nextArrayItem.payload.chainParent = node.payload.chainParent - } - } - - nodePropertyArray.splice(j, 1) - removedFromParent = true - } - } - } - } - break - } - } - } - } - } - if (removedFromParent === false) { - console.log('[ERROR] Deleting Node: ' + node.type + ' ' + node.name + '. This node could not be deleted from its parent node (' + node.payload.parentNode.type + ') because its configured propertyNameAtParent (' + nodeDefinition.propertyNameAtParent + ') does not match any of the properties of its parent.') - return false - } - } - } - - completeDeletion(node, rootNodes) - destroyUiObject(node) - cleanNode(node) - } - } - - function completeDeletion(node, rootNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.id === node.id) { - rootNodes.splice(i, 1) - return - } - } - } - - function cleanNode(node) { - if (node === undefined) { return } - if (node.payload === undefined) { return } - - node.payload.targetPosition.x = undefined - node.payload.targetPosition.y = undefined - node.payload.visible = undefined - node.payload.subTitle = undefined - node.payload.title = undefined - node.payload.node = undefined - node.payload.parentNode = undefined - node.payload.chainParent = undefined - node.payload.executeAction = undefined - node.handle = undefined - node.payload = undefined - node.cleaned = true - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodePath.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodePath.js deleted file mode 100644 index 02dc6362c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/NodePath.js +++ /dev/null @@ -1,56 +0,0 @@ -function newNodePath() { - thisObject = { - getNodePath: getNodePath - } - - return thisObject - - function getNodePath(node) { - - let nodePath = 'value' - - recursiveGet(node) - - return 'tradingEngine.' + nodePath - - function recursiveGet(node) { - - if (node.payload === undefined) { return } - if (node.payload.parentNode === undefined) { return } - - let nodeDefinition = getNodeDefinition(node.payload.parentNode) - if (nodeDefinition === undefined) { return } - if (nodeDefinition.properties === undefined) { return } - - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - let parentProperty = node.payload.parentNode[property.name] - if (parentProperty === undefined) { continue } - - switch (property.type) { - case 'node': { - if (parentProperty.id === node.id) { - /* We found it */ - nodePath = property.name + '.' + nodePath - recursiveGet(node.payload.parentNode) - } - } - break - case 'array': { - for (let j = 0; j < parentProperty.length; j++) { - let arrayProperty = parentProperty[j] - if (arrayProperty === undefined) {continue} - if (arrayProperty.id === node.id) { - /* We found it */ - nodePath = property.name + '[' + j + ']' + '.' + nodePath - recursiveGet(node.payload.parentNode) - } - } - } - break - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/OnFocus.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/OnFocus.js deleted file mode 100644 index bbbed3985..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/OnFocus.js +++ /dev/null @@ -1,55 +0,0 @@ -function newOnFocus() { - thisObject = { - getNodeThatIsOnFocus: getNodeThatIsOnFocus - } - return thisObject - - function getNodeThatIsOnFocus(node) { - if (node === undefined || node === null) { return } - if (node.payload === undefined) { return } - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - /* First we ask the question to ourself */ - if (node.payload.uiObject.isOnFocus === true) { - return node - } - - /* Then we check all of its own children nodes. */ - if (node.payload.floatingObject.isCollapsed !== true) { - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - let child = getNodeThatIsOnFocus(node[property.name]) - if (child !== undefined) { - return child - } - } - previousPropertyName = property.name - } - } - break - case 'array': { - let nodePropertyArray = node[property.name] - if (nodePropertyArray !== undefined) { - for (let m = 0; m < nodePropertyArray.length; m++) { - let child = getNodeThatIsOnFocus(nodePropertyArray[m]) - if (child !== undefined) { - return child - } - } - } - } - break - } - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/PluginsFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/PluginsFunctions.js deleted file mode 100644 index f01254c8b..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/PluginsFunctions.js +++ /dev/null @@ -1,135 +0,0 @@ -function newPluginsFunctions() { - thisObject = { - pluginMissingProjects: pluginMissingProjects, - pluginMissingDataMines: pluginMissingDataMines, - pluginMissingTradingMines: pluginMissingTradingMines, - pluginMissingTradingSystems: pluginMissingTradingSystems, - pluginMissingTradingEngines: pluginMissingTradingEngines, - pluginMissingSuperScripts: pluginMissingSuperScripts, - pluginMissingTutorials: pluginMissingTutorials - } - return thisObject - - function getPluginFileNames(projectName, pluginType, callBack) { - callWebServer(undefined, 'PluginFileNames/' + projectName + '/' + pluginType, onResponse) - - function onResponse(err, data) { - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - console.log('Failed to Fetch Plugin ' + pluginType + ' from the Backend') - return - } - - let pluginFileNames = JSON.parse(data) - callBack(pluginFileNames) - } - } - - function addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < fileNames.length; i++) { - let fileName = fileNames[i] - fileName = fileName.replace('.json', '') - if (UI.projects.superalgos.utilities.children.isMissingChildrenByName(node, fileName) === true) { - let child = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Plugin File') - child.name = fileName - } - } - } - - function pluginMissingProjects(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let url = 'ProjectNames' - callWebServer(undefined, url, onResponse) - - function onResponse(err, pProjects) { - let projects = JSON.parse(pProjects) - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - if (UI.projects.superalgos.utilities.children.isMissingChildrenByName(node, project) === true) { - let child = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Plugin Project') - child.name = project - let config = JSON.parse(child.config) - config.codeName = project - child.config = JSON.stringify(config) - } - } - } - } - - function getProjectName(node) { - /* Validations to see if we can do this or not. */ - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a Plugin Project node as a parent to execute this action.') - return - } - if (node.payload.parentNode.payload === undefined) { - node.payload.uiObject.setErrorMessage('You need to have a Plugin Project node as a parent to execute this action.') - return - } - let pluginProject = node.payload.parentNode - let config = JSON.parse(pluginProject.config) - - return config.codeName - } - - function pluginMissingDataMines(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Data-Mines', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } - - function pluginMissingTradingMines(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Trading-Mines', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } - - function pluginMissingTradingSystems(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Trading-Systems', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } - - function pluginMissingTradingEngines(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Trading-Engines', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } - - function pluginMissingSuperScripts(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Super-Scripts', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } - - function pluginMissingTutorials(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let projectName = getProjectName(node) - - getPluginFileNames(projectName, 'Tutorials', onNamesArrived) - - function onNamesArrived(fileNames) { - addPluginFileIfNeeded(node, fileNames, functionLibraryUiObjectsFromNodes) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ProtocolNode.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ProtocolNode.js deleted file mode 100644 index a303b79c4..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ProtocolNode.js +++ /dev/null @@ -1,207 +0,0 @@ -function newProtocolNode() { - const MODULE_NAME = 'Protocol Node' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - thisObject = { - getProtocolNode: getProtocolNode - } - return thisObject - - function getProtocolNode(node, removePersonalData, parseConfig, includeIds, includePayload, includeReferencesInSavedPayload, lightingPath) { - if (node === undefined) { return } - if (node.payload === undefined) { return } - - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - if (removePersonalData === true && nodeDefinition.isPersonalData === true) { return } - let object = { - type: node.type, - name: node.name, - code: node.code, - config: node.config, - project: node.project - } - - /* Children Nodes */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (node[property.name] !== undefined) { - if (lightingPath === undefined) { - object[property.name] = getProtocolNode(node[property.name], removePersonalData, parseConfig, includeIds, includeReferencesInSavedPayload, includePayload) - } else { - let newLightingPath = getNewLightingPath(lightingPath, node.type, property.childType) - if (newLightingPath !== undefined) { - object[property.name] = getProtocolNode(node[property.name], removePersonalData, parseConfig, includeIds, includePayload, includeReferencesInSavedPayload, newLightingPath) - } - } - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - if (lightingPath === undefined) { - let nodePropertyArray = node[property.name] - object[property.name] = [] - for (let m = 0; m < nodePropertyArray.length; m++) { - let protocolNode = getProtocolNode(nodePropertyArray[m], removePersonalData, parseConfig, includeIds, includeReferencesInSavedPayload, includePayload) - if (protocolNode !== undefined) { - object[property.name].push(protocolNode) - } - } - } else { - let newLightingPath = getNewLightingPath(lightingPath, node.type, property.childType) - if (newLightingPath !== undefined) { - let nodePropertyArray = node[property.name] - object[property.name] = [] - for (let m = 0; m < nodePropertyArray.length; m++) { - let protocolNode = getProtocolNode(nodePropertyArray[m], removePersonalData, parseConfig, includeIds, includePayload, includeReferencesInSavedPayload, newLightingPath) - if (protocolNode !== undefined) { - object[property.name].push(protocolNode) - } - } - } - } - } - break - } - } - } - } - - /* Parent Nodes */ - if (node.payload.parentNode !== undefined) { - let newLightingPath = getNewLightingPath(lightingPath, node.type, node.payload.parentNode.type) - if (newLightingPath !== undefined) { - object.parentNode = getProtocolNode(node.payload.parentNode, removePersonalData, parseConfig, includeIds, includePayload, includeReferencesInSavedPayload, newLightingPath) - } else { - let newLightingPath = getNewLightingPath(lightingPath, node.type, node.payload.parentNode.type) - } - } - if (node.payload.referenceParent !== undefined) { - let newLightingPath = getNewLightingPath(lightingPath, node.type, node.payload.referenceParent.type) - if (newLightingPath !== undefined) { - object.referenceParent = getProtocolNode(node.payload.referenceParent, removePersonalData, parseConfig, includeIds, includePayload, includeReferencesInSavedPayload, newLightingPath) - } - } - - if (parseConfig && object.config !== undefined && nodeDefinition.editors !== undefined) { - if (nodeDefinition.editors.config === true) { - try { - object.config = JSON.parse(node.config) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getProtocolNode -> default -> err = ' + err.stack) } - if (ERROR_LOG === true) { logger.write('[ERROR] getProtocolNode -> default -> node.type = ' + node.type) } - if (ERROR_LOG === true) { logger.write('[ERROR] getProtocolNode -> default -> node.name = ' + node.name) } - if (ERROR_LOG === true) { logger.write('[ERROR] getProtocolNode -> default -> node.config = ' + node.config) } - if (ERROR_LOG === true) { logger.write('[ERROR] getProtocolNode -> default -> node.id = ' + node.id) } - } - } - } - - if (includeIds) { - object.id = node.id - } - if (includePayload) { - object.savedPayload = getSavedPayload(node, includeReferencesInSavedPayload) - } - - return object - } - } - - function getNewLightingPath(lightingPath, currentNodeType, nextNodeType) { - if (lightingPath === undefined) { return } - - if (currentNodeType === undefined) { return } - if (nextNodeType === undefined) { return } - - let currentNodePosition = lightingPath.indexOf('->' + currentNodeType + '->') - let nextNodePosition = lightingPath.indexOf('->' + nextNodeType + '->') - - /* - In some situations, the current and next node are of the same type. - When that happens, we need to search for the second instance of that type - at the lighting path. - */ - if (currentNodeType === nextNodeType) { - let tempLightingPath = lightingPath.substring(currentNodePosition + currentNodeType.length, lightingPath.length + 1) - nextNodePosition = tempLightingPath.indexOf('->' + nextNodeType + '->') - } - - let newLightingPath = lightingPath.substring(nextNodePosition, lightingPath.length + 1) - - if (nextNodePosition > currentNodePosition) { - return newLightingPath - } else { - return - } - } - - function getSavedPayload(node, includeReferencesInSavedPayload) { - if (node.payload === undefined) { return } - let savedPayload = { - position: { - x: node.payload.position.x, - y: node.payload.position.y - }, - targetPosition: { - x: node.payload.targetPosition.x, - y: node.payload.targetPosition.y - }, - floatingObject: { - isPinned: node.payload.floatingObject.isPinned, - isFrozen: (node.payload.floatingObject.isFrozen && node.payload.floatingObject.frozenManually), - isCollapsed: (node.payload.floatingObject.isCollapsed && node.payload.floatingObject.collapsedManually), - angleToParent: (node.payload.floatingObject.angleToParent), - distanceToParent: (node.payload.floatingObject.distanceToParent), - arrangementStyle: (node.payload.floatingObject.arrangementStyle) - }, - uiObject: { - isPlaying: node.payload.uiObject.isPlaying, - isRunning: node.payload.uiObject.isRunning, - shortcutKey: node.payload.uiObject.shortcutKey - } - } - - if (node.payload.frame !== undefined) { - savedPayload.frame = { - position: { - x: node.payload.frame.position.x, - y: node.payload.frame.position.y - }, - width: node.payload.frame.width, - height: node.payload.frame.height, - radius: node.payload.frame.radius - } - } - - if (node.payload.tutorial !== undefined) { - savedPayload.tutorial = { - status: node.payload.tutorial.status - } - } - - if (includeReferencesInSavedPayload) { - /* Next for the ones that have a reference parent, we include it */ - if (node.payload.referenceParent !== undefined) { - savedPayload.referenceParent = { - type: node.payload.referenceParent.type, - name: node.payload.referenceParent.name, - id: node.payload.referenceParent.id - } - } else { - /* The referenceParent property can be inherited from the previous saved payload. */ - if (node.savedPayload !== undefined) { - savedPayload.referenceParent = node.savedPayload.referenceParent - } - } - } - return savedPayload - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ReferenceAttachDetach.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ReferenceAttachDetach.js deleted file mode 100644 index 028e35842..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ReferenceAttachDetach.js +++ /dev/null @@ -1,36 +0,0 @@ -function newReferenceAttachDetach() { - thisObject = { - referenceDetachNode: referenceDetachNode, - referenceAttachNode: referenceAttachNode - } - - return thisObject - - function referenceDetachNode(node) { - completeDetachment(node) - } - - function referenceAttachNode(node, attachToNode) { - completeAttachment(node, attachToNode) - } - - function completeAttachment(node, attachToNode) { - node.payload.referenceParent = attachToNode - } - - function completeDetachment(node) { - if (node.payload !== undefined) { - if (node.payload.referenceParent !== undefined) { - if (node.payload.referenceParent.payload !== undefined) { - if (node.payload.referenceParent.payload.uiObject !== undefined) { - node.payload.referenceParent.payload.uiObject.isShowing = false - } - } - } - node.payload.referenceParent = undefined - if (node.savedPayload !== undefined) { - node.savedPayload.referenceParent = undefined - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ShortcutKeys.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ShortcutKeys.js deleted file mode 100644 index 6d3a76aa5..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/ShortcutKeys.js +++ /dev/null @@ -1,54 +0,0 @@ -function newShortcutKeys() { - thisObject = { - getNodeByShortcutKey: getNodeByShortcutKey - } - return thisObject - - function getNodeByShortcutKey(node, searchingKey) { - if (node === undefined) { return } - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - /* Check Self first */ - if (node.payload.uiObject.shortcutKey === searchingKey) { - return node - } - - /* Check all of its own children nodes. */ - if (node.payload.floatingObject.isCollapsed !== true) { - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - let child = getNodeByShortcutKey(node[property.name], searchingKey) - if (child !== undefined) { - return child - } - } - previousPropertyName = property.name - } - } - break - case 'array': { - let nodePropertyArray = node[property.name] - if (nodePropertyArray !== undefined) { - for (let m = 0; m < nodePropertyArray.length; m++) { - let child = getNodeByShortcutKey(nodePropertyArray[m], searchingKey) - if (child !== undefined) { - return child - } - } - } - } - break - } - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/SuperScripts.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/SuperScripts.js deleted file mode 100644 index bbb214083..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/SuperScripts.js +++ /dev/null @@ -1,90 +0,0 @@ -function newSuperScriptsFunctions() { - thisObject = { - runSuperScript: runSuperScript - } - - return thisObject - - function runSuperScript(node, rootNodes, functionLibraryNodeCloning, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - try { - let clone = functionLibraryNodeCloning.getNodeClone - let executionResult = true - let superAction = node - - function setup(templateClone, target, exchange, exchangeNodeType, arrayPropertyName) { - spawnPosition.x = target.payload.position.x - spawnPosition.y = target.payload.position.y - - if (exchange === undefined) { - functionLibraryUiObjectsFromNodes.createUiObjectFromNode(templateClone, target, target) - } else { - let definition = getNodeDefinition(target) - for (let i = 0; i < definition.properties.length; i++) { - let property = definition.properties[i] - if (property.childType === exchangeNodeType) { - let exchanges = target[property.name] - if (exchanges === undefined) { - exchanges = [] - } - let targetExchange - for (let j = 0; j < exchanges.length; j++) { - let thisExchange = exchanges[j] - if (thisExchange.payload.referenceParent !== undefined) { - if (thisExchange.payload.referenceParent.id === exchange.id) { - targetExchange = thisExchange - } - } - } - if (targetExchange === undefined) { - targetExchange = functionLibraryUiObjectsFromNodes.addUIObject(target, exchangeNodeType) - targetExchange.payload.referenceParent = exchange - } - let nodesArray = targetExchange[arrayPropertyName] - nodesArray.push(templateClone) - functionLibraryUiObjectsFromNodes.createUiObjectFromNode(templateClone, targetExchange, targetExchange) - } - } - } - } - - function deleteNode(node) { - functionLibraryNodeDeleter.deleteUIObject(node, rootNodes) - } - - /* Validations */ - if (executionResult === true && node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Super Action node needs a Parent Node.') - executionResult = false - } - if (executionResult === true && node.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Super Action node needs to reference a Master Script Node.') - executionResult = false - } - if (executionResult === true && node.payload.referenceParent.javascriptCode === undefined) { - node.payload.uiObject.setErrorMessage('Master Script Node needs to have a child Javascript Code Node.') - executionResult = false - } - - let masterScript = node.payload.referenceParent - - eval(masterScript.javascriptCode.code) - - let masterScriptInstance = newNewMasterScriptInstance() - - if (executionResult === true) { - executionResult = masterScriptInstance.runValidations(superAction, masterScript) - } - if (executionResult === true) { - executionResult = masterScriptInstance.runScript(superAction, masterScript) - } - if (executionResult === true) { - superAction.payload.uiObject.setValue('Execution Completed Successfully') - } else { - superAction.payload.uiObject.setValue('Execution Failed') - } - } catch (err) { - superAction.payload.uiObject.setErrorMessage(err.message) - superAction.payload.uiObject.setValue('Execution Failed') - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TaskFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TaskFunctions.js deleted file mode 100644 index 3184c3f1a..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TaskFunctions.js +++ /dev/null @@ -1,750 +0,0 @@ -function newTaskFunctions() { - thisObject = { - syncronizeTaskWithBackEnd: syncronizeTaskWithBackEnd, - - runTask: runTask, - stopTask: stopTask, - runAllTasks: runAllTasks, - stopAllTasks: stopAllTasks, - runAllTaskManagers: runAllTaskManagers, - stopAllTaskManagers: stopAllTaskManagers, - - runAllExchangeDataTasks: runAllExchangeDataTasks, - stopAllExchangeDataTasks: stopAllExchangeDataTasks, - runAllExchangeTradingTasks: runAllExchangeTradingTasks, - stopAllExchangeTradingTasks: stopAllExchangeTradingTasks, - runAllExchangeLearningTasks: runAllExchangeLearningTasks, - stopAllExchangeLearningTasks: stopAllExchangeLearningTasks, - - runAllMarketDataTasks: runAllMarketDataTasks, - stopAllMarketDataTasks: stopAllMarketDataTasks, - runAllMarketTradingTasks: runAllMarketTradingTasks, - stopAllMarketTradingTasks: stopAllMarketTradingTasks, - runAllMarketLearningTasks: runAllMarketLearningTasks, - stopAllMarketLearningTasks: stopAllMarketLearningTasks, - - runAllDataMineTasks: runAllDataMineTasks, - stopAllDataMineTasks: stopAllDataMineTasks, - runAllTradingMineTasks: runAllTradingMineTasks, - stopAllTradingMineTasks: stopAllTradingMineTasks, - runAllLearningMineTasks: runAllLearningMineTasks, - stopAllLearningMineTasks: stopAllLearningMineTasks, - - addMissingExchangeDataTasks: addMissingExchangeDataTasks, - addMissingMarketDataTasks: addMissingMarketDataTasks, - addMissingDataMineTasks: addMissingDataMineTasks, - addMissingExchangeTradingTasks: addMissingExchangeTradingTasks, - addMissingMarketTradingTasks: addMissingMarketTradingTasks, - addMissingTradingMineTasks: addMissingTradingMineTasks, - addMissingExchangeLearningTasks: addMissingExchangeLearningTasks, - addMissingMarketLearningTasks: addMissingMarketLearningTasks, - addMissingLearningMineTasks: addMissingLearningMineTasks, - - addAllTasks: addAllTasks - } - - return thisObject - - function syncronizeTaskWithBackEnd(node) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* Nodes that do not belong to a network can not get ready. */ - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - /* First we setup everything so as to listen to the response from the Task Manger */ - let eventSubscriptionIdOnStatus - let key = 'Task Client - ' + node.id - eventsServerClient.listenToEvent(key, 'Task Status', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id) - if (message.event.status === 'Task Process Running' ) { - node.payload.uiObject.menu.internalClick('Run Task') - } - } - - /* Second we ask the Task Manager if this Task has a process Running. */ - let event = { - taskId: node.id - } - - eventsServerClient.raiseEvent('Task Manager', 'Task Status', event) - } - - function runTask(node, functionLibraryProtocolNode, isDebugging, callBackFunction) { - - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - for (let i = 0; i < node.bot.processes.length; i++) { - let process = node.bot.processes[i] - process.payload.uiObject.run(eventsServerClient) - if (process.session !== undefined) { - process.session.payload.uiObject.reset() - } - } - - let taskLightingPath = '->Task->' + - 'Sensor Bot Instance->' + - 'Indicator Bot Instance->Time Frames Filter->' + - 'Trading Bot Instance->' + - 'Learning Bot Instance->' + - 'Sensor Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' + - 'Execution Started Event->' + - 'Key Reference->Exchange Account Key->' + - 'Task Manager->' + - 'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' + - 'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->' + - 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->' + - 'Market->Exchange Markets->Crypto Exchange->' + - 'Market Base Asset->Market Quoted Asset->Asset->' + - 'Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->' + - 'Learning Session->' + - 'Process Definition->' + - 'Process Output->' + - 'Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->Output Dataset Folder->' + - 'Output Dataset->Dataset Definition->Product Definition->' + - 'Process Dependencies->' + - 'Status Dependency->Status Report->Process Definition->' + - 'Data Mine Data Dependencies->Bot Data Dependencies->' + - 'Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->Data Dependency Folder->' + - 'Data Dependency->Dataset Definition->Product Definition->' + - 'Record Definition->Record Property->Formula->' + - 'Data Building Procedure->' + - 'Procedure Initialization->Javascript Code->' + - 'Procedure Loop->Javascript Code->' + - 'Calculations Procedure->' + - 'Procedure Initialization->Javascript Code->' + - 'Procedure Loop->Javascript Code->' + - 'Status Report->' + - 'Execution Finished Event->' + - 'Execution Started Event->Execution Finished Event->Process Definition->' + - 'Sensor Bot->' + - 'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' + - 'Indicator Bot->' + - 'Trading Bot->' + - 'Learning Bot->' + - 'Data Mine->Trading Mine->Learning Mine->' - - let taskDefinition = functionLibraryProtocolNode.getProtocolNode(node, false, true, true, false, false, taskLightingPath) - - let networkLightingPath = '->Network->Network Node->' + - 'Data Storage->Data Mines Data->Exchange Data Products->' + - 'Market Data Products->' + - 'Data Mine Products->Bot Products->' + - 'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' + - 'Data Product->Product Definition->' + - 'Data Mining->Learning Mining->Testing Environment->Production Environment->' + - 'Exchange Data Tasks->Exchange Trading Tasks->Exchange Learning Tasks->Crypto Exchange->' + - 'Market Data Tasks->Market Trading Tasks->Market Learning Tasks->Market->' + - 'Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->' + - 'Task Manager->Task->' + - 'Indicator Bot Instance->Sensor Bot Instance->Trading Bot Instance->Learning Bot Instance->' + - 'Indicator Process Instance->Sensor Process Instance->Trading Process Instance->Learning Process Instance->' + - 'Paper Trading Session->Forward Testing Session->Backtesting Session->Live Trading Session->Learning Session->' + - 'Market->' + - 'Process Definition->' - - let networkDefinition = functionLibraryProtocolNode.getProtocolNode(networkNode.payload.parentNode, false, true, true, false, false, networkLightingPath) - - let event = { - appSchema: JSON.stringify(SCHEMAS_BY_PROJECT.get('Superalgos').array.appSchema), - taskId: node.id, - taskName: node.name, - taskDefinition: JSON.stringify(taskDefinition), - networkDefinition: JSON.stringify(networkDefinition) - } - - if (isDebugging === true) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - eventsServerClient.raiseEvent('Task Server', 'Debug Task Started', event) - return - } - - node.payload.uiObject.run(eventsServerClient, callBackFunction) - eventsServerClient.raiseEvent('Task Manager', 'Run Task', event) - } - - function stopTask(node, functionLibraryProtocolNode, callBackFunction) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - let event = { - taskId: node.id, - taskName: node.name - } - - node.payload.uiObject.stop(callBackFunction, undefined, true) - eventsServerClient.raiseEvent('Task Manager', 'Stop Task', event) - - if (node.bot === undefined) { return } - if (node.bot.processes.length === 0) { return } - - for (let i = 0; i < node.bot.processes.length; i++) { - let process = node.bot.processes[i] - process.payload.uiObject.stop(undefined, undefined, true) - if (process.session !== undefined) { - process.session.payload.uiObject.reset() - } - } - } - - function validations(node) { - if (node.bot === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to have a Bot Instance.') - return - } - if (node.bot.processes.length === 0) { - node.payload.uiObject.setErrorMessage('Task Bot Instance needs to have al least once Process Instance.') - return - } - - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside a Task Manager.') - return - } - - let taskManager = node.payload.parentNode - - if (taskManager.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside Mine Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside Market Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside Exchange Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside a Data Mining, Learning Mining, Testing or Production Environment node.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Task needs to be inside a Network Node.') - return - } - - let networkNode = taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - if (UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(networkNode.payload, 'host') === undefined) { - node.payload.uiObject.setErrorMessage('Network Node needs to have a valid Host property at its config.') - return - } - - if (UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(networkNode.payload, 'webPort') === undefined) { - node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webPort property at its config.') - return - } - - if (UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(networkNode.payload, 'webSocketsPort') === undefined) { - node.payload.uiObject.setErrorMessage('Network Node needs to have a valid webSocketsPort property at its config.') - return - } - - return networkNode - } - - function runAllTasks(taskManager, functionLibraryProtocolNode) { - for (let i = 0; i < taskManager.tasks.length; i++) { - let node = taskManager.tasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run Task') - } - } - - function stopAllTasks(taskManager, functionLibraryProtocolNode) { - for (let i = 0; i < taskManager.tasks.length; i++) { - let node = taskManager.tasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop Task') - } - } - - function runAllTaskManagers(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.taskManagers.length; i++) { - let node = parent.taskManagers[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Tasks') - menu.internalClick('Run All Tasks') - } - } - - function stopAllTaskManagers(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.taskManagers.length; i++) { - let node = parent.taskManagers[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Tasks') - menu.internalClick('Stop All Tasks') - } - } - - function runAllExchangeDataTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeDataTasks.length; i++) { - let node = parent.exchangeDataTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Market Data Tasks') - menu.internalClick('Run All Market Data Tasks') - } - } - - function stopAllExchangeDataTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeDataTasks.length; i++) { - let node = parent.exchangeDataTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Market Data Tasks') - menu.internalClick('Stop All Market Data Tasks') - } - } - - function runAllExchangeTradingTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeTradingTasks.length; i++) { - let node = parent.exchangeTradingTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Market Trading Tasks') - menu.internalClick('Run All Market Trading Tasks') - } - } - - function stopAllExchangeTradingTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeTradingTasks.length; i++) { - let node = parent.exchangeTradingTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Market Trading Tasks') - menu.internalClick('Stop All Market Trading Tasks') - } - } - - function runAllExchangeLearningTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeLearningTasks.length; i++) { - let node = parent.exchangeLearningTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Market Learning Tasks') - menu.internalClick('Run All Market Learning Tasks') - } - } - - function stopAllExchangeLearningTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.exchangeLearningTasks.length; i++) { - let node = parent.exchangeLearningTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Market Learning Tasks') - menu.internalClick('Stop All Market Learning Tasks') - } - } - - function runAllMarketDataTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketDataTasks.length; i++) { - let node = parent.marketDataTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Data Mine Tasks') - menu.internalClick('Run All Data Mine Tasks') - } - } - - function stopAllMarketDataTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketDataTasks.length; i++) { - let node = parent.marketDataTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Data Mine Tasks') - menu.internalClick('Stop All Data Mine Tasks') - } - } - - function runAllMarketTradingTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketTradingTasks.length; i++) { - let node = parent.marketTradingTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Trading Mine Tasks') - menu.internalClick('Run All Trading Mine Tasks') - } - } - - function runAllMarketLearningTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketLearningTasks.length; i++) { - let node = parent.marketLearningTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Learning Mine Tasks') - menu.internalClick('Run All Learning Mine Tasks') - } - } - - function stopAllMarketTradingTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketTradingTasks.length; i++) { - let node = parent.marketTradingTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Trading Mine Tasks') - menu.internalClick('Stop All Trading Mine Tasks') - } - } - - function stopAllMarketLearningTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.marketLearningTasks.length; i++) { - let node = parent.marketLearningTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Learning Mine Tasks') - menu.internalClick('Stop All Learning Mine Tasks') - } - } - - function runAllDataMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.dataMineTasks.length; i++) { - let node = parent.dataMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Task Managers') - menu.internalClick('Run All Task Managers') - } - } - - function stopAllDataMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.dataMineTasks.length; i++) { - let node = parent.dataMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Task Managers') - menu.internalClick('Stop All Task Managers') - } - } - - function runAllTradingMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.tradingMineTasks.length; i++) { - let node = parent.tradingMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Task Managers') - menu.internalClick('Run All Task Managers') - } - } - - function runAllLearningMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.learningMineTasks.length; i++) { - let node = parent.learningMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Run All Task Managers') - menu.internalClick('Run All Task Managers') - } - } - - function stopAllTradingMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.tradingMineTasks.length; i++) { - let node = parent.tradingMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Task Managers') - menu.internalClick('Stop All Task Managers') - } - } - - function stopAllLearningMineTasks(parent, functionLibraryProtocolNode) { - for (let i = 0; i < parent.learningMineTasks.length; i++) { - let node = parent.learningMineTasks[i] - let menu = node.payload.uiObject.menu - - menu.internalClick('Stop All Task Managers') - menu.internalClick('Stop All Task Managers') - } - } - - function addMissingExchangeDataTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingExchangeTasks(node, rootNodes, 'Exchange Data Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingExchangeTradingTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingExchangeTasks(node, rootNodes, 'Exchange Trading Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingExchangeLearningTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingExchangeTasks(node, rootNodes, 'Exchange Learning Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingExchangeTasks(node, rootNodes, newNodeType, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Crypto Ecosystem') { - let cryptoEcosystem = rootNode - for (let j = 0; j < cryptoEcosystem.cryptoExchanges.length; j++) { - let cryptoExchanges = cryptoEcosystem.cryptoExchanges[j] - for (let k = 0; k < cryptoExchanges.exchanges.length; k++) { - let cryptoExchange = cryptoExchanges.exchanges[k] - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, cryptoExchange, true) === true) { - let exchangeTasks = functionLibraryUiObjectsFromNodes.addUIObject(node, newNodeType) - exchangeTasks.payload.referenceParent = cryptoExchange - } - } - } - } - } - } - - function addMissingMarketDataTasks(node, functionLibraryUiObjectsFromNodes) { - addMissingMarketTasks(node, 'Market Data Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingMarketTradingTasks(node, functionLibraryUiObjectsFromNodes) { - addMissingMarketTasks(node, 'Market Trading Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingMarketLearningTasks(node, functionLibraryUiObjectsFromNodes) { - addMissingMarketTasks(node, 'Market Learning Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingMarketTasks(node, newNodeType, functionLibraryUiObjectsFromNodes) { - if (node.payload === undefined) { return } - if (node.payload.referenceParent === undefined) { return } - if (node.payload.referenceParent.exchangeMarkets === undefined) { return } - - let markets = node.payload.referenceParent.exchangeMarkets.markets - - for (let i = 0; i < markets.length; i++) { - let market = markets[i] - - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, market, true) === true) { - let marketDataTasks = functionLibraryUiObjectsFromNodes.addUIObject(node, newNodeType) - marketDataTasks.payload.referenceParent = market - } - } - } - - function addMissingDataMineTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingMineTasks(node, rootNodes, 'Data Mine', 'Data Mine Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingTradingMineTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingMineTasks(node, rootNodes, 'Trading Mine', 'Trading Mine Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingLearningMineTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - addMissingMineTasks(node, rootNodes, 'Learning Mine', 'Learning Mine Tasks', functionLibraryUiObjectsFromNodes) - } - - function addMissingMineTasks(node, rootNodes, rootNodeType, newNodeType, functionLibraryUiObjectsFromNodes) { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === rootNodeType) { - let mine = rootNode - - if (UI.projects.superalgos.utilities.children.isMissingChildren(node, mine, true) === true) { - let dataMineTasks = functionLibraryUiObjectsFromNodes.addUIObject(node, newNodeType) - dataMineTasks.payload.referenceParent = mine - } - } - } - } - - function addAllTasks(node, rootNodes, functionLibraryUiObjectsFromNodes) { - if (node.payload === undefined) { return } - if (node.payload.referenceParent === undefined) { return } - - let taskManager = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Task Manager') - taskManager.name = node.payload.referenceParent.name - taskManager.payload.floatingObject.collapseToggle() - - switch (node.type) { - case 'Data Mine Tasks': { - addDataTasks() - break - } - case 'Learning Mine Tasks': { - addLearningTasks() - break - } - case 'Trading Mine Tasks': { - addTradingTasks() - break - } - } - - function addDataTasks() { - addTaskForTradinSystem() - } - - function addLearningTasks() { - addTaskForTradinSystem() - } - - function addTradingTasks() { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode.type === 'Trading System') { - addTaskForTradinSystem(rootNode) - } - } - } - - function addTaskForTradinSystem(tradingSystem) { - let mine = node.payload.referenceParent - - addTasksForBotArray(mine.sensorBots) - addTasksForBotArray(mine.indicatorBots) - addTasksForBotArray(mine.tradingBots) - addTasksForBotArray(mine.learningBots) - - function addTasksForBotArray(botsArray) { - if (botsArray === undefined) { return } - - for (let i = 0; i < botsArray.length; i++) { - let bot = botsArray[i] - - let task = functionLibraryUiObjectsFromNodes.addUIObject(taskManager, 'Task') - - if (tradingSystem !== undefined) { - task.name = tradingSystem.name - } else { - task.name = bot.name - } - - let botInstance - switch (bot.type) { - case 'Sensor Bot': { - botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Sensor Bot Instance') - botInstance.name = bot.name - break - } - case 'Indicator Bot': { - botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Indicator Bot Instance') - botInstance.name = bot.name - break - } - case 'Trading Bot': { - botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Trading Bot Instance') - botInstance.name = bot.name - break - } - case 'Learning Bot': { - botInstance = functionLibraryUiObjectsFromNodes.addUIObject(task, 'Learning Bot Instance') - botInstance.name = bot.name - break - } - } - - for (let j = 0; j < bot.processes.length; j++) { - let process = bot.processes[j] - let processInstance - switch (bot.type) { - case 'Sensor Bot': { - processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Sensor Process Instance') - processInstance.payload.referenceParent = process - break - } - case 'Indicator Bot': { - processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Indicator Process Instance') - processInstance.payload.referenceParent = process - break - } - case 'Trading Bot': { - processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Trading Process Instance') - processInstance.payload.referenceParent = process - - if (node.payload.parentNode === undefined) { return } - if (node.payload.parentNode.payload === undefined) { return } - if (node.payload.parentNode.payload.parentNode === undefined) { return } - if (node.payload.parentNode.payload.parentNode.payload === undefined) { return } - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { return } - - let environment = node.payload.parentNode.payload.parentNode.payload.parentNode - let session - - switch (environment.type) { - case 'Testing Environment': { - addSession('Backtesting Session') - break - } - case 'Production Environment': { - addSession('Live Trading Session') - break - } - } - break - - function addSession(sessionType) { - session = functionLibraryUiObjectsFromNodes.addUIObject(processInstance, sessionType) - session.name = task.name - let config = JSON.parse(session.config) - config.folderName = session.name.split(" ").join("-") - session.config = JSON.stringify(config) - - for (let m = 0; m < rootNodes.length; m++) { - let rootNode = rootNodes[m] - if (rootNode.type === 'Trading Engine' && rootNode.isPlugin === true) { - let tradingEngine = rootNode - session.tradingEngineReference.payload.referenceParent = tradingEngine - session.tradingSystemReference.payload.referenceParent = tradingSystem - } - } - } - } - case 'Learning Bot': { - processInstance = functionLibraryUiObjectsFromNodes.addUIObject(botInstance, 'Learning Process Instance') - processInstance.payload.referenceParent = process - - let session - - addSession('Learning Session') - break - - function addSession(sessionType) { - session = functionLibraryUiObjectsFromNodes.addUIObject(processInstance, sessionType) - session.name = task.name - let config = JSON.parse(session.config) - config.folderName = session.name.split(" ").join("-") - session.config = JSON.stringify(config) - - for (let m = 0; m < rootNodes.length; m++) { - let rootNode = rootNodes[m] - if (rootNode.type === 'Trading Engine' && rootNode.isPlugin === true) { - let tradingEngine = rootNode - session.tradingEngineReference.payload.referenceParent = tradingEngine - session.tradingSystemReference.payload.referenceParent = tradingSystem - } - } - } - } - } - processInstance.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_90 - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TradingSessionFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TradingSessionFunctions.js deleted file mode 100644 index da4f3f111..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/TradingSessionFunctions.js +++ /dev/null @@ -1,235 +0,0 @@ -function newTradingSessionFunctions() { - thisObject = { - syncronizeSessionWithBackEnd: syncronizeSessionWithBackEnd, - runSession: runSession, - stopSession: stopSession - } - - return thisObject - - function syncronizeSessionWithBackEnd(node) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* Nodes that do not belong to a network can not get ready. */ - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - /* First we setup everything so as to listen to the response from the Task Server */ - let eventSubscriptionIdOnStatus - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.listenToEvent(key, 'Status Response', undefined, node.id, onResponse, onStatus) - - function onResponse(message) { - eventSubscriptionIdOnStatus = message.eventSubscriptionId - } - - function onStatus(message) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStatus, node.id) - if (message.event.status === 'Trading Session Runnning' ) { - node.payload.uiObject.menu.internalClick('Run Trading Session') - } - } - - /* Second we ask the Task Server if this Session is Running. */ - eventsServerClient.raiseEvent(key, 'Trading Session Status') - } - - function runSession(node, functionLibraryProtocolNode, functionLibraryDependenciesFilter, resume, callBackFunction) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - node.payload.uiObject.run(eventsServerClient, callBackFunction) - - let key = node.name + '-' + node.type + '-' + node.id - - let lightingPath = '' + - 'Trading System->' + - 'Dynamic Indicators->Indicator Function->Formula->' + - 'Trading Strategy->' + - 'Trigger Stage->Trigger On Event->Trigger Off Event->Take Position Event->' + - 'Announcement->Announcement Formula->' + - 'Open Stage->' + - 'Manage Stage->' + - 'Managed Stop Loss->Managed Take Profit->' + - 'Phase->Formula->Next Phase Event->Move To Phase Event->Phase->' + - 'Situation->Condition->Javascript Code->' + - 'Close Stage->' + - 'Initial Targets->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Formula->' + - 'Announcement->Announcement Formula->' + - 'Open Execution->Close Execution->' + - 'Execution Algorithm->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->' + - 'Order Rate->Formula->' + - 'Create Order Event->Cancel Order Event->' + - 'Size In Base Asset->Size In Quoted Asset->Position Rate->Formula->' + - 'Situation->Condition->Javascript Code->' + - 'Market Order->Limit Order->' + - 'Simulated Exchange Events->Simulated Partial Fill->Simulated Actual Rate->Simulated Fees Paid->Formula->' - - let tradingSystem = functionLibraryProtocolNode.getProtocolNode(node.tradingSystemReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Trading Engine->' + - 'Dynamic Indicators->Indicator Function->' + - 'Current->Last->Previous->' + - 'Episode->' + - 'Episode Base Asset->Episode Quoted Asset->Episode Counters->Episode Statistics->' + - 'Strategies->Positions->Orders->Hits->Fails->' + - 'Profit Loss->Hit Ratio->Hit Fail->Days->ROI->Annualized Rate Of Return->User Defined Statistic->' + - 'Candle->Cycle->' + - 'Begin->End->Last Begin->Last End->Open->Close->Min->Max->Index->' + - 'Distance To Event->' + - 'Head Of The Market->Process Date->' + - 'Trigger On->Trigger Off->Take Position->Close Position->Next Phase->Move To Phase->Create Order->Cancel Order->Close Order->' + - 'Strategy->' + - 'Strategy Counters->' + - 'Position->' + - 'Entry Target Rate->Exit Target Rate->' + - 'Stop Loss->Stop Loss Phase->Stop Loss Position->Begin->End->Initial Value->Final Value->' + - 'Take Profit->Take Profit Phase->Take Profit Position->Begin->End->Initial Value->Final Value->' + - 'Position Counters->' + - 'Position Statistics->Days->User Defined Statistic->' + - 'Position Base Asset->Position Quoted Asset->Entry Target Size->Exit Target Size->' + - 'Profit Loss->ROI->Hit Fail->' + - 'Exchange Orders->Market Buy Orders->Market Sell Orders->Limit Buy Orders->Limit Sell Orders->' + - 'Market Order->Limit Order->' + - 'Exchange Id->Rate->Order Name->Algorithm Name->Lock->' + - 'Order Counters->' + - 'Order Base Asset->Order Quoted Asset->' + - 'Actual Size->Size->Size Filled->Amount Received->Fees Paid->Fees To Be Paid->' + - 'Order Statistics->Percentage Filled->Actual Rate->Days->User Defined Statistic->' + - 'Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->' + - 'Begin->End->Exit Type->Status->Begin Rate->End Rate->Stage Base Asset->Stage Quoted Asset->Size Placed->Target Size->Size Filled->Fees Paid->Stage Defined In->' + - 'Serial Number->Identifier->Begin->End->Begin Rate->End Rate->Strategy Name->Status->Exit Type->' + - 'Balance->Begin Balance->End Balance->' + - 'Index->Situation Name->Formula->Periods->' - - let tradingEngine = functionLibraryProtocolNode.getProtocolNode(node.tradingEngineReference.payload.referenceParent, false, true, true, false, false, lightingPath) - - lightingPath = '' + - 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + - 'Trading Parameters->' + - 'Session Base Asset->Session Quoted Asset->Time Range->Time Frame->Slippage->Fee Structure->Snapshots->Heartbeats->User Defined Parameters->' + - 'Exchange Account Asset->Asset->' + - 'Social Bots->Telegram Bot->' - - let session = functionLibraryProtocolNode.getProtocolNode(node, false, true, true, false, false, lightingPath) - - let dependencyFilter = functionLibraryDependenciesFilter.createFilter(node.tradingSystemReference.payload.referenceParent) - - /* Raise event to run the session */ - let event = { - session: JSON.stringify(session), - tradingSystem: JSON.stringify(tradingSystem), - tradingEngine: JSON.stringify(tradingEngine), - dependencyFilter: JSON.stringify(dependencyFilter), - resume: resume - } - - if (resume !== true) { - eventsServerClient.raiseEvent(key, 'Run Trading Session', event) - } else { - eventsServerClient.raiseEvent(key, 'Resume Trading Session', event) - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - } - - function stopSession(node, functionLibraryProtocolNode, callBackFunction) { - let networkNode = validations(node) - if (networkNode === undefined) { - /* This means that the validations failed. */ - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(networkNode.id) - - let key = node.name + '-' + node.type + '-' + node.id - eventsServerClient.raiseEvent(key, 'Stop Trading Session') - - node.payload.uiObject.stop(callBackFunction, undefined, true) - } - - function validations(node) { - if (node.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a Process Instance parent to be able to run.') - return - } - - if (node.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Process Instance node.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task.') - return - } - - if (node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Task Manager.') - return - } - - let taskManager = node.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (taskManager.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Mine Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Market Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside Exchange Tasks.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Testing or Production Environment.') - return - } - - if (taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode === undefined) { - node.payload.uiObject.setErrorMessage('Session needs to be inside a Network Node.') - return - } - - let networkNode = taskManager.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode.payload.parentNode - - if (node.tradingSystemReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading System Reference.') - return - } - - if (node.tradingEngineReference === undefined) { - node.payload.uiObject.setErrorMessage('Session needs a child Trading Engine Reference.') - return - } - - if (node.tradingSystemReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading System Reference needs to reference a Trading System.') - return - } - - if (node.tradingEngineReference.payload.referenceParent === undefined) { - node.payload.uiObject.setErrorMessage('Trading Engine Reference needs to reference a Trading Engine.') - return - } - return networkNode - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js deleted file mode 100644 index 4e0d078d8..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/UiObjectsFromNodes.js +++ /dev/null @@ -1,681 +0,0 @@ -function newUiObjectsFromNodes() { - thisObject = { - syncronizeTasksFoundAtWorkspaceWithBackEnd: syncronizeTasksFoundAtWorkspaceWithBackEnd, - syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd: syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd, - syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd: syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd, - playTutorials: playTutorials, - recreateWorkspace: recreateWorkspace, - getNodeById: getNodeById, - tryToConnectChildrenWithReferenceParents: tryToConnectChildrenWithReferenceParents, - createUiObjectFromNode: createUiObjectFromNode, - addUIObject: addUIObject, - addMissingChildren: addMissingChildren - } - - let mapOfReferenceChildren = new Map() - let mapOfNodes - let tasksFoundAtWorkspace - let tradingSessionsFoundAtWorkspace - let learningSessionsFoundAtWorkspace - let tutorialsToPlay - - return thisObject - - function getNodeById(nodeId) { - return mapOfNodes.get(nodeId) - } - - function recreateWorkspace(node, callBackFunction) { - mapOfNodes = new Map() - tasksFoundAtWorkspace = [] - tradingSessionsFoundAtWorkspace = [] - learningSessionsFoundAtWorkspace = [] - tutorialsToPlay = [] - - removeNullRootNodes() - - function removeNullRootNodes() { - for (let i = 0; i < node.rootNodes.length; i++) { - let rootNode = node.rootNodes[i] - if (rootNode === null) { - node.rootNodes.splice(i, 1) - removeNullRootNodes() - return - } - } - } - - addPluginNodes() - - function addPluginNodes(pluginNames) { - let blobService = newFileStorage() - let totalPlugin = 0 - let totalRead = 0 - - for (let i = 0; i < node.rootNodes.length; i++) { - let rootNode = node.rootNodes[i] - if (rootNode.type === 'Plugins') { - let plugins = rootNode - - if (plugins.pluginProjects === undefined) { continue } - for (let j = 0; j < plugins.pluginProjects.length; j++) { - let project = plugins.pluginProjects[j] - if (project.pluginDataMines !== undefined) { - totalPlugin = totalPlugin + project.pluginDataMines.pluginFiles.length - pluginAllTheseFiles(project.pluginDataMines.pluginFiles, 'Data-Mines') - } - if (project.pluginTradingMines !== undefined) { - totalPlugin = totalPlugin + project.pluginTradingMines.pluginFiles.length - pluginAllTheseFiles(project.pluginTradingMines.pluginFiles, 'Trading-Mines') - } - if (project.pluginTradingSystems !== undefined) { - totalPlugin = totalPlugin + project.pluginTradingSystems.pluginFiles.length - pluginAllTheseFiles(project.pluginTradingSystems.pluginFiles, 'Trading-Systems') - } - if (project.pluginTradingEngines !== undefined) { - totalPlugin = totalPlugin + project.pluginTradingEngines.pluginFiles.length - pluginAllTheseFiles(project.pluginTradingEngines.pluginFiles, 'Trading-Engines') - } - if (project.pluginSuperScripts !== undefined) { - totalPlugin = totalPlugin + project.pluginSuperScripts.pluginFiles.length - pluginAllTheseFiles(project.pluginSuperScripts.pluginFiles, 'Super-Scripts') - } - if (project.pluginTutorials !== undefined) { - totalPlugin = totalPlugin + project.pluginTutorials.pluginFiles.length - pluginAllTheseFiles(project.pluginTutorials.pluginFiles, 'Tutorials') - } - } - } - } - - /* - If there is no Plugins node at the workspace, we load it anyways here. - */ - if (totalPlugin === 0) { - addUserDefinedNodes() - } - - function pluginAllTheseFiles(pluginFiles, pluginType) { - for (let i = 0; i < pluginFiles.length; i++) { - let pluginFile = pluginFiles[i] - let name = pluginFile.name - callWebServer(undefined, 'LoadPlugin' + '/' + 'Superalgos' + '/' + pluginType + '/' + name + '.json', onFileReceived) - - function onFileReceived(err, text, response) { - - if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - console.log('[WARN] Cannot load plugin ' + pluginType + ' ' + name + '. The Workspace will be loaded with this plugin file missing.') - } else { - let receivedNode = JSON.parse(text) - /* - If the workspace already contains a root node with the id of the head of the hirierchy - we are loading, we remove it because the plugin file has precedende. - */ - for (let i = 0; i < node.rootNodes.length; i++) { - let rootNode = node.rootNodes[i] - if (rootNode.id === receivedNode.id) { - node.rootNodes.splice(i, 1) - break - } - } - receivedNode.isPlugin = true - - if (pluginFile.pluginFilePosition !== undefined) { - let positionOffset = { - x: pluginFile.pluginFilePosition.savedPayload.position.x - receivedNode.savedPayload.position.x, - y: pluginFile.pluginFilePosition.savedPayload.position.y - receivedNode.savedPayload.position.y - } - receivedNode.positionOffset = positionOffset - } - - node.rootNodes.unshift(receivedNode) - } - - totalRead++ - if (totalPlugin === totalRead) { - addUserDefinedNodes() - } - } - } - } - } - - function addUserDefinedNodes() { - /* Create the workspace UI OBject and then continue with the root nodes. */ - createUiObject(false, 'Workspace', node.name, node, undefined, undefined, 'Workspace') - if (node.rootNodes !== undefined) { - for (let i = 0; i < node.rootNodes.length; i++) { - let rootNode = node.rootNodes[i] - createUiObjectFromNode(rootNode, undefined, undefined) - } - } - - tryToConnectChildrenWithReferenceParents() - - if (callBackFunction !== undefined) { - callBackFunction() // The recreation of the workspace is complete - } - } - } - - function syncronizeTasksFoundAtWorkspaceWithBackEnd(functionLibraryTaskFunctions) { - for (let i = 0; i < tasksFoundAtWorkspace.length; i++) { - let node = tasksFoundAtWorkspace[i] - functionLibraryTaskFunctions.syncronizeTaskWithBackEnd(node) - } - tasksFoundAtWorkspace = undefined - } - - function syncronizeTradingSessionsFoundAtWorkspaceWithBackEnd(functionLibrarySessionFunctions) { - for (let i = 0; i < tradingSessionsFoundAtWorkspace.length; i++) { - let node = tradingSessionsFoundAtWorkspace[i] - functionLibrarySessionFunctions.syncronizeSessionWithBackEnd(node) - } - tradingSessionsFoundAtWorkspace = undefined - } - - function syncronizeLearningSessionsFoundAtWorkspaceWithBackEnd(functionLibrarySessionFunctions) { - for (let i = 0; i < learningSessionsFoundAtWorkspace.length; i++) { - let node = learningSessionsFoundAtWorkspace[i] - functionLibrarySessionFunctions.syncronizeSessionWithBackEnd(node) - } - learningSessionsFoundAtWorkspace = undefined - } - - function playTutorials() { - for (let i = 0; i < tutorialsToPlay.length; i++) { - let node = tutorialsToPlay[i] - node.payload.uiObject.menu.internalClick('Play Tutorial') - } - tutorialsToPlay = undefined - } - - function tryToConnectChildrenWithReferenceParents() { - /* We reconstruct here the reference relationships. */ - for (const [key, node] of mapOfNodes) { - if (node.id === "54854f90-d121-4365-8f40-9a26e7af1097") { - console.log('ACA') - } - if (node.payload === undefined) { continue } - if (node.payload.referenceParent !== undefined) { - if (node.payload.referenceParent.cleaned === true) { - node.payload.referenceParent = mapOfNodes.get(node.payload.referenceParent.id) - if (node.payload.referenceParent === undefined) { - //console.log('[WARN]' + node.type + ' ' + node.name + ' reference parent lost during re-binding phase.') - } - continue // We were referencing a deleted node, so we replace it potentially with a newly created one. - } else { - continue // In this case the reference is already good. - } - } - if (node.savedPayload !== undefined) { - if (node.savedPayload.referenceParent !== undefined) { // these are children recreated - node.payload.referenceParent = mapOfNodes.get(node.savedPayload.referenceParent.id) - if (node.payload.referenceParent === undefined) { - //console.log('[WARN]' + node.type + ' ' + node.name + ' reference parent lost during re-binding phase.') - } - } - } - } - } - - function migrateCodeToConfig(node, nodeDefinition) { - /* Code needed to Migrante from Beta 5 to Beta a Workspace */ - if (nodeDefinition.editors !== undefined) { - if (nodeDefinition.editors.config === true) { - if (node.code !== undefined) { - node.config = node.code - node.code = undefined - } - } - } - } - - function createUiObjectFromNode(node, parentNode, chainParent, positionOffset) { - /* Migration code from beta 6 to beta 7 */ - if (node.project === undefined) { - node.project = 'Superalgos' - } - - /* - This function can be called with a positionOffset to change the node - saved position and all of its descendants positions as well with an - offset. It can also happen that the positionOffset is defined as a property - of the node, in which case it will produce exactly the same effect. - */ - if (node.positionOffset !== undefined) { - positionOffset = node.positionOffset - } - - - /* Get node definition */ - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition !== undefined) { - migrateCodeToConfig(node, nodeDefinition) - - /* Resolve Initial Values */ - if (nodeDefinition.initialValues !== undefined) { - if (nodeDefinition.initialValues.code !== undefined) { - if (node.code === undefined) { - node.code = nodeDefinition.initialValues.code - } - } - if (nodeDefinition.initialValues.config !== undefined) { - if (node.config === undefined) { - node.config = nodeDefinition.initialValues.config - } - } - } - - /* For the cases where an node is not chained to its parent but to the one at the parent before it at its collection */ - if (nodeDefinition.chainedToSameType === true) { - if (parentNode !== undefined) { - let parentNodeDefinition = getNodeDefinition(parentNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (property.childType === node.type) { - if (property.type === 'array') { - if (parentNode[property.name] !== undefined) { - if (parentNode[property.name].length > 1) { - let nodeChildren = parentNode[property.name] - for (let j = 0; j < nodeChildren.length; j++) { - if (node.id === nodeChildren[j].id) { - if (j > 0) { - chainParent = nodeChildren[j - 1] - } - } - } - } - } - } - } - } - } - } - } - } - /* Create Self */ - createUiObject(false, node.type, node.name, node, parentNode, chainParent, node.type, positionOffset) - - /* Create Children */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - if (node[property.name] !== undefined) { - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - createUiObjectFromNode(node[property.name], node, node, positionOffset) - previousPropertyName = property.name - } - } - break - case 'array': { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - let arrayItem = nodePropertyArray[m] - createUiObjectFromNode(arrayItem, node, node, positionOffset) - } - } - break - } - } else { - if (property.type === 'array') { - node[property.name] = [] - } - } - } - } - } - } - - function addUIObject(parentNode, type, rootNodes, project) { - if (project === undefined) { project = parentNode.project } - - let object = { - name: 'New ' + type, - type: type, - project: project - } - - let parentNodeDefinition = getNodeDefinition(parentNode, project) - if (parentNodeDefinition === undefined) { - console.log('Cannot addUIOBject from parent of ' + type + ' because that type it is not defined at the APP_SCHEMA.') - } - /* Resolve Initial Values */ - let nodeDefinition = getNodeDefinition(object, project) - - if (nodeDefinition === undefined) { - console.log('Cannot addUIOBject of ' + type + ' because that type it is not defined at the APP_SCHEMA.') - return - } - - if (nodeDefinition.initialValues !== undefined) { - if (nodeDefinition.initialValues.code !== undefined) { - object.code = nodeDefinition.initialValues.code - } - } - if (nodeDefinition.initialValues !== undefined) { - if (nodeDefinition.initialValues.config !== undefined) { - object.config = nodeDefinition.initialValues.config - } - } - - if (nodeDefinition.isHierarchyHead === true || nodeDefinition.isProjectHead) { - rootNodes.push(object) - createUiObject(true, object.type, object.name, object, parentNode, undefined) - return object - } - - /* For the cases where an node is not chained to its parent but to the one at the parent before it at its collection */ - let chainParent = parentNode - if (nodeDefinition.chainedToSameType === true) { - if (parentNodeDefinition.properties !== undefined) { - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (property.childType === type) { - if (property.type === 'array') { - if (parentNode[property.name] !== undefined) { - if (parentNode[property.name].length > 0) { - let nodeChildren = parentNode[property.name] - chainParent = nodeChildren[nodeChildren.length - 1] - } - } - } - } - } - } - } - - /* Create Empty Arrays for properties of type Array */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - if (property.type === 'array') { - object[property.name] = [] - } - } - } - - if (nodeDefinition.initialValues !== undefined) { - if (nodeDefinition.initialValues.code !== undefined) { - object.code = nodeDefinition.initialValues.code - } - if (nodeDefinition.initialValues.config !== undefined) { - object.config = nodeDefinition.initialValues.config - } - } - - /* Connect to Parent */ - if (parentNodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < parentNodeDefinition.properties.length; i++) { - let property = parentNodeDefinition.properties[i] - if (property.childType === type) { - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - parentNode[property.name] = object - previousPropertyName = property.name - } - } - break - case 'array': { - if (parentNode[property.name] === undefined) { - parentNode[property.name] = [] - } - if (property.maxItems !== undefined) { - if (parentNode[property.name].length < property.maxItems) { - parentNode[property.name].push(object) - } else { - return // Object can not be created. - } - } else { - parentNode[property.name].push(object) - } - } - break - } - } - } - } - - createUiObject(true, object.type, object.name, object, parentNode, chainParent) - - /* Auto Add more Children */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (property.autoAdd === true) { - addUIObject(object, property.childType) - previousPropertyName = property.name - } - } - } - break - case 'array': { - if (property.autoAdd === true) { - if (object[property.name] === undefined) { - object[property.name] = [] - } - addUIObject(object, property.childType) - } - } - break - } - } - } - - return object - } - - function addMissingChildren(node, rootNodes) { - let nodeDefinition = getNodeDefinition(node) - - /* Connect to Parent */ - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - if (property.type === 'node') { - if (property.name !== previousPropertyName) { - if (node[property.name] === undefined) { - addUIObject(node, property.childType, rootNodes) - previousPropertyName = property.name - } - } - } - } - } - } - - function createUiObject(userAddingNew, uiObjectType, name, node, parentNode, chainParent, title, positionOffset) { - let payload = {} - - /* Mechanism related to keeping references when cloning */ - if (node.id === undefined) { - node.id = newUniqueId() - } else { - /* - We need to avoid nodes having the same id. If we add nodes to a workspace that already exist with the same Id, - the nodes being added will get a new id at this moment. - */ - let testNode = mapOfNodes.get(node.id) - if (testNode !== undefined && testNode.cleaned !== true) { - node.id = newUniqueId() - console.log(testNode.name + ' already have the id of the node ' + node.name + ' being added. Creating a new id for it: ' + node.id) - } - } - - /* Default Naming */ - if (name === '' || name === undefined) { name = 'My ' + uiObjectType } - - /* If we are creating this object as the result of restoring a backup, share or clone, we will bring some of the saved properties to the new running instance. */ - if (userAddingNew === false && uiObjectType !== 'Workspace') { - /* This following info can not be missing. */ - if (node.savedPayload === undefined) { - console.log('Node ' + node.type + ' without savedPayload.', node) - return - } - if (node.savedPayload.position === undefined) { - console.log('Node ' + node.type + ' without savedPayload.position.', node) - return - } - if (node.savedPayload.targetPosition === undefined) { - console.log('Node ' + node.type + ' without savedPayload.targetPosition.', node) - return - } - - /* If there is not a position offset, which happens when we are dropping a node into the designer, we create a cero vector then. */ - if (positionOffset === undefined) { - positionOffset = { - x: 0, - y: 0 - } - } - - /* Adding the offset to the saved positions. */ - node.savedPayload.targetPosition.x = node.savedPayload.targetPosition.x + positionOffset.x - node.savedPayload.targetPosition.y = node.savedPayload.targetPosition.y + positionOffset.y - node.savedPayload.position.x = node.savedPayload.position.x + positionOffset.x - node.savedPayload.position.y = node.savedPayload.position.y + positionOffset.y - - /* Transferring the saved payload properties into the running instance being created. */ - payload.targetPosition = { - x: node.savedPayload.targetPosition.x, - y: node.savedPayload.targetPosition.y - } - node.savedPayload.targetPosition = undefined - - /* Reference children connection to parents */ - if (node.savedPayload.referenceParent !== undefined) { - payload.referenceParent = mapOfNodes.get(node.savedPayload.referenceParent.id) - - if (payload.referenceParent !== undefined) { - mapOfReferenceChildren.set(node.id, node) - } - } - } - - /* If we are adding a new object, then we set the initial values for position and targetPosition */ - if (userAddingNew === true || uiObjectType === 'Workspace') { - /* Workspace allways to the spawn position */ - if (uiObjectType === 'Workspace') { - payload.position = { - x: spawnPosition.x, - y: spawnPosition.y - } - } - - /* Chain parent pointing to the position of the chain parent if defined. */ - if (chainParent === undefined) { - if (parentNode !== undefined) { - payload.targetPosition = { - x: parentNode.payload.position.x, - y: parentNode.payload.position.y - } - } else { - payload.targetPosition = { - x: spawnPosition.x, - y: spawnPosition.y - } - } - } else { - payload.targetPosition = { - x: chainParent.payload.position.x, - y: chainParent.payload.position.y - } - } - } - - /* Setting the title */ - if (title !== undefined) { - payload.subTitle = title - } else { - payload.subTitle = uiObjectType - } - - payload.visible = true - payload.title = name - payload.node = node - payload.parentNode = parentNode - payload.chainParent = chainParent - payload.executeAction = UI.projects.superalgos.spaces.designSpace.workspace.executeAction - - node.payload = payload - node.type = uiObjectType - - /* - Now we copy the possible frame saved to the payload where it can be used. A saved frame stores the position of a a chartingSpace object related to a node. - This will prevent that if those charting space objects never get activated, that the frame information is lost when the workspace is saved. - */ - if (node.savedPayload !== undefined) { - if (node.savedPayload.frame !== undefined) { - let frame = { - position: { - x: 0, - y: 0 - } - } - frame.position.x = node.savedPayload.frame.position.x - frame.position.y = node.savedPayload.frame.position.y - frame.width = node.savedPayload.frame.width - frame.height = node.savedPayload.frame.height - frame.radius = node.savedPayload.frame.radius - UI.projects.superalgos.utilities.loadSaveFrame.saveFrame(payload, frame) - } - if (node.savedPayload.tutorial !== undefined) { - let tutorial = { - status: node.savedPayload.tutorial.status - } - UI.projects.superalgos.utilities.tutorial.saveTutorial(payload, tutorial) - } - } - - /* Now we mount the floating object where the UIOBject will be laying on top of */ - UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(userAddingNew, payload) - - /* This is the point where we build a map with all nodes present at the workspace */ - mapOfNodes.set(node.id, node) - - /* We will collect all tasks at the workspace in order to later syncronize them with the backend */ - if (userAddingNew === false && uiObjectType === 'Task' && node.savedPayload !== undefined) { - if (tasksFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a task that was backed up - tasksFoundAtWorkspace.push(node) - } - } - - /* Check if there are sessions to run */ - if (userAddingNew === false && node.savedPayload !== undefined) { - if (uiObjectType === 'Live Trading Session' || uiObjectType === 'Forward Testing Session' || uiObjectType === 'Backtesting Session' || uiObjectType === 'Paper Trading Session') { - if (tradingSessionsFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a session that was running while backed up - tradingSessionsFoundAtWorkspace.push(node) - } - } - if (uiObjectType === 'Learning Session') { - if (learningSessionsFoundAtWorkspace !== undefined) { // it might be undefined when you are spawning a session that was running while backed up - learningSessionsFoundAtWorkspace.push(node) - } - } - } - - /* Check if there are tutorials to play */ - if (userAddingNew === false && node.savedPayload !== undefined) { - if (uiObjectType === 'Tutorial') { - if (node.savedPayload.uiObject.isPlaying === true) { - if (tutorialsToPlay !== undefined) { // it might be undefined when you are spawning a tutorial that was playing while backed up - tutorialsToPlay.push(node) - } - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WebhookFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WebhookFunctions.js deleted file mode 100644 index daa51483c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WebhookFunctions.js +++ /dev/null @@ -1,22 +0,0 @@ -function newWebhookFunctions() { - thisObject = { - sendTestMessage: sendTestMessage - } - - return thisObject - - function sendTestMessage(node, callBackFunction) { - let testMessage = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload, 'testMessage') - let letURL = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload, 'webhookURL') - - callWebServer(testMessage, letURL, onResponse) - - function onResponse(err) { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } else { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WorkspaceFunctions.js b/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WorkspaceFunctions.js deleted file mode 100644 index d477ea2d0..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Function-Libraries/WorkspaceFunctions.js +++ /dev/null @@ -1,32 +0,0 @@ -function newWorkspaceFunctions() { - thisObject = { - addMissingWorkspaceProjects: addMissingWorkspaceProjects - } - - return thisObject - - function addMissingWorkspaceProjects(node, rootNodes, functionLibraryUiObjectsFromNodes) { - let url = 'ProjectNames' - callWebServer(undefined, url, onResponse) - - function onResponse(err, pProjects) { - let projects = JSON.parse(pProjects) - for (let i = 0; i < projects.length; i++) { - let project = projects[i] - let alreadyExist = false - - for (let j = 0; j < rootNodes.length; j++) { - let rootNode = rootNodes[j] - if (rootNode.type === project + ' Project') { - alreadyExist = true - } - } - - if (alreadyExist === false) { - let child = functionLibraryUiObjectsFromNodes.addUIObject(node, project + ' Project', rootNodes, project) - child.project = project - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Docs.js b/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Docs.js deleted file mode 100644 index 43c7ed371..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Docs.js +++ /dev/null @@ -1,7 +0,0 @@ -function newSuperalgosGlobalsDocs() { - thisObject = { - DOCUMENTATION_URL_PREFIX: 'https://docs.superalgos.org/', - DOCUMENTATION_URL_DEFAULT: 'https://docs.superalgos.org/suite-about-this-documentation.html' - } - return thisObject -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Zoom.js b/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Zoom.js deleted file mode 100644 index 040b4952f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Globals/Zoom.js +++ /dev/null @@ -1,15 +0,0 @@ -function newSuperalgosGlobalsZoom() { - thisObject = { - DOUBLE_CLICK_ZOOM_OUT_LEVEL: 0, - DOUBLE_CLICK_ZOOM_IN_LEVEL: 6, - DOUBLE_CLICK_ZOOM_IN_IN_LEVEL: 7, - ZOOM_OUT_THRESHOLD_FOR_NOT_HIDDING_PANELS: 12, - ZOOM_OUT_THRESHOLD_FOR_HIDDING_PANELS: 7, - ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME: 3, - ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT: 2, - ZOOM_OUT_THRESHOLD_FOR_PLOTTING_IN_LOW_RESOLUTION: 3, - ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_TIME_MACHINES_ICONIZED: 5, - ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_SCALES: 3 - } - return thisObject -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-rate.png deleted file mode 100644 index 4c36b4bc3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-size.png deleted file mode 100644 index db842efea..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/actual-size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/algorithm-name.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/algorithm-name.png deleted file mode 100644 index 7146ced5b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/algorithm-name.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/amount-received.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/amount-received.png deleted file mode 100644 index d31209c3c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/amount-received.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-000.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-000.png deleted file mode 100644 index 23b3aee31..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-000.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-045.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-045.png deleted file mode 100644 index cd495d5bd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-045.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-090.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-090.png deleted file mode 100644 index 6c94bc491..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-090.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-180.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-180.png deleted file mode 100644 index b04398af2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-180.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-360.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-360.png deleted file mode 100644 index d66118a75..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/angle-to-parent-360.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/announcement.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/announcement.png deleted file mode 100644 index a19527b12..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/announcement.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/annualized-rate-of-return.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/annualized-rate-of-return.png deleted file mode 100644 index 278adc3a4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/annualized-rate-of-return.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-concave.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-concave.png deleted file mode 100644 index 4c6cc7854..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-concave.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-convex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-convex.png deleted file mode 100644 index 217eae0bd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-convex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-bottom.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-bottom.png deleted file mode 100644 index 8400c2249..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-bottom.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-top.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-top.png deleted file mode 100644 index 37111540e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-horizontal-top.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-left.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-left.png deleted file mode 100644 index 9e8316511..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-left.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-right.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-right.png deleted file mode 100644 index ff70010bd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/arrangement-vertical-right.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backtesting-session.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backtesting-session.png deleted file mode 100644 index 25170c9e9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backtesting-session.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backup.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backup.png deleted file mode 100644 index 142a2fa80..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/backup.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/balance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/balance.png deleted file mode 100644 index a5c57b4b9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/balance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/base-asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-balance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-balance.png deleted file mode 100644 index b8e150248..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-balance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-rate.png deleted file mode 100644 index 45ea57dee..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin.png deleted file mode 100644 index 987caba2c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/begin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance-coin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance-coin.png deleted file mode 100644 index 60e7bd4c2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance-coin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance.png deleted file mode 100644 index 8f4f71952..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/binance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin-cash.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin-cash.png deleted file mode 100644 index a1fdc4f69..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin-cash.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin.png deleted file mode 100644 index a4ee2a209..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitcoin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitfinex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitfinex.png deleted file mode 100644 index d5d3db0e2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitfinex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitmex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitmex.png deleted file mode 100644 index 4ae5662db..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bitmex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bittrex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bittrex.png deleted file mode 100644 index b11a8e692..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bittrex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-data-dependencies.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-data-dependencies.png deleted file mode 100644 index 476d5f8e8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-data-dependencies.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-layers.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-layers.png deleted file mode 100644 index 6f1185b9f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-layers.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-products.png deleted file mode 100644 index 5bd381b2b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bot-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-cancelled-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-cancelled-order.png deleted file mode 100644 index 4034707bf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-cancelled-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-error.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-error.png deleted file mode 100644 index 8607ac4e7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-error.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-info.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-info.png deleted file mode 100644 index af5a698d1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-info.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order-filled.png deleted file mode 100644 index 4de65d3f4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order.png deleted file mode 100644 index 31305169d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-buy-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order-filled.png deleted file mode 100644 index a95a47f44..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order.png deleted file mode 100644 index 58a410544..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-limit-sell-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order-filled.png deleted file mode 100644 index de96a44e8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order.png deleted file mode 100644 index ae3cb45a9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-buy-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order-filled.png deleted file mode 100644 index b131de218..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order.png deleted file mode 100644 index cbec30b38..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-market-sell-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-warning.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-warning.png deleted file mode 100644 index 2719f8ac2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/bullet-warning.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/calculations-procedure.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/calculations-procedure.png deleted file mode 100644 index 0883d961e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/calculations-procedure.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order-event.png deleted file mode 100644 index 341ee7e42..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order.png deleted file mode 100644 index 4ac0a2ad1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cancel-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/candle.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/candle.png deleted file mode 100644 index 64546a5ab..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/candle.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cardano.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cardano.png deleted file mode 100644 index 68b542366..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cardano.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/chart-points.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/chart-points.png deleted file mode 100644 index 7ad931273..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/chart-points.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/charting-space.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/charting-space.png deleted file mode 100644 index b3e320916..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/charting-space.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/clone.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/clone.png deleted file mode 100644 index 9b3b41696..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/clone.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-execution.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-execution.png deleted file mode 100644 index c8508470c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-execution.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-order.png deleted file mode 100644 index a318696d7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-position.png deleted file mode 100644 index 8c769f44f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage-event.png deleted file mode 100644 index dbc9d5cfb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage.png deleted file mode 100644 index cb64d4f3d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close.png deleted file mode 100644 index 43c923667..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/close.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/collapse.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/collapse.png deleted file mode 100644 index 2a8158670..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/collapse.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/condition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/condition.png deleted file mode 100644 index 2c3a28848..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/condition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/configuration.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/configuration.png deleted file mode 100644 index b9edd20c9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/configuration.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-path.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-path.png deleted file mode 100644 index ca02cd314..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-path.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-type.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-type.png deleted file mode 100644 index 658b7a229..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-type.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-value.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-value.png deleted file mode 100644 index 8dc3a474e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/copy-value.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/counters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/counters.png deleted file mode 100644 index 3a02b018a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/counters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order-event.png deleted file mode 100644 index aac91c298..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order.png deleted file mode 100644 index 4eb5942c7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/create-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-ecosystem.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-ecosystem.png deleted file mode 100644 index 60b436b12..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-ecosystem.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchange.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchange.png deleted file mode 100644 index 8c3dc3f12..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchange.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchanges.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchanges.png deleted file mode 100644 index e94ca97b7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/crypto-exchanges.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/current.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/current.png deleted file mode 100644 index 9c0f63baf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/current.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cycle.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cycle.png deleted file mode 100644 index 26e0af5f9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/cycle.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dash.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dash.png deleted file mode 100644 index 755214b1e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dash.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dashboard.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dashboard.png deleted file mode 100644 index 9e579ab06..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dashboard.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-building-procedure.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-building-procedure.png deleted file mode 100644 index 63de055e5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-building-procedure.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency-folder.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency-folder.png deleted file mode 100644 index 6bcf4558e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency-folder.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency.png deleted file mode 100644 index 822adf1fd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-dependency.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-formula.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-formula.png deleted file mode 100644 index 58eca845b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-formula.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-data-dependencies.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-data-dependencies.png deleted file mode 100644 index 53d09b64a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-data-dependencies.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-products.png deleted file mode 100644 index af676213e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-tasks.png deleted file mode 100644 index 9bc5e1d7f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine.png deleted file mode 100644 index 5987d984c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mine.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mines-data.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mines-data.png deleted file mode 100644 index 1b69e88d5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mines-data.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mining.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mining.png deleted file mode 100644 index 30c298ab4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-mining.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product-folder.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product-folder.png deleted file mode 100644 index 4e1c96544..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product-folder.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product.png deleted file mode 100644 index a56737af4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-product.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-storage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-storage.png deleted file mode 100644 index 0371317db..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/data-storage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset-definition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset-definition.png deleted file mode 100644 index 0f4735f92..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset-definition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset.png deleted file mode 100644 index 8059cb8b5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dataset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/days.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/days.png deleted file mode 100644 index 20d706f8a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/days.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delete.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delete.png deleted file mode 100644 index 2c31a2f3e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delete.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delink.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delink.png deleted file mode 100644 index 47f06ff61..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/delink.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/design-space.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/design-space.png deleted file mode 100644 index 4776a4846..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/design-space.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/detach.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/detach.png deleted file mode 100644 index 31aa781a3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/detach.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-event.png deleted file mode 100644 index 4289fb186..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-000.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-000.png deleted file mode 100644 index 65e87718a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-000.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-025.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-025.png deleted file mode 100644 index bf08c48ac..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-025.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-050.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-050.png deleted file mode 100644 index b5553349c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-050.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-100.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-100.png deleted file mode 100644 index 44ad9bb60..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-100.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-150.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-150.png deleted file mode 100644 index c83632189..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-150.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-200.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-200.png deleted file mode 100644 index 537db0065..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/distance-to-parent-200.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/down.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/down.png deleted file mode 100644 index e6a4c776a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/down.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dynamic-indicator.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dynamic-indicator.png deleted file mode 100644 index 0ff75a16f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/dynamic-indicator.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-balance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-balance.png deleted file mode 100644 index 10fee7632..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-balance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-rate.png deleted file mode 100644 index 5eac98536..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end.png deleted file mode 100644 index b448a95ad..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/end.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-rate.png deleted file mode 100644 index 94564f194..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-size.png deleted file mode 100644 index d2087eefb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/entry-target-size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/eos.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/eos.png deleted file mode 100644 index d78e25ddd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/eos.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-base-asset.png deleted file mode 100644 index 286ed367c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-counters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-counters.png deleted file mode 100644 index a747a1b42..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-counters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-quoted-asset.png deleted file mode 100644 index c2ef7c9ef..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-statistics.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-statistics.png deleted file mode 100644 index 842566530..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode-statistics.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode.png deleted file mode 100644 index dd5ad4592..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/episode.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum-classic.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum-classic.png deleted file mode 100644 index dc7089844..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum-classic.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum.png deleted file mode 100644 index 33b2853a1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/ethereum.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-asset.png deleted file mode 100644 index 083125690..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-key.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-key.png deleted file mode 100644 index 2df386906..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-account-key.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-accounts.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-accounts.png deleted file mode 100644 index 3ac313f88..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-accounts.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-assets.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-assets.png deleted file mode 100644 index e5131939d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-assets.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-products.png deleted file mode 100644 index ce0ee40d9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-tasks.png deleted file mode 100644 index 1170f2d22..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-data-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-id.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-id.png deleted file mode 100644 index 204ea68e4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-id.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-products.png deleted file mode 100644 index abfe2c3d3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-tasks.png deleted file mode 100644 index 90d3f2223..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-learning-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-markets.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-markets.png deleted file mode 100644 index 98e70efc1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-markets.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-orders.png deleted file mode 100644 index 43fa83f42..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-tasks.png deleted file mode 100644 index 72357c43a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-products.png deleted file mode 100644 index e352bca8d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-tasks.png deleted file mode 100644 index adc788876..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exchange-trading-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-algorithm.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-algorithm.png deleted file mode 100644 index 7b0bce8a5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-algorithm.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-finished-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-finished-event.png deleted file mode 100644 index a50061daf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-finished-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-started-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-started-event.png deleted file mode 100644 index 4389a6f16..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/execution-started-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-rate.png deleted file mode 100644 index 969ed0808..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-size.png deleted file mode 100644 index c7ea2f902..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-target-size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-type.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-type.png deleted file mode 100644 index 0fd16e71d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/exit-type.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/expand.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/expand.png deleted file mode 100644 index 637282507..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/expand.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fails.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fails.png deleted file mode 100644 index bd0b988a3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fails.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fee-structure.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fee-structure.png deleted file mode 100644 index 0c864590f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fee-structure.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-paid.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-paid.png deleted file mode 100644 index f1f6de8ad..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-paid.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-to-be-paid.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-to-be-paid.png deleted file mode 100644 index 812953cf8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/fees-to-be-paid.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/final-value.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/final-value.png deleted file mode 100644 index 7e3430992..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/final-value.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/formula.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/formula.png deleted file mode 100644 index 5d854018c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/formula.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/forward-testing-session.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/forward-testing-session.png deleted file mode 100644 index 5e8413e7e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/forward-testing-session.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/freeze.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/freeze.png deleted file mode 100644 index fd89c6208..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/freeze.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/full-board.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/full-board.png deleted file mode 100644 index aa13435b8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/full-board.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hand-drag.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hand-drag.png deleted file mode 100644 index 44f0683e2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hand-drag.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/head-of-the-market.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/head-of-the-market.png deleted file mode 100644 index d9fe335e0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/head-of-the-market.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/heartbeats.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/heartbeats.png deleted file mode 100644 index ef69b801e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/heartbeats.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/help.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/help.png deleted file mode 100644 index 1fe2a4b34..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/help.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-fail.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-fail.png deleted file mode 100644 index dbf6e4cf0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-fail.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-ratio.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-ratio.png deleted file mode 100644 index b7b436c11..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hit-ratio.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hitbtc.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hitbtc.png deleted file mode 100644 index 0a2f39624..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hitbtc.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hits.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hits.png deleted file mode 100644 index 0ed6d54cb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/hits.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/html-code.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/html-code.png deleted file mode 100644 index ed3776799..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/html-code.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/identifier.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/identifier.png deleted file mode 100644 index eaa4605bb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/identifier.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-condition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-condition.png deleted file mode 100644 index 1791f9c5d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-condition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-position.png deleted file mode 100644 index e46dd330f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image.png deleted file mode 100644 index 41d647283..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/image.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/index.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/index.png deleted file mode 100644 index ea03df35b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/index.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot-instance.png deleted file mode 100644 index 96a7d7fd1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot.png deleted file mode 100644 index 96a7d7fd1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-bot.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-function.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-function.png deleted file mode 100644 index 3f02bd8f4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-function.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-process-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-process-instance.png deleted file mode 100644 index bf6e71161..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/indicator-process-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-definition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-definition.png deleted file mode 100644 index d6e3db3d5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-definition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-targets.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-targets.png deleted file mode 100644 index 7c5c96d16..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-targets.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-value.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-value.png deleted file mode 100644 index 7c6f7f819..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/initial-value.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/javascript-code.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/javascript-code.png deleted file mode 100644 index 43f82c782..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/javascript-code.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-a.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-a.png deleted file mode 100644 index 8809841e7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-a.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-alt.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-alt.png deleted file mode 100644 index b5ad38990..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-alt.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-arrows.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-arrows.png deleted file mode 100644 index 2bf524627..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-arrows.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-ctrl.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-ctrl.png deleted file mode 100644 index 95a97ba22..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-ctrl.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-down.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-down.png deleted file mode 100644 index cea62f2c6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-down.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-left.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-left.png deleted file mode 100644 index d359dc5a9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-left.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-m.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-m.png deleted file mode 100644 index 9415cb746..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-m.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-r.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-r.png deleted file mode 100644 index 3079372a7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-r.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-reference.png deleted file mode 100644 index 16a99c7b1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-right.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-right.png deleted file mode 100644 index 9bb0c39c2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-right.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-shift.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-shift.png deleted file mode 100644 index 2d0f76800..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-shift.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-up.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-up.png deleted file mode 100644 index 0442350e0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/key-up.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kraken.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kraken.png deleted file mode 100644 index cf7e2d59e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kraken.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kucoin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kucoin.png deleted file mode 100644 index c24a5e5c8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/kucoin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-begin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-begin.png deleted file mode 100644 index aa2c525c2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-begin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-end.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-end.png deleted file mode 100644 index f597e6466..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last-end.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last.png deleted file mode 100644 index ef4a328be..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/last.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-bands.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-bands.png deleted file mode 100644 index 4c11d52ac..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-bands.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-candles.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-candles.png deleted file mode 100644 index d571f45b0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-candles.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-folder.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-folder.png deleted file mode 100644 index 9db1e6ebb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-folder.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-histogram.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-histogram.png deleted file mode 100644 index ebc921a13..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-histogram.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-manager.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-manager.png deleted file mode 100644 index 831267126..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-manager.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-moving-averages.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-moving-averages.png deleted file mode 100644 index b5be71cad..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-moving-averages.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-oscilator.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-oscilator.png deleted file mode 100644 index f294c55f1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-oscilator.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-resistance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-resistance.png deleted file mode 100644 index 2bf34ab99..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-resistance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-support.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-support.png deleted file mode 100644 index fe1b5e107..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-support.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-trends.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-trends.png deleted file mode 100644 index 54d5922f9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-trends.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-volume.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-volume.png deleted file mode 100644 index 3fd663f9f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer-volume.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer.png deleted file mode 100644 index 62e6fe2e7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/layer.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-algorithm.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-algorithm.png deleted file mode 100644 index d8ff2acb2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-algorithm.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot-instance.png deleted file mode 100644 index 5821e9ab1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot.png deleted file mode 100644 index 5821e9ab1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-bot.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-products.png deleted file mode 100644 index c4f75388a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-tasks.png deleted file mode 100644 index 189b4c973..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine.png deleted file mode 100644 index 688bcacdb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mine.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mines-data.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mines-data.png deleted file mode 100644 index 1d71c2ac6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mines-data.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mining.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mining.png deleted file mode 100644 index f7dd4d291..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-mining.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-parameters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-parameters.png deleted file mode 100644 index 87a5a83fc..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-parameters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-process-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-process-instance.png deleted file mode 100644 index 2e83d0616..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-process-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session-reference.png deleted file mode 100644 index ee94aa5db..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session.png deleted file mode 100644 index 90965bb5c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-session.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-task.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-task.png deleted file mode 100644 index 223ece5d4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/learning-task.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-order.png deleted file mode 100644 index 0adb6de55..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-orders.png deleted file mode 100644 index a1eac1979..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-buy-orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-order.png deleted file mode 100644 index fdcbd2a61..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-order.png deleted file mode 100644 index 164c86c42..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-orders.png deleted file mode 100644 index ca6bba333..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/limit-sell-orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/liquid.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/liquid.png deleted file mode 100644 index 4dac18e6b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/liquid.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/litecoin.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/litecoin.png deleted file mode 100644 index 27080fd75..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/litecoin.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/live-trading-session.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/live-trading-session.png deleted file mode 100644 index 02d91af01..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/live-trading-session.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/lock.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/lock.png deleted file mode 100644 index c84abdce4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/lock.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/manage-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/manage-stage.png deleted file mode 100644 index b3cd204b5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/manage-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-stop-loss.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-stop-loss.png deleted file mode 100644 index 4b0ed532a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-stop-loss.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-take-profit.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-take-profit.png deleted file mode 100644 index cd36856e7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/managed-take-profit.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-base-asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-order.png deleted file mode 100644 index efc7c70d1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-orders.png deleted file mode 100644 index 0b3b7893d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-buy-orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-products.png deleted file mode 100644 index d88dbefb3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-tasks.png deleted file mode 100644 index 196e690b2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-data-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-products.png deleted file mode 100644 index 5c3b149ed..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-tasks.png deleted file mode 100644 index 06bb5997d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-learning-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-order.png deleted file mode 100644 index eb9296d01..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-quoted-asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-reference.png deleted file mode 100644 index ba224734d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-order.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-order.png deleted file mode 100644 index c76356b46..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-order.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-orders.png deleted file mode 100644 index 37f6f2363..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-sell-orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-products.png deleted file mode 100644 index be8812962..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-tasks.png deleted file mode 100644 index 8da1ec3ed..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market-trading-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market.png deleted file mode 100644 index ba224734d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/market.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/master-script.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/master-script.png deleted file mode 100644 index 9afac1eb8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/master-script.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/max.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/max.png deleted file mode 100644 index 4e11b9d64..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/max.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/min.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/min.png deleted file mode 100644 index 28214e197..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/min.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mines.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mines.png deleted file mode 100644 index f8b8fa791..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mines.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/monero.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/monero.png deleted file mode 100644 index eb938c3f7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/monero.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-left-click.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-left-click.png deleted file mode 100644 index be3e72840..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-left-click.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-pointer.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-pointer.png deleted file mode 100644 index 08b2ead5e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-pointer.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-right-click.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-right-click.png deleted file mode 100644 index 0e1a287b3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-right-click.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-click.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-click.png deleted file mode 100644 index 6dab9a4ff..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-click.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-down.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-down.png deleted file mode 100644 index 58386b47d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-down.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-up.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-up.png deleted file mode 100644 index a11479633..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/mouse-wheel-up.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase-event.png deleted file mode 100644 index e149ee484..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase.png deleted file mode 100644 index e149ee484..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/move-to-phase.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/neo.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/neo.png deleted file mode 100644 index ab608f9f9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/neo.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network-node.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network-node.png deleted file mode 100644 index 30782f8e3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network-node.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network.png deleted file mode 100644 index 0880e7e8d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/network.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase-event.png deleted file mode 100644 index efc14dbd0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase.png deleted file mode 100644 index efc14dbd0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/next-phase.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-announcements.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-announcements.png deleted file mode 100644 index 0f618ae01..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-announcements.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-errors.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-errors.png deleted file mode 100644 index 1c6985663..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-errors.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-highlights.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-highlights.png deleted file mode 100644 index 32427b862..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-highlights.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-progress.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-progress.png deleted file mode 100644 index d95be7e3a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-progress.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-running.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-running.png deleted file mode 100644 index 86195ad9a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-running.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-status.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-status.png deleted file mode 100644 index d1c5b05db..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-status.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-values.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-values.png deleted file mode 100644 index d3b6fcc73..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/nodes-values.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-execution.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-execution.png deleted file mode 100644 index bcf9cfcf7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-execution.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-stage.png deleted file mode 100644 index 7b81b1619..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open.png deleted file mode 100644 index 67e31d7f7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/open.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-base-asset.png deleted file mode 100644 index 9e5161b03..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-counters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-counters.png deleted file mode 100644 index 3a02b018a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-counters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-name.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-name.png deleted file mode 100644 index 01ee8a09c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-name.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-quoted-asset.png deleted file mode 100644 index c2ef7c9ef..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-rate.png deleted file mode 100644 index 9504cb870..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-statistics.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-statistics.png deleted file mode 100644 index 842566530..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/order-statistics.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/orders.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/orders.png deleted file mode 100644 index 6ba5b11cf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/orders.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/other-hierarchies.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/other-hierarchies.png deleted file mode 100644 index 5e459ce01..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/other-hierarchies.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset-folder.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset-folder.png deleted file mode 100644 index 2312a20ff..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset-folder.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset.png deleted file mode 100644 index a8a34710a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/output-dataset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/panel-data.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/panel-data.png deleted file mode 100644 index 47f1740f8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/panel-data.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/paper-trading-session.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/paper-trading-session.png deleted file mode 100644 index d32066568..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/paper-trading-session.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/percentage-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/percentage-filled.png deleted file mode 100644 index 861ce4807..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/percentage-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/periods.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/periods.png deleted file mode 100644 index 497b9a286..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/periods.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-0.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-0.png deleted file mode 100644 index b9d3765cf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-0.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-1.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-1.png deleted file mode 100644 index b9d3765cf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase-1.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase.png deleted file mode 100644 index b9d3765cf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/phase.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/pinned.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/pinned.png deleted file mode 100644 index ba637d28d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/pinned.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/play.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/play.png deleted file mode 100644 index b6f5da755..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/play.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-module.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-module.png deleted file mode 100644 index 476f02301..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-module.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-panel.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-panel.png deleted file mode 100644 index 001875359..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter-panel.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter.png deleted file mode 100644 index 5b1a23445..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plotter.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-data-mines.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-data-mines.png deleted file mode 100644 index f6467d9c2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-data-mines.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file-position.png deleted file mode 100644 index 6a938159f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file.png deleted file mode 100644 index 50feff37c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-file.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-project.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-project.png deleted file mode 100644 index bd90a856c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-project.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-super-scripts.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-super-scripts.png deleted file mode 100644 index 9d31180e6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-super-scripts.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-engines.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-engines.png deleted file mode 100644 index 3c9fd4eda..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-engines.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-mines.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-mines.png deleted file mode 100644 index 6d10a0bb2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-mines.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-systems.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-systems.png deleted file mode 100644 index 563f42590..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-trading-systems.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-tutorials.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-tutorials.png deleted file mode 100644 index e8839b611..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugin-tutorials.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugins.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugins.png deleted file mode 100644 index f3ab2b7a5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/plugins.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point-formula.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point-formula.png deleted file mode 100644 index c1ebd1072..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point-formula.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point.png deleted file mode 100644 index 9069eee60..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/point.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/poloniex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/poloniex.png deleted file mode 100644 index 2e29586a3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/poloniex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-body.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-body.png deleted file mode 100644 index 33a546c98..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-body.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-border.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-border.png deleted file mode 100644 index b8b56d398..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-border.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-condition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-condition.png deleted file mode 100644 index bb5d9dc0d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-condition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-vertex.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-vertex.png deleted file mode 100644 index 2eaa6c232..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon-vertex.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon.png deleted file mode 100644 index 5b7ac0185..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/polygon.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-base-asset.png deleted file mode 100644 index 286ed367c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-counters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-counters.png deleted file mode 100644 index 3a02b018a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-counters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-quoted-asset.png deleted file mode 100644 index c2ef7c9ef..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-rate.png deleted file mode 100644 index ea634cd71..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-size.png deleted file mode 100644 index 7eab6812e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-statistics.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-statistics.png deleted file mode 100644 index 842566530..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position-statistics.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position.png deleted file mode 100644 index c97dd7e0c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/positions.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/positions.png deleted file mode 100644 index c97dd7e0c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/positions.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-initialization.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-initialization.png deleted file mode 100644 index 9adc971cf..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-initialization.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-loop.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-loop.png deleted file mode 100644 index 01ca63c75..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/procedure-loop.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-date.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-date.png deleted file mode 100644 index bb8ac3bf3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-date.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-definition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-definition.png deleted file mode 100644 index bd89e9373..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-definition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-dependencies.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-dependencies.png deleted file mode 100644 index dc000d321..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-dependencies.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-output.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-output.png deleted file mode 100644 index f415f81a7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/process-output.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition-folder.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition-folder.png deleted file mode 100644 index d2ea60300..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition-folder.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition.png deleted file mode 100644 index 80ef1048d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/product-definition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/production-environment.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/production-environment.png deleted file mode 100644 index 75c356de6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/production-environment.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/profit-loss.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/profit-loss.png deleted file mode 100644 index a7ae65adc..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/profit-loss.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/qtum.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/qtum.png deleted file mode 100644 index c8df5a140..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/qtum.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/quoted-asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate-scale.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate-scale.png deleted file mode 100644 index 7471b89ff..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate-scale.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate.png deleted file mode 100644 index 9504cb870..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-definition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-definition.png deleted file mode 100644 index 364d300c0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-definition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-property.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-property.png deleted file mode 100644 index 3bc17e408..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-property.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-values.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-values.png deleted file mode 100644 index 3e7004a36..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/record-values.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/reset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/reset.png deleted file mode 100644 index 8f1a8de04..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/reset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/resume.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/resume.png deleted file mode 100644 index d9b831b93..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/resume.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/roi.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/roi.png deleted file mode 100644 index 10ef69bb9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/roi.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/run.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/run.png deleted file mode 100644 index b6f5da755..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/run.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/scripts-library.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/scripts-library.png deleted file mode 100644 index 8133ebb5b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/scripts-library.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot-instance.png deleted file mode 100644 index 650a239d6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot.png deleted file mode 100644 index 650a239d6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-bot.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-process-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-process-instance.png deleted file mode 100644 index bf6e71161..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/sensor-process-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/serial-number.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/serial-number.png deleted file mode 100644 index 0b813a476..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/serial-number.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-base-asset.png deleted file mode 100644 index e3a799cc0..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-quoted-asset.png deleted file mode 100644 index c2ef7c9ef..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/session-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/shapes.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/shapes.png deleted file mode 100644 index 67644126d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/shapes.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/share.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/share.png deleted file mode 100644 index c4998af5e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/share.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-actual-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-actual-rate.png deleted file mode 100644 index 8ea6b98af..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-actual-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-exchange-events.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-exchange-events.png deleted file mode 100644 index 21c1014a2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-exchange-events.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-fees-paid.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-fees-paid.png deleted file mode 100644 index c26c2ad85..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-fees-paid.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-partial-fill.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-partial-fill.png deleted file mode 100644 index 196efe4a3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/simulated-partial-fill.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation-name.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation-name.png deleted file mode 100644 index 2f287ae43..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation-name.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation.png deleted file mode 100644 index 4b940968b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/situation.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-filled.png deleted file mode 100644 index e0a6c5002..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-placed.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-placed.png deleted file mode 100644 index cb7c3df05..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-placed.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-to-be-filled.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-to-be-filled.png deleted file mode 100644 index d31209c3c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size-to-be-filled.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size.png deleted file mode 100644 index cf57e7c55..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/slippage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/slippage.png deleted file mode 100644 index fcafb34f3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/slippage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/snapshots.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/snapshots.png deleted file mode 100644 index 0a70abbd5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/snapshots.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/social-bots.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/social-bots.png deleted file mode 100644 index 1caf70b79..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/social-bots.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-settings.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-settings.png deleted file mode 100644 index 7894c5596..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-settings.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-style.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-style.png deleted file mode 100644 index 1bea1bcbb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/space-style.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/spaces.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/spaces.png deleted file mode 100644 index d6572b9a9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/spaces.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-base-asset.png deleted file mode 100644 index 286ed367c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-defined-in.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-defined-in.png deleted file mode 100644 index 16c831456..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-defined-in.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-quoted-asset.png deleted file mode 100644 index c2ef7c9ef..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stage-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/statistics.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/statistics.png deleted file mode 100644 index 61232f2f3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/statistics.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-dependency.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-dependency.png deleted file mode 100644 index cb318dee5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-dependency.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-report.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-report.png deleted file mode 100644 index f3361a6e9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status-report.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status.png deleted file mode 100644 index ffa7254ad..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/status.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stellar.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stellar.png deleted file mode 100644 index d853f8e51..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stellar.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-phase.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-phase.png deleted file mode 100644 index 2c028a362..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-phase.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-position.png deleted file mode 100644 index 197710052..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss.png deleted file mode 100644 index 4b0ed532a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop-loss.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop.png deleted file mode 100644 index 9ab9dadd6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/stop.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategies.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategies.png deleted file mode 100644 index 7036ea65a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategies.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-close-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-close-stage.png deleted file mode 100644 index 512e4223e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-close-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-counters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-counters.png deleted file mode 100644 index ffe21fcde..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-counters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-manage-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-manage-stage.png deleted file mode 100644 index 0a5917259..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-manage-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-name.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-name.png deleted file mode 100644 index 99abc01af..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-name.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-open-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-open-stage.png deleted file mode 100644 index 0a66b09e9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-open-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-trigger-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-trigger-stage.png deleted file mode 100644 index 83a87e2d6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy-trigger-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy.png deleted file mode 100644 index de7cad2cb..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/strategy.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style-condition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style-condition.png deleted file mode 100644 index eb9a065c1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style-condition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style.png deleted file mode 100644 index 4ae248158..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/style.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-action.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-action.png deleted file mode 100644 index a3dc332fd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-action.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-actions.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-actions.png deleted file mode 100644 index bd4a29da9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-actions.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-scripts.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-scripts.png deleted file mode 100644 index 12e17e118..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/super-scripts.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/superalgos.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/superalgos.png deleted file mode 100644 index e91ae49ec..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/superalgos.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position-event.png deleted file mode 100644 index 1e552cd8c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position.png deleted file mode 100644 index 1e552cd8c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-phase.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-phase.png deleted file mode 100644 index e0c331046..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-phase.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-position.png deleted file mode 100644 index 89797528e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit.png deleted file mode 100644 index ec35d6df6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/take-profit.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-rate.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-rate.png deleted file mode 100644 index f90f28e84..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-rate.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-base-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-base-asset.png deleted file mode 100644 index c647b1c60..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-base-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-quoted-asset.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-quoted-asset.png deleted file mode 100644 index 7afd7fe81..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size-in-quoted-asset.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size.png deleted file mode 100644 index bb0822363..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/target-size.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task-manager.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task-manager.png deleted file mode 100644 index ee8d2bc25..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task-manager.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task.png deleted file mode 100644 index 8a7051d9f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/task.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/telegram-bot.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/telegram-bot.png deleted file mode 100644 index 4f65fe25d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/telegram-bot.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-script.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-script.png deleted file mode 100644 index fbbc921f1..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-script.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-structure.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-structure.png deleted file mode 100644 index 212baedf4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-structure.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-target.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-target.png deleted file mode 100644 index 233628a94..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/template-target.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/testing-environment.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/testing-environment.png deleted file mode 100644 index d634fbc0e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/testing-environment.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tether.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tether.png deleted file mode 100644 index af6e43f43..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tether.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-condition.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-condition.png deleted file mode 100644 index cc0ad2239..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-condition.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-formula.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-formula.png deleted file mode 100644 index de0196867..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-formula.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-position.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-position.png deleted file mode 100644 index 592c32a3e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-position.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-style.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-style.png deleted file mode 100644 index a9ee3d7b4..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text-style.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text.png deleted file mode 100644 index ab4ac4e40..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/text.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame-scale.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame-scale.png deleted file mode 100644 index 7aeece127..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame-scale.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame.png deleted file mode 100644 index 15ea83404..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frame.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frames-filter.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frames-filter.png deleted file mode 100644 index 00f2e12e9..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-frames-filter.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-machine.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-machine.png deleted file mode 100644 index f10e3dda7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-machine.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-range.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-range.png deleted file mode 100644 index cf928a0ea..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-range.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-scale.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-scale.png deleted file mode 100644 index 462140c6b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/time-scale.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/timeline-chart.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/timeline-chart.png deleted file mode 100644 index 3525af058..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/timeline-chart.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-max.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-max.png deleted file mode 100644 index fa8168e6c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-max.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min-max.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min-max.png deleted file mode 100644 index e7549e1e6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min-max.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min.png deleted file mode 100644 index 22e67cda5..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-auto-min.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-manual.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-manual.png deleted file mode 100644 index 282f4dbac..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-scale-manual.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-max.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-max.png deleted file mode 100644 index 37b6f77b2..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-max.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min-max.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min-max.png deleted file mode 100644 index a193213f7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min-max.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min.png deleted file mode 100644 index 7c4a26043..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-auto-min.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-manual.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-manual.png deleted file mode 100644 index a8da7ca60..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-auto-time-scale-manual.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-off.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-off.png deleted file mode 100644 index 820109293..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-off.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-on.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-on.png deleted file mode 100644 index 001875359..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/toggle-panel-on.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot-instance.png deleted file mode 100644 index 7783471df..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot.png deleted file mode 100644 index 7783471df..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-bot.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine-reference.png deleted file mode 100644 index 2d3393503..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine.png deleted file mode 100644 index 8ba2a5668..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-engine.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-products.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-products.png deleted file mode 100644 index 84957c842..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-products.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-tasks.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-tasks.png deleted file mode 100644 index f27e13d53..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine-tasks.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine.png deleted file mode 100644 index 9c5299e7f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mine.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mines-data.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mines-data.png deleted file mode 100644 index cd3e2bd5b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-mines-data.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-parameters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-parameters.png deleted file mode 100644 index 878a9aa46..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-parameters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-process-instance.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-process-instance.png deleted file mode 100644 index bf6e71161..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-process-instance.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-session-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-session-reference.png deleted file mode 100644 index 8753ae7bc..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-session-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-strategy.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-strategy.png deleted file mode 100644 index 7036ea65a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-strategy.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system-reference.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system-reference.png deleted file mode 100644 index 0bdf45019..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system-reference.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system.png deleted file mode 100644 index e0ab51d3c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trading-system.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off-event.png deleted file mode 100644 index cb1076837..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off.png deleted file mode 100644 index cb1076837..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-off.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on-event.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on-event.png deleted file mode 100644 index 9f4821359..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on-event.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on.png deleted file mode 100644 index 9f4821359..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-on.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-stage.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-stage.png deleted file mode 100644 index 83a87e2d6..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/trigger-stage.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tron.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tron.png deleted file mode 100644 index 65ebcbd98..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tron.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-step.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-step.png deleted file mode 100644 index fc38a62ba..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-step.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-topic.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-topic.png deleted file mode 100644 index e80e242f3..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial-topic.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial.png deleted file mode 100644 index 3112320cd..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/tutorial.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/under-construction.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/under-construction.png deleted file mode 100644 index 278950703..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/under-construction.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unfreeze.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unfreeze.png deleted file mode 100644 index df97739ca..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unfreeze.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unpinned.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unpinned.png deleted file mode 100644 index c574c5b19..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/unpinned.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/upbit.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/upbit.png deleted file mode 100644 index 6e3cb476d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/upbit.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/us-dollar.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/us-dollar.png deleted file mode 100644 index ba31d4f09..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/us-dollar.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-account.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-account.png deleted file mode 100644 index 8c3b677da..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-account.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-assets.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-assets.png deleted file mode 100644 index bf9f73b4e..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-assets.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-counter.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-counter.png deleted file mode 100644 index 67b24ce0c..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-counter.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-parameters.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-parameters.png deleted file mode 100644 index 52d568cb7..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-parameters.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-statistic.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-statistic.png deleted file mode 100644 index ac3a2100d..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-defined-statistic.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-keys.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-keys.png deleted file mode 100644 index 906fe456f..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/user-keys.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/viewport.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/viewport.png deleted file mode 100644 index 1365ecd7b..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/viewport.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/workspace.png b/Deprecated-Code/Integrations/Projects/Superalgos/Icons/workspace.png deleted file mode 100644 index 45045251a..000000000 Binary files a/Deprecated-Code/Integrations/Projects/Superalgos/Icons/workspace.png and /dev/null differ diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Alpha.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Alpha.json deleted file mode 100644 index fa86112e1..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Alpha.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Alpha","config":"{ \n\"codeName\": \"Alpha\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Average True Range (ATR)","config":"{\n\"codeName\": \"ATR\",\n\"repo\": \"ATR-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates RSI.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market ATR - SMA","project":"Superalgos","id":"5cdfa018-5ade-469b-90bf-cc523ef0a46e","savedPayload":{"position":{"x":14824.467185363952,"y":17153.56240800229},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2570d2c7-72e3-4131-97dc-a9f97f493e93"}}},{"type":"Output Dataset","name":"Multi-Period-Market ATR - RMA","project":"Superalgos","id":"e7e58e02-fef8-4400-9928-f29805a96f98","savedPayload":{"position":{"x":14995.21249473741,"y":17077.69824065427},"targetPosition":{"x":15051.32778510527,"y":17433.553422503435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"67695466-be2d-43b4-9824-83baa7a08412"}}}],"outputDatasetFolders":[],"id":"b345304f-fbb3-4889-934a-8f9b4941ed29","savedPayload":{"position":{"x":15027.5645769923,"y":17379.910551027475},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"eb499527-0f18-45f9-99ab-a7bc7fabb3aa","savedPayload":{"position":{"x":15005.836154077664,"y":17146.468954298347},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Average True Range (ATR) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"025a6f70-c187-4b4d-aa62-6f4ebfc116ba","savedPayload":{"position":{"x":15251.795115631983,"y":17073.59332967888},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"f25ba171-3c78-4e4f-acb8-66446be1ce0a","savedPayload":{"position":{"x":15480.231901478768,"y":17193.677641293492},"targetPosition":{"x":15216.865516382564,"y":17407.20361136918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"bf337039-bd28-4f50-89d1-5115e631e6cf","savedPayload":{"position":{"x":15223.760246305472,"y":17340.44129825625},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"8a6c8b1e-950d-4819-88a9-9c45272a0799","savedPayload":{"position":{"x":15405.437118264057,"y":17422.346390022496},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"d150911d-47e9-4046-b365-ac817667cf32","savedPayload":{"position":{"x":15528.652645556173,"y":17574.742245083573},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"faac5fcf-e7b2-4883-84bd-427aa74bc3c1","savedPayload":{"position":{"x":15565.646615241436,"y":17768.731993392837},"targetPosition":{"x":15182.942695423619,"y":17728.650277388508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"83a07439-ad71-463a-9727-5f43ad0b03d2","savedPayload":{"position":{"x":14808.620394897276,"y":17922.552930392543},"targetPosition":{"x":14565.395666163662,"y":18257.079260508683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates RSI\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily ATR - SMA","project":"Superalgos","id":"570c8470-a4ae-40a8-b647-d3859887c148","savedPayload":{"position":{"x":15465.460311788222,"y":17379.399895719584},"targetPosition":{"x":15484.411897348979,"y":17735.651101693715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"93eb665f-d903-4825-9fb1-2783e917ac89"}}},{"type":"Output Dataset","name":"Multi-Period-Daily ATR - RMA","project":"Superalgos","id":"60d2cf94-0cf3-4cdf-a2ec-69c012f74019","savedPayload":{"position":{"x":15646.57888452697,"y":17417.31050770898},"targetPosition":{"x":15484.411897348979,"y":17735.651101693715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e3d0bccf-5f97-4902-92df-4ac8fe8c41a8"}}}],"outputDatasetFolders":[],"id":"d6545bbe-389f-4dbe-b31e-de9d7ad95e4b","savedPayload":{"position":{"x":15496.977942325364,"y":17678.445446074387},"targetPosition":{"x":15417.659540146633,"y":18051.7097399962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Average True Range (ATR) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"89b9660c-6005-4381-a692-e320b9422268","savedPayload":{"position":{"x":15564.15545397628,"y":17483.269514920896},"targetPosition":{"x":15633.621715641162,"y":17811.451787469283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"619713bc-8cf4-4152-b36d-d470361f8a3b"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"6aba1eb8-b5b6-4749-a323-16016a453194","savedPayload":{"position":{"x":15770.006365190904,"y":17505.24247410749},"targetPosition":{"x":15633.621715641162,"y":17811.451787469283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"77cb48bb-f6ca-4eba-ab3d-2b5583f7285a","savedPayload":{"position":{"x":15924.068145475645,"y":17643.81613481951},"targetPosition":{"x":15633.621715641162,"y":17811.451787469283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"b7383dbe-549f-4ffe-8764-9ea324d5025d","savedPayload":{"position":{"x":15967.210012200747,"y":17846.37164582619},"targetPosition":{"x":15633.621715641162,"y":17811.451787469283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"e1b3e953-5756-4810-abcb-67535b51f3ca","savedPayload":{"position":{"x":15677.96647171682,"y":17763.072101860675},"targetPosition":{"x":15417.659540146633,"y":18051.7097399962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"619713bc-8cf4-4152-b36d-d470361f8a3b","savedPayload":{"position":{"x":15787.027818764218,"y":17931.849664745085},"targetPosition":{"x":15417.659540146633,"y":18051.7097399962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"54a8ad94-41a9-4b8d-83f7-c40056140ef4","savedPayload":{"position":{"x":15792.243119384671,"y":18131.348956080044},"targetPosition":{"x":15417.659540146633,"y":18051.7097399962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"0b02390a-fc39-4f1a-a53c-8bae1492e292","savedPayload":{"position":{"x":15701.913401188041,"y":18307.82189517813},"targetPosition":{"x":15417.659540146633,"y":18051.7097399962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"61dde091-7c09-4384-ab2d-1fec0dbef7c5","savedPayload":{"position":{"x":14958.75115349807,"y":18129.90431450709},"targetPosition":{"x":14565.395666163662,"y":18257.079260508683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"ATR - RMA","config":"{\n \"codeName\": \"ATR-RMA\",\n \"singularVariableName\": \"atrRMA\",\n \"pluralVariableName\": \"atrRMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"67695466-be2d-43b4-9824-83baa7a08412","savedPayload":{"position":{"x":15339.563793425255,"y":18236.86776043583},"targetPosition":{"x":15111.82908854388,"y":18402.43596333557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"e3d0bccf-5f97-4902-92df-4ac8fe8c41a8","savedPayload":{"position":{"x":15392.952051274442,"y":18402.82090543185},"targetPosition":{"x":15111.82908854388,"y":18402.43596333557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"a0cb3931-383f-4c9d-8f01-fe812c22181e","savedPayload":{"position":{"x":16416.482333386328,"y":18617.461565209003},"targetPosition":{"x":16268.776991591974,"y":18683.26044587566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e538eb1e-f296-4e00-bdbb-8a904c5b897a","savedPayload":{"position":{"x":16268.776991591974,"y":18683.26044587566},"targetPosition":{"x":15939.620580611292,"y":18829.973526666363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"566fa39a-58b3-439a-a666-9c0d6927dfcc","savedPayload":{"position":{"x":16464.216373506217,"y":18884.800084065864},"targetPosition":{"x":16302.888076865202,"y":18868.0004634721},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3a3dfa55-78be-4e15-90ae-b64d7db87d29","savedPayload":{"position":{"x":16302.888076865202,"y":18868.0004634721},"targetPosition":{"x":15939.620580611292,"y":18829.973526666363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR2","config":"{\n \"codeName\": \"atr2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.atr2","project":"Superalgos","id":"fc05c629-916b-40a9-a62d-06b309420ee6","savedPayload":{"position":{"x":16362.23490885691,"y":19136.94556622118},"targetPosition":{"x":16231.24770039141,"y":19041.79504569027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b4e9fd6c-b742-4378-851f-ec6a84183727","savedPayload":{"position":{"x":16231.24770039141,"y":19041.79504569027},"targetPosition":{"x":15939.620580611292,"y":18829.973526666363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR3","config":"{\n \"codeName\": \"atr3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.atr3","project":"Superalgos","id":"2521d41c-60fa-421e-ba7d-8d9b6ff19477","savedPayload":{"position":{"x":16151.91397250432,"y":19307.095190144013},"targetPosition":{"x":16086.12577985863,"y":19159.20980728678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"039f8d7d-2ea5-44b1-b758-4f86a4445a63","savedPayload":{"position":{"x":16086.12577985863,"y":19159.20980728678},"targetPosition":{"x":15939.620580611292,"y":18829.973526666363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR14","config":"{\n \"codeName\": \"atr14\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.atr14","project":"Superalgos","id":"65b7d85e-1da0-4a77-b96f-eaa5d3b24036","savedPayload":{"position":{"x":15884.526032532656,"y":19354.15136731505},"targetPosition":{"x":15901.383235043144,"y":19193.23287469804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c6b1bb6e-17b8-45ff-8a25-b1ae575dde04","savedPayload":{"position":{"x":15901.383235043144,"y":19193.23287469804},"targetPosition":{"x":15939.620580611292,"y":18829.973526666363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2838dfa4-22e5-4583-9b08-fed43081af24","savedPayload":{"position":{"x":15508.104528550284,"y":18690.163143118298},"targetPosition":{"x":15111.82908854388,"y":18402.43596333557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\nlet tr = calculateTR() // get true range value\n\nvariable.atr2 = calculateATR(tr, 2, variable.previousATR2)\nvariable.atr3 = calculateATR(tr, 3, variable.previousATR3)\nvariable.atr14 = calculateATR(tr, 14, variable.previousATR14)\n\nvariable.prevClose = candle.close\nvariable.previousATR2 = variable.atr2\nvariable.previousATR3 = variable.atr3\nvariable.previousATR14 = variable.atr14\n\n/* Helper Functions */\n\n/* Calculate True Range */\nfunction calculateTR() {\n let hl = candle.max - candle.min\n \n if (variable.prevClose === 0) { return hl } // Return High-Low when previous Close is 0\n \n let hcp = Math.abs(candle.max - variable.prevClose)\n let lcp = Math.abs(candle.min - variable.prevClose)\n \n return Math.max(hl, hcp, lcp)\n}\n\n/* Calculate Average True Range - Smoothing Function RMA*/\nfunction calculateATR(source, length, previousATR) {\n return (source + (length - 1) * previousATR) / length\n}","project":"Superalgos","id":"0814b5ad-81ed-4d17-ba6c-2ecad55f5f31","savedPayload":{"position":{"x":15575.010446231227,"y":19037.695900070066},"targetPosition":{"x":15392.900591436046,"y":18873.151975537177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"752cd82a-205d-43f5-b6ee-06f5c0a82f33","savedPayload":{"position":{"x":15392.900591436046,"y":18873.151975537177},"targetPosition":{"x":15211.42938287064,"y":18709.591525655145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.prevClose = 0\n\nvariable.previousATR2 = 0\nvariable.previousATR3 = 0\nvariable.previousATR14 = 0","project":"Superalgos","id":"b1ee7e9d-a89a-4c18-beaf-9b1ebdc25dd1","savedPayload":{"position":{"x":15109.914055259567,"y":19188.839831202968},"targetPosition":{"x":15160.493193644543,"y":18948.62593414079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c1dbc0e9-06b0-426a-9e7b-731bd1c2305f","savedPayload":{"position":{"x":15160.493193644543,"y":18948.62593414079},"targetPosition":{"x":15211.42938287064,"y":18709.591525655145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7779fc37-e563-4515-8c11-7732793ebfe0","savedPayload":{"position":{"x":15211.42938287064,"y":18709.591525655145},"targetPosition":{"x":15111.82908854388,"y":18402.43596333557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"660570d1-36e0-4099-817c-6c8a29b32689","savedPayload":{"position":{"x":14975.8523385671,"y":18390.28156398286},"targetPosition":{"x":14565.395666163662,"y":18257.079260508683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"ATR - RMA","id":"99088549-f1c0-4157-ba7e-ffd6dfd0d140"}}},{"type":"Product Definition","name":"ATR - SMA","config":"{\n \"codeName\": \"ATR-SMA\",\n \"singularVariableName\": \"atrSMA\",\n \"pluralVariableName\": \"atrSMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"2570d2c7-72e3-4131-97dc-a9f97f493e93","savedPayload":{"position":{"x":15472.11610717982,"y":18741.93050267255},"targetPosition":{"x":15117.105403575064,"y":18741.930812238214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"93eb665f-d903-4825-9fb1-2783e917ac89","savedPayload":{"position":{"x":15403.749982332578,"y":18950.274850863527},"targetPosition":{"x":15117.105403575064,"y":18741.930812238214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"8b1f8ca7-d741-489f-a1f9-3851920e6d59","savedPayload":{"position":{"x":15563.98975852019,"y":19212.413049678013},"targetPosition":{"x":15444.111512197633,"y":19187.105219850695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7c4a6317-bc3a-45d8-9dcc-4c42fa6a653b","savedPayload":{"position":{"x":15444.111512197633,"y":19187.105219850695},"targetPosition":{"x":15085.58723895279,"y":19111.911279284417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"42ca9eb2-da3a-4972-8be8-756fa50a5585","savedPayload":{"position":{"x":15448.78525522479,"y":19438.67387600754},"targetPosition":{"x":15357.597814261277,"y":19356.842918661983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d4ccc9d1-616c-44e1-8019-f5dfbbac5d4c","savedPayload":{"position":{"x":15357.597814261277,"y":19356.842918661983},"targetPosition":{"x":15085.58723895279,"y":19111.911279284417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR2","config":"{\n \"codeName\": \"atr2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.atr2","project":"Superalgos","id":"fa760872-a812-4bc6-8fe4-8669ec91bbe0","savedPayload":{"position":{"x":15236.45046312056,"y":19577.663799949813},"targetPosition":{"x":15198.540010551624,"y":19459.57363893426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"02df8c90-68ec-44ef-8abf-fb7d255815d2","savedPayload":{"position":{"x":15198.540010551624,"y":19459.57363893426},"targetPosition":{"x":15085.58723895279,"y":19111.911279284417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR3","config":"{\n \"codeName\": \"atr3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.atr3","project":"Superalgos","id":"ee78802d-f297-45d6-8fa7-df7800ebf295","savedPayload":{"position":{"x":14983.425277280316,"y":19590.624304791076},"targetPosition":{"x":15009.678460048635,"y":19470.060210477488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3e3dd4c6-8f81-4e2b-bcba-34d1ca11abf0","savedPayload":{"position":{"x":15009.678460048635,"y":19470.060210477488},"targetPosition":{"x":15085.58723895279,"y":19111.911279284417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR14","config":"{\n \"codeName\": \"atr14\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.atr14","project":"Superalgos","id":"fdcc52bb-2dd9-4597-8399-eba8f2e36639","savedPayload":{"position":{"x":14757.895117274733,"y":19474.975208550157},"targetPosition":{"x":14840.06843551105,"y":19384.201150231296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"93cc0b1e-9414-406b-bbf7-7708bf303a9a","savedPayload":{"position":{"x":14840.06843551105,"y":19384.201150231296},"targetPosition":{"x":15085.58723895279,"y":19111.911279284417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"de04ae72-affd-4bea-aab2-d7e4b1e8345d","savedPayload":{"position":{"x":15302.429654583873,"y":19311.928359012905},"targetPosition":{"x":15117.105403575064,"y":18741.930812238214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\nvariable.last14TR.push(calculateTR()) // Add the current true range value to last 14 array\n\nif (variable.last14TR.length > 14) {\n variable.last14TR.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements\n}\n\nvariable.atr2 = calculateATR(2)\nvariable.atr3 = calculateATR(3)\nvariable.atr14 = calculateATR(14)\nvariable.prevClose = candle.close\n\n/* Helper Functions */\n\n/* Calculate True Range */\nfunction calculateTR() {\n let hl = candle.max - candle.min\n \n if (variable.prevClose === 0) { return hl } // Return High-Low when previous Close is 0\n \n let hcp = Math.abs(candle.max - variable.prevClose)\n let lcp = Math.abs(candle.min - variable.prevClose)\n \n return Math.max(hl, hcp, lcp)\n}\n\n/* Calculate Average True Range - Smoothing Function SMA */\nfunction calculateATR(length) {\n /* We check we have enough values to make the calculation */\n if (variable.last14TR.length < length) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last14TR.length - length; i < variable.last14TR.length; i++) { // Iterate through the last periods\n sum = sum + variable.last14TR[i]\n }\n \n let atr = sum / length\n return atr\n}","project":"Superalgos","id":"de821ecb-f4c2-4645-abe3-f2ec25c5b50f","savedPayload":{"position":{"x":15112.81585302037,"y":19726.046484448707},"targetPosition":{"x":15050.653396756414,"y":19432.052700560984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"81ad9ba0-f387-4884-8b7d-32ee9d44d73e","savedPayload":{"position":{"x":15050.653396756414,"y":19432.052700560984},"targetPosition":{"x":14987.751564882532,"y":19140.476669581738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.last14TR = []\nvariable.prevClose = 0","project":"Superalgos","id":"d388972a-f1b2-4b99-8406-35d07a7a5ab0","savedPayload":{"position":{"x":14660.64938184871,"y":19644.01327732395},"targetPosition":{"x":14824.318926700133,"y":19391.246244290895},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad6cc9e7-46c3-4500-924b-7523e5c9fa7f","savedPayload":{"position":{"x":14824.318926700133,"y":19391.246244290895},"targetPosition":{"x":14987.751564882532,"y":19140.476669581738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4a310776-ce28-4e79-97fb-90fb350614c2","savedPayload":{"position":{"x":14987.751564882532,"y":19140.476669581738},"targetPosition":{"x":15117.105403575064,"y":18741.930812238214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d83ffb9c-d01c-49eb-991d-3dc31baac747","savedPayload":{"position":{"x":14864.831799096366,"y":18582.920092356697},"targetPosition":{"x":14565.395666163662,"y":18257.079260508683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"ATR - SMA","id":"a6a3f5a6-8c33-482d-a922-5719afc35325"}}}],"id":"3f716c19-6b29-4a9e-aef4-e4a867838e57","savedPayload":{"position":{"x":14465.344334318033,"y":18257.075224381435},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Rate of Change (ROC)","config":"{\n\"codeName\": \"ROC\",\n\"repo\": \"ROC-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates RSI.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market ROC 32","project":"Superalgos","id":"6687ee94-004b-4834-a145-867151c4e37c","savedPayload":{"position":{"x":15008.933381907107,"y":18622.44483249069},"targetPosition":{"x":14938.819526428793,"y":18884.707090876826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"41a488be-c66c-458d-99fc-490b9e8172ef"}}},{"type":"Output Dataset","name":"Multi-Period-Market ROC 76","project":"Superalgos","id":"a27232dd-4d69-46b8-8d8e-67499c9ddc30","savedPayload":{"position":{"x":15174.077838841935,"y":18749.059694959735},"targetPosition":{"x":14938.819526428793,"y":18884.707090876826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"40268fec-e5e8-4b05-9f27-c4072ebda94a"}}},{"type":"Output Dataset","name":"Multi-Period-Market ROC 9","project":"Superalgos","id":"bbeb8cb6-5465-45be-80a9-2cbb46e3f5fa","savedPayload":{"position":{"x":15201.331077961531,"y":18955.151491455043},"targetPosition":{"x":14938.819526428793,"y":18884.707090876826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9c6b7d85-01f5-449c-a5be-9a357b6588bc"}}}],"outputDatasetFolders":[],"id":"b6c54494-092a-4220-b0e9-1db9da7fd411","savedPayload":{"position":{"x":14938.819526428793,"y":18884.707090876826},"targetPosition":{"x":14627.331297304194,"y":19064.746737076068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"5f954d97-d843-483e-919b-d94dd8329497","savedPayload":{"position":{"x":14834.45408468019,"y":17455.46839254802},"targetPosition":{"x":15045.48344698509,"y":17716.203049618853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Rate of Change (ROC) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"7820dbef-88ab-4682-b542-88f6d2ae9f59","savedPayload":{"position":{"x":15080.41304623451,"y":17382.592767928552},"targetPosition":{"x":15045.48344698509,"y":17716.203049618853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"87a0c5e3-20b4-48f7-a9db-4a9280ecb4b3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"805d6b40-cc28-470f-8f39-67b2b48f155a","savedPayload":{"position":{"x":15308.849832081294,"y":17502.677079543166},"targetPosition":{"x":15045.48344698509,"y":17716.203049618853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"aa85fa69-abb3-4423-8d78-8bf1dd6c42d5","savedPayload":{"position":{"x":14994.681870186992,"y":19065.033839370873},"targetPosition":{"x":14627.331297304194,"y":19064.746737076068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"87a0c5e3-20b4-48f7-a9db-4a9280ecb4b3","savedPayload":{"position":{"x":14946.684261605933,"y":19249.06978931289},"targetPosition":{"x":14627.331297304194,"y":19064.746737076068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"3a6b674a-eb56-4f63-866b-f4e41dde72bb","savedPayload":{"position":{"x":14811.634440232534,"y":19383.37614366503},"targetPosition":{"x":14627.331297304194,"y":19064.746737076068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"c97508ab-c7eb-4047-911a-3ee3265c352b","savedPayload":{"position":{"x":14627.927303539287,"y":19438.784183043557},"targetPosition":{"x":14627.331297304194,"y":19064.746737076068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a2a141ba-08ed-4f30-9c7d-f811c6a7c571","savedPayload":{"position":{"x":14778.981471886473,"y":18603.09621631154},"targetPosition":{"x":14365.373638132074,"y":18603.432841716087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates RSI\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily ROC 32","project":"Superalgos","id":"3c5e8fe8-cf8d-4a96-967a-2d4d534bbd71","savedPayload":{"position":{"x":14978.585790503006,"y":19072.05799184798},"targetPosition":{"x":14786.604641261492,"y":19264.109327774422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"30276899-0d68-40e3-9c35-a28442485b55"}}},{"type":"Output Dataset","name":"Multi-Period-Daily ROC 76","project":"Superalgos","id":"daf0c646-8592-4fd2-9f7d-bab86663faaf","savedPayload":{"position":{"x":15058.038872582096,"y":19264.193847454917},"targetPosition":{"x":14786.604641261492,"y":19264.109327774422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cb60d68b-b11d-4317-8830-65c212a8c728"}}},{"type":"Output Dataset","name":"Multi-Period-Daily ROC 9","project":"Superalgos","id":"0dbd1ffd-047b-4bf7-a74a-9df95d5b534c","savedPayload":{"position":{"x":14978.29180056839,"y":19456.55465706332},"targetPosition":{"x":14786.604641261492,"y":19264.109327774422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"66f59b6d-9d4b-4cef-9ffd-aed019219809"}}}],"outputDatasetFolders":[],"id":"09d69ba1-345f-4d96-b3e4-a98f1f778a70","savedPayload":{"position":{"x":14786.604641261492,"y":19264.109327774422},"targetPosition":{"x":14428.246269815478,"y":19263.877911817646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Rate of Change (ROC) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"b1e59db1-0480-4533-940c-e6ede212b124","savedPayload":{"position":{"x":15392.773384578806,"y":17792.26895317057},"targetPosition":{"x":15462.239646243688,"y":18120.451225718956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"af0bcf3a-4021-4861-870a-a06f5aad8761"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"67e616b0-72f4-4e9c-b144-e6f6bde5777b","savedPayload":{"position":{"x":15598.62429579343,"y":17814.241912357164},"targetPosition":{"x":15462.239646243688,"y":18120.451225718956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"c4cbf20f-ff4e-4611-8e4a-4340231bc3c5","savedPayload":{"position":{"x":15752.686076078171,"y":17952.815573069183},"targetPosition":{"x":15462.239646243688,"y":18120.451225718956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"b95527eb-2205-43ef-a1e6-7d3a08219e27","savedPayload":{"position":{"x":15795.827942803273,"y":18155.371084075865},"targetPosition":{"x":15462.239646243688,"y":18120.451225718956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"d1a1f76c-a070-4958-8821-b3abcac7b176","savedPayload":{"position":{"x":14744.078440246507,"y":19447.108012017554},"targetPosition":{"x":14428.246269815478,"y":19263.877911817646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"af0bcf3a-4021-4861-870a-a06f5aad8761","savedPayload":{"position":{"x":14611.053964737748,"y":19581.229080578545},"targetPosition":{"x":14428.246269815478,"y":19263.877911817646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"f75ad3de-ba1f-4c68-a869-1bdad8587c71","savedPayload":{"position":{"x":14428.245659562737,"y":19630.366604182327},"targetPosition":{"x":14428.246269815478,"y":19263.877911817646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"bd45fa4a-4611-4126-b746-e9d56b9991bd","savedPayload":{"position":{"x":14245.46161436666,"y":19580.498820009692},"targetPosition":{"x":14428.246269815478,"y":19263.877911817646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eea3cb55-83e5-400f-acc4-b71f5631d351","savedPayload":{"position":{"x":14723.428325711655,"y":18810.85330118467},"targetPosition":{"x":14365.373638132074,"y":18603.432841716087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"ROC 76","config":"{\n \"codeName\": \"ROC-76\",\n \"singularVariableName\": \"roc76\",\n \"pluralVariableName\": \"roc76s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"40268fec-e5e8-4b05-9f27-c4072ebda94a","savedPayload":{"position":{"x":14314.12127307937,"y":19535.220382261967},"targetPosition":{"x":14072.436809520677,"y":19360.046678345214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"cb60d68b-b11d-4317-8830-65c212a8c728","savedPayload":{"position":{"x":14164.62333429476,"y":19643.5798771065},"targetPosition":{"x":14072.436809520677,"y":19360.046678345214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"f3985849-3dba-4ab4-be09-45855ceb32a5","savedPayload":{"position":{"x":14090.35742574501,"y":20240.1078249821},"targetPosition":{"x":14028.436669898714,"y":20118.419424725806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca08ef1e-44f8-4b51-8412-ab5ea4cd4383","savedPayload":{"position":{"x":14028.436669898714,"y":20118.419424725806},"targetPosition":{"x":13905.040550199243,"y":19876.331196723928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"f84ebdb9-1371-4a1b-a55a-ec0fff505e8d","savedPayload":{"position":{"x":13779.263341745129,"y":20264.865670766187},"targetPosition":{"x":13821.292014135495,"y":20134.872909444355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9b6434b8-6a14-4b15-9071-560f91991c1e","savedPayload":{"position":{"x":13821.292014135495,"y":20134.872909444355},"targetPosition":{"x":13905.040550199243,"y":19876.331196723928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.value","project":"Superalgos","id":"4b4cc4ab-233d-4366-bb1c-c6cf4945e87e","savedPayload":{"position":{"x":13541.56143534548,"y":20062.21662922665},"targetPosition":{"x":13663.02830397808,"y":19999.789780996187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a3ee4969-b28a-4d7c-9ceb-eba3ba2c8a21","savedPayload":{"position":{"x":13663.02830397808,"y":19999.789780996187},"targetPosition":{"x":13905.040550199243,"y":19876.331196723928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8b1a0793-6111-4773-b83f-4fdc596aebfc","savedPayload":{"position":{"x":13905.040550199243,"y":19876.331196723928},"targetPosition":{"x":14072.436809520677,"y":19360.046678345214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\n\n/* Calculate Rate of Change */\nvariable.value = calculateROC(candle.close, variable.length)\n\nvariable.lastCloses.push(candle.close) // Add the current close value to the last closes array.\n\nif (variable.lastCloses.length > variable.length) {\n variable.lastCloses.splice(0, 1) // Remove the first element of the array to keep it at a maximun of n elements.\n}\n\n/* Helper Functions */\n\n/* Calculate Rate of Change */\nfunction calculateROC(source, length) {\n /* Check if we have enough values to make the calculation */\n if (variable.lastCloses.length < length) { return 0 }\n \n /* Check if n-last candle close is zero, avoid division by zero */\n if (variable.lastCloses[0] === 0) { return 0 }\n \n return 100 * (source - variable.lastCloses[0]) / variable.lastCloses[0]\n}","project":"Superalgos","id":"37483919-8084-4d28-8763-02cfd1bdc45d","savedPayload":{"position":{"x":13477.061125501321,"y":19966.568441162126},"targetPosition":{"x":13647.724035519972,"y":19755.965621829666},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5eb39756-772a-4cc2-b0f2-4b7eab6abf57","savedPayload":{"position":{"x":13647.724035519972,"y":19755.965621829666},"targetPosition":{"x":13818.767616795143,"y":19544.646354946926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.length = 76\nvariable.lastCloses = []","project":"Superalgos","id":"3157aaee-5248-4767-b339-45835c0cffa7","savedPayload":{"position":{"x":13311.392851826651,"y":19739.34622069687},"targetPosition":{"x":13564.772486033042,"y":19642.261075240218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1392b12a-4221-4e2a-b692-cb7a07b40f84","savedPayload":{"position":{"x":13564.772486033042,"y":19642.261075240218},"targetPosition":{"x":13818.767616795143,"y":19544.646354946926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bd3ccec7-4ec5-40e8-81f2-1402651648b7","savedPayload":{"position":{"x":13818.767616795143,"y":19544.646354946926},"targetPosition":{"x":14072.436809520677,"y":19360.046678345214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9c2b6696-872f-44a4-b6b2-ab15a0c8541a","savedPayload":{"position":{"x":14580.640146113878,"y":18977.16155272288},"targetPosition":{"x":14365.373638132074,"y":18603.432841716087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"ROC 76","id":"a21bb3ba-b24d-4163-b7d0-ea60220fc368"}}},{"type":"Product Definition","name":"ROC 32","config":"{\n \"codeName\": \"ROC-32\",\n \"singularVariableName\": \"roc32\",\n \"pluralVariableName\": \"roc32s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"41a488be-c66c-458d-99fc-490b9e8172ef","savedPayload":{"position":{"x":13718.618375116974,"y":19410.832629042437},"targetPosition":{"x":13718.490820807947,"y":19112.59402420142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"30276899-0d68-40e3-9c35-a28442485b55","savedPayload":{"position":{"x":13543.1453600053,"y":19353.559133421008},"targetPosition":{"x":13718.490820807947,"y":19112.59402420142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"905bb06a-9b7f-4484-8031-22b0bdf76c79","savedPayload":{"position":{"x":12989.160677061296,"y":19698.57763702253},"targetPosition":{"x":13050.800012383836,"y":19578.0527477508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"23ba960b-4a3f-410d-8d95-d7fb8419557e","savedPayload":{"position":{"x":13050.800012383836,"y":19578.0527477508},"targetPosition":{"x":13202.85733186901,"y":19279.818827442105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"8b6f20e9-ffae-470f-9da0-0fc12d2bbd6d","savedPayload":{"position":{"x":12755.23511866818,"y":19425.519413525875},"targetPosition":{"x":12884.308067133694,"y":19383.20189525649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"40737f74-0e6d-4ea4-9e77-023af6343601","savedPayload":{"position":{"x":12884.308067133694,"y":19383.20189525649},"targetPosition":{"x":13202.85733186901,"y":19279.818827442105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.value","project":"Superalgos","id":"11ce21e7-ebc3-401d-b550-7b129f3f86b5","savedPayload":{"position":{"x":12783.121989186639,"y":19066.299947034604},"targetPosition":{"x":12903.75325835451,"y":19127.296200889898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4bae0e4f-fa97-4b6e-99de-a61bd75014b1","savedPayload":{"position":{"x":12903.75325835451,"y":19127.296200889898},"targetPosition":{"x":13202.85733186901,"y":19279.818827442105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"048e2c90-bb92-4b32-a847-f337d3953392","savedPayload":{"position":{"x":13202.190682374006,"y":19280.410047627105},"targetPosition":{"x":13718.490820807947,"y":19112.59402420142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\n\n/* Calculate Rate of Change */\nvariable.value = calculateROC(candle.close, variable.length)\n\nvariable.lastCloses.push(candle.close) // Add the current close value to the last closes array.\n\nif (variable.lastCloses.length > variable.length) {\n variable.lastCloses.splice(0, 1) // Remove the first element of the array to keep it at a maximun of n elements.\n}\n\n/* Helper Functions */\n\n/* Calculate Rate of Change */\nfunction calculateROC(source, length) {\n /* Check if we have enough values to make the calculation */\n if (variable.lastCloses.length < length) { return 0 }\n \n /* Check if n-last candle close is zero, avoid division by zero */\n if (variable.lastCloses[0] === 0) { return 0 }\n \n return 100 * (source - variable.lastCloses[0]) / variable.lastCloses[0]\n}","project":"Superalgos","id":"f84b95ea-bfa6-4c2b-bf49-ff4810a11b97","savedPayload":{"position":{"x":12888.489401132538,"y":19127.753169735326},"targetPosition":{"x":13154.297976415517,"y":19071.518489020447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7848d1ed-fedd-4d0e-8ea6-1212b2d614e5","savedPayload":{"position":{"x":13154.297976415517,"y":19071.518489020447},"targetPosition":{"x":13419.966891686934,"y":19015.55749660139},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.length = 32\nvariable.lastCloses = []","project":"Superalgos","id":"858ab5d5-0fdc-406a-bbf8-18b648879abe","savedPayload":{"position":{"x":12964.271439963351,"y":18719.83340123723},"targetPosition":{"x":13192.142464146888,"y":18867.665713190574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"428a7ff5-a19a-448d-92d9-d11815613c67","savedPayload":{"position":{"x":13192.142464146888,"y":18867.665713190574},"targetPosition":{"x":13419.966891686934,"y":19015.55749660139},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"37ee9d85-7676-4ae0-956a-7c13706f4311","savedPayload":{"position":{"x":13419.966891686934,"y":19015.55749660139},"targetPosition":{"x":13718.490820807947,"y":19112.59402420142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff5aacca-1783-4247-9702-ee5dd01fb3ff","savedPayload":{"position":{"x":14365.845054850037,"y":19034.23270014608},"targetPosition":{"x":14365.373638132074,"y":18603.432841716087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"ROC 32","id":"7812b3a3-8375-4f0d-9671-acc05b256d74"}}},{"type":"Product Definition","name":"ROC 9","config":"{\n \"codeName\": \"ROC-9\",\n \"singularVariableName\": \"roc9\",\n \"pluralVariableName\": \"roc9s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"9c6b7d85-01f5-449c-a5be-9a357b6588bc","savedPayload":{"position":{"x":13656.605096016498,"y":19364.19275728213},"targetPosition":{"x":13687.702590016783,"y":19064.801936312448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"66f59b6d-9d4b-4cef-9ffd-aed019219809","savedPayload":{"position":{"x":13486.349789699583,"y":19287.86746984555},"targetPosition":{"x":13687.702590016783,"y":19064.801936312448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"d0c1361d-9b94-4eaf-9b94-b7fe36e11779","savedPayload":{"position":{"x":12901.394873051628,"y":19572.35726702975},"targetPosition":{"x":12974.887087734249,"y":19459.01947800212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"805c77d6-442d-408a-b767-f0bc03b78d68","savedPayload":{"position":{"x":12974.887087734249,"y":19459.01947800212},"targetPosition":{"x":13157.391027265778,"y":19177.689935166243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"b9a17c63-21ea-4295-af8e-e6a3329c2b99","savedPayload":{"position":{"x":12696.97362638759,"y":19275.071878342595},"targetPosition":{"x":12830.238755904316,"y":19247.48865213532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fc34bcb4-0c85-4aa6-a08a-a78120167ed0","savedPayload":{"position":{"x":12830.238755904316,"y":19247.48865213532},"targetPosition":{"x":13157.391027265778,"y":19177.689935166243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.value","project":"Superalgos","id":"d035de65-da5d-4c9f-bf6f-390de346f264","savedPayload":{"position":{"x":12762.744616432738,"y":18922.127163569858},"targetPosition":{"x":12875.355146988095,"y":18994.863745604693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2dda380a-bda1-4bc5-9132-86956e080f01","savedPayload":{"position":{"x":12875.355146988095,"y":18994.863745604693},"targetPosition":{"x":13157.391027265778,"y":19177.689935166243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"31966558-4e25-4512-bc6a-1a83d05affac","savedPayload":{"position":{"x":13156.599441905964,"y":19177.816035139378},"targetPosition":{"x":13687.702590016783,"y":19064.801936312448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\n\n/* Calculate Rate of Change */\nvariable.value = calculateROC(candle.close, variable.length)\n\nvariable.lastCloses.push(candle.close) // Add the current close value to the last closes array.\n\nif (variable.lastCloses.length > variable.length) {\n variable.lastCloses.splice(0, 1) // Remove the first element of the array to keep it at a maximun of n elements.\n}\n\n/* Helper Functions */\n\n/* Calculate Rate of Change */\nfunction calculateROC(source, length) {\n /* Check if we have enough values to make the calculation */\n if (variable.lastCloses.length < length) { return 0 }\n \n /* Check if n-last candle close is zero, avoid division by zero */\n if (variable.lastCloses[0] === 0) { return 0 }\n \n return 100 * (source - variable.lastCloses[0]) / variable.lastCloses[0]\n}","project":"Superalgos","id":"9073d856-36e6-4fbb-86a8-b0244be2ff2a","savedPayload":{"position":{"x":12855.154558109843,"y":18990.86633818107},"targetPosition":{"x":13125.88933406421,"y":18962.89293855672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8bb88eaa-9d57-470b-8bb4-b443917ce585","savedPayload":{"position":{"x":13125.88933406421,"y":18962.89293855672},"targetPosition":{"x":13395.301115489227,"y":18934.647124705894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.length = 9\nvariable.lastCloses = []","project":"Superalgos","id":"d8f4eb7f-979c-423f-96b4-519046ede40b","savedPayload":{"position":{"x":12973.176248094209,"y":18593.112868463013},"targetPosition":{"x":13184.841603055607,"y":18764.118449419162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed52861e-b8e3-40fa-88e8-2d7a1fde01d4","savedPayload":{"position":{"x":13184.841603055607,"y":18764.118449419162},"targetPosition":{"x":13395.301115489227,"y":18934.647124705894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a77a13e5-83be-4f7d-803b-6a18e202ae7e","savedPayload":{"position":{"x":13395.301115489227,"y":18934.647124705894},"targetPosition":{"x":13687.702590016783,"y":19064.801936312448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"83bfd082-1c10-4c42-be63-379a2100cc0e","savedPayload":{"position":{"x":14168.600749327958,"y":18974.185515465128},"targetPosition":{"x":14365.373638132074,"y":18603.432841716087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"ROC 9","id":"5ecd7465-9f89-4e20-bea9-2216863e2990"}}}],"id":"aa47dd1b-60cc-4ab1-8cd1-d5f54005e54c","savedPayload":{"position":{"x":14315.344334318033,"y":18516.882845516768},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Stochastic","config":"{\n\"codeName\": \"Stochastic\",\n\"repo\": \"Stoch-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates RSI.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Stoch-14-3-3","project":"Superalgos","id":"2c380e74-2851-45ff-975d-32344bb1ac34","savedPayload":{"position":{"x":14139.548849759183,"y":19671.558824397838},"targetPosition":{"x":13905.00195827708,"y":19481.5337394559},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"88b1ff0e-ad99-474c-8833-7b76a5a57ebd"}}}],"outputDatasetFolders":[],"id":"40b215c0-0e30-4315-b501-1335125297ce","savedPayload":{"position":{"x":13905.00195827708,"y":19481.5337394559},"targetPosition":{"x":13615.358389345267,"y":19247.34051029314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"5f810842-42b7-47cf-b1c8-cafff231ca57","savedPayload":{"position":{"x":14359.45087102331,"y":17224.64805011805},"targetPosition":{"x":14570.48023332821,"y":17485.38270718888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Stochastic Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"c8f7ce8f-1aee-4433-8395-e4b6c2e24ba7","savedPayload":{"position":{"x":14605.409832577629,"y":17151.77242549858},"targetPosition":{"x":14570.48023332821,"y":17485.38270718888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"94b42891-942c-4026-aeff-60fd555096f4"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"7d9dc95c-39e1-45a4-b982-3d5bb0994db5","savedPayload":{"position":{"x":14833.846618424413,"y":17271.85673711319},"targetPosition":{"x":14570.48023332821,"y":17485.38270718888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"1262c170-5760-4cb8-8fbc-d8c002bf3a66","savedPayload":{"position":{"x":13750.501795926328,"y":19600.834507007894},"targetPosition":{"x":13615.358389345267,"y":19247.34051029314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"94b42891-942c-4026-aeff-60fd555096f4","savedPayload":{"position":{"x":13556.300527061034,"y":19620.36891365568},"targetPosition":{"x":13615.358389345267,"y":19247.34051029314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"8e13aff4-da04-49bb-81d2-322fd6d0b412","savedPayload":{"position":{"x":13377.380217526432,"y":19541.357409571203},"targetPosition":{"x":13615.358389345267,"y":19247.34051029314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"962fd00f-ab4c-4f0d-af74-a39c6c5a9c38","savedPayload":{"position":{"x":13262.29945362842,"y":19382.849140922044},"targetPosition":{"x":13615.358389345267,"y":19247.34051029314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6a6a6533-21a9-4be9-b2f0-ace1adfe45b8","savedPayload":{"position":{"x":14072.784384030969,"y":19002.515769060934},"targetPosition":{"x":13965.46996638094,"y":18603.33496927385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates RSI\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Stoch-14-3-3","project":"Superalgos","id":"d834ef3b-b891-43d0-b5ba-ab072e0fc98b","savedPayload":{"position":{"x":13292.8816411857,"y":19675.421818898074},"targetPosition":{"x":13261.437340592827,"y":19375.733938448233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"4b941e0d-8b0a-41e2-bc20-54e0bc0d936a"}}}],"outputDatasetFolders":[],"id":"3068bb07-0fec-4c91-bfc1-8060bfed5f51","savedPayload":{"position":{"x":13261.437340592827,"y":19375.733938448233},"targetPosition":{"x":13222.716557950087,"y":19006.715341160238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Stochastic Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"1cafc2e1-ea17-4b18-bd08-9ce02fd49de3","savedPayload":{"position":{"x":14917.770170921925,"y":17561.448610740597},"targetPosition":{"x":14987.236432586807,"y":17889.630883288984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"494234e3-13b6-4f90-a529-77b23ee55bc8"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"31a36ff7-480e-4472-8286-ab91f424d2f2","savedPayload":{"position":{"x":15123.62108213655,"y":17583.421569927188},"targetPosition":{"x":14987.236432586807,"y":17889.630883288984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"bf8a555b-95d9-4a79-8889-4b9e3fe0bc06","savedPayload":{"position":{"x":15277.68286242129,"y":17721.995230639208},"targetPosition":{"x":14987.236432586807,"y":17889.630883288984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"a38119ba-cc6a-4cc8-8138-c9fe971073c0","savedPayload":{"position":{"x":15320.824729146392,"y":17924.550741645893},"targetPosition":{"x":14987.236432586807,"y":17889.630883288984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"c9030a10-5dbe-4438-9b47-e3c2e21e9c45","savedPayload":{"position":{"x":13069.491397115922,"y":19350.038916312325},"targetPosition":{"x":13222.716557950087,"y":19006.715341160238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"494234e3-13b6-4f90-a529-77b23ee55bc8","savedPayload":{"position":{"x":12917.836912733812,"y":19228.234249660654},"targetPosition":{"x":13222.716557950087,"y":19006.715341160238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"0141c05e-dd7a-4466-b87c-6f5ff6248096","savedPayload":{"position":{"x":12848.58107207068,"y":19046.265422478395},"targetPosition":{"x":13222.716557950087,"y":19006.715341160238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"e8651790-aada-42d6-85c7-b98b6bd2f7d6","savedPayload":{"position":{"x":12875.06023777149,"y":18872.181385849726},"targetPosition":{"x":13222.716557950087,"y":19006.715341160238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6a39c43d-0ad2-4c98-ae06-6e40f55d1753","savedPayload":{"position":{"x":13758.865500065986,"y":18961.087944362287},"targetPosition":{"x":13965.46996638094,"y":18603.33496927385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Stoch-14-3-3","config":"{\n \"codeName\": \"Stoch-14-3-3\",\n \"singularVariableName\": \"stoch1433\",\n \"pluralVariableName\": \"stoch1433s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"88b1ff0e-ad99-474c-8833-7b76a5a57ebd","savedPayload":{"position":{"x":13004.06761041703,"y":19361.104625510237},"targetPosition":{"x":13130.570381785448,"y":19031.170971173728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"4b941e0d-8b0a-41e2-bc20-54e0bc0d936a","savedPayload":{"position":{"x":12834.104503070754,"y":19223.427131090273},"targetPosition":{"x":13130.570381785448,"y":19031.170971173728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"f75f0660-8a0c-44cb-bf93-db351ab8d05c","savedPayload":{"position":{"x":12122.365439559711,"y":19406.01629098763},"targetPosition":{"x":12231.034563710582,"y":19271.71015493603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8c35b00f-6b83-47b6-8f23-ecef14656d97","savedPayload":{"position":{"x":12231.034563710582,"y":19271.71015493603},"targetPosition":{"x":12458.122288795184,"y":18990.974948712355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"c7303daa-523a-4153-ae52-a8cac30aa567","savedPayload":{"position":{"x":11942.728033441905,"y":19129.001522343606},"targetPosition":{"x":12109.367235877373,"y":19084.407734478482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"db80f524-af49-4d39-b4b4-d70d87e47745","savedPayload":{"position":{"x":12109.367235877373,"y":19084.407734478482},"targetPosition":{"x":12458.122288795184,"y":18990.974948712355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fast Line","config":"{\n \"codeName\": \"fastLine\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.fastLine","project":"Superalgos","id":"430718f7-482d-4a44-96ce-a85dd76680b1","savedPayload":{"position":{"x":11953.28260028235,"y":18797.57969264456},"targetPosition":{"x":12115.13704231436,"y":18859.526827090576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a2b00adf-0b72-44cf-82a0-bcd6b95ff7c1","savedPayload":{"position":{"x":12115.13704231436,"y":18859.526827090576},"targetPosition":{"x":12458.122288795184,"y":18990.974948712355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Line","config":"{\n \"codeName\": \"slowLine\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.slowLine","project":"Superalgos","id":"9ad4bcac-98b9-4880-93fe-a6319635384a","savedPayload":{"position":{"x":12149.24710607322,"y":18538.458915311232},"targetPosition":{"x":12261.710964333291,"y":18693.36626511135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c7620ef0-d47f-4eba-ae08-386c7cae1491","savedPayload":{"position":{"x":12261.710964333291,"y":18693.36626511135},"targetPosition":{"x":12458.122288795184,"y":18990.974948712355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"77ed625d-dbbc-4dc0-a707-de3ca5066341","savedPayload":{"position":{"x":12425.038924721215,"y":18994.379878811258},"targetPosition":{"x":13130.570381785448,"y":19031.170971173728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current // get current candle data\nvariable.lastHighs.push(candle.max) // Add the current high value to the last highs array.\nvariable.lastLows.push(candle.min) // Add the current low value to the last lows array.\n\n/* Remove the first element of the array to keep it at a maximun of n elements */\nif (variable.lastHighs.length > variable.length) {\n variable.lastHighs.splice(0, 1)\n variable.lastLows.splice(0, 1)\n}\n\n/* Calculate Stoch - Signal */\nvariable.signal = calculateStoch(candle.close, variable.length)\n\n\nvariable.lastSignals.push(variable.signal)\n\n/* Remove the first element of the array to keep it at a maximun of n elements */\nif (variable.lastSignals.length > variable.smaFast) {\n variable.lastSignals.splice(0, 1)\n}\n\n/* Calculate Stoch - Fast Line */\nvariable.fastLine = calculateSMA(variable.lastSignals, variable.smaFast)\n\n\nvariable.lastSMAFast.push(variable.fastLine)\n\n/* Remove the first element of the array to keep it at a maximun of n elements */\nif (variable.lastSMAFast.length > variable.smaSlow) {\n variable.lastSMAFast.splice(0, 1)\n}\n\n/* Calculate Stoch - Slow Line */\nvariable.slowLine = calculateSMA(variable.lastSMAFast, variable.smaSlow)\n\n\n/* Helper Functions */\n\n/* Calculate Sochastic Signal */\nfunction calculateStoch(source, length) {\n /* Check if we have enough values to make the calculation */\n if (variable.lastHighs.length < length) { return 0 }\n \n /* Get highest high and lowest low of n-last elements */\n let high = Math.max(...variable.lastHighs)\n let low = Math.min(...variable.lastLows)\n\n /* Check on division by Zero */\n if(high === low) { return 0 }\n \n return 100 * (source - low) / (high - low)\n}\n\n/* Calculate Simple Moving Average */\nfunction calculateSMA(values, length) {\n /* We check we have enough values to make the calculation */\n if (values.length < length) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = values.length - length; i < values.length; i++) { // Iterate through the last periods\n sum = sum + values[i]\n }\n \n return sum / length\n}","project":"Superalgos","id":"cb01047f-16aa-4507-8e97-a96d7a8bbb75","savedPayload":{"position":{"x":12159.0254730005,"y":18698.64521302974},"targetPosition":{"x":12507.812215796479,"y":18753.826877550106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e7b0c32-92cc-4e9e-a130-ae33bc248b40","savedPayload":{"position":{"x":12507.812215796479,"y":18753.826877550106},"targetPosition":{"x":12856.337340568305,"y":18809.08618152958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.length = 14\nvariable.smaFast = 3\nvariable.smaSlow = 3\n\nvariable.signal = 0\nvariable.lastSignals = []\nvariable.lastSMAFast = []\nvariable.lastHighs = []\nvariable.lastLows = []","project":"Superalgos","id":"18cf20b6-0b7b-4520-9cf4-89ee085ab8b9","savedPayload":{"position":{"x":12441.189670001335,"y":18237.68441715349},"targetPosition":{"x":12648.724660790016,"y":18523.299611254966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bc5124f7-650e-476b-b997-1257e4f89c2f","savedPayload":{"position":{"x":12648.724660790016,"y":18523.299611254966},"targetPosition":{"x":12856.337340568305,"y":18809.08618152958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"169e9a70-4b42-426c-8d9a-b60c41ab7f17","savedPayload":{"position":{"x":12856.337340568305,"y":18809.08618152958},"targetPosition":{"x":13130.570381785448,"y":19031.170971173728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"393dc97b-76ee-409a-9b8f-f264ed652b0b","savedPayload":{"position":{"x":13549.299134692952,"y":18714.786897146754},"targetPosition":{"x":13965.46996638094,"y":18603.33496927385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Stoch 14-3-3","id":"6a85fbb1-5a99-4ccc-93e8-092f5dbf6c4a"}}}],"id":"87754aba-6878-4841-9688-352e8c565d16","savedPayload":{"position":{"x":14015.344334318033,"y":18516.882845516768},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Average True Range (ATR)","config":"{\n\"codeName\": \"Plotter-ATR\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"ATR - RMA","config":"{\n\t\"codeName\": \"Module-ATR-RMA\",\n\t\"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"a7d2fc22-a7d8-4e61-ab21-f9a39f1d8c60","savedPayload":{"position":{"x":13653.871300609968,"y":19119.953262831852},"targetPosition":{"x":13619.532708273084,"y":19316.137204984807},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2b15da18-c6ba-45b4-9c1d-35c84f50ec2c","savedPayload":{"position":{"x":13619.532708273084,"y":19316.137204984807},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"95e093d9-e212-4ee4-abc0-6b5deffc8db6","savedPayload":{"position":{"x":13891.924639941586,"y":19256.67883107766},"targetPosition":{"x":13738.512849493647,"y":19384.610872980073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c0ff77b-ba09-41be-9ff5-cb6d8bae710d","savedPayload":{"position":{"x":13738.512849493647,"y":19384.610872980073},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-2 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr2","project":"Superalgos","id":"75a4f710-e619-4578-ad51-a01b965800db","savedPayload":{"position":{"x":13985.86691454998,"y":19513.44372790657},"targetPosition":{"x":13785.479084176077,"y":19513.081659914802},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a5d5cdc1-5731-4ec5-b8cd-001e4e62ef54","savedPayload":{"position":{"x":13785.479084176077,"y":19513.081659914802},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-2 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr2","project":"Superalgos","id":"fcb4421d-ee8a-4a27-8bd2-100cdb0cdbf9","savedPayload":{"position":{"x":13892.032792373917,"y":19771.01365371225},"targetPosition":{"x":13738.584020289993,"y":19641.881812090258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d548a98e-d369-45da-abaf-2e5a758e5379","savedPayload":{"position":{"x":13738.584020289993,"y":19641.881812090258},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-3 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr3","project":"Superalgos","id":"fb2683a4-a28c-4f2b-9345-93937db60072","savedPayload":{"position":{"x":13654.433256515014,"y":19908.095777372575},"targetPosition":{"x":13619.809100971012,"y":19710.421049658275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08c720e8-2c9a-435d-baf4-06e38a7c7ce0","savedPayload":{"position":{"x":13619.809100971012,"y":19710.421049658275},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-3 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr3","project":"Superalgos","id":"bdb5b37c-6890-4186-9877-84c01b1672af","savedPayload":{"position":{"x":13384.86014742354,"y":19860.483276799227},"targetPosition":{"x":13485.049058225875,"y":19686.60931772967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a25effcc-2adc-4fc1-939c-45630c3ccd75","savedPayload":{"position":{"x":13485.049058225875,"y":19686.60931772967},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-14 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr14","project":"Superalgos","id":"df8f75d2-2e35-4567-a43a-6ef38a1d9b6e","savedPayload":{"position":{"x":13208.584983833189,"y":19650.49754924135},"targetPosition":{"x":13396.934232087955,"y":19581.58805671044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87985d52-78d7-4796-9918-81c7a534035d","savedPayload":{"position":{"x":13396.934232087955,"y":19581.58805671044},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-14 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr14","project":"Superalgos","id":"9f5379b7-8632-4873-8534-a13505a8cd92","savedPayload":{"position":{"x":13209.003842370985,"y":19377.2541932991},"targetPosition":{"x":13397.127071356557,"y":19444.69671342954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48292688-3718-49fe-9580-97d9ac87fcd4","savedPayload":{"position":{"x":13397.127071356557,"y":19444.69671342954},"targetPosition":{"x":13585.038840716112,"y":19512.83235710673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1cc0e5a-f1dd-4723-a632-51abeb3f696c","savedPayload":{"position":{"x":13585.038840716112,"y":19512.83235710673},"targetPosition":{"x":13186.482907832658,"y":18821.97695189916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"4f411d32-d31c-4f70-880d-14400f3f8e20","savedPayload":{"position":{"x":13457.907384246548,"y":19693.976087680807},"targetPosition":{"x":13306.833809660096,"y":19530.27497485336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"18c69ccb-7152-4204-b34e-0d1d92840067","savedPayload":{"position":{"x":13306.833809660096,"y":19530.27497485336},"targetPosition":{"x":13092.476220632878,"y":19315.87297769144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"e1973335-e34b-410f-8c60-6e4f77e4f7fc","savedPayload":{"position":{"x":13092.476284097807,"y":19618.864691375216},"targetPosition":{"x":13092.476220632878,"y":19315.87297769144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"8c0ff77b-ba09-41be-9ff5-cb6d8bae710d"}}},{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"5cf3f400-725e-4f2f-8fbb-f9d9d75210a9","savedPayload":{"position":{"x":12875.901425899501,"y":19532.637537031813},"targetPosition":{"x":13092.476220632878,"y":19315.87297769144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"2b15da18-c6ba-45b4-9c1d-35c84f50ec2c"}}}],"id":"b24d41f5-7cc8-4b4b-a0a9-b31b5799c74c","savedPayload":{"position":{"x":13186.326606026596,"y":19221.79100077515},"targetPosition":{"x":13186.482907832658,"y":18821.97695189916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-14 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"97f64b46-e6ae-4a56-89fe-808c11a09ec4","savedPayload":{"position":{"x":13004.409873740587,"y":19768.821193830903},"targetPosition":{"x":12946.28450556237,"y":19551.324411120644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"fab23f0e-9455-47a4-ba56-17c3ae1f0c7f","savedPayload":{"position":{"x":12946.28450556237,"y":19551.324411120644},"targetPosition":{"x":12867.169595288506,"y":19255.445078367236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-14 End","project":"Superalgos","id":"872ffd8b-6c72-42dc-90b4-2c8c73d89173","savedPayload":{"position":{"x":12713.99654304235,"y":19520.683508229053},"targetPosition":{"x":12867.169595288506,"y":19255.445078367236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-14 End","id":"48292688-3718-49fe-9580-97d9ac87fcd4"}}},{"type":"Polygon Vertex","name":"ATR-14 Begin","project":"Superalgos","id":"76fc0dd8-8e4c-4392-93a7-25c0906e6d90","savedPayload":{"position":{"x":12571.201400186928,"y":19334.72910135868},"targetPosition":{"x":12867.169595288506,"y":19255.445078367236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-14 Begin","id":"87985d52-78d7-4796-9918-81c7a534035d"}}}],"id":"ecec9e37-265d-4f9e-8e82-68f6333fbbea","savedPayload":{"position":{"x":12986.36394175057,"y":19168.533476997167},"targetPosition":{"x":13186.482907832658,"y":18821.97695189916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-3 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"0bf6c9ec-c077-4ec0-aee5-461ca992952f","savedPayload":{"position":{"x":12735.736757097915,"y":19408.92749305495},"targetPosition":{"x":12787.907134000325,"y":19215.450565930772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"e2ed8b31-4016-421b-b4a5-be4a1efe7dce","savedPayload":{"position":{"x":12787.907134000325,"y":19215.450565930772},"targetPosition":{"x":12839.987380869174,"y":19021.973375922527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-3 Begin","project":"Superalgos","id":"1f566a4a-a727-4315-bf57-98f6bda4f9f9","savedPayload":{"position":{"x":12666.200707348435,"y":19122.146546122975},"targetPosition":{"x":12839.987380869174,"y":19021.973375922527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-3 Begin","id":"08c720e8-2c9a-435d-baf4-06e38a7c7ce0"}}},{"type":"Polygon Vertex","name":"ATR-3 End","project":"Superalgos","id":"e2ebb5ae-1776-4084-b22d-f8bb1f0f9ce2","savedPayload":{"position":{"x":12646.146960168571,"y":18970.516139771185},"targetPosition":{"x":12839.987380869174,"y":19021.973375922527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-3 End","id":"a25effcc-2adc-4fc1-939c-45630c3ccd75"}}}],"id":"faed1922-2c6f-404f-aa89-bd0279d4a7f6","savedPayload":{"position":{"x":12839.987380869174,"y":19021.973375922527},"targetPosition":{"x":13186.482907832658,"y":18821.97695189916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-2 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"5cf73947-8357-482f-b35f-8e9b53437b6a","savedPayload":{"position":{"x":12268.885825197689,"y":19239.33988259211},"targetPosition":{"x":12428.158215134037,"y":19080.028229447955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4caa937b-ddf0-4ca2-af43-2d464ccad98d","savedPayload":{"position":{"x":12428.158215134037,"y":19080.028229447955},"targetPosition":{"x":12642.334112450113,"y":18865.819958623797},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-2 Begin","project":"Superalgos","id":"c163eb42-687b-4fba-9db6-0084e18e52ce","savedPayload":{"position":{"x":12339.362164957802,"y":18865.85253613687},"targetPosition":{"x":12642.334112450113,"y":18865.819958623797},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-2 Begin","id":"a5d5cdc1-5731-4ec5-b8cd-001e4e62ef54"}}},{"type":"Polygon Vertex","name":"ATR-2 End","project":"Superalgos","id":"a44429f7-6721-4619-9419-d14c0a30de19","savedPayload":{"position":{"x":12426.937981376319,"y":18650.429035190355},"targetPosition":{"x":12642.334112450113,"y":18865.819958623797},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-2 End","id":"d548a98e-d369-45da-abaf-2e5a758e5379"}}}],"id":"2a6fc3b7-2f9f-4a82-8a96-c05208c308b6","savedPayload":{"position":{"x":12792.854290000712,"y":18827.269762402448},"targetPosition":{"x":13186.482907832658,"y":18821.97695189916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"b5cf58d5-da89-4fff-83cc-000ac1095b32","savedPayload":{"position":{"x":13186.482907832658,"y":18821.97695189916},"targetPosition":{"x":13386.043081475327,"y":18476.082746317756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"ATR - RMA","config":"{ \n\"codeName\": \"Panel-ATR-RMA\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"ATR-2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr2","project":"Superalgos","id":"437acbb9-8126-4866-9a59-5624ab0212fa","savedPayload":{"position":{"x":12689.606048673246,"y":18747.74275773145},"targetPosition":{"x":12844.958211148158,"y":18617.085566845824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08c2e812-c653-45fa-8350-f79c9be57419","savedPayload":{"position":{"x":12844.958211148158,"y":18617.085566845824},"targetPosition":{"x":12986.643151410157,"y":18475.97083021092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ATR-3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr3","project":"Superalgos","id":"d1bb96e2-10c5-41c8-9599-b1220ca00fae","savedPayload":{"position":{"x":12585.710946427327,"y":18475.84733451977},"targetPosition":{"x":12786.142620522907,"y":18475.932087561083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e940e706-b774-413a-9b2f-24d4f2d3403d","savedPayload":{"position":{"x":12786.142620522907,"y":18475.932087561083},"targetPosition":{"x":12986.643151410157,"y":18475.97083021092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ATR-14","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr14","project":"Superalgos","id":"9d2b2ba5-4b4c-4323-b66f-25d703cd7522","savedPayload":{"position":{"x":12703.250296222122,"y":18192.7625593956},"targetPosition":{"x":12844.930867252788,"y":18334.380258799494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c4283089-0809-4a02-bb24-fb061af3430a","savedPayload":{"position":{"x":12844.930867252788,"y":18334.380258799494},"targetPosition":{"x":12986.643151410157,"y":18475.97083021092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ea919b0e-a30e-44d7-8d5b-cd83f2c0c3e5","savedPayload":{"position":{"x":12986.643151410157,"y":18475.97083021092},"targetPosition":{"x":13386.043081475327,"y":18476.082746317756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"99088549-f1c0-4157-ba7e-ffd6dfd0d140","savedPayload":{"position":{"x":13386.043081475327,"y":18476.082746317756},"targetPosition":{"x":13765.467815432614,"y":18257.19365613139},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Plotter Module","name":"ATR - SMA","config":"{\n\t\"codeName\": \"Module-ATR-SMA\",\n\t\"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"24c4ad6e-7531-4c02-a4d1-a92fa0c2d0bd","savedPayload":{"position":{"x":12971.119986950249,"y":18518.03528893684},"targetPosition":{"x":12759.769676598487,"y":18594.784519993726},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e1b746f-f708-49a5-9717-eebf4bb6c91a","savedPayload":{"position":{"x":12759.769676598487,"y":18594.784519993726},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"96531747-4036-4cf3-91ce-53a592c111db","savedPayload":{"position":{"x":12971.087268712712,"y":18873.911789067744},"targetPosition":{"x":12759.466392719387,"y":18796.975327723892},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"51c6cdeb-f974-49f5-a8d6-4a3e4c57539e","savedPayload":{"position":{"x":12759.466392719387,"y":18796.975327723892},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-2 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr2","project":"Superalgos","id":"a0a91f69-8665-4c10-97ed-b344d46e24e9","savedPayload":{"position":{"x":12742.17856723236,"y":19146.830363930327},"targetPosition":{"x":12629.422093181834,"y":18951.81150086756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"84bd5028-9dd1-4128-b903-2e8e27afee2c","savedPayload":{"position":{"x":12629.422093181834,"y":18951.81150086756},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-2 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr2","project":"Superalgos","id":"b79ea353-e9af-486d-bd59-f647c1d34121","savedPayload":{"position":{"x":12391.316112767501,"y":19208.60306822377},"targetPosition":{"x":12430.470959288952,"y":18986.860813012907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ebcf383a-71f7-4caf-8c4b-1334e60dfb49","savedPayload":{"position":{"x":12430.470959288952,"y":18986.860813012907},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-3 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr3","project":"Superalgos","id":"5e321a40-2362-4534-b465-2a9989aecdf8","savedPayload":{"position":{"x":12082.847770433655,"y":19030.564643534963},"targetPosition":{"x":12255.465648035639,"y":18885.770319348274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"806649c5-aef9-4da4-8c8a-e041bc9e71e2","savedPayload":{"position":{"x":12255.465648035639,"y":18885.770319348274},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-3 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr3","project":"Superalgos","id":"210cdd54-6060-47ff-be8a-06d80daf1438","savedPayload":{"position":{"x":11931.040209725063,"y":18695.856307251648},"targetPosition":{"x":12161.200370127157,"y":18695.848099950676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5945b52-ef11-4a12-9503-8c8accbefcc5","savedPayload":{"position":{"x":12161.200370127157,"y":18695.848099950676},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-14 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.atr14","project":"Superalgos","id":"37501854-7854-49b5-8ab0-d36febe18a65","savedPayload":{"position":{"x":12082.543495556925,"y":18361.339959347893},"targetPosition":{"x":12255.217962444302,"y":18505.98909918443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57b4f263-265b-4a4f-9470-6c1503961d61","savedPayload":{"position":{"x":12255.217962444302,"y":18505.98909918443},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ATR-14 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.atr14","project":"Superalgos","id":"8395b74a-3ceb-49b7-a2e5-f7b00866bd7b","savedPayload":{"position":{"x":12389.280402280645,"y":18179.17557149128},"targetPosition":{"x":12429.990904794839,"y":18402.17903065696},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"79026076-fe40-4641-a1c7-903c20ecff2d","savedPayload":{"position":{"x":12429.990904794839,"y":18402.17903065696},"targetPosition":{"x":12481.77784164968,"y":18695.849358122832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfab9870-bf09-49c5-86cd-975ee33e64ca","savedPayload":{"position":{"x":12417.879093575477,"y":18804.161000187934},"targetPosition":{"x":12867.211473398937,"y":18025.91615906582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"2f3896e2-233c-4413-b989-bb111636a6f1","savedPayload":{"position":{"x":12318.164305955797,"y":18795.144035582598},"targetPosition":{"x":12389.598074117963,"y":18579.21223375277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9e5ef462-76d3-417a-8e33-9481761ba313","savedPayload":{"position":{"x":12389.598074117963,"y":18579.21223375277},"targetPosition":{"x":12477.501102397171,"y":18251.10810496637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"510f0f9c-b8c3-405f-93fa-150f2ba98b44","savedPayload":{"position":{"x":12184.827054201378,"y":18419.97672953765},"targetPosition":{"x":12477.501102397171,"y":18251.10810496637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"51c6cdeb-f974-49f5-a8d6-4a3e4c57539e"}}},{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"aac1fbbe-4728-4c97-92ea-7ab4ab1e976a","savedPayload":{"position":{"x":12146.167210436714,"y":18162.50416005346},"targetPosition":{"x":12477.501102397171,"y":18251.10810496637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"8e1b746f-f708-49a5-9717-eebf4bb6c91a"}}}],"id":"dae87eed-2840-45ec-b8fd-97868408e748","savedPayload":{"position":{"x":12477.297628673965,"y":18251.0647988392},"targetPosition":{"x":12867.211473398937,"y":18025.91615906582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-14 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"7026f16e-1ad8-4eaa-bbab-ce47b2ad820d","savedPayload":{"position":{"x":12041.247563103094,"y":18401.707007293968},"targetPosition":{"x":12200.436382616383,"y":18242.608419639677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f8abfda8-11a5-4159-8b25-70b123bb3da8","savedPayload":{"position":{"x":12200.436382616383,"y":18242.608419639677},"targetPosition":{"x":12417.195625665423,"y":18025.935036541785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-14 End","project":"Superalgos","id":"aa7480fd-e24a-43db-b0b9-96fbbf6a8190","savedPayload":{"position":{"x":12110.781034888929,"y":18025.93948478445},"targetPosition":{"x":12417.195625665423,"y":18025.935036541785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-14 End","id":"79026076-fe40-4641-a1c7-903c20ecff2d"}}},{"type":"Polygon Vertex","name":"ATR-14 Begin","project":"Superalgos","id":"a0c299f5-5134-4d5f-9f32-1589e26f8e94","savedPayload":{"position":{"x":12200.426057959517,"y":17809.41383893721},"targetPosition":{"x":12417.195625665423,"y":18025.935036541785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-14 Begin","id":"57b4f263-265b-4a4f-9470-6c1503961d61"}}}],"id":"60444df5-1f4a-4553-92bb-5af88cc3b422","savedPayload":{"position":{"x":12416.899762325778,"y":18025.91127785977},"targetPosition":{"x":12867.211473398937,"y":18025.91615906582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-3 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"0fdd9432-2ce4-4f80-987e-6683bee9b731","savedPayload":{"position":{"x":11960.73285047954,"y":17939.042866663418},"targetPosition":{"x":12178.446911197636,"y":17880.839195308574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"89eab967-e7d1-4bf5-b4d0-3919f59392bb","savedPayload":{"position":{"x":12178.446911197636,"y":17880.839195308574},"targetPosition":{"x":12477.487178114363,"y":17800.876157826766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-3 Begin","project":"Superalgos","id":"74dc9232-405c-4361-a9c1-52b0cb48a8ab","savedPayload":{"position":{"x":12210.717075804972,"y":17646.848305031006},"targetPosition":{"x":12477.487178114363,"y":17800.876157826766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-3 Begin","id":"806649c5-aef9-4da4-8c8a-e041bc9e71e2"}}},{"type":"Polygon Vertex","name":"ATR-3 End","project":"Superalgos","id":"f5142bc0-0a8a-4b51-bb55-37d55d2b07b2","savedPayload":{"position":{"x":12397.363448466596,"y":17501.78672378432},"targetPosition":{"x":12477.487178114363,"y":17800.876157826766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-3 End","id":"e5945b52-ef11-4a12-9503-8c8accbefcc5"}}}],"id":"61c9a80d-5f39-438c-9c90-9ebb93e3ebf1","savedPayload":{"position":{"x":12477.248748905531,"y":17800.792844251344},"targetPosition":{"x":12867.211473398937,"y":18025.91615906582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"ATR-2 Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"3cd2a5a6-65a3-4459-9b82-9df07a560744","savedPayload":{"position":{"x":12130.688071715333,"y":17498.970584803243},"targetPosition":{"x":12348.158479918708,"y":17557.203602315712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7e31615a-3abe-4749-be9c-9d4e7d0e8290","savedPayload":{"position":{"x":12348.158479918708,"y":17557.203602315712},"targetPosition":{"x":12642.414732217814,"y":17636.065351771715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ATR-2 Begin","project":"Superalgos","id":"05f68187-ffcb-4e54-9ff2-c46dc076fded","savedPayload":{"position":{"x":12490.10076134112,"y":17372.149559050195},"targetPosition":{"x":12642.414732217814,"y":17636.065351771715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-2 Begin","id":"84bd5028-9dd1-4128-b903-2e8e27afee2c"}}},{"type":"Polygon Vertex","name":"ATR-2 End","project":"Superalgos","id":"fde40884-dc75-4eb5-b93d-b8ec1d19d93a","savedPayload":{"position":{"x":12721.196782305557,"y":17341.729864742585},"targetPosition":{"x":12642.414732217814,"y":17636.065351771715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ATR-2 End","id":"ebcf383a-71f7-4caf-8c4b-1334e60dfb49"}}}],"id":"ae2cd4db-eebd-4bda-813a-9d9a788f8838","savedPayload":{"position":{"x":12642.181937923218,"y":17635.923781948553},"targetPosition":{"x":12867.211473398937,"y":18025.91615906582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"9a053fa4-ca14-432c-8927-15ef216b2faf","savedPayload":{"position":{"x":12375.010118286198,"y":17939.97138426258},"targetPosition":{"x":12996.010108087248,"y":17939.972723398158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"ATR - SMA","config":"{ \n\"codeName\": \"Panel-ATR-SMA\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"ATR-2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr2","project":"Superalgos","id":"71d72170-f480-46e5-9fb7-3f79eef990d6","savedPayload":{"position":{"x":12084.763419973446,"y":17241.47541022092},"targetPosition":{"x":12385.202877495165,"y":17321.914158264808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"00581f1e-843d-436b-8625-71b0814676f7","savedPayload":{"position":{"x":12385.202877495165,"y":17321.914158264808},"targetPosition":{"x":12685.651242131433,"y":17402.279147132598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ATR-3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr3","project":"Superalgos","id":"ac407a65-ed19-4863-b039-0e53dcf6744d","savedPayload":{"position":{"x":12374.711484631873,"y":16863.493406177542},"targetPosition":{"x":12530.187315854244,"y":17132.895784315722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bded503d-8475-4b34-886e-ec67a698a06d","savedPayload":{"position":{"x":12530.187315854244,"y":17132.895784315722},"targetPosition":{"x":12685.651242131433,"y":17402.279147132598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ATR-14","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atr14","project":"Superalgos","id":"07af6d07-5ef8-4c38-a1c4-5f07355e9274","savedPayload":{"position":{"x":12846.378293283804,"y":16801.427150187727},"targetPosition":{"x":12766.055413164355,"y":17101.8667852005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0eda57d2-0c10-4511-b3ab-7c6f1c5b953a","savedPayload":{"position":{"x":12766.055413164355,"y":17101.8667852005},"targetPosition":{"x":12685.651242131433,"y":17402.279147132598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d841e272-ce7b-4f3d-9774-545f69e8fc79","savedPayload":{"position":{"x":12685.651242131433,"y":17402.279147132598},"targetPosition":{"x":12996.010108087248,"y":17939.972723398158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a6a3f5a6-8c33-482d-a922-5719afc35325","savedPayload":{"position":{"x":13386.07016175849,"y":18038.43419944887},"targetPosition":{"x":13765.467815432614,"y":18257.19365613139},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"17f8f37a-bf30-4c1d-82f2-f587830576a0","savedPayload":{"position":{"x":13865.344334318033,"y":18257.075224381435},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Rate of Change (ROC)","config":"{\n\"codeName\": \"Plotter-ROC\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"ROC 76","config":"{\n\t\"codeName\": \"Module-ROC-76\",\n\t\"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"5b9a08e3-0df5-4f24-9e46-cfd57c00dbda","savedPayload":{"position":{"x":12690.765442415486,"y":17710.107690601086},"targetPosition":{"x":12545.565312436727,"y":17486.296956570804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a39c9f60-84e3-4e05-8ef0-24539ac40325","savedPayload":{"position":{"x":12545.565312436727,"y":17486.296956570804},"targetPosition":{"x":12400.013569873416,"y":17262.259342080706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"7860512f-766c-4e66-be5f-7702f9c9f047","savedPayload":{"position":{"x":12063.365982666084,"y":17677.473832372292},"targetPosition":{"x":12231.685705438576,"y":17469.821611097872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0fc534f6-3e3f-408a-b25b-f5c973ec0f63","savedPayload":{"position":{"x":12231.685705438576,"y":17469.821611097872},"targetPosition":{"x":12400.013569873416,"y":17262.259342080706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.value","project":"Superalgos","id":"721530f2-7ad7-411e-b73a-69d45c002577","savedPayload":{"position":{"x":11901.323230047266,"y":17070.823858234267},"targetPosition":{"x":12150.719282854887,"y":17166.45505814962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3b4f240c-66f5-4a3f-9527-47ea197ccf47","savedPayload":{"position":{"x":12150.719282854887,"y":17166.45505814962},"targetPosition":{"x":12400.013569873416,"y":17262.259342080706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.value","project":"Superalgos","id":"9eee04a2-4bc6-4277-9716-4db129bc6a03","savedPayload":{"position":{"x":12427.302289129584,"y":16728.62306661268},"targetPosition":{"x":12413.704671068801,"y":16995.323547202126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1de1d87-6d4a-4aea-bf10-74d64ddfb4ed","savedPayload":{"position":{"x":12413.704671068801,"y":16995.323547202126},"targetPosition":{"x":12400.013569873416,"y":17262.259342080706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e60e3722-01e4-421e-a06f-371bcb71aac4","savedPayload":{"position":{"x":12400.013569873416,"y":17262.259342080706},"targetPosition":{"x":13428.304643907115,"y":16986.981045728597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"cc082fda-c47e-438f-8157-f2d870c218ac","savedPayload":{"position":{"x":13152.296446116972,"y":20044.437457634325},"targetPosition":{"x":13001.222871530521,"y":19880.73634480688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"cc2ec800-b3ff-4031-8bdd-688d475b2d5e","savedPayload":{"position":{"x":13001.222871530521,"y":19880.73634480688},"targetPosition":{"x":12786.865282503302,"y":19666.33434764496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"511d620d-335d-4b07-b181-ae732630d137","savedPayload":{"position":{"x":12786.865345968232,"y":19969.326061328735},"targetPosition":{"x":12786.865282503302,"y":19666.33434764496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"0fc534f6-3e3f-408a-b25b-f5c973ec0f63"}}},{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"ea7d0d25-e182-41a9-9451-99402984c131","savedPayload":{"position":{"x":12570.290487769926,"y":19883.09890698533},"targetPosition":{"x":12786.865282503302,"y":19666.33434764496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"a39c9f60-84e3-4e05-8ef0-24539ac40325"}}}],"id":"526bbff1-0ab2-4b5f-ad73-6886c6ef295c","savedPayload":{"position":{"x":12965.817812090267,"y":16719.952228248017},"targetPosition":{"x":13428.304643907115,"y":16986.981045728597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Value","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d0fdbc54-377b-4862-b50f-b4a4c97eac09","savedPayload":{"position":{"x":12919.606556179995,"y":16089.01273977435},"targetPosition":{"x":13126.961696695911,"y":16256.825981040984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"d829f8bb-3737-4cef-ab7a-e92700ca7a6a","savedPayload":{"position":{"x":13126.961696695911,"y":16256.825981040984},"targetPosition":{"x":13372.145445194725,"y":16455.49186586648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Value Begin","project":"Superalgos","id":"29d5faa8-13a8-45a0-ba94-f43c2c200222","savedPayload":{"position":{"x":13339.148055106361,"y":16142.215368289375},"targetPosition":{"x":13372.145445194725,"y":16455.49186586648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value Begin","id":"3b4f240c-66f5-4a3f-9527-47ea197ccf47"}}},{"type":"Polygon Vertex","name":"Value End","project":"Superalgos","id":"adf14091-c476-40aa-a560-fe8d90b8b8f3","savedPayload":{"position":{"x":13584.02765281019,"y":16193.580032635484},"targetPosition":{"x":13372.145445194725,"y":16455.49186586648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value End","id":"f1de1d87-6d4a-4aea-bf10-74d64ddfb4ed"}}}],"id":"2e3e77ee-7057-47ca-b0fb-01f483c00949","savedPayload":{"position":{"x":13290.175539622156,"y":16471.01893911659},"targetPosition":{"x":13428.304643907115,"y":16986.981045728597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"ae6b4dd4-c45f-4398-91cf-50cb16a36b42","savedPayload":{"position":{"x":13427.984657342924,"y":16987.03228914368},"targetPosition":{"x":13890.09696208531,"y":17253.679303469136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"ROC 76","config":"{ \n\"codeName\": \"Panel-ROC-76\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Superalgos","id":"f9921989-1157-49ad-894e-9f4e9d197d46","savedPayload":{"position":{"x":13890.093751735112,"y":16186.535967659582},"targetPosition":{"x":13890.098653286936,"y":16453.44172222894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fcffae02-a826-4058-930a-f1eba1c3c0dc","savedPayload":{"position":{"x":13890.098653286936,"y":16453.44172222894},"targetPosition":{"x":13890.09784275767,"y":16720.326048114424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b44763a3-2604-4204-9275-1c822bf7b85f","savedPayload":{"position":{"x":13890.09784275767,"y":16720.326048114424},"targetPosition":{"x":13890.09696208531,"y":17253.679303469136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a21bb3ba-b24d-4163-b7d0-ea60220fc368","savedPayload":{"position":{"x":13542.2871273399,"y":17797.98376868404},"targetPosition":{"x":13965.354713192395,"y":17911.008978057733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Plotter Module","name":"ROC 32","config":"{\n\t\"codeName\": \"Module-ROC-32\",\n\t\"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"360c9616-373e-4b79-8623-507a4e126b2d","savedPayload":{"position":{"x":12888.75500246257,"y":16977.332518454205},"targetPosition":{"x":12875.00220270336,"y":16710.597850502454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3830e3a4-e15c-4f83-9530-9d24a940d5a6","savedPayload":{"position":{"x":12875.00220270336,"y":16710.597850502454},"targetPosition":{"x":12861.19991910876,"y":16443.86718498305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"251012cf-5083-4a10-932c-d6ffe369acc2","savedPayload":{"position":{"x":12362.213165677356,"y":16635.130671177292},"targetPosition":{"x":12611.69977463907,"y":16539.49598095313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"050405b7-8bd9-413b-b1cf-3ea9259b6e20","savedPayload":{"position":{"x":12611.69977463907,"y":16539.49598095313},"targetPosition":{"x":12861.19991910876,"y":16443.86718498305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.value","project":"Superalgos","id":"f5e02d75-2c37-431b-91d2-e4ee89f6b4ca","savedPayload":{"position":{"x":12524.895981256293,"y":16028.566829236714},"targetPosition":{"x":12693.038605663784,"y":16236.212639047524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f277e303-3eb8-49f8-a70f-36e5fa6acb05","savedPayload":{"position":{"x":12693.038605663784,"y":16236.212639047524},"targetPosition":{"x":12861.19991910876,"y":16443.86718498305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.value","project":"Superalgos","id":"a551a375-2f95-469d-9748-f5ffa94cb8a2","savedPayload":{"position":{"x":13151.964592513606,"y":15995.680630450224},"targetPosition":{"x":13006.590582770386,"y":16219.793374094777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"010b0145-7fa3-41bd-8d4c-ad221abe3f75","savedPayload":{"position":{"x":13006.590582770386,"y":16219.793374094777},"targetPosition":{"x":12861.19991910876,"y":16443.86718498305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c45748d1-cb04-4a9f-8564-d6489e1ca532","savedPayload":{"position":{"x":12861.19991910876,"y":16443.86718498305},"targetPosition":{"x":13890.471028866428,"y":16719.600875265263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"4f8b88e5-1ef4-4094-be2a-c62f3aace8a0","savedPayload":{"position":{"x":12012.553367826222,"y":19145.605405536116},"targetPosition":{"x":12083.987135988387,"y":18929.673603706287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"5ecae3ca-c6ff-4de7-91c8-186c9d242586","savedPayload":{"position":{"x":12083.987135988387,"y":18929.673603706287},"targetPosition":{"x":12171.890164267596,"y":18601.56947491989},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"4d8a5169-ff68-4d76-bdda-70533b12857d","savedPayload":{"position":{"x":11879.216116071802,"y":18770.43809949117},"targetPosition":{"x":12171.890164267596,"y":18601.56947491989},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"050405b7-8bd9-413b-b1cf-3ea9259b6e20"}}},{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"7562f064-db9f-48d1-b085-6b0378a9e230","savedPayload":{"position":{"x":11840.556272307138,"y":18512.96553000698},"targetPosition":{"x":12171.890164267596,"y":18601.56947491989},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"3830e3a4-e15c-4f83-9530-9d24a940d5a6"}}}],"id":"aadad370-9c78-49cd-8360-c290b42eb47c","savedPayload":{"position":{"x":13623.442857733171,"y":16256.924335060925},"targetPosition":{"x":13890.471028866428,"y":16719.600875265263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Value Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"54dc15cf-f4b0-4575-92b5-32047ac32fef","savedPayload":{"position":{"x":14952.941491431618,"y":15800.651788180305},"targetPosition":{"x":14909.703786705959,"y":16065.944493580106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7b8cb64d-2d91-4aea-9e7d-9d0541095294","savedPayload":{"position":{"x":14909.703786705959,"y":16065.944493580106},"targetPosition":{"x":14856.832360917968,"y":16405.860043675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Value Begin","project":"Superalgos","id":"e4131510-0ce7-4fcb-82f9-03582a5c861c","savedPayload":{"position":{"x":15136.19746420817,"y":16202.533207181717},"targetPosition":{"x":14856.832360917968,"y":16405.860043675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value Begin","id":"f277e303-3eb8-49f8-a70f-36e5fa6acb05"}}},{"type":"Polygon Vertex","name":"Value End","project":"Superalgos","id":"8a780be1-a258-4af4-8450-e57384ff7bf0","savedPayload":{"position":{"x":15197.708151128398,"y":16458.451548006396},"targetPosition":{"x":14856.832360917968,"y":16405.860043675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value End","id":"010b0145-7fa3-41bd-8d4c-ad221abe3f75"}}}],"id":"2b87e0ff-d5a1-4b9b-b713-743f46573249","savedPayload":{"position":{"x":14028.65039602201,"y":16203.509911083413},"targetPosition":{"x":13890.471028866428,"y":16719.600875265263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"66c3abab-2df5-4d90-a119-1a18c24536a5","savedPayload":{"position":{"x":13890.471028866428,"y":16719.600875265263},"targetPosition":{"x":14157.344829091726,"y":17181.935398050387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"ROC 32","config":"{ \n\"codeName\": \"Panel-ROC-32\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Superalgos","id":"a7d719e2-be07-47cc-a91c-ebdab4dbc814","savedPayload":{"position":{"x":14691.2795236485,"y":16256.780360396919},"targetPosition":{"x":14557.722535394514,"y":16488.189520703774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0aa50f71-8801-4d7c-b04e-136adbb3592a","savedPayload":{"position":{"x":14557.722535394514,"y":16488.189520703774},"targetPosition":{"x":14424.183527266156,"y":16719.59818113489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4d4fdc48-dca1-47e8-8f2e-e595adf26c0e","savedPayload":{"position":{"x":14424.183527266156,"y":16719.59818113489},"targetPosition":{"x":14157.344829091726,"y":17181.935398050387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7812b3a3-8375-4f0d-9671-acc05b256d74","savedPayload":{"position":{"x":13746.072945844426,"y":17532.09950495856},"targetPosition":{"x":13965.354713192395,"y":17911.008978057733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Plotter Module","name":"ROC 9","config":"{\n\t\"codeName\": \"Module-ROC-9\",\n\t\"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"d30a2a69-8977-4528-aac6-abebe3aad8b1","savedPayload":{"position":{"x":13200.084900939106,"y":17094.135597011984},"targetPosition":{"x":13241.88619433323,"y":16898.861374812237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"44d4ab03-4306-43f7-8c94-08976c57625a","savedPayload":{"position":{"x":13241.88619433323,"y":16898.861374812237},"targetPosition":{"x":13283.5640858043,"y":16703.65560307367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"c9bcf00d-9a15-4444-94f3-bf493cacdc4e","savedPayload":{"position":{"x":12885.429606449652,"y":16744.660763496093},"targetPosition":{"x":13084.528387997398,"y":16724.14777315935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a0efe28-4669-4f77-af30-322b9c8fad72","savedPayload":{"position":{"x":13084.528387997398,"y":16724.14777315935},"targetPosition":{"x":13283.5640858043,"y":16703.65560307367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.value","project":"Superalgos","id":"388b4734-3b11-4b4c-9fca-0ea51581be66","savedPayload":{"position":{"x":13120.735849258948,"y":16337.734640932893},"targetPosition":{"x":13202.147889010612,"y":16520.737177508978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"473c0f5f-22eb-4212-bd6f-3e7b4b81e563","savedPayload":{"position":{"x":13202.147889010612,"y":16520.737177508978},"targetPosition":{"x":13283.5640858043,"y":16703.65560307367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Value End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.value","project":"Superalgos","id":"bc667db2-4e37-427b-a581-e3f29086f305","savedPayload":{"position":{"x":13580.128561596055,"y":16435.425774725118},"targetPosition":{"x":13431.82519531102,"y":16569.640006115027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"79ce261d-2055-4a8a-9604-41b37653759a","savedPayload":{"position":{"x":13431.82519531102,"y":16569.640006115027},"targetPosition":{"x":13283.5640858043,"y":16703.65560307367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cc49ad50-0be2-43c9-8f4a-ccccea8dc087","savedPayload":{"position":{"x":13283.5640858043,"y":16703.65560307367},"targetPosition":{"x":13974.24440327154,"y":17102.255244000266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"28729ed0-43c3-4adb-8dd6-a708dda9d798","savedPayload":{"position":{"x":12626.543818349695,"y":21735.833378546624},"targetPosition":{"x":12475.470243763244,"y":21572.132265719178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7c568a67-a0af-49ed-bae4-71e9fb835dcc","savedPayload":{"position":{"x":12475.470243763244,"y":21572.132265719178},"targetPosition":{"x":12261.112654736025,"y":21357.730268557258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"f13ef470-67b1-4ea9-b5f9-d1323b9e5921","savedPayload":{"position":{"x":12261.112718200955,"y":21660.721982241033},"targetPosition":{"x":12261.112654736025,"y":21357.730268557258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"5a0efe28-4669-4f77-af30-322b9c8fad72"}}},{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"382b90b0-c454-438c-8342-f625c475b183","savedPayload":{"position":{"x":12044.537860002649,"y":21574.49482789763},"targetPosition":{"x":12261.112654736025,"y":21357.730268557258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"44d4ab03-4306-43f7-8c94-08976c57625a"}}}],"id":"79c02166-9fb5-41f8-9a93-c86f198d046d","savedPayload":{"position":{"x":13870.446308592876,"y":16715.850288024092},"targetPosition":{"x":13974.24440327154,"y":17102.255244000266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Value","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"6475bd9e-d457-4fa6-a0e2-6bab43c1b900","savedPayload":{"position":{"x":12393.853928412718,"y":17780.408660686648},"targetPosition":{"x":12601.209068928634,"y":17948.221901953282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"3dbc0e73-14ef-4ffc-8284-f16c461778f3","savedPayload":{"position":{"x":12601.209068928634,"y":17948.221901953282},"targetPosition":{"x":12846.392817427448,"y":18146.887786778778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Value Begin","project":"Superalgos","id":"a2794b60-36b4-4896-899b-20f60c519042","savedPayload":{"position":{"x":12813.395427339085,"y":17833.611289201675},"targetPosition":{"x":12846.392817427448,"y":18146.887786778778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value Begin","id":"473c0f5f-22eb-4212-bd6f-3e7b4b81e563"}}},{"type":"Polygon Vertex","name":"Value End","project":"Superalgos","id":"759aba24-d4ed-4266-a9c4-9ea04a19f8f7","savedPayload":{"position":{"x":13058.275025042913,"y":17884.975953547782},"targetPosition":{"x":12846.392817427448,"y":18146.887786778778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Value End","id":"79ce261d-2055-4a8a-9604-41b37653759a"}}}],"id":"5ee0dccd-325b-410f-b069-f0f3e3881447","savedPayload":{"position":{"x":14172.809307626118,"y":16754.936771276127},"targetPosition":{"x":13974.24440327154,"y":17102.255244000266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"05a0cab0-cf12-4ee7-92a8-76fe96e42805","savedPayload":{"position":{"x":13974.24440327154,"y":17102.255244000266},"targetPosition":{"x":14078.2811635562,"y":17487.928205375356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"ROC 9","config":"{ \n\"codeName\": \"Panel-ROC-9\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Superalgos","id":"488e613d-484a-4750-8b22-a20f0434d1ea","savedPayload":{"position":{"x":14642.77803935672,"y":16924.48788595342},"targetPosition":{"x":14501.448465435366,"y":17065.418852389474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"521fa5b1-2419-4550-b8fb-ef2dcc284693","savedPayload":{"position":{"x":14501.448465435366,"y":17065.418852389474},"targetPosition":{"x":14360.1138110096,"y":17206.144756410024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1be3230-a9a3-4d36-95d0-f6ba0ddcd5e5","savedPayload":{"position":{"x":14360.1138110096,"y":17206.144756410024},"targetPosition":{"x":14078.2811635562,"y":17487.928205375356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5ecd7465-9f89-4e20-bea9-2216863e2990","savedPayload":{"position":{"x":14078.2811635562,"y":17487.928205375356},"targetPosition":{"x":13965.354713192395,"y":17911.008978057733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"85e9a7d0-c411-4fac-9297-95d71a9ae363","savedPayload":{"position":{"x":14015.344334318033,"y":17997.267603246102},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Stochastic","config":"{\n\"codeName\": \"Plotter-Stoch\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Stoch 14-3-3","config":"{\n\t\"codeName\": \"Module-Stoch-14-3-3\",\n \"icon\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Slow Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.slowLine","project":"Superalgos","id":"55d7707a-30e2-4879-8be5-ca7ecd2f3873","savedPayload":{"position":{"x":14500.412541320678,"y":16717.082928006344},"targetPosition":{"x":14358.99926521186,"y":16878.693041065108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bc0a51ed-fc21-4517-80a9-742f8a28ede7","savedPayload":{"position":{"x":14358.99926521186,"y":16878.693041065108},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Slow Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.slowLine","project":"Superalgos","id":"bacc0912-cfd8-4cf1-91b7-9754df472dae","savedPayload":{"position":{"x":14634.337058498098,"y":16881.012777889817},"targetPosition":{"x":14446.655149506696,"y":16988.538441338664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d97911db-336c-414a-b163-69cb135de17b","savedPayload":{"position":{"x":14446.655149506696,"y":16988.538441338664},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Fast Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.fastLine","project":"Superalgos","id":"17a984a0-223a-4e41-87b5-1cbe8ff2e51d","savedPayload":{"position":{"x":14709.305326523641,"y":17081.709174441472},"targetPosition":{"x":14497.383047273546,"y":17121.107763559703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"97e0ce46-a22d-49ce-bf5c-bb50ec060d86","savedPayload":{"position":{"x":14497.383047273546,"y":17121.107763559703},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Fast Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.fastLine","project":"Superalgos","id":"013e38de-657d-461b-8b9b-beee034d1a28","savedPayload":{"position":{"x":14689.655835612004,"y":17333.127186423677},"targetPosition":{"x":14498.586146919963,"y":17262.07553537839},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5b1e120b-33fa-434a-9913-135f3f94edad","savedPayload":{"position":{"x":14498.586146919963,"y":17262.07553537839},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"a6b82c72-273b-4bb0-a20f-672e868a8bc4","savedPayload":{"position":{"x":14648.081851491876,"y":17495.203323907794},"targetPosition":{"x":14456.779967131246,"y":17397.55563974745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e894f129-e11d-4ec6-8d76-50d39dab5dd5","savedPayload":{"position":{"x":14456.779967131246,"y":17397.55563974745},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"ed878528-be4d-4b54-b05c-14be099d2e0a","savedPayload":{"position":{"x":14526.460539241063,"y":17657.65979151649},"targetPosition":{"x":14371.636414802539,"y":17510.425288371425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"93278c60-4529-454e-989f-771ce3beb3c1","savedPayload":{"position":{"x":14371.636414802539,"y":17510.425288371425},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 20","project":"Superalgos","id":"4c062900-b756-40f7-8538-dabb9ae12c16","savedPayload":{"position":{"x":14345.238249104506,"y":17784.488644608973},"targetPosition":{"x":14254.509388014114,"y":17589.535506694287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"59d32253-47b9-4227-bc5b-e2f1d5416844","savedPayload":{"position":{"x":14254.509388014114,"y":17589.535506694287},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 20","project":"Superalgos","id":"3a560a43-44d0-4d9e-b897-465c472fa9ea","savedPayload":{"position":{"x":14140.458084894548,"y":17844.298486516775},"targetPosition":{"x":14118.745310022794,"y":17629.086424118585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ce6a0861-712e-4cf4-81e9-92ab6c8a5f4d","savedPayload":{"position":{"x":14118.745310022794,"y":17629.086424118585},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 30","project":"Superalgos","id":"a492b3aa-e876-4762-a297-e3fd36964bb8","savedPayload":{"position":{"x":13931.199164271944,"y":17831.32771389947},"targetPosition":{"x":13977.75650321729,"y":17618.255578693977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3ea0b783-3d43-47d1-90aa-99366cd09a7d","savedPayload":{"position":{"x":13977.75650321729,"y":17618.255578693977},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 30","project":"Superalgos","id":"45566c80-77fd-4246-8fc3-50692ff479a2","savedPayload":{"position":{"x":13732.599782581467,"y":17747.160978196865},"targetPosition":{"x":13845.918144521158,"y":17565.081435490447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4e7322f7-3bfa-41cc-b9a0-c5dcbe16e83e","savedPayload":{"position":{"x":13845.918144521158,"y":17565.081435490447},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 70","project":"Superalgos","id":"c982c6b7-9b74-4b02-a2b8-8c6fb6df231e","savedPayload":{"position":{"x":13571.7404311149,"y":17606.053418764204},"targetPosition":{"x":13739.02459647497,"y":17471.751884800975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4f226496-b6a0-436d-97c5-d6e61dd00c23","savedPayload":{"position":{"x":13739.02459647497,"y":17471.751884800975},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 70","project":"Superalgos","id":"a66f14af-1cd6-4b48-979c-13bd4171828c","savedPayload":{"position":{"x":13466.666928482526,"y":17422.73038411507},"targetPosition":{"x":13670.620725938232,"y":17347.85895576789},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"22287519-c930-4dfb-bb4a-298da4e32cdf","savedPayload":{"position":{"x":13670.620725938232,"y":17347.85895576789},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 80","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 80","project":"Superalgos","id":"742160f2-7cd8-4565-9536-5c0dca39a3e9","savedPayload":{"position":{"x":13428.248006144717,"y":17211.811717445744},"targetPosition":{"x":13642.898403227431,"y":17207.803685401588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fb48eeab-d538-4fc5-81fe-dd916f749477","savedPayload":{"position":{"x":13642.898403227431,"y":17207.803685401588},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 80","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 80","project":"Superalgos","id":"9057daf5-069d-4489-aaf5-dd803f642a86","savedPayload":{"position":{"x":13458.068283494933,"y":17005.727621093876},"targetPosition":{"x":13663.309460364133,"y":17070.422146740217},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9a3c052a-a6b6-4392-b2fd-54151febb8f5","savedPayload":{"position":{"x":13663.309460364133,"y":17070.422146740217},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 100","project":"Superalgos","id":"2e17f6ae-23e6-4411-a0a5-69be7d7d3232","savedPayload":{"position":{"x":13555.397395788568,"y":16813.94900110847},"targetPosition":{"x":13727.299748005371,"y":16943.95746546435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f3e69d47-f137-412e-a515-7dc262af7f8b","savedPayload":{"position":{"x":13727.299748005371,"y":16943.95746546435},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 100","project":"Superalgos","id":"a7a616cf-f882-4088-b1d0-eb4fdb4ffd11","savedPayload":{"position":{"x":13708.897288308788,"y":16664.920860451773},"targetPosition":{"x":13830.990398255264,"y":16844.128732825302},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"29103f63-7cd6-4005-bec7-a385cf373eaf","savedPayload":{"position":{"x":13830.990398255264,"y":16844.128732825302},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 50","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 50","project":"Superalgos","id":"8b212cf0-fab5-45dd-b645-0f4e79656653","savedPayload":{"position":{"x":13902.343939295632,"y":16576.903119606537},"targetPosition":{"x":13959.494498865544,"y":16785.29584208598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"99b1d6a8-0904-43ff-b209-c7c6868181b5","savedPayload":{"position":{"x":13959.494498865544,"y":16785.29584208598},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 50","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 50","project":"Superalgos","id":"864cc94d-3947-45bd-8a85-a19d06609b9a","savedPayload":{"position":{"x":14113.069605098972,"y":16554.064492957255},"targetPosition":{"x":14100.739545008255,"y":16770.08649033821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"84db0a13-44f1-4953-ab27-d7425ab1ee6b","savedPayload":{"position":{"x":14100.739545008255,"y":16770.08649033821},"targetPosition":{"x":14073.671803484238,"y":17200.463381239268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ac3440e-1b64-4a12-8c31-38783846da01","savedPayload":{"position":{"x":14073.671803484238,"y":17200.463381239268},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Slow Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d89f9f7e-12c9-4883-a753-41cf0e061dde","savedPayload":{"position":{"x":14881.88263912611,"y":15458.623840849868},"targetPosition":{"x":14904.92183213402,"y":15752.688927759145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7ef54320-7e6d-4e77-9345-9f4e5742a18e","savedPayload":{"position":{"x":14904.92183213402,"y":15752.688927759145},"targetPosition":{"x":14930.534242384983,"y":16076.522458276297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Slow Line End","project":"Superalgos","id":"f093f915-dc4b-4ba3-bc51-57e593a3025a","savedPayload":{"position":{"x":15030.738467583615,"y":15767.953884853594},"targetPosition":{"x":14930.534242384983,"y":16076.522458276297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Slow Line End","id":"d97911db-336c-414a-b163-69cb135de17b"}}},{"type":"Polygon Vertex","name":"Slow Line Begin","project":"Superalgos","id":"a2116df6-c3ec-4017-a51d-ae12cc47e021","savedPayload":{"position":{"x":15142.363331122157,"y":15828.704705059128},"targetPosition":{"x":14930.534242384983,"y":16076.522458276297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Slow Line Begin","id":"bc0a51ed-fc21-4517-80a9-742f8a28ede7"}}}],"id":"c28b1cfd-4cf5-4382-8bce-45930b5e8a15","savedPayload":{"position":{"x":14201.993958535346,"y":17003.19451255007},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Fast Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a5147142-56f2-4fd8-a06e-449cfb1a997d","savedPayload":{"position":{"x":13625.381695674056,"y":16191.14875269467},"targetPosition":{"x":13915.188737628669,"y":16249.85213294344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b7bec76c-a5d6-4b78-a0f5-8315ca1c0dba","savedPayload":{"position":{"x":13915.188737628669,"y":16249.85213294344},"targetPosition":{"x":14240.140716616275,"y":16314.556716142033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Fast Line End","project":"Superalgos","id":"88ffc758-994a-4385-a9d6-c28361403f5a","savedPayload":{"position":{"x":13964.875042604868,"y":16130.495798717502},"targetPosition":{"x":14240.140716616275,"y":16314.556716142033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Fast Line End","id":"5b1e120b-33fa-434a-9913-135f3f94edad"}}},{"type":"Polygon Vertex","name":"Fast Line Begin","project":"Superalgos","id":"3a43f15c-ff64-4415-bee8-f458601a3e96","savedPayload":{"position":{"x":14056.78264738161,"y":16038.840279158478},"targetPosition":{"x":14240.140716616275,"y":16314.556716142033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Fast Line Begin","id":"97e0ce46-a22d-49ce-bf5c-bb50ec060d86"}}}],"id":"53d89dd3-df4f-4001-a9cc-a9fa5c7808d4","savedPayload":{"position":{"x":14236.360873547066,"y":16914.75201765375},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 0","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"258f1f9e-4410-4a64-9cd6-e445d4444ba7","savedPayload":{"position":{"x":13702.745808248466,"y":15875.038802026615},"targetPosition":{"x":13969.359500255105,"y":16002.185058927986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"805ec3ae-e0ec-42ba-ba1c-617d5fe24e09","savedPayload":{"position":{"x":13969.359500255105,"y":16002.185058927986},"targetPosition":{"x":14289.638486496271,"y":16154.740841079923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"379a9e22-27fa-4f50-900a-0730cbe0b3d3","savedPayload":{"position":{"x":14052.331481490426,"y":15891.112813263133},"targetPosition":{"x":14289.638486496271,"y":16154.740841079923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"e894f129-e11d-4ec6-8d76-50d39dab5dd5"}}},{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"0ff4fba2-0167-41df-99e5-542a673adf30","savedPayload":{"position":{"x":14171.396090723109,"y":15820.39101464825},"targetPosition":{"x":14289.638486496271,"y":16154.740841079923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"93278c60-4529-454e-989f-771ce3beb3c1"}}}],"id":"e8f5af9d-ba4b-4482-aca7-295b92f60f17","savedPayload":{"position":{"x":14291.290812535648,"y":16847.296392877666},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"1172daa1-fe47-4069-818e-50a800f539ef","savedPayload":{"position":{"x":13893.06119689997,"y":15800.062787087045},"targetPosition":{"x":14139.030902348699,"y":15964.416186511},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1efe1989-3881-41f4-af21-bf32d3fdc64a","savedPayload":{"position":{"x":14139.030902348699,"y":15964.416186511},"targetPosition":{"x":14414.754874111859,"y":16148.379372960488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"0617cdf2-2290-4f79-b132-ce46e33f3eb8","savedPayload":{"position":{"x":14230.462384508712,"y":15872.449127029126},"targetPosition":{"x":14414.754874111859,"y":16148.379372960488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"59d32253-47b9-4227-bc5b-e2f1d5416844"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"cbc04d73-2faf-4808-b1ef-43aa2d1cf509","savedPayload":{"position":{"x":14350.333436877696,"y":15823.030678194007},"targetPosition":{"x":14414.754874111859,"y":16148.379372960488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"ce6a0861-712e-4cf4-81e9-92ab6c8a5f4d"}}}],"id":"3d7a22fa-7a63-4cea-8ce7-d3358bd79ac8","savedPayload":{"position":{"x":14354.397854191131,"y":16790.91251362693},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 30","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"c10e1ba8-3255-4eab-8d43-83315dca23e1","savedPayload":{"position":{"x":14079.954098657792,"y":15648.035814856934},"targetPosition":{"x":14289.333375393791,"y":15857.42583550441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c4dbb4e0-6e92-4304-bba1-76013eb739d4","savedPayload":{"position":{"x":14289.333375393791,"y":15857.42583550441},"targetPosition":{"x":14522.37381540821,"y":16090.207760408486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"1bb29f63-48b2-405c-8b76-5b42be6c1e3f","savedPayload":{"position":{"x":14394.329864329815,"y":15780.64025013279},"targetPosition":{"x":14522.37381540821,"y":16090.207760408486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"3ea0b783-3d43-47d1-90aa-99366cd09a7d"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"86cc6fd9-ca44-42ff-817c-c33d9a4a4558","savedPayload":{"position":{"x":14522.408259668995,"y":15758.672253212442},"targetPosition":{"x":14522.37381540821,"y":16090.207760408486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4e7322f7-3bfa-41cc-b9a0-c5dcbe16e83e"}}}],"id":"49ef61a8-1381-45f0-b7d4-0a95ed9d7e60","savedPayload":{"position":{"x":14427.88390784217,"y":16755.728339537032},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"f18a4f3f-1b4a-4816-9c76-9b6171a6c886","savedPayload":{"position":{"x":14324.687713946754,"y":15529.844927165017},"targetPosition":{"x":14466.527813882756,"y":15791.239264977536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bdcda8bd-a2a3-4dae-8774-7fe7a1bd8df9","savedPayload":{"position":{"x":14466.527813882756,"y":15791.239264977536},"targetPosition":{"x":14621.074502981792,"y":16076.006864731542},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 50","project":"Superalgos","id":"155ecca7-3c3a-40b0-98e0-c4cc97021ba2","savedPayload":{"position":{"x":14586.46038748571,"y":15750.848606168975},"targetPosition":{"x":14621.074502981792,"y":16076.006864731542},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 50","id":"99b1d6a8-0904-43ff-b209-c7c6868181b5"}}},{"type":"Polygon Vertex","name":"End 50","project":"Superalgos","id":"3f22cf14-5acc-4f4d-b19a-108f02fa2e53","savedPayload":{"position":{"x":14712.853631866885,"y":15761.787851885105},"targetPosition":{"x":14621.074502981792,"y":16076.006864731542},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 50","id":"84db0a13-44f1-4953-ab27-d7425ab1ee6b"}}}],"id":"eb850831-fe4c-4fda-9294-df765f377e3e","savedPayload":{"position":{"x":14505.49137372122,"y":16724.97060299985},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 70","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"871bf7be-3e85-43f3-9537-fae86fe3f821","savedPayload":{"position":{"x":14512.392733655088,"y":15468.99084206536},"targetPosition":{"x":14625.38730649422,"y":15741.946523562865},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"692686f4-d4a0-4fd3-b9ac-32ced49b8633","savedPayload":{"position":{"x":14625.38730649422,"y":15741.946523562865},"targetPosition":{"x":14751.192149081158,"y":16045.350359981385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"4742a27b-2eb2-4a18-835e-6fbefb47bdcd","savedPayload":{"position":{"x":14751.194081815393,"y":15715.230718398909},"targetPosition":{"x":14751.192149081158,"y":16045.350359981385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"4f226496-b6a0-436d-97c5-d6e61dd00c23"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"57aca36d-e53c-428f-a961-00f95c636a8c","savedPayload":{"position":{"x":14877.622086392272,"y":15740.422636870771},"targetPosition":{"x":14751.192149081158,"y":16045.350359981385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"22287519-c930-4dfb-bb4a-298da4e32cdf"}}}],"id":"cd93957c-2562-4f27-b3c3-4278231b1241","savedPayload":{"position":{"x":14584.223131281895,"y":16731.51978875375},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 80","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"0a960c41-faa4-4456-8d7c-91215785612f","savedPayload":{"position":{"x":14648.40278969756,"y":15517.704191748435},"targetPosition":{"x":14782.200374032745,"y":15780.654156293193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"d4446b75-1844-4114-9faf-ae3b5641e43d","savedPayload":{"position":{"x":14782.200374032745,"y":15780.654156293193},"targetPosition":{"x":14932.461747102487,"y":16076.326425861622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"7b104c6b-0b09-4efe-9af7-21e18088158a","savedPayload":{"position":{"x":15035.349360977496,"y":15759.549979691443},"targetPosition":{"x":14932.461747102487,"y":16076.326425861622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"fb48eeab-d538-4fc5-81fe-dd916f749477"}}},{"type":"Polygon Vertex","name":"End 80","project":"Superalgos","id":"4bf87284-559e-4154-93f5-988ea7755e80","savedPayload":{"position":{"x":15227.83107009239,"y":15925.624656640039},"targetPosition":{"x":14932.461747102487,"y":16076.326425861622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 80","id":"9a3c052a-a6b6-4392-b2fd-54151febb8f5"}}}],"id":"a25d52fa-a178-4454-8ebc-500572b38d04","savedPayload":{"position":{"x":14674.60987260898,"y":16714.311625083956},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 100","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"a169ba02-78c5-49d9-b212-236fb5e48bad","savedPayload":{"position":{"x":15674.784023349268,"y":16011.89398302409},"targetPosition":{"x":15510.231843257661,"y":16257.937513107705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b71ce594-e5f7-48f0-94a3-8f44ac26c01c","savedPayload":{"position":{"x":15510.231843257661,"y":16257.937513107705},"targetPosition":{"x":15328.83066410559,"y":16528.851004914046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 100","project":"Superalgos","id":"6b947ced-abe6-41e4-8e11-a8777d52a977","savedPayload":{"position":{"x":15650.712254896971,"y":16465.04401764869},"targetPosition":{"x":15328.83066410559,"y":16528.851004914046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 100","id":"f3e69d47-f137-412e-a515-7dc262af7f8b"}}},{"type":"Polygon Vertex","name":"End 100","project":"Superalgos","id":"9ff21949-3190-45a4-8b36-e6d8f291ea7f","savedPayload":{"position":{"x":15601.712003168006,"y":16711.091812352934},"targetPosition":{"x":15328.83066410559,"y":16528.851004914046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 100","id":"29103f63-7cd6-4005-bec7-a385cf373eaf"}}}],"id":"a4dacfad-5901-4ba9-a728-132f0d452680","savedPayload":{"position":{"x":14727.785332558746,"y":16785.541058032082},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 0-20","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"e740b91d-1364-49ea-9878-df9cddbfc805","savedPayload":{"position":{"x":14801.995160216018,"y":15590.35341743311},"targetPosition":{"x":14932.096287700177,"y":15854.809139984567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6c079371-854a-41cb-82cb-3066463c51c5","savedPayload":{"position":{"x":14932.096287700177,"y":15854.809139984567},"targetPosition":{"x":15075.439247330982,"y":16146.725389764557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"fbfe5ddc-2890-4be2-9c46-446bbb49cde0","savedPayload":{"position":{"x":15096.8746851807,"y":15822.40160392652},"targetPosition":{"x":15075.439247330982,"y":16146.725389764557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"e894f129-e11d-4ec6-8d76-50d39dab5dd5"}}},{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"007fe5a0-0fac-4958-8c95-aba6e504e4d5","savedPayload":{"position":{"x":15256.060218545852,"y":15876.501458136829},"targetPosition":{"x":15075.439247330982,"y":16146.725389764557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"93278c60-4529-454e-989f-771ce3beb3c1"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"3d285cd7-11f6-4e20-969b-eec492cab81e","savedPayload":{"position":{"x":15367.022649865521,"y":16003.001103388673},"targetPosition":{"x":15075.439247330982,"y":16146.725389764557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"ce6a0861-712e-4cf4-81e9-92ab6c8a5f4d"}}},{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"779ba063-a7c9-4fa8-bb93-a64917dacbd4","savedPayload":{"position":{"x":15401.71775765116,"y":16167.860373477006},"targetPosition":{"x":15075.439247330982,"y":16146.725389764557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"59d32253-47b9-4227-bc5b-e2f1d5416844"}}}],"id":"518be834-5410-4eee-afc5-369ec833199c","savedPayload":{"position":{"x":14847.171694088589,"y":16765.9426118098},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 20-30","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"42dcb813-82a7-439d-96db-e1838746a098","savedPayload":{"position":{"x":15044.200861982783,"y":15764.286977065669},"targetPosition":{"x":15082.177798541794,"y":15907.467516426286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"057fa196-0288-45ff-ba35-62465f6ea603","savedPayload":{"position":{"x":15082.177798541794,"y":15907.467516426286},"targetPosition":{"x":15165.718147686232,"y":16221.31350258067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"1f65bf18-a749-4221-880b-dc1e2e573ed7","savedPayload":{"position":{"x":15250.345276759075,"y":15906.239731453099},"targetPosition":{"x":15165.718147686232,"y":16221.31350258067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"59d32253-47b9-4227-bc5b-e2f1d5416844"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"4a723692-de81-4fa5-9292-88573a34b816","savedPayload":{"position":{"x":15395.33830688029,"y":15991.79172318524},"targetPosition":{"x":15165.718147686232,"y":16221.31350258067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"ce6a0861-712e-4cf4-81e9-92ab6c8a5f4d"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"ada9ee7e-b823-452e-aab3-2bbb4bf10cc3","savedPayload":{"position":{"x":15481.090965187395,"y":16136.792249410832},"targetPosition":{"x":15165.718147686232,"y":16221.31350258067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4e7322f7-3bfa-41cc-b9a0-c5dcbe16e83e"}}},{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"5d96b5d5-7e34-4a43-891b-273fb9bbf4b6","savedPayload":{"position":{"x":15479.313869113746,"y":16304.928704682641},"targetPosition":{"x":15165.718147686232,"y":16221.31350258067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"3ea0b783-3d43-47d1-90aa-99366cd09a7d"}}}],"id":"bd729215-749b-4893-b21e-fe8add8e3199","savedPayload":{"position":{"x":14837.174364687828,"y":16875.859747454866},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 30-70","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.05,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"48f54b6c-7cd5-4089-b6e2-1f39e2361be7","savedPayload":{"position":{"x":15197.379210862578,"y":15687.764148249116},"targetPosition":{"x":15216.35923730363,"y":15982.574648347845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"20728a48-6ba3-4bf8-b51e-bb57303594f2","savedPayload":{"position":{"x":15216.35923730363,"y":15982.574648347845},"targetPosition":{"x":15237.045995848057,"y":16306.381157256064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"058eb800-ac91-44dd-8b28-6a740f6470ee","savedPayload":{"position":{"x":15380.819731650154,"y":16015.440449418407},"targetPosition":{"x":15237.045995848057,"y":16306.381157256064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"3ea0b783-3d43-47d1-90aa-99366cd09a7d"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"d01decaf-72ca-41e6-aa58-d6dbe505fe29","savedPayload":{"position":{"x":15507.56273970833,"y":16125.946327339409},"targetPosition":{"x":15237.045995848057,"y":16306.381157256064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4e7322f7-3bfa-41cc-b9a0-c5dcbe16e83e"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"f87349bc-dc97-46fd-a88f-a28ba9678a43","savedPayload":{"position":{"x":15561.699800086655,"y":16285.075671388058},"targetPosition":{"x":15237.045995848057,"y":16306.381157256064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"22287519-c930-4dfb-bb4a-298da4e32cdf"}}},{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"fa0278c8-e861-4c72-8795-32186c329c89","savedPayload":{"position":{"x":15529.963508066128,"y":16450.847898812583},"targetPosition":{"x":15237.045995848057,"y":16306.381157256064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"4f226496-b6a0-436d-97c5-d6e61dd00c23"}}}],"id":"f95afd47-9495-44f4-bf5a-8577bd0750c5","savedPayload":{"position":{"x":14961.782586339552,"y":16888.902513095432},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 70-80","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"191e1de4-e807-46e0-9cac-5b0eb4df5b7d","savedPayload":{"position":{"x":15665.482198676924,"y":15914.480753460648},"targetPosition":{"x":15485.392221749815,"y":16149.037315820953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"baa9237a-41ad-49a1-b78d-664bcb893f79","savedPayload":{"position":{"x":15485.392221749815,"y":16149.037315820953},"targetPosition":{"x":15293.42022246364,"y":16412.17421585777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"bdd3f8c1-1194-4472-a681-96a6ee1eedc0","savedPayload":{"position":{"x":15551.407846848033,"y":16209.747242353294},"targetPosition":{"x":15293.42022246364,"y":16412.17421585777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"4f226496-b6a0-436d-97c5-d6e61dd00c23"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"5c4b0947-4269-4fc3-ae1f-c6707c0488d2","savedPayload":{"position":{"x":15596.368057553645,"y":16285.09338464684},"targetPosition":{"x":15293.42022246364,"y":16412.17421585777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"22287519-c930-4dfb-bb4a-298da4e32cdf"}}},{"type":"Polygon Vertex","name":"End 80","project":"Superalgos","id":"c2c40046-c4c9-42de-887d-892ed868bc4e","savedPayload":{"position":{"x":15619.486917090777,"y":16368.123000614289},"targetPosition":{"x":15293.42022246364,"y":16412.17421585777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 80","id":"9a3c052a-a6b6-4392-b2fd-54151febb8f5"}}},{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"e5d1db7f-bceb-4548-a136-bac0f2d23d33","savedPayload":{"position":{"x":15616.910846243638,"y":16471.16852352616},"targetPosition":{"x":15293.42022246364,"y":16412.17421585777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"fb48eeab-d538-4fc5-81fe-dd916f749477"}}}],"id":"b75a1367-e45d-4561-9cf9-b537eba7e103","savedPayload":{"position":{"x":14924.689864321197,"y":16984.791987048375},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 80-100","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"da7f5472-50e7-4083-86e9-5a24dede1557","savedPayload":{"position":{"x":15678.326561538324,"y":16206.533924146303},"targetPosition":{"x":15566.575323889905,"y":16304.292629014306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6ef84309-4ee8-44c5-a4a9-d5dd9634d09f","savedPayload":{"position":{"x":15566.575323889905,"y":16304.292629014306},"targetPosition":{"x":15327.12898795262,"y":16524.862436172007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"fef200a2-c609-4684-9d4d-a84d720f1ee1","savedPayload":{"position":{"x":15619.661171953707,"y":16376.572635916398},"targetPosition":{"x":15327.12898795262,"y":16524.862436172007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"fb48eeab-d538-4fc5-81fe-dd916f749477"}}},{"type":"Polygon Vertex","name":"End 80","project":"Superalgos","id":"dd767960-3de1-49ec-914a-f0b3d54e7786","savedPayload":{"position":{"x":15649.15531535157,"y":16459.218232227882},"targetPosition":{"x":15327.12898795262,"y":16524.862436172007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 80","id":"9a3c052a-a6b6-4392-b2fd-54151febb8f5"}}},{"type":"Polygon Vertex","name":"End 100","project":"Superalgos","id":"6fbf425e-e7e4-481a-a14b-762d2879b614","savedPayload":{"position":{"x":15655.244255967908,"y":16545.282385964838},"targetPosition":{"x":15327.12898795262,"y":16524.862436172007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 100","id":"29103f63-7cd6-4005-bec7-a385cf373eaf"}}},{"type":"Polygon Vertex","name":"Begin 100","project":"Superalgos","id":"41244682-e765-41f6-940a-3cced032f765","savedPayload":{"position":{"x":15632.532385569117,"y":16645.745463255524},"targetPosition":{"x":15327.12898795262,"y":16524.862436172007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 100","id":"f3e69d47-f137-412e-a515-7dc262af7f8b"}}}],"id":"e9077695-93a9-4ef5-ae32-3da768e946b1","savedPayload":{"position":{"x":15002.039975555406,"y":17089.0713977216},"targetPosition":{"x":14584.436743276281,"y":17133.037726411552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"b824fc17-2864-430d-93f2-00d42d159b5a","savedPayload":{"position":{"x":14584.436743276281,"y":17133.037726411552},"targetPosition":{"x":14584.360497041456,"y":17532.3608625606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Stoch 14-3-3","config":"{ \n\"codeName\": \"Panel-Stoch-14-3-3\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Slow Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.slowLine","project":"Superalgos","id":"158086f9-9654-4e33-8292-6a9b7041526a","savedPayload":{"position":{"x":15210.324521090304,"y":17042.487003231865},"targetPosition":{"x":15068.093172926725,"y":17183.663843012888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c332ec98-c6fb-4eeb-a13a-2bda02958a9d","savedPayload":{"position":{"x":15068.093172926725,"y":17183.663843012888},"targetPosition":{"x":14930.743915364332,"y":17333.31278336956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fast Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.fastLine","project":"Superalgos","id":"474d9024-e7ff-46d2-a46f-830c5e55ec30","savedPayload":{"position":{"x":15325.410409067576,"y":17244.130006324696},"targetPosition":{"x":15131.761241181623,"y":17295.280803363756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8249ea87-9d41-431a-b827-c3153fcddd0b","savedPayload":{"position":{"x":15131.761241181623,"y":17295.280803363756},"targetPosition":{"x":14930.743915364332,"y":17333.31278336956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"af6182b0-9814-4ebe-bbe7-7a455d8a6a0e","savedPayload":{"position":{"x":14930.743915364332,"y":17333.31278336956},"targetPosition":{"x":14584.360497041456,"y":17532.3608625606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6a85fbb1-5a99-4ccc-93e8-092f5dbf6c4a","savedPayload":{"position":{"x":14584.360497041456,"y":17532.3608625606},"targetPosition":{"x":14365.186971787978,"y":17911.1677114271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3fcd7ef7-fe1a-42f4-9339-a3bda6859248","savedPayload":{"position":{"x":14315.344334318033,"y":17997.267603246102},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"511bef1e-62d8-4ff9-8d87-15bd0d3d630c","savedPayload":{"position":{"x":14165.344334318033,"y":18257.075224381435},"targetPosition":{"x":14165.344334318033,"y":18257.075224381435},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Buddha.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Buddha.json deleted file mode 100644 index b2411190f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Buddha.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Buddha","config":"{ \n\"codeName\": \"Buddha\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Candle Patterns","config":"{\n\"codeName\": \"Candle-Patterns\",\n\"repo\": \"Candle-Patterns-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates Candles Patterns for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Basic Candles","project":"Superalgos","id":"3e933426-1c7b-45e1-845f-08a7d2684620","savedPayload":{"position":{"x":13014.983786246557,"y":11582.257138896071},"targetPosition":{"x":13214.778358558542,"y":11672.136629478231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"07be5b9b-e8fd-49fc-ab77-20f89fdea10f"}}},{"type":"Output Dataset","name":"Multi-Period-Market One-Candle Patterns","project":"Superalgos","id":"201dc796-db42-49ce-8b9c-1b26c0f3a0ce","savedPayload":{"position":{"x":13055.077268021229,"y":11513.03974999541},"targetPosition":{"x":13214.778358558542,"y":11672.136629478231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"144d8665-1ff0-4db3-9340-a33fd7d0d098"}}},{"type":"Output Dataset","name":"Multi-Period-Market Two-Candles Patterns","project":"Superalgos","id":"c20616cc-d93f-40fc-904a-025fc2799a75","savedPayload":{"position":{"x":13115.919477111813,"y":11469.572073629888},"targetPosition":{"x":13214.778358558542,"y":11672.136629478231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8c35ce52-9dee-4d20-92e6-50ba7fd2882b"}}},{"type":"Output Dataset","name":"Multi-Period-Market Three-Candles Patterns","project":"Superalgos","id":"c8074ffc-f5ff-4cb5-8e83-0adcecc82a0c","savedPayload":{"position":{"x":13212.772990245361,"y":11473.777495327486},"targetPosition":{"x":13214.778358558542,"y":11672.136629478231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"087fc67e-78f9-4204-ba5e-8b670566a716"}}}],"outputDatasetFolders":[],"id":"0dc09316-0987-4d22-b600-bd3868942026","savedPayload":{"position":{"x":13214.778358558542,"y":11672.136629478231},"targetPosition":{"x":13428.975206324332,"y":11986.086624547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candle Patterns Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"2d079388-93e4-4005-b392-c4a997904ccb","savedPayload":{"position":{"x":13237.534092975908,"y":11373.149986684633},"targetPosition":{"x":13395.171017360753,"y":11533.418739091607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"401fbf30-8faa-40e9-9707-fac2d35f6195"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"418e1725-b690-4a55-b5f7-a4a92465c162","savedPayload":{"position":{"x":13379.394277197825,"y":11319.028125288029},"targetPosition":{"x":13395.171017360753,"y":11533.418739091607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"85c548fd-9ef7-4936-a86d-2a206cf90039","savedPayload":{"position":{"x":13535.423300602335,"y":11370.612466915685},"targetPosition":{"x":13395.171017360753,"y":11533.418739091607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"de8bf1ab-cf7b-41ab-b8cb-ae38b1e587ce","savedPayload":{"position":{"x":13395.171017360753,"y":11533.418739091607},"targetPosition":{"x":13428.975206324332,"y":11986.086624547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"401fbf30-8faa-40e9-9707-fac2d35f6195","savedPayload":{"position":{"x":13604.484245632055,"y":11621.514438425625},"targetPosition":{"x":13428.975206324332,"y":11986.086624547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"e100074c-7981-49e1-9d06-813104ee4c41","savedPayload":{"position":{"x":13763.808053874669,"y":11757.047730018578},"targetPosition":{"x":13428.975206324332,"y":11986.086624547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"2a8f2e62-256b-4281-a470-3f640af21337","savedPayload":{"position":{"x":13839.376069589081,"y":11955.762164903854},"targetPosition":{"x":13428.975206324332,"y":11986.086624547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3aaf9f93-0516-4b3d-9772-44be91615154","savedPayload":{"position":{"x":13673.547055064315,"y":11828.852792025047},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates Candles Patterns for Time Frames of 45-min and below.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Basic Candles","project":"Superalgos","id":"3fc6cd67-c356-41fc-89d9-5c1cdcdd7360","savedPayload":{"position":{"x":13816.13407582038,"y":11218.229821634788},"targetPosition":{"x":14024.914213441818,"y":11509.084076315567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"9e6d7f95-b2fe-466e-9a5d-175479cbf85d"}}},{"type":"Output Dataset","name":"Multi-Period-Daily One-Candle Patterns","project":"Superalgos","id":"7b078979-c28c-4ba5-8305-d469c8d4ec84","savedPayload":{"position":{"x":13916.696660630845,"y":11167.747691783157},"targetPosition":{"x":14024.914213441818,"y":11509.084076315567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f0a11771-dd69-4b9a-9347-7cb2d1f231ff"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Two-Candles Patterns","project":"Superalgos","id":"5ab95923-5553-40a7-836e-14b96f8a4764","savedPayload":{"position":{"x":14027.35509650732,"y":11151.098641199766},"targetPosition":{"x":14024.914213441818,"y":11509.084076315567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"4f1260c8-6d74-454e-963a-fa3ff910329c"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Three-Candles Patterns","project":"Superalgos","id":"cb6acbaf-bf43-4bf6-b8ca-7689130cc9cf","savedPayload":{"position":{"x":14138.30595741663,"y":11169.800424894716},"targetPosition":{"x":14024.914213441818,"y":11509.084076315567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b60cb94f-79c5-410c-b166-abc97d0f2bc3"}}}],"outputDatasetFolders":[],"id":"bcfa61bd-e1d0-4a60-9fd5-ab7dabe4fd39","savedPayload":{"position":{"x":14024.914213441818,"y":11509.084076315567},"targetPosition":{"x":14088.25245833815,"y":11932.210584772864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candle Patterns Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"a7ea36fb-cc2e-4d55-b021-e67d8c5a7020","savedPayload":{"position":{"x":14157.216465758505,"y":10965.952053157951},"targetPosition":{"x":14349.440119741212,"y":11267.566043881061},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"3a20d7e9-d551-4346-81c7-e3b0098bef99"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"48b53dc5-015c-43f1-9485-047aaaffe0f7","savedPayload":{"position":{"x":14370.867752494796,"y":10910.523138152665},"targetPosition":{"x":14349.440119741212,"y":11267.566043881061},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"49d2c9ad-bdde-427a-8590-801aa4422cca","savedPayload":{"position":{"x":14576.58288046427,"y":10991.340786924691},"targetPosition":{"x":14349.440119741212,"y":11267.566043881061},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"19bf518a-1e20-4e3a-8f40-8e07324f634b","savedPayload":{"position":{"x":14695.563216568724,"y":11177.673065190746},"targetPosition":{"x":14349.440119741212,"y":11267.566043881061},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"2a7a3bf2-9044-4040-95a7-28c1a339a37f","savedPayload":{"position":{"x":14349.440119741212,"y":11267.566043881061},"targetPosition":{"x":14088.25245833815,"y":11932.210584772864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"3a20d7e9-d551-4346-81c7-e3b0098bef99","savedPayload":{"position":{"x":14646.865168525226,"y":11487.237317302151},"targetPosition":{"x":14088.25245833815,"y":11932.210584772864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"4d03c099-0d5e-4668-a347-c0de2f42f8bd","savedPayload":{"position":{"x":14517.205694996726,"y":11867.65780896113},"targetPosition":{"x":14088.25245833815,"y":11932.210584772864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"3ef2f54d-64c9-4264-a298-0c5a908458ab","savedPayload":{"position":{"x":14488.627801072143,"y":12088.774738519493},"targetPosition":{"x":14088.25245833815,"y":11932.210584772864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8a7ce3e2-20a1-496b-86bf-2d7842f88536","savedPayload":{"position":{"x":13883.029605259044,"y":11995.836643571278},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Basic Candles","config":"{\n \"codeName\": \"Basic-Candles\",\n \"singularVariableName\": \"basicCandle\",\n \"pluralVariableName\": \"basicCandles\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"07be5b9b-e8fd-49fc-ab77-20f89fdea10f","savedPayload":{"position":{"x":14429.499428495954,"y":11862.421488975693},"targetPosition":{"x":14283.329852522562,"y":12204.806962333805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"9e6d7f95-b2fe-466e-9a5d-175479cbf85d","savedPayload":{"position":{"x":14602.818863919903,"y":12014.30756076982},"targetPosition":{"x":14283.329852522562,"y":12204.806962333805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"Basic Candles Variables","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"7d35e864-2f37-4d1c-912d-225952131ffd","savedPayload":{"position":{"x":15129.243287532458,"y":11824.134815744605},"targetPosition":{"x":15388.99249074521,"y":11926.599241905862},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"52215804-fb71-43ed-a232-3b29d843cb58","savedPayload":{"position":{"x":15388.99249074521,"y":11926.599241905862},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"bdeaed7f-2923-4fde-a7ea-257f00bb7ee9","savedPayload":{"position":{"x":15247.376659101321,"y":11616.429862222518},"targetPosition":{"x":15467.824581886814,"y":11788.171272692558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b8f2240b-03a9-4fd5-8e37-d43237554239","savedPayload":{"position":{"x":15467.824581886814,"y":11788.171272692558},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"name","config":"{\n \"codeName\": \"name\",\n \"isString\": true\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.name","project":"Superalgos","id":"5ac4a021-ae1b-45d7-80ea-09587174c038","savedPayload":{"position":{"x":15419.011314631667,"y":11451.044136715682},"targetPosition":{"x":15582.279156445209,"y":11677.806977603619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8220f919-2232-47b2-8bcb-1d30a905c026","savedPayload":{"position":{"x":15582.279156445209,"y":11677.806977603619},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"size","config":"{ \n\"codeName\": \"size\",\n\"isString\": true\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.size","project":"Superalgos","id":"8162dea0-df67-42b5-8223-7533f950af7a","savedPayload":{"position":{"x":15630.6078130856,"y":11340.325751231114},"targetPosition":{"x":15723.178341340054,"y":11604.138136336996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2bff73a1-c5c2-4413-91ed-9d2aaf642d83","savedPayload":{"position":{"x":15723.178341340054,"y":11604.138136336996},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"direction","config":"{ \n\"codeName\": \"direction\",\n\"isString\": true\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.direction","project":"Superalgos","id":"770f6a35-9069-49ba-9c12-99dc6e5ff54a","savedPayload":{"position":{"x":15864.6019370542,"y":11294.021315218213},"targetPosition":{"x":15879.140202020233,"y":11573.350186612335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"871bc42d-f3f7-4896-b575-ca23f325e50f","savedPayload":{"position":{"x":15879.140202020233,"y":11573.350186612335},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"upperShadowPercent","config":"{ \n\"codeName\": \"upperShadowPercent\",\n\"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.upperShadowPercent","project":"Superalgos","id":"1645f231-45ab-48b5-9891-45f27e2b4d7e","savedPayload":{"position":{"x":16101.688147018427,"y":11315.385043740624},"targetPosition":{"x":16037.203167345226,"y":11587.439677066533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dec83c16-8f66-4403-9dda-e536223e7577","savedPayload":{"position":{"x":16037.203167345226,"y":11587.439677066533},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bodyPercent","config":"{ \n\"codeName\": \"bodyPercent\",\n\"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bodyPercent","project":"Superalgos","id":"36408e7c-d9cc-4d63-9115-feffa763b85f","savedPayload":{"position":{"x":16323.3271767567,"y":11402.876662737315},"targetPosition":{"x":16185.002270012663,"y":11645.769192265496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cba04177-1edd-444f-94a3-79784d84d70e","savedPayload":{"position":{"x":16185.002270012663,"y":11645.769192265496},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"lowerShadowPercent","config":"{ \n\"codeName\": \"lowerShadowPercent\",\n\"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.lowerShadowPercent","project":"Superalgos","id":"71464adc-3bd3-47b8-b018-cbacf897c119","savedPayload":{"position":{"x":16511.899377484784,"y":11549.415296286841},"targetPosition":{"x":16310.588429800731,"y":11743.351766947995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c2c5753a-2e74-4429-9b6a-aa016a753be2","savedPayload":{"position":{"x":16310.588429800731,"y":11743.351766947995},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"body","config":"{ \n\"codeName\": \"body\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.body","project":"Superalgos","id":"1bc97398-5645-4452-9169-f62efc0a7fe1","savedPayload":{"position":{"x":16651.166773352088,"y":11742.835073049886},"targetPosition":{"x":16403.42177829525,"y":11872.281392297455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f0019951-d651-4fcf-888e-0a0cf1564c98","savedPayload":{"position":{"x":16403.42177829525,"y":11872.281392297455},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"upperShadow","config":"{ \n\"codeName\": \"upperShadow\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.upperShadow","project":"Superalgos","id":"cf426ed9-53d3-411e-acf1-1694c5d45b89","savedPayload":{"position":{"x":16730.380746441642,"y":11968.19154389479},"targetPosition":{"x":16456.162628415535,"y":12022.378329780688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2d3b26eb-15bc-4272-b296-9658ac24baa9","savedPayload":{"position":{"x":16456.162628415535,"y":12022.378329780688},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"lowerShadow","config":"{ \n\"codeName\": \"lowerShadow\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.lowerShadow","project":"Superalgos","id":"a0909b34-9ad9-4290-aa93-5b1731b74a66","savedPayload":{"position":{"x":16743.31632659626,"y":12205.797448695635},"targetPosition":{"x":16464.707488103875,"y":12180.795524895917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2369782b-6afb-41e1-a93f-721c7442e5c3","savedPayload":{"position":{"x":16464.707488103875,"y":12180.795524895917},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"length","config":"{ \n\"codeName\": \"length\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.length","project":"Superalgos","id":"3639b9ee-c558-4699-9b48-2ddfdc59fa33","savedPayload":{"position":{"x":16688.273081653006,"y":12437.82198027461},"targetPosition":{"x":16428.126570073153,"y":12335.541564105808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a6773db1-97fb-418d-b7cf-d4298054f376","savedPayload":{"position":{"x":16428.126570073153,"y":12335.541564105808},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"meanBody","config":"{ \n\"codeName\": \"meanBody\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.meanBody","project":"Superalgos","id":"a45ab78a-fa03-469b-ab64-78fd184d9dd5","savedPayload":{"position":{"x":16569.867932578516,"y":12645.266998771447},"targetPosition":{"x":16349.247405251437,"y":12473.599366566521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c32b5645-7bbe-4f06-aaef-d9efc3a5c9da","savedPayload":{"position":{"x":16349.247405251437,"y":12473.599366566521},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"avgRef","config":"{ \n\"codeName\": \"avgRef\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.avgRef","project":"Superalgos","id":"26313abc-cd03-4fb9-b54d-2a0d67a3c0da","savedPayload":{"position":{"x":16398.261419139122,"y":12810.825002702051},"targetPosition":{"x":16234.862290877978,"y":12584.014468388723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0bdc3b36-d092-421f-8741-a0ecfa8fcc41","savedPayload":{"position":{"x":16234.862290877978,"y":12584.014468388723},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Nbodies","config":"{ \n\"codeName\": \"Nbodies\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.Nbodies","project":"Superalgos","id":"f5b650b4-497d-4eef-84f8-c53b5703dbed","savedPayload":{"position":{"x":16186.760705380975,"y":12921.189377405359},"targetPosition":{"x":16093.936192872909,"y":12657.556085203687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cf0a624b-44cb-4926-8e26-867ea485e3fe","savedPayload":{"position":{"x":16093.936192872909,"y":12657.556085203687},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"dojiFactor","config":"{ \n\"codeName\": \"dojiFactor\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.dojiFactor","project":"Superalgos","id":"8e3696bf-dace-4ecb-a9e7-db654ba86ed8","savedPayload":{"position":{"x":15952.642682322414,"y":12967.68130835875},"targetPosition":{"x":15937.968286973177,"y":12688.550813565324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cda80e33-8ed9-4579-8c45-99da25652634","savedPayload":{"position":{"x":15937.968286973177,"y":12688.550813565324},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"sizeFactor","config":"{ \n\"codeName\": \"sizeFactor\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.sizeFactor","project":"Superalgos","id":"08e5507c-e88f-410e-ac54-886d8ce157d2","savedPayload":{"position":{"x":15716.216018659268,"y":12946.362671417126},"targetPosition":{"x":15780.184456097635,"y":12674.089581342421},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"20fadb1a-1f55-4b10-ba45-cda61d8d0157","savedPayload":{"position":{"x":15780.184456097635,"y":12674.089581342421},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Nlengths","config":"{ \n\"codeName\": \"Nlengths\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.Nlengths","project":"Superalgos","id":"addc3851-bbe2-47ac-8652-5b745e12918a","savedPayload":{"position":{"x":15483.007484289848,"y":12861.900448901255},"targetPosition":{"x":15632.195168072496,"y":12615.836762976822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0a736450-a2e1-41a0-8c29-cd2434296872","savedPayload":{"position":{"x":15632.195168072496,"y":12615.836762976822},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"sizeMethod","config":"{ \n\"codeName\": \"sizeMethod\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.sizeMethod","project":"Superalgos","id":"e2109d1f-c4aa-46d6-a6b7-75d1ffd9c0ee","savedPayload":{"position":{"x":15305.868101737338,"y":12712.201889069782},"targetPosition":{"x":15506.756772073697,"y":12518.276975819734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"23853614-5c16-4e3e-b1ae-d3fda37d5884","savedPayload":{"position":{"x":15506.756772073697,"y":12518.276975819734},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"meanLength","config":"{ \n\"codeName\": \"meanLength\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.meanLength","project":"Superalgos","id":"4731c75f-5e23-4972-ba37-10bd4363ee0d","savedPayload":{"position":{"x":15166.333772429985,"y":12518.535002264252},"targetPosition":{"x":15413.754311010802,"y":12389.220491605309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fc7702c5-1b49-4ed6-b2b3-fde741557115","savedPayload":{"position":{"x":15413.754311010802,"y":12389.220491605309},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"min","config":"{ \n\"codeName\": \"min\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.candleMin","project":"Superalgos","id":"016b76f2-2f06-408e-986f-e29cd5edc107","savedPayload":{"position":{"x":15087.192376188927,"y":12293.040838855068},"targetPosition":{"x":15360.929549903689,"y":12238.98465603514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"31730ec0-eedf-404d-9a38-bd065bdc2064","savedPayload":{"position":{"x":15360.929549903689,"y":12238.98465603514},"targetPosition":{"x":15908.457406498463,"y":12130.867596842687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4d364dfd-44f1-4d8e-87fd-5aa54564e167","savedPayload":{"position":{"x":15908.457406498463,"y":12130.867596842687},"targetPosition":{"x":14283.329852522562,"y":12204.806962333805},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* ¡¡¡ VERY IMPORTANT !!!\n\"PLEASE READ BEFORE STARTING ALL DOCUMENTATION RELATED TO THIS INDICATOR ON THE SUPERALGOS WEBSITE\" */\n\n/* INTRODUCTION:\nThere are a lot of combinations in order to construct a candle. That's why we are going to define 4 families of candles based on their appearence.\n1) “CLASSIC CANDLES”: These candles have two shadows shorter than the body.\n2) “MARUBOZU CANDLES”: These candles have no at least one shadow. The shadow, if present, cannot be longer than the body. \n3) “SPINNING TOP CANDLES”: These candles have differents opening and closing prices and have at least one shadow. At the same time at least one shadow has to be longer than the body.\n4) “DOJI CANDLES”: These candles have no body. The open price is equal to the close price. */\n\n// ---------------------------------------------------------------------------------------------------------------------\n// From here the variables to be used will be defined\n// ---------------------------------------------------------------------------------------------------------------------\n\n/* The following variables could be modified by the user to adapt the indicator with his preferences\n(Please, read the documentation before) */\n\nlet sizeMethod = \"SMA\" // Choose \"SMA\" or \"EMA\" to calculate the average length of the last \"Nlengths\" candles\nlet Nlengths = 20 // Default value: 20 - \"Nlengths\" is the number of candles to calculate the average length value\nlet sizeFactor = 75 // Default value: 75% - \"sizeFactor\" is to define \"Long\" or \"Short\" size\nlet Nbodies = 10 // Default value: 10 - \"Nbodies\" is the number of bodies to calculate the average bodie value\nlet dojiFactor = 3 // Default value: 3% - \"dojiFactor\" is to define when a candle is \"doji\" or not\n\n /* In order to avoid errors, the initial condition of the name of the candle is defined */\nvariable.name = \"Unknown\" // To be used on the Plotter Panel and Conditions\n\n/* Candles as dependencies are defined */\nlet candle = record.current \n\n/* The height of the body */\nlet body = Math.abs (candle.close-candle.open)\n\n/* Array of N bodies is defined to verify if a candle has a Short Body or a Long Body */\nif (variable.lastNbodies.length > Nbodies) {\n variable.lastNbodies.shift() // Remove the first element of the array to keep it at a maximun of N elements\n}\nlet meanBody \nif (variable.lastNbodies.length < Nbodies) { // If \"lastNbodies\" array hasn't enough bodies, zero value is defined\n meanBody = 0 \n} else { \n let sum = 0 // Initialize sum variable \n for (let i = variable.lastNbodies.length-Nbodies; i < variable.lastNbodies.length; i++) { // Iterate through the last periods\n sum = sum + variable.lastNbodies[i]\n } \n meanBody = sum/Nbodies\n}\nvariable.lastNbodies.push(body) // Add the current body value to the \"lastNbodies\" array for next cycle\n\n /* Total length of the candle, equivalent to the sum of upper shadow, lower shadow and body */\nlet length = candle.max - candle.min \n\n/* Calculating average candles length \"EMA\" or \"SMA\" */\nif (sizeMethod === \"EMA\") {\n let k = 2 / (Nlengths + 1)\n variable.EMAlength = length * k + variable.previousEMAlength * (1-k)\n variable.previousEMAlength = variable.EMAlength\n variable.avgRef = variable.EMAlength * sizeFactor / 100\n variable.SMAlength = 0\n} \nif (sizeMethod === \"SMA\") {\n variable.EMAlength = 0\n if (variable.lastNlengths.length > Nlengths) {\n variable.lastNlengths.shift() // Remove the first element of the array to keep it at a maximun of N elements \n } \n if (variable.lastNlengths.length < Nlengths) { // If \"lastNlengths\" array hasn't enough candles length, zero value is defined\n variable.SMAlength = 0 \n variable.avgRef = 0 \n } else { \n let sum = 0 // Initialize sum variable \n for (let i = variable.lastNlengths.length-Nlengths; i < variable.lastNlengths.length; i++) { // Iterate through the last periods\n sum = sum + variable.lastNlengths[i]\n } \n variable.SMAlength = sum/Nlengths\n variable.avgRef = variable.SMAlength * sizeFactor / 100 // To be used in Shapes\n }\n variable.lastNlengths.push(length) // Add the current length value to the \"lastNlengths\" array for next cycle\n}\n\n/* Only one MA is calculated, the other is defined as 0. It is useful to integrate both variables into one for future operations */\nvariable.meanLength = variable.SMAlength + variable.EMAlength // To be used in Shapes and Conditions\n\n/* Defining if a candle is \"Long\" or \"Short\" */\nlet size\nif (length > variable.avgRef) {\n size = \"Long\"\n} else {\n size = \"Short\"\n} \n\n/* Green candles are \"Bullish\" and red candles are \"Bearish\" */\nlet direction \nif (candle.close > candle.open) {\n direction = \"Bullish\"\n} else {\n direction = \"Bearish\"\n}\n\n/* The value of the upper shadow */\nlet upperShadow \nif (direction === \"Bullish\") {\n upperShadow = candle.max-candle.close\n} else {\n upperShadow = candle.max-candle.open\n}\n\n/* The value of the lower shadow */\nlet lowerShadow \nif (direction === \"Bullish\") {\n lowerShadow = candle.open-candle.min\n} else {\n lowerShadow = candle.close-candle.min\n}\n\n/* Four possibilities of combinations of the shadows are defined: \"lower\", \"upper\", \"both\", \"none\" */\nlet shadow\nif (upperShadow > 0 && lowerShadow > 0) {\n shadow = \"Both\"\n}\nif (upperShadow === 0 && lowerShadow === 0) {\n shadow = \"None\"\n}\nif (upperShadow > 0 && lowerShadow === 0) {\n shadow = \"Upper\"\n}\nif (upperShadow === 0 && lowerShadow > 0) {\n shadow = \"Lower\"\n}\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here the name of the candles will be defined\n// ----------------------------------------------------------------------------------------------------------------------------\n\nif (body > length*dojiFactor/100) { // From here all kind of candles that are NOT \"doji\" are defined\n\n/* \"CLASSIC CANDLES\" family:\nThese candles have the following characteristics in common:\n1) Both shadows are present.\n2) Each shadow is shorter than the body. \n3) The opening price differs from the closing price. */\n\nif (shadow === \"Both\" && upperShadow <= body && lowerShadow <= body) {\n\n/* \"SHORT GREEN CANDLE\" and \"SHORT RED CANDLE\" properties:\n1) Bullish or Bearish.\n2) Relative Size: Short. */\n\nif (direction === \"Bullish\" && size === \"Short\") {\n variable.name = \"Short Green Candle\"\n}\nif (direction === \"Bearish\" && size === \"Short\") {\n variable.name = \"Short Red Candle\"\n}\n\n/* \"GREEN CANDLE\" and \"RED CANDLE\" properties: \n1) Bullish or Bearish.\n2) Relative Size: Long . */\n\nif (direction === \"Bullish\" && size === \"Long\") {\n variable.name = \"Green Candle\"\n}\nif (direction === \"Bearish\" && size === \"Long\") {\n variable.name = \"Red Candle\"\n}\n\n/* \"LONG GREEN CANDLE\" and \"LONG RED CANDLE\" properties:\n1) Bullish or Bearish respectively.\n2) The body is at least three times higher than the mean body.\n4) Relative Size: Long. */\n\nif (direction === \"Bullish\" && size === \"Long\" && body >= meanBody*3) {\n variable.name = \"Long Green Candle\"\n}\nif (direction === \"Bearish\" && size === \"Long\" && body >= meanBody*3) {\n variable.name = \"Long Red Candle\"\n}\n\n} // Closing \"Classic Candles\" Family \n\n/* \"MARUBOZU CANDLES\" family:\nThese candles have the following characteristics in common:\n1) Lack at least one shadow.\n2) If it has one shadow, it must be shorter than the body.\n3) The opening price differs from the closing price.\n4) Relative Size: Short or Long. */\n\n/* \"GREEN MARUBOZU\" and \"RED MARUBOZU\" properties: \n1) Bullish or Barish.\n2) No shadows. */\n\nif (direction === \"Bullish\" && shadow === \"None\") {\n variable.name = \"Green Marubozu\"\n}\nif (direction === \"Bearish\" && shadow === \"None\") {\n variable.name = \"Red Marubozu\"\n}\n\n/* \"OPENING GREEN MARUBOZU\" properties: \n1) Bullish.\n2) No lower shadow. */\n\nif (direction === \"Bullish\" && shadow === \"Upper\" && upperShadow <= body) {\n variable.name = \"Opening Green Marubozu\"\n}\n\n/* \"CLOSING GREEN MARUBOZU\" properties:\n1) Bullish.\n2) No upper shadow. */\n\nif (direction === \"Bullish\" && shadow === \"Lower\" && lowerShadow <= body) {\n variable.name = \"Closing Green Marubozu\"\n}\n\n/* \"CLOSING RED MARUBOZU\" properties:\n1) Bearish.\n2) No lower shadow. */\n\nif (direction === \"Bearish\" && shadow === \"Upper\" && upperShadow <= body) {\n variable.name = \"Closing Red Marubozu\"\n}\n\n/* \"OPENING RED MARUBOZU\" properties: \n1) Bearish.\n2) No upper shadow. */\n\nif (direction === \"Bearish\" && shadow === \"Lower\" && lowerShadow <= body) {\n variable.name = \"Opening Red Marubozu\"\n}\n\n/* \"SPINNING TOP CANDLES\" family:\nThese candles have the following characteristics in common:\n1) Have at least one shadow.\n2) At least one shadow is greater than the body.\n3) The opening price differs from the closing price. */\n\n/* \"GREEN SPINNING TOP\" and \"RED SPINNING TOP\" properties:\n1) Bullish or Bearish.\n4) Relative Size: Short or Long. \n5) If it's relative size is Long, none of the shadows can exceed three times the body. */\n\nif (shadow !== \"None\") { \n if (upperShadow > body || lowerShadow > body) { \n if (size === \"Long\") {\n if (upperShadow > 3*body || lowerShadow > 3*body) {\n } else {\n if (direction === \"Bullish\") {\n variable.name = \"Green Spinning Top\"\n } else {\n variable.name = \"Red Spinning Top\"\n }\n } \n } else {\n if (direction === \"Bullish\") {\n variable.name = \"Green Spinning Top\"\n } else {\n variable.name = \"Red Spinning Top\"\n }\n }\n } \n} \n\n/* \"HIGH WAVE\" properties:\n1) Bullish or Bearish.\n2) Relative Size: Long.\n3) The length of at least one shadow is at least 3 times larger than the body.*/\n\nif (shadow !== \"None\" && size === \"Long\") {\n if (upperShadow > 3*body || lowerShadow > 3*body) { \n variable.name = \"High Wave\"\n } \n}\n\n} else { // Closing the initial \"dojiFactor\" if condition, from here \"Doji Candles\" family are defined \n\n/* \"DOJI CANDLES\" family:\nThese candles have the following characteristics in common:\n1) Have no body, or very small body if it is allowed. */\n\n/* \"FOUR-PRICE DOJI\" properties:\n1) No shadows.\n2) Relative Size: Short.*/\n\nif (shadow === \"None\" && size === \"Short\") {\n variable.name = \"Four-Price Doji\"\n}\n\n/* \"STAR DOJI\" properties:\n1) Body is located nearly mid-range (between 60% and 40% of total length).\n2) Relative Size: Short. */\n\nif (size === \"Short\" && upperShadow <= length * 0.6 && upperShadow >= length * (0.4 - dojiFactor/100)) {\n variable.name = \"Star Doji\"\n}\n\n/* \"LONG-LEGGED DOJI\" properties:\n1) Body is located nearly mid-range (between 60% and 40% of total length).\n2) Relative Size: Long. */\n\nif (size === \"Long\" && upperShadow <= length * 0.6 && upperShadow >= length * (0.4 - dojiFactor/100)) {\n variable.name = \"Long-Legged Doji\"\n}\n\n/* \"DRAGONFLY DOJI\" properties:\n1) Upper shadow shorter than 1% of total candle length.\n2) Relative Size: Long. */\n\nif (size === \"Long\" && upperShadow <= length * 0.01) {\n variable.name = \"Dragonfly Doji\"\n}\n\n/* \"GRAVESTONE DOJI\" properties:\n1) Lower shadow shorter than 1% of total candle length.\n2) Relative Size: Long.*/\n\nif (size === \"Long\" && lowerShadow <= length * 0.01) {\n variable.name = \"Gravestone Doji\"\n}\n\n/* \"GENERIC DOJI\" properties:\n1) None of the above five Doji. */\n\nif (variable.name === \"Unknown\") {\n variable.name = \"Generic Doji\"\n}\n\n} // Closing the \"dojiFactor\" else\n\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here all the variables that will be written in the records are defined \n// ----------------------------------------------------------------------------------------------------------------------------\n\nvariable.size = size // To be used on the Plotter Panel and Conditions\nvariable.direction = direction // To be used on the Plotter Panel and Conditions\nif (length > 0) { // Condition to avoid dividing by 0\n variable.upperShadowPercent = upperShadow/length*100 // To be used on the Plotter Panel\n variable.bodyPercent = body/length*100 // To be used on the Plotter Panel\n variable.lowerShadowPercent = lowerShadow/length*100 // To be used on the Plotter Panel\n} else {\n variable.lowerShadowPercent = 0\n variable.bodyPercent = 0\n variable.upperShadowPercent = 0\n}\nvariable.Nbodies = Nbodies // To be used on the Plotter Panel\nvariable.sizeFactor = sizeFactor // To be used on the Plotter Panel\nvariable.dojiFactor = dojiFactor // To be used on the Plotter Panel\nvariable.Nlengths = Nlengths // To be used on the Plotter Panel\nvariable.sizeMethod = sizeMethod // To be used on the Plotter Panel\nvariable.candleMin = candle.min // To be used in Shapes\nvariable.length = length // To be used in Conditions\nvariable.upperShadow = upperShadow // To be used in Conditions\nvariable.lowerShadow = lowerShadow // To be used in Conditions\nvariable.body = body // To be used in Conditions\nvariable.meanBody = meanBody // To be used in Conditions\n","project":"Superalgos","id":"119670a5-5f25-4a75-aaad-6939a18aebf0","savedPayload":{"position":{"x":15579.516220036843,"y":12833.79593882529},"targetPosition":{"x":15204.206835650482,"y":12764.548294837272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"f"}}},"id":"351fa6f0-1fbb-4e1b-9d95-3599476aed35","savedPayload":{"position":{"x":15204.206835650482,"y":12764.548294837272},"targetPosition":{"x":14840.804608935641,"y":12692.328685529812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* ¡¡¡ VERY IMPORTANT !!!\n\"PLEASE READ BEFORE STARTING ALL DOCUMENTATION RELATED TO THIS INDICATOR ON THE SUPERALGOS WEBSITE\" */\n\n/* It is necessary to define when a candle has a long or a short body. To do that, the bodies of the last N candles have to be averaged. */\nvariable.lastNbodies = [ ] // Define \"lastNbodies\" array to record the value of the last N bodies (SMA)\n\n/* It is necessary to define when a candle is \"Long\" or \"Short\". To do that, the length of the last N candles have to be averaged. */\nvariable.previousEMAlength = 0 // Initialize the variable previous enter to the main loop (EMA)\nvariable.lastNlengths = [ ] // Define \"lastNlengths\" array to record the value of the last N candles length (SMA)","project":"Superalgos","id":"70e6788a-2518-48cf-8493-27f1e7e5ad61","savedPayload":{"position":{"x":15020.37890023752,"y":13220.843768053062},"targetPosition":{"x":14960.579661234819,"y":13044.348974023158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b2207a1-b217-4c06-92bd-6985d621d035","savedPayload":{"position":{"x":14960.579661234819,"y":13044.348974023158},"targetPosition":{"x":14840.804608935641,"y":12692.328685529812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f2638b08-3f3b-4574-9e89-dc41f984273d","savedPayload":{"position":{"x":14840.804608935641,"y":12692.328685529812},"targetPosition":{"x":14283.329852522562,"y":12204.806962333805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7519e3d8-b5ec-47eb-84c9-8c9262c9efc6","savedPayload":{"position":{"x":13998.460742582565,"y":12236.531792711887},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Basic Candles","id":"09e0a24c-ead1-40c6-9e43-72b46e4294c5"}}},{"type":"Product Definition","name":"One-Candle Patterns","config":"{\n \"codeName\": \"One-Candle-Patterns\",\n \"singularVariableName\": \"oneCandlePattern\",\n \"pluralVariableName\": \"oneCandlePatterns\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"144d8665-1ff0-4db3-9340-a33fd7d0d098","savedPayload":{"position":{"x":14265.53207855157,"y":12269.273955199298},"targetPosition":{"x":13998.206916384088,"y":12502.65451533993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"f0a11771-dd69-4b9a-9347-7cb2d1f231ff","savedPayload":{"position":{"x":14351.946244442994,"y":12471.653787653035},"targetPosition":{"x":13998.206916384088,"y":12502.65451533993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"One-Candle Patterns Records","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"6269672d-95af-44a9-8f10-52f7d4a6892b","savedPayload":{"position":{"x":14473.8524896505,"y":12288.612654418435},"targetPosition":{"x":14649.901188811004,"y":12643.417319301294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"023fd450-0cae-4b41-8cb2-c446ac69bf32","savedPayload":{"position":{"x":14649.901188811004,"y":12643.417319301294},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"6902c73f-da76-4ca0-b8c2-4ac0351c9a59","savedPayload":{"position":{"x":14926.189834389774,"y":12208.380102559275},"targetPosition":{"x":14882.159237823356,"y":12602.621949843126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ebafaaab-38a0-4bed-a8ea-169f0e92b1cb","savedPayload":{"position":{"x":14882.159237823356,"y":12602.621949843126},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"name","config":"{ \n\"codeName\": \"name\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.name","project":"Superalgos","id":"ae345ad9-8364-4e58-bd0a-8b44803b1d98","savedPayload":{"position":{"x":15348.03021166192,"y":12385.058327194482},"targetPosition":{"x":15098.51072113082,"y":12692.50978268222},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b633fced-5335-4a72-b0cf-ebb6237e2a17","savedPayload":{"position":{"x":15098.51072113082,"y":12692.50978268222},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trend","config":"{ \n\"codeName\": \"trend\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trend","project":"Superalgos","id":"5cd8361b-112f-4a4f-9fcd-42a2ff493e96","savedPayload":{"position":{"x":15608.487815845818,"y":12761.989618686854},"targetPosition":{"x":15231.13617583379,"y":12886.023149732213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"853f4eb3-8068-47d1-9726-22b0c7e835ad","savedPayload":{"position":{"x":15231.13617583379,"y":12886.023149732213},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"forecast","config":"{ \n\"codeName\": \"forecast\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.forecast","project":"Superalgos","id":"3b9c18d5-c9e8-4fad-bb3c-1c46751b91a9","savedPayload":{"position":{"x":15622.446093923038,"y":13219.698462899583},"targetPosition":{"x":15239.613291640406,"y":13121.034943380095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1325daec-fb39-4cb8-acec-14adc2ee94e9","savedPayload":{"position":{"x":15239.613291640406,"y":13121.034943380095},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendLine","config":"{ \n\"codeName\": \"trendLine\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendLine","project":"Superalgos","id":"d4a6b997-360b-442b-a08c-b75c331a6a84","savedPayload":{"position":{"x":15187.675663544322,"y":13396.476996388561},"targetPosition":{"x":15117.853286544918,"y":13321.592753983668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"e1a74ac9-f660-4d09-89e9-f8eaebf137c4","savedPayload":{"position":{"x":15117.853286544918,"y":13321.592753983668},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bearishArrowHead","config":"{ \n\"codeName\": \"bearishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bearishArrowHead","project":"Superalgos","id":"7ca628f3-61d6-4b1f-a4a8-610d07bd8bdb","savedPayload":{"position":{"x":14926.722552424842,"y":13526.113964868788},"targetPosition":{"x":14908.492220087795,"y":13425.763796985188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d9837267-f999-420e-8906-169c546fc7f5","savedPayload":{"position":{"x":14908.492220087795,"y":13425.763796985188},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bullishArrowHead","config":"{ \n\"codeName\": \"bullishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bullishArrowHead","project":"Superalgos","id":"9ddcf2bf-57b5-489e-a7a5-496afd9b7301","savedPayload":{"position":{"x":14642.55236953215,"y":13499.861945306066},"targetPosition":{"x":14681.069393878104,"y":13408.688552965164},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c474fa25-64ec-470c-ab04-4132e0f3f9a3","savedPayload":{"position":{"x":14681.069393878104,"y":13408.688552965164},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"period","config":"{ \n\"codeName\": \"period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.period","project":"Superalgos","id":"4986b4c7-0753-4bab-bf62-906acab4c408","savedPayload":{"position":{"x":14329.018776064038,"y":13366.23591873779},"targetPosition":{"x":14493.157768528112,"y":13252.702501087604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"49eea75b-d5c8-44cd-afa7-8689127ac9ae","savedPayload":{"position":{"x":14493.157768528112,"y":13252.702501087604},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendMethod","config":"{ \n\"codeName\": \"trendMethod\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendMethod","project":"Superalgos","id":"8fdf87c8-a467-49a9-9b6a-e70cd12a2b93","savedPayload":{"position":{"x":14220.488111480323,"y":13036.859866732877},"targetPosition":{"x":14419.778101048061,"y":13030.109839394509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6337c29e-3df8-4e54-82ab-a2cdeb800a1b","savedPayload":{"position":{"x":14419.778101048061,"y":13030.109839394509},"targetPosition":{"x":14835.511165473516,"y":13016.43466830023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"02d96f47-c6f0-4423-a144-4799f4023c99","savedPayload":{"position":{"x":14835.511165473516,"y":13016.43466830023},"targetPosition":{"x":13998.206916384088,"y":12502.65451533993},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"One-Candle Patterns Code","code":"// -----------------------------------------------------------------------------------------------------------------------------\n// From here the variables that will be used during the definition of the patterns will be defined\n// -----------------------------------------------------------------------------------------------------------------------------\n\n/* The following variables could be modified by the user to adapt the indicator with his preferences\n(Please, read the documentation before) */\nlet N = 10 // Default value: 10 periods - \"N\" is the period to calculate the Moving Average of the trend line (between 5 and 20) \nvariable.trendMethod = \"SMA\" // Choose \"SMA\" or \"EMA\" to calculate the Moving Average of the trend line\n\n /* In order to avoid errors, the initial condition of the output variables are defined */\nvariable.name = \"No Pattern\" // The name of the one-candle pattern\nvariable.forecast = \"None\" // The forecast of the pattern\n\n/* \"Candles\" and \"Basic Candles\" are dependencies */\nlet candle = record.current // Calling \"Candles\"\nlet basicCandle = getElement ('basicCandles', candle) // Calling \"Basic Candles\"\n\n/* To define if the trend is Up or Down , it is necessary to average the candle closes of the last N candles. */\nif (variable.trendMethod === \"SMA\") {\n variable.lastN.push(candle.close) // Add the current Candle Close value to the \"lastN\" array\n if (variable.lastN.length > N) {\n variable.lastN.shift() // Remove the first element of the array to keep it at a maximun of N elements\n }\n let smaN\n if (variable.lastN.length < N) { // If the array \"lastN\" has not enough Candle Closes, the value zero for the smaN is defined\n smaN = 0 \n } else { \n let sum = 0 // Initialize sum variable \n for (let i = variable.lastN.length-N; i < variable.lastN.length; i++) { // Iterate through the last periods\n sum = sum + variable.lastN[i]\n } \n smaN = sum/N\n variable.lastMA.push(smaN) // Add the current SMA value to the \"lastMA\" array\n if (variable.lastMA.length > 4) {\n variable.lastMA.shift() // Remove the first element of the array to keep it at a maximun of 4 SMA's\n }\n }\n}\n\nif (variable.trendMethod === \"EMA\") {\n let k = 2 / (N + 1)\n variable.ema = candle.close * k + variable.previousEMA * (1-k)\n variable.previousEMA = variable.ema\n if (variable.ema === undefined) {\n variable.lastMA.push(0)\n } else { \n variable.lastMA.push(variable.ema) // Add the current EMA value to the \"lastMA\" array\n } \n if (variable.lastMA.length > 4) {\n variable.lastMA.shift() // Remove the first element of the array to keep it at a maximun of 4 EMA's\n }\n} \n\n/* Calling the 3 last and current Moving Averages of the \"lastMA\" array */\nlet ma3Back = variable.lastMA [0] \nlet ma2Back = variable.lastMA [1]\nlet ma1Back = variable.lastMA [2]\nlet trendLine = variable.lastMA [3]\n\n/* Defining trend (Uptrend or Downtrend). It is important to avoid \"undefined\" candles or ma's */\nlet trend = \"None\"\nlet candle1Back = mainDependency.records[index - 1] // Calling previous candle\nlet candle2Back = mainDependency.records[index - 2] // Calling 2 previous candle\nlet candle3Back = mainDependency.records[index - 3] // Calling 3 previous candle\n\nif (candle1Back !== undefined && candle2Back !== undefined && candle3Back !== undefined) { \n if (ma1Back !== undefined && ma2Back !== undefined && ma3Back !== undefined) { \n if (candle1Back.close >= ma1Back && candle1Back.open >= ma1Back) {\n if (candle2Back.close >= ma2Back && candle2Back.open >= ma2Back) {\n if (candle3Back.close >= ma3Back && candle3Back.open >= ma3Back) {\n trend = \"Uptrend\"\n }\n }\n }\n if (candle1Back.close <= ma1Back && candle1Back.open <= ma1Back) {\n if (candle2Back.close <= ma2Back && candle2Back.open <= ma2Back) {\n if (candle3Back.close <= ma3Back && candle3Back.open <= ma3Back) {\n trend = \"Downtrend\"\n }\n }\n }\n }\n}\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here patterns will be defined\n// ----------------------------------------------------------------------------------------------------------------------------\n\n/* Patterns will be grouped as follows:\n1) Bearish continuation --> These patterns indicates that the current downtrend could continue.\n2) Bearish Reversal --> These patterns indicates that the current uptrend could turn to downtrend.\n3) Bullish Continuation --> These patterns indicates that the current uptrend could continue.\n4) Bullish Reversal --> These patterns indicates that the current downtrend could turn to uptrend. */\n\n/* \"BEARISH CONTINUATION\" group:\nThese patterns should appear during a downtrend to be valid*/\nif (trend === \"Downtrend\") {\n\n/* \"BEARISH STRONG LINE\" properties:\n1) Basic Candle can be \"Long Red Candle\", \"Red Marubozu\", \"Opening Red Marubozu\" or \"Closing Red Marubozu\".\n2) Average size: Long.\n3) The body has to be three times higher than the mean body.\n4) The body is placed below the trend line. */\n\nif (basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.body >= basicCandle.meanBody*3) {\n if (candle.open <= trendLine) {\n variable.name = \"Bearish Strong Line\"\n variable.forecast = \"Bearish Continuation\"\n }\n }\n }\n}\n\n} // Closing \"Bearish Continuation\" group\n\n//-------------------------------------------------------\n\n/* \"BEARISH REVERSAL\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend === \"Uptrend\") {\n\n/* \"BEARISH BELT HOLD\" properties:\n1) Basic Candle is \"Opening Red Marubozu\". \n2) Average size: Long.\n3) Short lower shadow. (20 percent of the candle is defined, user can change it). */\n\nif (basicCandle.name === \"Opening Red Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if(basicCandle.lowerShadow <= basicCandle.length*0.2) {\n variable.name = \"Bearish Belt Hold\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n}\n\n/* \"HANGING MAN\" properties:\n1) Basic Candle can be \"Green Spinning Top\", \" Red Spinning Top\" or \"High Wave\".\n2) Average size: Long.\n3) The upper shadow shorter than the body.\n4) Long lower shadow that is at least twice the size as the body.\n5) The body above the trend line. */\n\nif (basicCandle.name === \"Green Spinning Top\" || basicCandle.name === \"Red Spinning Top\" || basicCandle.name === \"High Wave\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.upperShadow <= basicCandle.body) {\n if (basicCandle.lowerShadow >= basicCandle.body*2) {\n if (candle.close >= trendLine && candle.open >= trendLine) {\n variable.name = \"Hanging Man\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n } \n}\n\n/* \"SHOOTING STAR\" properties:\n1) Basic Candle can be \"Green Spinning Top\", \" Red Spinning Top\" or \"High Wave\".\n2) Average size: Long.\n3) The lower shadow shorter than the body.\n4) Upper shadow that is at least two times longer than the body.\n5) The body above the trend line. */\n\nif (basicCandle.name === \"Green Spinning Top\" || basicCandle.name === \"Red Spinning Top\" || basicCandle.name === \"High Wave\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.lowerShadow <= basicCandle.body) {\n if (basicCandle.upperShadow >= basicCandle.body*2) {\n if (candle.close >= trendLine && candle.open >= trendLine) {\n variable.name = \"Shooting Star\"\n variable.forecast = \"Bearish Reversal\"\n } \n }\n }\n } \n}\n\n/* \"BEARISH STRONG LINE\" properties:\n1) Basic Candle can be \"Long Red Candle\", \"Red Marubozu\", \"Opening Red Marubozu\" or \"Closing Red Marubozu\". \n2) Average size: Long.\n3) The body has to be three times higher than the mean body.\n4) The opening price is above the trendline (Remember, if the body is below the trendline, belongs to bearish continuation). */\n\nif (basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.body >= basicCandle.meanBody*3) {\n if (candle.open >= trendLine) {\n variable.name = \"Bearish Strong Line\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n} // Closing \"Bearish Reversal\" group\n\n//-------------------------------------------------------\n\n/* \"BULLISH CONTINUATION\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend === \"Uptrend\") {\n\n/* \"BULLISH STRONG LINE\" properties:\n1) Basic Candle can be \"Long Green Candle\", \"Green Marubozu\", \"Opening Green Marubozu\" or \"Closing Green Marubozu\".\n2) Average size: Long.\n3) The body has to be three times higher than the mean body.\n4) The body is placed above the trendline. */\n\nif (basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.body >= basicCandle.meanBody*3) {\n if (candle.open >= trendLine) {\n variable.name = \"Bullish Strong Line\"\n variable.forecast = \"Bullish Continuation\"\n }\n }\n }\n}\n\n} // Closing \"Bullish Continuation\" group\n\n//-------------------------------------------------------\n\n/* \"BULLISH REVERSAL\" group:\nThese patterns should appear during a downtrend*/\nif (trend === \"Downtrend\") {\n\n/* \"BULLISH BELT HOLD\" properties:\n1) Basic Candle is \"Opening Green Marubozu\".\n2) Average size: Long.\n3) Short upper shadow. 20 percent of the candle length, user can change it value. */\n\nif (basicCandle.name === \"Opening Green Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.upperShadow <= basicCandle.length*0.2) {\n variable.name = \"Bullish Belt Hold\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n}\n\n/* \"HAMMER\" properties:\n1) Basic Candle can be \"Green Spinning Top\", \" Red Spinning Top\" or \"High Wave\".\n2) Average size: Long.\n3) The upper shadow shorter than the body.\n4) Lower shadow at least two times longer than the body. \n5) The body has to be below the trend line. */\n\nif (basicCandle.name === \"Green Spinning Top\" || basicCandle.name === \"Red Spinning Top\" || basicCandle.name === \"High Wave\" ) {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.upperShadow <= basicCandle.body) {\n if (basicCandle.lowerShadow >= basicCandle.body*2) {\n if (candle.close <= trendLine && candle.open <= trendLine) {\n variable.name = \"Hammer\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n }\n } \n}\n \n/* \"BULLISH STRONG LINE\" properties:\n1) Basic Candle can be \"Long Green Candle\", \"Green Marubozu\", \"Opening Green Marubozu\" or \"Closing Green Marubozu\". \n2) Average size: Long.\n3) The body three times higher than the mean body.\n4) The opening price is below the trendline (Remember, if the body is placed above the trendline, belongs to bulliish continuation). */\n\nif (basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.body >= basicCandle.meanBody*3) {\n if (candle.open <= trendLine) {\n variable.name = \"Bullish Strong Line\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n }\n}\n\n} // Closing \"Bullish Reversal\" group\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here all the variables that will be written in the records are defined \n// ----------------------------------------------------------------------------------------------------------------------------\n\nvariable.trend = trend\nvariable.trendLine = trendLine\nvariable.period = N // This record will be for pattern visualization on the chart\nvariable.bearishArrowHead = candle.max*1.02 // This record will be for pattern visualization on the chart\nvariable.bullishArrowHead = candle.min*0.98 // This record will be for pattern visualization on the chart","project":"Superalgos","id":"08e03d17-e3d4-4a60-9e76-8b0c246f6eab","savedPayload":{"position":{"x":14594.124021170985,"y":13323.171880631664},"targetPosition":{"x":14474.045168646944,"y":13232.41564425125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"45f3274c-5f6c-4730-83cc-3a4a80be5f11","savedPayload":{"position":{"x":14474.045168646944,"y":13232.41564425125},"targetPosition":{"x":14233.60814591393,"y":13052.913962672783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* It is necessary to define Moving Average of N Periods to define the trend of the market. */\nvariable.lastN = [ ] // Define lastN array to record the value of the last N candle closes (SMA)\nvariable.previousEMA = 0 // Initialize the variable previous enter to the main loop (EMA)\nvariable.lastMA = [0, 0, 0, 0] // Define lastMA array to record the value of the last 3 and current Moving Averages of N Periods","project":"Superalgos","id":"dcdb9df8-32b5-4c90-b392-8eb147d91a1e","savedPayload":{"position":{"x":14179.943427637229,"y":13500.070059182952},"targetPosition":{"x":14198.295396972324,"y":13350.390311059506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0571fcc4-4f29-4c5b-8de0-54da0ee0dd44","savedPayload":{"position":{"x":14198.295396972324,"y":13350.390311059506},"targetPosition":{"x":14233.60814591393,"y":13052.913962672783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61de6419-4760-4b57-a184-d5aac5114be8","savedPayload":{"position":{"x":14233.60814591393,"y":13052.913962672783},"targetPosition":{"x":13998.206916384088,"y":12502.65451533993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f3c0863c-ac0c-4fc0-b9ee-5f0f2bd722ea","savedPayload":{"position":{"x":13998.697632798014,"y":12503.088739756528},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"One-Candle Patterns","id":"14f83391-e4a6-470c-90c0-19763f83429b"}}},{"type":"Product Definition","name":"Two-Candles Patterns","config":"{\n \"codeName\": \"Two-Candles-Patterns\",\n \"singularVariableName\": \"twoCandlePattern\",\n \"pluralVariableName\": \"twoCandlePatterns\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"8c35ce52-9dee-4d20-92e6-50ba7fd2882b","savedPayload":{"position":{"x":13991.68430805685,"y":12525.110388391031},"targetPosition":{"x":13578.375673580053,"y":12639.385445487314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"4f1260c8-6d74-454e-963a-fa3ff910329c","savedPayload":{"position":{"x":13979.43792141321,"y":12789.730965402716},"targetPosition":{"x":13578.375673580053,"y":12639.385445487314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"Two-Candles Patterns Records","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"61a74369-9fad-4af6-99d8-c6e4821d4750","savedPayload":{"position":{"x":14397.448864287227,"y":12938.54167872223},"targetPosition":{"x":14398.57431392667,"y":13047.087038906997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d0948117-06a2-44e6-a9c6-eed01b943780","savedPayload":{"position":{"x":14398.57431392667,"y":13047.087038906997},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"73933242-2824-4a63-bb50-d6043c1796a0","savedPayload":{"position":{"x":14573.324329664345,"y":12987.4496004336},"targetPosition":{"x":14515.513347637345,"y":13079.660243760527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d5bcbb61-ab9d-4908-91c4-0bbbdade33c0","savedPayload":{"position":{"x":14515.513347637345,"y":13079.660243760527},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"name","config":"{ \n\"codeName\": \"name\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.name","project":"Superalgos","id":"34cec9a0-7a4d-430c-a69e-b67150a8701d","savedPayload":{"position":{"x":14688.855806833966,"y":13126.777660862073},"targetPosition":{"x":14595.535099837201,"y":13170.609116021238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c8a5978b-4038-4493-9c79-697d6508604f","savedPayload":{"position":{"x":14595.535099837201,"y":13170.609116021238},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trend","config":"{ \n\"codeName\": \"trend\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trend","project":"Superalgos","id":"d5af582e-67e7-4bd4-80c8-561fb4b28f0b","savedPayload":{"position":{"x":14716.540185906528,"y":13303.218324324693},"targetPosition":{"x":14614.233344349985,"y":13289.864546723746},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"ceed7f12-8a54-43bf-9bd0-c9297493d6a1","savedPayload":{"position":{"x":14614.233344349985,"y":13289.864546723746},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"forecast","config":"{ \n\"codeName\": \"forecast\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.forecast","project":"Superalgos","id":"ce5d5a36-b9dd-404d-90c1-a6556cc15145","savedPayload":{"position":{"x":14644.14531214954,"y":13467.050579578145},"targetPosition":{"x":14565.346488666291,"y":13400.494255351496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0e22e091-4ace-44ab-b1c9-aa386e928299","savedPayload":{"position":{"x":14565.346488666291,"y":13400.494255351496},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bullishArrowHead","config":"{ \n\"codeName\": \"bullishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bullishArrowHead","project":"Superalgos","id":"7095f60c-5b45-4f3c-b026-97c89a480135","savedPayload":{"position":{"x":14494.692357761083,"y":13565.7432998857},"targetPosition":{"x":14464.421344791252,"y":13467.137660008057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"228d8125-2609-45c6-9cc7-e644c017ee0e","savedPayload":{"position":{"x":14464.421344791252,"y":13467.137660008057},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bearishArrowHead","config":"{ \n\"codeName\": \"bearishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bearishArrowHead","project":"Superalgos","id":"409212af-d4f2-4371-9cc2-4402e16c1889","savedPayload":{"position":{"x":14316.164781042502,"y":13567.960716325802},"targetPosition":{"x":14343.75339340866,"y":13468.630943490887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"fa50b0e1-d8df-4a16-91c9-361541808fbf","savedPayload":{"position":{"x":14343.75339340866,"y":13468.630943490887},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendLine","config":"{ \n\"codeName\": \"trendLine\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendLine","project":"Superalgos","id":"7302e487-d514-4964-bdc3-9901ba318dea","savedPayload":{"position":{"x":14164.447956301166,"y":13472.996197322751},"targetPosition":{"x":14241.261495998879,"y":13404.475339213779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"64444857-2818-42de-a4c1-69c4d2804ebf","savedPayload":{"position":{"x":14241.261495998879,"y":13404.475339213779},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"period","config":"{ \n\"codeName\": \"period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.period","project":"Superalgos","id":"dfdef370-336e-4650-a441-4b65f7304047","savedPayload":{"position":{"x":14081.91430933151,"y":13311.980960060871},"targetPosition":{"x":14189.134617557567,"y":13295.142078284722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6dafe978-a5df-4f5b-a7ae-d496b83bcc94","savedPayload":{"position":{"x":14189.134617557567,"y":13295.142078284722},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendMethod","config":"{ \n\"codeName\": \"trendMethod\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendMethod","project":"Superalgos","id":"aea83576-35e1-4190-b284-faf3f696436b","savedPayload":{"position":{"x":14106.347426856079,"y":13130.982750518875},"targetPosition":{"x":14205.288939259488,"y":13174.787645810798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"552e82f9-e5e6-4802-9cf2-d9a7bbbc5a22","savedPayload":{"position":{"x":14205.288939259488,"y":13174.787645810798},"targetPosition":{"x":14401.43293617999,"y":13262.001287466961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"17ec2118-b9df-415f-b5f3-120fb3b3155a","savedPayload":{"position":{"x":14401.43293617999,"y":13262.001287466961},"targetPosition":{"x":13578.375673580053,"y":12639.385445487314},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"Two-Candles Patterns Code","code":"// -----------------------------------------------------------------------------------------------------------------------------\n// From here the variables that will be used during the definition of the patterns will be defined\n// -----------------------------------------------------------------------------------------------------------------------------\n\n /* In order to avoid errors, the initial condition of the output variables are defined */\nvariable.name = \"No Pattern\" // The name of the two-candle pattern, for panel visualization\nvariable.forecast = \"None\" // The forecast of the two-candle pattern, for panel visualization\nvariable.trend = \"None\" // The trend of the current pattern, for panel visualization\nvariable.trendLine = 1 // This record will be for pattern shapes visualization on the chart\nvariable.bearishArrowHead = 1 // This record will be for pattern shapes visualization on the chart\nvariable.bullishArrowHead = 1 // This record will be for pattern shapes visualization on the chart\nvariable.period = 0 // The period of the trend MA, for panel visualization\n \n/* \"Candles\", \"Basic Candles\" and \"One-Candle Patterns\" are dependencies */\nlet candle = record.current // Calling \"Candles\"\nlet basicCandle = getElement ('basicCandles', candle) // Calling \"Basic Candles\" product\nlet oneCandlePattern = getElement ('oneCandlePatterns', candle) // Calling \"One-Candle Patterns\" product\n\n/* Some properties of the previous candle are needed (max, min, open and close) */\nlet candle1Back = mainDependency.records[index - 1] \n\n/* In order to avoid \"undefined\" elements during calculations */\nif (basicCandle !== undefined && oneCandlePattern !== undefined && candle1Back !== undefined) { \n\n/*Another properties of the previous candle are needed (trend, span, name and direction)*/\nvariable.records1Back.push(oneCandlePattern.trend, basicCandle.size, basicCandle.name, basicCandle.direction)\nlet trend1Back = \"None\"\nlet size1Back = \"None\"\nlet name1Back = \"None\"\nlet direction1Back = \"None\"\nif (variable.records1Back[0] !== undefined) {\n trend1Back = variable.records1Back[0] // Taking first element of the array (index 0)\n}\nif (variable.records1Back[1] !== undefined) {\n size1Back = variable.records1Back[1] // Taking second element of the array (index 1)\n}\nif (variable.records1Back[2] !== undefined) {\n name1Back = variable.records1Back[2] // Taking third element of the array (index 2)\n}\nif (variable.records1Back[3] !== undefined) {\n direction1Back = variable.records1Back[3] // Taking fourth element of the array (index 3)\n}\nif (variable.records1Back.length === 8) { // Array with 8 elements, 4 currents and 4 from previous\n variable.records1Back.splice(0, 4) // Remove the first 4 elements of the array\n} \n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here patterns will be defined\n// ----------------------------------------------------------------------------------------------------------------------------\n\n/* Patterns will be grouped as follows:\n1) Bearish continuation --> These patterns indicates that the current downtrend could continue.\n2) Bearish Reversal --> These patterns indicates that the current uptrend could turn to downtrend.\n3) Bullish Continuation --> These patterns indicates that the current uptrend could continue.\n4) Bullish Reversal --> These patterns indicates that the current downtrend could turn to uptrend. */\n\n/* \"BEARISH CONTINUATION\" group:\nThese patterns should appear during a downtrend to be valid*/\nif (trend1Back === \"Downtrend\") {\n\n/* \"LAST ENGULFING BOTTOM\" properties:\nIt is important to know that this pattern has a \"Bearish Continuation\" or \"Bullish Reversal\" forecast, depending on the context.\n--First candle\n1) Can be any green basic candle, excluding Four-Price Doji.\n--Second candle\n1) Can be the following red basic candles: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Candle's body engulfs the prior candle's body.\n3) Average size: long. */\n\nif (direction1Back === \"Bullish\" && name1Back !== \"Four-Price Doji\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.name === \"Red Candle\" || basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\") {\n if (candle1Back.close <= candle.open && candle1Back.open > candle.close) {\n variable.name = \"Last Engulfing Bottom\"\n variable.forecast = \"Depends On The Context\"\n }\n }\n }\n}\n\n} // Closing \"Bearish Continuation\" group\n\n//-------------------------------------------------------\n\n/* \"BEARISH REVERSAL\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend1Back === \"Uptrend\") {\n\n/* \"BEARISH ENGULFING\" properties:\n--First candle\n1) Can be any green basic candle, excluding Four-Price Doji.\n--Second candle\n1) Can be the following red basic candles: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Candle's body engulfs the prior candle's body.\n3) Average size: long. */\n\nif (direction1Back === \"Bullish\" && name1Back !== \"Four-Price Doji\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.name === \"Red Candle\" || basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\") {\n if (candle1Back.close <= candle.open && candle1Back.open > candle.close) {\n variable.name = \"Bearish Engulfing\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n/* \"BEARISH HARAMI\" properties:\n--First candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Can be any red basic candle, excluding Four-Price Doji.\n2) Candle's body engulfed by the previous candle's body. */\n\nif (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.direction === \"Bearish\" && basicCandle.name !== \"Four-Price Doji\") {\n if (candle1Back.close >= candle.open && candle1Back.open < candle.close) {\n variable.name = \"Bearish Harami\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n/* \"BEARISH HARAMI CROSS\" properties:\n--First candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Should be a Classic Doji.\n2) Candle's body (including shadows) engulfed by the prior candle's body. */\n\nif (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.name === \"Classic Doji\") {\n if (candle1Back.close >= candle.max && candle1Back.open <= candle.min) {\n variable.name = \"Bearish Harami Cross\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n/* \"BEARISH TASUKI LINE\" properties:\n--First candle\n1) Bullish candle.\n2) Average size: Long.\n--Second candle\n1) Bearish candle.\n2) Opening price below or equal to the previous closing price.\n3) Closing price below the previous opening price.\n4) Average size: Long. */\n\nif (direction1Back === \"Bullish\" && size1Back === \"Long\") {\n if (basicCandle.direction === \"Bearish\" && basicCandle.size === \"Long\") {\n if (candle.open <= candle1Back.close && candle.close < candle1Back.open) {\n variable.name = \"Bearish Tasuki Line\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n}\n\n/* \"DESCENDING HAWK\" properties:\n--First candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Can be the following green basic candles: Short Green Candle, Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Candle's body engulfed by the prior candle's body. */\n\nif (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.name === \"Short Green Candle\" || basicCandle.name === \"Green Candle\" || basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\") {\n if (candle1Back.close >= candle.close && candle1Back.open < candle.open) {\n variable.name = \"Descending Hawk\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n/* \"TWEEZERS TOP\" properties:\n--First candle\n1) Any candle except the Four-Price Doji.\n2) Could be \"Bullish\" or \"Bearish\" candle.\n--Second candle\n1) Any candle except the Four-Price Doji.\n2) Could be \"Bullish\" or \"Bearish\" candle.\n3) High price equal to the previous high price. */\n\nif (candle1Back.name !== \"Four-Price Doji\" && basicCandle.name !== \"Four-Price Doji\" && candle.max === candle1Back.max) {\n variable.name = \"Tweezers Top\"\n variable.forecast = \"Bearish Reversal\"\n}\n\n/* \"TWO-CANDLE SHOOTING STAR\" properties:\n--First candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Can be the following basic candles: Red Spinning Top, Green Spinning Top, High Wave. \n2) No lower shadow or the shadow cannot be longer than then body.\n3) Upper shadow at least 2.5 times longer than the body.\n4) The open above or at the level of the previous candle’s close. */\n\nif (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.name === \"Red Spinning Top\" || basicCandle.name === \"Green Spinning Top\" || basicCandle.name === \"High Wave\") {\n if (basicCandle.lowerShadow <= basicCandle.body && basicCandle.upperShadow >= basicCandle.body*2.5 && candle.open >= candle1Back.close) {\n variable.name = \"Two-Candle Shooting Star\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n} // Closing \"Bearish Reversal\" group\n\n//-------------------------------------------------------\n\n/* \"BULLISH CONTINUATION\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend1Back === \"Uptrend\") {\n\n/* \"LAST ENGULFING TOP\" properties:\nIt is important to know that this pattern has a \"Bearish Continuation\" or \"Bullish Reversal\" forecast, depending on the context.\n--First candle\n1) Bearish candle, excluding \"Four-Price Doji\".\n--Second candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Candle's body engulfs the prior candle's body. \n3) Average size: Long. */\n\nif (direction1Back === \"Bearish\" && name1Back !== \"Four-Price Doji\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.name === \"Green Candle\" || basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\") {\n if (candle1Back.close >= candle.open && candle1Back.open < candle.close) { \n variable.name = \"Last Engulfing Top\"\n variable.forecast = \"Depends On The Context\"\n }\n }\n }\n}\n\n} // Closing \"Bullish Continuation\" group\n \n//-------------------------------------------------------\n\n/* \"BULLISH REVERSAL\" group:\nThese patterns should appear during a downtrend*/\nif (trend1Back === \"Downtrend\") {\n\n/* \"BULLISH ENGULFING\" properties:\n--First candle\n1) Bearish candle, excluding \"Four-Price Doji\".\n--Second candle\n1) Can be the following green basic candles: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Candle's body engulfs the prior candle's body. \n3) Average size: Long. */\n\nif (direction1Back === \"Bearish\" && name1Back !== \"Four-Price Doji\") {\n if (basicCandle.size === \"Long\") {\n if (basicCandle.name === \"Green Candle\" || basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\") {\n if (candle1Back.close >= candle.open && candle1Back.open < candle.close) { \n variable.name = \"Bullish Engulfing\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n }\n}\n\n/* \"BULLISH HARAMI\" properties:\n--First candle\n1) Can be the following red basic candles: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long.\n--Second candle\n1) Can be any green basic candle, excluding Four-Price Doji.\n2) Candle's body engulfed by the prior candle's body. */\n\nif (name1Back === \"Red Candle\" || name1Back === \"Long Red Candle\" || name1Back === \"Red Marubozu\" || name1Back === \"Opening Red Marubozu\" || name1Back === \"Closing Red Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.direction === \"Bullish\" && basicCandle.name !== \"Four-Price Doji\") {\n if (candle1Back.close <= candle.open && candle1Back.open > candle.close) {\n variable.name = \"Bullish Harami\"\n variable.forecast = \"Bulliish Reversal\"\n }\n }\n }\n}\n\n/* \"BULLISH HARAMI CROSS\" properties:\n--First candle\n1) Can be the following red basic candles: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long.\n--Second candle\n1) Should be a Classic Doji.\n2) Candle's body (including shadows) engulfed by the prior candle's body. */\n\nif (name1Back === \"Red Candle\" || name1Back === \"Long Red Candle\" || name1Back === \"Red Marubozu\" || name1Back === \"Opening Red Marubozu\" || name1Back === \"Closing Red Marubozu\") {\n if (size1Back === \"Long\") {\n if (basicCandle.name === \"Classic Doji\") {\n if (candle1Back.open >= candle.max && candle1Back.close <= candle.min) {\n variable.name = \"Bullish Harami Cross\"\n variable.forecast = \"Bulliish Reversal\"\n }\n }\n }\n}\n\n/* \"BULLISH TASUKI LINE\" properties:\n--First candle\n1) Bearish candle.\n2) Average size: Long.\n--Second candle\n1) Bullish candle.\n2) Opening price above or equal to the previous closing price\n3) Closing price above the previous opening price\n4) Average size: Long. */\n\nif (direction1Back === \"Bearish\" && size1Back === \"Long\") {\n if (basicCandle.direction === \"Bullish\" && basicCandle.size === \"Long\") {\n if (candle.open >= candle1Back.close && candle.close > candle1Back.open) {\n variable.name = \"Bullish Tasuki Line\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n}\n\n/* \"TWEEZERS BOTTOM\" properties:\n--First candle\n1) Any candle except the Four-Price Doji.\n2) Could be \"Bullish\" or \"Bearish\" candle.\n--Second candle\n1) Any candle except the Four-Price Doji.\n2) Could be \"Bullish\" or \"Bearish\" candle.\n3) Low price equal to the previous low price. */\n\nif (candle1Back.name !== \"Four-Price Doji\" && basicCandle.name !== \"Four-Price Doji\" && candle.min === candle1Back.min) {\n variable.name = \"Tweezers Bottom\"\n variable.forecast = \"Bullish Reversal\"\n}\n\n} // Closing \"Bullish Reversal\" group\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here all the variables that will be written in the records are defined \n// ----------------------------------------------------------------------------------------------------------------------------\n\nvariable.trend = trend1Back\nvariable.trendLine = oneCandlePattern.trendLine\nvariable.period = oneCandlePattern.period\nvariable.trendMethod = oneCandlePattern.trendMethod\nvariable.bearishArrowHead = candle.max*1.02 \nvariable.bullishArrowHead = candle.min*0.98\n\n} // Closing initial \"undefined\" avoid\n","project":"Superalgos","id":"0df41d0a-e490-427e-a355-9043e81eb3c1","savedPayload":{"position":{"x":13755.528447648896,"y":13447.512291420955},"targetPosition":{"x":13657.40757812238,"y":13256.98251395223},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"36593fb7-a9ab-4e3f-95ff-9c291e0f96f6","savedPayload":{"position":{"x":13657.40757812238,"y":13256.98251395223},"targetPosition":{"x":13559.105250630211,"y":13066.765095328212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Because this pattern has two candles, the properties of the previous candle are needed. */\nvariable.records1Back = [ ] // The properties will be record in this array","project":"Superalgos","id":"36e0e453-9058-45de-bcff-bc1e17fe7aa8","savedPayload":{"position":{"x":13327.969640462394,"y":13428.28742578026},"targetPosition":{"x":13443.54991779977,"y":13247.4281381943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a939b7f6-400d-483f-9017-676c53451613","savedPayload":{"position":{"x":13443.54991779977,"y":13247.4281381943},"targetPosition":{"x":13559.105250630211,"y":13066.765095328212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"896e9b4a-04e0-497d-be61-af2c96bb9d86","savedPayload":{"position":{"x":13559.105250630211,"y":13066.765095328212},"targetPosition":{"x":13578.375673580053,"y":12639.385445487314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"29283392-6a01-4acd-8f41-328e92281980","savedPayload":{"position":{"x":13882.339098726425,"y":12743.52855565509},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Two-Candles Patterns","id":"3bf46641-3478-41fd-8407-0af20e72f30b"}}},{"type":"Product Definition","name":"Three-Candles Patterns","config":"{\n \"codeName\": \"Three-Candles-Patterns\",\n \"singularVariableName\": \"threeCandlePattern\",\n \"pluralVariableName\": \"threeCandlePatterns\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"087fc67e-78f9-4204-ba5e-8b670566a716","savedPayload":{"position":{"x":13851.175863746987,"y":12834.903173390992},"targetPosition":{"x":13429.193521637542,"y":12758.445533257673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"b60cb94f-79c5-410c-b166-abc97d0f2bc3","savedPayload":{"position":{"x":13725.421448780311,"y":13068.420472961838},"targetPosition":{"x":13429.193521637542,"y":12758.445533257673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"Three-Candles Patterns Records","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"1c316dcb-6d17-4108-ac41-f2d059685e5e","savedPayload":{"position":{"x":13712.542565581156,"y":12928.267567628754},"targetPosition":{"x":13646.2528020738,"y":13076.332916058009},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8328e683-8704-4b65-a774-63da0346e252","savedPayload":{"position":{"x":13646.2528020738,"y":13076.332916058009},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"db0992c2-3fd6-4eb9-bbe9-40dad5ae53f6","savedPayload":{"position":{"x":13949.88679638202,"y":13123.784127773868},"targetPosition":{"x":13814.455798605359,"y":13209.582329209828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fbef0b72-edde-4678-aca5-f405068271b3","savedPayload":{"position":{"x":13814.455798605359,"y":13209.582329209828},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"name","config":"{ \n\"codeName\": \"name\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.name","project":"Superalgos","id":"c397cffb-3ba1-435b-af0b-e920b319b23b","savedPayload":{"position":{"x":13968.27807280601,"y":13400.681599528385},"targetPosition":{"x":13866.011553168468,"y":13400.088148035276},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2f7591d7-6877-4fde-aafb-1b9580f6ad60","savedPayload":{"position":{"x":13866.011553168468,"y":13400.088148035276},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trend","config":"{ \n\"codeName\": \"trend\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trend","project":"Superalgos","id":"ea48eb6b-63a3-444c-abd2-166097bb50c5","savedPayload":{"position":{"x":13892.98151652456,"y":13644.320307843322},"targetPosition":{"x":13808.232018963066,"y":13589.060834230897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"162b594a-c0a4-45c0-a52c-45682978d00a","savedPayload":{"position":{"x":13808.232018963066,"y":13589.060834230897},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"forecast","config":"{ \n\"codeName\": \"forecast\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.forecast","project":"Superalgos","id":"fd07c697-966a-4a3c-a123-61198f194538","savedPayload":{"position":{"x":13699.765694019978,"y":13808.449358024422},"targetPosition":{"x":13658.291154118539,"y":13715.873340430791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c1afb085-e6cd-4c27-af62-6765cb270c1d","savedPayload":{"position":{"x":13658.291154118539,"y":13715.873340430791},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bullishArrowHead","config":"{ \n\"codeName\": \"bullishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bullishArrowHead","project":"Superalgos","id":"dd019f19-f96a-4e88-a2e1-0159ba87fbe3","savedPayload":{"position":{"x":13445.396619806143,"y":13843.248853638384},"targetPosition":{"x":13462.243205171326,"y":13742.129893275567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7059a7a5-021b-4277-80b9-8ef4c5387736","savedPayload":{"position":{"x":13462.243205171326,"y":13742.129893275567},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"bearishArrowHead","config":"{ \n\"codeName\": \"bearishArrowHead\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.bearishArrowHead","project":"Superalgos","id":"bc455c93-3c64-4cf4-ab94-0116da22c404","savedPayload":{"position":{"x":13217.155985388858,"y":13734.590390467974},"targetPosition":{"x":13283.265704468504,"y":13657.842210763614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"ec8749b1-4f5f-4163-b079-3dd9bec6eefa","savedPayload":{"position":{"x":13283.265704468504,"y":13657.842210763614},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendLine","config":"{ \n\"codeName\": \"trendLine\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendLine","project":"Superalgos","id":"54625f1a-aa6f-44a6-bf2e-bcf1f5210674","savedPayload":{"position":{"x":13081.677823664977,"y":13520.117187573072},"targetPosition":{"x":13178.99428754648,"y":13492.594215428027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7a781a34-4af5-4eb1-b237-1746ea2e69d0","savedPayload":{"position":{"x":13178.99428754648,"y":13492.594215428027},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"period","config":"{ \n\"codeName\": \"period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.period","project":"Superalgos","id":"fd68bb74-c7f3-48ff-941c-121031aaf6a1","savedPayload":{"position":{"x":13034.85048473964,"y":13241.29427636059},"targetPosition":{"x":13188.32743666253,"y":13290.020273219629},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b738ac34-a6eb-41c3-9871-0fc1732be676","savedPayload":{"position":{"x":13188.32743666253,"y":13290.020273219629},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"trendMethod","config":"{ \n\"codeName\": \"trendMethod\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trendMethod","project":"Superalgos","id":"65ed19cf-524e-4ccd-94df-c60c9b41c40a","savedPayload":{"position":{"x":13180.451706501946,"y":13007.881107759697},"targetPosition":{"x":13286.409565424477,"y":13129.715292073894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"32ff1b3e-acb0-4961-82b9-1dd37a795c41","savedPayload":{"position":{"x":13286.409565424477,"y":13129.715292073894},"targetPosition":{"x":13515.517478056532,"y":13395.737992434184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a01e390-aea9-494b-a002-9c7498f23189","savedPayload":{"position":{"x":13515.464703469806,"y":13395.67991671183},"targetPosition":{"x":13429.193521637542,"y":12758.445533257673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"Three-Candles Patterns Code","code":"// -----------------------------------------------------------------------------------------------------------------------------\n// From here the variables that will be used during the definition of the patterns will be defined\n// -----------------------------------------------------------------------------------------------------------------------------\n\n /* In order to avoid errors, the initial condition of the output variables are defined */\nvariable.name = \"No Pattern\" // The name of the pattern, for panel visualization\nvariable.forecast = \"None\" // The forecast of the pattern, for panel visualization\nvariable.trend = \"None\" // The trend of the current pattern, for panel visualization\nvariable.trendLine = 1 // This record will be for pattern shapes visualization on the chart\nvariable.bearishArrowHead = 1 // This record will be for pattern shapes visualization on the chart\nvariable.bullishArrowHead = 1 // This record will be for pattern shapes visualization on the chart\nvariable.period = 0 // The period of the trend MA, for panel visualization\n\n/* \"Candles\", \"Basic Candles\" and \"One-Candle Patterns\" are dependencies */\nlet candle = record.current // Calling \"Candles\" records\nlet basicCandle = getElement ('basicCandles', candle) // Calling \"Basic Candles\" records\nlet oneCandlePattern = getElement ('oneCandlePatterns', candle) // Calling \"One-Candle Patterns\" records\n\n/* Some properties of the previous 2 candles are needed (max, min, open and close) */\nlet candle1Back = mainDependency.records[index - 1] \nlet candle2Back = mainDependency.records[index - 2] \n\n/* To avoid \"undefined\" elements during calculations, the following if() condition will include all the entire code */\nif (basicCandle !== undefined && oneCandlePattern !== undefined && candle1Back !== undefined && candle2Back !== undefined) { \n\n/*To define patterns, another properties of the 2 previous candles are needed (trend, size, name and direction)*/\nvariable.recordsBack.push(oneCandlePattern.trend, basicCandle.size, basicCandle.name, basicCandle.direction)\nlet trend1Back = \"None\"\nlet size1Back = \"None\"\nlet name1Back = \"None\"\nlet direction1Back = \"None\"\nlet trend2Back = \"None\"\nlet size2Back = \"None\"\nlet name2Back = \"None\"\nlet direction2Back = \"None\"\n\nif (variable.recordsBack[0] !== undefined) {\n trend2Back = variable.recordsBack[0] // Taking first element of the array (index 0)\n}\nif (variable.recordsBack[1] !== undefined) {\n size2Back = variable.recordsBack[1] // Taking second element of the array (index 1)\n}\nif (variable.recordsBack[2] !== undefined) {\n name2Back = variable.recordsBack[2] // Taking third element of the array (index 2)\n}\nif (variable.recordsBack[3] !== undefined) {\n direction2Back = variable.recordsBack[3] // Taking fourth element of the array (index 3)\n}\nif (variable.recordsBack[0] !== undefined) {\n trend1Back = variable.recordsBack[4] // Taking fifth element of the array (index 4)\n}\nif (variable.recordsBack[1] !== undefined) {\n size1Back = variable.recordsBack[5] // Taking sixth element of the array (index 5)\n}\nif (variable.recordsBack[2] !== undefined) {\n name1Back = variable.recordsBack[6] // Taking seventh element of the array (index 6)\n}\nif (variable.recordsBack[3] !== undefined) {\n direction1Back = variable.recordsBack[7] // Taking eigthth element of the array (index 7)\n}\nif (variable.recordsBack.length === 12) { // Array with 12 elements, 4 currents, 4 from 1 previous and 4 from 2 previous \n variable.recordsBack.splice(0, 4) // Remove the first 4 elements of the array\n} \n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here patterns will be defined\n// ----------------------------------------------------------------------------------------------------------------------------\n\n/* Patterns will be grouped as follows:\n1) Bearish continuation --> These patterns indicates that the current downtrend could continue.\n2) Bearish Reversal --> These patterns indicates that the current uptrend could turn to downtrend.\n3) Bullish Continuation --> These patterns indicates that the current uptrend could continue.\n4) Bullish Reversal --> These patterns indicates that the current downtrend could turn to uptrend. */\n\n/* \"BEARISH CONTINUATION\" group:\nThese patterns should appear during a downtrend to be valid*/\nif (trend2Back === \"Downtrend\") {\n\n} // Closing \"Bearish Continuation\" group\n\n//-------------------------------------------------------\n\n/* \"BEARISH REVERSAL\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend2Back === \"Uptrend\") {\n\n/* \"ADVANCE BLOCK\" properties:\n--First candle\n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu or Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Bullish.\n2) Body shortet than the previous candle.\n3) Shadows longer than the first candle.\n--Third Candle \n1) Bullish.\n2) Body shortet than the previous candle.\n3) Shadows longer than the first candle. */\n\nif (name2Back === \"Green Candle\" || name2Back === \"Long Green Candle\" || name2Back === \"Opening Green Marubozu\" || name2Back === \"Closing Green Marubozu\" || name2Back === \"Green Marubozu\") {\n if (size2Back === \"Long\") {\n if (direction1Back === \"Bullish\" && (candle1Back.close - candle1Back.open) < (candle2Back.close - candle2Back.open) ) {\n if (basicCandle.direction === \"Bullish\" && (candle.close-candle.open) < (candle1Back.close - candle1Back.open) ) {\n variable.name = \"Advance Block\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n/* \"DELIBERATION\" properties:\n--First candle\n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu or Green Marubozu.\n--Second candle\n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu or Green Marubozu.\n2) Opening price is above the previous opening price.\n3) Closing price is above the previous closing price.\n--Third Candle \n1) Any following bullish basic candle: Short Green Candle or Green Spinning Top.\n2) Opening price is slightly lower or higher than the previous closing price.\n3) Closing price is above the previous closing price.\n4) Average size: Short. */\n\nif (name2Back === \"Green Candle\" || name2Back === \"Long Green Candle\" || name2Back === \"Opening Green Marubozu\" || name2Back === \"Closing Green Marubozu\" || name2Back === \"Green Marubozu\") {\n if (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\" || name1Back === \"Green Marubozu\") {\n if (candle1Back.open > candle2Back.open && candle1Back.close > candle2Back.close) {\n if (basicCandle.name === \"Short Green Candle\" || basicCandle.name === \"Green Spinning Top\") { \n if (basicCandle.size === \"Short\" && candle.close > candle1Back.close) {\n variable.name = \"Deliberation\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n }\n}\n\n/* \"IDENTICAL THREE CROWS\" properties:\n--First candle\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long.\n--Second candle\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long. \n3) Opening price at or near the prior close.\n--Third Candle\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long. \n3) Opening price at or near the prior close.*/\n\nif (name2Back === \"Red Candle\" || name2Back === \"Long Red Candle\" || name2Back === \"Red Marubozu\" || name2Back === \"Opening Red Marubozu\" || name2Back === \"Closing Red Marubozu\") {\n if (name1Back === \"Red Candle\" || name1Back === \"Long Red Candle\" || name1Back === \"Red Marubozu\" || name1Back === \"Opening Red Marubozu\" || name1Back === \"Closing Red Marubozu\") {\n if (basicCandle.name === \"Red Candle\" || basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\") {\n if (size2Back === \"Long\" && size1Back === \"Long\" && basicCandle.size === \"Long\") {\n variable.name = \"Identical Three Crows\"\n variable.forecast = \"Bulliish Reversal\"\n }\n }\n }\n}\n\n/* \"THREE INSIDE DOWN\" properties:\n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu or Green Marubozu.\n2) Average size: Long.\n--Second candle\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu or Red Spinning Top.\n2) Candle body is engulfed by the prior candle body.\n--Third Candle \n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu or Red Spinning Top.\n2) Closing price is below the previous closing price. */\n\nif (name2Back === \"Green Candle\" || name2Back === \"Long Green Candle\" || name2Back === \"Opening Green Marubozu\" || name2Back === \"Closing Green Marubozu\" || name2Back === \"Green Marubozu\") {\n if (size2Back === \"Long\") {\n if (name1Back === \"Red Candle\" || name1Back === \"Long Red Candle\" || name1Back === \"Red Marubozu\" || name1Back === \"Opening Red Marubozu\" || name1Back === \"Closing Red Marubozu\" || name1Back === \"Red Spinning Top\") {\n if (candle1Back.close > candle2Back.open) {\n if (basicCandle.name === \"Red Candle\" || basicCandle.name === \"Long Red Candle\" || basicCandle.name === \"Red Marubozu\" || basicCandle.name === \"Opening Red Marubozu\" || basicCandle.name === \"Closing Red Marubozu\" || basicCandle.name === \"Red Spinning Top\") {\n variable.name = \"Three Inside Down\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n }\n}\n\n/* \"THREE OUTSIDE DOWN\" properties:\n1) Any bullish basic candle except \"Four-Price Doji\".\n--Second candle\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Candle's body engulfs the prior candle's body. \n3) Average size: Long.\n--Third Candle \n1) Any bearish basic candle except \"Four-Price Doji\".\n2) Closing price is below the previous closing price. */ \n\nif (direction2Back === \"Bullish\" && name2Back !== \"Four-Price Doji\") {\n if (name1Back === \"Red Candle\" || name1Back === \"Long Red Candle\" || name1Back === \"Red Marubozu\" || name1Back === \"Opening Red Marubozu\" || name1Back === \"Closing Red Marubozu\") {\n if (candle1Back.close < candle2Back.open && size1Back === \"Long\") {\n if (basicCandle.direction === \"Bearish\" && basicCandle.name !== \"Four-Price Doji\") {\n variable.name = \"Three Outside Down\"\n variable.forecast = \"Bearish Reversal\"\n }\n }\n }\n}\n\n} // Closing \"Bearish Reversal\" group\n\n//-------------------------------------------------------\n\n/* \"BULLISH CONTINUATION\" group:\nThese patterns should appear during an uptrend to be valid */\nif (trend2Back === \"Uptrend\") {\n\n\n\n} // Closing \"Bullish Continuation\" group\n \n//-------------------------------------------------------\n\n/* \"BULLISH REVERSAL\" group:\nThese patterns should appear during a downtrend*/\nif (trend2Back === \"Downtrend\") {\n\n/* \"THREE INSIDE UP\" properties:\n1) Any following bearish basic candle: Red Candle, Long Red Candle, Red Marubozu, Opening Red Marubozu, Closing Red Marubozu.\n2) Average size: Long.\n--Second candle\n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu, Green Marubozu or Green Spinning Top.\n2) Candle body is engulfed by the prior candle body.\n--Third Candle \n1) Any following bullish basic candle: Green Candle, Long Green Candle, Opening Green Marubozu, Closing Green Marubozu, Green Marubozu or Green Spinning Top.\n2) Closing price is above the previous closing price. */\n\nif (name2Back === \"Red Candle\" || name2Back === \"Long Red Candle\" || name2Back === \"Opening Red Marubozu\" || name2Back === \"Closing Red Marubozu\" || name2Back === \"Red Marubozu\") {\n if (size2Back === \"Long\") {\n if (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\" || name1Back === \"Green Spinning Top\") {\n if (candle1Back.close < candle2Back.open) {\n if (basicCandle.name === \"Green Candle\" || basicCandle.name === \"Long Green Candle\" || basicCandle.name === \"Green Marubozu\" || basicCandle.name === \"Opening Green Marubozu\" || basicCandle.name === \"Closing Green Marubozu\" || basicCandle.name === \"Green Spinning Top\") {\n variable.name = \"Three Inside Up\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n }\n }\n}\n\n/* \"THREE OUTSIDE UP\" properties:\n1) Any bearish basic candle except \"Four-Price Doji\".\n--Second candle\n1) Any following bearish basic candle: Green Candle, Long Green Candle, Green Marubozu, Opening Green Marubozu, Closing Green Marubozu.\n2) Candle's body engulfs the prior candle's body. \n3) Average size: Long.\n--Third Candle \n1) Any bullish basic candle except \"Four-Price Doji\".\n2) Closing price is above the previous closing price. */ \n\nif (direction2Back === \"Bearish\" && name2Back !== \"Four-Price Doji\") {\n if (name1Back === \"Green Candle\" || name1Back === \"Long Green Candle\" || name1Back === \"Green Marubozu\" || name1Back === \"Opening Green Marubozu\" || name1Back === \"Closing Green Marubozu\") {\n if (candle1Back.close > candle2Back.open && size1Back === \"Long\") {\n if (basicCandle.direction === \"Bullish\" && basicCandle.name !== \"Four-Price Doji\") {\n variable.name = \"Three Outside Up\"\n variable.forecast = \"Bullish Reversal\"\n }\n }\n }\n}\n\n} // Closing \"Bullish Reversal\" group\n\n// ----------------------------------------------------------------------------------------------------------------------------\n// From here all the variables that will be written in the records are defined \n// ----------------------------------------------------------------------------------------------------------------------------\n\nvariable.trend = trend2Back\nvariable.trendLine = oneCandlePattern.trendLine\nvariable.period = oneCandlePattern.period\nvariable.trendMethod = oneCandlePattern.trendMethod\nvariable.bearishArrowHead = candle.max*1.02\nvariable.bullishArrowHead = candle.min*0.98 \n\n} // Closing initial \"undefined\" avoid","project":"Superalgos","id":"e4b8fa10-e9de-48b2-871b-fd5bc2be8544","savedPayload":{"position":{"x":13144.217059892999,"y":13965.83677913675},"targetPosition":{"x":13134.711156761423,"y":13644.568772894461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3ca00b1-8cb7-40f0-9d46-e86bcae26607","savedPayload":{"position":{"x":13134.711156761423,"y":13644.568772894461},"targetPosition":{"x":13125.212433068718,"y":13323.386475315809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Because of these patterns have three candles, the properties of the previous 2 candles are needed. */\nvariable.recordsBack = [ ] // The properties will be recorded in this array","project":"Superalgos","id":"69da8b87-1e7f-45f4-bd47-9a9b0a2057e0","savedPayload":{"position":{"x":12578.355481404851,"y":13661.337852891424},"targetPosition":{"x":12851.757409287682,"y":13492.383073897743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"20684141-89f4-4049-8130-5219f9934b94","savedPayload":{"position":{"x":12851.757409287682,"y":13492.383073897743},"targetPosition":{"x":13125.212433068718,"y":13323.386475315809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1193e656-0fce-4d39-8f46-316d51a8bb95","savedPayload":{"position":{"x":13125.212433068718,"y":13323.386475315809},"targetPosition":{"x":13429.193521637542,"y":12758.445533257673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1b6f79d8-d1ba-49e5-a808-42f71fba5657","savedPayload":{"position":{"x":13673.602530210288,"y":12909.838162752221},"targetPosition":{"x":13413.800171630588,"y":12369.642948734469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Three-Candles Patterns","id":"acdb9c43-0859-42be-87b0-1a600cf513d4"}}}],"id":"254b4e7d-0ede-4208-8f0a-a486dd1a0faf","savedPayload":{"position":{"x":13414.087650454898,"y":12369.640922591701},"targetPosition":{"x":12814.727007364905,"y":12369.63867824567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Candle Patterns","config":"{\n\"codeName\": \"Candle-Patterns\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Basic Candles","config":"{ \n\"codeName\": \"Basic-Candles\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"Basic Candles","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Candle Min","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)/2\ny = record.previous.min","project":"Superalgos","id":"da43ce7b-c3af-49b7-a95c-025494c40a6e","savedPayload":{"position":{"x":13110.282195608808,"y":12195.993125135315},"targetPosition":{"x":12994.216483409029,"y":12473.561191110108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"84c72ff6-fc9c-4869-bd8e-ea8404df0a0f","savedPayload":{"position":{"x":12994.216483409029,"y":12473.561191110108},"targetPosition":{"x":12875.686282346545,"y":12756.617284659204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.min","project":"Superalgos","id":"ee2ef08b-7253-46c1-a087-49feaeae0bd9","savedPayload":{"position":{"x":13360.512048293152,"y":12387.825358003378},"targetPosition":{"x":13120.78983976505,"y":12569.94772595611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b077cf02-7c54-4023-9182-4de81327ff35","savedPayload":{"position":{"x":13120.78983976505,"y":12569.94772595611},"targetPosition":{"x":12875.686282346545,"y":12756.617284659204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fe07cd8-53ed-4533-a747-05b3906b4755","savedPayload":{"position":{"x":12903.35665618375,"y":12941.244625580674},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Mean Length","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)/2\ny = record.previous.min + record.previous.meanLength","project":"Superalgos","id":"c8b8a404-7746-458c-91a4-61d13114c824","savedPayload":{"position":{"x":13674.981762867,"y":12515.834200242623},"targetPosition":{"x":13350.408326842142,"y":12803.009587984676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2b2ed3d9-a095-403e-8ed8-62f7e73e9f1c","savedPayload":{"position":{"x":13350.408326842142,"y":12803.009587984676},"targetPosition":{"x":13026.034916144921,"y":13090.580745141615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.min + record.meanLength","project":"Superalgos","id":"372fd8b2-9346-4c0a-8465-cb4e2ece90bc","savedPayload":{"position":{"x":13875.784481988381,"y":12917.116743276165},"targetPosition":{"x":13450.964955069625,"y":13003.942012342452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"628ac9f1-445b-4638-8fd5-aa62f6fd859c","savedPayload":{"position":{"x":13450.964955069625,"y":13003.942012342452},"targetPosition":{"x":13026.034916144921,"y":13090.580745141615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"86515391-e909-4183-a0bb-2f6b6d452087","savedPayload":{"position":{"x":13026.32617734286,"y":13090.269643847589},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"avgRef","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)/2\ny = record.previous.min + record.previous.avgRef","project":"Superalgos","id":"a231e15f-f884-4326-983c-001a812d2e08","savedPayload":{"position":{"x":13580.10769680475,"y":12824.10424286175},"targetPosition":{"x":13290.893379454068,"y":12905.233289258958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"41fec509-9af9-4ef7-b947-90382ad5ee5d","savedPayload":{"position":{"x":13290.893379454068,"y":12905.233289258958},"targetPosition":{"x":12992.173878231406,"y":12989.990520965595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.min + record.avgRef","project":"Superalgos","id":"69d5c95c-ec98-4656-9057-54ab9fc64a1e","savedPayload":{"position":{"x":13590.10808012087,"y":13126.102004076825},"targetPosition":{"x":13290.760663334695,"y":13065.4114836196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9703549c-8ca6-4293-b4ec-83a4f899c806","savedPayload":{"position":{"x":13290.760663334695,"y":13065.4114836196},"targetPosition":{"x":12992.173878231406,"y":12989.990520965595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3fe2df6a-c2fe-4f66-8529-c959ba7dd010","savedPayload":{"position":{"x":13072.217717807223,"y":13277.909182153533},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Candle Min","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.4,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"e19cb185-a1ae-4595-b22f-825aabca3f15","savedPayload":{"position":{"x":13899.325606638775,"y":13502.189010473792},"targetPosition":{"x":13466.00072215658,"y":13484.298235988446},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"0c47d43f-28d6-4e22-bcab-ce1a5ba86b13","savedPayload":{"position":{"x":13466.00072215658,"y":13484.298235988446},"targetPosition":{"x":13032.449816978864,"y":13466.686272810779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"aeb3daf8-939c-472d-a653-bb053b201626","savedPayload":{"position":{"x":13426.266173008375,"y":13648.937392022211},"targetPosition":{"x":13032.449816978864,"y":13466.686272810779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"84c72ff6-fc9c-4869-bd8e-ea8404df0a0f"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"cf9cdbd9-6a4d-4958-906f-555616617a31","savedPayload":{"position":{"x":13342.014716791742,"y":13763.213382731363},"targetPosition":{"x":13032.449816978864,"y":13466.686272810779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"b077cf02-7c54-4023-9182-4de81327ff35"}}}],"id":"0e718fe1-b457-49b9-a1cd-118bd9f111f4","savedPayload":{"position":{"x":13032.449816978864,"y":13466.686272810779},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Mean Length","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.4,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"51351071-cd12-48d6-aa76-8755bd6322b4","savedPayload":{"position":{"x":13666.999573020848,"y":14050.185199194617},"targetPosition":{"x":13284.381789462774,"y":13846.123152442866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8487ed2a-b56a-4d41-895c-569bf127fedc","savedPayload":{"position":{"x":13284.381789462774,"y":13846.123152442866},"targetPosition":{"x":12917.019884931922,"y":13619.27300968067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"4db28f87-f9dd-4420-87bc-d210699f8a01","savedPayload":{"position":{"x":13192.651560435994,"y":13954.60359648621},"targetPosition":{"x":12917.019884931922,"y":13619.27300968067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"2b2ed3d9-a095-403e-8ed8-62f7e73e9f1c"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"a4fa988d-7488-4bf4-90f9-2ee6fd939475","savedPayload":{"position":{"x":13065.544990465556,"y":14023.63434542394},"targetPosition":{"x":12917.019884931922,"y":13619.27300968067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"628ac9f1-445b-4638-8fd5-aa62f6fd859c"}}}],"id":"32840d7a-c3be-4c5c-8604-ddec41903a8e","savedPayload":{"position":{"x":12917.019884931922,"y":13619.27300968067},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"avgRef","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.4,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"dc036a39-a0d7-43f5-ae0a-f49f80566f35","savedPayload":{"position":{"x":13230.635172673361,"y":14417.838540049765},"targetPosition":{"x":12974.46818008449,"y":14067.767486930798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"332c16f9-b95f-4a5d-a0a7-825adec7b190","savedPayload":{"position":{"x":12974.46818008449,"y":14067.767486930798},"targetPosition":{"x":12740.57905830516,"y":13706.618600196296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"6df63fd0-62c4-49d9-aa62-43e4ebb9e2a3","savedPayload":{"position":{"x":12843.079505076355,"y":14128.428182546144},"targetPosition":{"x":12740.57905830516,"y":13706.618600196296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"41fec509-9af9-4ef7-b947-90382ad5ee5d"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"66870fcb-caf4-4e03-9db2-4f7fc0f8cae2","savedPayload":{"position":{"x":12674.343097693361,"y":14135.709533911344},"targetPosition":{"x":12740.57905830516,"y":13706.618600196296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"9703549c-8ca6-4293-b4ec-83a4f899c806"}}}],"id":"b504d259-c93f-4dfa-af0f-ffc23b3e616d","savedPayload":{"position":{"x":12740.57905830516,"y":13706.618600196296},"targetPosition":{"x":12638.251559040937,"y":13284.489270665135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"dc146044-78b9-46c7-8e91-47619c333444","savedPayload":{"position":{"x":12638.251559040937,"y":13284.489270665135},"targetPosition":{"x":12214.033103903701,"y":13194.687290359432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Basic Candles","config":"{ \n\"codeName\": \"Basic-Candles\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.name","project":"Superalgos","id":"b94b9d37-1552-4a01-b14b-4897feedd52f","savedPayload":{"position":{"x":12950.934519170283,"y":13190.023846682448},"targetPosition":{"x":12531.916496280735,"y":13304.099017127919},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c416dd7-5075-49cc-b404-52fcca7a314c","savedPayload":{"position":{"x":12531.916496280735,"y":13304.099017127919},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.size","project":"Superalgos","id":"7ab67e86-30c4-4d4c-9048-156de658edaa","savedPayload":{"position":{"x":12818.121609097314,"y":13639.906577355407},"targetPosition":{"x":12410.56426043612,"y":13508.565731215724},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"84776c6f-6b89-4889-a119-f407ad30a39b","savedPayload":{"position":{"x":12410.56426043612,"y":13508.565731215724},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Upper Shadow %","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.upperShadowPercent","project":"Superalgos","id":"1515c038-a83d-4a33-803d-93f19df9d44f","savedPayload":{"position":{"x":12551.685585087776,"y":14045.079212062652},"targetPosition":{"x":12274.567066006663,"y":13711.72979369883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bfcb212-425e-481c-93ee-4ddfe0365d04","savedPayload":{"position":{"x":12274.567066006663,"y":13711.72979369883},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Body %","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.bodyPercent","project":"Superalgos","id":"13fb74c6-4320-4755-b896-e3c15b507a8c","savedPayload":{"position":{"x":12103.605016969954,"y":14239.488944626926},"targetPosition":{"x":12050.378830236372,"y":13808.968344141702},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4787fdfa-a1b4-4252-be30-1c394ae28d23","savedPayload":{"position":{"x":12050.378830236372,"y":13808.968344141702},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Lower Shadow %","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.lowerShadowPercent","project":"Superalgos","id":"621a0736-7286-407f-be3c-7f9237c1c4e6","savedPayload":{"position":{"x":11621.729505574809,"y":14160.576139425897},"targetPosition":{"x":11809.396154587215,"y":13769.515187812322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"10570ba3-e68c-4aa0-83b9-daed46a61cee","savedPayload":{"position":{"x":11809.396154587215,"y":13769.515187812322},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Parameter: \"Nbodies\"","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.Nbodies","project":"Superalgos","id":"1ae2288d-9479-410d-9243-21430691060b","savedPayload":{"position":{"x":11258.374361905973,"y":13833.36156291626},"targetPosition":{"x":11627.688712830246,"y":13605.87956361189},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"34f62235-4353-4f23-8630-841fbee8665b","savedPayload":{"position":{"x":11627.688712830246,"y":13605.87956361189},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Parameter: \"dojiFactor\" %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.dojiFactor","project":"Superalgos","id":"165f2a72-3eac-4740-8445-c9aa133e0ae4","savedPayload":{"position":{"x":11129.516280374326,"y":13362.337376733321},"targetPosition":{"x":11563.267092073813,"y":13370.303761730143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8fe17343-1ae4-4ba8-990a-bfe78872d998","savedPayload":{"position":{"x":11563.267092073813,"y":13370.303761730143},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Parameter: \"sizeFactor\" %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFactor","project":"Superalgos","id":"6d9b3c35-1b25-46fb-8b16-ad551cf53493","savedPayload":{"position":{"x":11331.231078352494,"y":12922.89489083281},"targetPosition":{"x":11636.606888539442,"y":13137.046255151176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c2bd7cb-ea2a-48fe-9328-6e7cf397abe5","savedPayload":{"position":{"x":11636.606888539442,"y":13137.046255151176},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Parameter: \"Nlengths\"","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.Nlengths","project":"Superalgos","id":"42a0f840-7b6f-4e38-ac13-442a40767d70","savedPayload":{"position":{"x":11651.534439863974,"y":12582.697671998065},"targetPosition":{"x":11824.373947648963,"y":12980.413002185789},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"26d5e8b8-22fc-40fc-bb28-c3d5272845d0","savedPayload":{"position":{"x":11824.373947648963,"y":12980.413002185789},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Average Size Method","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeMethod","project":"Superalgos","id":"867e57e7-6fc8-4e52-834d-f20f077f37fd","savedPayload":{"position":{"x":12101.999381865786,"y":12464.470191722743},"targetPosition":{"x":12032.629345417734,"y":12893.170450699885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87d0bb1d-c8e2-47a6-85cc-4e747082305f","savedPayload":{"position":{"x":12032.629345417734,"y":12893.170450699885},"targetPosition":{"x":11997.218136246851,"y":13378.24956362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7e6dc8b6-bdeb-4f1a-bf39-a239fa100200","savedPayload":{"position":{"x":11997.218136246851,"y":13378.24956362483},"targetPosition":{"x":12214.033103903701,"y":13194.687290359432},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"09e0a24c-ead1-40c6-9e43-72b46e4294c5","savedPayload":{"position":{"x":12400.221306912656,"y":12940.15860808845},"targetPosition":{"x":12215.097662258146,"y":12369.642313054686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"One-Candle Patterns","config":"{ \n\"codeName\": \"One-Candle-Patterns\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"One-Candle Pattern","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Bearish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"e175ab11-cdad-4cfa-bc0e-e9d68fd56419","savedPayload":{"position":{"x":12966.787314972113,"y":12876.25269471072},"targetPosition":{"x":12753.134832990097,"y":13111.60081755436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f0e4b32d-4c67-44a9-b215-46dd2de99095","savedPayload":{"position":{"x":12753.134832990097,"y":13111.60081755436},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"ad0cc3d5-6a7a-45ac-b7db-41438836230c","savedPayload":{"position":{"x":13188.698583313915,"y":13175.382547406043},"targetPosition":{"x":12900.901006833647,"y":13310.765620915807},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"23dc1c78-a55d-482c-be5b-f6893e5294c7","savedPayload":{"position":{"x":12900.901006833647,"y":13310.765620915807},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.03","project":"Superalgos","id":"16686f17-868b-406b-a3ab-f4e9dbc8a002","savedPayload":{"position":{"x":13279.42407252152,"y":13536.112534371197},"targetPosition":{"x":12961.563746018306,"y":13551.287785059485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2c9565a9-49d5-4f04-91ad-a073ff669a46","savedPayload":{"position":{"x":12961.563746018306,"y":13551.287785059485},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.03","project":"Superalgos","id":"1c6a13b5-d22c-4c2f-b692-a387651394ab","savedPayload":{"position":{"x":13224.043950707455,"y":13903.667239582453},"targetPosition":{"x":12924.463794507476,"y":13796.300601228326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fe68b37d-0bf8-4347-9e38-4013fa120bc8","savedPayload":{"position":{"x":12924.463794507476,"y":13796.300601228326},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"7de429ac-d43c-4d1f-970a-69cfdcbc1fcc","savedPayload":{"position":{"x":13032.693144240584,"y":14223.005189380063},"targetPosition":{"x":12797.046356190494,"y":14009.011846078227},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a4e0461d-4d13-4a01-9332-3fd94aa6647a","savedPayload":{"position":{"x":12797.046356190494,"y":14009.011846078227},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"e156a730-1cf6-40a2-8272-8ba1ff8534a7","savedPayload":{"position":{"x":12733.447295989048,"y":14444.410884497265},"targetPosition":{"x":12597.601234203059,"y":14156.747031613177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7b205c46-8dc6-4e0b-bca6-258a84c652c5","savedPayload":{"position":{"x":12597.601234203059,"y":14156.747031613177},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bearishArrowHead","project":"Superalgos","id":"459bad82-6540-43d3-8c3c-73b119d4dfed","savedPayload":{"position":{"x":12372.086359532801,"y":14534.785266190853},"targetPosition":{"x":12356.993283442112,"y":14216.765673787346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"71bbdced-dc17-4019-a104-c37bd0ecdc98","savedPayload":{"position":{"x":12356.993283442112,"y":14216.765673787346},"targetPosition":{"x":12326.43647678502,"y":13582.024177115438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fccdf048-5edb-4377-9f0e-27a4c21e21f1","savedPayload":{"position":{"x":12354.671762636895,"y":13513.06381252222},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Trend Line","project":"Superalgos","points":[{"type":"Point","name":"Trend Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.trendLine\n","project":"Superalgos","id":"1b000a16-4143-4eb2-8b9c-9661ddad10ed","savedPayload":{"position":{"x":12564.49479407521,"y":13763.907165468876},"targetPosition":{"x":12257.881406036257,"y":13679.151491924744},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a20e46e-5535-4cb4-b34a-36faec96f4da","savedPayload":{"position":{"x":12257.881406036257,"y":13679.151491924744},"targetPosition":{"x":11951.44041975115,"y":13594.17043507212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Trend Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.trendLine","project":"Superalgos","id":"f159d45c-483e-4c46-b6ef-b1cd92d00cb7","savedPayload":{"position":{"x":12111.507160177891,"y":14210.237987526816},"targetPosition":{"x":12031.576519139893,"y":13902.108203546411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"58992b77-271b-4362-b130-251d65d8be55","savedPayload":{"position":{"x":12031.576519139893,"y":13902.108203546411},"targetPosition":{"x":11951.44041975115,"y":13594.17043507212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"edfd4367-c042-4fa0-8f77-31c218fc8d78","savedPayload":{"position":{"x":12006.161461237527,"y":13529.99650656366},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Bullish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"fba54222-55a5-437d-92aa-756f08eecdb5","savedPayload":{"position":{"x":12885.354952421774,"y":14028.932565732335},"targetPosition":{"x":12567.912568288637,"y":14008.926367535896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e8aef2aa-6d0c-42f5-82a4-7c37a157c8de","savedPayload":{"position":{"x":12567.912568288637,"y":14008.926367535896},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"187b028b-4696-4003-90a1-b5beb8ea2ba3","savedPayload":{"position":{"x":12789.899498575149,"y":14388.773065057232},"targetPosition":{"x":12504.145401287908,"y":14248.446399478964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b834103f-86be-4106-ac3c-47b326cd97b4","savedPayload":{"position":{"x":12504.145401287908,"y":14248.446399478964},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.97","project":"Superalgos","id":"e51d81db-649a-4b1b-8aad-ed2f24a9affa","savedPayload":{"position":{"x":12563.882243896085,"y":14684.427811136024},"targetPosition":{"x":12353.660014438548,"y":14445.50648548972},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"54a1db25-bb24-4ef9-bcbd-1432848214fd","savedPayload":{"position":{"x":12353.660014438548,"y":14445.50648548972},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.97","project":"Superalgos","id":"bb33e4b3-dea3-40d4-89d6-4621df7a0ae0","savedPayload":{"position":{"x":12241.933905765505,"y":14871.320693196978},"targetPosition":{"x":12139.245567248166,"y":14570.18492023167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"800f7290-42e1-4970-a00c-f4a5cd30312b","savedPayload":{"position":{"x":12139.245567248166,"y":14570.18492023167},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"a09fda1a-0f15-45d2-92ae-e780435c819e","savedPayload":{"position":{"x":11873.45260293195,"y":14920.782241319534},"targetPosition":{"x":11893.483288525418,"y":14602.982567952586},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4a83e816-d5a4-47f0-a30e-3f5e5320147e","savedPayload":{"position":{"x":11893.483288525418,"y":14602.982567952586},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"1b3b0d03-bef2-4f05-9460-19227819c39b","savedPayload":{"position":{"x":11513.550259808453,"y":14824.757072203447},"targetPosition":{"x":11653.794136719385,"y":14539.1797776978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c6806791-bd74-413b-b86c-61383118cba6","savedPayload":{"position":{"x":11653.794136719385,"y":14539.1797776978},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bullishArrowHead","project":"Superalgos","id":"931a9f64-7ec8-44a9-8555-6d03477940f2","savedPayload":{"position":{"x":11217.948185681664,"y":14598.528591439175},"targetPosition":{"x":11456.881715231077,"y":14388.474815937436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2f37b7be-5805-419d-a0a8-3e2fc5eb9e3b","savedPayload":{"position":{"x":11456.881715231077,"y":14388.474815937436},"targetPosition":{"x":11933.81300443226,"y":13968.648511355981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2591fc95-5f9b-409c-8816-11a3dd6d8581","savedPayload":{"position":{"x":11984.034903042007,"y":13878.26836015154},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Bearish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bearish Reversal\" || record.forecast === \"Bearish Continuation\" ","project":"Superalgos","id":"c92a8076-d1cf-4879-88e2-16f89c878649","savedPayload":{"position":{"x":12236.919464866973,"y":14249.652779563718},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"921dec12-c29d-4656-8ea5-6e5fc7c92469","savedPayload":{"position":{"x":12387.847506262078,"y":14606.982338984702},"targetPosition":{"x":12142.688138862082,"y":14404.326269880788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"d7ca8665-bd27-421a-be79-e5b48c4ffd3f","savedPayload":{"position":{"x":12142.688138862082,"y":14404.326269880788},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"2360af46-2b53-4cea-a26b-019107a4e4dc","savedPayload":{"position":{"x":12186.54012938603,"y":14789.682064850464},"targetPosition":{"x":12008.458799711643,"y":14525.941864105822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1beaa578-f91e-4eb9-bcc9-4c979bc9a87c","savedPayload":{"position":{"x":12008.458799711643,"y":14525.941864105822},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"6c20d736-5211-4bb1-836f-3ee460ba4f75","savedPayload":{"position":{"x":11718.157168676698,"y":14631.841471928905},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"f0e4b32d-4c67-44a9-b215-46dd2de99095"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"7870b61d-7540-4f9e-9d57-bc8b54dab81d","savedPayload":{"position":{"x":11624.89657207443,"y":14635.27817700005},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"23dc1c78-a55d-482c-be5b-f6893e5294c7"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"666d3979-14ea-4753-8d79-36a17ace6f3b","savedPayload":{"position":{"x":11533.282209875164,"y":14624.848411462455},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"2c9565a9-49d5-4f04-91ad-a073ff669a46"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"58596c8a-eab1-4926-a006-4c287afd7096","savedPayload":{"position":{"x":11444.700485827816,"y":14601.338808958732},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"fe68b37d-0bf8-4347-9e38-4013fa120bc8"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"e6073465-7636-48b1-8344-5e82a314ac1d","savedPayload":{"position":{"x":11360.688968006954,"y":14565.417394796572},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"a4e0461d-4d13-4a01-9332-3fd94aa6647a"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"87a3f44c-5361-4e65-a9f3-1c5a461600b0","savedPayload":{"position":{"x":11282.814859785536,"y":14517.89628046691},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"7b205c46-8dc6-4e0b-bca6-258a84c652c5"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"dcd75a74-5275-4181-8801-8bb625ab2545","savedPayload":{"position":{"x":11205.520630976142,"y":14451.976917011723},"targetPosition":{"x":11652.814775683713,"y":13999.315916591968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"71bbdced-dc17-4019-a104-c37bd0ecdc98"}}}],"id":"d503108f-9b4f-4aae-9e99-b92e1aedb6c8","savedPayload":{"position":{"x":11718.599893852523,"y":13906.926183828604},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Trend Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"8b777f5a-b79e-45c5-ae85-3693d946b577","savedPayload":{"position":{"x":11755.795556519053,"y":14229.537455705191},"targetPosition":{"x":11691.974757580614,"y":13936.342768517028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9ec3107b-2173-46b2-b831-7144910bd2ed","savedPayload":{"position":{"x":11691.974757580614,"y":13936.342768517028},"targetPosition":{"x":11641.97832566877,"y":13585.037797474235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Trend Line End","project":"Superalgos","id":"66cee7f2-7951-4c23-84d9-8af01e017f34","savedPayload":{"position":{"x":11447.825494466091,"y":13889.138205582145},"targetPosition":{"x":11641.97832566877,"y":13585.037797474235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line End","id":"58992b77-271b-4362-b130-251d65d8be55"}}},{"type":"Polygon Vertex","name":"Trend Line Begin","project":"Superalgos","id":"968f315d-33e1-4866-b061-42fb61964ad6","savedPayload":{"position":{"x":11292.792146015767,"y":13673.018585806767},"targetPosition":{"x":11641.97832566877,"y":13585.037797474235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line Begin","id":"0a20e46e-5535-4cb4-b34a-36faec96f4da"}}}],"id":"2e0fe089-4dae-4895-b46b-4f5e07ac9926","savedPayload":{"position":{"x":11624.330112647156,"y":13570.418318077336},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Bullish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bullish Reversal\" || record.forecast === \"Bullish Continuation\" ","project":"Superalgos","id":"e32f5ba5-7e4e-4b48-9255-985134b35bf6","savedPayload":{"position":{"x":11357.63811093109,"y":14316.804391704909},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"dc4c1077-65c7-4b76-8420-ea719c497798","savedPayload":{"position":{"x":11173.099002965217,"y":14658.344153738277},"targetPosition":{"x":11177.049699712854,"y":14338.541827205963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8f42597b-9b13-46a3-b926-bf79570f27eb","savedPayload":{"position":{"x":11177.049699712854,"y":14338.541827205963},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"97b28c5b-f7c8-41d4-82a7-2db8fe1bd533","savedPayload":{"position":{"x":10901.876094837367,"y":14615.545589640153},"targetPosition":{"x":10997.225461465077,"y":14310.93055541748},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"fc855e6f-bb88-485d-8079-99653a800a36","savedPayload":{"position":{"x":10997.225461465077,"y":14310.93055541748},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"6f1e0d8e-a1a7-4fc7-ab01-d2e4d5cb0807","savedPayload":{"position":{"x":10731.981428910665,"y":14147.842086652166},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"e8aef2aa-6d0c-42f5-82a4-7c37a157c8de"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"7bff821f-bb70-4a9f-89b9-74bd1dcde01f","savedPayload":{"position":{"x":10670.759484440765,"y":14076.638430646832},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"b834103f-86be-4106-ac3c-47b326cd97b4"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"e14aa3b8-ed10-4358-87db-81d0f2fd580c","savedPayload":{"position":{"x":10620.33615940385,"y":13998.902027767084},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"54a1db25-bb24-4ef9-bcbd-1432848214fd"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"fa285436-8897-49fa-81bf-bcf727e368de","savedPayload":{"position":{"x":10582.000977310683,"y":13915.198526121476},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"800f7290-42e1-4970-a00c-f4a5cd30312b"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"cb9d9c29-9b41-42ba-bb6b-3e63dcbd253e","savedPayload":{"position":{"x":10557.67319869675,"y":13826.913879151696},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"4a83e816-d5a4-47f0-a30e-3f5e5320147e"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"56ccabba-f502-416d-92ff-da20ee90ddf3","savedPayload":{"position":{"x":10548.680698550143,"y":13736.272153476048},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"c6806791-bd74-413b-b86c-61383118cba6"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"688ebb45-45d7-4e2a-bfbc-f0bb799b2360","savedPayload":{"position":{"x":10553.135485379262,"y":13634.736848053803},"targetPosition":{"x":11186.964671412112,"y":13702.781651538931},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"2f37b7be-5805-419d-a0a8-3e2fc5eb9e3b"}}}],"id":"2cd7982f-ecc8-41ce-8b27-ede1d1ad7d8c","savedPayload":{"position":{"x":11279.330376373975,"y":13626.297597199202},"targetPosition":{"x":11790.262266933503,"y":13310.57843518611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"0a02f148-0036-4d1c-aac5-a4e4ee5c25e7","savedPayload":{"position":{"x":11790.289595781247,"y":13310.758361954844},"targetPosition":{"x":11727.758891013418,"y":12713.932689713762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"One-Candle Patterns","config":"{ \n\"codeName\": \"One-Candle-Patterns\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Pattern Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.name","project":"Superalgos","id":"664bc7e8-5c76-4dea-82ad-acef43eaa2da","savedPayload":{"position":{"x":11503.24166222379,"y":13184.55543328808},"targetPosition":{"x":11427.667996814627,"y":12893.673944833996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"119aa231-cf07-40a8-98ee-679e8d4e99ce","savedPayload":{"position":{"x":11427.667996814627,"y":12893.673944833996},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Direction","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trend","project":"Superalgos","id":"d4102f27-72a7-412c-b9b4-244e3ef5100d","savedPayload":{"position":{"x":11045.261667304432,"y":13051.792456705032},"targetPosition":{"x":11225.271673051557,"y":12811.312124155755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2409211c-7992-4b1a-8273-25ce7e284b72","savedPayload":{"position":{"x":11225.271673051557,"y":12811.312124155755},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Forecast","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.forecast","project":"Superalgos","id":"19821933-d558-452e-9dc0-5df90116fcc1","savedPayload":{"position":{"x":10805.053787332723,"y":12588.731544187445},"targetPosition":{"x":11105.158566719565,"y":12579.758005317319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e240fe07-156c-4766-8fe0-f123781842ef","savedPayload":{"position":{"x":11105.158566719565,"y":12579.758005317319},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Method","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendMethod","project":"Superalgos","id":"7541dc87-d801-48bc-b2d8-391e605c0c5e","savedPayload":{"position":{"x":11017.11827995778,"y":12112.733939621294},"targetPosition":{"x":11211.203537965612,"y":12341.740726136326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e0c328ed-84b7-43a2-bfb2-274d1b1d3bae","savedPayload":{"position":{"x":11211.203537965612,"y":12341.740726136326},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Period","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"6b66e742-6d13-43d6-a00f-a6ed9d070249","savedPayload":{"position":{"x":11520.496218124354,"y":11981.382989475835},"targetPosition":{"x":11463.211475389435,"y":12276.13478941713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e457e54c-7cbb-4866-9b67-3bb71332e2c5","savedPayload":{"position":{"x":11463.211475389435,"y":12276.13478941713},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendLine","project":"Superalgos","id":"e33fff96-c3f5-4376-8d90-4feafc0df08b","savedPayload":{"position":{"x":11926.287700064935,"y":12232.983607795482},"targetPosition":{"x":11659.762930427045,"y":12370.396923435794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"42d2f0eb-65fa-4358-af25-484517433307","savedPayload":{"position":{"x":11659.762930427045,"y":12370.396923435794},"targetPosition":{"x":11405.71685621441,"y":12570.897585009838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d2af80dc-8d17-42f3-b88a-af1726c59859","savedPayload":{"position":{"x":11405.71685621441,"y":12570.897585009838},"targetPosition":{"x":11727.758891013418,"y":12713.932689713762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"14f83391-e4a6-470c-90c0-19763f83429b","savedPayload":{"position":{"x":11729.82337237241,"y":12721.99448120311},"targetPosition":{"x":12215.097662258146,"y":12369.642313054686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Two-Candles Patterns","config":"{ \n\"codeName\": \"Two-Candles Patterns\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"Two-Candles Patterns","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Bearish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"7dc394b3-ca00-4738-a554-420b393aa4f8","savedPayload":{"position":{"x":12081.669025957919,"y":13228.392352613271},"targetPosition":{"x":11791.55312586025,"y":13097.721183581312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7291f0d5-78e1-4d7c-a73d-2068e491344b","savedPayload":{"position":{"x":11791.55312586025,"y":13097.721183581312},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"cfdc25f2-f236-4fd0-a09c-11759c6a4e07","savedPayload":{"position":{"x":11865.558890901124,"y":13531.377115242738},"targetPosition":{"x":11647.364506388607,"y":13299.452236485917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"87745033-dc64-4d86-8579-29cf35124f9a","savedPayload":{"position":{"x":11647.364506388607,"y":13299.452236485917},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.04","project":"Superalgos","id":"f30d7904-2195-4bab-93d4-d5083000fe6b","savedPayload":{"position":{"x":11550.176871809374,"y":13728.931502827954},"targetPosition":{"x":11437.462553360401,"y":13431.390771359956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"87fc7e3a-455f-49bb-ab44-fc06ba845f00","savedPayload":{"position":{"x":11437.462553360401,"y":13431.390771359956},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.04","project":"Superalgos","id":"f29b34a0-8604-4cde-b52c-237a422ccb31","savedPayload":{"position":{"x":11183.744630904748,"y":13790.501521813234},"targetPosition":{"x":11193.199657975041,"y":13472.326136769318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2bab7192-a08c-4461-b36e-f369491dfd42","savedPayload":{"position":{"x":11193.199657975041,"y":13472.326136769318},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"20df1362-6e33-45c3-bf48-c4a76035b428","savedPayload":{"position":{"x":10820.975126093734,"y":13706.937999852966},"targetPosition":{"x":10951.501038153674,"y":13416.645609543397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3c9d80e6-ad20-4b47-a8f5-1bf19a0b80e2","savedPayload":{"position":{"x":10951.501038153674,"y":13416.645609543397},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"64a8c860-86c4-40da-9ca0-d5e424ade757","savedPayload":{"position":{"x":10517.731202702806,"y":13490.880507975051},"targetPosition":{"x":10749.511929986398,"y":13272.72308501484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c6a0d716-6534-453b-9d0f-a8c6faa502f0","savedPayload":{"position":{"x":10749.511929986398,"y":13272.72308501484},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bearishArrowHead","project":"Superalgos","id":"62fc84a0-55e5-452c-b72d-4c91174ea85a","savedPayload":{"position":{"x":10320.372953175593,"y":13175.106787574574},"targetPosition":{"x":10617.961927952889,"y":13062.323461507352},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fef9ea3b-84c5-43cd-9602-96f8170065bd","savedPayload":{"position":{"x":10617.961927952889,"y":13062.323461507352},"targetPosition":{"x":11212.187861029877,"y":12837.026324270992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9020cd21-a011-4b59-aec4-56469a5ce79f","savedPayload":{"position":{"x":11213.38664517409,"y":12801.495822030201},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Trend Line","project":"Superalgos","points":[{"type":"Point","name":"Trend Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.trendLine\n","project":"Superalgos","id":"aed6b5b4-e6e5-4e5c-a13b-1d707c93c15a","savedPayload":{"position":{"x":11113.507682889966,"y":13142.659108467704},"targetPosition":{"x":11099.45874563968,"y":12824.284507716442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"691a374a-ab65-4dc5-b788-979162f87185","savedPayload":{"position":{"x":11099.45874563968,"y":12824.284507716442},"targetPosition":{"x":11084.830629780052,"y":12484.184133961455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Trend Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.trendLine","project":"Superalgos","id":"9b3acde4-3360-4869-8685-c08922111bd5","savedPayload":{"position":{"x":10529.632935158039,"y":12839.196166765416},"targetPosition":{"x":10797.891779860525,"y":12667.866308006245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e2e8a50-8a93-4696-9ed7-f8ea1da75c5e","savedPayload":{"position":{"x":10797.891779860525,"y":12667.866308006245},"targetPosition":{"x":11084.830629780052,"y":12484.184133961455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7af63af8-4b52-4c71-b427-906a0eaa37d2","savedPayload":{"position":{"x":11092.916769534419,"y":12468.478518411388},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Bullish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"7cd5ae63-7c34-4ce3-84f9-8de0b14fbafa","savedPayload":{"position":{"x":10959.299595238615,"y":13506.956982416497},"targetPosition":{"x":10880.512397454935,"y":13198.619706443913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"38b0018b-d162-492e-90b3-604efc79c16e","savedPayload":{"position":{"x":10880.512397454935,"y":13198.619706443913},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"3221cc5c-76c7-4335-bc1c-a781c1c7a6f4","savedPayload":{"position":{"x":10588.109178089904,"y":13527.18531335486},"targetPosition":{"x":10633.099332738737,"y":13212.082254254374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"66a65473-db28-42bf-8491-3497a35cc42b","savedPayload":{"position":{"x":10633.099332738737,"y":13212.082254254374},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.96","project":"Superalgos","id":"5dbc1498-0b47-48cd-a37c-1a4f19f6c788","savedPayload":{"position":{"x":10236.942369559187,"y":13403.573252047388},"targetPosition":{"x":10399.134866069639,"y":13129.728681760449},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cb37189b-fdb7-4cd7-aa78-1dfd71c8e614","savedPayload":{"position":{"x":10399.134866069639,"y":13129.728681760449},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.96","project":"Superalgos","id":"1bcf2a18-15b8-4a2c-b7b6-1167c00ff5e9","savedPayload":{"position":{"x":9959.818895956381,"y":13154.961562770124},"targetPosition":{"x":10214.505855448824,"y":12964.10500188361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"aae0a6cc-e05b-402f-800c-807df07b1f37","savedPayload":{"position":{"x":10214.505855448824,"y":12964.10500188361},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"8011dcdd-1c27-4bcb-8ea6-3344573aa905","savedPayload":{"position":{"x":9798.912670083482,"y":12819.251404014767},"targetPosition":{"x":10107.310366028767,"y":12740.442011037694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a5f609bd-7162-4155-8778-d085b000ef04","savedPayload":{"position":{"x":10107.310366028767,"y":12740.442011037694},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"37fa781c-1480-47fd-a862-39894108dc46","savedPayload":{"position":{"x":9778.739027659627,"y":12448.092869156477},"targetPosition":{"x":10093.864823424738,"y":12493.063795838532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6edd83d4-739a-4651-9204-2a0f617e1256","savedPayload":{"position":{"x":10093.864823424738,"y":12493.063795838532},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bullishArrowHead","project":"Superalgos","id":"65f9907e-ab3a-4ef4-a902-b8204afc49d7","savedPayload":{"position":{"x":9902.427525553674,"y":12096.831762536813},"targetPosition":{"x":10176.248977247458,"y":12259.029136441137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b98d1777-f3a2-4bcc-8312-6d89d1c6662e","savedPayload":{"position":{"x":10176.248977247458,"y":12259.029136441137},"targetPosition":{"x":10723.008860865695,"y":12582.979038431424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20da6d05-3166-4ba2-bd3c-b21770ae1958","savedPayload":{"position":{"x":10751.570622963045,"y":12561.484678552326},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Bearish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bearish Reversal\" || record.forecast === \"Bearish Continuation\" ","project":"Superalgos","id":"bebcd91f-d028-4d8c-bc25-317d19f1b955","savedPayload":{"position":{"x":10547.225810413958,"y":12958.070836037545},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"8d874a62-2e9c-43e9-9632-e93a7e25d8c3","savedPayload":{"position":{"x":10255.774920760836,"y":13211.578104172451},"targetPosition":{"x":10371.835461133287,"y":12915.08309564192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6e948385-96a4-40ba-b8db-eb11d079aad1","savedPayload":{"position":{"x":10371.835461133287,"y":12915.08309564192},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"65302767-1fb6-4a56-b981-4ca898e3fc1f","savedPayload":{"position":{"x":10020.659017568367,"y":13075.667244235188},"targetPosition":{"x":10215.521348619495,"y":12825.329035117491},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6365634c-c753-4be1-9f4e-d81a88690b96","savedPayload":{"position":{"x":10215.521348619495,"y":12825.329035117491},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"952bb578-3cc3-4576-b7dd-a043f2b4d719","savedPayload":{"position":{"x":10023.48833843214,"y":12581.564788637845},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"7291f0d5-78e1-4d7c-a73d-2068e491344b"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"bc4ee454-7c2b-4808-a99c-002afae05d39","savedPayload":{"position":{"x":9991.618731545608,"y":12493.602361444893},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"87745033-dc64-4d86-8579-29cf35124f9a"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"6ad8a90c-4d6e-47ed-a4be-ae3a5684b26d","savedPayload":{"position":{"x":9972.902987588292,"y":12403.16211735402},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"87fc7e3a-455f-49bb-ab44-fc06ba845f00"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"a49d5c98-f797-45ec-832a-c89de61c5030","savedPayload":{"position":{"x":9967.760318235112,"y":12311.561734142659},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"2bab7192-a08c-4461-b36e-f369491dfd42"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"5ee4c947-de43-4212-adf9-28d28820da8e","savedPayload":{"position":{"x":9975.866852210052,"y":12220.490826727377},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"3c9d80e6-ad20-4b47-a8f5-1bf19a0b80e2"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"c6e490ea-bdfd-4738-84e7-dcd8e1078605","savedPayload":{"position":{"x":9998.040124198185,"y":12132.058684612664},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"c6a0d716-6534-453b-9d0f-a8c6faa502f0"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"2aaa39e8-be04-491e-862e-b1bb03c8d29d","savedPayload":{"position":{"x":10036.898820107854,"y":12038.160441326048},"targetPosition":{"x":10605.874193045394,"y":12323.99630942156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"fef9ea3b-84c5-43cd-9602-96f8170065bd"}}}],"id":"49566c3d-5038-4737-a68a-4f1f99a53296","savedPayload":{"position":{"x":10642.267838474036,"y":12317.753793122203},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Trend Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"5d90400c-c680-452a-b5d6-dd01f3483a67","savedPayload":{"position":{"x":10337.348569543352,"y":12458.139436776717},"targetPosition":{"x":10611.682653683314,"y":12297.471357014598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6ab5c6b9-d4e4-4b61-a135-17bb3a0204cb","savedPayload":{"position":{"x":10611.682653683314,"y":12297.471357014598},"targetPosition":{"x":10923.100711187111,"y":12121.738134005163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Trend Line End","project":"Superalgos","id":"d99e5489-5977-4ca7-9d11-a65feaeb3e1e","savedPayload":{"position":{"x":10569.715657597928,"y":12029.772984986777},"targetPosition":{"x":10923.100711187111,"y":12121.738134005163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line End","id":"1e2e8a50-8a93-4696-9ed7-f8ea1da75c5e"}}},{"type":"Polygon Vertex","name":"Trend Line Begin","project":"Superalgos","id":"0f83b930-9073-41a5-a3e6-59ea6b3ebafd","savedPayload":{"position":{"x":10728.471841649476,"y":11858.17832191613},"targetPosition":{"x":10923.100711187111,"y":12121.738134005163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line Begin","id":"691a374a-ab65-4dc5-b788-979162f87185"}}}],"id":"f826e8bf-cc5c-4b7f-9d15-1fc6a45d7ced","savedPayload":{"position":{"x":10940.393728528645,"y":12126.25059692012},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Bullish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bullish Reversal\" || record.forecast === \"Bullish Continuation\" ","project":"Superalgos","id":"edbfaf8f-8507-4d7b-9057-353f9571e615","savedPayload":{"position":{"x":10215.082383948044,"y":12139.878913886543},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"010c4131-393a-474e-98af-444ebfbb7a8d","savedPayload":{"position":{"x":9833.414670144659,"y":12069.145526322616},"targetPosition":{"x":10138.042642929075,"y":11976.09447933373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"5f6e62fc-4d25-4af4-86df-ca18bdd1e897","savedPayload":{"position":{"x":10138.042642929075,"y":11976.09447933373},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"51545ef3-4202-4f31-8746-908b4d04e273","savedPayload":{"position":{"x":9792.30270377977,"y":11800.387114389887},"targetPosition":{"x":10110.39586784242,"y":11797.362033645104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"504af6cf-5682-4ec9-90f1-3b5ac174cb67","savedPayload":{"position":{"x":10110.39586784242,"y":11797.362033645104},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"e9090bdf-ffe5-4031-89d1-3de33dec1105","savedPayload":{"position":{"x":10182.22258092722,"y":11496.631581233105},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"38b0018b-d162-492e-90b3-604efc79c16e"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"4a190301-2d52-49ae-a061-9bb553ea1c0f","savedPayload":{"position":{"x":10230.791616757273,"y":11416.978910183603},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"66a65473-db28-42bf-8491-3497a35cc42b"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"f5a0eaa5-7837-4d60-8040-37f4353e3b27","savedPayload":{"position":{"x":10290.110630286388,"y":11346.42736434188},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"cb37189b-fdb7-4cd7-aa78-1dfd71c8e614"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"13577516-ccb2-469f-9d59-f5bc71c16e77","savedPayload":{"position":{"x":10358.219467968815,"y":11285.06903206751},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"aae0a6cc-e05b-402f-800c-807df07b1f37"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"9884c89e-fbb3-4101-b19f-0522b933175c","savedPayload":{"position":{"x":10434.439258931961,"y":11234.635423189224},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"a5f609bd-7162-4155-8778-d085b000ef04"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"a089c901-705c-4b1a-bf29-fca8669ad902","savedPayload":{"position":{"x":10517.104889258939,"y":11196.058618230374},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"6edd83d4-739a-4651-9204-2a0f617e1256"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"6a3d330f-6852-4cb0-80fe-72c3bf02aa31","savedPayload":{"position":{"x":10614.605112626243,"y":11167.719391985378},"targetPosition":{"x":10746.107838810822,"y":11790.509484034019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"b98d1777-f3a2-4bcc-8312-6d89d1c6662e"}}}],"id":"ba0bcada-77c5-450e-a1fc-7708bcaca60b","savedPayload":{"position":{"x":10773.334134915302,"y":11813.695355340686},"targetPosition":{"x":11231.392565405375,"y":12201.823501341809},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"e0c63725-4cfb-4d1e-9b70-80343de2e9b3","savedPayload":{"position":{"x":11231.392565405375,"y":12201.823501341809},"targetPosition":{"x":11727.615567480334,"y":12007.611552648877},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Two-Candles Patterns","config":"{ \n\"codeName\": \"Two-Candles Patterns\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Pattern Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.name","project":"Superalgos","id":"6d2625d7-82c7-4186-95a7-8bfe0892446a","savedPayload":{"position":{"x":11283.60325910434,"y":11733.771042901757},"targetPosition":{"x":11536.816677975617,"y":11572.497201734053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f5538abe-a9aa-42ad-9c30-798dc41ddb80","savedPayload":{"position":{"x":11536.816677975617,"y":11572.497201734053},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Direction","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trend","project":"Superalgos","id":"7f273725-f758-4f3e-bc3a-d7d47f919c7a","savedPayload":{"position":{"x":11221.342167567727,"y":11216.763111093916},"targetPosition":{"x":11505.65711683382,"y":11313.913731340108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e819599-22c9-4acd-ac77-92f18b20cb61","savedPayload":{"position":{"x":11505.65711683382,"y":11313.913731340108},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Forecast","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.forecast","project":"Superalgos","id":"43090bdd-e415-48e8-ba75-4b80d4f0aeee","savedPayload":{"position":{"x":11587.433740239627,"y":10845.22732612298},"targetPosition":{"x":11688.715066228397,"y":11128.116867002602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39649444-cba8-41d2-bb32-064f43cf8df4","savedPayload":{"position":{"x":11688.715066228397,"y":11128.116867002602},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Method","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendMethod","project":"Superalgos","id":"f7a45eca-7fe0-4837-b719-92e81fa0774d","savedPayload":{"position":{"x":12105.583378364245,"y":10899.670490615743},"targetPosition":{"x":11947.815008030855,"y":11155.347252365762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6cb4eef6-735b-409a-92c4-fe2b2e1e82be","savedPayload":{"position":{"x":11947.815008030855,"y":11155.347252365762},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Period","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"75c3e3bd-c749-463d-bae4-296abf83f078","savedPayload":{"position":{"x":12386.315782092952,"y":11338.958272360718},"targetPosition":{"x":12088.185253307467,"y":11375.065651970302},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4c31ec17-bf6c-4dfc-8f42-1e7fe7e77297","savedPayload":{"position":{"x":12088.185253307467,"y":11375.065651970302},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendLine","project":"Superalgos","id":"d9e33fbf-8990-4363-b674-f1ec7f71bfcd","savedPayload":{"position":{"x":12217.052442251977,"y":11831.949764622583},"targetPosition":{"x":12003.765004696092,"y":11621.516368520652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d4f75b19-1a90-48d8-b6fe-9f064505ae93","savedPayload":{"position":{"x":12003.765004696092,"y":11621.516368520652},"targetPosition":{"x":11790.037630675673,"y":11411.122620839005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6426039f-b3dc-443b-bf6a-faa1dd1e3f2c","savedPayload":{"position":{"x":11790.037630675673,"y":11411.122620839005},"targetPosition":{"x":11727.615567480334,"y":12007.611552648877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3bf46641-3478-41fd-8407-0af20e72f30b","savedPayload":{"position":{"x":11729.812000058475,"y":12017.18166248464},"targetPosition":{"x":12215.097662258146,"y":12369.642313054686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Three-Candles Patterns","config":"{ \n\"codeName\": \"Three-Candles Patterns\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"Three-Candles Patterns","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Bearish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"050fd307-0763-423f-b0a7-488f1e22b2f0","savedPayload":{"position":{"x":11324.527384500681,"y":12406.38229840523},"targetPosition":{"x":11357.150548904494,"y":12107.926819744322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b20f834d-a9d0-419e-87ce-c9d56cdfe948","savedPayload":{"position":{"x":11357.150548904494,"y":12107.926819744322},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"ea09a04d-33f3-430d-9210-b60a0d93accf","savedPayload":{"position":{"x":10989.478246943294,"y":12300.968866784184},"targetPosition":{"x":11133.9280344324,"y":12037.54285531861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d119f364-4c32-4605-afcb-025e62d32f20","savedPayload":{"position":{"x":11133.9280344324,"y":12037.54285531861},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bearishArrowHead*1.05","project":"Superalgos","id":"c472d80d-ff4c-4bdf-af76-b8fb1c9dd3f5","savedPayload":{"position":{"x":10720.279513907313,"y":12075.314930641796},"targetPosition":{"x":10954.548563945656,"y":11887.204487159095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0e94de71-51dc-4d00-81fc-db6a47af48e9","savedPayload":{"position":{"x":10954.548563945656,"y":11887.204487159095},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.05","project":"Superalgos","id":"c851f754-5148-4d6c-abef-446f4dcbf95c","savedPayload":{"position":{"x":10557.890581790769,"y":11763.786865343474},"targetPosition":{"x":10846.355432312044,"y":11679.660655609789},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"54f3f9d8-a0fd-489b-a280-5791c92afe4a","savedPayload":{"position":{"x":10846.355432312044,"y":11679.660655609789},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"305bea41-e179-499b-bff8-687f861b575a","savedPayload":{"position":{"x":10527.04933326846,"y":11414.42376465991},"targetPosition":{"x":10825.810832847692,"y":11446.807725358429},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"75712c99-427f-4995-ad28-116f514f1b1d","savedPayload":{"position":{"x":10825.810832847692,"y":11446.807725358429},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bearishArrowHead*1.01","project":"Superalgos","id":"3fd2696f-e7e8-41f5-ae74-e757cb72b755","savedPayload":{"position":{"x":10632.428468545808,"y":11079.358718626241},"targetPosition":{"x":10896.042154075487,"y":11223.571957293143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"32a9e24a-ecbb-4272-868f-8a2c1131d780","savedPayload":{"position":{"x":10896.042154075487,"y":11223.571957293143},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bearishArrowHead","project":"Superalgos","id":"b02696af-5430-4311-a2b8-b7a69d5f085b","savedPayload":{"position":{"x":10869.253470113206,"y":10821.079679334563},"targetPosition":{"x":11046.26565264284,"y":11044.443042101777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"da13c2e7-5b21-44b3-98ef-e101a208cd82","savedPayload":{"position":{"x":11046.26565264284,"y":11044.443042101777},"targetPosition":{"x":11422.182189384399,"y":11511.591811699003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ed6c9b38-f0d8-49d8-b6e6-831ba4391e67","savedPayload":{"position":{"x":11421.68395596676,"y":11511.47674623867},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Trend Line","project":"Superalgos","points":[{"type":"Point","name":"Trend Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.trendLine\n","project":"Superalgos","id":"8df901ad-9507-4c1b-aa66-e80e52142e64","savedPayload":{"position":{"x":11018.026290779453,"y":11461.988224626097},"targetPosition":{"x":11317.434770425523,"y":11350.838236765072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f05e403b-b940-4007-be9d-517cd5f5b761","savedPayload":{"position":{"x":11317.434770425523,"y":11350.838236765072},"targetPosition":{"x":11636.051175870336,"y":11232.40613407486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Trend Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.trendLine","project":"Superalgos","id":"c790f239-fe7c-488c-a22c-ea82c2ea43f3","savedPayload":{"position":{"x":11125.28057644652,"y":10814.392352371871},"targetPosition":{"x":11372.021622670312,"y":11016.85472000743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e185278f-a45c-43e3-8691-6252e48809cc","savedPayload":{"position":{"x":11372.021622670312,"y":11016.85472000743},"targetPosition":{"x":11636.051175870336,"y":11232.40613407486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"30170318-2cab-4bb6-ad3b-362b5a25d245","savedPayload":{"position":{"x":11701.163255670075,"y":11294.346218428935},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Bullish Arrow","project":"Superalgos","points":[{"type":"Point","name":"-1-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin-(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"91cd5c4e-6dc9-41f4-abba-e66c6d9c7c3e","savedPayload":{"position":{"x":10624.026319850509,"y":11428.916637310593},"targetPosition":{"x":10892.929330483097,"y":11258.604149943585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a9852c0f-8ac8-4b9d-ac29-e8d8f29da720","savedPayload":{"position":{"x":10892.929330483097,"y":11258.604149943585},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-2-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"99075b18-7979-4f15-915a-272a4debd949","savedPayload":{"position":{"x":10489.902495174934,"y":11081.532900246073},"targetPosition":{"x":10803.601612376347,"y":11027.166570653368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bb29fdb8-abfe-4377-9063-6790f2eb8d8f","savedPayload":{"position":{"x":10803.601612376347,"y":11027.166570653368},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-3-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.bullishArrowHead*0.94","project":"Superalgos","id":"9ab43674-72c8-4525-8697-49cbf37785e0","savedPayload":{"position":{"x":10499.031312302577,"y":10709.954769775604},"targetPosition":{"x":10809.668994068212,"y":10779.570251055515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a46f8fdb-d00f-46f6-8ec9-3ef0166107ef","savedPayload":{"position":{"x":10809.668994068212,"y":10779.570251055515},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-4-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.94","project":"Superalgos","id":"cb153aae-7f46-4fbc-aa01-26f7193e8eaf","savedPayload":{"position":{"x":10649.76934057926,"y":10369.596547442874},"targetPosition":{"x":10910.115834958771,"y":10552.784819583858},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2e60f4be-e8cc-4489-81f6-27fa3f61921b","savedPayload":{"position":{"x":10910.115834958771,"y":10552.784819583858},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-5-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"0b2f59a6-9de6-4ccd-81bc-28288491d705","savedPayload":{"position":{"x":10919.28648169888,"y":10112.852760097594},"targetPosition":{"x":11089.584569288465,"y":10381.771367946058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1740e52b-986e-49cf-bb3f-c373200c4449","savedPayload":{"position":{"x":11089.584569288465,"y":10381.771367946058},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-6-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end+(record.end-record.begin)\ny = record.bullishArrowHead*0.99","project":"Superalgos","id":"ee129388-9aec-4709-bf79-3a3b83fe769e","savedPayload":{"position":{"x":11266.543621745615,"y":9978.735012460302},"targetPosition":{"x":11320.985363948239,"y":10292.34083148858},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c8b169eb-6d38-41ab-bc48-e5a08c6f9f45","savedPayload":{"position":{"x":11320.985363948239,"y":10292.34083148858},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-7-","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end-(record.end-record.begin)/2\ny = record.bullishArrowHead","project":"Superalgos","id":"c58904a7-8615-4a27-bd74-1966b35e8924","savedPayload":{"position":{"x":11638.357912139312,"y":9987.858888721516},"targetPosition":{"x":11568.778168261073,"y":10298.485678645851},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f5cee1fe-b34d-47e5-8d4a-26061487b242","savedPayload":{"position":{"x":11568.778168261073,"y":10298.485678645851},"targetPosition":{"x":11429.678966932031,"y":10918.512902833403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b8b4b3de-a98c-4d32-a385-61a186871641","savedPayload":{"position":{"x":11506.915828734796,"y":10998.315396612685},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Bearish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bearish Reversal\" || record.forecast === \"Bearish Continuation\" ","project":"Superalgos","id":"4db8acef-2d4b-4e56-b319-d32b145c4fc1","savedPayload":{"position":{"x":11120.432354843659,"y":10951.91529565518},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"da54ef22-f928-44a9-ba54-ddc157d6e2fd","savedPayload":{"position":{"x":10806.873898190148,"y":10763.18839847818},"targetPosition":{"x":11106.744354147279,"y":10781.812418494985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bd6aeeb9-f9ce-4289-84ee-b89e5bce37ed","savedPayload":{"position":{"x":11106.744354147279,"y":10781.812418494985},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"e73e98ac-0abf-488c-88c7-5f218487754a","savedPayload":{"position":{"x":10859.245614224761,"y":10511.929220489948},"targetPosition":{"x":11141.630684939842,"y":10614.4482885281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"871328e3-7832-4dc2-8758-72612387f556","savedPayload":{"position":{"x":11141.630684939842,"y":10614.4482885281},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"bc05844f-b3a3-4f25-8688-b555ff25cd31","savedPayload":{"position":{"x":11302.355236872623,"y":10373.968629056248},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"b20f834d-a9d0-419e-87ce-c9d56cdfe948"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"a7f33d57-8a91-4bf6-a755-2f9572b02d0b","savedPayload":{"position":{"x":11372.476521465542,"y":10318.134391215368},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"d119f364-4c32-4605-afcb-025e62d32f20"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"4f2d69c6-4919-44a1-b4f4-b11c4d07a8d5","savedPayload":{"position":{"x":11448.79650033747,"y":10274.624091469272},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"0e94de71-51dc-4d00-81fc-db6a47af48e9"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"cae92b34-1055-4413-8521-b00838b6b3a1","savedPayload":{"position":{"x":11529.858019041756,"y":10243.13761569657},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"54f3f9d8-a0fd-489b-a280-5791c92afe4a"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"26a5fbf5-1e3c-49a3-a80e-89a38760a6ce","savedPayload":{"position":{"x":11614.189489712771,"y":10223.814351728308},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"75712c99-427f-4995-ad28-116f514f1b1d"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"85dd4fe1-e267-4e2c-8249-e5a4ad8ac57b","savedPayload":{"position":{"x":11700.198918122824,"y":10216.841913644419},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"32a9e24a-ecbb-4272-868f-8a2c1131d780"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"0b35f295-6655-45ea-8050-3ea4d565b0a8","savedPayload":{"position":{"x":11801.24425344072,"y":10225.681176289936},"targetPosition":{"x":11705.462132060955,"y":10819.194767333567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"da13c2e7-5b21-44b3-98ef-e101a208cd82"}}}],"id":"d6bca38f-dad2-4bad-b869-718840793911","savedPayload":{"position":{"x":11705.146105578871,"y":10818.856726081758},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Trend Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"735def02-7235-4d8d-b742-2606e271785c","savedPayload":{"position":{"x":11435.336042631767,"y":10501.686121738185},"targetPosition":{"x":11673.194319314665,"y":10712.54742741141},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1cb25c02-7f14-4290-a1dd-cdecfa3d41f1","savedPayload":{"position":{"x":11673.194319314665,"y":10712.54742741141},"targetPosition":{"x":11929.748562154677,"y":10966.35778378913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Trend Line End","project":"Superalgos","id":"ca4b7aaa-e204-477b-917d-5b0d73dcd9ae","savedPayload":{"position":{"x":11907.826965656746,"y":10602.14416881982},"targetPosition":{"x":11929.748562154677,"y":10966.35778378913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line End","id":"e185278f-a45c-43e3-8691-6252e48809cc"}}},{"type":"Polygon Vertex","name":"Trend Line Begin","project":"Superalgos","id":"1e9cb0f5-9153-4ebf-bea2-e4cdff34e27d","savedPayload":{"position":{"x":12147.289057803955,"y":10669.790708918592},"targetPosition":{"x":11929.748562154677,"y":10966.35778378913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Trend Line Begin","id":"f05e403b-b940-4007-be9d-517cd5f5b761"}}}],"id":"954cc880-be0c-444b-b810-ddf42e1d6d03","savedPayload":{"position":{"x":11979.707908369968,"y":11043.57282104919},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Bullish Arrow","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.forecast === \"Bullish Reversal\" || record.forecast === \"Bullish Continuation\" ","project":"Superalgos","id":"71c1088c-78e4-4b13-a432-48488e81f5a9","savedPayload":{"position":{"x":11693.859176247388,"y":10298.699813689967},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n\"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"26a20027-9ab4-483f-8e8b-54c5feae8eb7","savedPayload":{"position":{"x":11643.419820689563,"y":9914.086480326054},"targetPosition":{"x":11825.93356954951,"y":10174.82963028933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"784e3863-e27c-439a-b219-d2257040f9a8","savedPayload":{"position":{"x":11825.93356954951,"y":10174.82963028933},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"c87d6249-dfd9-4bfc-b6d5-1033dc34ab93","savedPayload":{"position":{"x":11886.106262010857,"y":9791.47362789698},"targetPosition":{"x":11987.584767777058,"y":10093.17626721764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c307cae0-1d47-4fbd-b17e-c71ed0b460a2","savedPayload":{"position":{"x":11987.584767777058,"y":10093.17626721764},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-1-","project":"Superalgos","id":"01f59ec4-922f-4f32-89ff-271b4a1715ff","savedPayload":{"position":{"x":12295.557058389408,"y":10068.33744954726},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-1-","id":"a9852c0f-8ac8-4b9d-ac29-e8d8f29da720"}}},{"type":"Polygon Vertex","name":"-2-","project":"Superalgos","id":"63a0a7cf-0e25-4c76-a647-7bce1cf8349d","savedPayload":{"position":{"x":12386.33054812473,"y":10089.876159037365},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-2-","id":"bb29fdb8-abfe-4377-9063-6790f2eb8d8f"}}},{"type":"Polygon Vertex","name":"-3-","project":"Superalgos","id":"34336858-138b-4d29-8e19-963f987eeb7a","savedPayload":{"position":{"x":12471.86690608988,"y":10124.273647152782},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-3-","id":"a46f8fdb-d00f-46f6-8ec9-3ef0166107ef"}}},{"type":"Polygon Vertex","name":"-4-","project":"Superalgos","id":"41b893b7-8450-497e-a10e-378e2aad4f86","savedPayload":{"position":{"x":12551.009679730356,"y":10170.481086604059},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-4-","id":"2e60f4be-e8cc-4489-81f6-27fa3f61921b"}}},{"type":"Polygon Vertex","name":"-5-","project":"Superalgos","id":"b298e992-97da-4b07-b1b5-2419ef56b05a","savedPayload":{"position":{"x":12622.44964132423,"y":10227.442882455296},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-5-","id":"1740e52b-986e-49cf-bb3f-c373200c4449"}}},{"type":"Polygon Vertex","name":"-6-","project":"Superalgos","id":"c38d5012-bbf9-4b31-916a-e98a2557f2c3","savedPayload":{"position":{"x":12684.883982586343,"y":10293.962514879924},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-6-","id":"c8b169eb-6d38-41ab-bc48-e5a08c6f9f45"}}},{"type":"Polygon Vertex","name":"-7-","project":"Superalgos","id":"fd3144a6-1558-42b5-82d8-54975ee48863","savedPayload":{"position":{"x":12741.82717498493,"y":10378.0021732053},"targetPosition":{"x":12190.31256805528,"y":10695.476926829411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-7-","id":"f5cee1fe-b34d-47e5-8d4a-26061487b242"}}}],"id":"f8d58d58-6d2e-454f-ae56-4f57ab357a85","savedPayload":{"position":{"x":12225.195554812315,"y":10787.668480565417},"targetPosition":{"x":11997.592944821114,"y":11343.485927538779},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"01e600b6-8d17-4ea5-bb31-30308e68433e","savedPayload":{"position":{"x":11997.592944821114,"y":11343.485927538779},"targetPosition":{"x":12398.961661973364,"y":11789.177716002274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Three-Candles Patterns","config":"{ \n\"codeName\": \"Three-Candles Patterns\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Pattern Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.name","project":"Superalgos","id":"5a0d3dea-2329-4eb2-8c13-a112d1f03368","savedPayload":{"position":{"x":12521.529451619575,"y":11282.104632913197},"targetPosition":{"x":12753.336135929472,"y":11473.097355738706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8b719d3b-612d-4978-bde8-a748068d4366","savedPayload":{"position":{"x":12753.336135929472,"y":11473.097355738706},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Direction","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trend","project":"Superalgos","id":"9d7f27b8-56b3-4b97-a3b4-1687a546f367","savedPayload":{"position":{"x":12994.102830402499,"y":11062.834893162257},"targetPosition":{"x":12989.685271820555,"y":11363.418511128384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bdf5aa9a-a121-4275-969e-5eed6ebd878d","savedPayload":{"position":{"x":12989.685271820555,"y":11363.418511128384},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Forecast","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.forecast","project":"Superalgos","id":"04bc641a-62a0-4441-b4d5-58fa30fe413e","savedPayload":{"position":{"x":13460.65130741904,"y":11295.93637445114},"targetPosition":{"x":13222.96465937862,"y":11479.97347535613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6ddacd18-8603-4112-bd00-80fe0cb03dcb","savedPayload":{"position":{"x":13222.96465937862,"y":11479.97347535613},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Method","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendMethod","project":"Superalgos","id":"3b43a0f7-d76f-4b8a-8228-9b0282826022","savedPayload":{"position":{"x":13569.398264324223,"y":11804.241251740332},"targetPosition":{"x":13277.003171117074,"y":11734.41244801159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"950a394b-df06-4b90-88fc-b59cb3cc1cb5","savedPayload":{"position":{"x":13277.003171117074,"y":11734.41244801159},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Period","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"2b0825d5-9e69-4b0a-861a-c88870b859c4","savedPayload":{"position":{"x":13236.937029970217,"y":12208.224780499606},"targetPosition":{"x":13111.138350440473,"y":11936.12827339466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"63fbe7e3-b323-40ea-bfdc-0aac0df03c0f","savedPayload":{"position":{"x":13111.138350440473,"y":11936.12827339466},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend Line Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trendLine","project":"Superalgos","id":"e838b1bb-2079-479e-b85a-38019fca078d","savedPayload":{"position":{"x":12716.199880878816,"y":12200.301115628657},"targetPosition":{"x":12850.874297561895,"y":11932.297848995104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f36e0123-4262-45d3-8e18-699407c0bb78","savedPayload":{"position":{"x":12850.874297561895,"y":11932.297848995104},"targetPosition":{"x":12985.309461535395,"y":11664.157620741606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1f14d068-2fc4-42b5-8edf-7d552f50d1ed","savedPayload":{"position":{"x":12985.309461535395,"y":11664.157620741606},"targetPosition":{"x":12398.961661973364,"y":11789.177716002274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"acdb9c43-0859-42be-87b0-1a600cf513d4","savedPayload":{"position":{"x":12400.198493102642,"y":11799.030724932194},"targetPosition":{"x":12215.097662258146,"y":12369.642313054686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e10e4374-b30c-4974-b2ff-bd789f50fde2","savedPayload":{"position":{"x":12215.059921412198,"y":12369.634706235254},"targetPosition":{"x":12814.727007364905,"y":12369.63867824567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"38d04c99-51a6-4c1c-853e-ba67e216854b","savedPayload":{"position":{"x":12814.727007364905,"y":12369.63867824567},"targetPosition":{"x":12814.727007364905,"y":12369.63867824567},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Masters.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Masters.json deleted file mode 100644 index b7452e5d9..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Masters.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Masters","config":"{\n\"codeName\": \"Masters\"\n}","project":"Superalgos","sensorBots":[{"type":"Sensor Bot","name":"Exchange Raw Data","config":"{\n\"codeName\": \"Exchange-Raw-Data\",\n\"repo\": \"Exchange-Raw-Data-Sensor-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Historic-OHLCVs","config":"{\n \"codeName\": \"Historic-OHLCVs\",\n \"description\": \"Retrieves and saves historical maket data\",\n \"startMode\": {\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 60000,\n \"retryWaitTime\": 10000\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[],"id":"dfe2556e-a765-4e38-9d30-7f91090c0069","savedPayload":{"position":{"x":7743.093065585781,"y":17657.26070065566},"targetPosition":{"x":7723.051525995295,"y":18063.790438218573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"ea39c98b-18e2-44ce-9f7f-86a8a76a688a","savedPayload":{"position":{"x":8159.968121568774,"y":17392.017795274412},"targetPosition":{"x":7941.750591738466,"y":17727.773847360382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[],"dataMineDataDependencies":[],"id":"5c7fae5a-6da6-4864-a167-f2f21d578c72","savedPayload":{"position":{"x":7941.750591738466,"y":17727.773847360382},"targetPosition":{"x":7723.051525995295,"y":18063.790438218573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e","savedPayload":{"position":{"x":8080.14992890308,"y":17881.860565405637},"targetPosition":{"x":7723.051525995295,"y":18063.790438218573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"957e7e3a-b167-40be-93b5-9ba4ceff56e5","savedPayload":{"position":{"x":8123.742665378901,"y":18084.134120101407},"targetPosition":{"x":7723.051525995295,"y":18063.790438218573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"fe40a546-43ee-49df-908a-7e72f598f0cd","savedPayload":{"position":{"x":8067.94916479235,"y":18272.098978495884},"targetPosition":{"x":7723.051525995295,"y":18063.790438218573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc","savedPayload":{"position":{"x":7723.051525995295,"y":18063.790438218573},"targetPosition":{"x":7327.141714623944,"y":18266.006678666803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Trades","config":"{\n\"codeName\": \"Trades\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Trades","config":"{\n\"codeName\": \"Trades\"\n}","project":"Superalgos","id":"fbb7c17e-a909-4fa2-b3c5-eb8ca86297c4","savedPayload":{"position":{"x":7988.166640893156,"y":18161.91023332179},"targetPosition":{"x":7789.749141672932,"y":18193.51426197839},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"38dbb942-a15b-450b-a867-02a94030965f","savedPayload":{"position":{"x":7789.749141672932,"y":18193.51426197839},"targetPosition":{"x":7327.141714623944,"y":18266.006678666803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Candles","config":"{\n\"codeName\": \"Candles\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\n}","project":"Superalgos","id":"1c3696e4-c28e-4744-9100-706d6dce0c3c","savedPayload":{"position":{"x":7984.136185975953,"y":18376.36671990315},"targetPosition":{"x":7789.943874978886,"y":18339.672319164387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc","savedPayload":{"position":{"x":7789.943874978886,"y":18339.672319164387},"targetPosition":{"x":7327.141714623944,"y":18266.006678666803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Volumes","config":"{\n\"codeName\": \"Volumes\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"One-Min","config":"{\n\"codeName\": \"One-Min\"\n}","project":"Superalgos","id":"73dcce78-c223-49e1-a93c-7e1ab7283f86","savedPayload":{"position":{"x":7923.3164308875785,"y":18571.287240753885},"targetPosition":{"x":7744.360816477929,"y":18479.29814586571},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"3a43c6f3-bac0-404e-865f-822eb48c8660","savedPayload":{"position":{"x":7744.360816477929,"y":18479.29814586571},"targetPosition":{"x":7327.141714623944,"y":18266.006678666803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"af924204-66a2-47d4-9910-66ab78acb06f","savedPayload":{"position":{"x":7225.786287656112,"y":18268.007057191084},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Sensor Bot","name":"Webhooks","config":"{\n\"codeName\": \"Webhooks\",\n\"repo\": \"Webhooks-Sensor-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Check-Webhook","config":"{\n \"codeName\": \"Check-Webhook\",\n \"description\": \"Retrieves and saves Webhooks Messages Received at the Web Server\",\n \"startMode\": {\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 30000,\n \"retryWaitTime\": 10000\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[],"id":"9b932f7d-fee5-4d42-97a3-beda58fa0322","savedPayload":{"position":{"x":8089.050069382276,"y":18467.981574511137},"targetPosition":{"x":7703.4218887317875,"y":18581.246121344786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Webhooks Check-Webhook","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"d6965837-6a98-474c-aee3-8053ac436b9c","savedPayload":{"position":{"x":8510.792724635983,"y":18578.05911809108},"targetPosition":{"x":8110.7752611155665,"y":18578.09799680333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"57bc4c48-663d-4944-8b5b-b09cf6ae3578"}}}],"dataDependencies":[],"dataMineDataDependencies":[],"id":"ff50f64f-12f6-49e7-83a6-659109b89a6a","savedPayload":{"position":{"x":8110.7752611155665,"y":18578.09799680333},"targetPosition":{"x":7703.4218887317875,"y":18581.246121344786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"57bc4c48-663d-4944-8b5b-b09cf6ae3578","savedPayload":{"position":{"x":8096.70495293392,"y":18685.126700652665},"targetPosition":{"x":7703.4218887317875,"y":18581.246121344786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"ed7c8dbc-8f81-4a3f-a525-a839f3b30440","savedPayload":{"position":{"x":8056.306957425935,"y":18784.35574235271},"targetPosition":{"x":7703.4218887317875,"y":18581.246121344786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"1982bdf9-4889-430b-a004-7760307852b9","savedPayload":{"position":{"x":7971.7105356450775,"y":18871.93057498706},"targetPosition":{"x":7703.4218887317875,"y":18581.246121344786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"69f37820-ab16-4e19-bfd8-386dd6e249a3","savedPayload":{"position":{"x":7703.4218887317875,"y":18581.246121344786},"targetPosition":{"x":7273.744436619851,"y":18466.3758368258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"External Signals","config":"{\n\"codeName\": \"External-Signals\",\n \"singularVariableName\": \"externalSignal\",\n \"pluralVariableName\": \"externalSignals\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Single File","config":"{\n \"codeName\": \"Single-File\",\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.json\",\n \"validTimeFrames\": [\n \"Any Time Frame\"\n ]\n }","project":"Superalgos","id":"c52d1012-5e3b-41a0-b5af-84098b0594bf","savedPayload":{"position":{"x":7949.979819894688,"y":19004.286452095253},"targetPosition":{"x":7604.586208845041,"y":18798.47664320005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Timestamp","config":"{ \n\"codeName\": \"timestamp\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d27e836f-1cea-41e1-b4e8-c411fb50addc","savedPayload":{"position":{"x":8059.147210221705,"y":19329.250202502157},"targetPosition":{"x":7755.575674532873,"y":19097.339495482174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Source","config":"{ \n\"codeName\": \"source\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6aea41d8-153e-4196-9a55-ec40700c6c0e","savedPayload":{"position":{"x":7947.911693441085,"y":19428.85124974337},"targetPosition":{"x":7755.575674532873,"y":19097.339495482174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Message","config":"{ \n\"codeName\": \"message\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7c1feeae-6fdb-4886-aeb7-f16d10433acd","savedPayload":{"position":{"x":7806.971542532254,"y":19477.767071186157},"targetPosition":{"x":7755.575674532873,"y":19097.339495482174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6e1d5a0a-c082-4916-bce1-3a8a1651ff02","savedPayload":{"position":{"x":7803.893929493901,"y":19145.33349261195},"targetPosition":{"x":7604.586208845041,"y":18798.47664320005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"29196db8-4c41-47ea-be7e-952cd9be9a0b","savedPayload":{"position":{"x":7604.586208845041,"y":18798.47664320005},"targetPosition":{"x":7273.744436619851,"y":18466.3758368258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f0d7c835-cf51-447a-8d00-1aeb854bc909","savedPayload":{"position":{"x":7207.694073891885,"y":18370.613100188784},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"indicatorBots":[{"type":"Indicator Bot","name":"Candles Volumes","config":"{\n\"codeName\": \"Candles-Volumes\",\n\"repo\": \"Candles-Volumes-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces different files with multi-period candles and volumes for entire markets.\",\n \"startMode\": {\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candles","project":"Superalgos","id":"5d82f670-e692-40ca-8d24-9273d0f5e08f","savedPayload":{"position":{"x":9192.418398650192,"y":19589.004094485357},"targetPosition":{"x":8748.47479412653,"y":19624.40208184942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Volumes","project":"Superalgos","id":"b198c9ea-3141-4407-9953-2b2ebb672450","savedPayload":{"position":{"x":9186.288461833392,"y":19705.793451632006},"targetPosition":{"x":8748.47479412653,"y":19624.40208184942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"outputDatasetFolders":[],"id":"d529ec20-8461-40d6-9dc3-14f9ab8b64be","savedPayload":{"position":{"x":8748.47479412653,"y":19624.40208184942},"targetPosition":{"x":7859.40295616951,"y":19578.64733629439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"ff665e30-1d31-429b-88dc-f5e623b9a5f8","savedPayload":{"position":{"x":9621.27263217908,"y":19670.685379116447},"targetPosition":{"x":8734.234812077724,"y":19741.019113791623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"6d911e31-cef3-4c4f-82e3-d7b9b1ba9541","savedPayload":{"position":{"x":9622.867657177518,"y":19787.3443592653},"targetPosition":{"x":8734.234812077724,"y":19741.019113791623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"957ffa57-d4df-4866-b99f-86cf8add689d","savedPayload":{"position":{"x":9609.173391702054,"y":19903.09726150065},"targetPosition":{"x":8734.234812077724,"y":19741.019113791623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles One-Min","project":"Superalgos","id":"982efbd9-6a54-4322-9a0f-52a6483d67d9","savedPayload":{"position":{"x":9580.460839293297,"y":20016.061215154023},"targetPosition":{"x":8734.234812077724,"y":19741.019113791623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"One-Min","id":"1c3696e4-c28e-4744-9100-706d6dce0c3c"}}},{"type":"Data Dependency","name":"Volumes One-Min","project":"Superalgos","id":"fe28906a-90b1-4a5e-88b1-110d994cb397","savedPayload":{"position":{"x":9537.086152644468,"y":20124.577057115817},"targetPosition":{"x":8734.234812077724,"y":19741.019113791623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"One-Min","id":"73dcce78-c223-49e1-a93c-7e1ab7283f86"}}}],"dataMineDataDependencies":[],"id":"09645f1b-96c2-4dbb-a99f-803c8ebe7a00","savedPayload":{"position":{"x":8734.234812077724,"y":19741.019113791623},"targetPosition":{"x":7859.40295616951,"y":19578.64733629439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d","savedPayload":{"position":{"x":8705.575904695885,"y":19853.751665043284},"targetPosition":{"x":7859.40295616951,"y":19578.64733629439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"c086e5db-7777-45d9-bb4d-381f9566341f","savedPayload":{"position":{"x":8662.402085706337,"y":19961.934161459554},"targetPosition":{"x":7859.40295616951,"y":19578.64733629439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"fe40a546-43ee-49df-908a-7e72f598f0cd"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5","savedPayload":{"position":{"x":8605.265378118529,"y":20063.828965164208},"targetPosition":{"x":7859.40295616951,"y":19578.64733629439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1","savedPayload":{"position":{"x":7436.224824190616,"y":18431.208752034978},"targetPosition":{"x":7139.918322012076,"y":18478.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces different files with multi-period candles and volumes on a daily format.\",\n \"startMode\": {\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Candles","project":"Superalgos","id":"f60fba20-b9d6-4362-b667-020096340e38","savedPayload":{"position":{"x":8715.915766665308,"y":20667.767083162216},"targetPosition":{"x":8335.889515147152,"y":20435.45752823543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Volumes","project":"Superalgos","id":"a507b588-ce8f-4d5c-9053-d130015560b5","savedPayload":{"position":{"x":8642.184862733458,"y":20758.797224362635},"targetPosition":{"x":8335.889515147152,"y":20435.45752823543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}}],"outputDatasetFolders":[],"id":"4d806ace-6f82-449d-b908-afcd7d029a68","savedPayload":{"position":{"x":8335.889515147152,"y":20435.45752823543},"targetPosition":{"x":7643.595283001359,"y":19875.678412005855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"14730a16-e01e-4bc5-9886-0eed386152f2","savedPayload":{"position":{"x":9014.86821580154,"y":20985.83545120919},"targetPosition":{"x":8255.83757735318,"y":20521.403392246968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"1baff60d-84c4-4e27-b03d-663158ca6bba","savedPayload":{"position":{"x":8947.467233850286,"y":21081.308504042263},"targetPosition":{"x":8255.83757735318,"y":20521.403392246968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"4e77c03b-367c-450c-82ca-c7211c2fab8e","savedPayload":{"position":{"x":8868.34723938024,"y":21166.901646950744},"targetPosition":{"x":8255.83757735318,"y":20521.403392246968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles One-Min","project":"Superalgos","id":"2d324ca2-acc5-4390-ae37-0d350fe8e8fa","savedPayload":{"position":{"x":8778.717343712258,"y":21241.411328957893},"targetPosition":{"x":8255.83757735318,"y":20521.403392246968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"One-Min","id":"1c3696e4-c28e-4744-9100-706d6dce0c3c"}}},{"type":"Data Dependency","name":"Volumes One-Min","project":"Superalgos","id":"4051019a-9548-4541-a7e7-11097fe3f103","savedPayload":{"position":{"x":8679.837696703074,"y":21303.70639895236},"targetPosition":{"x":8255.83757735318,"y":20521.403392246968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"One-Min","id":"73dcce78-c223-49e1-a93c-7e1ab7283f86"}}}],"dataMineDataDependencies":[],"id":"1e4c5a40-0c64-423f-968d-31b178056cf3","savedPayload":{"position":{"x":8255.83757735318,"y":20521.403392246968},"targetPosition":{"x":7643.595283001359,"y":19875.678412005855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"2a021da8-9feb-475e-90ab-1586968c17c7","savedPayload":{"position":{"x":8166.401873379367,"y":20595.75117204399},"targetPosition":{"x":7643.595283001359,"y":19875.678412005855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"fa826f1b-2a52-4542-89b2-7190e137ef56","savedPayload":{"position":{"x":8067.90488732592,"y":20657.888206638447},"targetPosition":{"x":7643.595283001359,"y":19875.678412005855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"fe40a546-43ee-49df-908a-7e72f598f0cd"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3","savedPayload":{"position":{"x":7961.8100942438505,"y":20706.74114441311},"targetPosition":{"x":7643.595283001359,"y":19875.678412005855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d","savedPayload":{"position":{"x":7407.220279268586,"y":18614.33624146891},"targetPosition":{"x":7139.918322012076,"y":18478.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles","config":"{\n \"codeName\": \"Candles\",\n \"singularVariableName\": \"candle\",\n \"pluralVariableName\": \"candles\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8","savedPayload":{"position":{"x":7433.174891189126,"y":19001.020144214453},"targetPosition":{"x":7250.546462486509,"y":18763.014142127082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"678a567c-f08d-49b9-813b-4e54fd6afadb","savedPayload":{"position":{"x":7393.694090564393,"y":19026.65927592567},"targetPosition":{"x":7250.546462486509,"y":18763.014142127082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Min","config":"{\n \"codeName\": \"min\",\n \"isString\": false\n}","project":"Superalgos","id":"95264fe8-6089-4a70-bf6d-158bc43c04f3","savedPayload":{"position":{"x":7515.407242548015,"y":19193.21124412991},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max","config":"{\n \"codeName\": \"max\",\n \"isString\": false\n}","project":"Superalgos","id":"b716bfaa-d785-45e3-b8ca-370284ac901c","savedPayload":{"position":{"x":7592.226801690598,"y":19278.528007897326},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Open","config":"{\n \"codeName\": \"open\",\n \"isString\": false\n}","project":"Superalgos","id":"7d809ac3-9b7d-4687-83bb-40b851e522d0","savedPayload":{"position":{"x":7586.218370679253,"y":19393.175701303633},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Close","config":"{\n \"codeName\": \"close\",\n \"isString\": false\n}","project":"Superalgos","id":"b0ea41f8-03da-454e-8d0f-bb0f2fc5d328","savedPayload":{"position":{"x":7500.901606911837,"y":19469.995260446216},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"21b8be1f-0437-4fc8-9bc0-31779a9ea47e","savedPayload":{"position":{"x":7386.25391350553,"y":19463.98682943487},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"91ba9479-fdb4-42b7-ad02-1b2ac24b13d6","savedPayload":{"position":{"x":7309.4343543629475,"y":19378.670065667455},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"isCalculated\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.direction","project":"Superalgos","id":"becdde12-efb6-464b-bfb0-ac98e3c2b8e3","savedPayload":{"position":{"x":7180.054992721813,"y":19199.445707739906},"targetPosition":{"x":7315.442785374293,"y":19264.022372261148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aafd0a4b-da5d-40c1-94b8-e79f0b1eca9b","savedPayload":{"position":{"x":7315.442785374293,"y":19264.022372261148},"targetPosition":{"x":7450.830578026773,"y":19328.59903678239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"65ea4bea-6b8f-4df9-8716-d8af0ce2044c","savedPayload":{"position":{"x":7450.830578026773,"y":19328.59903678239},"targetPosition":{"x":7250.546462486509,"y":18763.014142127082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"calculations":{"type":"Calculations Procedure","name":"New Calculations Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"let candle = product.candle\n\nif (candle.close > candle.open) {\n variable.direction = \"Up\"\n}\n\nif (candle.close < candle.open) {\n variable.direction = \"Down\"\n}\n\nif (candle.close === candle.open) {\n variable.direction = \"Side\"\n}","project":"Superalgos","id":"798bc1e0-90d2-435f-980d-b457b30046dd","savedPayload":{"position":{"x":7359.887777781794,"y":19352.967086665452},"targetPosition":{"x":7332.552448957973,"y":19205.47885053086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"abbcb291-c048-49e7-b0d0-fdf20891faea","savedPayload":{"position":{"x":7332.552448957973,"y":19205.47885053086},"targetPosition":{"x":7305.217120134152,"y":19057.99061439627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f7846b50-ae42-46b4-aeb6-9f6217477a1b","savedPayload":{"position":{"x":7305.217120134152,"y":19057.99061439627},"targetPosition":{"x":7250.546462486509,"y":18763.014142127082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7","savedPayload":{"position":{"x":7276.115471933939,"y":18745.441048803557},"targetPosition":{"x":7139.918322012076,"y":18478.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candles","id":"0aed75a3-fee8-4ddc-97ff-b6768e6f12a3"}}},{"type":"Product Definition","name":"Volumes","config":"{\n \"codeName\": \"Volumes\",\n \"singularVariableName\": \"volume\",\n \"pluralVariableName\": \"volumes\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"2e683057-f911-4105-bc77-16f2706d1915","savedPayload":{"position":{"x":7120.822619966086,"y":19077.37125732363},"targetPosition":{"x":7066.151962318443,"y":18782.394785054443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1","savedPayload":{"position":{"x":7003.778455073116,"y":19075.839065274584},"targetPosition":{"x":7066.151962318443,"y":18782.394785054443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Buy","config":"{\n \"codeName\": \"buy\",\n \"isString\": false\n}","project":"Superalgos","id":"bc8405e2-4a80-416c-bccf-1334e53d371b","savedPayload":{"position":{"x":6919.136375874943,"y":19185.20329621354},"targetPosition":{"x":6811.26915570227,"y":19153.25156993435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Sell","config":"{\n \"codeName\": \"sell\",\n \"isString\": false\n}","project":"Superalgos","id":"f08f11a8-d092-4b7e-a7e6-c67adac04a33","savedPayload":{"position":{"x":6814.214062386905,"y":19265.713018994098},"targetPosition":{"x":6811.26915570227,"y":19153.25156993435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"8e2624b0-48ee-4d00-821e-0c6a72b3838f","savedPayload":{"position":{"x":6705.221987954399,"y":19190.80484159815},"targetPosition":{"x":6811.26915570227,"y":19153.25156993435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"62964ed9-14c4-442d-b272-602d0c714654","savedPayload":{"position":{"x":6742.783494938787,"y":19063.999319151586},"targetPosition":{"x":6811.26915570227,"y":19153.25156993435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7edf78c7-c63d-4e7e-a643-99aaf52ac967","savedPayload":{"position":{"x":6811.26915570227,"y":19153.25156993435},"targetPosition":{"x":7066.151962318443,"y":18782.394785054443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f","savedPayload":{"position":{"x":7092.987982500006,"y":18774.445593725588},"targetPosition":{"x":7139.918322012076,"y":18478.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Volumes","id":"a6177fb7-51d1-4b7c-bcbb-04861a5bf0c1"}}}],"id":"285a4618-0423-4ac9-9df9-7a78be6fd915","savedPayload":{"position":{"x":7155.599620591805,"y":18460.843340097046},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"l"}}},{"type":"Indicator Bot","name":"Bollinger Bands","config":"{\n\"codeName\": \"Bollinger-Bands\",\n\"repo\": \"Bollinger-Bands-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces a single file for each time frame covering all the market.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Bollinger Bands","project":"Superalgos","id":"b8c1f684-7327-488b-8c76-4a73d811e312","savedPayload":{"position":{"x":9802.857916415382,"y":20002.495503001977},"targetPosition":{"x":9132.300106221523,"y":19925.18299956292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f5b2a7d8-fc32-44a3-a002-9b0fc30a9719"}}},{"type":"Output Dataset","name":"Multi-Period-Market Percentage Bandwidth","project":"Superalgos","id":"fa1205c0-3b6e-4064-aca4-ffdaba7e1bd4","savedPayload":{"position":{"x":9759.999264793034,"y":20173.41427545018},"targetPosition":{"x":9132.300106221523,"y":19925.18299956292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"207e9481-0730-4304-a938-cfe223d70856"}}}],"outputDatasetFolders":[],"id":"72887b4d-8868-4f0c-a051-81b83c366c99","savedPayload":{"position":{"x":9132.300106221523,"y":19925.18299956292},"targetPosition":{"x":7822.840529249766,"y":19596.83011579768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Bollinger Bands Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"603f6167-ef54-4464-9b7b-5ff7f59c24e7","savedPayload":{"position":{"x":10406.37007598429,"y":20335.29976867414},"targetPosition":{"x":9078.23884639279,"y":20093.2926675722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"4f8197fa-2627-46df-bd36-7d30fdb12d8c"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"79c51f8f-95eb-451c-98ac-cce4028e23e2","savedPayload":{"position":{"x":10333.637163535812,"y":20589.755219346724},"targetPosition":{"x":9078.23884639279,"y":20093.2926675722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"25d943b0-45aa-45b3-b8b1-f83d5a8b636f","savedPayload":{"position":{"x":10212.65999779501,"y":20825.131892574016},"targetPosition":{"x":9078.23884639279,"y":20093.2926675722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"bd55a584-c9dd-4f2e-836c-a34a16ef01dc","savedPayload":{"position":{"x":9078.23884639279,"y":20093.2926675722},"targetPosition":{"x":7822.840529249766,"y":19596.83011579768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"4f8197fa-2627-46df-bd36-7d30fdb12d8c","savedPayload":{"position":{"x":9002.697373295567,"y":20252.9077236752},"targetPosition":{"x":7822.840529249766,"y":19596.83011579768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"a2cf5c7f-ffbf-4c38-9640-699fd3a37454","savedPayload":{"position":{"x":8906.968222478601,"y":20401.29711000833},"targetPosition":{"x":7822.840529249766,"y":19596.83011579768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"4a9c8cc7-0ebf-43eb-b7f9-0b280630ff67","savedPayload":{"position":{"x":8792.689346253512,"y":20535.921843030133},"targetPosition":{"x":7822.840529249766,"y":19596.83011579768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"941a0543-0cc0-4a5d-a782-728d2835c100","savedPayload":{"position":{"x":7822.840529249766,"y":19596.83011579768},"targetPosition":{"x":7036.269299885902,"y":19159.445043879332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces a Daily File at each time frame.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Bollinger Bands","project":"Superalgos","id":"1f8cdcbe-c7dc-49fd-b106-e59bb4fb4ad9","savedPayload":{"position":{"x":8778.95388029184,"y":21467.647180381417},"targetPosition":{"x":8281.904365473445,"y":21010.95605958006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"506104fa-e99a-4a46-930e-176bce311aff"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Percentage Bandwidth","project":"Superalgos","id":"6362cf0d-c71e-4d08-8dea-c9b8d5d0e38b","savedPayload":{"position":{"x":8643.816968988376,"y":21580.73168859296},"targetPosition":{"x":8281.904365473445,"y":21010.95605958006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e60d62dd-87f7-4f2d-ac21-3ac5c30a50ea"}}}],"outputDatasetFolders":[],"id":"3ab24229-73fe-439a-9684-986aac94f220","savedPayload":{"position":{"x":8281.904365473445,"y":21010.95605958006},"targetPosition":{"x":7415.5302968811775,"y":19975.631968644822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"aee6dca7-b8e8-4a33-9bc6-37830080a3a2","savedPayload":{"position":{"x":9109.204320914785,"y":22054.274953903074},"targetPosition":{"x":8139.35550391104,"y":21115.18322667062},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"40701c78-7ace-40a8-a943-7b76d73147ce","savedPayload":{"position":{"x":8950.35756063231,"y":22194.430957265347},"targetPosition":{"x":8139.35550391104,"y":21115.18322667062},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Bollinger Bands Multi-Period-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"442d1d63-f28a-4bff-8dda-9bab7a5ad708","savedPayload":{"position":{"x":8771.541238151847,"y":22308.012299682512},"targetPosition":{"x":8139.35550391104,"y":21115.18322667062},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"7323fef7-870a-48b6-b96f-586111253b40"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"603dbf64-0ee0-45b6-a1b8-14065b398893","savedPayload":{"position":{"x":8577.15840479021,"y":22392.222231549396},"targetPosition":{"x":8139.35550391104,"y":21115.18322667062},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"312620aa-b556-43c4-9603-6a80acb7ab00","savedPayload":{"position":{"x":8139.35550391104,"y":21115.18322667062},"targetPosition":{"x":7415.5302968811775,"y":19975.631968644822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"7323fef7-870a-48b6-b96f-586111253b40","savedPayload":{"position":{"x":7984.421792374091,"y":21199.912355793058},"targetPosition":{"x":7415.5302968811775,"y":19975.631968644822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7ec89351-b852-416a-961a-7e66717c6473","savedPayload":{"position":{"x":7819.754189622738,"y":21263.69370805674},"targetPosition":{"x":7415.5302968811775,"y":19975.631968644822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"acebc3ed-4f3f-4a4b-b403-f16cbe987dde","savedPayload":{"position":{"x":7648.170203994545,"y":21305.435966840905},"targetPosition":{"x":7415.5302968811775,"y":19975.631968644822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"e598ee86-1e18-4aa1-95c2-64aaf66776ca","savedPayload":{"position":{"x":7415.5302968811775,"y":19975.631968644822},"targetPosition":{"x":7036.269299885902,"y":19159.445043879332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Bollinger Bands","config":"{\n\"codeName\": \"Bollinger-Bands\",\n\"singularVariableName\": \"bollingerBand\",\n\"pluralVariableName\": \"bollingerBands\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"f5b2a7d8-fc32-44a3-a002-9b0fc30a9719","savedPayload":{"position":{"x":7155.223854853677,"y":20894.037493990658},"targetPosition":{"x":6863.355254267564,"y":20042.678157404804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"506104fa-e99a-4a46-930e-176bce311aff","savedPayload":{"position":{"x":6924.930662922274,"y":20940.569280564512},"targetPosition":{"x":6863.355254267564,"y":20042.678157404804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"1e7186ee-c481-401d-827f-a30ee7434d92","savedPayload":{"position":{"x":6847.048062999886,"y":21502.68724800169},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"15f90f2e-80f0-4575-94d8-6d8957eceee1","savedPayload":{"position":{"x":6964.246156375015,"y":21754.90287834085},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Moving Average","config":"{\n \"codeName\": \"movingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"9786a9cd-1eff-4b5c-ae7c-1dde51659f82","savedPayload":{"position":{"x":6910.812777712821,"y":22027.83692041492},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Standard Deviation","config":"{\n \"codeName\": \"standardDeviation\",\n \"isString\": false\n}","project":"Superalgos","id":"e92d7855-bb18-494e-ab37-a895bbcb8287","savedPayload":{"position":{"x":6707.157661528527,"y":22217.237846838492},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Deviation","config":"{\n \"codeName\": \"deviation\",\n \"isString\": false\n}","project":"Superalgos","id":"03043530-caa1-416e-8303-840b732e516e","savedPayload":{"position":{"x":6431.07014022172,"y":22250.760941218483},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"isCalculated\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.direction","project":"Superalgos","id":"f72926d9-c869-4b7c-ba1e-b36d134e2bc6","savedPayload":{"position":{"x":5858.485363092896,"y":22422.05865736386},"targetPosition":{"x":6188.006263061892,"y":22115.601520909804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"856f24c9-f5f1-491b-98e7-6e1d3c5c5874","savedPayload":{"position":{"x":6188.006263061892,"y":22115.601520909804},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Slope","config":"{\n \"codeName\": \"slope\",\n \"isString\": true,\n \"isCalculated\": true,\n \"possibleValues\": [\"Side\", \"Gentle\", \"Medium\", \"Steep\", \"Extreme\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.slope","project":"Superalgos","id":"fac935fe-b448-4b34-aed7-b35f70808911","savedPayload":{"position":{"x":5624.089176342637,"y":21917.62739668554},"targetPosition":{"x":6070.808169686763,"y":21863.385890570644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4c027b0c-da8a-4146-a51a-d0a7a126150b","savedPayload":{"position":{"x":6070.808169686763,"y":21863.385890570644},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Upper Band","config":"{ \n \"codeName\": \"upperBand\",\n \"isString\": false,\n \"isCalculated\": true\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.upperBand","project":"Superalgos","id":"72cf5305-7f63-413b-a469-70ae053cfbcf","savedPayload":{"position":{"x":5730.9559336670245,"y":21371.7593125374},"targetPosition":{"x":6124.241548348957,"y":21590.451848496574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"58990232-dba9-485d-8246-540554dfeb20","savedPayload":{"position":{"x":6124.241548348957,"y":21590.451848496574},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lower Band","config":"{ \n \"codeName\": \"lowerBand\",\n \"isString\": false,\n \"isCalculated\": true\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.lowerBand","project":"Superalgos","id":"c165f7e7-03d7-442d-8182-1c7e913e06a5","savedPayload":{"position":{"x":6138.266166035613,"y":20992.957459690257},"targetPosition":{"x":6327.896664533251,"y":21401.050922073002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1db553a-f738-4a1e-89c0-82b6b0cac9ba","savedPayload":{"position":{"x":6327.896664533251,"y":21401.050922073002},"targetPosition":{"x":6517.527163030889,"y":21809.144384455747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5a5ec97-7246-42bd-97e4-28fb4a148b2c","savedPayload":{"position":{"x":6517.527163030889,"y":21809.144384455747},"targetPosition":{"x":6863.355254267564,"y":20042.678157404804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"calculations":{"type":"Calculations Procedure","name":"New Calculations Procedure","project":"Superalgos","initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"variable.lastMovingAverage = 0\nvariable.SIDE_TOLERANCE = 0.5 * system.timeFrame / system.ONE_DAY_IN_MILISECONDS\nvariable.SMALL_SLOPE = 1.0 * system.timeFrame / system.ONE_DAY_IN_MILISECONDS\nvariable.MEDIUM_SLOPE = 2.0 * system.timeFrame / system.ONE_DAY_IN_MILISECONDS\nvariable.HIGH_SLOPE = 4.0 * system.timeFrame / system.ONE_DAY_IN_MILISECONDS\n","project":"Superalgos","id":"f00ac417-cd99-493c-b959-35eddd6fe4f3","savedPayload":{"position":{"x":6450.50555969523,"y":21086.700610695974},"targetPosition":{"x":6522.185508979928,"y":20873.42383073495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d144ab2f-5b4e-4153-806a-d471e9f281dd","savedPayload":{"position":{"x":6522.185508979928,"y":20873.42383073495},"targetPosition":{"x":6665.545407549329,"y":20446.870270812906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"\nif (variable.lastMovingAverage > product.bollingerBand.movingAverage) { variable.direction = \"Down\" }\nif (variable.lastMovingAverage < product.bollingerBand.movingAverage) { variable.direction = \"Up\" }\nif (variable.lastMovingAverage === product.bollingerBand.movingAverage) { variable.direction = \"Side\" }\n\nvariable.delta = Math.abs(product.bollingerBand.movingAverage - variable.lastMovingAverage)\n\nvariable.slope = \"Extreme\"\nif (variable.delta < product.bollingerBand.movingAverage * variable.HIGH_SLOPE / 100) { variable.slope = \"Steep\" }\nif (variable.delta < product.bollingerBand.movingAverage * variable.MEDIUM_SLOPE / 100) { variable.slope = \"Medium\" }\nif (variable.delta < product.bollingerBand.movingAverage * variable.SMALL_SLOPE / 100) { variable.slope = \"Gentle\" }\nif (variable.delta < product.bollingerBand.movingAverage * variable.SIDE_TOLERANCE / 100) { variable.slope = \"Side\" }\n\nvariable.lastMovingAverage = product.bollingerBand.movingAverage\n\nvariable.upperBand = product.bollingerBand.movingAverage + product.bollingerBand.deviation\nvariable.lowerBand = product.bollingerBand.movingAverage - product.bollingerBand.deviation","project":"Superalgos","id":"14fc0c9c-cd10-4931-95b5-4bc7d549942a","savedPayload":{"position":{"x":6292.232587229628,"y":21009.24251246869},"targetPosition":{"x":6416.6701940028615,"y":20821.785098583427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8a669548-845b-4d80-ae96-29f68e9c9ac7","savedPayload":{"position":{"x":6416.6701940028615,"y":20821.785098583427},"targetPosition":{"x":6665.545407549329,"y":20446.870270812906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d72c7cb2-8886-4101-a83a-f9788b8400a0","savedPayload":{"position":{"x":6665.545407549329,"y":20446.870270812906},"targetPosition":{"x":6863.355254267564,"y":20042.678157404804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","id":"139484b3-3a3f-4268-801e-a8c441746c7a","savedPayload":{"position":{"x":6567.672997797887,"y":20381.900802888562},"targetPosition":{"x":6863.355254267564,"y":20042.678157404804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"29088877-8d63-4217-8d34-8742afc262f4","savedPayload":{"position":{"x":6863.355254267564,"y":20042.678157404804},"targetPosition":{"x":7036.269299885902,"y":19159.445043879332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Bollinger Bands","id":"a11bfdf8-595c-4b50-b259-6a9f777d0ea8"}}},{"type":"Product Definition","name":"Percentage Bandwidth","config":"{\n \"codeName\": \"Percentage-Bandwidth\",\n \"singularVariableName\": \"percentageBandwidth\",\n \"pluralVariableName\": \"percentageBandwidths\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"207e9481-0730-4304-a938-cfe223d70856","savedPayload":{"position":{"x":5357.653002488401,"y":20015.01901564487},"targetPosition":{"x":5861.4026547046415,"y":19625.03920165868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"\",\n \"fileName\": \"\"\n }\n }","project":"Superalgos","id":"e60d62dd-87f7-4f2d-ac21-3ac5c30a50ea","savedPayload":{"position":{"x":5246.789138410677,"y":19792.245896315388},"targetPosition":{"x":5861.4026547046415,"y":19625.03920165868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"7c793ff3-0356-4f05-b471-4510e9cdaf58","savedPayload":{"position":{"x":4721.320453641816,"y":19757.97100740029},"targetPosition":{"x":4598.489790244897,"y":19464.08387114418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"b02c38c3-216c-4a83-903d-d50a599b55dc","savedPayload":{"position":{"x":4405.404089771984,"y":19717.67644645334},"targetPosition":{"x":4598.489790244897,"y":19464.08387114418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Superalgos","id":"2c279136-20b1-4f9c-9d35-6a4fd36a4a99","savedPayload":{"position":{"x":4282.2258433977095,"y":19423.8812093852},"targetPosition":{"x":4598.489790244897,"y":19464.08387114418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Moving Average","config":"{\n \"codeName\": \"movingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"a9e3bbb1-9eaf-4ab1-93bb-ee27357daa76","savedPayload":{"position":{"x":4475.280766835582,"y":19170.151128614045},"targetPosition":{"x":4598.489790244897,"y":19464.08387114418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Bandwidth","config":"{\n \"codeName\": \"bandwidth\",\n \"isString\": false\n}","project":"Superalgos","id":"90d9694f-ed29-4b2e-8c75-c4bdcf35e36a","savedPayload":{"position":{"x":4791.224725337037,"y":19210.527577322042},"targetPosition":{"x":4598.489790244897,"y":19464.08387114418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d04d8ca7-18d0-4360-babf-7c49c3c97f50","savedPayload":{"position":{"x":4598.489790244897,"y":19464.08387114418},"targetPosition":{"x":5861.4026547046415,"y":19625.03920165868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068","savedPayload":{"position":{"x":6377.227499947905,"y":19772.35931678745},"targetPosition":{"x":7036.269299885902,"y":19159.445043879332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Percentage B","id":"06b2f3f6-b138-415f-8974-31c22a930f92"}}}],"id":"1b7ecdbd-82e9-4a27-8fdd-467c0ca6bf23","savedPayload":{"position":{"x":7075.786287656112,"y":18527.814678326416},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Indicator Bot","name":"Bollinger Channels","config":"{\n\"codeName\": \"Bollinger-Channels\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces for each market two files with bollinger channels respectively.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Market Bollinger Channels Objects","project":"Superalgos","id":"d804e799-7c12-42f5-8de2-52a3a7d5daa4","savedPayload":{"position":{"x":5687.266644089639,"y":19992.674127031423},"targetPosition":{"x":5498.278313251056,"y":19416.619326731256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"610cd062-ab88-4892-b711-0fb430305c61"}}},{"type":"Output Dataset","name":"Market Bollinger Channels","project":"Superalgos","id":"e524685d-8da0-41f6-839d-9a4100e6e3fe","savedPayload":{"position":{"x":5592.935368757306,"y":20015.944705671965},"targetPosition":{"x":5498.278313251056,"y":19416.619326731256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"22c1f2c6-3838-4657-add8-2e01d7056917"}}},{"type":"Output Dataset","name":"Market Bollinger Sub-Channels Objects","project":"Superalgos","id":"eb0e7947-95e4-4f4a-87ea-1fb430b8b503","savedPayload":{"position":{"x":5497.007603703398,"y":20023.583937529194},"targetPosition":{"x":5498.278313251056,"y":19416.619326731256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"869f615e-0cc0-44fd-8648-4a951c23a410"}}},{"type":"Output Dataset","name":"Market Bollinger Sub-Channels","project":"Superalgos","id":"dc96b9ac-f8d5-4bf8-a135-45cd5d6369f1","savedPayload":{"position":{"x":5421.488977859208,"y":20014.352456774828},"targetPosition":{"x":5498.278313251056,"y":19416.619326731256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"f8d44a4d-3771-4a71-97ca-dc604ff565d3"}}}],"outputDatasetFolders":[],"id":"dd39a54a-3714-446a-9a41-dfd83557664c","savedPayload":{"position":{"x":5498.278313251056,"y":19416.619326731256},"targetPosition":{"x":5452.70185999617,"y":18812.181014120284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Bollinger Channels Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"ae627a69-4089-432d-b379-1b12ce4bd75e","savedPayload":{"position":{"x":5324.033947377382,"y":20013.88811136869},"targetPosition":{"x":5339.86670584817,"y":19407.54825242224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"af8aded9-002a-475a-88f5-d29573740969"}}},{"type":"Status Dependency","name":"Bollinger Bands Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"4a603114-d464-46db-90a1-62304274117a","savedPayload":{"position":{"x":5221.686439018522,"y":20002.397363985212},"targetPosition":{"x":5339.86670584817,"y":19407.54825242224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"4f8197fa-2627-46df-bd36-7d30fdb12d8c"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"ea27be54-93a3-48e3-8c52-72bc397b6c66","savedPayload":{"position":{"x":5112.588462840864,"y":19969.319852956214},"targetPosition":{"x":5339.86670584817,"y":19407.54825242224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f5b2a7d8-fc32-44a3-a002-9b0fc30a9719"}}}],"dataMineDataDependencies":[],"id":"8b509294-6028-40e2-88a8-655a34245ed8","savedPayload":{"position":{"x":5339.86670584817,"y":19407.54825242224},"targetPosition":{"x":5452.70185999617,"y":18812.181014120284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"af8aded9-002a-475a-88f5-d29573740969","savedPayload":{"position":{"x":5189.608529126428,"y":19358.103569264757},"targetPosition":{"x":5452.70185999617,"y":18812.181014120284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"f4720e04-5def-4c0b-be42-33e50ac6a6b7","savedPayload":{"position":{"x":5057.22091964295,"y":19271.416719789868},"targetPosition":{"x":5452.70185999617,"y":18812.181014120284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"4a9c8cc7-0ebf-43eb-b7f9-0b280630ff67"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"671530dc-5ba5-4c8d-bc23-f228e22c56b3","savedPayload":{"position":{"x":4951.714362621191,"y":19153.262200859976},"targetPosition":{"x":5452.70185999617,"y":18812.181014120284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"28be432d-80ca-46b3-859a-55541e24b2b4","savedPayload":{"position":{"x":6960.931063005235,"y":18953.485934588385},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces for each market two files with bollinger channels respectively at each day of the market history.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Daily Bollinger Channels Objects","project":"Superalgos","id":"64430a93-38c2-4c71-8085-71661bbf804e","savedPayload":{"position":{"x":6749.16703949514,"y":19628.732143607558},"targetPosition":{"x":6179.8809249372025,"y":19628.732143607558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"64910fea-c92a-4a55-850a-aa62d98b478e"}}},{"type":"Output Dataset","name":"Daily Bollinger Sub-Channels","project":"Superalgos","id":"b536a078-e32a-4489-93f6-75107a90b527","savedPayload":{"position":{"x":6179.8809249372025,"y":20231.089591771364},"targetPosition":{"x":6179.8809249372025,"y":19628.732143607558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"ca71e765-0f66-4b18-b500-847b9d16169b"}}},{"type":"Output Dataset","name":"Daily Bollinger Sub-Channels Objects","project":"Superalgos","id":"d5bcc7c4-2798-4c34-9504-cc4617b64a04","savedPayload":{"position":{"x":5563.709533981204,"y":19628.732143607558},"targetPosition":{"x":6179.8809249372025,"y":19628.732143607558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"029479ae-275d-4854-ad3e-66948656a053"}}},{"type":"Output Dataset","name":"Daily Bollinger Channels","project":"Superalgos","id":"57898dc1-83a2-4ee9-8a0b-6674f988f0fa","savedPayload":{"position":{"x":6179.8809249372025,"y":19037.126363186133},"targetPosition":{"x":6179.8809249372025,"y":19628.732143607558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"96b4e65b-e6db-44a0-80a5-ceb9d68a09ec"}}}],"outputDatasetFolders":[],"id":"b8fc5ac0-021d-4230-aa59-9876c5f0f3e1","savedPayload":{"position":{"x":4837.803174394638,"y":19433.08867683786},"targetPosition":{"x":5169.713889679955,"y":18586.819258576517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Bollinger Bands Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"3cb29ee1-02de-452a-a79f-2451700fe335","savedPayload":{"position":{"x":4276.758853260879,"y":20154.442412346893},"targetPosition":{"x":4630.241806005684,"y":19317.72841166174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"7323fef7-870a-48b6-b96f-586111253b40"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"d5f34469-0ae1-45e6-acd9-4155d5940c77","savedPayload":{"position":{"x":4149.938308225999,"y":20088.679737181315},"targetPosition":{"x":4630.241806005684,"y":19317.72841166174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Bollinger Channels Multi-Period-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"7f6266a5-bddb-4d49-962d-100b1993043d","savedPayload":{"position":{"x":4035.136336165244,"y":20003.952481172197},"targetPosition":{"x":4630.241806005684,"y":19317.72841166174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"b1dd07bf-a698-4bbb-995a-356c929a1e94"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"073e24ab-6b47-482a-b117-0d3554f63c1f","savedPayload":{"position":{"x":3934.9110977998407,"y":19902.149704954005},"targetPosition":{"x":4630.241806005684,"y":19317.72841166174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"506104fa-e99a-4a46-930e-176bce311aff"}}}],"dataMineDataDependencies":[],"id":"c0cb34fe-9268-4ebb-a8ce-7d53a13a6d4d","savedPayload":{"position":{"x":4630.241806005684,"y":19317.72841166174},"targetPosition":{"x":5169.713889679955,"y":18586.819258576517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"b1dd07bf-a698-4bbb-995a-356c929a1e94","savedPayload":{"position":{"x":4459.38698613855,"y":19153.21260876096},"targetPosition":{"x":5169.713889679955,"y":18586.819258576517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"4548cff9-f388-4f4f-b148-665d22ffaf9e","savedPayload":{"position":{"x":4336.934980792743,"y":18950.120225512925},"targetPosition":{"x":5169.713889679955,"y":18586.819258576517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"acebc3ed-4f3f-4a4b-b403-f16cbe987dde"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"34e17fad-2c62-4c45-875c-774ac6b6cc99","savedPayload":{"position":{"x":4271.198872233363,"y":18722.189567902362},"targetPosition":{"x":5169.713889679955,"y":18586.819258576517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"bc15b49d-4547-4bac-a28b-193eb0158fe3","savedPayload":{"position":{"x":6788.2366906147,"y":19021.139655915104},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Bollinger Channels Objects","config":"{\n \"codeName\": \"Bollinger-Channels-Objects\",\n \"singularVariableName\": \"bollingerChannelsObject\",\n \"pluralVariableName\": \"bollingerChannelsObjects\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"610cd062-ab88-4892-b711-0fb430305c61","savedPayload":{"position":{"x":5720.882920927928,"y":19954.296078686548},"targetPosition":{"x":5800.806248533099,"y":19419.143841775804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }\n","project":"Superalgos","id":"64910fea-c92a-4a55-850a-aa62d98b478e","savedPayload":{"position":{"x":5558.8784409430045,"y":19902.845209639374},"targetPosition":{"x":5800.806248533099,"y":19419.143841775804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"06edb099-ff64-4528-b8c6-599154bc2ddf","savedPayload":{"position":{"x":5311.500564999933,"y":20164.173239084834},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"94656d1f-508a-4e94-a8d2-013690aac596","savedPayload":{"position":{"x":5264.923927723674,"y":20343.17734801434},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","id":"edc0f697-f5e2-446f-bae8-8db7adf91d23","savedPayload":{"position":{"x":5113.89002857712,"y":20450.42579147178},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","id":"eb733f85-6cf5-485e-9bd3-2bf78733c492","savedPayload":{"position":{"x":4929.427401445173,"y":20435.55648065303},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Moving Average","config":"{\n \"codeName\": \"firstMovingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"a67a15ee-6f7f-48bd-9d55-82c57efc993b","savedPayload":{"position":{"x":4797.469987566172,"y":20305.546052506135},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Moving Average","config":"{\n \"codeName\": \"lastMovingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"0f05bffe-d668-4d25-ab67-d55a4a7c8f5d","savedPayload":{"position":{"x":4779.980984599108,"y":20121.56664840727},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Deviation","config":"{\n \"codeName\": \"firstDeviation\",\n \"isString\": false\n}","project":"Superalgos","id":"eae84509-b689-4a76-9277-eed72af491dd","savedPayload":{"position":{"x":4867.812037731175,"y":19957.395374959928},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Deviation","config":"{\n \"codeName\": \"lastDeviation\",\n \"isString\": false\n}","project":"Superalgos","id":"d5c32d1f-9e3c-48e8-8025-a17d57c0812e","savedPayload":{"position":{"x":5069.229557080776,"y":19927.81306570211},"targetPosition":{"x":5042.175036115106,"y":20188.920481973415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6c3e68b0-b781-4c53-9ff7-67c3f747ac8a","savedPayload":{"position":{"x":5042.175036115106,"y":20188.920481973415},"targetPosition":{"x":5800.806248533099,"y":19419.143841775804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"\n\nif (record.next !== undefined) {\n\n if (\n record.current.direction === record.next.direction) {\n\n if (variable.channel === undefined) {\n\n variable.channel = {\n begin: undefined,\n end: undefined,\n direction: undefined,\n period: 0,\n firstMovingAverage: 0,\n lastMovingAverage: 0,\n firstDeviation: 0,\n lastDeviation: 0\n }\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 2\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.next.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.next.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.next.deviation\n\n } else {\n\n variable.channel.period++\n variable.channel.end = record.next.end\n variable.channel.lastMovingAverage = record.next.movingAverage\n variable.channel.lastDeviation = record.next.deviation\n\n }\n } else {\n\n if (variable.channel !== undefined) {\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n }\n} else {\n if (variable.channel !== undefined) {\n variable.channel.period++\n variable.channel.end = record.current.end\n variable.channel.lastMovingAverage = record.current.movingAverage\n variable.channel.lastDeviation = record.current.deviation\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n}","project":"Superalgos","id":"b81d6adc-e721-4089-b4c3-2fd772f33d25","savedPayload":{"position":{"x":5013.265999650357,"y":19842.81234203045},"targetPosition":{"x":5263.929405162591,"y":19734.285169802894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a2b92c75-e272-4d05-b098-121a70371450","savedPayload":{"position":{"x":5263.929405162591,"y":19734.285169802894},"targetPosition":{"x":5522.6118702301865,"y":19563.75920205435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"116ccf8c-26bc-4b86-99e6-bb3075527713","savedPayload":{"position":{"x":5522.6118702301865,"y":19563.75920205435},"targetPosition":{"x":5800.806248533099,"y":19419.143841775804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1f111f72-624f-4166-9f99-ab8d785d5267","savedPayload":{"position":{"x":6599.623034700842,"y":19024.215234046038},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"referenceParent":{"type":"Plotter Module","name":"Bollinger Channels Objects","id":"52881346-3e4b-45e0-92d2-af130d381b8e"}}},{"type":"Product Definition","name":"Bollinger Channels","config":"{\n \"codeName\": \"Bollinger-Channels\",\n \"singularVariableName\": \"bollingerChannel\",\n \"pluralVariableName\": \"bollingerChannels\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"22c1f2c6-3838-4657-add8-2e01d7056917","savedPayload":{"position":{"x":5337.21592038497,"y":19686.391171162788},"targetPosition":{"x":5641.418590789468,"y":19239.159776774533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }\n","project":"Superalgos","id":"96b4e65b-e6db-44a0-80a5-ceb9d68a09ec","savedPayload":{"position":{"x":5213.544700282855,"y":19569.823825352214},"targetPosition":{"x":5641.418590789468,"y":19239.159776774533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"b243e3c4-e528-4e7b-9644-b03e47c8ca34","savedPayload":{"position":{"x":4953.851274943034,"y":20032.445985208506},"targetPosition":{"x":4788.86842333401,"y":19818.025093604323},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"74268e18-735f-405b-b9db-412ce6cf7438","savedPayload":{"position":{"x":4788.86842333401,"y":19818.025093604323},"targetPosition":{"x":4623.98601946668,"y":19603.63586734566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"bc705d0f-6df6-45f6-8d3a-44b81bf785bd","savedPayload":{"position":{"x":4318.526483972231,"y":20051.02084549715},"targetPosition":{"x":4471.22261506259,"y":19827.422696211226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad08f6a7-5d37-4fd3-9d84-5eebddcd8cb5","savedPayload":{"position":{"x":4471.22261506259,"y":19827.422696211226},"targetPosition":{"x":4623.98601946668,"y":19603.63586734566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.direction","project":"Superalgos","id":"7b7fd5fc-c820-4c1b-ae3e-400d7b90bb0b","savedPayload":{"position":{"x":4106.964199265562,"y":19457.43121870476},"targetPosition":{"x":4367.151217673905,"y":19532.86979662605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31720cda-be3c-453e-8c6e-c4816299c440","savedPayload":{"position":{"x":4367.151217673905,"y":19532.86979662605},"targetPosition":{"x":4623.98601946668,"y":19603.63586734566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.period","project":"Superalgos","id":"9c44699b-a743-4f46-82f6-0351e8b1a206","savedPayload":{"position":{"x":4625.866910548906,"y":19069.49376446092},"targetPosition":{"x":4623.428111733501,"y":19341.442480933998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8af98ad4-3062-49a1-bff6-593bd9638f72","savedPayload":{"position":{"x":4623.428111733501,"y":19341.442480933998},"targetPosition":{"x":4623.98601946668,"y":19603.63586734566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9106250d-b042-4e96-9121-c760b4c1eab2","savedPayload":{"position":{"x":4623.98601946668,"y":19603.63586734566},"targetPosition":{"x":5641.418590789468,"y":19239.159776774533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (record.previous !== undefined) {\n if (record.current.direction === record.previous.direction) {\n variable.period++\n } else {\n variable.period = 1\n }\n}","project":"Superalgos","id":"8f05a74a-f85c-4eb1-9de1-3363d2e3cb8a","savedPayload":{"position":{"x":4308.618521034068,"y":19449.701832098734},"targetPosition":{"x":4582.725632129386,"y":19414.56698223462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7e54fecc-8443-4aad-a541-0b6a3fcac877","savedPayload":{"position":{"x":4582.725632129386,"y":19414.56698223462},"targetPosition":{"x":5121.182603078487,"y":19315.701368995924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"variable.period = 1","project":"Superalgos","id":"491600d9-228d-41b8-bedb-22b8ba22a7c9","savedPayload":{"position":{"x":4307.097405901435,"y":19223.058906231985},"targetPosition":{"x":4577.265780316491,"y":19249.988772784658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3c3de682-9ac0-4bf9-b1ff-97a3e0cb24b4","savedPayload":{"position":{"x":4577.265780316491,"y":19249.988772784658},"targetPosition":{"x":5121.182603078487,"y":19315.701368995924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9ace6abd-5ef9-4c37-9dbc-7aefc8b8b905","savedPayload":{"position":{"x":5121.182603078487,"y":19315.701368995924},"targetPosition":{"x":5641.418590789468,"y":19239.159776774533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"94bc3958-cc85-43a1-a178-103e84f42910","savedPayload":{"position":{"x":6434.107155392387,"y":18928.15429200989},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Bollinger Channels","id":"a045ea45-c8ff-49a5-86cd-5d38cd3e6d22"}}},{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","config":"{\n \"codeName\": \"Bollinger-Sub-Channels-Objects\",\n \"singularVariableName\": \"bollingerSubChannelsObject\",\n \"pluralVariableName\": \"bollingerSubChannelsObjects\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"869f615e-0cc0-44fd-8648-4a951c23a410","savedPayload":{"position":{"x":5107.783025826782,"y":19278.737567128723},"targetPosition":{"x":5575.816851249463,"y":19007.79696148155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }\n","project":"Superalgos","id":"029479ae-275d-4854-ad3e-66948656a053","savedPayload":{"position":{"x":5047.006363022967,"y":19120.05582271009},"targetPosition":{"x":5575.816851249463,"y":19007.79696148155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"8f0513f5-d78e-4efd-a554-a6ee2a4781ac","savedPayload":{"position":{"x":4701.553695268074,"y":19076.058760946547},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"677f9a11-1fa3-4880-ad4f-81a4490d82e8","savedPayload":{"position":{"x":4556.617530496089,"y":19159.805622122658},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","id":"610f6b9f-9404-4603-a42b-80de31498f2f","savedPayload":{"position":{"x":4390.33895130143,"y":19142.16980911338},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Slope","config":"{\n \"codeName\": \"slope\",\n \"isString\": true,\n \"possibleValues\": [\"Side\", \"Gentle\", \"Medium\", \"Steep\", \"Extreme\"]\n}","project":"Superalgos","id":"65600005-8272-4297-8716-b08841eb5e73","savedPayload":{"position":{"x":4265.995336394912,"y":19030.053671886344},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","id":"ef18438f-7a1f-4432-8fce-494bc9b5ae01","savedPayload":{"position":{"x":4231.222014703961,"y":18866.43916776906},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Moving Average","config":"{\n \"codeName\": \"firstMovingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"e5694d55-735b-4cb2-919e-02a71679c682","savedPayload":{"position":{"x":4299.317018230371,"y":18713.50390365103},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Moving Average","config":"{\n \"codeName\": \"lastMovingAverage\",\n \"isString\": false\n}","project":"Superalgos","id":"d49bae2d-b519-49ba-8fd2-9a3a4c2e8dc3","savedPayload":{"position":{"x":4444.094040376593,"y":18629.991417823378},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Deviation","config":"{\n \"codeName\": \"firstDeviation\",\n \"isString\": false\n}","project":"Superalgos","id":"a11b4d44-937d-456e-b2bd-9cd025289c34","savedPayload":{"position":{"x":4610.237871424488,"y":18647.76924086054},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Deviation","config":"{\n \"codeName\": \"lastDeviation\",\n \"isString\": false\n}","project":"Superalgos","id":"4d1b7a3f-c452-4002-ab8c-bfa7d396ac2c","savedPayload":{"position":{"x":4734.172628418706,"y":18763.839285792033},"targetPosition":{"x":4501.014432105094,"y":18894.68523642824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2ff91c2-cfee-487c-959d-fd3ed3dea861","savedPayload":{"position":{"x":4501.014432105094,"y":18894.68523642824},"targetPosition":{"x":5575.816851249463,"y":19007.79696148155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (record.next !== undefined) {\n\n if (\n record.current.direction === record.next.direction &&\n record.current.slope === record.next.slope) {\n\n if (variable.channel === undefined) {\n\n variable.channel = {\n begin: undefined,\n end: undefined,\n direction: undefined,\n slope: undefined,\n period: 0,\n firstMovingAverage: 0,\n lastMovingAverage: 0,\n firstDeviation: 0,\n lastDeviation: 0\n }\n\n variable.channel.direction = record.current.direction\n variable.channel.slope = record.current.slope\n variable.channel.period = 2\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.next.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.next.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.next.deviation\n\n } else {\n\n variable.channel.period++\n variable.channel.end = record.next.end\n variable.channel.lastMovingAverage = record.next.movingAverage\n variable.channel.lastDeviation = record.next.deviation\n\n }\n } else {\n\n if (variable.channel !== undefined) {\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.slope = record.current.slope\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n }\n\n} else {\n if (variable.channel !== undefined) {\n variable.channel.period++\n variable.channel.end = record.current.end\n variable.channel.lastMovingAverage = record.current.movingAverage\n variable.channel.lastDeviation = record.current.deviation\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.slope = record.current.slope\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMovingAverage = record.current.movingAverage\n variable.channel.lastMovingAverage = record.current.movingAverage\n\n variable.channel.firstDeviation = record.current.deviation\n variable.channel.lastDeviation = record.current.deviation\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n}","project":"Superalgos","id":"a1af769c-2a2d-4e78-8f0d-8dfb773982f0","savedPayload":{"position":{"x":4746.328386052239,"y":18663.359603058827},"targetPosition":{"x":4993.349023912837,"y":18779.200545998578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"128aac86-66b5-4685-a75d-4e60ba697c90","savedPayload":{"position":{"x":4993.349023912837,"y":18779.200545998578},"targetPosition":{"x":5289.652822657601,"y":18880.39734672545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5bfe184e-396e-431a-a640-76c05d1c6e06","savedPayload":{"position":{"x":5289.652822657601,"y":18880.39734672545},"targetPosition":{"x":5575.816851249463,"y":19007.79696148155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"080c87fc-4546-4482-ab11-180a33f6d9ab","savedPayload":{"position":{"x":6326.434776984621,"y":18769.671518581643},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Bollinger Sub Channels Objects","id":"f8c4b699-1f40-4832-b427-68da3341daa8"}}},{"type":"Product Definition","name":"Bollinger Sub-Channels","config":"{\n \"codeName\": \"Bollinger-Sub-Channels\",\n \"singularVariableName\": \"bollingerSubChannel\",\n \"pluralVariableName\": \"bollingerSubChannels\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f8d44a4d-3771-4a71-97ca-dc604ff565d3","savedPayload":{"position":{"x":5078.065560225332,"y":18811.666529232563},"targetPosition":{"x":5617.060229699684,"y":18770.843965977925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }\n","project":"Superalgos","id":"ca71e765-0f66-4b18-b500-847b9d16169b","savedPayload":{"position":{"x":5092.340301215987,"y":18642.479645719985},"targetPosition":{"x":5617.060229699684,"y":18770.843965977925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"421aeb2e-dd1b-44ec-bf78-00d8691d4110","savedPayload":{"position":{"x":4914.271631248583,"y":18750.06660970744},"targetPosition":{"x":4921.139964416205,"y":18547.10723836855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2a101e7-8183-42b4-94c4-99bfcbf2c3c2","savedPayload":{"position":{"x":4921.139964416205,"y":18547.10723836855},"targetPosition":{"x":4927.675553436395,"y":18344.423651693094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"febf55a5-de85-4830-b4fe-df78acfc60b5","savedPayload":{"position":{"x":4569.302186443991,"y":18536.35028283147},"targetPosition":{"x":4748.42126072969,"y":18440.423770202477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0cc9b985-b780-41ef-838b-7f764824f244","savedPayload":{"position":{"x":4748.42126072969,"y":18440.423770202477},"targetPosition":{"x":4927.675553436395,"y":18344.423651693094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.direction","project":"Superalgos","id":"73113162-c56d-4ca1-9e8b-f6a5bf84c30f","savedPayload":{"position":{"x":4581.685255061548,"y":18130.665696087784},"targetPosition":{"x":4754.62718421156,"y":18237.531379399024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"91f3e346-3d02-48f9-aa0c-e55bae62f870","savedPayload":{"position":{"x":4754.62718421156,"y":18237.531379399024},"targetPosition":{"x":4927.675553436395,"y":18344.423651693094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Slope","config":"{\n \"codeName\": \"slope\",\n \"isString\": true,\n \"possibleValues\": [\"Side\", \"Gentle\", \"Medium\", \"Steep\", \"Extreme\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.slope","project":"Superalgos","id":"f9e484d0-138a-4d19-a876-a6067f5a1619","savedPayload":{"position":{"x":4914.033295924655,"y":17961.474958994284},"targetPosition":{"x":4933.56841368847,"y":18141.424641632882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"478a7021-7233-4eb4-958d-f127c6a4891c","savedPayload":{"position":{"x":4933.56841368847,"y":18141.424641632882},"targetPosition":{"x":4927.675553436395,"y":18344.423651693094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.period","project":"Superalgos","id":"35c1cfa6-c691-40b0-b680-bd7c94be19e3","savedPayload":{"position":{"x":5285.095487615155,"y":18152.03364554787},"targetPosition":{"x":5106.40612572504,"y":18248.284735165922},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"61f63128-268f-4679-a0ef-e9b53a0a655b","savedPayload":{"position":{"x":5106.40612572504,"y":18248.284735165922},"targetPosition":{"x":4927.675553436395,"y":18344.423651693094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"afe778f1-4343-4102-8eb4-0b9340d7ad5b","savedPayload":{"position":{"x":4927.675553436395,"y":18344.423651693094},"targetPosition":{"x":5617.060229699684,"y":18770.843965977925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (record.previous !== undefined) {\n if (record.current.direction === record.previous.direction && record.current.slope === record.previous.slope) {\n variable.period++\n } else {\n variable.period = 1\n }\n}","project":"Superalgos","id":"c450c940-f800-414b-a2c4-bda3481f55c7","savedPayload":{"position":{"x":4468.941584799071,"y":17633.34797116111},"targetPosition":{"x":4868.726756026543,"y":17996.450351736465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a580c9a8-c70a-483e-8dd3-d3b62464f8f4","savedPayload":{"position":{"x":4868.726756026543,"y":17996.450351736465},"targetPosition":{"x":5269.063883864055,"y":18359.239328890257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"variable.period = 1","project":"Superalgos","id":"e0efa286-41a0-45e0-8ce3-dfc27b4dce3e","savedPayload":{"position":{"x":4697.644757189861,"y":17438.21021750168},"targetPosition":{"x":4989.757772223613,"y":17892.41766221909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2decc091-6c76-458b-be8e-39e3e72cecd6","savedPayload":{"position":{"x":4989.757772223613,"y":17892.41766221909},"targetPosition":{"x":5269.063883864055,"y":18359.239328890257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f16f2ab8-7ba2-4acf-bf85-8ed89bd1e5af","savedPayload":{"position":{"x":5269.063883864055,"y":18359.239328890257},"targetPosition":{"x":5617.060229699684,"y":18770.843965977925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"79ce9c05-8a4c-4b58-850f-288037acc702","savedPayload":{"position":{"x":6263.88827076324,"y":18571.17725946989},"targetPosition":{"x":6727.553798106092,"y":18612.16520501909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Bollinger Sub Channels","id":"88bdc751-5a1d-499d-a4ba-888dbcf6dc7a"}}}],"id":"bd0f325d-6f98-468b-8b7b-99a42a175d80","savedPayload":{"position":{"x":6977.880740956191,"y":18563.449383094747},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Indicator Bot","name":"Candle Channels","config":"{\n\"codeName\": \"Candle-Channels\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candles Channels","project":"Superalgos","id":"98bb0dce-e233-4f70-a4ab-9051ee23abd5","savedPayload":{"position":{"x":7420.353770193251,"y":21193.775041429413},"targetPosition":{"x":6806.113535345859,"y":20535.96888921235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"df7d1cd7-95b0-499c-b51a-772c3fb8a2b0"}}},{"type":"Output Dataset","name":"Multi-Period-Market Candles Channels Objects","project":"Superalgos","id":"e5d3a974-b3e5-4f0c-acaf-9cf9915850ee","savedPayload":{"position":{"x":7229.171281551433,"y":21330.3379113774},"targetPosition":{"x":6806.113535345859,"y":20535.96888921235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"566b9df4-da86-4b4f-a3f4-ef8a76443714"}}}],"outputDatasetFolders":[],"id":"81b11bce-fa94-4295-b3a9-a24b6c0c45d3","savedPayload":{"position":{"x":7247.2171142494735,"y":20468.84007863417},"targetPosition":{"x":6606.078626993261,"y":19837.221966038578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"8c5feff4-7b13-404f-9fb7-844f3945715c","savedPayload":{"position":{"x":7130.847774893849,"y":21366.40803927999},"targetPosition":{"x":6656.741607984321,"y":20601.40912261517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Candle Channels Multi-Period-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"34699cb0-bf71-4fbc-8671-9570617b1cd0","savedPayload":{"position":{"x":6972.494072843456,"y":21444.202324376656},"targetPosition":{"x":6656.741607984321,"y":20601.40912261517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"902925d3-1d23-4894-9459-0be8df3965df"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"ab069a67-5e2f-4a3b-91e1-967d56ba62b6","savedPayload":{"position":{"x":6802.006180644545,"y":21489.6085393735},"targetPosition":{"x":6656.741607984321,"y":20601.40912261517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"4775daf3-4ac9-4971-a4fb-4cf66d4fbb45","savedPayload":{"position":{"x":7061.896053290493,"y":20613.257064396745},"targetPosition":{"x":6606.078626993261,"y":19837.221966038578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"902925d3-1d23-4894-9459-0be8df3965df","savedPayload":{"position":{"x":6845.51178800327,"y":20704.788540664846},"targetPosition":{"x":6606.078626993261,"y":19837.221966038578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"e9a9ec41-7040-4301-911f-8911d731c7cb","savedPayload":{"position":{"x":6612.81054847522,"y":20737.19678859372},"targetPosition":{"x":6606.078626993261,"y":19837.221966038578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"0ee514b6-0528-4ff9-a901-a519856fbee4","savedPayload":{"position":{"x":6379.650539623202,"y":20708.27323964418},"targetPosition":{"x":6606.078626993261,"y":19837.221966038578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2ab8c00c-8e15-4bdc-87fa-291c8d4edadb","savedPayload":{"position":{"x":6606.078626993261,"y":19837.221966038578},"targetPosition":{"x":6366.6454659832525,"y":18969.65539141231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Candles Channels","project":"Superalgos","id":"2950c6a6-f1fc-4641-8376-96debaf2e213","savedPayload":{"position":{"x":5900.895028554591,"y":21431.77865750068},"targetPosition":{"x":5790.61299507464,"y":20538.560949944716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"07734f1c-e2e7-4a35-8567-6a996c68883e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Candles Channels Objects","project":"Superalgos","id":"f1f62696-e584-4b36-b69f-1a557409297a","savedPayload":{"position":{"x":5665.955505250306,"y":21429.886092768982},"targetPosition":{"x":5790.61299507464,"y":20538.560949944716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8a7d224b-7571-4e1a-8b8f-8a35aa25dc63"}}}],"outputDatasetFolders":[],"id":"f81d660c-db1f-44d2-81e5-5fe6c591bab2","savedPayload":{"position":{"x":5790.61299507464,"y":20538.560949944716},"targetPosition":{"x":5797.86274586989,"y":19638.590149799842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"7bdf41eb-4243-4417-8df8-6dbf82cf637f","savedPayload":{"position":{"x":5527.124685628241,"y":21405.491441264883},"targetPosition":{"x":5557.930441228949,"y":20506.018814987758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"43a935c4-46a1-478e-81d0-65c18f1128dc","savedPayload":{"position":{"x":5386.795436488912,"y":21389.598358748604},"targetPosition":{"x":5557.930441228949,"y":20506.018814987758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Candle Channels Multi-Period-Daily","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"71232c95-96bd-4c90-8571-be97495baab0","savedPayload":{"position":{"x":5250.680099130805,"y":21351.948615432553},"targetPosition":{"x":5557.930441228949,"y":20506.018814987758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"4a89ffcd-ef6d-4dd2-bbf6-6e2f1dba24cd"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"97ac78ed-bc8d-49f0-8111-527d7802b559","savedPayload":{"position":{"x":5122.130284900573,"y":21293.469272949504},"targetPosition":{"x":5557.930441228949,"y":20506.018814987758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"41a2dd93-007f-4835-ac77-0bedbe22b128","savedPayload":{"position":{"x":5557.930441228949,"y":20506.018814987758},"targetPosition":{"x":5797.86274586989,"y":19638.590149799842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"4a89ffcd-ef6d-4dd2-bbf6-6e2f1dba24cd","savedPayload":{"position":{"x":5341.59887743766,"y":20414.362849991885},"targetPosition":{"x":5797.86274586989,"y":19638.590149799842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"31740e1a-525b-4ff3-bd71-7fb9c95a0a72","savedPayload":{"position":{"x":5156.360942268333,"y":20269.839257502932},"targetPosition":{"x":5797.86274586989,"y":19638.590149799842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"e29dc92e-bbd9-45ae-ac52-1ee785e44928","savedPayload":{"position":{"x":5014.840294882593,"y":20082.297081512486},"targetPosition":{"x":5797.86274586989,"y":19638.590149799842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0de6dd1f-5bca-4f66-a5db-cd068dd4190f","savedPayload":{"position":{"x":6050.4081243100445,"y":19812.266774988075},"targetPosition":{"x":6366.6454659832525,"y":18969.65539141231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles Channels","config":"{\n \"codeName\": \"Candles-Channels\",\n \"singularVariableName\": \"candlesChannel\",\n \"pluralVariableName\": \"candlesChannels\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"df7d1cd7-95b0-499c-b51a-772c3fb8a2b0","savedPayload":{"position":{"x":4857.00954808449,"y":19917.091831573234},"targetPosition":{"x":5429.013638517197,"y":19222.245574816927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"07734f1c-e2e7-4a35-8567-6a996c68883e","savedPayload":{"position":{"x":4670.286119148172,"y":19706.32465033262},"targetPosition":{"x":5429.013638517197,"y":19222.245574816927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"bb911132-56d2-4368-ac9d-b013c2bf25ae","savedPayload":{"position":{"x":3875.2748331976563,"y":20189.333651026765},"targetPosition":{"x":3998.7581765994037,"y":19875.234759111612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed49d0b4-d13f-42ea-ac30-18fcf718b664","savedPayload":{"position":{"x":3998.7581765994037,"y":19875.234759111612},"targetPosition":{"x":4122.241520001151,"y":19561.13586719646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"58e1bae8-a892-4d59-bd35-d87458cf8bae","savedPayload":{"position":{"x":3553.1958804743826,"y":19924.195173833225},"targetPosition":{"x":3837.718700237767,"y":19742.66552051484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2553b276-b77a-4044-9a25-8fde8158c3fa","savedPayload":{"position":{"x":3837.718700237767,"y":19742.66552051484},"targetPosition":{"x":4122.241520001151,"y":19561.13586719646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.direction","project":"Superalgos","id":"7273b074-f439-4ff1-82c7-86bf0eb38fb3","savedPayload":{"position":{"x":3448.47302090041,"y":19520.38038143642},"targetPosition":{"x":3785.3572704507806,"y":19540.75812431644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a400d6da-4e0c-417f-bc02-b33b7f64c94f","savedPayload":{"position":{"x":3785.3572704507806,"y":19540.75812431644},"targetPosition":{"x":4122.241520001151,"y":19561.13586719646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.period","project":"Superalgos","id":"41659e98-8488-4d01-9ed4-04520fe9a923","savedPayload":{"position":{"x":3601.1068274339214,"y":19132.132799371928},"targetPosition":{"x":3861.674173717536,"y":19346.634333284193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"01cf59b3-450b-47cc-a235-d334957ed2bd","savedPayload":{"position":{"x":3861.674173717536,"y":19346.634333284193},"targetPosition":{"x":4122.241520001151,"y":19561.13586719646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e186e788-474c-47be-9685-6060c60963d9","savedPayload":{"position":{"x":4122.241520001151,"y":19561.13586719646},"targetPosition":{"x":5429.013638517197,"y":19222.245574816927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (record.previous !== undefined) {\n if (record.current.direction === record.previous.direction) {\n variable.period++\n } else {\n variable.period = 1\n }\n}","project":"Superalgos","id":"ed8b3159-b7bb-44a0-850e-d55a4c0c76a2","savedPayload":{"position":{"x":3857.331665158903,"y":19215.44254683272},"targetPosition":{"x":4081.772990011339,"y":19199.596673600772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ffc37ffd-9763-42c5-8a92-53962e11190e","savedPayload":{"position":{"x":4081.772990011339,"y":19199.596673600772},"targetPosition":{"x":4530.655639716213,"y":19167.90492713687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"variable.period = 1","project":"Superalgos","id":"0c8b195c-a6a6-4e83-b1e6-43a4aca039a6","savedPayload":{"position":{"x":3867.970981895578,"y":19039.553673581846},"targetPosition":{"x":4088.8658678357897,"y":19082.337424766854},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5668a3b7-6ebc-4e90-8431-2b7f832e4434","savedPayload":{"position":{"x":4088.8658678357897,"y":19082.337424766854},"targetPosition":{"x":4530.655639716213,"y":19167.90492713687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"694d2276-7466-4884-a5b3-99a52e16ea91","savedPayload":{"position":{"x":4530.655639716213,"y":19167.90492713687},"targetPosition":{"x":5429.013638517197,"y":19222.245574816927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8c81d378-0947-4e9d-be25-58e69120152e","savedPayload":{"position":{"x":5615.52953763408,"y":19465.4626747192},"targetPosition":{"x":6366.6454659832525,"y":18969.65539141231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candles Channels","id":"864f26cb-b191-47c1-801e-57bb2436294e"}}},{"type":"Product Definition","name":"Candles Channels Objects","config":"{\n \"codeName\": \"Candles-Channels-Objects\",\n \"singularVariableName\": \"candlesChannelObjects\",\n \"pluralVariableName\": \"candlesChannelsObjects\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"566b9df4-da86-4b4f-a3f4-ef8a76443714","savedPayload":{"position":{"x":5367.643319782928,"y":18100.858592946926},"targetPosition":{"x":5780.876377092711,"y":18196.00899744306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"8a7d224b-7571-4e1a-8b8f-8a35aa25dc63","savedPayload":{"position":{"x":5417.965101093469,"y":17977.083268139333},"targetPosition":{"x":5780.876377092711,"y":18196.00899744306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"b5fad2c7-a8bc-464d-b459-a925a7d1bc95","savedPayload":{"position":{"x":5219.993186914275,"y":17796.041769567848},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"89ecb579-a25e-4db4-8f3c-599d6cf4bbb7","savedPayload":{"position":{"x":5187.870970144762,"y":17725.711135124602},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction","config":"{\n \"codeName\": \"direction\",\n \"isString\": true,\n \"possibleValues\": [\"Up\", \"Down\", \"Side\"]\n}","project":"Superalgos","id":"c72882a9-25bc-4be9-b90c-072040321213","savedPayload":{"position":{"x":5201.825985494474,"y":17661.847131511026},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period","config":"{\n \"codeName\": \"period\",\n \"isString\": false\n}","project":"Superalgos","id":"c253b3ab-56f4-4aa8-8dd2-801721fd07a7","savedPayload":{"position":{"x":5227.648905193648,"y":17596.69589436363},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Min","config":"{ \n\"codeName\": \"firstMin\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"4e21dc37-1099-4ed7-8d63-e32e0764ab01","savedPayload":{"position":{"x":5285.076147890126,"y":17586.658626001958},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Min","config":"{ \n\"codeName\": \"lastMin\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"62d4e90b-f3d5-4e32-9ef2-a3b460e17522","savedPayload":{"position":{"x":5352.767106185802,"y":17507.10024853651},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"First Max","config":"{ \n\"codeName\": \"firstMax\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"3d4a753f-2b69-49e3-8a3d-4c99ed137495","savedPayload":{"position":{"x":5380.639319085956,"y":17600.165220545357},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last Max","config":"{ \n\"codeName\": \"lastMax\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"55381285-2fa6-4ffc-a174-38e3e126708b","savedPayload":{"position":{"x":5478.2363224484325,"y":17564.008435175405},"targetPosition":{"x":5366.044840846909,"y":17716.116407106743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a4c69128-a306-4eac-83a7-20002c4a6b4b","savedPayload":{"position":{"x":5366.044840846909,"y":17716.116407106743},"targetPosition":{"x":5780.876377092711,"y":18196.00899744306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"\n\nif (record.next !== undefined) {\n\n if (\n record.current.direction === record.next.direction) {\n\n if (variable.channel === undefined) {\n\n variable.channel = {\n begin: undefined,\n end: undefined,\n direction: undefined,\n period: 0,\n firstMin: 0,\n lastMin: 0,\n firstMax: 0,\n lastMax: 0\n }\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 2\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.next.end\n\n variable.channel.firstMin = record.current.min\n variable.channel.lastMin = record.next.min\n\n variable.channel.firstMax = record.current.max\n variable.channel.lastMax = record.next.max\n\n } else {\n\n variable.channel.period++\n variable.channel.end = record.next.end\n variable.channel.lastMin = record.next.min\n variable.channel.lastMax = record.next.max\n\n }\n } else {\n\n if (variable.channel !== undefined) {\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMin = record.current.min\n variable.channel.lastMin = record.current.min\n\n variable.channel.firstMax = record.current.max\n variable.channel.lastMax = record.current.max\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n }\n} else {\n if (variable.channel !== undefined) {\n variable.channel.period++\n variable.channel.end = record.current.end\n variable.channel.lastMin = record.current.min\n variable.channel.lastMax = record.current.max\n results.push(variable.channel)\n variable.channel = undefined\n } else {\n /* The variable.channel has only one period */\n\n variable.channel = {}\n\n variable.channel.direction = record.current.direction\n variable.channel.period = 1\n\n variable.channel.begin = record.current.begin\n variable.channel.end = record.current.end\n\n variable.channel.firstMin = record.current.min\n variable.channel.lastMin = record.current.min\n\n variable.channel.firstMax = record.current.max\n variable.channel.lastMax = record.current.max\n\n results.push(variable.channel)\n variable.channel = undefined\n }\n}","project":"Superalgos","id":"3d8fcb90-fd49-4a4a-b905-63c2db9a6148","savedPayload":{"position":{"x":5587.912847507643,"y":17730.489890425357},"targetPosition":{"x":5625.390918599947,"y":17822.474961850086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"58776129-39ee-4063-8f51-ca59c75bcae6","savedPayload":{"position":{"x":5625.390918599947,"y":17822.474961850086},"targetPosition":{"x":5665.541989568959,"y":17920.51020983425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d2d46944-c474-417b-a12c-d9b011ffcaa5","savedPayload":{"position":{"x":5665.541989568959,"y":17920.51020983425},"targetPosition":{"x":5780.876377092711,"y":18196.00899744306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047","savedPayload":{"position":{"x":5467.55170609607,"y":18929.27704409685},"targetPosition":{"x":6366.6454659832525,"y":18969.65539141231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candles Channels Objects","id":"7aa1e889-ae4f-4945-b0e5-9ad87ded05a5"}}}],"id":"c4adde4f-8ed9-4a02-8994-90f0967c8be1","savedPayload":{"position":{"x":6873.691834356033,"y":18563.449383094747},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Resistances and Supports","config":"{ \n\"codeName\": \"Resistances-And-Supports\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates SMAs for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Resistances","project":"Superalgos","id":"5ccce358-1e38-4b97-9bd4-2634d38f4bc4","savedPayload":{"position":{"x":6660.556535097687,"y":19362.285486284567},"targetPosition":{"x":6337.624143351328,"y":19127.24644369101},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"44e905fc-719f-453b-a567-fd5e3bfcae91"}}},{"type":"Output Dataset","name":"Multi-Period-Market Supports","project":"Superalgos","id":"0f3718f9-e4ed-4217-b59f-77ace0cf9aef","savedPayload":{"position":{"x":6296.324688326677,"y":19524.699414563383},"targetPosition":{"x":6337.624143351328,"y":19127.24644369101},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"4a1bd251-76ed-4530-8723-08e41d50f12d"}}}],"outputDatasetFolders":[],"id":"cf7a746c-31f5-4a6e-9ea1-96d1163905cc","savedPayload":{"position":{"x":7040.6587207613775,"y":18883.95597858918},"targetPosition":{"x":6760.584592812218,"y":18776.445593725588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"a27c7e9d-a3ea-4f6e-b682-9474ccfe5366","savedPayload":{"position":{"x":6183.091866521991,"y":19509.1400510753},"targetPosition":{"x":6081.9019985160085,"y":19167.502055372897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Resistances and Supports Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference|Market Starting Point|Market Ending Point\"\n}","project":"Superalgos","id":"d0c6a69b-9ee7-4b2e-b58f-050878def5fd","savedPayload":{"position":{"x":6044.515718703693,"y":19521.964254297807},"targetPosition":{"x":6081.9019985160085,"y":19167.502055372897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"61f870e5-33d1-401e-8ca6-f4da59d955bc"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"899c04ed-0144-4193-a7f0-658061c4b719","savedPayload":{"position":{"x":5911.547761216436,"y":19480.473706089007},"targetPosition":{"x":6081.9019985160085,"y":19167.502055372897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"46684253-b8e4-447d-b8d0-6b13ed7ab29b","savedPayload":{"position":{"x":6949.3807101271705,"y":19009.589382162678},"targetPosition":{"x":6760.584592812218,"y":18776.445593725588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"61f870e5-33d1-401e-8ca6-f4da59d955bc","savedPayload":{"position":{"x":6807.514932324288,"y":19072.75209590413},"targetPosition":{"x":6760.584592812218,"y":18776.445593725588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"02633aff-3554-4a49-9fd7-a348c9b3671d","savedPayload":{"position":{"x":6653.074207948626,"y":19056.519721674747},"targetPosition":{"x":6760.584592812218,"y":18776.445593725588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"e69d76de-05e3-428a-b823-bfb0e191c659","savedPayload":{"position":{"x":6527.440804375128,"y":18965.24171104054},"targetPosition":{"x":6760.584592812218,"y":18776.445593725588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d9b2729-43fb-4e7e-aa4f-b8477c424e51","savedPayload":{"position":{"x":6760.584592812218,"y":18776.445593725588},"targetPosition":{"x":6713.654253300148,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Describe what the process does.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Resistances","project":"Superalgos","id":"e990eaed-a1b4-4668-9778-b0310f249235","savedPayload":{"position":{"x":6310.015782099836,"y":19380.022626830036},"targetPosition":{"x":6075.4636458850255,"y":19056.777604150622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f4530d48-3239-4ab0-8c4d-d611cd55fde3"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Supports","project":"Superalgos","id":"a4208abc-dbfe-4568-8697-4fdbc1bef5c9","savedPayload":{"position":{"x":5915.662638867736,"y":19381.91954841766},"targetPosition":{"x":6075.4636458850255,"y":19056.777604150622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"deaaf4ec-9352-40b6-af9a-8541a73a5e13"}}}],"outputDatasetFolders":[],"id":"86d9d925-de8e-4e76-b08c-2b6fb2303d37","savedPayload":{"position":{"x":5848.218187708517,"y":18909.70031675159},"targetPosition":{"x":5952.3525616383085,"y":18420.292933119745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Resistances and Supports Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"c8e28e76-f11d-493e-8961-6c26a1eed57d","savedPayload":{"position":{"x":6069.706163202947,"y":19449.4078224997},"targetPosition":{"x":5820.05363290989,"y":19016.178955491738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"3842d7ea-292c-438c-af35-f5e6a6c68105"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"56bc0c89-e012-47b1-9e33-3ed4fdc3aa52","savedPayload":{"position":{"x":5782.887891751678,"y":19370.41258602553},"targetPosition":{"x":5820.05363290989,"y":19016.178955491738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"723d9197-6349-4499-9dd4-f6443cba19be","savedPayload":{"position":{"x":5581.627591471792,"y":19281.0184059879},"targetPosition":{"x":5820.05363290989,"y":19016.178955491738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"1e51570a-18ba-4d61-8fc2-4019acc2ffeb","savedPayload":{"position":{"x":5471.575816571021,"y":19090.223128705093},"targetPosition":{"x":5820.05363290989,"y":19016.178955491738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"bf0382d1-1529-4cb0-8c9c-39659093d9e8","savedPayload":{"position":{"x":5617.5565114800775,"y":18791.872501197107},"targetPosition":{"x":5952.3525616383085,"y":18420.292933119745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"3842d7ea-292c-438c-af35-f5e6a6c68105","savedPayload":{"position":{"x":5476.684441720608,"y":18574.818622819555},"targetPosition":{"x":5952.3525616383085,"y":18420.292933119745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"ab23ac12-59f4-42a2-86f3-5c32619f4c6e","savedPayload":{"position":{"x":5463.156970808297,"y":18316.63968762618},"targetPosition":{"x":5952.3525616383085,"y":18420.292933119745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"7e2fdde9-8b64-44a3-85f1-10c3935bd3e3","savedPayload":{"position":{"x":5580.792006121392,"y":18086.073161425848},"targetPosition":{"x":5952.3525616383085,"y":18420.292933119745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"be19d91b-9337-4f84-96b3-f4e54ea12df5","savedPayload":{"position":{"x":6577.457103378285,"y":18747.441048803557},"targetPosition":{"x":6713.654253300148,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Resistances","config":"{ \n\"codeName\": \"Resistances\",\n \"singularVariableName\": \"resistance\",\n \"pluralVariableName\": \"resistances\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"\n{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"44e905fc-719f-453b-a567-fd5e3bfcae91","savedPayload":{"position":{"x":6277.50356278133,"y":18906.664693063747},"targetPosition":{"x":6312.7013174153835,"y":18684.434816429843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }\n","project":"Superalgos","id":"f4530d48-3239-4ab0-8c4d-d611cd55fde3","savedPayload":{"position":{"x":6153.602291648411,"y":18843.533842196815},"targetPosition":{"x":6312.7013174153835,"y":18684.434816429843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"8fc59f80-7313-43a0-be1f-3601c653253f","savedPayload":{"position":{"x":5521.129075993889,"y":20171.711449436105},"targetPosition":{"x":5488.679987622512,"y":19722.88291127942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4db89c62-71d4-4add-8a8a-3fd37b230993","savedPayload":{"position":{"x":5488.679987622512,"y":19722.88291127942},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"8cd95902-f17d-49c6-947f-b574dab41637","savedPayload":{"position":{"x":5406.588424027857,"y":20175.116344395818},"targetPosition":{"x":5412.31955297849,"y":19725.152841252562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca4c0849-7e58-4dee-958a-7b9567c9bc22","savedPayload":{"position":{"x":5412.31955297849,"y":19725.152841252562},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate Resistance","config":"{\n \"codeName\": \"rateResistance\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.resistance.rate","project":"Superalgos","id":"3ead495c-b3d7-4232-bd44-a0201833230e","savedPayload":{"position":{"x":5292.171650808075,"y":20168.795247302423},"targetPosition":{"x":5336.041704165302,"y":19720.93877652363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a198ddb9-bfdc-4ba5-8772-6ddb98a1151d","savedPayload":{"position":{"x":5336.041704165302,"y":19720.93877652363},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period Resistance","config":"{\n \"codeName\": \"periodResistance\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.resistance.period","project":"Superalgos","id":"5ad98412-3b69-4eba-b1ea-6aa86e0db304","savedPayload":{"position":{"x":5178.703131807451,"y":20152.793701805324},"targetPosition":{"x":5260.3960248315525,"y":19710.271079525566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"561ab821-c7be-4df8-abb4-3d1a5421b27b","savedPayload":{"position":{"x":5260.3960248315525,"y":19710.271079525566},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Type Resistance","config":"{\n \"codeName\": \"typeResistance\",\n \"isString\": true,\n \"possibleValues\": [\"Resistance\", \"Support\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.resistance.type","project":"Superalgos","id":"2d379184-f16b-4c87-8ed4-a0c57d1e2837","savedPayload":{"position":{"x":5067.000410305507,"y":20127.226999406495},"targetPosition":{"x":5185.9275438302575,"y":19693.22661125968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7cdcd891-d5e4-4237-9189-8ad7691d41ac","savedPayload":{"position":{"x":5185.9275438302575,"y":19693.22661125968},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Rate","config":"{ \n\"codeName\": \"resistance1Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Rate","project":"Superalgos","id":"b3da6d1a-38f0-4b52-88eb-926d32db8bf3","savedPayload":{"position":{"x":4957.868306970326,"y":20092.27934878259},"targetPosition":{"x":5113.17280827347,"y":19669.92817751041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bea03586-2505-4e03-9a2b-3a9477955e66","savedPayload":{"position":{"x":5113.17280827347,"y":19669.92817751041},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Period","config":"{ \n\"codeName\": \"resistance1Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Period","project":"Superalgos","id":"292c00a5-59ff-4075-a386-6b5222b26019","savedPayload":{"position":{"x":4852.093121107198,"y":20048.202548557172},"targetPosition":{"x":5042.656017698053,"y":19640.5436440268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b8872bec-843c-41cb-a42a-9da8248dc514","savedPayload":{"position":{"x":5042.656017698053,"y":19640.5436440268},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Rate","config":"{ \n\"codeName\": \"resistance2Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Rate","project":"Superalgos","id":"f9904c9a-9244-4d2d-a5b6-22600493c059","savedPayload":{"position":{"x":4750.436965354096,"y":19995.31417308588},"targetPosition":{"x":4974.8852471959835,"y":19605.28472704594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"33f9cf94-552f-418d-b93a-8d073def39e7","savedPayload":{"position":{"x":4974.8852471959835,"y":19605.28472704594},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Period","config":"{ \n\"codeName\": \"resistance2Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Period","project":"Superalgos","id":"4b08a91c-42f9-4354-b197-a6a84d08d0cb","savedPayload":{"position":{"x":4653.63227464267,"y":19933.995284325927},"targetPosition":{"x":4910.348786721701,"y":19564.405467872635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e67af800-29c1-49fc-9162-13b8a750bfbf","savedPayload":{"position":{"x":4910.348786721701,"y":19564.405467872635},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Rate","config":"{ \n\"codeName\": \"resistance3Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Rate","project":"Superalgos","id":"69de03a4-e0a2-4136-8353-20c7a61cf4e5","savedPayload":{"position":{"x":4562.3765289877665,"y":19864.687686275938},"targetPosition":{"x":4849.511622951763,"y":19518.200402505976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"688458ca-7c03-4ba9-a09f-97c556e5bbae","savedPayload":{"position":{"x":4849.511622951763,"y":19518.200402505976},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Period","config":"{ \n\"codeName\": \"resistance3Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Period","project":"Superalgos","id":"12621061-eba5-477c-add4-85a431de92a4","savedPayload":{"position":{"x":4477.32722812795,"y":19787.89074176805},"targetPosition":{"x":4792.812089045219,"y":19467.002439500717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3be3022d-d812-4570-8d01-849a104da943","savedPayload":{"position":{"x":4792.812089045219,"y":19467.002439500717},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 4 Rate","config":"{ \n\"codeName\": \"resistance4Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance4Rate","project":"Superalgos","id":"acd8a299-32f4-4646-9acf-f679612e7ff7","savedPayload":{"position":{"x":4399.097154224821,"y":19704.15777454724},"targetPosition":{"x":4740.658706443133,"y":19411.18046135351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"97f41f84-75e6-4b28-a948-6971fa6a3c95","savedPayload":{"position":{"x":4740.658706443133,"y":19411.18046135351},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 4 Period","config":"{ \n\"codeName\": \"resistance4Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance4Period","project":"Superalgos","id":"0dcb8ce8-61a4-4acc-a78b-8323d2d265af","savedPayload":{"position":{"x":4328.24995675348,"y":19614.09208256107},"targetPosition":{"x":4693.427241462239,"y":19351.136666696064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b23829c6-2cac-4cbe-bf10-0dff088077ba","savedPayload":{"position":{"x":4693.427241462239,"y":19351.136666696064},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 5 Rate","config":"{ \n\"codeName\": \"resistance5Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance5Rate","project":"Superalgos","id":"8ca891d5-65e6-4b57-840f-355241255c69","savedPayload":{"position":{"x":4265.296091395176,"y":19518.342591184144},"targetPosition":{"x":4651.4579978900365,"y":19287.30367244478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e7a2bbe6-f265-4069-8d11-377fba99a6c3","savedPayload":{"position":{"x":4651.4579978900365,"y":19287.30367244478},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 5 Period","config":"{ \n\"codeName\": \"resistance5Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance5Period","project":"Superalgos","id":"a862b407-8962-4b48-8add-169cdd893269","savedPayload":{"position":{"x":4210.689142192397,"y":19417.599177695938},"targetPosition":{"x":4615.053365088184,"y":19220.141396785977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"30bb7e73-32f0-4cbb-bc41-eb3bdc086718","savedPayload":{"position":{"x":4615.053365088184,"y":19220.141396785977},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce 1","config":"{ \n\"codeName\": \"resistance1Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Bounce1","project":"Superalgos","id":"2238f0b3-c9e0-45b2-ab8e-66b4ce2ff98e","savedPayload":{"position":{"x":4164.822553465465,"y":19312.587700699158},"targetPosition":{"x":4584.475639270229,"y":19150.13374545479},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c111cf47-76d4-44d5-9c39-60f72eca4226","savedPayload":{"position":{"x":4584.475639270229,"y":19150.13374545479},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce 2","config":"{ \n\"codeName\": \"resistance1Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Bounce2","project":"Superalgos","id":"5de72a19-6f28-4e45-ab8c-532f77ddffbb","savedPayload":{"position":{"x":4128.026795037187,"y":19204.064770291898},"targetPosition":{"x":4559.945133651378,"y":19077.785125183284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9018b3af-c080-48b4-82c6-8489268c0690","savedPayload":{"position":{"x":4559.945133651378,"y":19077.785125183284},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce 3","config":"{ \n\"codeName\": \"resistance1Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Bounce3","project":"Superalgos","id":"ce754586-45d8-44d3-b6df-4abd1303671c","savedPayload":{"position":{"x":4100.5669811902135,"y":19092.812296674543},"targetPosition":{"x":4541.638591086728,"y":19003.61680943838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b7458a1-dd88-4b0a-91b7-b92df6263fb4","savedPayload":{"position":{"x":4541.638591086728,"y":19003.61680943838},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce 5","config":"{ \n\"codeName\": \"resistance1Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Bounce5","project":"Superalgos","id":"4520275c-befa-4070-8b21-9b741381ff87","savedPayload":{"position":{"x":4082.640960512548,"y":18979.631856468848},"targetPosition":{"x":4529.687910634952,"y":18928.163182634584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f0479991-f060-44bf-8ac5-5b895362f3ef","savedPayload":{"position":{"x":4529.687910634952,"y":18928.163182634584},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce 10","config":"{ \n\"codeName\": \"resistance1Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1Bounce10","project":"Superalgos","id":"2185c09e-8439-4776-9cb8-503d08e2eaed","savedPayload":{"position":{"x":4074.377890393953,"y":18865.33891734002},"targetPosition":{"x":4524.179197222555,"y":18851.96788988203},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"33826a2e-6432-4a0c-accb-d3a930a1dd73","savedPayload":{"position":{"x":4524.179197222555,"y":18851.96788988203},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 1 Bounce All","config":"{ \n\"codeName\": \"resistance1BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance1BounceAll","project":"Superalgos","id":"81fabb3a-9c41-41e9-b09e-f168ca8c7032","savedPayload":{"position":{"x":4075.8373064439784,"y":18750.756962533498},"targetPosition":{"x":4525.152141255905,"y":18775.579920011016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"99647cd5-b683-4014-a213-d24fa859d561","savedPayload":{"position":{"x":4525.152141255905,"y":18775.579920011016},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce 1","config":"{ \n\"codeName\": \"resistance2Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Bounce1","project":"Superalgos","id":"c810907a-f21c-4163-9e8e-8a884e8aa0f7","savedPayload":{"position":{"x":4087.0086935365343,"y":18636.7115576593},"targetPosition":{"x":4532.599732650942,"y":18699.549650094883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d93c9b19-9366-444c-b1e2-40c0d7f5685d","savedPayload":{"position":{"x":4532.599732650942,"y":18699.549650094883},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce 2","config":"{ \n\"codeName\": \"resistance2Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Bounce2","project":"Superalgos","id":"348406a5-5031-4393-becb-19c4f325b698","savedPayload":{"position":{"x":4107.8115615716415,"y":18524.024402472896},"targetPosition":{"x":4546.468311341014,"y":18624.424879970615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0458195f-bd6e-474e-8387-0e15f4730aef","savedPayload":{"position":{"x":4546.468311341014,"y":18624.424879970615},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce 3","config":"{ \n\"codeName\": \"resistance2Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Bounce3","project":"Superalgos","id":"eebbde09-23ce-4403-b792-17c9fd5da771","savedPayload":{"position":{"x":4138.096025408398,"y":18413.50741050962},"targetPosition":{"x":4566.657953898852,"y":18550.74688532843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9b56c44a-4141-4a6c-8b97-345cd1fc5ff3","savedPayload":{"position":{"x":4566.657953898852,"y":18550.74688532843},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce 5","config":"{ \n\"codeName\": \"resistance2Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Bounce5","project":"Superalgos","id":"6b64ca08-f049-4a3b-97a3-91eb11d07f70","savedPayload":{"position":{"x":4177.643884790898,"y":18305.956859229056},"targetPosition":{"x":4593.0231934871845,"y":18479.046517808056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fb3c325e-8229-4879-9a16-d0b00b12b527","savedPayload":{"position":{"x":4593.0231934871845,"y":18479.046517808056},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce 10","config":"{ \n\"codeName\": \"resistance2Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2Bounce10","project":"Superalgos","id":"eae97d09-1001-4c26-9337-ba15de4b6b16","savedPayload":{"position":{"x":4226.1701964860495,"y":18202.1476528177},"targetPosition":{"x":4625.374067950619,"y":18409.840380200483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bdeb35a8-ff0d-4441-8507-595bf5152fdb","savedPayload":{"position":{"x":4625.374067950619,"y":18409.840380200483},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 2 Bounce All","config":"{ \n\"codeName\": \"resistance2BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance2BounceAll","project":"Superalgos","id":"8f31479b-9788-4b26-9e29-17b021e080bc","savedPayload":{"position":{"x":4283.325327306116,"y":18102.827738986525},"targetPosition":{"x":4663.47748849733,"y":18343.627104313033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f762cc91-2102-4f76-81d0-47ebc238f7b2","savedPayload":{"position":{"x":4663.47748849733,"y":18343.627104313033},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce 1","config":"{ \n\"codeName\": \"resistance3Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Bounce1","project":"Superalgos","id":"dc591f82-09c1-4a97-9571-db4dea91848a","savedPayload":{"position":{"x":4348.697473223834,"y":18008.712719990595},"targetPosition":{"x":4707.058919109142,"y":18280.883758315747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"108588b4-799b-4a53-880c-09e6241a0d83","savedPayload":{"position":{"x":4707.058919109142,"y":18280.883758315747},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce 2","config":"{ \n\"codeName\": \"resistance3Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Bounce2","project":"Superalgos","id":"99fdd4d2-2681-45c5-a10c-b5a26d9146f5","savedPayload":{"position":{"x":4421.815626429858,"y":17920.48069669842},"targetPosition":{"x":4755.804354579825,"y":18222.062409454298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cc680268-6a77-4bf3-8fb6-d52fe13c501c","savedPayload":{"position":{"x":4755.804354579825,"y":18222.062409454298},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce 3","config":"{ \n\"codeName\": \"resistance3Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Bounce3","project":"Superalgos","id":"d9cfaabe-04b9-4b3a-8143-f5ef50ac58ed","savedPayload":{"position":{"x":4502.152968954848,"y":17838.767382859653},"targetPosition":{"x":4809.362582929818,"y":18167.58686689512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"31034bc5-b30a-4073-ad24-968a1f879551","savedPayload":{"position":{"x":4809.362582929818,"y":18167.58686689512},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce 5","config":"{ \n\"codeName\": \"resistance3Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Bounce5","project":"Superalgos","id":"db83ae1b-24e1-460f-bea8-f7273ca83e26","savedPayload":{"position":{"x":4589.130668404985,"y":17764.161524772953},"targetPosition":{"x":4867.347715896576,"y":18117.849628170654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ebb1a278-c6a4-4834-8fae-486ccd553308","savedPayload":{"position":{"x":4867.347715896576,"y":18117.849628170654},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce 10","config":"{ \n\"codeName\": \"resistance3Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3Bounce10","project":"Superalgos","id":"570566fa-85ca-4603-aad1-36275eb97f39","savedPayload":{"position":{"x":4682.122048462636,"y":17697.20065935543},"targetPosition":{"x":4929.341969268342,"y":18073.209051225636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"80df4b28-5835-43dc-a7a8-6e84f9d57525","savedPayload":{"position":{"x":4929.341969268342,"y":18073.209051225636},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 3 Bounce All","config":"{ \n\"codeName\": \"resistance3BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance3BounceAll","project":"Superalgos","id":"e3da0929-67a0-46ca-83b5-526873922999","savedPayload":{"position":{"x":4780.4571041036,"y":17638.367241176813},"targetPosition":{"x":4994.898673028987,"y":18033.986772439894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"096eb127-6766-4d53-a365-12bf9c50c540","savedPayload":{"position":{"x":4994.898673028987,"y":18033.986772439894},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support Resistance Zone","config":"{ \n\"codeName\": \"supportResistanceZone\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.supportResistanceZone","project":"Superalgos","id":"9f06c41a-3f69-409f-b0a8-03a32014f95e","savedPayload":{"position":{"x":4883.427328998638,"y":17588.085166363253},"targetPosition":{"x":5063.545489625678,"y":18000.465389230852},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7b4e7478-e4c0-4664-a95e-8afddd3b245c","savedPayload":{"position":{"x":5063.545489625678,"y":18000.465389230852},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 4 Bounce 1","config":"{ \n\"codeName\": \"resistance4Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance4Bounce1","project":"Superalgos","id":"bbceb956-d606-4ee1-86cb-30d3c9e4d16e","savedPayload":{"position":{"x":4990.290820317816,"y":17546.716718415988},"targetPosition":{"x":5134.787817171797,"y":17972.886423932676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c6eace47-c896-4784-9693-6e9d8b678ae4","savedPayload":{"position":{"x":5134.787817171797,"y":17972.886423932676},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Resistance 5 Bounce 1","config":"{ \n\"codeName\": \"resistance5Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.resistance5Bounce1","project":"Superalgos","id":"335496af-0d73-49cf-bc2e-88237434d4a6","savedPayload":{"position":{"x":5100.277624157425,"y":17514.559957950434},"targetPosition":{"x":5208.112353064869,"y":17951.448583622307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8f735c80-9a12-4061-ab17-7a733f941173","savedPayload":{"position":{"x":5208.112353064869,"y":17951.448583622307},"targetPosition":{"x":5423.781810879758,"y":18825.22583496605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dbfa5564-4cfd-4bec-8748-c0dc7b1afd98","savedPayload":{"position":{"x":5423.781810879758,"y":18825.22583496605},"targetPosition":{"x":6312.7013174153835,"y":18684.434816429843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"\n\nlet candle = record.current\nlet previousCandle = record.previous\n\nvariable.supportResistanceZone = calculateSupportResistanceZone()\n\ndeleteResistances(candle.max)\nincreasePeriods()\n\nvariable.resistance = {}\n\nvariable.resistance.rate = 0\nvariable.resistance.period = 0\nvariable.resistance.type = ''\n\nif (previousCandle !== undefined) {\n\n let previousPreviousCandle = record.previous.previous\n\n if (previousPreviousCandle !== undefined) {\n\n if (previousCandle.max > previousPreviousCandle.max && previousCandle.max > candle.max) {\n variable.resistance.rate = previousCandle.max\n variable.resistance.period = 0\n variable.resistance.type = 'Resistance'\n increaseResistancesBounces(variable.resistance.rate)\n rememberResistance(variable.resistance.rate)\n }\n }\n}\n\nsetClosestResistances()\n\nfunction deleteResistances(rate) {\n\n let max\n\n for (let i = 0; i < variable.resistances.length; i++) {\n let currenRecord = variable.resistances[i]\n let currentRate = currenRecord[0]\n\n if (rate >= currentRate + currentRate * variable.supportResistanceZone / 2 / 100) { // It must go through the support / resistance zone around the current rate value\n max = i\n }\n }\n if (max !== undefined) {\n variable.resistances.splice(0, max + 1)\n }\n}\n\nfunction increasePeriods() {\n\n for (let i = 0; i < variable.resistances.length; i++) {\n let currenRecord = variable.resistances[i]\n currenRecord[1] = currenRecord[1] + 1\n }\n}\n\nfunction setClosestResistances() {\n let record\n\n record = variable.resistances[0]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.resistance1Rate = record[0]\n variable.resistance1Period = record[1]\n variable.resistance1Bounce1 = record[2]\n variable.resistance1Bounce2 = record[3]\n variable.resistance1Bounce3 = record[4]\n variable.resistance1Bounce5 = record[5]\n variable.resistance1Bounce10 = record[6]\n variable.resistance1BounceAll = record[7]\n\n record = variable.resistances[1]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.resistance2Rate = record[0]\n variable.resistance2Period = record[1]\n variable.resistance2Bounce1 = record[2]\n variable.resistance2Bounce2 = record[3]\n variable.resistance2Bounce3 = record[4]\n variable.resistance2Bounce5 = record[5]\n variable.resistance2Bounce10 = record[6]\n variable.resistance2BounceAll = record[7]\n\n record = variable.resistances[2]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.resistance3Rate = record[0]\n variable.resistance3Period = record[1]\n variable.resistance3Bounce1 = record[2]\n variable.resistance3Bounce2 = record[3]\n variable.resistance3Bounce3 = record[4]\n variable.resistance3Bounce5 = record[5]\n variable.resistance3Bounce10 = record[6]\n variable.resistance3BounceAll = record[7]\n\n record = variable.resistances[3]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.resistance4Rate = record[0]\n variable.resistance4Period = record[1]\n variable.resistance4Bounce1 = record[2]\n\n record = variable.resistances[4]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.resistance5Rate = record[0]\n variable.resistance5Period = record[1]\n variable.resistance5Bounce1 = record[2]\n\n}\n\nfunction rememberResistance(rate) {\n if (variable.resistances.length === 0) {\n variable.resistances.push([rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n for (let i = 0; i < variable.resistances.length; i++) {\n let currenRecord = variable.resistances[i]\n let currentRate = currenRecord[0]\n\n if (rate > currentRate - currentRate * variable.supportResistanceZone / 2 / 100 && rate < currentRate + currentRate * variable.supportResistanceZone / 2 / 100) {\n // We are not going to remember this new level since it is absorved by this existing one.\n return\n }\n\n if (rate < currentRate) {\n variable.resistances.splice(i, 0, [rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n\n if (i === variable.resistances.length - 1) {\n variable.resistances.push([rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n }\n}\n\nfunction increaseResistancesBounces(rate) {\n\n for (let i = 0; i < variable.resistances.length; i++) {\n let currenRecord = variable.resistances[i]\n let currentRate = currenRecord[0]\n let percentage = 100 - rate * 100 / currentRate\n\n if (percentage <= variable.supportResistanceZone / 2 * 1) {\n currenRecord[2] = currenRecord[2] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 2) {\n currenRecord[3] = currenRecord[3] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 3) {\n currenRecord[4] = currenRecord[4] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 5) {\n currenRecord[5] = currenRecord[5] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 10) {\n currenRecord[6] = currenRecord[6] + 1\n }\n\n currenRecord[7] = currenRecord[7] + 1\n }\n}\n\nfunction calculateSupportResistanceZone() {\n /* \n The variable % is a percentage we will use for support and resistance based on the time frame.\n We will fix the % for 1 minute candles and for 24 hs candle and the use the formula to obtain\n y on a line by knowing 2 points of the line as described here: https://en.wikipedia.org/wiki/Line_(geometry)\n */\n\n let x0 = system.ONE_MIN_IN_MILISECONDS\n let y0 = 0.1 // At one min, we will consider the resistance / support zone to be 0.1% resistance \n let x1 = system.ONE_DAY_IN_MILISECONDS\n let y1 = 4 // At one day, we will consider the resistance / support zone to be 4% resistance\n\n let x = system.timeFrame // This is the current time frame being calculated\n let y = (x - x0) * (y1 - y0) / (x1 - x0) + y0\n\n return y\n\n}","project":"Superalgos","id":"1c051e71-b2ff-4b5e-9239-98cca169e8fe","savedPayload":{"position":{"x":5672.058429142788,"y":18488.726693120454},"targetPosition":{"x":5892.141639307894,"y":18535.50682355445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"27aac2c1-d423-475c-86ae-84041aa2f3f0","savedPayload":{"position":{"x":5892.141639307894,"y":18535.50682355445},"targetPosition":{"x":6112.224849473001,"y":18582.286953988445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"variable.resistances = []","project":"Superalgos","id":"fdefa569-f171-4d85-8761-d732ebf64ea1","savedPayload":{"position":{"x":5777.809678008176,"y":18281.178181126957},"targetPosition":{"x":5945.0172637405885,"y":18431.7325675577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fc16fb34-f72b-4da5-ade1-7598d51a8fbe","savedPayload":{"position":{"x":5945.0172637405885,"y":18431.7325675577},"targetPosition":{"x":6112.224849473001,"y":18582.286953988445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8703574-5d20-4fe2-a8e9-d01de4a958a9","savedPayload":{"position":{"x":6112.224849473001,"y":18582.286953988445},"targetPosition":{"x":6312.7013174153835,"y":18684.434816429843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7a734501-a0fb-4305-803e-7e95d477c513","savedPayload":{"position":{"x":6312.7013174153835,"y":18684.434816429843},"targetPosition":{"x":6713.654253300148,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Resistances","id":"156b4fa7-7f8f-4464-8ddb-6eb6123bc5c3"}}},{"type":"Product Definition","name":"Supports","config":"{ \n\"codeName\": \"Supports\",\n \"singularVariableName\": \"support\",\n \"pluralVariableName\": \"supports\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"\n{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"4a1bd251-76ed-4530-8723-08e41d50f12d","savedPayload":{"position":{"x":5583.42872789604,"y":17659.734365839122},"targetPosition":{"x":5987.8967658300135,"y":17659.73671339679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"deaaf4ec-9352-40b6-af9a-8541a73a5e13","savedPayload":{"position":{"x":5661.032690636228,"y":17421.855735417208},"targetPosition":{"x":5987.8967658300135,"y":17659.73671339679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"7cf0c803-eb36-4ada-930f-d129bdffb558","savedPayload":{"position":{"x":4745.844686359975,"y":16474.13609045261},"targetPosition":{"x":5106.616284596701,"y":16386.432727069347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"500e7345-95eb-4430-8171-32caa2356bdf","savedPayload":{"position":{"x":5106.616284596701,"y":16386.432727069347},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"ecbd13b3-2af2-45a5-800c-a34fe73e0db6","savedPayload":{"position":{"x":4607.439160937516,"y":16303.341865829749},"targetPosition":{"x":4975.497653928305,"y":16213.424175280143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a44b1626-282b-49d2-9ad1-cd5c81cc9f4a","savedPayload":{"position":{"x":4975.497653928305,"y":16213.424175280143},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate Support","config":"{\n \"codeName\": \"rateSupport\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.support.rate","project":"Superalgos","id":"14075730-a865-48f7-9f44-5c2d201ed16d","savedPayload":{"position":{"x":4784.106936331831,"y":16342.216640378902},"targetPosition":{"x":5143.354776085958,"y":16328.248511241341},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2612e72-07b1-4756-834a-6db765bd386c","savedPayload":{"position":{"x":5143.354776085958,"y":16328.248511241341},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Period Support","config":"{\n \"codeName\": \"periodSupport\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.support.period","project":"Superalgos","id":"a47c1c1f-8e5e-4e03-9177-33fbf3f5d5a7","savedPayload":{"position":{"x":4790.194649168654,"y":16213.34212814043},"targetPosition":{"x":5158.708433267944,"y":16251.168037238149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bd719e1d-c639-4577-b0f1-89663028daa3","savedPayload":{"position":{"x":5158.708433267944,"y":16251.168037238149},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Type Support","config":"{\n \"codeName\": \"typeSupport\",\n \"isString\": true,\n \"possibleValues\": [\"Resistance\", \"Support\"]\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.support.type","project":"Superalgos","id":"18bf2427-ca89-4840-ba97-c9187b76da8c","savedPayload":{"position":{"x":4622.070722681274,"y":16128.880921211272},"targetPosition":{"x":4998.519108268996,"y":16162.945889484396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"005b24fe-a5d4-47b7-aa13-03c2aa091d8a","savedPayload":{"position":{"x":4998.519108268996,"y":16162.945889484396},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Rate","config":"{ \n\"codeName\": \"support1Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Rate","project":"Superalgos","id":"40e08fb6-52ff-4f0a-99a6-989f5bc81610","savedPayload":{"position":{"x":4818.233421768855,"y":16088.480178469948},"targetPosition":{"x":5185.769184457891,"y":16172.589987695002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7755d99-afae-4dfe-a429-5de300b3a64a","savedPayload":{"position":{"x":5185.769184457891,"y":16172.589987695002},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Period","config":"{ \n\"codeName\": \"support1Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Period","project":"Superalgos","id":"c65fb3e0-42b1-4de7-9d71-613919f6a7ec","savedPayload":{"position":{"x":4655.686086158486,"y":15996.856214445808},"targetPosition":{"x":5020.0993037421795,"y":16094.703500595799},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78fb954c-336d-4a3d-8724-65786fcf8cbf","savedPayload":{"position":{"x":5020.0993037421795,"y":16094.703500595799},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Rate","config":"{ \n\"codeName\": \"support2Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Rate","project":"Superalgos","id":"0ce65da3-57d2-4161-89aa-68bf1802c52a","savedPayload":{"position":{"x":4874.832913778035,"y":15953.588383512744},"targetPosition":{"x":5208.925718376915,"y":16103.748289193976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d52e50a-ccad-4487-aebb-ac4b8fbecb1e","savedPayload":{"position":{"x":5208.925718376915,"y":16103.748289193976},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Period","config":"{ \n\"codeName\": \"support2Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Period","project":"Superalgos","id":"28425604-1922-47d0-9479-c53c56923197","savedPayload":{"position":{"x":4700.338643959891,"y":15893.548946312712},"targetPosition":{"x":5046.3601679809035,"y":16014.823974413226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fa4c6abd-7eee-4f94-b2b6-65e638c5f1c1","savedPayload":{"position":{"x":5046.3601679809035,"y":16014.823974413226},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Rate","config":"{ \n\"codeName\": \"support3Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Rate","project":"Superalgos","id":"ab99a0da-1377-4cf4-986c-197e52b4c696","savedPayload":{"position":{"x":4744.264441349267,"y":15775.04097117208},"targetPosition":{"x":5240.674160517396,"y":16054.06310870039},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7b87217d-8e2a-425a-a1e1-d5d0a09a98de","savedPayload":{"position":{"x":5240.674160517396,"y":16054.06310870039},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Period","config":"{ \n\"codeName\": \"support3Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Period","project":"Superalgos","id":"052e5b14-17d6-45f9-b680-388146cb6852","savedPayload":{"position":{"x":4949.527495190319,"y":15893.138192962484},"targetPosition":{"x":5078.73031746006,"y":15946.05841827027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aa81f2c7-4fb7-4ce8-a52c-9ced275a240b","savedPayload":{"position":{"x":5078.73031746006,"y":15946.05841827027},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 4 Rate","config":"{ \n\"codeName\": \"support4Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support4Rate","project":"Superalgos","id":"d7409aeb-b96f-4591-abc6-94c3feae3243","savedPayload":{"position":{"x":4861.463516551274,"y":15575.981737265934},"targetPosition":{"x":5344.699594578011,"y":15873.238591017056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b188be8-ca50-4b70-b54c-01bee5c8fe6e","savedPayload":{"position":{"x":5344.699594578011,"y":15873.238591017056},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 4 Period","config":"{ \n\"codeName\": \"support4Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support4Period","project":"Superalgos","id":"44d44f24-2c72-4679-8eac-3c571073eb5b","savedPayload":{"position":{"x":4953.122566107657,"y":15766.715559090742},"targetPosition":{"x":5108.924594222724,"y":15973.192176116823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bd577b4c-73a5-4ce1-ba77-30dee0f2d456","savedPayload":{"position":{"x":5108.924594222724,"y":15973.192176116823},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 5 Rate","config":"{ \n\"codeName\": \"support5Rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support5Rate","project":"Superalgos","id":"362400a8-620f-4a50-ac69-ca970d2c8e2c","savedPayload":{"position":{"x":4979.802169458148,"y":15548.012198008568},"targetPosition":{"x":5280.548619648402,"y":15951.625328626105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6a84dce6-0b33-4acd-8eef-ec00e8c1f565","savedPayload":{"position":{"x":5280.548619648402,"y":15951.625328626105},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 5 Period","config":"{ \n\"codeName\": \"support5Period\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support5Period","project":"Superalgos","id":"a3c54d4a-d24f-48d2-9bd6-8c97e72988d6","savedPayload":{"position":{"x":5049.35168561387,"y":15648.151665682148},"targetPosition":{"x":5178.604526323721,"y":15871.48173685992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aad90b32-0fc6-42e6-97ad-92369d92c75d","savedPayload":{"position":{"x":5178.604526323721,"y":15871.48173685992},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce 1","config":"{ \n\"codeName\": \"support1Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Bounce1","project":"Superalgos","id":"f8588e9b-1b98-4d42-9c9e-87a1ccbf5f85","savedPayload":{"position":{"x":5010.618134137054,"y":15440.090060304541},"targetPosition":{"x":5123.20188365475,"y":15599.238016570307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"b01a5c8f-7c91-497d-b859-14a28ed2dab0","savedPayload":{"position":{"x":5123.20188365475,"y":15599.238016570307},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce 2","config":"{ \n\"codeName\": \"support1Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Bounce2","project":"Superalgos","id":"5ced6adc-834d-42d3-8fda-922e22c010b3","savedPayload":{"position":{"x":5096.291174316735,"y":15389.856007484348},"targetPosition":{"x":5187.1572738034665,"y":15551.846667296713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"237bb47a-cad5-4d17-8082-4a668a520c0f","savedPayload":{"position":{"x":5187.1572738034665,"y":15551.846667296713},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce 3","config":"{ \n\"codeName\": \"support1Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Bounce3","project":"Superalgos","id":"b4699add-3195-4db4-8bd7-9a9afbf47bfe","savedPayload":{"position":{"x":5194.423585050474,"y":15326.65813169382},"targetPosition":{"x":5260.364376596193,"y":15546.092121741136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7ab00eae-5fff-41cb-a438-2e938663d10b","savedPayload":{"position":{"x":5260.364376596193,"y":15546.092121741136},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce 5","config":"{ \n\"codeName\": \"support1Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Bounce5","project":"Superalgos","id":"a447aee8-c957-4bc8-b2ee-8e90b69820f1","savedPayload":{"position":{"x":5304.6465556284675,"y":15379.020720108301},"targetPosition":{"x":5332.478778166886,"y":15439.032930568588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"e9f2282a-5328-4765-9e6a-e388f22b0664","savedPayload":{"position":{"x":5332.478778166886,"y":15439.032930568588},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce 10","config":"{ \n\"codeName\": \"support1Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1Bounce10","project":"Superalgos","id":"ccb5af69-8ba1-4050-8e5c-d7bb6d7ca7e6","savedPayload":{"position":{"x":5364.214722423392,"y":15234.598924009395},"targetPosition":{"x":5401.984005472186,"y":15572.392407896661},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"bff9046e-7f89-4bf1-94fa-374623c25270","savedPayload":{"position":{"x":5401.984005472186,"y":15572.392407896661},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 1 Bounce All","config":"{ \n\"codeName\": \"support1BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support1BounceAll","project":"Superalgos","id":"db228fdf-d598-4e15-ac14-ee5f9abc9f04","savedPayload":{"position":{"x":5428.904811416338,"y":15351.839552576408},"targetPosition":{"x":5433.613829291633,"y":15452.526723676005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"92fe7b52-2018-4a57-9d5a-68146cb40679","savedPayload":{"position":{"x":5433.613829291633,"y":15452.526723676005},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce 1","config":"{ \n\"codeName\": \"support2Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Bounce1","project":"Superalgos","id":"668ef50d-cc9c-472d-8f1e-01501af5dcf5","savedPayload":{"position":{"x":5504.80253831884,"y":15250.505715164976},"targetPosition":{"x":5514.201615379916,"y":15535.170164311141},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"1dfa6ecc-7354-4ae2-b82c-3b67c1dc9714","savedPayload":{"position":{"x":5514.201615379916,"y":15535.170164311141},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce 2","config":"{ \n\"codeName\": \"support2Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Bounce2","project":"Superalgos","id":"879626cc-4c25-4a48-9664-b09a8ef0898b","savedPayload":{"position":{"x":5578.415330117379,"y":15337.284066993205},"targetPosition":{"x":5595.999957803884,"y":15420.27589947746},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2ac63aa9-1097-4384-b9d9-a09591216b46","savedPayload":{"position":{"x":5595.999957803884,"y":15420.27589947746},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce 3","config":"{ \n\"codeName\": \"support2Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Bounce3","project":"Superalgos","id":"6d35756c-cbf6-4dbb-9e0e-87eec91ae9c7","savedPayload":{"position":{"x":5681.127688752473,"y":15260.072914811995},"targetPosition":{"x":5628.29031963032,"y":15558.400197385896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0f78e402-d6d9-47c8-a71f-ba19d31fdaa9","savedPayload":{"position":{"x":5628.29031963032,"y":15558.400197385896},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce 5","config":"{ \n\"codeName\": \"support2Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Bounce5","project":"Superalgos","id":"7ea5cc0c-062a-4ab1-bc29-0cfef7646609","savedPayload":{"position":{"x":5728.886817517217,"y":15363.303084505867},"targetPosition":{"x":5703.733866609062,"y":15459.463092674485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"65e72b1c-36bb-4242-9cea-d0fa1ef8aacc","savedPayload":{"position":{"x":5703.733866609062,"y":15459.463092674485},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce 10","config":"{ \n\"codeName\": \"support2Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2Bounce10","project":"Superalgos","id":"c2e95035-bc39-4a60-bc3d-816d78ec154d","savedPayload":{"position":{"x":5835.564301886625,"y":15294.009053918675},"targetPosition":{"x":5744.492655963899,"y":15570.899014176463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f8bdb4d7-0a2a-4730-9bd1-a77c3eacb76b","savedPayload":{"position":{"x":5744.492655963899,"y":15570.899014176463},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 2 Bounce All","config":"{ \n\"codeName\": \"support2BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support2BounceAll","project":"Superalgos","id":"467b8765-e0cd-449b-8773-5eaf03de28b7","savedPayload":{"position":{"x":5873.947271341811,"y":15409.009199897206},"targetPosition":{"x":5853.883719169018,"y":15493.458903589877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2fda2cca-b8bc-4b85-919a-f8df88913ec4","savedPayload":{"position":{"x":5853.883719169018,"y":15493.458903589877},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce 1","config":"{ \n\"codeName\": \"support3Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Bounce1","project":"Superalgos","id":"77a3826e-5aa8-4f72-b389-964cd68e7b74","savedPayload":{"position":{"x":6006.468207229853,"y":15355.688963362854},"targetPosition":{"x":5851.792116398574,"y":15631.555125703504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7add9106-d78b-4ba4-b08b-6251d16edde3","savedPayload":{"position":{"x":5851.792116398574,"y":15631.555125703504},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce 2","config":"{ \n\"codeName\": \"support3Bounce2\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Bounce2","project":"Superalgos","id":"6cc16e19-c604-46e8-9bbb-0d03e52e34aa","savedPayload":{"position":{"x":6007.915568640976,"y":15477.819656929},"targetPosition":{"x":5963.62768146475,"y":15559.899211229136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"eb85b0d0-36b0-4c43-bbb6-3946c0e44075","savedPayload":{"position":{"x":5963.62768146475,"y":15559.899211229136},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce 3","config":"{ \n\"codeName\": \"support3Bounce3\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Bounce3","project":"Superalgos","id":"d680f9ce-a7d0-4a1b-86ad-a03b3edf9469","savedPayload":{"position":{"x":6133.929361573577,"y":15451.221211236092},"targetPosition":{"x":5950.654191523565,"y":15691.344609739735},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"32259491-a337-4c85-9ae8-b296c401c80b","savedPayload":{"position":{"x":5950.654191523565,"y":15691.344609739735},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce 5","config":"{ \n\"codeName\": \"support3Bounce5\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Bounce5","project":"Superalgos","id":"0131d473-e06b-4082-b349-4368a71c15b8","savedPayload":{"position":{"x":6133.178730698361,"y":15569.79839158347},"targetPosition":{"x":6075.793265071461,"y":15642.859623354887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"917cfbe5-6374-4170-b28d-e9d9f7920503","savedPayload":{"position":{"x":6075.793265071461,"y":15642.859623354887},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce 10","config":"{ \n\"codeName\": \"support3Bounce10\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3Bounce10","project":"Superalgos","id":"58020873-bc14-436c-ab34-70ea0c165e75","savedPayload":{"position":{"x":6269.392053296226,"y":15571.0052897383},"targetPosition":{"x":6036.455380306834,"y":15768.7655865447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5d70fe41-e6ce-42db-a5c0-12dcaa35a724","savedPayload":{"position":{"x":6036.455380306834,"y":15768.7655865447},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 3 Bounce All","config":"{ \n\"codeName\": \"support3BounceAll\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support3BounceAll","project":"Superalgos","id":"5d24f8e3-9f2f-4d48-9c8e-d8a11a6dc019","savedPayload":{"position":{"x":6256.369438198108,"y":15693.81305805979},"targetPosition":{"x":6162.252702132188,"y":15772.56941811985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"79faaac2-1e37-4667-a4fc-0bdb696cde15","savedPayload":{"position":{"x":6162.252702132188,"y":15772.56941811985},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support Resistance Zone","config":"{ \n\"codeName\": \"supportResistanceZone\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.supportResistanceZone","project":"Superalgos","id":"5f2c5c5d-b624-4642-b235-ce65d442e721","savedPayload":{"position":{"x":5992.997465828703,"y":15934.158519249062},"targetPosition":{"x":5883.589162401047,"y":16004.055379786307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"8405cbdf-a97b-40c8-9e4d-1b5187c7304b","savedPayload":{"position":{"x":5883.589162401047,"y":16004.055379786307},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 4 Bounce 1","config":"{ \n\"codeName\": \"support4Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support4Bounce1","project":"Superalgos","id":"c6a343f3-b85c-460d-b8d9-59c4bc638215","savedPayload":{"position":{"x":6361.424623990886,"y":15768.551383050819},"targetPosition":{"x":6172.041097444075,"y":15865.348259506041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"65d9c0e2-d16d-4702-99af-bba32a73e82b","savedPayload":{"position":{"x":6172.041097444075,"y":15865.348259506041},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Support 5 Bounce 1","config":"{ \n\"codeName\": \"support5Bounce1\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.support5Bounce1","project":"Superalgos","id":"b715565a-3502-464a-bd5e-e29bb7c8f7fc","savedPayload":{"position":{"x":6398.702137564702,"y":15914.202837811521},"targetPosition":{"x":6237.247341323691,"y":15981.655576224955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"04cf3b6f-3549-4459-9628-1435764305ca","savedPayload":{"position":{"x":6237.247341323691,"y":15981.655576224955},"targetPosition":{"x":5525.160808938348,"y":16234.498667912976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2958a95-82c5-480d-a552-69ff3a01cade","savedPayload":{"position":{"x":5525.11995022765,"y":16234.509669131476},"targetPosition":{"x":5987.8967658300135,"y":17659.73671339679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"\n\nlet candle = record.current\nlet previousCandle = record.previous\n\nvariable.supportResistanceZone = calculateSupportResistanceZone()\n\ndeleteSupports(candle.min)\nincreasePeriods()\n\nvariable.support = {}\n\nvariable.support.rate = 0\nvariable.support.period = 0\nvariable.support.type = ''\n\nif (previousCandle !== undefined) {\n\n let previousPreviousCandle = record.previous.previous\n\n if (previousPreviousCandle !== undefined) {\n\n if (previousCandle.min < previousPreviousCandle.min && previousCandle.min < candle.min) {\n variable.support.rate = previousCandle.min\n variable.support.period = 0\n variable.support.type = 'Support'\n increaseSupportsBounces(variable.support.rate)\n rememberSupports(variable.support.rate)\n }\n }\n}\n\nsetClosestSupports()\n\nfunction deleteSupports(rate) {\n\n let max\n\n for (let i = 0; i < variable.supports.length; i++) {\n let currenRecord = variable.supports[i]\n let currentRate = currenRecord[0]\n\n if (rate <= currentRate - currentRate * variable.supportResistanceZone / 2 / 100) { // It must go through the support / resistance zone around the current rate value\n max = i\n }\n }\n if (max !== undefined) {\n variable.supports.splice(0, max + 1)\n }\n}\n\nfunction increasePeriods() {\n\n for (let i = 0; i < variable.supports.length; i++) {\n let currenRecord = variable.supports[i]\n currenRecord[1] = currenRecord[1] + 1\n }\n}\n\nfunction setClosestSupports() {\n let record\n\n record = variable.supports[0]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.support1Rate = record[0]\n variable.support1Period = record[1]\n variable.support1Bounce1 = record[2]\n variable.support1Bounce2 = record[3]\n variable.support1Bounce3 = record[4]\n variable.support1Bounce5 = record[5]\n variable.support1Bounce10 = record[6]\n variable.support1BounceAll = record[7]\n\n record = variable.supports[1]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.support2Rate = record[0]\n variable.support2Period = record[1]\n variable.support2Bounce1 = record[2]\n variable.support2Bounce2 = record[3]\n variable.support2Bounce3 = record[4]\n variable.support2Bounce5 = record[5]\n variable.support2Bounce10 = record[6]\n variable.support2BounceAll = record[7]\n\n record = variable.supports[2]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.support3Rate = record[0]\n variable.support3Period = record[1]\n variable.support3Bounce1 = record[2]\n variable.support3Bounce2 = record[3]\n variable.support3Bounce3 = record[4]\n variable.support3Bounce5 = record[5]\n variable.support3Bounce10 = record[6]\n variable.support3BounceAll = record[7]\n\n record = variable.supports[3]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.support4Rate = record[0]\n variable.support4Period = record[1]\n variable.support4Bounce1 = record[2]\n\n record = variable.supports[4]\n if (record === undefined) { record = [0, 0, 0, 0, 0, 0, 0, 0] }\n variable.support5Rate = record[0]\n variable.support5Period = record[1]\n variable.support5Bounce1 = record[2]\n\n}\n\n\nfunction rememberSupports(rate) {\n if (variable.supports.length === 0) {\n variable.supports.push([rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n for (let i = 0; i < variable.supports.length; i++) {\n let currenRecord = variable.supports[i]\n let currentRate = currenRecord[0]\n\n if (rate > currentRate - currentRate * variable.supportResistanceZone / 2 / 100 && rate < currentRate + currentRate * variable.supportResistanceZone / 2 / 100) {\n // We are not going to remember this new level since it is absorved by this existing one.\n return\n }\n\n if (rate > currentRate) {\n variable.supports.splice(i, 0, [rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n\n if (i === variable.supports.length - 1) {\n variable.supports.push([rate, 1, 0, 0, 0, 0, 0, 0])\n return\n }\n }\n}\n\nfunction increaseSupportsBounces(rate) {\n\n for (let i = 0; i < variable.supports.length; i++) {\n let currenRecord = variable.supports[i]\n let currentRate = currenRecord[0]\n let percentage = rate * 100 / currentRate - 100\n\n if (percentage <= variable.supportResistanceZone / 2 * 1) {\n currenRecord[2] = currenRecord[2] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 2) {\n currenRecord[3] = currenRecord[3] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 3) {\n currenRecord[4] = currenRecord[4] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 5) {\n currenRecord[5] = currenRecord[5] + 1\n }\n\n if (percentage <= variable.supportResistanceZone / 2 * 10) {\n currenRecord[6] = currenRecord[6] + 1\n }\n\n currenRecord[7] = currenRecord[7] + 1\n }\n}\n\nfunction calculateSupportResistanceZone() {\n /* \n The variable % is a percentage we will use for support and resistance based on the time frame.\n We will fix the % for 1 minute candles and for 24 hs candle and the use the formula to obtain\n y on a line by knowing 2 points of the line as described here: https://en.wikipedia.org/wiki/Line_(geometry)\n */\n\n let x0 = system.ONE_MIN_IN_MILISECONDS\n let y0 = 0.1 // At one min, we will consider the resistance / support zone to be 0.1% resistance \n let x1 = system.ONE_DAY_IN_MILISECONDS\n let y1 = 4 // At one day, we will consider the resistance / support zone to be 4% resistance\n\n let x = system.timeFrame // This is the current time frame being calculated\n let y = (x - x0) * (y1 - y0) / (x1 - x0) + y0\n\n return y\n\n}","project":"Superalgos","id":"2f38e534-5b92-4ded-9c74-1a8c1fef392c","savedPayload":{"position":{"x":6258.097574680203,"y":16200.050096020444},"targetPosition":{"x":6238.465310845211,"y":16574.331688549002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f6dbb7b-b13f-45a9-ba9e-e1c9f06970d6","savedPayload":{"position":{"x":6238.465310845211,"y":16574.331688549002},"targetPosition":{"x":6218.9909399021235,"y":16948.451706064538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"variable.supports = []","project":"Superalgos","id":"a62efae4-3818-4048-ad13-bfb7c4bd22d9","savedPayload":{"position":{"x":6627.405908678309,"y":16319.666755778566},"targetPosition":{"x":6423.25641953704,"y":16634.00208818868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"793f079f-9623-4e8c-bd38-8dbd351caf8f","savedPayload":{"position":{"x":6423.25641953704,"y":16634.00208818868},"targetPosition":{"x":6218.9909399021235,"y":16948.451706064538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3d26c2d9-7dd2-4796-91b4-768026944d66","savedPayload":{"position":{"x":6218.9909399021235,"y":16948.451706064538},"targetPosition":{"x":5987.8967658300135,"y":17659.73671339679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bc3c43de-6312-47d4-ae3d-0c95c1b039e0","savedPayload":{"position":{"x":6565.501002210876,"y":18456.673921791014},"targetPosition":{"x":6713.654253300148,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Supports","id":"1a104c65-6470-4694-a39e-4663f15e490c"}}}],"id":"c037980d-d455-41a0-b058-2d7849ddf582","savedPayload":{"position":{"x":6775.786287656112,"y":18527.814678326416},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Fees Band","config":"{ \n \"codeName\": \"Fees-Band\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{ \n \"codeName\": \"Multi-Period-Market\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Market\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Fees Band 0.2","project":"Superalgos","id":"addb000e-ee23-4ea2-becd-10513978f9e9","savedPayload":{"position":{"x":5870.449539674286,"y":18616.93272056544},"targetPosition":{"x":5865.918702689563,"y":18391.978344043848},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9c699a57-f0cf-434c-8ef8-40aac182200e"}}}],"outputDatasetFolders":[],"id":"d1a16312-6cf6-49b2-9ec9-63820952ec59","savedPayload":{"position":{"x":5865.918702689563,"y":18391.978344043848},"targetPosition":{"x":5861.387865704841,"y":18167.023967522255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Fees Band Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"14fc9c86-f37f-4ff6-ad5a-c371f0846186","savedPayload":{"position":{"x":5727.964134228852,"y":18587.726844319874},"targetPosition":{"x":5752.834497373224,"y":18364.105590774805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"408908d1-0f78-454e-b4ba-935c59e4f1fd"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"cfc81326-b7dd-43ae-8d00-325a1a03a30e","savedPayload":{"position":{"x":5644.281129041607,"y":18561.187214027355},"targetPosition":{"x":5752.834497373224,"y":18364.105590774805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"aae52694-9764-42ea-968b-8256c7e1733b","savedPayload":{"position":{"x":5577.124390144112,"y":18504.643693144},"targetPosition":{"x":5752.834497373224,"y":18364.105590774805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"c5895135-9bd9-4d0b-a50e-7bfa33e806c3","savedPayload":{"position":{"x":5752.834497373224,"y":18364.105590774805},"targetPosition":{"x":5861.387865704841,"y":18167.023967522255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"408908d1-0f78-454e-b4ba-935c59e4f1fd","savedPayload":{"position":{"x":5668.837079437017,"y":18283.424975712227},"targetPosition":{"x":5861.387865704841,"y":18167.023967522255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"517c78ab-154c-4d72-a671-6ceaf7d7daa4","savedPayload":{"position":{"x":5636.433489183248,"y":18171.554804506977},"targetPosition":{"x":5861.387865704841,"y":18167.023967522255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"d2c5852c-7223-4d9d-bbe0-0d7b4109e7e1","savedPayload":{"position":{"x":5664.3062424522905,"y":18058.470599190638},"targetPosition":{"x":5861.387865704841,"y":18167.023967522255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c97a3c7-8333-4b7a-bba3-c1f50edb1771","savedPayload":{"position":{"x":6535.817398193201,"y":18657.975946653998},"targetPosition":{"x":6650.6224279027265,"y":18380.812086900612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{ \n \"codeName\": \"Multi-Period-Daily\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Daily\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Fees Band 0.2","project":"Superalgos","id":"f97f4159-4225-449c-b3cf-e309829385ff","savedPayload":{"position":{"x":5523.750783972486,"y":18321.318036172303},"targetPosition":{"x":5679.613763512145,"y":18159.047485519943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2dd03ed7-736e-4959-ad8e-8108e59b8796"}}}],"outputDatasetFolders":[],"id":"169c266e-2c8b-46fd-9123-2f0cf3dbee75","savedPayload":{"position":{"x":5690.286287656112,"y":18460.862773042583},"targetPosition":{"x":5802.786287656112,"y":18266.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Fees Band Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"4369e75e-d3e2-4540-a37a-62a8bc6f5156","savedPayload":{"position":{"x":5485.386788926233,"y":18567.207934978804},"targetPosition":{"x":5607.930571804613,"y":18378.507057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"44063861-0fab-49a8-ad15-fc3c4dcbc63e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"9a1ec693-82b2-4ce3-b3dc-b57a75ce8972","savedPayload":{"position":{"x":5433.072730476793,"y":18520.104145177298},"targetPosition":{"x":5607.930571804613,"y":18378.507057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"3f758280-c446-4122-96bc-530b4bb6d1dc","savedPayload":{"position":{"x":5397.874975842744,"y":18459.139845838778},"targetPosition":{"x":5607.930571804613,"y":18378.507057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"753cc3b9-56a8-49fd-bb60-5220e8c68b76","savedPayload":{"position":{"x":5383.238926484835,"y":18390.282647345746},"targetPosition":{"x":5607.930571804613,"y":18378.507057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"f3a27f58-27c0-4693-a83c-743a30cd14d1","savedPayload":{"position":{"x":5607.930571804613,"y":18378.507057191084},"targetPosition":{"x":5802.786287656112,"y":18266.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"44063861-0fab-49a8-ad15-fc3c4dcbc63e","savedPayload":{"position":{"x":5577.786287656112,"y":18266.007057191084},"targetPosition":{"x":5802.786287656112,"y":18266.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"b35ae9ae-9ffc-48d0-8261-3dc4614198c0","savedPayload":{"position":{"x":5607.930571804613,"y":18153.507057191084},"targetPosition":{"x":5802.786287656112,"y":18266.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"1e9595e3-f4f7-4d71-89a6-34398c6ba768","savedPayload":{"position":{"x":5690.286287656112,"y":18071.151341339584},"targetPosition":{"x":5802.786287656112,"y":18266.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2ab4b651-67c8-4b4b-bdce-96aad4dff1dc","savedPayload":{"position":{"x":6373.458568149341,"y":18495.61711661014},"targetPosition":{"x":6650.6224279027265,"y":18380.812086900612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Fees Band 0.2","config":"{ \n \"codeName\": \"Fees-Band-0.2\", \n \"singularVariableName\": \"feesBand02\", \n \"pluralVariableName\": \"feesBand02s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"9c699a57-f0cf-434c-8ef8-40aac182200e","savedPayload":{"position":{"x":6117.666518843114,"y":18422.75662660587},"targetPosition":{"x":6373.458568149341,"y":18266.007057191087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2dd03ed7-736e-4959-ad8e-8108e59b8796","savedPayload":{"position":{"x":6074.383368029401,"y":18242.469328472733},"targetPosition":{"x":6373.458568149341,"y":18266.007057191087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"4b6ed335-f5cf-49fa-aba7-6dfe1d1b6bfb","savedPayload":{"position":{"x":5316.652693723612,"y":17916.528692414842},"targetPosition":{"x":5541.596046585677,"y":17911.480127948285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d5157a-34cf-43fd-a83b-d4cca5a82748","savedPayload":{"position":{"x":5541.596046585677,"y":17911.480127948285},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"cc285267-5578-4d94-981e-55663b745029","savedPayload":{"position":{"x":5356.824503451273,"y":17720.33023624679},"targetPosition":{"x":5561.681951449507,"y":17813.38089986426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5e905c5f-8ad5-4cdf-a3e7-2c0dfc0541fa","savedPayload":{"position":{"x":5561.681951449507,"y":17813.38089986426},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Upper Band","config":"{\n \"codeName\": \"beginUpperBand\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.beginUpperBand","project":"Superalgos","id":"8ec7c074-e8d2-4fd5-a702-be3f8245ea8b","savedPayload":{"position":{"x":5478.1453731544825,"y":17560.99143032062},"targetPosition":{"x":5622.342386301112,"y":17733.711496901175},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dcbd6bca-eed6-4d4c-a7c3-1ee9b98aeb21","savedPayload":{"position":{"x":5622.342386301112,"y":17733.711496901175},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Lower Band","config":"{\n \"codeName\": \"beginLowerBand\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.beginLowerBand","project":"Superalgos","id":"73490418-babd-4748-9bde-bd5bdc287bf1","savedPayload":{"position":{"x":5656.58621668569,"y":17470.07127931222},"targetPosition":{"x":5711.562808066716,"y":17688.251421396973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"06d379ef-d9c1-4a7c-858e-4be0fa504f49","savedPayload":{"position":{"x":5711.562808066716,"y":17688.251421396973},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Upper Band","config":"{\n \"codeName\": \"endUpperBand\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.endUpperBand","project":"Superalgos","id":"52ca2981-9a3c-4c9c-84e9-bdb421727d84","savedPayload":{"position":{"x":5856.804636550216,"y":17465.577634191275},"targetPosition":{"x":5811.672017998979,"y":17686.004598836502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"67983f61-20a2-44e1-856b-ae182bab35ea","savedPayload":{"position":{"x":5811.672017998979,"y":17686.004598836502},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Lower Band","config":"{\n \"codeName\": \"endLowerBand\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.endLowerBand","project":"Superalgos","id":"22edfaa2-acbc-4a0b-87a2-88607426b5f3","savedPayload":{"position":{"x":6039.144919176113,"y":17548.400516484926},"targetPosition":{"x":5902.842159311927,"y":17727.416039983327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d5bda91-d33c-46c3-a669-eafc9dab4fe1","savedPayload":{"position":{"x":5902.842159311927,"y":17727.416039983327},"targetPosition":{"x":5766.539399447742,"y":17906.43156348173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13be8616-22a4-4c9a-bba6-8dd346168aa2","savedPayload":{"position":{"x":6145.336778469333,"y":18071.172642692032},"targetPosition":{"x":6373.458568149341,"y":18266.007057191087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"let close_1 = 0\nlet close_2 = 0\nlet close_3 = 0\nlet close_4 = 0\nlet close_5 = 0\n\nclose_1 = record.current.close\nif (record.previous !== undefined) {\n close_2 = record.previous.close\n if (record.previous.previous !== undefined) {\n close_3 = record.previous.previous.close\n if (record.previous.previous.previous !== undefined) {\n close_4 = record.previous.previous.previous.close\n if (record.previous.previous.previous.previous !== undefined) {\n close_5 = record.previous.previous.previous.previous.close\n } else {\n if (variable.lastMovingAverage !== undefined) {\n close_5 = variable.lastMovingAverage\n } \n }\n } else {\n if (variable.lastMovingAverage !== undefined) {\n close_4 = variable.lastMovingAverage\n } \n }\n } else {\n if (variable.lastMovingAverage !== undefined) {\n close_3 = variable.lastMovingAverage\n } \n }\n} else {\n if (variable.lastMovingAverage !== undefined) {\n close_2 = variable.lastMovingAverage\n } \n}\n\nlet movingAverage = (close_1 + close_2 + close_3 + close_4 + close_5) / 5\n\nif (variable.lastMovingAverage !== undefined) {\n variable.beginUpperBand = variable.lastMovingAverage + variable.lastMovingAverage * 0.1 / 100\n variable.beginLowerBand = variable.lastMovingAverage - variable.lastMovingAverage * 0.1 / 100\n} else {\n variable.beginUpperBand = movingAverage + movingAverage * 0.1 / 100\n variable.beginLowerBand = movingAverage - movingAverage * 0.1 / 100 \n}\n\nvariable.endUpperBand = movingAverage + movingAverage * 0.1 / 100\nvariable.endLowerBand = movingAverage - movingAverage * 0.1 / 100\n\nvariable.lastMovingAverage = movingAverage\n","project":"Superalgos","id":"cb903e7a-ffec-4487-8d03-b26f1a2a684b","savedPayload":{"position":{"x":6163.357740679021,"y":17390.87412883318},"targetPosition":{"x":6233.391349835794,"y":17682.585104952483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"644bb1a1-b38d-4a9e-9787-8328d8e612fd","savedPayload":{"position":{"x":6233.391349835794,"y":17682.585104952483},"targetPosition":{"x":6303.424958992568,"y":17974.296081071785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e189d182-e8a2-4591-9ecd-e4056f8a686b","savedPayload":{"position":{"x":6303.424958992568,"y":17974.296081071785},"targetPosition":{"x":6373.458568149341,"y":18266.007057191087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d6a14ed7-606d-40b9-b663-07ee04927460","savedPayload":{"position":{"x":6373.458568149341,"y":18266.007057191087},"targetPosition":{"x":6650.6224279027265,"y":18380.812086900612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Fees Band","id":"eccd3713-e5c8-450c-bfb8-f8821fc429df"}}}],"id":"bb1b6bf2-4071-4617-af61-dad20ce3c51d","savedPayload":{"position":{"x":6695.972954720419,"y":18460.843340097046},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Volume Analysis","config":"{ \n \"codeName\": \"Volume-Analysis\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{ \n \"codeName\": \"Multi-Period-Market\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Market\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Volume Analysis","project":"Superalgos","id":"ada228be-9705-4819-8c20-fe5c005e1078","savedPayload":{"position":{"x":6414.142410798111,"y":18966.202981303006},"targetPosition":{"x":6398.441623925228,"y":18666.614120876635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"1d4df142-34c0-4439-a532-208c56cbb349"}}}],"outputDatasetFolders":[],"id":"0599cb81-fedd-4387-bbe9-f866ca303b03","savedPayload":{"position":{"x":6491.299966830904,"y":18769.91683943377},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Volume Analysis Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"d77afa0b-be9f-4468-9a75-2a2ce510947c","savedPayload":{"position":{"x":6398.382047014719,"y":19063.36111965391},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"d37487d0-abfc-4be1-94dd-150e81bcf2a7"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"fa22875f-ee65-4e82-bbc2-66234e5883fc","savedPayload":{"position":{"x":6304.650000789095,"y":19068.27340804425},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"71ca9c05-b0c2-48bb-8f5c-39b0e61ae586","savedPayload":{"position":{"x":6213.987546846651,"y":19043.98047672655},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Market","project":"Superalgos","id":"571feaf7-7669-40ce-9375-388e3251f124","savedPayload":{"position":{"x":6135.269357861734,"y":18992.860287076986},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"dataMineDataDependencies":[],"id":"9d15c349-fee5-45cb-89ed-204d0c5bc330","savedPayload":{"position":{"x":6336.008539769391,"y":18769.91683943377},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"d37487d0-abfc-4be1-94dd-150e81bcf2a7","savedPayload":{"position":{"x":6201.522218944183,"y":18692.27112590301},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"fc4aafb9-8da5-493c-85e7-1f45264b0c05","savedPayload":{"position":{"x":6123.876505413427,"y":18557.784805077805},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"854d9512-497f-4c5f-9f68-22db0c2a4933","savedPayload":{"position":{"x":6123.876505413427,"y":18402.49337801629},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2f434c96-d55d-40b8-b58c-51146f1bce5b","savedPayload":{"position":{"x":6413.6542533001475,"y":18480.139091547047},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{ \n \"codeName\": \"Multi-Period-Daily\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Daily\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Volume Analysis","project":"Superalgos","id":"29f46d50-8684-4bee-9a4a-156811d47d36","savedPayload":{"position":{"x":5236.750783972486,"y":18319.818036172303},"targetPosition":{"x":5392.613763512145,"y":18157.547485519943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cccbe688-75e9-405c-a087-8c1bb953430f"}}}],"outputDatasetFolders":[],"id":"7b559f39-f888-49d6-948a-a31af2810209","savedPayload":{"position":{"x":6140.158545308172,"y":18364.203490343647},"targetPosition":{"x":6340.89772721583,"y":18141.26004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Volume Analysis Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"d3ed5c3a-d516-4f41-95fe-160786e233ae","savedPayload":{"position":{"x":5854.841590419626,"y":18456.90858865613},"targetPosition":{"x":6055.580772327285,"y":18233.96514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8a54d9d3-c038-4e08-ad86-267e9a7f0403"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"27fad487-f5c4-441f-8d1e-8f399d1809af","savedPayload":{"position":{"x":5803.979601943658,"y":18397.35685151742},"targetPosition":{"x":6055.580772327285,"y":18233.96514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"5a7aecb7-ded0-469f-a013-09e7eb74a590","savedPayload":{"position":{"x":5770.263817438739,"y":18326.670239325395},"targetPosition":{"x":6055.580772327285,"y":18233.96514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"346a0595-7994-4d22-8e7f-be93b4088cbd","savedPayload":{"position":{"x":5755.991911900914,"y":18249.665927885795},"targetPosition":{"x":6055.580772327285,"y":18233.96514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Daily","project":"Superalgos","id":"4a026f3a-d8d8-44d3-b058-3a71af0d4b14","savedPayload":{"position":{"x":5762.136492107144,"y":18171.591633767584},"targetPosition":{"x":6055.580772327285,"y":18233.96514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}}],"dataMineDataDependencies":[],"id":"80465e4d-83cc-4ec2-b5f5-b2774502b29a","savedPayload":{"position":{"x":6055.580772327285,"y":18233.96514101291},"targetPosition":{"x":6340.89772721583,"y":18141.26004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"8a54d9d3-c038-4e08-ad86-267e9a7f0403","savedPayload":{"position":{"x":6047.453446995689,"y":18078.8865354551},"targetPosition":{"x":6340.89772721583,"y":18141.26004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"d4706947-b55b-4341-b70b-0b45f14e7912","savedPayload":{"position":{"x":6117.954279572612,"y":17940.52086079277},"targetPosition":{"x":6340.89772721583,"y":18141.26004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"14125000-f67f-44d5-8fa6-c9b8fd3ab307","savedPayload":{"position":{"x":6248.192628903347,"y":17855.943087811884},"targetPosition":{"x":6340.89772721583,"y":18141.26004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6909e701-0c06-46b5-8a26-c5603dadfac6","savedPayload":{"position":{"x":6325.786287656112,"y":18268.007057191084},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Volume Analysis","config":"{ \n \"codeName\": \"Volume-Analysis\", \n \"singularVariableName\": \"volumeAnalysi\", \n \"pluralVariableName\": \"volumeAnalysis\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"1d4df142-34c0-4439-a532-208c56cbb349","savedPayload":{"position":{"x":6117.347751121606,"y":18102.80536234719},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"cccbe688-75e9-405c-a087-8c1bb953430f","savedPayload":{"position":{"x":6146.352296043637,"y":17919.677872913257},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"8b359ad9-7e1f-473e-b10d-33113db1e121","savedPayload":{"position":{"x":5687.7660611722295,"y":17899.31815459812},"targetPosition":{"x":5982.611582275256,"y":17843.945610088365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"53da0251-b700-4e23-ad9b-1027d589be74","savedPayload":{"position":{"x":5982.611582275256,"y":17843.945610088365},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"fbb6f75d-cae4-407c-abe8-51b6689bbfe9","savedPayload":{"position":{"x":5680.452194691068,"y":17728.697035287943},"targetPosition":{"x":5978.954649034676,"y":17758.635050433277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8d63f4fe-6351-4919-add0-ca9efde3d534","savedPayload":{"position":{"x":5978.954649034676,"y":17758.635050433277},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Buy Volume","config":"{\n \"codeName\": \"buyVolume\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.buyVolume","project":"Superalgos","id":"100d6a11-107c-43ab-bdf5-4ea8d8dd1e26","savedPayload":{"position":{"x":5721.504115386841,"y":17562.92671585545},"targetPosition":{"x":5999.480609382562,"y":17675.74989071703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93e7007f-cd7b-4d8a-b855-2859d61cea0d","savedPayload":{"position":{"x":5999.480609382562,"y":17675.74989071703},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Sell Volume","config":"{\n \"codeName\": \"sellVolume\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sellVolume","project":"Superalgos","id":"1e0ed9c8-eacd-4fa4-b2b1-2c7c46fa0001","savedPayload":{"position":{"x":5807.596040789949,"y":17415.43692170702},"targetPosition":{"x":6042.526572084116,"y":17602.004993642815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ff32ed4c-4774-4daa-9682-40102a11274d","savedPayload":{"position":{"x":6042.526572084116,"y":17602.004993642815},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Buy SMA 20","config":"{\n \"codeName\": \"buySMA20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.buySMA20","project":"Superalgos","id":"61268785-244d-445d-85be-0c58958d3d45","savedPayload":{"position":{"x":5931.753315112632,"y":17298.176398808966},"targetPosition":{"x":6104.605209245457,"y":17543.374732193788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1a12d3f4-013a-4427-bda8-4dbceaaaa62a","savedPayload":{"position":{"x":6104.605209245457,"y":17543.374732193788},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Sell SMA 20","config":"{\n \"codeName\": \"sellSMA20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sellSMA20","project":"Superalgos","id":"c77ea447-8be1-45e4-a494-4322504b8357","savedPayload":{"position":{"x":6083.917454381002,"y":17220.644897351318},"targetPosition":{"x":6180.687278879643,"y":17504.608981464964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3edb3ce-5c43-42b1-9d9e-510ac34fef96","savedPayload":{"position":{"x":6180.687278879643,"y":17504.608981464964},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Buy SMA 200","config":"{\n \"codeName\": \"buySMA200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.buySMA200","project":"Superalgos","id":"2f085466-3ba8-4309-ba9b-3243b4dd2253","savedPayload":{"position":{"x":6251.761024986521,"y":17189.12355848457},"targetPosition":{"x":6264.609064182402,"y":17488.84831203159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"543e8253-2bd3-4e74-8f5f-58a974b76f01","savedPayload":{"position":{"x":6264.609064182402,"y":17488.84831203159},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Sell SMA 200","config":"{\n \"codeName\": \"sellSMA200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sellSMA200","project":"Superalgos","id":"24094c85-8ace-40f9-94b8-f93aa96435dc","savedPayload":{"position":{"x":6421.686339042879,"y":17206.166053619098},"targetPosition":{"x":6349.571721210581,"y":17497.369559598854},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8457135-b96c-4e31-9ada-8c4b0affc3d7","savedPayload":{"position":{"x":6349.571721210581,"y":17497.369559598854},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Buy Force","config":"{\n \"codeName\": \"buyVolume\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.buyForce","project":"Superalgos","id":"f71139b5-222d-411f-90e8-882d09274234","savedPayload":{"position":{"x":6579.927058189982,"y":17270.391701154716},"targetPosition":{"x":6428.6920807841325,"y":17529.482383366663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6e7aeead-72db-47cc-ace5-c02c6cf43524","savedPayload":{"position":{"x":6428.6920807841325,"y":17529.482383366663},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Sell Force","config":"{\n \"codeName\": \"buyVolume\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sellForce","project":"Superalgos","id":"73653b55-41f8-47d2-9c72-8e4cedc94742","savedPayload":{"position":{"x":6713.663460456328,"y":17376.59732109272},"targetPosition":{"x":6495.5602819173055,"y":17582.585193335664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"79c4e8b2-7306-4d23-8dbb-045446aab18b","savedPayload":{"position":{"x":6495.5602819173055,"y":17582.585193335664},"targetPosition":{"x":6277.457103378283,"y":17788.57306557861},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8bf7c8ae-818d-4d95-9aa1-553a95300cb4","savedPayload":{"position":{"x":6277.457103378283,"y":17788.57306557861},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"let candle = record.current // This is the primary dependency\nlet volume = getElement('volumes', candle) // Here I get the volume bar corresponding to the current candle\nlet totalVolume = volume.buy + volume.sell // Candles Volumes split the volume received from the exchange evenly betwen buy and sell because it does not know how much of it there is.\n\nvariable.buyVolume = 0\nvariable.sellVolume = 0\n\n/* \nWe will estimate a buy volume or sell volume proportional to the distance from \nthe open to the max and min of the candle.\n*/\nlet distanceOpenMax = candle.max - candle.open\nlet distanceOpenMin = candle.open - candle.min\nlet distanceMaxMin = candle.max - candle.min\n\nvariable.buyVolume = totalVolume * distanceOpenMax * 100 / distanceMaxMin\nvariable.sellVolume = totalVolume * distanceOpenMin * 100 / distanceMaxMin\n\nlet totalBuy\nlet totalSell\nlet totalNonZero\n/* Maintain the 20 periods moving averages. */\nvariable.last20Buy.splice(0, 1)\nvariable.last20Buy.push(variable.buyVolume)\ntotalBuy = 0\ntotalNonZero = 0\nfor (let i = 0; i < variable.last20Buy.length; i++) {\n let value = variable.last20Buy[i]\n if (value > 0) {\n totalBuy = totalBuy + value\n totalNonZero++\n }\n}\nvariable.buySMA20 = totalBuy / totalNonZero\n\nvariable.last20Sell.splice(0, 1)\nvariable.last20Sell.push(variable.sellVolume)\ntotalSell = 0\ntotalNonZero = 0\nfor (let i = 0; i < variable.last20Sell.length; i++) {\n let value = variable.last20Sell[i]\n if (value > 0) {\n totalSell = totalSell + value\n totalNonZero++\n }\n}\nvariable.sellSMA20 = totalSell / totalNonZero\n\n/* Maintain the 200 periods moving averages. */\nvariable.last200Buy.splice(0, 1)\nvariable.last200Buy.push(variable.buyVolume)\ntotalBuy = 0\ntotalNonZero = 0\nfor (let i = 0; i < variable.last200Buy.length; i++) {\n let value = variable.last200Buy[i]\n if (value > 0) {\n totalBuy = totalBuy + value\n totalNonZero++\n }\n}\nvariable.buySMA200 = totalBuy / totalNonZero\n\nvariable.last200Sell.splice(0, 1)\nvariable.last200Sell.push(variable.sellVolume)\ntotalSell = 0\ntotalNonZero = 0\nfor (let i = 0; i < variable.last200Sell.length; i++) {\n let value = variable.last200Sell[i]\n if (value > 0) {\n totalSell = totalSell + value\n totalNonZero++\n }\n}\nvariable.sellSMA200 = totalSell / totalNonZero\n\n/* Finaly we compute how many times the 200 moving average the volume is */\nvariable.buyForce = Math.trunc(variable.buyVolume / variable.buySMA200)\nvariable.sellForce = Math.trunc(variable.sellVolume / variable.sellSMA200)\n\n\n","project":"Superalgos","id":"6f413c35-7c25-424f-9dc8-3d33dff86ce6","savedPayload":{"position":{"x":6397.867514851623,"y":17162.855383435617},"targetPosition":{"x":6429.226053831921,"y":17461.2119520461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c6058142-fc90-4f02-a7e3-bbfb43fb4ed4","savedPayload":{"position":{"x":6429.226053831921,"y":17461.2119520461},"targetPosition":{"x":6460.584592812218,"y":17759.56852065658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"variable.last20Buy = []\nvariable.last20Sell = []\nvariable.last200Buy = []\nvariable.last200Sell = []\n\nfor (let i = 0; i < 20; i++) {\n variable.last20Buy.push(0)\n variable.last20Sell.push(0)\n}\n\nfor (let i = 0; i < 200; i++) {\n variable.last200Buy.push(0)\n variable.last200Sell.push(0)\n}\n","project":"Superalgos","id":"82d96645-b54f-4d88-88ff-6020fd834848","savedPayload":{"position":{"x":6704.626578657695,"y":17211.44124607102},"targetPosition":{"x":6582.605585734957,"y":17485.5048833638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1445d37-c8ee-423e-aff4-90764923bdd4","savedPayload":{"position":{"x":6582.605585734957,"y":17485.5048833638},"targetPosition":{"x":6460.584592812218,"y":17759.56852065658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e5040263-0081-47ba-8574-fa4e5be4dc38","savedPayload":{"position":{"x":6460.584592812217,"y":17759.56852065658},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c10f698e-1ed4-48a6-9c2d-344bcba5ca35","savedPayload":{"position":{"x":6413.6542533001475,"y":18055.87502283512},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Volume Analysis","id":"77bf098c-c563-4855-9738-3443a324365c"}}}],"id":"de906bef-f516-4cd1-84ab-c75517cc767b","savedPayload":{"position":{"x":6643.8785014203395,"y":18370.613100188784},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Candle Analysis","config":"{ \n \"codeName\": \"Candle-Analysis\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{ \n \"codeName\": \"Multi-Period-Market\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Market\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candle Analysis","project":"Superalgos","id":"78bfdafd-e674-4142-8682-fa0ef2f47020","savedPayload":{"position":{"x":6568.94568036166,"y":19059.69458732049},"targetPosition":{"x":6491.299966830904,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f65e4bf0-df3b-414c-aeba-f21dadb5d7ec"}}}],"outputDatasetFolders":[],"id":"09155964-045b-4be5-83b5-b88da97c512b","savedPayload":{"position":{"x":6491.299966830904,"y":18769.91683943377},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candle Analysis Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"9e330c52-e2eb-4fd8-9d98-c1321387616f","savedPayload":{"position":{"x":6398.382047014719,"y":19063.36111965391},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"c9abb04a-1354-4042-8abf-29ede5c96b2a"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"efc41738-72c9-464c-8712-73a4f0bf349e","savedPayload":{"position":{"x":6304.650000789095,"y":19068.27340804425},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"b0a4c404-50d2-46c9-b529-612c83b247f4","savedPayload":{"position":{"x":6213.987546846651,"y":19043.98047672655},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Market","project":"Superalgos","id":"ebeda1d1-cecc-413f-a731-d75ea29d9f1a","savedPayload":{"position":{"x":6135.269357861734,"y":18992.860287076986},"targetPosition":{"x":6336.008539769391,"y":18769.91683943377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"dataMineDataDependencies":[],"id":"1cbd3575-7cb4-4e76-b49d-f3f1f3ab1b7c","savedPayload":{"position":{"x":6336.008539769391,"y":18769.91683943377},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"c9abb04a-1354-4042-8abf-29ede5c96b2a","savedPayload":{"position":{"x":6201.522218944183,"y":18692.27112590301},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"c384af4d-aef0-4c26-9544-b61605eef112","savedPayload":{"position":{"x":6123.876505413427,"y":18557.784805077805},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"4c916147-c39c-4575-be84-1605d41fa7c1","savedPayload":{"position":{"x":6123.876505413427,"y":18402.49337801629},"targetPosition":{"x":6413.6542533001475,"y":18480.139091547047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"73f1728c-00fb-4806-8aa6-34e5968ed332","savedPayload":{"position":{"x":6413.6542533001475,"y":18480.139091547047},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{ \n \"codeName\": \"Multi-Period-Daily\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Daily\" \n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Candle Analysis","project":"Superalgos","id":"44aa1ccd-3dd4-4974-8b55-327e16da25dc","savedPayload":{"position":{"x":4796.750783972486,"y":18400.318036172303},"targetPosition":{"x":4952.613763512145,"y":18238.047485519943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2127b8f1-932e-41c4-8eb9-1e0b6f02c2ec"}}}],"outputDatasetFolders":[],"id":"9aa67e23-37af-4bc0-a090-28fe6f461e78","savedPayload":{"position":{"x":5700.158545308172,"y":18444.703490343647},"targetPosition":{"x":5900.89772721583,"y":18221.76004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candle Analysis Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"8dbb3296-7574-44b5-8c58-32599cbb227d","savedPayload":{"position":{"x":5414.841590419626,"y":18537.40858865613},"targetPosition":{"x":5615.580772327285,"y":18314.46514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8b201dc7-d8d2-4e0d-bd77-011976b2268b"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"55c1d6f7-6010-4ecd-a5e5-ea9b509b13e7","savedPayload":{"position":{"x":5363.979601943658,"y":18477.85685151742},"targetPosition":{"x":5615.580772327285,"y":18314.46514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\n \"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"27f9c401-e899-4b3d-81ff-af7363705c48","savedPayload":{"position":{"x":5330.263817438739,"y":18407.170239325395},"targetPosition":{"x":5615.580772327285,"y":18314.46514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"461beea2-0f20-4473-b8b2-24c062e9f49a","savedPayload":{"position":{"x":5315.991911900914,"y":18330.165927885795},"targetPosition":{"x":5615.580772327285,"y":18314.46514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Daily","project":"Superalgos","id":"f1b6baf7-ebae-4b06-bc7f-58d602c95fd1","savedPayload":{"position":{"x":5322.136492107144,"y":18252.091633767584},"targetPosition":{"x":5615.580772327285,"y":18314.46514101291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}}],"dataMineDataDependencies":[],"id":"d4e4d6cf-72d4-46ef-84f4-9ac7dbe11774","savedPayload":{"position":{"x":5615.580772327285,"y":18314.46514101291},"targetPosition":{"x":5900.89772721583,"y":18221.76004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"8b201dc7-d8d2-4e0d-bd77-011976b2268b","savedPayload":{"position":{"x":5607.453446995689,"y":18159.3865354551},"targetPosition":{"x":5900.89772721583,"y":18221.76004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"892b0cf6-1a29-49d5-abcd-190b30d46b19","savedPayload":{"position":{"x":5677.954279572612,"y":18021.02086079277},"targetPosition":{"x":5900.89772721583,"y":18221.76004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"b1ca4936-fcd6-478d-9ec0-12cf44df36bd","savedPayload":{"position":{"x":5808.192628903347,"y":17936.443087811884},"targetPosition":{"x":5900.89772721583,"y":18221.76004270043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"24386401-0992-43bd-b104-b0cc9ae58ce4","savedPayload":{"position":{"x":6325.786287656112,"y":18268.007057191084},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candle Analysis","config":"{ \n \"codeName\": \"Candle-Analysis\", \n \"singularVariableName\": \"candleAnalysi\", \n \"pluralVariableName\": \"candleAnalysis\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f65e4bf0-df3b-414c-aeba-f21dadb5d7ec","savedPayload":{"position":{"x":6117.347751121606,"y":18102.80536234719},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2127b8f1-932e-41c4-8eb9-1e0b6f02c2ec","savedPayload":{"position":{"x":6146.352296043637,"y":17919.677872913257},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"53e79982-6059-417b-b88f-6394f60791dd","savedPayload":{"position":{"x":5343.148815609069,"y":17899.21849182892},"targetPosition":{"x":5776.25367201321,"y":17777.070289389638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e793b431-dad9-4610-9902-9359cd44e154","savedPayload":{"position":{"x":5776.25367201321,"y":17777.070289389638},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"d0cd074a-a587-4000-bc1f-28371a2fb8b6","savedPayload":{"position":{"x":5312.1329280575355,"y":17725.535273105415},"targetPosition":{"x":5760.7457282374435,"y":17690.228680027885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"69bcccfe-584d-4606-b871-726d66de8947","savedPayload":{"position":{"x":5760.7457282374435,"y":17690.228680027885},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Open","config":"{\n \"codeName\": \"open\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.open","project":"Superalgos","id":"3fd60b2f-084c-499e-834d-5ef2213cb614","savedPayload":{"position":{"x":5315.596917157918,"y":17549.1384292383},"targetPosition":{"x":5762.477722787635,"y":17602.030258094328},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4a292b21-4454-4fcd-a4f9-71e943dbed57","savedPayload":{"position":{"x":5762.477722787635,"y":17602.030258094328},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Close","config":"{\n \"codeName\": \"close\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.close","project":"Superalgos","id":"48b47283-d6a4-4a90-8738-1734c3c21de2","savedPayload":{"position":{"x":5353.407663751714,"y":17376.806792012903},"targetPosition":{"x":5781.383096084533,"y":17515.86443948163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40512ae6-3035-4c77-bcdc-1159fde854b5","savedPayload":{"position":{"x":5781.383096084533,"y":17515.86443948163},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Min","config":"{\n \"codeName\": \"min\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.min","project":"Superalgos","id":"7950cf77-46f2-4fa1-934e-8d4980144bca","savedPayload":{"position":{"x":5424.112122051834,"y":17215.162969603094},"targetPosition":{"x":5816.735325234593,"y":17435.042528276725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e360ee1-555c-4e52-b7dd-96488d8f7fce","savedPayload":{"position":{"x":5816.735325234593,"y":17435.042528276725},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max","config":"{\n \"codeName\": \"max\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.max","project":"Superalgos","id":"ac3fc0fd-7e23-497f-ace6-f2360dbffbd4","savedPayload":{"position":{"x":5524.9931593773235,"y":17070.41884345319},"targetPosition":{"x":5867.1758438973375,"y":17362.670465201772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9ab780d4-ecda-4774-a908-a09c7295a468","savedPayload":{"position":{"x":5867.1758438973375,"y":17362.670465201772},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Change","config":"{\n \"codeName\": \"change\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.change","project":"Superalgos","id":"00902197-3be2-430e-a46c-df9738714008","savedPayload":{"position":{"x":5652.1739740385,"y":16948.136849157687},"targetPosition":{"x":5930.766251227926,"y":17301.52946805402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ffbd369-31e7-4852-b6ff-bf4a3377fda1","savedPayload":{"position":{"x":5930.766251227926,"y":17301.52946805402},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amplitude","config":"{\n \"codeName\": \"amplitude\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.amplitude","project":"Superalgos","id":"93a89ed7-89ad-4daf-86d6-53651293ab50","savedPayload":{"position":{"x":5800.767078651759,"y":16853.016215180825},"targetPosition":{"x":6005.062803534555,"y":17253.96915106559},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39c3fed7-3a12-4972-945f-8e6fbde73a7e","savedPayload":{"position":{"x":6005.062803534555,"y":17253.96915106559},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Open","config":"{\n \"codeName\": \"last24HsOpen\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsOpen","project":"Superalgos","id":"f1270a72-c9e3-4b26-a1ea-cb5c41c9cbac","savedPayload":{"position":{"x":5965.062123538784,"y":16788.712374142073},"targetPosition":{"x":6087.210325978068,"y":17221.817230546214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2023ddfc-ef12-436a-afc1-21ea85bcc15a","savedPayload":{"position":{"x":6087.210325978068,"y":17221.817230546214},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Close","config":"{\n \"codeName\": \"last24HsClose\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsClose","project":"Superalgos","id":"24a0db8a-90e1-43ed-a5d4-275d8664a255","savedPayload":{"position":{"x":6138.745342262291,"y":16757.69648659054},"targetPosition":{"x":6174.051935339821,"y":17206.309286770447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7da60321-d817-47b1-b2a7-bdb0f7496f6c","savedPayload":{"position":{"x":6174.051935339821,"y":17206.309286770447},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Min","config":"{\n \"codeName\": \"last24HsMin\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsMin","project":"Superalgos","id":"ed0814c8-4b46-4e10-b0f5-99feacad7d18","savedPayload":{"position":{"x":6315.142186129406,"y":16761.160475690922},"targetPosition":{"x":6262.2503572733785,"y":17208.04128132064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38f2fdac-ce4b-4108-b29e-6132a0fdb2c1","savedPayload":{"position":{"x":6262.2503572733785,"y":17208.04128132064},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Max","config":"{\n \"codeName\": \"last24HsMax\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsMax","project":"Superalgos","id":"5dae1d3e-d141-44fa-a964-35e612fdfcba","savedPayload":{"position":{"x":6487.473823354803,"y":16798.971222284716},"targetPosition":{"x":6348.416175886077,"y":17226.946654617535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22d112af-2427-4977-89c4-0e473a2656c7","savedPayload":{"position":{"x":6348.416175886077,"y":17226.946654617535},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Change","config":"{\n \"codeName\": \"last24HsChange\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsChange","project":"Superalgos","id":"b4ea6ce6-2a3b-4565-8449-49e1152c51f6","savedPayload":{"position":{"x":6649.117645764611,"y":16869.675680584834},"targetPosition":{"x":6429.238087090981,"y":17262.298883767595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3a2b5bde-db5e-4bcd-8154-65be82b0d116","savedPayload":{"position":{"x":6429.238087090981,"y":17262.298883767595},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Amplitude","config":"{\n \"codeName\": \"last24HsAmplitude\",\n \"isString\": false,\n \"decimals\": 2}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsAmplitude","project":"Superalgos","id":"866f1e66-8872-4818-b5ed-c288f1c7faaa","savedPayload":{"position":{"x":6793.861771914517,"y":16970.55671791033},"targetPosition":{"x":6501.610150165934,"y":17312.739402430343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"86918cd5-d63f-4949-9eae-9c6474337bb8","savedPayload":{"position":{"x":6501.610150165934,"y":17312.739402430343},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Last 24 Hs Direction","config":"{\n \"codeName\": \"last24HsDirection\",\n \"isString\": true\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.last24HsDrection\n ","project":"Superalgos","id":"910daa69-6be0-4baf-9f0b-c0f48cf05112","savedPayload":{"position":{"x":6916.143766210022,"y":17097.737532571504},"targetPosition":{"x":6562.7511473136865,"y":17376.32980976093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c1fd4561-1c33-429a-9926-b940660e5500","savedPayload":{"position":{"x":6562.7511473136865,"y":17376.32980976093},"targetPosition":{"x":6209.358528417351,"y":17654.922086950355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"086c529f-aacc-403d-98bb-13c0d2b784b7","savedPayload":{"position":{"x":6209.358528417351,"y":17654.922086950355},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"\n\n\nlet candle = {\n open: record.current.open,\n close: record.current.close,\n min: record.current.min,\n max: record.current.max, \n} \n\nvariable.change = (candle.open * 100 / candle.close - 100) * (-1)\nvariable.amplitude = (candle.min * 100 / candle.max - 100) * (-1)\n\nvariable.candlesArray.splice(0, 1)\nvariable.candlesArray.push(candle)\n\nvariable.last24HsOpen = variable.candlesArray[0].open\nvariable.last24HsClose = candle.close\n\nvariable.last24HsMin = variable.candlesArray[0].min\nvariable.last24HsMax = variable.candlesArray[0].max\n\nfor (let i = 0; i < variable.candlesArray.length; i++) {\n let pastCandle = variable.candlesArray[i]\n\n if (pastCandle.min < variable.last24HsMin) {\n variable.last24HsMin = pastCandle.min\n }\n\n if (pastCandle.max > variable.last24HsMax) {\n variable.last24HsMax = pastCandle.max\n }\n}\n\nvariable.last24HsChange = (variable.last24HsOpen * 100 / variable.last24HsClose - 100) * (-1)\nvariable.last24HsAmplitude = (variable.last24HsMin * 100 / variable.last24HsMax - 100) * (-1)\n\nswitch (true) {\n case (variable.last24HsOpen === variable.last24HsClose): {\n variable.last24HsDrection = \"Side\"\n break\n }\n case (variable.last24HsOpen > variable.last24HsClose): {\n variable.last24HsDrection = \"Down\"\n break\n }\n case (variable.last24HsOpen < variable.last24HsClose): {\n variable.last24HsDrection = \"Up\"\n break\n }\n}\n\nif (isNaN(variable.change )) {variable.change = 0}\nif (isNaN(variable.amplitude )) {variable.amplitude = 0}\nif (isNaN(variable.last24HsChange )) {variable.last24HsChange = 0}\nif (isNaN(variable.last24HsAmplitude )) {variable.last24HsAmplitude = 0}","project":"Superalgos","id":"651295c0-b308-46e7-b972-06790ee03cd2","savedPayload":{"position":{"x":6397.867514851626,"y":17162.855383435617},"targetPosition":{"x":6429.2260538319215,"y":17461.2119520461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac737a8b-958d-433c-bd0c-e95b0622a89a","savedPayload":{"position":{"x":6429.2260538319215,"y":17461.2119520461},"targetPosition":{"x":6460.584592812217,"y":17759.56852065658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"\n\n\nlet candlesIn24Hs = system.ONE_DAY_IN_MILISECONDS / system.timeFrame\nvariable.candlesArray = []\nlet candle = {\n open: 0,\n close: 0,\n min: 0,\n max: 0\n}\n\nfor (let i = 0; i < candlesIn24Hs; i++) {\n variable.candlesArray.push(candle)\n}\n","project":"Superalgos","id":"74f3b1ad-a2b1-4c08-a737-00c6e251a847","savedPayload":{"position":{"x":6704.626578657698,"y":17211.44124607102},"targetPosition":{"x":6582.6055857349575,"y":17485.5048833638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1ba4a91d-63f2-4048-8d07-7f3aa38e200c","savedPayload":{"position":{"x":6582.6055857349575,"y":17485.5048833638},"targetPosition":{"x":6460.584592812217,"y":17759.56852065658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b123c4f0-9552-4f16-935b-d6cd9e45e7ff","savedPayload":{"position":{"x":6460.584592812217,"y":17759.56852065658},"targetPosition":{"x":6413.6542533001475,"y":18055.87502283512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e911b94f-c475-4400-a921-def0b207d7a3","savedPayload":{"position":{"x":6413.6542533001475,"y":18055.87502283512},"targetPosition":{"x":6625.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candle Analysis","id":"7d2c7454-22ee-4d99-ab73-b47e5813a7bc"}}}],"id":"644029c0-ed66-4b57-b33c-75dff309b972","savedPayload":{"position":{"x":6625.786287656112,"y":18268.007057191084},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Plotters Candles Volumes","config":"{\n\"codeName\": \"PlottersCandlesVolumes\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Candles","config":"{\n\"codeName\": \"Candles\",\n\"isLegacy\": true,\n\"icon\": \"layer-candles\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Candle","config":"{ \n\"codeName\": \"CandlePanel\" ,\n\"isLegacy\": true\n}","project":"Superalgos","panelData":[],"id":"9336f4e6-d56b-4ed4-819d-0bb762ba1fdd","savedPayload":{"position":{"x":6052.993849613015,"y":18269.589920793544},"targetPosition":{"x":6348.436175516677,"y":18217.495467493463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0aed75a3-fee8-4ddc-97ff-b6768e6f12a3","savedPayload":{"position":{"x":6348.436175516677,"y":18217.495467493463},"targetPosition":{"x":6643.8785014203395,"y":18165.401014193383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Volumes","config":"{\n\"codeName\": \"Volumes\",\n\"isLegacy\": true,\n\"icon\": \"layer-volume\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Volume","config":"{ \n\"codeName\": \"VolumePanel\" ,\n\"isLegacy\": true\n}","project":"Superalgos","panelData":[],"id":"42dbd098-4550-44a0-987f-54a28dd5f40b","savedPayload":{"position":{"x":6258.205935608416,"y":17705.774348321997},"targetPosition":{"x":6451.042218514378,"y":17935.58768125769},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a6177fb7-51d1-4b7c-bcbb-04861a5bf0c1","savedPayload":{"position":{"x":6451.042218514378,"y":17935.58768125769},"targetPosition":{"x":6643.8785014203395,"y":18165.401014193383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e4347543-21b5-4274-b690-e6b3b5899862","savedPayload":{"position":{"x":6643.8785014203395,"y":18165.401014193383},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Plotter","name":"Plotters Bollinger Bands","config":"{\n\"codeName\" : \"PlottersBollingerBands\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Percentage B","config":"{\n\t\"codeName\": \"Percentage Bandwidth\",\n \"icon\": \"layer-oscilator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Previous Value","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.value","project":"Superalgos","id":"ad85e84e-166f-41c7-bc08-b6a50ca4524d","savedPayload":{"position":{"x":6016.050959154461,"y":17993.870762111226},"targetPosition":{"x":6080.578308243954,"y":18086.025367093738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"534c2cd4-d020-43cf-9284-433a57fdcfce","savedPayload":{"position":{"x":6080.578308243954,"y":18086.025367093738},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Value","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.value","project":"Superalgos","id":"1e029480-c6d7-4455-9ae9-5677b99752de","savedPayload":{"position":{"x":6102.173633373724,"y":17957.313855800523},"targetPosition":{"x":6123.639645353585,"y":18067.746913938387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5b05abcc-76cf-4f9d-82e5-671ab7471678","savedPayload":{"position":{"x":6123.639645353585,"y":18067.746913938387},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Previous MA","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.movingAverage","project":"Superalgos","id":"7bafa19b-086c-41cf-b2e4-a41485841f4c","savedPayload":{"position":{"x":6195.719644560815,"y":17958.94670749957},"targetPosition":{"x":6170.412650947131,"y":18068.56333978791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0993c95f-2054-48d8-9977-2d4eb24dabf7","savedPayload":{"position":{"x":6170.412650947131,"y":18068.56333978791},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End MA","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.movingAverage","project":"Superalgos","id":"412d8820-facc-4065-a235-d35d86c3b569","savedPayload":{"position":{"x":6280.514037542656,"y":17998.48698231561},"targetPosition":{"x":6212.809847438051,"y":18088.33347719593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"35bdf97d-abf8-4f1e-922c-d853e6980b0c","savedPayload":{"position":{"x":6212.809847438051,"y":18088.33347719593},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Being Previous Bandwidth","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.bandwidth * 250","project":"Superalgos","id":"cbd72abc-e6c4-44d6-bd58-1bab7c0b2960","savedPayload":{"position":{"x":6341.89509143981,"y":18069.097807520826},"targetPosition":{"x":6243.500374386628,"y":18123.638889798538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"943da81e-c0ca-4213-ba8a-5dbafd3ead18","savedPayload":{"position":{"x":6243.500374386628,"y":18123.638889798538},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bandwidth","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.bandwidth * 250","project":"Superalgos","id":"6ac14886-32ee-490f-a600-4f704458f24e","savedPayload":{"position":{"x":6369.249464404089,"y":18158.56992995803},"targetPosition":{"x":6257.177560868768,"y":18168.37495101714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cdf38478-d5d4-410e-98fd-14b7b74bfd8b","savedPayload":{"position":{"x":6257.177560868768,"y":18168.37495101714},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"54cece5b-472f-4c86-b6b6-83342e2890f7","savedPayload":{"position":{"x":6357.847336843293,"y":18251.432806829107},"targetPosition":{"x":6251.47649708837,"y":18214.80638945268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e21c88b-bfb7-41dd-9cbe-678d5dc4fc54","savedPayload":{"position":{"x":6251.47649708837,"y":18214.80638945268},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"1572cfc8-0318-43b5-8405-a04cc00cbd16","savedPayload":{"position":{"x":6309.66024019776,"y":18331.62960309031},"targetPosition":{"x":6227.382948765603,"y":18254.90478758328},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"75670aaa-849d-4156-af74-61a25ce49713","savedPayload":{"position":{"x":6227.382948765603,"y":18254.90478758328},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 30","project":"Superalgos","id":"6039db7e-9c71-4906-b999-3d7848989c5a","savedPayload":{"position":{"x":6233.020161243532,"y":18385.29356410305},"targetPosition":{"x":6189.062909288489,"y":18281.73676808965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ffea0ed5-39b4-4c14-b1fc-2164a6e189fd","savedPayload":{"position":{"x":6189.062909288489,"y":18281.73676808965},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 30","project":"Superalgos","id":"89393793-42d5-4dea-bca5-aee8f3349659","savedPayload":{"position":{"x":6141.178865885058,"y":18403.145703486436},"targetPosition":{"x":6143.142261609252,"y":18290.662837781343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4bc7f337-74a7-42b7-89b7-9d4edc10fca5","savedPayload":{"position":{"x":6143.142261609252,"y":18290.662837781343},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 70","project":"Superalgos","id":"c616cf49-abaf-490e-a3b7-f978442c8b4a","savedPayload":{"position":{"x":6050.0165484417885,"y":18382.099224159494},"targetPosition":{"x":6097.561102887617,"y":18280.139598117872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"827e424f-3036-4645-9246-94b4bb0ebaea","savedPayload":{"position":{"x":6097.561102887617,"y":18280.139598117872},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 70","project":"Superalgos","id":"d3003e73-9318-4282-a293-d61c0d98bd4b","savedPayload":{"position":{"x":5975.296001783323,"y":18325.793253599113},"targetPosition":{"x":6060.200829558385,"y":18251.98661283768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"84bdd434-48af-4f4a-8f14-62df15022d05","savedPayload":{"position":{"x":6060.200829558385,"y":18251.98661283768},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 100","project":"Superalgos","id":"8d13712b-3f9e-424e-b85c-e6794ce39ca9","savedPayload":{"position":{"x":5242.786689930075,"y":16156.611943473745},"targetPosition":{"x":5498.494448617992,"y":16322.670503605194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ec589261-f564-4ad0-b866-8c63b8a15150","savedPayload":{"position":{"x":6037.521372287605,"y":18211.071788857556},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 100","project":"Superalgos","id":"8c06033c-c2b7-42a7-b509-e45a1b7edf42","savedPayload":{"position":{"x":5422.085087043011,"y":15977.313546360809},"targetPosition":{"x":5588.143647174464,"y":16233.021305048725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8949ce4a-bdad-47c2-a85f-0728ed7f9746","savedPayload":{"position":{"x":6033.444215273797,"y":18164.46967094317},"targetPosition":{"x":6145.105657333446,"y":18178.17997207625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9388e24f-4147-4878-8754-b6f6b8807813","savedPayload":{"position":{"x":6145.105657333446,"y":18178.17997207625},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Area From 0 to 30","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"05578d4b-01e3-42fc-a4dd-b473414f467d","savedPayload":{"position":{"x":6129.3468066044115,"y":16126.194244708448},"targetPosition":{"x":5824.868111570169,"y":16142.151296954191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"14810299-01f6-443c-8bbf-de8450c9efd6","savedPayload":{"position":{"x":5824.868111570169,"y":16142.151296954191},"targetPosition":{"x":5520.389416535927,"y":16158.108349199934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"d8eda99d-df16-4e21-b621-6f547914c461","savedPayload":{"position":{"x":5618.470429896104,"y":16459.97066932802},"targetPosition":{"x":5520.389416535927,"y":16158.108349199934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"8e21c88b-bfb7-41dd-9cbe-678d5dc4fc54"}}},{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"3a844186-fa2d-45e3-9453-d11750bafb51","savedPayload":{"position":{"x":5266.455205903938,"y":16342.602352539547},"targetPosition":{"x":5520.389416535927,"y":16158.108349199934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"75670aaa-849d-4156-af74-61a25ce49713"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"95d52cc3-0a06-4181-bcd7-1e65b41194d8","savedPayload":{"position":{"x":5270.139808268283,"y":15976.291366176807},"targetPosition":{"x":5520.389416535927,"y":16158.108349199934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4bc7f337-74a7-42b7-89b7-9d4edc10fca5"}}},{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"a65fe0bd-5517-45b2-ac29-16bd198653a5","savedPayload":{"position":{"x":5605.736627889641,"y":15895.4366418728},"targetPosition":{"x":5520.389416535927,"y":16158.108349199934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"ffea0ed5-39b4-4c14-b1fc-2164a6e189fd"}}}],"id":"d76f185f-5219-4f0b-adb3-9a339b0468c6","savedPayload":{"position":{"x":5996.200266630514,"y":18165.853201234888},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Area From 30 to 70","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"2bdd38d2-0e04-4760-a8e7-af12d8a3baa7","savedPayload":{"position":{"x":5898.560257880894,"y":16356.980793431965},"targetPosition":{"x":5642.852499192977,"y":16190.922233300516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"de6f5e6b-a281-4d29-af86-72f7a545257d","savedPayload":{"position":{"x":5642.852499192977,"y":16190.922233300516},"targetPosition":{"x":5387.14474050506,"y":16024.863673169068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"e9bfd52e-bc47-469f-8187-4e79d79ba866","savedPayload":{"position":{"x":5480.091675709726,"y":16310.924925479372},"targetPosition":{"x":5387.14474050506,"y":16024.863673169068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"ffea0ed5-39b4-4c14-b1fc-2164a6e189fd"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"f562f71b-2e79-4fa0-a9d5-e1d5c4ba12b4","savedPayload":{"position":{"x":5154.49243471105,"y":16193.895467566923},"targetPosition":{"x":5387.14474050506,"y":16024.863673169068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4bc7f337-74a7-42b7-89b7-9d4edc10fca5"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"3c79161c-e899-4147-bd75-21805b23f76f","savedPayload":{"position":{"x":5139.533478681649,"y":15844.96356104129},"targetPosition":{"x":5387.14474050506,"y":16024.863673169068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"84bdd434-48af-4f4a-8f14-62df15022d05"}}},{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"4cd041c2-e445-46eb-99bf-c3ceee94f101","savedPayload":{"position":{"x":5479.761807982864,"y":15739.817649331171},"targetPosition":{"x":5387.14474050506,"y":16024.863673169068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"827e424f-3036-4645-9246-94b4bb0ebaea"}}}],"id":"1a7969dd-af18-4e44-b4c9-96dd2be57f7c","savedPayload":{"position":{"x":5926.936021061787,"y":18171.91303750983},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Area From 70 to 100","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"b34d9e0e-ed4a-4b99-8e29-b7ed66a3658e","savedPayload":{"position":{"x":5576.197088123266,"y":16408.038103655275},"targetPosition":{"x":5466.9319384134,"y":16123.392656993976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2c35b477-500f-4c85-867f-630e2105278f","savedPayload":{"position":{"x":5466.9319384134,"y":16123.392656993976},"targetPosition":{"x":5357.666788703533,"y":15838.747210332678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"1777fb76-c1e2-415d-a517-2e365401490c","savedPayload":{"position":{"x":5452.801576695787,"y":16131.54198114909},"targetPosition":{"x":5357.666788703533,"y":15838.747210332678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"827e424f-3036-4645-9246-94b4bb0ebaea"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"4652d8cf-d922-44a3-b8cf-c6d329883ca0","savedPayload":{"position":{"x":5125.892714594986,"y":16007.140932061604},"targetPosition":{"x":5357.666788703533,"y":15838.747210332678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"84bdd434-48af-4f4a-8f14-62df15022d05"}}},{"type":"Polygon Vertex","name":"End 100","project":"Superalgos","id":"ef3e750e-8380-40a2-830b-3f364960e44e","savedPayload":{"position":{"x":5106.83726678415,"y":15656.508895378991},"targetPosition":{"x":5357.666788703533,"y":15838.747210332678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 100","id":"8949ce4a-bdad-47c2-a85f-0728ed7f9746"}}},{"type":"Polygon Vertex","name":"Begin 100","project":"Superalgos","id":"c8905f10-3c25-4fec-978a-ef356c0ad395","savedPayload":{"position":{"x":5454.998164274421,"y":15539.192038087547},"targetPosition":{"x":5357.666788703533,"y":15838.747210332678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 100","id":"ec589261-f564-4ad0-b866-8c63b8a15150"}}}],"id":"cb1bcd11-0fb0-4377-bff2-dee4630e0f3f","savedPayload":{"position":{"x":5867.33818690041,"y":18136.10304598292},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 30","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"3f69a3f7-af79-47a2-9e0b-17524fc986d8","savedPayload":{"position":{"x":5012.026307524979,"y":16102.037952904186},"targetPosition":{"x":5227.62072216289,"y":15886.443538266274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"30e98617-1cfd-4fa7-814c-a5898caac0da","savedPayload":{"position":{"x":5227.62072216289,"y":15886.443538266274},"targetPosition":{"x":5443.215136800805,"y":15670.84912362836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"2f5d4ab1-0d70-4baa-988a-2b7077e7b1e6","savedPayload":{"position":{"x":5285.868425154484,"y":15943.38162260368},"targetPosition":{"x":5443.215136800805,"y":15670.84912362836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"ffea0ed5-39b4-4c14-b1fc-2164a6e189fd"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"b23626ca-e521-4fad-9a8b-8c9f30711de7","savedPayload":{"position":{"x":5301.501161436576,"y":15425.393318154947},"targetPosition":{"x":5443.215136800805,"y":15670.84912362836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"4bc7f337-74a7-42b7-89b7-9d4edc10fca5"}}}],"id":"857043cc-f467-44d2-89eb-2e73f35f638d","savedPayload":{"position":{"x":5840.17111114015,"y":18072.1014262806},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 30","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"9e67e8dc-0a07-4d57-be52-6023ff9087da","savedPayload":{"position":{"x":5008.827698034755,"y":15680.693431398286},"targetPosition":{"x":5309.970460769935,"y":15632.997103464688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"767e0eba-ad98-49a9-a08d-58b5ebfaf655","savedPayload":{"position":{"x":5309.970460769935,"y":15632.997103464688},"targetPosition":{"x":5611.113223505123,"y":15585.30077553109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"9bed0cf3-56c3-4508-88c8-5dede6e574df","savedPayload":{"position":{"x":5454.696420750759,"y":15856.222625059125},"targetPosition":{"x":5611.113223505123,"y":15585.30077553109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"84bdd434-48af-4f4a-8f14-62df15022d05"}}},{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"1ce29315-82a5-4b62-8e85-be087a037d73","savedPayload":{"position":{"x":5454.392606746398,"y":15313.852704711451},"targetPosition":{"x":5611.113223505123,"y":15585.30077553109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"827e424f-3036-4645-9246-94b4bb0ebaea"}}}],"id":"984a1917-1d81-4142-a50f-269a18a07c9d","savedPayload":{"position":{"x":5855.8116933464835,"y":18004.354621794108},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Bandwidth","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 2,\n \"lineDash\": [2,2],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n }\n}","project":"Superalgos","id":"ccb32f55-1b5e-4813-b614-0581593434a7","savedPayload":{"position":{"x":5253.90006447419,"y":15337.93845752703},"targetPosition":{"x":5525.56487540785,"y":15476.358592429822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"57a26967-b019-4352-9d9d-cc10668837c4","savedPayload":{"position":{"x":5525.56487540785,"y":15476.358592429822},"targetPosition":{"x":5797.22968634151,"y":15614.778727332614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Being Previous Bandwidth","project":"Superalgos","id":"0d8a9c6b-b0e6-4ce1-b1ad-71bd2a506a55","savedPayload":{"position":{"x":5661.504374279899,"y":15849.861863696471},"targetPosition":{"x":5797.22968634151,"y":15614.778727332614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Being Previous Bandwidth","id":"943da81e-c0ca-4213-ba8a-5dbafd3ead18"}}},{"type":"Polygon Vertex","name":"End Bandwidth","project":"Superalgos","id":"38f87d68-5678-46bd-9e26-45b8a8ee75f1","savedPayload":{"position":{"x":5653.4526844203065,"y":15365.749655045161},"targetPosition":{"x":5797.22968634151,"y":15614.778727332614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bandwidth","id":"cdf38478-d5d4-410e-98fd-14b7b74bfd8b"}}}],"id":"0f7a4004-177c-4412-b0ef-2608f3c13da6","savedPayload":{"position":{"x":5908.2857627204285,"y":17958.73960920809},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Value","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.85,\n \"lineWidth\": 2.25,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"6e43dca6-e750-49ff-b025-2a76185e5914","savedPayload":{"position":{"x":5653.634092566794,"y":15204.69378149616},"targetPosition":{"x":5792.054227469587,"y":15476.35859242982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"56c0efd0-d13a-4c29-98f2-d27cb6071099","savedPayload":{"position":{"x":5792.054227469587,"y":15476.35859242982},"targetPosition":{"x":5930.474362372381,"y":15748.02340336348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Previous Value","project":"Superalgos","id":"68e8f2a3-54ee-4fb7-abd2-add6496c08e0","savedPayload":{"position":{"x":5774.809182828645,"y":16017.643403302554},"targetPosition":{"x":5930.474362372381,"y":15748.02340336348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Previous Value","id":"534c2cd4-d020-43cf-9284-433a57fdcfce"}}},{"type":"Polygon Vertex","name":"End Value","project":"Superalgos","id":"a01aa765-6bd5-49d7-afbe-44d543191f76","savedPayload":{"position":{"x":5771.951825878223,"y":15473.454316010906},"targetPosition":{"x":5930.474362372381,"y":15748.02340336348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Value","id":"5b05abcc-76cf-4f9d-82e5-671ab7471678"}}}],"id":"4598a671-83b9-4460-9e65-175df73eba71","savedPayload":{"position":{"x":5977.550008289156,"y":17952.67977293315},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Moving Average","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.55,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"544bf8f4-dfd5-4cd7-aba3-a47f6b477da8","savedPayload":{"position":{"x":5770.699523379797,"y":15441.119490439365},"targetPosition":{"x":6007.648642107499,"y":15632.997103464686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.previous.movingAverage > record.movingAverage","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.55,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n}","project":"Superalgos","id":"c89114e1-7181-4091-8c2d-0301a8b00478","savedPayload":{"position":{"x":6576.939535430094,"y":15414.466804044956},"targetPosition":{"x":6292.294088768798,"y":15523.731953754821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12891c27-2ec5-4a56-892e-1d29a277d5da","savedPayload":{"position":{"x":6292.294088768798,"y":15523.731953754821},"targetPosition":{"x":6007.648642107499,"y":15632.997103464686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9847967-ecf5-4f6a-9fe7-2759ca4795b6","savedPayload":{"position":{"x":6007.648642107499,"y":15632.997103464686},"targetPosition":{"x":5959.952314173901,"y":15934.13986619987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"a"}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Previous MA","project":"Superalgos","id":"81660820-6035-481b-a909-9e89e145d61f","savedPayload":{"position":{"x":5806.271775720972,"y":16200.322366934888},"targetPosition":{"x":5959.952314173901,"y":15934.13986619987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Previous MA","id":"0993c95f-2054-48d8-9977-2d4eb24dabf7"}}},{"type":"Polygon Vertex","name":"End MA","project":"Superalgos","id":"2d18f4cf-e5d4-4bde-9a69-85b87c410125","savedPayload":{"position":{"x":5800.791215457488,"y":15658.464756634556},"targetPosition":{"x":5959.952314173901,"y":15934.13986619987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End MA","id":"35bdf97d-abf8-4f1e-922c-d853e6980b0c"}}}],"id":"69c19382-ed5b-48d1-9249-426a8e1e4e51","savedPayload":{"position":{"x":6037.147842450533,"y":17988.489764460057},"targetPosition":{"x":5952.243014675471,"y":18062.29640522149},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"da344cd9-3c37-449a-b5be-6c65814f8562","savedPayload":{"position":{"x":5952.243014675471,"y":18062.29640522149},"targetPosition":{"x":6400.530628816757,"y":18023.07632098504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"%B Panel","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"%B Value","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Superalgos","id":"c6ca5acc-cc3d-4802-8627-d3461747e731","savedPayload":{"position":{"x":5545.833050817806,"y":17753.679307067127},"targetPosition":{"x":5837.235671761784,"y":17824.98507476498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d34065b9-ce7c-4971-8270-d0819da6b188","savedPayload":{"position":{"x":5837.235671761784,"y":17824.98507476498},"targetPosition":{"x":6128.638292705762,"y":17896.290842462833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Bandwidth","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.bandwidth","project":"Superalgos","id":"5193f538-5133-4561-a9e4-939cfa4d9af9","savedPayload":{"position":{"x":5584.853620483773,"y":17642.719885418417},"targetPosition":{"x":5856.745956594767,"y":17769.505363940625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba215bbb-99c2-4433-83f8-47f2b00ee378","savedPayload":{"position":{"x":5856.745956594767,"y":17769.505363940625},"targetPosition":{"x":6128.638292705762,"y":17896.290842462833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Moving Average","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.movingAverage","project":"Superalgos","id":"d721b3b0-ffe7-459f-b146-954073605f0e","savedPayload":{"position":{"x":5644.771530145272,"y":17541.505053444685},"targetPosition":{"x":5886.704911425517,"y":17718.89794795376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8705ee2c-1bd8-4e90-b841-d2864f83f14b","savedPayload":{"position":{"x":5886.704911425517,"y":17718.89794795376},"targetPosition":{"x":6128.638292705762,"y":17896.290842462833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"36548f31-d96c-4c80-b923-dea5dd5b56c7","savedPayload":{"position":{"x":6128.638292705762,"y":17896.290842462833},"targetPosition":{"x":6400.530628816757,"y":18023.07632098504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"06b2f3f6-b138-415f-8974-31c22a930f92","savedPayload":{"position":{"x":6400.530628816757,"y":18023.07632098504},"targetPosition":{"x":6695.972954720419,"y":18075.17077428512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Bollinger Bands","config":"{\n\"codeName\": \"BollingerBands\",\n\"isLegacy\": true,\n\"icon\": \"layer-bands\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Bollinger Band","config":"{ \n\"codeName\": \"BollingerBandsPanel\" ,\n\"isLegacy\": true\n}","project":"Superalgos","panelData":[],"id":"de7b7008-6f66-4d7d-96dd-1aa7b1ede335","savedPayload":{"position":{"x":6490.760868725018,"y":17511.355201813574},"targetPosition":{"x":6593.366911722718,"y":17793.262988049348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a11bfdf8-595c-4b50-b259-6a9f777d0ea8","savedPayload":{"position":{"x":6593.366911722718,"y":17793.262988049348},"targetPosition":{"x":6695.972954720419,"y":18075.17077428512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"abd0f050-2f42-4c50-81a9-ffb0d6442cef","savedPayload":{"position":{"x":6695.972954720419,"y":18075.17077428512},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Plotters Bollinger Channels","config":"{\n\"codeName\" : \"Plotter Bollinger Channels\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Bollinger Channels Objects","config":"{\n\"codeName\": \"Bollinger-Channels-Objects\",\n \"icon\": \"layer-trends\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.firstMovingAverage - record.firstDeviation","project":"Superalgos","id":"8117b381-e9c7-41e3-8a51-ed49a1ca6868","savedPayload":{"position":{"x":5674.648296858838,"y":17943.629463526573},"targetPosition":{"x":5810.036089511317,"y":17879.05279900533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9be61e7d-ae1e-4b39-9ebf-27285a5a67a9","savedPayload":{"position":{"x":5810.036089511317,"y":17879.05279900533},"targetPosition":{"x":5945.423882163796,"y":17814.476134484088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.lastMovingAverage - record.lastDeviation","project":"Superalgos","id":"69cb3498-4e18-458a-b48e-e65c98b183be","savedPayload":{"position":{"x":5657.777961703338,"y":17899.680737895265},"targetPosition":{"x":5801.600921933567,"y":17857.078436189677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f87b3204-8901-4774-afcb-b4e5394e255d","savedPayload":{"position":{"x":5801.600921933567,"y":17857.078436189677},"targetPosition":{"x":5945.423882163796,"y":17814.476134484088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.lastMovingAverage + record.lastDeviation","project":"Superalgos","id":"4c7b46d8-f76b-4039-af87-345c3f72a0a4","savedPayload":{"position":{"x":5647.990423751654,"y":17853.633992150106},"targetPosition":{"x":5796.707152957725,"y":17834.055063317097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5ce82101-6f77-4f54-bef5-d97edae6d44b","savedPayload":{"position":{"x":5796.707152957725,"y":17834.055063317097},"targetPosition":{"x":5945.423882163796,"y":17814.476134484088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.firstMovingAverage + record.lastDeviation","project":"Superalgos","id":"89e5dbc2-33ed-42b9-9b9b-376097e04aff","savedPayload":{"position":{"x":5645.526684671128,"y":17806.62304999173},"targetPosition":{"x":5795.475283417462,"y":17810.54959223791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"45dbe6c3-9433-4b6d-8aa5-691cf6eba8a1","savedPayload":{"position":{"x":5795.475283417462,"y":17810.54959223791},"targetPosition":{"x":5945.423882163796,"y":17814.476134484088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"703b0e1b-e2d6-457a-95d6-7b6516b2f772","savedPayload":{"position":{"x":5945.423882163796,"y":17814.476134484088},"targetPosition":{"x":6238.868162383938,"y":17752.10262723876},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"09105647-a665-4fb4-910d-49bcf90eb91e","savedPayload":{"position":{"x":5449.578761483587,"y":17442.699429100387},"targetPosition":{"x":5749.54519202667,"y":17447.187251204967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Side'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.LIGHT\"\n}","project":"Superalgos","id":"ad17706f-09f0-4424-b5f3-b66fb2c76160","savedPayload":{"position":{"x":5155.916396394847,"y":17359.98144293102},"targetPosition":{"x":5452.730794210758,"y":17403.584347067994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3975ecc2-db5b-4cab-a9ab-9e13b2da3015","savedPayload":{"position":{"x":5452.730794210758,"y":17403.584347067994},"targetPosition":{"x":5749.54519202667,"y":17447.187251204967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR. GREEN\"\n}","project":"Superalgos","id":"0b263642-8fc7-4fdc-a915-9480c8493e68","savedPayload":{"position":{"x":5172.377615127447,"y":17283.243394423815},"targetPosition":{"x":5460.961403577058,"y":17365.21532281439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e218ed70-9da7-43c5-9c23-9e010e08b5b5","savedPayload":{"position":{"x":5460.961403577058,"y":17365.21532281439},"targetPosition":{"x":5749.54519202667,"y":17447.187251204967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Down'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"ce3abe3f-eb38-4e0f-94bb-9c397ed78f49","savedPayload":{"position":{"x":5198.714331121873,"y":17209.310470759963},"targetPosition":{"x":5474.1297615742715,"y":17328.248860982465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"251d5031-13f9-493b-aa35-126f5221bb21","savedPayload":{"position":{"x":5474.1297615742715,"y":17328.248860982465},"targetPosition":{"x":5749.54519202667,"y":17447.187251204967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"atMousePosition === true","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.1\n}","project":"Superalgos","id":"2ea26fbc-74c5-4fb5-b64f-c4c7b289003c","savedPayload":{"position":{"x":5234.475915865551,"y":17139.44768476142},"targetPosition":{"x":5492.01055394611,"y":17293.317467983194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8a0f9c00-67be-47fa-9cde-ec6c499c9bec","savedPayload":{"position":{"x":5492.01055394611,"y":17293.317467983194},"targetPosition":{"x":5749.54519202667,"y":17447.187251204967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f2d2ac14-9859-4228-81d9-280c639c1b37","savedPayload":{"position":{"x":5749.54519202667,"y":17447.187251204967},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"d85d9603-7ff2-4d45-aa58-9b8ebe23a65f","savedPayload":{"position":{"x":5630.278396358053,"y":17345.66205735595},"targetPosition":{"x":5775.021060177251,"y":17385.02652446174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Side'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\"\n}","project":"Superalgos","id":"d09de0b4-f477-42e9-a944-6bde9a9a68dd","savedPayload":{"position":{"x":5501.415696002021,"y":17261.98139170737},"targetPosition":{"x":5638.218378089636,"y":17323.503958084555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08167019-4685-45ca-8572-74706f2fb971","savedPayload":{"position":{"x":5638.218378089636,"y":17323.503958084555},"targetPosition":{"x":5775.021060177251,"y":17385.02652446174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n}","project":"Superalgos","id":"ebab2c53-c230-4622-a5d1-a3e0bd1d4139","savedPayload":{"position":{"x":5524.032731575324,"y":17220.69497269638},"targetPosition":{"x":5649.526895876287,"y":17302.86074857906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5b721945-b84b-4e19-a7db-777bc1c1fee1","savedPayload":{"position":{"x":5649.526895876287,"y":17302.86074857906},"targetPosition":{"x":5775.021060177251,"y":17385.02652446174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Down'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"8bef9d11-9184-420e-a841-97a19f6a160b","savedPayload":{"position":{"x":5552.829932781313,"y":17183.454941875003},"targetPosition":{"x":5663.925496479282,"y":17284.24073316837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a530140d-d0bb-4989-8ca8-d9846adbc91d","savedPayload":{"position":{"x":5663.925496479282,"y":17284.24073316837},"targetPosition":{"x":5775.021060177251,"y":17385.02652446174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"add24099-1310-4e86-99fc-9db01a272b6e","savedPayload":{"position":{"x":5775.021060177251,"y":17385.02652446174},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"New Point","project":"Superalgos","id":"7be4c16d-772a-4750-9735-09d3d9e16037","savedPayload":{"position":{"x":5813.690258094623,"y":17330.09321089248},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"New Point","id":"9be61e7d-ae1e-4b39-9ebf-27285a5a67a9"}}},{"type":"Polygon Vertex","name":"New Point","project":"Superalgos","id":"1a592de1-eb28-41eb-8ddb-b22e5034be53","savedPayload":{"position":{"x":5863.613750726699,"y":17285.141896221085},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"New Point","id":"f87b3204-8901-4774-afcb-b4e5394e255d"}}},{"type":"Polygon Vertex","name":"New Point","project":"Superalgos","id":"e90a30b1-cd5d-4331-bf74-7cfd4242db34","savedPayload":{"position":{"x":5922.288165690557,"y":17252.426627065524},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"New Point","id":"5ce82101-6f77-4f54-bef5-d97edae6d44b"}}},{"type":"Polygon Vertex","name":"New Point","project":"Superalgos","id":"ae4311e5-a02d-46d7-a41c-79e6945f9f21","savedPayload":{"position":{"x":5986.771322816889,"y":17233.587883628326},"targetPosition":{"x":6038.128980476281,"y":17529.159179595543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"New Point","id":"45dbe6c3-9433-4b6d-8aa5-691cf6eba8a1"}}}],"id":"6e21446c-93e7-44ad-814d-3cd2fa8f8baf","savedPayload":{"position":{"x":6038.128980476281,"y":17529.159179595543},"targetPosition":{"x":6238.868162383938,"y":17752.10262723876},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"0b08f6f6-2317-42fb-ab3a-db8957d76dfa","savedPayload":{"position":{"x":6238.868162383938,"y":17752.10262723876},"targetPosition":{"x":6524.185117272485,"y":17844.807725551243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"o"}}},"panels":[{"type":"Plotter Panel","name":"Bollinger Channels Objects","config":"{ \n\"codeName\": \"Bollinger Channels Objects\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"479f9520-4cad-4fe3-a2fc-c7f48d93344d","savedPayload":{"position":{"x":6090.050828740526,"y":17532.272290521698},"targetPosition":{"x":6183.4088713902465,"y":17568.10908547623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"24fefe09-fa8d-4904-9c6c-9c775d3866d0","savedPayload":{"position":{"x":6183.4088713902465,"y":17568.10908547623},"targetPosition":{"x":6323.445935364827,"y":17621.864277908026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Total Periods","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"69b5e792-b174-4046-9219-786da4601f58","savedPayload":{"position":{"x":6129.159445000584,"y":17464.534180145565},"targetPosition":{"x":6206.874041146281,"y":17527.46621925055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e79b5734-072e-4432-91d5-8f41eef59b26","savedPayload":{"position":{"x":6206.874041146281,"y":17527.46621925055},"targetPosition":{"x":6323.445935364827,"y":17621.864277908026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"First Moving Average","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.firstMovingAverage","project":"Superalgos","id":"b6818aef-a3dc-4d78-9684-46f1ddbf234a","savedPayload":{"position":{"x":6187.286176611071,"y":17412.19663592167},"targetPosition":{"x":6241.750080112573,"y":17496.063692716212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"75fe02cd-776b-45cb-a965-ecbfac163ad4","savedPayload":{"position":{"x":6241.750080112573,"y":17496.063692716212},"targetPosition":{"x":6323.445935364827,"y":17621.864277908026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last Moving Average","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.lastMovingAverage","project":"Superalgos","id":"25d5ce35-768a-4f5b-b541-65dfdcf77414","savedPayload":{"position":{"x":6258.741174089198,"y":17380.38282133576},"targetPosition":{"x":6284.623078599449,"y":17476.975403964665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c5af78de-d153-4002-b6df-79a1fd009100","savedPayload":{"position":{"x":6284.623078599449,"y":17476.975403964665},"targetPosition":{"x":6323.445935364827,"y":17621.864277908026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"09c8f781-3e54-4bed-bd9a-83e8179fdd66","savedPayload":{"position":{"x":6323.445935364827,"y":17621.864277908026},"targetPosition":{"x":6524.185117272485,"y":17844.807725551243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"52881346-3e4b-45e0-92d2-af130d381b8e","savedPayload":{"position":{"x":6524.185117272485,"y":17844.807725551243},"targetPosition":{"x":6775.786287656112,"y":18008.19943605575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Bollinger Sub Channels Objects","config":"{\n\"codeName\": \"Bollinger-Sub-Channels-Objects\",\n\"icon\": \"layer-trends\"\n}","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Definition of the points we are going to use while drawing */\nlet point1\nlet point2\nlet point3\nlet point4\n\npoint1 = {\n x: record.begin,\n y: record.firstMovingAverage - record.firstDeviation\n}\n\npoint2 = {\n x: record.end,\n y: record.lastMovingAverage - record.lastDeviation\n}\n\npoint3 = {\n x: record.end,\n y: record.lastMovingAverage + record.lastDeviation\n}\n\npoint4 = {\n x: record.begin,\n y: record.firstMovingAverage + record.firstDeviation\n}\n\n/* Contributing to Auto-Scale*/\ncoordinateSystem.reportYValue(record.firstMovingAverage - record.firstDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage - record.lastDeviation)\ncoordinateSystem.reportYValue(record.lastMovingAverage + record.lastDeviation)\ncoordinateSystem.reportYValue(record.firstMovingAverage + record.firstDeviation)\n\n/*\nThe information we store in files is independent from the charing system and its coordinate systems.\nThat means that the first thing we allways need to do is to trasform these points to the coordinate system of the timeline.\n*/\npoint1 = coordinateSystem.transformThisPoint(point1)\npoint2 = coordinateSystem.transformThisPoint(point2)\npoint3 = coordinateSystem.transformThisPoint(point3)\npoint4 = coordinateSystem.transformThisPoint(point4)\n\n/*\nThe browser canvas object does not care about our timeline and its coordinate system. In order to draw on a html canvas we\nneed the points to be converted into the canvas coordinate system.\nNext we transform again to the screen coordinate system.\n*/\npoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container)\npoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container)\npoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container)\npoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container)\n\n/* We make sure the points do not fall outside the UI.projects.superalgos.spaces.chartingSpace.viewport visible area. This step allways need to be done. */\npoint1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(point1)\npoint2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(point2)\npoint3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(point3)\npoint4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(point4)\n\npoint1 = thisObject.fitFunction(point1);\npoint2 = thisObject.fitFunction(point2);\npoint3 = thisObject.fitFunction(point3);\npoint4 = thisObject.fitFunction(point4);\n\n/*\nNow that we have our 4 points as coordinates of the actual screen (or html canvas object), we can actaully start drawing.\nFirst we are going to draw the shape backgound.\n*/\nbrowserCanvasContext.beginPath()\n\nbrowserCanvasContext.moveTo(point1.x, point1.y)\nbrowserCanvasContext.lineTo(point2.x, point2.y)\nbrowserCanvasContext.lineTo(point3.x, point3.y)\nbrowserCanvasContext.lineTo(point4.x, point4.y)\n\nbrowserCanvasContext.closePath()\n\nlet opacity = '0.25' // The backgound will be quite transparent. Possible values goes from 0..1\n\n/* Depending on the direction of the channel, we use a different color for the border lines. */\nif (record.direction === 'Side') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')' }\nif (record.direction === 'Up') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')' }\n\nswitch (record.slope) {\n case 'Side': {\n opacity = '0.1';\n break;\n }\n case 'Gentle': {\n opacity = '0.1';\n break;\n }\n case 'Medium': {\n opacity = '0.15';\n break;\n }\n case 'Steep': {\n opacity = '0.2';\n break;\n }\n case 'Extreme': {\n opacity = '0.25';\n break;\n }\n}\n\n/* Depending on the direction of the channel, we use a different color for the background. */\nif (record.direction === 'Side' || record.slope === 'Side') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT + ', ' + opacity + ')'; }\nif (record.direction === 'Up') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')' }\nif (record.direction === 'Down') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' }\n\n/* If the mouse is positioned in betwheen the begining and ending of our object, we can opt for changing the color of that specific object. */\nif (atMousePosition) {\n browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.1)'\n}\n\nbrowserCanvasContext.fill() // This is what actually apply the previous instructions on the html canvas object of the browser.\n\n/* Second we are going to draw the shape borders. */\nbrowserCanvasContext.beginPath()\n\nbrowserCanvasContext.moveTo(point1.x, point1.y)\nbrowserCanvasContext.lineTo(point2.x, point2.y)\nbrowserCanvasContext.lineTo(point3.x, point3.y)\nbrowserCanvasContext.lineTo(point4.x, point4.y)\n\nbrowserCanvasContext.closePath()\n\nbrowserCanvasContext.lineWidth = 1 // We use 1 as standard line width\nbrowserCanvasContext.setLineDash([0, 0]) // We do not want dashed lines in this case.\nbrowserCanvasContext.stroke() // This actually draw the borders of our shape.","project":"Superalgos","id":"63406674-a797-430a-96c7-e5bcacb286bc","savedPayload":{"position":{"x":6344.285072028676,"y":17598.72007193092},"targetPosition":{"x":6586.990170341161,"y":17775.05564761866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"panels":[{"type":"Plotter Panel","name":"Bollinger Sub Channels Objects","config":"{ \n\"codeName\": \"Bollinger Sub Channels Objects\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"f1793208-a0a5-49a5-a21c-88f848563433","savedPayload":{"position":{"x":6262.714928824683,"y":17354.04569725276},"targetPosition":{"x":6343.616628262178,"y":17412.82422248201},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"029cc150-77ee-44eb-b52b-4c83f0d79e6a","savedPayload":{"position":{"x":6343.616628262178,"y":17412.82422248201},"targetPosition":{"x":6464.96917741842,"y":17500.99201032588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Total Periods","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"f09cfc38-2f4e-4f5f-b6fe-3f8255657081","savedPayload":{"position":{"x":6307.639079655961,"y":17306.70551996164},"targetPosition":{"x":6370.571118760945,"y":17384.420116107336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6020f40d-2141-4f21-b4ae-3a4f32073eda","savedPayload":{"position":{"x":6370.571118760945,"y":17384.420116107336},"targetPosition":{"x":6464.96917741842,"y":17500.99201032588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"First Moving Average","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.firstMovingAverage","project":"Superalgos","id":"be429ff9-1656-4db6-8ddb-758ca900d6f0","savedPayload":{"position":{"x":6363.28501664947,"y":17272.605645915228},"targetPosition":{"x":6403.95868095705,"y":17363.96019167949},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ab7f25ee-dad0-4b3e-80b1-a9fcffde8424","savedPayload":{"position":{"x":6403.95868095705,"y":17363.96019167949},"targetPosition":{"x":6464.96917741842,"y":17500.99201032588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last Moving Average","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.lastMovingAverage","project":"Superalgos","id":"5501c8e2-7406-453a-9cae-75f8628e321f","savedPayload":{"position":{"x":6425.8605611583625,"y":17254.069925177097},"targetPosition":{"x":6441.504007662385,"y":17352.83875923661},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e0df05de-65cf-45da-a0b5-ee6ce21b4ed8","savedPayload":{"position":{"x":6441.504007662385,"y":17352.83875923661},"targetPosition":{"x":6464.96917741842,"y":17500.99201032588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Slope","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.slope","project":"Superalgos","id":"567bc3e1-3a15-43f1-9bf4-625c7ad1cad8","savedPayload":{"position":{"x":6491.101293235333,"y":17252.36153648381},"targetPosition":{"x":6480.648446908568,"y":17351.81372602064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c6f2ce73-44ac-4515-bcc3-b394fa3a66e4","savedPayload":{"position":{"x":6480.648446908568,"y":17351.81372602064},"targetPosition":{"x":6464.96917741842,"y":17500.99201032588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ce4c7ca-3496-4df8-9d57-335d40cc77a0","savedPayload":{"position":{"x":6464.96917741842,"y":17500.99201032588},"targetPosition":{"x":6586.990170341161,"y":17775.05564761866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f8c4b699-1f40-4832-b427-68da3341daa8","savedPayload":{"position":{"x":6586.990170341161,"y":17775.05564761866},"targetPosition":{"x":6775.786287656112,"y":18008.19943605575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"x"}}},{"type":"Plotter Module","name":"Bollinger Channels","config":"{\n\"codeName\": \"Bollinger-Channels\",\n \"icon\": \"layer-trends\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Bollinger Channels","config":"{ \n\"codeName\": \"Bollinger Channels\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"f1bb6cde-263f-4582-aeef-8e0bed99d53f","savedPayload":{"position":{"x":6413.819204855814,"y":17245.796931563695},"targetPosition":{"x":6472.597730085061,"y":17326.69863100119},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b7afdb03-dc66-4f9a-b3c7-e8886521b7cc","savedPayload":{"position":{"x":6472.597730085061,"y":17326.69863100119},"targetPosition":{"x":6560.765517928932,"y":17448.051180157432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"991dd9e3-c5d0-4a61-953a-81b3ee218695","savedPayload":{"position":{"x":6534.633402112019,"y":17199.420706315363},"targetPosition":{"x":6545.086248438784,"y":17298.87289585219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1fbd683b-9294-456f-9464-97d887a49cdc","savedPayload":{"position":{"x":6545.086248438784,"y":17298.87289585219},"targetPosition":{"x":6560.765517928932,"y":17448.051180157432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"abb4f289-c374-43e0-b8dc-d586d8e3328e","savedPayload":{"position":{"x":6560.765517928932,"y":17448.051180157432},"targetPosition":{"x":6668.275902792522,"y":17728.12530810659},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a045ea45-c8ff-49a5-86cd-5d38cd3e6d22","savedPayload":{"position":{"x":6668.275902792522,"y":17728.12530810659},"targetPosition":{"x":6775.786287656112,"y":18008.19943605575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Bollinger Sub Channels","config":"{\n\"codeName\": \"Bollinger-Sub-Channels\",\n\"icon\": \"layer-trends\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Bollinger Sub Channels","config":"{ \n\"codeName\": \"Bollinger Sub Channels\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"6b969637-0945-4ae4-970c-49f8fd940fd2","savedPayload":{"position":{"x":6636.756939708272,"y":17183.375394115545},"targetPosition":{"x":6679.808049389101,"y":17273.63392255053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"67136278-2bc4-4814-b71a-0fd87c85b422","savedPayload":{"position":{"x":6679.808049389101,"y":17273.63392255053},"targetPosition":{"x":6744.384713910345,"y":17409.02171520301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"0e6dcc09-7f32-431f-ab15-08764e0ad29b","savedPayload":{"position":{"x":6731.30072484961,"y":17159.364331514364},"targetPosition":{"x":6736.534320473904,"y":17259.22728498982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"24f260af-1679-444e-9d08-17f39b3af2a8","savedPayload":{"position":{"x":6736.534320473904,"y":17259.22728498982},"targetPosition":{"x":6744.384713910345,"y":17409.02171520301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Slope","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.slope","project":"Superalgos","id":"bd4510b2-1062-4142-81b7-207b292d36c6","savedPayload":{"position":{"x":6827.836428718789,"y":17173.361342429966},"targetPosition":{"x":6794.455742795411,"y":17267.625491539184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c520fa0d-f783-4f91-8951-d83cfe470522","savedPayload":{"position":{"x":6794.455742795411,"y":17267.625491539184},"targetPosition":{"x":6744.384713910345,"y":17409.02171520301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1beae26c-7235-46ef-a732-1d0c9f18dda5","savedPayload":{"position":{"x":6744.384713910345,"y":17409.02171520301},"targetPosition":{"x":6760.085500783229,"y":17708.61057562938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"88bdc751-5a1d-499d-a4ba-888dbcf6dc7a","savedPayload":{"position":{"x":6760.085500783229,"y":17708.61057562938},"targetPosition":{"x":6775.786287656112,"y":18008.19943605575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"343f37be-cc77-4513-a296-7925edfcf0c4","savedPayload":{"position":{"x":6775.786287656112,"y":18008.19943605575},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Plotter Candles Channels","config":"{\n\"codeName\" : \"Candles Channels\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Candles Channels","config":"{ \n\"codeName\": \"Candles Channels\",\n\"icon\": \"layer-trends\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Candles Channels","config":"{ \n\"codeName\": \"Candles Channels\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"34e4348e-6bc2-4626-8d84-070efa8e81e2","savedPayload":{"position":{"x":6554.95609463541,"y":17411.51733849713},"targetPosition":{"x":6619.234855604064,"y":17488.12178280903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eeb8fe38-bb85-441a-933f-d44fc990d037","savedPayload":{"position":{"x":6619.234855604064,"y":17488.12178280903},"targetPosition":{"x":6683.513616572718,"y":17564.72622712093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"facfde0d-c82e-40f5-9659-2b844def9ddd","savedPayload":{"position":{"x":6648.7839810393325,"y":17367.764676518487},"targetPosition":{"x":6666.148798806025,"y":17466.24545181971},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7991ff70-72ba-44e0-a980-75f0b13672b5","savedPayload":{"position":{"x":6666.148798806025,"y":17466.24545181971},"targetPosition":{"x":6683.513616572718,"y":17564.72622712093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d21f5c62-0455-4671-89c1-f9d96a75f349","savedPayload":{"position":{"x":6683.513616572718,"y":17564.72622712093},"targetPosition":{"x":6746.906355833823,"y":17700.672395176425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"864f26cb-b191-47c1-801e-57bb2436294e","savedPayload":{"position":{"x":6746.906355833823,"y":17700.672395176425},"targetPosition":{"x":6873.691834356033,"y":17972.56473128742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Candles Channels Objects","config":"{ \n\"codeName\": \"Candles Channels Objects\",\n\"icon\": \"layer-trends\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"First Min","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.firstMin","project":"Superalgos","id":"35f51e5f-816b-4067-9c32-b6a95aae79a3","savedPayload":{"position":{"x":6413.750762789125,"y":16970.003826995136},"targetPosition":{"x":6534.329291881707,"y":17059.227245007838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"91a70976-e9d9-4d8e-9f83-719cab4d1497","savedPayload":{"position":{"x":6534.329291881707,"y":17059.227245007838},"targetPosition":{"x":6654.907820974289,"y":17148.45066302054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Last Min","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.lastMin","project":"Superalgos","id":"f4c70158-779d-4ea9-a50c-1610ded698f5","savedPayload":{"position":{"x":6444.635041684334,"y":16934.475528274288},"targetPosition":{"x":6549.771431329312,"y":17041.463095647414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"588627dd-bbc9-4ca5-b413-52dd000e6f30","savedPayload":{"position":{"x":6549.771431329312,"y":17041.463095647414},"targetPosition":{"x":6654.907820974289,"y":17148.45066302054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Last Max","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.lastMax","project":"Superalgos","id":"02969b43-c942-49a2-a50c-3b11f20dc61c","savedPayload":{"position":{"x":6480.696934261008,"y":16904.216007513645},"targetPosition":{"x":6567.802377617649,"y":17026.333335267092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb4d4b7c-cb3c-4855-8016-88a4df1b667b","savedPayload":{"position":{"x":6567.802377617649,"y":17026.333335267092},"targetPosition":{"x":6654.907820974289,"y":17148.45066302054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"First Max","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.firstMax","project":"Superalgos","id":"6a44702b-c381-4dc2-beaa-005d5dfc7e59","savedPayload":{"position":{"x":6521.048477041346,"y":16879.970354539935},"targetPosition":{"x":6587.978149007818,"y":17014.210508780237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7cf30b7b-b68a-46e4-9c89-65fa7859be97","savedPayload":{"position":{"x":6587.978149007818,"y":17014.210508780237},"targetPosition":{"x":6654.907820974289,"y":17148.45066302054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cfed2fd2-3791-4c86-ac53-f248831fa7a1","savedPayload":{"position":{"x":6654.907820974289,"y":17148.45066302054},"targetPosition":{"x":6847.744103880251,"y":17378.263995956233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"e06b5939-31b9-477b-81a2-1aaf3475144e","savedPayload":{"position":{"x":6750.381984368354,"y":16536.10681640123},"targetPosition":{"x":6887.2451815743025,"y":16803.068359044668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Side'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.LIGHT\"\n}","project":"Superalgos","id":"8bf6a1ad-69e9-44ff-8e3a-4f70fe523572","savedPayload":{"position":{"x":6685.551501673124,"y":16237.98459579543},"targetPosition":{"x":6786.398341623713,"y":16520.526477420048},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"76a1c12f-0b87-40c2-9dae-6768884a5076","savedPayload":{"position":{"x":6786.398341623713,"y":16520.526477420048},"targetPosition":{"x":6887.2451815743025,"y":16803.068359044668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR. GREEN\"\n}","project":"Superalgos","id":"a57b9ead-b4b8-40e3-82df-1461cad237c0","savedPayload":{"position":{"x":6761.035250967005,"y":16216.492657693085},"targetPosition":{"x":6824.140216270654,"y":16509.780508368876},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d3d09c74-7274-4fce-8413-815c1ad546ee","savedPayload":{"position":{"x":6824.140216270654,"y":16509.780508368876},"targetPosition":{"x":6887.2451815743025,"y":16803.068359044668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Down'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"2f1ff3f4-94a9-4a3d-b290-fbde30b79e7e","savedPayload":{"position":{"x":6838.67848716558,"y":16205.037192470376},"targetPosition":{"x":6862.961834369941,"y":16504.052775757522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"75f374ef-accc-444d-856f-ba01eba29ced","savedPayload":{"position":{"x":6862.961834369941,"y":16504.052775757522},"targetPosition":{"x":6887.2451815743025,"y":16803.068359044668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"atMousePosition === true","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.1\n}","project":"Superalgos","id":"4361ea11-4004-44d7-a94c-9bf27aa75a64","savedPayload":{"position":{"x":6917.152712970721,"y":16203.814206313315},"targetPosition":{"x":6902.198947272512,"y":16503.441282678992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"db98a447-4c7f-43bd-9b9f-d94978b05e14","savedPayload":{"position":{"x":6902.198947272512,"y":16503.441282678992},"targetPosition":{"x":6887.2451815743025,"y":16803.068359044668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a7862bd3-6421-4855-86aa-6b2f86b9dde2","savedPayload":{"position":{"x":6887.2451815743025,"y":16803.068359044668},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"702d82d3-6978-4c3e-8ffc-cd6f33318efd","savedPayload":{"position":{"x":6920.894238146818,"y":16650.09883748263},"targetPosition":{"x":6954.090041256576,"y":16796.379521976167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Side'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\"\n}","project":"Superalgos","id":"875f9634-88be-4f74-8adc-bb6b5b284a96","savedPayload":{"position":{"x":6934.282507129107,"y":16497.034133516965},"targetPosition":{"x":6944.186274192842,"y":16646.706827746566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6a9f57c4-7ce6-45b3-a2c2-82ff785f32e4","savedPayload":{"position":{"x":6944.186274192842,"y":16646.706827746566},"targetPosition":{"x":6954.090041256576,"y":16796.379521976167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n}","project":"Superalgos","id":"3bbfe7c5-b635-4b18-94b5-06ac68408de9","savedPayload":{"position":{"x":6981.3543064488085,"y":16497.6209909791},"targetPosition":{"x":6967.722173852692,"y":16647.000256477633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b99aaa3f-25d7-4570-b689-60eb4200b42c","savedPayload":{"position":{"x":6967.722173852692,"y":16647.000256477633},"targetPosition":{"x":6954.090041256576,"y":16796.379521976167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.direction === 'Down'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"897c7976-49b7-401c-a3f0-5d5a5f4edfca","savedPayload":{"position":{"x":7027.75476907457,"y":16505.564274997094},"targetPosition":{"x":6990.922405165573,"y":16650.97189848663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"06096ed6-281e-4075-a709-2fd07c18fa9c","savedPayload":{"position":{"x":6990.922405165573,"y":16650.97189848663},"targetPosition":{"x":6954.090041256576,"y":16796.379521976167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7c42653b-6268-4c6b-ab1c-522e044bc761","savedPayload":{"position":{"x":6954.090041256576,"y":16796.379521976167},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"First Min","project":"Superalgos","id":"67773b40-e975-42a8-b994-b94ff359cc52","savedPayload":{"position":{"x":7020.747367018266,"y":16804.732768624726},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"First Min","id":"91a70976-e9d9-4d8e-9f83-719cab4d1497"}}},{"type":"Polygon Vertex","name":"Last Min","project":"Superalgos","id":"edd79469-619d-4723-b678-1c415b3ebecb","savedPayload":{"position":{"x":7083.874682208929,"y":16827.70923232327},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Last Min","id":"588627dd-bbc9-4ca5-b413-52dd000e6f30"}}},{"type":"Polygon Vertex","name":"Last Max","project":"Superalgos","id":"5a204cef-fd62-4c53-af97-79f9963f70cb","savedPayload":{"position":{"x":7140.306519648194,"y":16864.15677724059},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Last Max","id":"eb4d4b7c-cb3c-4855-8016-88a4df1b667b"}}},{"type":"Polygon Vertex","name":"First Max","project":"Superalgos","id":"32e5e2d7-3818-4e0c-b36f-712da90e4025","savedPayload":{"position":{"x":7187.2131513680215,"y":16912.247771282844},"targetPosition":{"x":6950.350146877951,"y":17096.35620972046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"First Max","id":"7cf30b7b-b68a-46e4-9c89-65fa7859be97"}}}],"id":"5383ea8f-c9ed-463e-a7d4-dc5cb6c40dff","savedPayload":{"position":{"x":6950.350146877951,"y":17096.35620972046},"targetPosition":{"x":6847.744103880251,"y":17378.263995956233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"9651d021-d2af-4172-bc8f-7265407cf181","savedPayload":{"position":{"x":6847.744103880251,"y":17378.263995956233},"targetPosition":{"x":6899.83855718033,"y":17673.706321859896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"o"}}},"panels":[{"type":"Plotter Panel","name":"Candles Channels Objects","config":"{ \n\"codeName\": \"Candles Channels Objects\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.direction","project":"Superalgos","id":"daf86ccc-bbf4-4a18-bcd8-583ded1b98a7","savedPayload":{"position":{"x":7188.993613859624,"y":17481.756060661486},"targetPosition":{"x":7112.389169547726,"y":17546.03482163014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"73bc1fd7-799b-4b19-98fa-856575b9ad33","savedPayload":{"position":{"x":7112.389169547726,"y":17546.03482163014},"targetPosition":{"x":7035.784725235828,"y":17610.313582598792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Total Periods","config":"{\n \n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.period","project":"Superalgos","id":"32edb120-129e-4734-bfd1-224213e3e8f8","savedPayload":{"position":{"x":7232.74627583827,"y":17575.583947065403},"targetPosition":{"x":7134.265500537049,"y":17592.948764832097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6384ead6-8afc-490a-a6db-055b7b622877","savedPayload":{"position":{"x":7134.265500537049,"y":17592.948764832097},"targetPosition":{"x":7035.784725235828,"y":17610.313582598792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8b63674c-b728-4a00-8b3c-331d7ba2a93b","savedPayload":{"position":{"x":7035.784725235828,"y":17610.313582598792},"targetPosition":{"x":6899.83855718033,"y":17673.706321859896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7aa1e889-ae4f-4945-b0e5-9ad87ded05a5","savedPayload":{"position":{"x":6899.83855718033,"y":17673.706321859896},"targetPosition":{"x":6873.691834356033,"y":17972.56473128742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7c38b69d-fabc-4ca6-b35e-6fef6f1d8b13","savedPayload":{"position":{"x":6873.691834356033,"y":17972.56473128742},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Resistances And Supports","config":"{ \n\"codeName\": \"Resistances-And-Supports\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Resistances","config":"{ \n\"codeName\": \"Resistances-And-Supports\",\n\"icon\": \"layer-resistance\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Base Resistance","project":"Superalgos","points":[{"type":"Point","name":"Base Left","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin - (record.end - record.begin)\ny = record.rateResistance","project":"Superalgos","id":"5781a245-e686-4b11-a000-2fa096a32d87","savedPayload":{"position":{"x":10160.64019886357,"y":8862.470623209347},"targetPosition":{"x":10859.185306432435,"y":8245.406461509127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6e8169a3-28a2-412f-8100-577c4a9a97bb","savedPayload":{"position":{"x":10859.185306432435,"y":8245.406461509127},"targetPosition":{"x":11557.75149974702,"y":7628.311048237983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Base Right","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end- (record.end - record.begin)\ny = record.rateResistance","project":"Superalgos","id":"5a15539d-b94c-4110-a165-9a3bb5fc4fed","savedPayload":{"position":{"x":9730.622705384787,"y":7998.432446799141},"targetPosition":{"x":10644.152617026488,"y":7813.366440669799},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b23883d4-d592-4d0a-822e-82165e22598f","savedPayload":{"position":{"x":10644.152617026488,"y":7813.366440669799},"targetPosition":{"x":11557.75149974702,"y":7628.311048237983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8da1ef7b-5f0a-477b-9179-2c09c2fbdeb8","savedPayload":{"position":{"x":6249.163511340697,"y":17972.87244968553},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Levels","project":"Superalgos","points":[{"type":"Point","name":"Begin 1","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance1Rate","project":"Superalgos","id":"3c34f0a9-1a8e-4452-803c-ea488111c3a5","savedPayload":{"position":{"x":12059.564957052662,"y":10303.386103605379},"targetPosition":{"x":11903.917502510143,"y":9693.441241462462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2a3a3e15-93dd-43f0-95f7-ae2ed478607f","savedPayload":{"position":{"x":11903.917502510143,"y":9693.441241462462},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 1","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance1Rate","project":"Superalgos","id":"d1968565-ac35-4c42-9760-2b46f17bae96","savedPayload":{"position":{"x":11879.933902586617,"y":10336.649129244044},"targetPosition":{"x":11812.773699876088,"y":9710.762138166945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe77f4a2-627c-4f27-9d4c-2dab9ddd8926","savedPayload":{"position":{"x":11812.773699876088,"y":9710.762138166945},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 2","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance2Rate","project":"Superalgos","id":"fe7ad1f2-d9b5-4e47-af1c-7d29b86e1a0a","savedPayload":{"position":{"x":11699.0122111411,"y":10343.628559531797},"targetPosition":{"x":11721.38955043843,"y":9714.566639697125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"71ddeaf4-849d-4973-9b6a-a2ddcaccb86d","savedPayload":{"position":{"x":11721.38955043843,"y":9714.566639697125},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 2","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance2Rate","project":"Superalgos","id":"992d9a81-4292-4943-bc67-c6ce84ed7e3a","savedPayload":{"position":{"x":11519.390289931336,"y":10324.438210499726},"targetPosition":{"x":11631.09039421289,"y":9705.036299600622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"19746197-9ebc-4af8-b4ba-8217fa0eba77","savedPayload":{"position":{"x":11631.09039421289,"y":9705.036299600622},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 3","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance3Rate","project":"Superalgos","id":"c29b8386-bb00-4b15-92ee-fa280c7b721f","savedPayload":{"position":{"x":11344.63301599169,"y":10279.856078309616},"targetPosition":{"x":11543.400023446815,"y":9682.755540734512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"febd94d0-09c7-40c5-b7b2-552ca2cca2b9","savedPayload":{"position":{"x":11543.400023446815,"y":9682.755540734512},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 3","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance3Rate","project":"Superalgos","id":"ff8a40a3-ebed-4e5a-854b-2ca20f2bc441","savedPayload":{"position":{"x":11178.232119455603,"y":10210.975563790687},"targetPosition":{"x":11459.956621028901,"y":9648.202740165694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7003801a-ea76-43e2-a013-72e6d41aff5c","savedPayload":{"position":{"x":11459.956621028901,"y":9648.202740165694},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 4","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance4Rate","project":"Superalgos","id":"f927d491-29ca-4b19-aa80-c413e4148b38","savedPayload":{"position":{"x":11023.397901079203,"y":10119.104781862205},"targetPosition":{"x":11382.383843099386,"y":9602.113852720951},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12059a23-6280-499c-8ebc-f8c0de0e5647","savedPayload":{"position":{"x":11382.383843099386,"y":9602.113852720951},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 4","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance4Rate","project":"Superalgos","id":"8a5e95cc-9871-49e8-a610-bff6fc2883a4","savedPayload":{"position":{"x":10883.226349107277,"y":10006.151401197325},"targetPosition":{"x":11312.168788343173,"y":9545.501456532762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e5e4668-102d-4d9a-addc-9b154e7889a9","savedPayload":{"position":{"x":11312.168788343173,"y":9545.501456532762},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 5","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance5Rate","project":"Superalgos","id":"ac834b1e-4605-456b-8861-2fcf9f2eb9db","savedPayload":{"position":{"x":10760.632090853029,"y":9874.298331959159},"targetPosition":{"x":11250.82823638896,"y":9479.413516711147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1cebdfa8-d6f3-44fb-bf7e-0f8bfaeff946","savedPayload":{"position":{"x":11250.82823638896,"y":9479.413516711147},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 5","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance5Rate","project":"Superalgos","id":"b8fc5e20-494e-471d-8f0e-97d42a64094b","savedPayload":{"position":{"x":10652.883902763533,"y":9715.837900534652},"targetPosition":{"x":11194.364489542266,"y":9394.876098783325},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bbc97ad3-5c93-460f-8463-127d21e3dca4","savedPayload":{"position":{"x":11194.364489542266,"y":9394.876098783325},"targetPosition":{"x":11742.569411727927,"y":9083.793204056443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d0075edc-e3f2-4d8f-84ba-900c9b431782","savedPayload":{"position":{"x":6184.936258074342,"y":17935.475497139138},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Zone 1","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance1Rate - record.resistance1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"a86b7e96-ad20-45e9-85f9-811c71852651","savedPayload":{"position":{"x":10908.636076997664,"y":7790.704166235226},"targetPosition":{"x":11095.436482018602,"y":7649.79913927981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0c275c7e-5012-454c-8772-a3c2f1621567","savedPayload":{"position":{"x":11095.436482018602,"y":7649.79913927981},"targetPosition":{"x":11468.456967720584,"y":7368.465209823147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance1Rate - record.resistance1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"39fdd36d-0413-47d2-92d9-3257837c89de","savedPayload":{"position":{"x":10789.483416695162,"y":7621.652301078884},"targetPosition":{"x":11022.157392646095,"y":7537.622696148534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e4ca8d91-e86c-4b97-b327-a1a631b28ade","savedPayload":{"position":{"x":11022.157392646095,"y":7537.622696148534},"targetPosition":{"x":11468.456967720584,"y":7368.465209823147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance1Rate + record.resistance1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"e9e224f5-1483-4d72-97f7-13cbd566ce75","savedPayload":{"position":{"x":10771.128961306767,"y":7427.140917749181},"targetPosition":{"x":10994.247816534138,"y":7392.745790183633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1614af55-2a6c-40a5-9339-958d2944f719","savedPayload":{"position":{"x":10994.247816534138,"y":7392.745790183633},"targetPosition":{"x":11468.456967720584,"y":7368.465209823147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance1Rate + record.resistance1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"552f846f-64f1-4d31-b37d-2da573c20b7f","savedPayload":{"position":{"x":10824.342465907263,"y":7157.737936453245},"targetPosition":{"x":11045.507183042646,"y":7226.134984213325},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e6764b3a-2fdb-4df1-abde-1f6e9fca5a27","savedPayload":{"position":{"x":11045.507183042646,"y":7226.134984213325},"targetPosition":{"x":11468.456967720584,"y":7368.465209823147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1db48443-fc08-4f05-bf9e-4be80c377fe2","savedPayload":{"position":{"x":6127.740316910683,"y":17888.01713184596},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Zone 2","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance2Rate - record.resistance2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"31533409-bde7-41ad-b252-1c80e8874519","savedPayload":{"position":{"x":10863.64400266398,"y":7661.09672176588},"targetPosition":{"x":11061.725319119592,"y":7536.595809015913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"055d64bb-b823-4593-b606-4f0a35ac620a","savedPayload":{"position":{"x":11061.725319119592,"y":7536.595809015913},"targetPosition":{"x":11457.295448358629,"y":7287.985673057974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance2Rate - record.resistance2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"ab6b9bed-1420-4c4f-b572-73274d1beeff","savedPayload":{"position":{"x":10759.150740364355,"y":7480.003279960283},"targetPosition":{"x":10998.928980181645,"y":7415.79948403058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6d8e2772-7475-406d-b048-4599982d04e2","savedPayload":{"position":{"x":10998.928980181645,"y":7415.79948403058},"targetPosition":{"x":11457.295448358629,"y":7287.985673057974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance2Rate + record.resistance2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"54021cad-c5f9-4756-94a4-6216e9e0bcf7","savedPayload":{"position":{"x":10758.04773805499,"y":7288.6882299415465},"targetPosition":{"x":10985.562129731821,"y":7272.443438781498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d3cc8bbf-1f3e-49bc-9331-5e498064cb88","savedPayload":{"position":{"x":10985.562129731821,"y":7272.443438781498},"targetPosition":{"x":11457.295448358629,"y":7287.985673057974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance2Rate + record.resistance2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"e44758af-409b-4797-ac44-0cdc0928dfa4","savedPayload":{"position":{"x":10833.626282454006,"y":7026.440369273133},"targetPosition":{"x":11043.492517547038,"y":7112.031934978032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e2c53993-70fa-48f0-96b0-3c73a3baa50f","savedPayload":{"position":{"x":11043.492517547038,"y":7112.031934978032},"targetPosition":{"x":11457.295448358629,"y":7287.985673057974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2881845a-2d94-42f8-bffd-12b8f0674dc6","savedPayload":{"position":{"x":6079.1358440259755,"y":17831.791894296464},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Zone 3","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance3Rate - record.resistance3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"b863599f-a422-4d49-be0c-5962371d571d","savedPayload":{"position":{"x":10833.323641650546,"y":7532.689465639097},"targetPosition":{"x":11041.148359727125,"y":7425.618740061745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e18fe7d1-bb71-4228-89ad-6eef714ec53f","savedPayload":{"position":{"x":11041.148359727125,"y":7425.618740061745},"targetPosition":{"x":11456.103352418591,"y":7211.851545773281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance3Rate - record.resistance3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"aa5baeac-1910-4f48-a6c2-b3ffb7293d4a","savedPayload":{"position":{"x":10764.350053452694,"y":7324.083130816976},"targetPosition":{"x":10995.273606916482,"y":7286.682103142071},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"30f76ba8-3516-4b19-bb42-ae4613d5ce10","savedPayload":{"position":{"x":10995.273606916482,"y":7286.682103142071},"targetPosition":{"x":11456.103352418591,"y":7211.851545773281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance3Rate + record.resistance3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"a6a1afe8-e380-4979-ba63-703903bc50db","savedPayload":{"position":{"x":10763.32498397609,"y":7105.238342896862},"targetPosition":{"x":10994.65462017803,"y":7140.7876137210305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fc07018f-23a9-46dc-bb6a-f6ddac68be6c","savedPayload":{"position":{"x":10994.65462017803,"y":7140.7876137210305},"targetPosition":{"x":11456.103352418591,"y":7211.851545773281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance3Rate + record.resistance3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"84cba419-b3e2-4cfc-9c32-69a2a56aa550","savedPayload":{"position":{"x":10830.609907476246,"y":6895.86356422493},"targetPosition":{"x":11039.31789951558,"y":7001.355859493249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d4105484-8b89-48f5-af7f-964d2e541120","savedPayload":{"position":{"x":11039.31789951558,"y":7001.355859493249},"targetPosition":{"x":11456.103352418591,"y":7211.851545773281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a833c73a-2d81-40b3-9d44-3388046804ce","savedPayload":{"position":{"x":6040.44864273811,"y":17768.33346240275},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Zone 4","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance4Rate - record.resistance4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"02bf9b17-6651-4e71-bef8-8bb2ba8fe6b3","savedPayload":{"position":{"x":10809.072636304252,"y":7396.122336126922},"targetPosition":{"x":11025.318834723254,"y":7307.089731706234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"79408eb2-e914-4f85-96c6-0baa918f5f91","savedPayload":{"position":{"x":11025.318834723254,"y":7307.089731706234},"targetPosition":{"x":11457.209060973652,"y":7129.172223298096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance4Rate - record.resistance4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"64545435-1cc4-4cd5-9c6e-700f76fb976d","savedPayload":{"position":{"x":10758.186539830509,"y":7182.438786292131},"targetPosition":{"x":10991.443947657273,"y":7164.698431793807},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9479606b-5668-40a4-8e34-40976668e11b","savedPayload":{"position":{"x":10991.443947657273,"y":7164.698431793807},"targetPosition":{"x":11457.209060973652,"y":7129.172223298096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance4Rate + record.resistance4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"fc0e0a28-306b-42cc-95b2-d0264ca224b3","savedPayload":{"position":{"x":10775.901692849107,"y":6964.0807231045765},"targetPosition":{"x":11003.251720224107,"y":7019.139536521219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"09f1f62c-723a-4588-ae76-d195aa1cb276","savedPayload":{"position":{"x":11003.251720224107,"y":7019.139536521219},"targetPosition":{"x":11457.209060973652,"y":7129.172223298096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance4Rate + record.resistance4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"1a8ba3fb-7c20-4c56-a7e5-e9bb8ab8b00b","savedPayload":{"position":{"x":10860.474908388958,"y":6761.387977509147},"targetPosition":{"x":11059.576325338276,"y":6884.071946768019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"98ef8287-1ef2-498f-ae25-580a148f8fae","savedPayload":{"position":{"x":11059.576325338276,"y":6884.071946768019},"targetPosition":{"x":11457.209060973652,"y":7129.172223298096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"10d84102-de4a-4f5e-b511-8d948b16c186","savedPayload":{"position":{"x":6012.7339990482105,"y":17699.372816763083},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Resistance Zone 5","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance5Rate - record.resistance5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"8fff05a9-9d0e-4dcb-ba56-15e7758ed61e","savedPayload":{"position":{"x":10798.159923478313,"y":7261.442326840804},"targetPosition":{"x":11021.18822967912,"y":7191.077930230575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8ae90185-2a00-4958-95c1-83aa4b6402ee","savedPayload":{"position":{"x":11021.18822967912,"y":7191.077930230575},"targetPosition":{"x":11466.650961452695,"y":7050.444470855126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance5Rate - record.resistance5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"d1499c5d-5a9b-428a-abfe-d05d946bbfff","savedPayload":{"position":{"x":10765.597123630581,"y":7044.660758858207},"targetPosition":{"x":10999.525809342962,"y":7046.553036907002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1f76e686-6537-4818-a4c8-f70dc4ec3c4f","savedPayload":{"position":{"x":10999.525809342962,"y":7046.553036907002},"targetPosition":{"x":11466.650961452695,"y":7050.444470855126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.resistance5Rate + record.resistance5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"e54f3a16-7835-487d-8b09-6dc517bda1d9","savedPayload":{"position":{"x":10801.800877763068,"y":6828.149116979034},"targetPosition":{"x":11023.650900719611,"y":6902.297912000938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"72bab256-b619-4bb5-b188-e3da6d412f2f","savedPayload":{"position":{"x":11023.650900719611,"y":6902.297912000938},"targetPosition":{"x":11466.650961452695,"y":7050.444470855126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.resistance5Rate + record.resistance5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"d5530e82-a1fb-4108-ac6e-ada9fe0b161b","savedPayload":{"position":{"x":10903.244926906915,"y":6633.363649428362},"targetPosition":{"x":11091.220787800565,"y":6772.496963909963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ee66793e-1c2d-4a17-8c0c-f086656eb0a6","savedPayload":{"position":{"x":11091.220787800565,"y":6772.496963909963},"targetPosition":{"x":11466.650961452695,"y":7050.444470855126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e6120640-850a-4f6f-a55a-b3e7dbca6ab5","savedPayload":{"position":{"x":5996.747896189456,"y":17626.791024023536},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Resistance Line 1","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance1Rate > 0","project":"Superalgos","id":"2a6b550a-7631-4e45-b740-9c46586d71a3","savedPayload":{"position":{"x":5552.292901165447,"y":17643.90316342147},"targetPosition":{"x":5992.926393375171,"y":17552.567926283424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"8f2da42d-c563-4db6-b431-78520c3c282e","savedPayload":{"position":{"x":5093.933309990619,"y":17595.128894631634},"targetPosition":{"x":5543.429851682895,"y":17573.84841045753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ab5ed6ec-35cf-4709-b14d-548495163c99","savedPayload":{"position":{"x":5543.429851682895,"y":17573.84841045753},"targetPosition":{"x":5992.926393375171,"y":17552.567926283424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 1","project":"Superalgos","id":"366d0b55-988c-4995-8dcb-8738605be64b","savedPayload":{"position":{"x":5545.6348988503005,"y":17503.26966134734},"targetPosition":{"x":5992.926393375171,"y":17552.567926283424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 1","id":"2a3a3e15-93dd-43f0-95f7-ae2ed478607f"}}},{"type":"Polygon Vertex","name":"End 1","project":"Superalgos","id":"7f2cb9ed-59bc-4f03-bf33-f34ca52db445","savedPayload":{"position":{"x":5558.853747088271,"y":17433.90479913144},"targetPosition":{"x":5992.926393375171,"y":17552.567926283424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 1","id":"fe77f4a2-627c-4f27-9d4c-2dab9ddd8926"}}}],"id":"0c38b25a-d207-430e-ae5a-9ba55227c974","savedPayload":{"position":{"x":5992.926393375171,"y":17552.567926283424},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Line 2","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance2Rate > 0","project":"Superalgos","id":"27b432e9-4988-4457-8e68-13a06a1341fb","savedPayload":{"position":{"x":10850.422428889626,"y":8514.869680923171},"targetPosition":{"x":11434.635868687958,"y":8277.984496122801},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TURQUOISE\"\n }\n}","project":"Superalgos","id":"500b1402-adbe-46d7-9410-92a9cc84b492","savedPayload":{"position":{"x":10206.480248551972,"y":8563.13973244857},"targetPosition":{"x":10820.558058619965,"y":8420.562114285685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c1565617-e60a-4688-bcaf-061fb5ef8f02","savedPayload":{"position":{"x":10820.558058619965,"y":8420.562114285685},"targetPosition":{"x":11434.635868687958,"y":8277.984496122801},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 2","project":"Superalgos","id":"b06bed94-85e8-4405-8372-fa5af8fa10f4","savedPayload":{"position":{"x":10805.814322041584,"y":8322.743813501045},"targetPosition":{"x":11434.635868687958,"y":8277.984496122801},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 2","id":"71ddeaf4-849d-4973-9b6a-a2ddcaccb86d"}}},{"type":"Polygon Vertex","name":"End 2","project":"Superalgos","id":"a6ad0c69-98e2-459a-a5e4-28b863e7e679","savedPayload":{"position":{"x":10806.5542588807,"y":8223.823389774894},"targetPosition":{"x":11434.635868687958,"y":8277.984496122801},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 2","id":"19746197-9ebc-4af8-b4ba-8217fa0eba77"}}}],"id":"532beef7-8d2e-4899-9c99-850db799d9a2","savedPayload":{"position":{"x":6001.373731240216,"y":17478.72813616393},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Line 3","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance3Rate > 0","project":"Superalgos","id":"6532e5e3-4b6f-4f9b-a52f-f42d588109aa","savedPayload":{"position":{"x":10814.604361591835,"y":8331.199107656274},"targetPosition":{"x":11427.59852472565,"y":8184.032229647753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"f0c15419-ec71-4bfd-8be7-14b5f7ab6213","savedPayload":{"position":{"x":10170.660205499556,"y":8282.955420744114},"targetPosition":{"x":10799.129365112603,"y":8233.493825195934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"3122acb4-11b4-4b42-801d-e6f0f3bc88f5","savedPayload":{"position":{"x":10799.129365112603,"y":8233.493825195934},"targetPosition":{"x":11427.59852472565,"y":8184.032229647753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 3","project":"Superalgos","id":"86879433-37a4-4d4c-94b2-f56509927833","savedPayload":{"position":{"x":10799.129365112603,"y":8134.570634099573},"targetPosition":{"x":11427.59852472565,"y":8184.032229647753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 3","id":"febd94d0-09c7-40c5-b7b2-552ca2cca2b9"}}},{"type":"Polygon Vertex","name":"End 3","project":"Superalgos","id":"ced94fbd-8b64-45a4-af9d-fb2366e9c08f","savedPayload":{"position":{"x":10814.604361591835,"y":8036.865351639233},"targetPosition":{"x":11427.59852472565,"y":8184.032229647753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 3","id":"7003801a-ea76-43e2-a013-72e6d41aff5c"}}}],"id":"9eb7ed64-8225-41de-ab73-3297d19e1529","savedPayload":{"position":{"x":6021.859488428199,"y":17407.28581065354},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Line 4","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance4Rate > 0","project":"Superalgos","id":"2c5d8280-e687-4ab6-8dc4-a37d33dac54c","savedPayload":{"position":{"x":10806.566716529283,"y":8144.238002574417},"targetPosition":{"x":11434.64832633654,"y":8090.07689622651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"981c71a0-44f8-40a7-935b-de7a0d29c125","savedPayload":{"position":{"x":10177.005233043794,"y":8000.5582614700215},"targetPosition":{"x":10805.826779690167,"y":8045.317578848266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"66da2fbe-77f0-47ba-b520-cd646ffbc4bf","savedPayload":{"position":{"x":10805.826779690167,"y":8045.317578848266},"targetPosition":{"x":11434.64832633654,"y":8090.07689622651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 4","project":"Superalgos","id":"2b0a1310-20d6-45cd-a05b-ed8cbddcbb81","savedPayload":{"position":{"x":10820.570516268548,"y":7947.499278063626},"targetPosition":{"x":11434.64832633654,"y":8090.07689622651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 4","id":"12059a23-6280-499c-8ebc-f8c0de0e5647"}}},{"type":"Polygon Vertex","name":"End 4","project":"Superalgos","id":"db596f4f-6410-4250-a837-dad5cd2d61e8","savedPayload":{"position":{"x":10850.434886538209,"y":7853.19171142614},"targetPosition":{"x":11434.64832633654,"y":8090.07689622651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 4","id":"2e5e4668-102d-4d9a-addc-9b154e7889a9"}}}],"id":"b8b29e5a-49aa-45cb-b6f3-0ba78dd97899","savedPayload":{"position":{"x":6053.824866885415,"y":17340.189710155937},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Line 5","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance5Rate > 0","project":"Superalgos","id":"d29fe2ec-f038-419b-a308-caa26a5a8185","savedPayload":{"position":{"x":10826.48162823475,"y":7958.161072074059},"targetPosition":{"x":11455.620379425967,"y":7998.215607004044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"2fb5a769-94e1-480d-9e37-e95b3e6d2391","savedPayload":{"position":{"x":10225.36618057808,"y":7722.254844770076},"targetPosition":{"x":10840.493280002025,"y":7860.23522588706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"5c4e3fb7-482b-4830-b279-ce65f5dde542","savedPayload":{"position":{"x":10840.493280002025,"y":7860.23522588706},"targetPosition":{"x":11455.620379425967,"y":7998.215607004044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 5","project":"Superalgos","id":"94bd59ac-0e4f-4f0c-a8fc-98dda2d4f485","savedPayload":{"position":{"x":10869.651402446914,"y":7765.706914613791},"targetPosition":{"x":11455.620379425967,"y":7998.215607004044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 5","id":"1cebdfa8-d6f3-44fb-bf7e-0f8bfaeff946"}}},{"type":"Polygon Vertex","name":"End 5","project":"Superalgos","id":"890c39f7-712c-4b93-849a-cd652f600124","savedPayload":{"position":{"x":10913.238025824568,"y":7676.903738999281},"targetPosition":{"x":11455.620379425967,"y":7998.215607004044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 5","id":"bbc97ad3-5c93-460f-8463-127d21e3dca4"}}}],"id":"0582dc0b-1512-4762-8340-aabeadad6643","savedPayload":{"position":{"x":6096.397934415074,"y":17279.270041386215},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.typeResistance=== 'Resistance'","project":"Superalgos","id":"ea67ee97-0c26-4369-969a-4b207c45acf2","savedPayload":{"position":{"x":6022.181978166507,"y":16826.72653458673},"targetPosition":{"x":6392.3349540171,"y":17082.63037291072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0,\n \"paletteColor\": \"UI_COLOR.DARK\"\n }\n}","project":"Superalgos","id":"65722c8b-1977-4cfa-ba63-c2cc7434891b","savedPayload":{"position":{"x":5802.0572296741775,"y":16405.794072908324},"targetPosition":{"x":6119.377189276245,"y":16724.867799871456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.typeResistance=== 'Resistance'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\",\n \"opacity\": 0.5\n}","project":"Superalgos","id":"8322fb8f-d018-4855-a288-20ca625c95a3","savedPayload":{"position":{"x":5671.526815582765,"y":15944.207795271112},"targetPosition":{"x":5895.452002429505,"y":16334.537797571284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad690e4e-7590-4b4d-960e-97510c4fce0d","savedPayload":{"position":{"x":5895.452002429505,"y":16334.537797571284},"targetPosition":{"x":6119.377189276245,"y":16724.867799871456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c3e776eb-ac3c-49a1-b8bb-0a3b37dcff10","savedPayload":{"position":{"x":6119.377189276245,"y":16724.867799871456},"targetPosition":{"x":6392.3349540171,"y":17082.63037291072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Base Left","project":"Superalgos","id":"b6a079f5-8719-4beb-93c5-ae45a48f6bc4","savedPayload":{"position":{"x":6243.291408207391,"y":16658.029358483684},"targetPosition":{"x":6392.3349540171,"y":17082.63037291072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Left","id":"6e8169a3-28a2-412f-8100-577c4a9a97bb"}}},{"type":"Polygon Vertex","name":"Base Right","project":"Superalgos","id":"d43b33c2-6d6c-4552-85b6-07300acc05c4","savedPayload":{"position":{"x":6381.795047849839,"y":16632.75382275725},"targetPosition":{"x":6392.3349540171,"y":17082.63037291072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Right","id":"b23883d4-d592-4d0a-822e-82165e22598f"}}}],"id":"c62d156c-4686-45a4-af42-283999dd1200","savedPayload":{"position":{"x":6148.41740871467,"y":17226.18853410269},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Zone 1","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance1Bounce1 > 0","project":"Superalgos","id":"f4fdf8db-0009-4053-acdd-90f790ef2dc1","savedPayload":{"position":{"x":6110.666171190445,"y":16769.74428007707},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"678098f3-5628-4c48-baac-daaaa46f7cb6","savedPayload":{"position":{"x":5772.331310117315,"y":16884.249952398357},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"34b995fd-453d-47b9-8967-3d283ce8c5c9","savedPayload":{"position":{"x":5297.398493596465,"y":16862.433727324507},"targetPosition":{"x":5739.917738914217,"y":16780.722543736156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e9625315-0f08-473d-ae16-972cf0dacef6","savedPayload":{"position":{"x":5739.917738914217,"y":16780.722543736156},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"9c07eec3-733b-415a-9eb2-75bdbb926913","savedPayload":{"position":{"x":5284.006571281989,"y":16645.88139603593},"targetPosition":{"x":5733.221777756979,"y":16672.446378091867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e9532be-e479-4863-a652-2db78d854596","savedPayload":{"position":{"x":5733.221777756979,"y":16672.446378091867},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"055dcb1d-7351-4348-ba05-d69e35f1e5c9","savedPayload":{"position":{"x":5322.828158906483,"y":16432.416785141966},"targetPosition":{"x":5752.632571569226,"y":16565.714072644885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13ae1317-69bb-4a8a-aaa0-170868016d4a","savedPayload":{"position":{"x":5752.632571569226,"y":16565.714072644885},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"1274e868-d24c-4722-9cfb-a390e63afea4","savedPayload":{"position":{"x":5411.607086907952,"y":16234.445681915498},"targetPosition":{"x":5797.02203556996,"y":16466.72852103165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee88e538-166d-4c03-b284-d2723f8683f0","savedPayload":{"position":{"x":5797.02203556996,"y":16466.72852103165},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"c5639eed-1b4a-4374-a8ad-300810a6da68","savedPayload":{"position":{"x":5545.183846689211,"y":16063.473447280358},"targetPosition":{"x":5863.81041546059,"y":16381.24240371408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b84e5eee-04d8-4bfe-b252-409df978d9d9","savedPayload":{"position":{"x":5863.81041546059,"y":16381.24240371408},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"f74b513c-4691-4213-85ec-a8aac88886be","savedPayload":{"position":{"x":5715.795442503553,"y":15929.43636605475},"targetPosition":{"x":5949.116213367761,"y":16314.223863101277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"632d8000-8cd3-467a-96a2-08d3ae5e41fd","savedPayload":{"position":{"x":5949.116213367761,"y":16314.223863101277},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"e1f8e239-dc70-4be6-9b94-b386891c430e","savedPayload":{"position":{"x":5913.526548550162,"y":15840.124186194542},"targetPosition":{"x":6047.981766391065,"y":16269.567773171173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d7fd86f0-d41f-4d5d-88f8-de219a3013f5","savedPayload":{"position":{"x":6047.981766391065,"y":16269.567773171173},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"44c15485-4140-4f89-8491-e39df8a6acec","savedPayload":{"position":{"x":6126.885751668928,"y":15800.727406956652},"targetPosition":{"x":6154.661367950448,"y":16249.869383552228},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b8325b61-74f5-4dde-aae5-1a37ca079b8d","savedPayload":{"position":{"x":6154.661367950448,"y":16249.869383552228},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"9b3a94b1-ff98-459e-83ed-72b1fef97aa8","savedPayload":{"position":{"x":6343.4733905037465,"y":15813.535625948909},"targetPosition":{"x":6262.955187367857,"y":16256.273493048357},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2488848e-b074-47d4-b275-8e7617c2c70e","savedPayload":{"position":{"x":6262.955187367857,"y":16256.273493048357},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"29599f5b-8578-4e95-88e0-db6f3c0e4d1a","savedPayload":{"position":{"x":6550.702178749572,"y":15877.804476039473},"targetPosition":{"x":6366.56958149077,"y":16288.407918093639},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"396818ff-9a7d-4d0c-be13-67f36f687bb8","savedPayload":{"position":{"x":6366.56958149077,"y":16288.407918093639},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance1Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"4c01cb73-1bcc-4719-9a6a-0593899023a5","savedPayload":{"position":{"x":6736.528732479546,"y":15989.798885268847},"targetPosition":{"x":6459.482858355757,"y":16344.405122708326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"373bc7b9-3547-4690-a965-e98a2c32b388","savedPayload":{"position":{"x":6459.482858355757,"y":16344.405122708326},"targetPosition":{"x":6182.436984231968,"y":16699.011360147804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2cd93655-284b-4e59-9959-749211d0c13b","savedPayload":{"position":{"x":6182.436984231968,"y":16699.011360147804},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"61265cbf-c690-4531-8e1c-63012f033dec","savedPayload":{"position":{"x":6268.147908550254,"y":16646.022370547445},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"0c275c7e-5012-454c-8772-a3c2f1621567"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"d86b1af1-cc3b-4953-8e11-715de1e47305","savedPayload":{"position":{"x":6363.501040502324,"y":16613.43440047731},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"e4ca8d91-e86c-4b97-b327-a1a631b28ade"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"0a2d374a-1bef-4db3-9259-5fe2d4a4352f","savedPayload":{"position":{"x":6463.714975892104,"y":16602.88154683222},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"e6764b3a-2fdb-4df1-abde-1f6e9fca5a27"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"f22ffe77-c62c-4cc1-9c27-35e5a3831104","savedPayload":{"position":{"x":6563.764569542196,"y":16614.892973758822},"targetPosition":{"x":6460.43759147801,"y":17052.869611953287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"1614af55-2a6c-40a5-9339-958d2944f719"}}}],"id":"ca9666cf-e40b-46af-902d-050c1956b702","savedPayload":{"position":{"x":6208.464334129961,"y":17182.39311345089},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Zone 2","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance2Bounce1 > 0","project":"Superalgos","id":"8e52a153-4da1-4d25-9070-a9cab7901642","savedPayload":{"position":{"x":6234.109761975746,"y":16697.889719705072},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"0d2e9e03-1e4b-406a-8807-a56b112e4bf9","savedPayload":{"position":{"x":5881.542333200534,"y":16755.145596066883},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"909e78e1-4f46-48a0-b49f-d448973a5321","savedPayload":{"position":{"x":5416.677813895811,"y":16655.455543521588},"targetPosition":{"x":5866.610892272292,"y":16647.695067849218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb9bc072-5c45-4901-8cce-f2c26a2f4505","savedPayload":{"position":{"x":5866.610892272292,"y":16647.695067849218},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"ca020c35-f86f-4b23-a952-ac6dbb8b1826","savedPayload":{"position":{"x":5439.111882189412,"y":16439.65246581046},"targetPosition":{"x":5877.827926419093,"y":16539.793528993654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b5c6aa09-4166-4c94-9967-b91524c21464","savedPayload":{"position":{"x":5877.827926419093,"y":16539.793528993654},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"36071756-7d18-4da4-a70c-51f4c463ebba","savedPayload":{"position":{"x":5512.539114128398,"y":16235.489057287843},"targetPosition":{"x":5914.541542388586,"y":16437.711824732345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fa8a71d2-4cc4-4fbe-a186-dcae6715bdae","savedPayload":{"position":{"x":5914.541542388586,"y":16437.711824732345},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"1fd4231d-7109-4078-a500-e8392f75f443","savedPayload":{"position":{"x":5632.692185889609,"y":16054.830553153275},"targetPosition":{"x":5974.618078269192,"y":16347.382572665061},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"44d57144-5dce-4b2a-aca2-2a2fb6cce4f5","savedPayload":{"position":{"x":5974.618078269192,"y":16347.382572665061},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"dc876bc9-5380-4127-9091-b9d1855127e2","savedPayload":{"position":{"x":5792.588237680917,"y":15908.1761690001},"targetPosition":{"x":6054.5661041648455,"y":16274.055380588474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7ec7f8db-d303-479e-970d-11b1c6b585f8","savedPayload":{"position":{"x":6054.5661041648455,"y":16274.055380588474},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"0d4b045a-d31d-486e-b211-251eb97727e9","savedPayload":{"position":{"x":5982.934692170726,"y":15804.04892456832},"targetPosition":{"x":6149.73933140975,"y":16221.991758372584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78b93dc0-b51e-4e70-bf86-469ed1dc8b32","savedPayload":{"position":{"x":6149.73933140975,"y":16221.991758372584},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"a5f88045-13c6-4a79-a26d-808cbae1be55","savedPayload":{"position":{"x":6192.669305305288,"y":15748.500316817168},"targetPosition":{"x":6254.606637977031,"y":16194.217454497008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a094ed80-7548-488d-a6f7-b58b39c43d74","savedPayload":{"position":{"x":6254.606637977031,"y":16194.217454497008},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"5b2cf624-f0bf-4576-97e9-4caad311ced1","savedPayload":{"position":{"x":6409.6030637235235,"y":15744.758628918169},"targetPosition":{"x":6363.073517186149,"y":16192.346610547509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c76ac126-507c-4794-9ad4-b3541a1dae4a","savedPayload":{"position":{"x":6363.073517186149,"y":16192.346610547509},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"e177aa7b-44e6-46b7-9ba4-411fd4eb32a2","savedPayload":{"position":{"x":6621.128565908293,"y":15793.04131417153},"targetPosition":{"x":6468.836268278534,"y":16216.48795317419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94a8abfe-1c08-434a-b735-acc9eee52ea9","savedPayload":{"position":{"x":6468.836268278534,"y":16216.48795317419},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"88b78d7f-b935-4e2b-b7d2-fbe5c877a950","savedPayload":{"position":{"x":6814.952718536544,"y":15890.542358410747},"targetPosition":{"x":6565.748344592659,"y":16265.238475293798},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"731a3134-805c-432a-8ee4-44ae04ccaeb0","savedPayload":{"position":{"x":6565.748344592659,"y":16265.238475293798},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance2Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"c843d74e-15ee-4fed-aafd-20c51853dea4","savedPayload":{"position":{"x":6979.811166379637,"y":16031.595355346515},"targetPosition":{"x":6648.177568514206,"y":16335.764973761681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"70790586-ea1f-44b7-bffd-891d0eb5629a","savedPayload":{"position":{"x":6648.177568514206,"y":16335.764973761681},"targetPosition":{"x":6316.543970648774,"y":16639.934592176847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6f9d86e1-164c-4ea4-992d-2917fda244ac","savedPayload":{"position":{"x":6316.543970648774,"y":16639.934592176847},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"496ec3db-d47e-478d-be79-a266a0f1ee4b","savedPayload":{"position":{"x":6409.8076107078705,"y":16601.775857799395},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"055d64bb-b823-4593-b606-4f0a35ac620a"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"92e88ed6-dfb5-4d69-b739-2596eabe9562","savedPayload":{"position":{"x":6509.224053805425,"y":16585.3269548514},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"6d8e2772-7475-406d-b048-4599982d04e2"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"06940067-8e78-4652-80bb-53a20db38d36","savedPayload":{"position":{"x":6609.808144357608,"y":16591.412700011315},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"e2c53993-70fa-48f0-96b0-3c73a3baa50f"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"44754c48-5c48-4911-8782-729f29d1b01e","savedPayload":{"position":{"x":6706.516176061552,"y":16619.727928604956},"targetPosition":{"x":6532.5098579853475,"y":17034.72407469497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"d3cc8bbf-1f3e-49bc-9331-5e498064cb88"}}}],"id":"3032c972-5916-496b-9aec-fb9f49a9237f","savedPayload":{"position":{"x":6274.900787066268,"y":17149.07840434006},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Zone 3","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance3Bounce1 > 0","project":"Superalgos","id":"1c336053-c230-4ad3-ab58-4b85d364a707","savedPayload":{"position":{"x":6367.696615003675,"y":16647.33330912921},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"e7bdfc4c-a887-4a47-9402-e3be2aa390fa","savedPayload":{"position":{"x":6010.513738908674,"y":16645.777598479326},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"65f80810-1132-493b-86c5-b7ac04fb2e1b","savedPayload":{"position":{"x":5568.397809095339,"y":16470.93300322345},"targetPosition":{"x":6013.471719040444,"y":16537.334921013353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"af73149e-c55e-4cd1-8008-a4a0e0dc4bce","savedPayload":{"position":{"x":6013.471719040444,"y":16537.334921013353},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"1fe17781-8019-412d-bce7-e4015502c1dc","savedPayload":{"position":{"x":5626.045925095226,"y":16261.765724493103},"targetPosition":{"x":6042.295777040388,"y":16432.75128164818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"66a99f55-071a-4c17-8a4c-0a3ca27b49c5","savedPayload":{"position":{"x":6042.295777040388,"y":16432.75128164818},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"68425fb0-290a-4f0a-bc37-0afacae35c6f","savedPayload":{"position":{"x":5732.075897871924,"y":16072.472563912037},"targetPosition":{"x":6095.310763428737,"y":16338.104701357646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8b5a03e-3f6c-4e73-893f-a2ead5f90bc4","savedPayload":{"position":{"x":6095.310763428737,"y":16338.104701357646},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"3fa93e36-a9e8-49db-830d-bdceda8dd236","savedPayload":{"position":{"x":5880.325650810904,"y":15914.054551920583},"targetPosition":{"x":6169.435639898227,"y":16258.89569536192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78bcd2f8-69b6-46ae-a646-d9584ec851f6","savedPayload":{"position":{"x":6169.435639898227,"y":16258.89569536192},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"2d5b8980-b779-4c09-a2ba-eec5e1ec4ac3","savedPayload":{"position":{"x":6062.1794471373,"y":15795.718367549634},"targetPosition":{"x":6260.362538061425,"y":16199.727603176445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8aaddafc-5dcf-43a1-a4ad-2c2ecd043e2f","savedPayload":{"position":{"x":6260.362538061425,"y":16199.727603176445},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"f9981061-43b5-4e21-a886-d87c223ffdc3","savedPayload":{"position":{"x":6267.068605220258,"y":15724.341279700306},"targetPosition":{"x":6362.807117102904,"y":16164.03905925178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab07d12e-f9cf-4d09-9fb3-b91ce3d0888b","savedPayload":{"position":{"x":6362.807117102904,"y":16164.03905925178},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"777654df-f75f-4334-b3a4-7a21904f3d71","savedPayload":{"position":{"x":6483.085711933803,"y":15704.071465273244},"targetPosition":{"x":6470.815670459677,"y":16153.904152038249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"839f62b1-f81f-4488-9b16-ae1b6ac067d1","savedPayload":{"position":{"x":6470.815670459677,"y":16153.904152038249},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"3b0ddd27-6b5b-42c5-b7cd-29c12de70616","savedPayload":{"position":{"x":6697.676638225959,"y":15736.086932205173},"targetPosition":{"x":6578.111133605755,"y":16169.911885504214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1d523fad-3f28-47d5-acaf-830a447aa2e8","savedPayload":{"position":{"x":6578.111133605755,"y":16169.911885504214},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"e8427a08-b22b-4d45-9261-62b73a8ab865","savedPayload":{"position":{"x":6898.370139466919,"y":15818.527057929488},"targetPosition":{"x":6678.4578842262345,"y":16211.131948366372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"51849845-cea5-4b51-9b06-14db6d2af55c","savedPayload":{"position":{"x":6678.4578842262345,"y":16211.131948366372},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"9b5fb0b3-6e28-41b0-8134-752a98b6b9b0","savedPayload":{"position":{"x":7073.502638855745,"y":15946.600721996765},"targetPosition":{"x":6766.024133920648,"y":16275.16878040001},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"55ccd473-ac0c-4724-bfb9-2643edd7d674","savedPayload":{"position":{"x":6766.024133920648,"y":16275.16878040001},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance3Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"090df02b-08db-48c7-aa8e-915be9ab8265","savedPayload":{"position":{"x":7212.896072108699,"y":16112.864748580243},"targetPosition":{"x":6835.720850547124,"y":16358.30079369175},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1bac95a9-f98b-413c-9cb6-66e64391abae","savedPayload":{"position":{"x":6835.720850547124,"y":16358.30079369175},"targetPosition":{"x":6458.54562898555,"y":16603.736838803256},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b1db531-9768-4f0c-85e9-6f6f03685281","savedPayload":{"position":{"x":6458.54562898555,"y":16603.736838803256},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"a5770e2d-61db-4f56-ab84-0892dad59567","savedPayload":{"position":{"x":6556.8179958048095,"y":16581.44923045013},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"e18fe7d1-bb71-4228-89ad-6eef714ec53f"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"c122c5b3-0024-426a-9965-e1e78daec055","savedPayload":{"position":{"x":6657.58592863947,"y":16581.58807781761},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"30f76ba8-3516-4b19-bb42-ae4613d5ce10"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"66a2a41d-c2d3-424b-a5ad-cf339cb4d20f","savedPayload":{"position":{"x":6755.796502566951,"y":16604.146418518918},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"d4105484-8b89-48f5-af7f-964d2e541120"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"c050df08-5b55-49ec-91e2-19bc9e16fe91","savedPayload":{"position":{"x":6846.525029318887,"y":16647.993083155856},"targetPosition":{"x":6606.585809987166,"y":17028.688724090294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"fc07018f-23a9-46dc-bb6a-f6ddac68be6c"}}}],"id":"753efd9a-f48d-4826-89ac-7f046667a26c","savedPayload":{"position":{"x":6345.914554274395,"y":17127.153145189775},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Zone 4","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance4Bounce1 > 0","project":"Superalgos","id":"0931fce8-e103-4a66-b479-207e0662359e","savedPayload":{"position":{"x":6507.782829158572,"y":16619.45409543927},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"03da2d32-5673-4d64-b99a-1b7dd6df2fe6","savedPayload":{"position":{"x":6155.7275234973895,"y":16559.12923350878},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"6913a704-6ff8-4978-bba2-2a0acf0d8672","savedPayload":{"position":{"x":5748.419953230543,"y":16313.899400315066},"targetPosition":{"x":6176.49423870206,"y":16452.65244034681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aad10167-a2b9-4055-90a6-e094f118e5d6","savedPayload":{"position":{"x":6176.49423870206,"y":16452.65244034681},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"b930f4ad-fcba-439d-864d-20082c52ed4e","savedPayload":{"position":{"x":5839.709626609663,"y":16117.073458670857},"targetPosition":{"x":6222.13907539162,"y":16354.239469524706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7cc16cba-79d9-4ebb-af5e-2e9f19e4faaa","savedPayload":{"position":{"x":6222.13907539162,"y":16354.239469524706},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"9532bb2f-ad66-44dd-a5e4-58848c302734","savedPayload":{"position":{"x":5975.450118966226,"y":15947.81397000155},"targetPosition":{"x":6290.009321569902,"y":16269.609725190054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce42776f-7050-49de-9d8c-9a616656e668","savedPayload":{"position":{"x":6290.009321569902,"y":16269.609725190054},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"342c81eb-3f45-4f5c-afdf-51dc77db3926","savedPayload":{"position":{"x":6147.752686281077,"y":15815.957680555402},"targetPosition":{"x":6376.160605227327,"y":16203.681580466979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"970ed430-5c9c-4d26-bb87-a8a5a8dc0498","savedPayload":{"position":{"x":6376.160605227327,"y":16203.681580466979},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"d60fc74e-067a-4b1a-80f9-8f298c70c256","savedPayload":{"position":{"x":6346.6037296362265,"y":15729.167598596905},"targetPosition":{"x":6475.586126904902,"y":16160.28653948773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d647e933-5853-4c85-9f38-7734330f63bf","savedPayload":{"position":{"x":6475.586126904902,"y":16160.28653948773},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"80b842ae-273d-4398-b18e-8820ff04911b","savedPayload":{"position":{"x":6560.44674918602,"y":15692.487648220384},"targetPosition":{"x":6582.507636679798,"y":16141.94656429947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"133d0702-17ee-4271-ae5b-f246b0817695","savedPayload":{"position":{"x":6582.507636679798,"y":16141.94656429947},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"a78374c3-ee33-4150-aece-843122eb04d8","savedPayload":{"position":{"x":6776.8539659219605,"y":15708.049534815518},"targetPosition":{"x":6690.711245047769,"y":16149.727507597036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb6649aa-3dc5-4e46-a147-7ee698f9f8e0","savedPayload":{"position":{"x":6690.711245047769,"y":16149.727507597036},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"ad7af22b-223f-4c23-819c-2515e5ab7274","savedPayload":{"position":{"x":6983.248579015584,"y":15774.948858098562},"targetPosition":{"x":6793.908551594581,"y":16183.17716923856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7301cf1f-91d4-4d0a-8486-c4c9cd816dc4","savedPayload":{"position":{"x":6793.908551594581,"y":16183.17716923856},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"835e1082-9b76-4d13-aba3-6c2419878c99","savedPayload":{"position":{"x":7167.635683767781,"y":15889.297672569446},"targetPosition":{"x":6886.102103970679,"y":16240.351576474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eac5c80e-8e70-41e7-abe8-5da4d4a8d944","savedPayload":{"position":{"x":6886.102103970679,"y":16240.351576474},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"2db96f60-f66f-4706-a8f7-ccae83d23d4a","savedPayload":{"position":{"x":7319.29937187022,"y":16044.450440772154},"targetPosition":{"x":6961.933948021899,"y":16317.927960575355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dec0fb37-e4e6-4e00-8a6f-a60a44708a66","savedPayload":{"position":{"x":6961.933948021899,"y":16317.927960575355},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance4Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"2bb56777-1ea8-4227-acaf-578f3872f00d","savedPayload":{"position":{"x":7429.425501045451,"y":16231.390247776108},"targetPosition":{"x":7016.997012609514,"y":16411.39786407733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9ffc117c-9495-407c-9aed-1b6ef6ba210a","savedPayload":{"position":{"x":7016.997012609514,"y":16411.39786407733},"targetPosition":{"x":6604.568524173577,"y":16591.405480378555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d181f92f-7c33-429e-9f32-13afcadaac04","savedPayload":{"position":{"x":6604.568524173577,"y":16591.405480378555},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"9edd9a7b-2d22-45b3-b481-b8ac59d25f32","savedPayload":{"position":{"x":6705.169003763112,"y":16585.59694590617},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"79408eb2-e914-4f85-96c6-0baa918f5f91"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"40a3e87b-ccb4-4c11-9553-a1934ffe3397","savedPayload":{"position":{"x":6804.539739809541,"y":16602.31975619489},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"9479606b-5668-40a4-8e34-40976668e11b"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"d985e769-5063-49f1-825a-8c469bebb1fc","savedPayload":{"position":{"x":6897.697868671436,"y":16640.735359708462},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"98ef8287-1ef2-498f-ae25-580a148f8fae"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"3d630c8d-3820-4190-adcf-cc372272af3f","savedPayload":{"position":{"x":6979.9720527731915,"y":16698.917437677126},"targetPosition":{"x":6680.644848614458,"y":17034.92818877077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"09f1f62c-723a-4588-ae76-d195aa1cb276"}}}],"id":"0fb57b23-fb5d-429c-bc75-84008becc00e","savedPayload":{"position":{"x":6419.568565303983,"y":17117.21539991477},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Resistance Zone 5","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.resistance5Bounce1 > 0","project":"Superalgos","id":"082cf5a1-8c77-42c1-a19e-def34f93c0c3","savedPayload":{"position":{"x":6650.547217695796,"y":16615.012550909018},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"50abec57-e340-4709-9f4c-9fae0b30a09a","savedPayload":{"position":{"x":6313.222633467176,"y":16497.564042676207},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"15f87ebf-d18f-4e4f-93aa-545c0bbf36ab","savedPayload":{"position":{"x":5951.833711492109,"y":16188.63820212771},"targetPosition":{"x":6351.23162188875,"y":16395.957543171415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"468bd43d-c2d6-4597-b1a5-6a401b0fe336","savedPayload":{"position":{"x":6351.23162188875,"y":16395.957543171415},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"2a0d3dfc-d790-4eb4-9951-389ad56d9a10","savedPayload":{"position":{"x":6074.27479793509,"y":16009.522496170757},"targetPosition":{"x":6412.4521651102405,"y":16306.399690192939},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6247696c-f48e-41fb-aef2-e051ead37498","savedPayload":{"position":{"x":6412.4521651102405,"y":16306.399690192939},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"c4c3fb3e-85a5-4f01-ad3f-b86d52b965b3","savedPayload":{"position":{"x":6236.023163089085,"y":15864.913637037556},"targetPosition":{"x":6493.326347687238,"y":16234.095260626338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6bc50b65-7c74-440e-8a08-e1d28540dff8","savedPayload":{"position":{"x":6493.326347687238,"y":16234.095260626338},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"1ba3d543-f241-4ce5-85f1-98579b075881","savedPayload":{"position":{"x":6427.6785799027275,"y":15763.215765989115},"targetPosition":{"x":6589.154056094059,"y":16183.246325102118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"edbd4422-89b8-4074-8ea5-994d62142496","savedPayload":{"position":{"x":6589.154056094059,"y":16183.246325102118},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"d91e1d41-dcc5-4992-aff7-eba6f8aae36a","savedPayload":{"position":{"x":6638.102732189895,"y":15710.339193634041},"targetPosition":{"x":6694.366132237643,"y":16156.80803892458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b46b6072-5682-463b-abec-ba1b8433d5c1","savedPayload":{"position":{"x":6694.366132237643,"y":16156.80803892458},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"d39d125f-5ebd-4dc3-97b5-e34f6835342e","savedPayload":{"position":{"x":6855.066533080339,"y":15709.3569141591},"targetPosition":{"x":6802.848032682865,"y":16156.31689918711},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"95087207-6903-418b-87b1-91574b8bf084","savedPayload":{"position":{"x":6802.848032682865,"y":16156.31689918711},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"0275cc41-3916-47b3-a2a0-70dca25d0db0","savedPayload":{"position":{"x":7065.960835097634,"y":15760.326014076929},"targetPosition":{"x":6908.295183691513,"y":16181.801449146024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39aa9f71-a813-4da9-b937-eb9dc298b483","savedPayload":{"position":{"x":6908.295183691513,"y":16181.801449146024},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"4f0b8341-c2cb-4cad-8d3d-cd3543a4ace9","savedPayload":{"position":{"x":7258.529227978135,"y":15860.284354565447},"targetPosition":{"x":7004.579380131763,"y":16231.780619390283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7593aaba-e315-4982-8fa1-ffca6ef48e2f","savedPayload":{"position":{"x":7004.579380131763,"y":16231.780619390283},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"e62a0cfa-f94a-4cf9-bafe-7af99b6a2e7d","savedPayload":{"position":{"x":7421.580336685249,"y":16003.422720209244},"targetPosition":{"x":7086.10493448532,"y":16303.349802212182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b8728df0-cd33-4ffd-b6c2-240efc3b1e23","savedPayload":{"position":{"x":7086.10493448532,"y":16303.349802212182},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"02ad3590-953f-4dfe-92e7-6376926da1a4","savedPayload":{"position":{"x":7545.638223447582,"y":16181.422429483893},"targetPosition":{"x":7148.133877866487,"y":16392.349656849507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8daaa494-c0c7-4be8-932f-5e4186bc4164","savedPayload":{"position":{"x":7148.133877866487,"y":16392.349656849507},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.resistance5Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"5cc087f1-293f-40f8-832f-a5003ddf7ce2","savedPayload":{"position":{"x":7623.4930948185865,"y":16383.938786288963},"targetPosition":{"x":7187.061313551989,"y":16493.60783525204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a80e57e-0552-42b6-a9c3-8fbbfe38a615","savedPayload":{"position":{"x":7187.061313551989,"y":16493.60783525204},"targetPosition":{"x":6750.629532285391,"y":16603.27688421512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2db093f9-9a3d-4633-afc3-47d7b7a1ba43","savedPayload":{"position":{"x":6750.629532285391,"y":16603.27688421512},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"9b24e6a9-06da-4deb-8710-91d5bd430b2c","savedPayload":{"position":{"x":6850.814005807879,"y":16614.105865302165},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"8ae90185-2a00-4958-95c1-83aa4b6402ee"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"31685577-64d9-4165-8f22-9ee5687950d5","savedPayload":{"position":{"x":6946.076970426908,"y":16646.95648384056},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"1f76e686-6537-4818-a4c8-f70dc4ec3c4f"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"60b0dc5b-992a-4c56-baed-99f61db77df2","savedPayload":{"position":{"x":7031.641543312984,"y":16700.181472644552},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"ee66793e-1c2d-4a17-8c0c-f086656eb0a6"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"3381e89f-ca2d-4f2a-808d-6dd705b6da98","savedPayload":{"position":{"x":7103.217159495052,"y":16771.111908527313},"targetPosition":{"x":6752.666836350971,"y":17053.27227240498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"72bab256-b619-4bb5-b188-e3da6d412f2f"}}}],"id":"550e31bb-a95f-4fad-bfbb-b42aae7dc5d3","savedPayload":{"position":{"x":6493.853730735818,"y":17119.53624430038},"targetPosition":{"x":6442.706934786247,"y":17566.620134933997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"706e4ed7-a497-41a4-a9b0-28f07c4c3b69","savedPayload":{"position":{"x":6442.706934786247,"y":17566.620134933997},"targetPosition":{"x":6875.274697958491,"y":17690.656945051647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Resistance Bounces","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Level 1 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Bounce1","project":"Superalgos","id":"19e11730-5eb7-4185-8d37-0ff69d6124ad","savedPayload":{"position":{"x":12836.41734410961,"y":6365.007333404816},"targetPosition":{"x":12979.279252683024,"y":6550.054726167046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"efea3cfd-0f4a-4ae0-9370-33474500839b","savedPayload":{"position":{"x":12979.279252683024,"y":6550.054726167046},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Bounce2","project":"Superalgos","id":"271bbb18-0632-42ad-82c4-c4212c705df2","savedPayload":{"position":{"x":12998.448594212401,"y":6260.054873093001},"targetPosition":{"x":13108.904252765256,"y":6466.092757917595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"928c418e-3c43-4207-b50d-23bad01797e1","savedPayload":{"position":{"x":13108.904252765256,"y":6466.092757917595},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Bounce3","project":"Superalgos","id":"a8976927-0aa4-40ea-86d7-027862c25e8e","savedPayload":{"position":{"x":13175.544556459743,"y":6183.20329476786},"targetPosition":{"x":13250.581022563128,"y":6404.611495257482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"fa920c04-f22d-4664-ba32-da5b20c08547","savedPayload":{"position":{"x":13250.581022563128,"y":6404.611495257482},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Bounce5","project":"Superalgos","id":"20cbe22e-edd4-4907-97a7-845941d2c1dd","savedPayload":{"position":{"x":13362.87451465624,"y":6136.548909148992},"targetPosition":{"x":13400.444989120326,"y":6367.287986762387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"af681228-ea92-40fa-ad2b-52dd554054e4","savedPayload":{"position":{"x":13400.444989120326,"y":6367.287986762387},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Bounce10","project":"Superalgos","id":"7763bf76-320a-46eb-b178-96d26ce2397a","savedPayload":{"position":{"x":13555.328595875053,"y":6121.36432625717},"targetPosition":{"x":13554.408254095375,"y":6355.14032044893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"b51a6189-7b10-413f-b7ac-774c1d3101b0","savedPayload":{"position":{"x":13554.408254095375,"y":6355.14032044893},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1BounceAll","project":"Superalgos","id":"485706b2-81af-4cea-8073-be49adbfb553","savedPayload":{"position":{"x":13747.657154470879,"y":6138.063741930433},"targetPosition":{"x":13708.271100972037,"y":6368.49985298754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"696352b4-4de4-42a0-9262-cc44f98ad112","savedPayload":{"position":{"x":13708.271100972037,"y":6368.49985298754},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Bounce1","project":"Superalgos","id":"5b9eb49c-20c0-4635-90b4-f67412864b48","savedPayload":{"position":{"x":13934.613968728358,"y":6186.191639641339},"targetPosition":{"x":13857.83655237802,"y":6407.002171156265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"33f2c959-9c62-4372-b925-a4cb4caed593","savedPayload":{"position":{"x":13857.83655237802,"y":6407.002171156265},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Bounce2","project":"Superalgos","id":"3e974257-e6e9-4b40-b1df-24c9ecc00ad1","savedPayload":{"position":{"x":14111.09934411458,"y":6264.435215800403},"targetPosition":{"x":13999.024852686998,"y":6469.597032083516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0b9de83a-dc2c-4031-a516-4410130e45e4","savedPayload":{"position":{"x":13999.024852686998,"y":6469.597032083516},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Bounce3","project":"Superalgos","id":"3c98c74a-5f60-4493-9c7d-398b6c84ce7d","savedPayload":{"position":{"x":14272.299219652057,"y":6370.6601896157845},"targetPosition":{"x":14127.98475311698,"y":6554.5770111358215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"e318ca5e-f179-42c4-a81e-d267697a9d4f","savedPayload":{"position":{"x":14127.98475311698,"y":6554.5770111358215},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Bounce5","project":"Superalgos","id":"79505072-1808-46e6-95be-3676d263ade3","savedPayload":{"position":{"x":14413.816482952832,"y":6501.96902070964},"targetPosition":{"x":14241.1985637576,"y":6659.624076010906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"41586c08-f8d7-4786-8659-fdd065c250f1","savedPayload":{"position":{"x":14241.1985637576,"y":6659.624076010906},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Bounce10","project":"Superalgos","id":"506022c0-8f3e-48c2-a0b6-8f1dc42f31c1","savedPayload":{"position":{"x":14531.79091198204,"y":6654.779946466307},"targetPosition":{"x":14335.578106980967,"y":6781.872816616239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4e44fa84-0ff5-414c-ba9c-37444ff4c34b","savedPayload":{"position":{"x":14335.578106980967,"y":6781.872816616239},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2BounceAll","project":"Superalgos","id":"3267f58b-c446-4ca9-a0c1-614b28dd45da","savedPayload":{"position":{"x":14623.004471852142,"y":6824.924683179494},"targetPosition":{"x":14408.54895487705,"y":6917.9886059867895},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"1a91ff9b-6df8-4e5a-8369-f962e2cf0939","savedPayload":{"position":{"x":14408.54895487705,"y":6917.9886059867895},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Bounce1","project":"Superalgos","id":"b8fefe16-88c8-46c7-aff6-f1f6a82a2235","savedPayload":{"position":{"x":14684.969094425887,"y":7007.762125965893},"targetPosition":{"x":14458.120652936042,"y":7064.258560215908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"82c0551b-691c-4d7f-8380-9dcab27af775","savedPayload":{"position":{"x":14458.120652936042,"y":7064.258560215908},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Bounce2","project":"Superalgos","id":"c750976a-b090-4018-98c4-5b435b20586c","savedPayload":{"position":{"x":14715.994546329177,"y":7198.304946007931},"targetPosition":{"x":14482.941014458676,"y":7216.692816249539},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"726070ae-bc63-4509-a421-164dfb43a1ec","savedPayload":{"position":{"x":14482.941014458676,"y":7216.692816249539},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Bounce3","project":"Superalgos","id":"69d28461-7ed2-448f-a240-5bcbe67477d4","savedPayload":{"position":{"x":14715.234534111412,"y":7391.355631882926},"targetPosition":{"x":14482.333004684464,"y":7371.133364949535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"07b0eac7-9674-4894-813b-6750063b7c77","savedPayload":{"position":{"x":14482.333004684464,"y":7371.133364949535},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Bounce5","project":"Superalgos","id":"67145f61-12a8-4ebd-a4c3-4ea001b8d0e8","savedPayload":{"position":{"x":14682.709788924687,"y":7581.648264125781},"targetPosition":{"x":14456.313208535084,"y":7523.367470743819},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"1a5e3bc0-ea93-49fd-a4e3-47734fd92d8a","savedPayload":{"position":{"x":14456.313208535084,"y":7523.367470743819},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Bounce10","project":"Superalgos","id":"cd167fdb-412f-4319-b2e6-9f181d0d8255","savedPayload":{"position":{"x":14619.30750103201,"y":7763.992155784783},"targetPosition":{"x":14405.591378220943,"y":7669.24258407102},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"6064d4e0-e627-4f14-8d25-9f7634703aa2","savedPayload":{"position":{"x":14405.591378220943,"y":7669.24258407102},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3BounceAll","project":"Superalgos","id":"0b609743-af25-4879-af19-a29fe6b69c70","savedPayload":{"position":{"x":14526.75711956967,"y":7933.413440830527},"targetPosition":{"x":14331.551073051069,"y":7804.779612107615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"04d4d459-e942-407a-9fdf-7a010a610e3a","savedPayload":{"position":{"x":14331.551073051069,"y":7804.779612107615},"targetPosition":{"x":13550.72688697667,"y":7290.244297215969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae66154f-2772-495c-a77b-1989dba9a3e7","savedPayload":{"position":{"x":6690.576255360794,"y":17454.25371896963},"targetPosition":{"x":6875.274697958491,"y":17690.656945051647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Resistance Levels","config":"{ \n\"codeName\": \"Resistances Rates & Periods\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Rate 1","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Rate","project":"Superalgos","id":"bc06940a-6869-473e-9c2b-51e2c842595d","savedPayload":{"position":{"x":11449.086580941446,"y":5745.262585924497},"targetPosition":{"x":12112.362612601031,"y":6399.434927822636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6128b932-f039-4825-aff3-9b000b167e1b","savedPayload":{"position":{"x":12112.362612601031,"y":6399.434927822636},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 1","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance1Period","project":"Superalgos","id":"c32e2d59-7d5b-49b7-b094-4d3cb9110cf0","savedPayload":{"position":{"x":11649.057158444186,"y":5569.481220611895},"targetPosition":{"x":12212.417854912794,"y":6311.455178877819},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"99549259-ee7d-4cc2-9539-4e6fc71685fe","savedPayload":{"position":{"x":12212.417854912794,"y":6311.455178877819},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Rate","project":"Superalgos","id":"a6a4f0a8-8c28-4044-8a6c-5d4570b7e2d4","savedPayload":{"position":{"x":11871.845477222683,"y":5424.105157237463},"targetPosition":{"x":12323.843465363134,"y":6238.735861451476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fdb40161-0479-4dc2-8597-6a07de70a255","savedPayload":{"position":{"x":12323.843465363134,"y":6238.735861451476},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 2","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance2Period","project":"Superalgos","id":"7db005db-700c-4b6c-8778-754f72c74872","savedPayload":{"position":{"x":12113.007832192547,"y":5311.952611259298},"targetPosition":{"x":12444.459641422247,"y":6182.638676113107},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c2ae4875-3ec7-43a4-903d-3e60f9c44e97","savedPayload":{"position":{"x":12444.459641422247,"y":6182.638676113107},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Rate","project":"Superalgos","id":"d845f56a-ff31-412a-8a32-0b579d044f09","savedPayload":{"position":{"x":12367.697472748237,"y":5235.269148775038},"targetPosition":{"x":12571.815923044589,"y":6144.293180927769},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"098554ac-043a-43c1-a87c-09bec4bbd3af","savedPayload":{"position":{"x":12571.815923044589,"y":6144.293180927769},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 3","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance3Period","project":"Superalgos","id":"92d8b4e1-da71-47b1-9501-e693f9e76290","savedPayload":{"position":{"x":12630.705785001759,"y":5195.63119226947},"targetPosition":{"x":12703.32939443407,"y":6124.470805495636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bb93a05d-7b62-4a48-9fbd-e6f47a8bd962","savedPayload":{"position":{"x":12703.32939443407,"y":6124.470805495636},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 4","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance4Rate","project":"Superalgos","id":"654cbecf-716f-4df3-a49a-816c0607ea25","savedPayload":{"position":{"x":12896.063116482663,"y":5193.836598099559},"targetPosition":{"x":12836.04006057015,"y":6123.573995978802},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dfb65955-2b62-485a-adc3-78dab8ed4602","savedPayload":{"position":{"x":12836.04006057015,"y":6123.573995978802},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 4","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance4Period","project":"Superalgos","id":"32e7a536-bc8a-4e1d-b5ae-2f495604218e","savedPayload":{"position":{"x":13159.586664443475,"y":5229.923839332263},"targetPosition":{"x":12967.83156585525,"y":6141.626932132225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c5d75ff9-cee7-4d53-ac2c-81c6f5ee5f28","savedPayload":{"position":{"x":12967.83156585525,"y":6141.626932132225},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 5","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance5Rate","project":"Superalgos","id":"f4ba1f5e-7fc6-4afa-8cc9-7588c9dd63eb","savedPayload":{"position":{"x":13415.327490100259,"y":5303.17343502693},"targetPosition":{"x":13095.741209385797,"y":6178.271708140687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57a7830b-b73c-4332-81d2-8fd13a6f2666","savedPayload":{"position":{"x":13095.741209385797,"y":6178.271708140687},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 5","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.resistance5Period","project":"Superalgos","id":"aa5f5bdc-b7c9-4480-a31a-aecd9d050335","savedPayload":{"position":{"x":13658.231918343812,"y":5412.198645529203},"targetPosition":{"x":13217.288724029819,"y":6232.84639733094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94b8ef36-ab61-481b-94e2-59c12afa224a","savedPayload":{"position":{"x":13217.288724029819,"y":6232.84639733094},"targetPosition":{"x":12775.958756851214,"y":7053.364410930214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dfd9d091-e377-4ece-be8c-5916271e161b","savedPayload":{"position":{"x":6864.8048489477405,"y":17390.839696945917},"targetPosition":{"x":6875.274697958491,"y":17690.656945051647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Resistance Zone Sizes","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Zone * 1","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone","project":"Superalgos","id":"d6cb0538-10ab-4849-8966-1e5e4071140e","savedPayload":{"position":{"x":13831.861613882029,"y":8928.923540123149},"targetPosition":{"x":13716.063388111445,"y":8911.773700247253},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"65b668fb-93ae-465b-b8cd-4bb809d1133b","savedPayload":{"position":{"x":13716.063388111445,"y":8911.773700247253},"targetPosition":{"x":13254.759105347213,"y":8842.613239383394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 2","project":"Superalgos","id":"0b1d7b11-e52c-4174-bdf1-7073e0ca3cdd","savedPayload":{"position":{"x":13711.105570968513,"y":9206.203628736492},"targetPosition":{"x":13619.508204913298,"y":9133.306940811997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4c85c218-3b93-4066-9f5a-502c6185f65b","savedPayload":{"position":{"x":13619.508204913298,"y":9133.306940811997},"targetPosition":{"x":13254.759105347213,"y":8842.613239383394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 3","project":"Superalgos","id":"a736e939-3c77-474a-811a-5415d69645d2","savedPayload":{"position":{"x":13467.948528613022,"y":9385.760311671766},"targetPosition":{"x":13425.171586472883,"y":9276.781667525405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"3207cf58-21a5-46a5-859b-09097ae163cc","savedPayload":{"position":{"x":13425.171586472883,"y":9276.781667525405},"targetPosition":{"x":13254.759105347213,"y":8842.613239383394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 5","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 5","project":"Superalgos","id":"29bf1a3e-b2a3-4f4d-aa89-cb399a82b956","savedPayload":{"position":{"x":13168.245078865399,"y":9419.565934309492},"targetPosition":{"x":13185.45178968615,"y":9303.806734746733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4c83cdb9-4a58-455f-ac1a-f945a002d59d","savedPayload":{"position":{"x":13185.45178968615,"y":9303.806734746733},"targetPosition":{"x":13254.759105347213,"y":8842.613239383394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 10","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 10","project":"Superalgos","id":"3d9c734f-8270-4a2e-9bc8-a2b44ba14c67","savedPayload":{"position":{"x":12891.232902019365,"y":9298.405924115468},"targetPosition":{"x":12964.030858225542,"y":9207.079312280652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"13dac5fd-938e-4c10-a9bc-3a81bfa60c4f","savedPayload":{"position":{"x":12964.030858225542,"y":9207.079312280652},"targetPosition":{"x":13254.759105347213,"y":8842.613239383394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5341a87b-52b4-455d-b8f6-d1cbc4102fb1","savedPayload":{"position":{"x":7043.032568999715,"y":17441.945673285136},"targetPosition":{"x":6875.274697958491,"y":17690.656945051647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"156b4fa7-7f8f-4464-8ddb-6eb6123bc5c3","savedPayload":{"position":{"x":6875.274697958491,"y":17690.656945051647},"targetPosition":{"x":6977.880740956191,"y":17972.56473128742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Supports","config":"{ \n\"codeName\": \"Resistances-And-Supports\",\n\"icon\": \"layer-support\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Base Support","project":"Superalgos","points":[{"type":"Point","name":"Base Left","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin - (record.end - record.begin)\ny = record.rateSupport","project":"Superalgos","id":"8bb830a6-b8f7-45c5-9f5e-b32b13680bff","savedPayload":{"position":{"x":10051.959831322049,"y":9324.247270852586},"targetPosition":{"x":10827.923351453628,"y":8808.128022917392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c3182836-3d36-45b4-8384-d4ecf78ebcc0","savedPayload":{"position":{"x":10827.923351453628,"y":8808.128022917392},"targetPosition":{"x":11603.92533270528,"y":8291.968102203837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Base Right","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end- (record.end - record.begin)\ny = record.rateSupport","project":"Superalgos","id":"a8ca9f48-585e-4f2d-adb4-e4909bdf4791","savedPayload":{"position":{"x":9743.624542417856,"y":8409.799689063173},"targetPosition":{"x":10673.736653251188,"y":8350.876503125022},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"beb7e536-5af8-4b52-8194-8053bf181c4a","savedPayload":{"position":{"x":10673.736653251188,"y":8350.876503125022},"targetPosition":{"x":11603.92533270528,"y":8291.968102203837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f84691c4-7a7e-4dba-bd93-82443b0b1f22","savedPayload":{"position":{"x":6799.076097419698,"y":17475.33777109327},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Levels","project":"Superalgos","points":[{"type":"Point","name":"Begin 1","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support1Rate","project":"Superalgos","id":"09444c80-7a46-4b7a-8c68-5e01e88e589d","savedPayload":{"position":{"x":11991.0117708082,"y":11433.936825238216},"targetPosition":{"x":11826.608107168144,"y":10515.666696580423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d621b89c-3082-47ed-836e-7a98d611df2b","savedPayload":{"position":{"x":11826.608107168144,"y":10515.666696580423},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 1","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support1Rate","project":"Superalgos","id":"67cb9789-cfe5-40e4-95c8-9b979a1fab14","savedPayload":{"position":{"x":11726.189847131089,"y":11462.055650483813},"targetPosition":{"x":11694.124365421416,"y":10529.721192620991},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bed52b2e-acb6-4b21-90de-8fd08dcd5d34","savedPayload":{"position":{"x":11694.124365421416,"y":10529.721192620991},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 2","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support2Rate","project":"Superalgos","id":"03925809-b409-4894-bfda-530b1a0459d1","savedPayload":{"position":{"x":11424.187911531735,"y":11474.339825193978},"targetPosition":{"x":11561.271700832385,"y":10524.788015220935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"95e33e9a-7524-4efa-b431-7b4532cf947b","savedPayload":{"position":{"x":11561.271700832385,"y":10524.788015220935},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 2","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support2Rate","project":"Superalgos","id":"a62f6b4c-385c-478a-93c1-859aa0474043","savedPayload":{"position":{"x":11198.399716088956,"y":11404.534589673309},"targetPosition":{"x":11430.313728914593,"y":10500.971793032522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"636187fb-4abe-4524-a3e2-c5930abb7b15","savedPayload":{"position":{"x":11430.313728914593,"y":10500.971793032522},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 3","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support3Rate","project":"Superalgos","id":"7212b514-8bde-4ae1-a992-fb4071aa8488","savedPayload":{"position":{"x":10946.045211521825,"y":11320.148408215879},"targetPosition":{"x":11304.148694004616,"y":10458.784546673687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85f4f1ed-4b3d-4381-af30-a85e4bfd6dd7","savedPayload":{"position":{"x":11304.148694004616,"y":10458.784546673687},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 3","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support3Rate","project":"Superalgos","id":"a9fc5970-796f-4544-87ca-00348ed4046a","savedPayload":{"position":{"x":10708.668663032491,"y":11200.702309115031},"targetPosition":{"x":11185.723043754158,"y":10399.08399432563},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9fc5841d-ba9c-4ae6-a445-d609b0e947dd","savedPayload":{"position":{"x":11185.723043754158,"y":10399.08399432563},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 4","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support4Rate","project":"Superalgos","id":"118ccc56-a5b5-4920-a501-4189b994d311","savedPayload":{"position":{"x":10499.612405116659,"y":11005.88549970728},"targetPosition":{"x":11085.875743500652,"y":10280.36108386413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e69a3f5b-dcde-4d4a-8ac7-87616ebf68f3","savedPayload":{"position":{"x":11085.875743500652,"y":10280.36108386413},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 4","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support4Rate","project":"Superalgos","id":"ebba1443-0bea-488a-96eb-296a71982003","savedPayload":{"position":{"x":10294.600380080316,"y":10866.386052114005},"targetPosition":{"x":10978.193225141138,"y":10231.679564845754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1832f8f2-ac4a-4e1f-94ff-c29c18a350d7","savedPayload":{"position":{"x":10978.193225141138,"y":10231.679564845754},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 5","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support5Rate","project":"Superalgos","id":"423203ac-08c7-48d8-a842-2b604424d7fb","savedPayload":{"position":{"x":10128.021251642174,"y":10659.009879601028},"targetPosition":{"x":10894.988237435951,"y":10128.076292865784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aa501f2a-8d27-40af-aaea-58bc7c5f42db","savedPayload":{"position":{"x":10894.988237435951,"y":10128.076292865784},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 5","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support5Rate","project":"Superalgos","id":"7e6b4f5d-ef8e-4dd6-bc79-4df9a7bed772","savedPayload":{"position":{"x":9992.458942693982,"y":10429.708386149658},"targetPosition":{"x":10827.200783319553,"y":10013.383343169347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6aa7f5e1-5987-4619-8ec7-39a424d7734a","savedPayload":{"position":{"x":10827.200783319553,"y":10013.383343169347},"targetPosition":{"x":11662.194201726015,"y":9597.295397008213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"97155ce8-2969-4d0a-8626-1205a45a0ada","savedPayload":{"position":{"x":6799.258153617108,"y":17425.790498281833},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Zone 1","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support1Rate - record.support1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"37e59f5d-ac15-478b-8d47-f834a01baa5b","savedPayload":{"position":{"x":10396.849605033898,"y":8247.179481988838},"targetPosition":{"x":10625.044293162053,"y":8195.905537114431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"99a2940d-3e17-43dc-82ae-6bfd948adaf5","savedPayload":{"position":{"x":10625.044293162053,"y":8195.905537114431},"targetPosition":{"x":11080.758565701944,"y":8093.419621554778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support1Rate - record.support1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"79ea9f9a-e251-47d9-ac57-a549e0e31dd5","savedPayload":{"position":{"x":10382.608031546395,"y":8028.391085709707},"targetPosition":{"x":10615.483168499799,"y":8050.071166310296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fbd722bf-0f89-46e6-9933-2ce46f906efa","savedPayload":{"position":{"x":10615.483168499799,"y":8050.071166310296},"targetPosition":{"x":11080.758565701944,"y":8093.419621554778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support1Rate + record.support1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"14e3bbb5-81e4-4016-866f-6b7bd9772d27","savedPayload":{"position":{"x":10436.970498896597,"y":7815.712085093011},"targetPosition":{"x":10651.816344594521,"y":7908.367384349305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c112aca0-14de-4cc3-9e05-20b28aed8dd2","savedPayload":{"position":{"x":10651.816344594521,"y":7908.367384349305},"targetPosition":{"x":11080.758565701944,"y":8093.419621554778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support1Rate + record.support1Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"90cb47a2-5e59-4c6b-b160-0c9df8ba924d","savedPayload":{"position":{"x":10554.432051386317,"y":7630.129430864593},"targetPosition":{"x":10730.048804557762,"y":7784.711121697232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bef0f6c3-3a0d-4c72-a2df-7714001aeb59","savedPayload":{"position":{"x":10730.048804557762,"y":7784.711121697232},"targetPosition":{"x":11080.758565701944,"y":8093.419621554778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"70ec5d22-e80f-4a61-b20e-ed94be657d01","savedPayload":{"position":{"x":6807.592939873205,"y":17376.948951156715},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Zone 2","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support2Rate - record.support2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"2a58f164-97fc-4550-b028-d35ef0900bcc","savedPayload":{"position":{"x":10283.612073301752,"y":7949.297492377958},"targetPosition":{"x":10515.297483764865,"y":7917.608471127336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c3c04eac-b594-45bd-9306-c615bdf6f960","savedPayload":{"position":{"x":10515.297483764865,"y":7917.608471127336},"targetPosition":{"x":10978.081032640624,"y":7854.2210132035725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support2Rate - record.support2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"f77871dc-1447-4dc9-8c31-ea23dbd0a485","savedPayload":{"position":{"x":10288.191586242527,"y":7730.0949787281825},"targetPosition":{"x":10518.340242691855,"y":7771.47790900305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"afd0cabf-291e-464f-82f9-5a17f55afd09","savedPayload":{"position":{"x":10518.340242691855,"y":7771.47790900305},"targetPosition":{"x":10978.081032640624,"y":7854.2210132035725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support2Rate + record.support2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"ec1b5181-9ba5-43b5-8ece-8f4c21ef4202","savedPayload":{"position":{"x":10360.399588365446,"y":7522.831916218435},"targetPosition":{"x":10566.506018848973,"y":7633.383221513704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cdd44658-8050-41fa-8a8f-82677b9a149b","savedPayload":{"position":{"x":10566.506018848973,"y":7633.383221513704},"targetPosition":{"x":10978.081032640624,"y":7854.2210132035725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support2Rate + record.support2Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"ed068681-8ff2-4d6b-a448-b23473de9729","savedPayload":{"position":{"x":10493.216957396893,"y":7347.947754232196},"targetPosition":{"x":10654.970550122198,"y":7516.828748859689},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"827e511d-aebc-49a2-86de-8869ef2a11b5","savedPayload":{"position":{"x":10654.970550122198,"y":7516.828748859689},"targetPosition":{"x":10978.081032640624,"y":7854.2210132035725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a339b25e-ffc5-4c3c-84d3-f27b72414868","savedPayload":{"position":{"x":6823.853104946088,"y":17330.145399803077},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Zone 3","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support3Rate - record.support3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"eacddf75-c7b4-47a1-a099-68e8fcc7f84d","savedPayload":{"position":{"x":10932.273634456647,"y":7649.647001783905},"targetPosition":{"x":11165.88195903421,"y":7637.778102584731},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"765f38a2-4cba-49fd-8c86-dd51c8e215db","savedPayload":{"position":{"x":11165.88195903421,"y":7637.778102584731},"targetPosition":{"x":11632.438497750041,"y":7613.942211736482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support3Rate - record.support3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"0bff84b6-e263-4c4b-ae96-a7ef1ef6bd3c","savedPayload":{"position":{"x":10955.496425354864,"y":7431.666335299907},"targetPosition":{"x":11181.393357777499,"y":7492.461995842104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"615e7f76-5ca1-4d42-84f6-0129a2eea01c","savedPayload":{"position":{"x":11181.393357777499,"y":7492.461995842104},"targetPosition":{"x":11632.438497750041,"y":7613.942211736482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support3Rate + record.support3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"6d7cb8d5-bcc9-4a40-adbc-84f31327e14d","savedPayload":{"position":{"x":11045.105572581862,"y":7231.2570142908025},"targetPosition":{"x":11241.104248120937,"y":7358.942710032386},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cf270516-0d12-45be-834a-c0024b840b3c","savedPayload":{"position":{"x":11241.104248120937,"y":7358.942710032386},"targetPosition":{"x":11632.438497750041,"y":7613.942211736482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support3Rate + record.support3Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"958558ab-3e1b-40b1-bebe-0a7ef60ab54d","savedPayload":{"position":{"x":11192.316697722516,"y":7068.286026394852},"targetPosition":{"x":11339.15798582333,"y":7250.334574122564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd6e16bd-9458-47f8-bce8-856baa66a2d3","savedPayload":{"position":{"x":11339.15798582333,"y":7250.334574122564},"targetPosition":{"x":11632.438497750041,"y":7613.942211736482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"84a9a192-bc61-4080-855b-9cc491fd71fe","savedPayload":{"position":{"x":6847.595113919655,"y":17286.656523094094},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Zone 4","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support4Rate - record.support4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"97800a02-901d-46ef-9174-b40d1fbeb396","savedPayload":{"position":{"x":11539.340110071727,"y":6716.55847180137},"targetPosition":{"x":11723.725133131531,"y":6860.428310003338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8a3f2434-8ab8-44aa-931f-f0aa0bed6310","savedPayload":{"position":{"x":11723.725133131531,"y":6860.428310003338},"targetPosition":{"x":12091.872794460054,"y":7147.828859643613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support4Rate - record.support4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"bcf5f895-aee0-4e65-b4d6-291f37c6708f","savedPayload":{"position":{"x":11699.967182624368,"y":6566.713907443574},"targetPosition":{"x":11830.784819547382,"y":6760.63037995211},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"13dd9d54-d74f-4863-9e86-88b79c9ebe2b","savedPayload":{"position":{"x":11830.784819547382,"y":6760.63037995211},"targetPosition":{"x":12091.872794460054,"y":7147.828859643613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support4Rate + record.support4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"25dce519-15a1-4420-a05b-49257bfb8995","savedPayload":{"position":{"x":11898.92152370407,"y":6474.1601077692085},"targetPosition":{"x":11963.338351429044,"y":6699.041911303177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6ae4a3ec-2a81-4bae-ae75-3ced2c5cd1cd","savedPayload":{"position":{"x":11963.338351429044,"y":6699.041911303177},"targetPosition":{"x":12091.872794460054,"y":7147.828859643613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support4Rate + record.support4Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"11d60ea2-9963-46dc-a7c1-953cf8e06e4a","savedPayload":{"position":{"x":12116.293564900345,"y":6447.172550736264},"targetPosition":{"x":12108.197222351868,"y":6680.959573265815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"73ecbfa9-1e21-4c80-8f17-6eff316dc2d5","savedPayload":{"position":{"x":12108.197222351868,"y":6680.959573265815},"targetPosition":{"x":12091.872794460054,"y":7147.828859643613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e1efc35b-b8ca-4abb-bfcc-2b18747ad690","savedPayload":{"position":{"x":6878.1713466799065,"y":17247.668584219347},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Support Zone 5","project":"Superalgos","points":[{"type":"Point","name":"Begin - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support5Rate - record.support5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"3a397c6e-4bcc-464b-8dda-084c9083d8ac","savedPayload":{"position":{"x":11602.572337522783,"y":6670.1521462821665},"targetPosition":{"x":11778.918985447792,"y":6823.812499035845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f1da5793-706f-4884-af96-51be961434e8","savedPayload":{"position":{"x":11778.918985447792,"y":6823.812499035845},"targetPosition":{"x":12130.872860767158,"y":7130.645905776549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End - Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support5Rate - record.support5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"bb8bdab3-a9c1-4288-aa35-3836872c0879","savedPayload":{"position":{"x":11771.11055908613,"y":6529.240750658589},"targetPosition":{"x":11891.239396535475,"y":6729.998580841144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca37a88a-7a07-40c8-99ac-f8b8ff2d5d4d","savedPayload":{"position":{"x":11891.239396535475,"y":6729.998580841144},"targetPosition":{"x":12130.872860767158,"y":7130.645905776549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.support5Rate + record.support5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"3331746d-bc53-41a4-990f-5eb061c90f71","savedPayload":{"position":{"x":11974.6599319819,"y":6447.36415272243},"targetPosition":{"x":12026.788533151877,"y":6675.466617399639},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e1833970-01d0-4715-ad2d-9e717510fd30","savedPayload":{"position":{"x":12026.788533151877,"y":6675.466617399639},"targetPosition":{"x":12130.872860767158,"y":7130.645905776549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End + Zone Resistance","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.support5Rate + record.support5Rate * record.supportResistanceZone / 2 / 100","project":"Superalgos","id":"39bc39ce-251f-4b18-8979-503e0ff9ccf2","savedPayload":{"position":{"x":12193.251608290575,"y":6432.301174749914},"targetPosition":{"x":12172.496106819512,"y":6665.3456969479885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"15092839-5205-4e95-b729-0ed82fcfe928","savedPayload":{"position":{"x":12172.496106819512,"y":6665.3456969479885},"targetPosition":{"x":12130.872860767158,"y":7130.645905776549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc8b9272-d199-4b95-b168-a8da25c5b86b","savedPayload":{"position":{"x":6914.747763303431,"y":17214.245072517373},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Support Line 1","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support1Rate > 0","project":"Superalgos","id":"e5678d95-7929-42d1-8eb2-ba51b0572876","savedPayload":{"position":{"x":10972.11117591483,"y":8565.74208669509},"targetPosition":{"x":11588.25314840889,"y":8699.11751078076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"1b1df2b6-4914-4feb-a4f7-c8f512b9782d","savedPayload":{"position":{"x":10412.869689874256,"y":8242.879128486185},"targetPosition":{"x":11000.561419141573,"y":8470.998319633472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c7501b66-ee83-48ae-8985-758803465027","savedPayload":{"position":{"x":11000.561419141573,"y":8470.998319633472},"targetPosition":{"x":11588.25314840889,"y":8699.11751078076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 1","project":"Superalgos","id":"7df5f6a2-5785-4f8d-a580-1b389606d6e9","savedPayload":{"position":{"x":11043.482583179903,"y":8381.871604142088},"targetPosition":{"x":11588.25314840889,"y":8699.11751078076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 1","id":"d621b89c-3082-47ed-836e-7a98d611df2b"}}},{"type":"Polygon Vertex","name":"End 1","project":"Superalgos","id":"78cc5e46-abcc-4801-9115-a66e8ac81704","savedPayload":{"position":{"x":11099.81780652402,"y":8300.556535750951},"targetPosition":{"x":11588.25314840889,"y":8699.11751078076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 1","id":"bed52b2e-acb6-4b21-90de-8fd08dcd5d34"}}}],"id":"8baf5a5e-fde5-4405-aea2-035bfa3872c1","savedPayload":{"position":{"x":6956.326654492344,"y":17187.2976942588},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Line 2","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support2Rate > 0","project":"Superalgos","id":"0ae326f3-874b-47bb-9064-2e04fa2e38eb","savedPayload":{"position":{"x":11046.008466831929,"y":8393.80531767649},"targetPosition":{"x":11635.390067107273,"y":8617.52224434002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TURQUOISE\"\n }\n}","project":"Superalgos","id":"b09aa70a-6823-45fb-aa40-9ebf5df20f73","savedPayload":{"position":{"x":10541.133473086858,"y":7991.1978535340695},"targetPosition":{"x":11088.261770097066,"y":8304.360048937044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"87204e2e-e562-426d-aed8-5ead73ef48f7","savedPayload":{"position":{"x":11088.261770097066,"y":8304.360048937044},"targetPosition":{"x":11635.390067107273,"y":8617.52224434002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 2","project":"Superalgos","id":"787fc2c9-a2c4-447e-b7ab-fa46c78b9653","savedPayload":{"position":{"x":11143.987187849307,"y":8222.62587277416},"targetPosition":{"x":11635.390067107273,"y":8617.52224434002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 2","id":"95e33e9a-7524-4efa-b431-7b4532cf947b"}}},{"type":"Polygon Vertex","name":"End 2","project":"Superalgos","id":"3e493a72-7315-4688-93f2-54973cdba641","savedPayload":{"position":{"x":11211.812575361531,"y":8150.615355865146},"targetPosition":{"x":11635.390067107273,"y":8617.52224434002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 2","id":"636187fb-4abe-4524-a3e2-c5930abb7b15"}}}],"id":"baca2e09-2b91-4b8b-9176-e758bfcb4258","savedPayload":{"position":{"x":7001.773856483089,"y":17167.561503675952},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Line 3","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support3Rate > 0","project":"Superalgos","id":"07949760-a5fe-4a9c-a3e7-85628f7703ad","savedPayload":{"position":{"x":11144.656185098844,"y":8234.80482296671},"targetPosition":{"x":11694.111602129102,"y":8543.865785747534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n }\n}","project":"Superalgos","id":"25eef631-4528-4acd-b69c-26a6d97436fb","savedPayload":{"position":{"x":10705.425756728728,"y":7761.446438350907},"targetPosition":{"x":11199.768679428915,"y":8152.656112049219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"66ae3554-cec4-4591-a346-32f09e0212ab","savedPayload":{"position":{"x":11199.768679428915,"y":8152.656112049219},"targetPosition":{"x":11694.111602129102,"y":8543.865785747534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 3","project":"Superalgos","id":"b5b6232d-dde2-49f8-854d-722a4cbf9f01","savedPayload":{"position":{"x":11267.053537145963,"y":8080.140281648653},"targetPosition":{"x":11694.111602129102,"y":8543.865785747534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 3","id":"85f4f1ed-4b3d-4381-af30-a85e4bfd6dd7"}}},{"type":"Polygon Vertex","name":"End 3","project":"Superalgos","id":"0ff2207e-8476-4417-acb7-e799b37e48ee","savedPayload":{"position":{"x":11344.853981747354,"y":8019.042912175713},"targetPosition":{"x":11694.111602129102,"y":8543.865785747534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 3","id":"9fc5841d-ba9c-4ae6-a445-d609b0e947dd"}}}],"id":"fbe179c2-99ac-44f0-952c-c9ebb205b252","savedPayload":{"position":{"x":7049.849688077372,"y":17155.574852599526},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Line 4","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support4Rate > 0","project":"Superalgos","id":"38995b73-26f1-4211-81b1-4bc4500c9715","savedPayload":{"position":{"x":11265.948183752113,"y":8092.265400466944},"targetPosition":{"x":11763.203491468568,"y":8479.766488164405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"0e256852-2fcc-44db-b917-47ac825583c9","savedPayload":{"position":{"x":10902.174002720301,"y":7558.7301394888955},"targetPosition":{"x":11332.688747094435,"y":8019.248313826651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8dcde804-7625-49ec-95ea-938eaf512aa6","savedPayload":{"position":{"x":11332.688747094435,"y":8019.248313826651},"targetPosition":{"x":11763.203491468568,"y":8479.766488164405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 4","project":"Superalgos","id":"f0498624-74bb-4833-8113-f5570e7078f8","savedPayload":{"position":{"x":11410.030012239771,"y":7957.570713010746},"targetPosition":{"x":11763.203491468568,"y":8479.766488164405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 4","id":"e69a3f5b-dcde-4d4a-8ac7-87616ebf68f3"}}},{"type":"Polygon Vertex","name":"End 4","project":"Superalgos","id":"1f0b03df-f4f7-4a58-80c5-6690c44859fb","savedPayload":{"position":{"x":11496.067580559298,"y":7908.751305247542},"targetPosition":{"x":11763.203491468568,"y":8479.766488164405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 4","id":"1832f8f2-ac4a-4e1f-94ff-c29c18a350d7"}}}],"id":"764238be-83c1-4523-a7a8-8f8245651b61","savedPayload":{"position":{"x":7099.242765913643,"y":17151.66470562401},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Line 5","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support5Rate > 0","project":"Superalgos","id":"d6c0fe91-6372-42e7-b594-2effc21b9086","savedPayload":{"position":{"x":11407.098756760464,"y":7969.398835568401},"targetPosition":{"x":11841.046093278397,"y":8426.683914209609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [1,5],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"7d618b16-acc1-481e-a9a1-a5fe7702098b","savedPayload":{"position":{"x":11126.906937152475,"y":7387.604994317875},"targetPosition":{"x":11483.976515215436,"y":7907.144454263742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1ed4cfc8-ac56-40de-9fc0-038c38385637","savedPayload":{"position":{"x":11483.976515215436,"y":7907.144454263742},"targetPosition":{"x":11841.046093278397,"y":8426.683914209609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 5","project":"Superalgos","id":"841fe68b-d131-4a9e-8968-0fdd36967327","savedPayload":{"position":{"x":11569.646511728308,"y":7857.682858715561},"targetPosition":{"x":11841.046093278397,"y":8426.683914209609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 5","id":"aa501f2a-8d27-40af-aaea-58bc7c5f42db"}}},{"type":"Polygon Vertex","name":"End 5","project":"Superalgos","id":"212c5989-a35a-42a2-b0e5-2427d138c950","savedPayload":{"position":{"x":11661.999266662515,"y":7822.231957559881},"targetPosition":{"x":11841.046093278397,"y":8426.683914209609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 5","id":"6aa7f5e1-5987-4619-8ec7-39a424d7734a"}}}],"id":"96977063-3da0-4745-9c71-782818e4a157","savedPayload":{"position":{"x":7148.6057755866705,"y":17155.937721365914},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.typeSupport=== 'Support'","project":"Superalgos","id":"056d896f-1067-4317-92af-3d201055435d","savedPayload":{"position":{"x":12585.851409834679,"y":6182.212982822518},"targetPosition":{"x":12754.236705322011,"y":7098.66276211842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0,\n \"paletteColor\": \"UI_COLOR.DARK\"\n }\n}","project":"Superalgos","id":"068045f8-ddda-41c1-92b4-2d42f9e9608d","savedPayload":{"position":{"x":12878.257493495308,"y":5243.5006039278915},"targetPosition":{"x":12877.139484333155,"y":6175.0265088499655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.typeSupport=== 'Support'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\",\n \"opacity\": 0.5\n}","project":"Superalgos","id":"05143777-f193-4148-95f6-ea719e452836","savedPayload":{"position":{"x":13361.795547172755,"y":4376.25858021936},"targetPosition":{"x":13119.514555264665,"y":5275.615244767358},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"73181d20-e10c-44c4-b54c-2504b7474582","savedPayload":{"position":{"x":13119.514555264665,"y":5275.615244767358},"targetPosition":{"x":12877.139484333155,"y":6175.0265088499655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"40d55683-c8d8-407f-9fe3-f13a713fc79d","savedPayload":{"position":{"x":12877.139484333155,"y":6175.0265088499655},"targetPosition":{"x":12754.236705322011,"y":7098.66276211842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Base Left","project":"Superalgos","id":"362ecc6e-b0b5-456d-b727-f97b1bd60f5e","savedPayload":{"position":{"x":13156.636843506985,"y":6258.346100858263},"targetPosition":{"x":12754.236705322011,"y":7098.66276211842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Left","id":"c3182836-3d36-45b4-8384-d4ecf78ebcc0"}}},{"type":"Polygon Vertex","name":"Base Right","project":"Superalgos","id":"63d2fd83-f7a5-4267-a416-7a5ff9e163fc","savedPayload":{"position":{"x":13396.61875799283,"y":6423.904279960588},"targetPosition":{"x":12754.236705322011,"y":7098.66276211842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Right","id":"beb7e536-5af8-4b52-8194-8053bf181c4a"}}}],"id":"b4567b9b-e1e1-463b-bf64-ab3e25bcbced","savedPayload":{"position":{"x":7196.5922228723375,"y":17168.277343094716},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Zone 1","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support1Bounce1 > 0","project":"Superalgos","id":"b5bd335d-555f-4cf5-a870-84130fccdf43","savedPayload":{"position":{"x":7514.953391315019,"y":16986.041548612826},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"56f2b454-13f9-44ac-9714-9169421c3ab5","savedPayload":{"position":{"x":7336.065223552207,"y":16828.872382936454},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"bf1ec91e-798c-4f93-bfb3-d89c15f94b3e","savedPayload":{"position":{"x":7190.349888131015,"y":16547.397718446533},"targetPosition":{"x":7385.032277077469,"y":16775.64926265621},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"369f0304-059f-4776-b557-4bd973c8ebed","savedPayload":{"position":{"x":7385.032277077469,"y":16775.64926265621},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"0245085a-a486-4195-ba1b-259323a5e8a5","savedPayload":{"position":{"x":7310.912460789288,"y":16467.481778063775},"targetPosition":{"x":7445.313563406606,"y":16735.69129246483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3014da4a-245e-47bb-b1c4-690199dae1de","savedPayload":{"position":{"x":7445.313563406606,"y":16735.69129246483},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"43cecedf-d860-49a4-96fe-9df0d1ddf168","savedPayload":{"position":{"x":7447.096840559541,"y":16418.74056183116},"targetPosition":{"x":7513.405753291732,"y":16711.320684348524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ec472c0f-1f89-4700-8727-ef9439a38cea","savedPayload":{"position":{"x":7513.405753291732,"y":16711.320684348524},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"f4a644bc-9041-4f3a-9a8e-9e028d229848","savedPayload":{"position":{"x":7590.988486299604,"y":16404.00673206902},"targetPosition":{"x":7585.351576161764,"y":16703.953769467455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"787cc836-17ba-4215-9fee-bb95a8faaae7","savedPayload":{"position":{"x":7585.351576161764,"y":16703.953769467455},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"f9a74516-d1e2-4856-9a22-4478cdca1820","savedPayload":{"position":{"x":7734.2249385839095,"y":16424.136565407825},"targetPosition":{"x":7656.969802303916,"y":16714.018686136857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"26987001-a080-4d7c-86d2-d7962d00f6d1","savedPayload":{"position":{"x":7656.969802303916,"y":16714.018686136857},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"55e75ea7-2000-4205-bf6c-8c11a5275b2f","savedPayload":{"position":{"x":7868.481815449013,"y":16477.96018910291},"targetPosition":{"x":7724.098240736468,"y":16740.9304979844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3eda536-af6e-4f5f-bb22-656d6b39bebc","savedPayload":{"position":{"x":7724.098240736468,"y":16740.9304979844},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"7b0919e6-f6bc-41bb-b622-526bb07e47a6","savedPayload":{"position":{"x":7985.956595215415,"y":16562.349569786005},"targetPosition":{"x":7782.835630619669,"y":16783.125188325947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c028550f-7cfc-4396-9cd0-c3fcdece2fe5","savedPayload":{"position":{"x":7782.835630619669,"y":16783.125188325947},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"b9e4b31f-f89c-42d0-8354-120ebdc6d77f","savedPayload":{"position":{"x":8079.822070686547,"y":16672.400303394752},"targetPosition":{"x":7829.768368355235,"y":16838.15055513032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"11201d66-b0d7-4bd4-8c18-7b64130a5a90","savedPayload":{"position":{"x":7829.768368355235,"y":16838.15055513032},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"82aa4a80-1427-44c3-b120-1d9fab15f7e1","savedPayload":{"position":{"x":8144.623121615128,"y":16801.716641309933},"targetPosition":{"x":7862.168893819526,"y":16902.80872408791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9a635365-7b91-4391-9bb0-85cfee5834b3","savedPayload":{"position":{"x":7862.168893819526,"y":16902.80872408791},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"4bde1691-62af-4346-947e-080566ff50bd","savedPayload":{"position":{"x":8176.593746463441,"y":16942.78318801769},"targetPosition":{"x":7878.154206243682,"y":16973.34199744179},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"079b7df2-d09b-42c1-9ecc-2bd9fc5e9254","savedPayload":{"position":{"x":7878.154206243682,"y":16973.34199744179},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support1Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"bbb57f56-8fe2-4df4-9655-7f5e55b002f9","savedPayload":{"position":{"x":8173.875928723792,"y":17087.40166857939},"targetPosition":{"x":7876.7952973738575,"y":17045.65123772264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ca5d32e3-e0ab-4eff-9628-dbb733efdc25","savedPayload":{"position":{"x":7876.7952973738575,"y":17045.65123772264},"targetPosition":{"x":7579.714666023923,"y":17003.900806865888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f57c1875-5b81-4ad3-a305-10c63f3f1c58","savedPayload":{"position":{"x":7579.714666023923,"y":17003.900806865888},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"ba9a2688-0072-44cc-8a9a-968ecfaf7bf3","savedPayload":{"position":{"x":7638.8781815398725,"y":17035.723035560088},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"99a2940d-3e17-43dc-82ae-6bfd948adaf5"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"4f693d5f-4a81-4dd4-b408-a9b01aa92b16","savedPayload":{"position":{"x":7689.477232149566,"y":17079.912535270647},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"fbd722bf-0f89-46e6-9933-2ce46f906efa"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"4daa243a-7b3c-438d-b721-34db4423fe57","savedPayload":{"position":{"x":7728.974570172202,"y":17134.25345996279},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"bef0f6c3-3a0d-4c72-a2df-7714001aeb59"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"76f18b23-1e2e-4234-995e-0af0e8b0ea33","savedPayload":{"position":{"x":7755.389634152805,"y":17196.020928764516},"targetPosition":{"x":7468.081378171071,"y":17282.357282896097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"c112aca0-14de-4cc3-9e05-20b28aed8dd2"}}}],"id":"d4705ff6-d94b-4f94-8fd0-9215cf9844ad","savedPayload":{"position":{"x":7241.893162580023,"y":17188.34697809664},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Zone 2","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support2Bounce1 > 0","project":"Superalgos","id":"6c4c67af-9468-47f7-b51a-b79b93a2d251","savedPayload":{"position":{"x":7597.586504683393,"y":17033.36021885846},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"a50dcbd3-d699-44cf-a9f2-58d88a7ee84b","savedPayload":{"position":{"x":7447.0073327948085,"y":16848.8906110682},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"e1af646c-9718-461e-9b49-565c1c972f1e","savedPayload":{"position":{"x":7349.608571699122,"y":16547.270938195812},"targetPosition":{"x":7504.066777209766,"y":16804.45309688967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"110cf71c-ed22-41e1-8ad6-a1bf36d645ed","savedPayload":{"position":{"x":7504.066777209766,"y":16804.45309688967},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"1058548a-13b4-4a58-9b33-d0aebfd91caa","savedPayload":{"position":{"x":7481.680559472123,"y":16488.288894327103},"targetPosition":{"x":7570.102771096266,"y":16774.962074955314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"52bd90e4-a17b-4890-b825-0b52f27b2c4d","savedPayload":{"position":{"x":7570.102771096266,"y":16774.962074955314},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"a8f6da8e-f165-4a12-983f-ef8a97327020","savedPayload":{"position":{"x":7624.03010232099,"y":16462.627656945384},"targetPosition":{"x":7641.2775425207,"y":16762.131456264455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"47385aa9-0c34-4751-95bb-21858278cb38","savedPayload":{"position":{"x":7641.2775425207,"y":16762.131456264455},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"d9af1bcb-8bc7-4769-a529-9838c89427fa","savedPayload":{"position":{"x":7768.384362234887,"y":16471.77856389249},"targetPosition":{"x":7713.454672477648,"y":16766.706909738008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ded9c2c3-27b0-482f-a30f-950ef8749323","savedPayload":{"position":{"x":7713.454672477648,"y":16766.706909738008},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"a0d2dd1f-91ef-4687-98a0-a5a01e852281","savedPayload":{"position":{"x":7906.353994333993,"y":16515.20979771884},"targetPosition":{"x":7782.439488527201,"y":16788.422526651182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9acf6d3-26d8-431e-bbba-4f6420852018","savedPayload":{"position":{"x":7782.439488527201,"y":16788.422526651182},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"93ec8d12-8654-45cc-9239-7b0bbbd22cd0","savedPayload":{"position":{"x":8029.920705099925,"y":16590.39729298056},"targetPosition":{"x":7844.222843910167,"y":16826.016274282043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4fa39625-af25-4f04-a5e7-e92e5e0eba1d","savedPayload":{"position":{"x":7844.222843910167,"y":16826.016274282043},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"032131bf-e21c-4bd2-ac78-2d7734ab4225","savedPayload":{"position":{"x":8131.903246449685,"y":16692.97142574846},"targetPosition":{"x":7895.214114585047,"y":16877.303340665992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"62862dc4-aad1-4ef9-b295-7c59bc879cda","savedPayload":{"position":{"x":7895.214114585047,"y":16877.303340665992},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"e1a38cbf-808e-47f3-af28-faa275e82913","savedPayload":{"position":{"x":8206.374763771477,"y":16816.970960267885},"targetPosition":{"x":7932.449873245943,"y":16939.303107925705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3dbc7e95-34b0-4d83-a7e8-caf0028b681f","savedPayload":{"position":{"x":7932.449873245943,"y":16939.303107925705},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"7f50ebb2-5ead-4674-b471-360ac903cbd1","savedPayload":{"position":{"x":8249.007243171509,"y":16955.189494312515},"targetPosition":{"x":7953.766112945959,"y":17008.41237494802},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"da7f2571-7735-4eaa-bb9e-ecc31babe8fc","savedPayload":{"position":{"x":7953.766112945959,"y":17008.41237494802},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"6aaeedbe-c4d7-46a6-96c5-0f6970c4be89","savedPayload":{"position":{"x":8257.323039909803,"y":17099.594269087625},"targetPosition":{"x":7957.924011315106,"y":17080.614762335576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a06c3c37-a556-472b-90bb-25d9bf66b34f","savedPayload":{"position":{"x":7957.924011315106,"y":17080.614762335576},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support2Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"561e0e03-b5e4-4b7e-a606-2053b174544a","savedPayload":{"position":{"x":8230.838870106636,"y":17241.793003973275},"targetPosition":{"x":7944.681926413523,"y":17151.7141297784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"980dd97a-6ccf-45d3-9ddd-464b406af3d8","savedPayload":{"position":{"x":7944.681926413523,"y":17151.7141297784},"targetPosition":{"x":7658.52498272041,"y":17061.635255583526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8708e97c-7c5f-45c3-bb04-4cdb69f35d2a","savedPayload":{"position":{"x":7658.52498272041,"y":17061.635255583526},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"4a490153-7666-425a-94db-a3407072e08d","savedPayload":{"position":{"x":7711.643818304867,"y":17102.76146515143},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"c3c04eac-b594-45bd-9306-c615bdf6f960"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"bb165791-a19f-42c9-99fd-f55009e98305","savedPayload":{"position":{"x":7754.279411215615,"y":17154.676607686346},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"afd0cabf-291e-464f-82f9-5a17f55afd09"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"ec5ae905-f05e-4f65-b5a2-8423bd220ec3","savedPayload":{"position":{"x":7784.293834793381,"y":17214.777441162816},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"827e511d-aebc-49a2-86de-8869ef2a11b5"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"558801bf-b8f7-4caa-93c2-312ae077baff","savedPayload":{"position":{"x":7800.1820405106555,"y":17280.0502588311},"targetPosition":{"x":7502.58179782753,"y":17317.91971294578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"cdd44658-8050-41fa-8a8f-82677b9a149b"}}}],"id":"40c0fced-4d4b-476f-becb-4201ccb21c2f","savedPayload":{"position":{"x":7283.272903165238,"y":17215.59917904648},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Zone 3","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support3Bounce1 > 0","project":"Superalgos","id":"677b5709-c562-4782-b8db-e5301a57aeab","savedPayload":{"position":{"x":7671.30421294794,"y":17093.634487555708},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"d915645d-778e-46cd-be7c-9205cde4a151","savedPayload":{"position":{"x":7553.141444212099,"y":16886.89628767571},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"88e66929-008b-44f9-8836-1555529a886c","savedPayload":{"position":{"x":7506.716041744985,"y":16573.359004833004},"targetPosition":{"x":7616.736846615979,"y":16852.456519145722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8024c736-7b70-4f68-9cd7-d8f250cc5da0","savedPayload":{"position":{"x":7616.736846615979,"y":16852.456519145722},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"dfc32a91-65d3-4e33-8120-e88b82c065ed","savedPayload":{"position":{"x":7646.694865092242,"y":16536.91973388036},"targetPosition":{"x":7686.726258289607,"y":16834.2368836694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1cb52d9c-92a1-4ea3-8925-1addc66bc0db","savedPayload":{"position":{"x":7686.726258289607,"y":16834.2368836694},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"a5f79b1b-8f2e-4796-b074-08d4266f66ef","savedPayload":{"position":{"x":7791.32664656837,"y":16535.038447011462},"targetPosition":{"x":7759.042149027671,"y":16833.29624023495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"45e75d66-4aac-484c-942a-f8318f6e9179","savedPayload":{"position":{"x":7759.042149027671,"y":16833.29624023495},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"d1ec8f71-dd0c-4de4-b253-d9f80019a5dc","savedPayload":{"position":{"x":7932.205912749123,"y":16567.824477780934},"targetPosition":{"x":7829.481782118048,"y":16849.689255619687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"25eb0205-21fc-4b8f-9dfd-06521be651e3","savedPayload":{"position":{"x":7829.481782118048,"y":16849.689255619687},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"9139ee33-0888-47ca-8409-3dab12aeb215","savedPayload":{"position":{"x":8061.145272759357,"y":16633.372421252814},"targetPosition":{"x":7893.951462123165,"y":16882.463227355627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9cb240b-9c72-4f63-97cb-e96c9de9056e","savedPayload":{"position":{"x":7893.951462123165,"y":16882.463227355627},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"37d2335d-1d62-4b51-a447-0de74026f077","savedPayload":{"position":{"x":8170.651239670791,"y":16727.87286920961},"targetPosition":{"x":7948.704445578882,"y":16929.713451334024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"21e67adf-b609-4620-88ac-5f83fb548d1c","savedPayload":{"position":{"x":7948.704445578882,"y":16929.713451334024},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"bc7b72e5-ccc9-4836-a8ff-f3e2cfbce33b","savedPayload":{"position":{"x":8254.359724724527,"y":16845.83379911121},"targetPosition":{"x":7990.55868810575,"y":16988.693916284825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"620ca150-1755-4a08-8279-9540cab4d22c","savedPayload":{"position":{"x":7990.55868810575,"y":16988.693916284825},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"72241449-0948-4815-8d2b-d13d53c2d3e3","savedPayload":{"position":{"x":8307.405895037198,"y":16980.39975048228},"targetPosition":{"x":8017.081773262085,"y":17055.97689197036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e9311367-87a5-40a0-90ba-560154520098","savedPayload":{"position":{"x":8017.081773262085,"y":17055.97689197036},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"db418ffb-8e5d-4e3e-815f-daaf5b18dead","savedPayload":{"position":{"x":8326.706900005222,"y":17123.75023935646},"targetPosition":{"x":8026.732275746097,"y":17127.65213640745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"349ab36a-f489-4737-810c-de215405546f","savedPayload":{"position":{"x":8026.732275746097,"y":17127.65213640745},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"18cbc1ae-04b1-4950-b2ca-ebf928c2cf89","savedPayload":{"position":{"x":8311.141035376153,"y":17267.55425637821},"targetPosition":{"x":8018.949343431563,"y":17199.554144918326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e79dddb-47f4-4e90-8917-0002eac04b6b","savedPayload":{"position":{"x":8018.949343431563,"y":17199.554144918326},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support3Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"bccbf11b-3740-4519-9811-1fa1d7eef10f","savedPayload":{"position":{"x":8261.612932622622,"y":17403.454434784562},"targetPosition":{"x":7994.185292054797,"y":17267.5042341215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9cdb42b3-d922-40d0-9643-5b1ddc9125a4","savedPayload":{"position":{"x":7994.185292054797,"y":17267.5042341215},"targetPosition":{"x":7726.7576514869725,"y":17131.55403345844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b8a6b5be-21fa-4e43-a687-d20a2149cb2f","savedPayload":{"position":{"x":7726.7576514869725,"y":17131.55403345844},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"d2da5bdd-6b2e-4284-af0f-1caaec186399","savedPayload":{"position":{"x":7772.382863775663,"y":17180.862408111065},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"765f38a2-4cba-49fd-8c86-dd51c8e215db"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"ea5e5b65-da6f-49b3-89c2-d7fa902069c7","savedPayload":{"position":{"x":7805.892011155556,"y":17239.087083714665},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"615e7f76-5ca1-4d42-84f6-0129a2eea01c"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"d0aca66f-f495-4355-b75e-b5f11c39cfc7","savedPayload":{"position":{"x":7825.604805055013,"y":17303.308431909398},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"dd6e16bd-9458-47f8-bce8-856baa66a2d3"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"d05af5c5-9b11-4c9f-be10-b189ef3163fb","savedPayload":{"position":{"x":7830.532763674455,"y":17370.30612613179},"targetPosition":{"x":7530.7582931244,"y":17358.675700239615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"cf270516-0d12-45be-834a-c0024b840b3c"}}}],"id":"dfa786b7-df65-4c51-b088-dd550ae0c5df","savedPayload":{"position":{"x":7319.60271317375,"y":17249.2905769435},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Zone 4","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support4Bounce1 > 0","project":"Superalgos","id":"e751bdf0-0b5a-4063-84af-ea10f0e47a21","savedPayload":{"position":{"x":7734.0956891949245,"y":17165.22022977781},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"251e1404-86d3-4985-8e43-486cc1d6867e","savedPayload":{"position":{"x":7651.572495915589,"y":16941.85271697453},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"bffe3c87-6a71-4824-8446-5f070847eca1","savedPayload":{"position":{"x":7657.386816034359,"y":16624.950303906753},"targetPosition":{"x":7719.969139511657,"y":16918.350121200805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7c57b61-1430-462d-8869-3bb85750888d","savedPayload":{"position":{"x":7719.969139511657,"y":16918.350121200805},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"f42177ce-d5a0-4226-8e34-b771cb3ed2fd","savedPayload":{"position":{"x":7801.454217552517,"y":16612.047774191687},"targetPosition":{"x":7792.002840270736,"y":16911.898856343272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dacf8a6e-f8c0-4c0e-9b70-25b69f62fe1a","savedPayload":{"position":{"x":7792.002840270736,"y":16911.898856343272},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"2b6ddd44-b538-437b-b367-f8e4c5a42e8a","savedPayload":{"position":{"x":7944.423059684155,"y":16633.99775443724},"targetPosition":{"x":7863.487261336555,"y":16922.87384646605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b4b1adb4-b1e3-450e-8fbb-267cf539096f","savedPayload":{"position":{"x":7863.487261336555,"y":16922.87384646605},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"07471740-91b1-4b7a-bdf2-9d9000ca954d","savedPayload":{"position":{"x":8077.98451299519,"y":16689.524591576486},"targetPosition":{"x":7930.267987992072,"y":16950.63726503567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2157982-6f42-4894-b0dc-f54c76e26599","savedPayload":{"position":{"x":7930.267987992072,"y":16950.63726503567},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"66b9ff42-57a7-4e1a-90f8-88b9b48815a8","savedPayload":{"position":{"x":8194.376471295302,"y":16775.401267666723},"targetPosition":{"x":7988.463967142128,"y":16993.57560308079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0ed11a98-f701-4fb3-bfbd-b85a77c75f77","savedPayload":{"position":{"x":7988.463967142128,"y":16993.57560308079},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"609e711b-56c4-422f-8923-ada3996f8918","savedPayload":{"position":{"x":8286.83465703564,"y":16886.636942442612},"targetPosition":{"x":8034.693060012298,"y":17049.193440468734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f729b19a-9c9f-4989-90d0-0b98bc32b3b7","savedPayload":{"position":{"x":8034.693060012298,"y":17049.193440468734},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"f6080a9c-0a1f-4ee8-a798-ac58f005709d","savedPayload":{"position":{"x":8349.985736532824,"y":17016.767002811397},"targetPosition":{"x":8066.26859976089,"y":17114.258470653127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7ccc66c2-8828-422b-97e1-12e68712370d","savedPayload":{"position":{"x":8066.26859976089,"y":17114.258470653127},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"54310033-693e-4fe0-972e-b49accb8da77","savedPayload":{"position":{"x":8380.159598591297,"y":17158.228762667964},"targetPosition":{"x":8081.355530790126,"y":17184.98935058141},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8a0d9b37-3bd7-4661-a28d-986595d5b68c","savedPayload":{"position":{"x":8081.355530790126,"y":17184.98935058141},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"eab6472b-f317-4781-94d1-3d7d0a9db088","savedPayload":{"position":{"x":8375.602648025753,"y":17302.80097872204},"targetPosition":{"x":8079.077055507354,"y":17257.27545860845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"694fbf14-504d-42e9-a147-58bffbb1b360","savedPayload":{"position":{"x":8079.077055507354,"y":17257.27545860845},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"25858bf4-0cc5-48ef-857b-76a094552764","savedPayload":{"position":{"x":8336.579718239216,"y":17442.081639275177},"targetPosition":{"x":8059.5655906140855,"y":17326.915788885017},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"768cec8a-5e96-48b0-adc2-2a0c78439daf","savedPayload":{"position":{"x":8059.5655906140855,"y":17326.915788885017},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support4Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"914bef52-f072-49f8-878e-70fb2ec7b266","savedPayload":{"position":{"x":8265.3586800683,"y":17567.97625860062},"targetPosition":{"x":8023.955071528628,"y":17389.86309854774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"edea1467-c5a4-4cc2-8c4c-cf03700c57a8","savedPayload":{"position":{"x":8023.955071528628,"y":17389.86309854774},"targetPosition":{"x":7782.551462988955,"y":17211.749938494857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20788642-ead1-4b31-abca-6877c0b3d548","savedPayload":{"position":{"x":7782.551462988955,"y":17211.749938494857},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"1fc429c5-f3e3-4cbc-b3c7-fa2b8be4b650","savedPayload":{"position":{"x":7819.438515126698,"y":17267.895474309018},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"8a3f2434-8ab8-44aa-931f-f0aa0bed6310"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"54aebf2a-bfb4-4a58-9a4d-12ae422638e0","savedPayload":{"position":{"x":7842.90717478704,"y":17330.841465611236},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"13dd9d54-d74f-4863-9e86-88b79c9ebe2b"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"006283cf-eb63-4341-8c76-b9ed8707c013","savedPayload":{"position":{"x":7851.780625378029,"y":17397.431537558045},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"73ecbfa9-1e21-4c80-8f17-6eff316dc2d5"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"3a0c604a-2ba5-40a4-9cef-6f8bda916c1c","savedPayload":{"position":{"x":7845.61391503473,"y":17464.326585886105},"targetPosition":{"x":7551.842282720627,"y":17403.513527687162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"6ae4a3ec-2a81-4bae-ae75-3ced2c5cd1cd"}}}],"id":"c246d453-c21e-4977-a94c-395c8ddfcee1","savedPayload":{"position":{"x":7349.891610093275,"y":17288.502158279993},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Support Zone 5","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.support5Bounce1 > 0","project":"Superalgos","id":"eeaae66c-8f4b-4bc0-912f-f80476486d24","savedPayload":{"position":{"x":7542.732022390981,"y":17084.581362191933},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"7c2c5a70-1ccb-4b1e-89b9-93a35e3ff9bd","savedPayload":{"position":{"x":7448.531314037199,"y":16865.882140084057},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"3503a74e-27ab-432d-b23b-384ea189b71c","savedPayload":{"position":{"x":7437.606783480061,"y":16549.11471695042},"targetPosition":{"x":7515.59176052819,"y":16838.8013465259},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b0eb4942-d207-41d7-baea-235288d4c3ba","savedPayload":{"position":{"x":7515.59176052819,"y":16838.8013465259},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 2","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"0014c98f-7ca4-42ce-a904-5358de2ae8cb","savedPayload":{"position":{"x":7580.7920832663995,"y":16528.624197719844},"targetPosition":{"x":7587.18441042136,"y":16828.556086910612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"17498492-0347-435c-b51c-471ec5dde3f5","savedPayload":{"position":{"x":7587.18441042136,"y":16828.556086910612},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 3","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"9d45d527-de65-4e27-a6eb-bebd02822ac4","savedPayload":{"position":{"x":7724.720380690903,"y":16542.995580872688},"targetPosition":{"x":7659.148559133611,"y":16835.741778487034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"abc17a70-8a33-482c-98a1-1e9d8fb506d1","savedPayload":{"position":{"x":7659.148559133611,"y":16835.741778487034},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 4","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.2\n}","project":"Superalgos","id":"095551e1-caff-4550-b6e3-e9fe57fdf87d","savedPayload":{"position":{"x":7861.027086265337,"y":16591.39365385796},"targetPosition":{"x":7727.301911920828,"y":16859.94081497967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6ce3a570-fffb-47b8-adbd-bb5e47ddce01","savedPayload":{"position":{"x":7727.301911920828,"y":16859.94081497967},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 5","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.4\n}","project":"Superalgos","id":"eb84ebd8-a82a-49eb-a125-7b73255da111","savedPayload":{"position":{"x":7981.790549716426,"y":16671.005696593587},"targetPosition":{"x":7787.683643646373,"y":16899.746836347484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"af63db19-44f6-4044-a45e-b02db4d50245","savedPayload":{"position":{"x":7787.683643646373,"y":16899.746836347484},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 6","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"9804666d-4352-4e5d-b37c-85e9d2f2a060","savedPayload":{"position":{"x":8079.992437505724,"y":16777.204946533784},"targetPosition":{"x":7836.784587541022,"y":16952.846461317582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4cd1a79d-2d39-4612-a7f7-d6fc395785a3","savedPayload":{"position":{"x":7836.784587541022,"y":16952.846461317582},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 7","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"e5eea939-7487-42d4-a1b7-7becb3ddf4ab","savedPayload":{"position":{"x":8149.925612864255,"y":16903.81948929059},"targetPosition":{"x":7871.751175220287,"y":17016.153732695984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0489d2e1-3816-4129-9bb6-c9624e283e96","savedPayload":{"position":{"x":7871.751175220287,"y":17016.153732695984},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 8","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1\n}","project":"Superalgos","id":"32efd876-da55-4e6e-a4fe-bc3c06825c31","savedPayload":{"position":{"x":8187.525813836933,"y":17043.49094786412},"targetPosition":{"x":7890.551275706626,"y":17085.98946198275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d85e2688-1a84-4349-b57c-87e2c28b6c74","savedPayload":{"position":{"x":7890.551275706626,"y":17085.98946198275},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 9","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.6\n}","project":"Superalgos","id":"1b688d9a-3f2c-406d-9611-700096e746a7","savedPayload":{"position":{"x":8190.607853414392,"y":17188.102124767174},"targetPosition":{"x":7892.092295495356,"y":17158.295050434277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dddeb326-80d2-4698-b151-22fc5776db4a","savedPayload":{"position":{"x":7892.092295495356,"y":17158.295050434277},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 10","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.8\n}","project":"Superalgos","id":"260cbf65-ecbe-495a-8e31-5e3bab3c44ff","savedPayload":{"position":{"x":8158.992614659149,"y":17329.248744038377},"targetPosition":{"x":7876.284676117734,"y":17228.86836006988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6817cd8b-baac-49cb-912e-c59d0fd08a74","savedPayload":{"position":{"x":7876.284676117734,"y":17228.86836006988},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.support5Bounce1 > 11","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1\n}","project":"Superalgos","id":"c74a9428-2a15-465f-a320-6a1df372b6ec","savedPayload":{"position":{"x":8094.517460330945,"y":17458.72787721279},"targetPosition":{"x":7844.0470989536325,"y":17293.607926657085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f56948e0-bcae-48d5-9460-1b3136a9f5ab","savedPayload":{"position":{"x":7844.0470989536325,"y":17293.607926657085},"targetPosition":{"x":7593.57673757632,"y":17128.48797610138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c53fa25f-d13c-4bba-ad54-f63bc4ab370e","savedPayload":{"position":{"x":7593.57673757632,"y":17128.48797610138},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin - Zone Resistance","project":"Superalgos","id":"97ae8c75-04ed-4106-a8bc-860b928c801c","savedPayload":{"position":{"x":7633.376528863452,"y":17182.60777304088},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin - Zone Resistance","id":"f1da5793-706f-4884-af96-51be961434e8"}}},{"type":"Polygon Vertex","name":"End - Zone Resistance","project":"Superalgos","id":"ff09c05e-8165-4874-ab3e-6b4d536152f5","savedPayload":{"position":{"x":7660.135668527786,"y":17244.226960407286},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End - Zone Resistance","id":"ca37a88a-7a07-40c8-99ac-f8b8ff2d5d4d"}}},{"type":"Polygon Vertex","name":"End + Zone Resistance","project":"Superalgos","id":"d05060f1-47ba-4fb0-9cf1-112b43d7052d","savedPayload":{"position":{"x":7672.512341570114,"y":17310.255694846735},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End + Zone Resistance","id":"15092839-5205-4e95-b729-0ed82fcfe928"}}},{"type":"Polygon Vertex","name":"Begin + Zone Resistance","project":"Superalgos","id":"b45229f5-8479-4ece-a945-ffb00fd63b70","savedPayload":{"position":{"x":7669.885929923608,"y":17377.38301990244},"targetPosition":{"x":7373.3133917731075,"y":17332.16433333406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin + Zone Resistance","id":"e1833970-01d0-4715-ad2d-9e717510fd30"}}}],"id":"be7397f9-5610-4d38-86ee-90c2dfceceef","savedPayload":{"position":{"x":7373.3133917731075,"y":17332.16433333406},"targetPosition":{"x":7098.1404551822525,"y":17451.66268046893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"6daa712b-9aa6-4363-a987-cbef7c95d404","savedPayload":{"position":{"x":7098.1404551822525,"y":17451.66268046893},"targetPosition":{"x":7170.717023862153,"y":17742.751398351727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Support Levels","config":"{ \n\"codeName\": \"Resistances Rates & Periods\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Rate 1","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Rate","project":"Superalgos","id":"7e6ffb7b-700e-4870-be11-e85a42a4b1c4","savedPayload":{"position":{"x":12660.02370251853,"y":6118.5837618853475},"targetPosition":{"x":12973.467942074065,"y":6995.842466073841},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"645eb939-2442-4527-b2a9-41dc9fe757a9","savedPayload":{"position":{"x":12973.467942074065,"y":6995.842466073841},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 1","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Period","project":"Superalgos","id":"6c18d565-f06e-4461-93e0-5076f32d9599","savedPayload":{"position":{"x":12916.274035755076,"y":6046.9504193666135},"targetPosition":{"x":13101.966941213755,"y":6960.134171499978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb9da961-accc-4205-8ae9-4ca89af0cdc2","savedPayload":{"position":{"x":13101.966941213755,"y":6960.134171499978},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Rate","project":"Superalgos","id":"6e0aeeb7-3c81-4ecf-b6f8-09bb8fe599b3","savedPayload":{"position":{"x":13179.94098081714,"y":6012.956171355818},"targetPosition":{"x":13233.898807679252,"y":6942.852257514184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3c3d8ed-b1c8-454d-91f6-a1f178f12baa","savedPayload":{"position":{"x":13233.898807679252,"y":6942.852257514184},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 2","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Period","project":"Superalgos","id":"18e53d69-4c32-4e34-a1ae-c8017b851080","savedPayload":{"position":{"x":13445.590834858594,"y":6016.487186421219},"targetPosition":{"x":13366.606108798529,"y":6944.667620239159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a43ed0c5-2a03-4c06-8ecf-464f323253ce","savedPayload":{"position":{"x":13366.606108798529,"y":6944.667620239159},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Rate","project":"Superalgos","id":"84073b24-07af-4253-91f0-1a3363515fea","savedPayload":{"position":{"x":13708.420632946807,"y":6058.026419645773},"targetPosition":{"x":13497.977795751394,"y":6965.682696481296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7ddd82f0-f22d-4b58-8c82-72da0faad6df","savedPayload":{"position":{"x":13497.977795751394,"y":6965.682696481296},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 3","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Period","project":"Superalgos","id":"cb9423ad-6fc8-4cf8-996c-f6c3ca9d6423","savedPayload":{"position":{"x":13962.192577666614,"y":6136.2249892778855},"targetPosition":{"x":13625.07730741646,"y":7004.5804419478745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d65c13d2-d9b5-426d-916c-fcb049ca684a","savedPayload":{"position":{"x":13625.07730741646,"y":7004.5804419478745},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 4","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support4Rate","project":"Superalgos","id":"3eefba37-d0b5-48c7-8930-2065d0370fd6","savedPayload":{"position":{"x":14202.48038140568,"y":6250.044823916847},"targetPosition":{"x":13745.157842646924,"y":7061.594935258309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cc6ea81e-db56-45ca-ad89-43e3cab97406","savedPayload":{"position":{"x":13745.157842646924,"y":7061.594935258309},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 4","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support4Period","project":"Superalgos","id":"a39d8363-6920-4001-b0f2-0d194c34a7f2","savedPayload":{"position":{"x":14424.175772627164,"y":6396.604006909249},"targetPosition":{"x":13856.06515628512,"y":7134.918477367295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"99f78253-63c7-40f4-bc8a-7e37349ff6f6","savedPayload":{"position":{"x":13856.06515628512,"y":7134.918477367295},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate 5","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support5Rate","project":"Superalgos","id":"344a9d6b-1f59-401c-8b50-97f740c8f141","savedPayload":{"position":{"x":14623.487790961022,"y":6573.733762801851},"targetPosition":{"x":13955.62071716741,"y":7223.518604522331},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f01c7994-93d3-46f2-9135-e25955247914","savedPayload":{"position":{"x":13955.62071716741,"y":7223.518604522331},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Period 5","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support5Period","project":"Superalgos","id":"27ddb6f4-212d-4220-82e7-04b4e3a45fd6","savedPayload":{"position":{"x":14795.237618882486,"y":6777.432788430428},"targetPosition":{"x":14041.60665967776,"y":7325.440280536206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c2195d70-d9d9-4377-8909-adefddae101f","savedPayload":{"position":{"x":14041.60665967776,"y":7325.440280536206},"targetPosition":{"x":13287.748172890337,"y":7873.164714053828},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"635f72c8-0556-46db-87cf-4c15449c1e70","savedPayload":{"position":{"x":7283.099001886926,"y":17464.59624198169},"targetPosition":{"x":7170.717023862153,"y":17742.751398351727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Support Bounces","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Level 1 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Bounce1","project":"Superalgos","id":"d13fcc7c-cc42-4496-ba29-dc8724b5fb29","savedPayload":{"position":{"x":13639.142681930462,"y":7283.150819451561},"targetPosition":{"x":13687.732176151541,"y":7511.7895641433415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"62364bde-b261-4f32-839d-ef2c3878c99f","savedPayload":{"position":{"x":13687.732176151541,"y":7511.7895641433415},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Bounce2","project":"Superalgos","id":"b6e48da2-5f15-4a39-b91a-164c7f27926f","savedPayload":{"position":{"x":13830.530963639114,"y":7258.784600603553},"targetPosition":{"x":13840.661954382624,"y":7492.396919855984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"cf514f7a-499b-48ac-90e9-f94e9808edd1","savedPayload":{"position":{"x":13840.661954382624,"y":7492.396919855984},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Bounce3","project":"Superalgos","id":"642b6ab0-0e00-4f24-9ade-b09618f11590","savedPayload":{"position":{"x":14022.55994851972,"y":7266.298737366085},"targetPosition":{"x":13994.289926646074,"y":7498.43741064804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5bdd2b93-c16d-4580-b7f3-b330bb69092d","savedPayload":{"position":{"x":13994.289926646074,"y":7498.43741064804},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Bounce5","project":"Superalgos","id":"469287dc-1f38-42ce-975c-099fb1cd9f40","savedPayload":{"position":{"x":14211.200111379949,"y":7305.421774355864},"targetPosition":{"x":14145.055961141785,"y":7529.722499475192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c2d2df4c-2b45-4840-82f8-c012a1743b02","savedPayload":{"position":{"x":14145.055961141785,"y":7529.722499475192},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1Bounce10","project":"Superalgos","id":"19caf103-9282-4809-b7c6-a069ad289a2c","savedPayload":{"position":{"x":14390.795411869276,"y":7375.064464460795},"targetPosition":{"x":14288.596602520658,"y":7585.394186134639},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"79e1a09f-925e-48b6-85c2-a22026e04dac","savedPayload":{"position":{"x":14288.596602520658,"y":7585.394186134639},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 1 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support1BounceAll","project":"Superalgos","id":"f19ab711-2207-4110-9d97-06477cfeb543","savedPayload":{"position":{"x":14556.46217678722,"y":7473.31864469663},"targetPosition":{"x":14421.0068389989,"y":7663.931281778161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"eefbe053-1588-40a7-ac65-228590b7046b","savedPayload":{"position":{"x":14421.0068389989,"y":7663.931281778161},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Bounce1","project":"Superalgos","id":"08a5148e-4fe4-45bf-aa97-2e58a63a74ef","savedPayload":{"position":{"x":14703.688281341976,"y":7597.500435170847},"targetPosition":{"x":14538.679508713984,"y":7763.190277996524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"fb6ade4e-292b-47b3-b20f-05fb859b98b4","savedPayload":{"position":{"x":14538.679508713984,"y":7763.190277996524},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Bounce2","project":"Superalgos","id":"c9b2a0ac-b81c-4fc7-8e1d-091853938587","savedPayload":{"position":{"x":14828.460097064399,"y":7744.220679503347},"targetPosition":{"x":14638.406138269405,"y":7880.463491710692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"9a56c631-2c1c-4ae7-a194-89b346df3463","savedPayload":{"position":{"x":14638.406138269405,"y":7880.463491710692},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Bounce3","project":"Superalgos","id":"0373e364-a16d-4b51-b329-012a61b7ace6","savedPayload":{"position":{"x":14927.377312008957,"y":7909.476253072073},"targetPosition":{"x":14717.46756362035,"y":8012.551591081479},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"30071839-72eb-494e-afc6-9a6ab94f9b70","savedPayload":{"position":{"x":14717.46756362035,"y":8012.551591081479},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Bounce5","project":"Superalgos","id":"a2473366-94ac-4849-b862-43428d6d0a98","savedPayload":{"position":{"x":14997.739386510428,"y":8088.757474633909},"targetPosition":{"x":14773.707510638014,"y":8155.852172791792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"8deff06c-f8bc-4726-9907-4b14d0254746","savedPayload":{"position":{"x":14773.707510638014,"y":8155.852172791792},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2Bounce10","project":"Superalgos","id":"d4532f24-7d16-49af-a0ca-46e75a7c2f86","savedPayload":{"position":{"x":15037.629444750106,"y":8277.000402941383},"targetPosition":{"x":14805.59152988483,"y":8306.291951748883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"ebc42c04-3f1f-4236-8367-ce463bf2c90f","savedPayload":{"position":{"x":14805.59152988483,"y":8306.291951748883},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 2 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support2BounceAll","project":"Superalgos","id":"6da34bd1-0980-452b-b6c8-89db0c82d5f5","savedPayload":{"position":{"x":15045.96237097475,"y":8468.951518760048},"targetPosition":{"x":14812.279714096203,"y":8459.815835023473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f4a89e5c-6c86-4244-97c1-ad22ea7cd312","savedPayload":{"position":{"x":14812.279714096203,"y":8459.815835023473},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 ZONE","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Bounce1","project":"Superalgos","id":"84bdb475-2001-4b44-8cf2-03dfd526b973","savedPayload":{"position":{"x":15022.52917493831,"y":8660.118553594264},"targetPosition":{"x":14793.69885317461,"y":8612.789464837419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"b405e855-bb60-4161-93f2-9598d0622c20","savedPayload":{"position":{"x":14793.69885317461,"y":8612.789464837419},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 2 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Bounce2","project":"Superalgos","id":"5ad12a0a-2cae-46ed-b896-7e5db84d4f22","savedPayload":{"position":{"x":14967.791746863451,"y":8844.826056844542},"targetPosition":{"x":14749.953897371557,"y":8760.528115026893},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5edc75a9-9864-48d5-ae37-fa72c4aad2a9","savedPayload":{"position":{"x":14749.953897371557,"y":8760.528115026893},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 3 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Bounce3","project":"Superalgos","id":"a9b8e084-a12c-496c-95b1-d99be5ef8b0e","savedPayload":{"position":{"x":14883.572881144726,"y":9018.282838258481},"targetPosition":{"x":14682.47103299804,"y":8898.985968614901},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d88536c7-cf92-48b1-8501-20b57d8d8a0a","savedPayload":{"position":{"x":14682.47103299804,"y":8898.985968614901},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 5 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Bounce5","project":"Superalgos","id":"8d5ba2b2-d7aa-44bf-861c-d584c25b2a6f","savedPayload":{"position":{"x":14771.993794378537,"y":9175.38449109148},"targetPosition":{"x":14593.320478659738,"y":9024.574013840967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4e750e36-67f4-41fc-b154-e516bc793142","savedPayload":{"position":{"x":14593.320478659738,"y":9024.574013840967},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ 10 %","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3Bounce10","project":"Superalgos","id":"01c3a535-80db-4473-9a07-0779645fd2aa","savedPayload":{"position":{"x":14635.901554658532,"y":9311.69917181917},"targetPosition":{"x":14484.575859612702,"y":9133.516262705574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f8eeae14-9884-4912-9eee-161a8b911600","savedPayload":{"position":{"x":14484.575859612702,"y":9133.516262705574},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Level 3 @ All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.support3BounceAll","project":"Superalgos","id":"778b179e-29a7-4ab3-bbb6-ce81bb805cad","savedPayload":{"position":{"x":14479.00433215949,"y":9423.927626080538},"targetPosition":{"x":14359.257330091397,"y":9223.241429698795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0a53817d-766f-49f1-b233-6cd6bdddd754","savedPayload":{"position":{"x":14359.257330091397,"y":9223.241429698795},"targetPosition":{"x":13881.07749811856,"y":8423.423827258568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7d34b4e7-0593-4b2a-8e4f-a06e6625f6d5","savedPayload":{"position":{"x":7425.131452709081,"y":17583.775619081767},"targetPosition":{"x":7170.717023862153,"y":17742.751398351727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Support Zone Sizes","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Zone * 1","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone","project":"Superalgos","id":"799aebef-4e58-4e2c-ba9f-16ea325ac998","savedPayload":{"position":{"x":13930.09380222697,"y":9717.54530717583},"targetPosition":{"x":13814.295576456385,"y":9700.395467299933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f1f1c795-56fe-4091-804e-d4d472c9142c","savedPayload":{"position":{"x":13814.295576456385,"y":9700.395467299933},"targetPosition":{"x":13352.991293692154,"y":9631.235006436074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 2","project":"Superalgos","id":"32b7a21a-d80c-4bbd-9782-7300dea36122","savedPayload":{"position":{"x":13809.337759313454,"y":9994.825395789172},"targetPosition":{"x":13717.740393258238,"y":9921.928707864678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"19bdcbf6-4979-4b04-ae57-cbe7517c04ea","savedPayload":{"position":{"x":13717.740393258238,"y":9921.928707864678},"targetPosition":{"x":13352.991293692154,"y":9631.235006436074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 3","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 3","project":"Superalgos","id":"fbe0c934-822f-4d54-ad5a-d377b3611066","savedPayload":{"position":{"x":13566.180716957962,"y":10174.382078724446},"targetPosition":{"x":13523.403774817823,"y":10065.403434578086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"3f670609-9458-4bb5-8ab5-cc6b36257377","savedPayload":{"position":{"x":13523.403774817823,"y":10065.403434578086},"targetPosition":{"x":13352.991293692154,"y":9631.235006436074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 5","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 5","project":"Superalgos","id":"5feb8c45-b7d1-49cb-83b7-74518d752328","savedPayload":{"position":{"x":13266.477267210339,"y":10208.187701362172},"targetPosition":{"x":13283.683978031091,"y":10092.428501799413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f4944a67-3321-49f2-9cfe-fa63ebaf74e1","savedPayload":{"position":{"x":13283.683978031091,"y":10092.428501799413},"targetPosition":{"x":13352.991293692154,"y":9631.235006436074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Zone * 10","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.supportResistanceZone * 10","project":"Superalgos","id":"68e84fc5-33ac-4e6b-a7c5-688ced53e4a7","savedPayload":{"position":{"x":12989.465090364305,"y":10087.027691168149},"targetPosition":{"x":13062.263046570482,"y":9995.701079333332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7d9369a7-6fbb-4e97-b447-6620d98d3089","savedPayload":{"position":{"x":13062.263046570482,"y":9995.701079333332},"targetPosition":{"x":13352.991293692154,"y":9631.235006436074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"24739677-7e84-4013-81db-db4de744c467","savedPayload":{"position":{"x":7469.9862389401005,"y":17763.678340474966},"targetPosition":{"x":7170.717023862153,"y":17742.751398351727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1a104c65-6470-4694-a39e-4663f15e490c","savedPayload":{"position":{"x":7170.717023862153,"y":17742.751398351727},"targetPosition":{"x":6977.880740956191,"y":17972.56473128742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0fd59bed-c28b-434c-801e-a2671e609f0d","savedPayload":{"position":{"x":6977.880740956191,"y":17972.56473128742},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Fees Band","config":"{ \n \"codeName\": \"Fees-Band\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Fees Band","config":"{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"band\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Upper Band","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginUpperBand","project":"Superalgos","id":"77e2cda7-d480-4c63-9ade-2223cf5866c4","savedPayload":{"position":{"x":7542.677770506758,"y":17578.04013463916},"targetPosition":{"x":7765.641466904544,"y":17547.837649830188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2e952c2-3a4a-4857-b329-08b1a7db3f92","savedPayload":{"position":{"x":7765.641466904544,"y":17547.837649830188},"targetPosition":{"x":7988.605163302331,"y":17517.635165021216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Upper Band","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endUpperBand","project":"Superalgos","id":"8adb9a33-c824-453b-a8bd-46e0503934bf","savedPayload":{"position":{"x":7592.3371739668,"y":17304.39426690837},"targetPosition":{"x":7790.471168634565,"y":17411.014715964793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ff8660a3-65b0-4df3-b823-f0656537ea30","savedPayload":{"position":{"x":7790.471168634565,"y":17411.014715964793},"targetPosition":{"x":7988.605163302331,"y":17517.635165021216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Lower Band","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginLowerBand","project":"Superalgos","id":"16e335e4-11dd-4e86-93f6-46670d92aa65","savedPayload":{"position":{"x":7793.357480699429,"y":17112.19917446513},"targetPosition":{"x":7890.98132200088,"y":17314.917169743174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a5d52420-869d-4597-bbf8-27288030c2cb","savedPayload":{"position":{"x":7890.98132200088,"y":17314.917169743174},"targetPosition":{"x":7988.605163302331,"y":17517.635165021216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Lower Band","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endLowerBand","project":"Superalgos","id":"ee0c792c-0b87-448f-a86a-026997df426f","savedPayload":{"position":{"x":8068.95576596172,"y":17074.866850151833},"targetPosition":{"x":8028.7804646320255,"y":17296.251007586525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad2678ac-2687-4a83-84f5-3447adab39e0","savedPayload":{"position":{"x":8028.7804646320255,"y":17296.251007586525},"targetPosition":{"x":7988.605163302331,"y":17517.635165021216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d7e9c7b-b8b1-4194-a81e-fb5ba2ee3c9d","savedPayload":{"position":{"x":7082.34200743597,"y":17426.210686539758},"targetPosition":{"x":7375.786287656112,"y":17488.584193785086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.2\n }\n}","project":"Superalgos","id":"7a0a39fb-3009-4c68-b5af-76ebfac5b5f4","savedPayload":{"position":{"x":6796.300474090256,"y":16946.185639329127},"targetPosition":{"x":7070.364111383036,"y":17068.206632251866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"67bb5ca8-09fc-4b35-9e01-53acbcde2f6d","savedPayload":{"position":{"x":7070.364111383036,"y":17068.206632251866},"targetPosition":{"x":7344.4277486758165,"y":17190.227625174604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Upper Band","project":"Superalgos","id":"770ba99e-6809-491a-bdc2-3351fb82a848","savedPayload":{"position":{"x":7168.092172988075,"y":16947.52252686212},"targetPosition":{"x":7344.4277486758165,"y":17190.227625174604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Upper Band","id":"b2e952c2-3a4a-4857-b329-08b1a7db3f92"}}},{"type":"Polygon Vertex","name":"End Upper Band","project":"Superalgos","id":"1f0c5a04-316d-46f3-9809-9e7b7f5c8d68","savedPayload":{"position":{"x":7313.069209695521,"y":16891.871056564123},"targetPosition":{"x":7344.4277486758165,"y":17190.227625174604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Upper Band","id":"ff8660a3-65b0-4df3-b823-f0656537ea30"}}},{"type":"Polygon Vertex","name":"End Lower Band","project":"Superalgos","id":"784a2f26-c01b-4dd4-be3e-c19a67e51efb","savedPayload":{"position":{"x":7466.448741598557,"y":16916.163987881824},"targetPosition":{"x":7344.4277486758165,"y":17190.227625174604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Lower Band","id":"ad2678ac-2687-4a83-84f5-3447adab39e0"}}},{"type":"Polygon Vertex","name":"Begin Lower Band","project":"Superalgos","id":"c5b96ae9-9650-461f-b480-e934eaed42b9","savedPayload":{"position":{"x":7587.132846988301,"y":17013.89204948686},"targetPosition":{"x":7344.4277486758165,"y":17190.227625174604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Lower Band","id":"a5d52420-869d-4597-bbf8-27288030c2cb"}}}],"id":"170768fe-218b-4efc-84b1-7fe4360c4bc6","savedPayload":{"position":{"x":7344.4277486758165,"y":17190.227625174604},"targetPosition":{"x":7375.786287656112,"y":17488.584193785086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Upper Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.5,\n \"lineWidth\": 0.2\n }\n}","project":"Superalgos","id":"ef35f6f5-edb4-4e2b-ae3b-b12322a6eb01","savedPayload":{"position":{"x":7864.870694676072,"y":16806.414944964028},"targetPosition":{"x":7757.360309812482,"y":17086.489072913188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c9a19eef-84bb-422d-befa-b7e893ef3813","savedPayload":{"position":{"x":7757.360309812482,"y":17086.489072913188},"targetPosition":{"x":7649.849924948892,"y":17366.563200862347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Upper Band","project":"Superalgos","id":"0453f7d1-db79-436f-b0ab-27cd121aa058","savedPayload":{"position":{"x":7923.9135622416725,"y":17244.54220793961},"targetPosition":{"x":7649.849924948892,"y":17366.563200862347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Upper Band","id":"b2e952c2-3a4a-4857-b329-08b1a7db3f92"}}},{"type":"Polygon Vertex","name":"End Upper Band","project":"Superalgos","id":"41e230e4-78d4-43e9-85fb-e5ff01740d63","savedPayload":{"position":{"x":7929.924052898053,"y":17474.07358572594},"targetPosition":{"x":7649.849924948892,"y":17366.563200862347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Upper Band","id":"ff8660a3-65b0-4df3-b823-f0656537ea30"}}}],"id":"93a6b8eb-8c5d-4661-858f-9eb37058f104","savedPayload":{"position":{"x":7649.849924948892,"y":17366.563200862347},"targetPosition":{"x":7375.786287656112,"y":17488.584193785086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Lower Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.5,\n \"lineWidth\": 0.2\n }\n}","project":"Superalgos","id":"5f6e5be0-8b6e-4466-9bc2-a100671f5f74","savedPayload":{"position":{"x":8175.703190416513,"y":17742.92921517407},"targetPosition":{"x":7876.114329990141,"y":17727.228428301187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"80bfd142-4af5-4242-9b49-314e88864a10","savedPayload":{"position":{"x":7876.114329990141,"y":17727.228428301187},"targetPosition":{"x":7576.52546956377,"y":17711.527641428303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Lower Band","project":"Superalgos","id":"032f51c9-feac-42c1-b0f2-091fcfd99402","savedPayload":{"position":{"x":7777.264651471427,"y":17934.47108907152},"targetPosition":{"x":7576.52546956377,"y":17711.527641428303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Lower Band","id":"a5d52420-869d-4597-bbf8-27288030c2cb"}}},{"type":"Polygon Vertex","name":"End Lower Band","project":"Superalgos","id":"af720143-1bb7-4f58-b8cb-b6af12c95b2a","savedPayload":{"position":{"x":7560.824682690886,"y":18011.116501854674},"targetPosition":{"x":7576.52546956377,"y":17711.527641428303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Lower Band","id":"ad2678ac-2687-4a83-84f5-3447adab39e0"}}}],"id":"3ccd3764-3fbe-4da1-929f-4b349e4cc8fa","savedPayload":{"position":{"x":7576.52546956377,"y":17711.527641428303},"targetPosition":{"x":7375.786287656112,"y":17488.584193785086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"6873036b-9a25-429f-bee6-bd16d1d41093","savedPayload":{"position":{"x":7375.786287656112,"y":17488.584193785086},"targetPosition":{"x":7225.786287656112,"y":17748.39181492042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[],"id":"eccd3713-e5c8-450c-bfb8-f8821fc429df","savedPayload":{"position":{"x":7225.786287656112,"y":17748.39181492042},"targetPosition":{"x":7075.786287656112,"y":18008.19943605575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"31573886-3aa4-4a73-931c-db92ae11ebf9","savedPayload":{"position":{"x":7075.786287656112,"y":18008.19943605575},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Volume Analysis","config":"{ \n \"codeName\": \"Volume-Analysis\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Volume Analysis","config":"{ \n \"codeName\": \"Volume-Analysis\", \n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Buy Sell Volume","project":"Superalgos","points":[{"type":"Point","name":"Begin Base","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"f8158da3-f5c3-4b74-81dc-2be3c0d22b45","savedPayload":{"position":{"x":6902.867154599915,"y":17406.107130804132},"targetPosition":{"x":7202.8557315191665,"y":17408.725091453645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"faabcc21-5670-470c-bc77-c9aca70886b8","savedPayload":{"position":{"x":7202.8557315191665,"y":17408.725091453645},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Base","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"79b32fa6-3e60-4369-ba3c-3763342a672a","savedPayload":{"position":{"x":6950.541396366954,"y":17176.90437500959},"targetPosition":{"x":7226.692852402686,"y":17294.123713556375},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0fff9bf4-08d1-4f44-bf79-dd08b42ff678","savedPayload":{"position":{"x":7226.692852402686,"y":17294.123713556375},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Buy","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.buyVolume","project":"Superalgos","id":"1260a501-c3d7-42ee-b378-3fb0eafec069","savedPayload":{"position":{"x":7082.298749858508,"y":16983.39278261065},"targetPosition":{"x":7292.571529148463,"y":17197.367917356903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7fdb6f4d-0f74-4631-aa4d-dd903d0229d3","savedPayload":{"position":{"x":7292.571529148463,"y":17197.367917356903},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Buy","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end - (record.end - record.begin) / 2\ny = record.buyVolume","project":"Superalgos","id":"ceec5884-2e1c-497b-b5d3-e8e782d1c3d8","savedPayload":{"position":{"x":7278.08035238887,"y":16855.032739363083},"targetPosition":{"x":7390.462330413644,"y":17133.18789573312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"604de182-f384-408e-9416-7d6f033e2647","savedPayload":{"position":{"x":7390.462330413644,"y":17133.18789573312},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Sell","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end - (record.end - record.begin) / 2\ny = record.sellVolume","project":"Superalgos","id":"b54ab964-74cd-49d0-98a6-da48375d8525","savedPayload":{"position":{"x":7508.080229737443,"y":16811.365898264656},"targetPosition":{"x":7505.4622690879305,"y":17111.354475183907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"50689245-9b87-4751-ac97-fe322011a283","savedPayload":{"position":{"x":7505.4622690879305,"y":17111.354475183907},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Sell","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sellVolume","project":"Superalgos","id":"fbc031e0-d43e-442b-97fe-5a9ad8eb6f9f","savedPayload":{"position":{"x":7737.2829855319815,"y":16859.040140031695},"targetPosition":{"x":7620.0636469852,"y":17135.191596067427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bff175f0-942f-4b80-a47d-4b3a81f8c02e","savedPayload":{"position":{"x":7620.0636469852,"y":17135.191596067427},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Middle Base","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end - (record.end - record.begin) / 2\ny = 0","project":"Superalgos","id":"8043c90f-b8a4-4b96-9d7e-c764dac32e1b","savedPayload":{"position":{"x":7930.794577930927,"y":16990.797493523245},"targetPosition":{"x":7716.819443184672,"y":17201.070272813202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"17046023-8100-436e-af2c-7800523e1b76","savedPayload":{"position":{"x":7716.819443184672,"y":17201.070272813202},"targetPosition":{"x":7502.844308438418,"y":17411.34305210316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fc039fb-29b3-43cf-a68d-4e6e6e25a25a","savedPayload":{"position":{"x":7502.844308438418,"y":17411.34305210316},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"SMA 20","project":"Superalgos","points":[{"type":"Point","name":"Begin Buy SMA 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.buySMA20","project":"Superalgos","id":"c25846dd-bf8e-4ab6-a76d-d0c5ac9d1273","savedPayload":{"position":{"x":7560.58375779623,"y":17132.84400969667},"targetPosition":{"x":7717.333327211014,"y":17388.636059002896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"00cca122-c5d1-4963-a4c5-0ef8402dad6e","savedPayload":{"position":{"x":7717.333327211014,"y":17388.636059002896},"targetPosition":{"x":7874.082896625798,"y":17644.428108309123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Buy SMA 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.buySMA20","project":"Superalgos","id":"f6db70cc-ae4c-4d12-ac9f-cf0fc8a7738d","savedPayload":{"position":{"x":7921.158354062507,"y":17046.277708069243},"targetPosition":{"x":7897.620625344152,"y":17345.352908189183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a84d5f5a-955d-4108-babc-0a79f8963cb1","savedPayload":{"position":{"x":7897.620625344152,"y":17345.352908189183},"targetPosition":{"x":7874.082896625798,"y":17644.428108309123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Sell SMA 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sellSMA20","project":"Superalgos","id":"50905638-9a46-4835-bab4-5103a7c46fce","savedPayload":{"position":{"x":8263.751725623908,"y":17188.184528949107},"targetPosition":{"x":8068.917311124853,"y":17416.306318629115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fccd2ad5-d651-42be-aa67-3a96feac4ae3","savedPayload":{"position":{"x":8068.917311124853,"y":17416.306318629115},"targetPosition":{"x":7874.082896625798,"y":17644.428108309123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Sell SMA 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sellSMA20","project":"Superalgos","id":"3f9f9ad0-2d4c-4036-a616-6307efea7537","savedPayload":{"position":{"x":8457.504848864402,"y":17504.360889995576},"targetPosition":{"x":8165.7938727451,"y":17574.39449915235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85363ef9-6834-4124-885e-f78bc2516112","savedPayload":{"position":{"x":8165.7938727451,"y":17574.39449915235},"targetPosition":{"x":7874.082896625798,"y":17644.428108309123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7b48abfb-2e5a-4b7a-b0f6-ca827685589a","savedPayload":{"position":{"x":7594.299344339955,"y":17390.22899339525},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"SMA 200","project":"Superalgos","points":[{"type":"Point","name":"Begin Buy SMA 200","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.buySMA200","project":"Superalgos","id":"3dd256fa-9944-4d7d-9831-e40dd3493b40","savedPayload":{"position":{"x":7686.4173769120025,"y":17111.47219924951},"targetPosition":{"x":7801.222406621528,"y":17388.636059002896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac42be50-d6da-4956-8c57-240970124355","savedPayload":{"position":{"x":7801.222406621528,"y":17388.636059002896},"targetPosition":{"x":7916.027436331053,"y":17665.799918756282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Buy SMA 200","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.buySMA200","project":"Superalgos","id":"37247409-4983-484d-b719-f9d82f3791b0","savedPayload":{"position":{"x":8056.094654644599,"y":17082.377966517677},"targetPosition":{"x":7986.061045487826,"y":17374.08894263698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a0dd766d-5c5c-4ac1-96f4-6745501455a3","savedPayload":{"position":{"x":7986.061045487826,"y":17374.08894263698},"targetPosition":{"x":7916.027436331053,"y":17665.799918756282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Sell SMA 200","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sellSMA200","project":"Superalgos","id":"fa086961-195a-4b30-b0b8-1045a2ae20b5","savedPayload":{"position":{"x":8372.271015691069,"y":17276.13108975817},"targetPosition":{"x":8144.149226011061,"y":17470.965504257227},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"083d6c60-2cfa-4221-a98b-bc082201f194","savedPayload":{"position":{"x":8144.149226011061,"y":17470.965504257227},"targetPosition":{"x":7916.027436331053,"y":17665.799918756282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Sell SMA 200","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sellSMA200","project":"Superalgos","id":"3885decc-ccaa-4818-991b-ce6f1fa7e7aa","savedPayload":{"position":{"x":8514.177836570932,"y":17618.724461319573},"targetPosition":{"x":8215.102636450993,"y":17642.262190037927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2df7e089-1967-4cd8-8e95-376f9aabd43a","savedPayload":{"position":{"x":8215.102636450993,"y":17642.262190037927},"targetPosition":{"x":7916.027436331053,"y":17665.799918756282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c806e2e4-b5b2-4323-8d82-f73e79e923ac","savedPayload":{"position":{"x":7687.8028551430925,"y":17398.4094905904},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Buy Volume Bar","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.buySMA20 > record.buySMA200 && record.buyVolume > record.buySMA200","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.8\n \n}","project":"Superalgos","id":"87855af8-f080-4f1a-898e-5664b9bc1303","savedPayload":{"position":{"x":7745.318802323669,"y":16863.147171517176},"targetPosition":{"x":7838.023900636152,"y":17148.46412640572},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9ffc7ae4-c366-4588-a604-66f60277d0bd","savedPayload":{"position":{"x":7838.023900636152,"y":17148.46412640572},"targetPosition":{"x":7930.728998948634,"y":17433.781081294266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"!(record.buySMA20 > record.buySMA200 && record.buyVolume > record.buySMA200)","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.2\n \n}","project":"Superalgos","id":"03f1da8f-a211-4454-9bd2-4dacb04c4bdb","savedPayload":{"position":{"x":7899.327425202868,"y":16834.603360441524},"targetPosition":{"x":7915.028212075751,"y":17134.192220867895},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4a78dced-32a2-4c26-a5f6-b1b4d9418cd1","savedPayload":{"position":{"x":7915.028212075751,"y":17134.192220867895},"targetPosition":{"x":7930.728998948634,"y":17433.781081294266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5ae67b38-f0c2-4fac-af8b-6716b4899bdf","savedPayload":{"position":{"x":7930.728998948634,"y":17433.781081294266},"targetPosition":{"x":7985.399656596277,"y":17728.757553563453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Base","project":"Superalgos","id":"7bf6e384-1001-4d1b-b96a-fbdacf74f79e","savedPayload":{"position":{"x":8085.541714366409,"y":17445.9651062358},"targetPosition":{"x":7985.399656596277,"y":17728.757553563453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Base","id":"faabcc21-5670-470c-bc77-c9aca70886b8"}}},{"type":"Polygon Vertex","name":"Begin Buy","project":"Superalgos","id":"cdf8e5eb-f2bb-4793-b90f-11fa2fba4c04","savedPayload":{"position":{"x":8213.521446276285,"y":17533.923139064398},"targetPosition":{"x":7985.399656596277,"y":17728.757553563453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Buy","id":"7fdb6f4d-0f74-4631-aa4d-dd903d0229d3"}}},{"type":"Polygon Vertex","name":"End Buy","project":"Superalgos","id":"53ea875f-63fe-4f33-84bf-fa8e000772fe","savedPayload":{"position":{"x":8280.376128865464,"y":17674.08689591581},"targetPosition":{"x":7985.399656596277,"y":17728.757553563453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Buy","id":"604de182-f384-408e-9416-7d6f033e2647"}}},{"type":"Polygon Vertex","name":"Middle Base","project":"Superalgos","id":"9f4d630e-28d8-44ef-a22c-5b706c0997d7","savedPayload":{"position":{"x":8268.192103923931,"y":17828.899611333585},"targetPosition":{"x":7985.399656596277,"y":17728.757553563453},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Middle Base","id":"17046023-8100-436e-af2c-7800523e1b76"}}}],"id":"11f192dc-eb4a-48ee-81cc-a484285bfe6f","savedPayload":{"position":{"x":7774.202065733153,"y":17435.083779626268},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Sell Volume Bar","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.sellSMA20 > record.sellSMA200 && record.sellVolume > record.sellSMA200 ","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.8\n \n}","project":"Superalgos","id":"ffac30be-b78e-418a-b26b-c6071bc2d13f","savedPayload":{"position":{"x":8073.599584335669,"y":16911.35347994084},"targetPosition":{"x":8073.599584335669,"y":17211.35347994084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e1d52b4a-09ee-451c-aa3d-62ce9f379fcb","savedPayload":{"position":{"x":8073.599584335669,"y":17211.35347994084},"targetPosition":{"x":8073.599584335669,"y":17511.35347994084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"!( record.sellSMA20 > record.sellSMA200 && record.sellVolume > record.sellSMA200 ) ","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.2\n \n}","project":"Superalgos","id":"308a78ae-507a-4047-8231-162422d90173","savedPayload":{"position":{"x":8228.891011397183,"y":16931.7979841674},"targetPosition":{"x":8151.245297866426,"y":17221.57573205412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"71e76b74-39f0-4ed5-bd88-629b956ca6d1","savedPayload":{"position":{"x":8151.245297866426,"y":17221.57573205412},"targetPosition":{"x":8073.599584335669,"y":17511.35347994084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34b8d505-0245-4c5e-8ee9-c62beae9e648","savedPayload":{"position":{"x":8073.599584335669,"y":17511.35347994084},"targetPosition":{"x":8034.441726669655,"y":17808.786938352983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Middle Base","project":"Superalgos","id":"bdd19f84-69dc-41a8-87cd-5f0fbdafa195","savedPayload":{"position":{"x":8217.070155372272,"y":17570.78093626561},"targetPosition":{"x":8034.441726669655,"y":17808.786938352983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Middle Base","id":"17046023-8100-436e-af2c-7800523e1b76"}}},{"type":"Polygon Vertex","name":"Begin Sell","project":"Superalgos","id":"278692ec-1365-4bb2-895d-d07ed07edb24","savedPayload":{"position":{"x":8311.60558642304,"y":17693.981908643458},"targetPosition":{"x":8034.441726669655,"y":17808.786938352983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Sell","id":"50689245-9b87-4751-ac97-fe322011a283"}}},{"type":"Polygon Vertex","name":"End Sell","project":"Superalgos","id":"6d4b46a4-4d29-4ce9-a4cf-d9f79ef2c81d","savedPayload":{"position":{"x":8331.875185081797,"y":17847.944796018997},"targetPosition":{"x":8034.441726669655,"y":17808.786938352983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Sell","id":"bff175f0-942f-4b80-a47d-4b3a81f8c02e"}}},{"type":"Polygon Vertex","name":"End Base","project":"Superalgos","id":"1a32692b-f345-4ce8-b8f1-eb173a6e9b41","savedPayload":{"position":{"x":8272.447728757026,"y":17991.4153670556},"targetPosition":{"x":8034.441726669655,"y":17808.786938352983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Base","id":"0fff9bf4-08d1-4f44-bf79-dd08b42ff678"}}}],"id":"480b24b1-8ee9-4018-86d1-362f149f7881","savedPayload":{"position":{"x":7845.039619398885,"y":17496.661925567234},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Buy SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 0.8\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"eca19f91-9766-4f13-bd9c-cc47432ad3f4","savedPayload":{"position":{"x":8636.441726669655,"y":18036.396997772037},"targetPosition":{"x":8336.441726669655,"y":18036.396997772037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"3f4f66f4-1e05-44b1-977e-4c803c0e57ee","savedPayload":{"position":{"x":8336.441726669655,"y":18036.396997772037},"targetPosition":{"x":8036.441726669655,"y":18036.396997772037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Buy SMA 20","project":"Superalgos","id":"28f5910d-3e5c-462a-a933-59e4ebda9c6d","savedPayload":{"position":{"x":8313.60558642304,"y":18151.202027481566},"targetPosition":{"x":8036.441726669655,"y":18036.396997772037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Buy SMA 20","id":"00cca122-c5d1-4963-a4c5-0ef8402dad6e"}}},{"type":"Polygon Vertex","name":"End Buy SMA 20","project":"Superalgos","id":"c4f28407-5fef-44af-867a-b4f5b66e8c8d","savedPayload":{"position":{"x":8248.573761025618,"y":18248.529032128},"targetPosition":{"x":8036.441726669655,"y":18036.396997772037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Buy SMA 20","id":"a84d5f5a-955d-4108-babc-0a79f8963cb1"}}}],"id":"ec629e5c-341a-4cc3-8ebd-61327c596cbd","savedPayload":{"position":{"x":7893.381442833228,"y":17577.116230448424},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Sell SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 0.8\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"c4e9afdc-300c-4585-ad7b-a1e683f510a2","savedPayload":{"position":{"x":8525.737620779004,"y":18363.33406183753},"targetPosition":{"x":8248.573761025618,"y":18248.529032128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"84c664b3-de4c-4d33-a417-264a8992f606","savedPayload":{"position":{"x":8248.573761025618,"y":18248.529032128},"targetPosition":{"x":7971.409901272233,"y":18133.724002418472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Sell SMA 20","project":"Superalgos","id":"86f37b93-cdb3-49cc-9366-1d04af87a68b","savedPayload":{"position":{"x":8183.541935628196,"y":18345.856036774436},"targetPosition":{"x":7971.409901272233,"y":18133.724002418472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Sell SMA 20","id":"fccd2ad5-d651-42be-aa67-3a96feac4ae3"}}},{"type":"Polygon Vertex","name":"End Sell SMA 20","project":"Superalgos","id":"df33d6c2-5652-4491-b635-f2a01a52b141","savedPayload":{"position":{"x":8086.214930981758,"y":18410.887862171858},"targetPosition":{"x":7971.409901272233,"y":18133.724002418472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Sell SMA 20","id":"85363ef9-6834-4124-885e-f78bc2516112"}}}],"id":"b85ff160-cf73-452a-b824-58010659c377","savedPayload":{"position":{"x":7914.49550154114,"y":17668.571266349958},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Buy SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.8,\n \"lineWidth\": 0.5\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"5ad42bce-0be4-40af-af98-6bc1bd556929","savedPayload":{"position":{"x":8607.682920579577,"y":18172.20221650143},"targetPosition":{"x":8311.376418401036,"y":18125.27187698936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"d49d4d35-54f2-47c9-be57-dcffa4293acd","savedPayload":{"position":{"x":8311.376418401036,"y":18125.27187698936},"targetPosition":{"x":8015.0699162224955,"y":18078.341537477292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Buy SMA 200","project":"Superalgos","id":"0a8b1f9d-4b92-4ec2-988a-6ada06a6df19","savedPayload":{"position":{"x":8270.861965528722,"y":18235.091106892076},"targetPosition":{"x":8015.0699162224955,"y":18078.341537477292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Buy SMA 200","id":"ac42be50-d6da-4956-8c57-240970124355"}}},{"type":"Polygon Vertex","name":"End Buy SMA 200","project":"Superalgos","id":"ab80d6af-82d4-41c6-b696-080c72f76a33","savedPayload":{"position":{"x":8191.405491910238,"y":18321.046635789775},"targetPosition":{"x":8015.0699162224955,"y":18078.341537477292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Buy SMA 200","id":"a0dd766d-5c5c-4ac1-96f4-6745501455a3"}}}],"id":"6b7e1de7-03c6-42e1-b965-83f3ed9f0c29","savedPayload":{"position":{"x":7906.315004345991,"y":17762.074777153095},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Sell SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.8,\n \"lineWidth\": 0.5\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"74783c70-c094-4816-95ac-7aacc5f233d3","savedPayload":{"position":{"x":8488.716195928344,"y":18422.108057586243},"targetPosition":{"x":8221.414238671834,"y":18285.91090766438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"789febe0-ea41-4f50-b6a9-cd696081071b","savedPayload":{"position":{"x":8221.414238671834,"y":18285.91090766438},"targetPosition":{"x":7954.112281415324,"y":18149.713757742516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Sell SMA 200","project":"Superalgos","id":"732d98b7-9ea0-4d9a-bd60-192ae0440cb2","savedPayload":{"position":{"x":8148.946695914379,"y":18377.835547422525},"targetPosition":{"x":7954.112281415324,"y":18149.713757742516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Sell SMA 200","id":"083d6c60-2cfa-4221-a98b-bc082201f194"}}},{"type":"Polygon Vertex","name":"End Sell SMA 200","project":"Superalgos","id":"7441f304-e6bf-47b2-8d1d-f4689b0d6b30","savedPayload":{"position":{"x":8046.817379727807,"y":18435.03071263106},"targetPosition":{"x":7954.112281415324,"y":18149.713757742516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Sell SMA 200","id":"2df7e089-1967-4cd8-8e95-376f9aabd43a"}}}],"id":"79bbc8bc-1138-4669-b0b3-9113cdde1353","savedPayload":{"position":{"x":7869.64071531012,"y":17848.473987743157},"targetPosition":{"x":7615.226286463192,"y":17689.498208473196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"df508a3b-c7ea-479a-8c29-1fe15c62f816","savedPayload":{"position":{"x":7615.226286463192,"y":17689.498208473196},"targetPosition":{"x":7385.412953527499,"y":17882.33449137916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[],"id":"77bf098c-c563-4855-9738-3443a324365c","savedPayload":{"position":{"x":7385.412953527499,"y":17882.33449137916},"targetPosition":{"x":7155.599620591805,"y":18075.17077428512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"316fd407-d13c-49e6-bcf6-1f4ef7562e43","savedPayload":{"position":{"x":7155.599620591805,"y":18075.17077428512},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Candle Analysis","config":"{ \n \"codeName\": \"Candle-Analysis\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Candle Analysis","config":"{ \n \"codeName\": \"Candle-Analysis\", \n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Open Close","project":"Superalgos","points":[{"type":"Point","name":"Begin Last 24 Hs Open","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.last24HsOpen","project":"Superalgos","id":"37d9c626-13f1-45d7-a20e-918385c69983","savedPayload":{"position":{"x":6937.024278089175,"y":17343.61243535871},"targetPosition":{"x":7225.402786870671,"y":17426.303642103812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef270f12-5e8e-4768-a34b-2e063126c45d","savedPayload":{"position":{"x":7225.402786870671,"y":17426.303642103812},"targetPosition":{"x":7513.781295652167,"y":17508.994848848914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Last 24 Hs Open","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.last24HsOpen","project":"Superalgos","id":"b76768c6-c08d-4460-8be5-f37f1a35546d","savedPayload":{"position":{"x":7144.3844104567725,"y":17036.18839668488},"targetPosition":{"x":7329.0828530544695,"y":17272.591622766897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b14d9e80-4158-4e77-af54-0d60391c727b","savedPayload":{"position":{"x":7329.0828530544695,"y":17272.591622766897},"targetPosition":{"x":7513.781295652167,"y":17508.994848848914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Last 24 Hs Close","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.last24HsClose","project":"Superalgos","id":"d0de9804-6aab-4237-80d8-030d741b4375","savedPayload":{"position":{"x":7492.841597630666,"y":16909.360352637454},"targetPosition":{"x":7503.311446641416,"y":17209.177600743184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7390c069-aa45-4bf9-a3e6-665dacea7bb2","savedPayload":{"position":{"x":7503.311446641416,"y":17209.177600743184},"targetPosition":{"x":7513.781295652167,"y":17508.994848848914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Last 24 Hs Close","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.last24HsClose","project":"Superalgos","id":"804a9d50-a592-4fb8-801c-dde8a5c60a86","savedPayload":{"position":{"x":7849.2970377346155,"y":17011.57230531589},"targetPosition":{"x":7681.539166693391,"y":17260.283577082402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7c7778fe-5abb-4d29-af90-372e47aff94a","savedPayload":{"position":{"x":7681.539166693391,"y":17260.283577082402},"targetPosition":{"x":7513.781295652167,"y":17508.994848848914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e407da43-bd31-486a-a3a1-d3e5f1288568","savedPayload":{"position":{"x":7470.944452575966,"y":17528.51672294287},"targetPosition":{"x":7616.387338649867,"y":17790.902635084687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Min Max","project":"Superalgos","points":[{"type":"Point","name":"Begin Last 24 Hs Min","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.last24HsMin","project":"Superalgos","id":"e21003b1-e8c7-4da1-b12c-ede2e8963ea3","savedPayload":{"position":{"x":7214.13592069991,"y":17083.93977355479},"targetPosition":{"x":7433.542031185661,"y":17288.53928157354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"be6f78ad-a14f-482a-8f0c-38c6afa21c35","savedPayload":{"position":{"x":7433.542031185661,"y":17288.53928157354},"targetPosition":{"x":7652.948141671412,"y":17493.13878959229},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Last 24 Hs Min","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.last24HsMin","project":"Superalgos","id":"e4483a05-bb5e-4716-8d29-30a42f69ea7b","savedPayload":{"position":{"x":7538.462744445485,"y":16904.162479523693},"targetPosition":{"x":7595.7054430584485,"y":17198.65063455799},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"572f8098-6ee2-47d7-b10b-671a220331b7","savedPayload":{"position":{"x":7595.7054430584485,"y":17198.65063455799},"targetPosition":{"x":7652.948141671412,"y":17493.13878959229},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Last 24 Hs Max","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.last24HsMax","project":"Superalgos","id":"1d61b534-7a8a-4816-a9cb-ca7c476b0456","savedPayload":{"position":{"x":7906.519098715831,"y":16949.354117370298},"targetPosition":{"x":7779.733620193621,"y":17221.246453481293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c7dafc4c-6127-434c-91f2-50c64dcbdca7","savedPayload":{"position":{"x":7779.733620193621,"y":17221.246453481293},"targetPosition":{"x":7652.948141671412,"y":17493.13878959229},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Last 24 Hs Max","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.last24HsMax","project":"Superalgos","id":"63c18823-4806-4c96-8b92-c443dbcf239f","savedPayload":{"position":{"x":8177.71996595505,"y":17202.253017444484},"targetPosition":{"x":7915.334053813231,"y":17347.695903518386},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c658b47-10e6-4c30-9165-4cd1ed19ed7b","savedPayload":{"position":{"x":7915.334053813231,"y":17347.695903518386},"targetPosition":{"x":7652.948141671412,"y":17493.13878959229},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ce9e4ac4-a126-4867-93c6-cef38e3d2ea1","savedPayload":{"position":{"x":7652.948141671412,"y":17493.13878959229},"targetPosition":{"x":7616.387338649867,"y":17790.902635084687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Min Max Band","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 0.1\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"c715d30a-6309-462f-9c26-ec6c06ae5b78","savedPayload":{"position":{"x":7645.563823834975,"y":16997.713671021113},"targetPosition":{"x":7733.275335251796,"y":17284.605097810025},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1df8c772-630b-4dea-9676-e648c575cc54","savedPayload":{"position":{"x":7733.275335251796,"y":17284.605097810025},"targetPosition":{"x":7820.986846668617,"y":17571.496524598937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Last 24 Hs Min","project":"Superalgos","id":"f8018c15-e606-46d8-8d91-aaf626e105ac","savedPayload":{"position":{"x":7888.472162971776,"y":17279.185505163365},"targetPosition":{"x":7820.986846668617,"y":17571.496524598937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Last 24 Hs Min","id":"be6f78ad-a14f-482a-8f0c-38c6afa21c35"}}},{"type":"Polygon Vertex","name":"Begin Last 24 Hs Max","project":"Superalgos","id":"b2eebdc7-9358-4336-808f-8af8c8a65cf9","savedPayload":{"position":{"x":8025.586354687366,"y":17352.090414113187},"targetPosition":{"x":7820.986846668617,"y":17571.496524598937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Last 24 Hs Max","id":"c7dafc4c-6127-434c-91f2-50c64dcbdca7"}}},{"type":"Polygon Vertex","name":"End Last 24 Hs Max","project":"Superalgos","id":"471158dd-42be-4414-becb-b48269eeb98a","savedPayload":{"position":{"x":8107.878273457527,"y":17483.785013182114},"targetPosition":{"x":7820.986846668617,"y":17571.496524598937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Last 24 Hs Max","id":"8c658b47-10e6-4c30-9165-4cd1ed19ed7b"}}},{"type":"Polygon Vertex","name":"End Last 24 Hs Min","project":"Superalgos","id":"2936e63f-b0b3-46bf-8663-b329e4db74a9","savedPayload":{"position":{"x":8113.297866104187,"y":17638.981840902095},"targetPosition":{"x":7820.986846668617,"y":17571.496524598937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Last 24 Hs Min","id":"572f8098-6ee2-47d7-b10b-671a220331b7"}}}],"id":"b055b3b0-ee85-4d6a-bb97-7c746bf75cb3","savedPayload":{"position":{"x":7820.986846668617,"y":17571.496524598937},"targetPosition":{"x":7616.387338649867,"y":17790.902635084687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Close Band","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"c2e27def-ba2d-4c3b-b7f6-dc0042454852","savedPayload":{"position":{"x":7966.794009733293,"y":17152.923943169455},"targetPosition":{"x":8008.545940021313,"y":17450.004363791926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.last24HsDirection=== 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.LIGHT\"\n}","project":"Superalgos","id":"150e512d-de17-474a-b1f6-e039e052661c","savedPayload":{"position":{"x":8112.734846621472,"y":16859.1197119846},"targetPosition":{"x":8060.640393321392,"y":17154.562037888263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32ec5d90-e990-4219-aad0-606d367738ec","savedPayload":{"position":{"x":8060.640393321392,"y":17154.562037888263},"targetPosition":{"x":8008.545940021313,"y":17450.004363791926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.last24HsDirection=== 'Up'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\"\n}","project":"Superalgos","id":"b5c04ddf-70a3-4256-90c4-71cb20d633d1","savedPayload":{"position":{"x":8290.228877692847,"y":16920.235808076573},"targetPosition":{"x":8149.38740885708,"y":17185.12008593425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3e000e8a-ca95-4701-8eca-38535cefcc3d","savedPayload":{"position":{"x":8149.38740885708,"y":17185.12008593425},"targetPosition":{"x":8008.545940021313,"y":17450.004363791926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Style Condition","name":"New Style Condition","code":"record.last24HsDirection=== 'Down'","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"paletteColor\": \"UI_COLOR.RED\"\n}","project":"Superalgos","id":"a8fa888a-54d0-4c09-8c82-30a834dce41e","savedPayload":{"position":{"x":8440.149820224504,"y":17033.209341516525},"targetPosition":{"x":8224.347880122908,"y":17241.606852654226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2863d662-ccb8-4dc3-b886-22dc5899f72f","savedPayload":{"position":{"x":8224.347880122908,"y":17241.606852654226},"targetPosition":{"x":8008.545940021313,"y":17450.004363791926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e4acda6d-d02e-4d43-9268-1db35d69f789","savedPayload":{"position":{"x":8008.545940021313,"y":17450.004363791926},"targetPosition":{"x":7910.875493684166,"y":17733.659936471722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Last 24 Hs Open","project":"Superalgos","id":"5eb0bebc-8ce7-4651-92e6-f188374a4653","savedPayload":{"position":{"x":8137.288367750997,"y":17536.84222777457},"targetPosition":{"x":7910.875493684166,"y":17733.659936471722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Last 24 Hs Open","id":"ef270f12-5e8e-4768-a34b-2e063126c45d"}}},{"type":"Polygon Vertex","name":"Begin Last 24 Hs Close","project":"Superalgos","id":"cd304a21-0417-4adb-9dd1-73b928442eb2","savedPayload":{"position":{"x":8205.363648718465,"y":17676.417237858757},"targetPosition":{"x":7910.875493684166,"y":17733.659936471722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Last 24 Hs Close","id":"7390c069-aa45-4bf9-a3e6-665dacea7bb2"}}},{"type":"Polygon Vertex","name":"End Last 24 Hs Close","project":"Superalgos","id":"befb9997-0ada-404e-ae76-2e29473eff5a","savedPayload":{"position":{"x":8194.531066363961,"y":17831.33038280887},"targetPosition":{"x":7910.875493684166,"y":17733.659936471722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Last 24 Hs Close","id":"7c7778fe-5abb-4d29-af90-372e47aff94a"}}},{"type":"Polygon Vertex","name":"End Last 24 Hs Open","project":"Superalgos","id":"50d337d6-806e-4d8e-8b17-26abc346723c","savedPayload":{"position":{"x":8107.693202381318,"y":17960.072810538553},"targetPosition":{"x":7910.875493684166,"y":17733.659936471722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Last 24 Hs Open","id":"b14d9e80-4158-4e77-af54-0d60391c727b"}}}],"id":"d43d1db4-07e3-4e86-a7e7-c71774e461d7","savedPayload":{"position":{"x":7910.875493684166,"y":17733.659936471722},"targetPosition":{"x":7616.387338649867,"y":17790.902635084687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"2f5bc46b-a1bb-4f17-8cc4-d3a80b963dcc","savedPayload":{"position":{"x":7616.387338649867,"y":17790.902635084687},"targetPosition":{"x":7489.601860127657,"y":18062.794971195683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Current Candle","config":"{ \n \"codeName\": \"currentCandle\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Open","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.open","project":"Superalgos","id":"8edb002a-7034-4860-b519-e6cc9c568d35","savedPayload":{"position":{"x":7054.533509998223,"y":17417.106441951146},"targetPosition":{"x":7298.11491171298,"y":17592.229543621583},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cccfc3f1-4599-4b5a-9e6f-015f8df6aaa5","savedPayload":{"position":{"x":7298.11491171298,"y":17592.229543621583},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Close","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.close","project":"Superalgos","id":"5dabcb38-01c7-4b22-a678-cfe9126d7122","savedPayload":{"position":{"x":7254.743926254946,"y":17240.419701269886},"targetPosition":{"x":7398.220119841341,"y":17503.886173280953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"51df0ecc-3db8-4bed-8f0c-9d12fd9d97f4","savedPayload":{"position":{"x":7398.220119841341,"y":17503.886173280953},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Min","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.min","project":"Superalgos","id":"00a15a76-d4d6-46eb-b93f-eb76512fd3a7","savedPayload":{"position":{"x":7511.788782031318,"y":17168.098492560668},"targetPosition":{"x":7526.742547729527,"y":17467.725568926344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39abe082-4409-4997-a389-6b9491a54c55","savedPayload":{"position":{"x":7526.742547729527,"y":17467.725568926344},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Max","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.max","project":"Superalgos","id":"4c85a43e-de1b-4607-8bd8-2a9b96669780","savedPayload":{"position":{"x":7774.757191192554,"y":17214.466918169775},"targetPosition":{"x":7658.2267523101455,"y":17490.909781730898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32b0d874-4866-4104-a7f9-bc1214c15a88","savedPayload":{"position":{"x":7658.2267523101455,"y":17490.909781730898},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Change","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.change","project":"Superalgos","id":"5c2e8161-7dde-45c8-b5bb-e6dc367c799d","savedPayload":{"position":{"x":7991.565035208377,"y":17370.3411427339},"targetPosition":{"x":7766.630674318057,"y":17568.84689401296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"527a7178-8947-4e25-91c7-4fc1bd357530","savedPayload":{"position":{"x":7766.630674318057,"y":17568.84689401296},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Amplitude","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.amplitude","project":"Superalgos","id":"04778113-8836-449d-954d-c056d146bfc4","savedPayload":{"position":{"x":8119.2708615977435,"y":17604.848364406214},"targetPosition":{"x":7830.48358751274,"y":17686.100504849117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0dcdcf95-219c-4e16-bba0-eed60137f923","savedPayload":{"position":{"x":7830.48358751274,"y":17686.100504849117},"targetPosition":{"x":7541.696313427737,"y":17767.35264529202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2e9d7744-eb1c-40f0-bc8c-46426e14691d","savedPayload":{"position":{"x":7771.50964636343,"y":17960.188928197982},"targetPosition":{"x":7489.601860127657,"y":18062.794971195683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Last 24 Hs","config":"{ \n \"codeName\": \"last24Hs\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Last 24 Hs Open","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsOpen","project":"Superalgos","id":"5e00557c-8c2d-4d37-aca8-346e1b8bf274","savedPayload":{"position":{"x":8266.318704450354,"y":18008.85899222328},"targetPosition":{"x":7992.866948756852,"y":18132.245123162462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9c12e42b-8759-4501-a66a-eaecf9f3d014","savedPayload":{"position":{"x":7992.866948756852,"y":18132.245123162462},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last 24 Hs Close","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsClose","project":"Superalgos","id":"14936ef0-93eb-496b-95db-1e567f134256","savedPayload":{"position":{"x":8319.228702263841,"y":18270.589669144487},"targetPosition":{"x":8019.321947663596,"y":18263.110461623066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e417390f-e0a3-472c-8d7e-6b107a4c38b8","savedPayload":{"position":{"x":8019.321947663596,"y":18263.110461623066},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last 24 Hs Min","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsMin","project":"Superalgos","id":"da5a18bc-15f7-4b24-a755-21d1764d2828","savedPayload":{"position":{"x":8253.338278350233,"y":18529.35764851354},"targetPosition":{"x":7986.376735706792,"y":18392.494451307593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3834870f-3afb-41ef-96c1-badfa86dd72e","savedPayload":{"position":{"x":7986.376735706792,"y":18392.494451307593},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last 24 Hs Max","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsMax","project":"Superalgos","id":"8754c72f-e01a-4f98-a9c6-13149eea33b9","savedPayload":{"position":{"x":8081.697839258637,"y":18733.9107584354},"targetPosition":{"x":7900.556516160994,"y":18494.771006268522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"76989651-33bd-4411-b638-21390a0c6461","savedPayload":{"position":{"x":7900.556516160994,"y":18494.771006268522},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last 24 Hs Change","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsChange","project":"Superalgos","id":"8c3964c6-d43b-419d-93f4-649b3e15e53c","savedPayload":{"position":{"x":7838.30287898299,"y":18843.73474681077},"targetPosition":{"x":7778.85903602317,"y":18549.683000456207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e45bc0e-c227-4a0d-80fb-d508a6c830f8","savedPayload":{"position":{"x":7778.85903602317,"y":18549.683000456207},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Last 24 Hs Amplitude","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.last24HsAmplitude","project":"Superalgos","id":"97789da3-c57f-4360-9cf2-ae02624dd2f8","savedPayload":{"position":{"x":7571.360754449175,"y":18837.07762583909},"targetPosition":{"x":7645.387973756263,"y":18546.354439970368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"60e64b9a-dd54-4db8-a2c0-45707fd1a13d","savedPayload":{"position":{"x":7645.387973756263,"y":18546.354439970368},"targetPosition":{"x":7719.415193063351,"y":18255.631254101645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7a840ca8-b174-45f5-a23e-eb333d46e295","savedPayload":{"position":{"x":7761.494196238652,"y":18189.580449717894},"targetPosition":{"x":7489.601860127657,"y":18062.794971195683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7d2c7454-22ee-4d99-ab73-b47e5813a7bc","savedPayload":{"position":{"x":7489.601860127657,"y":18062.794971195683},"targetPosition":{"x":7207.694073891885,"y":18165.401014193383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cd89a4cc-9274-4cc8-a9f3-29e62f8c25fc","savedPayload":{"position":{"x":7207.694073891885,"y":18165.401014193383},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959","savedPayload":{"position":{"x":6925.786287656112,"y":18268.007057191084},"targetPosition":{"x":6925.786287656112,"y":18268.007057191084},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"m"}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Samurai.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Samurai.json deleted file mode 100644 index 3a85fb34f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Samurai.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Samurai","config":"{\n\"codeName\": \"Samurai\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Candles Probabilities","config":"{\n\"codeName\": \"Candles-Probabilities\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates SMAs for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candles Probabilities","project":"Superalgos","id":"ab027b2e-4e02-4c71-8da5-6b43c37de20b","savedPayload":{"position":{"x":24441.807558180073,"y":11178.172754360203},"targetPosition":{"x":24757.91289199851,"y":11360.695699284031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"85c67513-347a-4948-9121-dee04543fcff"}}}],"outputDatasetFolders":[],"id":"1a087bb8-af2f-4384-85dd-c86d4b39aeff","savedPayload":{"position":{"x":24740.813740813894,"y":11764.307395546577},"targetPosition":{"x":25087.495634870367,"y":11964.565651629404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"09588f6b-2193-4c9e-bc33-2ac075e8e4f4","savedPayload":{"position":{"x":25757.82661988232,"y":10782.55282705661},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Candles Probabilities Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference|Market Starting Point|Market Ending Point\"\n}","project":"Superalgos","id":"83721123-d178-4ab3-8d6f-da06e8416eb8","savedPayload":{"position":{"x":25902.870176218516,"y":10769.51496828574},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"24ca1130-0386-4088-9417-48eb5d8ac96a"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"2cfeb861-3ce6-4f63-b974-acc395f744cc","savedPayload":{"position":{"x":26042.027883264192,"y":10813.091690317255},"targetPosition":{"x":25863.974750655703,"y":11140.122654848603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"08845d0d-a0a1-4d26-bb44-1072dfcf0b07","savedPayload":{"position":{"x":24887.60865246401,"y":11617.60490303291},"targetPosition":{"x":25087.495634870367,"y":11964.565651629404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"24ca1130-0386-4088-9417-48eb5d8ac96a","savedPayload":{"position":{"x":25087.495721365332,"y":11563.948027561915},"targetPosition":{"x":25087.495634870367,"y":11964.565651629404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"82529746-2044-48f0-b1f6-d1454ba5682d","savedPayload":{"position":{"x":25287.48635377009,"y":11617.520908314928},"targetPosition":{"x":25087.495634870367,"y":11964.565651629404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"05bcb9a5-4065-44cf-88db-77bb2b61b99a","savedPayload":{"position":{"x":25433.894299862637,"y":11764.005247841533},"targetPosition":{"x":25087.495634870367,"y":11964.565651629404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b9db962a-525e-409c-99b7-81fc0116b4b9","savedPayload":{"position":{"x":25087.495634870367,"y":11964.565651629404},"targetPosition":{"x":25087.50120815478,"y":12377.918620322398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Describe what the process does.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Candles Probabilities","project":"Superalgos","id":"b16f70b2-d7a8-434c-a36c-a3200f3414ab","savedPayload":{"position":{"x":25800.15762928091,"y":11856.993253131839},"targetPosition":{"x":25700.09936916545,"y":12031.377364212467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"fa17370b-0a9c-4350-9cce-1df4be39b58c"}}}],"outputDatasetFolders":[],"id":"e156d437-ff71-4a1c-9239-abfc3b1dd3cb","savedPayload":{"position":{"x":25700.09936916545,"y":12031.377364212467},"targetPosition":{"x":25500.52302256196,"y":12377.922330520758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Probabilities Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"f102b96d-854c-4fa1-9c1f-7689da34d35b","savedPayload":{"position":{"x":25864.631248982016,"y":11977.268573438294},"targetPosition":{"x":25846.96565654448,"y":12178.380472930085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"ac04d901-b5ee-4b27-abc7-e0eeb7d79cc3"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"6a656f04-04eb-4ee8-ac17-d87d8ada1264","savedPayload":{"position":{"x":25982.93203012055,"y":12026.011319771422},"targetPosition":{"x":25846.96565654448,"y":12178.380472930085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"86adad3f-7780-4a41-8ec5-5f2f9bdb1e10","savedPayload":{"position":{"x":26047.23987952665,"y":12135.594570941714},"targetPosition":{"x":25846.96565654448,"y":12178.380472930085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"d4417217-99e4-4644-8b6b-3d8168b01090","savedPayload":{"position":{"x":26029.651478786353,"y":12266.185580591813},"targetPosition":{"x":25846.96565654448,"y":12178.380472930085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"1cab7bdf-ecd1-4054-90ff-54f2cf683b2e","savedPayload":{"position":{"x":25846.96565654448,"y":12178.380472930085},"targetPosition":{"x":25500.52302256196,"y":12377.922330520758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"ac04d901-b5ee-4b27-abc7-e0eeb7d79cc3","savedPayload":{"position":{"x":25900.769277193373,"y":12378.352432245998},"targetPosition":{"x":25500.52302256196,"y":12377.922330520758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"34548656-528b-4e6b-89d9-ec56d7818f88","savedPayload":{"position":{"x":25847.330845607605,"y":12578.258678209299},"targetPosition":{"x":25500.52302256196,"y":12377.922330520758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"3900deae-546f-4277-8fcb-e78c03a7fb0d","savedPayload":{"position":{"x":25700.722998160323,"y":12724.712009640398},"targetPosition":{"x":25500.52302256196,"y":12377.922330520758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2212f26a-27aa-4e1f-b2aa-73ede1434477","savedPayload":{"position":{"x":25500.52302256196,"y":12377.922330520758},"targetPosition":{"x":25087.50120815478,"y":12377.918620322398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles Probabilities","config":"{\n \"codeName\": \"Candles-Probabilities\",\n \"singularVariableName\": \"candlesProbability\",\n \"pluralVariableName\": \"candlesProbabilities\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"85c67513-347a-4948-9121-dee04543fcff","savedPayload":{"position":{"x":25254.64494643838,"y":12922.902131668741},"targetPosition":{"x":25087.459431383417,"y":12808.393420005701},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"fa17370b-0a9c-4350-9cce-1df4be39b58c","savedPayload":{"position":{"x":25145.01695205679,"y":13002.476099621948},"targetPosition":{"x":25087.459431383417,"y":12808.393420005701},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"7f630e20-9ead-4b62-a13a-d98dfde35569","savedPayload":{"position":{"x":25162.434371911262,"y":13254.384074775951},"targetPosition":{"x":25065.188222509194,"y":13163.170697781212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8356c5bd-3acf-46d5-bb60-5ca4784b0a48","savedPayload":{"position":{"x":25065.188222509194,"y":13163.170697781212},"targetPosition":{"x":24942.317080824618,"y":13116.847867476527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"abb35458-3007-4a6f-9926-b2034eef794f","savedPayload":{"position":{"x":25053.11057114337,"y":13382.232236976475},"targetPosition":{"x":25018.0129586287,"y":13265.516421128646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12a6b10a-22b5-459a-81d9-9de037af4f4e","savedPayload":{"position":{"x":25018.0129586287,"y":13265.516421128646},"targetPosition":{"x":24942.317080824618,"y":13116.847867476527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction Up","config":"{\n \"codeName\": \"directionUp\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.directionUp","project":"Superalgos","id":"cf8a68a3-d2e2-402a-ab5e-ae493f62b1ae","savedPayload":{"position":{"x":24880.42705984978,"y":13396.878111510241},"targetPosition":{"x":24908.81172241415,"y":13287.556777019521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b88c6ec-e33a-46e8-9a17-24e9158d476e","savedPayload":{"position":{"x":24908.81172241415,"y":13287.556777019521},"targetPosition":{"x":24942.317080824618,"y":13116.847867476527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction Down","config":"{\n \"codeName\": \"directionDown\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.directionDown","project":"Superalgos","id":"dcf8a2e7-3f11-4237-a3bb-433d99f3dde7","savedPayload":{"position":{"x":24739.56912073904,"y":13305.346621069506},"targetPosition":{"x":24813.68322906005,"y":13236.74616930508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"528446c8-b8b6-4b1c-94f6-0895ba1fba83","savedPayload":{"position":{"x":24813.68322906005,"y":13236.74616930508},"targetPosition":{"x":24942.317080824618,"y":13116.847867476527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Direction Side","config":"{\n \"codeName\": \"directionSide\"\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.directionSide","project":"Superalgos","id":"b1e369f5-64b2-4a81-b21b-52976b8949e8","savedPayload":{"position":{"x":24714.0046270875,"y":13126.020662912204},"targetPosition":{"x":24836.593442093323,"y":13107.683217286347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c2214ffd-7628-4ae3-9731-3c08329dfbd1","savedPayload":{"position":{"x":24836.593442093323,"y":13107.683217286347},"targetPosition":{"x":24942.317080824618,"y":13116.847867476527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f5fdf31a-a5bd-47b9-91a7-2698538af74e","savedPayload":{"position":{"x":24942.317080824618,"y":13116.847867476527},"targetPosition":{"x":25087.459431383417,"y":12808.393420005701},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"let candle = record.current // Our main dependencies are candles\nvariable.count++\n\nif (candle.direction === \"Up\") {\n variable.countUp++\n}\n\nif (candle.direction === \"Down\") {\n variable.countDown++\n}\n\nif (candle.direction === \"Side\") {\n variable.countSide++\n}\n\nvariable.directionUp = variable.countUp / variable.count\nvariable.directionDown = variable.countDown / variable.count\nvariable.directionSide = variable.countSide / variable.count\n","project":"Superalgos","id":"cd5da888-ac24-4ab0-a249-28237a881fa6","savedPayload":{"position":{"x":24560.555992799847,"y":13412.961755843506},"targetPosition":{"x":24641.168434324656,"y":13229.265486499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"97a50cc8-8086-43e2-8a2c-5ee5394676b4","savedPayload":{"position":{"x":24641.168434324656,"y":13229.265486499004},"targetPosition":{"x":24740.399273351544,"y":13022.168937689474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"variable.count = 0 \nvariable.countUp = 0\nvariable.countDown = 0\nvariable.countSide = 0\n","project":"Superalgos","id":"9d71f7ab-bffc-4898-bdbe-132b864e989c","savedPayload":{"position":{"x":24341.926715740938,"y":13064.284260488737},"targetPosition":{"x":24540.26170899307,"y":13043.239727302123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a1f47a1-f5f9-4e1b-9cdb-f0fff0e01e59","savedPayload":{"position":{"x":24540.26170899307,"y":13043.239727302123},"targetPosition":{"x":24740.399273351544,"y":13022.168937689474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6d6c4442-0674-4782-a79f-8f18b5d7a688","savedPayload":{"position":{"x":24740.399273351544,"y":13022.168937689474},"targetPosition":{"x":25087.459431383417,"y":12808.393420005701},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d0e9521c-2ba8-44ce-b81e-7baf841008e0","savedPayload":{"position":{"x":25087.459431383417,"y":12808.393420005701},"targetPosition":{"x":25087.50120815478,"y":12377.918620322398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candles Probabilities","id":"ecab3716-75a4-4752-b826-1d5df9ec7325"}}}],"id":"07fee895-ee90-4175-829a-df0bbd498178","savedPayload":{"position":{"x":25154.085156252113,"y":12377.923660201921},"targetPosition":{"x":24687.956165025786,"y":12377.91976516634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Candles Channels Probabilities","config":"{\n\"codeName\": \"Candles-Channels-Probabilities\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates SMAs for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Candles Channels Probabilities","project":"Superalgos","id":"46154f7d-e7dc-423a-b297-8d6a1bc36a0c","savedPayload":{"position":{"x":25400.705997815578,"y":12256.821381644872},"targetPosition":{"x":25300.56117467831,"y":12430.85939004045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fdee2b9c-3036-4db2-af42-b3507a6ffacf"}}}],"outputDatasetFolders":[],"id":"1c1a6fa0-6969-4353-81ff-56d0c82aee08","savedPayload":{"position":{"x":25300.56117467831,"y":12430.85939004045},"targetPosition":{"x":25100.623551706616,"y":12777.474383576235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Channels Probabilities Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"b08e8123-6edf-4b08-80e2-13e37b81d415","savedPayload":{"position":{"x":25551.981076084558,"y":12398.429281754543},"targetPosition":{"x":25447.18633665856,"y":12577.864210966018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"e1e05f4b-5d1f-463c-8c99-f09066fd485b"}}},{"type":"Status Dependency","name":"Candle Channels Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"831c0a8c-aa09-480d-b790-54352d40ae93","savedPayload":{"position":{"x":25634.169411512965,"y":12459.479045854692},"targetPosition":{"x":25447.18633665856,"y":12577.864210966018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"902925d3-1d23-4894-9459-0be8df3965df"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Channels Objects Multi-Period-Market","project":"Superalgos","id":"53e98a6b-95d8-4b9b-aa37-71b565b73a6c","savedPayload":{"position":{"x":25651.01224295164,"y":12590.287851478954},"targetPosition":{"x":25447.18633665856,"y":12577.864210966018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"566b9df4-da86-4b4f-a3f4-ef8a76443714"}}}],"dataMineDataDependencies":[],"id":"f2f59d93-f4ba-47f0-bd3a-4b5dbe76841d","savedPayload":{"position":{"x":25447.18633665856,"y":12577.864210966018},"targetPosition":{"x":25100.623551706616,"y":12777.474383576235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"e1e05f4b-5d1f-463c-8c99-f09066fd485b","savedPayload":{"position":{"x":25501.07016556492,"y":12777.65097033437},"targetPosition":{"x":25100.623551706616,"y":12777.474383576235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candle Channels Multi-Period-Market","project":"Superalgos","id":"861617d8-0cff-491f-862d-11b5fd292351","savedPayload":{"position":{"x":25447.530767517725,"y":12977.61137841059},"targetPosition":{"x":25100.623551706616,"y":12777.474383576235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"0ee514b6-0528-4ff9-a901-a519856fbee4"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"a05d99eb-b96a-4594-8b29-eb2b544a9036","savedPayload":{"position":{"x":25300.988218061226,"y":13123.947666412903},"targetPosition":{"x":25100.623551706616,"y":12777.474383576235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87fd6735-ee38-41aa-8a58-1a75f89aea5e","savedPayload":{"position":{"x":25100.623551706616,"y":12777.474383576235},"targetPosition":{"x":24687.68912809008,"y":12777.467848396518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Describe what the process does.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Candles Channels Probabilities","project":"Superalgos","id":"1d0c0cce-6113-49d7-afac-85d9938d9655","savedPayload":{"position":{"x":25208.042820630555,"y":13490.079850609169},"targetPosition":{"x":25033.790697527613,"y":13389.965522121705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2774470d-7382-48e3-bd0a-957f0332a698"}}}],"outputDatasetFolders":[],"id":"8e168ff4-ad08-493f-b804-1786cf2e2431","savedPayload":{"position":{"x":25033.790697527613,"y":13389.965522121705},"targetPosition":{"x":24687.406046567008,"y":13190.327739908722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Channels Probabilities Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"abd6c6ca-b442-47bf-9820-ab2243bdf2fa","savedPayload":{"position":{"x":25087.808083439053,"y":13554.42005670689},"targetPosition":{"x":24886.826934550867,"y":13536.751877019422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"3fd6046f-ea3c-4b62-ab4e-7d84a5b9bb9f"}}},{"type":"Status Dependency","name":"Candle Channels Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"772d5c04-73a6-44eb-af42-bc94d6f24618","savedPayload":{"position":{"x":25039.123745723547,"y":13672.69625903119},"targetPosition":{"x":24886.826934550867,"y":13536.751877019422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"4a89ffcd-ef6d-4dd2-bbf6-6e2f1dba24cd"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"d9e96093-0e4b-4b5a-86bc-5361d4dd5744","savedPayload":{"position":{"x":24929.561159001747,"y":13737.037219711607},"targetPosition":{"x":24886.826934550867,"y":13536.751877019422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Channels Objects Multi-Period-Daily","project":"Superalgos","id":"bbee33b8-ad71-44c0-8900-9ff8527615a6","savedPayload":{"position":{"x":24798.86532442198,"y":13719.38293822478},"targetPosition":{"x":24886.826934550867,"y":13536.751877019422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8a7d224b-7571-4e1a-8b8f-8a35aa25dc63"}}}],"dataMineDataDependencies":[],"id":"6c06360e-fef9-4cb5-a94e-69cefb1e68d5","savedPayload":{"position":{"x":24886.826934550867,"y":13536.751877019422},"targetPosition":{"x":24687.406046567008,"y":13190.327739908722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"3fd6046f-ea3c-4b62-ab4e-7d84a5b9bb9f","savedPayload":{"position":{"x":24686.861355901,"y":13590.531498988108},"targetPosition":{"x":24687.406046567008,"y":13190.327739908722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candle Channels Multi-Period-Daily","project":"Superalgos","id":"da961f64-aab7-46a7-b5ca-48246c13a938","savedPayload":{"position":{"x":24486.945233584673,"y":13537.01249080571},"targetPosition":{"x":24687.406046567008,"y":13190.327739908722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"e29dc92e-bbd9-45ae-ac52-1ee785e44928"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"a739e56b-d98c-46ca-8fcb-dc3508bf2d89","savedPayload":{"position":{"x":24340.465332387867,"y":13390.294116060772},"targetPosition":{"x":24687.406046567008,"y":13190.327739908722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2261546-4415-4425-aedf-72bfc5c9fdba","savedPayload":{"position":{"x":24687.406046567008,"y":13190.327739908722},"targetPosition":{"x":24687.68912809008,"y":12777.467848396518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Candles Channels Probabilities","config":"{\n \"codeName\": \"Candles-Channels-Probabilities\",\n \"singularVariableName\": \"candlesChannelsProbability\",\n \"pluralVariableName\": \"candlesChannelsProbabilities\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"fdee2b9c-3036-4db2-af42-b3507a6ffacf","savedPayload":{"position":{"x":24273.699129139193,"y":13372.905080227374},"targetPosition":{"x":24365.94914810566,"y":13088.257412841824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"2774470d-7382-48e3-bd0a-957f0332a698","savedPayload":{"position":{"x":24123.67105690275,"y":13263.908155943009},"targetPosition":{"x":24365.94914810566,"y":13088.257412841824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"339d7be1-ca04-4765-a1ef-e4e94d8fa506","savedPayload":{"position":{"x":23928.073057760197,"y":13139.10863920847},"targetPosition":{"x":23659.360570975146,"y":13131.957327901217},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"58a58c23-588e-44d5-a294-ff055b12823a","savedPayload":{"position":{"x":23659.360570975146,"y":13131.957327901217},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"5f29de35-5c6f-4adb-bc0a-5c4fbc540c79","savedPayload":{"position":{"x":23963.854546983683,"y":13235.12586412383},"targetPosition":{"x":23677.375683208174,"y":13152.757250025265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29d683db-c178-4d5e-9023-8b38a44eeae1","savedPayload":{"position":{"x":23677.375683208174,"y":13152.757250025265},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Count All","config":"{\n \"codeName\": \"countAll\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.count.all","project":"Superalgos","id":"526500fd-4057-44b7-a130-0149cb982475","savedPayload":{"position":{"x":23819.088476709883,"y":13271.411522581531},"targetPosition":{"x":23546.73267394651,"y":13209.377833227896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2444603-4120-42fe-a655-3967d334e404","savedPayload":{"position":{"x":23546.73267394651,"y":13209.377833227896},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Count Up","config":"{\n \"codeName\": \"countUp\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.count.up","project":"Superalgos","id":"6501ff4c-1d67-4c0c-bcff-7037f4936720","savedPayload":{"position":{"x":23932.902420534552,"y":13353.1532917655},"targetPosition":{"x":23684.49644635098,"y":13233.573614849183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1e38827-72ba-43c3-af89-462bda3ab733","savedPayload":{"position":{"x":23684.49644635098,"y":13233.573614849183},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Count Down","config":"{\n \"codeName\": \"countDown\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.count.down","project":"Superalgos","id":"ba9191b5-5130-44ea-887b-97c13c119022","savedPayload":{"position":{"x":23826.215810082213,"y":13374.323551162699},"targetPosition":{"x":23650.737459321972,"y":13280.033236501278},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"20761e96-657c-453b-870b-33c65b105b1b","savedPayload":{"position":{"x":23650.737459321972,"y":13280.033236501278},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Count Side","config":"{\n \"codeName\": \"countSide\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.count.side","project":"Superalgos","id":"5a61ff39-689a-4fcf-8d71-833a83b1d916","savedPayload":{"position":{"x":23863.969862167098,"y":13511.928566868777},"targetPosition":{"x":23514.591254037343,"y":13273.447198190011},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96a9ee06-1ae3-44c4-9ab6-ac6b165fbf8b","savedPayload":{"position":{"x":23514.591254037343,"y":13273.447198190011},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max Up","config":"{\n \"codeName\": \"maxUp\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.max.up","project":"Superalgos","id":"0703509d-2bd1-4216-bdd1-1c1b4a34428b","savedPayload":{"position":{"x":23736.271438317697,"y":13462.684072261356},"targetPosition":{"x":23619.414272873142,"y":13356.61075172193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"24101201-acb1-4d59-b459-6d54443fa8c9","savedPayload":{"position":{"x":23619.414272873142,"y":13356.61075172193},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max Down","config":"{\n \"codeName\": \"maxDown\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.max.down","project":"Superalgos","id":"29169bea-d6de-491e-a7de-03f3012d0a1a","savedPayload":{"position":{"x":23773.014067942288,"y":13597.535140845253},"targetPosition":{"x":23560.67425476423,"y":13343.777356835775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dacb52f7-f537-4f6d-9863-a571d0d8b075","savedPayload":{"position":{"x":23560.67425476423,"y":13343.777356835775},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max Side","config":"{\n \"codeName\": \"maxSide\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.max.side","project":"Superalgos","id":"80356b40-83df-450c-9f47-f18f656b9ecd","savedPayload":{"position":{"x":23640.86663230046,"y":13548.230073512823},"targetPosition":{"x":23453.00382049131,"y":13513.27390389505},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"65d31025-6197-4023-9710-62695081e6ab","savedPayload":{"position":{"x":23453.00382049131,"y":13513.27390389505},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up","config":"{\n \"codeName\": \"probabilityUp\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.probability.up","project":"Superalgos","id":"9667a091-1e5d-4333-903d-5c11e94418ba","savedPayload":{"position":{"x":23665.50843617633,"y":13683.226994738647},"targetPosition":{"x":23532.06615496165,"y":13358.50859834083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6386661f-d590-4ddb-a220-8e248e67c523","savedPayload":{"position":{"x":23532.06615496165,"y":13358.50859834083},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down","config":"{\n \"codeName\": \"probabilityDown\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.probability.down","project":"Superalgos","id":"a0459d9d-dba1-4a1c-886b-b18439204b74","savedPayload":{"position":{"x":23551.146901124426,"y":13614.389512073114},"targetPosition":{"x":23461.720995259882,"y":13372.347013107457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"784b6455-4277-4fdb-b57e-278cc47b69d2","savedPayload":{"position":{"x":23461.720995259882,"y":13372.347013107457},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side","config":"{\n \"codeName\": \"probabilitySide\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.probability.side","project":"Superalgos","id":"7f62f7d5-5b86-4d97-8732-301bdf8db799","savedPayload":{"position":{"x":23538.43764964113,"y":13754.218742759816},"targetPosition":{"x":23398.305284698094,"y":13381.664194028577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d1c041f4-81bf-471d-8365-cbfd12e1102c","savedPayload":{"position":{"x":23398.305284698094,"y":13381.664194028577},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 1","config":"{\n \"codeName\": \"probabilityUp1\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[1].probability.toFixed(2)","project":"Superalgos","id":"168044ac-5997-4b3a-a8c1-7d34290ac7f3","savedPayload":{"position":{"x":23446.197663871575,"y":13659.64976454776},"targetPosition":{"x":23391.83048806139,"y":13514.324257938719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2d9ee19a-7694-44eb-a6d1-4822e4731338","savedPayload":{"position":{"x":23391.83048806139,"y":13514.324257938719},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 1","config":"{\n \"codeName\": \"probabilityDown1\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[1].probability.toFixed(2)","project":"Superalgos","id":"468b91b1-4c86-4606-af93-d263be661ae3","savedPayload":{"position":{"x":23400.22102124491,"y":13793.953490448723},"targetPosition":{"x":23336.059717786575,"y":13396.728229308996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e27c1bb9-4986-4b9c-b620-65258db2bc29","savedPayload":{"position":{"x":23336.059717786575,"y":13396.728229308996},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 1","config":"{\n \"codeName\": \"probabilitySide1\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[1].probability.toFixed(2)","project":"Superalgos","id":"22f8a518-bd3c-4d6c-81c3-53a298995517","savedPayload":{"position":{"x":23330.502355537075,"y":13680.142054789107},"targetPosition":{"x":23310.503387155208,"y":13524.49452149448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b667e2f8-7ede-4514-bb40-56a4043f1270","savedPayload":{"position":{"x":23310.503387155208,"y":13524.49452149448},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 2","config":"{\n \"codeName\": \"probabilityUp2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[2].probability","project":"Superalgos","id":"00eb6eae-eaa0-48b1-baff-47bf23e2b58b","savedPayload":{"position":{"x":23258.205394649955,"y":13802.702580100795},"targetPosition":{"x":23274.26146562044,"y":13403.42604569225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3d827117-fa9c-4dd3-9276-d2954e592bc7","savedPayload":{"position":{"x":23274.26146562044,"y":13403.42604569225},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 2","config":"{\n \"codeName\": \"probabilityDown2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[2].probability.toFixed(2)","project":"Superalgos","id":"47eb727a-2d95-4478-b028-ee983fe1dcdf","savedPayload":{"position":{"x":23209.339929454953,"y":13675.027467503853},"targetPosition":{"x":23223.736112305534,"y":13522.562066496426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce463489-7789-459d-846d-1d4d999b9724","savedPayload":{"position":{"x":23223.736112305534,"y":13522.562066496426},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 2","config":"{\n \"codeName\": \"probabilitySide2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[2].probability.toFixed(2)","project":"Superalgos","id":"59c2243d-3340-4f65-a8bf-1ea0ddbcd9ec","savedPayload":{"position":{"x":23118.52160088095,"y":13783.414445861516},"targetPosition":{"x":23213.136225271497,"y":13399.047002298066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"89a3c63f-12ea-435e-8150-2c0965f3ec27","savedPayload":{"position":{"x":23213.136225271497,"y":13399.047002298066},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 3","config":"{\n \"codeName\": \"probabilityUp3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[3].probability.toFixed(2)","project":"Superalgos","id":"37662cb1-05e1-4a4d-b753-09cd88973f7d","savedPayload":{"position":{"x":23095.788690040637,"y":13654.06700336164},"targetPosition":{"x":23135.728420283842,"y":13503.934149625898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9383f539-81a6-4e16-9a23-e6702c662e58","savedPayload":{"position":{"x":23135.728420283842,"y":13503.934149625898},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 3","config":"{\n \"codeName\": \"probabilityDown3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[3].probability.toFixed(2)","project":"Superalgos","id":"3cf1663b-33ed-4bee-b3bb-a9d3ff81ecec","savedPayload":{"position":{"x":22981.3516316003,"y":13738.241405851468},"targetPosition":{"x":23154.171334415627,"y":13381.645336385423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fb60deb4-7593-4ffe-9d36-06f654ab1398","savedPayload":{"position":{"x":23154.171334415627,"y":13381.645336385423},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 3","config":"{\n \"codeName\": \"probabilitySide3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[3].probability.toFixed(2)","project":"Superalgos","id":"a4e814b0-4278-41b1-9275-319a21c12ad2","savedPayload":{"position":{"x":22987.767266840652,"y":13605.179286682698},"targetPosition":{"x":23056.881731523747,"y":13466.239926401431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d29e40d0-8b0a-49d7-9287-5ee1713eac4e","savedPayload":{"position":{"x":23056.881731523747,"y":13466.239926401431},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 4","config":"{\n \"codeName\": \"probabilityUp4\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[4].probability.toFixed(2)","project":"Superalgos","id":"d6ddfe51-ed65-4317-a6db-8dd7c29ced59","savedPayload":{"position":{"x":22860.010874924803,"y":13665.92255027016},"targetPosition":{"x":23098.47568973903,"y":13347.470914262787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"903d6dd1-9cd8-4e8a-9a9b-f554658ce564","savedPayload":{"position":{"x":23098.47568973903,"y":13347.470914262787},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 4","config":"{\n \"codeName\": \"probabilityDown4\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[4].probability.toFixed(2)","project":"Superalgos","id":"2bf22e1b-6a16-4199-8b72-4283ae8ea725","savedPayload":{"position":{"x":22890.84243165661,"y":13532.9435546622},"targetPosition":{"x":22987.6215846214,"y":13414.87101907985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0526403b-4378-41d5-b3fa-79bccdc31750","savedPayload":{"position":{"x":22987.6215846214,"y":13414.87101907985},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 4","config":"{\n \"codeName\": \"probabilitySide4\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[4].probability.toFixed(2)","project":"Superalgos","id":"148cba98-c7b3-4278-ac40-c0805a2a31d9","savedPayload":{"position":{"x":22756.039018429245,"y":13572.041282312362},"targetPosition":{"x":23050.397678672463,"y":13306.61679466823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5b2780a7-e06f-4929-afa3-45931c83a70f","savedPayload":{"position":{"x":23050.397678672463,"y":13306.61679466823},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 5","config":"{\n \"codeName\": \"probabilityUp5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[5].probability.toFixed(2)","project":"Superalgos","id":"833d2de2-62f0-4b87-9c8d-07da620c766f","savedPayload":{"position":{"x":22809.178018346887,"y":13446.708827237833},"targetPosition":{"x":22928.10845096726,"y":13350.505367602593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1f067a3e-21bd-434c-99d3-467032a2176a","savedPayload":{"position":{"x":22928.10845096726,"y":13350.505367602593},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 5","config":"{\n \"codeName\": \"probabilityDown5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[5].probability.toFixed(2)","project":"Superalgos","id":"8bbd333f-8733-4c12-9f48-f44b6409f4ca","savedPayload":{"position":{"x":22668.559509332514,"y":13459.305831969243},"targetPosition":{"x":23011.72753784357,"y":13256.590229892116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2fa08b17-9fcc-4d03-b7f4-5f02c44183c6","savedPayload":{"position":{"x":23011.72753784357,"y":13256.590229892116},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 5","config":"{\n \"codeName\": \"probabilitySide5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[5].probability.toFixed(2)","project":"Superalgos","id":"ddcb3fba-ab34-4c66-aa82-991ce4a21f3e","savedPayload":{"position":{"x":22745.93122601684,"y":13351.069775292017},"targetPosition":{"x":22883.217040934403,"y":13275.682872315037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"491077de-5fe1-4cc4-98a4-72648541d766","savedPayload":{"position":{"x":22883.217040934403,"y":13275.682872315037},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 6","config":"{\n \"codeName\": \"probabilityUp6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[6].probability.toFixed(2)","project":"Superalgos","id":"4c8885df-b460-492a-8fd7-7f6e692a1c18","savedPayload":{"position":{"x":22605.068565237256,"y":13328.379128062006},"targetPosition":{"x":22984.174093813686,"y":13198.962925741103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7628b231-d7c0-4f56-a875-c40f9dc5d453","savedPayload":{"position":{"x":22984.174093813686,"y":13198.962925741103},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 6","config":"{\n \"codeName\": \"probabilityDown6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[6].probability.toFixed(2)","project":"Superalgos","id":"4a93051d-2d10-449c-b503-77dba2e9fe28","savedPayload":{"position":{"x":22706.39612932584,"y":13238.443947375617},"targetPosition":{"x":22854.21733149409,"y":13194.042582820939},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78255cd6-c8f7-4533-a542-fe93e1b748f9","savedPayload":{"position":{"x":22854.21733149409,"y":13194.042582820939},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 6","config":"{\n \"codeName\": \"probabilitySide6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[6].probability.toFixed(2)","project":"Superalgos","id":"4182a108-ece7-4a17-b932-5c1d9a4756b6","savedPayload":{"position":{"x":22572.495904299816,"y":13191.114390567414},"targetPosition":{"x":22966.587811346566,"y":13139.442142689226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ca625650-fc68-403e-8bee-3c38a51bb70f","savedPayload":{"position":{"x":22966.587811346566,"y":13139.442142689226},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 7","config":"{\n \"codeName\": \"probabilityUp7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[7].probability.toFixed(2)","project":"Superalgos","id":"b5ccdd41-090d-4123-af8b-30eb08c3c67b","savedPayload":{"position":{"x":22687.88947792669,"y":13121.704951739654},"targetPosition":{"x":22839.824930775485,"y":13105.592731027426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"91ee1783-d1e9-48b5-bae9-5db7887904da","savedPayload":{"position":{"x":22839.824930775485,"y":13105.592731027426},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 7","config":"{\n \"codeName\": \"probabilityDown7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[7].probability.toFixed(2)","project":"Superalgos","id":"f4704dcd-2c14-47f7-9fc9-bd18d5582621","savedPayload":{"position":{"x":22565.722137797708,"y":13048.87285619763},"targetPosition":{"x":22960.907211268655,"y":13078.390096463427},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cb6c389f-adbc-4dfe-8d4e-f12bb5a52077","savedPayload":{"position":{"x":22960.907211268655,"y":13078.390096463427},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 7","config":"{\n \"codeName\": \"probabilitySide7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[7].probability.toFixed(2)","project":"Superalgos","id":"4ac32582-3f5f-4e70-889b-44163296a6d4","savedPayload":{"position":{"x":22693.21479954812,"y":13003.959491382095},"targetPosition":{"x":22845.666634732548,"y":13017.251397645723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0889582-9ed3-476b-a9cd-8d797a16d727","savedPayload":{"position":{"x":22845.666634732548,"y":13017.251397645723},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 8","config":"{\n \"codeName\": \"probabilityUp8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[8].probability.toFixed(2)","project":"Superalgos","id":"6e5231b7-4720-4f4d-a665-7e1a404a46b5","savedPayload":{"position":{"x":22588.094896424827,"y":12909.528997817213},"targetPosition":{"x":22973.560615841037,"y":13013.719388251846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0065cbce-fa3b-42ef-a96f-ebd05efa496f","savedPayload":{"position":{"x":22973.560615841037,"y":13013.719388251846},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 8","config":"{\n \"codeName\": \"probabilityDown8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[8].probability.toFixed(2)","project":"Superalgos","id":"f11b3a77-6419-4080-9676-975024dfb661","savedPayload":{"position":{"x":22719.35342397775,"y":12889.825308953226},"targetPosition":{"x":22869.135509244003,"y":12936.274465098155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b5cf9f1-6c7d-42be-95d1-afdbd3b3351f","savedPayload":{"position":{"x":22869.135509244003,"y":12936.274465098155},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 8","config":"{\n \"codeName\": \"probabilitySide8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[8].probability","project":"Superalgos","id":"f6edd4f5-a848-41cd-90dc-02f3847588db","savedPayload":{"position":{"x":22636.863751823643,"y":12773.157933146487},"targetPosition":{"x":22992.502481725376,"y":12954.508326167226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9f5d322b-0dc5-4ae9-bc17-5381f9a70c62","savedPayload":{"position":{"x":22992.502481725376,"y":12954.508326167226},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 9","config":"{\n \"codeName\": \"probabilityUp9\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[9].probability.toFixed(2)","project":"Superalgos","id":"321132b1-60e5-4a83-98de-ab4b96ccdeb7","savedPayload":{"position":{"x":22769.546327701264,"y":12783.494063762504},"targetPosition":{"x":22907.08333198296,"y":12856.670327011658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d4276b44-3c7e-490e-a5fe-d634f33f8daf","savedPayload":{"position":{"x":22907.08333198296,"y":12856.670327011658},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 9","config":"{\n \"codeName\": \"probabilityDown9\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[9].probability.toFixed(2)","project":"Superalgos","id":"a166f651-bde0-4120-88bc-1ca1cf43aa74","savedPayload":{"position":{"x":22712.3193616455,"y":12652.388405907912},"targetPosition":{"x":23024.72867469466,"y":12900.170264095388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a81432a2-6778-4063-94bf-6618b1feeadd","savedPayload":{"position":{"x":23024.72867469466,"y":12900.170264095388},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 9","config":"{\n \"codeName\": \"probabilitySide9\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[9].probability.toFixed(2)","project":"Superalgos","id":"1b71e277-d4a1-4e61-bbb1-bf7ca148575f","savedPayload":{"position":{"x":22839.640046397242,"y":12688.526234705954},"targetPosition":{"x":22960.322579871066,"y":12786.675245515838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"65426441-c082-4d12-94d9-de1d25ba697d","savedPayload":{"position":{"x":22960.322579871066,"y":12786.675245515838},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Up 10","config":"{\n \"codeName\": \"probabilityUp10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[10].probability.toFixed(2)","project":"Superalgos","id":"eb7ecf8d-987a-4425-a45a-c2d2c79e392a","savedPayload":{"position":{"x":22809.976462387953,"y":12549.51314382067},"targetPosition":{"x":23065.524760275228,"y":12853.282891025357},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f30dad9f-282a-47f6-bc54-ee76701c824b","savedPayload":{"position":{"x":23065.524760275228,"y":12853.282891025357},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Down 10","config":"{\n \"codeName\": \"probabilityDown10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[10].probability.toFixed(2)","project":"Superalgos","id":"f0c4e430-c1dd-4c35-82f8-4a35623f2429","savedPayload":{"position":{"x":22929.263532063535,"y":12609.258662410533},"targetPosition":{"x":23023.319749069942,"y":12730.392140514497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a582ab2e-41f4-41b6-a281-14813c1f83e6","savedPayload":{"position":{"x":23023.319749069942,"y":12730.392140514497},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Probability Side 10","config":"{\n \"codeName\": \"probabilitySide10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arraySide[10].probability.toFixed(2)","project":"Superalgos","id":"880c3925-d3ef-4ad8-a454-069e5ca4c188","savedPayload":{"position":{"x":22908.363595298586,"y":12469.892486755578},"targetPosition":{"x":23114.318791976497,"y":12814.94256027692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8045f35a-2f67-4a07-af52-a7a66343ae03","savedPayload":{"position":{"x":23114.318791976497,"y":12814.94256027692},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 1","config":"{\n \"codeName\": \"nextUp1\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[1].greaterProbability.toFixed(2)","project":"Superalgos","id":"b53e83dd-00b7-460e-92ed-b5c4a24e5459","savedPayload":{"position":{"x":23063.348841482122,"y":12698.358738586936},"targetPosition":{"x":23134.99780574916,"y":12676.136800504995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4a694c4e-5318-4298-b7f1-d9103f77ebf9","savedPayload":{"position":{"x":23134.99780574916,"y":12676.136800504995},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 1","config":"{\n \"codeName\": \"nextDown1\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[1].greaterProbability.toFixed(2)","project":"Superalgos","id":"33d00317-95c1-4d35-be64-d513e1223b77","savedPayload":{"position":{"x":23078.389939924695,"y":12598.101803693517},"targetPosition":{"x":23157.296004711476,"y":12789.269219601834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5d8da44f-fb39-4b0f-9cc7-fa9d32a4d209","savedPayload":{"position":{"x":23157.296004711476,"y":12789.269219601834},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 2","config":"{\n \"codeName\": \"nextUp2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[2].greaterProbability.toFixed(2)","project":"Superalgos","id":"bc732386-1448-4b48-bf55-70d5cd2196ba","savedPayload":{"position":{"x":23306.568824748494,"y":12590.785955268326},"targetPosition":{"x":23194.49363454916,"y":12771.216665703238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"ac16b3e9-e9d7-42ea-b428-9c8ec11d7e2b","savedPayload":{"position":{"x":23194.49363454916,"y":12771.216665703238},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 2","config":"{\n \"codeName\": \"nextDown2\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[2].greaterProbability.toFixed(2)","project":"Superalgos","id":"cb9ff30d-2792-45ab-80e8-ca606f92758e","savedPayload":{"position":{"x":23156.70060078536,"y":12585.96499801733},"targetPosition":{"x":23210.5220059041,"y":12687.678568580575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"9acdb9db-3669-45a8-b02a-053f2faf6058","savedPayload":{"position":{"x":23210.5220059041,"y":12687.678568580575},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 3","config":"{\n \"codeName\": \"nextUp3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[3].greaterProbability.toFixed(2)","project":"Superalgos","id":"9f22f2e4-d461-4402-a9a4-248a815876c9","savedPayload":{"position":{"x":23257.4041492741,"y":12588.350146194543},"targetPosition":{"x":23284.514239866254,"y":12782.625710890274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"192e85df-e1bb-4292-ae05-ce740133fb29","savedPayload":{"position":{"x":23284.514239866254,"y":12782.625710890274},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 3","config":"{\n \"codeName\": \"nextDown3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[3].greaterProbability.toFixed(2)","project":"Superalgos","id":"e34c5d6c-6bfb-4733-a3e7-28e0e1bbd3a7","savedPayload":{"position":{"x":23391.776212484252,"y":12502.351092909881},"targetPosition":{"x":23294.273966874112,"y":12633.754510531266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4e60fdb7-fc23-4989-8706-7d81271f6225","savedPayload":{"position":{"x":23294.273966874112,"y":12633.754510531266},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 4","config":"{\n \"codeName\": \"nextUp4\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[4].greaterProbability.toFixed(2)","project":"Superalgos","id":"09f989af-7270-4671-afda-2073458e77c7","savedPayload":{"position":{"x":23256.827796506164,"y":12712.460148556152},"targetPosition":{"x":23455.286635412143,"y":12693.329795126687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2959103e-d4b4-4ead-8f6b-fbe06e89ff7a","savedPayload":{"position":{"x":23455.286635412143,"y":12693.329795126687},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 4","config":"{\n \"codeName\": \"nextDown4\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[4].greaterProbability.toFixed(2)","project":"Superalgos","id":"e7eae73d-ee2e-477a-91ac-a2dbf6b8bba9","savedPayload":{"position":{"x":23384.799041379647,"y":12596.703024269083},"targetPosition":{"x":23335.23267686281,"y":12697.003196630363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2a921871-4c5f-4424-a85f-9081ee420b55","savedPayload":{"position":{"x":23335.23267686281,"y":12697.003196630363},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 5","config":"{\n \"codeName\": \"nextUp5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[5].greaterProbability.toFixed(2)","project":"Superalgos","id":"e7709492-43e5-45e0-b94c-f6c63b5c4df4","savedPayload":{"position":{"x":23548.76054343602,"y":12712.652362356817},"targetPosition":{"x":23373.4273861981,"y":12769.588935164249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5567d2d1-97d3-4551-ad1d-68b5fe8fca5e","savedPayload":{"position":{"x":23373.4273861981,"y":12769.588935164249},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 5","config":"{\n \"codeName\": \"nextDown5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[5].greaterProbability.toFixed(2)","project":"Superalgos","id":"95292d68-dcaa-475d-bb56-12634a6ef26e","savedPayload":{"position":{"x":23467.990213304132,"y":12605.033866064345},"targetPosition":{"x":23414.040457085746,"y":12792.997798624987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c4baa1b9-4879-4632-90bd-6b4aca0cc145","savedPayload":{"position":{"x":23414.040457085746,"y":12792.997798624987},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 6","config":"{\n \"codeName\": \"nextUp6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[6].greaterProbability.toFixed(2)","project":"Superalgos","id":"f459f2bb-0cf3-44da-a6e0-37495f592d7e","savedPayload":{"position":{"x":23562.631581606976,"y":12640.177614702225},"targetPosition":{"x":23562.350053848593,"y":12729.860228781854},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0c024e0d-6a5a-4631-9484-a563525dfad2","savedPayload":{"position":{"x":23562.350053848593,"y":12729.860228781854},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 6","config":"{\n \"codeName\": \"nextDown6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[6].greaterProbability.toFixed(2)","project":"Superalgos","id":"38310cb6-0f60-412b-b694-35a4d324f5c8","savedPayload":{"position":{"x":23748.90383373148,"y":12945.8723578533},"targetPosition":{"x":23448.179668996625,"y":12824.85654769626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"b8fb4ea6-e301-46e2-b3ca-7d1fa5d1dbb5","savedPayload":{"position":{"x":23448.179668996625,"y":12824.85654769626},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 7","config":"{\n \"codeName\": \"nextUp7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[7].greaterProbability.toFixed(2)","project":"Superalgos","id":"80bbe6d4-50ca-4ea2-b66c-ce3c71fd6fcc","savedPayload":{"position":{"x":23666.043489534175,"y":12699.094365701163},"targetPosition":{"x":23506.324920981784,"y":12785.801058590128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"7c29b4a9-94e3-4b6c-b359-03ef39258389","savedPayload":{"position":{"x":23506.324920981784,"y":12785.801058590128},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 7","config":"{\n \"codeName\": \"nextDown7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[7].greaterProbability.toFixed(2)","project":"Superalgos","id":"30b30cd2-4c85-4b3f-b589-358db9495959","savedPayload":{"position":{"x":23630.777057043535,"y":12752.338093165232},"targetPosition":{"x":23551.946981853536,"y":12811.289369349995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5914dd39-dadd-4294-acb5-8088f81921df","savedPayload":{"position":{"x":23551.946981853536,"y":12811.289369349995},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 8","config":"{\n \"codeName\": \"nextUp8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[8].greaterProbability.toFixed(2)","project":"Superalgos","id":"c14ab122-acfa-46ff-8aa8-b6e4e01f29b4","savedPayload":{"position":{"x":23814.145255432177,"y":12837.665824600092},"targetPosition":{"x":23541.728176646415,"y":12977.068002326238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"da43c6d0-55f3-4422-9b23-24e6d19318ea","savedPayload":{"position":{"x":23541.728176646415,"y":12977.068002326238},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 8","config":"{\n \"codeName\": \"nextDown8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[8].greaterProbability.toFixed(2)","project":"Superalgos","id":"fac4074e-62de-461d-9c5e-78b492764124","savedPayload":{"position":{"x":23699.80665965415,"y":12835.024331159371},"targetPosition":{"x":23582.34554213275,"y":12844.658698537594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2257ff95-2ad1-436c-8c75-d97ee7911623","savedPayload":{"position":{"x":23582.34554213275,"y":12844.658698537594},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up9","config":"{\n \"codeName\": \"nextUp9\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[9].greaterProbability.toFixed(2)","project":"Superalgos","id":"a5634a8e-ac5f-4542-98ab-6fbc7c6799e9","savedPayload":{"position":{"x":23669.1584318763,"y":12863.741458133596},"targetPosition":{"x":23621.23833482398,"y":12913.358068914158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"89252867-2e51-49cc-8061-710857117262","savedPayload":{"position":{"x":23621.23833482398,"y":12913.358068914158},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 9","config":"{\n \"codeName\": \"nextDown9\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[9].greaterProbability.toFixed(2)","project":"Superalgos","id":"09d70a53-4761-4fb7-ac02-3bc9d3c9f118","savedPayload":{"position":{"x":23766.259277238514,"y":12926.86762714071},"targetPosition":{"x":23729.52324236529,"y":12985.231142411598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"3fb2d973-7ed0-4266-9bbe-927c880f27fc","savedPayload":{"position":{"x":23729.52324236529,"y":12985.231142411598},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Up 10","config":"{\n \"codeName\": \"nextUp10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayUp[10].greaterProbability.toFixed(2)","project":"Superalgos","id":"971a4486-0ee2-4451-99f8-2d1183e3519c","savedPayload":{"position":{"x":23655.564329373778,"y":13128.62085612311},"targetPosition":{"x":23577.108900562383,"y":12986.284998083325},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c5370b4b-5736-4f38-b026-7ee211e550f0","savedPayload":{"position":{"x":23577.108900562383,"y":12986.284998083325},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Down 10","config":"{\n \"codeName\": \"nextDown10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.arrayDown[10].greaterProbability.toFixed(2)","project":"Superalgos","id":"aa0f0d5f-47b7-4c30-a8e5-c0204646b0b8","savedPayload":{"position":{"x":23772.03111045089,"y":13077.705923515923},"targetPosition":{"x":23659.84606657961,"y":13026.656201799564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"8393bb69-756c-4809-95b1-71b459e49d89","savedPayload":{"position":{"x":23659.84606657961,"y":13026.656201799564},"targetPosition":{"x":23279.742180013905,"y":13088.290447563973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3a8e6c45-0172-4d5d-913d-4d9da74a66c2","savedPayload":{"position":{"x":23279.751367406945,"y":13088.26245973231},"targetPosition":{"x":24365.94914810566,"y":13088.257412841824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"let channel = record.current // Our main dependencies are candles\nvariable.count.all++\n\nif (channel.direction === \"Up\") {\n\n variable.count.up++\n\n if (channel.period > variable.max.up) { variable.max.up = channel.period }\n\n if (channel.period <= variable.MAX_PERIODS) {\n let data = variable.arrayUp[channel.period]\n data.count++\n data.probability = data.count / variable.count.up\n variable.arrayUp[channel.period] = data\n }\n\n for (let i = 1; i <= variable.MAX_PERIODS; i++) {\n if (channel.period > i) {\n let data = variable.arrayUp[i]\n data.greaterCount++\n data.greaterProbability = data.greaterCount / variable.count.up\n variable.arrayUp[i] = data\n }\n }\n}\n\nif (channel.direction === \"Down\") {\n\n variable.count.down++\n\n if (channel.period > variable.max.down) { variable.max.down = channel.period }\n\n if (channel.period <= variable.MAX_PERIODS) {\n let data = variable.arrayDown[channel.period]\n data.count++\n data.probability = data.count / variable.count.down\n variable.arrayDown[channel.period] = data\n }\n\n for (let i = 1; i <= variable.MAX_PERIODS; i++) {\n if (channel.period > i) {\n let data = variable.arrayDown[i]\n data.greaterCount++\n data.greaterProbability = data.greaterCount / variable.count.up\n variable.arrayDown[i] = data\n }\n }\n}\n\nif (channel.direction === \"Side\") {\n\n variable.count.side++\n\n if (channel.period > variable.max.side) { variable.max.side = channel.period }\n\n if (channel.period <= variable.MAX_PERIODS) {\n let data = variable.arraySide[channel.period]\n data.count++\n data.probability = data.count / variable.count.side\n variable.arraySide[channel.period] = data\n }\n\n for (let i = 1; i <= variable.MAX_PERIODS; i++) {\n if (channel.period > i) {\n let data = variable.arraySide[i]\n data.greaterCount++\n data.greaterProbability = data.greaterCount / variable.count.up\n variable.arraySide[i] = data\n }\n }\n}\n\nvariable.probability.up = variable.count.up / variable.count.all\nvariable.probability.down = variable.count.down / variable.count.all\nvariable.probability.side = variable.count.side / variable.count.all\n\n","project":"Superalgos","id":"c15afb69-a887-4bb7-90b0-7828ed44cc36","savedPayload":{"position":{"x":23840.29812720107,"y":12876.117110924382},"targetPosition":{"x":23976.245455225304,"y":12890.463156261889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6363cb92-acac-4e9f-b390-e759c691b3f4","savedPayload":{"position":{"x":23976.245455225304,"y":12890.463156261889},"targetPosition":{"x":24111.60035113327,"y":12903.920413605096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"variable = {\n MAX_PERIODS: 10,\n count: {\n all: 0,\n up: 0,\n down: 0,\n side: 0\n },\n max: {\n up: 0,\n down: 0,\n side: 0\n },\n probability: {\n up: 0,\n down: 0,\n side: 0\n },\n arrayUp: [],\n arrayDown: [],\n arraySide: []\n}\n\nfor (let i = 0; i <= variable.MAX_PERIODS; i++) {\n let dataUp = {\n count: 0,\n probability: 0,\n greaterCount: 0,\n greaterProbability: 0\n }\n let dataDown = {\n count: 0,\n probability: 0,\n greaterCount: 0,\n greaterProbability: 0\n }\n let dataSide = {\n count: 0,\n probability: 0,\n greaterCount: 0,\n greaterProbability: 0\n }\n variable.arrayUp.push(dataUp)\n variable.arrayDown.push(dataDown)\n variable.arraySide.push(dataSide)\n}\n","project":"Superalgos","id":"3ab58fbc-1e9c-42c6-9396-85f2476039ea","savedPayload":{"position":{"x":24021.627765735666,"y":12613.67723158462},"targetPosition":{"x":24078.11335591874,"y":12739.13668888178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"51e8fb5d-98ce-4eae-9b92-cdea22017c3e","savedPayload":{"position":{"x":24078.11335591874,"y":12739.13668888178},"targetPosition":{"x":24111.60035113327,"y":12903.920413605096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"216d8d3f-305e-41d7-844f-044244ba4c86","savedPayload":{"position":{"x":24111.60035113327,"y":12903.920413605096},"targetPosition":{"x":24365.94914810566,"y":13088.257412841824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6f5208bc-786c-4fe8-876a-e1d3550db36d","savedPayload":{"position":{"x":24256.493339480294,"y":12777.469525516837},"targetPosition":{"x":24687.68912809008,"y":12777.467848396518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Candles Channels Probabilities","id":"194dbe67-1ef8-47a3-8d1f-d769f9d19b55"}}}],"id":"4309c865-1bac-404b-8904-5ac6405d2993","savedPayload":{"position":{"x":24687.959001850253,"y":12844.043964355043},"targetPosition":{"x":24687.956165025786,"y":12377.91976516634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Candles Probabilities","config":"{\n\"codeName\": \"Candles-Probabilities\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Candles Probabilities","config":"{\n\t\"codeName\": \"Candles-Probabilities\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Candles Probabilities","config":"{ \n\"codeName\": \"Candles-Probabilities\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Direction Up","config":"{\n \"valueDecimals\": 6\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.directionUp","project":"Superalgos","id":"896d5095-3ca6-47b8-8108-145e2e363f32","savedPayload":{"position":{"x":23450.78270336168,"y":12777.731533784625},"targetPosition":{"x":23451.09081655848,"y":12577.758957696398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b7eea96-210d-4fd8-a160-76f7bca629ba","savedPayload":{"position":{"x":23451.09081655848,"y":12577.758957696398},"targetPosition":{"x":23451.062752882197,"y":12377.914865074006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Direction Down","config":"{\n \"valueDecimals\": 6\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.directionDown","project":"Superalgos","id":"28b81006-e70c-4608-a695-bce4a8933a8f","savedPayload":{"position":{"x":23050.868506631003,"y":12377.91701435546},"targetPosition":{"x":23251.17130210325,"y":12377.911682663043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"11a6da40-b053-4c51-a929-af711aa02cf6","savedPayload":{"position":{"x":23251.17130210325,"y":12377.911682663043},"targetPosition":{"x":23451.062752882197,"y":12377.914865074006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Direction Side","config":"{\n \"valueDecimals\": 6\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.directionSide","project":"Superalgos","id":"fbd5a4b7-18ff-47d5-82b8-c600cc4fac99","savedPayload":{"position":{"x":23450.776938579078,"y":11978.087830479888},"targetPosition":{"x":23451.08772439287,"y":12178.050604192098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"46500c39-2a45-4836-ab76-baaac8b98100","savedPayload":{"position":{"x":23451.08772439287,"y":12178.050604192098},"targetPosition":{"x":23451.062752882197,"y":12377.914865074006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3102069a-4a2a-41e6-aa8d-f71dc48148f2","savedPayload":{"position":{"x":23451.062752882197,"y":12377.914865074006},"targetPosition":{"x":23850.105611657826,"y":12377.917823892521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ecab3716-75a4-4752-b826-1d5df9ec7325","savedPayload":{"position":{"x":23850.105611657826,"y":12377.917823892521},"targetPosition":{"x":24288.1375769354,"y":12377.91676551125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bf60e853-e860-4fbf-8922-c7430406b12d","savedPayload":{"position":{"x":24232.91647456989,"y":12377.915953972333},"targetPosition":{"x":24687.956165025786,"y":12377.91976516634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Candles Channels Probabilities","config":"{\n\"codeName\": \"Candles-Channels-Probabilities\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Candles Channels Probabilities","config":"{ \n\"codeName\": \"Candles-Channels-Probabilities\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Candles Channels Probabilities","config":"{ \n\"codeName\": \"Candles Channels Probabilities\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Count All","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.countAll","project":"Superalgos","id":"fa576991-5a1c-4a7b-b6f0-16a26b50b534","savedPayload":{"position":{"x":25031.786543082988,"y":11637.949705239684},"targetPosition":{"x":24676.38490468017,"y":11537.410396498097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0ead2e06-daea-4212-aff2-3564d6f1ac14","savedPayload":{"position":{"x":24676.38490468017,"y":11537.410396498097},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Count Up","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.countUp","project":"Superalgos","id":"b495344a-0ee6-4b91-a38e-c59728bc4fa8","savedPayload":{"position":{"x":24803.56801826581,"y":11972.489483838015},"targetPosition":{"x":24555.13487210452,"y":11702.008752459622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"786019d8-2fec-4feb-a784-d32f35c013e6","savedPayload":{"position":{"x":24555.13487210452,"y":11702.008752459622},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Count Down","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.countDown","project":"Superalgos","id":"1cd50ef3-9d6e-4c28-9789-785d250dfd77","savedPayload":{"position":{"x":24445.125426540406,"y":12152.802184843835},"targetPosition":{"x":24382.872587188085,"y":11791.109170247972},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"adebe92f-1d1a-4afb-b61d-7081f6b290f4","savedPayload":{"position":{"x":24382.872587188085,"y":11791.109170247972},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Count Side","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.countSide","project":"Superalgos","id":"3aa9ba59-e653-4247-8cbf-4905f7382cc8","savedPayload":{"position":{"x":24034.20013371697,"y":12105.497012289932},"targetPosition":{"x":24177.402355381313,"y":11767.4284801743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fdb8d804-d6e6-4fa7-a71a-a79f4bb5c00a","savedPayload":{"position":{"x":24177.402355381313,"y":11767.4284801743},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Max Periods Up","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.maxUp","project":"Superalgos","id":"9ae88e84-07a2-4398-a17b-069443eef06a","savedPayload":{"position":{"x":23713.55136502789,"y":11843.401658441768},"targetPosition":{"x":24017.02373119288,"y":11636.268970049447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f2fb198b-3027-4037-8b77-656c1a09e6fe","savedPayload":{"position":{"x":24017.02373119288,"y":11636.268970049447},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Max Periods Down","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.maxDown","project":"Superalgos","id":"5ab6f852-4d60-42e9-a268-7719ae05c039","savedPayload":{"position":{"x":23585.5861331559,"y":11449.364967677835},"targetPosition":{"x":23953.011037979744,"y":11439.186243052976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5836b0c5-4a10-4efa-b732-cfccb42f7bb3","savedPayload":{"position":{"x":23953.011037979744,"y":11439.186243052976},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Max Periods Side","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.maxSide","project":"Superalgos","id":"9bed7e40-98c0-4894-afb3-f65c8df9feef","savedPayload":{"position":{"x":23690.94952967508,"y":11049.233103090544},"targetPosition":{"x":24005.70179524251,"y":11239.057499315979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85e693e8-b634-4cb1-b983-6bd0d125d95b","savedPayload":{"position":{"x":24005.70179524251,"y":11239.057499315979},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Probability Up","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp","project":"Superalgos","id":"e68177d3-b01e-4d0d-a1f0-0cab3cdf295e","savedPayload":{"position":{"x":23996.21477026832,"y":10768.986414334948},"targetPosition":{"x":24158.36156819031,"y":11098.90204800275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9187cf3a-e693-4f3f-a675-a0b677ebbf47","savedPayload":{"position":{"x":24158.36156819031,"y":11098.90204800275},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Probability Down","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown","project":"Superalgos","id":"1053b129-d1bf-4c28-9a67-bfa678f3149b","savedPayload":{"position":{"x":24404.0990151672,"y":10698.274452736934},"targetPosition":{"x":24362.40818122062,"y":11063.61678811194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e023b233-b20a-4645-a96b-9ca6f9ed1f2d","savedPayload":{"position":{"x":24362.40818122062,"y":11063.61678811194},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Probability Side","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide","project":"Superalgos","id":"ec9d0a16-b97b-44e0-a659-8a4876f759fc","savedPayload":{"position":{"x":24766.74965101587,"y":10835.246015163139},"targetPosition":{"x":24540.095129045265,"y":11126.988392369043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0897183b-3295-4559-93b5-d961822f9e3f","savedPayload":{"position":{"x":24540.095129045265,"y":11126.988392369043},"targetPosition":{"x":24320.692770899135,"y":11429.035326538513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9b4851ba-9cd0-42e4-9929-6e4650800b94","savedPayload":{"position":{"x":24218.975849311275,"y":11913.038037832059},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Candles Channels Up Probabilities","config":"{ \n\"codeName\": \"Candles Channels Up Probabilities\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"1 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp1","project":"Superalgos","id":"07e00144-4d7c-4be0-9446-fcce6a7c0e6a","savedPayload":{"position":{"x":24401.488226526602,"y":11970.421992573934},"targetPosition":{"x":24370.33180270917,"y":11420.722579257872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bc260d63-484b-4fb2-850a-c8a57b386c95","savedPayload":{"position":{"x":24370.33180270917,"y":11420.722579257872},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"2 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp2","project":"Superalgos","id":"35ca47e6-f52a-4ee5-9839-b2841f987d78","savedPayload":{"position":{"x":23797.251828303957,"y":11829.738113597405},"targetPosition":{"x":24068.180430871325,"y":11350.31084991745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4908d680-f84a-49d5-ba5f-7abec1219b9f","savedPayload":{"position":{"x":24068.180430871325,"y":11350.31084991745},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"3 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp3","project":"Superalgos","id":"44a7d661-accf-4962-90f0-1ab53c99c5ab","savedPayload":{"position":{"x":23364.727559694693,"y":11384.674953693157},"targetPosition":{"x":23851.916876420855,"y":11127.815653453981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e658351e-118c-481f-8387-53e1c7dc3d1e","savedPayload":{"position":{"x":23851.916876420855,"y":11127.815653453981},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"4 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp4","project":"Superalgos","id":"a6387b2c-5f86-44e3-a298-a25fb5667e37","savedPayload":{"position":{"x":23241.490894375147,"y":10776.677817604135},"targetPosition":{"x":23790.298015104174,"y":10823.792807939371},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9679e258-89b4-4cbc-81e0-78c2d53f2a76","savedPayload":{"position":{"x":23790.298015104174,"y":10823.792807939371},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"5 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp5","project":"Superalgos","id":"7867c03a-d26f-4ea3-a7d2-6e3042e4a5e9","savedPayload":{"position":{"x":23466.78385195505,"y":10198.13520086962},"targetPosition":{"x":23902.953588559987,"y":10534.497144540357},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"000c1693-1ca1-481f-99ad-64dc0b3d864f","savedPayload":{"position":{"x":23902.953588559987,"y":10534.497144540357},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"6 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp6","project":"Superalgos","id":"8dde6fd4-76ad-43cd-b65a-c8b2cd344fde","savedPayload":{"position":{"x":23969.106079861893,"y":9833.197349098384},"targetPosition":{"x":24154.13473491888,"y":10352.010896242717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d59a341d-36d1-4780-86f0-332a60cdc7a8","savedPayload":{"position":{"x":24154.13473491888,"y":10352.010896242717},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"7 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp7","project":"Superalgos","id":"3e3d36c0-c609-47cd-b50c-b67ef9033d13","savedPayload":{"position":{"x":24588.52560519175,"y":9797.784959843999},"targetPosition":{"x":24463.87437877179,"y":10334.299837034167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"15c0e7d0-aef2-485a-8e47-225002493c8a","savedPayload":{"position":{"x":24463.87437877179,"y":10334.299837034167},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"8 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp8","project":"Superalgos","id":"915d2648-2b9f-4594-904d-3310da162972","savedPayload":{"position":{"x":25129.011391108626,"y":10103.141280879736},"targetPosition":{"x":24734.137535828293,"y":10486.977596800602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3c5cc745-31f0-442c-86ab-2de4fe641a8a","savedPayload":{"position":{"x":24734.137535828293,"y":10486.977596800602},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"9 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp9","project":"Superalgos","id":"7ecb2b5b-f932-48fe-95a0-9c2f86d771f9","savedPayload":{"position":{"x":25418.641289452295,"y":10651.962738912085},"targetPosition":{"x":24878.903918027194,"y":10761.349356873445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"64ef6260-28c6-4aca-9899-5b5e422716c8","savedPayload":{"position":{"x":24878.903918027194,"y":10761.349356873445},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"10 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityUp10","project":"Superalgos","id":"4a25b034-61a2-4050-85c7-9e39c5ebbafb","savedPayload":{"position":{"x":25365.78097028512,"y":11269.834232942343},"targetPosition":{"x":24852.51758385689,"y":11070.352890745271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57f242de-4438-408a-8e7d-17554c1d8602","savedPayload":{"position":{"x":24852.51758385689,"y":11070.352890745271},"targetPosition":{"x":24339.207975975743,"y":10870.946994565682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9b2fa2a-7993-4602-9c5c-180175745dd4","savedPayload":{"position":{"x":24104.328708664765,"y":11406.989467748628},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Candles Channels Down Probabilities","config":"{ \n\"codeName\": \"Candles Channels Down Probabilities\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"1 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown1","project":"Superalgos","id":"23dca426-62bb-472d-a631-6de325f9f9e3","savedPayload":{"position":{"x":23960.0092206138,"y":11270.025357933253},"targetPosition":{"x":24473.363587782027,"y":11070.464386606489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"82ea7539-87d8-4801-8a55-5d72341f7981","savedPayload":{"position":{"x":24473.363587782027,"y":11070.464386606489},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"2 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown2","project":"Superalgos","id":"9f42086f-9981-47d0-a6ca-40b9f8cd555b","savedPayload":{"position":{"x":23907.14361723959,"y":10651.985126293901},"targetPosition":{"x":24446.968609020867,"y":10761.384170726704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5659eebc-8ea9-4d6c-bcc0-1bb7cfa83c8a","savedPayload":{"position":{"x":24446.968609020867,"y":10761.384170726704},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"3 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown3","project":"Superalgos","id":"1024ff8c-10a7-4bc0-bfd5-6fde53b25151","savedPayload":{"position":{"x":24196.84229575479,"y":10103.080761236564},"targetPosition":{"x":24591.776016343032,"y":10486.96841415433},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4e4162b5-9989-4ced-954c-024c643b354b","savedPayload":{"position":{"x":24591.776016343032,"y":10486.96841415433},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"4 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown4","project":"Superalgos","id":"cfee4218-a9d7-4649-8118-c68f4c04917d","savedPayload":{"position":{"x":24737.457605104104,"y":9797.849668506351},"targetPosition":{"x":24862.102456226654,"y":10334.348991709097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40026d30-b3ce-4a0c-8ae4-50ab1847b6f8","savedPayload":{"position":{"x":24862.102456226654,"y":10334.348991709097},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"5 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown5","project":"Superalgos","id":"49be0cfe-1c4e-4bee-96c5-93cc97022dfc","savedPayload":{"position":{"x":25356.83427458366,"y":9833.305437497711},"targetPosition":{"x":25171.820468628877,"y":10352.079042844025},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2534a50-5cc5-4fca-a800-859c88427ab3","savedPayload":{"position":{"x":25171.820468628877,"y":10352.079042844025},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"6 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown6","project":"Superalgos","id":"a9411068-45d1-409c-b8d3-91750a9f1f61","savedPayload":{"position":{"x":25859.125293677116,"y":10198.214815011685},"targetPosition":{"x":25422.986554496136,"y":10534.548878913622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"043a6c35-a878-4082-8b98-b58ca01fb5a0","savedPayload":{"position":{"x":25422.986554496136,"y":10534.548878913622},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"7 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown7","project":"Superalgos","id":"a2d057f6-857e-41cc-b88e-ef6240cda541","savedPayload":{"position":{"x":26084.273253238458,"y":10776.72924963025},"targetPosition":{"x":25535.573342411364,"y":10823.828497712922},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"982ba082-d3a1-4c25-a712-fd22585e4473","savedPayload":{"position":{"x":25535.573342411364,"y":10823.828497712922},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"8 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown8","project":"Superalgos","id":"6837746d-276b-473f-9a1b-6a2ee79bdb4d","savedPayload":{"position":{"x":25961.05317826982,"y":11384.509465944962},"targetPosition":{"x":25473.95421333837,"y":11127.750106840474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9379c93b-0cdd-40b0-a8b0-fc1019f5b082","savedPayload":{"position":{"x":25473.95421333837,"y":11127.750106840474},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"9 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown9","project":"Superalgos","id":"f59472a9-6507-4c28-8820-06d2ff4d4cc7","savedPayload":{"position":{"x":25528.614727914424,"y":11829.364366124597},"targetPosition":{"x":25257.743614082236,"y":11350.157861767471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d612b2c7-503f-4327-a7d3-a6d0ca9e7b91","savedPayload":{"position":{"x":25257.743614082236,"y":11350.157861767471},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"10 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilityDown10","project":"Superalgos","id":"0c2a9662-fb18-45c1-8f0a-fb7339601cd2","savedPayload":{"position":{"x":24924.557045445123,"y":11970.019227915036},"targetPosition":{"x":24955.693922649385,"y":11420.552014227083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f766ff2-0076-41b3-836d-4cbba53b6b4b","savedPayload":{"position":{"x":24955.693922649385,"y":11420.552014227083},"targetPosition":{"x":24986.75788514276,"y":10870.974599099456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"af3d5d0c-21a1-4fe7-83f9-9afabd3cf16f","savedPayload":{"position":{"x":24428.323624924153,"y":11000.836473659861},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Candles Channels Side Probabilities","config":"{ \n\"codeName\": \"Candles Channels Side Probabilities\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"1 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide1","project":"Superalgos","id":"f7bc6a24-6277-4c81-89cf-b07a285b9fda","savedPayload":{"position":{"x":24039.36721113717,"y":10988.652538723367},"targetPosition":{"x":24589.741287978035,"y":11014.897031011817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1ae051e6-771f-4332-87fa-ccb3faa468d5","savedPayload":{"position":{"x":24589.741287978035,"y":11014.897031011817},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"2 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide2","project":"Superalgos","id":"cfc70522-309f-4f8a-962d-e98bbd6bfc06","savedPayload":{"position":{"x":24255.512558245417,"y":10381.716663821095},"targetPosition":{"x":24704.16743710518,"y":10701.2460075604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c8f2d5bb-14c3-4094-bc2b-2b5c46f4dc59","savedPayload":{"position":{"x":24704.16743710518,"y":10701.2460075604},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"3 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide3","project":"Superalgos","id":"269c5548-643a-4c77-a4bb-33d3741b5aa2","savedPayload":{"position":{"x":24730.796719546437,"y":10018.337477761706},"targetPosition":{"x":24935.421998100916,"y":10529.731969459968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ebc2b7eb-e399-4025-a222-0c288a218b9c","savedPayload":{"position":{"x":24935.421998100916,"y":10529.731969459968},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"4 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide4","project":"Superalgos","id":"3cb178ac-79a4-4742-b056-4242f1a44a4f","savedPayload":{"position":{"x":25348.418847282705,"y":9959.366332019994},"targetPosition":{"x":25244.248954110248,"y":10500.25271306042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9b18832c-c75a-48d5-84a8-10c87c3ecaa7","savedPayload":{"position":{"x":25244.248954110248,"y":10500.25271306042},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"5 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide5","project":"Superalgos","id":"886987c2-c671-4fb1-8e4f-2531678fdf27","savedPayload":{"position":{"x":25900.292524328037,"y":10243.881674638014},"targetPosition":{"x":25520.206597911812,"y":10642.52100496909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"02d20e04-267c-4947-aaef-975b0afbc6be","savedPayload":{"position":{"x":25520.206597911812,"y":10642.52100496909},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"6 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide6","project":"Superalgos","id":"1c3ef0f9-8202-4bd1-b2cf-d5f093a0b93e","savedPayload":{"position":{"x":26210.767425085658,"y":10781.5773648049},"targetPosition":{"x":25675.4634381429,"y":10911.387590877597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8263c56f-f813-4b09-a3ec-d03873f61cfb","savedPayload":{"position":{"x":25675.4634381429,"y":10911.387590877597},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"7 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide7","project":"Superalgos","id":"65c5aefe-26f5-43b7-9db4-92869f50c17d","savedPayload":{"position":{"x":26181.27997930872,"y":11401.295667615694},"targetPosition":{"x":25660.71972795057,"y":11221.265762447514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"defe61e1-b9f0-4a78-89fb-d9793c2b6a30","savedPayload":{"position":{"x":25660.71972795057,"y":11221.265762447514},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"8 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide8","project":"Superalgos","id":"4ec4604d-2c8a-43e2-9c86-e4cd4f84e6cc","savedPayload":{"position":{"x":25821.309587723706,"y":11906.995953084137},"targetPosition":{"x":25480.729108967014,"y":11474.085314254056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"34bc4b9d-8740-49d3-b289-3a15f1e5ad90","savedPayload":{"position":{"x":25480.729108967014,"y":11474.085314254056},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"9 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide9","project":"Superalgos","id":"7896244a-82de-46a3-9ad5-973a8a46bc47","savedPayload":{"position":{"x":25270.11793328525,"y":12136.877910647114},"targetPosition":{"x":25217.719282376278,"y":11588.59974956341},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3700449f-d0f2-4dc6-aad2-8ed6ba3dffb3","savedPayload":{"position":{"x":25217.719282376278,"y":11588.59974956341},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"10 Periods","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.probabilitySide10","project":"Superalgos","id":"eefa0c8e-3bbd-4f17-bf18-da2ea4adce72","savedPayload":{"position":{"x":24635.560322455225,"y":12020.301318342992},"targetPosition":{"x":24887.916785093585,"y":11530.774342251336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"319c7144-ca2d-47de-acc4-ea71a008def2","savedPayload":{"position":{"x":24887.916785093585,"y":11530.774342251336},"targetPosition":{"x":25140.047813791247,"y":11041.257103328917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f4f7ebb6-52dc-4031-9822-f0391e95e043","savedPayload":{"position":{"x":24947.594749828182,"y":11000.837883563845},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Candles Channels Next Up","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"1 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp1","project":"Superalgos","id":"4c2ab782-9799-4259-99ee-7ffeb3428f92","savedPayload":{"position":{"x":24958.75971512385,"y":11239.754024382648},"targetPosition":{"x":25007.12581779335,"y":11334.01237976527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"6ab10cae-4aa4-45f6-b5c7-9baf4c0691a1","savedPayload":{"position":{"x":25007.12581779335,"y":11334.01237976527},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"2 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp2","project":"Superalgos","id":"751ec0df-e3bc-404f-a1b0-d17647bb854e","savedPayload":{"position":{"x":25177.621066135634,"y":11197.32726421574},"targetPosition":{"x":25167.249870552205,"y":11305.502341348198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"17e442b4-eb1a-4c17-8b63-d731b95c983a","savedPayload":{"position":{"x":25167.249870552205,"y":11305.502341348198},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"3 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp3","project":"Superalgos","id":"4ebf70da-30e3-4b0e-bc5c-029e30a705ec","savedPayload":{"position":{"x":25384.748207265126,"y":11280.54236567676},"targetPosition":{"x":25319.173032682967,"y":11363.874228412984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"162d2a00-b00c-4284-9c01-1837f0161e1b","savedPayload":{"position":{"x":25319.173032682967,"y":11363.874228412984},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"4 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp4","project":"Superalgos","id":"1101c09f-831c-4a7d-9ce2-0c23a66a240f","savedPayload":{"position":{"x":25514.092506393747,"y":11462.376620086816},"targetPosition":{"x":25413.846317868913,"y":11497.022434896207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"fa5a33a9-8d8a-408c-93bd-8b06b3fbafe6","savedPayload":{"position":{"x":25413.846317868913,"y":11497.022434896207},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"5 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp5","project":"Superalgos","id":"211e8218-8abd-476b-8b61-f95235f54548","savedPayload":{"position":{"x":25524.528479751152,"y":11684.805886480775},"targetPosition":{"x":25421.626069955975,"y":11659.985360464652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0c4098da-6a1c-45a2-b0cc-e67f995f265d","savedPayload":{"position":{"x":25421.626069955975,"y":11659.985360464652},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"6 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp6","project":"Superalgos","id":"a471a5b8-7716-42d9-8c4e-c493e427733c","savedPayload":{"position":{"x":25413.402621164536,"y":11878.28322891039},"targetPosition":{"x":25340.089326850302,"y":11801.567610726866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f4b0d4a0-fa30-4e94-a2f1-f8a2e94eb991","savedPayload":{"position":{"x":25340.089326850302,"y":11801.567610726866},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"7 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp7","project":"Superalgos","id":"fc8aa338-c938-4827-acfd-335a685a45a7","savedPayload":{"position":{"x":25214.938558017926,"y":11980.360147401909},"targetPosition":{"x":25194.819872931144,"y":11876.359041759575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"dd6b2919-8a58-4817-91da-8e2d591633e2","savedPayload":{"position":{"x":25194.819872931144,"y":11876.359041759575},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"8 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp8","project":"Superalgos","id":"97cdc151-6085-4925-bf5f-b51f757f12c9","savedPayload":{"position":{"x":24993.176571467688,"y":11959.273887459098},"targetPosition":{"x":25032.34757338953,"y":11860.937606416444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d3c74a33-f336-4d3a-9646-064fee673e10","savedPayload":{"position":{"x":25032.34757338953,"y":11860.937606416444},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"9 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp9","project":"Superalgos","id":"26a6b54f-5c6f-43a6-94da-ea5381b4f53d","savedPayload":{"position":{"x":24817.502553833237,"y":11821.782757809538},"targetPosition":{"x":24903.790390169765,"y":11760.052109942166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"dff2a6e7-8415-4f8a-bfce-a5b7106db6e6","savedPayload":{"position":{"x":24903.790390169765,"y":11760.052109942166},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"10 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextUp10","project":"Superalgos","id":"2b04f728-46ee-4056-bdee-d7b643308401","savedPayload":{"position":{"x":24744.817182324765,"y":11611.175396342676},"targetPosition":{"x":24850.66447573532,"y":11605.271655500492},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"3ac887b6-7bdb-494d-8490-dab0c77aec2e","savedPayload":{"position":{"x":24850.66447573532,"y":11605.271655500492},"targetPosition":{"x":25139.89472119673,"y":11591.786930692188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3b367a4d-115a-4d9e-b783-2d0c6e542735","savedPayload":{"position":{"x":25271.58987753905,"y":11406.996064070105},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Candles Channels Next Down","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"1 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown1","project":"Superalgos","id":"b3bb2ecb-6337-4d2c-8c89-245c7f73e108","savedPayload":{"position":{"x":24967.023669164948,"y":11285.641630844104},"targetPosition":{"x":24999.985782087977,"y":11383.71066621041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"61b3b455-eb49-41a9-9de5-03d92c567f4a","savedPayload":{"position":{"x":24999.985782087977,"y":11383.71066621041},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"2 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown2","project":"Superalgos","id":"e989918e-5605-496d-a7f2-0ca713de39f0","savedPayload":{"position":{"x":25187.970633533092,"y":11283.186203202493},"targetPosition":{"x":25162.720401436225,"y":11381.218474789242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2b917503-223e-4dde-8cf0-cb40412a6ec6","savedPayload":{"position":{"x":25162.720401436225,"y":11381.218474789242},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"3 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown3","project":"Superalgos","id":"63721d6c-2bb1-4da6-a8c6-ae21295382b0","savedPayload":{"position":{"x":25381.64112129956,"y":11388.322526005162},"targetPosition":{"x":25306.21279651732,"y":11459.179036246476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2a8d6136-b67f-468a-8c38-d5b30701b1b8","savedPayload":{"position":{"x":25306.21279651732,"y":11459.179036246476},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"4 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown4","project":"Superalgos","id":"2fd80a46-7a01-4de0-b98e-3ac645d3b8ac","savedPayload":{"position":{"x":25481.488189094867,"y":11587.64391144822},"targetPosition":{"x":25382.096804497698,"y":11606.00201430045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"bc71245e-73f8-4442-ae03-7daa88da531c","savedPayload":{"position":{"x":25382.096804497698,"y":11606.00201430045},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"5 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown5","project":"Superalgos","id":"382438e9-28c2-4ff2-851a-20fca2d466e0","savedPayload":{"position":{"x":25459.282506567026,"y":11808.572195979426},"targetPosition":{"x":25365.353991317417,"y":11770.442460658844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d63906ec-7de0-4edf-8947-96baca8dc478","savedPayload":{"position":{"x":25365.353991317417,"y":11770.442460658844},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"6 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown6","project":"Superalgos","id":"731bf25d-359a-463a-8a63-a0c5d3d0c306","savedPayload":{"position":{"x":25320.025641915898,"y":11982.108970402567},"targetPosition":{"x":25261.979417704584,"y":11899.725557417321},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d25e4daa-306d-47b9-98fb-c8bb25dec5e0","savedPayload":{"position":{"x":25261.979417704584,"y":11899.725557417321},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"7 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown7","project":"Superalgos","id":"d0e9fb29-52c5-48e3-81c9-b6d74b42733f","savedPayload":{"position":{"x":25109.43879283625,"y":12053.653178794857},"targetPosition":{"x":25105.24481595322,"y":11952.965096499938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"22726c47-81aa-40ac-8b23-0b6f280f067c","savedPayload":{"position":{"x":25105.24481595322,"y":11952.965096499938},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"8 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown8","project":"Superalgos","id":"e0ce0822-3eb2-4429-8a67-b41c8fbf0cdd","savedPayload":{"position":{"x":24893.987984999883,"y":12000.100064948094},"targetPosition":{"x":24944.891097587486,"y":11912.879935570649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4ebe2345-d360-4de4-b58a-73a711fefa7a","savedPayload":{"position":{"x":24944.891097587486,"y":11912.879935570649},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"9 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown9","project":"Superalgos","id":"80873b6e-5349-407f-993a-2b5247f73b3f","savedPayload":{"position":{"x":24742.279388428866,"y":11838.101887201037},"targetPosition":{"x":24831.677023546636,"y":11792.314158681924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"1738151b-da20-4cc6-8565-87a08de1c2db","savedPayload":{"position":{"x":24831.677023546636,"y":11792.314158681924},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"10 Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.nextDown10","project":"Superalgos","id":"253de26c-204d-49f7-af4c-2945ce71dee3","savedPayload":{"position":{"x":24717.777503375833,"y":11598.148054067537},"targetPosition":{"x":24812.395175275815,"y":11633.885399724844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"c030125c-1b29-4743-bbd5-93a86a2bad7d","savedPayload":{"position":{"x":24812.395175275815,"y":11633.885399724844},"targetPosition":{"x":25093.182395310658,"y":11659.551013432003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c16dc1ed-9da7-45da-bf32-c205a1d52d55","savedPayload":{"position":{"x":25157.15019949812,"y":11913.066333936931},"targetPosition":{"x":24687.959017102425,"y":11540.076428488494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"194dbe67-1ef8-47a3-8d1f-d769f9d19b55","savedPayload":{"position":{"x":24687.959017102425,"y":11540.076428488494},"targetPosition":{"x":24687.95947714835,"y":11978.07499246695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2224a2d-77d4-40ff-b632-a3629ce984f7","savedPayload":{"position":{"x":24687.956061134973,"y":11922.877378570005},"targetPosition":{"x":24687.956165025786,"y":12377.91976516634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"37e312af-e076-47aa-a1cd-bf5b2e16127d","savedPayload":{"position":{"x":24945.956165025786,"y":12374.91976516634},"targetPosition":{"x":24945.956165025786,"y":12374.91976516634},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Sparta.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Sparta.json deleted file mode 100644 index 1135747e6..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Sparta.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Sparta","config":"{\n\"codeName\": \"Sparta\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Simple Moving Average (SMA)","config":"{\n\"codeName\": \"SMA\",\n\"repo\": \"SMA-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates SMAs for Time Frames of 01-hs and above.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Popular SMAs","project":"Superalgos","id":"5302effb-1f09-4a30-9f71-6956b8b9ca88","savedPayload":{"position":{"x":10609.044651705652,"y":17428.90566641547},"targetPosition":{"x":10995.890269605332,"y":17540.32974347027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3b21f9d7-2cbc-4c23-80c8-cc5e5b06a22c"}}},{"type":"Output Dataset","name":"Multi-Period-Market Base11 SMAs","project":"Superalgos","id":"8221593c-6298-4b4c-bfc2-cffbc9e5cd0f","savedPayload":{"position":{"x":10652.515125452519,"y":17324.96443352291},"targetPosition":{"x":10995.890269605332,"y":17540.32974347027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"af9b9cef-2a74-486f-b79e-047d68669a1f"}}},{"type":"Output Dataset","name":"Multi-Period-Market Base7 SMAs","project":"Superalgos","id":"aabd0857-b4fc-404a-8967-967475ed3993","savedPayload":{"position":{"x":10721.675023375876,"y":17240.07387795538},"targetPosition":{"x":10995.890269605332,"y":17540.32974347027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"78a6ef37-4df8-4ac8-83a0-c9a732467c59"}}},{"type":"Output Dataset","name":"Multi-Period-Market Base6 SMAs","project":"Superalgos","id":"dd00a77a-761e-404b-9e44-627335668112","savedPayload":{"position":{"x":10809.956405495142,"y":17178.031642194932},"targetPosition":{"x":10995.890269605332,"y":17540.32974347027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"c0862b3d-d35a-4d3e-8d80-258b8a01c37c"}}},{"type":"Output Dataset","name":"Muti-Period-Market Base5 SMAs","project":"Superalgos","id":"b6426833-d2c7-4300-b610-801e12a7edfd","savedPayload":{"position":{"x":10936.584878620257,"y":17141.406608785455},"targetPosition":{"x":10995.890269605332,"y":17540.32974347027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Muti-Period-Market","id":"a5d28568-fb58-469a-9820-b9f0e8eab705"}}}],"outputDatasetFolders":[],"id":"85a56739-9351-444b-95e9-a57470dca38a","savedPayload":{"position":{"x":10995.890269605332,"y":17540.32974347027},"targetPosition":{"x":11302.555356491408,"y":17880.959414907546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Simple Moving Average (SMA) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"d49d1e94-1960-4121-8e40-be8af52947ee","savedPayload":{"position":{"x":11067.618896327327,"y":17267.479023725446},"targetPosition":{"x":11205.707967556615,"y":17422.24521572421},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"81346f2f-13f2-46f4-85f5-a04b4d80f455"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"f7cf0949-06fc-4c98-a399-61fac1671c6e","savedPayload":{"position":{"x":11151.101786685287,"y":17208.702149919078},"targetPosition":{"x":11205.707967556615,"y":17422.24521572421},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"4228fdf3-e992-46b2-a91e-de95108a753d","savedPayload":{"position":{"x":11281.349968991311,"y":17232.215525355536},"targetPosition":{"x":11205.707967556615,"y":17422.24521572421},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"f404e748-b631-4cc5-975c-2a0736e55c0d","savedPayload":{"position":{"x":11205.707967556615,"y":17422.24521572421},"targetPosition":{"x":11302.555356491408,"y":17880.959414907546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"81346f2f-13f2-46f4-85f5-a04b4d80f455","savedPayload":{"position":{"x":11447.995850449608,"y":17434.978620984843},"targetPosition":{"x":11302.555356491408,"y":17880.959414907546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"2bce272e-2712-4f28-9736-03b51929aba2","savedPayload":{"position":{"x":11651.429237176782,"y":17567.173890562313},"targetPosition":{"x":11302.555356491408,"y":17880.959414907546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"b569db86-9ab5-4ba2-be41-357a9bce84b4","savedPayload":{"position":{"x":11761.931404826617,"y":17783.446955381383},"targetPosition":{"x":11302.555356491408,"y":17880.959414907546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"456269f6-9849-4d5f-9c8c-7cd7d1eef297","savedPayload":{"position":{"x":11308.714277777592,"y":17871.85548532934},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Describe what the process does.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Popular SMAs","project":"Superalgos","id":"417d3141-1e22-4ee6-b2d6-531a55b95c88","savedPayload":{"position":{"x":10908.000942572438,"y":17289.61734811988},"targetPosition":{"x":11241.486516415418,"y":17515.355998969822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2c338fe0-385f-45ab-b210-b98ef013228d"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base11 SMAs","project":"Superalgos","id":"022edfeb-ec62-4cd9-85bf-20e9f444e3c1","savedPayload":{"position":{"x":10981.273990850172,"y":17203.75391921497},"targetPosition":{"x":11241.486516415418,"y":17515.355998969822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"de5cfa30-edbf-4d5b-8d7f-facfb69a0f3e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base7 SMAs","project":"Superalgos","id":"42e89cd9-acbe-49cd-b6f6-7671317796d6","savedPayload":{"position":{"x":11073.516140956957,"y":17144.702213328612},"targetPosition":{"x":11241.486516415418,"y":17515.355998969822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f155e2ed-7082-4021-a4ff-a6f3cfd5683d"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base6 SMAs","project":"Superalgos","id":"a270e81a-4d70-4293-8a37-19191cf2ec23","savedPayload":{"position":{"x":11176.677768786107,"y":17112.984973336374},"targetPosition":{"x":11241.486516415418,"y":17515.355998969822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f5050eb2-0a99-464e-b5e2-2d8f40453e9a"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base5 SMAs","project":"Superalgos","id":"d3d1bc15-201c-4d00-ba2e-6401e5392c14","savedPayload":{"position":{"x":11308.395529414094,"y":17117.52152380214},"targetPosition":{"x":11241.486516415418,"y":17515.355998969822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"01f32aa3-55e9-4f8c-80c7-997b52073274"}}}],"outputDatasetFolders":[],"id":"ad03dff7-56b2-4980-bc14-1b6c41fdf6cf","savedPayload":{"position":{"x":11241.486516415418,"y":17515.355998969822},"targetPosition":{"x":11427.923891797012,"y":17934.131710771882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Simple Moving Average (SMA) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"d674a833-b9c8-4bdb-84de-e007ab243860","savedPayload":{"position":{"x":11372.391907582994,"y":17287.029491257614},"targetPosition":{"x":11477.595845032154,"y":17468.58334053084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"d2727d60-b26b-4e8b-a635-fbe78bc81240"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"ba857809-2273-4280-aa19-4b50837abccb","savedPayload":{"position":{"x":11457.701784390403,"y":17236.604263899466},"targetPosition":{"x":11477.595845032154,"y":17468.58334053084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"40e12ba8-59dc-4eaf-a30d-07bb8192e0a6","savedPayload":{"position":{"x":11516.240865570066,"y":17285.93915623869},"targetPosition":{"x":11477.595845032154,"y":17468.58334053084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"5f5e40cb-841e-4b18-a249-a04d541d31a0","savedPayload":{"position":{"x":11646.567809240092,"y":17311.01465490835},"targetPosition":{"x":11477.595845032154,"y":17468.58334053084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"b6aae3c7-2d70-4ffd-a5e5-951f0a565b13","savedPayload":{"position":{"x":11477.595845032154,"y":17468.58334053084},"targetPosition":{"x":11427.923891797012,"y":17934.131710771882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"d2727d60-b26b-4e8b-a635-fbe78bc81240","savedPayload":{"position":{"x":11680.848739056928,"y":17588.042619884007},"targetPosition":{"x":11427.923891797012,"y":17934.131710771882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"8b753072-e4c9-4671-a5ce-eea9e1c1ba0f","savedPayload":{"position":{"x":11820.489965011919,"y":17760.00736076534},"targetPosition":{"x":11427.923891797012,"y":17934.131710771882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"87c9e783-adc5-40e3-b1fb-fdb2994c1217","savedPayload":{"position":{"x":11854.281117311806,"y":17978.955338289215},"targetPosition":{"x":11427.923891797012,"y":17934.131710771882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"333ae5d7-7ec1-4f08-b206-91e3b4f2c99f","savedPayload":{"position":{"x":11436.32970204314,"y":17923.60426180579},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Popular SMAs","config":"{\n \"codeName\": \"Popular-SMAs\",\n \"singularVariableName\": \"popularSMA\",\n \"pluralVariableName\": \"popularSMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"3b21f9d7-2cbc-4c23-80c8-cc5e5b06a22c","savedPayload":{"position":{"x":11516.412016253562,"y":17601.397383507563},"targetPosition":{"x":11516.171312285072,"y":18022.655004567645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"2c338fe0-385f-45ab-b210-b98ef013228d","savedPayload":{"position":{"x":11764.060013996626,"y":17681.933561237038},"targetPosition":{"x":11516.171312285072,"y":18022.655004567645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"673a7fbf-1a73-4220-a561-84cf8b11c3a7","savedPayload":{"position":{"x":12470.444471317933,"y":17197.919443865172},"targetPosition":{"x":12683.57280375448,"y":17340.427774878928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"305fc918-e6df-48d7-a7b5-726e3fa8f958","savedPayload":{"position":{"x":12683.57280375448,"y":17340.427774878928},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"002ffd5e-583c-4af5-87eb-a886fd3bc50e","savedPayload":{"position":{"x":12936.123471306175,"y":16920.355881694733},"targetPosition":{"x":12958.85102388261,"y":17175.38997181171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a305a94d-3af9-430a-8642-5ffb1229710f","savedPayload":{"position":{"x":12958.85102388261,"y":17175.38997181171},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA20","config":"{\n \"codeName\": \"sma20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma20","project":"Superalgos","id":"5adb676d-35a8-47b2-aa47-dc0e6edf8a81","savedPayload":{"position":{"x":13443.336778030538,"y":17111.61002307471},"targetPosition":{"x":13259.145932449086,"y":17287.73603107492},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1657736e-6bc4-4279-9e65-5b0b0cf737cb","savedPayload":{"position":{"x":13259.145932449086,"y":17287.73603107492},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA50","config":"{\n \"codeName\": \"sma50\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma50","project":"Superalgos","id":"85033109-c11c-43d2-84cc-4510dae276ca","savedPayload":{"position":{"x":13611.305715436905,"y":17627.04214358736},"targetPosition":{"x":13357.251563570568,"y":17593.331735860374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e7f1f78d-3a6d-49a2-b522-4423bd8d6a82","savedPayload":{"position":{"x":13357.251563570568,"y":17593.331735860374},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA100","config":"{\n \"codeName\": \"sma100\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma100","project":"Superalgos","id":"43eebecb-65db-4e64-902a-582515e06daa","savedPayload":{"position":{"x":13313.247591223331,"y":18079.434497143986},"targetPosition":{"x":13181.254826210923,"y":17860.97703493739},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"090fa9ea-f050-4315-9360-3958ce5debaa","savedPayload":{"position":{"x":13181.254826210923,"y":17860.97703493739},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA200","config":"{\n \"codeName\": \"sma200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma200","project":"Superalgos","id":"5bdf982c-5480-4f90-9ec2-7708bf2d4943","savedPayload":{"position":{"x":12773.670560646326,"y":18128.10739092227},"targetPosition":{"x":12862.170633593152,"y":17890.25441054592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8146fe70-3592-4f27-af4a-d3d8e93268d1","savedPayload":{"position":{"x":12862.170633593152,"y":17890.25441054592},"targetPosition":{"x":12991.29960269697,"y":17543.63490179658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1b29d760-f7fe-48a5-928c-212a6f9a2486","savedPayload":{"position":{"x":12087.088632661382,"y":17837.221624109487},"targetPosition":{"x":11516.171312285072,"y":18022.655004567645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last200.push(candle.close) // Add the current close value to the last 200 array.\n\nif (variable.last200.length > 200) {\n variable.last200.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 200 elements.\n}\n\nvariable.sma20 = calculateSMA(20)\nvariable.sma50 = calculateSMA(50)\nvariable.sma100 = calculateSMA(100)\nvariable.sma200 = calculateSMA(200)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last200.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last200.length - periods; i < variable.last200.length; i++) { // Iterate through the last periods\n sum = sum + variable.last200[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last200.length=\" + variable.last200.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last200[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"a9904080-6677-45e0-bcac-f336e882380a","savedPayload":{"position":{"x":12330.281631466112,"y":18076.4907052408},"targetPosition":{"x":12134.117354835804,"y":18117.796342967304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"f"}}},"id":"52a2ea69-6420-40f6-90f0-3330d33e6f67","savedPayload":{"position":{"x":12134.117354835804,"y":18117.796342967304},"targetPosition":{"x":11938.099354830307,"y":18159.314820394615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 200 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last200 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"2790fd06-6fe8-4175-bbfc-854d9909aeb4","savedPayload":{"position":{"x":12206.748875213774,"y":18456.577089526196},"targetPosition":{"x":12072.521455437012,"y":18307.87406177734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6d5772df-819e-4968-9e27-61981c08f0e2","savedPayload":{"position":{"x":12072.521455437012,"y":18307.87406177734},"targetPosition":{"x":11938.099354830307,"y":18159.314820394615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f1f881ff-a04f-4663-9747-2042d4581953","savedPayload":{"position":{"x":11938.099354830307,"y":18159.314820394615},"targetPosition":{"x":11516.171312285072,"y":18022.655004567645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4029d5bf-a8ad-4d80-b874-2af506e0ab34","savedPayload":{"position":{"x":11541.342580060043,"y":18005.692949919325},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"SMA Popular","id":"ddf21e96-c312-4ebe-9e2b-f56e8ea072aa"}}},{"type":"Product Definition","name":"Base7 SMAs","config":"{\n \"codeName\": \"Base7-SMAs\",\n \"singularVariableName\": \"base7SMA\",\n \"pluralVariableName\": \"base7SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"78a6ef37-4df8-4ac8-83a0-c9a732467c59","savedPayload":{"position":{"x":11703.836992143044,"y":17731.35897726554},"targetPosition":{"x":11572.70099870977,"y":18134.174173379764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"f155e2ed-7082-4021-a4ff-a6f3cfd5683d","savedPayload":{"position":{"x":11915.094653175387,"y":17885.73835287045},"targetPosition":{"x":11572.70099870977,"y":18134.174173379764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"6d7e37c5-d80e-44a3-8484-f532bcfc7819","savedPayload":{"position":{"x":13067.417599591397,"y":17923.116422777504},"targetPosition":{"x":13298.333593318817,"y":18026.477632153736},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87203f0b-0fb8-4875-8127-d715198bf01b","savedPayload":{"position":{"x":13298.333593318817,"y":18026.477632153736},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"bf74ad1e-a569-4428-a387-b0f39bb63759","savedPayload":{"position":{"x":13220.425236389947,"y":17712.461152725813},"targetPosition":{"x":13389.830689741633,"y":17901.69096166294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0bc477f0-8b7d-4c75-8613-0cc63a25a79d","savedPayload":{"position":{"x":13389.830689741633,"y":17901.69096166294},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA7","config":"{\n \"codeName\": \"sma7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma7","project":"Superalgos","id":"1a89def9-4270-4584-93c3-86ca30cb184c","savedPayload":{"position":{"x":13444.977797239106,"y":17581.544153339284},"targetPosition":{"x":13523.543176053983,"y":17825.52556324174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a87dddd8-9806-45be-b9a9-0e3196da48a7","savedPayload":{"position":{"x":13523.543176053983,"y":17825.52556324174},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA14","config":"{\n \"codeName\": \"sma14\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma14","project":"Superalgos","id":"c0b78d39-a652-4d13-9fce-1b56d4e6ffbb","savedPayload":{"position":{"x":13703.136121894386,"y":17553.691965097147},"targetPosition":{"x":13676.144990623528,"y":17808.886495660056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"114a04b9-e5b6-4f60-ad99-760c10275f9e","savedPayload":{"position":{"x":13676.144990623528,"y":17808.886495660056},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA21","config":"{\n \"codeName\": \"sma21\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma21","project":"Superalgos","id":"4740139a-d2d7-4050-a0f6-145eef002bed","savedPayload":{"position":{"x":13951.07092288548,"y":17633.900951615273},"targetPosition":{"x":13822.853055477604,"y":17855.76511301012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac8182cd-7f7b-44e9-a91c-b470be594ef0","savedPayload":{"position":{"x":13822.853055477604,"y":17855.76511301012},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA28","config":"{\n \"codeName\": \"sma28\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma28","project":"Superalgos","id":"0a2f17a1-2663-477a-8c28-015592a67a7e","savedPayload":{"position":{"x":14142.173843900822,"y":17810.393893179487},"targetPosition":{"x":13938.598902789225,"y":17958.130869977824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"81c852eb-9b3e-4505-b81a-f236b39d770d","savedPayload":{"position":{"x":13938.598902789225,"y":17958.130869977824},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA35","config":"{\n \"codeName\": \"sma35\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma35","project":"Superalgos","id":"1a30763f-6398-475f-b232-ff0da4ad41fa","savedPayload":{"position":{"x":14249.312354030615,"y":18047.130043323723},"targetPosition":{"x":13998.366233158278,"y":18100.317942514102},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8a4dd40-6286-46b0-8f4d-61893d2d9234","savedPayload":{"position":{"x":13998.366233158278,"y":18100.317942514102},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA70","config":"{\n \"codeName\": \"sma70\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma70","project":"Superalgos","id":"07471d43-2432-4961-81b5-4aa1bb399df4","savedPayload":{"position":{"x":14250.589621846808,"y":18306.779419955812},"targetPosition":{"x":13998.599704419277,"y":18253.456156944154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9dbc330c-e654-4591-92d0-c3e92262436e","savedPayload":{"position":{"x":13998.599704419277,"y":18253.456156944154},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA140","config":"{\n \"codeName\": \"sma140\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma140","project":"Superalgos","id":"0ef6719d-cfa8-458e-a137-6bd2e77aa6fd","savedPayload":{"position":{"x":14144.205179463726,"y":18544.55660320917},"targetPosition":{"x":13937.462154050405,"y":18394.674447873127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93814c2c-8fff-4415-9934-1356bf555015","savedPayload":{"position":{"x":13937.462154050405,"y":18394.674447873127},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA210","config":"{\n \"codeName\": \"sma210\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma210","project":"Superalgos","id":"037c98d5-1eef-4928-ade0-a70021337aa5","savedPayload":{"position":{"x":13950.412630791408,"y":18718.282998048362},"targetPosition":{"x":13822.922403668796,"y":18497.911587478895},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"efbcaa0c-2bf3-44e6-aae3-4f73c6255c69","savedPayload":{"position":{"x":13822.922403668796,"y":18497.911587478895},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA280","config":"{\n \"codeName\": \"sma280\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma280","project":"Superalgos","id":"2bdc1e1e-b6a3-4e68-90b5-e88e64684804","savedPayload":{"position":{"x":13703.375846371768,"y":18798.954049356613},"targetPosition":{"x":13676.270425522162,"y":18544.780808046817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6b302071-d15f-43b3-9ab2-4b970a379ebc","savedPayload":{"position":{"x":13676.270425522162,"y":18544.780808046817},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA350","config":"{\n \"codeName\": \"sma350\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma350","project":"Superalgos","id":"18baf5c6-5aa5-4f66-8637-9966fdf4acf4","savedPayload":{"position":{"x":13445.172278806236,"y":18772.60498631521},"targetPosition":{"x":13523.592902832486,"y":18528.675972146935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1de76b8-1665-4142-b8fc-712203bad655","savedPayload":{"position":{"x":13523.592902832486,"y":18528.675972146935},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA700","config":"{\n \"codeName\": \"sma700\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma700","project":"Superalgos","id":"c8f08ae8-f608-40f1-8df3-e4eb537a89ed","savedPayload":{"position":{"x":13219.923169659083,"y":18642.659717934876},"targetPosition":{"x":13389.85514569101,"y":18452.171969413837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83b3c070-c0cb-4a4b-86ea-0b6292f57c13","savedPayload":{"position":{"x":13389.85514569101,"y":18452.171969413837},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA1400","config":"{\n \"codeName\": \"sma1400\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1400","project":"Superalgos","id":"ca4c686e-61d0-4dc0-96f9-9ee80d856422","savedPayload":{"position":{"x":13065.94663787181,"y":18430.14861867591},"targetPosition":{"x":13298.605451028328,"y":18326.908347816407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e07922ab-0abb-4216-a534-07db74399c2a","savedPayload":{"position":{"x":13298.605451028328,"y":18326.908347816407},"targetPosition":{"x":13637.2076726312,"y":18176.962660168454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f3c4fe44-c417-4c98-9547-4b0c062f7bd7","savedPayload":{"position":{"x":12172.946110604682,"y":18134.1727533461},"targetPosition":{"x":11572.70099870977,"y":18134.174173379764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last1400.push(candle.close) // Add the current close value to the last 1400 array.\n\nif (variable.last1400.length > 1400) {\n variable.last1400.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 1400 elements.\n}\n\nvariable.sma7 = calculateSMA(7)\nvariable.sma14 = calculateSMA(14)\nvariable.sma21 = calculateSMA(21)\nvariable.sma28 = calculateSMA(28)\nvariable.sma35 = calculateSMA(35)\nvariable.sma70 = calculateSMA(70)\nvariable.sma140 = calculateSMA(140)\nvariable.sma210 = calculateSMA(210)\nvariable.sma280 = calculateSMA(280)\nvariable.sma350 = calculateSMA(350)\nvariable.sma700 = calculateSMA(700)\nvariable.sma1400 = calculateSMA(1400)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last1400.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last1400.length - periods; i < variable.last1400.length; i++) { // Iterate through the last periods\n sum = sum + variable.last1400[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last1400.length=\" + variable.last1400.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last1400[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"27796e5a-2553-47c6-bddd-c8deaed05c2f","savedPayload":{"position":{"x":12330.307355525534,"y":18436.741131539857},"targetPosition":{"x":12131.182940171937,"y":18415.86910901892},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5d799ba-3a4f-45fb-8533-4c3de5d7886f","savedPayload":{"position":{"x":12131.182940171937,"y":18415.86910901892},"targetPosition":{"x":11931.940866866396,"y":18394.910907652928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 1400 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last1400 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"17ee3425-2a07-4523-b005-bac9dbf75184","savedPayload":{"position":{"x":12095.021545257303,"y":18760.633206479924},"targetPosition":{"x":12013.574897070092,"y":18577.7506629696},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e9e5c8c-98e2-4bbf-884a-071449177692","savedPayload":{"position":{"x":12013.574897070092,"y":18577.7506629696},"targetPosition":{"x":11931.940866866396,"y":18394.910907652928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6bd8fef6-49f7-45c5-9f9f-944785f8578e","savedPayload":{"position":{"x":11931.940866866396,"y":18394.910907652928},"targetPosition":{"x":11572.70099870977,"y":18134.174173379764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a03ef0ea-5be9-4d40-952e-24789e77dbb6","savedPayload":{"position":{"x":11597.46794837202,"y":18125.135466165666},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"SMA Base 7","id":"515565ff-dee2-4adf-adaf-b4cfea5f5dbd"}}},{"type":"Product Definition","name":"Base11 SMAs","config":"{\n \"codeName\": \"Base11-SMAs\",\n \"singularVariableName\": \"base11SMA\",\n \"pluralVariableName\": \"base11SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"af9b9cef-2a74-486f-b79e-047d68669a1f","savedPayload":{"position":{"x":11836.567778467828,"y":17916.198335450732},"targetPosition":{"x":11588.58229060301,"y":18256.9866950049},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"de5cfa30-edbf-4d5b-8d7f-facfb69a0f3e","savedPayload":{"position":{"x":11989.782018152973,"y":18127.015117131443},"targetPosition":{"x":11588.58229060301,"y":18256.9866950049},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"a6c93c64-52da-4dad-bff9-9f6d9b4606b9","savedPayload":{"position":{"x":12815.839933983814,"y":17808.111121777427},"targetPosition":{"x":12930.869304078122,"y":18035.811005961208},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5e8f3d9c-8284-4b92-b7f5-ad7498e5ef3d","savedPayload":{"position":{"x":12930.869304078122,"y":18035.811005961208},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"ac16b3d1-e3b0-4b79-9047-cd137c6eeafc","savedPayload":{"position":{"x":13293.607527255394,"y":17765.74634874688},"targetPosition":{"x":13214.044573516047,"y":18009.605687813662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"43337725-24dd-4c1a-ae8d-2562a028d02d","savedPayload":{"position":{"x":13214.044573516047,"y":18009.605687813662},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA11","config":"{\n \"codeName\": \"sma11\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma11","project":"Superalgos","id":"87a1e288-0966-46e9-8a4f-1ddbb3f8976c","savedPayload":{"position":{"x":13656.085062508537,"y":18081.67391036068},"targetPosition":{"x":13427.810877330005,"y":18197.794536757327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6a67dbd9-1e8e-4100-849f-5ea77ea67985","savedPayload":{"position":{"x":13427.810877330005,"y":18197.794536757327},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA22","config":"{\n \"codeName\": \"sma22\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma22","project":"Superalgos","id":"8652042b-c373-4024-9fbf-c582a55134e0","savedPayload":{"position":{"x":13693.003048222032,"y":18558.388889273087},"targetPosition":{"x":13450.14208525616,"y":18479.773963090887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a5665ca1-e399-4e8a-8e04-8c0b153702e4","savedPayload":{"position":{"x":13450.14208525616,"y":18479.773963090887},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA33","config":"{\n \"codeName\": \"sma33\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma33","project":"Superalgos","id":"738317b6-dcb4-4699-a48c-170491515eb5","savedPayload":{"position":{"x":13382.82630306523,"y":18922.50504144711},"targetPosition":{"x":13266.09417628483,"y":18694.477320538124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f35c54ed-6469-4cfa-94cf-f94f1c916e91","savedPayload":{"position":{"x":13266.09417628483,"y":18694.477320538124},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA55","config":"{\n \"codeName\": \"sma55\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma55","project":"Superalgos","id":"675e9f6c-1e0d-4d09-ab69-88252ef60fe2","savedPayload":{"position":{"x":12906.084990925701,"y":18959.098790523312},"targetPosition":{"x":12984.690376271374,"y":18717.4131111295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c17d77b3-4d80-462d-88ba-ef421928dde1","savedPayload":{"position":{"x":12984.690376271374,"y":18717.4131111295},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA111","config":"{\n \"codeName\": \"sma111\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma111","project":"Superalgos","id":"b32a4356-312c-4536-b30b-63bad302e857","savedPayload":{"position":{"x":12543.670310576828,"y":18650.173951610268},"targetPosition":{"x":12769.457037473414,"y":18533.46183379377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f49152b4-5306-41d2-966b-dba92eef2590","savedPayload":{"position":{"x":12769.457037473414,"y":18533.46183379377},"targetPosition":{"x":13097.856729092255,"y":18365.693706624377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a099f207-16db-4f66-adfb-1529fa350385","savedPayload":{"position":{"x":12159.416916594802,"y":18442.289592015964},"targetPosition":{"x":11588.58229060301,"y":18256.9866950049},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last200.push(candle.close) // Add the current close value to the last 200 array.\n\nif (variable.last200.length > 200) {\n variable.last200.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 200 elements.\n}\n\nvariable.sma11 = calculateSMA(11)\nvariable.sma22 = calculateSMA(22)\nvariable.sma33 = calculateSMA(33)\nvariable.sma55 = calculateSMA(55)\nvariable.sma111 = calculateSMA(111)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last200.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last200.length - periods; i < variable.last200.length; i++) { // Iterate through the last periods\n sum = sum + variable.last200[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last200.length=\" + variable.last200.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last200[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"317788d5-11f5-48a6-ab0c-252cdcef7728","savedPayload":{"position":{"x":12215.509033248869,"y":18778.629724623905},"targetPosition":{"x":12032.363966325069,"y":18696.66934077458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cce46065-5c04-428f-823f-4cb5e67b212a","savedPayload":{"position":{"x":12032.363966325069,"y":18696.66934077458},"targetPosition":{"x":11849.493944546946,"y":18615.52588089594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 200 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last200 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"70d5537e-f682-4322-992b-99a55edb2582","savedPayload":{"position":{"x":11891.830899668897,"y":19013.906721044896},"targetPosition":{"x":11870.636930060113,"y":18814.412783661046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0707196-a2ac-4aee-99df-48a7fe77c365","savedPayload":{"position":{"x":11870.636930060113,"y":18814.412783661046},"targetPosition":{"x":11849.493944546946,"y":18615.52588089594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"663d58c6-e03e-4923-8cc7-03cc860aa318","savedPayload":{"position":{"x":11849.493944546946,"y":18615.52588089594},"targetPosition":{"x":11588.58229060301,"y":18256.9866950049},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"05fabbf9-7798-4a53-995e-53ae74bef3de","savedPayload":{"position":{"x":11617.204234091843,"y":18255.788082040697},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"SMA Base 11","id":"4a61ac35-a1ae-40f4-b3da-f81ae796ee00"}}},{"type":"Product Definition","name":"Base5 SMAs","config":"{\n \"codeName\": \"Base5-SMAs\",\n \"singularVariableName\": \"base5SMA\",\n \"pluralVariableName\": \"base5SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Muti-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"a5d28568-fb58-469a-9820-b9f0e8eab705","savedPayload":{"position":{"x":11909.505280280735,"y":18133.005067366692},"targetPosition":{"x":11568.487843223427,"y":18380.511196549305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"01f32aa3-55e9-4f8c-80c7-997b52073274","savedPayload":{"position":{"x":11990.024079398056,"y":18380.579755385363},"targetPosition":{"x":11568.487843223427,"y":18380.511196549305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"949a2e58-5d07-475e-92b9-e0ef4b9fd9e7","savedPayload":{"position":{"x":12631.430740513992,"y":18527.19541638269},"targetPosition":{"x":12757.991933540474,"y":18748.88779178959},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"65545f82-9022-4d4c-bd09-b900182bae75","savedPayload":{"position":{"x":12757.991933540474,"y":18748.88779178959},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"551c49da-26d4-438e-aff4-2a0ecc18ce7f","savedPayload":{"position":{"x":12878.38246006576,"y":18446.077083286185},"targetPosition":{"x":12904.469362235344,"y":18701.556316630446},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"74445dab-2c42-4c71-b179-04b98b5a8e27","savedPayload":{"position":{"x":12904.469362235344,"y":18701.556316630446},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA5","config":"{\n \"codeName\": \"sma5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma5","project":"Superalgos","id":"1c996969-c249-4b55-845c-62205e91fc68","savedPayload":{"position":{"x":13136.655925362178,"y":18474.32374860043},"targetPosition":{"x":13057.07326191098,"y":18717.06779996958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3b9f6fbf-20d8-4952-b5e8-34937746fef7","savedPayload":{"position":{"x":13057.07326191098,"y":18717.06779996958},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA10","config":"{\n \"codeName\": \"sma10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma10","project":"Superalgos","id":"d16592d7-2f02-49ae-8857-dd7098990f20","savedPayload":{"position":{"x":13362.275478941527,"y":18603.53716795297},"targetPosition":{"x":13189.39813258298,"y":18794.6644705036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"73cb2d83-d59b-457e-af00-68a8d0e2b016","savedPayload":{"position":{"x":13189.39813258298,"y":18794.6644705036},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA15","config":"{\n \"codeName\": \"sma15\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma15","project":"Superalgos","id":"147ea31e-2735-4bae-b6a9-99072ed3d7a5","savedPayload":{"position":{"x":13514.859298171934,"y":18814.25026908552},"targetPosition":{"x":13280.593586645118,"y":18918.226137238154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"666f82ef-a002-4067-9edb-6ddbe2861056","savedPayload":{"position":{"x":13280.593586645118,"y":18918.226137238154},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA20","config":"{\n \"codeName\": \"sma20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma20","project":"Superalgos","id":"f2507a4f-7f65-4d22-b062-1834c9269285","savedPayload":{"position":{"x":13568.906674373367,"y":19068.685962409374},"targetPosition":{"x":13312.502699284716,"y":19068.65750665126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a6a82705-0a6c-425e-afab-099a63570ada","savedPayload":{"position":{"x":13312.502699284716,"y":19068.65750665126},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA25","config":"{\n \"codeName\": \"sma25\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma25","project":"Superalgos","id":"53aead0b-0c80-4e74-b19b-7290672f7444","savedPayload":{"position":{"x":13514.719449905871,"y":19323.041859592275},"targetPosition":{"x":13280.823325748614,"y":19218.971709928708},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cbc6da93-d064-4762-a32f-ae1071a1ebe2","savedPayload":{"position":{"x":13280.823325748614,"y":19218.971709928708},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA50","config":"{\n \"codeName\": \"sma50\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma50","project":"Superalgos","id":"0c126131-e3bd-4d43-a037-53e54e268300","savedPayload":{"position":{"x":13362.372497644017,"y":19534.262084955666},"targetPosition":{"x":13189.975833161152,"y":19343.183901652937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1cda317e-4b82-4bd9-8b07-71ad7365e524","savedPayload":{"position":{"x":13189.975833161152,"y":19343.183901652937},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA100","config":"{\n \"codeName\": \"sma100\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma100","project":"Superalgos","id":"77c897e8-ab38-4c88-a215-e67d53401196","savedPayload":{"position":{"x":13136.47762679262,"y":19663.422695891826},"targetPosition":{"x":13057.288268143111,"y":19421.03251610179},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7a66586-158d-40e2-be75-1077a91b0d7e","savedPayload":{"position":{"x":13057.288268143111,"y":19421.03251610179},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA150","config":"{\n \"codeName\": \"sma150\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma150","project":"Superalgos","id":"1e5d6df6-a1af-49f0-a06e-08c362b1cd34","savedPayload":{"position":{"x":12878.696847407744,"y":19691.424104771806},"targetPosition":{"x":12904.485327109865,"y":19436.379588121057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83260971-1089-4349-9019-29ea469a9d24","savedPayload":{"position":{"x":12904.485327109865,"y":19436.379588121057},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA200","config":"{\n \"codeName\": \"sma200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma200","project":"Superalgos","id":"bc63f986-17dd-48fb-892b-7f2d2b033cc5","savedPayload":{"position":{"x":12630.731357409528,"y":19613.336466167246},"targetPosition":{"x":12759.711387513235,"y":19389.20416988291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"07a55760-46cf-44e8-b2f9-f55a6bb5a81c","savedPayload":{"position":{"x":12759.711387513235,"y":19389.20416988291},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA250","config":"{\n \"codeName\": \"sma250\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma250","project":"Superalgos","id":"1bdc84fd-9eac-4b07-9ff6-56f80ec08553","savedPayload":{"position":{"x":12436.06979659692,"y":19438.111284062434},"targetPosition":{"x":12643.4009817867,"y":19286.268684278046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8b672a62-1ae1-4e92-819e-597fa42da35b","savedPayload":{"position":{"x":12643.4009817867,"y":19286.268684278046},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA 500","config":"{\n \"codeName\": \"sma500\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma500","project":"Superalgos","id":"0d17399e-97d1-459d-8864-6c72967f0fd4","savedPayload":{"position":{"x":12331.676468515354,"y":19200.173581719828},"targetPosition":{"x":12579.954354793055,"y":19145.993190409758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"92405f1d-9adf-4a70-af18-f2537ba2b0a0","savedPayload":{"position":{"x":12579.954354793055,"y":19145.993190409758},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA 1000","config":"{\n \"codeName\": \"sma1000\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1000","project":"Superalgos","id":"e2364abc-b940-4b52-a506-587c1a5941e3","savedPayload":{"position":{"x":12340.072122910238,"y":18941.379679370883},"targetPosition":{"x":12588.711494420986,"y":18993.090678828456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5318bf3f-6e8a-46c8-8b04-3769bde03438","savedPayload":{"position":{"x":12588.711494420986,"y":18993.090678828456},"targetPosition":{"x":12942.143576853261,"y":19068.65265764684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"69298c3e-479d-4eb6-a972-35f8f079ce86","savedPayload":{"position":{"x":12054.161353488806,"y":18733.20712175646},"targetPosition":{"x":11568.487843223427,"y":18380.511196549305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last1000.push(candle.close) // Add the current close value to the last 1000 array.\n\nif (variable.last1000.length > 1000) {\n variable.last1000.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 1000 elements.\n}\n\nvariable.sma5 = calculateSMA(5)\nvariable.sma10 = calculateSMA(10)\nvariable.sma15 = calculateSMA(15)\nvariable.sma20 = calculateSMA(20)\nvariable.sma25 = calculateSMA(25)\nvariable.sma50 = calculateSMA(50)\nvariable.sma100 = calculateSMA(100)\nvariable.sma150 = calculateSMA(150)\nvariable.sma200 = calculateSMA(200)\nvariable.sma250 = calculateSMA(250)\nvariable.sma500 = calculateSMA(500)\nvariable.sma1000 = calculateSMA(1000)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last1000.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last1000.length - periods; i < variable.last1000.length; i++) { // Iterate through the last periods\n sum = sum + variable.last1000[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last1000.length=\" + variable.last1000.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last1000[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"45ebc09e-bada-4bcd-8780-a2f56f23f037","savedPayload":{"position":{"x":12003.483646179146,"y":19070.24388572876},"targetPosition":{"x":11854.717341592972,"y":18935.87233993526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f65693cf-81ef-497e-86d2-a7ad9b74a1ca","savedPayload":{"position":{"x":11854.717341592972,"y":18935.87233993526},"targetPosition":{"x":11705.816511962239,"y":18802.190748163834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 1000 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last1000 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"22db43d3-db5d-43b6-80fc-1faa358bfadb","savedPayload":{"position":{"x":11623.37441327305,"y":19194.21023655943},"targetPosition":{"x":11664.657631215747,"y":18997.92209830522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12255c95-c680-43af-be1b-61ee37e0e827","savedPayload":{"position":{"x":11664.657631215747,"y":18997.92209830522},"targetPosition":{"x":11705.816511962239,"y":18802.190748163834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd8c13e4-2b9e-4a42-a576-539d412f239a","savedPayload":{"position":{"x":11705.816511962239,"y":18802.190748163834},"targetPosition":{"x":11568.487843223427,"y":18380.511196549305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2dcb55de-1673-409e-aa52-f51e7c7f8fa3","savedPayload":{"position":{"x":11595.977278386834,"y":18388.80588914988},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"SMA Base 5","id":"888c381d-457d-4421-8401-a7475b42ff03"}}},{"type":"Product Definition","name":"Base6 SMAs","config":"{\n \"codeName\": \"Base6-SMAs\",\n \"singularVariableName\": \"base6SMA\",\n \"pluralVariableName\": \"base6SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"c0862b3d-d35a-4d3e-8d80-258b8a01c37c","savedPayload":{"position":{"x":11912.076653133292,"y":18361.98702666935},"targetPosition":{"x":11511.220041621593,"y":18492.05046133952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"f5050eb2-0a99-464e-b5e2-2d8f40453e9a","savedPayload":{"position":{"x":11912.064161194483,"y":18622.3114292191},"targetPosition":{"x":11511.220041621593,"y":18492.05046133952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Being","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"fc90c194-682d-4d5c-923b-89b19e49f234","savedPayload":{"position":{"x":12518.123842367757,"y":18796.742666167233},"targetPosition":{"x":12608.575729356638,"y":19034.63004887762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"37fc0238-a202-4c33-89ca-6a4e24d4e1ac","savedPayload":{"position":{"x":12608.575729356638,"y":19034.63004887762},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"c1b3c2c1-68aa-443a-8c69-c50dcd34998f","savedPayload":{"position":{"x":12775.14039598213,"y":18756.60976374205},"targetPosition":{"x":12761.227712057589,"y":19010.397701422422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7757e0dd-c3b4-48b4-bdf7-e517ce8df601","savedPayload":{"position":{"x":12761.227712057589,"y":19010.397701422422},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA6","config":"{\n \"codeName\": \"sma6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma6","project":"Superalgos","id":"8a633674-750f-492d-8bfc-ac6f2e79793a","savedPayload":{"position":{"x":13025.56264021057,"y":18824.417620048924},"targetPosition":{"x":12909.760462591214,"y":19051.0955755378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12d5b8f1-c83c-43a3-bf45-6f85e85a6df9","savedPayload":{"position":{"x":12909.760462591214,"y":19051.0955755378},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA12","config":"{\n \"codeName\": \"sma12\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma12","project":"Superalgos","id":"11e2a0cd-851a-425e-b2bd-f3cff1b00c77","savedPayload":{"position":{"x":13229.963678740656,"y":18986.285522403843},"targetPosition":{"x":13028.646357813344,"y":19148.79058530685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c1f3e32-9310-4ece-a796-cf9225172978","savedPayload":{"position":{"x":13028.646357813344,"y":19148.79058530685},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA18","config":"{\n \"codeName\": \"sma18\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma18","project":"Superalgos","id":"0cbf493f-fa5f-41a8-a928-754ec9720fe0","savedPayload":{"position":{"x":13347.372799195153,"y":19219.292222188866},"targetPosition":{"x":13100.520254887451,"y":19285.057023997735},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"12bf3180-d354-451d-ba14-81cdd9d95c19","savedPayload":{"position":{"x":13100.520254887451,"y":19285.057023997735},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA24","config":"{\n \"codeName\": \"sma24\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma24","project":"Superalgos","id":"4d677df1-74ec-417e-a518-2b8946c84542","savedPayload":{"position":{"x":13360.141975674167,"y":19478.670782592704},"targetPosition":{"x":13108.393900146672,"y":19438.87379146364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3e3a6434-aaa4-4170-8cdc-cca21c8d0863","savedPayload":{"position":{"x":13108.393900146672,"y":19438.87379146364},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA30","config":"{\n \"codeName\": \"sma30\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma30","project":"Superalgos","id":"3a92b258-6c21-4747-ba08-16cf9ba814ec","savedPayload":{"position":{"x":13267.006894894705,"y":19721.917511299434},"targetPosition":{"x":13052.178368936238,"y":19582.47502335127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22bc84a6-f431-464c-a7e0-b9249b32abdf","savedPayload":{"position":{"x":13052.178368936238,"y":19582.47502335127},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA60","config":"{\n \"codeName\": \"sma60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma60","project":"Superalgos","id":"d9a44db6-45eb-47f8-975b-ee8dccd0659d","savedPayload":{"position":{"x":13083.105056949393,"y":19906.38760759629},"targetPosition":{"x":12943.108340732419,"y":19691.05840464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c3d4d569-0b7e-44b9-b2f0-84d9a91ee6b0","savedPayload":{"position":{"x":12943.108340732419,"y":19691.05840464},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA120","config":"{\n \"codeName\": \"sma120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma120","project":"Superalgos","id":"90fee0af-0e23-44de-aa16-d446857485f4","savedPayload":{"position":{"x":12839.6961331139,"y":20000.10704137432},"targetPosition":{"x":12799.363344164169,"y":19746.41445018096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f572d61-ff96-4ccb-90ca-7a26d5cc8322","savedPayload":{"position":{"x":12799.363344164169,"y":19746.41445018096},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA180","config":"{\n \"codeName\": \"sma180\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma180","project":"Superalgos","id":"031e5277-e225-4307-a247-f49dae98ac26","savedPayload":{"position":{"x":12580.072359770787,"y":19986.739674337266},"targetPosition":{"x":12645.99599212076,"y":19738.4472573072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e3eb2e1-3cb4-4f0b-9a5a-5196bb4af3af","savedPayload":{"position":{"x":12645.99599212076,"y":19738.4472573072},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA240","config":"{\n \"codeName\": \"sma240\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma240","project":"Superalgos","id":"cb9604b0-3004-48d5-84fe-680747edb943","savedPayload":{"position":{"x":12348.34363920327,"y":19868.483455275786},"targetPosition":{"x":12509.020271243964,"y":19668.81530964601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83c2137c-676d-4a43-88c1-e9a5f69cafeb","savedPayload":{"position":{"x":12509.020271243964,"y":19668.81530964601},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA300","config":"{\n \"codeName\": \"sma300\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma300","project":"Superalgos","id":"8c3259f1-e88b-40a2-9af2-a0e554affbd2","savedPayload":{"position":{"x":12184.214335572466,"y":19665.501086883618},"targetPosition":{"x":12412.16318559575,"y":19549.007697483048},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"829bfd3a-8c69-4e51-8951-a1d7cb0b8c6f","savedPayload":{"position":{"x":12412.16318559575,"y":19549.007697483048},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA600","config":"{\n \"codeName\": \"sma600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma600","project":"Superalgos","id":"501b1e82-840a-4288-801d-38a5e5c7f7cb","savedPayload":{"position":{"x":12116.720676417353,"y":19414.84523130682},"targetPosition":{"x":12372.563512092525,"y":19400.31128154793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7174f99-231c-4188-8f4a-95a34c0c35f8","savedPayload":{"position":{"x":12372.563512092525,"y":19400.31128154793},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA1200","config":"{\n \"codeName\": \"sma1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1200","project":"Superalgos","id":"0554601a-009b-47a2-8e0c-c7d6f3901a9e","savedPayload":{"position":{"x":12157.35115053918,"y":19169.246307242243},"targetPosition":{"x":12396.796880595488,"y":19247.943201583694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f6f0c544-4054-4cb4-9be1-14ffa23c5251","savedPayload":{"position":{"x":12396.796880595488,"y":19247.943201583694},"targetPosition":{"x":12741.319027776819,"y":19380.777803530273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a84f4438-cabc-4c9a-bd9c-0338e55a6e15","savedPayload":{"position":{"x":11935.670286690902,"y":18916.467582618367},"targetPosition":{"x":11511.220041621593,"y":18492.05046133952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last1200.push(candle.close) // Add the current close value to the last 1200 array.\n\nif (variable.last1200.length > 1200) {\n variable.last1200.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 1200 elements.\n}\n\nvariable.sma6 = calculateSMA(6)\nvariable.sma12 = calculateSMA(12)\nvariable.sma18 = calculateSMA(18)\nvariable.sma24 = calculateSMA(24)\nvariable.sma30 = calculateSMA(30)\nvariable.sma60 = calculateSMA(60)\nvariable.sma120 = calculateSMA(120)\nvariable.sma180 = calculateSMA(180)\nvariable.sma240 = calculateSMA(240)\nvariable.sma300 = calculateSMA(300)\nvariable.sma600 = calculateSMA(600)\nvariable.sma1200 = calculateSMA(1200)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last1200.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last1200.length - periods; i < variable.last1200.length; i++) { // Iterate through the last periods\n sum = sum + variable.last1200[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last1200.length=\" + variable.last1200.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last1200[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"f2c97b70-717a-4f98-be7c-d76dd94b8227","savedPayload":{"position":{"x":11711.754620145359,"y":19282.41049318149},"targetPosition":{"x":11611.697991753043,"y":19108.76192563715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96841e7b-90d9-4508-8933-4f0f9769800e","savedPayload":{"position":{"x":11611.697991753043,"y":19108.76192563715},"targetPosition":{"x":11511.58026349094,"y":18935.35819189441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 1200 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last1200 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"14dcff53-0599-4529-8a5d-5cf92a5c33c8","savedPayload":{"position":{"x":11311.964795585662,"y":19282.713843625617},"targetPosition":{"x":11411.869844628003,"y":19108.924163777338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2863a8f-8f38-4c47-9f48-0bd45b628fa0","savedPayload":{"position":{"x":11411.869844628003,"y":19108.924163777338},"targetPosition":{"x":11511.58026349094,"y":18935.35819189441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"948be5d9-da96-488a-bb15-f8cd94777231","savedPayload":{"position":{"x":11511.58026349094,"y":18935.35819189441},"targetPosition":{"x":11511.220041621593,"y":18492.05046133952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4ae22e54-cd02-4e2e-b638-1c5ea9a171ac","savedPayload":{"position":{"x":11534.844874130285,"y":18508.895141350466},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"SMA Base 6","id":"6ace920a-3a4b-4d28-8f04-4c2ecd3dfeb8"}}},{"type":"Product Definition","name":"Base12 SMAs","config":"{\n \"codeName\": \"Base12-SMAs\",\n \"singularVariableName\": \"base12SMA\",\n \"pluralVariableName\": \"base12SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"6ba76363-0f50-4e67-8678-3eb4fd6d07d6","savedPayload":{"position":{"x":11844.024856552687,"y":18580.686558866473},"targetPosition":{"x":11422.375664817075,"y":18580.681106229367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"92d92b3e-6870-499b-bfec-33bab220bf62","savedPayload":{"position":{"x":11763.299130413563,"y":18828.475263654298},"targetPosition":{"x":11422.375664817075,"y":18580.681106229367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"d44292f3-8960-448b-8339-32147b8bb1c3","savedPayload":{"position":{"x":12268.537839892972,"y":19160.66778883406},"targetPosition":{"x":12233.559112923682,"y":19414.005128872792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bcec1860-262e-4125-bdf4-a8f798d9d4ff","savedPayload":{"position":{"x":12233.559112923682,"y":19414.005128872792},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"91264df6-db08-498e-a039-fec9b0cd09a5","savedPayload":{"position":{"x":12528.468904962538,"y":19260.58340178264},"targetPosition":{"x":12388.794395686142,"y":19471.129101190952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0ef8d741-e876-446e-86ac-146b4f33d8e8","savedPayload":{"position":{"x":12388.794395686142,"y":19471.129101190952},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA12","config":"{\n \"codeName\": \"sma12\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma12","project":"Superalgos","id":"c694dcde-b622-4d71-b2cf-e42e1b4934ec","savedPayload":{"position":{"x":12721.623219845791,"y":19460.514484498093},"targetPosition":{"x":12500.851560287909,"y":19591.98779683995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"daf8aa00-f032-412e-b319-e7c581611db0","savedPayload":{"position":{"x":12500.851560287909,"y":19591.98779683995},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA24","config":"{\n \"codeName\": \"sma24\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma24","project":"Superalgos","id":"445b00ba-46a1-4e79-b762-72c521223b5f","savedPayload":{"position":{"x":12808.521978966688,"y":19725.347412753305},"targetPosition":{"x":12551.98980814482,"y":19747.980357115877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"255fdffa-cdbb-428b-a54e-14448f7cda29","savedPayload":{"position":{"x":12551.98980814482,"y":19747.980357115877},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA36","config":"{\n \"codeName\": \"sma36\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma36","project":"Superalgos","id":"c9c11106-98b6-4fcb-b30b-d49263a05d95","savedPayload":{"position":{"x":12771.19230375399,"y":20001.243759379897},"targetPosition":{"x":12530.784645915264,"y":19910.896189088067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"628c3c4f-7ef7-4008-bada-76e4edf6de42","savedPayload":{"position":{"x":12530.784645915264,"y":19910.896189088067},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA48","config":"{\n \"codeName\": \"sma48\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma48","project":"Superalgos","id":"8e1cfb60-cb51-4625-a36b-75d64381840d","savedPayload":{"position":{"x":12616.012827625196,"y":20232.509685482728},"targetPosition":{"x":12440.757875918833,"y":20049.234354919434},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1aa9fd38-51e5-4158-9bb2-31dbc8f933d0","savedPayload":{"position":{"x":12440.757875918833,"y":20049.234354919434},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA60","config":"{\n \"codeName\": \"sma60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma60","project":"Superalgos","id":"6fe04671-6298-4ef4-9ef8-779eafc1645d","savedPayload":{"position":{"x":12377.539737275205,"y":20375.747388592714},"targetPosition":{"x":12298.29594304106,"y":20131.966711366957},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d76d7819-b542-4ee8-98fd-539ec3325e2c","savedPayload":{"position":{"x":12298.29594304106,"y":20131.966711366957},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA120","config":"{\n \"codeName\": \"sma120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma120","project":"Superalgos","id":"f8abde07-3312-4983-bff2-65ed4f475a3f","savedPayload":{"position":{"x":12100.598608405107,"y":20402.012882846087},"targetPosition":{"x":12134.883822485106,"y":20146.590658265293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0e696147-e020-4056-8ad4-40ad79cba391","savedPayload":{"position":{"x":12134.883822485106,"y":20146.590658265293},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA240","config":"{\n \"codeName\": \"sma240\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma240","project":"Superalgos","id":"1ea2c145-6dcf-4e8a-908a-b12e08a8d658","savedPayload":{"position":{"x":11839.54590068695,"y":20303.914923392564},"targetPosition":{"x":11980.369703744356,"y":20089.790790351974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e02938c9-f5b1-49f7-8e63-f8637f6d1d4d","savedPayload":{"position":{"x":11980.369703744356,"y":20089.790790351974},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA360","config":"{\n \"codeName\": \"sma360\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma360","project":"Superalgos","id":"16ab9e8b-cb14-4a59-b7b3-0a1d13dbea5b","savedPayload":{"position":{"x":11647.368845844165,"y":20102.64379755925},"targetPosition":{"x":11866.446501467308,"y":19970.949212239215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe671bcf-1d71-4081-a100-f4bbc59203c7","savedPayload":{"position":{"x":11866.446501467308,"y":19970.949212239215},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA480","config":"{\n \"codeName\": \"sma480\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma480","project":"Superalgos","id":"135a34fc-3cc8-4555-b1b9-c8ea03150aff","savedPayload":{"position":{"x":11560.911913255317,"y":19836.792972487285},"targetPosition":{"x":11815.946311079933,"y":19814.105984994203},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85a59bf2-d419-43c9-a287-68902b8cb199","savedPayload":{"position":{"x":11815.946311079933,"y":19814.105984994203},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA600","config":"{\n \"codeName\": \"sma600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma600","project":"Superalgos","id":"cacf8e3b-77d3-4697-9ca5-51cff50afb6c","savedPayload":{"position":{"x":11598.011325828462,"y":19562.1155933226},"targetPosition":{"x":11838.187213857931,"y":19651.288307289935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"608a2a98-bd6e-49e0-b202-afff3553337d","savedPayload":{"position":{"x":11838.187213857931,"y":19651.288307289935},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA1200","config":"{\n \"codeName\": \"sma1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1200","project":"Superalgos","id":"2e1c84ea-2cb3-4936-8106-623dcdff8782","savedPayload":{"position":{"x":11741.261685859681,"y":19337.76852914406},"targetPosition":{"x":11929.582638764146,"y":19513.73482505784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dda31bad-8835-446a-9015-4e15ae4cb845","savedPayload":{"position":{"x":11929.582638764146,"y":19513.73482505784},"targetPosition":{"x":12183.99236509009,"y":19780.650445065086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f46175dc-dfd2-4e1e-a60c-554867b5f0a5","savedPayload":{"position":{"x":11607.920303142033,"y":19151.44616277049},"targetPosition":{"x":11422.375664817075,"y":18580.681106229367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last1200.push(candle.close) // Add the current close value to the last 1200 array.\n\nif (variable.last1200.length > 1200) {\n variable.last1200.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 1200 elements.\n}\n\nvariable.sma12 = calculateSMA(12)\nvariable.sma24 = calculateSMA(24)\nvariable.sma36 = calculateSMA(36)\nvariable.sma48 = calculateSMA(48)\nvariable.sma60 = calculateSMA(60)\nvariable.sma120 = calculateSMA(120)\nvariable.sma240 = calculateSMA(240)\nvariable.sma360 = calculateSMA(360)\nvariable.sma480 = calculateSMA(480)\nvariable.sma600 = calculateSMA(600)\nvariable.sma1200 = calculateSMA(1200)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last1200.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last1200.length - periods; i < variable.last1200.length; i++) { // Iterate through the last periods\n sum = sum + variable.last1200[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last1200.length=\" + variable.last1200.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last1200[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"fba7176b-58ff-4bd6-95de-ad6f88de4cda","savedPayload":{"position":{"x":11368.325759889874,"y":19394.493075152663},"targetPosition":{"x":11326.967685035639,"y":19198.27166502132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"daf2fb19-bfda-4248-a0c6-8e364fe863ee","savedPayload":{"position":{"x":11326.967685035639,"y":19198.27166502132},"targetPosition":{"x":11285.54195183299,"y":19002.435585871226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 1200 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last1200 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"4d3f1fee-e71d-46cd-a50b-69176de5e1e8","savedPayload":{"position":{"x":10988.282296168469,"y":19270.811769472493},"targetPosition":{"x":11137.02258165828,"y":19136.423737044133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08365c70-c9ba-481d-abb8-62dc21067754","savedPayload":{"position":{"x":11137.02258165828,"y":19136.423737044133},"targetPosition":{"x":11285.54195183299,"y":19002.435585871226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4aa28d66-d2c5-40d1-9b42-b6adb1e94d1c","savedPayload":{"position":{"x":11285.54195183299,"y":19002.435585871226},"targetPosition":{"x":11422.375664817075,"y":18580.681106229367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"723d28e9-a010-48c5-bda0-43a4c2343ddf","savedPayload":{"position":{"x":11439.691727074307,"y":18604.430025576163},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Base30 SMAs","config":"{\n \"codeName\": \"Base30-SMAs\",\n \"singularVariableName\": \"base30SMA\",\n \"pluralVariableName\": \"base30SMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"4c486321-22e0-4991-9a1c-571bada649ad","savedPayload":{"position":{"x":11704.788094394158,"y":18769.16109490671},"targetPosition":{"x":11303.72095449801,"y":18638.90269451857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"819688c9-c7bd-444b-9658-2a4379125c72","savedPayload":{"position":{"x":11551.238024859538,"y":18979.87721731745},"targetPosition":{"x":11303.72095449801,"y":18638.90269451857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"16806650-2bfb-4709-acbd-aca1549c16e8","savedPayload":{"position":{"x":11968.57719225152,"y":19374.30146172853},"targetPosition":{"x":11849.570889732899,"y":19600.041718043874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"265d3765-cd1d-4652-a0ed-01931674a151","savedPayload":{"position":{"x":11849.570889732899,"y":19600.041718043874},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"d0b81562-348b-433f-8524-f9bc909de69e","savedPayload":{"position":{"x":12193.250921530442,"y":19572.61223321748},"targetPosition":{"x":11981.745241798762,"y":19718.013400850094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe6074be-18c6-46c0-abd4-5d31bc067798","savedPayload":{"position":{"x":11981.745241798762,"y":19718.013400850094},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA30","config":"{\n \"codeName\": \"sma30\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma30","project":"Superalgos","id":"2ef589ba-7f7d-4df5-91fd-9107d67a7792","savedPayload":{"position":{"x":12300.973584614097,"y":19852.362438769094},"targetPosition":{"x":12043.902799440155,"y":19883.18496167935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"72debf77-1c4b-4e8d-9a99-96951bd6d24c","savedPayload":{"position":{"x":12043.902799440155,"y":19883.18496167935},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA60","config":"{\n \"codeName\": \"sma60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma60","project":"Superalgos","id":"d51798bf-2373-4f5e-b6e4-56aad8117820","savedPayload":{"position":{"x":12263.189989611616,"y":20149.229900795446},"targetPosition":{"x":12024.509598912926,"y":20058.668611217672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78e59381-fcda-4204-a70a-4113eebdbba7","savedPayload":{"position":{"x":12024.509598912926,"y":20058.668611217672},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA90","config":"{\n \"codeName\": \"sma90\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma90","project":"Superalgos","id":"a35a40dd-e5b4-4444-a8da-14eeb79e76b3","savedPayload":{"position":{"x":12092.47070537697,"y":20395.12769549593},"targetPosition":{"x":11923.260601163045,"y":20204.045475181087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"90b3598c-8f08-4dc1-ad41-a64caf0cab39","savedPayload":{"position":{"x":11923.260601163045,"y":20204.045475181087},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA120","config":"{\n \"codeName\": \"sma120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma120","project":"Superalgos","id":"046bdfe3-d838-425e-8cc0-e117151bdbf8","savedPayload":{"position":{"x":11827.568995315934,"y":20534.33935901192},"targetPosition":{"x":11766.288240413567,"y":20285.32985029943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aa9f7095-66e7-4e42-b6b2-d3a51e3b35d9","savedPayload":{"position":{"x":11766.288240413567,"y":20285.32985029943},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA150","config":"{\n \"codeName\": \"sma150\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma150","project":"Superalgos","id":"8129644d-2b0a-4936-8255-22dc2aada9e7","savedPayload":{"position":{"x":11528.411907950678,"y":20536.294116998004},"targetPosition":{"x":11590.18860235955,"y":20284.844486988317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b0c06b10-549c-4280-aac9-0b649ede898c","savedPayload":{"position":{"x":11590.18860235955,"y":20284.844486988317},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA300","config":"{\n \"codeName\": \"sma300\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma300","project":"Superalgos","id":"23ddb87c-8211-4032-8273-222af79863b5","savedPayload":{"position":{"x":11263.576689406345,"y":20395.65080037283},"targetPosition":{"x":11432.549700421943,"y":20204.69820845169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38b8e859-eda7-4cd9-afc2-ee0e3ed297b7","savedPayload":{"position":{"x":11432.549700421943,"y":20204.69820845169},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA600","config":"{\n \"codeName\": \"sma600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma600","project":"Superalgos","id":"8f07691b-ccdc-47cc-9c07-3701b61322f9","savedPayload":{"position":{"x":11094.128689311594,"y":20149.03733060192},"targetPosition":{"x":11332.352279952458,"y":20058.53464225396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cebd7a57-eebb-4e4f-9315-6f1411970e55","savedPayload":{"position":{"x":11332.352279952458,"y":20058.53464225396},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA900","config":"{\n \"codeName\": \"sma900\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma900","project":"Superalgos","id":"ed66265d-f971-448f-b395-e0c12c178173","savedPayload":{"position":{"x":11057.115248483686,"y":19852.788016272083},"targetPosition":{"x":11312.030487126085,"y":19883.234286523333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fcbefbb9-2a6d-459a-8d3b-595d71caaa88","savedPayload":{"position":{"x":11312.030487126085,"y":19883.234286523333},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA1200","config":"{\n \"codeName\": \"sma1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1200","project":"Superalgos","id":"3e936d3b-8f40-49da-830c-f73ea5bf271a","savedPayload":{"position":{"x":11162.792697882222,"y":19572.688018186516},"targetPosition":{"x":11374.098633785092,"y":19717.771005017414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"311d2e2d-163e-4b8e-ae99-2b2d0fbbb2aa","savedPayload":{"position":{"x":11374.098633785092,"y":19717.771005017414},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"SMA1500","config":"{\n \"codeName\": \"sma1500\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.sma1500","project":"Superalgos","id":"d4db0dc9-12a2-41c6-8511-43cbfdcfb136","savedPayload":{"position":{"x":11383.37047794033,"y":19375.881276743556},"targetPosition":{"x":11506.966084152566,"y":19600.109115793202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b71b603d-38de-401d-b1df-ca20710dba64","savedPayload":{"position":{"x":11506.966084152566,"y":19600.109115793202},"targetPosition":{"x":11678.122349428879,"y":19927.224063461064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"229b4129-39f9-4f46-bbb5-a86a714023f8","savedPayload":{"position":{"x":11303.799526477354,"y":19239.182417375647},"targetPosition":{"x":11303.72095449801,"y":18638.90269451857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code. This goes at the Code of the Procedure Loop Object */\n\nlet candle = record.current // Our main dependencies are candles \nvariable.last1500.push(candle.close) // Add the current close value to the last 1500 array.\n\nif (variable.last1500.length > 1500) {\n variable.last1500.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 1500 elements.\n}\n\nvariable.sma30 = calculateSMA(30)\nvariable.sma60 = calculateSMA(60)\nvariable.sma90 = calculateSMA(90)\nvariable.sma120 = calculateSMA(120)\nvariable.sma150 = calculateSMA(150)\nvariable.sma300 = calculateSMA(300)\nvariable.sma600 = calculateSMA(600)\nvariable.sma900 = calculateSMA(900)\nvariable.sma1200 = calculateSMA(1200)\nvariable.sma1500 = calculateSMA(1500)\n\nfunction calculateSMA(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last1500.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sum = 0 // Initialize sum variable. \n for (let i = variable.last1500.length - periods; i < variable.last1500.length; i++) { // Iterate through the last periods\n sum = sum + variable.last1500[i]\n /*\n if (index > 18 && index < 22) { // You can debug what is going on by console logging whatever you need. \n console.log(\"index=\" + index + \" i=\" + i + \" variable.last1500.length=\" + variable.last1500.length + \" periods=\" + periods + \" sum=\" + sum + \" sum/periods=\" + (sum / periods) + \" currentValue=\" + (variable.last1500[i]))\n }\n */\n }\n let sma = sum / periods\n return sma\n}","project":"Superalgos","id":"382c5abf-a91a-40c0-88c2-7e230e93ed44","savedPayload":{"position":{"x":11001.53520673408,"y":19396.36190219708},"targetPosition":{"x":11022.548978228402,"y":19196.877409872686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d3dab655-2db2-4d4c-a776-91a6ae116304","savedPayload":{"position":{"x":11022.548978228402,"y":19196.877409872686},"targetPosition":{"x":11043.180270494813,"y":18997.80730117014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code. This goes at the Code of the Procedure Initialization Object */\n\n/* \nThis is the array where we are going to store the last 1500 elements, since we will not \nhave access to such long backwards history while processing daily files. In those situations\nwe only have access to the last 2 days of candles, which in 45 min for example, means 36\ncandles from the current day and 36 from the previous one. For that reason we will keep\nthis array with the last 200 candle.close values so that we overecome that limitation.\n*/\n\nvariable.last1500 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")","project":"Superalgos","id":"41af43f4-4f30-404d-8d9e-3ad5e752688c","savedPayload":{"position":{"x":10692.547013779114,"y":19172.363380900686},"targetPosition":{"x":10875.64827244381,"y":19090.763299090002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8611aff-7f4f-4df8-a2ac-b92ef5633ad4","savedPayload":{"position":{"x":10875.64827244381,"y":19090.763299090002},"targetPosition":{"x":11043.180270494813,"y":18997.80730117014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e8bebfde-97db-42d7-93a2-972366bc002c","savedPayload":{"position":{"x":11043.180270494813,"y":18997.80730117014},"targetPosition":{"x":11303.72095449801,"y":18638.90269451857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"607ebabd-9602-4e5c-803d-d4207dbd6794","savedPayload":{"position":{"x":11319.28309305784,"y":18665.63900421376},"targetPosition":{"x":11186.296966771497,"y":18255.64547123821},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c1c6f0e0-49f7-4723-bf22-dd24dfee6102","savedPayload":{"position":{"x":11236.673182942548,"y":18255.4854210064},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Exponential Moving Average (EMA)","config":"{\n\"codeName\": \"EMA\",\n\"repo\": \"EMA-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates EMAs based on SMAs\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Popular EMAs","project":"Superalgos","id":"4e72640b-d384-434c-a607-47b1c8e4c9ef","savedPayload":{"position":{"x":11342.184438607097,"y":17698.695372266164},"targetPosition":{"x":11446.464633512465,"y":17893.1313848007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ea1af06a-2584-43f0-aecf-ec8ad9169e9c"}}},{"type":"Output Dataset","name":"Multi-Period-Market Base7 EMAs","project":"Superalgos","id":"e554af82-9965-4a5d-a59a-3dc873526ad9","savedPayload":{"position":{"x":11473.821080093669,"y":17690.416998797347},"targetPosition":{"x":11446.464633512465,"y":17893.1313848007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"4e36a5a5-7a03-43a9-b3e0-0c5763c29199"}}},{"type":"Output Dataset","name":"Multi-Period-Market Base11 EMAs","project":"Superalgos","id":"fcefc8e1-6900-485f-a5b0-80366450aedf","savedPayload":{"position":{"x":11595.99731062978,"y":17757.616228702624},"targetPosition":{"x":11446.464633512465,"y":17893.1313848007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"5586aa74-2ecb-4b71-83ea-d621aa400660"}}}],"outputDatasetFolders":[],"id":"268cf8f3-e871-4fed-bbdb-725a070e7cb6","savedPayload":{"position":{"x":11446.464633512465,"y":17893.1313848007},"targetPosition":{"x":11422.987248828329,"y":18350.198656895645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exponential Moving Average (EMA) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"6c163397-f3a4-4acc-b281-567f2809b8a0","savedPayload":{"position":{"x":11620.85611712274,"y":17890.198043416687},"targetPosition":{"x":11668.204830719264,"y":18045.06119113832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8e7c0f51-727f-4a28-b516-087443ee369f"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point.\"\n}","project":"Superalgos","id":"eb2d5251-f873-4785-80c8-3a75186e6fa9","savedPayload":{"position":{"x":11742.9925821725,"y":17907.567018001842},"targetPosition":{"x":11668.204830719264,"y":18045.06119113832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"7715ed1a-35f7-4b1c-ad79-fcd2486fe2ca","savedPayload":{"position":{"x":11800.657320688659,"y":18018.857789327347},"targetPosition":{"x":11668.204830719264,"y":18045.06119113832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"39426478-777d-4ef5-a72a-2ad862c979c7","savedPayload":{"position":{"x":11668.204830719264,"y":18045.06119113832},"targetPosition":{"x":11422.987248828329,"y":18350.198656895645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"8e7c0f51-727f-4a28-b516-087443ee369f","savedPayload":{"position":{"x":11843.026233085555,"y":18144.023206097358},"targetPosition":{"x":11422.987248828329,"y":18350.198656895645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"19e3e53c-0752-4cae-93bd-162e0839b32f","savedPayload":{"position":{"x":11892.05708309534,"y":18374.976866985693},"targetPosition":{"x":11422.987248828329,"y":18350.198656895645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"f865a93d-38fd-433f-92e6-ccb7f2d33b05","savedPayload":{"position":{"x":11817.021720088042,"y":18606.058749634525},"targetPosition":{"x":11422.987248828329,"y":18350.198656895645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"278c34a7-199d-400e-8a06-087149e3d391","savedPayload":{"position":{"x":11505.824170361258,"y":18369.38774765755},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates EMAs based on SMAs.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Popular EMAs","project":"Superalgos","id":"24f5e41a-5839-4174-8e74-2fcde5c2f6a4","savedPayload":{"position":{"x":11548.803851704495,"y":17869.091371048136},"targetPosition":{"x":11630.360428925462,"y":18052.503297737738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e7f5899c-fc4c-412d-a8db-77c1bef8ed21"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base11 EMAs","project":"Superalgos","id":"cf348b8d-e3cb-4841-b064-6bf2a8b54062","savedPayload":{"position":{"x":11702.050233018894,"y":17864.520348617392},"targetPosition":{"x":11630.360428925462,"y":18052.503297737738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"0198fa3f-98e3-4c57-a4a4-a7a8e27905d3"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Base7 EMAs","project":"Superalgos","id":"49d8444c-a216-4d81-8039-fa15683ed461","savedPayload":{"position":{"x":11792.054805474363,"y":17917.47797471867},"targetPosition":{"x":11630.360428925462,"y":18052.503297737738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15ccbcff-318d-46db-93f2-d649b57fd52a"}}}],"outputDatasetFolders":[],"id":"3864c37f-f9dc-433d-96e4-e36a6720adf1","savedPayload":{"position":{"x":11630.360428925462,"y":18052.503297737738},"targetPosition":{"x":11466.410204099717,"y":18480.477767445645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Exponential Moving Average (EMA) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"2b523347-3f95-43ab-9ac8-72470000c774","savedPayload":{"position":{"x":11827.282195191654,"y":18042.310511479678},"targetPosition":{"x":11830.337591675547,"y":18186.461734191125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"fb2c8ec5-75ff-41e9-8782-60a952bd06e8"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"5c6a74d3-7f45-409c-a408-fe3c67c050e9","savedPayload":{"position":{"x":11953.125485063545,"y":18007.78863263712},"targetPosition":{"x":11830.337591675547,"y":18186.461734191125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"dbfe665f-e805-40f4-a494-231cc265acc8","savedPayload":{"position":{"x":12022.507719742785,"y":18112.82877244633},"targetPosition":{"x":11830.337591675547,"y":18186.461734191125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"70d56a4f-6375-456e-b797-d590ab2109a3","savedPayload":{"position":{"x":12025.18881794876,"y":18244.360705363368},"targetPosition":{"x":11830.337591675547,"y":18186.461734191125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"b5b3313a-d8e6-4b64-9300-fdc6693a2cb7","savedPayload":{"position":{"x":11830.337591675547,"y":18186.461734191125},"targetPosition":{"x":11466.410204099717,"y":18480.477767445645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"fb2c8ec5-75ff-41e9-8782-60a952bd06e8","savedPayload":{"position":{"x":11929.3264044669,"y":18407.33295342068},"targetPosition":{"x":11466.410204099717,"y":18480.477767445645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"41fe3adc-42c9-4f5d-b757-13cedd7e0155","savedPayload":{"position":{"x":11903.945195008377,"y":18648.768079429585},"targetPosition":{"x":11466.410204099717,"y":18480.477767445645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"e232777d-86ee-4bb4-9a6d-659f06493aa5","savedPayload":{"position":{"x":11761.593248385612,"y":18845.391657675584},"targetPosition":{"x":11466.410204099717,"y":18480.477767445645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2","savedPayload":{"position":{"x":11549.330987744306,"y":18503.287963272243},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Popular EMAs","config":"{\n \"codeName\": \"Popular-EMAs\",\n \"singularVariableName\": \"popularEMA\",\n \"pluralVariableName\": \"popularEMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"ea1af06a-2584-43f0-aecf-ec8ad9169e9c","savedPayload":{"position":{"x":11671.654085600348,"y":18402.74800834732},"targetPosition":{"x":11467.659704745127,"y":18605.83043201965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"e7f5899c-fc4c-412d-a8db-77c1bef8ed21","savedPayload":{"position":{"x":11752.164476203894,"y":18561.083008079728},"targetPosition":{"x":11467.659704745127,"y":18605.83043201965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"a88a6b8e-0c81-45f5-b69f-33ead2c9af2a","savedPayload":{"position":{"x":12789.832680951025,"y":18714.0750067526},"targetPosition":{"x":12841.609923854667,"y":18972.42552512846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"60b742b7-4a6b-4c3a-a924-7ae2c7c284d8","savedPayload":{"position":{"x":12841.609923854667,"y":18972.42552512846},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"f12e6638-8bbd-4bff-b969-232c1861b45c","savedPayload":{"position":{"x":13324.514309764189,"y":18853.944662394337},"targetPosition":{"x":13155.673275761106,"y":19055.77487546145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87688525-3fc6-4a15-806d-fd8d0f3fd876","savedPayload":{"position":{"x":13155.673275761106,"y":19055.77487546145},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA20","config":"{\n \"codeName\": \"ema20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema20","project":"Superalgos","id":"71d926a1-6f74-452c-a8af-2df52ccfceb2","savedPayload":{"position":{"x":13551.594374852302,"y":19355.2829907094},"targetPosition":{"x":13288.82795801272,"y":19349.843948150155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5058b626-2b62-47c3-a915-12d6d451487c","savedPayload":{"position":{"x":13288.82795801272,"y":19349.843948150155},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA50","config":"{\n \"codeName\": \"ema50\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema50","project":"Superalgos","id":"7d744a34-29cc-46fa-89c9-a3258bbf79f6","savedPayload":{"position":{"x":13303.603563216959,"y":19845.58763452959},"targetPosition":{"x":13142.179059431048,"y":19635.939523601242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1293683f-1686-47f2-8856-ce40dc753450","savedPayload":{"position":{"x":13142.179059431048,"y":19635.939523601242},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA100","config":"{\n \"codeName\": \"ema100\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema100","project":"Superalgos","id":"c0465aae-99b4-488f-801b-f0c96c30a695","savedPayload":{"position":{"x":12775.867358662337,"y":19939.58494993326},"targetPosition":{"x":12824.71879386199,"y":19701.181919011175},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2b72da7-da22-46bb-8f7b-1f2b4fdc0324","savedPayload":{"position":{"x":12824.71879386199,"y":19701.181919011175},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA200","config":"{\n \"codeName\": \"ema200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema200","project":"Superalgos","id":"4ef9d626-2bf5-4a0b-bb72-6528f0ece6eb","savedPayload":{"position":{"x":12340.117146671004,"y":19601.503331718177},"targetPosition":{"x":12579.562572171752,"y":19493.686388158552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e3b4c1a-8cff-4999-b8af-d8403ee3f614","savedPayload":{"position":{"x":12579.562572171752,"y":19493.686388158552},"targetPosition":{"x":12916.076987855111,"y":19342.271291723184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3a6ab821-f693-4929-a0d7-ad0499d23e68","savedPayload":{"position":{"x":12002.800215339255,"y":18877.146274644307},"targetPosition":{"x":11467.659704745127,"y":18605.83043201965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema20 = calculateEMA(20, candle.close, variable.previousEMA20)\nvariable.previousEMA20 = variable.ema20 \n \nvariable.ema50 = calculateEMA(50, candle.close, variable.previousEMA50)\nvariable.previousEMA50 = variable.ema50 \n\nvariable.ema100 = calculateEMA(100, candle.close, variable.previousEMA100)\nvariable.previousEMA100 = variable.ema100 \n\nvariable.ema200 = calculateEMA(200, candle.close, variable.previousEMA200)\nvariable.previousEMA200 = variable.ema200 \n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"25aad3fa-6c8f-46b0-8852-07a95544d6bd","savedPayload":{"position":{"x":11824.960303819764,"y":19027.849412189225},"targetPosition":{"x":11724.488534177995,"y":18968.36342175924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d4805ae2-446b-4e54-89c6-0b2e9df3fade","savedPayload":{"position":{"x":11724.488534177995,"y":18968.36342175924},"targetPosition":{"x":11622.33672291929,"y":18908.884414091866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA20 = 0\nvariable.previousEMA50 = 0\nvariable.previousEMA100 = 0\nvariable.previousEMA200 = 0","project":"Superalgos","id":"c5b50764-185a-43a8-b399-62dd6d81a249","savedPayload":{"position":{"x":11614.891515517655,"y":19154.181525418942},"targetPosition":{"x":11618.251765830217,"y":19024.833654190916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6dd7dc20-5c47-4226-8abc-8551b6bd698f","savedPayload":{"position":{"x":11618.251765830217,"y":19024.833654190916},"targetPosition":{"x":11622.33672291929,"y":18908.884414091866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4c2e867a-f31c-4356-be35-138cdc902c15","savedPayload":{"position":{"x":11622.33672291929,"y":18908.884414091866},"targetPosition":{"x":11467.659704745127,"y":18605.83043201965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d5894707-b065-429b-ba6b-78c71e6529fe","savedPayload":{"position":{"x":11549.330987744306,"y":18644.07898180845},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"EMA Popular","id":"79bf7438-f77a-4c8d-a450-67027d5fd8bc"}}},{"type":"Product Definition","name":"Base5 EMAs","config":"{\n \"codeName\": \"Base5-EMAs\",\n \"singularVariableName\": \"base5EMA\",\n \"pluralVariableName\": \"base5EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"85e3f0ce-5331-4c0b-900a-e73aaf53d96e","savedPayload":{"position":{"x":11803.13689323446,"y":18531.61159746286},"targetPosition":{"x":11426.700379037815,"y":18722.93872059575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"e04edb48-09ab-4f92-beb7-14ba647de7d6","savedPayload":{"position":{"x":11842.876196359863,"y":18789.00655865869},"targetPosition":{"x":11426.700379037815,"y":18722.93872059575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"6d1e00cd-ea21-4c5d-9f21-bbe4e18eaaa1","savedPayload":{"position":{"x":12427.089474399869,"y":19214.527432051495},"targetPosition":{"x":12519.875040469116,"y":19461.458907421842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7804f5d6-913b-48d3-941a-10135819f0d7","savedPayload":{"position":{"x":12519.875040469116,"y":19461.458907421842},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"615487b1-0964-4bfc-800e-f8d3471dfeb0","savedPayload":{"position":{"x":12686.95398006164,"y":19173.718175763453},"targetPosition":{"x":12672.12273290542,"y":19436.369853679622},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5aaf85b9-35bd-47f1-a2a4-dcfa881bc542","savedPayload":{"position":{"x":12672.12273290542,"y":19436.369853679622},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA5","config":"{\n \"codeName\": \"ema5\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema5","project":"Superalgos","id":"1abd53a1-2924-4db2-b50c-06e36aa91e47","savedPayload":{"position":{"x":12941.855172862051,"y":19241.605541334295},"targetPosition":{"x":12821.283213874165,"y":19476.66088073584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4912e0cb-1bba-4750-a063-d8d205091281","savedPayload":{"position":{"x":12821.283213874165,"y":19476.66088073584},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA10","config":"{\n \"codeName\": \"ema10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema10","project":"Superalgos","id":"00ca97c2-f4e9-4d08-af83-3fee7e5d1887","savedPayload":{"position":{"x":13146.034629246624,"y":19408.716563856844},"targetPosition":{"x":12942.009683286571,"y":19573.41412161195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7e888a6-a986-45fe-804d-c4cba934bd9b","savedPayload":{"position":{"x":12942.009683286571,"y":19573.41412161195},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA15","config":"{\n \"codeName\": \"ema15\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema15","project":"Superalgos","id":"f259ce57-d1c2-4196-8e55-dae9f1eb78f5","savedPayload":{"position":{"x":13267.02890205934,"y":19643.405638559183},"targetPosition":{"x":13010.961225606261,"y":19711.84920841072},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9720b3bd-fcb9-4997-9fe8-9d8682aa9dc9","savedPayload":{"position":{"x":13010.961225606261,"y":19711.84920841072},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA20","config":"{\n \"codeName\": \"ema20\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema20","project":"Superalgos","id":"5c7d8482-a86c-4ebc-8524-31b1a73900c3","savedPayload":{"position":{"x":13279.855907171328,"y":19906.581409986815},"targetPosition":{"x":13020.187491704226,"y":19865.84035756413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"716e98b8-640e-4653-9c50-ca0286c851c0","savedPayload":{"position":{"x":13020.187491704226,"y":19865.84035756413},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA25","config":"{\n \"codeName\": \"ema25\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema25","project":"Superalgos","id":"031e3d2f-b487-4df2-9892-845d3e43916a","savedPayload":{"position":{"x":13186.12650309235,"y":20154.219535971984},"targetPosition":{"x":12963.471736980333,"y":20010.437326311196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"56be5d1d-2bd8-42dd-9861-729f4bb72ccf","savedPayload":{"position":{"x":12963.471736980333,"y":20010.437326311196},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA50","config":"{\n \"codeName\": \"ema50\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema50","project":"Superalgos","id":"309f068f-74e5-4405-8267-418ea12ca20d","savedPayload":{"position":{"x":13000.839039050788,"y":20340.553724968628},"targetPosition":{"x":12855.60490703426,"y":20119.184924442336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed5849ae-b0fe-4915-b8c3-8bdb004e5acf","savedPayload":{"position":{"x":12855.60490703426,"y":20119.184924442336},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA100","config":"{\n \"codeName\": \"ema100\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema100","project":"Superalgos","id":"6b164582-e3a2-4ea0-bc0a-e362929d556f","savedPayload":{"position":{"x":12787.455413724932,"y":20450.937033392693},"targetPosition":{"x":12711.436832070842,"y":20175.402555433295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7f690611-834a-4048-bf59-5685995167e9","savedPayload":{"position":{"x":12711.436832070842,"y":20175.402555433295},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA150","config":"{\n \"codeName\": \"ema150\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema150","project":"Superalgos","id":"829731e3-421a-4b49-ac4d-69cc76cdbfab","savedPayload":{"position":{"x":12507.149856883621,"y":20429.436877871114},"targetPosition":{"x":12556.962239489276,"y":20167.20119327036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6b51dbbf-76eb-484b-9535-6043984a7ed6","savedPayload":{"position":{"x":12556.962239489276,"y":20167.20119327036},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA200","config":"{\n \"codeName\": \"ema200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema200","project":"Superalgos","id":"3786f9d4-064e-43ba-8098-d336cd64cfb4","savedPayload":{"position":{"x":12252.580968670834,"y":20295.434751720113},"targetPosition":{"x":12418.958123532004,"y":20096.330422260162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9f96cb9c-ac78-4d23-80e7-650dcff0a56a","savedPayload":{"position":{"x":12418.958123532004,"y":20096.330422260162},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA250","config":"{\n \"codeName\": \"ema250\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema250","project":"Superalgos","id":"710f1d8e-a59f-41d9-9576-e73e292d5cac","savedPayload":{"position":{"x":12099.829884804501,"y":20094.975961394204},"targetPosition":{"x":12322.162443358298,"y":19976.089893629236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e3fc138-8765-46af-95a3-6ee316f49a72","savedPayload":{"position":{"x":12322.162443358298,"y":19976.089893629236},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA500","config":"{\n \"codeName\": \"ema500\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema500","project":"Superalgos","id":"8be9f984-f4ad-471c-885d-b0291c74f04f","savedPayload":{"position":{"x":12021.702230197938,"y":19838.469174153186},"targetPosition":{"x":12282.682962682182,"y":19826.135215873088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"05a21cb3-24bc-42cf-8269-62f14e8f3ed1","savedPayload":{"position":{"x":12282.682962682182,"y":19826.135215873088},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1000","config":"{\n \"codeName\": \"ema1000\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1000","project":"Superalgos","id":"1001e9de-822a-4a75-9526-390dc6be8fe7","savedPayload":{"position":{"x":12061.671743245559,"y":19580.889144696546},"targetPosition":{"x":12307.352873096715,"y":19673.457423317934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cc878593-3f3d-4533-9ed1-a7c7fd0cdd99","savedPayload":{"position":{"x":12307.352873096715,"y":19673.457423317934},"targetPosition":{"x":12651.41763510741,"y":19808.092694391835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7133bdf5-a6d6-4ca5-bc27-390fe276eca6","savedPayload":{"position":{"x":11851.12411860336,"y":19147.23932672337},"targetPosition":{"x":11426.700379037815,"y":18722.93872059575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema5 = calculateEMA(5, candle.close, variable.previousEMA5)\nvariable.previousEMA5 = variable.ema5\n\nvariable.ema10 = calculateEMA(10, candle.close, variable.previousEMA10)\nvariable.previousEMA10 = variable.ema10\n\nvariable.ema15 = calculateEMA(15, candle.close, variable.previousEMA15)\nvariable.previousEMA15 = variable.ema15\n\nvariable.ema20 = calculateEMA(20, candle.close, variable.previousEMA20)\nvariable.previousEMA20 = variable.ema20\n\nvariable.ema25 = calculateEMA(25, candle.close, variable.previousEMA25)\nvariable.previousEMA25 = variable.ema25\n\nvariable.ema50 = calculateEMA(50, candle.close, variable.previousEMA50)\nvariable.previousEMA50 = variable.ema50\n\nvariable.ema100 = calculateEMA(100, candle.close, variable.previousEMA100)\nvariable.previousEMA100 = variable.ema100\n\nvariable.ema150 = calculateEMA(150, candle.close, variable.previousEMA150)\nvariable.previousEMA150 = variable.ema150\n\nvariable.ema200 = calculateEMA(200, candle.close, variable.previousEMA200)\nvariable.previousEMA200 = variable.ema200\n\nvariable.ema250 = calculateEMA(250, candle.close, variable.previousEMA250)\nvariable.previousEMA250 = variable.ema250\n\nvariable.ema500 = calculateEMA(500, candle.close, variable.previousEMA500)\nvariable.previousEMA500 = variable.ema500\n\nvariable.ema1000 = calculateEMA(1000, candle.close, variable.previousEMA1000)\nvariable.previousEMA1000 = variable.ema1000\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}\n","project":"Superalgos","id":"3ea21697-ef5d-421a-825c-db6f04a041ce","savedPayload":{"position":{"x":11748.149699238014,"y":19472.23553556107},"targetPosition":{"x":11622.334699211104,"y":19316.236981250597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d955ad88-0ca4-443b-8d4e-fa0c322d7797","savedPayload":{"position":{"x":11622.334699211104,"y":19316.236981250597},"targetPosition":{"x":11496.2473057472,"y":19159.75193982626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA5 = 0\nvariable.previousEMA10 = 0\nvariable.previousEMA15 = 0\nvariable.previousEMA20 = 0\nvariable.previousEMA25 = 0\nvariable.previousEMA50 = 0\nvariable.previousEMA100 = 0\nvariable.previousEMA150 = 0\nvariable.previousEMA200 = 0\nvariable.previousEMA250 = 0\nvariable.previousEMA500 = 0\nvariable.previousEMA1000 = 0","project":"Superalgos","id":"b951bfdc-9216-4494-8bcf-66099ea9eb8f","savedPayload":{"position":{"x":11353.518513329072,"y":19534.803740837822},"targetPosition":{"x":11425.103840168505,"y":19347.661937266592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2aa36b6f-bde7-433d-a7b6-e646b19e2c20","savedPayload":{"position":{"x":11425.103840168505,"y":19347.661937266592},"targetPosition":{"x":11496.2473057472,"y":19159.75193982626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"54d9ab04-cfe7-433e-8c85-36a511b38d6d","savedPayload":{"position":{"x":11496.2473057472,"y":19159.75193982626},"targetPosition":{"x":11426.700379037815,"y":18722.93872059575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9a37881e-7d9a-4279-95b2-8743de82eec5","savedPayload":{"position":{"x":11505.824170361258,"y":18777.97919742314},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Base6 EMAs","config":"{\n \"codeName\": \"Base6-EMAs\",\n \"singularVariableName\": \"base6EMA\",\n \"pluralVariableName\": \"base6EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"6b6840f7-3b76-474a-9d27-9515cbcd6499","savedPayload":{"position":{"x":11769.055163702193,"y":18757.9705830191},"targetPosition":{"x":11352.723582852661,"y":18823.422651908775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"ef3d5a7d-11eb-4ead-8e24-49ac7c80b0c7","savedPayload":{"position":{"x":11728.352225308467,"y":19015.064761386366},"targetPosition":{"x":11352.723582852661,"y":18823.422651908775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"611ac809-a75a-4550-b9a7-2f5f43cae1e8","savedPayload":{"position":{"x":12228.885700862014,"y":19590.326708573935},"targetPosition":{"x":12241.214880126547,"y":19852.057412966074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77290003-4665-4c78-bce6-7cb50a44bb31","savedPayload":{"position":{"x":12241.214880126547,"y":19852.057412966074},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"59bd5c2f-dd37-4724-8b40-593ba56967ba","savedPayload":{"position":{"x":12472.583529310243,"y":19628.82887311675},"targetPosition":{"x":12377.789802689931,"y":19873.31616417988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"70c54561-94ce-4d2a-a56e-cf1cd4d2a2f5","savedPayload":{"position":{"x":12377.789802689931,"y":19873.31616417988},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA6","config":"{\n \"codeName\": \"ema6\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema6","project":"Superalgos","id":"330b3cad-7015-4691-98ff-e6c0aaeaa807","savedPayload":{"position":{"x":12679.455063453941,"y":19763.182123303814},"targetPosition":{"x":12493.043764561171,"y":19948.748784695268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7e48821-628f-4393-9272-055bcc8ea5f7","savedPayload":{"position":{"x":12493.043764561171,"y":19948.748784695268},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA12","config":"{\n \"codeName\": \"ema12\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema12","project":"Superalgos","id":"7679a1d7-49b9-4798-82d2-f00dbfd7db05","savedPayload":{"position":{"x":12814.654790257631,"y":19970.284578227125},"targetPosition":{"x":12568.3307490773,"y":20064.615456273226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"53cda9a0-2acf-4fa9-b52b-c860da5dbb32","savedPayload":{"position":{"x":12568.3307490773,"y":20064.615456273226},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA18","config":"{\n \"codeName\": \"ema18\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema18","project":"Superalgos","id":"092a466e-c714-41b3-8053-a4c060520f3c","savedPayload":{"position":{"x":12853.174769842226,"y":20214.266187707788},"targetPosition":{"x":12590.538503128391,"y":20200.632977848978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"446296f9-21fa-4a92-bc49-23fb81af896b","savedPayload":{"position":{"x":12590.538503128391,"y":20200.632977848978},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA24","config":"{\n \"codeName\": \"ema24\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema24","project":"Superalgos","id":"f666cf13-3e37-4649-a2fc-338fabb1f7d0","savedPayload":{"position":{"x":12788.552995118152,"y":20453.226168731653},"targetPosition":{"x":12554.816905458367,"y":20334.246017545032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"518927a0-e986-4c9e-a645-75c02c2f571b","savedPayload":{"position":{"x":12554.816905458367,"y":20334.246017545032},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA30","config":"{\n \"codeName\": \"ema30\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema30","project":"Superalgos","id":"3c76eaaf-56ac-4e91-9ee5-11b32219d2ea","savedPayload":{"position":{"x":12633.201006665211,"y":20645.110266925676},"targetPosition":{"x":12467.39994890623,"y":20441.466343533146},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3b056114-3148-432d-908e-d82df0355b7f","savedPayload":{"position":{"x":12467.39994890623,"y":20441.466343533146},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA60","config":"{\n \"codeName\": \"ema60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema60","project":"Superalgos","id":"ee78d4d5-f202-4d8e-ae88-eea38f2d0bc0","savedPayload":{"position":{"x":12414.143449967978,"y":20758.10794926402},"targetPosition":{"x":12344.888199013807,"y":20503.508381075742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83802e58-4437-4ddc-b329-9ae962866387","savedPayload":{"position":{"x":12344.888199013807,"y":20503.508381075742},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA120","config":"{\n \"codeName\": \"ema120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema120","project":"Superalgos","id":"ab81fc7a-4873-49d2-a3ef-c9c1eed99dba","savedPayload":{"position":{"x":12195.208012402378,"y":20760.959153076812},"targetPosition":{"x":12203.438376784601,"y":20509.335962430476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bec21f4d-ac0c-4b70-a565-16d065d1e89c","savedPayload":{"position":{"x":12203.438376784601,"y":20509.335962430476},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA180","config":"{\n \"codeName\": \"ema180\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema180","project":"Superalgos","id":"ce0ce81c-9577-4cc6-8edd-ad99c52916aa","savedPayload":{"position":{"x":11941.452170228149,"y":20694.569416798513},"targetPosition":{"x":12078.792679642833,"y":20461.9455439698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7318a961-0663-4a33-9295-21a8ab990854","savedPayload":{"position":{"x":12078.792679642833,"y":20461.9455439698},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA240","config":"{\n \"codeName\": \"ema240\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema240","project":"Superalgos","id":"f9c4fe37-e76d-4601-9933-ce1ad3e8ad3d","savedPayload":{"position":{"x":11770.471566183489,"y":20518.842516919256},"targetPosition":{"x":11981.204444376966,"y":20363.212181876897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2bfa489-cb63-498e-8a80-a82ebf19d0e6","savedPayload":{"position":{"x":11981.204444376966,"y":20363.212181876897},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA300","config":"{\n \"codeName\": \"ema300\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema300","project":"Superalgos","id":"8b93fa9d-ea11-4654-a6ac-70411f0db75a","savedPayload":{"position":{"x":11679.082445775359,"y":20286.546512755503},"targetPosition":{"x":11937.98713613367,"y":20246.0037176514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a6926058-2ae5-454e-b696-b9d49162e901","savedPayload":{"position":{"x":11937.98713613367,"y":20246.0037176514},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA600","config":"{\n \"codeName\": \"ema600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema600","project":"Superalgos","id":"b67f8d22-c54d-4a21-a726-a8975c10d710","savedPayload":{"position":{"x":11686.174999369192,"y":20026.465026809707},"targetPosition":{"x":11939.21531213626,"y":20096.883363283137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cd299cac-3be1-4899-8816-70baccd30168","savedPayload":{"position":{"x":11939.21531213626,"y":20096.883363283137},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1200","config":"{\n \"codeName\": \"ema1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1200","project":"Superalgos","id":"f7b1d5d4-86c8-4a90-a98a-774fe1171e73","savedPayload":{"position":{"x":11798.572568797994,"y":19812.37988448967},"targetPosition":{"x":12000.857341035571,"y":19976.81141774428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"717ba1d7-3b27-4f87-8e25-c2a26f435e67","savedPayload":{"position":{"x":12000.857341035571,"y":19976.81141774428},"targetPosition":{"x":12257.643879580293,"y":20183.312289524056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"003162cf-ab76-4dea-ac72-a4dd3a0e87ac","savedPayload":{"position":{"x":11625.219850042671,"y":19358.200072240354},"targetPosition":{"x":11352.723582852661,"y":18823.422651908775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema6 = calculateEMA(6, candle.close, variable.previousEMA6)\nvariable.previousEMA6 = variable.ema6\n\nvariable.ema12 = calculateEMA(12, candle.close, variable.previousEMA12)\nvariable.previousEMA12 = variable.ema12\n\nvariable.ema18 = calculateEMA(18, candle.close, variable.previousEMA18)\nvariable.previousEMA18 = variable.ema18\n\nvariable.ema24 = calculateEMA(24, candle.close, variable.previousEMA24)\nvariable.previousEMA24 = variable.ema24\n\nvariable.ema30 = calculateEMA(30, candle.close, variable.previousEMA30)\nvariable.previousEMA30 = variable.ema30\n\nvariable.ema60 = calculateEMA(60, candle.close, variable.previousEMA60)\nvariable.previousEMA60 = variable.ema60\n\nvariable.ema120 = calculateEMA(120, candle.close, variable.previousEMA120)\nvariable.previousEMA120 = variable.ema120\n\nvariable.ema180 = calculateEMA(180, candle.close, variable.previousEMA180)\nvariable.previousEMA180 = variable.ema180\n\nvariable.ema240 = calculateEMA(240, candle.close, variable.previousEMA240)\nvariable.previousEMA240 = variable.ema240\n\nvariable.ema300 = calculateEMA(300, candle.close, variable.previousEMA300)\nvariable.previousEMA300 = variable.ema300\n\nvariable.ema600 = calculateEMA(600, candle.close, variable.previousEMA600)\nvariable.previousEMA600 = variable.ema600\n\nvariable.ema1200 = calculateEMA(1200, candle.close, variable.previousEMA1200)\nvariable.previousEMA1200 = variable.ema1200\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"49789f74-3691-45b3-8c29-9a72500ae81c","savedPayload":{"position":{"x":11426.84024440917,"y":19635.79082200709},"targetPosition":{"x":11355.462928927276,"y":19448.280557474984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed1c9899-0b00-4cc5-b30d-faefdbe914d6","savedPayload":{"position":{"x":11355.462928927276,"y":19448.280557474984},"targetPosition":{"x":11283.824115497586,"y":19261.42315886425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA6 = 0\nvariable.previousEMA12 = 0\nvariable.previousEMA18 = 0\nvariable.previousEMA24 = 0\nvariable.previousEMA30 = 0\nvariable.previousEMA60 = 0\nvariable.previousEMA120 = 0\nvariable.previousEMA180 = 0\nvariable.previousEMA240 = 0\nvariable.previousEMA300 = 0\nvariable.previousEMA600 = 0\nvariable.previousEMA1200 = 0","project":"Superalgos","id":"db307137-4eec-41a0-93ca-af5623c7ecf5","savedPayload":{"position":{"x":11032.304066264054,"y":19573.128779181305},"targetPosition":{"x":11158.240813932303,"y":19417.106392775542},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2c17eb75-3069-47ad-b303-be44390e4736","savedPayload":{"position":{"x":11158.240813932303,"y":19417.106392775542},"targetPosition":{"x":11283.824115497586,"y":19261.42315886425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bd1f404b-64bb-4f2e-95f6-8d52f40bebad","savedPayload":{"position":{"x":11283.824115497586,"y":19261.42315886425},"targetPosition":{"x":11352.723582852661,"y":18823.422651908775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e4267570-575b-4e59-9667-cb78aaae052c","savedPayload":{"position":{"x":11423.06928601044,"y":18891.88152407429},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Base7 EMAs","config":"{\n \"codeName\": \"Base7-EMAs\",\n \"singularVariableName\": \"base7EMA\",\n \"pluralVariableName\": \"base7EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"4e36a5a5-7a03-43a9-b3e0-0c5763c29199","savedPayload":{"position":{"x":11667.521981028836,"y":18962.7610252592},"targetPosition":{"x":11251.210601300163,"y":18896.738059955784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"15ccbcff-318d-46db-93f2-d649b57fd52a","savedPayload":{"position":{"x":11549.019008542746,"y":19194.889261985903},"targetPosition":{"x":11251.210601300163,"y":18896.738059955784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"b91e2094-b8f7-4f7f-a956-30de55c693b7","savedPayload":{"position":{"x":11921.386899029061,"y":19799.28977521995},"targetPosition":{"x":11852.436615833525,"y":20052.229516474577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5163d7f4-3b6c-41c3-b7f6-ec13109fcb0e","savedPayload":{"position":{"x":11852.436615833525,"y":20052.229516474577},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"ea560ee8-06c9-4348-a5b4-24992035245e","savedPayload":{"position":{"x":12156.232617451013,"y":19918.784046393226},"targetPosition":{"x":11990.697515965989,"y":20122.095617031184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4b5dcfda-66ec-4a20-9c4c-0718b51cf761","savedPayload":{"position":{"x":11990.697515965989,"y":20122.095617031184},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA7","config":"{\n \"codeName\": \"ema7\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema7","project":"Superalgos","id":"90e20354-4dd5-4e56-aaf5-cf725f02c1e6","savedPayload":{"position":{"x":12322.280430215014,"y":20123.696361859318},"targetPosition":{"x":12088.088497855908,"y":20242.393098360673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4adf5737-3d1a-4610-9a31-89faddbe679e","savedPayload":{"position":{"x":12088.088497855908,"y":20242.393098360673},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA14","config":"{\n \"codeName\": \"ema14\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema14","project":"Superalgos","id":"b158c3b7-a93f-4e13-8d80-dff1a7172416","savedPayload":{"position":{"x":12390.247302727832,"y":20378.358794877557},"targetPosition":{"x":12128.314113456683,"y":20391.735498547845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c0f0982-caf3-4c7e-a729-54c511ffb65e","savedPayload":{"position":{"x":12128.314113456683,"y":20391.735498547845},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA21","config":"{\n \"codeName\": \"ema21\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema21","project":"Superalgos","id":"3ce74000-2892-4b42-a12e-c8efc1504710","savedPayload":{"position":{"x":12353.623101434918,"y":20640.858218990732},"targetPosition":{"x":12108.447900486917,"y":20546.75311445651},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ff999b95-7623-4eee-b11c-f53dae69f69c","savedPayload":{"position":{"x":12108.447900486917,"y":20546.75311445651},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA28","config":"{\n \"codeName\": \"ema28\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema28","project":"Superalgos","id":"95ccd057-5e33-4b72-a7b0-e44479f3b195","savedPayload":{"position":{"x":12205.331269700993,"y":20860.3003950131},"targetPosition":{"x":12019.416320110107,"y":20674.57915328522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a30ef925-4ab9-45f6-98f3-6723e57fbf97","savedPayload":{"position":{"x":12019.416320110107,"y":20674.57915328522},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA35","config":"{\n \"codeName\": \"ema35\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema35","project":"Superalgos","id":"83513896-dfd7-45a8-aa9a-1922dc9b5b97","savedPayload":{"position":{"x":11984.885222202665,"y":21004.38443550891},"targetPosition":{"x":11890.11474675851,"y":20758.3849767628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2d2b734-e754-4b6c-856b-053eb5b13694","savedPayload":{"position":{"x":11890.11474675851,"y":20758.3849767628},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA70","config":"{\n \"codeName\": \"ema70\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema70","project":"Superalgos","id":"23ca8b8e-400b-4638-946c-c871a632d17b","savedPayload":{"position":{"x":11723.887851985306,"y":21045.31601848717},"targetPosition":{"x":11736.777553200634,"y":20783.38066415148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"863c717d-d171-4616-ac79-dd4a5956bfb5","savedPayload":{"position":{"x":11736.777553200634,"y":20783.38066415148},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA140","config":"{\n \"codeName\": \"ema140\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema140","project":"Superalgos","id":"fb446f49-e024-4246-9783-d41ea25a8a63","savedPayload":{"position":{"x":11471.933878799762,"y":20980.457028158253},"targetPosition":{"x":11591.583290224204,"y":20745.02854844544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba2fbf20-a074-4d89-b1f8-2e00f141b25e","savedPayload":{"position":{"x":11591.583290224204,"y":20745.02854844544},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EM210","config":"{\n \"codeName\": \"ema210\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema210","project":"Superalgos","id":"dd3ed495-e64d-4b76-ba8a-8a6fbaebc223","savedPayload":{"position":{"x":11265.072267424279,"y":20812.172466846707},"targetPosition":{"x":11468.150560580634,"y":20645.283590636987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fbc7524a-d8ff-40c4-9691-1397bd774535","savedPayload":{"position":{"x":11468.150560580634,"y":20645.283590636987},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA280","config":"{\n \"codeName\": \"ema280\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema280","project":"Superalgos","id":"45655778-7860-46a8-9ee1-12ab9d4f463b","savedPayload":{"position":{"x":11152.57394786883,"y":20592.990659899777},"targetPosition":{"x":11397.34437241478,"y":20506.672281083658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"49670f83-5516-4fed-bfc9-3ea4ac3a4865","savedPayload":{"position":{"x":11397.34437241478,"y":20506.672281083658},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA350","config":"{\n \"codeName\": \"ema350\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema350","project":"Superalgos","id":"6203288d-a807-49ee-a209-4466b959be33","savedPayload":{"position":{"x":11135.34252325847,"y":20333.939031727885},"targetPosition":{"x":11389.713458700851,"y":20353.976006922636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f06f627-f385-494a-bb6a-a06c62d0d20f","savedPayload":{"position":{"x":11389.713458700851,"y":20353.976006922636},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA700","config":"{\n \"codeName\": \"ema700\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema700","project":"Superalgos","id":"1663af80-49b7-4593-ad91-6c79fc61f61c","savedPayload":{"position":{"x":11226.78102920582,"y":20066.48522923058},"targetPosition":{"x":11444.954298870602,"y":20208.546905936008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b3810873-e8ea-4466-b011-095b648f0064","savedPayload":{"position":{"x":11444.954298870602,"y":20208.546905936008},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1400","config":"{\n \"codeName\": \"ema1400\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1400","project":"Superalgos","id":"92eee4c6-788b-4aa2-8608-5a026f9f5590","savedPayload":{"position":{"x":11409.745823217872,"y":19881.84048419626},"targetPosition":{"x":11551.601950936601,"y":20101.444939467907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"26a199f6-c167-4de7-9513-0d9c453d8108","savedPayload":{"position":{"x":11551.601950936601,"y":20101.444939467907},"targetPosition":{"x":11755.633060597742,"y":20411.058297196818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e78e6e7a-03db-4e3b-ae8e-b1c309b6ec9e","savedPayload":{"position":{"x":11345.136342763702,"y":19489.585024220585},"targetPosition":{"x":11251.210601300163,"y":18896.738059955784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema7 = calculateEMA(7, candle.close, variable.previousEMA7)\nvariable.previousEMA7 = variable.ema7\n\nvariable.ema14 = calculateEMA(14, candle.close, variable.previousEMA14)\nvariable.previousEMA14 = variable.ema14\n\nvariable.ema21 = calculateEMA(21, candle.close, variable.previousEMA21)\nvariable.previousEMA21 = variable.ema21\n\nvariable.ema28 = calculateEMA(28, candle.close, variable.previousEMA28)\nvariable.previousEMA28 = variable.ema28\n\nvariable.ema35 = calculateEMA(35, candle.close, variable.previousEMA35)\nvariable.previousEMA35 = variable.ema35\n\nvariable.ema70 = calculateEMA(70, candle.close, variable.previousEMA70)\nvariable.previousEMA70 = variable.ema70\n\nvariable.ema140 = calculateEMA(140, candle.close, variable.previousEMA140)\nvariable.previousEMA140 = variable.ema140\n\nvariable.ema210 = calculateEMA(210, candle.close, variable.previousEMA210)\nvariable.previousEMA210 = variable.ema210\n\nvariable.ema280 = calculateEMA(280, candle.close, variable.previousEMA280)\nvariable.previousEMA280 = variable.ema280\n\nvariable.ema350 = calculateEMA(350, candle.close, variable.previousEMA350)\nvariable.previousEMA350 = variable.ema350\n\nvariable.ema700 = calculateEMA(700, candle.close, variable.previousEMA700)\nvariable.previousEMA700 = variable.ema700\n\nvariable.ema1400 = calculateEMA(1400, candle.close, variable.previousEMA1400)\nvariable.previousEMA1400 = variable.ema1400\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"9eb652ba-7df8-41a2-bc5f-c6a1922d8b9c","savedPayload":{"position":{"x":11070.173021537832,"y":19692.346675036966},"targetPosition":{"x":11060.207023573117,"y":19491.68818819327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"659c5fa3-33f6-4127-b4f0-dc1bb0c25691","savedPayload":{"position":{"x":11060.207023573117,"y":19491.68818819327},"targetPosition":{"x":11049.923468452413,"y":19291.82285473163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA7 = 0\nvariable.previousEMA14 = 0\nvariable.previousEMA21 = 0\nvariable.previousEMA28 = 0\nvariable.previousEMA35 = 0\nvariable.previousEMA70 = 0\nvariable.previousEMA140 = 0\nvariable.previousEMA210 = 0\nvariable.previousEMA280 = 0\nvariable.previousEMA350 = 0\nvariable.previousEMA700 = 0\nvariable.previousEMA1400 = 0","project":"Superalgos","id":"03253e10-8b5a-4d6d-abc1-1b171138444c","savedPayload":{"position":{"x":10713.926716634925,"y":19510.841437951993},"targetPosition":{"x":10882.083971980195,"y":19401.031283586417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"07d4aaa2-43ba-42a3-9a5b-73e5866c1307","savedPayload":{"position":{"x":10882.083971980195,"y":19401.031283586417},"targetPosition":{"x":11049.923468452413,"y":19291.82285473163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"91a31871-1901-4a45-9b00-c5aa30a37bf2","savedPayload":{"position":{"x":11049.923468452413,"y":19291.82285473163},"targetPosition":{"x":11251.210601300163,"y":18896.738059955784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b42348a4-6a26-4d46-aa2e-cbf5fa0a4984","savedPayload":{"position":{"x":11309.166959359289,"y":18974.63640842511},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"EMA Base 7","id":"a52a9764-3ef2-44e6-82bd-e6538058119d"}}},{"type":"Product Definition","name":"Base11 EMAs","config":"{\n \"codeName\": \"Base11-EMAs\",\n \"singularVariableName\": \"base11EMA\",\n \"pluralVariableName\": \"base11EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"5586aa74-2ecb-4b71-83ea-d621aa400660","savedPayload":{"position":{"x":11507.42136393026,"y":19126.687167762135},"targetPosition":{"x":11131.807305637807,"y":18935.277098784998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"0198fa3f-98e3-4c57-a4a4-a7a8e27905d3","savedPayload":{"position":{"x":11323.029186182237,"y":19311.02638156284},"targetPosition":{"x":11131.807305637807,"y":18935.277098784998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"b0559af0-2d8b-401c-8619-1eb20942ec2a","savedPayload":{"position":{"x":11743.329092477725,"y":20104.26829467343},"targetPosition":{"x":11530.779312435167,"y":20257.801921095877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"33f46215-3b1a-422a-9305-89c6ffb342f6","savedPayload":{"position":{"x":11530.779312435167,"y":20257.801921095877},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"7bfaab7e-73a5-4086-9eb8-d4a6fdfbbbcf","savedPayload":{"position":{"x":11856.09203216663,"y":20575.401249426486},"targetPosition":{"x":11597.287256204527,"y":20534.26578724623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6155e3b0-2648-407e-b085-4eac778ca3e8","savedPayload":{"position":{"x":11597.287256204527,"y":20534.26578724623},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA11","config":"{\n \"codeName\": \"ema11\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema11","project":"Superalgos","id":"16f9f1d2-c73c-4eb6-9240-0d4015e3252a","savedPayload":{"position":{"x":11603.01069000734,"y":20989.526164445844},"targetPosition":{"x":11448.343852740065,"y":20776.768821850837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b925a6aa-04ee-465b-aa93-fc02066b4e3c","savedPayload":{"position":{"x":11448.343852740065,"y":20776.768821850837},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA22","config":"{\n \"codeName\": \"ema22\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema22","project":"Superalgos","id":"21cca6ba-53d3-4fd0-b3c9-43a71702e4f3","savedPayload":{"position":{"x":11131.805588309671,"y":21103.30317640185},"targetPosition":{"x":11172.297873378775,"y":20843.578583841805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7f02db91-5147-438c-98c9-e024fba210a2","savedPayload":{"position":{"x":11172.297873378775,"y":20843.578583841805},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA33","config":"{\n \"codeName\": \"ema33\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema33","project":"Superalgos","id":"69184123-7d64-41a6-ad3f-8f53bf358f95","savedPayload":{"position":{"x":10727.352861231058,"y":20834.18321734576},"targetPosition":{"x":10929.216939114951,"y":20695.299826268274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"55be1211-a38f-4ff4-8d12-fa78fa8ba2dd","savedPayload":{"position":{"x":10929.216939114951,"y":20695.299826268274},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA55","config":"{\n \"codeName\": \"ema55\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema55","project":"Superalgos","id":"5281da7d-c090-4637-9a42-dc28599f0385","savedPayload":{"position":{"x":10591.224735841322,"y":20343.4010693224},"targetPosition":{"x":10864.210380814642,"y":20412.58162050297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"710e13ba-afd9-41c2-b7e8-f0ef7be4bb53","savedPayload":{"position":{"x":10864.210380814642,"y":20412.58162050297},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA111","config":"{\n \"codeName\": \"ema111\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema111","project":"Superalgos","id":"f0dd0fa6-ace3-44ea-a701-e36808f6e348","savedPayload":{"position":{"x":10859.197017011611,"y":19963.259872345698},"targetPosition":{"x":11012.341125967869,"y":20175.150601422527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"461f6d65-e227-4362-b62c-16b7225014f6","savedPayload":{"position":{"x":11012.341125967869,"y":20175.150601422527},"targetPosition":{"x":11229.421518888797,"y":20475.796789098837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6a451383-677d-4da8-a15d-f746cda23991","savedPayload":{"position":{"x":11038.048592931425,"y":19528.121104602706},"targetPosition":{"x":11131.807305637807,"y":18935.277098784998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema11 = calculateEMA(11, candle.close, variable.previousEMA11)\nvariable.previousEMA11 = variable.ema11\n\nvariable.ema22 = calculateEMA(22, candle.close, variable.previousEMA22)\nvariable.previousEMA22 = variable.ema22\n\nvariable.ema33 = calculateEMA(33, candle.close, variable.previousEMA33)\nvariable.previousEMA33 = variable.ema33\n\nvariable.ema55 = calculateEMA(55, candle.close, variable.previousEMA55)\nvariable.previousEMA55 = variable.ema55\n\nvariable.ema111 = calculateEMA(111, candle.close, variable.previousEMA111)\nvariable.previousEMA111 = variable.ema111\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"38ceaace-d9e5-482a-a15b-c7bb06767056","savedPayload":{"position":{"x":10714.917959718721,"y":19635.885425424538},"targetPosition":{"x":10766.862986291504,"y":19442.348630817214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"db87f908-271b-44be-8756-706c3ff98c29","savedPayload":{"position":{"x":10766.862986291504,"y":19442.348630817214},"targetPosition":{"x":10818.36221149924,"y":19249.128038674444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA11 = 0\nvariable.previousEMA22 = 0\nvariable.previousEMA33 = 0\nvariable.previousEMA55 = 0\nvariable.previousEMA111 = 0","project":"Superalgos","id":"5c34d18a-ac4e-4af6-aa52-cb4c0f016e6d","savedPayload":{"position":{"x":10431.336625788841,"y":19353.087261801134},"targetPosition":{"x":10625.15720089275,"y":19300.91633537434},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f34dd488-d3ea-4bd0-b4f8-68ea81c4a635","savedPayload":{"position":{"x":10625.15720089275,"y":19300.91633537434},"targetPosition":{"x":10818.36221149924,"y":19249.128038674444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e02efb2a-bb39-4a12-89c8-37c254e9bf5f","savedPayload":{"position":{"x":10818.36221149924,"y":19249.128038674444},"targetPosition":{"x":11131.807305637807,"y":18935.277098784998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"21df4f44-96eb-453b-8652-4ce2dc03424c","savedPayload":{"position":{"x":11175.266743744598,"y":19018.14322580816},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"EMA Base 11","id":"cef26be6-07a9-415a-8439-99d06b1e1cfb"}}},{"type":"Product Definition","name":"Base12 EMAs","config":"{\n \"codeName\": \"Base12-EMAs\",\n \"singularVariableName\": \"base12EMA\",\n \"pluralVariableName\": \"base12EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"ea61dfed-8f93-4b4f-8575-61ca2547ea90","savedPayload":{"position":{"x":11304.192261517957,"y":19233.392099125092},"targetPosition":{"x":11006.170147404317,"y":18935.251350849638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"b251aca0-1996-4d13-99ed-6fb9796ec8d6","savedPayload":{"position":{"x":11071.848092942046,"y":19351.61009802468},"targetPosition":{"x":11006.170147404317,"y":18935.251350849638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"f1df9aec-05c4-40d0-a82c-d17a0e2f1596","savedPayload":{"position":{"x":11199.581581705417,"y":19993.61239009383},"targetPosition":{"x":10990.80316358375,"y":20151.542772107536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2c0c9e78-796b-4845-8cbb-c153a6b7c791","savedPayload":{"position":{"x":10990.80316358375,"y":20151.542772107536},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"355a63aa-8c8c-4eca-a246-272eb464d094","savedPayload":{"position":{"x":11316.569480801518,"y":20250.10455343706},"targetPosition":{"x":11059.189090866395,"y":20302.256811415387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"256d27f8-b34e-46ca-9b5f-531823534e11","savedPayload":{"position":{"x":11059.189090866395,"y":20302.256811415387},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA12","config":"{\n \"codeName\": \"ema12\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema12","project":"Superalgos","id":"121d3c83-9fb4-44a1-93ed-e9755dfcc59e","savedPayload":{"position":{"x":11310.243120179799,"y":20531.75518533407},"targetPosition":{"x":11055.725062475613,"y":20467.446051010396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b386dd09-a2a1-4669-a73b-6df619dee15d","savedPayload":{"position":{"x":11055.725062475613,"y":20467.446051010396},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA24","config":"{\n \"codeName\": \"ema24\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema24","project":"Superalgos","id":"e4418d5e-74e5-440c-bd58-f8f18245ba6d","savedPayload":{"position":{"x":11182.115382991418,"y":20783.302149643485},"targetPosition":{"x":10980.671395694499,"y":20615.012535472273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c23ef82a-9c9a-477f-8d48-14d93f06e3c6","savedPayload":{"position":{"x":10980.671395694499,"y":20615.012535472273},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA36","config":"{\n \"codeName\": \"ema36\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema36","project":"Superalgos","id":"21dc0fd4-01f5-428b-9a9e-45307981af50","savedPayload":{"position":{"x":10957.376735757167,"y":20954.218648666414},"targetPosition":{"x":10848.941674980866,"y":20715.399075750756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e613c9c6-61da-4830-9289-8b400c3b41d7","savedPayload":{"position":{"x":10848.941674980866,"y":20715.399075750756},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA48","config":"{\n \"codeName\": \"ema48\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema48","project":"Superalgos","id":"6afd224b-ba9c-49eb-973f-e7e3d609e82e","savedPayload":{"position":{"x":10681.251446331145,"y":21011.04084129591},"targetPosition":{"x":10686.92091978501,"y":20748.358303110548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e49e8056-f659-4090-91e7-0e83b4a3654e","savedPayload":{"position":{"x":10686.92091978501,"y":20748.358303110548},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA60","config":"{\n \"codeName\": \"ema60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema60","project":"Superalgos","id":"2db84126-00b9-4cde-bb35-66f9fcb8bfc6","savedPayload":{"position":{"x":10407.784331926654,"y":20942.072654511936},"targetPosition":{"x":10526.555795203822,"y":20708.193881655367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77a0ccf0-aa97-4a11-b1db-bd74d33c28b7","savedPayload":{"position":{"x":10526.555795203822,"y":20708.193881655367},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA120","config":"{\n \"codeName\": \"ema120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema120","project":"Superalgos","id":"e3f30f2b-23c8-4bac-b19e-69ae740a4773","savedPayload":{"position":{"x":10190.907930732767,"y":20762.289025950024},"targetPosition":{"x":10399.904433004773,"y":20602.249523148217},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fca691ac-2651-4619-af01-48a0fafcfd75","savedPayload":{"position":{"x":10399.904433004773,"y":20602.249523148217},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA240","config":"{\n \"codeName\": \"ema240\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema240","project":"Superalgos","id":"99b8a3c3-7e86-40aa-ad44-82a0bdb1f208","savedPayload":{"position":{"x":10072.120643142764,"y":20497.312100434792},"targetPosition":{"x":10329.352518983313,"y":20443.47802886613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6f194951-d813-4418-be45-420680399c17","savedPayload":{"position":{"x":10329.352518983313,"y":20443.47802886613},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA360","config":"{\n \"codeName\": \"ema360\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema360","project":"Superalgos","id":"fd430a5b-2a43-40c5-ae9d-4c7f901b527d","savedPayload":{"position":{"x":10083.955097047405,"y":20222.86111337171},"targetPosition":{"x":10334.222958342623,"y":20288.084525528127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d9b00ca8-b18b-43da-9f3d-889fe101120c","savedPayload":{"position":{"x":10334.222958342623,"y":20288.084525528127},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA480","config":"{\n \"codeName\": \"ema480\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema480","project":"Superalgos","id":"4601277a-9f86-41a4-81b1-21b3c13d1d34","savedPayload":{"position":{"x":10206.471770562726,"y":19972.802440699114},"targetPosition":{"x":10407.726560817711,"y":20141.13975652584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2eccd071-3101-47bb-a8e6-008703cf6848","savedPayload":{"position":{"x":10407.726560817711,"y":20141.13975652584},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA600","config":"{\n \"codeName\": \"ema600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema600","project":"Superalgos","id":"5c687030-e498-4126-8ce9-0c99a427168e","savedPayload":{"position":{"x":10434.255439197012,"y":19799.135814612437},"targetPosition":{"x":10542.368735473996,"y":20038.069493133484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e715e341-88d4-477c-9d7f-b0bb85ee3022","savedPayload":{"position":{"x":10542.368735473996,"y":20038.069493133484},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1200","config":"{\n \"codeName\": \"ema1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1200","project":"Superalgos","id":"7c39560e-7434-4f50-aa3d-b93e131ce066","savedPayload":{"position":{"x":10694.155441668983,"y":19741.14675488769},"targetPosition":{"x":10704.474514582107,"y":20005.476176795473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f1939b18-3af9-4376-b8ba-6f506b215f82","savedPayload":{"position":{"x":10704.474514582107,"y":20005.476176795473},"targetPosition":{"x":10694.899946357036,"y":20376.297644719623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"512144fe-195c-47ae-b5b7-8167ba61a4bb","savedPayload":{"position":{"x":10733.795044556817,"y":19470.042345475485},"targetPosition":{"x":11006.170147404317,"y":18935.251350849638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current \n\nvariable.ema12 = calculateEMA(12, candle.close, variable.previousEMA12)\nvariable.previousEMA12 = variable.ema12\n\nvariable.ema24 = calculateEMA(24, candle.close, variable.previousEMA24)\nvariable.previousEMA24 = variable.ema24\n\nvariable.ema36 = calculateEMA(36, candle.close, variable.previousEMA36)\nvariable.previousEMA36 = variable.ema36\n\nvariable.ema48 = calculateEMA(48, candle.close, variable.previousEMA48)\nvariable.previousEMA48 = variable.ema48\n\nvariable.ema60 = calculateEMA(60, candle.close, variable.previousEMA60)\nvariable.previousEMA60 = variable.ema60\n\nvariable.ema120 = calculateEMA(120, candle.close, variable.previousEMA120)\nvariable.previousEMA120 = variable.ema120\n\nvariable.ema240 = calculateEMA(240, candle.close, variable.previousEMA240)\nvariable.previousEMA240 = variable.ema240\n\nvariable.ema360 = calculateEMA(360, candle.close, variable.previousEMA360)\nvariable.previousEMA360 = variable.ema360\n\nvariable.ema480 = calculateEMA(480, candle.close, variable.previousEMA480)\nvariable.previousEMA480 = variable.ema480\n\nvariable.ema600 = calculateEMA(600, candle.close, variable.previousEMA600)\nvariable.previousEMA600 = variable.ema600\n\nvariable.ema1200 = calculateEMA(1200, candle.close, variable.previousEMA1200)\nvariable.previousEMA1200 = variable.ema1200\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"c3936de6-e8b4-4459-8c31-d97bea84cbfa","savedPayload":{"position":{"x":10392.781844821864,"y":19472.460435287514},"targetPosition":{"x":10501.8749438084,"y":19304.480724996887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c4c50d01-1dff-4700-853a-986821fd55c5","savedPayload":{"position":{"x":10501.8749438084,"y":19304.480724996887},"targetPosition":{"x":10611.04464921095,"y":19136.59138741859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA12 = 0\nvariable.previousEMA24 = 0\nvariable.previousEMA36 = 0\nvariable.previousEMA48 = 0\nvariable.previousEMA60 = 0\nvariable.previousEMA120 = 0\nvariable.previousEMA240 = 0\nvariable.previousEMA360 = 0\nvariable.previousEMA480 = 0\nvariable.previousEMA600 = 0\nvariable.previousEMA1200 = 0\n","project":"Superalgos","id":"c1639309-d20d-47cb-bb44-f6d45fd498a2","savedPayload":{"position":{"x":10210.947419967695,"y":19116.527729935147},"targetPosition":{"x":10411.06238862876,"y":19126.542130960086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6a845db8-4418-4417-80ac-11114304a476","savedPayload":{"position":{"x":10411.06238862876,"y":19126.542130960086},"targetPosition":{"x":10611.04464921095,"y":19136.59138741859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1f5b9ce3-8278-4359-a57c-2c9e275a64cc","savedPayload":{"position":{"x":10611.04464921095,"y":19136.59138741859},"targetPosition":{"x":11006.170147404317,"y":18935.251350849638},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"43d6f23d-d206-47e9-95d4-6bef34377014","savedPayload":{"position":{"x":11034.47572520839,"y":19018.14322580816},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition","name":"Base30 EMAs","config":"{\n \"codeName\": \"Base30-EMAs\",\n \"singularVariableName\": \"base30EMA\",\n \"pluralVariableName\": \"base30EMAs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"dea3491f-aae7-4419-a98f-108cf5d69b87","savedPayload":{"position":{"x":11072.919008601802,"y":19268.29357129992},"targetPosition":{"x":10881.544978808437,"y":18892.40802605884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"6624337b-4afd-44b8-a2ea-3f1779ddda7e","savedPayload":{"position":{"x":10815.632036102837,"y":19308.787907977523},"targetPosition":{"x":10881.544978808437,"y":18892.40802605884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"d3c4e9c3-9823-4809-997e-dc36dac93b22","savedPayload":{"position":{"x":10821.40940266549,"y":19929.892964872874},"targetPosition":{"x":10571.976521288376,"y":20007.215399038734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cdf3538e-a8e5-44e5-9263-e5ffe18e65c2","savedPayload":{"position":{"x":10571.976521288376,"y":20007.215399038734},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"af0bf0dd-e517-4723-b0cc-832261c78c76","savedPayload":{"position":{"x":10839.715530369202,"y":20232.404729016092},"targetPosition":{"x":10582.455794726506,"y":20185.078698771526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"27b3ce25-c547-4003-9a1c-2214b22e4fd8","savedPayload":{"position":{"x":10582.455794726506,"y":20185.078698771526},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA30","config":"{\n \"codeName\": \"ema30\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema30","project":"Superalgos","id":"d49aaf82-1063-490d-bedb-3c63d639e097","savedPayload":{"position":{"x":10715.532265594436,"y":20509.14183965206},"targetPosition":{"x":10509.0639985288,"y":20347.22219951388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c92e3720-fc04-45ff-99e7-95abc2ddabea","savedPayload":{"position":{"x":10509.0639985288,"y":20347.22219951388},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA60","config":"{\n \"codeName\": \"ema60\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema60","project":"Superalgos","id":"47f6b7dc-d0e0-4707-9e20-4113af4916ce","savedPayload":{"position":{"x":10476.754452437519,"y":20696.578712102062},"targetPosition":{"x":10369.073698020144,"y":20457.01211384963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d489aab4-6b93-490a-95b0-5b586a80960a","savedPayload":{"position":{"x":10369.073698020144,"y":20457.01211384963},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA90","config":"{\n \"codeName\": \"ema90\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema90","project":"Superalgos","id":"d2ac9ce8-32ab-4802-ab41-b959112a696b","savedPayload":{"position":{"x":10178.452602544636,"y":20750.993468817167},"targetPosition":{"x":10194.212351730763,"y":20489.464580613403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7b763dc2-e990-44b7-b67f-93d27e5b7507","savedPayload":{"position":{"x":10194.212351730763,"y":20489.464580613403},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA120","config":"{\n \"codeName\": \"ema120\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema120","project":"Superalgos","id":"41283546-a88c-41a6-87a6-48f178b378f5","savedPayload":{"position":{"x":9888.762512289188,"y":20660.463956954616},"targetPosition":{"x":10024.177959045497,"y":20436.393859007258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"19b80a14-7510-4066-aa0a-43e8d92f8bec","savedPayload":{"position":{"x":10024.177959045497,"y":20436.393859007258},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA150","config":"{\n \"codeName\": \"ema150\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema150","project":"Superalgos","id":"d82aeb70-2857-4d97-8f42-6fa22acc3ec1","savedPayload":{"position":{"x":9674.443057334469,"y":20445.748298647784},"targetPosition":{"x":9898.435927474922,"y":20310.337428978746},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2dcea6aa-8e40-44d9-b540-e831f54b0e19","savedPayload":{"position":{"x":9898.435927474922,"y":20310.337428978746},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA300","config":"{\n \"codeName\": \"ema300\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema300","project":"Superalgos","id":"3bfc5b00-3b36-4b7e-b549-4cac3826de4f","savedPayload":{"position":{"x":9583.09127017772,"y":20156.277237723178},"targetPosition":{"x":9846.174105707367,"y":20140.37642233499},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7cc56b79-f74d-465e-8e4d-070be004c71b","savedPayload":{"position":{"x":9846.174105707367,"y":20140.37642233499},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA600","config":"{\n \"codeName\": \"ema600\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema600","project":"Superalgos","id":"22bc84a5-61f6-479e-a87d-b1aee1b8416d","savedPayload":{"position":{"x":9638.062625380833,"y":19857.996576366782},"targetPosition":{"x":9877.279213927563,"y":19965.45036564405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0e28ed26-69c1-4a8e-b13f-cef5faf27fc8","savedPayload":{"position":{"x":9877.279213927563,"y":19965.45036564405},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA900","config":"{\n \"codeName\": \"ema900\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema900","project":"Superalgos","id":"bd0354df-70f8-44e7-b988-49c514433ee3","savedPayload":{"position":{"x":9825.52178735478,"y":19619.36007984657},"targetPosition":{"x":9987.030734561187,"y":19825.181409372428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1dfbb7b7-1ddc-4079-a17d-abef03fcd978","savedPayload":{"position":{"x":9987.030734561187,"y":19825.181409372428},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1200","config":"{\n \"codeName\": \"ema1200\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1200","project":"Superalgos","id":"fed49d03-931b-45a8-ac59-60859500e8ea","savedPayload":{"position":{"x":10102.00663800595,"y":19494.606053292748},"targetPosition":{"x":10149.570281089356,"y":19752.594725746043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2854d03b-388d-42be-bd49-0b0ed1293a30","savedPayload":{"position":{"x":10149.570281089356,"y":19752.594725746043},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA1500","config":"{\n \"codeName\": \"ema1500\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema1500","project":"Superalgos","id":"1486d92f-10f4-4e34-b603-b0a18408713c","savedPayload":{"position":{"x":10400.663094471864,"y":19510.75438069367},"targetPosition":{"x":10327.273450016848,"y":19763.400734511888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9936d329-ffe9-4c8a-929c-b6f4a3a38954","savedPayload":{"position":{"x":10327.273450016848,"y":19763.400734511888},"targetPosition":{"x":10216.637862666594,"y":20117.96071195439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3dda31b0-7d30-43c2-9b91-74c25cffed38","savedPayload":{"position":{"x":10457.3528232186,"y":19316.90739733115},"targetPosition":{"x":10881.544978808437,"y":18892.40802605884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\nvariable.ema30 = calculateEMA(30, candle.close, variable.previousEMA30)\nvariable.previousEMA30 = variable.ema30\n\nvariable.ema60 = calculateEMA(60, candle.close, variable.previousEMA60)\nvariable.previousEMA60 = variable.ema60\n\nvariable.ema90 = calculateEMA(90, candle.close, variable.previousEMA90)\nvariable.previousEMA90 = variable.ema90\n\nvariable.ema120 = calculateEMA(120, candle.close, variable.previousEMA120)\nvariable.previousEMA120 = variable.ema120\n\nvariable.ema150 = calculateEMA(150, candle.close, variable.previousEMA150)\nvariable.previousEMA150 = variable.ema150\n\nvariable.ema300 = calculateEMA(300, candle.close, variable.previousEMA300)\nvariable.previousEMA300 = variable.ema300\n\nvariable.ema600 = calculateEMA(600, candle.close, variable.previousEMA600)\nvariable.previousEMA600 = variable.ema600\n\nvariable.ema900 = calculateEMA(900, candle.close, variable.previousEMA900)\nvariable.previousEMA900 = variable.ema900\n\nvariable.ema1200 = calculateEMA(1200, candle.close, variable.previousEMA1200)\nvariable.previousEMA1200 = variable.ema1200\n\nvariable.ema1500 = calculateEMA(1500, candle.close, variable.previousEMA1500)\nvariable.previousEMA1500 = variable.ema1500\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}","project":"Superalgos","id":"df900089-7554-4b01-88d1-801706c194a5","savedPayload":{"position":{"x":10132.279572174588,"y":19214.011467402328},"targetPosition":{"x":10287.937617765088,"y":19088.01528586967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ff38e18a-c36c-4c4a-8d5b-b7230451c098","savedPayload":{"position":{"x":10287.937617765088,"y":19088.01528586967},"targetPosition":{"x":10443.726327781158,"y":18961.802997287108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\nvariable.previousEMA30 = 0\nvariable.previousEMA60 = 0\nvariable.previousEMA90 = 0\nvariable.previousEMA120 = 0\nvariable.previousEMA150 = 0\nvariable.previousEMA300 = 0\nvariable.previousEMA600 = 0\nvariable.previousEMA900 = 0\nvariable.previousEMA1200 = 0\nvariable.previousEMA1500 = 0\n","project":"Superalgos","id":"14cfa602-002c-439e-b658-24cc8d2d1c14","savedPayload":{"position":{"x":10083.007232053724,"y":18841.13261982941},"targetPosition":{"x":10274.645762796683,"y":18912.375259952612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2489fa2c-03cb-4007-b426-88158b8ab442","savedPayload":{"position":{"x":10274.645762796683,"y":18912.375259952612},"targetPosition":{"x":10443.726327781158,"y":18961.802997287108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff57a6a1-1133-4cce-abab-d958d5936360","savedPayload":{"position":{"x":10443.726327781158,"y":18961.802997287108},"targetPosition":{"x":10881.544978808437,"y":18892.40802605884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4394346c-7c25-478f-9be7-04f071dc673c","savedPayload":{"position":{"x":10900.575509593698,"y":18974.63640842511},"targetPosition":{"x":11104.871234476494,"y":18573.683472540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"274a20f7-97c3-452d-9ef7-aa35f482f5e3","savedPayload":{"position":{"x":11104.871234476494,"y":18573.683472540346},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Moving Average Convergence Diveregence (MACD)","config":"{\n\"codeName\": \"MACD\",\n\"repo\": \"MACD-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market MACD 122609","project":"Superalgos","id":"b1bf9ad6-e21f-43a9-b7a5-7d5dd0485b2e","savedPayload":{"position":{"x":11471.325556217509,"y":18405.473779853357},"targetPosition":{"x":11469.246885277484,"y":18606.984751204003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"01d43ed0-2a80-4eca-bee6-db2fe40470fc"}}},{"type":"Output Dataset","name":"Multi-Period-Market MACD 031016","project":"Superalgos","id":"a8aa057b-aa19-45cb-bca0-7c3b57a350f7","savedPayload":{"position":{"x":11591.827714898898,"y":18445.982326925216},"targetPosition":{"x":11469.246885277484,"y":18606.984751204003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"19b1d791-d2ea-4f25-a6e1-fe0a64450745"}}},{"type":"Output Dataset","name":"Multi-Period-Market MACD 081709","project":"Superalgos","id":"150637f5-1917-439e-916f-71e86edccd49","savedPayload":{"position":{"x":11663.167943060898,"y":18546.707493952617},"targetPosition":{"x":11469.246885277484,"y":18606.984751204003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"c390cbd3-0ba0-4507-8614-42c88f4ce7e6"}}},{"type":"Output Dataset","name":"Multi-Period-Market MACD 245209","project":"Superalgos","id":"6854acc9-b22d-46e6-8967-e3843ca6db76","savedPayload":{"position":{"x":11638.699150104434,"y":18682.17859204875},"targetPosition":{"x":11469.246885277484,"y":18606.984751204003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"89254c6c-9be2-4037-b063-467edc660d10"}}}],"outputDatasetFolders":[],"id":"af39ab1b-b1c0-4869-9093-47ad8ff63494","savedPayload":{"position":{"x":11469.246885277484,"y":18606.984751204003},"targetPosition":{"x":11146.380205402404,"y":18828.49426866509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Moving Average Convergence Diveregence (MACD) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"7e17f51a-deed-4976-a53b-d34c2e45f92f","savedPayload":{"position":{"x":11764.959412667115,"y":18644.76708633784},"targetPosition":{"x":11611.12774169202,"y":18799.46432564655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"101cc7d6-d35b-4907-b530-f28d5e02ff0a"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"473dbe5e-6332-4005-8457-c77c3f5c65d0","savedPayload":{"position":{"x":11812.666821230629,"y":18784.593603082372},"targetPosition":{"x":11611.12774169202,"y":18799.46432564655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"fa10270c-f94c-479d-9094-f974018e2029","savedPayload":{"position":{"x":11764.332487832256,"y":18930.369845930523},"targetPosition":{"x":11611.12774169202,"y":18799.46432564655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"7a34fbb2-19de-4b82-88f2-c016f6959f74","savedPayload":{"position":{"x":11611.12774169202,"y":18799.46432564655},"targetPosition":{"x":11146.380205402404,"y":18828.49426866509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"101cc7d6-d35b-4907-b530-f28d5e02ff0a","savedPayload":{"position":{"x":11532.007627082303,"y":19015.11308965402},"targetPosition":{"x":11146.380205402404,"y":18828.49426866509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1bc17bd6-0c20-4dfe-87dd-68db36113733","savedPayload":{"position":{"x":11388.574793248437,"y":19183.690969215804},"targetPosition":{"x":11146.380205402404,"y":18828.49426866509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"f2eca95a-37ae-448b-8ff9-c6dc4b133245","savedPayload":{"position":{"x":11179.215800183229,"y":19256.7416427928},"targetPosition":{"x":11146.380205402404,"y":18828.49426866509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"44019efe-950a-4eec-a546-cd2ee26818b9","savedPayload":{"position":{"x":11159.427149050449,"y":18833.961305740817},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily MACD 122609","project":"Superalgos","id":"c79ae046-983f-4acf-9c73-ab7e5d24fd85","savedPayload":{"position":{"x":11511.788478998946,"y":18729.087679203458},"targetPosition":{"x":11423.120987240496,"y":18909.280747413723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"dd5d3067-ff7b-4353-ba4f-c030bd3da796"}}},{"type":"Output Dataset","name":"Multi-Period-Daily MACD 081709","project":"Superalgos","id":"daa8862c-2eda-4846-97d5-8684673baf3f","savedPayload":{"position":{"x":11604.38864530181,"y":18817.112728624175},"targetPosition":{"x":11423.120987240496,"y":18909.280747413723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"29e18539-f188-4d29-9531-25cd3ee8f282"}}},{"type":"Output Dataset","name":"Multi-Period-Daily MACD 245209","project":"Superalgos","id":"59cb9a88-ccd4-4306-8822-bf9d0e526c02","savedPayload":{"position":{"x":11622.242951690432,"y":18923.763104045265},"targetPosition":{"x":11423.120987240496,"y":18909.280747413723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8a9dde13-e4b8-40f3-80bc-ea51050b2f08"}}},{"type":"Output Dataset","name":"Multi-Period-Daily MACD 031016","project":"Superalgos","id":"b09b8313-baaf-45f4-a0fb-b33614d58699","savedPayload":{"position":{"x":11535.914434027527,"y":19053.02835972005},"targetPosition":{"x":11423.120987240496,"y":18909.280747413723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ec2611a6-699b-45a5-beec-679dd4b7734a"}}}],"outputDatasetFolders":[],"id":"a95e4b61-4e49-4b99-bfb8-8bb917afe8df","savedPayload":{"position":{"x":11423.120987240496,"y":18909.280747413723},"targetPosition":{"x":11035.62412102021,"y":18968.40815893568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Moving Average Convergence Diveregence (MACD) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"e02fb6a2-c775-46de-bce6-a40f7d40cd5c","savedPayload":{"position":{"x":11667.664138004697,"y":19039.709652620666},"targetPosition":{"x":11467.620824567097,"y":19142.294892787006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a9d544cb-9643-4f7e-9220-d3ec7397bcdf"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"650627ec-3cab-4024-a17d-a43174f869e9","savedPayload":{"position":{"x":11673.702193082405,"y":19161.74648414973},"targetPosition":{"x":11467.620824567097,"y":19142.294892787006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"62a1b4d7-e2fd-44bf-9e37-3108a7b5b956","savedPayload":{"position":{"x":11625.952728395798,"y":19277.378341214728},"targetPosition":{"x":11467.620824567097,"y":19142.294892787006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"38aa26d5-f3b2-43e6-8533-cd51d7128221","savedPayload":{"position":{"x":11510.96708269091,"y":19342.512617404187},"targetPosition":{"x":11467.620824567097,"y":19142.294892787006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"e8291604-ea73-4217-b00c-51f65bdec1d6","savedPayload":{"position":{"x":11467.620824567097,"y":19142.294892787006},"targetPosition":{"x":11035.62412102021,"y":18968.40815893568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"a9d544cb-9643-4f7e-9220-d3ec7397bcdf","savedPayload":{"position":{"x":11301.930633865084,"y":19303.88449411361},"targetPosition":{"x":11035.62412102021,"y":18968.40815893568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"35b430c4-60bd-41ff-8a3a-7907146b0238","savedPayload":{"position":{"x":11098.59309515605,"y":19392.676673282793},"targetPosition":{"x":11035.62412102021,"y":18968.40815893568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"c6191bb8-66bf-4d67-9d1b-9364e7e6e84e","savedPayload":{"position":{"x":10878.574576673316,"y":19367.191346795345},"targetPosition":{"x":11035.62412102021,"y":18968.40815893568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8e5db945-8507-4489-9288-21cfa1e9301c","savedPayload":{"position":{"x":11043.68442381088,"y":18978.844886267358},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"MACD 122609","config":"{\n \"codeName\": \"MACD-122609\",\n \"singularVariableName\": \"macd122609\",\n \"pluralVariableName\": \"macd122609s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"01d43ed0-2a80-4eca-bee6-db2fe40470fc","savedPayload":{"position":{"x":11137.975194875271,"y":19158.777699068003},"targetPosition":{"x":10873.998336763292,"y":19044.91738753494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"dd5d3067-ff7b-4353-ba4f-c030bd3da796","savedPayload":{"position":{"x":11021.380076563268,"y":19292.9669606181},"targetPosition":{"x":10873.998336763292,"y":19044.91738753494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"c30a9207-3220-4aa4-b96e-64a82200e356","savedPayload":{"position":{"x":11336.274368047882,"y":20512.31889534635},"targetPosition":{"x":11115.407754950553,"y":20696.19406122658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"16c55335-8817-4121-a068-1c2d184fd814","savedPayload":{"position":{"x":11115.407754950553,"y":20696.19406122658},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"0f82ce78-91ac-4b61-b514-bb1a67c2ef0e","savedPayload":{"position":{"x":11479.867161113292,"y":20970.67675558434},"targetPosition":{"x":11192.60426111444,"y":20944.80644606634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dedc2ef0-61e4-45bd-921d-187c9a6f3ae1","savedPayload":{"position":{"x":11192.60426111444,"y":20944.80644606634},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Line","config":"{\n \"codeName\": \"line\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.line","project":"Superalgos","id":"42754005-58a0-4a8b-b839-938d11aeb0ab","savedPayload":{"position":{"x":11256.150288844477,"y":21396.302069109464},"targetPosition":{"x":11071.944013750086,"y":21175.564938419928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5fe10f78-a397-4fb1-bfeb-a506d44d60ef","savedPayload":{"position":{"x":11071.944013750086,"y":21175.564938419928},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Signal","config":"{\n \"codeName\": \"signal\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.signal","project":"Superalgos","id":"588045df-e0fb-4c07-adf3-1acd832088af","savedPayload":{"position":{"x":10797.950820895952,"y":21539.86945918945},"targetPosition":{"x":10823.646721472494,"y":21252.62950791361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2926733e-3962-4e7b-a492-7fcb437f536e","savedPayload":{"position":{"x":10823.646721472494,"y":21252.62950791361},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA12","config":"{\n \"codeName\": \"ema12\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema12","project":"Superalgos","id":"d9f6340c-15cd-499b-ba74-007b4c569b22","savedPayload":{"position":{"x":10368.265135258589,"y":21319.957798032858},"targetPosition":{"x":10589.161665237007,"y":21135.468617947237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29fb3e14-c1fd-4fa6-af1a-62b1c61ff1fc","savedPayload":{"position":{"x":10589.161665237007,"y":21135.468617947237},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA26","config":"{\n \"codeName\": \"ema26\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema26","project":"Superalgos","id":"748ed791-c88b-4776-b2cb-742758821641","savedPayload":{"position":{"x":10228.532072017708,"y":20858.685378975988},"targetPosition":{"x":10515.251077034834,"y":20884.15932519373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d1b7a8ce-c89b-4e0f-ac04-0f45d575524d","savedPayload":{"position":{"x":10515.251077034834,"y":20884.15932519373},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Histogram","config":"{\n \"codeName\": \"histogram\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.histogram","project":"Superalgos","id":"9652e52e-55c0-47ee-a90c-a1a700f6b989","savedPayload":{"position":{"x":10450.931882952533,"y":20432.63012287277},"targetPosition":{"x":10635.918022960017,"y":20653.34317252064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6157c979-57a2-473c-b19f-f79bb2f12c09","savedPayload":{"position":{"x":10635.918022960017,"y":20653.34317252064},"targetPosition":{"x":10853.93843725678,"y":20914.304101346162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7985ad16-8c8a-460f-9445-711df5e062a7","savedPayload":{"position":{"x":10820.520524012674,"y":19642.833450680413},"targetPosition":{"x":10873.998336763292,"y":19044.91738753494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\n/* EMA12 and EMA26 Calculation */\n\nlet candle = record.current\n\nvariable.ema12 = calculateEMA(12, candle.close, variable.previousEMA12)\nvariable.previousEMA12 = variable.ema12\n\nvariable.ema26 = calculateEMA(26, candle.close, variable.previousEMA26)\nvariable.previousEMA26 = variable.ema26\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}\n\n\n/* MACD Line Calculation */\n\nmacdLine = variable.ema12 - variable.ema26\n\nvariable.line = macdLine.toFixed(2)\n\n/* Signal Line Calculation (EMA9 of MACD Line) */\n\nmacdSignal = calculateSignalEMA(9, variable.line, variable.previousSignal)\nvariable.signal = macdSignal.toFixed(2)\nvariable.previousSignal = variable.signal \n \nfunction calculateSignalEMA(periods, currentSignal, previousEMA) {\n let k = 2 / (periods + 1)\n return currentSignal * k + variable.previousSignal * (1-k)\n}\n\n/* Histogram Calculation */\n\nhistogram = variable.line - variable.signal\nvariable.histogram = histogram.toFixed(2)","project":"Superalgos","id":"e1e871f6-1e87-423f-8214-ece80c4295eb","savedPayload":{"position":{"x":10505.009862041703,"y":19771.835648218937},"targetPosition":{"x":10543.550056258699,"y":19575.72157432896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c3390f8c-4865-42b1-aa00-eaa49d293121","savedPayload":{"position":{"x":10543.550056258699,"y":19575.72157432896},"targetPosition":{"x":10582.372331702407,"y":19378.90278460781},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\n/* SMA Calculation */\n\n/* \nAlthough we don't really need to set an array to access a number of candles,\nwe will do so in order to reuse the code built for the SMA indicator, and also\nso that the same code may be used for other MACD products that may require\naccessing more candles than are available in the span of two days.\n*/\n\nvariable.last100 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")\n\n/* EMA Calculation */\n\nvariable.previousEMA12 = 0\nvariable.previousEMA26 = 0\n\n/* MACD Line calculation */\n\nvariable.previousSignal = 0","project":"Superalgos","id":"a9600d4d-ddc7-4639-a8bd-d5f6840a1f04","savedPayload":{"position":{"x":10203.436981992574,"y":19508.616020266963},"targetPosition":{"x":10392.645210894565,"y":19444.146115591422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8ff5320-c74f-4f6e-8b15-f7284242f24e","savedPayload":{"position":{"x":10392.645210894565,"y":19444.146115591422},"targetPosition":{"x":10582.372331702407,"y":19378.90278460781},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c69aae16-d38f-4d9a-8174-4e664a22e579","savedPayload":{"position":{"x":10582.372331702407,"y":19378.90278460781},"targetPosition":{"x":10873.998336763292,"y":19044.91738753494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c0c9bf0-90af-4497-b4fb-49b5872b1119","savedPayload":{"position":{"x":10881.53338163749,"y":19075.507962566797},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MACD 122609","id":"fb08cb11-7983-4106-8b03-edf70baad4a0"}}},{"type":"Product Definition","name":"MACD 031016","config":"{\n \"codeName\": \"MACD-031016\",\n \"singularVariableName\": \"macd031016\",\n \"pluralVariableName\": \"macd031016s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-031016/Multi-Period-Market/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"19b1d791-d2ea-4f25-a6e1-fe0a64450745","savedPayload":{"position":{"x":10886.721295313957,"y":19260.64165917395},"targetPosition":{"x":10697.497627712586,"y":19044.13007223281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-031016/Multi-Period-Daily/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-031016/Multi-Period-Daily\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"ec2611a6-699b-45a5-beec-679dd4b7734a","savedPayload":{"position":{"x":10723.349200059154,"y":19331.120883448362},"targetPosition":{"x":10697.497627712586,"y":19044.13007223281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"7e2e4448-6bc6-4c1c-9a7f-54185fea3831","savedPayload":{"position":{"x":10683.170013970557,"y":19495.101575412737},"targetPosition":{"x":10537.538179194027,"y":19514.453813947806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"399e67a5-1b3c-4f13-b1a8-c8333b013471","savedPayload":{"position":{"x":10537.538179194027,"y":19514.453813947806},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"0e12c2f0-25f8-48c6-9920-4291c0154f92","savedPayload":{"position":{"x":10657.268396935517,"y":19717.416899180334},"targetPosition":{"x":10527.563546152456,"y":19639.343326632563},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1588b3ba-04e6-498f-baeb-857c55bf0c2f","savedPayload":{"position":{"x":10527.563546152456,"y":19639.343326632563},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Line","config":"{\n \"codeName\": \"line\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.line","project":"Superalgos","id":"5d5b5bb6-fcd8-4834-9da9-858c8fc756d6","savedPayload":{"position":{"x":10465.892709589938,"y":19861.76084561704},"targetPosition":{"x":10429.157958360434,"y":19714.635075417733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a1c75f48-5568-46da-a828-6d26a69b5021","savedPayload":{"position":{"x":10429.157958360434,"y":19714.635075417733},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Signal","config":"{\n \"codeName\": \"signal\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.signal","project":"Superalgos","id":"a42bb9fd-fb33-4c25-b3d3-7ce7c8839e08","savedPayload":{"position":{"x":10229.708784975619,"y":19826.880690510014},"targetPosition":{"x":10307.346983623258,"y":19696.618396883176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7d0b5eee-4b62-4e35-a421-e3825b0cdb2c","savedPayload":{"position":{"x":10307.346983623258,"y":19696.618396883176},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA3","config":"{\n \"codeName\": \"ema3\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema3","project":"Superalgos","id":"c725639d-6fa1-480f-b962-90be561f8464","savedPayload":{"position":{"x":10087.678744772229,"y":19635.409476370012},"targetPosition":{"x":10234.424712065067,"y":19597.877216139575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4406003b-bf04-4d4e-b9e5-fb444be155ee","savedPayload":{"position":{"x":10234.424712065067,"y":19597.877216139575},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA10","config":"{\n \"codeName\": \"ema10\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema10","project":"Superalgos","id":"fbfc968a-1b7e-48f6-935b-b40fe63bdc85","savedPayload":{"position":{"x":10131.729668295642,"y":19405.07564704049},"targetPosition":{"x":10252.876103907074,"y":19476.900338633335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d5cc4f53-cc80-457a-842f-a2259450f02f","savedPayload":{"position":{"x":10252.876103907074,"y":19476.900338633335},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Histogram","config":"{\n \"codeName\": \"histogram\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.histogram","project":"Superalgos","id":"9724655b-b624-425d-b21c-87c69ede1d0a","savedPayload":{"position":{"x":10318.346874528192,"y":19297.43611102241},"targetPosition":{"x":10363.906006323565,"y":19406.67573826183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0f070bb-08a6-4c05-8e49-49f7b6a3aa15","savedPayload":{"position":{"x":10363.906006323565,"y":19406.67573826183},"targetPosition":{"x":10390.150215257157,"y":19559.01315792594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5df9321-87e6-4c0b-892b-0af0e9b47d8d","savedPayload":{"position":{"x":10390.150215257157,"y":19559.01315792594},"targetPosition":{"x":10697.497627712586,"y":19044.13007223281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\n/* EMA3 and EMA10 Calculation */\n\nlet candle = record.current\n\nvariable.ema3 = calculateEMA(3, candle.close, variable.previousEMA3)\nvariable.previousEMA3 = variable.ema3\n\nvariable.ema10 = calculateEMA(10, candle.close, variable.previousEMA10)\nvariable.previousEMA10 = variable.ema10\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}\n\n/* MACD Line Calculation */\n\nmacdLine = variable.ema3 - variable.ema10\n\nvariable.line = macdLine.toFixed(2)\n\n/* Signal Line Calculation (EMA16 of MACD Line) */\n\nmacdSignal = calculateSignalEMA(16, variable.line, variable.previousSignal)\nvariable.signal = macdSignal.toFixed(2)\nvariable.previousSignal = variable.signal \n \nfunction calculateSignalEMA(periods, currentSignal, previousEMA) {\n let k = 2 / (periods + 1)\n return currentSignal * k + variable.previousSignal * (1-k)\n}\n\n/* Histogram Calculation */\n\nhistogram = variable.line - variable.signal\nvariable.histogram = histogram.toFixed(2)","project":"Superalgos","id":"6e3e0c8a-7600-4cf4-aa00-a29c8e94b42a","savedPayload":{"position":{"x":10029.125868102654,"y":19483.025575282372},"targetPosition":{"x":10170.129864806686,"y":19308.051218350676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba2052e5-b0b2-4cae-b4a8-3212eb5cbe62","savedPayload":{"position":{"x":10170.129864806686,"y":19308.051218350676},"targetPosition":{"x":10274.566507069212,"y":19178.486553166844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\n/* SMA Calculation */\n\n/* \nAlthough we don't really need to set an array to access a number of candles,\nwe will do so in order to reuse the code built for the SMA indicator, and also\nso that the same code may be used for other MACD products that may require\naccessing more candles than are available in the span of two days.\n*/\n\nvariable.last100 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")\n\n/* EMA Calculation */\n\nvariable.previousEMA3 = 0\nvariable.previousEMA10 = 0\n\n/* MACD Line calculation */\n\nvariable.previousSignal = 0","project":"Superalgos","id":"e009ff8c-ac89-4cff-b3c4-27777ff2173c","savedPayload":{"position":{"x":9876.597107234158,"y":19130.1545884193},"targetPosition":{"x":10075.747607657111,"y":19154.61399750635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fba3e3c4-5cf5-4925-9e02-36981e662f0d","savedPayload":{"position":{"x":10075.747607657111,"y":19154.61399750635},"targetPosition":{"x":10274.566507069212,"y":19178.486553166844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6659182a-7112-4c25-8fac-69f8745f9d2f","savedPayload":{"position":{"x":10274.566507069212,"y":19178.486553166844},"targetPosition":{"x":10697.497627712586,"y":19044.13007223281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d1482dc0-e9f1-47ba-b75e-961fa914a53a","savedPayload":{"position":{"x":10690.460099933747,"y":19075.532012521126},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MACD 031016","id":"03816d0f-361f-4c6c-8f85-0bf2dfff1c21"}}},{"type":"Product Definition","name":"MACD 081709","config":"{\n \"codeName\": \"MACD-081709\",\n \"singularVariableName\": \"macd081709\",\n \"pluralVariableName\": \"macd081709s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-081709/Multi-Period-Market/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"c390cbd3-0ba0-4507-8614-42c88f4ce7e6","savedPayload":{"position":{"x":10613.518419770628,"y":19245.299486730863},"targetPosition":{"x":10537.214137156472,"y":18967.247774923533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-081709/Multi-Period-Daily/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-081709/Multi-Period-Daily\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"29e18539-f188-4d29-9531-25cd3ee8f282","savedPayload":{"position":{"x":10435.645862746422,"y":19237.041723013193},"targetPosition":{"x":10537.214137156472,"y":18967.247774923533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"94ec28d4-c1bc-4c6d-8887-75877f9a2343","savedPayload":{"position":{"x":10004.775102232743,"y":20388.599367455117},"targetPosition":{"x":9722.86599689049,"y":20330.497944797815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5135ffe3-47fa-4642-8c46-0994438d7e7a","savedPayload":{"position":{"x":9722.86599689049,"y":20330.497944797815},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"d3388f28-900d-452f-b83c-936c50b4344e","savedPayload":{"position":{"x":9717.764878762951,"y":20811.831927891653},"targetPosition":{"x":9559.548903700634,"y":20571.70441892552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8056d769-ea76-4ec0-88ff-952921e48d2c","savedPayload":{"position":{"x":9559.548903700634,"y":20571.70441892552},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Line","config":"{\n \"codeName\": \"line\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.line","project":"Superalgos","id":"3864df8c-ee73-4f0e-be03-718954a4dbfc","savedPayload":{"position":{"x":9216.296575081466,"y":20908.59525084883},"targetPosition":{"x":9274.07409133314,"y":20626.144920323983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a69347ff-6f46-464a-834a-4d441b8ff291","savedPayload":{"position":{"x":9274.07409133314,"y":20626.144920323983},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Signal","config":"{\n \"codeName\": \"signal\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.signal","project":"Superalgos","id":"9db26074-5aaf-4f3e-83aa-bb1064981c64","savedPayload":{"position":{"x":8793.039526838667,"y":20621.831590077083},"targetPosition":{"x":9033.169527976333,"y":20463.382643012537},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cf022fb7-6c7e-432d-ae6a-fe0f4ed28116","savedPayload":{"position":{"x":9033.169527976333,"y":20463.382643012537},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA8","config":"{\n \"codeName\": \"ema8\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema8","project":"Superalgos","id":"93f62cc4-1f47-4b75-8a7c-c8dbd75b0c9f","savedPayload":{"position":{"x":8695.944621273047,"y":20120.697072596984},"targetPosition":{"x":8978.157967200641,"y":20178.225205053008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"80e1f38f-36c5-440e-a12b-f9154efede9f","savedPayload":{"position":{"x":8978.157967200641,"y":20178.225205053008},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA17","config":"{\n \"codeName\": \"ema17\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema17","project":"Superalgos","id":"73b43260-1688-460b-862c-b8fb7406cc10","savedPayload":{"position":{"x":8981.811195966879,"y":19696.893043245826},"targetPosition":{"x":9140.673473196388,"y":19937.14065657381},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a2552af4-df0a-4fcf-85ae-1e35dbcb2608","savedPayload":{"position":{"x":9140.673473196388,"y":19937.14065657381},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Histogram","config":"{\n \"codeName\": \"histogram\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.histogram","project":"Superalgos","id":"94cb6751-f4a9-4bad-a8a9-d53d3375a77c","savedPayload":{"position":{"x":9483.038369136804,"y":19599.659511871865},"targetPosition":{"x":9426.15631702869,"y":19881.36227464148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"52e3a47c-f282-4edc-83cb-8bce988e054b","savedPayload":{"position":{"x":9426.15631702869,"y":19881.36227464148},"targetPosition":{"x":9350.224572722986,"y":20254.131624293503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f5a29a3d-06eb-4298-80d0-3d6e22957829","savedPayload":{"position":{"x":10036.459628381115,"y":19297.88787620424},"targetPosition":{"x":10537.214137156472,"y":18967.247774923533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\n/* EMA8 and EMA26 Calculation */\n\nlet candle = record.current\n\nvariable.ema8 = calculateEMA(8, candle.close, variable.previousEMA8)\nvariable.previousEMA8 = variable.ema8\n\nvariable.ema17 = calculateEMA(17, candle.close, variable.previousEMA17)\nvariable.previousEMA17 = variable.ema17\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}\n\n/* MACD Line Calculation */\n\nmacdLine = variable.ema8 - variable.ema17\n\nvariable.line = macdLine.toFixed(2)\n\n/* Signal Line Calculation (EMA9 of MACD Line) */\n\nmacdSignal = calculateSignalEMA(9, variable.line, variable.previousSignal)\nvariable.signal = macdSignal.toFixed(2)\nvariable.previousSignal = variable.signal \n \nfunction calculateSignalEMA(periods, currentSignal, previousEMA) {\n let k = 2 / (periods + 1)\n return currentSignal * k + variable.previousSignal * (1-k)\n}\n\n/* Histogram Calculation */\n\nhistogram = variable.line - variable.signal\nvariable.histogram = histogram.toFixed(2)","project":"Superalgos","id":"0290fa4a-851b-4e21-b35e-61e106fc8f81","savedPayload":{"position":{"x":9739.611585291297,"y":19132.230757611527},"targetPosition":{"x":9916.181042433882,"y":19039.919465848332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2a30807-83b5-4c99-8f27-55783b4487ce","savedPayload":{"position":{"x":9916.181042433882,"y":19039.919465848332},"targetPosition":{"x":10094.210800858524,"y":18947.8123818655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\n/* SMA Calculation */\n\n/* \nAlthough we don't really need to set an array to access a number of candles,\nwe will do so in order to reuse the code built for the SMA indicator, and also\nso that the same code may be used for other MACD products that may require\naccessing more candles than are available in the span of two days.\n*/\n\nvariable.last100 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")\n\n/* EMA Calculation */\n\nvariable.previousEMA8 = 0\nvariable.previousEMA17 = 0\n\n/* MACD Line calculation */\n\nvariable.previousSignal = 0","project":"Superalgos","id":"b8dca759-eb3d-4b8b-8a20-99679727f272","savedPayload":{"position":{"x":9420.749196725117,"y":18517.66945962415},"targetPosition":{"x":9756.573731925298,"y":18732.64680174051},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a16923a7-9b13-4526-818d-9278fdc509a0","savedPayload":{"position":{"x":9756.573731925298,"y":18732.64680174051},"targetPosition":{"x":10094.210800858524,"y":18947.8123818655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8136f190-cf6a-4ca3-8620-7153ad82a295","savedPayload":{"position":{"x":10094.210800858524,"y":18947.8123818655},"targetPosition":{"x":10537.214137156472,"y":18967.247774923533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"683e6b29-9f82-4a8e-93eb-20ac0e81a750","savedPayload":{"position":{"x":10517.727599202863,"y":18992.26955497613},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MACD 081709","id":"43695164-d8aa-40d8-bbf4-ee8cbbdec3f0"}}},{"type":"Product Definition","name":"MACD 245209","config":"{\n \"codeName\": \"MACD-245209\",\n \"singularVariableName\": \"macd245209\",\n \"pluralVariableName\": \"macd245209s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-245209/Multi-Period-Market/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"89254c6c-9be2-4037-b063-467edc660d10","savedPayload":{"position":{"x":10376.1393837043,"y":19111.495007170786},"targetPosition":{"x":10426.87589143043,"y":18828.16181336725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-245209/Multi-Period-Daily/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/Sparta/MACD/Output/MACD-245209/Multi-Period-Daily\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"8a9dde13-e4b8-40f3-80bc-ea51050b2f08","savedPayload":{"position":{"x":10218.996619612599,"y":19027.476394114223},"targetPosition":{"x":10426.87589143043,"y":18828.16181336725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.begin","project":"Superalgos","id":"adee537e-2c4d-4454-9006-05171c09313a","savedPayload":{"position":{"x":10065.09657719661,"y":19097.170412792806},"targetPosition":{"x":9959.054573730375,"y":18995.638031418344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38a52afc-8a7c-49c9-8068-dbe438ac64d0","savedPayload":{"position":{"x":9959.054573730375,"y":18995.638031418344},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"83439522-7972-454e-af41-d516ee51b26f","savedPayload":{"position":{"x":9874.792284431187,"y":19216.384141462513},"targetPosition":{"x":9855.465717460982,"y":19066.456844369644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"03c98b2f-4e9c-4800-9d9b-5c6ef3f94665","savedPayload":{"position":{"x":9855.465717460982,"y":19066.456844369644},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Line","config":"{\n \"codeName\": \"line\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.line","project":"Superalgos","id":"6aa9ee37-3044-444c-bc27-e09dd444f182","savedPayload":{"position":{"x":9643.60999992673,"y":19156.09277338317},"targetPosition":{"x":9735.787301667027,"y":19035.953576187934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c9237bcd-4d76-4460-bcbb-8474843efc03","savedPayload":{"position":{"x":9735.787301667027,"y":19035.953576187934},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Signal","config":"{\n \"codeName\": \"signal\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.signal","project":"Superalgos","id":"35ac625e-5516-4a15-b92d-f3a5dc4d8ec0","savedPayload":{"position":{"x":9523.13458781412,"y":18950.095948852806},"targetPosition":{"x":9673.746751082997,"y":18929.846553929114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8dd22ed9-76d1-4108-8a7f-ed4c03d7eede","savedPayload":{"position":{"x":9673.746751082997,"y":18929.846553929114},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA24","config":"{\n \"codeName\": \"ema24\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema24","project":"Superalgos","id":"e56fbdd1-4b1c-484b-bcbb-6b9ec6414080","savedPayload":{"position":{"x":9580.381739936509,"y":18722.962193273604},"targetPosition":{"x":9705.056734477146,"y":18811.13505212322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57f32362-cb33-471d-a855-2c3cddb88bf9","savedPayload":{"position":{"x":9705.056734477146,"y":18811.13505212322},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"EMA52","config":"{\n \"codeName\": \"ema52\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.ema52","project":"Superalgos","id":"619feddc-3ff2-4a97-aa8b-a924b80bd099","savedPayload":{"position":{"x":9780.811902643825,"y":18581.635580396105},"targetPosition":{"x":9823.369966435406,"y":18753.914679573878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93f3c29f-178d-44fb-8f64-21e617d2387e","savedPayload":{"position":{"x":9823.369966435406,"y":18753.914679573878},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Histogram","config":"{\n \"codeName\": \"histogram\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.histogram","project":"Superalgos","id":"615f9b7a-676f-444b-8fc8-8355c8c8aef6","savedPayload":{"position":{"x":10557.20844825639,"y":17953.51352709944},"targetPosition":{"x":10195.211783436078,"y":18430.706978611306},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"650fc7dc-1ea8-426d-a720-89efdec4292e","savedPayload":{"position":{"x":10195.211783436078,"y":18430.706978611306},"targetPosition":{"x":9832.484405981151,"y":18908.50466549889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"371d2f8e-8868-4933-baee-9827c0496fc1","savedPayload":{"position":{"x":9832.484405981151,"y":18908.50466549889},"targetPosition":{"x":10426.87589143043,"y":18828.16181336725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\n/* EMA24 and EMA52 Calculation */\n\nlet candle = record.current\n\nvariable.ema24 = calculateEMA(24, candle.close, variable.previousEMA24)\nvariable.previousEMA24 = variable.ema24\n\nvariable.ema52 = calculateEMA(52, candle.close, variable.previousEMA52)\nvariable.previousEMA52 = variable.ema52\n\n\nfunction calculateEMA(periods, price, previousEMA) {\n let k = 2 / (periods + 1)\n return price * k + previousEMA * (1-k)\n}\n\n/* MACD Line Calculation */\n\nmacdLine = variable.ema24 - variable.ema52\n\nvariable.line = macdLine.toFixed(2)\n\n/* Signal Line Calculation (EMA9 of MACD Line) */\n\nmacdSignal = calculateSignalEMA(9, variable.line, variable.previousSignal)\nvariable.signal = macdSignal.toFixed(2)\nvariable.previousSignal = variable.signal \n \nfunction calculateSignalEMA(periods, currentSignal, previousEMA) {\n let k = 2 / (periods + 1)\n return currentSignal * k + variable.previousSignal * (1-k)\n}\n\n/* Histogram Calculation */\n\nhistogram = variable.line - variable.signal\nvariable.histogram = histogram.toFixed(2)","project":"Superalgos","id":"4f4e66a9-4791-494a-ada7-72f3d5db7415","savedPayload":{"position":{"x":9676.605253217165,"y":18656.30033211436},"targetPosition":{"x":9881.97081131657,"y":18648.625645002063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8e07801-1e77-44a5-a232-fd672264f252","savedPayload":{"position":{"x":9881.97081131657,"y":18648.625645002063},"targetPosition":{"x":10036.519515504793,"y":18617.662817915643},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\n/* SMA Calculation */\n\n/* \nAlthough we don't really need to set an array to access a number of candles,\nwe will do so in order to reuse the code built for the SMA indicator, and also\nso that the same code may be used for other MACD products that may require\naccessing more candles than are available in the span of two days.\n*/\n\nvariable.last100 = []\n//console.log(timeFrameLabel + \" - Initialization of SMA - *************\")\n\n/* EMA Calculation */\n\nvariable.previousEMA24 = 0\nvariable.previousEMA52 = 0\n\n/* MACD Line calculation */\n\nvariable.previousSignal = 0","project":"Superalgos","id":"5f25ca07-07ce-49a7-a397-5d2f3e89c0c3","savedPayload":{"position":{"x":9817.184770239981,"y":18278.14510500025},"targetPosition":{"x":9931.342375154853,"y":18447.230549517877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dd01ebc2-8204-4b51-83d9-92d416521553","savedPayload":{"position":{"x":9931.342375154853,"y":18447.230549517877},"targetPosition":{"x":10036.519515504793,"y":18617.662817915643},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e1a8b841-84d8-4ddd-822b-d81fe2b9a313","savedPayload":{"position":{"x":10036.519515504793,"y":18617.662817915643},"targetPosition":{"x":10426.87589143043,"y":18828.16181336725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"47984765-8180-45cf-a9eb-f0a8b22d165d","savedPayload":{"position":{"x":10398.332274676726,"y":18842.11885956144},"targetPosition":{"x":10786.48556076186,"y":18655.25874759878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"MACD 245209","id":"2fe60a0e-dd3a-4bb8-a321-4742389ab930"}}}],"id":"7724b857-30aa-4d3c-9ab7-e70895229f2a","savedPayload":{"position":{"x":10786.673182942548,"y":18705.4854210064},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Relative Strenght Index (RSI)","config":"{\n\"codeName\": \"RSI\",\n\"repo\": \"RSI-Indicator-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Calculates RSI.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market RSI14","project":"Superalgos","id":"41eb05b7-0222-49b7-9b62-f14f43302f8f","savedPayload":{"position":{"x":10929.798362268186,"y":19635.71782522133},"targetPosition":{"x":10595.346188357256,"y":19635.71782522133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"5ec62760-e144-4496-98ab-0415a4b315ec"}}}],"outputDatasetFolders":[],"id":"35d2683b-470d-44e0-97bb-6075e6b5cc92","savedPayload":{"position":{"x":10595.346188357256,"y":19635.71782522133},"targetPosition":{"x":10293.068156950681,"y":19461.197522418635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"ea692963-60c5-445b-921c-f2be614186d7","savedPayload":{"position":{"x":10467.588459753377,"y":20112.353187521097},"targetPosition":{"x":10467.588459753377,"y":19763.47555382521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strenght Index (RSI) Multi-Period-Market","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"4211e16a-a54f-4049-941e-fd3be8244852","savedPayload":{"position":{"x":10168.348880730115,"y":19936.241605326482},"targetPosition":{"x":10467.588459753377,"y":19763.47555382521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"bbff3247-937a-429e-9959-c896b8207f26"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"9d9b2836-9eab-437b-9426-2cef828cd0e3","savedPayload":{"position":{"x":10162.163267304335,"y":19587.13823674746},"targetPosition":{"x":10467.588459753377,"y":19763.47555382521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"1a42abe3-eaab-444f-8687-c3930dc28a06","savedPayload":{"position":{"x":10467.588459753377,"y":19763.47555382521},"targetPosition":{"x":10293.068156950681,"y":19461.197522418635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"bbff3247-937a-429e-9959-c896b8207f26","savedPayload":{"position":{"x":10293.068156950681,"y":19810.238128024026},"targetPosition":{"x":10293.068156950681,"y":19461.197522418635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"b2babf3e-22f6-4064-b4e5-840eec9ff707","savedPayload":{"position":{"x":9961.779140505223,"y":19353.55519582988},"targetPosition":{"x":10293.068156950681,"y":19461.197522418635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"ae4d9310-3446-41b3-88b9-90978defd305","savedPayload":{"position":{"x":9990.790125544107,"y":19635.71782522133},"targetPosition":{"x":10293.068156950681,"y":19461.197522418635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"96f31416-5090-428a-be83-985a0b3ab275","savedPayload":{"position":{"x":10504.521212112479,"y":18951.679991021538},"targetPosition":{"x":10504.196648907777,"y":18538.095869788966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Calculates RSI\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily RSI14","project":"Superalgos","id":"7539f591-7ca7-4fd5-9142-a6b470f8ef8e","savedPayload":{"position":{"x":10061.980638233039,"y":19593.88160485174},"targetPosition":{"x":9889.788554929411,"y":19593.88160485174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f1556d09-f134-4678-83fb-04002d1dcd34"}}}],"outputDatasetFolders":[],"id":"f5a20865-68a4-4e3f-8547-afc741d7fb85","savedPayload":{"position":{"x":9889.788554929411,"y":19593.88160485174},"targetPosition":{"x":9799.450198684619,"y":19256.734269473916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Relative Strenght Index (RSI) Multi-Period-Daily","config":"{\"mainUtility\": \"Self Reference\"}","project":"Superalgos","id":"632dbd10-6cf7-453a-8e5c-4a74d33fcaf4","savedPayload":{"position":{"x":9709.111842439826,"y":19766.15125195415},"targetPosition":{"x":9709.111842439826,"y":19593.88160485174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2d1d4e5a-49c3-4d9a-958a-195d3f0949c2"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{\"mainUtility\": \"Market Ending Point\"}","project":"Superalgos","id":"5a1a8917-5d85-4f33-b552-a314ee6c54db","savedPayload":{"position":{"x":9578.18666368231,"y":19724.806783609256},"targetPosition":{"x":9709.111842439826,"y":19593.88160485174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"9ea493a4-33b1-445e-975d-b202994079c8","savedPayload":{"position":{"x":9519.007852631566,"y":19593.88160485174},"targetPosition":{"x":9709.111842439826,"y":19593.88160485174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"86af23c8-eb30-499a-9d88-39e0e9df06e5","savedPayload":{"position":{"x":9589.839215203403,"y":19474.608977615317},"targetPosition":{"x":9709.111842439826,"y":19593.88160485174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"6e2f9722-24f9-40dc-9e38-f4dcbbbeb38a","savedPayload":{"position":{"x":9709.111842439826,"y":19593.88160485174},"targetPosition":{"x":9799.450198684619,"y":19256.734269473916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"2d1d4e5a-49c3-4d9a-958a-195d3f0949c2","savedPayload":{"position":{"x":9552.641219551588,"y":19503.543248606948},"targetPosition":{"x":9799.450198684619,"y":19256.734269473916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"525140eb-d037-4b8d-9eef-f01574ca49ff","savedPayload":{"position":{"x":9428.783085643507,"y":19136.29722370107},"targetPosition":{"x":9799.450198684619,"y":19256.734269473916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"9162d141-5486-4a0d-a3e4-71c74060beb8","savedPayload":{"position":{"x":9462.302863306795,"y":19166.395913229124},"targetPosition":{"x":9799.450198684619,"y":19256.734269473916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f1177bcd-22dc-425b-8f30-878844aa82b8","savedPayload":{"position":{"x":10212.639630411579,"y":18830.524943764467},"targetPosition":{"x":10504.196648907777,"y":18538.095869788966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"RSI14","config":"{\n \"codeName\": \"RSI-14\",\n \"singularVariableName\": \"rsi14\",\n \"pluralVariableName\": \"rsi14s\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"5ec62760-e144-4496-98ab-0415a4b315ec","savedPayload":{"position":{"x":9959.187388422866,"y":18704.822410946334},"targetPosition":{"x":10073.58778700661,"y":18537.683135495725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"f1556d09-f134-4678-83fb-04002d1dcd34","savedPayload":{"position":{"x":9879.45688486532,"y":18594.772529978836},"targetPosition":{"x":10073.58778700661,"y":18537.683135495725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"Begin","code":"record.current.begin","project":"Superalgos","id":"069fdb18-b72b-4fd2-9255-061f7a4f0b7e","savedPayload":{"position":{"x":9517.875947120625,"y":18556.67128700127},"targetPosition":{"x":9631.325767274455,"y":18496.651967229038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"309f6917-c246-4d84-89ac-abca872eb828","savedPayload":{"position":{"x":9631.325767274455,"y":18496.651967229038},"targetPosition":{"x":9738.021341734333,"y":18416.030469848487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"record.current.end","project":"Superalgos","id":"2128f049-e006-4e71-b9a5-91655bfcb290","savedPayload":{"position":{"x":9478.4821500537,"y":18346.65547115166},"targetPosition":{"x":9596.82220439169,"y":18382.43042266245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38a593cc-3232-4977-9597-18939c86bb5d","savedPayload":{"position":{"x":9596.82220439169,"y":18382.43042266245},"targetPosition":{"x":9738.021341734333,"y":18416.030469848487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Value","config":"{\n \"codeName\": \"value\",\n \"isString\": false\n}","project":"Superalgos","formula":{"type":"Formula","code":"variable.value","project":"Superalgos","id":"c5e2ca09-53a7-4655-b0dc-242b7fbd11f0","savedPayload":{"position":{"x":9629.870832502647,"y":18211.036270775046},"targetPosition":{"x":9693.017643582556,"y":18299.754288449505},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5988292a-69bf-4e2d-833b-dccb78aa32a8","savedPayload":{"position":{"x":9693.017643582556,"y":18299.754288449505},"targetPosition":{"x":9738.021341734333,"y":18416.030469848487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b12a20d9-1b6a-4525-b50c-8edf1fc3bff8","savedPayload":{"position":{"x":9738.021341734333,"y":18416.030469848487},"targetPosition":{"x":10073.58778700661,"y":18537.683135495725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Loop Code */\n\n/* \nCalculation method credit: https://www.macroption.com/rsi-calculation/\n\nRSI Calculation Formula\n\n RSI = 100 – 100 / ( 1 + RS )\n RS = Relative Strength = AvgU / AvgD\n AvgU = average of all up moves in the last N price bars\n AvgD = average of all down moves in the last N price bars\n N = the period of RSI\n There are 3 different commonly used methods for the exact calculation of AvgU and AvgD (see details below)\n\nRSI Calculation Step by Step\n\n Calculate up moves and down moves (get U and D)\n Average the up moves and down moves (get AvgU and AvgD)\n Calculate Relative Strength (get RS)\n Calculate the Relative Strength Index (get RSI)\n*/\n\n/* Calculating Up Moves and Down Moves */\n\n//let candle = record.current // Our main dependencies are candles \n//let candlePrevious = record.previous\n\nif (record.previous !== undefined) {\n if (record.current.close > record.previous.close) {\n variable.last14U.push(record.current.close - record.previous.close) // Add win to last 14 array.\n } else {\n variable.last14U.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (record.current.close < record.previous.close) {\n variable.last14D.push(record.previous.close - record.current.close) // Add win to last 14 array.\n } else {\n variable.last14D.push(0) // Add 0 to keep proper count of records in the last 14 array.\n }\n \n if (variable.last14U.length > 14) {\n variable.last14U.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n if (variable.last14D.length > 14) {\n variable.last14D.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 14 elements.\n }\n \n /* Calculating Averages of Up Moves and Down Moves */\n \n variable.avgU = calculateAVGU(14)\n variable.avgD = calculateAVGD(14)\n \n /* Calculating Relative Strength */\n \n if (variable.avgD > 0) {\n relativeStrength = variable.avgU / variable.avgD\n } else {\n relativeStrength = 0\n }\n\n /* Calculating RSI */\n\n relativeStrengthIndex = 100 - 100 / ( 1 + relativeStrength)\n\n if (relativeStrengthIndex !== undefined) {\n variable.value = relativeStrengthIndex.toFixed(2)\n } else {\n variable.value = 0\n }\n} else {\n variable.value = 0\n}\n\nfunction calculateAVGU(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last14U.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sumU = 0 // Initialize sum variable. \n for (let j = variable.last14U.length - periods; j < variable.last14U.length; j++) { // Iterate through the last periods\n sumU = sumU + variable.last14U[j]\n }\n let averageU = sumU / periods\n return averageU\n}\n\nfunction calculateAVGD(periods) { // Having a function avoids us to repeat code.\n /* We check we have enough values to make the calculation */\n if (variable.last14D.length < periods) { return 0 } // If we dont, we define the value is zero.\n\n let sumD = 0 // Initialize sum variable. \n for (let i = variable.last14D.length - periods; i < variable.last14D.length; i++) { // Iterate through the last periods\n sumD = sumD + variable.last14D[i]\n }\n let averageD = sumD / periods\n return averageD\n}","project":"Superalgos","id":"a00ed092-3bc1-4288-979d-34c204713d65","savedPayload":{"position":{"x":9465.90900471759,"y":18005.04044154868},"targetPosition":{"x":9649.711686995086,"y":18086.64210999337},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c2f8b23a-4e60-4181-9c19-ed243eb151cb","savedPayload":{"position":{"x":9649.711686995086,"y":18086.64210999337},"targetPosition":{"x":9826.005578999046,"y":18209.124559346557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"/* Initialization Code*/\n\n/* \nWe keep two separate arrays to store last 14 price increments or losses.\n*/\n\nvariable.last14U = []\nvariable.last14D = []","project":"Superalgos","id":"59da2324-377e-4307-a6d1-b9cf170733ba","savedPayload":{"position":{"x":9784.388121724369,"y":17810.542708299774},"targetPosition":{"x":9805.661660940026,"y":18009.88495784419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aca0a380-6355-42b9-876b-6932d6d13105","savedPayload":{"position":{"x":9805.661660940026,"y":18009.88495784419},"targetPosition":{"x":9826.005578999046,"y":18209.124559346557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5c066df5-2a29-4c74-b7bc-dc5ea1329089","savedPayload":{"position":{"x":9826.005578999046,"y":18209.124559346557},"targetPosition":{"x":10073.58778700661,"y":18537.683135495725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e24248b9-90df-4b26-b5cc-0bac80efa0c7","savedPayload":{"position":{"x":10073.58778700661,"y":18537.683135495725},"targetPosition":{"x":10504.196648907777,"y":18538.095869788966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"RSI 14","id":"72403d40-2a64-4e51-8eaf-b1a872e4474e"}}}],"id":"276e2181-0c8d-4d56-94e0-1999ec317cb5","savedPayload":{"position":{"x":10468.475131408602,"y":18573.683472540346},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Simple Moving Average (SMA)","config":"{\n\"codeName\": \"Plotter SMA\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"SMA Popular","config":"{\n\t\"codeName\": \"SMA-Popular\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"SMA 20 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma20","project":"Superalgos","id":"81557791-d18b-472c-b152-612294f281cc","savedPayload":{"position":{"x":8234.942123098328,"y":19481.69403121839},"targetPosition":{"x":9294.01292901739,"y":19389.037341829207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b932c738-3b05-4b1f-a822-2ba7bae30252","savedPayload":{"position":{"x":9294.01292901739,"y":19389.037341829207},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 20 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma20","project":"Superalgos","id":"dd573845-585b-4a89-8518-425173e02916","savedPayload":{"position":{"x":8611.375979660901,"y":18076.82375283777},"targetPosition":{"x":9482.229857298677,"y":18686.602202638896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"44ba79ce-2ad1-4bb7-87db-df0aa58e6440","savedPayload":{"position":{"x":9482.229857298677,"y":18686.602202638896},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 50 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma50","project":"Superalgos","id":"054b7477-497f-46f9-b33e-de27dc3d494f","savedPayload":{"position":{"x":9802.77425184245,"y":17242.59770164623},"targetPosition":{"x":10077.92899338945,"y":18269.489177043128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"00efabf8-701d-44b1-a590-b8399149dfbb","savedPayload":{"position":{"x":10077.92899338945,"y":18269.489177043128},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 50 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma50","project":"Superalgos","id":"2e18404b-0350-4720-95d1-77533ced3986","savedPayload":{"position":{"x":11251.66844717232,"y":17369.359518386107},"targetPosition":{"x":10802.376091054386,"y":18332.870085413066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"084b4468-49d2-4ad2-a716-ebc338c34248","savedPayload":{"position":{"x":10802.376091054386,"y":18332.870085413066},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 100 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma100","project":"Superalgos","id":"9e730b8b-7f20-41df-9126-9d9aae2f8ca6","savedPayload":{"position":{"x":12280.10486899037,"y":18397.795940204156},"targetPosition":{"x":11316.59430196341,"y":18847.08829632209},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bbacba1b-6b2d-48b7-a440-986a04c61858","savedPayload":{"position":{"x":11316.59430196341,"y":18847.08829632209},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 100 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma100","project":"Superalgos","id":"922d462b-1e9f-4766-859d-330041428bc0","savedPayload":{"position":{"x":12406.866685730245,"y":19846.690135534027},"targetPosition":{"x":11379.975210333349,"y":19571.535393987026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"270a8be8-ad51-4061-abe1-a4c7234eb88a","savedPayload":{"position":{"x":11379.975210333349,"y":19571.535393987026},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 200 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma200","project":"Superalgos","id":"4278cffb-da8c-458e-b014-449f8487204b","savedPayload":{"position":{"x":11572.640634538708,"y":21038.088407715575},"targetPosition":{"x":10962.86218473758,"y":20167.2345300778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cd242031-8d7a-4cee-a680-156b0be7c7c7","savedPayload":{"position":{"x":10962.86218473758,"y":20167.2345300778},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 200 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma200","project":"Superalgos","id":"a3b73c57-a9b2-4a55-9232-9bacf741a933","savedPayload":{"position":{"x":10167.770356158086,"y":21414.52226427815},"targetPosition":{"x":10260.427045547269,"y":20355.451458359086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"328b048e-eb4a-4a02-ad95-a17cd170c4a7","savedPayload":{"position":{"x":10260.427045547269,"y":20355.451458359086},"targetPosition":{"x":10353.083734936452,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6755d98f-e1de-4ae9-b688-d06ab9cc543e","savedPayload":{"position":{"x":10353.083734936452,"y":19296.380652440024},"targetPosition":{"x":9601.347001086557,"y":20048.11738628992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"6368c66e-47fc-486d-8c03-e2ed303de825","savedPayload":{"position":{"x":11178.547959577456,"y":18269.489177043128},"targetPosition":{"x":10903.393218030455,"y":19296.380652440024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b0d22693-8100-49e9-b92e-11a8a55a5480","savedPayload":{"position":{"x":10903.393218030455,"y":19296.380652440024},"targetPosition":{"x":10628.238476483453,"y":20323.27212783692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 20 End","project":"Superalgos","id":"d9dae274-33d5-403d-a5ff-5514104df62e","savedPayload":{"position":{"x":10085.994679600848,"y":21262.465934126652},"targetPosition":{"x":10628.238476483453,"y":20323.27212783692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 20 End","id":"44ba79ce-2ad1-4bb7-87db-df0aa58e6440"}}},{"type":"Polygon Vertex","name":"SMA 20 Begin","project":"Superalgos","id":"45823ead-7d67-409c-8160-ea36496c412e","savedPayload":{"position":{"x":10101.501563544349,"y":19410.937032404407},"targetPosition":{"x":10628.238476483453,"y":20323.27212783692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 20 Begin","id":"b932c738-3b05-4b1f-a822-2ba7bae30252"}}}],"id":"ffe11ebb-d04f-4bf6-b6ff-43382be7c347","savedPayload":{"position":{"x":10628.238476483453,"y":20323.27212783692},"targetPosition":{"x":9601.347001086557,"y":20048.11738628992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b0de67a4-9a26-40ce-aa19-f5336145f871","savedPayload":{"position":{"x":11930.284693427351,"y":20524.699378592813},"targetPosition":{"x":10903.393218030455,"y":20799.854120139815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f06c2d68-11d4-40e0-99df-43a758ca0123","savedPayload":{"position":{"x":10903.393218030455,"y":20799.854120139815},"targetPosition":{"x":9876.501742633558,"y":21075.008861686816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 50 End","project":"Superalgos","id":"baf11fde-1f46-4e77-a8fe-d19a3ee8a4b2","savedPayload":{"position":{"x":9356.176491753184,"y":21976.23863267265},"targetPosition":{"x":9876.501742633558,"y":21075.008861686816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 50 End","id":"084b4468-49d2-4ad2-a716-ebc338c34248"}}},{"type":"Polygon Vertex","name":"SMA 50 Begin","project":"Superalgos","id":"bb6ef8cd-1473-4200-9c0e-35b5eab40259","savedPayload":{"position":{"x":9351.254908732608,"y":20165.254658855683},"targetPosition":{"x":9876.501742633558,"y":21075.008861686816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 50 Begin","id":"00efabf8-701d-44b1-a590-b8399149dfbb"}}}],"id":"c867bef2-aa91-4753-9b27-68f88d42370e","savedPayload":{"position":{"x":9876.501742633558,"y":21075.008861686816},"targetPosition":{"x":9601.347001086557,"y":20048.11738628992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 100","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b03ef9cb-fef3-4a54-bf5a-a85528fa2699","savedPayload":{"position":{"x":10664.463285431131,"y":21551.59085398971},"targetPosition":{"x":9601.347001086557,"y":21551.59085398971},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"baf25122-e7de-4283-b638-cfe2766220ac","savedPayload":{"position":{"x":9601.347001086557,"y":21551.59085398971},"targetPosition":{"x":8849.610267236661,"y":20799.854120139815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 100 Begin","project":"Superalgos","id":"8657980b-1796-4291-bba6-87520122b302","savedPayload":{"position":{"x":8314.085047829074,"y":21727.411008888226},"targetPosition":{"x":8849.610267236661,"y":20799.854120139815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 100 Begin","id":"bbacba1b-6b2d-48b7-a440-986a04c61858"}}},{"type":"Polygon Vertex","name":"SMA 100 End","project":"Superalgos","id":"45403abf-a4b1-4f8a-9d18-8ee72fef1792","savedPayload":{"position":{"x":8323.508001529335,"y":19888.618265957626},"targetPosition":{"x":8849.610267236661,"y":20799.854120139815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 100 End","id":"270a8be8-ad51-4061-abe1-a4c7234eb88a"}}}],"id":"7473f9b9-7737-4ee1-8418-39b96d8365c3","savedPayload":{"position":{"x":8849.610267236661,"y":20799.854120139815},"targetPosition":{"x":9601.347001086557,"y":20048.11738628992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 200","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"9475aa23-1561-45f6-8129-9d7ffaf0bb22","savedPayload":{"position":{"x":8024.1460425956575,"y":21826.74559553671},"targetPosition":{"x":8299.300784142659,"y":20799.854120139815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9007d9ad-f2b5-45fb-a7b3-b9579c74866d","savedPayload":{"position":{"x":8299.300784142659,"y":20799.854120139815},"targetPosition":{"x":8574.45552568966,"y":19772.96264474292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 200 Begin","project":"Superalgos","id":"0b3d001b-060a-4d72-94e7-d8e9f76ef1ae","savedPayload":{"position":{"x":8049.264063956005,"y":20682.620940166973},"targetPosition":{"x":8574.45552568966,"y":19772.96264474292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 200 Begin","id":"cd242031-8d7a-4cee-a680-156b0be7c7c7"}}},{"type":"Polygon Vertex","name":"SMA 200 End","project":"Superalgos","id":"178f2776-a5db-4cb9-b8c7-11ecb471bf12","savedPayload":{"position":{"x":8042.338171766252,"y":18851.308352158467},"targetPosition":{"x":8574.45552568966,"y":19772.96264474292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 200 End","id":"328b048e-eb4a-4a02-ad95-a17cd170c4a7"}}}],"id":"5dbe47bb-9414-4edd-be08-5ab50755a852","savedPayload":{"position":{"x":8574.45552568966,"y":19772.96264474292},"targetPosition":{"x":9601.347001086557,"y":20048.11738628992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"340dc986-ccc9-4b47-ac54-294187daa2e0","savedPayload":{"position":{"x":10111.673182942548,"y":19095.1968527094},"targetPosition":{"x":10111.673182942548,"y":18645.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Popular SMA","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"SMA 20","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma20","project":"Superalgos","id":"4f901876-b274-426e-9755-529b6241890d","savedPayload":{"position":{"x":10390.792094169205,"y":19472.414398432375},"targetPosition":{"x":10056.376922704378,"y":19171.305625570887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57d75985-febe-441b-be12-31f5eb10881b","savedPayload":{"position":{"x":10056.376922704378,"y":19171.305625570887},"targetPosition":{"x":9721.96175123955,"y":18870.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 50","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma50","project":"Superalgos","id":"dc2d66e9-8dc1-4092-bfa8-e147c7cf7226","savedPayload":{"position":{"x":9355.898772471332,"y":19692.387764587744},"targetPosition":{"x":9538.930261855441,"y":19281.29230864857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"74e3faab-246a-4c05-ae0a-b68f2095aa73","savedPayload":{"position":{"x":9538.930261855441,"y":19281.29230864857},"targetPosition":{"x":9721.96175123955,"y":18870.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 100","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma100","project":"Superalgos","id":"1b045b3c-13a9-4091-a804-0040340cf1be","savedPayload":{"position":{"x":8826.892045408104,"y":18776.121235768514},"targetPosition":{"x":9274.426898323827,"y":18823.159044238957},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f46c7caf-8907-4cc4-b048-efe691a24049","savedPayload":{"position":{"x":9274.426898323827,"y":18823.159044238957},"targetPosition":{"x":9721.96175123955,"y":18870.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 200","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma200","project":"Superalgos","id":"ef7a7e7d-dec3-4da6-9646-d087e03b7a71","savedPayload":{"position":{"x":9534.841229503569,"y":17989.864012048973},"targetPosition":{"x":9628.40149037156,"y":18430.030432379186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e1108c8-e8a4-4ae8-b6b1-765c4292580a","savedPayload":{"position":{"x":9628.40149037156,"y":18430.030432379186},"targetPosition":{"x":9721.96175123955,"y":18870.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7fc74763-c245-4b23-8121-7fe0d1e8e1db","savedPayload":{"position":{"x":9721.96175123955,"y":18870.1968527094},"targetPosition":{"x":10111.673182942548,"y":18645.1968527094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ddf21e96-c312-4ebe-9e2b-f56e8ea072aa","savedPayload":{"position":{"x":10111.673182942548,"y":18645.1968527094},"targetPosition":{"x":10336.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"SMA Base 11","config":"{\n\t\"codeName\": \"SMA-Base11\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"SMA 11 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma11","project":"Superalgos","id":"ab8c79b6-26ed-436e-a9ed-5581e48403a9","savedPayload":{"position":{"x":9383.181492817348,"y":18807.345717939013},"targetPosition":{"x":9544.3468964233,"y":18924.908769877064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77d02772-853e-4e30-9efe-7bea8e829d51","savedPayload":{"position":{"x":9544.3468964233,"y":18924.908769877064},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 11 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma11","project":"Superalgos","id":"e7f8c6de-4085-4886-ad93-c207274eb90c","savedPayload":{"position":{"x":9561.752539126115,"y":18670.019856663617},"targetPosition":{"x":9633.718566859352,"y":18856.20574317858},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"185ca2e7-b561-4ce4-b219-bd54496885b5","savedPayload":{"position":{"x":9633.718566859352,"y":18856.20574317858},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 22 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma22","project":"Superalgos","id":"0c62dd54-916a-4187-be47-0715604a0632","savedPayload":{"position":{"x":9785.680908868886,"y":18651.36096062012},"targetPosition":{"x":9745.726969118656,"y":18846.851558282717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08b23cb2-cf78-48ae-bd9a-efe0e8df4578","savedPayload":{"position":{"x":9745.726969118656,"y":18846.851558282717},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 22 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma22","project":"Superalgos","id":"f1d537b7-09a0-4031-8565-02ea33b66261","savedPayload":{"position":{"x":9984.580255818033,"y":18757.08319234595},"targetPosition":{"x":9845.1771487039,"y":18899.68042359086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3871971f-7f4b-49a0-a0d7-b1d08a4db951","savedPayload":{"position":{"x":9845.1771487039,"y":18899.68042359086},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 33 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma33","project":"Superalgos","id":"5cbdb800-4b2b-49e6-a8ef-678587ecd626","savedPayload":{"position":{"x":10094.847058486153,"y":18953.57133778103},"targetPosition":{"x":9900.31076186333,"y":18997.91627189774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2734c9f2-1347-4b5b-8dbf-f7f42eb2c810","savedPayload":{"position":{"x":9900.31076186333,"y":18997.91627189774},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 33 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma33","project":"Superalgos","id":"d7051dab-455d-4d02-8e0b-59139c3546d3","savedPayload":{"position":{"x":10175.009507231309,"y":19211.59843072385},"targetPosition":{"x":9893.62654816997,"y":19110.107233946117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"ce242fe6-2b52-4b89-a203-ce398b3545fd","savedPayload":{"position":{"x":9893.62654816997,"y":19110.107233946117},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 55 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma55","project":"Superalgos","id":"2c8a5860-2c8c-4a04-b0aa-d353817d3dab","savedPayload":{"position":{"x":9948.613835573771,"y":19359.721783544366},"targetPosition":{"x":9827.178835175178,"y":19200.996960807097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bdc5f0cf-2c2f-466c-963b-19d81a13b532","savedPayload":{"position":{"x":9827.178835175178,"y":19200.996960807097},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 55 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma55","project":"Superalgos","id":"62dfcbf0-e773-41db-80e0-bf46d47d977f","savedPayload":{"position":{"x":9738.567213938491,"y":19440.848134216503},"targetPosition":{"x":9722.142659191763,"y":19241.549245291986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2e58c59-c5d7-4b42-bb66-f012da23c12a","savedPayload":{"position":{"x":9722.142659191763,"y":19241.549245291986},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 111 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma111","project":"Superalgos","id":"b496251d-8005-4d21-9be0-1dec58cb58ba","savedPayload":{"position":{"x":9518.412900675969,"y":19395.43500239507},"targetPosition":{"x":9612.038486393823,"y":19218.829351624554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"62ed1060-3233-4175-a4cc-8ad04a123105","savedPayload":{"position":{"x":9612.038486393823,"y":19218.829351624554},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 11 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma111","project":"Superalgos","id":"3e765b91-17a0-4b30-bcfb-d7491afa9635","savedPayload":{"position":{"x":9357.413338947015,"y":19237.739607484033},"targetPosition":{"x":9531.475330971385,"y":19139.92089509658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bdee0fe7-c635-483d-b547-6271410cc35a","savedPayload":{"position":{"x":9531.475330971385,"y":19139.92089509658},"targetPosition":{"x":9705.742435078944,"y":19042.28992410319},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"853ae08f-85ed-48e9-82d9-7f00184ff7e7","savedPayload":{"position":{"x":9705.742435078944,"y":19042.28992410319},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 11","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a36a0be4-c3be-4e17-8459-ce24d08c60d4","savedPayload":{"position":{"x":8828.160936008579,"y":19632.984596305465},"targetPosition":{"x":8784.60140892896,"y":19506.80778662233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bc76dbe0-28fe-4811-b396-583cc810ad8c","savedPayload":{"position":{"x":8784.60140892896,"y":19506.80778662233},"targetPosition":{"x":8697.332722179079,"y":19255.325246155346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 11 Begin","project":"Superalgos","id":"007b0aa7-d129-4b66-97b1-a223b61465a9","savedPayload":{"position":{"x":8681.820965795447,"y":19521.276976398567},"targetPosition":{"x":8697.332722179079,"y":19255.325246155346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 11 Begin","id":"77d02772-853e-4e30-9efe-7bea8e829d51"}}},{"type":"Polygon Vertex","name":"SMA 11 End","project":"Superalgos","id":"8bf6c449-35d6-44c0-ac25-0da059e0c7d0","savedPayload":{"position":{"x":8614.844304460443,"y":19504.93942738568},"targetPosition":{"x":8697.332722179079,"y":19255.325246155346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 11 End","id":"185ca2e7-b561-4ce4-b219-bd54496885b5"}}}],"id":"82eff706-25ff-45ba-b066-0f20b64e26e1","savedPayload":{"position":{"x":8697.332722179079,"y":19255.325246155346},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 22","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"48b5e69c-d187-40f8-aee9-89f02ac7b442","savedPayload":{"position":{"x":8517.80519229289,"y":19614.64286656509},"targetPosition":{"x":8533.37202129342,"y":19481.734843570386},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"13b6ae03-77c1-473a-9cd9-eee42cab5005","savedPayload":{"position":{"x":8533.37202129342,"y":19481.734843570386},"targetPosition":{"x":8583.092636861576,"y":19222.19742188692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 22 End","project":"Superalgos","id":"5101118b-d0b2-46b3-b752-c1e8f3e09842","savedPayload":{"position":{"x":8442.022328549589,"y":19453.5226212805},"targetPosition":{"x":8583.092636861576,"y":19222.19742188692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 22 End","id":"3871971f-7f4b-49a0-a0d7-b1d08a4db951"}}},{"type":"Polygon Vertex","name":"SMA 22 Begin","project":"Superalgos","id":"5d1290b9-98c2-4925-9da4-fcdf50d13c5b","savedPayload":{"position":{"x":8398.362199323532,"y":19409.170527626364},"targetPosition":{"x":8583.092636861576,"y":19222.19742188692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 22 Begin","id":"08b23cb2-cf78-48ae-bd9a-efe0e8df4578"}}}],"id":"b7186c69-0a02-4820-bb58-1e2cee5790b3","savedPayload":{"position":{"x":8583.092636861576,"y":19222.19742188692},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 33","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a8183072-9dc8-4f7c-b72b-742477e4c8fd","savedPayload":{"position":{"x":8264.424399874737,"y":19467.084347394954},"targetPosition":{"x":8336.235746683473,"y":19354.114380500887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"98a87528-cb66-4e15-a3b0-aadb8d25fcec","savedPayload":{"position":{"x":8336.235746683473,"y":19354.114380500887},"targetPosition":{"x":8494.871490433437,"y":19142.83247303302},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 33 End","project":"Superalgos","id":"242e470b-2971-40b2-9f06-a95bf95e23fc","savedPayload":{"position":{"x":8266.675999455947,"y":19289.583637805164},"targetPosition":{"x":8494.871490433437,"y":19142.83247303302},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 33 End","id":"ce242fe6-2b52-4b89-a203-ce398b3545fd"}}},{"type":"Polygon Vertex","name":"SMA 33 Begin","project":"Superalgos","id":"106e4253-deab-440c-828a-ea55aea78c97","savedPayload":{"position":{"x":8247.108659606201,"y":19230.885635027793},"targetPosition":{"x":8494.871490433437,"y":19142.83247303302},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 33 Begin","id":"2734c9f2-1347-4b5b-8dbf-f7f42eb2c810"}}}],"id":"53f19bad-dcb0-476f-8b32-0d332d1ad130","savedPayload":{"position":{"x":8494.871490433437,"y":19142.83247303302},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 55","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"ea853676-6bdc-4723-a515-1a4c683fa1fa","savedPayload":{"position":{"x":8101.71058715121,"y":19224.911733393317},"targetPosition":{"x":8215.448838789682,"y":19154.35246683007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1fd3b244-b5ae-4a96-add5-50b228eac931","savedPayload":{"position":{"x":8215.448838789682,"y":19154.35246683007},"targetPosition":{"x":8449.92306524219,"y":19032.998583296296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 55 End","project":"Superalgos","id":"c0102a15-8594-4582-9714-75e555e3f2ac","savedPayload":{"position":{"x":8180.518023130728,"y":19066.182565077248},"targetPosition":{"x":8449.92306524219,"y":19032.998583296296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 55 End","id":"d2e58c59-c5d7-4b42-bb66-f012da23c12a"}}},{"type":"Polygon Vertex","name":"SMA 55 Begin","project":"Superalgos","id":"aa781190-aa71-4407-bc72-db67ffd67c7e","savedPayload":{"position":{"x":8188.44811119615,"y":19004.812482643138},"targetPosition":{"x":8449.92306524219,"y":19032.998583296296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 55 Begin","id":"bdc5f0cf-2c2f-466c-963b-19d81a13b532"}}}],"id":"8341d899-4df1-47f8-8e0d-bb87b76ed622","savedPayload":{"position":{"x":8449.92306524219,"y":19032.998583296296},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 111","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"85056d46-5dd2-4dc2-9c40-55ef936aeea8","savedPayload":{"position":{"x":8060.750446473568,"y":18936.31980580264},"targetPosition":{"x":8193.716212493997,"y":18922.169183789323},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bd5b197d-7425-461d-a2ab-5ad6446d00ee","savedPayload":{"position":{"x":8193.716212493997,"y":18922.169183789323},"targetPosition":{"x":8457.28042621804,"y":18914.458295622982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 11 End","project":"Superalgos","id":"fbd2d02d-d58e-4d04-a5a6-9bbc6e877244","savedPayload":{"position":{"x":8200.035224025785,"y":18827.50955426969},"targetPosition":{"x":8457.28042621804,"y":18914.458295622982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 11 End","id":"bdee0fe7-c635-483d-b547-6271410cc35a"}}},{"type":"Polygon Vertex","name":"SMA 111 Begin","project":"Superalgos","id":"e79d988b-7d4a-4201-839a-a95f99dc26fe","savedPayload":{"position":{"x":8253.55638438573,"y":18741.867832740318},"targetPosition":{"x":8457.28042621804,"y":18914.458295622982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 111 Begin","id":"62ed1060-3233-4175-a4cc-8ad04a123105"}}}],"id":"5745a180-5f94-4109-b8e5-41b2c21e9f1a","savedPayload":{"position":{"x":8457.28042621804,"y":18914.458295622982},"targetPosition":{"x":8712.334395529022,"y":18989.77442130183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"ade8af76-e9e6-4dda-8921-c3c5cc8a0ecc","savedPayload":{"position":{"x":8712.334395529022,"y":18989.77442130183},"targetPosition":{"x":9067.143905103756,"y":18595.585201819194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"SMA Base 11","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"SMA 11","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma11","project":"Superalgos","id":"bce6e5ba-e93b-4c0f-9013-db467727e721","savedPayload":{"position":{"x":7690.82716357227,"y":18698.521226845543},"targetPosition":{"x":7868.968460979686,"y":18501.01233308383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f4794965-6a35-4289-9e0e-718b931028de","savedPayload":{"position":{"x":7868.968460979686,"y":18501.01233308383},"targetPosition":{"x":8046.89224069933,"y":18303.419755563373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 22","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma22","project":"Superalgos","id":"e8837d50-025b-4bbc-8199-328df7afbdda","savedPayload":{"position":{"x":7540.728645988642,"y":18467.584258462917},"targetPosition":{"x":7793.8494686813465,"y":18385.51164910862},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2b4712d6-5952-4bd0-bcac-7d396d95f842","savedPayload":{"position":{"x":7793.8494686813465,"y":18385.51164910862},"targetPosition":{"x":8046.89224069933,"y":18303.419755563373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 33","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma33","project":"Superalgos","id":"825bc681-cb31-4d26-85af-4f692538fc9d","savedPayload":{"position":{"x":7526.319350283335,"y":18192.993436092846},"targetPosition":{"x":7786.640289765532,"y":18248.196888819733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"377ff3cb-9d7b-45aa-a2c1-3cabf3540c8e","savedPayload":{"position":{"x":7786.640289765532,"y":18248.196888819733},"targetPosition":{"x":8046.89224069933,"y":18303.419755563373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 55","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma55","project":"Superalgos","id":"24c4a804-6686-43ab-a664-db08d860034c","savedPayload":{"position":{"x":7651.409019812963,"y":17947.626704977585},"targetPosition":{"x":7849.2046405484,"y":18125.49841436369},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4b0485d9-4d37-4402-939b-eb878c6750ec","savedPayload":{"position":{"x":7849.2046405484,"y":18125.49841436369},"targetPosition":{"x":8046.89224069933,"y":18303.419755563373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 111","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma111","project":"Superalgos","id":"3d21e771-7edd-4460-aa23-da3c7880a629","savedPayload":{"position":{"x":7882.582971693344,"y":17797.80704902606},"targetPosition":{"x":7964.874005998467,"y":18050.544608162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"738b01bd-a4da-4f90-a816-c021eeb81030","savedPayload":{"position":{"x":7964.874005998467,"y":18050.544608162},"targetPosition":{"x":8046.89224069933,"y":18303.419755563373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc702308-8514-4e8d-85d3-5d052aad782c","savedPayload":{"position":{"x":8046.89224069933,"y":18303.419755563373},"targetPosition":{"x":9067.143905103756,"y":18595.585201819194},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4a61ac35-a1ae-40f4-b3da-f81ae796ee00","savedPayload":{"position":{"x":9752.106035388051,"y":18592.9854210064},"targetPosition":{"x":10336.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"SMA Base 7","config":"{\n\t\"codeName\": \"SMA-Base7\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"SMA 7 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma7","project":"Superalgos","id":"b459dee1-24d0-4794-9c4d-d9c58972f6e6","savedPayload":{"position":{"x":7924.4581076445465,"y":19754.23480148812},"targetPosition":{"x":8275.428754428198,"y":20152.62466313735},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8d6e2d59-fe23-4ba5-ad87-d9d15ad60340","savedPayload":{"position":{"x":8275.428754428198,"y":20152.62466313735},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 7 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma7","project":"Superalgos","id":"3994ef79-ab0b-4552-bbde-f754a86f2e04","savedPayload":{"position":{"x":8165.829233947225,"y":19594.47003371846},"targetPosition":{"x":8396.154729796512,"y":20072.641733875826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a95fee99-4a06-44d7-a6c4-0eea9ccec4d9","savedPayload":{"position":{"x":8396.154729796512,"y":20072.641733875826},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 14 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma14","project":"Superalgos","id":"40d386cb-84a9-49b0-b28e-3d39e9e274cb","savedPayload":{"position":{"x":8441.423538395913,"y":19505.683982804214},"targetPosition":{"x":8533.928384809977,"y":20028.22049259961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c6d631e7-8cd0-4ccd-b7b4-90b8dda615d8","savedPayload":{"position":{"x":8533.928384809977,"y":20028.22049259961},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 21 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma21","project":"Superalgos","id":"6d2cd604-9a38-4ab7-b19d-9e9e3ae8ad25","savedPayload":{"position":{"x":8730.243038089553,"y":19494.35117695828},"targetPosition":{"x":8678.36579042373,"y":20022.602550834836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f1044fa-67dd-42dc-ba74-61e299e1f1e1","savedPayload":{"position":{"x":8678.36579042373,"y":20022.602550834836},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 21 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma21","project":"Superalgos","id":"1de80488-5eeb-491c-bd5f-e5bd7569dc59","savedPayload":{"position":{"x":9011.698059988921,"y":19561.493443206},"targetPosition":{"x":8819.13631815161,"y":20056.21297029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"df7e58c1-c042-443b-bfd3-69d57894d358","savedPayload":{"position":{"x":8819.13631815161,"y":20056.21297029057},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 28 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma28","project":"Superalgos","id":"93b50d69-b003-4590-b098-ff59dc226e22","savedPayload":{"position":{"x":9264.568962888286,"y":19702.108497000165},"targetPosition":{"x":8945.610825815766,"y":20126.546537699018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7bd742dd-7c4c-4dfe-9415-e655a5e1cc88","savedPayload":{"position":{"x":8945.610825815766,"y":20126.546537699018},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 28 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma28","project":"Superalgos","id":"36ddca01-d7c2-44e4-bac6-1efd92721b56","savedPayload":{"position":{"x":9470.11478921376,"y":19905.76395509005},"targetPosition":{"x":9048.410919460857,"y":20228.399921427615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7678774b-b068-4757-962b-8e126342898a","savedPayload":{"position":{"x":9048.410919460857,"y":20228.399921427615},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 35 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma35","project":"Superalgos","id":"e631b84b-646b-41f7-b87b-7cb4fbf8ac76","savedPayload":{"position":{"x":9613.082275503264,"y":20157.333310532602},"targetPosition":{"x":9119.905453138304,"y":20354.21058016676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93613bd9-2dbb-493c-a72e-414b0398733e","savedPayload":{"position":{"x":9119.905453138304,"y":20354.21058016676},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 35 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma35","project":"Superalgos","id":"89e3900f-eeaf-47cb-97f6-9093b2f39811","savedPayload":{"position":{"x":9682.882303442613,"y":20438.158639779485},"targetPosition":{"x":9154.81384628839,"y":20494.653849311384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f620fdbe-48b5-4831-995d-b3c721738d1b","savedPayload":{"position":{"x":9154.81384628839,"y":20494.653849311384},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 70 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma70","project":"Superalgos","id":"cacaceaf-b19d-4b2a-81b3-5ac6b44877b7","savedPayload":{"position":{"x":9674.327031472189,"y":20726.99614205352},"targetPosition":{"x":9150.536806995697,"y":20639.098881402304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e506a85-5f72-4a3f-a773-cd85d8b15f21","savedPayload":{"position":{"x":9150.52981203033,"y":20639.095156736894},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 70 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma70","project":"Superalgos","id":"8658d660-52c4-41f8-b423-db569ff19941","savedPayload":{"position":{"x":9588.032736084515,"y":21003.19985327202},"targetPosition":{"x":9107.381152766848,"y":20777.227031679475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8392e1ff-33a6-4b95-baad-3f146bd3c121","savedPayload":{"position":{"x":9107.385060788252,"y":20777.233862153025},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 140 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma140","project":"Superalgos","id":"a56e674e-ec4f-4448-a8bc-bfbc3a02eea4","savedPayload":{"position":{"x":9430.411601855223,"y":21245.887720094255},"targetPosition":{"x":9028.554049361028,"y":20898.593460648928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39e65adb-6125-4e9a-8f15-5403b21aac40","savedPayload":{"position":{"x":9028.56625760474,"y":20898.595818593778},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 140 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma140","project":"Superalgos","id":"9aeb4594-c7e0-41e1-83b3-8df31b0d44b0","savedPayload":{"position":{"x":9213.16845744941,"y":21437.0633595646},"targetPosition":{"x":8919.917664468816,"y":20994.20502186945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7559cbf5-acba-4a60-91b4-d95f90293f22","savedPayload":{"position":{"x":8919.91017998999,"y":20994.21135544464},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 210 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma210","project":"Superalgos","id":"8856ee41-b264-4468-9dac-eb808b483df3","savedPayload":{"position":{"x":8952.372633911818,"y":21562.52103613648},"targetPosition":{"x":8789.493979865729,"y":21056.951956783356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"479df802-576f-45f1-8322-6b2e493c5ecc","savedPayload":{"position":{"x":8789.50637795308,"y":21056.95149920585},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 210 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma210","project":"Superalgos","id":"f4fa8a22-fe87-4174-bf51-cb574381ca0d","savedPayload":{"position":{"x":8667.40925271039,"y":21612.97606195051},"targetPosition":{"x":8646.983756710713,"y":21082.182383228053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"45a926f2-4bb2-4562-b40f-bd2532ff1d10","savedPayload":{"position":{"x":8646.987243865668,"y":21082.17107973462},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 280 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma280","project":"Superalgos","id":"49f183b2-f8d1-4055-947d-291b7787d846","savedPayload":{"position":{"x":8379.804795041793,"y":21584.693431738036},"targetPosition":{"x":8503.153898364933,"y":21068.04061559355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d5e455bf-bb27-41fa-ba41-c8e7d0aa4d5e","savedPayload":{"position":{"x":8503.16491870677,"y":21068.04304327845},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 280 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma280","project":"Superalgos","id":"012f6580-f9e9-47f6-b6f4-82598b8e8aa7","savedPayload":{"position":{"x":8110.095055204674,"y":21479.76009389127},"targetPosition":{"x":8368.2753323978,"y":21015.557492182434},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"298d0ca9-1b4a-48d8-8efe-fda6b2fc2c34","savedPayload":{"position":{"x":8368.288982473729,"y":21015.561343167265},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 350 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma350","project":"Superalgos","id":"4a3f6588-26e3-446b-ac4e-54ad3bc9ef3c","savedPayload":{"position":{"x":7878.704544148615,"y":21305.95312318116},"targetPosition":{"x":8252.561244746095,"y":20928.63811337829},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f3c05d30-da2e-449e-8471-dcc216f4e630","savedPayload":{"position":{"x":8252.57541240655,"y":20928.636462026636},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 350 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma350","project":"Superalgos","id":"1157762f-1236-43b1-a399-06d59a992d55","savedPayload":{"position":{"x":7702.796208908232,"y":21076.164747618153},"targetPosition":{"x":8164.597317944226,"y":20813.720375959554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d6598381-9b15-4cb3-afba-b85ed6770ce3","savedPayload":{"position":{"x":8164.601799719287,"y":20813.708270070074},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"24151ce9-3ecb-4c6b-97e5-41a8a95b45a8","savedPayload":{"position":{"x":7595.406247101153,"y":20807.426564724785},"targetPosition":{"x":8110.89487759805,"y":20679.318680863948},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"30f77a0a-81fd-4498-8510-cfca20b6b1d8","savedPayload":{"position":{"x":8110.891984664871,"y":20679.325384518284},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"New Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"0da81a21-3169-44c7-a896-17eb32bdfa17","savedPayload":{"position":{"x":7564.504276171734,"y":20520.09039280759},"targetPosition":{"x":8095.446372859231,"y":20535.612642209082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6fd2e88e-f5e1-45d5-8baf-4bc724bf2bae","savedPayload":{"position":{"x":8095.446372859231,"y":20535.612642209082},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 14 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma14","project":"Superalgos","id":"78e7fbfb-c210-44b6-8399-1567f81c73c9","savedPayload":{"position":{"x":7612.421466774944,"y":20234.607984954633},"targetPosition":{"x":8119.427440348038,"y":20392.80057866766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d5f823d6-8b99-44b5-99dc-04724a531323","savedPayload":{"position":{"x":8119.427440348038,"y":20392.80057866766},"targetPosition":{"x":8626.560260716764,"y":20551.169215832335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e561ee2d-8458-4001-8904-61cd2a3a815e","savedPayload":{"position":{"x":8626.560260716764,"y":20551.169215832335},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 7","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"38522e0c-85c4-49ae-93ac-9a04470855e0","savedPayload":{"position":{"x":8252.443799997553,"y":19263.54131752478},"targetPosition":{"x":8301.597088541981,"y":19139.55031849191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"fcc0c4b0-28ea-4482-8da8-16a0c88c1e52","savedPayload":{"position":{"x":8301.597088541981,"y":19139.55031849191},"targetPosition":{"x":8374.01587073219,"y":18878.974436158598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 7 End","project":"Superalgos","id":"f11dbba2-2bd3-4d0a-a182-2ef78a492d32","savedPayload":{"position":{"x":8226.635557952322,"y":19118.893857873674},"targetPosition":{"x":8374.01587073219,"y":18878.974436158598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 7 End","id":"a95fee99-4a06-44d7-a6c4-0eea9ccec4d9"}}},{"type":"Polygon Vertex","name":"SMA 7 Begin","project":"Superalgos","id":"c50700bc-305d-4cb6-b1bf-1c03c7459d2b","savedPayload":{"position":{"x":8178.681026709226,"y":19048.679022859982},"targetPosition":{"x":8374.01587073219,"y":18878.974436158598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 7 Begin","id":"8d6e2d59-fe23-4ba5-ad87-d9d15ad60340"}}}],"id":"62ad882d-f16d-4476-8c17-0f6e2d6e2b76","savedPayload":{"position":{"x":8374.01587073219,"y":18878.974436158598},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 14","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"14a21030-fa6b-44ef-8cb2-e4f3cb79126e","savedPayload":{"position":{"x":8037.375925744829,"y":19123.256694005093},"targetPosition":{"x":8117.363476839717,"y":19016.069051638104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ca2fa8f2-f6a1-4084-8606-a35495dfd596","savedPayload":{"position":{"x":8117.363476839717,"y":19016.069051638104},"targetPosition":{"x":8268.083455446482,"y":18788.681855964238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 14 Begin","project":"Superalgos","id":"e7d170e8-3d4f-4a55-883a-3a3394fef2af","savedPayload":{"position":{"x":8064.349363530146,"y":18979.758085451354},"targetPosition":{"x":8268.083455446482,"y":18788.681855964238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 14 Begin","id":"d5f823d6-8b99-44b5-99dc-04724a531323"}}},{"type":"Polygon Vertex","name":"SMA 14 End","project":"Superalgos","id":"2383789a-4600-4b8b-a49b-51cbeb46d4f1","savedPayload":{"position":{"x":8034.218104480391,"y":18901.75102395761},"targetPosition":{"x":8268.083455446482,"y":18788.681855964238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 14 End","id":"c6d631e7-8cd0-4ccd-b7b4-90b8dda615d8"}}}],"id":"ab179cef-53c3-46f7-a83b-af29ccd8bc90","savedPayload":{"position":{"x":8268.083455446482,"y":18788.681855964238},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 21","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"f8f0733e-0890-4d54-8d77-1b1fc8b8c92b","savedPayload":{"position":{"x":7878.991878596775,"y":18937.272601556157},"targetPosition":{"x":7984.165899821968,"y":18854.456193319937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"a0f2de63-1abd-4945-9c8c-84e21fd121e0","savedPayload":{"position":{"x":7984.165899821968,"y":18854.456193319937},"targetPosition":{"x":8189.316746544326,"y":18674.234290549834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 21 End","project":"Superalgos","id":"69c3f249-07bf-4a03-b8a1-9d74d0255f23","savedPayload":{"position":{"x":7942.5632499408275,"y":18805.760867566303},"targetPosition":{"x":8189.316746544326,"y":18674.234290549834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 21 End","id":"df7e58c1-c042-443b-bfd3-69d57894d358"}}},{"type":"Polygon Vertex","name":"SMA 21 Begin","project":"Superalgos","id":"959961b9-9bf9-48ce-9ee0-08d2d6a62b8e","savedPayload":{"position":{"x":7934.453251296498,"y":18722.6132559411},"targetPosition":{"x":8189.316746544326,"y":18674.234290549834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 21 Begin","id":"4f1044fa-67dd-42dc-ba74-61e299e1f1e1"}}}],"id":"9a17429f-8213-4a7e-8167-dc36d761973e","savedPayload":{"position":{"x":8189.316746544326,"y":18674.234290549834},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 28","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"713c60e9-ee11-4551-ab62-58ce9c16e066","savedPayload":{"position":{"x":7774.558778671915,"y":18717.03142791299},"targetPosition":{"x":7897.642496897133,"y":18664.309276482138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"725a4d2f-0838-4d78-a8fa-a2b129feda2f","savedPayload":{"position":{"x":7897.642496897133,"y":18664.309276482138},"targetPosition":{"x":8142.882324441336,"y":18543.34202283513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 28 Begin","project":"Superalgos","id":"f4c161f4-6510-47a2-97f7-3f9f848d9892","savedPayload":{"position":{"x":7870.545719635898,"y":18606.438062094872},"targetPosition":{"x":8142.882324441336,"y":18543.34202283513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 28 Begin","id":"7bd742dd-7c4c-4dfe-9415-e655a5e1cc88"}}},{"type":"Polygon Vertex","name":"SMA 28 End","project":"Superalgos","id":"b1b22a6f-0a69-401f-90ea-2306baee0ea2","savedPayload":{"position":{"x":7884.062039084125,"y":18524.183214866738},"targetPosition":{"x":8142.882324441336,"y":18543.34202283513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 28 End","id":"7678774b-b068-4757-962b-8e126342898a"}}}],"id":"4f6e0c60-00a8-4a76-b1b1-4eaa25c5824c","savedPayload":{"position":{"x":8142.882324441336,"y":18543.34202283513},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 35","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"73f591c5-286b-4441-aa59-f647f738e40e","savedPayload":{"position":{"x":7599.719987582568,"y":18496.50536638155},"targetPosition":{"x":7863.425575888927,"y":18458.388169859227},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2c56cb10-43c9-447b-8b8a-30dae8e7fab8","savedPayload":{"position":{"x":7863.425575888927,"y":18458.388169859227},"targetPosition":{"x":8131.96785915098,"y":18405.11128088391},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 35 End","project":"Superalgos","id":"3ad24108-1339-4c6d-abc6-27a9aa5bc046","savedPayload":{"position":{"x":7852.843961589664,"y":18395.620862705608},"targetPosition":{"x":8131.96785915098,"y":18405.11128088391},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 35 End","id":"f620fdbe-48b5-4831-995d-b3c721738d1b"}}},{"type":"Polygon Vertex","name":"SMA 35 Begin","project":"Superalgos","id":"abfdefe3-b9d4-4816-b2cc-7aa64bb69734","savedPayload":{"position":{"x":7886.693868965085,"y":18319.501514394233},"targetPosition":{"x":8131.96785915098,"y":18405.11128088391},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 35 Begin","id":"93613bd9-2dbb-493c-a72e-414b0398733e"}}}],"id":"a8a09eca-7bee-4f17-b7db-1f43f419441c","savedPayload":{"position":{"x":8131.96785915098,"y":18405.11128088391},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 70","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"9ac33f9d-bce7-407a-8de9-3334bb263b69","savedPayload":{"position":{"x":7619.701099020283,"y":18219.443095113777},"targetPosition":{"x":7884.283227019376,"y":18250.683805938188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ea184e1f-5a0f-4ed3-b3ed-6ba18e7237f9","savedPayload":{"position":{"x":7884.283227019376,"y":18250.683805938188},"targetPosition":{"x":8157.255025769755,"y":18268.631664856304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 70 Begin","project":"Superalgos","id":"5505dd50-5ad7-48fc-9256-14cab581d92f","savedPayload":{"position":{"x":7890.120377666757,"y":18187.276506483522},"targetPosition":{"x":8157.255025769755,"y":18268.631664856304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 70 Begin","id":"9e506a85-5f72-4a3f-a773-cd85d8b15f21"}}},{"type":"Polygon Vertex","name":"SMA 70 End","project":"Superalgos","id":"b255b251-b73a-469c-a41f-e273d2909af2","savedPayload":{"position":{"x":7942.431280581219,"y":18122.42444651228},"targetPosition":{"x":8157.255025769755,"y":18268.631664856304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 70 End","id":"8392e1ff-33a6-4b95-baad-3f146bd3c121"}}}],"id":"31cf093b-6de4-4e4a-a8f4-f3ff989dd374","savedPayload":{"position":{"x":8157.255025769755,"y":18268.631664856304},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 140","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"e9088da2-eb17-4e48-9fba-5bd00fba6a2b","savedPayload":{"position":{"x":7710.8560181116845,"y":17956.871423259512},"targetPosition":{"x":7958.28097072769,"y":18055.490295575146},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b93ae9ca-6c4e-47db-a998-045e845ab9cd","savedPayload":{"position":{"x":7958.28097072769,"y":18055.490295575146},"targetPosition":{"x":8217.06739595913,"y":18143.330928105715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 140 Begin","project":"Superalgos","id":"e1bdea5b-664c-4146-adf6-858405354f8c","savedPayload":{"position":{"x":7980.041623602574,"y":17995.526277990564},"targetPosition":{"x":8217.06739595913,"y":18143.330928105715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 140 Begin","id":"39e65adb-6125-4e9a-8f15-5403b21aac40"}}},{"type":"Polygon Vertex","name":"SMA 140 End","project":"Superalgos","id":"3d994072-d0b7-4065-a8be-3c718de28086","savedPayload":{"position":{"x":8047.563244050285,"y":17946.5566451907},"targetPosition":{"x":8217.06739595913,"y":18143.330928105715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 140 End","id":"7559cbf5-acba-4a60-91b4-d95f90293f22"}}}],"id":"41a149aa-efdf-4f53-82cf-cce9e904a000","savedPayload":{"position":{"x":8217.06739595913,"y":18143.330928105715},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 210","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"08949257-633e-4013-b770-bbb798972d2d","savedPayload":{"position":{"x":7866.808483348836,"y":17726.787559283333},"targetPosition":{"x":8080.171292052328,"y":17885.97733437856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"53e088d8-8ec5-4dbe-b732-c65f31005105","savedPayload":{"position":{"x":8080.171292052328,"y":17885.97733437856},"targetPosition":{"x":8307.304958444904,"y":18037.73912548282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 210 Begin","project":"Superalgos","id":"15882e16-4782-48e8-9cac-fbb1d07ae51d","savedPayload":{"position":{"x":8116.688084896257,"y":17833.662323191566},"targetPosition":{"x":8307.304958444904,"y":18037.73912548282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 210 Begin","id":"479df802-576f-45f1-8322-6b2e493c5ecc"}}},{"type":"Polygon Vertex","name":"SMA 210 End","project":"Superalgos","id":"a6f51174-ea46-4282-a476-4e809f456682","savedPayload":{"position":{"x":8194.62404860694,"y":17803.771655551598},"targetPosition":{"x":8307.304958444904,"y":18037.73912548282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 210 End","id":"45a926f2-4bb2-4562-b40f-bd2532ff1d10"}}}],"id":"c3ee15c5-a5b3-4318-bc09-a9fd03592d83","savedPayload":{"position":{"x":8307.304958444904,"y":18037.73912548282},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 280","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"942d9600-7935-4ca6-81d8-9bd014df736f","savedPayload":{"position":{"x":8077.345513047199,"y":17544.868171614493},"targetPosition":{"x":8241.887240880693,"y":17753.802767958114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1c6e0c3f-8ac7-4b0b-9da8-0f7faf9befd1","savedPayload":{"position":{"x":8241.887240880693,"y":17753.802767958114},"targetPosition":{"x":8421.880003139959,"y":17959.087383424867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 280 Begin","project":"Superalgos","id":"cc54382b-cf2b-42c7-8958-8816809dd7ba","savedPayload":{"position":{"x":8290.585401559361,"y":17712.266237260712},"targetPosition":{"x":8421.880003139959,"y":17959.087383424867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 280 Begin","id":"d5e455bf-bb27-41fa-ba41-c8e7d0aa4d5e"}}},{"type":"Polygon Vertex","name":"SMA 280 End","project":"Superalgos","id":"3629786a-8eed-4cff-9780-0e685aeed577","savedPayload":{"position":{"x":8373.91140868601,"y":17704.32678310176},"targetPosition":{"x":8421.880003139959,"y":17959.087383424867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 280 End","id":"298d0ca9-1b4a-48d8-8efe-fda6b2fc2c34"}}}],"id":"3bbf5574-e89c-4538-a95c-2da58e5a74d7","savedPayload":{"position":{"x":8421.880003139959,"y":17959.087383424867},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 350","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.BLACK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"8142bd21-31e4-4edd-97d5-217e30321e0a","savedPayload":{"position":{"x":8327.572677003798,"y":17423.086081637604},"targetPosition":{"x":8432.288758488718,"y":17667.611070988834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6eade211-19cf-48a7-87ac-faf30e387e10","savedPayload":{"position":{"x":8432.288758488718,"y":17667.611070988834},"targetPosition":{"x":8553.10716459541,"y":17912.743876372548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 350 End","project":"Superalgos","id":"f16d8eac-9e78-4167-b087-9803637412a6","savedPayload":{"position":{"x":8485.252145805101,"y":17639.02204652707},"targetPosition":{"x":8553.10716459541,"y":17912.743876372548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 350 End","id":"d6598381-9b15-4cb3-afba-b85ed6770ce3"}}},{"type":"Polygon Vertex","name":"SMA 350 Begin","project":"Superalgos","id":"b94a339d-5abf-4563-a693-edb5d812c24e","savedPayload":{"position":{"x":8595.688241181047,"y":17652.18275151536},"targetPosition":{"x":8553.10716459541,"y":17912.743876372548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 350 Begin","id":"f3c05d30-da2e-449e-8471-dcc216f4e630"}}}],"id":"046240f2-f70b-471d-b07b-0e7490222f0d","savedPayload":{"position":{"x":8553.10716459541,"y":17912.743876372548},"targetPosition":{"x":8662.742040571695,"y":18432.77995224194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"391b803a-4b4e-4c0b-bb6b-b4d68e989c9c","savedPayload":{"position":{"x":8662.742040571695,"y":18432.77995224194},"targetPosition":{"x":9067.446839984288,"y":17938.99651740955},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"SMA Base 7","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"SMA 7","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma7","project":"Superalgos","id":"1c683838-c882-49bd-997a-2f4255347854","savedPayload":{"position":{"x":7931.76623776737,"y":17488.265904432366},"targetPosition":{"x":7889.4062739556975,"y":17226.38467959082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c26c14bd-b9ab-4121-89b2-eb3044534cf2","savedPayload":{"position":{"x":7889.4062739556975,"y":17226.38467959082},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 14","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma14","project":"Superalgos","id":"1060ea54-bb29-4c3b-8db0-522893543a36","savedPayload":{"position":{"x":7634.596976637695,"y":17451.6690083696},"targetPosition":{"x":7740.690878153728,"y":17207.987347244165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94b29f18-cad5-49df-8b87-d6ef10f5ae61","savedPayload":{"position":{"x":7740.690878153728,"y":17207.987347244165},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 21","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma21","project":"Superalgos","id":"c0287e9c-4b88-4b92-b6ac-f17474649958","savedPayload":{"position":{"x":7404.3549720124065,"y":17259.81779391045},"targetPosition":{"x":7625.510289031819,"y":17112.013278031198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ffcb7173-b2bf-4d5d-90e5-6f8b26af4b86","savedPayload":{"position":{"x":7625.510289031819,"y":17112.013278031198},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 28","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma28","project":"Superalgos","id":"9f1615e0-e437-4221-8e9a-a6dcb4556022","savedPayload":{"position":{"x":7314.46585307259,"y":16973.804634409313},"targetPosition":{"x":7580.538821250248,"y":16968.982207324134},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"186d8c1a-5eef-44a1-aa09-b28e4f5b6b0e","savedPayload":{"position":{"x":7580.538821250248,"y":16968.982207324134},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 35","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma35","project":"Superalgos","id":"423f3069-d5a3-4d29-bb35-68802f367c50","savedPayload":{"position":{"x":7393.501305306105,"y":16684.931119976958},"targetPosition":{"x":7620.053326785106,"y":16824.530873789074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6b047d8e-451d-4267-adc4-6e9496aa0025","savedPayload":{"position":{"x":7620.053326785106,"y":16824.530873789074},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 70","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma70","project":"Superalgos","id":"62ed074e-5b1a-4306-b411-cd436680147d","savedPayload":{"position":{"x":7616.3948631495805,"y":16484.253095142783},"targetPosition":{"x":7731.516700918088,"y":16724.177000928346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9676685c-f20e-4d65-a0fe-8551e80132ee","savedPayload":{"position":{"x":7731.516700918088,"y":16724.177000928346},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 140","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma140","project":"Superalgos","id":"2200abd2-2897-4eff-9804-f599c0e18f42","savedPayload":{"position":{"x":7911.974574042917,"y":16435.910008409315},"targetPosition":{"x":7879.327601914589,"y":16700.005954984834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a44d3c89-8463-4493-b195-70ee4146bbdb","savedPayload":{"position":{"x":7879.327601914589,"y":16700.005954984834},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 210","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma210","project":"Superalgos","id":"38e3066f-1951-4c96-8a36-3bcf778328bd","savedPayload":{"position":{"x":8187.062377590519,"y":16555.24944495255},"targetPosition":{"x":8016.892905570028,"y":16759.692069869172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"44198c4d-4d98-43a2-9c03-2d8794b9edac","savedPayload":{"position":{"x":8016.892905570028,"y":16759.692069869172},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 280","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma280","project":"Superalgos","id":"eca55243-4492-4983-9e03-04694437c8ae","savedPayload":{"position":{"x":8353.933872537942,"y":16804.365673372242},"targetPosition":{"x":8100.338508855533,"y":16884.277102455835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96706885-fa55-4fad-82bd-fb43a2f331d7","savedPayload":{"position":{"x":8100.338508855533,"y":16884.277102455835},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 350","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma350","project":"Superalgos","id":"64ea1867-2fb1-4191-a4c7-b5ac37f7be7a","savedPayload":{"position":{"x":8359.54699409522,"y":17103.71886027376},"targetPosition":{"x":8103.120944400147,"y":17034.060790175834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9f208b33-3d80-4d2e-ad88-13139a8e93f8","savedPayload":{"position":{"x":8103.120944400147,"y":17034.060790175834},"targetPosition":{"x":7846.680017136143,"y":16964.194267115152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b73ac725-eea1-4aa2-974c-937de300b456","savedPayload":{"position":{"x":7846.680017136143,"y":16964.194267115152},"targetPosition":{"x":9067.446839984288,"y":17938.99651740955},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"515565ff-dee2-4adf-adaf-b4cfea5f5dbd","savedPayload":{"position":{"x":9661.673182942548,"y":18255.4854210064},"targetPosition":{"x":10336.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"SMA Base 6","config":"{\n\t\"codeName\": \"SMA-Base6\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"SMA 6 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma6","project":"Superalgos","id":"28dce892-9996-45ac-af68-55d0056b6af2","savedPayload":{"position":{"x":8784.926036564942,"y":17618.648375054432},"targetPosition":{"x":8483.518627252892,"y":18355.339203919444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dece94e6-77de-4d21-9376-c2efc825b567","savedPayload":{"position":{"x":8483.518627252892,"y":18355.339203919444},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 6 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma6","project":"Superalgos","id":"f878b59a-0787-4c44-a341-02db47b15aad","savedPayload":{"position":{"x":9132.552940694495,"y":17814.365197435625},"targetPosition":{"x":8657.272623990102,"y":18453.451750811935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32025fb3-9ec4-4f50-b4c9-9a73100ce864","savedPayload":{"position":{"x":8657.272623990102,"y":18453.451750811935},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 12 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma12","project":"Superalgos","id":"d3c24df7-68df-4d50-92d6-9f722ee8816a","savedPayload":{"position":{"x":9419.93876311959,"y":18091.388097424337},"targetPosition":{"x":8801.073996701492,"y":18591.713509806603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8662f4a4-41a4-4992-a333-017cd8764cd1","savedPayload":{"position":{"x":8801.073996701492,"y":18591.713509806603},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 18 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma18","project":"Superalgos","id":"fc0e1a4a-8966-4340-83bc-2c43992486ed","savedPayload":{"position":{"x":9629.838412502442,"y":18430.98347628255},"targetPosition":{"x":8906.095218010581,"y":18761.566302437834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3260182a-83b5-4362-8962-84ec488b69cb","savedPayload":{"position":{"x":8906.095218010581,"y":18761.566302437834},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 18 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma18","project":"Superalgos","id":"53ce5612-9c75-4a89-98cd-7dd278f67df3","savedPayload":{"position":{"x":9749.031234081202,"y":18811.92717403645},"targetPosition":{"x":8965.74414486534,"y":18951.968376009703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"942b73d2-241e-43dd-b83b-0d3724f331a4","savedPayload":{"position":{"x":8965.74414486534,"y":18951.968376009703},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 24 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma24","project":"Superalgos","id":"9c2d5563-016b-40e7-a45f-973a874ee6e3","savedPayload":{"position":{"x":9769.65751240202,"y":19210.019141050027},"targetPosition":{"x":8976.043304231756,"y":19151.013819200183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c0b2d03c-3cec-4ca2-b344-cdd99cb28362","savedPayload":{"position":{"x":8976.043304231756,"y":19151.013819200183},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 24 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma24","project":"Superalgos","id":"3b3a0b5b-0290-47a3-8bef-d5b289e4f7b6","savedPayload":{"position":{"x":9690.502560245888,"y":19601.125844807462},"targetPosition":{"x":8936.447686429208,"y":19346.585086258423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4b33b779-8111-415c-a1e5-893ed5f49527","savedPayload":{"position":{"x":8936.447686429208,"y":19346.585086258423},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 30 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma30","project":"Superalgos","id":"876a382a-7632-4dcf-b0d5-b36d8df8b92c","savedPayload":{"position":{"x":9516.545347534058,"y":19960.263796462405},"targetPosition":{"x":8849.451720801175,"y":19526.173861829917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fef118ef-22cb-4ff5-b971-c90c2a01265a","savedPayload":{"position":{"x":8849.451720801175,"y":19526.173861829917},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 30 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma30","project":"Superalgos","id":"59c1198f-77ea-4780-b25b-e17b11bd0a0e","savedPayload":{"position":{"x":9258.717146711675,"y":20264.8613786487},"targetPosition":{"x":8720.523677897767,"y":19678.490261710245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e2f5657-06b0-4e46-aa7e-8676683ffb77","savedPayload":{"position":{"x":8720.523677897767,"y":19678.490261710245},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 60 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma60","project":"Superalgos","id":"deea8750-3324-4bdc-bc4d-7fc9db32ceca","savedPayload":{"position":{"x":8933.226305305336,"y":20495.775614949933},"targetPosition":{"x":8557.766595755355,"y":19793.959784416296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e7fb950-9b88-4aaf-95a1-982abf35b9f3","savedPayload":{"position":{"x":8557.766595755355,"y":19793.959784416296},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 60 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma60","project":"Superalgos","id":"4c4c6ec2-0ae2-4c37-bf9e-a2753f2b6ac5","savedPayload":{"position":{"x":8560.524275895837,"y":20638.500317257425},"targetPosition":{"x":8371.404578693528,"y":19865.334723898864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"173b07f4-37d0-4831-8d6b-1b989d9e3213","savedPayload":{"position":{"x":8371.404578693528,"y":19865.334723898864},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 120 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma120","project":"Superalgos","id":"4fae8019-4feb-4608-b26e-1b84bfa92eca","savedPayload":{"position":{"x":8164.42452703739,"y":20684.044565880133},"targetPosition":{"x":8173.345499876759,"y":19888.11520632519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2fb358ff-8b9f-4b95-95f8-8be509b5b3a1","savedPayload":{"position":{"x":8173.345499876759,"y":19888.11520632519},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 120 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma120","project":"Superalgos","id":"94a5dfc2-27fa-48e5-8d60-125c185ee02c","savedPayload":{"position":{"x":7666.102712598233,"y":21012.616762200018},"targetPosition":{"x":7975.648815546541,"y":19860.882326174436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{}}},"id":"682e079f-319c-43dc-91a2-5732c3fb28c8","savedPayload":{"position":{"x":7975.648815546541,"y":19860.882326174436},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 180 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma180","project":"Superalgos","id":"c2b1772b-a983-4ecd-baec-c3ca0c346515","savedPayload":{"position":{"x":7399.678930186452,"y":20478.50323053214},"targetPosition":{"x":7790.933209543444,"y":19785.34523148415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a2a1087-3910-4dd5-90d6-2370dc8949fa","savedPayload":{"position":{"x":7790.933209543444,"y":19785.34523148415},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 180 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma180","project":"Superalgos","id":"b7886b86-1f12-4645-b2fb-ecb4182dbec2","savedPayload":{"position":{"x":7079.425481541748,"y":20240.318919928817},"targetPosition":{"x":7630.793122121642,"y":19666.25201608441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b5a66be-de8e-40c3-b3f2-e193e5deaeed","savedPayload":{"position":{"x":7630.793122121642,"y":19666.25201608441},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 240 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma240","project":"Superalgos","id":"219f9e45-38cc-4c5f-a396-f7a0788f973e","savedPayload":{"position":{"x":6828.4936097259815,"y":19930.015461871422},"targetPosition":{"x":7505.321217059107,"y":19511.106348259316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"854a73e9-f8d2-4b85-a0dd-65284e175ca0","savedPayload":{"position":{"x":7505.321217059107,"y":19511.106348259316},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 240 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma240","project":"Superalgos","id":"57299592-e72a-4e7e-ac7a-e055ac925792","savedPayload":{"position":{"x":6662.590317786035,"y":19567.089978356453},"targetPosition":{"x":7422.351736425375,"y":19329.656971983844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13eca50c-c1fb-4baa-8618-1f7eafde66c9","savedPayload":{"position":{"x":7422.351736425375,"y":19329.656971983844},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 300 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma300","project":"Superalgos","id":"fc7307b3-aeb1-49c0-bac9-ac2d27ad5d05","savedPayload":{"position":{"x":6580.714142626875,"y":19178.744185390788},"targetPosition":{"x":7375.700977904089,"y":19137.675134188095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"45ae2073-5312-48dc-b4ed-61326a2ce947","savedPayload":{"position":{"x":7375.700977904089,"y":19137.675134188095},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 300 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma300","project":"Superalgos","id":"9754f895-ef8d-4165-ae3b-efd97f52f9ce","savedPayload":{"position":{"x":6621.548014742748,"y":18776.824633809018},"targetPosition":{"x":7401.726616883854,"y":18934.54159194162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31514c9e-d4f7-4c54-94ca-4e04e5f1df5c","savedPayload":{"position":{"x":7401.726616883854,"y":18934.54159194162},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 12 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma12","project":"Superalgos","id":"cb472a55-eacc-4dec-b337-087a1116e39f","savedPayload":{"position":{"x":6763.415562186303,"y":18377.668347378556},"targetPosition":{"x":7480.034291241405,"y":18724.391823656602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48fe3ebc-6bbf-4a33-9068-2766eaf1599a","savedPayload":{"position":{"x":7480.034291241405,"y":18724.391823656602},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 600 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma600","project":"Superalgos","id":"a22c9eff-f7ff-4867-ba2e-c123b4036f99","savedPayload":{"position":{"x":6967.097034973176,"y":18063.759453803577},"targetPosition":{"x":7574.619313071224,"y":18577.895377794983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3ecee44a-2a84-41ac-b579-f6f48acc590a","savedPayload":{"position":{"x":7574.619313071224,"y":18577.895377794983},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 600 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma600","project":"Superalgos","id":"2197c8c8-f750-4adf-a521-b1e4b347663c","savedPayload":{"position":{"x":7253.04979384744,"y":17801.57780348806},"targetPosition":{"x":7714.048250134521,"y":18450.42300048595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9bd8a9e7-09cf-4989-a9fa-c2f73d361134","savedPayload":{"position":{"x":7714.048250134521,"y":18450.42300048595},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 1200 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma1200","project":"Superalgos","id":"17399e4a-5716-4e7b-9348-995fef5766eb","savedPayload":{"position":{"x":7613.7598402051335,"y":17605.212765219327},"targetPosition":{"x":7898.140655412619,"y":18348.45158147753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0481ec1e-ae49-4c99-a5ad-16c427db6e45","savedPayload":{"position":{"x":7898.140655412619,"y":18348.45158147753},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 1200 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma1200","project":"Superalgos","id":"5df49dd0-4b42-4be0-8493-2d762fa6b9c2","savedPayload":{"position":{"x":8000.938798678919,"y":17510.39495960453},"targetPosition":{"x":8091.804509364083,"y":18301.12200613795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eacd5f37-bdf2-4756-b7db-46db919b08a7","savedPayload":{"position":{"x":8091.804509364083,"y":18301.12200613795},"targetPosition":{"x":8182.249500362999,"y":19092.027131705683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ddf91804-9a1f-44db-aea2-11db8bcd6aa1","savedPayload":{"position":{"x":8182.136089724139,"y":19092.072704280137},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 6","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"34040727-f963-4459-9d11-6dfe71da067f","savedPayload":{"position":{"x":7870.470892110574,"y":19291.251271101813},"targetPosition":{"x":7918.532749729497,"y":19029.778214010472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ec04ffcd-829f-41db-9aa0-c3807ff916ef","savedPayload":{"position":{"x":7918.532749729497,"y":19029.778214010472},"targetPosition":{"x":8006.529446421318,"y":18505.21214870891},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 6 End","project":"Superalgos","id":"143eac37-51eb-4384-9455-94a62c781a28","savedPayload":{"position":{"x":7813.369318167974,"y":19002.31029299623},"targetPosition":{"x":8006.529446421318,"y":18505.21214870891},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 6 End","id":"32025fb3-9ec4-4f50-b4c9-9a73100ce864"}}},{"type":"Polygon Vertex","name":"SMA 6 Begin","project":"Superalgos","id":"ffabc963-65ea-44af-9d15-d8bf6896a781","savedPayload":{"position":{"x":7706.852273704935,"y":18945.107174743192},"targetPosition":{"x":8006.529446421318,"y":18505.21214870891},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 6 Begin","id":"dece94e6-77de-4d21-9376-c2efc825b567"}}}],"id":"12470549-c8b6-453f-a87a-396921a0a871","savedPayload":{"position":{"x":8006.529446421318,"y":18505.21214870891},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 12","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"065e548b-05c8-4419-9bd1-0ef305c8b868","savedPayload":{"position":{"x":7454.056406058586,"y":19109.098886581032},"targetPosition":{"x":7563.389156359481,"y":18866.717329380695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bb849209-1786-43ce-b2cc-cb1d43252144","savedPayload":{"position":{"x":7563.389156359481,"y":18866.717329380695},"targetPosition":{"x":7781.597622341327,"y":18382.52591882279},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 12 Begin","project":"Superalgos","id":"9af3283c-bb60-4843-beae-89f1d065c8ba","savedPayload":{"position":{"x":7472.91911226169,"y":18814.73407653735},"targetPosition":{"x":7781.597622341327,"y":18382.52591882279},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 12 Begin","id":"48fe3ebc-6bbf-4a33-9068-2766eaf1599a"}}},{"type":"Polygon Vertex","name":"SMA 12 End","project":"Superalgos","id":"fee1b2e2-fdd0-4a53-b277-b7549e08aaf8","savedPayload":{"position":{"x":7394.413549193181,"y":18746.035461837506},"targetPosition":{"x":7781.597622341327,"y":18382.52591882279},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 12 End","id":"8662f4a4-41a4-4992-a333-017cd8764cd1"}}}],"id":"986a8bf8-3b7a-4421-80bd-940fa3bfe496","savedPayload":{"position":{"x":7781.597622341327,"y":18382.52591882279},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 18","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"4ee42ccb-7981-4865-990b-09a84732f649","savedPayload":{"position":{"x":7100.6219317642135,"y":18836.55913096034},"targetPosition":{"x":7264.821157355327,"y":18627.4261059301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"557e774e-833c-4373-a833-24a2b8e1c98b","savedPayload":{"position":{"x":7264.821157355327,"y":18627.4261059301},"targetPosition":{"x":7592.608500143437,"y":18209.571306853595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 18 End","project":"Superalgos","id":"b73a1590-a667-4c62-b1b0-319bc1c35264","savedPayload":{"position":{"x":7189.422605647909,"y":18555.30018448232},"targetPosition":{"x":7592.608500143437,"y":18209.571306853595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 18 End","id":"942b73d2-241e-43dd-b83b-0d3724f331a4"}}},{"type":"Polygon Vertex","name":"SMA 18 Begin","project":"Superalgos","id":"370a951b-b7cb-47fe-8e09-799f7da546a6","savedPayload":{"position":{"x":7129.612854958716,"y":18469.772770152806},"targetPosition":{"x":7592.608500143437,"y":18209.571306853595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 18 Begin","id":"3260182a-83b5-4362-8962-84ec488b69cb"}}}],"id":"9f9eeee3-ebd5-4f65-9079-cd0ac3c373da","savedPayload":{"position":{"x":7592.608500143437,"y":18209.571306853595},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 24","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b30aa3da-65ea-4e03-88d0-d452114f94bc","savedPayload":{"position":{"x":6036.576727749292,"y":18971.08079584052},"targetPosition":{"x":6350.456467372842,"y":18725.700014962727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"42bded2a-28e5-457d-b8de-a71218db1630","savedPayload":{"position":{"x":6350.456467372842,"y":18725.700014962727},"targetPosition":{"x":6977.4336185639,"y":18235.356178207916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 24 Begin","project":"Superalgos","id":"a7a1b3d2-2c0a-47d0-8177-991c5b860ed4","savedPayload":{"position":{"x":6266.742281746996,"y":18593.80693715404},"targetPosition":{"x":6977.4336185639,"y":18235.356178207916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 24 Begin","id":"c0b2d03c-3cec-4ca2-b344-cdd99cb28362"}}},{"type":"Polygon Vertex","name":"SMA 24 End","project":"Superalgos","id":"8aac2b0b-8089-4adc-93d2-1544e0113105","savedPayload":{"position":{"x":6210.4019857731,"y":18448.134843817606},"targetPosition":{"x":6977.4336185639,"y":18235.356178207916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 24 End","id":"4b33b779-8111-415c-a1e5-893ed5f49527"}}}],"id":"5cde1b9e-eed8-4e90-9f31-9d0f38d4aef9","savedPayload":{"position":{"x":6977.4336185639,"y":18235.356178207916},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 30","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"682c040c-2367-4838-92d2-5c14e6d65e0a","savedPayload":{"position":{"x":6394.756154402687,"y":18190.9440998352},"targetPosition":{"x":6879.279696710168,"y":17973.59275336184},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"e80caa85-ac79-4b2b-ab2d-04f54c46b24b","savedPayload":{"position":{"x":6879.279696710168,"y":17973.59275336184},"targetPosition":{"x":7363.750715336988,"y":17755.937798368843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 30 End","project":"Superalgos","id":"985225d1-7a9d-45f7-93d2-59fe91c4450c","savedPayload":{"position":{"x":6846.014400939508,"y":17874.63726644333},"targetPosition":{"x":7363.750715336988,"y":17755.937798368843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 30 End","id":"8e2f5657-06b0-4e46-aa7e-8676683ffb77"}}},{"type":"Polygon Vertex","name":"SMA 30 Begin","project":"Superalgos","id":"0e1a912e-34be-4976-8d43-141b0f89a8ee","savedPayload":{"position":{"x":6832.80483911165,"y":17771.158385198014},"targetPosition":{"x":7363.750715336988,"y":17755.937798368843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 30 Begin","id":"fef118ef-22cb-4ff5-b971-c90c2a01265a"}}}],"id":"ba9cdf50-c1e0-42c5-a81c-dbc068c3b10e","savedPayload":{"position":{"x":7363.750715336988,"y":17755.937798368843},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 60","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"85247bae-4a81-4247-affa-a8889f32987c","savedPayload":{"position":{"x":6291.884593400249,"y":17691.79521514607},"targetPosition":{"x":6814.403940968976,"y":17596.713331077677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9a153786-a0a0-4686-b83d-f55fb7513c56","savedPayload":{"position":{"x":6814.403940968976,"y":17596.713331077677},"targetPosition":{"x":7336.9432512784515,"y":17501.404408525894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 60 Begin","project":"Superalgos","id":"389d9bf7-3844-4b65-9607-17dec104368f","savedPayload":{"position":{"x":6805.797788201824,"y":17492.923240209147},"targetPosition":{"x":7336.9432512784515,"y":17501.404408525894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 60 Begin","id":"8e7fb950-9b88-4aaf-95a1-982abf35b9f3"}}},{"type":"Polygon Vertex","name":"SMA 60 End","project":"Superalgos","id":"0386e3c3-f9a3-442c-b2e4-c9d069621958","savedPayload":{"position":{"x":6817.741014691757,"y":17389.287051376697},"targetPosition":{"x":7336.9432512784515,"y":17501.404408525894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 60 End","id":"173b07f4-37d0-4831-8d6b-1b989d9e3213"}}}],"id":"8170049e-056a-4818-8f0a-1a23f9c51bff","savedPayload":{"position":{"x":7336.9432512784515,"y":17501.404408525894},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 120","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"613b4c9b-b002-4c65-87b7-8b9d41eda4df","savedPayload":{"position":{"x":6311.573987266369,"y":17182.819825369435},"targetPosition":{"x":6841.693724755289,"y":17215.372110264976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"27a6e346-8da3-4900-83c4-41680d2168f4","savedPayload":{"position":{"x":6841.693724755289,"y":17215.372110264976},"targetPosition":{"x":7371.890590833289,"y":17247.721169317734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 120 Begin","project":"Superalgos","id":"956a6867-d00a-4888-9ffe-cbfabcfbe4fa","savedPayload":{"position":{"x":6858.226812042696,"y":17112.34569816824},"targetPosition":{"x":7371.890590833289,"y":17247.721169317734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 120 Begin","id":"2fb358ff-8b9f-4b95-95f8-8be509b5b3a1"}}},{"type":"Polygon Vertex","name":"SMA 120 End","project":"Superalgos","id":"040f4fe5-147d-4ba9-9a2d-fa134ca5d178","savedPayload":{"position":{"x":6894.628384401622,"y":17014.577524492615},"targetPosition":{"x":7371.890590833289,"y":17247.721169317734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 120 End","id":"682e079f-319c-43dc-91a2-5732c3fb28c8"}}}],"id":"7da9bd30-a7f8-410b-93a5-6b76ac57708b","savedPayload":{"position":{"x":7371.890590833289,"y":17247.721169317734},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 240","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d2ac585e-594d-4031-b17d-2274efc677ec","savedPayload":{"position":{"x":6452.6185786093265,"y":16692.971949921677},"targetPosition":{"x":6959.519549934161,"y":16851.46685004537},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4e402467-2d78-4d95-ba03-3910f5120122","savedPayload":{"position":{"x":6959.519549934161,"y":16851.46685004537},"targetPosition":{"x":7466.540438602882,"y":17009.790925231075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 180 Begin","project":"Superalgos","id":"efe56d7d-f6e6-4944-aa32-26d3c4ed055b","savedPayload":{"position":{"x":7000.229744713506,"y":16755.390951667312},"targetPosition":{"x":7466.540438602882,"y":17009.790925231075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 180 Begin","id":"5a2a1087-3910-4dd5-90d6-2370dc8949fa"}}},{"type":"Polygon Vertex","name":"SMA 180 End","project":"Superalgos","id":"ec3a6f4b-adf2-4be1-ab28-313bbffb7491","savedPayload":{"position":{"x":7058.973991744071,"y":16669.175152744294},"targetPosition":{"x":7466.540438602882,"y":17009.790925231075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 180 End","id":"1b5a66be-de8e-40c3-b3f2-e193e5deaeed"}}}],"id":"adf40814-2b9a-4ee8-a154-364bfca32f7a","savedPayload":{"position":{"x":7466.540438602882,"y":17009.790925231075},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 300","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"e79c6ed7-e52f-4191-a423-b14965211a19","savedPayload":{"position":{"x":6706.822462771914,"y":16251.11267843796},"targetPosition":{"x":7161.033067160406,"y":16526.33395375489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"e5cd42c0-f52d-4608-91d5-966cc7bf39b3","savedPayload":{"position":{"x":7161.033067160406,"y":16526.33395375489},"targetPosition":{"x":7615.392782443618,"y":16801.425045167678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 240 Begin","project":"Superalgos","id":"f29f45ac-86bb-4490-b8b1-9a50dc736782","savedPayload":{"position":{"x":7223.555199739098,"y":16442.79264111214},"targetPosition":{"x":7615.392782443618,"y":16801.425045167678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 240 Begin","id":"854a73e9-f8d2-4b85-a0dd-65284e175ca0"}}},{"type":"Polygon Vertex","name":"SMA 240 End","project":"Superalgos","id":"eb330333-6b0f-4fad-97a7-a34e93cc3dee","savedPayload":{"position":{"x":7301.2298229754415,"y":16373.140618013334},"targetPosition":{"x":7615.392782443618,"y":16801.425045167678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 240 End","id":"13eca50c-c1fb-4baa-8618-1f7eafde66c9"}}}],"id":"60c00cdc-dbf4-460b-b021-7339dd7bbec8","savedPayload":{"position":{"x":7615.392782443618,"y":16801.425045167678},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 600","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"182273b1-1d73-4dc7-93dc-b2a4644b18f1","savedPayload":{"position":{"x":7059.441523908423,"y":15882.919302080209},"targetPosition":{"x":7434.550303467015,"y":16258.862603424812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"3342f900-2346-4377-b6b0-34566787d6d9","savedPayload":{"position":{"x":7434.550303467015,"y":16258.862603424812},"targetPosition":{"x":7809.8174785531955,"y":16634.72325032074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 600 Begin","project":"Superalgos","id":"5b6c238c-a7cb-4002-85e5-5e84cd6ffdf8","savedPayload":{"position":{"x":7515.2550007707905,"y":16192.71208534432},"targetPosition":{"x":7809.8174785531955,"y":16634.72325032074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 600 Begin","id":"3ecee44a-2a84-41ac-b579-f6f48acc590a"}}},{"type":"Polygon Vertex","name":"SMA 600 End","project":"Superalgos","id":"b60e6d28-cb70-49c5-9e06-c67cfe81b1f1","savedPayload":{"position":{"x":7607.352830596294,"y":16143.673205103958},"targetPosition":{"x":7809.8174785531955,"y":16634.72325032074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 600 End","id":"9bd8a9e7-09cf-4989-a9fa-c2f73d361134"}}}],"id":"93c1746c-2470-4032-84e1-c16a2d4e3921","savedPayload":{"position":{"x":7809.8174785531955,"y":16634.72325032074},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 1200","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"f0b2a565-d33f-42d4-85ed-d61766b82af7","savedPayload":{"position":{"x":7490.086731137799,"y":15609.794099868745},"targetPosition":{"x":7764.271115127343,"y":16064.593080996601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"e108f855-0252-4113-8bd3-2cf2581abc47","savedPayload":{"position":{"x":7764.271115127343,"y":16064.593080996601},"targetPosition":{"x":8038.576997876298,"y":16519.364870327743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 1200 Begin","project":"Superalgos","id":"f15e631f-a4ef-4493-bb68-8c3a082ba0aa","savedPayload":{"position":{"x":7858.488842099869,"y":16019.680165354763},"targetPosition":{"x":8038.576997876298,"y":16519.364870327743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 1200 Begin","id":"0481ec1e-ae49-4c99-a5ad-16c427db6e45"}}},{"type":"Polygon Vertex","name":"SMA 1200 End","project":"Superalgos","id":"cf097102-9c66-4f90-95cd-1c1c9efc113b","savedPayload":{"position":{"x":7959.726359086046,"y":15994.096564582214},"targetPosition":{"x":8038.576997876298,"y":16519.364870327743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 1200 End","id":"eacd5f37-bdf2-4756-b7db-46db919b08a7"}}}],"id":"790efcb9-f3af-4e01-86f2-adbfcda6a356","savedPayload":{"position":{"x":8038.576997876298,"y":16519.364870327743},"targetPosition":{"x":8398.770467753533,"y":17518.37270415975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"93675e57-6b0f-4fe5-8c8a-a4c02f794650","savedPayload":{"position":{"x":8238.66951813001,"y":18267.81656837503},"targetPosition":{"x":9157.701562317623,"y":17736.303306547787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"SMA Base 6","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"SMA 6","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma6","project":"Superalgos","id":"bf5de8a3-8c0b-41e8-8d21-bef5a721133f","savedPayload":{"position":{"x":9128.107651840997,"y":16891.90847946323},"targetPosition":{"x":9226.396623863315,"y":16644.907232081652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"995dd126-9cef-4b6e-960f-6828cfc41777","savedPayload":{"position":{"x":9226.396623863315,"y":16644.907232081652},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 12","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma12","project":"Superalgos","id":"9d4756de-3019-4ab6-a77d-7a1452ce1813","savedPayload":{"position":{"x":8902.147562635779,"y":16730.41172421395},"targetPosition":{"x":9104.104806538533,"y":16557.379237332785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"414bd6ad-d6c6-4100-867e-232c6e649de2","savedPayload":{"position":{"x":9104.104806538533,"y":16557.379237332785},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 18","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma18","project":"Superalgos","id":"8c7a57b7-0d00-4239-b7ce-018b8da0fce7","savedPayload":{"position":{"x":8777.345517165639,"y":16482.518418348063},"targetPosition":{"x":9036.702994842137,"y":16423.179568146043},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2b73a8b5-c7a5-47b2-acad-87fa5aec85be","savedPayload":{"position":{"x":9036.702994842137,"y":16423.179568146043},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 24","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma24","project":"Superalgos","id":"3880e650-f608-4c97-8b5a-6956c8c2fba7","savedPayload":{"position":{"x":8782.037836613224,"y":16205.591510859282},"targetPosition":{"x":9039.329951372438,"y":16273.387347850246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7655b5d6-708e-4e05-9499-2058d8511689","savedPayload":{"position":{"x":9039.329951372438,"y":16273.387347850246},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 30","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma30","project":"Superalgos","id":"ae5edcfd-b4be-4c3e-bb28-333fade4b88d","savedPayload":{"position":{"x":8915.021822425424,"y":15962.218582661364},"targetPosition":{"x":9111.276330775498,"y":16141.820294973662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad60eba1-2b62-4b1f-bed9-de38285f4acc","savedPayload":{"position":{"x":9111.276330775498,"y":16141.820294973662},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 60","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma60","project":"Superalgos","id":"cd97e51b-fa6a-4d6e-b7dd-43c9299bde4d","savedPayload":{"position":{"x":9145.76697142252,"y":15808.471820899347},"targetPosition":{"x":9236.055793553933,"y":16058.777694547916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5baddfba-9384-417f-954a-37abf160567e","savedPayload":{"position":{"x":9236.055793553933,"y":16058.777694547916},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 120","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma120","project":"Superalgos","id":"189b3ffd-8d2b-4124-af4c-52a9756c3409","savedPayload":{"position":{"x":9421.038960232203,"y":15779.458613080737},"targetPosition":{"x":9384.860135408286,"y":16043.08938415745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"980faff9-33a9-4c63-b64c-3bdbeeeb1b8a","savedPayload":{"position":{"x":9384.860135408286,"y":16043.08938415745},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 180","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma180","project":"Superalgos","id":"7dac036e-a376-493f-8e5a-d8a7e211f262","savedPayload":{"position":{"x":9678.685252236359,"y":15881.881350178082},"targetPosition":{"x":9524.20557378358,"y":16098.336315001161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d22d8f06-1510-43c7-a233-7a5dc67f809b","savedPayload":{"position":{"x":9524.20557378358,"y":16098.336315001161},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 240","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma240","project":"Superalgos","id":"2b86e2e4-bf2d-4b68-a54e-a781e56458bf","savedPayload":{"position":{"x":9859.428005354319,"y":16092.216053287066},"targetPosition":{"x":9621.898048440777,"y":16212.10827312235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"696305ab-09c2-41af-bfb3-85ce4fb5e705","savedPayload":{"position":{"x":9621.898048440777,"y":16212.10827312235},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 300 ","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma300","project":"Superalgos","id":"03bc78eb-d57f-41fc-a8ba-3592e222d5cc","savedPayload":{"position":{"x":9921.60647505218,"y":16362.129439114626},"targetPosition":{"x":9655.721707405268,"y":16358.077111049432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f34223f9-87e3-49fe-8acf-77080dffa25f","savedPayload":{"position":{"x":9655.721707405268,"y":16358.077111049432},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 600 ","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma600","project":"Superalgos","id":"c6511ef3-8c3a-445c-9d90-1bb91a1763fb","savedPayload":{"position":{"x":9851.010086436028,"y":16630.556181734548},"targetPosition":{"x":9617.613799751543,"y":16503.366123196207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ff4236e0-4c9b-4b98-9dd3-b3c152bb12e2","savedPayload":{"position":{"x":9617.613799751543,"y":16503.366123196207},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 1200 ","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma1200","project":"Superalgos","id":"931713d5-2d25-428f-95bc-0a21e01892f7","savedPayload":{"position":{"x":9663.48901968612,"y":16835.48235985025},"targetPosition":{"x":9516.129053857883,"y":16614.35396314737},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e3345124-6aed-4164-ab86-041fd39608b0","savedPayload":{"position":{"x":9516.129053857883,"y":16614.35396314737},"targetPosition":{"x":9342.280794431143,"y":16353.221111652263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"40313dff-6c5d-4650-bd51-8767bba6f6ad","savedPayload":{"position":{"x":8627.980697466191,"y":16818.405408218063},"targetPosition":{"x":9157.701562317623,"y":17736.303306547787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6ace920a-3a4b-4d28-8f04-4c2ecd3dfeb8","savedPayload":{"position":{"x":9752.106035388051,"y":17917.9854210064},"targetPosition":{"x":10336.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"SMA Base 5","config":"{\n\t\"codeName\": \"SMA-Base7\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"SMA 5 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma5","project":"Superalgos","id":"37d1cd48-3a3f-4477-a125-76dcec51195b","savedPayload":{"position":{"x":11254.604515332216,"y":12982.317767868859},"targetPosition":{"x":11389.353051419119,"y":14561.406021107547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9eca5bc8-cdb2-46fb-9a26-1c2da03b8818","savedPayload":{"position":{"x":11389.353051419119,"y":14561.406021107547},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 5 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma5","project":"Superalgos","id":"3537c835-0158-465b-81d1-5440a40a649b","savedPayload":{"position":{"x":12047.763435013992,"y":13014.60489623446},"targetPosition":{"x":11785.979598511269,"y":14577.549312159099},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"db00298d-2997-4640-93fe-17125aeb7f0e","savedPayload":{"position":{"x":11785.979598511269,"y":14577.549312159099},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 10 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma10","project":"Superalgos","id":"3f1d398f-6d0a-4713-8fbf-29cbb133be3e","savedPayload":{"position":{"x":12808.651634463917,"y":13243.478535081294},"targetPosition":{"x":12166.411392189788,"y":14691.976627701515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2e038ee-355d-4862-a454-514f7bcf31cf","savedPayload":{"position":{"x":12166.411392189788,"y":14691.976627701515},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 15 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma15","project":"Superalgos","id":"cadaa709-8956-4c7a-9215-76ac92a53517","savedPayload":{"position":{"x":13488.77888319562,"y":13654.04051145998},"targetPosition":{"x":12506.484997140058,"y":14897.23475176062},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"02f80e02-080a-4950-9ffc-2f3b5770b404","savedPayload":{"position":{"x":12506.484997140058,"y":14897.23475176062},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 15 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma15","project":"Superalgos","id":"e4212208-3b31-47c0-aebd-966d4a77c0f9","savedPayload":{"position":{"x":14045.502482610049,"y":14220.790687745273},"targetPosition":{"x":12784.83308761624,"y":15180.611832248558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32c7c4d3-a210-4d4d-8d10-bb23f91edcda","savedPayload":{"position":{"x":12784.83308761624,"y":15180.611832248558},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 20 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma20","project":"Superalgos","id":"73c6c2a6-b4b7-4d2a-be7e-5810261e68c7","savedPayload":{"position":{"x":14443.775723746747,"y":14908.136675448059},"targetPosition":{"x":12983.964978504697,"y":15524.301057793791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6b07cc40-e7da-48bc-a49b-cac5a0615c34","savedPayload":{"position":{"x":12983.964978504697,"y":15524.301057793791},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 20 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma20","project":"Superalgos","id":"c8dd3770-668a-47d7-aad8-db412890bc28","savedPayload":{"position":{"x":14659.016452476253,"y":15672.957647872234},"targetPosition":{"x":13091.5931751961,"y":15906.711249996708},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2f2041d-b896-44d7-b251-85eb1cd7fadf","savedPayload":{"position":{"x":13091.5931751961,"y":15906.711249996708},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 25 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma25","project":"Superalgos","id":"d7265ad0-64e1-4fb7-8cd0-bdbf329b3d6d","savedPayload":{"position":{"x":14676.9592002972,"y":16466.49130586259},"targetPosition":{"x":13100.565201798192,"y":16303.465925203338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78b96701-c691-41fa-91d2-3bdb00e2e0fa","savedPayload":{"position":{"x":13100.565201798192,"y":16303.465925203338},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 25 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma25","project":"Superalgos","id":"5cefb3f2-2429-478b-80a8-8f9e07e12c00","savedPayload":{"position":{"x":14496.299730170018,"y":17240.21531597365},"targetPosition":{"x":13010.25421430045,"y":16690.293203265504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c9293d92-6255-4c96-9bf9-f4c6dcf419a1","savedPayload":{"position":{"x":13010.25421430045,"y":16690.293203265504},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 50 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma50","project":"Superalgos","id":"cfa001a1-ac90-4713-b542-4fab32f377e0","savedPayload":{"position":{"x":14129.41701866566,"y":17944.705051785877},"targetPosition":{"x":12826.783868308092,"y":17042.5437368819},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1d352202-ba2e-41a7-9d4b-c4c97d2e391d","savedPayload":{"position":{"x":12826.783868308092,"y":17042.5437368819},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 50 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma50","project":"Superalgos","id":"1655e27e-3738-4b5d-8961-105e11b5070c","savedPayload":{"position":{"x":13599.040673232612,"y":18535.708989593262},"targetPosition":{"x":12561.563519671701,"y":17338.04502466745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4e34e6e6-d370-4127-b4fe-0c9fd591e730","savedPayload":{"position":{"x":12561.563519671701,"y":17338.04502466745},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 100 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma100","project":"Superalgos","id":"44d9a566-3392-4f8f-ae69-f16de47bdd50","savedPayload":{"position":{"x":12927.919532684715,"y":18993.984828638346},"targetPosition":{"x":12231.370007911992,"y":17558.09193128513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"651f424a-51be-4b25-a895-d50f75329384","savedPayload":{"position":{"x":12231.370007911992,"y":17558.09193128513},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 100 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma100","project":"Superalgos","id":"05d2a007-3c1e-4e61-8cef-0aa1bdb3c0f5","savedPayload":{"position":{"x":12123.685996169126,"y":19197.984941638457},"targetPosition":{"x":11791.29613628973,"y":17639.85387920112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aada5c3d-5ff5-4afd-8dd1-298ce8fce853","savedPayload":{"position":{"x":11791.29613628973,"y":17639.85387920112},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 150 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma150","project":"Superalgos","id":"f5f1a287-14c5-4b05-9032-85623b3e948f","savedPayload":{"position":{"x":11396.104758292819,"y":19307.760280390336},"targetPosition":{"x":11460.266289114472,"y":17724.06127942761},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"55d6b376-dd20-4044-b6c2-51acd03bee71","savedPayload":{"position":{"x":11460.266289114472,"y":17724.06127942761},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 150 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma150","project":"Superalgos","id":"e8805c13-2905-47dd-ad3d-eea5d645fd2f","savedPayload":{"position":{"x":10612.779440288185,"y":19175.6925612597},"targetPosition":{"x":11068.433530643284,"y":17657.973394573783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"812b92a9-2ba5-44e2-b255-976f8354e841","savedPayload":{"position":{"x":11068.433530643284,"y":17657.973394573783},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 200 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma200","project":"Superalgos","id":"13b0144f-8413-43d8-97f9-61a50712a17b","savedPayload":{"position":{"x":9885.847810890536,"y":18852.776771749803},"targetPosition":{"x":10704.879070888015,"y":17495.89499034751},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"652e1cae-11c0-489c-a820-03296a362c77","savedPayload":{"position":{"x":10704.879070888015,"y":17495.89499034751},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 200 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma200","project":"Superalgos","id":"51211e13-8719-4d03-afb1-a7bb2f656f68","savedPayload":{"position":{"x":9263.21139797568,"y":18360.687122024396},"targetPosition":{"x":10393.670698169535,"y":17250.31267482924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4e4458f4-c6ca-4235-8734-8e833d3722f2","savedPayload":{"position":{"x":10393.670698169535,"y":17250.31267482924},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 250 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma250","project":"Superalgos","id":"a37e3e5a-dc59-4373-97c3-98de0c09fbb7","savedPayload":{"position":{"x":8781.86460313504,"y":17728.6204374918},"targetPosition":{"x":10153.152307255426,"y":16934.433162424168},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"52aefae1-6ceb-47c4-a82d-ac55a7b91b25","savedPayload":{"position":{"x":10153.152307255426,"y":16934.433162424168},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 250 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.sma250","project":"Superalgos","id":"aae7721e-b9d3-4629-94be-eecd49675c8f","savedPayload":{"position":{"x":8473.135286263878,"y":16997.040674489035},"targetPosition":{"x":9998.680805086446,"y":16568.57388592151},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ddf18b2-93b4-4422-9e64-f9fc22f5de52","savedPayload":{"position":{"x":9998.680805086446,"y":16568.57388592151},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 500 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"65cfa112-3dc1-4bbd-9f90-13076e630272","savedPayload":{"position":{"x":8337.557594955164,"y":16208.229768479781},"targetPosition":{"x":9939.689257141508,"y":16175.7418815606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d1ec756e-a71c-433b-ad10-ef8234617768","savedPayload":{"position":{"x":9939.689257141508,"y":16175.7418815606},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 500 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"577145f8-de78-4ded-a41e-86f9b54ec8a2","savedPayload":{"position":{"x":8437.59860890629,"y":15421.508675532863},"targetPosition":{"x":9980.883285563057,"y":15780.9938652311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b2fbef6-9a30-4ed6-a98e-5ccceb77aea3","savedPayload":{"position":{"x":9980.883285563057,"y":15780.9938652311},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 10 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.sma10","project":"Superalgos","id":"520c2e51-b036-4267-928d-53f69d83747b","savedPayload":{"position":{"x":8716.962683878144,"y":14677.453507298553},"targetPosition":{"x":10119.012817569837,"y":15408.518720461996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7fe319a5-1a75-4f65-97da-20345cc502c2","savedPayload":{"position":{"x":10119.012817569837,"y":15408.518720461996},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 1000 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"3514870d-ad16-4bee-b5fa-a68739f3b332","savedPayload":{"position":{"x":9156.353112681754,"y":14029.632265106286},"targetPosition":{"x":10345.230756193752,"y":15081.993696686382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"db6c9de6-aeb9-46ff-a46d-893ac56a32a2","savedPayload":{"position":{"x":10345.230756193752,"y":15081.993696686382},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SMA 1000 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.propertyA","project":"Superalgos","id":"9cd8a206-16f2-446d-b63e-43faa32d7abd","savedPayload":{"position":{"x":9766.77341168357,"y":13503.597715903159},"targetPosition":{"x":10645.567417076196,"y":14821.953382914717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e518b92f-f678-4868-ae0c-a0bd31f480eb","savedPayload":{"position":{"x":10645.567417076196,"y":14821.953382914717},"targetPosition":{"x":11524.167824900098,"y":16140.496033265808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f32ec0d3-ec1a-4f9d-b0dc-a394dac962ba","savedPayload":{"position":{"x":11524.167824900098,"y":16140.496033265808},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 5","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a7e019b1-8c26-45dc-a717-de61a361f789","savedPayload":{"position":{"x":5898.624780708225,"y":17359.02357236948},"targetPosition":{"x":6241.613792926084,"y":17156.80286274157},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7da673e1-96be-42bb-ac8e-ba94da835b8d","savedPayload":{"position":{"x":6241.613792926084,"y":17156.80286274157},"targetPosition":{"x":6926.246973763242,"y":16752.733965991414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 5 End","project":"Superalgos","id":"e755e4bb-ff8f-4591-b0ae-878d71639fd5","savedPayload":{"position":{"x":6175.90087717264,"y":17015.204169514953},"targetPosition":{"x":6926.246973763242,"y":16752.733965991414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 5 End","id":"db00298d-2997-4640-93fe-17125aeb7f0e"}}},{"type":"Polygon Vertex","name":"SMA 5 Begin","project":"Superalgos","id":"c452cccc-8d2b-4630-9219-fb5e4d89fb1e","savedPayload":{"position":{"x":6138.970248296388,"y":16863.612141027872},"targetPosition":{"x":6926.246973763242,"y":16752.733965991414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 5 Begin","id":"9eca5bc8-cdb2-46fb-9a26-1c2da03b8818"}}}],"id":"9de00c59-ad47-414f-93f4-976d1a798e33","savedPayload":{"position":{"x":6926.246973763242,"y":16752.733965991414},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 10","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d99069f1-59c4-4dd2-a77f-15de8869aeaf","savedPayload":{"position":{"x":5710.227167440338,"y":16767.372193321728},"targetPosition":{"x":6089.63824125945,"y":16646.704547237205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6867a6be-eb3c-4c1f-a83e-f630c5a40ba3","savedPayload":{"position":{"x":6089.63824125945,"y":16646.704547237205},"targetPosition":{"x":6846.937387081867,"y":16405.3536695277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 10 Begin","project":"Superalgos","id":"43ddbce7-424a-4718-9012-bd9327a7b6e0","savedPayload":{"position":{"x":6057.037243327497,"y":16494.118567739155},"targetPosition":{"x":6846.937387081867,"y":16405.3536695277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 10 Begin","id":"7fe319a5-1a75-4f65-97da-20345cc502c2"}}},{"type":"Polygon Vertex","name":"SMA 10 End","project":"Superalgos","id":"f48c16c1-ca4a-4a64-ae78-78cbc754888e","savedPayload":{"position":{"x":6054.638403330609,"y":16338.587779508107},"targetPosition":{"x":6846.937387081867,"y":16405.3536695277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 10 End","id":"b2e038ee-355d-4862-a454-514f7bcf31cf"}}}],"id":"0c387d26-20c4-4a66-aac4-599d98b8300e","savedPayload":{"position":{"x":6846.937387081867,"y":16405.3536695277},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 15","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"e52e6176-fecb-48d3-ad99-7b66e11b02de","savedPayload":{"position":{"x":5658.035226923817,"y":16149.762332203682},"targetPosition":{"x":6054.9061800589225,"y":16116.589502699215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"3850ed1d-dc3b-47b2-bee7-7aa961acfaa2","savedPayload":{"position":{"x":6054.9061800589225,"y":16116.589502699215},"targetPosition":{"x":6846.98244272844,"y":16049.715059408161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 15 End","project":"Superalgos","id":"3f50ad9c-b951-420f-92cb-564d050f144e","savedPayload":{"position":{"x":6057.006693773823,"y":15960.773992185466},"targetPosition":{"x":6846.98244272844,"y":16049.715059408161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 15 End","id":"32c7c4d3-a210-4d4d-8d10-bb23f91edcda"}}},{"type":"Polygon Vertex","name":"SMA 15 Begin","project":"Superalgos","id":"5cce1576-091c-49fa-a98f-0ebcf033c933","savedPayload":{"position":{"x":6089.630733135986,"y":15808.160619758462},"targetPosition":{"x":6846.98244272844,"y":16049.715059408161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 15 Begin","id":"02f80e02-080a-4950-9ffc-2f3b5770b404"}}}],"id":"9f49d18a-dfd7-4d55-8a1e-c186dbfc043e","savedPayload":{"position":{"x":6846.98244272844,"y":16049.715059408161},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"e9126aac-9402-4bfc-9f89-b6996780d7ba","savedPayload":{"position":{"x":5744.550901802635,"y":15535.874271274544},"targetPosition":{"x":6138.664478101753,"y":15591.533975452412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9ec36dc5-91e0-4861-8748-9f9b7d92bacc","savedPayload":{"position":{"x":6138.664478101753,"y":15591.533975452412},"targetPosition":{"x":6926.010414578679,"y":15702.474184147826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 20 Begin","project":"Superalgos","id":"6a595b60-ea82-4ef7-ad14-f698d4885e0d","savedPayload":{"position":{"x":6175.56173822725,"y":15439.840093525461},"targetPosition":{"x":6926.010414578679,"y":15702.474184147826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 20 Begin","id":"6b07cc40-e7da-48bc-a49b-cac5a0615c34"}}},{"type":"Polygon Vertex","name":"SMA 20 End","project":"Superalgos","id":"3d4d3854-f28c-462a-b08a-21db3bdf9d82","savedPayload":{"position":{"x":6241.362508462567,"y":15298.415365586585},"targetPosition":{"x":6926.010414578679,"y":15702.474184147826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 20 End","id":"e2f2041d-b896-44d7-b251-85eb1cd7fadf"}}}],"id":"39db09d1-e5b2-4e83-80b5-41b5af443e3f","savedPayload":{"position":{"x":6926.010414578679,"y":15702.474184147826},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 25","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"938779af-a8c9-48dc-a936-7f196f976c5a","savedPayload":{"position":{"x":5594.084373752445,"y":14813.202897893683},"targetPosition":{"x":6337.243589906877,"y":15098.546767756252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c905d757-47ba-4c5b-9f85-73db3050e897","savedPayload":{"position":{"x":6337.243589906877,"y":15098.546767756252},"targetPosition":{"x":7080.56461483545,"y":15381.73535784935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 25 End","project":"Superalgos","id":"a952acf4-c97a-40f5-8f9d-edbae371305d","savedPayload":{"position":{"x":6407.4081272683725,"y":14958.66061707899},"targetPosition":{"x":7080.56461483545,"y":15381.73535784935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 25 End","id":"c9293d92-6255-4c96-9bf9-f4c6dcf419a1"}}},{"type":"Polygon Vertex","name":"SMA 25 Begin","project":"Superalgos","id":"88efd4f2-dc1e-43d6-96f0-7e60ed1d4177","savedPayload":{"position":{"x":6502.770173648594,"y":14835.334073997652},"targetPosition":{"x":7080.56461483545,"y":15381.73535784935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 25 Begin","id":"78b96701-c691-41fa-91d2-3bdb00e2e0fa"}}}],"id":"9b80c90a-521b-4d8e-ba2b-781f3aee1fb2","savedPayload":{"position":{"x":7080.56461483545,"y":15381.73535784935},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b8842dee-7b08-40e5-818d-54df493e6e20","savedPayload":{"position":{"x":5974.218207617305,"y":14214.12579186019},"targetPosition":{"x":6635.88443507774,"y":14656.229095391034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c1dfcdd1-96a1-49ee-82e6-7d78077c43c0","savedPayload":{"position":{"x":6641.559191643686,"y":14660.462915613587},"targetPosition":{"x":7302.455818250706,"y":15103.237352464135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 50 Begin","project":"Superalgos","id":"cdbfa16a-32ae-43e0-ba6f-940351c04786","savedPayload":{"position":{"x":6740.422271549927,"y":14541.143071479502},"targetPosition":{"x":7302.455818250706,"y":15103.237352464135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 50 Begin","id":"1d352202-ba2e-41a7-9d4b-c4c97d2e391d"}}},{"type":"Polygon Vertex","name":"SMA 50 End","project":"Superalgos","id":"5e17d592-e906-4b8b-b48b-97b98cdd2cd1","savedPayload":{"position":{"x":6861.009400608327,"y":14442.238825584896},"targetPosition":{"x":7302.455818250706,"y":15103.237352464135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 50 End","id":"4e34e6e6-d370-4127-b4fe-0c9fd591e730"}}}],"id":"39d6a3fc-1380-4e2d-8de6-13d0b9e7a8e3","savedPayload":{"position":{"x":7302.455818250706,"y":15103.237352464135},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 100","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"2a39fe15-bcc6-49a4-9dcd-41c882a4b361","savedPayload":{"position":{"x":6483.017421302578,"y":13719.638808567148},"targetPosition":{"x":7029.593665995624,"y":14297.823870143538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ea97087b-647a-4900-8de5-2aabe7f95095","savedPayload":{"position":{"x":7029.730791047241,"y":14297.8428513599},"targetPosition":{"x":7576.56031909923,"y":14876.159299033758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 100 Begin","project":"Superalgos","id":"d87c3f75-6f43-4087-ab8b-0493e77a3a25","savedPayload":{"position":{"x":7157.994166743541,"y":14207.879327854424},"targetPosition":{"x":7581.028457304848,"y":14881.116855921035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 100 Begin","id":"651f424a-51be-4b25-a895-d50f75329384"}}},{"type":"Polygon Vertex","name":"SMA 100 End","project":"Superalgos","id":"b6782eed-6d13-4cf8-98c1-b623da09e0d1","savedPayload":{"position":{"x":7297.753778030259,"y":14138.147609090809},"targetPosition":{"x":7581.028457304848,"y":14881.116855921035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 100 End","id":"aada5c3d-5ff5-4afd-8dd1-298ce8fce853"}}}],"id":"c7c55c53-c6ee-4edc-8b4e-eab2ece17db9","savedPayload":{"position":{"x":7581.028457304848,"y":14881.116855921035},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 150","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"7e3e32b9-1c64-43f1-85ab-6bb2d777c5a5","savedPayload":{"position":{"x":7090.099040886136,"y":13353.081110122366},"targetPosition":{"x":7494.0445241354755,"y":14037.987845771859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"91bbb7a8-0800-4d46-a3ba-bd195153f61e","savedPayload":{"position":{"x":7493.1916875047355,"y":14035.918016063259},"targetPosition":{"x":7897.56976249551,"y":14721.438196487205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 150 Begin","project":"Superalgos","id":"db2a660d-2315-482c-a29a-38acac0ca453","savedPayload":{"position":{"x":7639.324985291598,"y":13976.400074191348},"targetPosition":{"x":7901.8183518318765,"y":14726.800252896563},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 150 Begin","id":"55d6b376-dd20-4044-b6c2-51acd03bee71"}}},{"type":"Polygon Vertex","name":"SMA 150 End","project":"Superalgos","id":"2c0a8a74-58c0-4331-a438-2154306fb317","savedPayload":{"position":{"x":7790.761422719745,"y":13939.6445027938},"targetPosition":{"x":7901.8183518318765,"y":14726.800252896563},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 150 End","id":"812b92a9-2ba5-44e2-b255-976f8354e841"}}}],"id":"5c7935c9-6393-4e0f-8561-742533c1ebcf","savedPayload":{"position":{"x":7901.8183518318765,"y":14726.800252896563},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 200","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"0ab949bd-a21b-43e8-ae5d-ba2067fa9436","savedPayload":{"position":{"x":7762.492294167747,"y":13128.347053218302},"targetPosition":{"x":8003.859459276693,"y":13885.994992940869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"838799c3-76c5-4e9e-9291-e297d352969c","savedPayload":{"position":{"x":8003.4763253119745,"y":13883.827086107127},"targetPosition":{"x":8245.12947260895,"y":14642.108806436348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 200 Begin","project":"Superalgos","id":"f36ca4d6-1114-4958-9bf2-09cd34536077","savedPayload":{"position":{"x":8159.985999926856,"y":13857.31975346093},"targetPosition":{"x":8248.940246696668,"y":14647.583891286631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 200 Begin","id":"652e1cae-11c0-489c-a820-03296a362c77"}}},{"type":"Polygon Vertex","name":"SMA 200 End","project":"Superalgos","id":"af95d8b6-43cf-4529-910a-8713ab69fb13","savedPayload":{"position":{"x":8315.592510899525,"y":13855.456708518788},"targetPosition":{"x":8248.940246696668,"y":14647.583891286631},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 200 End","id":"4e4458f4-c6ca-4235-8734-8e833d3722f2"}}}],"id":"796fa379-26a6-4443-b515-1be86217f891","savedPayload":{"position":{"x":8248.940246696668,"y":14647.583891286631},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 250","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.BLACK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"6f488fbe-fb26-4965-9ad2-be64bc66477e","savedPayload":{"position":{"x":8467.760104740883,"y":13058.857172348196},"targetPosition":{"x":8534.442620376398,"y":13851.244178224668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1860376f-2657-41cb-84d1-10c324f64535","savedPayload":{"position":{"x":8534.584546689817,"y":13849.04909225246},"targetPosition":{"x":8601.415768774914,"y":14642.113124613585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 250 End","project":"Superalgos","id":"e513348c-19d0-49e5-a77f-e6059d459335","savedPayload":{"position":{"x":8693.72509380208,"y":13857.583152445624},"targetPosition":{"x":8604.725148368376,"y":14647.678914778158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 250 End","id":"8ddf18b2-93b4-4422-9e64-f9fc22f5de52"}}},{"type":"Polygon Vertex","name":"SMA 250 Begin","project":"Superalgos","id":"ddd52ba0-601f-4121-908e-9cd42450ecaa","savedPayload":{"position":{"x":8846.156766555978,"y":13890.180403608134},"targetPosition":{"x":8604.725148368376,"y":14647.678914778158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 250 Begin","id":"52aefae1-6ceb-47c4-a82d-ac55a7b91b25"}}}],"id":"3ec27802-69a6-4c76-8bf5-ba92335ff928","savedPayload":{"position":{"x":8604.725148368376,"y":14647.678914778158},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 500","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.BLACK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b8892640-241d-4817-90b9-142d50f45575","savedPayload":{"position":{"x":9170.539672142233,"y":13148.132010487972},"targetPosition":{"x":9059.473223891135,"y":13935.512141689218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"640d28c5-0762-4fe0-8d3b-b2b2fd178cbe","savedPayload":{"position":{"x":9060.108806415126,"y":13933.332511866647},"targetPosition":{"x":8948.960779210738,"y":14721.45730130827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 500 Begin","project":"Superalgos","id":"cc1d57e4-c69b-4faf-987e-1ecc6402d774","savedPayload":{"position":{"x":9214.431169509287,"y":13976.230175554481},"targetPosition":{"x":8951.798543616984,"y":14726.800309194063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 500 Begin","id":"d1ec756e-a71c-433b-ad10-ef8234617768"}}},{"type":"Polygon Vertex","name":"SMA 500 End","project":"Superalgos","id":"f5f0ed9f-dc7d-40cb-94cb-9fca1de4aacf","savedPayload":{"position":{"x":9355.810471454457,"y":14042.179877162023},"targetPosition":{"x":8951.798543616984,"y":14726.800309194063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 500 End","id":"0b2fbef6-9a30-4ed6-a98e-5ccceb77aea3"}}}],"id":"d638a3eb-6f91-4c41-9f65-981ba269343a","savedPayload":{"position":{"x":8951.798543616984,"y":14726.800309194063},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 1000","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.BLACK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"accb8fb4-da01-4314-bda3-a127f32443db","savedPayload":{"position":{"x":9837.387047803968,"y":13389.82112935621},"targetPosition":{"x":9553.792066279693,"y":14132.922753310495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2139584e-6960-4ac5-a6b2-d45aae1cfae3","savedPayload":{"position":{"x":9554.185921355991,"y":14132.64658458411},"targetPosition":{"x":9270.385770384844,"y":14876.246477311379},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SMA 1000 Begin","project":"Superalgos","id":"82d72489-eb93-4293-8b96-498e6756e89d","savedPayload":{"position":{"x":9695.774069903691,"y":14208.243257070533},"targetPosition":{"x":9272.77971366134,"y":14881.255399754165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 1000 Begin","id":"db6c9de6-aeb9-46ff-a46d-893ac56a32a2"}}},{"type":"Polygon Vertex","name":"SMA 1000 End","project":"Superalgos","id":"e781d4f3-58b9-4fce-82aa-27b669582090","savedPayload":{"position":{"x":9819.109634908778,"y":14303.806395517597},"targetPosition":{"x":9272.77971366134,"y":14881.255399754165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SMA 1000 End","id":"e518b92f-f678-4868-ae0c-a0bd31f480eb"}}}],"id":"8042e9e4-b3be-4d8b-94bc-558b8b97a3f0","savedPayload":{"position":{"x":9272.77971366134,"y":14881.255399754165},"targetPosition":{"x":8426.705423653035,"y":16227.407603939377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"9847b54e-34cd-4a44-b43f-be3c091f5ec0","savedPayload":{"position":{"x":8426.705423653035,"y":16227.407603939377},"targetPosition":{"x":9546.823996722476,"y":17347.5391788509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"SMA Base 5","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"SMA 5","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma5","project":"Superalgos","id":"5c11d2b4-671b-42ec-88b0-9dbbf0ba5a57","savedPayload":{"position":{"x":9277.089591114182,"y":16800.50042766004},"targetPosition":{"x":9400.891315491339,"y":16564.7487336349},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ec513f64-7c7c-4693-ac51-b2e36f2f858c","savedPayload":{"position":{"x":9400.891315491339,"y":16564.7487336349},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 10","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma10","project":"Superalgos","id":"5e333385-55ff-48d1-abb0-0757ef26a20c","savedPayload":{"position":{"x":9065.059013195303,"y":16618.817953353486},"targetPosition":{"x":9284.19437658519,"y":16467.83472140327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c599221d-9b35-48c5-bb4d-4c4fd0c8c4e8","savedPayload":{"position":{"x":9284.19437658519,"y":16467.83472140327},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 15","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma15","project":"Superalgos","id":"0cb3bdcb-7c0b-4cfa-9357-0b142c1e230b","savedPayload":{"position":{"x":8971.160598384402,"y":16356.300645654039},"targetPosition":{"x":9235.632242167325,"y":16324.448528645873},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f3ff46f2-80e9-458f-b7ca-8f0fe7c7cff2","savedPayload":{"position":{"x":9235.632242167325,"y":16324.448528645873},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 20","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma20","project":"Superalgos","id":"8dc1f569-2c1e-4842-b135-528ba461ca30","savedPayload":{"position":{"x":9004.298169584825,"y":16081.373515847125},"targetPosition":{"x":9253.990581457252,"y":16176.04505028882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"14a4ef21-076b-418a-98a6-7b3ff64f2a9f","savedPayload":{"position":{"x":9253.990581457252,"y":16176.04505028882},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 25","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma25","project":"Superalgos","id":"2d76e840-cdda-48e8-9290-342c2a143b6d","savedPayload":{"position":{"x":9162.774564246094,"y":15853.759744014309},"targetPosition":{"x":9338.82847308835,"y":16052.529159044414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8d31fc6-55db-4a89-bcc8-4e33a3583542","savedPayload":{"position":{"x":9338.82847308835,"y":16052.529159044414},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 50","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma50","project":"Superalgos","id":"9a0af05e-b760-4a22-85ab-8b3c64b3ef29","savedPayload":{"position":{"x":9407.780218853237,"y":15723.618705719471},"targetPosition":{"x":9471.82455758275,"y":15983.822817595788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48d5643b-e652-4c4d-b7cf-37e9656bfd43","savedPayload":{"position":{"x":9471.82455758275,"y":15983.822817595788},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 100","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma100","project":"Superalgos","id":"1987b0ae-9510-45e9-b7ed-3802c3f28e1d","savedPayload":{"position":{"x":9684.582396877795,"y":15724.967971996297},"targetPosition":{"x":9621.3354349465,"y":15982.340659966165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4ad1bbaa-2c37-4009-bbdd-d154be78b2d0","savedPayload":{"position":{"x":9621.3354349465,"y":15982.340659966165},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 150","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma150","project":"Superalgos","id":"611d7c8b-2cb8-412b-bd1b-2a04b3a796c0","savedPayload":{"position":{"x":9930.163421270201,"y":15853.42139071546},"targetPosition":{"x":9753.4718530797,"y":16053.055503000232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ef64a02-b88d-4635-8d88-99121a55ed73","savedPayload":{"position":{"x":9753.4718530797,"y":16053.055503000232},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 200","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma200","project":"Superalgos","id":"d8bbc57a-1eda-43c8-a865-1ceeb879a755","savedPayload":{"position":{"x":10088.092407321328,"y":16081.421564973196},"targetPosition":{"x":9838.97476274682,"y":16175.949481847587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"06680ab8-0ec9-448e-9854-97bf413f4133","savedPayload":{"position":{"x":9838.97476274682,"y":16175.949481847587},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 250","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma250","project":"Superalgos","id":"496ce598-2c93-40df-8f2e-effaeff2b665","savedPayload":{"position":{"x":10121.730982005018,"y":16356.24344760182},"targetPosition":{"x":9857.53899293744,"y":16324.460598334947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"503ab933-6f8f-4fcb-a0e6-ecf1b6e8b24b","savedPayload":{"position":{"x":9857.53899293744,"y":16324.460598334947},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 500","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma500","project":"Superalgos","id":"67dd80e5-30f9-48b2-b661-e40acde070cc","savedPayload":{"position":{"x":10022.943571674397,"y":16615.588564592683},"targetPosition":{"x":9804.531092616653,"y":16465.01309490849},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a4ab02a6-f6c0-4b8f-98d9-e24b66e492ab","savedPayload":{"position":{"x":9804.531092616653,"y":16465.01309490849},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"SMA 1000","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sma1000","project":"Superalgos","id":"359489a0-97b9-49f8-8f35-2f6247b570a9","savedPayload":{"position":{"x":9815.063233755962,"y":16799.736013120975},"targetPosition":{"x":9691.684274832027,"y":16564.397370631843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"88560ba5-2c50-4236-90b6-47d19ac3afa5","savedPayload":{"position":{"x":9691.684274832027,"y":16564.397370631843},"targetPosition":{"x":9546.461305990331,"y":16286.944648610974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2c0f1e-8a0e-4da1-97df-6815890e5770","savedPayload":{"position":{"x":9546.8298124457,"y":16288.856744141856},"targetPosition":{"x":9546.823996722476,"y":17347.5391788509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"888c381d-457d-4421-8401-a7475b42ff03","savedPayload":{"position":{"x":9999.173182942548,"y":17670.918273451905},"targetPosition":{"x":10336.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9b2443b7-9276-4fa3-b4b3-b9b991d886d8","savedPayload":{"position":{"x":10336.673182942548,"y":18255.4854210064},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Relative Strenght Index (RSI)","config":"{\n\"codeName\": \"Plotter RSI\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"RSI 14","config":"{\n\t\"codeName\": \"RSI 14\",\n\t\"slot\": {\n\t\t\"number\": 3,\n\t\t\"minValue\": 0,\n\t\t\"maxValue\": 100\n\t},\n \"banner\": \"Oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"Grid","project":"Superalgos","points":[{"type":"Point","name":"Begin 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"88e15149-215e-42c8-bc00-78b63343daa0","savedPayload":{"position":{"x":9041.466765892419,"y":17104.708491403868},"targetPosition":{"x":9092.522650893712,"y":17234.795772144193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e376a028-b688-4bb5-a100-00be6d161bd6","savedPayload":{"position":{"x":9092.522650893712,"y":17234.795772144193},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 0","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"6904030c-e751-4eb9-844a-d1cf45caa1f2","savedPayload":{"position":{"x":9144.872911655657,"y":17056.547828402367},"targetPosition":{"x":9147.32815015229,"y":17200.370216744708},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f562d9d7-357b-4677-ac4b-3ddbb735ca2b","savedPayload":{"position":{"x":9147.32815015229,"y":17200.370216744708},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 20","project":"Superalgos","id":"4fc2797d-7023-461e-912e-23f2834d4141","savedPayload":{"position":{"x":9239.643622656196,"y":17093.149724835082},"targetPosition":{"x":9197.375997044976,"y":17225.15908271543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8227114d-f503-4f27-ae0b-4bc2804e2cdb","savedPayload":{"position":{"x":9197.375997044976,"y":17225.15908271543},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 20","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 20","project":"Superalgos","id":"e6640285-69e5-4a37-8907-9d8bbcc2008b","savedPayload":{"position":{"x":9366.797753160485,"y":17117.87646604142},"targetPosition":{"x":9278.434526115558,"y":17233.490337434196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c9de9989-11da-44a7-bcbf-137435767d90","savedPayload":{"position":{"x":9278.434526115558,"y":17233.490337434196},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 30","project":"Superalgos","id":"db815155-dbec-4824-9132-470a173d328b","savedPayload":{"position":{"x":9372.730161346997,"y":17211.69953322924},"targetPosition":{"x":9227.486174342735,"y":17309.174849242296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0f0a70c3-9f37-4e58-a93c-fcfcf9686c09","savedPayload":{"position":{"x":9227.486174342735,"y":17309.174849242296},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 30","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 30","project":"Superalgos","id":"db6c3539-81f5-465d-9d79-8004a60ac5fb","savedPayload":{"position":{"x":9441.520657695095,"y":17285.929008924075},"targetPosition":{"x":9340.129456510967,"y":17307.453777739527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac82bb81-5d37-4eea-ab52-0f698de71014","savedPayload":{"position":{"x":9340.129456510967,"y":17307.453777739527},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 50","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 50","project":"Superalgos","id":"a6a8718f-2c9a-4c5f-af7a-7029bddfb839","savedPayload":{"position":{"x":9394.83828323309,"y":17401.15545586696},"targetPosition":{"x":9266.650204186692,"y":17362.90148536058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a0cdc721-996a-44b2-b619-bbc0ef97cd62","savedPayload":{"position":{"x":9266.650204186692,"y":17362.90148536058},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 50","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 50","project":"Superalgos","id":"c996c1b4-2b1f-4d11-acd4-8aba4d3e3e5d","savedPayload":{"position":{"x":9437.870952784117,"y":17503.07549719417},"targetPosition":{"x":9313.535713817942,"y":17454.49309723108},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"59a77a0b-bcee-4c1e-855c-854c3d3bc521","savedPayload":{"position":{"x":9313.535713817942,"y":17454.49309723108},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 70","project":"Superalgos","id":"bdcd3323-0da6-4667-95c2-b017623500af","savedPayload":{"position":{"x":9343.802166774247,"y":17549.824629422408},"targetPosition":{"x":9235.925230802259,"y":17427.435244869328},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"228edebc-3b5b-4760-9791-2229cb76a662","savedPayload":{"position":{"x":9235.925230802259,"y":17427.435244869328},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 70","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 70","project":"Superalgos","id":"9977888b-2cf4-472e-8468-d6705690a57c","savedPayload":{"position":{"x":9264.975563351509,"y":17635.509373008612},"targetPosition":{"x":9231.720430111443,"y":17529.123260164444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4cbfd9aa-d595-4e06-ac82-a87bfdf9f680","savedPayload":{"position":{"x":9231.720430111443,"y":17529.123260164444},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 80","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 80","project":"Superalgos","id":"75cda528-f689-4d21-a8ed-ba08705d5ec7","savedPayload":{"position":{"x":9141.967677017881,"y":17566.93412478785},"targetPosition":{"x":9168.190184239134,"y":17433.7100107913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e7b453a3-5312-48e6-8797-6d96e058766b","savedPayload":{"position":{"x":9168.190184239134,"y":17433.7100107913},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Eng 80","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 80","project":"Superalgos","id":"df4c7f58-96c7-4ffb-9ce3-ff1b35ddf3c3","savedPayload":{"position":{"x":9011.4750858361,"y":17662.04819786081},"targetPosition":{"x":9083.813562756965,"y":17541.858264982904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d64e2ceb-abb9-4cc0-b929-211bcbd934a7","savedPayload":{"position":{"x":9083.813562756965,"y":17541.858264982904},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 100","project":"Superalgos","id":"79f20ec4-c499-41ca-aa79-f56fe5b7bcbc","savedPayload":{"position":{"x":8997.08027135814,"y":17484.088465918925},"targetPosition":{"x":9115.683799445174,"y":17408.58662548788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7d5d4922-1d7d-45a3-b5ff-75d14016ee1d","savedPayload":{"position":{"x":9115.683799445174,"y":17408.58662548788},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End 100","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 100","project":"Superalgos","id":"58d10fb8-87e5-4a4c-95ab-99be2f5b14ea","savedPayload":{"position":{"x":8888.333662990459,"y":17448.668931998443},"targetPosition":{"x":9000.579874749692,"y":17417.274298658464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dc11ae4c-bce1-4e88-986a-457a3612102a","savedPayload":{"position":{"x":9000.579874749692,"y":17417.274298658464},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"RSI Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.value","project":"Superalgos","id":"e068d3fa-623c-4349-a10f-4abdd6263b07","savedPayload":{"position":{"x":8931.216328161867,"y":17339.10900642492},"targetPosition":{"x":9096.713401138608,"y":17334.80702412845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7f687c2f-3a91-4b53-b00d-8a651e82c97d","savedPayload":{"position":{"x":9096.713401138608,"y":17334.80702412845},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"RSI End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.value","project":"Superalgos","id":"bb45d3f0-e6e7-473a-b2f4-7016c65bd7ee","savedPayload":{"position":{"x":8913.163416459192,"y":17241.14896823239},"targetPosition":{"x":9025.658626425542,"y":17302.122150020718},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f5d97a45-0db5-4d48-bf32-efdd6b2726c0","savedPayload":{"position":{"x":9025.658626425542,"y":17302.122150020718},"targetPosition":{"x":9165.934568754576,"y":17358.127392340488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff9f35c7-b1ca-446e-905c-c971ca51dfbe","savedPayload":{"position":{"x":9165.934568754576,"y":17358.127392340488},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Box 0-20","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"9e7202ce-11e7-4526-80d5-52f0dbdcb91c","savedPayload":{"position":{"x":8228.979153972432,"y":18272.782940556674},"targetPosition":{"x":8151.316869970575,"y":18022.423521716195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8716fe80-7aa5-4707-93d9-f47ac26e9a53","savedPayload":{"position":{"x":8151.316869970575,"y":18022.423521716195},"targetPosition":{"x":8073.265313054497,"y":17771.95877923628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 0","project":"Superalgos","id":"89a7b82e-5d1d-4359-80a8-0b85d997a62c","savedPayload":{"position":{"x":8015.767094759813,"y":18028.129382759744},"targetPosition":{"x":8073.265313054497,"y":17771.95877923628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 0","id":"e376a028-b688-4bb5-a100-00be6d161bd6"}}},{"type":"Polygon Vertex","name":"End 0","project":"Superalgos","id":"4ddfe945-d3dd-431a-a0bf-477d2f0c0af1","savedPayload":{"position":{"x":7895.564145649296,"y":17965.16055683019},"targetPosition":{"x":8073.265313054497,"y":17771.95877923628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 0","id":"f562d9d7-357b-4677-ac4b-3ddbb735ca2b"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"1fd4c8e3-47e3-4e05-8739-a34e8239b178","savedPayload":{"position":{"x":7822.957444550346,"y":17850.429287220817},"targetPosition":{"x":8073.265313054497,"y":17771.95877923628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"c9de9989-11da-44a7-bcbf-137435767d90"}}},{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"2920b1c1-1d61-44b8-b31a-31e2d87fa9e4","savedPayload":{"position":{"x":7820.120782257367,"y":17714.624553705515},"targetPosition":{"x":8073.265313054497,"y":17771.95877923628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"8227114d-f503-4f27-ae0b-4bc2804e2cdb"}}}],"id":"0dce63e6-acf6-482e-bcf9-3e44b7487cbf","savedPayload":{"position":{"x":8073.265313054497,"y":17771.95877923628},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 80-100","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.25,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.35,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"f95287c0-8123-4025-8018-370eb91b6189","savedPayload":{"position":{"x":7558.683405849144,"y":18282.62451333664},"targetPosition":{"x":7675.9176575545425,"y":18048.05799532052},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c46a4519-e917-410e-98d7-faf0ad80a99a","savedPayload":{"position":{"x":7675.9176575545425,"y":18048.05799532052},"targetPosition":{"x":7909.795444112082,"y":17579.47464025012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"eb76ec36-eae3-424a-9105-d26eefca1b67","savedPayload":{"position":{"x":7562.412055779616,"y":17971.430700001223},"targetPosition":{"x":7909.795444112082,"y":17579.47464025012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"e7b453a3-5312-48e6-8797-6d96e058766b"}}},{"type":"Polygon Vertex","name":"Eng 80","project":"Superalgos","id":"6facb2b7-b324-4e01-a53f-5d72541ba64f","savedPayload":{"position":{"x":7472.768839481356,"y":17868.215055099583},"targetPosition":{"x":7909.795444112082,"y":17579.47464025012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Eng 80","id":"d64e2ceb-abb9-4cc0-b929-211bcbd934a7"}}},{"type":"Polygon Vertex","name":"End 100","project":"Superalgos","id":"2e7bfaf4-7828-4021-9895-58882a03987e","savedPayload":{"position":{"x":7412.9008971814765,"y":17745.347413509826},"targetPosition":{"x":7909.795444112082,"y":17579.47464025012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 100","id":"dc11ae4c-bce1-4e88-986a-457a3612102a"}}},{"type":"Polygon Vertex","name":"Begin 100","project":"Superalgos","id":"d2a601ff-7a5d-414e-bc06-be93e13e6ddb","savedPayload":{"position":{"x":7386.86640898254,"y":17611.099491829893},"targetPosition":{"x":7909.795444112082,"y":17579.47464025012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 100","id":"7d5d4922-1d7d-45a3-b5ff-75d14016ee1d"}}}],"id":"2429edaa-20db-4fd9-b834-c84953e78bf3","savedPayload":{"position":{"x":7909.795444112082,"y":17579.47464025012},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 20-30","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"f1ac3d45-3f00-4269-a41f-872bcbc99620","savedPayload":{"position":{"x":7722.246727281603,"y":17741.337378224856},"targetPosition":{"x":7749.057585218765,"y":17611.24419339063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1aa28d17-1653-496a-8b8a-35fdf6691e0b","savedPayload":{"position":{"x":7749.057585218765,"y":17611.24419339063},"targetPosition":{"x":7796.854740606876,"y":17353.82148014623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"2e88069b-6333-45f8-8199-021fe3896667","savedPayload":{"position":{"x":7626.445524102059,"y":17553.45780766685},"targetPosition":{"x":7796.854740606876,"y":17353.82148014623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"8227114d-f503-4f27-ae0b-4bc2804e2cdb"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"cdea2bf9-a545-4877-8d65-5a027352bb8a","savedPayload":{"position":{"x":7549.39644463838,"y":17441.938265340184},"targetPosition":{"x":7796.854740606876,"y":17353.82148014623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"c9de9989-11da-44a7-bcbf-137435767d90"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"bfb22589-c1af-4822-8944-1767e3e691bc","savedPayload":{"position":{"x":7544.153715592249,"y":17332.987816512705},"targetPosition":{"x":7796.854740606876,"y":17353.82148014623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"ac82bb81-5d37-4eea-ab52-0f698de71014"}}},{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"208c9dfc-a7fb-41ab-becc-3b68104e07ed","savedPayload":{"position":{"x":7601.756609746528,"y":17180.846760302793},"targetPosition":{"x":7796.854740606876,"y":17353.82148014623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"0f0a70c3-9f37-4e58-a93c-fcfcf9686c09"}}}],"id":"4a0db3d1-061d-4587-9c05-f42c09c0b271","savedPayload":{"position":{"x":7796.854740606876,"y":17353.82148014623},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 70-80","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.2,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"6335d57f-9462-4d19-b954-2f511308b9c8","savedPayload":{"position":{"x":7304.520865432885,"y":17390.846905944392},"targetPosition":{"x":7517.635146597222,"y":17237.50952314289},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b01a727e-5773-47c2-b094-c19ad0ac71f4","savedPayload":{"position":{"x":7517.635146597222,"y":17237.50952314289},"targetPosition":{"x":7741.485073757016,"y":17107.588457039914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"c59e52e4-9b7e-4985-ab53-35f5cd29f250","savedPayload":{"position":{"x":7251.523773111789,"y":17293.05151635694},"targetPosition":{"x":7741.485073757016,"y":17107.588457039914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"228edebc-3b5b-4760-9791-2229cb76a662"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"957f8c1e-cb14-4241-b805-abfdc50c07d0","savedPayload":{"position":{"x":7220.200957198529,"y":17160.00932270219},"targetPosition":{"x":7741.485073757016,"y":17107.588457039914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"4cbfd9aa-d595-4e06-ac82-a87bfdf9f680"}}},{"type":"Polygon Vertex","name":"Eng 80","project":"Superalgos","id":"37688deb-5377-4f52-bde8-5e8abbf6e25f","savedPayload":{"position":{"x":7212.944238398726,"y":17053.204675324116},"targetPosition":{"x":7741.485073757016,"y":17107.588457039914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Eng 80","id":"d64e2ceb-abb9-4cc0-b929-211bcbd934a7"}}},{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"6d346213-f33f-4b5a-a519-5e1c3fb42e50","savedPayload":{"position":{"x":7267.884064406258,"y":16873.92170311763},"targetPosition":{"x":7741.485073757016,"y":17107.588457039914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"e7b453a3-5312-48e6-8797-6d96e058766b"}}}],"id":"5835d367-23bc-4039-b2c1-1a23f3ca652f","savedPayload":{"position":{"x":7741.485073757016,"y":17107.588457039914},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"6ad882da-10d9-427c-8fb5-3a7c55b678a1","savedPayload":{"position":{"x":7245.379384255615,"y":16974.90988540458},"targetPosition":{"x":7492.213075435608,"y":16920.993648590847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"fa05777f-6288-4dd2-9b7a-61194bc43681","savedPayload":{"position":{"x":7492.213075435608,"y":16920.993648590847},"targetPosition":{"x":7746.340853981968,"y":16855.743044137183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 20","project":"Superalgos","id":"a9a9dd2d-d7f8-4a25-b81d-d1e2a2f9d5a6","savedPayload":{"position":{"x":7486.444193538173,"y":16818.77684208694},"targetPosition":{"x":7746.340853981968,"y":16855.743044137183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 20","id":"8227114d-f503-4f27-ae0b-4bc2804e2cdb"}}},{"type":"Polygon Vertex","name":"End 20","project":"Superalgos","id":"a717c7d2-3bc7-4d8c-9e9f-e1fb75fd0d42","savedPayload":{"position":{"x":7520.637021628336,"y":16721.945317913327},"targetPosition":{"x":7746.340853981968,"y":16855.743044137183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 20","id":"c9de9989-11da-44a7-bcbf-137435767d90"}}}],"id":"27aab97e-ce7f-47fc-bd22-d9b70ffec2d1","savedPayload":{"position":{"x":7746.340853981968,"y":16855.743044137183},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 30","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"0b1d6f25-076c-4495-b462-435a8d1900d2","savedPayload":{"position":{"x":7156.561117564255,"y":16617.887160815404},"targetPosition":{"x":7287.958455489759,"y":16617.21263767734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6cb61271-a82a-47a1-ac0c-404dc28b05e5","savedPayload":{"position":{"x":7287.958455489759,"y":16617.21263767734},"targetPosition":{"x":7811.62360135858,"y":16612.267507098382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"e656c0ce-1b57-420e-84f5-cd62a9bb602d","savedPayload":{"position":{"x":7325.760817765749,"y":16416.81560701725},"targetPosition":{"x":7811.62360135858,"y":16612.267507098382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"ac82bb81-5d37-4eea-ab52-0f698de71014"}}},{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"8e2ee705-7be7-4705-a32f-242a5c1d286d","savedPayload":{"position":{"x":7455.180112254813,"y":16214.557427450061},"targetPosition":{"x":7811.62360135858,"y":16612.267507098382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"0f0a70c3-9f37-4e58-a93c-fcfcf9686c09"}}}],"id":"18e4afd3-7536-405b-97b6-d36ec7ddc692","savedPayload":{"position":{"x":7811.62360135858,"y":16612.267507098382},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"68ca10ec-d83d-4f61-b9ee-6a0f3a74cb12","savedPayload":{"position":{"x":7405.089567066894,"y":16302.212928345576},"targetPosition":{"x":7677.872160575054,"y":16331.518179283827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"fefbf0c0-287c-4bb7-81a7-6b745dcfcf3b","savedPayload":{"position":{"x":7677.872160575054,"y":16331.518179283827},"targetPosition":{"x":7933.312597355987,"y":16391.47046498201},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 50","project":"Superalgos","id":"cfa25adf-05eb-49d0-956a-69e4fde9bacf","savedPayload":{"position":{"x":7720.405320033522,"y":16238.03472399152},"targetPosition":{"x":7933.312597355987,"y":16391.47046498201},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 50","id":"a0cdc721-996a-44b2-b619-bbc0ef97cd62"}}},{"type":"Polygon Vertex","name":"End 50","project":"Superalgos","id":"de1447aa-e70f-419b-bab5-d94b333612c7","savedPayload":{"position":{"x":7795.658442970092,"y":16168.05608958238},"targetPosition":{"x":7933.312597355987,"y":16391.47046498201},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 50","id":"59a77a0b-bcee-4c1e-855c-854c3d3bc521"}}}],"id":"bbe48886-b71e-4507-b6e8-7f073b691a6a","savedPayload":{"position":{"x":7933.312597355987,"y":16391.47046498201},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 70","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"913293ac-040f-4348-ade4-5b3103fe1375","savedPayload":{"position":{"x":7404.842559288143,"y":15847.667848539753},"targetPosition":{"x":7638.290430348519,"y":15967.348640662687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8640a48e-f7ca-419c-a687-3f52c3a5afa9","savedPayload":{"position":{"x":7638.290430348519,"y":15967.348640662687},"targetPosition":{"x":8104.349286029883,"y":16206.106265614704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"bc77b107-0a70-4038-86a6-3034ab4e86dd","savedPayload":{"position":{"x":7764.948383030864,"y":15806.86913302687},"targetPosition":{"x":8104.349286029883,"y":16206.106265614704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"4cbfd9aa-d595-4e06-ac82-a87bfdf9f680"}}},{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"36882cd2-2ec4-4d2d-af00-98b4c54bf1e7","savedPayload":{"position":{"x":7943.501594841553,"y":15707.783493876559},"targetPosition":{"x":8104.349286029883,"y":16206.106265614704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"228edebc-3b5b-4760-9791-2229cb76a662"}}}],"id":"508b71cf-79d3-4db4-a6d3-0b26226ad5b9","savedPayload":{"position":{"x":8104.349286029883,"y":16206.106265614704},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line 80","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.15,\n \"lineWidth\": 1,\n \"lineDash\": [3,3],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n }\n}","project":"Superalgos","id":"9506c6ad-440b-45a1-aadf-89004f5311fb","savedPayload":{"position":{"x":7817.772544535699,"y":15900.626015530124},"targetPosition":{"x":8066.190821162942,"y":15983.725623994713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"59804538-89e9-485a-a2b1-88ff78eb5661","savedPayload":{"position":{"x":8066.190821162942,"y":15983.725623994713},"targetPosition":{"x":8314.759088143492,"y":16067.095387477268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 80","project":"Superalgos","id":"23df3ac4-6427-4a69-a5a3-8230186b46f3","savedPayload":{"position":{"x":8197.541759948243,"y":15832.310807759082},"targetPosition":{"x":8314.759088143492,"y":16067.095387477268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 80","id":"e7b453a3-5312-48e6-8797-6d96e058766b"}}},{"type":"Polygon Vertex","name":"Eng 80","project":"Superalgos","id":"7a5139be-30b6-4eab-994a-bb8b74be455d","savedPayload":{"position":{"x":8395.35153558732,"y":15819.910162775726},"targetPosition":{"x":8314.759088143492,"y":16067.095387477268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Eng 80","id":"d64e2ceb-abb9-4cc0-b929-211bcbd934a7"}}}],"id":"8499947d-a392-40ed-be9d-225a28429642","savedPayload":{"position":{"x":8314.759088143492,"y":16067.095387477268},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"RSI Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"90fe9ece-e33a-4e2e-904a-779327e7155a","savedPayload":{"position":{"x":8049.468086358571,"y":15386.751607217655},"targetPosition":{"x":8250.95930669296,"y":15554.688337468171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"(record.previous.value < 20 && record.value < 20) || (record.previous.value > 80 && record.value > 80)","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n}","project":"Superalgos","id":"58f58e7a-3056-49c7-9117-f2a514d4479e","savedPayload":{"position":{"x":8070.339389676807,"y":15062.23854071272},"targetPosition":{"x":8160.744844776244,"y":15308.373137475635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9fcf2614-7ec8-407f-93a2-3c749f6683ef","savedPayload":{"position":{"x":8160.744844776244,"y":15308.373137475635},"targetPosition":{"x":8250.95930669296,"y":15554.688337468171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6dc77d6e-5aa6-41ab-b247-43c4391fcc96","savedPayload":{"position":{"x":8250.95930669296,"y":15554.688337468171},"targetPosition":{"x":8552.450330399297,"y":15982.598830896633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"RSI Begin","project":"Superalgos","id":"5312ee43-9c15-4d4b-9255-5fb7259c5734","savedPayload":{"position":{"x":8437.706266341083,"y":15471.685524354878},"targetPosition":{"x":8552.450330399297,"y":15982.598830896633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"RSI Begin","id":"7f687c2f-3a91-4b53-b00d-8a651e82c97d"}}},{"type":"Polygon Vertex","name":"RSI End","project":"Superalgos","id":"01981eaa-b1c6-41e1-84b4-2dc8106ac095","savedPayload":{"position":{"x":8641.6067339746,"y":15466.514514759878},"targetPosition":{"x":8552.450330399297,"y":15982.598830896633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"RSI End","id":"f5d97a45-0db5-4d48-bf32-efdd6b2726c0"}}}],"id":"e8eb9949-277b-4493-a9f4-cbcb502aacbc","savedPayload":{"position":{"x":8552.450330399297,"y":15982.598830896633},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Box 30-70","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.05,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n }\n}","project":"Superalgos","id":"5b04f4bb-2cc4-48a5-b421-667c96b2dd27","savedPayload":{"position":{"x":8469.50565959404,"y":15751.10333219452},"targetPosition":{"x":8579.620308027937,"y":15821.091576453144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"208ca141-b231-4a70-8b31-eeae09576822","savedPayload":{"position":{"x":8579.620308027937,"y":15821.091576453144},"targetPosition":{"x":8803.459921085156,"y":15957.112271984272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin 30","project":"Superalgos","id":"7956c253-3704-46c0-b188-f6662bb58904","savedPayload":{"position":{"x":8677.537395103172,"y":15727.008815406463},"targetPosition":{"x":8803.459921085156,"y":15957.112271984272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 30","id":"0f0a70c3-9f37-4e58-a93c-fcfcf9686c09"}}},{"type":"Polygon Vertex","name":"End 30","project":"Superalgos","id":"b043ae0f-a172-4ebe-922b-a895b8a888c9","savedPayload":{"position":{"x":8808.975757300414,"y":15694.56308556777},"targetPosition":{"x":8803.459921085156,"y":15957.112271984272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 30","id":"ac82bb81-5d37-4eea-ab52-0f698de71014"}}},{"type":"Polygon Vertex","name":"End 70","project":"Superalgos","id":"5830f66c-dca5-4f62-8102-d7d8ea588d0d","savedPayload":{"position":{"x":8939.336169221991,"y":15732.432444795015},"targetPosition":{"x":8803.459921085156,"y":15957.112271984272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End 70","id":"4cbfd9aa-d595-4e06-ac82-a87bfdf9f680"}}},{"type":"Polygon Vertex","name":"Begin 70","project":"Superalgos","id":"a8eb0500-2421-4879-9459-2ecdb4ae09d5","savedPayload":{"position":{"x":9033.369294788372,"y":15830.623456333724},"targetPosition":{"x":8803.459921085156,"y":15957.112271984272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin 70","id":"228edebc-3b5b-4760-9791-2229cb76a662"}}}],"id":"b294fd86-15d6-4bc8-9379-0532df288eee","savedPayload":{"position":{"x":8803.459921085156,"y":15957.112271984272},"targetPosition":{"x":8781.975919951139,"y":17002.858173090124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"bc1170cc-a04b-4453-bd28-0e522f747617","savedPayload":{"position":{"x":8781.975919951139,"y":17002.858173090124},"targetPosition":{"x":9792.406959270818,"y":17274.489042520254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"RSI 14","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"RSI 14","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.value","project":"Superalgos","id":"fbec83cc-a090-491b-8cfb-833d40b2b843","savedPayload":{"position":{"x":9619.475174311261,"y":16619.970914687554},"targetPosition":{"x":9663.981618387988,"y":16789.089042186693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5fd8d57-8920-417e-8b9b-c1e0d6868a7a","savedPayload":{"position":{"x":9663.981618387988,"y":16789.089042186693},"targetPosition":{"x":9708.506075336682,"y":16958.293141492002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff06d653-f886-44f4-8b28-82bab51aa98d","savedPayload":{"position":{"x":9708.506075336682,"y":16958.293141492002},"targetPosition":{"x":9792.406959270818,"y":17274.489042520254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"72403d40-2a64-4e51-8eaf-b1a872e4474e","savedPayload":{"position":{"x":10194.036407210227,"y":17662.470452487396},"targetPosition":{"x":10503.5723768561,"y":17972.343528830246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"bbc529df-b938-47b5-8cb7-a5579c859b99","savedPayload":{"position":{"x":10468.475131408602,"y":17937.287369472455},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Moving Average Convergence Diveregence (MACD)","config":"{\n\"codeName\": \"Plotter-MACD\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"MACD 122609","config":"{\n\t\"codeName\": \"Module-MACD-122609\",\n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.line","project":"Superalgos","id":"013bf1cc-f8e0-4355-9690-6fb63ca3d103","savedPayload":{"position":{"x":9957.714104929728,"y":17109.742609250963},"targetPosition":{"x":9975.541315025515,"y":17460.555042366927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94440a25-a6c7-4e2d-a254-6479c643ff09","savedPayload":{"position":{"x":9975.541315025515,"y":17460.555042366927},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.line","project":"Superalgos","id":"3c8d9416-40db-43cd-a0ae-07a9e0635ef7","savedPayload":{"position":{"x":10497.470705841275,"y":17501.817170057762},"targetPosition":{"x":10157.8657295622,"y":17593.63686169426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b988153-3df8-402b-9c04-7e74699887f7","savedPayload":{"position":{"x":10157.8657295622,"y":17593.63686169426},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.signal","project":"Superalgos","id":"91037bb8-b0c7-4967-9706-9ead7aaecd8b","savedPayload":{"position":{"x":10500.50523863111,"y":17836.056699398316},"targetPosition":{"x":10183.947745503468,"y":17802.861598416715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"365f7baa-2fd3-48cc-aaff-24844093e7eb","savedPayload":{"position":{"x":10183.947745503468,"y":17802.861598416715},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.signal","project":"Superalgos","id":"39df31ee-2e46-4a02-a8fb-8629589eb362","savedPayload":{"position":{"x":10340.075207947972,"y":18216.787188748494},"targetPosition":{"x":10119.279623149025,"y":17987.861381576582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4c82a32a-feff-405d-bc3f-036793beee1b","savedPayload":{"position":{"x":10119.279623149025,"y":17987.861381576582},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"5522b77c-b212-4da0-b875-ec3ed641d6b9","savedPayload":{"position":{"x":9942.30455765386,"y":18394.048525363196},"targetPosition":{"x":9920.381747427436,"y":18076.11722849859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c0cd1824-c456-4b8a-ba66-d74f5141f9d1","savedPayload":{"position":{"x":9920.381747427436,"y":18076.11722849859},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"0f1eceef-4664-4e5f-9f78-1e16eea87c82","savedPayload":{"position":{"x":9524.023706322045,"y":18273.833424814457},"targetPosition":{"x":9711.23167850373,"y":18016.26802029575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"580f0304-770f-4fe3-aa42-8e8556096b71","savedPayload":{"position":{"x":9711.23167850373,"y":18016.26802029575},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = 0","project":"Superalgos","id":"266e904b-ce67-4b66-9474-4a4b030e055c","savedPayload":{"position":{"x":9280.759500140965,"y":17912.921974261524},"targetPosition":{"x":9589.574385827185,"y":17835.8505677069},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ceed0b7c-ddfd-4395-ba25-d85353ed9b0c","savedPayload":{"position":{"x":9589.574385827185,"y":17835.8505677069},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Histogram","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = record.histogram","project":"Superalgos","id":"82de3468-fabd-41ab-bb34-aa7be6f9a564","savedPayload":{"position":{"x":9326.498325692217,"y":17480.27066291669},"targetPosition":{"x":9612.413671536087,"y":17619.473120252664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"274108bd-33fb-46a0-b744-6500621a56c6","savedPayload":{"position":{"x":9612.413671536087,"y":17619.473120252664},"targetPosition":{"x":9898.508540483832,"y":17758.839933946627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f2b8d463-e10e-4db3-b2b8-ed4d4a980312","savedPayload":{"position":{"x":9898.508540483832,"y":17758.839933946627},"targetPosition":{"x":9640.170792951394,"y":17178.25159998977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line Zero","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"eb2c7353-ba05-45d2-8abf-e605899e2c25","savedPayload":{"position":{"x":8620.938952197408,"y":17898.90843188128},"targetPosition":{"x":8840.012461071921,"y":17668.132542051713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"35816f89-9448-4bd4-89fe-2d6a626c127e","savedPayload":{"position":{"x":8840.012461071921,"y":17668.132542051713},"targetPosition":{"x":9059.00107209985,"y":17437.094535832544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Begin","project":"Superalgos","id":"53278a2d-78c8-44f4-a450-46dd8a33967c","savedPayload":{"position":{"x":8768.143635318236,"y":17566.658703870846},"targetPosition":{"x":9059.00107209985,"y":17437.094535832544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Begin","id":"c0cd1824-c456-4b8a-ba66-d74f5141f9d1"}}},{"type":"Polygon Vertex","name":"Zero End","project":"Superalgos","id":"8e67d151-e3aa-4831-8bf8-027cfc4caa17","savedPayload":{"position":{"x":8736.368572306976,"y":17473.39954243933},"targetPosition":{"x":9059.00107209985,"y":17437.094535832544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero End","id":"580f0304-770f-4fe3-aa42-8e8556096b71"}}}],"id":"7efecae7-d203-47c5-8526-bb7135cf7581","savedPayload":{"position":{"x":9059.00107209985,"y":17437.094535832544},"targetPosition":{"x":9640.170792951394,"y":17178.25159998977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Histogram","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"87cb111c-9ab9-4708-a631-ea69bbe2ce9b","savedPayload":{"position":{"x":8751.47530923552,"y":17373.348242272194},"targetPosition":{"x":9018.652141188035,"y":17235.413546263702},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.histogram < 0","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"2f2bb59f-6665-45c6-ab49-dc5e3c886790","savedPayload":{"position":{"x":8382.185614819497,"y":17251.609282504676},"targetPosition":{"x":8700.342753622339,"y":17243.412099648103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d880310-15ff-48fa-bdaa-2b5f756078ae","savedPayload":{"position":{"x":8700.342753622339,"y":17243.412099648103},"targetPosition":{"x":9018.652141188035,"y":17235.413546263702},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ccbf5840-9d7d-4ff6-9072-2d6643b10017","savedPayload":{"position":{"x":9018.652141188035,"y":17235.413546263702},"targetPosition":{"x":9323.806673165946,"y":17145.09704284161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero","project":"Superalgos","id":"6791722d-5183-48b7-b905-8c1604acae96","savedPayload":{"position":{"x":9007.17883998798,"y":17111.82530003933},"targetPosition":{"x":9323.806673165946,"y":17145.09704284161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero","id":"ceed0b7c-ddfd-4395-ba25-d85353ed9b0c"}}},{"type":"Polygon Vertex","name":"Histogram","project":"Superalgos","id":"0ceaf5d8-b8c7-4d39-a8b3-fd58e402cf37","savedPayload":{"position":{"x":9044.076794942685,"y":16993.193542762263},"targetPosition":{"x":9323.806673165946,"y":17145.09704284161},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Histogram","id":"274108bd-33fb-46a0-b744-6500621a56c6"}}}],"id":"e0c98602-420c-4f55-bad0-e27649a79e25","savedPayload":{"position":{"x":9323.806673165946,"y":17145.09704284161},"targetPosition":{"x":9640.170792951394,"y":17178.25159998977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b027e8fb-cfc7-4658-89dd-28be20660c11","savedPayload":{"position":{"x":8506.358542621016,"y":16655.769728077197},"targetPosition":{"x":8815.797219256776,"y":16730.06762282395},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"29f3ad41-e970-4817-8285-732bb172e30f","savedPayload":{"position":{"x":8815.797219256776,"y":16730.06762282395},"targetPosition":{"x":9125.416412732659,"y":16804.230426668102},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Line End","project":"Superalgos","id":"6819d608-167a-4d7f-a636-cd4f5a01969a","savedPayload":{"position":{"x":8867.820469825328,"y":16617.066574746354},"targetPosition":{"x":9125.416412732659,"y":16804.230426668102},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line End","id":"0b988153-3df8-402b-9c04-7e74699887f7"}}},{"type":"Polygon Vertex","name":"Line Begin","project":"Superalgos","id":"6d212921-f546-4874-a1ca-655ac05d6587","savedPayload":{"position":{"x":8959.092847209286,"y":16532.7593341009},"targetPosition":{"x":9125.416412732659,"y":16804.230426668102},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line Begin","id":"94440a25-a6c7-4e2d-a254-6479c643ff09"}}}],"id":"c5b15661-b8ab-46b6-bd98-9c2b74ebf550","savedPayload":{"position":{"x":9125.416412732659,"y":16804.230426668102},"targetPosition":{"x":9640.170792951394,"y":17178.25159998977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Signal","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"016d7265-d869-4534-8669-f6182a573d85","savedPayload":{"position":{"x":9049.485539606074,"y":16448.988823312848},"targetPosition":{"x":9280.125850362427,"y":16668.381706119504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"257492c0-dffd-4e78-854d-90bbf6423652","savedPayload":{"position":{"x":9280.125850362427,"y":16668.381706119504},"targetPosition":{"x":9510.945552945446,"y":16887.52402908186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Signal End","project":"Superalgos","id":"7c9842d1-9d91-49d2-bdd2-2b443b94a237","savedPayload":{"position":{"x":9381.584894248517,"y":16596.662295718183},"targetPosition":{"x":9510.945552945446,"y":16887.52402908186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal End","id":"4c82a32a-feff-405d-bc3f-036793beee1b"}}},{"type":"Polygon Vertex","name":"Signal Begin","project":"Superalgos","id":"5f1617a3-28fe-4fbc-9e92-c466c30141a1","savedPayload":{"position":{"x":9502.913138836804,"y":16569.312143774365},"targetPosition":{"x":9510.945552945446,"y":16887.52402908186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal Begin","id":"365f7baa-2fd3-48cc-aaff-24844093e7eb"}}}],"id":"a783436f-fdf6-42e1-8394-633220627cf6","savedPayload":{"position":{"x":9510.945552945446,"y":16887.52402908186},"targetPosition":{"x":9640.170792951394,"y":17178.25159998977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"4c2df818-f24d-4458-84d5-eb5e50c413e5","savedPayload":{"position":{"x":9640.170792951394,"y":17178.25159998977},"targetPosition":{"x":10272.054812434122,"y":17244.639863223692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MACD 122609","config":"{ \n\"codeName\": \"Panel-MACD-122609\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.line","project":"Superalgos","id":"52edc6fd-3d02-4f47-ad41-f2937d00ff3d","savedPayload":{"position":{"x":9420.185279012396,"y":16435.19007931649},"targetPosition":{"x":9717.083650699427,"y":16549.7123157449},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a39ffdbe-3b95-48b9-b8b6-a760f44def62","savedPayload":{"position":{"x":9717.083650699427,"y":16549.7123157449},"targetPosition":{"x":10013.822761864623,"y":16663.937402125444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Signal","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.signal","project":"Superalgos","id":"f8089efa-fde3-41df-b096-1a00df3581ae","savedPayload":{"position":{"x":9755.325468031235,"y":16082.326724034428},"targetPosition":{"x":9884.602407883849,"y":16373.115022257469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fadd439a-0ae7-473c-940c-4e0119bfa325","savedPayload":{"position":{"x":9884.602407883849,"y":16373.115022257469},"targetPosition":{"x":10013.822761864623,"y":16663.937402125444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Histogram","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.histogram","project":"Superalgos","id":"1bfbffeb-bd62-4f0e-bf46-a69d97a19af7","savedPayload":{"position":{"x":10241.865048158917,"y":16069.71256943548},"targetPosition":{"x":10127.882252185766,"y":16366.810514825127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9b0b1888-dbfb-4ec1-ae2e-3cfa9fbd51fe","savedPayload":{"position":{"x":10127.882252185766,"y":16366.810514825127},"targetPosition":{"x":10013.822761864623,"y":16663.937402125444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20625002-d334-440f-a473-88140625598f","savedPayload":{"position":{"x":10013.822761864623,"y":16663.937402125444},"targetPosition":{"x":10272.054812434122,"y":17244.639863223692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fb08cb11-7983-4106-8b03-edf70baad4a0","savedPayload":{"position":{"x":10422.615535473822,"y":17540.982057474786},"targetPosition":{"x":10786.673182942548,"y":17805.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"MACD 031016","config":"{\n\t\"codeName\": \"Module-MACD-031016\",\n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.line","project":"Superalgos","id":"b5d7cbce-d6e7-401c-b79e-121856736ff4","savedPayload":{"position":{"x":10417.710415038699,"y":16716.67975487464},"targetPosition":{"x":10225.347199637825,"y":17013.803424783433},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1f9c9003-b080-49e5-8ab7-2b5b17086596","savedPayload":{"position":{"x":10225.347199637825,"y":17013.803424783433},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.line","project":"Superalgos","id":"032146dc-0480-4dbe-a91e-ad8067da7659","savedPayload":{"position":{"x":10639.71447070195,"y":17348.27880787056},"targetPosition":{"x":10304.365184709688,"y":17218.609846433494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aecccad2-09c2-483f-ad7e-b58d463ecc31","savedPayload":{"position":{"x":10304.365184709688,"y":17218.609846433494},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.signal","project":"Superalgos","id":"8016a3c1-2c79-4449-8075-3be7d559e628","savedPayload":{"position":{"x":10458.36626757642,"y":17635.751388169563},"targetPosition":{"x":10222.060234036278,"y":17423.05421569705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"10c05c23-c90c-45df-8aba-a2828c90f7e1","savedPayload":{"position":{"x":10222.060234036278,"y":17423.05421569705},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.signal","project":"Superalgos","id":"4e570054-6ad8-4894-994f-33008806def2","savedPayload":{"position":{"x":10073.508896052517,"y":17840.13688806208},"targetPosition":{"x":10029.726550772019,"y":17525.029844713063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f3abb57c-7d3c-4803-9939-cf0bd64964d2","savedPayload":{"position":{"x":10029.726550772019,"y":17525.029844713063},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"17fa15b8-c752-45e7-9ab0-91ceab45e38f","savedPayload":{"position":{"x":9648.160071689454,"y":17749.584159421905},"targetPosition":{"x":9816.991162191007,"y":17479.772916334117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"adbe6c72-d20f-4e31-a636-2efde1ffb8fe","savedPayload":{"position":{"x":9816.991162191007,"y":17479.772916334117},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"11f10b6a-4de7-4c2e-8b08-ff25a0f391fe","savedPayload":{"position":{"x":9380.199887207003,"y":17406.489865024014},"targetPosition":{"x":9682.979941950569,"y":17308.20104167734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba91f45f-78ef-4776-b0db-76626b4ab6a9","savedPayload":{"position":{"x":9682.979941950569,"y":17308.20104167734},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Middle","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = 0","project":"Superalgos","id":"d6c3344a-031a-4abe-a954-84fb5f3a348a","savedPayload":{"position":{"x":9395.42365148085,"y":16971.662390059668},"targetPosition":{"x":9690.60105023297,"y":17090.74389652627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7910022b-7f2a-42c1-a8bb-a7dbfd7173fb","savedPayload":{"position":{"x":9690.60105023297,"y":17090.74389652627},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Histogram","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = record.histogram","project":"Superalgos","id":"9feab5b3-5a73-456b-a177-6a5cbbd1a542","savedPayload":{"position":{"x":9686.879465268008,"y":16648.347499758976},"targetPosition":{"x":9836.356512433591,"y":16928.997744876036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aa1b0de1-8ca0-414f-915b-b03fd6322cb7","savedPayload":{"position":{"x":9836.356512433591,"y":16928.997744876036},"targetPosition":{"x":9985.87423622629,"y":17209.880842832965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"95bb8ee2-447e-465c-aa18-fdf3cd1d9fe7","savedPayload":{"position":{"x":9985.87423622629,"y":17209.880842832965},"targetPosition":{"x":10118.26273015251,"y":16588.4171681783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line Zero","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d3aedc59-15d6-43d5-9edb-41b17ba0b9a7","savedPayload":{"position":{"x":8869.927505770804,"y":16572.327680528164},"targetPosition":{"x":9182.86008603722,"y":16514.466597914186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c9204ab8-9aa4-461f-bfef-f16e80dfcfde","savedPayload":{"position":{"x":9182.86008603722,"y":16514.466597914186},"targetPosition":{"x":9495.883130769962,"y":16456.344143888822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Begin","project":"Superalgos","id":"a26ab460-419c-4c64-94b3-f344d333e427","savedPayload":{"position":{"x":9184.36354357393,"y":16390.32779459711},"targetPosition":{"x":9495.883130769962,"y":16456.344143888822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Begin","id":"adbe6c72-d20f-4e31-a636-2efde1ffb8fe"}}},{"type":"Polygon Vertex","name":"Zero End","project":"Superalgos","id":"8bcffc78-e71a-4a5b-b874-98335342557a","savedPayload":{"position":{"x":9213.564317390254,"y":16296.157401963152},"targetPosition":{"x":9495.883130769962,"y":16456.344143888822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero End","id":"ba91f45f-78ef-4776-b0db-76626b4ab6a9"}}}],"id":"b8ddf2bf-44ec-455e-b9e0-3aea2fe4c03b","savedPayload":{"position":{"x":9495.883130769962,"y":16456.344143888822},"targetPosition":{"x":10118.26273015251,"y":16588.4171681783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Histogram","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"8387bbc3-546c-45d6-9bd3-efe1abdd3511","savedPayload":{"position":{"x":9284.456648232117,"y":16224.137308115842},"targetPosition":{"x":9581.834066362353,"y":16269.417491714903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.histogram < 0","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"8b8ca847-0ee9-4a50-93d8-219afad9d2bb","savedPayload":{"position":{"x":9057.284673912669,"y":15908.65543015465},"targetPosition":{"x":9319.554516645163,"y":16088.909892608695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"18c65f10-ca47-46aa-a74d-50ed3a7b3c21","savedPayload":{"position":{"x":9319.554516645163,"y":16088.909892608695},"targetPosition":{"x":9581.834066362353,"y":16269.417491714903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"836ad43b-dbbe-4145-b584-f06f92971981","savedPayload":{"position":{"x":9581.834066362353,"y":16269.417491714903},"targetPosition":{"x":9881.858696088591,"y":16375.596112050029},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Middle","project":"Superalgos","id":"d41ccd8f-9abd-4701-a00d-a0582cf90328","savedPayload":{"position":{"x":9645.314980681116,"y":16162.532037463661},"targetPosition":{"x":9881.858696088591,"y":16375.596112050029},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Middle","id":"7910022b-7f2a-42c1-a8bb-a7dbfd7173fb"}}},{"type":"Polygon Vertex","name":"Histogram","project":"Superalgos","id":"5d816817-9b56-41c0-8e3d-9ee2c13d4a2d","savedPayload":{"position":{"x":9744.895984265833,"y":16088.242980353978},"targetPosition":{"x":9881.858696088591,"y":16375.596112050029},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Histogram","id":"aa1b0de1-8ca0-414f-915b-b03fd6322cb7"}}}],"id":"34dac9ae-bbb4-4c68-9462-986a7102e87e","savedPayload":{"position":{"x":9881.858696088591,"y":16375.596112050029},"targetPosition":{"x":10118.26273015251,"y":16588.4171681783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"8c239919-8420-451f-8d50-282b389d47cd","savedPayload":{"position":{"x":9508.272529107755,"y":15499.143943380177},"targetPosition":{"x":9714.883793462188,"y":15741.178918331394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6c3dfcca-7012-4442-91be-64a8215832d5","savedPayload":{"position":{"x":9714.883793462188,"y":15741.178918331394},"targetPosition":{"x":9921.717885270962,"y":15983.213581580483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Line End","project":"Superalgos","id":"340835c7-b097-4be7-a0f5-76958ceb2e46","savedPayload":{"position":{"x":9823.389033548716,"y":15680.340833053628},"targetPosition":{"x":9921.717885270962,"y":15983.213581580483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line End","id":"aecccad2-09c2-483f-ad7e-b58d463ecc31"}}},{"type":"Polygon Vertex","name":"Line Begin","project":"Superalgos","id":"c14a8ccb-9184-4483-a0c7-73d2259fa7eb","savedPayload":{"position":{"x":9946.580323056962,"y":15665.783084855913},"targetPosition":{"x":9921.717885270962,"y":15983.213581580483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line Begin","id":"1f9c9003-b080-49e5-8ab7-2b5b17086596"}}}],"id":"bfe93326-71d6-47d7-a34f-221c188a22a9","savedPayload":{"position":{"x":9921.717885270962,"y":15983.213581580483},"targetPosition":{"x":10118.26273015251,"y":16588.4171681783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Signal","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"3536f467-d468-4b5b-974d-6835b3932a5c","savedPayload":{"position":{"x":10069.009593902487,"y":15651.093524705946},"targetPosition":{"x":10126.58204888166,"y":15964.197157945153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2b5adcee-bef1-4a94-b045-8c52317c89f7","savedPayload":{"position":{"x":10126.58204888166,"y":15964.197157945153},"targetPosition":{"x":10184.455293128394,"y":16277.206111168514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Signal End","project":"Superalgos","id":"c7c53102-0db0-44d5-935f-b4609ce0ad1a","savedPayload":{"position":{"x":10250.622088218766,"y":15965.814010155726},"targetPosition":{"x":10184.455293128394,"y":16277.206111168514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal End","id":"f3abb57c-7d3c-4803-9939-cf0bd64964d2"}}},{"type":"Polygon Vertex","name":"Signal Begin","project":"Superalgos","id":"f6b5228a-83bf-42ee-b652-b7b71674e710","savedPayload":{"position":{"x":10364.854011009444,"y":16015.001176718772},"targetPosition":{"x":10184.455293128394,"y":16277.206111168514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal Begin","id":"10c05c23-c90c-45df-8aba-a2828c90f7e1"}}}],"id":"004e01d2-9a9b-4cec-935d-fd5427397838","savedPayload":{"position":{"x":10184.455293128394,"y":16277.206111168514},"targetPosition":{"x":10118.26273015251,"y":16588.4171681783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"cff04172-4157-400a-ba23-98428f3f8505","savedPayload":{"position":{"x":10118.26273015251,"y":16588.4171681783},"targetPosition":{"x":10590.396862870522,"y":17013.587981503046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MACD 031016","config":"{ \n\"codeName\": \"Panel-MACD-031016\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.line","project":"Superalgos","id":"30e7b23c-7d15-4eb2-971b-442ef569578d","savedPayload":{"position":{"x":10376.995356607316,"y":15857.864844503649},"targetPosition":{"x":10549.814761147623,"y":16125.074891032273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fc80e234-9a51-434b-9a75-776ac31fb892","savedPayload":{"position":{"x":10549.814761147623,"y":16125.074891032273},"targetPosition":{"x":10722.679178935265,"y":16391.95401359322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Signal","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.signal","project":"Superalgos","id":"e4b2dfeb-834f-4daf-8c65-5f10885d4dfa","savedPayload":{"position":{"x":10855.138739824917,"y":15769.37915228869},"targetPosition":{"x":10788.942651854934,"y":16080.668310625391},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe1b0c2a-0a40-42b7-a275-dfe9d14f0a7c","savedPayload":{"position":{"x":10788.942651854934,"y":16080.668310625391},"targetPosition":{"x":10722.679178935265,"y":16391.95401359322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Histogram","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.histogram","project":"Superalgos","id":"3698be44-3c02-481a-94fa-d3b759c3fd16","savedPayload":{"position":{"x":11256.49457419772,"y":16045.38553950921},"targetPosition":{"x":10989.627064560358,"y":16218.679963849212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"251d6cd3-674e-4269-86ac-4ef977924055","savedPayload":{"position":{"x":10989.627064560358,"y":16218.679963849212},"targetPosition":{"x":10722.679178935265,"y":16391.95401359322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d05c86b5-c035-4dde-967b-fd9ec3f33d8d","savedPayload":{"position":{"x":10722.679178935265,"y":16391.95401359322},"targetPosition":{"x":10590.396862870522,"y":17013.587981503046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"03816d0f-361f-4c6c-8f85-0bf2dfff1c21","savedPayload":{"position":{"x":10647.615535473822,"y":17377.50998867358},"targetPosition":{"x":10786.673182942548,"y":17805.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"MACD 081709","config":"{\n\t\"codeName\": \"Module-MACD-081709\",\n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.line","project":"Superalgos","id":"9a6467e7-6106-454b-b7ef-e7d3ef9bf6ff","savedPayload":{"position":{"x":10961.806000148903,"y":16623.36891426989},"targetPosition":{"x":10651.163693714614,"y":16772.536990534758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6d3d1eb7-854c-48c1-9f53-9a81d3d40d6a","savedPayload":{"position":{"x":10651.163693714614,"y":16772.536990534758},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.line","project":"Superalgos","id":"0820faf8-ca0c-4188-9af8-ebd57e41dfa3","savedPayload":{"position":{"x":10746.790045660477,"y":17323.30996581473},"targetPosition":{"x":10584.884493914462,"y":17012.17008458705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"075592ad-acd5-4389-ac67-5cc0cb03b92a","savedPayload":{"position":{"x":10584.884493914462,"y":17012.17008458705},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.signal","project":"Superalgos","id":"eba62e43-3d37-46e0-aa8e-19f394d28745","savedPayload":{"position":{"x":10510.733391520534,"y":17439.481261390105},"targetPosition":{"x":10444.830218209408,"y":17128.381327580235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96975ec0-b8cd-41d9-90b1-4b3a7acdb4c2","savedPayload":{"position":{"x":10444.830218209408,"y":17128.381327580235},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.signal","project":"Superalgos","id":"48465d15-62ec-4961-9b7c-b0f90cb6b661","savedPayload":{"position":{"x":10079.463085824464,"y":17378.403549108403},"targetPosition":{"x":10229.236053801815,"y":17097.48922084501},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d6442860-3c2e-43f4-97b2-d4dfff64c72f","savedPayload":{"position":{"x":10229.236053801815,"y":17097.48922084501},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"c83ddb1a-8e52-4163-b80e-3868cf6529a0","savedPayload":{"position":{"x":9788.484268842178,"y":17055.144142745557},"targetPosition":{"x":10083.692464289124,"y":16936.087963302227},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2ae7ce7b-794a-454e-8260-1868d6b2909e","savedPayload":{"position":{"x":10083.692464289124,"y":16936.087963302227},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"7e353304-2d0b-4718-8cfa-cc6a925ad6a5","savedPayload":{"position":{"x":9773.394033619148,"y":16620.431705514115},"targetPosition":{"x":10076.152886092517,"y":16718.72484064233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6fc15982-383b-4a39-8c6e-5acbf13ac87c","savedPayload":{"position":{"x":10076.152886092517,"y":16718.72484064233},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = 0","project":"Superalgos","id":"06a7bc4a-17b4-4aef-bfa0-c949e5c53484","savedPayload":{"position":{"x":10041.440174410502,"y":16277.391555180806},"targetPosition":{"x":10210.224564864635,"y":16547.17544117167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"00562b76-47c9-49fd-b8f2-902f22484df5","savedPayload":{"position":{"x":10210.224564864635,"y":16547.17544117167},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Histogram","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = record.histogram","project":"Superalgos","id":"65c9be94-3e68-4aba-9b52-e7b8848064ea","savedPayload":{"position":{"x":10466.933988332941,"y":16187.094001424255},"targetPosition":{"x":10423.047302716346,"y":16501.968859737834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f4fe4dc0-d4ab-4812-bd09-96953df3813a","savedPayload":{"position":{"x":10423.047302716346,"y":16501.968859737834},"targetPosition":{"x":10379.037326309466,"y":16817.086630812868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"247d8d0e-3330-4aa0-9e5e-0f3823bd7258","savedPayload":{"position":{"x":10379.037326309466,"y":16817.086630812868},"targetPosition":{"x":10851.522603571259,"y":16392.23568677424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line Zero","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a75405f5-da8a-487f-871c-6e2b7e800c42","savedPayload":{"position":{"x":9851.030618638622,"y":15645.694690497825},"targetPosition":{"x":10138.250449516312,"y":15782.687925730146},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2bb22bfc-5bc6-46bd-b780-4269bd800d69","savedPayload":{"position":{"x":10138.250449516312,"y":15782.687925730146},"targetPosition":{"x":10425.700558142646,"y":15919.523623765079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Begin","project":"Superalgos","id":"0ead2c7c-b1e2-4297-86c4-f1515df7f077","savedPayload":{"position":{"x":10212.551740702656,"y":15682.98043443546},"targetPosition":{"x":10425.700558142646,"y":15919.523623765079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Begin","id":"2ae7ce7b-794a-454e-8260-1868d6b2909e"}}},{"type":"Polygon Vertex","name":"Zero End","project":"Superalgos","id":"5da8d9fb-ca1e-429e-87e9-605b2493e037","savedPayload":{"position":{"x":10291.531524799615,"y":15623.950379816619},"targetPosition":{"x":10425.700558142646,"y":15919.523623765079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero End","id":"6fc15982-383b-4a39-8c6e-5acbf13ac87c"}}}],"id":"19fac3f2-d743-4b88-b051-294f37589fe5","savedPayload":{"position":{"x":10425.700558142646,"y":15919.523623765079},"targetPosition":{"x":10851.522603571259,"y":16392.23568677424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Histogram","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"6383ddc1-5bd7-4cd2-83ce-b7ffe7dbabff","savedPayload":{"position":{"x":10391.288088624562,"y":15607.338607491583},"targetPosition":{"x":10605.181245031465,"y":15818.787424464497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.histogram < 0","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"6ce4860c-7dc9-4fa0-9ac1-e768b669141b","savedPayload":{"position":{"x":10393.016200261703,"y":15218.53997238088},"targetPosition":{"x":10499.167622204339,"y":15518.559533154277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"038a1be4-9af1-4942-a4db-258ccdbce08c","savedPayload":{"position":{"x":10499.167622204339,"y":15518.559533154277},"targetPosition":{"x":10605.181245031465,"y":15818.787424464497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7fc825fc-7db0-47dc-bbdb-14d269d1fcb4","savedPayload":{"position":{"x":10605.181245031465,"y":15818.787424464497},"targetPosition":{"x":10785.424737929636,"y":16081.069269418978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero","project":"Superalgos","id":"d48a6d8f-eab0-49f1-9b7f-1fc503cd1df9","savedPayload":{"position":{"x":10719.367272258598,"y":15769.630900073573},"targetPosition":{"x":10785.424737929636,"y":16081.069269418978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero","id":"00562b76-47c9-49fd-b8f2-902f22484df5"}}},{"type":"Polygon Vertex","name":"Histogram","project":"Superalgos","id":"6892eda6-1689-49a2-8145-9ffd38d4bc3d","savedPayload":{"position":{"x":10843.398098844482,"y":15768.06220805717},"targetPosition":{"x":10785.424737929636,"y":16081.069269418978},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Histogram","id":"f4fe4dc0-d4ab-4812-bd09-96953df3813a"}}}],"id":"68162ec3-a643-4567-818b-83362fc9e843","savedPayload":{"position":{"x":10785.424737929636,"y":16081.069269418978},"targetPosition":{"x":10851.522603571259,"y":16392.23568677424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b93e8f5b-41db-44e6-8d00-b1aac544377a","savedPayload":{"position":{"x":10998.307829784379,"y":15152.354032654483},"targetPosition":{"x":11023.118910181049,"y":15469.63955880657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"541af95f-c876-4ba2-aaef-56e43a140ffd","savedPayload":{"position":{"x":11023.118910181049,"y":15469.63955880657},"targetPosition":{"x":11048.112794692297,"y":15787.054584289517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Line End","project":"Superalgos","id":"a2c0de4e-cf82-4b65-a591-a364e6c3f9e8","savedPayload":{"position":{"x":11146.464020205982,"y":15484.200459675476},"targetPosition":{"x":11048.112794692297,"y":15787.054584289517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line End","id":"075592ad-acd5-4389-ac67-5cc0cb03b92a"}}},{"type":"Polygon Vertex","name":"Line Begin","project":"Superalgos","id":"1c1fd64b-34ee-447c-b0d3-76ca645588c6","savedPayload":{"position":{"x":11254.845466355506,"y":15544.951439620347},"targetPosition":{"x":11048.112794692297,"y":15787.054584289517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line Begin","id":"6d3d1eb7-854c-48c1-9f53-9a81d3d40d6a"}}}],"id":"9e96b118-c85c-4707-8063-a2651ae44740","savedPayload":{"position":{"x":11048.112794692297,"y":15787.054584289517},"targetPosition":{"x":10851.522603571259,"y":16392.23568677424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Signal","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"c1d9c98e-657c-4895-a557-bd2074056db5","savedPayload":{"position":{"x":11362.42209198275,"y":15605.008847220346},"targetPosition":{"x":11225.082909629502,"y":15892.17973030646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"64c671b3-60a7-4fc0-b7ba-a597fce77d38","savedPayload":{"position":{"x":11225.082909629502,"y":15892.17973030646},"targetPosition":{"x":11088.036376014741,"y":16179.449870746495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Signal End","project":"Superalgos","id":"faff0d49-252e-45e3-a42d-fa041b77dd34","savedPayload":{"position":{"x":11324.661809150988,"y":15966.516648798628},"targetPosition":{"x":11088.036376014741,"y":16179.449870746495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal End","id":"d6442860-3c2e-43f4-97b2-d4dfff64c72f"}}},{"type":"Polygon Vertex","name":"Signal Begin","project":"Superalgos","id":"0469d29c-4fd7-4ab3-a5fc-433cd33e82c8","savedPayload":{"position":{"x":11388.166582967486,"y":16073.448957209835},"targetPosition":{"x":11088.036376014741,"y":16179.449870746495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal Begin","id":"96975ec0-b8cd-41d9-90b1-4b3a7acdb4c2"}}}],"id":"d3737a2f-c760-4373-a2ed-bc3c321a87b6","savedPayload":{"position":{"x":11088.036376014741,"y":16179.449870746495},"targetPosition":{"x":10851.522603571259,"y":16392.23568677424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"e89f491f-20db-434b-810f-6c93c0096d3f","savedPayload":{"position":{"x":10851.522603571259,"y":16392.23568677424},"targetPosition":{"x":10983.525315335319,"y":17013.773622323035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MACD 081709","config":"{ \n\"codeName\": \"Panel-MACD-081709\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.line","project":"Superalgos","id":"10eb7ea2-b8dd-4ddd-b200-71d0ecea3c6e","savedPayload":{"position":{"x":11489.955953609857,"y":15953.227693199737},"targetPosition":{"x":11472.840130549292,"y":16271.038514026633},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e07f765-13e9-49f2-8f76-90cb6e4466af","savedPayload":{"position":{"x":11472.840130549292,"y":16271.038514026633},"targetPosition":{"x":11455.960091456545,"y":16588.53830386705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Signal","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.signal","project":"Superalgos","id":"f2dcbee4-39a8-42aa-8fdd-8e4c3addb6d2","savedPayload":{"position":{"x":11929.015147279933,"y":16162.951797813621},"targetPosition":{"x":11692.465205281853,"y":16375.816402202843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"95d59325-db92-413c-a74a-5a12fea61b82","savedPayload":{"position":{"x":11692.465205281853,"y":16375.816402202843},"targetPosition":{"x":11455.960091456545,"y":16588.53830386705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Histogram","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.histogram","project":"Superalgos","id":"387de792-7d66-46a8-b11d-a96403f09dfe","savedPayload":{"position":{"x":12091.635523631438,"y":16621.661475079938},"targetPosition":{"x":11773.841885808622,"y":16605.143108986827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9d00b3d7-779a-452f-b800-6d2949df7a03","savedPayload":{"position":{"x":11773.841885808622,"y":16605.143108986827},"targetPosition":{"x":11455.960091456545,"y":16588.53830386705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a858c3e2-ad02-4ee4-aea3-fd60ab8fe9d7","savedPayload":{"position":{"x":11455.960091456545,"y":16588.53830386705},"targetPosition":{"x":10983.525315335319,"y":17013.773622323035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"43695164-d8aa-40d8-bbf4-ee8cbbdec3f0","savedPayload":{"position":{"x":10925.730830411274,"y":17377.50998867358},"targetPosition":{"x":10786.673182942548,"y":17805.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"MACD 245209","config":"{\n\t\"codeName\": \"Module-MACD-245209\",\n \"icon\": \"histogram\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.line","project":"Superalgos","id":"48f415e0-0abb-4867-a7d7-454bc5450e6b","savedPayload":{"position":{"x":11527.566202051075,"y":16988.257361443488},"targetPosition":{"x":11187.97659116958,"y":16896.26015941122},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"36adae0b-9c21-40b9-abfb-e511d72f2b5d","savedPayload":{"position":{"x":11187.97659116958,"y":16896.26015941122},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.line","project":"Superalgos","id":"1e3e4460-9762-470f-9cbc-0efd86f722da","savedPayload":{"position":{"x":10995.60039436715,"y":17394.485473159744},"targetPosition":{"x":11016.127647747471,"y":17036.08405056848},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6f0173db-8cbd-4530-a30d-ebe66906c578","savedPayload":{"position":{"x":11016.127647747471,"y":17036.08405056848},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.signal","project":"Superalgos","id":"8f397084-7cae-4586-b410-c5970593562e","savedPayload":{"position":{"x":10668.863692403414,"y":17311.950649193543},"targetPosition":{"x":10798.348073555717,"y":17021.577072075786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0cc9c494-c307-4bfe-9baf-8ed796fb602d","savedPayload":{"position":{"x":10798.348073555717,"y":17021.577072075786},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Signal End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.signal","project":"Superalgos","id":"dd38ae56-a770-4332-899e-6f8239fa815b","savedPayload":{"position":{"x":10355.557251055172,"y":17008.63499924957},"targetPosition":{"x":10641.908135836231,"y":16869.670694744756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cd80c183-d19f-48a6-b7fc-a69b1b794b2a","savedPayload":{"position":{"x":10641.908135836231,"y":16869.670694744756},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"4939828f-043d-4764-be8b-eafcd061b524","savedPayload":{"position":{"x":10310.130373733806,"y":16576.49449741801},"targetPosition":{"x":10619.059781347718,"y":16653.690428674858},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"957cc3a3-ac48-4a0e-b7b3-b0ad7f529cf4","savedPayload":{"position":{"x":10619.059781347718,"y":16653.690428674858},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"eb1dcee7-230c-4970-9326-0359d3e67857","savedPayload":{"position":{"x":10553.716258093187,"y":16215.77268773086},"targetPosition":{"x":10740.85036267681,"y":16473.327308687745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"749f8342-4448-48d8-b663-9840ad6295c2","savedPayload":{"position":{"x":10740.85036267681,"y":16473.327308687745},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = 0","project":"Superalgos","id":"7de51d6d-a086-4c6f-b801-5f13b37c9feb","savedPayload":{"position":{"x":10971.786274958671,"y":16095.833866146975},"targetPosition":{"x":10949.94595157287,"y":16413.364089487826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2d60df1-8bd2-4371-9ce1-60a328cc80d3","savedPayload":{"position":{"x":10949.94595157287,"y":16413.364089487826},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Histogram","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = record.histogram","project":"Superalgos","id":"b8f5d987-aa7a-415e-ac1e-e36a3afa7db1","savedPayload":{"position":{"x":11369.340204801716,"y":16273.125550099026},"targetPosition":{"x":11148.843177943294,"y":16502.009695748566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4292d954-54aa-45e3-acb4-a52622471108","savedPayload":{"position":{"x":11148.843177943294,"y":16502.009695748566},"targetPosition":{"x":10928.052016349226,"y":16731.06557102472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fd10b89d-abb6-4a47-b82b-1efc5196c46b","savedPayload":{"position":{"x":10928.052016349226,"y":16731.06557102472},"targetPosition":{"x":11559.796772737882,"y":16665.21408201984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Line Zero","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"c93101ad-3f34-469d-8141-6bbb810cf79c","savedPayload":{"position":{"x":11189.316923785245,"y":15473.180487504036},"targetPosition":{"x":11341.058552222428,"y":15752.87793679334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c4c38f4b-d3a5-4a1c-8862-ebd87269fe24","savedPayload":{"position":{"x":11341.058552222428,"y":15752.87793679334},"targetPosition":{"x":11493.189257387989,"y":16032.579523066255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Begin","project":"Superalgos","id":"0c3f9cb5-0866-4694-97e4-c195f216059e","savedPayload":{"position":{"x":11459.823198293445,"y":15715.81629169433},"targetPosition":{"x":11493.189257387989,"y":16032.579523066255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Begin","id":"957cc3a3-ac48-4a0e-b7b3-b0ad7f529cf4"}}},{"type":"Polygon Vertex","name":"Zero End","project":"Superalgos","id":"a6fba16b-f5a7-4c45-8348-28bb07430bad","savedPayload":{"position":{"x":11558.224025742591,"y":15714.374426658893},"targetPosition":{"x":11493.189257387989,"y":16032.579523066255},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero End","id":"749f8342-4448-48d8-b663-9840ad6295c2"}}}],"id":"579cce76-9e03-43a3-b252-9d62ba988ed3","savedPayload":{"position":{"x":11493.189257387989,"y":16032.579523066255},"targetPosition":{"x":11559.796772737882,"y":16665.21408201984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Histogram","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"83f50f64-2a7f-49b1-9649-dd23f86374b1","savedPayload":{"position":{"x":11648.597979919956,"y":15759.707670817716},"targetPosition":{"x":11697.168394015116,"y":16056.459127790786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.histogram < 0","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"de351dae-2678-4a8a-a5cc-e2a42418f558","savedPayload":{"position":{"x":11878.107389423818,"y":15446.020476562011},"targetPosition":{"x":11787.798109830303,"y":15751.182955482345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6d9e5ad0-dd68-4192-ad7f-9986f34050af","savedPayload":{"position":{"x":11787.798109830303,"y":15751.182955482345},"targetPosition":{"x":11697.168394015116,"y":16056.459127790786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c056547-f273-4157-8c55-ca13da5adeb5","savedPayload":{"position":{"x":11697.168394015116,"y":16056.459127790786},"targetPosition":{"x":11689.01084256476,"y":16374.636064965867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero","project":"Superalgos","id":"02e0cf18-f0d8-4c59-ae6a-37a1e516b67a","savedPayload":{"position":{"x":11818.502764725115,"y":16083.766964505896},"targetPosition":{"x":11689.01084256476,"y":16374.636064965867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero","id":"d2d60df1-8bd2-4371-9ce1-60a328cc80d3"}}},{"type":"Polygon Vertex","name":"Histogram","project":"Superalgos","id":"e4c545cd-400d-4616-bf3a-f24a1fd24794","savedPayload":{"position":{"x":11919.931511612056,"y":16155.54406407501},"targetPosition":{"x":11689.01084256476,"y":16374.636064965867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Histogram","id":"4292d954-54aa-45e3-acb4-a52622471108"}}}],"id":"83a0d615-06f0-4daf-a684-211e42345717","savedPayload":{"position":{"x":11689.01084256476,"y":16374.636064965867},"targetPosition":{"x":11559.796772737882,"y":16665.21408201984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"cd8d0c68-f06e-43be-9c1c-d4d2b79fc680","savedPayload":{"position":{"x":12406.96650226567,"y":15748.416268304361},"targetPosition":{"x":12240.679403992275,"y":16019.720652485037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"dec1dd79-8e14-4104-86e1-ab9b5919055c","savedPayload":{"position":{"x":12240.679403992275,"y":16019.720652485037},"targetPosition":{"x":12074.495012908723,"y":16291.312301245314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Line End","project":"Superalgos","id":"8a24dd4a-0202-40ea-95d6-127abe4893bf","savedPayload":{"position":{"x":12332.148214265137,"y":16104.143718342952},"targetPosition":{"x":12074.495012908723,"y":16291.312301245314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line End","id":"6f0173db-8cbd-4530-a30d-ebe66906c578"}}},{"type":"Polygon Vertex","name":"Line Begin","project":"Superalgos","id":"11bd728e-9c76-4cd3-97e5-27965f60bd9d","savedPayload":{"position":{"x":12384.117021272403,"y":16217.02100487515},"targetPosition":{"x":12074.495012908723,"y":16291.312301245314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Line Begin","id":"36adae0b-9c21-40b9-abfb-e511d72f2b5d"}}}],"id":"c5dff6f5-ceea-4cf7-8d51-3f2bd9423d10","savedPayload":{"position":{"x":12074.495012908723,"y":16291.312301245314},"targetPosition":{"x":11559.796772737882,"y":16665.21408201984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Signal","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"263c0cb6-735f-48ae-a2fc-9835403317dc","savedPayload":{"position":{"x":12435.955787338578,"y":16329.02354030653},"targetPosition":{"x":12155.93618561629,"y":16480.452285749743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"630155a8-17d7-414a-801b-933cff540e61","savedPayload":{"position":{"x":12155.93618561629,"y":16480.452285749743},"targetPosition":{"x":11876.177152094388,"y":16632.22923013628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Signal End","project":"Superalgos","id":"9d1ae188-aa8e-4c73-a417-31c3968a9e6f","savedPayload":{"position":{"x":12192.806210324929,"y":16599.1220541292},"targetPosition":{"x":11876.177152094388,"y":16632.22923013628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal End","id":"cd80c183-d19f-48a6-b7fc-a69b1b794b2a"}}},{"type":"Polygon Vertex","name":"Signal Begin","project":"Superalgos","id":"9ef44a8e-4e95-4e21-a7f7-0950844c58f3","savedPayload":{"position":{"x":12181.283374442784,"y":16722.752286636987},"targetPosition":{"x":11876.177152094388,"y":16632.22923013628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Signal Begin","id":"0cc9c494-c307-4bfe-9baf-8ed796fb602d"}}}],"id":"1c32305b-ed73-433e-af91-5c221e1c8254","savedPayload":{"position":{"x":11876.177152094388,"y":16632.22923013628},"targetPosition":{"x":11559.796772737882,"y":16665.21408201984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"b1a0e87f-af0a-4354-a9a3-74ee5a667593","savedPayload":{"position":{"x":11559.796772737882,"y":16665.21408201984},"targetPosition":{"x":11301.616106872847,"y":17245.258532479864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"MACD 245209","config":"{ \n\"codeName\": \"Panel-MACD-245209\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.line","project":"Superalgos","id":"7449cbcf-82e3-44a9-b623-8ce89d3d0a90","savedPayload":{"position":{"x":12334.468931273557,"y":16685.65117262279},"targetPosition":{"x":12133.65985686408,"y":16932.49011791376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"03f0b78f-d66e-43d9-93fb-28ec2a0c78ad","savedPayload":{"position":{"x":12133.65985686408,"y":16932.49011791376},"targetPosition":{"x":11933.312695724559,"y":17179.250193664397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Signal","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.signal","project":"Superalgos","id":"d32b0179-d71f-4cc4-a53e-f65d850da700","savedPayload":{"position":{"x":12566.350356003008,"y":17113.27030504329},"targetPosition":{"x":12249.835584409335,"y":17146.30342672009},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22cd37eb-620d-4fc6-ba86-e09d58614393","savedPayload":{"position":{"x":12249.835584409335,"y":17146.30342672009},"targetPosition":{"x":11933.312695724559,"y":17179.250193664397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Histogram","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.histogram","project":"Superalgos","id":"bddd9afa-785d-4791-8d87-e2c984a74f12","savedPayload":{"position":{"x":12427.85889367602,"y":17579.640312315543},"targetPosition":{"x":12180.577222403954,"y":17379.50320892032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bfa738fb-7d49-4539-97be-707922adde3e","savedPayload":{"position":{"x":12180.577222403954,"y":17379.50320892032},"targetPosition":{"x":11933.312695724559,"y":17179.250193664397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e864cbe9-0b24-45c0-b08b-85c2486bef8d","savedPayload":{"position":{"x":11933.312695724559,"y":17179.250193664397},"targetPosition":{"x":11301.616106872847,"y":17245.258532479864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fe60a0e-dd3a-4bb8-a321-4742389ab930","savedPayload":{"position":{"x":11150.730830411274,"y":17540.982057474786},"targetPosition":{"x":10786.673182942548,"y":17805.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"24146ce7-bc0d-461a-8a43-0d2bd3059886","savedPayload":{"position":{"x":10786.673182942548,"y":17805.4854210064},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Exponential Moving Average (EMA)","config":"{\n\"codeName\": \"Plotter EMA\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"EMA Popular","config":"{\n\t\"codeName\": \"EMA-Popular\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"EMA 20 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema20","project":"Superalgos","id":"7bf83ec0-5a84-4a81-a111-19d913e12135","savedPayload":{"position":{"x":10997.442917519547,"y":16939.298078423195},"targetPosition":{"x":10833.26003087962,"y":16998.839430783417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6e1ff74e-36ba-460c-9f78-c8ee0b5e0837","savedPayload":{"position":{"x":10833.26003087962,"y":16998.839430783417},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 20 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema20","project":"Superalgos","id":"12164218-7531-4063-bbd3-32855e7f7847","savedPayload":{"position":{"x":11009.291245785298,"y":17223.885132142426},"targetPosition":{"x":10844.648689210582,"y":17163.90986893795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83f1d130-42bd-45ae-9078-ed3f825531bb","savedPayload":{"position":{"x":10844.648689210582,"y":17163.90986893795},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 50 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema50","project":"Superalgos","id":"580ad5c4-aee7-4af2-b85d-0ef86d020823","savedPayload":{"position":{"x":10812.965675905554,"y":17456.10430533299},"targetPosition":{"x":10725.798157020261,"y":17305.266969811753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7084c0a2-8874-46a7-b240-d9605a7baf49","savedPayload":{"position":{"x":10725.798157020261,"y":17305.266969811753},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 50 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema50","project":"Superalgos","id":"1e7a4d05-3daf-4d0a-97ff-b53e35eab2aa","savedPayload":{"position":{"x":10514.092058803766,"y":17507.95177129594},"targetPosition":{"x":10544.547766743206,"y":17336.1590706016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3861b379-3e51-43e2-b607-e3b7fba16a34","savedPayload":{"position":{"x":10544.547766743206,"y":17336.1590706016},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 100 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema100","project":"Superalgos","id":"b50c3599-e7bd-45ef-b348-4ddf85460bbf","savedPayload":{"position":{"x":10251.91444938253,"y":17356.627071153962},"targetPosition":{"x":10386.154867552363,"y":17243.9435456885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d3b1e9cb-8098-4e62-94ea-4e89852b4f6a","savedPayload":{"position":{"x":10386.154867552363,"y":17243.9435456885},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 100 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema100","project":"Superalgos","id":"f5cf8bb1-98bf-4c38-9e7c-f31678a656e4","savedPayload":{"position":{"x":10148.062524311434,"y":17071.827765710783},"targetPosition":{"x":10323.189750186102,"y":17071.833641942667},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32ca337a-699d-4c2f-9b6a-73d9a4481e78","savedPayload":{"position":{"x":10323.189750186102,"y":17071.833641942667},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 200 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema200","project":"Superalgos","id":"451d4c20-a9ad-4b8d-a116-fae9406ee356","savedPayload":{"position":{"x":10251.662680639569,"y":16787.250667349752},"targetPosition":{"x":10385.390435735815,"y":16899.240667929836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"33d1fe7c-ff86-440a-8b42-0de9c296a632","savedPayload":{"position":{"x":10385.390435735815,"y":16899.240667929836},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 200 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema200","project":"Superalgos","id":"24e42cf3-2dc8-4257-a511-7dc52dc6f060","savedPayload":{"position":{"x":10514.039093269308,"y":16634.572368739726},"targetPosition":{"x":10544.562568711168,"y":16807.167530836618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"87e2a3ab-afc2-44cb-b2ca-03a715a4d673","savedPayload":{"position":{"x":10544.562568711168,"y":16807.167530836618},"targetPosition":{"x":10591.253089301088,"y":17071.853866278092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dd70bea3-9a52-4b2b-a364-31917b08d98d","savedPayload":{"position":{"x":10429.871234476494,"y":17487.287369472455},"targetPosition":{"x":10767.371234476494,"y":16902.72022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"d468c2f1-2586-4fe4-aa0c-fc3737d992f5","savedPayload":{"position":{"x":10140.475019985584,"y":16689.91763204369},"targetPosition":{"x":10307.781340342415,"y":16711.943926980824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"23236076-e29a-451e-8c95-e3812064279c","savedPayload":{"position":{"x":10307.781340342415,"y":16711.943926980824},"targetPosition":{"x":10475.087660699246,"y":16733.97022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 20 Begin","project":"Superalgos","id":"5f877b66-2ca6-4a8f-967e-70948cefc9ea","savedPayload":{"position":{"x":10328.945873810622,"y":16649.59522191796},"targetPosition":{"x":10475.087660699246,"y":16733.97022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 20 Begin","id":"6e1ff74e-36ba-460c-9f78-c8ee0b5e0837"}}},{"type":"Polygon Vertex","name":"EMA 20 End","project":"Superalgos","id":"d5971215-2792-4415-bfea-2e4b2b5b98fe","savedPayload":{"position":{"x":10372.359169554024,"y":16600.091845743813},"targetPosition":{"x":10475.087660699246,"y":16733.97022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 20 End","id":"83f1d130-42bd-45ae-9078-ed3f825531bb"}}}],"id":"17ca2f43-9ddf-47f8-9929-e4612b00dd4f","savedPayload":{"position":{"x":10475.087660699246,"y":16733.97022191796},"targetPosition":{"x":10767.371234476494,"y":16902.72022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"330fba24-ff59-48d2-a297-b4e6903efc3d","savedPayload":{"position":{"x":10330.864482128203,"y":16404.979665850267},"targetPosition":{"x":10464.742858302348,"y":16507.70815699549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"0806f6fe-730c-4fde-b730-dcdf31825733","savedPayload":{"position":{"x":10464.742858302348,"y":16507.70815699549},"targetPosition":{"x":10598.621234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 50 End","project":"Superalgos","id":"b00cf575-af36-4653-97ec-441912af5bb8","savedPayload":{"position":{"x":10514.246234476494,"y":16464.29486125209},"targetPosition":{"x":10598.621234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 50 End","id":"3861b379-3e51-43e2-b607-e3b7fba16a34"}}},{"type":"Polygon Vertex","name":"EMA 50 Begin","project":"Superalgos","id":"da71a6f7-2917-4c07-bd77-dc1b0334c5ec","savedPayload":{"position":{"x":10576.59493953936,"y":16443.13032778388},"targetPosition":{"x":10598.621234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 50 Begin","id":"7084c0a2-8874-46a7-b240-d9605a7baf49"}}}],"id":"36482493-d7f7-4a41-9588-a348e3204025","savedPayload":{"position":{"x":10598.621234476494,"y":16610.436648140712},"targetPosition":{"x":10767.371234476494,"y":16902.72022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 100","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"278d84a3-2d10-4db3-90cc-b38f6af88ecf","savedPayload":{"position":{"x":10638.215576053277,"y":16253.4108796954},"targetPosition":{"x":10702.793405264885,"y":16409.31555080668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"612138e2-6896-4f8f-956a-d5bf1b8c043a","savedPayload":{"position":{"x":10702.793405264885,"y":16409.31555080668},"targetPosition":{"x":10767.371234476494,"y":16565.22022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 100 Begin","project":"Superalgos","id":"fc01c5ca-4323-4a71-9d83-1f288b80e8ed","savedPayload":{"position":{"x":10767.371234476494,"y":16396.47022191796},"targetPosition":{"x":10767.371234476494,"y":16565.22022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 100 Begin","id":"d3b1e9cb-8098-4e62-94ea-4e89852b4f6a"}}},{"type":"Polygon Vertex","name":"EMA 100 End","project":"Superalgos","id":"fbd76a9e-5a2e-4cb8-a2ed-35d2616d9a2e","savedPayload":{"position":{"x":10831.949063688102,"y":16409.31555080668},"targetPosition":{"x":10767.371234476494,"y":16565.22022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 100 End","id":"32ca337a-699d-4c2f-9b6a-73d9a4481e78"}}}],"id":"37a16b86-6ee7-4dfa-b32a-c8b9bcb9b484","savedPayload":{"position":{"x":10767.371234476494,"y":16565.22022191796},"targetPosition":{"x":10767.371234476494,"y":16902.72022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 200","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"b170fc33-32c4-452d-919d-cf2df82c224f","savedPayload":{"position":{"x":10980.17382435076,"y":16275.82400742705},"targetPosition":{"x":10958.147529413627,"y":16443.13032778388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ad1ad1fa-9fe8-4a56-aade-dcade3d90c38","savedPayload":{"position":{"x":10958.147529413627,"y":16443.13032778388},"targetPosition":{"x":10936.121234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 200 End","project":"Superalgos","id":"a98d63cf-bb2b-43f0-80cd-680c59ef741a","savedPayload":{"position":{"x":11020.496234476494,"y":16464.29486125209},"targetPosition":{"x":10936.121234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 200 End","id":"87e2a3ab-afc2-44cb-b2ca-03a715a4d673"}}},{"type":"Polygon Vertex","name":"EMA 200 Begin","project":"Superalgos","id":"c9ce7524-76dd-4399-92d8-58d1d757ed89","savedPayload":{"position":{"x":11069.999610650639,"y":16507.70815699549},"targetPosition":{"x":10936.121234476494,"y":16610.436648140712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 200 Begin","id":"33d1fe7c-ff86-440a-8b42-0de9c296a632"}}}],"id":"2e225665-d05d-46cd-91d0-4b36803bcf67","savedPayload":{"position":{"x":10936.121234476494,"y":16610.436648140712},"targetPosition":{"x":10767.371234476494,"y":16902.72022191796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"5ea59fb9-f0d6-438b-b1a7-a62ed1750004","savedPayload":{"position":{"x":10767.371234476494,"y":16902.72022191796},"targetPosition":{"x":11104.871234476494,"y":17487.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"EMA Popular","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"EMA 20","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema20","project":"Superalgos","id":"c79a60a8-e960-4a7d-86b0-bb8d65272b30","savedPayload":{"position":{"x":11096.758401798224,"y":16717.170368472052},"targetPosition":{"x":11238.355489784439,"y":16892.02820979987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"b212a4cc-ecc2-478b-8309-de778e7abb65","savedPayload":{"position":{"x":11203.157735150387,"y":16669.798333165967},"targetPosition":{"x":11238.355489784439,"y":16892.02820979987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"80fa0565-6440-406f-a49d-57adcdaf20ae","savedPayload":{"position":{"x":11238.355489784439,"y":16892.02820979987},"targetPosition":{"x":11329.871234476494,"y":17097.575937769456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 50","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema50","project":"Superalgos","id":"ad4b2bc1-bc45-4a8f-b07f-aa0f79f5e884","savedPayload":{"position":{"x":11364.875774755827,"y":16652.80108228457},"targetPosition":{"x":11376.651364910489,"y":16877.49272760435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"6c0a0f94-7f53-4226-8cac-46a2c8c93f0e","savedPayload":{"position":{"x":11478.799227351887,"y":16677.016259661967},"targetPosition":{"x":11376.651364910489,"y":16877.49272760435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f43975ff-c552-42b8-a504-d2b6a3a46b18","savedPayload":{"position":{"x":11376.651364910489,"y":16877.49272760435},"targetPosition":{"x":11329.871234476494,"y":17097.575937769456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 100","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema100","project":"Superalgos","id":"2bfe0bed-a18d-452e-a59a-9ddbd135dd0a","savedPayload":{"position":{"x":11619.62260308729,"y":16758.320673550992},"targetPosition":{"x":11497.078820208908,"y":16947.021551338712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"4c01a5e4-bd67-4914-b544-0f6fd7ed9940","savedPayload":{"position":{"x":11697.55528815129,"y":16844.873688897314},"targetPosition":{"x":11497.078820208908,"y":16947.021551338712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9507a099-6a7f-4d00-8b6e-623a7003055c","savedPayload":{"position":{"x":11497.078820208908,"y":16947.021551338712},"targetPosition":{"x":11329.871234476494,"y":17097.575937769456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 200","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema200","project":"Superalgos","id":"ee01f76f-2b56-4d87-a278-4dd98436dca7","savedPayload":{"position":{"x":11763.694256896226,"y":16993.42424488654},"targetPosition":{"x":11553.638660934355,"y":17074.057033534235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"3ca9953f-2806-471d-aa84-d80fd4645414","savedPayload":{"position":{"x":11775.868537568262,"y":17109.254788168288},"targetPosition":{"x":11553.638660934355,"y":17074.057033534235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bf57692-7070-4a12-9bc3-487a841125b0","savedPayload":{"position":{"x":11553.638660934355,"y":17074.057033534235},"targetPosition":{"x":11329.871234476494,"y":17097.575937769456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a819c354-b152-4946-a403-62a8cf0f650f","savedPayload":{"position":{"x":11329.871234476494,"y":17097.575937769456},"targetPosition":{"x":11104.871234476494,"y":17487.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"79bf7438-f77a-4c8d-a450-67027d5fd8bc","savedPayload":{"position":{"x":11104.871234476494,"y":17487.287369472455},"targetPosition":{"x":11104.871234476494,"y":17937.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"EMA Base 11","config":"{\n\t\"codeName\": \"EMA-Base11\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"EMA 11 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema11","project":"Superalgos","id":"41b049dc-e0da-471f-82f7-5f2c1eb61f90","savedPayload":{"position":{"x":11349.218158179905,"y":17400.17619458912},"targetPosition":{"x":11238.151499672495,"y":17382.275150820715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c961312c-6bb2-4b38-a142-9f03d0b3eba4","savedPayload":{"position":{"x":11238.151499672495,"y":17382.275150820715},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 11 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema11","project":"Superalgos","id":"55db8355-8155-4c70-85b5-4a629aeefa45","savedPayload":{"position":{"x":11294.599208990792,"y":17514.587077770397},"targetPosition":{"x":11210.842025077938,"y":17439.480592411353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"750547e8-4963-4008-aa2b-8edc565afd79","savedPayload":{"position":{"x":11210.842025077938,"y":17439.480592411353},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 22 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema22","project":"Superalgos","id":"bda3c179-331d-444e-9b1e-e3cfd1a26bb7","savedPayload":{"position":{"x":11186.79563161698,"y":17581.30640410282},"targetPosition":{"x":11156.940236391032,"y":17472.840255577565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ac0329a-2d0d-483f-a047-305198817a24","savedPayload":{"position":{"x":11156.940236391032,"y":17472.840255577565},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 22 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema22","project":"Superalgos","id":"08508d15-658f-40da-a580-76a5b512414d","savedPayload":{"position":{"x":11060.034300170977,"y":17579.151258892067},"targetPosition":{"x":11093.55957066803,"y":17471.76268297219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"adc1fb05-93dd-4a32-98dd-30577e4a68de","savedPayload":{"position":{"x":11093.55957066803,"y":17471.76268297219},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 33 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema33","project":"Superalgos","id":"bceee9f7-3824-498c-beb1-866463df7a7e","savedPayload":{"position":{"x":10954.56104173412,"y":17508.80588551503},"targetPosition":{"x":11040.822941449602,"y":17436.58999628367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"25fd3a99-95c4-4514-b7f3-d195c9ee3189","savedPayload":{"position":{"x":11040.822941449602,"y":17436.58999628367},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 33 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema33","project":"Superalgos","id":"6c2cc6ab-b520-4d47-8165-db2abfd53ed8","savedPayload":{"position":{"x":10903.862870621677,"y":17392.604442982258},"targetPosition":{"x":11015.47385589338,"y":17378.489275017284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0fe0c9b1-3079-499b-ad49-1b13e1e0af82","savedPayload":{"position":{"x":11015.47385589338,"y":17378.489275017284},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 55 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema55","project":"Superalgos","id":"5df6eee6-f3a0-406f-be6c-2e6bce745054","savedPayload":{"position":{"x":10924.03609794569,"y":17267.440068257754},"targetPosition":{"x":11025.560469555387,"y":17315.907087655032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"27b05f8b-84e9-4ab2-944d-46b10c2a978c","savedPayload":{"position":{"x":11025.560469555387,"y":17315.907087655032},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 55 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema55","project":"Superalgos","id":"508f7fdf-3889-4b3f-bec4-9ee071f7aa21","savedPayload":{"position":{"x":11008.675866567999,"y":17173.05156594733},"targetPosition":{"x":11067.880353866542,"y":17268.71283649982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1eeef11e-809a-4e49-8b3b-48a955f42ce3","savedPayload":{"position":{"x":11067.880353866542,"y":17268.71283649982},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 111 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema111","project":"Superalgos","id":"b9f04b17-af03-4983-8266-0e63f8f3271c","savedPayload":{"position":{"x":11130.909647987046,"y":17139.406618617257},"targetPosition":{"x":11128.997244576065,"y":17251.890362834783},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cb15539c-b3a0-4641-9417-861c48bd62ac","savedPayload":{"position":{"x":11128.997244576065,"y":17251.890362834783},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 11 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema111","project":"Superalgos","id":"abc69976-c994-40d1-a923-fd64ded26938","savedPayload":{"position":{"x":11251.929080264916,"y":17177.187259321},"targetPosition":{"x":11189.506960715,"y":17270.780683186655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"afa38489-5525-4f32-b766-cfe85d683a65","savedPayload":{"position":{"x":11189.506960715,"y":17270.780683186655},"targetPosition":{"x":11127.084841165084,"y":17364.37410705231},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"573429d9-05d9-41ea-9fac-5eaf95fcc06c","savedPayload":{"position":{"x":11125.084841165084,"y":17157.37410705231},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"02c6627c-956c-4022-a3f9-a132627d02d8","savedPayload":{"position":{"x":11033.494084421432,"y":16252.777205754091},"targetPosition":{"x":11195.54026489206,"y":16408.873443360513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"48f091c0-5895-4615-a56d-f779d35b60c6","savedPayload":{"position":{"x":11195.54026489206,"y":16408.873443360513},"targetPosition":{"x":11357.58644536269,"y":16564.969680966937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 11 End","project":"Superalgos","id":"1143164d-0f70-46f0-80fe-6107db66ce29","savedPayload":{"position":{"x":11267.610739890748,"y":16358.743173396191},"targetPosition":{"x":11357.58644536269,"y":16564.969680966937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 11 End","id":"750547e8-4963-4008-aa2b-8edc565afd79"}}},{"type":"Polygon Vertex","name":"EMA 11 Begin","project":"Superalgos","id":"31fd051d-973f-4d8c-b9d3-ac1c13621ab0","savedPayload":{"position":{"x":11353.379200415737,"y":16340.009019761568},"targetPosition":{"x":11357.58644536269,"y":16564.969680966937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 11 Begin","id":"c961312c-6bb2-4b38-a142-9f03d0b3eba4"}}}],"id":"01f54960-957d-490a-91c7-cfd01f2bf806","savedPayload":{"position":{"x":11357.58644536269,"y":16564.969680966937},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"76712d22-b3a8-490e-a964-b1f51641d472","savedPayload":{"position":{"x":11397.822004667567,"y":16105.843272608847},"targetPosition":{"x":11476.092949199243,"y":16316.790325781247},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"61487dfb-c30e-41b5-b3bb-a52bbe476c22","savedPayload":{"position":{"x":11476.092949199243,"y":16316.790325781247},"targetPosition":{"x":11554.363893730919,"y":16527.737378953647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 22 End","project":"Superalgos","id":"bd3f3676-7a98-43ca-b661-395e53cc2d9c","savedPayload":{"position":{"x":11562.776912443092,"y":16302.894720376256},"targetPosition":{"x":11554.363893730919,"y":16527.737378953647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 22 End","id":"adc1fb05-93dd-4a32-98dd-30577e4a68de"}}},{"type":"Polygon Vertex","name":"EMA 22 Begin","project":"Superalgos","id":"6a2c8c60-7c69-4372-bc67-b5bac89eb8a5","savedPayload":{"position":{"x":11648.180069852217,"y":16323.2293715359},"targetPosition":{"x":11554.363893730919,"y":16527.737378953647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 22 Begin","id":"8ac0329a-2d0d-483f-a047-305198817a24"}}}],"id":"c9043797-16f8-4dc7-85c0-bd9d995dcec1","savedPayload":{"position":{"x":11554.363893730919,"y":16527.737378953647},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"9ee24b06-2b0b-472a-9272-23f52d3ddc05","savedPayload":{"position":{"x":11789.82236283328,"y":16131.536333507844},"targetPosition":{"x":11768.815550931366,"y":16355.553551269599},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"12acb041-6cf9-4cab-bc99-7d3413860838","savedPayload":{"position":{"x":11768.815550931366,"y":16355.553551269599},"targetPosition":{"x":11747.808739029451,"y":16579.570769031354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 33 End","project":"Superalgos","id":"e5ec4acb-cef0-48cc-8eb4-432547dc0541","savedPayload":{"position":{"x":11852.94418039089,"y":16380.644805492817},"targetPosition":{"x":11747.808739029451,"y":16579.570769031354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 33 End","id":"0fe0c9b1-3079-499b-ad49-1b13e1e0af82"}}},{"type":"Polygon Vertex","name":"EMA 33 Begin","project":"Superalgos","id":"46dfb895-487c-4a14-a8f4-e39f77a98f34","savedPayload":{"position":{"x":11921.066891958286,"y":16436.02073439643},"targetPosition":{"x":11747.808739029451,"y":16579.570769031354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 33 Begin","id":"25fd3a99-95c4-4514-b7f3-d195c9ee3189"}}}],"id":"d6e73bfe-e6af-4fff-b482-df4889701cf7","savedPayload":{"position":{"x":11747.808739029451,"y":16579.570769031354},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"cb42e26b-ace9-47f5-a272-15645af64e39","savedPayload":{"position":{"x":12131.85468041495,"y":16324.767562635318},"targetPosition":{"x":12015.730768808262,"y":16517.485587617834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"cd8235f2-8641-4f92-9029-d30375e43f1f","savedPayload":{"position":{"x":12015.730768808262,"y":16517.485587617834},"targetPosition":{"x":11899.606857201574,"y":16710.20361260035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 55 End","project":"Superalgos","id":"fff3b40f-45a5-424f-bbe3-b62c4811423d","savedPayload":{"position":{"x":12080.641357649074,"y":16576.594070846313},"targetPosition":{"x":11899.606857201574,"y":16710.20361260035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 55 End","id":"1eeef11e-809a-4e49-8b3b-48a955f42ce3"}}},{"type":"Polygon Vertex","name":"EMA 55 Begin","project":"Superalgos","id":"e644af79-d267-4c8b-bebd-2d919eb5efd9","savedPayload":{"position":{"x":12117.991084878588,"y":16656.043395633333},"targetPosition":{"x":11899.606857201574,"y":16710.20361260035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 55 Begin","id":"27b05f8b-84e9-4ab2-944d-46b10c2a978c"}}}],"id":"001084ac-f732-465a-aea1-bb8c63770971","savedPayload":{"position":{"x":11899.606857201574,"y":16710.20361260035},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 20","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"5d5e3413-6b2a-49e0-8b7e-14441b448203","savedPayload":{"position":{"x":12356.175262164441,"y":16647.26514523707},"targetPosition":{"x":12167.934015712997,"y":16770.513809061093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"d1c5bddf-9fc3-47b8-b026-a0fd18fc7efd","savedPayload":{"position":{"x":12167.934015712997,"y":16770.513809061093},"targetPosition":{"x":11979.692769261554,"y":16893.762472885115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 11 End","project":"Superalgos","id":"2aed0f5f-77bd-4297-a131-77c0c08914d5","savedPayload":{"position":{"x":12200.770225739043,"y":16851.93236127346},"targetPosition":{"x":11979.692769261554,"y":16893.762472885115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 11 End","id":"afa38489-5525-4f32-b766-cfe85d683a65"}}},{"type":"Polygon Vertex","name":"EMA 111 Begin","project":"Superalgos","id":"dff4ca7d-4499-4a8a-834b-7315e9e784e4","savedPayload":{"position":{"x":12199.949397088525,"y":16939.719168787793},"targetPosition":{"x":11979.692769261554,"y":16893.762472885115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 111 Begin","id":"cb15539c-b3a0-4641-9417-861c48bd62ac"}}}],"id":"47ab5422-37ad-4070-a2eb-248bbe9b007f","savedPayload":{"position":{"x":11979.692769261554,"y":16893.762472885115},"targetPosition":{"x":11537.537856306573,"y":16977.422696108428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"951aba38-5a6a-43df-8f70-f311d621c98d","savedPayload":{"position":{"x":11537.537856306573,"y":16977.422696108428},"targetPosition":{"x":11423.06928601044,"y":17619.08931793851},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"EMA 11","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"EMA 11","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema11","project":"Superalgos","id":"ee21f97e-daa4-45b8-bebd-5c53d872534b","savedPayload":{"position":{"x":11915.970192988587,"y":17060.287436727333},"targetPosition":{"x":11915.970192988587,"y":17285.287436727333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"f1df9f6b-60b7-489c-b776-aefb39c54d85","savedPayload":{"position":{"x":12028.470192988587,"y":17090.431720875833},"targetPosition":{"x":11915.970192988587,"y":17285.287436727333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a96b4bae-0ce3-4dc6-88df-af120452af6b","savedPayload":{"position":{"x":11915.970192988587,"y":17285.287436727333},"targetPosition":{"x":11857.73590784052,"y":17502.620747642373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 22","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema22","project":"Superalgos","id":"583909a2-6932-4bfa-952d-a0c81123cc3f","savedPayload":{"position":{"x":12129.334933607493,"y":17148.6660060239},"targetPosition":{"x":12016.834933607493,"y":17343.5217218754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"e7ecb64a-a5b0-4f04-ab8b-f1c1b5491922","savedPayload":{"position":{"x":12211.690649458993,"y":17231.0217218754},"targetPosition":{"x":12016.834933607493,"y":17343.5217218754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2a2f4d65-a013-4c73-b851-1c9ac3dceb9f","savedPayload":{"position":{"x":12016.834933607493,"y":17343.5217218754},"targetPosition":{"x":11857.73590784052,"y":17502.620747642373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 33","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema33","project":"Superalgos","id":"067efa03-229a-49e1-9dff-579ead9e6603","savedPayload":{"position":{"x":12269.924934607061,"y":17331.886462494305},"targetPosition":{"x":12075.069218755561,"y":17444.386462494305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"56dacb40-906f-4ba4-a1de-752818c286c6","savedPayload":{"position":{"x":12300.069218755561,"y":17444.386462494305},"targetPosition":{"x":12075.069218755561,"y":17444.386462494305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a51bde01-b164-49bd-99fc-d048468e4cc0","savedPayload":{"position":{"x":12075.069218755561,"y":17444.386462494305},"targetPosition":{"x":11857.73590784052,"y":17502.620747642373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 55","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema55","project":"Superalgos","id":"4663f0f2-cf79-4a80-b4c0-33c41bca9d88","savedPayload":{"position":{"x":12300.069218755561,"y":17560.85503279044},"targetPosition":{"x":12075.069218755561,"y":17560.85503279044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"545bd2c7-f8db-4e89-ac74-5c8d5e63a9ec","savedPayload":{"position":{"x":12269.924934607061,"y":17673.35503279044},"targetPosition":{"x":12075.069218755561,"y":17560.85503279044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"782092b0-9e6c-4de0-aec6-0d6b47fac8b4","savedPayload":{"position":{"x":12075.069218755561,"y":17560.85503279044},"targetPosition":{"x":11857.73590784052,"y":17502.620747642373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 111","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema111","project":"Superalgos","id":"8064c04e-1499-4c01-b056-aac2a1aecc01","savedPayload":{"position":{"x":12211.690649458993,"y":17774.219773409346},"targetPosition":{"x":12016.834933607493,"y":17661.719773409346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"3e70225b-a8b1-4d04-959e-129f26e3ea3e","savedPayload":{"position":{"x":12129.334933607493,"y":17856.575489260846},"targetPosition":{"x":12016.834933607493,"y":17661.719773409346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2c4a358f-23b6-433c-98de-623caad85051","savedPayload":{"position":{"x":12016.834933607493,"y":17661.719773409346},"targetPosition":{"x":11857.73590784052,"y":17502.620747642373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"efc451e7-a5c0-4377-877c-a6b1a60a6604","savedPayload":{"position":{"x":11857.73590784052,"y":17502.620747642373},"targetPosition":{"x":11423.06928601044,"y":17619.08931793851},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cef26be6-07a9-415a-8439-99d06b1e1cfb","savedPayload":{"position":{"x":11423.06928601044,"y":17619.08931793851},"targetPosition":{"x":11104.871234476494,"y":17937.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"EMA Base 7","config":"{\n\t\"codeName\": \"EMA-Base7\",\n \"icon\": \"moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"EMA 7 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema7","project":"Superalgos","id":"d41ccc81-8740-46e9-9ed3-9ffc1df75ee0","savedPayload":{"position":{"x":11657.445555200324,"y":17730.271782174135},"targetPosition":{"x":11591.567517244961,"y":17639.077845340857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2bb8ca1-5fcc-4286-aba3-1d307d4f7168","savedPayload":{"position":{"x":11591.567517244961,"y":17639.077845340857},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 7 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema7","project":"Superalgos","id":"91431058-cccd-40c3-bb98-dd9484a0807d","savedPayload":{"position":{"x":11537.923414508397,"y":17772.55106416025},"targetPosition":{"x":11531.806446898998,"y":17660.217486333913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ea750de-2b74-41ea-9897-637291621ae9","savedPayload":{"position":{"x":11531.806446898998,"y":17660.217486333913},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 14 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema14","project":"Superalgos","id":"753c8686-38ea-4fc2-9343-3598039aa890","savedPayload":{"position":{"x":11414.517085825355,"y":17743.50011164891},"targetPosition":{"x":11470.103282557477,"y":17645.692010078244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77265bb0-8ba2-4c0b-a788-970cd44ddcc9","savedPayload":{"position":{"x":11470.103282557477,"y":17645.692010078244},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 14 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema14","project":"Superalgos","id":"c64e3670-c41d-44d0-bc7a-05c8f0a841b6","savedPayload":{"position":{"x":11326.407206560616,"y":17652.34239679824},"targetPosition":{"x":11426.048342925107,"y":17600.11315265291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cd04ee65-bd26-4fbc-abed-76c6fc5c964b","savedPayload":{"position":{"x":11426.048342925107,"y":17600.11315265291},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 21 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema21","project":"Superalgos","id":"be27efec-c4ed-43ec-925a-f7d862f999c1","savedPayload":{"position":{"x":11301.568040826074,"y":17528.019849983695},"targetPosition":{"x":11413.628760057836,"y":17537.951879245637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2f13bba0-f9c2-435f-ad66-8ad73082c502","savedPayload":{"position":{"x":11413.628760057836,"y":17537.951879245637},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 21 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema21","project":"Superalgos","id":"e6af4547-c256-4f33-95fc-9d9f3cd5d111","savedPayload":{"position":{"x":11347.885848237289,"y":17410.004001397752},"targetPosition":{"x":11436.787663763444,"y":17478.943954952665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a5e04840-b217-44cb-9f8f-2629bf4d1f6e","savedPayload":{"position":{"x":11436.787663763444,"y":17478.943954952665},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 28 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema28","project":"Superalgos","id":"a42e77a3-9107-4c33-853d-4ed8966f339d","savedPayload":{"position":{"x":11450.655052207188,"y":17335.76404910631},"targetPosition":{"x":11488.172265748393,"y":17441.823978806944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0d436286-6b79-4dca-a2f3-b7bd3b9a5671","savedPayload":{"position":{"x":11488.172265748393,"y":17441.823978806944},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 28 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema28","project":"Superalgos","id":"0e7f0922-d9b4-4ea3-9f5f-57ad9d4c9328","savedPayload":{"position":{"x":11577.247156607827,"y":17328.870653407463},"targetPosition":{"x":11551.468317948713,"y":17438.37728095752},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f50599e9-c04f-4b07-aca0-f276dd08ea94","savedPayload":{"position":{"x":11551.468317948713,"y":17438.37728095752},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 35 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.ema35","project":"Superalgos","id":"db011cc5-705a-444a-9f7a-159466b19247","savedPayload":{"position":{"x":11687.470062749067,"y":17391.512418729184},"targetPosition":{"x":11606.579771019333,"y":17469.69816361838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d7ac980a-16ab-4077-b3f1-05cf1f4c3a39","savedPayload":{"position":{"x":11606.579771019333,"y":17469.69816361838},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"EMA 35 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.ema35","project":"Superalgos","id":"6b3dc821-e0e9-4c09-965b-c8600bd3e9d5","savedPayload":{"position":{"x":11746.328776728904,"y":17503.801027187397},"targetPosition":{"x":11636.009128009251,"y":17525.842467847488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8992ec1b-4e8c-4f47-a08e-b6e18a0d9c31","savedPayload":{"position":{"x":11636.009128009251,"y":17525.842467847488},"targetPosition":{"x":11525.689479289598,"y":17547.883908507578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a4d5b2f-63dc-403c-a545-6025652d9e81","savedPayload":{"position":{"x":11511.09860169615,"y":17353.182178025138},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"SMA 7","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"496c35a4-5cf7-4def-97bc-ce71a6fc45f7","savedPayload":{"position":{"x":12127.777419546734,"y":16976.27771794892},"targetPosition":{"x":12195.25919865069,"y":17130.94759862698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"671a56e0-b5eb-4833-aa19-3dca720b5b0e","savedPayload":{"position":{"x":12195.25919865069,"y":17130.94759862698},"targetPosition":{"x":12262.740977754647,"y":17285.617479305038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 7 End","project":"Superalgos","id":"b0be4203-a40d-4ee7-83e0-d1ac87f0bd31","savedPayload":{"position":{"x":12324.392275616476,"y":17128.53253422133},"targetPosition":{"x":12262.740977754647,"y":17285.617479305038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 7 End","id":"8ea750de-2b74-41ea-9897-637291621ae9"}}},{"type":"Polygon Vertex","name":"EMA 7 Begin","project":"Superalgos","id":"afe09e1e-c8fd-4fc7-8f09-324ee7d7d012","savedPayload":{"position":{"x":12417.410858432706,"y":17218.13570020108},"targetPosition":{"x":12262.740977754647,"y":17285.617479305038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 7 Begin","id":"d2bb8ca1-5fcc-4286-aba3-1d307d4f7168"}}}],"id":"45946a01-a9fb-4ea8-bb82-ef6088fad08e","savedPayload":{"position":{"x":12262.740977754647,"y":17285.617479305038},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 14","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"9c0f7800-bf53-4a63-94ba-fccbec15d0ea","savedPayload":{"position":{"x":12597.929785046477,"y":16910.086053784835},"targetPosition":{"x":12527.567652955504,"y":17063.467059348146},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"651877b1-61a2-48a2-8fc4-86e809f89d42","savedPayload":{"position":{"x":12527.567652955504,"y":17063.467059348146},"targetPosition":{"x":12386.843388773555,"y":17370.22907047477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 14 End","project":"Superalgos","id":"72f9e17d-9c36-408d-9a2e-13da010f4d97","savedPayload":{"position":{"x":12634.248395516122,"y":17140.670771477082},"targetPosition":{"x":12386.843388773555,"y":17370.22907047477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 14 End","id":"cd04ee65-bd26-4fbc-abed-76c6fc5c964b"}}},{"type":"Polygon Vertex","name":"EMA 14 Begin","project":"Superalgos","id":"5a24fd6f-de93-4fcd-94f7-1f7fe268e8be","savedPayload":{"position":{"x":12703.263968532156,"y":17252.822653677253},"targetPosition":{"x":12386.843388773555,"y":17370.22907047477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 14 Begin","id":"77265bb0-8ba2-4c0b-a788-970cd44ddcc9"}}}],"id":"b1689975-de58-4f84-a802-c6f13e885dc6","savedPayload":{"position":{"x":12386.843388773555,"y":17370.22907047477},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 21","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"14146df5-5a4a-46b7-9db5-4957b8445915","savedPayload":{"position":{"x":12619.647366025969,"y":17201.918552800966},"targetPosition":{"x":12540.79578500489,"y":17351.11302545487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2552b9ce-3620-4245-9803-d55ad53969da","savedPayload":{"position":{"x":12540.79578500489,"y":17351.11302545487},"targetPosition":{"x":12461.94420398381,"y":17500.307498108774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 21 Begin","project":"Superalgos","id":"803ffc35-a2e2-426d-a8d2-7c770e5d0a6a","savedPayload":{"position":{"x":12623.197114960221,"y":17450.567562426935},"targetPosition":{"x":12461.94420398381,"y":17500.307498108774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 21 Begin","id":"2f13bba0-f9c2-435f-ad66-8ad73082c502"}}},{"type":"Polygon Vertex","name":"EMA 21 End","project":"Superalgos","id":"a0449481-80c2-4160-adb3-49d4327bf921","savedPayload":{"position":{"x":12611.138676637713,"y":17579.15907912985},"targetPosition":{"x":12461.94420398381,"y":17500.307498108774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 21 End","id":"a5e04840-b217-44cb-9f8f-2629bf4d1f6e"}}}],"id":"15f599b3-7620-4a0c-b9e0-29830383cd36","savedPayload":{"position":{"x":12461.94420398381,"y":17500.307498108774},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 28","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"e4a06d7f-ecad-400a-acca-f3c340642354","savedPayload":{"position":{"x":12964.53329815525,"y":17528.22864613112},"targetPosition":{"x":12800.74512739749,"y":17568.848808856383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"65f345ac-2766-411d-af4f-9390e525667c","savedPayload":{"position":{"x":12800.74512739749,"y":17568.848808856383},"targetPosition":{"x":12473.16878588197,"y":17650.089134306912},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 28 Begin","project":"Superalgos","id":"ca1f7537-47e7-4c48-a056-fedd8820a1de","savedPayload":{"position":{"x":12806.89918973295,"y":17700.39089914137},"targetPosition":{"x":12473.16878588197,"y":17650.089134306912},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 28 Begin","id":"0d436286-6b79-4dca-a2f3-b7bd3b9a5671"}}},{"type":"Polygon Vertex","name":"EMA 28 End","project":"Superalgos","id":"80c45995-463a-442a-a6d8-92cc9971a8b9","savedPayload":{"position":{"x":12762.245823355745,"y":17824.275001716946},"targetPosition":{"x":12473.16878588197,"y":17650.089134306912},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 28 End","id":"f50599e9-c04f-4b07-aca0-f276dd08ea94"}}}],"id":"e3c75e9c-a5ec-4755-9a86-909db1b690ca","savedPayload":{"position":{"x":12473.16878588197,"y":17650.089134306912},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"SMA 35","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"9d05ca49-9de9-4c97-b4da-891614ed84a5","savedPayload":{"position":{"x":12749.91015307887,"y":17727.162721651446},"targetPosition":{"x":12584.102060720754,"y":17758.535305360187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"56422e5e-ccaa-4c0c-b5a1-79e62ebc1e74","savedPayload":{"position":{"x":12584.102060720754,"y":17758.535305360187},"targetPosition":{"x":12418.293968362637,"y":17789.907889068927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"EMA 35 Begin","project":"Superalgos","id":"155db5be-8214-4154-a918-ab9469587cc7","savedPayload":{"position":{"x":12557.72176152846,"y":17884.968148867163},"targetPosition":{"x":12418.293968362637,"y":17789.907889068927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 35 Begin","id":"d7ac980a-16ab-4077-b3f1-05cf1f4c3a39"}}},{"type":"Polygon Vertex","name":"EMA 35 End","project":"Superalgos","id":"ee71f62a-adc7-4411-aeb1-54ca5712ce34","savedPayload":{"position":{"x":12449.66655207138,"y":17955.715981427045},"targetPosition":{"x":12418.293968362637,"y":17789.907889068927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"EMA 35 End","id":"8992ec1b-4e8c-4f47-a08e-b6e18a0d9c31"}}}],"id":"3511cc8f-eb39-4dd0-8043-9f06a8faa698","savedPayload":{"position":{"x":12418.293968362637,"y":17789.907889068927},"targetPosition":{"x":12139.438382030989,"y":17599.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"8e7cd7e8-5c59-4cc2-8d9e-ea86d7554205","savedPayload":{"position":{"x":12139.438382030989,"y":17599.787369472455},"targetPosition":{"x":11554.871234476494,"y":17937.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"EMA Base 7","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"EMA 7","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema7","project":"Superalgos","id":"9d9efe26-4895-475c-ac3c-149f0331c6f7","savedPayload":{"position":{"x":12298.537407797961,"y":17890.688343705482},"targetPosition":{"x":12139.438382030989,"y":18049.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"06c8429b-e260-4d36-a859-5ae92112772c","savedPayload":{"position":{"x":12356.77169294603,"y":17991.553084324387},"targetPosition":{"x":12139.438382030989,"y":18049.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aeaebf9b-54bf-41f3-a833-b0e4fcc55c00","savedPayload":{"position":{"x":12139.438382030989,"y":18049.787369472455},"targetPosition":{"x":11944.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 14","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema14","project":"Superalgos","id":"7c922a65-b8a6-4ebf-a964-af3851b30367","savedPayload":{"position":{"x":12386.915977094532,"y":18104.053084324387},"targetPosition":{"x":12169.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"3ccf0c41-3b69-434a-8b0d-d7683301d56a","savedPayload":{"position":{"x":12386.915977094532,"y":18220.521654620523},"targetPosition":{"x":12169.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f749c1c5-25f9-4c3f-af87-c8df30a177e0","savedPayload":{"position":{"x":12169.58266617949,"y":18162.287369472455},"targetPosition":{"x":11944.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 21","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema21","project":"Superalgos","id":"f5a9c1c1-9331-4492-a263-1f69ff44711a","savedPayload":{"position":{"x":12356.771692946031,"y":18333.021654620523},"targetPosition":{"x":12139.43838203099,"y":18274.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"4c6d3920-5b9d-476f-96a7-ae94cbde7ba9","savedPayload":{"position":{"x":12298.537407797963,"y":18433.886395239428},"targetPosition":{"x":12139.43838203099,"y":18274.787369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"92f7a1a7-bd42-403f-9d0e-2eb907e8abea","savedPayload":{"position":{"x":12139.43838203099,"y":18274.787369472455},"targetPosition":{"x":11944.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 28","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema28","project":"Superalgos","id":"0fcdb422-d014-4dc8-927a-5484c5d7c34b","savedPayload":{"position":{"x":12216.181691946464,"y":18516.242111090927},"targetPosition":{"x":12057.08266617949,"y":18357.143085323954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"0097353e-f325-476a-a480-d8fd7126a442","savedPayload":{"position":{"x":12115.316951327559,"y":18574.476396238995},"targetPosition":{"x":12057.08266617949,"y":18357.143085323954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4c51ef79-f3dd-4f24-ad22-4e38f42f3ff2","savedPayload":{"position":{"x":12057.08266617949,"y":18357.143085323954},"targetPosition":{"x":11944.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"EMA 35","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ema35","project":"Superalgos","id":"c23e6dd3-f9d5-498f-a01c-c951b11cbdf6","savedPayload":{"position":{"x":12002.816951327559,"y":18604.620680387496},"targetPosition":{"x":11944.58266617949,"y":18387.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"be76e3d7-0601-486a-ba56-27929fc5ce77","savedPayload":{"position":{"x":11886.348381031425,"y":18604.620680387496},"targetPosition":{"x":11944.58266617949,"y":18387.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8cdd88af-871c-4f1b-966b-cf9d00483caa","savedPayload":{"position":{"x":11944.58266617949,"y":18387.287369472455},"targetPosition":{"x":11944.58266617949,"y":18162.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"481ef93a-bef5-4fe3-b87b-f8032a63c69f","savedPayload":{"position":{"x":11944.58266617949,"y":18162.287369472455},"targetPosition":{"x":11554.871234476494,"y":17937.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a52a9764-3ef2-44e6-82bd-e6538058119d","savedPayload":{"position":{"x":11554.871234476494,"y":17937.287369472455},"targetPosition":{"x":11104.871234476494,"y":17937.287369472455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6cb2807d-22bb-4f90-b4d8-c84cf84a0d5c","savedPayload":{"position":{"x":11104.871234476494,"y":17937.287369472455},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"a"}}}],"id":"9cfffc48-486a-48cb-b641-98c82e314d3a","savedPayload":{"position":{"x":10786.673182942548,"y":18255.4854210064},"targetPosition":{"x":10786.673182942548,"y":18255.4854210064},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Zeus.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Zeus.json deleted file mode 100644 index 8cfeeb92c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Data-Mines/Zeus.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Data Mine","name":"Zeus","config":"{ \n\"codeName\": \"Zeus\"\n}","project":"Superalgos","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Super Trend","config":"{ \n\"codeName\": \"Super-Trend\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":" {\n \"codeName\": \"Multi-Period-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Super Trend","project":"Superalgos","id":"2412939e-1585-47f9-8d09-7ea8dd7c8bf0","savedPayload":{"position":{"x":21786.83642206419,"y":17775.938049371594},"targetPosition":{"x":21825.659278829567,"y":17920.826923314955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7c8e7a6f-99c8-4d90-9f44-e3e9e909eb88"}}}],"outputDatasetFolders":[],"id":"74212c63-4a69-407d-80ec-d39ee2d8df74","savedPayload":{"position":{"x":21825.659278829567,"y":17920.826923314955},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Super Trend Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"5a35d0d1-cfed-4893-84ab-344a77c7d252","savedPayload":{"position":{"x":21792.127849125704,"y":17516.13042823626},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"2a42dd15-1e04-4826-bd5f-85d95fbae135","savedPayload":{"position":{"x":22019.77356265646,"y":17486.160301484873},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"88a45f27-a0b8-4234-b7aa-f139400305db","savedPayload":{"position":{"x":22201.935470261036,"y":17625.938049371594},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"eef38121-80a2-4471-b909-24acdc4d213a","savedPayload":{"position":{"x":21942.127849125704,"y":17775.938049371594},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764","savedPayload":{"position":{"x":22076.61416995091,"y":17853.58376290235},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"d9b0ffbd-c1bd-4e43-a00d-04a6b6fb470b","savedPayload":{"position":{"x":22154.259883481667,"y":17988.070083727558},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"d405bfe9-74f9-4419-8288-94229c9813a6","savedPayload":{"position":{"x":22154.259883481667,"y":18143.361510789073},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fc3dbb85-168e-4fac-8893-b285de35a694","savedPayload":{"position":{"x":21864.482135594946,"y":18065.715797258315},"targetPosition":{"x":21652.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":" {\n \"codeName\": \"Multi-Period-Daily\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Super Trend","project":"Superalgos","id":"f5a69b9b-0423-42be-bb58-b5a51f762ee7","savedPayload":{"position":{"x":22237.350101238982,"y":18504.463073884945},"targetPosition":{"x":21937.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"c17b5d3f-7cf7-418a-92b8-f8c67a120446"}}}],"outputDatasetFolders":[],"id":"04c16ec8-b60b-4cf0-acf4-69d955a5d2aa","savedPayload":{"position":{"x":21937.350101238982,"y":18504.463073884945},"targetPosition":{"x":21637.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Super Trend Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"935a9195-83ac-41bc-835e-f118f5a79049","savedPayload":{"position":{"x":22196.746582800686,"y":18670.163860757828},"targetPosition":{"x":21897.157722374315,"y":18654.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"89d59eb6-bd97-485d-ac94-a095aaf4e58d"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"a3f5a224-75c0-4054-84ac-c4a98f823085","savedPayload":{"position":{"x":22177.231850323475,"y":18761.973458748536},"targetPosition":{"x":21897.157722374315,"y":18654.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"d39acabb-3797-410a-9d86-0edda4a41b70","savedPayload":{"position":{"x":22130.301510811405,"y":18843.259191199897},"targetPosition":{"x":21897.157722374315,"y":18654.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"0fbf825f-68af-415d-b01e-1e30528a4b49","savedPayload":{"position":{"x":22060.549432878823,"y":18906.06424426857},"targetPosition":{"x":21897.157722374315,"y":18654.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"98d9f621-8b18-4b4f-b191-b79d930dc4ec","savedPayload":{"position":{"x":21897.157722374315,"y":18654.463073884945},"targetPosition":{"x":21637.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"89d59eb6-bd97-485d-ac94-a095aaf4e58d","savedPayload":{"position":{"x":21712.350101238982,"y":18634.36688445261},"targetPosition":{"x":21637.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"3f1b6db1-7e06-499c-9879-194596e2978e","savedPayload":{"position":{"x":21637.350101238982,"y":18654.463073884945},"targetPosition":{"x":21637.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"f884fccf-e2dc-45db-a1df-36b6826b020c","savedPayload":{"position":{"x":21562.350101238982,"y":18634.36688445261},"targetPosition":{"x":21637.350101238982,"y":18504.463073884945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c2ade18e-8e3c-4448-a743-947c8163b80d","savedPayload":{"position":{"x":21952.350101238982,"y":18277.84783161428},"targetPosition":{"x":21652.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Super Trend","config":"{\n \"codeName\": \"Super-Trend\",\n \"singularVariableName\": \"superTrend\",\n \"pluralVariableName\": \"superTrends\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"7c8e7a6f-99c8-4d90-9f44-e3e9e909eb88","savedPayload":{"position":{"x":22415.00790604074,"y":18525.650373880122},"targetPosition":{"x":21970.548152772928,"y":18596.045883148225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"c17b5d3f-7cf7-418a-92b8-f8c67a120446","savedPayload":{"position":{"x":22371.501088657693,"y":18800.34160803102},"targetPosition":{"x":21970.548152772928,"y":18596.045883148225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.begin","project":"Superalgos","id":"af4ce0b3-14a3-4e8d-8f27-353aa5d819e5","savedPayload":{"position":{"x":23052.05880280838,"y":19344.991865301457},"targetPosition":{"x":22827.752402718426,"y":19362.645161840224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eece0283-d534-4ce5-8606-4fa5cec4fe90","savedPayload":{"position":{"x":22827.752402718426,"y":19362.645161840224},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{ \n\"codeName\": \"end\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.end","project":"Superalgos","id":"47190c61-ec22-49ff-8a4c-e08e5cddc2c0","savedPayload":{"position":{"x":23021.102751037746,"y":19606.538226120843},"targetPosition":{"x":22807.115034871338,"y":19537.00940238648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"aab131cd-6b2a-4708-84bf-11e65bd4f995","savedPayload":{"position":{"x":22807.115034871338,"y":19537.00940238648},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"True Range","config":"{ \n \"codeName\": \"trueRange\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trueRange","project":"Superalgos","id":"5e5bd969-819b-4131-aad4-d855c57b236d","savedPayload":{"position":{"x":22892.413629318537,"y":19836.32918754063},"targetPosition":{"x":22721.32228705853,"y":19690.203376666337},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"79e64cdc-8d3d-4c17-8bb6-69c52b09d0a5","savedPayload":{"position":{"x":22721.32228705853,"y":19690.203376666337},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ATR N Period","config":"{ \n \"codeName\": \"atrNPeriod\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.atrNPeriod","project":"Superalgos","id":"139dd901-2800-4a78-b536-a26d71f8180f","savedPayload":{"position":{"x":22685.58318986271,"y":19999.3811587449},"targetPosition":{"x":22583.435327421314,"y":19798.90469080252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5bf3d6da-c010-4297-90f2-db405eb25ab9","savedPayload":{"position":{"x":22583.435327421314,"y":19798.90469080252},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Up Trend","config":"{ \n \"codeName\": \"uptrend\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.uptrend","project":"Superalgos","id":"1227cf03-417e-42af-8be8-0ac79c0372e6","savedPayload":{"position":{"x":22432.099492154815,"y":20070.870955187616},"targetPosition":{"x":22414.44619561605,"y":19846.564555097662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"58b49e52-ac7e-4458-8dc0-c16a63c11c73","savedPayload":{"position":{"x":22414.44619561605,"y":19846.564555097662},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Down Trend","config":"{ \n \"codeName\": \"downtrend\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.downtrend","project":"Superalgos","id":"4b55c31f-ca51-4dcd-beaf-a03463e5d541","savedPayload":{"position":{"x":22170.55313133543,"y":20039.914903416982},"targetPosition":{"x":22240.081955069792,"y":19825.927187250574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9c7651af-9740-4086-9c1b-c859d25cae26","savedPayload":{"position":{"x":22240.081955069792,"y":19825.927187250574},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Trend","config":"{ \n \"codeName\": \"trend\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.trend","project":"Superalgos","id":"eb1e09d6-6794-4d4e-a8a9-227fdbb1698c","savedPayload":{"position":{"x":21940.762169915644,"y":19911.225781697776},"targetPosition":{"x":22086.887980789936,"y":19740.13443943777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"880b51d4-9bda-4f26-b722-7cd84f9cc494","savedPayload":{"position":{"x":22086.887980789936,"y":19740.13443943777},"targetPosition":{"x":22379.13960253852,"y":19397.951754917754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"93965329-75b8-4e62-99ab-252a4aed8d86","savedPayload":{"position":{"x":22379.13960253852,"y":19397.951754917754},"targetPosition":{"x":21970.548152772928,"y":18596.045883148225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Loop Code */\n\n/* Big thanks to @rico4dev for providing the base start for ATR calcs\nI made some tweaks so now the way ATR is calculated matches TradingView :-)\n */\n\n// Set parameters to be used for ATR Period and Multiplier\nlet Nperiod = 10 // ATR Period\nlet multiplier = 3 // ATR Multiplier\n\n// Get Current and Previous Candle Data\nlet currCandle = record.current \nlet prevCandle = record.previous \n\n/* We need to build the price source\nFor current price there is no problem, we have data\nFor previous price we must check if exist\nSource price is defined as OHCL4*/\n\n// OHCL4 Source for current price\nvariable.currClose = currCandle.close\nvariable.ohcl4 = (currCandle.max + currCandle.min + currCandle.close + currCandle.open)/4\n\n// OHCL4 Source for previous candle price - make sure data exists\nif (prevCandle === undefined) {\n variable.prevClose = currCandle.close\n variable.prev_ohcl4 = 0 \n} else {\n variable.prevClose = prevCandle.close\n variable.prev_ohcl4 = (prevCandle.max + prevCandle.min + prevCandle.close + prevCandle.open)/4\n}\n\n/* Define variables we need and build functions */\n/* True Range and ATR - Average True Range */\n\nvariable.trueRange = calculateTR()\nvariable.atrNPeriod = calculateATR(Nperiod)\nvariable.prevAtrNperiod = variable.atrNPeriod // Store ATR value for calcs in RMA\n\n/* To keep lastNperiodTR array to a fixed length\nwe remove the first element of the array if length is > Nperiod */\n\nvariable.lastNPeriodTR.push(calculateTR())\nif (variable.lastNPeriodTR.length > Nperiod) {\n variable.lastNPeriodTR.splice(0, 1)\n}\n\n/* Calculate ATR */\nfunction calculateATR(length) {\n return calculateRMA(variable.trueRange, length)\n}\n\n/* Calculate True Range */\nfunction calculateTR() {\n let hl = currCandle.max - currCandle.min \n if (variable.prevClose === 0) { return hl } // Return High-Low when previous Close is 0 \n let hcp = Math.abs(currCandle.max - variable.prevClose)\n let lcp = Math.abs(currCandle.min - variable.prevClose) \n return Math.max(hl, hcp, lcp)\n}\n\n/* Calculate RMA */\nfunction calculateRMA(src, length) { \n if (src.length < length) { return 0 } // We check we have enough values to make the calcs. If not, set value to zero \n let alpha=1/length // It's a constant\n if (isNaN(variable.prevAtrNperiod)) {\n return 0 \n } else {\n return alpha * src + (1 - alpha) * variable.prevAtrNperiod \n } \n \n}\n\n// Build Up Trend function\n\nvariable.up = variable.ohcl4 - (multiplier * variable.atrNPeriod)\n\nif (variable.last2uptrend.length > 2) {\n variable.last2uptrend.splice(0, 1)\n}\n\nvariable.up1 = variable.last2uptrend[variable.last2uptrend.length - 1] // Previous Up Trend \n\nvariable.uptrend = calculateUpTrend()\n\nvariable.last2uptrend.push(variable.uptrend) \n\nfunction calculateUpTrend() {\n if (variable.prevClose > variable.up1) {\n return Math.max(variable.up, variable.up1)\n } else {\n return variable.up\n }\n}\n\n// Build Down Trend function\n\nvariable.dn = variable.ohcl4 + (multiplier * variable.atrNPeriod)\n\nif (variable.last2downtrend.length > 2) {\n variable.last2downtrend.splice(0, 1)\n}\n\nvariable.dn1 = variable.last2downtrend[variable.last2downtrend.length - 1] // Previous Down Trend\n\nvariable.downtrend = calculateDnTrend()\n\nvariable.last2downtrend.push(variable.downtrend) \n\nfunction calculateDnTrend() {\n if (variable.prevClose < variable.dn1) {\n return Math.min(variable.dn, variable.dn1)\n } else {\n return variable.dn\n }\n}\n\n\n// Build Trend function\n\nif (variable.last2Trend.length > 2) {\n variable.last2Trend.splice(0, 1)\n}\n\nvariable.prevTrend = variable.last2Trend[variable.last2Trend.length - 1]\n\nvariable.trend = calculateTrend()\n\nvariable.last2Trend.push(variable.trend)\n\nfunction calculateTrend() {\n\n if (variable.trend = -1 && variable.currClose > variable.dn1) {\n return 1\n }\n else if (variable.trend = 1 && variable.currClose < variable.up1) {\n return -1\n } \n else {\n return variable.prevTrend\n }\n}\n\n// End of code :-)","project":"Superalgos","id":"8f978d1c-9ed3-4dc6-9393-85f1a9497a8f","savedPayload":{"position":{"x":21935.430999857657,"y":19376.156776102827},"targetPosition":{"x":21923.671547740047,"y":19264.273062873897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ab4157e5-9690-48a8-9826-c70b3802e617","savedPayload":{"position":{"x":21923.671547740047,"y":19264.273062873897},"targetPosition":{"x":21900.152643504825,"y":19040.505636416037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Initialization Code*/\n\n//// Arrays to store past data\nvariable.lastNPeriodTR = []\nvariable.last2uptrend = [0]\nvariable.last2downtrend = [0]\nvariable.last2Trend = [0]\n\n// Initialize trend\nvariable.trend = 1","project":"Superalgos","id":"179290ba-51ab-4754-be1c-90355b7a74c2","savedPayload":{"position":{"x":21762.87902646674,"y":19348.827228370414},"targetPosition":{"x":21808.63689881277,"y":19246.05336438562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"17591e91-1610-4ccd-ab12-167be170d523","savedPayload":{"position":{"x":21808.63689881277,"y":19246.05336438562},"targetPosition":{"x":21900.152643504825,"y":19040.505636416037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"eee493c1-3895-4351-91ea-b53baf429bbb","savedPayload":{"position":{"x":21900.152643504825,"y":19040.505636416037},"targetPosition":{"x":21970.548152772928,"y":18596.045883148225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2bb58403-f839-4e0a-9b04-4f9219d7df83","savedPayload":{"position":{"x":21970.548152772928,"y":18596.045883148225},"targetPosition":{"x":21652.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Super Trend","id":"acfb7d6b-e877-4fb0-bef4-3923c049244b"}}}],"id":"c2aec9e5-4b10-4ebc-89c7-84b3df03c4a4","savedPayload":{"position":{"x":21652.350101238982,"y":18277.84783161428},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Wave Trend","config":"{ \n\"codeName\": \"Wave-Trend\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":" {\n \"codeName\": \"Multi-Period-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Wave Trend","project":"Superalgos","id":"d39fc6ac-79b2-4308-9c65-05e82bf02c8d","savedPayload":{"position":{"x":22236.629266099277,"y":18003.6255261173},"targetPosition":{"x":22141.54015720762,"y":18207.544778200547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9b727bdd-1684-43e1-a39c-fbd14ce64828"}}}],"outputDatasetFolders":[],"id":"ce1d6928-a5ef-4a75-af09-51d8b6e5ec3a","savedPayload":{"position":{"x":22141.54015720762,"y":18207.544778200547},"targetPosition":{"x":22046.45104831596,"y":18411.464030283794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Wave Trend Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"88287fbf-f6b6-4b7d-ab0a-557c10b459d2","savedPayload":{"position":{"x":22250.295678268514,"y":18171.618459890935},"targetPosition":{"x":22230.760258280985,"y":18282.40933210481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"64877b9b-6a54-4b10-b82a-ab1a12ff483b"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"f713c037-7ea9-46f2-9982-318e30de5db1","savedPayload":{"position":{"x":22322.914863263497,"y":18217.881983015315},"targetPosition":{"x":22230.760258280985,"y":18282.40933210481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"d4377097-6d3f-418d-8101-2bed732b55ec","savedPayload":{"position":{"x":22341.55113049486,"y":18301.94475209234},"targetPosition":{"x":22230.760258280985,"y":18282.40933210481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"e2689a2e-356c-4dda-b198-2fa163578c77","savedPayload":{"position":{"x":22230.760258280985,"y":18282.40933210481},"targetPosition":{"x":22046.45104831596,"y":18411.464030283794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"64877b9b-6a54-4b10-b82a-ab1a12ff483b","savedPayload":{"position":{"x":22494.738662457246,"y":18372.243946047347},"targetPosition":{"x":22046.45104831596,"y":18411.464030283794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"dbb205f1-b207-4e15-8523-16a8f5d00c81","savedPayload":{"position":{"x":22250.37030039921,"y":18506.553139175452},"targetPosition":{"x":22046.45104831596,"y":18411.464030283794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"1abb722a-a84a-4dbe-892b-cc35a0776e3a","savedPayload":{"position":{"x":22175.505746494946,"y":18595.77324024882},"targetPosition":{"x":22046.45104831596,"y":18411.464030283794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"26d5d563-1bb6-4766-9601-f43578e09501","savedPayload":{"position":{"x":22046.45104831596,"y":18411.464030283794},"targetPosition":{"x":21598.163434174676,"y":18450.68411452024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":" {\n \"codeName\": \"Multi-Period-Daily\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Wave Trend","project":"Superalgos","id":"b8a695ab-0f23-4002-82b9-400a29d413c2","savedPayload":{"position":{"x":21412.350101238982,"y":19413.78974785861},"targetPosition":{"x":21187.350101238982,"y":19024.07831615561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"3bf983d5-4d3c-46f8-a130-9e621b76e62d"}}}],"outputDatasetFolders":[],"id":"c66980e3-2ed9-4ce8-a3b0-a63d5e91bc17","savedPayload":{"position":{"x":21187.350101238982,"y":19024.07831615561},"targetPosition":{"x":20962.350101238982,"y":18634.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Wave Trend Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"543c4f25-0af0-450b-9ea1-a4a4c6877d4a","savedPayload":{"position":{"x":21166.645826121778,"y":19485.319820337376},"targetPosition":{"x":20962.350101238982,"y":19084.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a79125c3-e49c-4ad0-85df-8ea1e6b72cb2"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"2f7dd1e6-e0e0-4565-a6b9-a49c2ddcd0b4","savedPayload":{"position":{"x":21032.745610507085,"y":19528.826637720424},"targetPosition":{"x":20962.350101238982,"y":19084.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"01b4e456-8585-448d-acd1-d9a730f95eb1","savedPayload":{"position":{"x":20891.95459197088,"y":19528.826637720424},"targetPosition":{"x":20962.350101238982,"y":19084.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"97ed7b3c-ce95-484a-8608-e8826f28d08e","savedPayload":{"position":{"x":20758.054376356187,"y":19485.319820337376},"targetPosition":{"x":20962.350101238982,"y":19084.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"f5fb61fa-828b-4551-8b48-9e9c1fc4fa64","savedPayload":{"position":{"x":20962.350101238982,"y":19084.36688445261},"targetPosition":{"x":20962.350101238982,"y":18634.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"a79125c3-e49c-4ad0-85df-8ea1e6b72cb2","savedPayload":{"position":{"x":20849.850101238982,"y":18829.22260030411},"targetPosition":{"x":20962.350101238982,"y":18634.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"17690387-850d-4e80-8d08-abebcf1ec894","savedPayload":{"position":{"x":20767.494385387483,"y":18746.86688445261},"targetPosition":{"x":20962.350101238982,"y":18634.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"654860da-2fe0-4b1c-a91d-45690a8d11b8","savedPayload":{"position":{"x":20737.350101238982,"y":18634.36688445261},"targetPosition":{"x":20962.350101238982,"y":18634.36688445261},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"56663c74-0c47-441f-8591-d9098f9a610b","savedPayload":{"position":{"x":21942.883433578216,"y":18739.938538879185},"targetPosition":{"x":21598.163434174676,"y":18450.68411452024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Wave Trend","config":"{\n \"codeName\": \"Wave-Trend\",\n \"singularVariableName\": \"waveTrend\",\n \"pluralVariableName\": \"waveTrends\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"9b727bdd-1684-43e1-a39c-fbd14ce64828","savedPayload":{"position":{"x":21881.460347209606,"y":18904.053946420783},"targetPosition":{"x":21624.310156998974,"y":18749.542523947766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"3bf983d5-4d3c-46f8-a130-9e621b76e62d","savedPayload":{"position":{"x":21741.529495545758,"y":19025.693979983498},"targetPosition":{"x":21624.310156998974,"y":18749.542523947766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.begin","project":"Superalgos","id":"7c0c0127-d33a-40cd-95ce-a4c4db782862","savedPayload":{"position":{"x":21928.151745364154,"y":19743.363578856406},"targetPosition":{"x":21708.745634878404,"y":19538.764070837657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1fa9f019-5b1a-4310-acb9-18be189b37a7","savedPayload":{"position":{"x":21708.745634878404,"y":19538.764070837657},"targetPosition":{"x":21489.339524392653,"y":19334.164562818907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{ \n\"codeName\": \"end\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.end","project":"Superalgos","id":"fe518407-7360-4ded-ac8c-743508cf9944","savedPayload":{"position":{"x":21664.7625472263,"y":19907.94741639673},"targetPosition":{"x":21577.051035809476,"y":19621.05598960782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"efbc0585-5a1c-4caf-ad89-2e29b5e98ca0","savedPayload":{"position":{"x":21577.051035809476,"y":19621.05598960782},"targetPosition":{"x":21489.339524392653,"y":19334.164562818907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Record WAVETREND","config":"{ \n \"codeName\": \"waveTrend\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.waveTrend","project":"Superalgos","id":"29c99584-8b16-494a-a1be-0e9d7071641b","savedPayload":{"position":{"x":21388.111549937916,"y":19772.631091972264},"targetPosition":{"x":21421.854208089495,"y":19626.47558225448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"39424ebf-7f21-4372-8b88-15bb7086cca9","savedPayload":{"position":{"x":21421.854208089495,"y":19626.47558225448},"targetPosition":{"x":21489.339524392653,"y":19334.164562818907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Record WAVETRENDSIGNAL","config":"{ \n \"codeName\": \"waveTrendSignal\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.waveTrendSignal","project":"Superalgos","id":"a5e59332-48bb-4252-97aa-ac587609a4e8","savedPayload":{"position":{"x":21182.44026236453,"y":19663.273728547534},"targetPosition":{"x":21284.740016373904,"y":19553.570673304657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d9a10773-5caa-4b8d-8637-ccaa4faef8b2","savedPayload":{"position":{"x":21284.740016373904,"y":19553.570673304657},"targetPosition":{"x":21489.339524392653,"y":19334.164562818907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Record WT3","config":"{ \n \"codeName\": \"wt3\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.wt3","project":"Superalgos","id":"a8cbbddf-28c6-4d38-8eca-841e44f4884a","savedPayload":{"position":{"x":21059.002384209285,"y":19465.73182994414},"targetPosition":{"x":21202.44809760374,"y":19421.87607423573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"33d15bce-9db7-4b43-b795-59353cd2e63d","savedPayload":{"position":{"x":21202.44809760374,"y":19421.87607423573},"targetPosition":{"x":21489.339524392653,"y":19334.164562818907},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a14c05f-d4a6-4cd5-9beb-328ec32e44dd","savedPayload":{"position":{"x":21489.339524392653,"y":19334.164562818907},"targetPosition":{"x":21624.310156998974,"y":18749.542523947766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Loop Code */\n\nlet candle = record.current\n\n/* Set constant */\n\nlet n1=10 // Channel Length\nlet n2=21 // Average Length\n\n// Overbought and Oversold Levels\nlet ob=60\nlet ob2=53\nlet os=-60\nlet os2=-53\n\n/* ************** */\n\nvariable.ap = (candle.max+candle.min+candle.close)/3\n\n/* Build 3 EMAs and CI parameter */\n\nvariable.EMAesa = calculateEMA(variable.ap, n1, variable.previousEMAesa)\nvariable.previousEMAesa = variable.EMAesa\n\nvariable.EMAd = calculateEMA(Math.abs(variable.ap-variable.EMAesa), n1, variable.previousEMAd)\nvariable.previousEMAd = variable.EMAd\n\nvariable.ci = (variable.ap-variable.EMAesa)/(0.015*variable.EMAd)\n\nvariable.EMAtci = calculateEMA(variable.ci, n2, variable.previousEMAtci)\nvariable.previousEMAtci = variable.EMAtci\n\nfunction calculateEMA(src, periods, previousEMA) {\n let k = 2 / (periods + 1)\n return src * k + previousEMA * (1-k)\n}\n\n/* Let's build WAVETREND and WAVETRENDSIGNAL \nFor WAVETRENDSIGNAL we need a SMA - Parameters are SMA(WAVETREND, 4)\n*/\n\nvariable.waveTrend = variable.EMAtci // Wave Trend - It's a line\n\nvariable.last4wt1.push(variable.waveTrend)\nif (variable.last4wt1.length > 4) {\n variable.last4wt1.splice(0, 1) // Remove the first element of the array to keep it at a maximun of 4 elements\n}\n\nvariable.waveTrendSignal = calculateSMA(variable.last4wt1, 4) // Signal - It's a line\n\n//console.log(\"variable.last4wt1.length \" + variable.last4wt1.length)\n//console.log(\"variable.last4wt1 \" + variable.last4wt1)\n\n\nfunction calculateSMA(src, periods) { \n // Check we have enough values to make the calculation\n if (src.length < periods) { return 0 }\n \n let sum = 0 // Initialize sum variable\n for (let i = src.length - periods; i < src.length; i++) {\n sum = sum + src[i]\n }\n let sma = sum / periods\n return sma\n}\n\n/* Build WT3 */\n\nvariable.wt3 = variable.waveTrend - variable.waveTrendSignal // Histogram\n","project":"Superalgos","id":"32d5f441-d68a-4c29-89ee-041138ae67d3","savedPayload":{"position":{"x":21258.099057064454,"y":19153.61962578368},"targetPosition":{"x":21314.01834741153,"y":19070.715868528176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6c129c1b-0def-43a3-826b-7542c834eb24","savedPayload":{"position":{"x":21314.01834741153,"y":19070.715868528176},"targetPosition":{"x":21397.897282932143,"y":18946.360232644918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Initialization Code */\n/* WaveTrend need 3 EMA and 1 SMA\nothers constant and vars are declared in the loop code\nso to use let and not var and avoid possible conflicts */\n \n\nvariable.previousEMAesa = 0\nvariable.previousEMAd = 0\nvariable.previousEMAtci = 0\n\nvariable.last4wt1 = [] // Last 4 waveTrend records\n\n/* HLC3 */\nvariable.ap = 0","project":"Superalgos","id":"5cad68f2-69ba-42a1-95b5-3a6ae2cac0b1","savedPayload":{"position":{"x":21173.19877135735,"y":19055.953019342185},"targetPosition":{"x":21263.078175987266,"y":19012.11590466328},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c689da4f-8f19-47e6-8f82-11e2f42d3ecd","savedPayload":{"position":{"x":21263.078175987266,"y":19012.11590466328},"targetPosition":{"x":21397.897282932143,"y":18946.360232644918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3f88bd6f-cdde-4122-9778-ce7a7588fd7b","savedPayload":{"position":{"x":21397.897282932143,"y":18946.360232644918},"targetPosition":{"x":21624.310156998974,"y":18749.542523947766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ff542733-ddbd-4cbf-b90d-a12c49752916","savedPayload":{"position":{"x":21624.310156998974,"y":18749.542523947766},"targetPosition":{"x":21598.163434174676,"y":18450.68411452024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Wave Trend","id":"cfa6bcb9-8d18-4658-81f4-1f7d55adc742"}}}],"id":"9ce52f75-7caa-4d0e-8faf-09a1e8a8033a","savedPayload":{"position":{"x":21595.055199551465,"y":18454.18340730202},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Donchian Channel","config":"{ \n\"codeName\": \"Donchian-Channel\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Donchian Channel","project":"Superalgos","id":"2000e920-443a-49d2-9003-b16d742547dc","savedPayload":{"position":{"x":22215.55949757523,"y":18372.578515415673},"targetPosition":{"x":21963.9583271916,"y":18535.97022592018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7298225c-3b68-4f34-a935-fc0ab3d8f662"}}}],"outputDatasetFolders":[],"id":"014aaa46-fa23-41a3-9834-b9382f6af876","savedPayload":{"position":{"x":21963.9583271916,"y":18535.97022592018},"targetPosition":{"x":21712.357156807975,"y":18699.361936424688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"22266684-e056-49a8-8885-4a31cebd34d2","savedPayload":{"position":{"x":22212.685199142004,"y":18460.717701908587},"targetPosition":{"x":22011.946017234346,"y":18683.661149551805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Donchian Channel Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"d55aa460-8292-4cba-831a-01425cbea4e7","savedPayload":{"position":{"x":22161.740447447533,"y":18675.810756115363},"targetPosition":{"x":22011.946017234346,"y":18683.661149551805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"8af7a7fd-54f6-496c-b4e3-05a37d838288"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"71b430e7-6a5c-437b-a015-76a8202de236","savedPayload":{"position":{"x":22123.417741055957,"y":18784.030740505634},"targetPosition":{"x":22011.946017234346,"y":18683.661149551805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"9070474a-4a33-4c1b-8ac0-113ca33928c5","savedPayload":{"position":{"x":22011.946017234346,"y":18683.661149551805},"targetPosition":{"x":21712.357156807975,"y":18699.361936424688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"8af7a7fd-54f6-496c-b4e3-05a37d838288","savedPayload":{"position":{"x":21979.659114064485,"y":18835.55908634655},"targetPosition":{"x":21712.357156807975,"y":18699.361936424688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"75ad91f0-37ca-42fb-9c20-c3965f115741","savedPayload":{"position":{"x":21794.05301206023,"y":18825.1625216165},"targetPosition":{"x":21712.357156807975,"y":18699.361936424688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"f4f25b2a-d402-43d9-b1de-248f2987e80f","savedPayload":{"position":{"x":21720.207550244417,"y":18849.156366637875},"targetPosition":{"x":21712.357156807975,"y":18699.361936424688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"18bfecb5-3666-4eaf-8b3a-d44a41aa5752","savedPayload":{"position":{"x":21712.357156807975,"y":18699.361936424688},"targetPosition":{"x":21445.055199551465,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Donchian Channel","project":"Superalgos","id":"a0373c2d-dcd9-4b36-8db8-6c5e377f4e70","savedPayload":{"position":{"x":20782.93072434567,"y":19116.500353393523},"targetPosition":{"x":20805.3497524216,"y":18817.339214239168},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"50ed783e-0e71-4903-8a82-854c8bd2ed6e"}}}],"outputDatasetFolders":[],"id":"a9f3e616-1897-4716-94be-92676ab2c97c","savedPayload":{"position":{"x":20805.3497524216,"y":18817.339214239168},"targetPosition":{"x":20827.76878049753,"y":18518.178075084812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Donchian Channel Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"ab757f0c-c816-42c1-86f0-97c16ef7df9b","savedPayload":{"position":{"x":20620.727575212957,"y":19063.62753531758},"targetPosition":{"x":20658.772763078443,"y":18766.04970737961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"0c9cddc3-dfd4-49f2-b5e9-2d9cb15164e2"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"5675ab54-d0e8-4038-ab6a-56ef2aa08c55","savedPayload":{"position":{"x":20530.633033263286,"y":19037.306430140354},"targetPosition":{"x":20658.772763078443,"y":18766.04970737961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"51eb2e2d-75b5-4aa9-9628-da6fdafee5c0","savedPayload":{"position":{"x":20453.081700869912,"y":18984.432826982586},"targetPosition":{"x":20658.772763078443,"y":18766.04970737961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"c19ecb80-d74c-4a66-8bc9-7c164f2f81bf","savedPayload":{"position":{"x":20395.664842779413,"y":18910.182362513413},"targetPosition":{"x":20658.772763078443,"y":18766.04970737961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"22190dfd-2d9d-401b-a391-642f3140b8ba","savedPayload":{"position":{"x":20658.772763078443,"y":18766.04970737961},"targetPosition":{"x":20827.76878049753,"y":18518.178075084812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"0c9cddc3-dfd4-49f2-b5e9-2d9cb15164e2","savedPayload":{"position":{"x":20692.623450312167,"y":18583.260635952447},"targetPosition":{"x":20827.76878049753,"y":18518.178075084812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"decfbbf5-ddb1-48ed-9703-3dfd2817fd4a","savedPayload":{"position":{"x":20678.18821092035,"y":18506.968561046848},"targetPosition":{"x":20827.76878049753,"y":18518.178075084812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"66d5f6e0-5b1e-4fce-9187-11f226def0a6","savedPayload":{"position":{"x":20703.832964350127,"y":18433.68006637527},"targetPosition":{"x":20827.76878049753,"y":18518.178075084812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"04245397-cdac-4f93-b45f-86787e821ab6","savedPayload":{"position":{"x":21537.760297863948,"y":18848.48174139137},"targetPosition":{"x":21445.055199551465,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Donchian Channel","config":"{\n \"codeName\": \"Donchian-Channel\",\n \"singularVariableName\": \"donchian\",\n \"pluralVariableName\": \"donchians\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"7298225c-3b68-4f34-a935-fc0ab3d8f662","savedPayload":{"position":{"x":21685.219227936483,"y":19034.513231655692},"targetPosition":{"x":21240.75947466867,"y":18964.11772238759},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"50ed783e-0e71-4903-8a82-854c8bd2ed6e","savedPayload":{"position":{"x":21311.154983936773,"y":19408.577475655402},"targetPosition":{"x":21240.75947466867,"y":18964.11772238759},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.begin","project":"Superalgos","id":"1a36f31f-c662-44c1-859e-95dfc06c72cf","savedPayload":{"position":{"x":21205.432704204683,"y":19638.192658346925},"targetPosition":{"x":20922.381387523103,"y":19454.376984029353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"39eca54b-9530-4c5b-a28f-a58a7b7a7f6a","savedPayload":{"position":{"x":20922.381387523103,"y":19454.376984029353},"targetPosition":{"x":20639.330070841523,"y":19270.561309711782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{ \n\"codeName\": \"end\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.end","project":"Superalgos","id":"25467c14-bbdd-4b2f-8f55-7463c2e47d0f","savedPayload":{"position":{"x":20604.003300377535,"y":19944.63624567112},"targetPosition":{"x":20621.66668560953,"y":19607.59877769145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8a9f877-40ea-4464-823b-6ece32c332a4","savedPayload":{"position":{"x":20621.66668560953,"y":19607.59877769145},"targetPosition":{"x":20639.330070841523,"y":19270.561309711782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"hiHigh","config":"{ \n \"codeName\": \"hiHigh\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.hiHigh","project":"Superalgos","id":"7d1d3c9b-5638-4ff1-a97b-fccb540d14f4","savedPayload":{"position":{"x":20188.258017971162,"y":19500.394000204928},"targetPosition":{"x":20338.61536892795,"y":19423.78310337388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6fd13621-5530-49fc-9b62-cd43937ae9c8","savedPayload":{"position":{"x":20338.61536892795,"y":19423.78310337388},"targetPosition":{"x":20639.330070841523,"y":19270.561309711782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"loLow","config":"{ \n \"codeName\": \"loLow\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.loLow","project":"Superalgos","id":"ed2dd438-916d-422c-8395-b85103cfac6a","savedPayload":{"position":{"x":20214.753095819153,"y":18994.837798235425},"targetPosition":{"x":20356.278754159943,"y":19086.74563539421},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d8ffc062-4f09-429d-8b7f-fad13e2b0bcc","savedPayload":{"position":{"x":20356.278754159943,"y":19086.74563539421},"targetPosition":{"x":20639.330070841523,"y":19270.561309711782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Mid Point","config":"{ \n \"codeName\": \"midPoint\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.midPoint","project":"Superalgos","id":"fda3d478-ea77-4a42-a742-e99caddf1b37","savedPayload":{"position":{"x":20665.825148689513,"y":18765.00510774228},"targetPosition":{"x":20656.993456073516,"y":18933.523841732112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"be82c2e0-7fbd-4aa6-9cc2-203b60a3138d","savedPayload":{"position":{"x":20656.993456073516,"y":18933.523841732112},"targetPosition":{"x":20639.330070841523,"y":19270.561309711782},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"086a47ac-062a-442f-9cde-0fa2f0550df3","savedPayload":{"position":{"x":20639.330070841523,"y":19270.561309711782},"targetPosition":{"x":21240.75947466867,"y":18964.11772238759},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Loop Code */\n\nlet dcLen = 20 // Channel length\nlet candle = record.current\n\n// Build arrays Max and Min\n\nvariable.lastHighs.push(candle.max) \nvariable.lastLows.push(candle.min)\n\n// Keep the array the correct size\n\nif (variable.lastHighs.length > dcLen) {\n variable.lastHighs.splice(0, 1)\n}\n\nif (variable.lastLows.length > dcLen) {\n variable.lastLows.splice(0, 1)\n}\n\n// Calculate indicator values\n\nvariable.hiHigh = calculateHigh (variable.lastHighs, dcLen) // higher highs\nvariable.loLow = calculateLow (variable.lastLows, dcLen) // lower lows\nvariable.midPoint = (variable.hiHigh + variable.loLow) / 2 // Midpoint\n\nfunction calculateHigh (array, length) {\n\n /* We check we have enough values to make the calculation */\n if (array.length < length) { return 0 }\n\n return Math.max(...array)\n}\n\nfunction calculateLow (array, length) {\n\n /* We check we have enough values to make the calculation */\n if (array.length < length) { return 0 }\n\n return Math.min(...array)\n}\n\n\n// End of code :-)","project":"Superalgos","id":"58b389fb-0695-4083-8b14-cd6679d36d67","savedPayload":{"position":{"x":20596.561456762163,"y":18558.568243131544},"targetPosition":{"x":20705.228112219684,"y":18587.685385705576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0655fb31-8425-4174-bc6b-275c313ee834","savedPayload":{"position":{"x":20705.228112219684,"y":18587.685385705576},"targetPosition":{"x":20922.561423134724,"y":18645.919670853644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Initialization Code*/\n\nvariable.lastHighs = []\nvariable.lastLows = []\n\n","project":"Superalgos","id":"eeb544b6-45f7-4bff-a026-cef0ad9edbff","savedPayload":{"position":{"x":20835.209995412624,"y":18319.919704481083},"targetPosition":{"x":20864.327137986656,"y":18428.586359938603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a2c221ef-f3c9-4069-9ff3-4ac1190b1527","savedPayload":{"position":{"x":20864.327137986656,"y":18428.586359938603},"targetPosition":{"x":20922.561423134724,"y":18645.919670853644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"393374e9-30fa-4598-9143-8df35e487665","savedPayload":{"position":{"x":20922.561423134724,"y":18645.919670853644},"targetPosition":{"x":21240.75947466867,"y":18964.11772238759},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4768d183-d8ea-4686-8419-f9dad3172020","savedPayload":{"position":{"x":21240.75947466867,"y":18964.11772238759},"targetPosition":{"x":21445.055199551465,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Donchian Channel","id":"dd7b5cd7-3b5e-4809-949e-777ddcce4648"}}}],"id":"48c69242-e9f9-4433-b12f-6c79ee85d86b","savedPayload":{"position":{"x":21445.055199551465,"y":18563.164786502824},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Directional Movement Index (DMI)","config":"{ \n\"codeName\": \"DMI\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market DMI Directional Movement","project":"Superalgos","id":"5919f5c5-6bee-468c-b910-f5652cbecb82","savedPayload":{"position":{"x":21995.019873701105,"y":18861.8683175051},"targetPosition":{"x":21695.431013274734,"y":18846.167530632218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ffc7f78b-9ec3-4218-b76f-47233d535a17"}}}],"outputDatasetFolders":[],"id":"7aaea608-87b1-44dd-b913-0b901b31f0a4","savedPayload":{"position":{"x":21695.431013274734,"y":18846.167530632218},"targetPosition":{"x":21395.842152848363,"y":18830.466743759334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"fe35d43c-c6df-4e14-8f8f-05097d8780c4","savedPayload":{"position":{"x":21940.88760345213,"y":18931.484947018515},"targetPosition":{"x":21647.44332323199,"y":18993.858454263842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Directional Movement Index (DMI) Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"fd624718-e85a-4d9d-8a67-90d4e961d39d","savedPayload":{"position":{"x":21773.243908423803,"y":19075.554309516097},"targetPosition":{"x":21647.44332323199,"y":18993.858454263842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"f80adcc4-0286-43e6-a21f-b11c8210b305"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"84e787de-6e28-47f7-999b-ccb4df1b58b3","savedPayload":{"position":{"x":21678.630076854653,"y":19140.580594373914},"targetPosition":{"x":21647.44332323199,"y":18993.858454263842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"0caf1c52-9492-4149-900c-88c36f943c04","savedPayload":{"position":{"x":21647.44332323199,"y":18993.858454263842},"targetPosition":{"x":21395.842152848363,"y":18830.466743759334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"f80adcc4-0286-43e6-a21f-b11c8210b305","savedPayload":{"position":{"x":21532.039302770227,"y":19097.768701015844},"targetPosition":{"x":21395.842152848363,"y":18830.466743759334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"77ab62fd-1ace-4833-852a-4b7fcfa71af1","savedPayload":{"position":{"x":21387.99175941192,"y":18980.26117397252},"targetPosition":{"x":21395.842152848363,"y":18830.466743759334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"1e735ccd-0aac-412e-9cd3-e7371c4da681","savedPayload":{"position":{"x":21314.146297596108,"y":18956.267328951148},"targetPosition":{"x":21395.842152848363,"y":18830.466743759334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b15d854d-e6bd-4a3f-86a4-e52298e1bedb","savedPayload":{"position":{"x":21395.842152848363,"y":18830.466743759334},"targetPosition":{"x":21259.6450029265,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Donchian Channel","project":"Superalgos","id":"7aa772da-83ed-49bc-ae02-cdf6dec2e327","savedPayload":{"position":{"x":20700.345622167275,"y":19053.944569417006},"targetPosition":{"x":20752.440075467355,"y":18758.502243513343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"50ed783e-0e71-4903-8a82-854c8bd2ed6e"}}}],"outputDatasetFolders":[],"id":"689dc40b-6766-4c3f-8b01-1337836842d3","savedPayload":{"position":{"x":20752.440075467355,"y":18758.502243513343},"targetPosition":{"x":20804.534528767435,"y":18463.05991760968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Directional Movement Index (DMI) Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"68ae89c3-ae95-4f7c-8010-77696f7cece1","savedPayload":{"position":{"x":20544.212929558314,"y":18985.184269980946},"targetPosition":{"x":20611.698245861473,"y":18692.873250545374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"410a9275-4f43-4cbe-9ee9-a674a8465fb2"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"676dd9be-1e1e-4f80-98af-e9d74d588c9b","savedPayload":{"position":{"x":20457.186823388456,"y":18950.023440756006},"targetPosition":{"x":20611.698245861473,"y":18692.873250545374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"7d829a3f-61dc-451c-aedf-2d441bb73ee6","savedPayload":{"position":{"x":20385.285371794642,"y":18889.690959242525},"targetPosition":{"x":20611.698245861473,"y":18692.873250545374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"a4433576-f48c-46ad-be60-94456f62807d","savedPayload":{"position":{"x":20335.54678982574,"y":18810.092589092157},"targetPosition":{"x":20611.698245861473,"y":18692.873250545374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"2bc735c8-7b2c-43bf-a5ad-04a92a55b492","savedPayload":{"position":{"x":20611.698245861473,"y":18692.873250545374},"targetPosition":{"x":20804.534528767435,"y":18463.05991760968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"410a9275-4f43-4cbe-9ee9-a674a8465fb2","savedPayload":{"position":{"x":20663.58063564955,"y":18514.36293910853},"targetPosition":{"x":20804.534528767435,"y":18463.05991760968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"f5079609-c590-4de5-aeaf-50454e9462ff","savedPayload":{"position":{"x":20656.813365815604,"y":18437.01269095964},"targetPosition":{"x":20804.534528767435,"y":18463.05991760968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"4a4808ce-da77-4797-9c98-a20c7f4b66ff","savedPayload":{"position":{"x":20689.62786229959,"y":18366.6417761567},"targetPosition":{"x":20804.534528767435,"y":18463.05991760968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e7398a04-47e8-4195-9504-c8fb6a7f8006","savedPayload":{"position":{"x":21166.939904614017,"y":18848.48174139137},"targetPosition":{"x":21259.6450029265,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"DMI Directional Movement","config":"{\n \"codeName\": \"DMI\",\n \"singularVariableName\": \"DMI\",\n \"pluralVariableName\": \"DMIs\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"ffc7f78b-9ec3-4218-b76f-47233d535a17","savedPayload":{"position":{"x":21176.89011857568,"y":19085.658562919565},"targetPosition":{"x":20858.692067041735,"y":18767.46051138562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"9b222dca-e8c2-4392-9c3e-7c970dca4a52","savedPayload":{"position":{"x":20654.39634215894,"y":19168.413447270384},"targetPosition":{"x":20858.692067041735,"y":18767.46051138562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.begin","project":"Superalgos","id":"1ec34464-ca30-478d-b477-060d5ce5c395","savedPayload":{"position":{"x":20433.900803083092,"y":19292.034035369074},"targetPosition":{"x":20312.951620111555,"y":18976.95064142627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5938129-efd9-406d-99d7-5138f70c071f","savedPayload":{"position":{"x":20312.951620111555,"y":18976.95064142627},"targetPosition":{"x":20192.002437140018,"y":18661.867247483464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{ \n\"codeName\": \"end\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.end","project":"Superalgos","id":"fec95a23-69ea-4963-8525-8eaa5d791bc9","savedPayload":{"position":{"x":19767.211173181375,"y":19186.440771466918},"targetPosition":{"x":19979.606805160696,"y":18924.15400947519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"138e7e11-7336-481f-9a0c-397cdcf8c275","savedPayload":{"position":{"x":19979.606805160696,"y":18924.15400947519},"targetPosition":{"x":20192.002437140018,"y":18661.867247483464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"+DI","config":"{ \n \"codeName\": \"plusDI\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.plusDI","project":"Superalgos","id":"ff000762-5411-45e6-bd76-17f41e2b7770","savedPayload":{"position":{"x":19691.985214713728,"y":18582.672299556845},"targetPosition":{"x":19858.65762218916,"y":18609.070615532386},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ae437f00-ed26-439e-8ee2-b464ac13a414","savedPayload":{"position":{"x":19858.65762218916,"y":18609.070615532386},"targetPosition":{"x":20192.002437140018,"y":18661.867247483464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"-DI","config":"{ \n \"codeName\": \"minusDI\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.minusDI","project":"Superalgos","id":"bc1af38f-d7ee-4af5-a8ed-e793527c0955","savedPayload":{"position":{"x":20010.578662682707,"y":18189.242156569257},"targetPosition":{"x":20071.053254168477,"y":18346.78385354066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"25cafbf6-5636-4e0e-aabc-5323c92faa92","savedPayload":{"position":{"x":20071.053254168477,"y":18346.78385354066},"targetPosition":{"x":20192.002437140018,"y":18661.867247483464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ADX","config":"{ \n \"codeName\": \"adx\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.adx","project":"Superalgos","id":"57bc2009-d447-4470-a9e3-49cab55d6fac","savedPayload":{"position":{"x":20510.595885109,"y":18268.43710449587},"targetPosition":{"x":20404.39806911934,"y":18399.580485491737},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"01c1bb22-2c02-4b43-8084-71126021fbc9","savedPayload":{"position":{"x":20404.39806911934,"y":18399.580485491737},"targetPosition":{"x":20192.002437140018,"y":18661.867247483464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3aa516a7-f994-48ed-9f01-92cf496e5338","savedPayload":{"position":{"x":20192.002437140018,"y":18661.867247483464},"targetPosition":{"x":20858.692067041735,"y":18767.46051138562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Loop Code */\n\nlet len = 14 // DI Length\nlet lensig = 14 // ADX Smoothing\n\n// Get Current and Previous Candle Data\nlet currCandle = record.current \nlet prevCandle = record.previous \n\n\n// Make sure data exists for prevCandle\n// Builf variable.up = current max - previous max\n\nif (prevCandle === undefined) {\n variable.up = 0\n variable.down = 0\n variable.prevClose = currCandle.close\n} else {\n variable.up = currCandle.max - prevCandle.max\n variable.down = prevCandle.min - currCandle.min\n variable.prevClose = prevCandle.close\n}\n\n\n// console.log (variable.up, variable.down)\n\n\nvariable.plusDM = calculatePlusDM (variable.up,variable.down)\nvariable.minusDM = calculateMinusDM (variable.up,variable.down)\n\n\nfunction calculatePlusDM (up, down) {\n if (up > down && up > 0) {\n return up\n } else {\n return 0\n }\n}\n\nfunction calculateMinusDM (up, down) {\n if (down > up && down > 0) {\n return down\n } else {\n return 0\n }\n}\n\n\nvariable.trueRange = calculateTR()\n\n/* Calculate True Range */\nfunction calculateTR() {\n let hl = currCandle.max - currCandle.min \n if (variable.prevClose === 0) { return hl } // Return High-Low when previous Close is 0 \n let hcp = Math.abs(currCandle.max - variable.prevClose)\n let lcp = Math.abs(currCandle.min - variable.prevClose) \n return Math.max(hl, hcp, lcp)\n}\n\n\n\nvariable.trur = calculateRMA(variable.trueRange, len, variable.previousTrur)\nvariable.previousTrur = variable.trur\n\nk = 100/variable.trur\n\nvariable.basePlusDI = calculateRMA(variable.plusDM, len, variable.previousBasePlusDI)\nvariable.previousBasePlusDI = variable.basePlusDI\n\nvariable.baseMinusDI = calculateRMA(variable.minusDM, len, variable.previousBaseMinusDI)\nvariable.previousBaseMinusDI = variable.baseMinusDI\n\nvariable.plusDI = variable.basePlusDI * k\nvariable.minusDI = variable.baseMinusDI * k\n\nvariable.sumPlusMinus = variable.plusDI + variable.minusDI\n\nif (variable.sumPlusMinus == 0) {\n variable.sumPlusMinus = 1 \n} else {\n variable.sumPlusMinus = variable.sumPlusMinus\n}\n\nvariable.baseADX = calculateRMA(Math.abs(variable.plusDI - variable.minusDI)/variable.sumPlusMinus, lensig, variable.previousBaseADX)\nvariable.previousBaseADX = variable.baseADX\n\nvariable.adx = 100 * variable.baseADX\n\n/* Calculate RMA */\nfunction calculateRMA(src, length, prevRMA) {\n let alpha = 1/length\n return alpha*src+(1-alpha)*prevRMA\n}\n\n","project":"Superalgos","id":"3d2db569-3ddf-43da-be3d-c28e5504273d","savedPayload":{"position":{"x":20575.90092579431,"y":18060.71399612608},"targetPosition":{"x":20646.699469787418,"y":18148.142916789988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a6258f38-8354-48de-adb7-3b661899667e","savedPayload":{"position":{"x":20646.699469787418,"y":18148.142916789988},"targetPosition":{"x":20788.296557773632,"y":18323.000758117807},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Initialization Code*/\n\n\nvariable.previousTrur = 0\nvariable.previousBasePlusDI = 0\nvariable.previousBaseMinusDI = 0\nvariable.previousBaseADX = 0","project":"Superalgos","id":"c2937149-cf61-4d86-808e-979e5948216b","savedPayload":{"position":{"x":20909.245740745173,"y":18007.917364175002},"targetPosition":{"x":20868.929346421326,"y":18112.94516215594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9a0b15f6-028e-47c3-9ba3-6c0bef0cdfb3","savedPayload":{"position":{"x":20868.929346421326,"y":18112.94516215594},"targetPosition":{"x":20788.296557773632,"y":18323.000758117807},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"da6ee60e-081f-401e-bd6a-5df0a847e64f","savedPayload":{"position":{"x":20788.296557773632,"y":18323.000758117807},"targetPosition":{"x":20858.692067041735,"y":18767.46051138562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"baba93f1-f096-429d-a544-efe36119fac8","savedPayload":{"position":{"x":20858.692067041735,"y":18767.46051138562},"targetPosition":{"x":21259.6450029265,"y":18563.164786502824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"DMI Directional Movement","id":"4e8c7782-32a0-496d-baab-d11bb1a562d0"}}}],"id":"de6b7c83-31ee-41f3-83cc-57f47865c6e9","savedPayload":{"position":{"x":21259.6450029265,"y":18563.164786502824},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Indicator Bot","name":"Ichimoku Cloud","config":"{ \n\"codeName\": \"Ichimoku\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Market\",\n \"startDate\": {\n },\n \"endDate\": {\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Ichimoku Cloud","project":"Superalgos","id":"fc0db1a6-d3f2-42ee-8151-3341b44cd685","savedPayload":{"position":{"x":20629.965343509648,"y":19513.34783161428},"targetPosition":{"x":20370.157722374315,"y":19363.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"80018870-2528-42bf-a3a7-6f0b5e44d9c9"}}}],"outputDatasetFolders":[],"id":"6ff0e507-30a0-44cf-9889-234622011f92","savedPayload":{"position":{"x":20370.157722374315,"y":19363.34783161428},"targetPosition":{"x":20110.350101238982,"y":19213.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"5e8b154e-58b0-436c-a28e-0d6a165cf7fe","savedPayload":{"position":{"x":20550.127849125704,"y":19550.80116628037},"targetPosition":{"x":20260.350101238982,"y":19473.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Ichimoku Cloud Multi-Period-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"b1eeff79-6ce6-4e3f-916f-efb6f5c57d36","savedPayload":{"position":{"x":20335.350101238982,"y":19603.05926331728},"targetPosition":{"x":20260.350101238982,"y":19473.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"dbcf7839-bf6e-41e9-beff-ad4a672dec87"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"8815bfb5-a494-425b-8211-215b858acd8c","savedPayload":{"position":{"x":20221.527244473604,"y":19618.044326692972},"targetPosition":{"x":20260.350101238982,"y":19473.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"17464577-a8e2-4909-b674-bf190ae9bd61","savedPayload":{"position":{"x":20260.350101238982,"y":19473.155452749612},"targetPosition":{"x":20110.350101238982,"y":19213.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"dbcf7839-bf6e-41e9-beff-ad4a672dec87","savedPayload":{"position":{"x":20110.350101238982,"y":19513.34783161428},"targetPosition":{"x":20110.350101238982,"y":19213.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"28298755-1265-4638-ad84-4ea48d9967c4","savedPayload":{"position":{"x":20035.350101238982,"y":19343.251642181945},"targetPosition":{"x":20110.350101238982,"y":19213.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"cffec99c-61ce-4c11-acfe-7cfab0661b92","savedPayload":{"position":{"x":19980.446290671316,"y":19288.34783161428},"targetPosition":{"x":20110.350101238982,"y":19213.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0419a095-c117-4b03-8581-c6c2fb30fe43","savedPayload":{"position":{"x":21062.71466341443,"y":18750.489909480562},"targetPosition":{"x":21109.6450029265,"y":18454.18340730202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Process Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"description\": \"Produces the MACD indicator.\",\n \"startMode\": {\n \"allMonths\": {\n \"run\": \"false\",\n \"minYear\": \"\",\n \"maxYear\": \"\"\n },\n \"oneMonth\": {\n \"run\": \"false\",\n \"year\": \"\",\n \"month\": \"\"\n },\n \"noTime\": {\n \"run\": \"true\"\n },\n \"fixedInterval\": {\n \"run\": \"false\",\n \"interval\": 0\n }\n },\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Period-Daily\",\n \"startDate\": {\n \"takeItFromStatusDependency\": 0\n },\n \"endDate\": {\n \"takeItFromStatusDependency\": 1\n }\n }\n}","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Daily Ichimoku Cloud","project":"Superalgos","id":"d7fe8959-24a8-4872-90e6-e4e4ecee89c6","savedPayload":{"position":{"x":20029.54248010365,"y":19698.34783161428},"targetPosition":{"x":20029.54248010365,"y":19398.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ef8da44c-8cc5-41fc-add6-f2feff945632"}}}],"outputDatasetFolders":[],"id":"e4fa5f98-33d5-4d71-935b-ce77340cb43a","savedPayload":{"position":{"x":20029.54248010365,"y":19398.34783161428},"targetPosition":{"x":20029.54248010365,"y":19098.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Ichimoku Cloud Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"5097611a-6c4c-4629-9b4e-ab1ae850980f","savedPayload":{"position":{"x":19863.841693230766,"y":19657.744313175983},"targetPosition":{"x":19879.54248010365,"y":19358.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"906bf32a-6310-4aa4-83d9-7de0a94906d6"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Daily","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"f7e27eb6-6cdb-4352-a880-51f78903cd72","savedPayload":{"position":{"x":19772.032095240058,"y":19638.22958069877},"targetPosition":{"x":19879.54248010365,"y":19358.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2a021da8-9feb-475e-90ab-1586968c17c7"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{ \n\"mainUtility\": \"Market Starting Point\"\n}","project":"Superalgos","id":"826de77b-7a62-4f14-b5ea-911aa0612cec","savedPayload":{"position":{"x":19690.746362788697,"y":19591.2992411867},"targetPosition":{"x":19879.54248010365,"y":19358.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"ebfa73d9-6cd5-45f7-b66c-464c68692b63","savedPayload":{"position":{"x":19627.941309720023,"y":19521.54716325412},"targetPosition":{"x":19879.54248010365,"y":19358.155452749612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}}],"dataMineDataDependencies":[],"id":"434839d0-e4ac-429e-aed0-5542fda64850","savedPayload":{"position":{"x":19879.54248010365,"y":19358.155452749612},"targetPosition":{"x":20029.54248010365,"y":19098.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"906bf32a-6310-4aa4-83d9-7de0a94906d6","savedPayload":{"position":{"x":19899.638669535983,"y":19173.34783161428},"targetPosition":{"x":20029.54248010365,"y":19098.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7a8bcb97-9f5e-44e4-861b-dd111ad7c1f2","savedPayload":{"position":{"x":19879.54248010365,"y":19098.34783161428},"targetPosition":{"x":20029.54248010365,"y":19098.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"f29d08f9-e7c8-490c-8fca-14851a0d3dc3"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"3d514935-9c3a-4b52-9497-b0cdfb4dedc4","savedPayload":{"position":{"x":19899.638669535983,"y":19023.34783161428},"targetPosition":{"x":20029.54248010365,"y":19098.34783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"13b83df6-2b1a-4535-8b78-5711c9b4630d","savedPayload":{"position":{"x":20866.939904614017,"y":18630.518982989764},"targetPosition":{"x":21109.6450029265,"y":18454.18340730202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"products":[{"type":"Product Definition","name":"Ichimoku Cloud","config":"{\n \"codeName\": \"Ichimoku\",\n \"singularVariableName\": \"ichimoku\",\n \"pluralVariableName\": \"ichimokus\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\"\n }","project":"Superalgos","id":"80018870-2528-42bf-a3a7-6f0b5e44d9c9","savedPayload":{"position":{"x":20735.58075892679,"y":18828.247651301732},"targetPosition":{"x":20665.185249658687,"y":18383.78789803392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }","project":"Superalgos","id":"ef8da44c-8cc5-41fc-add6-f2feff945632","savedPayload":{"position":{"x":20264.232313773922,"y":18588.083622916714},"targetPosition":{"x":20665.185249658687,"y":18383.78789803392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.begin","project":"Superalgos","id":"72a92d9f-1ed8-4889-85dc-cf06b82a696e","savedPayload":{"position":{"x":20355.091947472574,"y":18384.331756701613},"targetPosition":{"x":20299.35735576764,"y":18225.051444712077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e8a2fd42-8b10-4ebd-9403-fda27ec231af","savedPayload":{"position":{"x":20299.35735576764,"y":18225.051444712077},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{ \n\"codeName\": \"end\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"record.current.end","project":"Superalgos","id":"0b6082e7-ec6b-47c1-818e-9af517edf285","savedPayload":{"position":{"x":20131.206156330467,"y":18409.557626991456},"targetPosition":{"x":20150.1001616729,"y":18241.86869157197},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"43e28612-17ea-4a7b-89c7-bd039dec9ea1","savedPayload":{"position":{"x":20150.1001616729,"y":18241.86869157197},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Conversion Line","config":"{ \n \"codeName\": \"conversionLine\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.conversionLine","project":"Superalgos","id":"0e232ef8-ac61-4c1a-ada7-73b687dc805b","savedPayload":{"position":{"x":19918.54693362188,"y":18335.14494659232},"targetPosition":{"x":20008.327346533843,"y":18192.260237972547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"512e4c3c-391b-4dfa-9e88-0473375d1799","savedPayload":{"position":{"x":20008.327346533843,"y":18192.260237972547},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Base Line","config":"{ \n \"codeName\": \"baseLine\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.baseLine","project":"Superalgos","id":"c9604d93-a559-4469-9cab-5fc86b5e1648","savedPayload":{"position":{"x":19759.234046498448,"y":18175.83205946889},"targetPosition":{"x":19902.118755118223,"y":18086.051646556927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca0fadce-a732-4048-991c-9e11de0bed02","savedPayload":{"position":{"x":19902.118755118223,"y":18086.051646556927},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lagging Span","config":"{ \n \"codeName\": \"laggingSpan\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.laggingSpan","project":"Superalgos","id":"f8b08c0d-a298-47c8-98b4-14498ae3f069","savedPayload":{"position":{"x":19684.821366099313,"y":17963.172836760303},"targetPosition":{"x":19852.5103015188,"y":17944.27883141787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b1421f51-e5e9-4c19-8ef8-0361872d12a5","savedPayload":{"position":{"x":19852.5103015188,"y":17944.27883141787},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lead Line 1","config":"{ \n \"codeName\": \"leadLine1\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.leadLine1","project":"Superalgos","id":"33f1f757-9ad5-4c0a-9dff-aae377cb5fc4","savedPayload":{"position":{"x":19710.047236389157,"y":17739.287045618195},"targetPosition":{"x":19869.327548378693,"y":17795.02163732313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"40a00adc-bc21-4ae8-95da-623d84b9fb5f","savedPayload":{"position":{"x":19869.327548378693,"y":17795.02163732313},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lead Line 2","config":"{ \n \"codeName\": \"leadLine2\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.leadLine2","project":"Superalgos","id":"748194a5-7fc8-4389-83ec-251ea6212867","savedPayload":{"position":{"x":19829.91536438208,"y":17548.51801275731},"targetPosition":{"x":19949.239633707308,"y":17667.84228208254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d4dc6e16-82d8-44b5-bf4a-898746e9f906","savedPayload":{"position":{"x":19949.239633707308,"y":17667.84228208254},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Past Begin","config":"{ \n \"codeName\": \"pastBegin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.pastBegin","project":"Superalgos","id":"36cea089-33a9-4613-bf31-b6559e672bfe","savedPayload":{"position":{"x":20020.684397242963,"y":17428.64988476439},"targetPosition":{"x":20076.4189889479,"y":17587.930196753925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6e65d1a7-d1d6-4e55-8a5e-1b633d847760","savedPayload":{"position":{"x":20076.4189889479,"y":17587.930196753925},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Past End","config":"{ \n \"codeName\": \"pastEnd\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.pastEnd","project":"Superalgos","id":"f6122e26-d738-4265-87d7-05e277ca4125","savedPayload":{"position":{"x":20244.57018838507,"y":17403.424014474545},"targetPosition":{"x":20225.676183042637,"y":17571.11294989403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6c9f44c4-05fa-45c0-b7c2-4ea0a7215be9","savedPayload":{"position":{"x":20225.676183042637,"y":17571.11294989403},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Forward Begin","config":"{ \n \"codeName\": \"forwardBegin\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.forwardBegin","project":"Superalgos","id":"eea563b8-20c5-4464-8f2f-add8dc54621e","savedPayload":{"position":{"x":20457.229411093656,"y":17477.83669487368},"targetPosition":{"x":20367.448998181695,"y":17620.721403493455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f4aacf4c-ceb3-42eb-8658-1b75219f91d5","savedPayload":{"position":{"x":20367.448998181695,"y":17620.721403493455},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Forward End","config":"{ \n \"codeName\": \"forwardEnd\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.forwardEnd","project":"Superalgos","id":"b24fdba5-01d6-4172-8d60-97714a1f419e","savedPayload":{"position":{"x":20616.54229821709,"y":17637.149581997113},"targetPosition":{"x":20473.657589597315,"y":17726.929994909075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"66042c7c-421c-4882-b2dc-f68a47c928ea","savedPayload":{"position":{"x":20473.657589597315,"y":17726.929994909075},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Plot Lead Line 1","config":"{ \n \"codeName\": \"plotLeadLine1\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.plotLeadLine1","project":"Superalgos","id":"53b40211-2c67-45d0-909e-aa8182dbe7fa","savedPayload":{"position":{"x":20690.954978616224,"y":17849.8088047057},"targetPosition":{"x":20523.266043196738,"y":17868.702810048133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b73f0fd0-94de-4247-a3fb-f066d12c3749","savedPayload":{"position":{"x":20523.266043196738,"y":17868.702810048133},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Plot Lead Line2","config":"{ \n \"codeName\": \"plotLeadLine2\",\n \"isString\": false,\n \"isCalculated\": false\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"variable.plotLeadLine2","project":"Superalgos","id":"ed655742-cd9e-4ca2-baad-ea28f5a3fe0a","savedPayload":{"position":{"x":20665.72910832638,"y":18073.694595847806},"targetPosition":{"x":20506.448796336845,"y":18017.96000414287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"aa927173-5062-420c-bc81-7019042625bc","savedPayload":{"position":{"x":20506.448796336845,"y":18017.96000414287},"targetPosition":{"x":20187.88817235777,"y":17906.490820733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4ad846c6-be10-469e-bb6b-178b94b1bcf6","savedPayload":{"position":{"x":20187.88817235777,"y":17906.490820733},"targetPosition":{"x":20665.185249658687,"y":18383.78789803392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"dataBuilding":{"type":"Data Building Procedure","name":"New Data Building Procedure","project":"Superalgos","loop":{"type":"Procedure Loop","name":"New Procedure Loop","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Loop Code */\n\n/* Modify value here */\n\nlet conversionPeriods = 20 // Conversion Line Periods\nlet basePeriods = 30 // Base Line Periods\nlet laggingSpan2Periods = 120 // Lagging Span 2 Periods\nlet displacement = 60 // Displacement\n\n/* Define candle object and property */\n\nlet candle = {\n open: record.current.open,\n close: record.current.close,\n min: record.current.min,\n max: record.current.max,\n begin: record.current.begin,\n end: record.current.end,\n} \n\n/* We need a function to calculate the average\nof past (length) Lows and Highs\nBasically it is a Donchian\nwith different periods */\n\n// Build arrays Max and Min for each variable\n\nvariable.lastHiConversionPeriods.push(candle.max)\nvariable.lastHiBasePeriods.push(candle.max)\nvariable.lastHiLaggingSpan2Periods.push(candle.max)\n\nvariable.lastLowConversionPeriods.push(candle.min)\nvariable.lastLowBasePeriods.push(candle.min)\nvariable.lastLowLaggingSpan2Periods.push(candle.min)\n\n// And keep the array the correct size\n// Highs\n\nif (variable.lastHiConversionPeriods.length > conversionPeriods) {\n variable.lastHiConversionPeriods.splice(0, 1)\n}\n\nif (variable.lastHiBasePeriods.length > basePeriods) {\n variable.lastHiBasePeriods.splice(0, 1)\n}\n\nif (variable.lastHiLaggingSpan2Periods.length > laggingSpan2Periods) {\n variable.lastHiLaggingSpan2Periods.splice(0, 1)\n}\n\n// Lows\nif (variable.lastLowConversionPeriods.length > conversionPeriods) {\n variable.lastLowConversionPeriods.splice(0, 1)\n}\n\nif (variable.lastLowBasePeriods.length > basePeriods) {\n variable.lastLowBasePeriods.splice(0, 1)\n}\n\nif (variable.lastLowLaggingSpan2Periods.length > laggingSpan2Periods) {\n variable.lastLowLaggingSpan2Periods.splice(0, 1)\n}\n\n// Build a donchian function to calculate average of Highs and Lows\n\nfunction donchian (srcMax, srcMin, length) {\n\n let hiHigh = calculateHigh (srcMax, length) // higher highs\n let loLow = calculateLow (srcMin, length) // lower lows\n return (hiHigh + loLow) / 2 // Average\n}\n\nfunction calculateHigh (array, length) {\n /* We check we have enough values to make the calculation */\n if (array.length < length) { return 0 }\n return Math.max(...array)\n}\n\nfunction calculateLow (array, length) {\n /* We check we have enough values to make the calculation */\n if (array.length < length) { return 0 }\n return Math.min(...array)\n}\n\n// Build Ichimoku Clouds!\n\nvariable.conversionLine = donchian (variable.lastHiConversionPeriods, variable.lastLowConversionPeriods, conversionPeriods)\nvariable.baseLine = donchian (variable.lastHiBasePeriods, variable.lastLowBasePeriods, basePeriods)\nvariable.plotLeadLine1 = (variable.conversionLine + variable.baseLine) / 2\nvariable.plotLeadLine2 = donchian (variable.lastHiLaggingSpan2Periods, variable.lastLowLaggingSpan2Periods, laggingSpan2Periods)\n\n// Lagging Span is the close price plotted back \"displacement\" periods\n// Maybe there is no need of this variable... but I leave it here\nvariable.laggingSpan = candle.close\n\n/* We need to plot data in the past for the LaggingLine\nand in the future for LeadLine 1&2\nDefining past/forward Begin/End -> Values are then stored as new properties\nin Record definition so we can use them in Chart Points to plot\ndata in the past and in the future\n*/\n\nvariable.pastBegin = candle.begin - (candle.end-candle.begin)*displacement\nvariable.pastEnd = candle.end - (candle.end-candle.begin)*displacement\n\nvariable.forwardBegin = candle.begin + (candle.end-candle.begin)*displacement\nvariable.forwardEnd = candle.end + (candle.end-candle.begin)*displacement\n\n/* Syncronizing LeadLine 1&2 values with current candle\nso when writing strategy values are synced\n*/\n\nvariable.pastLeadLine1.push(variable.plotLeadLine1)\nif (variable.pastLeadLine1.length > displacement) {\n variable.pastLeadLine1.splice(0, 1)\n}\n\nif (variable.pastLeadLine1.length < displacement) {\n variable.leadLine1 = 0 \n} else {\n variable.leadLine1 = variable.pastLeadLine1[0] // LeadLine1 \n}\n\nvariable.pastLeadLine2.push(variable.plotLeadLine2)\nif (variable.pastLeadLine2.length > displacement) {\n variable.pastLeadLine2.splice(0, 1)\n}\n\nif (variable.pastLeadLine2.length < displacement) {\n variable.leadLine2 = 0 \n} else {\n variable.leadLine2 = variable.pastLeadLine2[0] // LeadLine2\n}\n\n// End of code :-)","project":"Superalgos","id":"899265ba-76d1-4525-b3c3-2e99d73daf7b","savedPayload":{"position":{"x":20851.81758930949,"y":17645.79749416949},"targetPosition":{"x":20857.70538438682,"y":17758.143316829377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5d5b6e50-f79b-4039-b835-b0bdc3e58653","savedPayload":{"position":{"x":20857.70538438682,"y":17758.143316829377},"targetPosition":{"x":20869.480974541482,"y":17982.834962149154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"initialization":{"type":"Procedure Initialization","name":"New Procedure Initialization","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"/* Initialization Code*/\n\nvariable.lastHiConversionPeriods = []\nvariable.lastHiBasePeriods = []\nvariable.lastHiLaggingSpan2Periods = []\n\nvariable.lastLowConversionPeriods = []\nvariable.lastLowBasePeriods = []\nvariable.lastLowLaggingSpan2Periods = []\n\nvariable.pastLeadLine1 = []\nvariable.pastLeadLine2 = []","project":"Superalgos","id":"50245904-f0f3-43a9-8e7a-164fba5bc780","savedPayload":{"position":{"x":21152.532291223062,"y":17799.019287831583},"targetPosition":{"x":21058.181852329202,"y":17860.291179270775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0d1d1ab8-da87-44b2-aa06-1d1c0b034dc1","savedPayload":{"position":{"x":21058.181852329202,"y":17860.291179270775},"targetPosition":{"x":20869.480974541482,"y":17982.834962149154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"99f9d3e1-78fc-4e8d-b41a-d900687192f9","savedPayload":{"position":{"x":20869.480974541482,"y":17982.834962149154},"targetPosition":{"x":20665.185249658687,"y":18383.78789803392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ccd20b4b-2783-4b65-a1ac-087621e5e315","savedPayload":{"position":{"x":20665.185249658687,"y":18383.78789803392},"targetPosition":{"x":21109.6450029265,"y":18454.18340730202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Ichimoku","id":"c5dedee0-0553-457c-9a14-5c5d97907cb2"}}}],"id":"ab48285e-a196-4696-b8be-a25c373a64be","savedPayload":{"position":{"x":21109.6450029265,"y":18454.18340730202},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"plotters":[{"type":"Plotter","name":"Wave Trend","config":"{ \n \"codeName\": \"PlotterWaveTrend\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Wave Trend","config":"{ \n \"codeName\": \"waveTrend\", \n \"icon\": \"oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"WaveTrend + Signal + Histogram","project":"Superalgos","points":[{"type":"Point","name":"WAVETREND Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.waveTrend","project":"Superalgos","id":"2c5ca3e2-3f1d-41b8-8b16-8bec853896c1","savedPayload":{"position":{"x":20239.11850005987,"y":18756.713955427484},"targetPosition":{"x":20348.85435108448,"y":18781.49889036597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0067f22f-46a2-4735-86fe-5e5329285f92","savedPayload":{"position":{"x":20348.85435108448,"y":18781.49889036597},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"WAVETREND End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.waveTrend","project":"Superalgos","id":"7bbd00d1-0fab-4055-97fe-7993b2677537","savedPayload":{"position":{"x":20363.932783724733,"y":18562.49913906378},"targetPosition":{"x":20432.06387352772,"y":18652.0223461235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"244f05f3-b51c-4427-8078-3b319ccd0092","savedPayload":{"position":{"x":20432.06387352772,"y":18652.0223461235},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SIGNAL Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.waveTrendSignal","project":"Superalgos","id":"6d226efa-bc1b-4192-9fce-b3389535ec68","savedPayload":{"position":{"x":20584.38494972421,"y":18493.951033268673},"targetPosition":{"x":20579.03198419404,"y":18606.323608926763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"80f21e0b-76c2-48a9-b3d2-1ee3c3f774d9","savedPayload":{"position":{"x":20579.03198419404,"y":18606.323608926763},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"SIGNAL End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.waveTrendSignal","project":"Superalgos","id":"fc0f1fb3-ab13-4b01-8496-15c9c15a2b57","savedPayload":{"position":{"x":20797.32297953423,"y":18583.144058571022},"targetPosition":{"x":20720.990670734052,"y":18665.785625794993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd98f729-93b7-4509-bc62-3332f00cd3d0","savedPayload":{"position":{"x":20720.990670734052,"y":18665.785625794993},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"WT3 Histogram Zero","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = 0","project":"Superalgos","id":"0e4d11eb-1949-4d16-a548-1bdee21dd59b","savedPayload":{"position":{"x":20903.11080246409,"y":18788.3438071618},"targetPosition":{"x":20791.515886020625,"y":18802.585458188845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8c7a44ee-f5e7-4c27-a129-2567f4c3787a","savedPayload":{"position":{"x":20791.515886020625,"y":18802.585458188845},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"WT3 Histogram","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = (record.end - record.begin)/2 + record.begin\ny = record.wt3","project":"Superalgos","id":"3d279675-73d8-45b6-823a-3898e74e3ec2","savedPayload":{"position":{"x":20852.24912046422,"y":19013.535036134203},"targetPosition":{"x":20757.60809802071,"y":18952.71294417045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"041ff6d0-02aa-4a0f-81e1-8af53427e0bf","savedPayload":{"position":{"x":20757.60809802071,"y":18952.71294417045},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"95b28bb4-1b05-45ca-b4b2-c36af8849126","savedPayload":{"position":{"x":20668.536679806988,"y":19153.348266730314},"targetPosition":{"x":20635.133137582558,"y":19045.921764567855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"82e2aee4-871f-4f54-85b0-2c34acdcbbdd","savedPayload":{"position":{"x":20635.133137582558,"y":19045.921764567855},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Zero Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"6a55e459-a04d-43ed-bd23-f0b8aac737bd","savedPayload":{"position":{"x":20437.934573212267,"y":19142.363334503236},"targetPosition":{"x":20481.398399852744,"y":19038.59847641647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2f1122e6-62ec-47c3-a29c-f3eff9169efd","savedPayload":{"position":{"x":20481.398399852744,"y":19038.59847641647},"targetPosition":{"x":20568.326053133696,"y":18831.06876024294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a7d2782-832c-4732-94ac-b50588cdfe04","savedPayload":{"position":{"x":20568.326053133696,"y":18831.06876024294},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"Upper+Lower Levels","project":"Superalgos","points":[{"type":"Point","name":"Upper 53 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 53","project":"Superalgos","id":"1b2a894d-474b-431f-945f-0d3a19b5e304","savedPayload":{"position":{"x":21157.11553481132,"y":18804.79492922037},"targetPosition":{"x":21275.48942211176,"y":18925.062070640553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"237d03b2-63ad-400c-9c3c-080bcc7c3d3b","savedPayload":{"position":{"x":21275.48942211176,"y":18925.062070640553},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Upper 53 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 53","project":"Superalgos","id":"e1cddc05-9901-4b87-bbb3-a093dfdfc40c","savedPayload":{"position":{"x":21472.116906053896,"y":18660.93862315525},"targetPosition":{"x":21485.49033627348,"y":18829.15786659714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e042ff20-3176-415f-a4df-09a426fd79da","savedPayload":{"position":{"x":21485.49033627348,"y":18829.15786659714},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Upper 60 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 60","project":"Superalgos","id":"d75c866e-9530-4d0f-94ca-8ec8b2f9d2ee","savedPayload":{"position":{"x":21805.891007183065,"y":18753.217277755437},"targetPosition":{"x":21708.006403692925,"y":18890.67696966393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca64f2c6-152e-4081-8d38-1d8e80045206","savedPayload":{"position":{"x":21708.006403692925,"y":18890.67696966393},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Upper 60 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 60","project":"Superalgos","id":"16da2601-ca28-4889-9155-12c687a9ec70","savedPayload":{"position":{"x":22002.26122679455,"y":19038.452684970496},"targetPosition":{"x":21838.919883433915,"y":19080.833907807304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1a202c3b-ff57-4907-b26f-3caabb330ec3","savedPayload":{"position":{"x":21838.919883433915,"y":19080.833907807304},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Lower 53 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = -53","project":"Superalgos","id":"d0ce070f-1912-43ce-82c0-77def287c519","savedPayload":{"position":{"x":21969.34375672025,"y":19383.180027726063},"targetPosition":{"x":21816.97490338438,"y":19310.652136311015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cab7980f-9dae-4f54-9f56-bf377777b85a","savedPayload":{"position":{"x":21816.97490338438,"y":19310.652136311015},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Lower 53 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = -53","project":"Superalgos","id":"b3aec95a-cdee-4816-8330-c5ac7ae90c79","savedPayload":{"position":{"x":21722.54104704485,"y":19626.097551129144},"targetPosition":{"x":21652.43976360078,"y":19472.59715191307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3e633fdd-4535-4a9d-9b2b-5577533e417d","savedPayload":{"position":{"x":21652.43976360078,"y":19472.59715191307},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Lower 60 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = -60","project":"Superalgos","id":"f0a9d25e-ccda-4d95-b5e7-b8ad25e0615c","savedPayload":{"position":{"x":21377.334828532068,"y":19653.541446251893},"targetPosition":{"x":21422.30228459226,"y":19490.893081994902},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3b48dde7-59c2-4c52-9aab-a8bfafcb7e99","savedPayload":{"position":{"x":21422.30228459226,"y":19490.893081994902},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Lower 60 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = -60","project":"Superalgos","id":"f9969fe0-e387-4247-be00-e26ad15ca006","savedPayload":{"position":{"x":21095.25092736379,"y":19452.670409561448},"targetPosition":{"x":21234.246350480076,"y":19356.979057534605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"db3520c1-9af2-4715-af97-cca2986db9ac","savedPayload":{"position":{"x":21234.246350480076,"y":19356.979057534605},"targetPosition":{"x":21512.237196712646,"y":19165.59635348092},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"427a710c-2eb9-4fb3-9023-e2dd30f58871","savedPayload":{"position":{"x":21512.237196712646,"y":19165.59635348092},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Zero Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"8f897a11-c8bb-4e26-a8fb-46a3ee60b983","savedPayload":{"position":{"x":17209.379924716563,"y":24805.771417957705},"targetPosition":{"x":17023.20594634032,"y":24828.03124220595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"eaa77ce9-3146-4a18-a228-1b5dfb7f58d1","savedPayload":{"position":{"x":17023.20594634032,"y":24828.03124220595},"targetPosition":{"x":16837.031967964078,"y":24850.291066454196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Zero Line Begin","project":"Superalgos","id":"c0a1ab8a-0a7a-47c2-a789-28ab62426e9e","savedPayload":{"position":{"x":16984.41692322835,"y":24966.19587637056},"targetPosition":{"x":16837.031967964078,"y":24850.291066454196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Line Begin","id":"82e2aee4-871f-4f54-85b0-2c34acdcbbdd"}}},{"type":"Polygon Vertex","name":"Zero Line End","project":"Superalgos","id":"371298d7-7c65-4fbe-b4c2-e3fc54cd88dc","savedPayload":{"position":{"x":16859.291792212323,"y":25036.46504483044},"targetPosition":{"x":16837.031967964078,"y":24850.291066454196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Zero Line End","id":"2f1122e6-62ec-47c3-a29c-f3eff9169efd"}}}],"id":"12090784-30fc-4f0b-853d-d5711b242112","savedPayload":{"position":{"x":20875.79788650749,"y":19593.613782618817},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"WT3 Histogram","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\"\n }\n}","project":"Superalgos","id":"ba324dfe-27b0-41b5-ae10-247e0bc52baf","savedPayload":{"position":{"x":21117.342314449015,"y":19155.070830802157},"targetPosition":{"x":20892.915588661708,"y":19171.122147021983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.wt3 < 0","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n}","project":"Superalgos","id":"a268871c-78be-4354-a82c-2218c15a25df","savedPayload":{"position":{"x":21145.14400967011,"y":19543.7893224421},"targetPosition":{"x":21019.02979916591,"y":19357.45573473204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ae2c64bc-ed7f-470d-b4b0-7118b830ba3c","savedPayload":{"position":{"x":21019.02979916591,"y":19357.45573473204},"targetPosition":{"x":20892.915588661708,"y":19171.122147021983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0ce7f235-57d6-4ad6-9cf6-a47ac3004b2b","savedPayload":{"position":{"x":20892.915588661708,"y":19171.122147021983},"targetPosition":{"x":20690.53068473182,"y":19072.809631738877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"WT3 Histogram Zero","project":"Superalgos","id":"cbf4755c-88d8-43cd-9f7c-d2ba81e6a46a","savedPayload":{"position":{"x":20764.12097647824,"y":19285.434815949677},"targetPosition":{"x":20690.53068473182,"y":19072.809631738877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"WT3 Histogram Zero","id":"8c7a44ee-f5e7-4c27-a129-2567f4c3787a"}}},{"type":"Polygon Vertex","name":"WT3 Histogram","project":"Superalgos","id":"52313113-c0bc-49f4-8f64-a446e5b0fb3d","savedPayload":{"position":{"x":20592.218169448715,"y":19275.194535668765},"targetPosition":{"x":20690.53068473182,"y":19072.809631738877},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"WT3 Histogram","id":"041ff6d0-02aa-4a0f-81e1-8af53427e0bf"}}}],"id":"6399921a-70ac-4c45-ba3d-b2745f291d67","savedPayload":{"position":{"x":20462.711268224662,"y":19887.771431863475},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Wave Trend","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.75,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 1.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"5fb5a80e-4ed6-4131-9762-8a241e4e5de9","savedPayload":{"position":{"x":16680.726476464682,"y":24766.405594205025},"targetPosition":{"x":16615.96283159315,"y":24690.21064487796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"db105320-a505-4e27-be2a-ad5b2ff77051","savedPayload":{"position":{"x":16615.96283159315,"y":24690.21064487796},"targetPosition":{"x":16494.53099745903,"y":24547.345114889707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"WAVETREND Begin","project":"Superalgos","id":"d23cd662-a740-425f-b5cd-e0d22580f743","savedPayload":{"position":{"x":16351.665467470779,"y":24668.776949023828},"targetPosition":{"x":16494.53099745903,"y":24547.345114889707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"WAVETREND Begin","id":"0067f22f-46a2-4735-86fe-5e5329285f92"}}},{"type":"Polygon Vertex","name":"WAVETREND End","project":"Superalgos","id":"5ee7b2b6-96aa-42e1-92e8-78290f09964b","savedPayload":{"position":{"x":16373.09916332491,"y":24404.479584901455},"targetPosition":{"x":16494.53099745903,"y":24547.345114889707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"WAVETREND End","id":"244f05f3-b51c-4427-8078-3b319ccd0092"}}}],"id":"56bc1d31-4574-45ed-ae1e-a96c0a0ce57d","savedPayload":{"position":{"x":19956.1670592805,"y":19911.90110651146},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Signal Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.75,\n \"lineWidth\": 0.75,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.75,\n \"lineWidth\": 1.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"038158de-f7fd-458e-869f-a834f376935e","savedPayload":{"position":{"x":16234.112216735088,"y":24582.81847469396},"targetPosition":{"x":16294.799369748238,"y":24503.338480612692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8e26548a-c9d4-48ff-8976-9f81905f1e98","savedPayload":{"position":{"x":16294.799369748238,"y":24503.338480612692},"targetPosition":{"x":16408.587781647897,"y":24354.313491710316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"SIGNAL Begin","project":"Superalgos","id":"1bdf5db8-ea42-4af0-9498-ae171e29c0ab","savedPayload":{"position":{"x":16222.75064375408,"y":24379.229514254737},"targetPosition":{"x":16408.587781647897,"y":24354.313491710316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SIGNAL Begin","id":"80f21e0b-76c2-48a9-b3d2-1ee3c3f774d9"}}},{"type":"Polygon Vertex","name":"SIGNAL End","project":"Superalgos","id":"dd6a6d21-d877-4b1f-8e3c-09c92f8a5a5c","savedPayload":{"position":{"x":16259.56279274552,"y":24240.525079810657},"targetPosition":{"x":16408.587781647897,"y":24354.313491710316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"SIGNAL End","id":"dd98f729-93b7-4509-bc62-3332f00cd3d0"}}}],"id":"b233d138-7074-43fb-bca6-d67bed33b3e9","savedPayload":{"position":{"x":19516.98946694442,"y":19658.341805354175},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Upper 53","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [3,33],\n \"paletteColor\": \"UI_COLOR.TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"7a412ade-bfb4-4afd-8d02-6e98894ce228","savedPayload":{"position":{"x":16170.33121610582,"y":24243.36255847565},"targetPosition":{"x":16264.354626947064,"y":24209.309684679465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8141c484-6521-4a05-a3d9-66941314ad57","savedPayload":{"position":{"x":16264.354626947064,"y":24209.309684679465},"targetPosition":{"x":16440.648522274394,"y":24145.46054631162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Upper 53 Begin","project":"Superalgos","id":"5cf6a61d-0d4c-4390-b0e4-4b6f2614593f","savedPayload":{"position":{"x":16270.841754693825,"y":24065.950096156696},"targetPosition":{"x":16440.648522274394,"y":24145.46054631162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Upper 53 Begin","id":"237d03b2-63ad-400c-9c3c-080bcc7c3d3b"}}},{"type":"Polygon Vertex","name":"Upper 53 End","project":"Superalgos","id":"6336fba4-1e3f-4574-a645-f8562c8cc41d","savedPayload":{"position":{"x":16376.79938390655,"y":23969.16665098429},"targetPosition":{"x":16440.648522274394,"y":24145.46054631162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Upper 53 End","id":"e042ff20-3176-415f-a4df-09a426fd79da"}}}],"id":"6c967bd9-801d-44bc-b8e2-30ca4763bb84","savedPayload":{"position":{"x":19284.614273702548,"y":19207.59681494464},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Upper 60","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"731315a8-1f99-43de-bdca-06c05c0b277a","savedPayload":{"position":{"x":16176.88214145556,"y":23773.383254160573},"targetPosition":{"x":16292.153748304958,"y":23829.62880942335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9caf63a1-7446-4480-8f2f-717e990a1afa","savedPayload":{"position":{"x":16292.153748304958,"y":23829.62880942335},"targetPosition":{"x":16605.620710963998,"y":23982.7182859496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Upper 60 Begin","project":"Superalgos","id":"ded5d9fd-2b8d-4d29-8921-9109c514dc36","savedPayload":{"position":{"x":16767.456938895066,"y":23650.77946906171},"targetPosition":{"x":16605.620710963998,"y":23982.7182859496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Upper 60 Begin","id":"ca64f2c6-152e-4081-8d38-1d8e80045206"}}},{"type":"Polygon Vertex","name":"Upper 60 End","project":"Superalgos","id":"2ce948e8-dde1-47f8-a04f-728227d80408","savedPayload":{"position":{"x":16937.351552619795,"y":24144.444672623653},"targetPosition":{"x":16605.620710963998,"y":23982.7182859496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Upper 60 End","id":"1a202c3b-ff57-4907-b26f-3caabb330ec3"}}}],"id":"7761e0e0-697e-48b4-bbe4-0ac0b22be26f","savedPayload":{"position":{"x":19332.818961524517,"y":18702.77448492598},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Lower 53","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [3,33],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [3,33],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"3acb3136-b9e9-424f-9ddc-50309522959a","savedPayload":{"position":{"x":16041.221339652351,"y":24265.339338091966},"targetPosition":{"x":16139.83677502417,"y":24281.9223386174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"59331a82-0691-4f26-aaa9-b871f57e7118","savedPayload":{"position":{"x":16139.83677502417,"y":24281.9223386174},"targetPosition":{"x":16324.740716346332,"y":24313.015464602595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Lower 53 Begin","project":"Superalgos","id":"111eef17-b3f6-4e81-988c-9dea12ec48b0","savedPayload":{"position":{"x":16215.98004580173,"y":24160.282473593157},"targetPosition":{"x":16324.740716346332,"y":24313.015464602595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lower 53 Begin","id":"cab7980f-9dae-4f54-9f56-bf377777b85a"}}},{"type":"Polygon Vertex","name":"Lower 53 End","project":"Superalgos","id":"f9f7600a-d00a-440d-bdfc-7fb43df81e79","savedPayload":{"position":{"x":16355.833842331525,"y":24128.111523280433},"targetPosition":{"x":16324.740716346332,"y":24313.015464602595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lower 53 End","id":"3e633fdd-4535-4a9d-9b2b-5577533e417d"}}}],"id":"8058bc7b-06c0-41c1-972b-62e146a7515d","savedPayload":{"position":{"x":19646.298882624902,"y":18304.152338174972},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Lower 60","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"13ec6d93-ce9f-48f1-a405-9cdfe5cb1abe","savedPayload":{"position":{"x":16745.626676836186,"y":23833.226058948567},"targetPosition":{"x":16829.2335369284,"y":23888.088550192773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"5006eb12-faac-4f3a-8814-dba7931a70e5","savedPayload":{"position":{"x":16829.2335369284,"y":23888.088550192773},"targetPosition":{"x":16985.996399601307,"y":23990.955721275663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Lower 60 Begin","project":"Superalgos","id":"308980bc-2ba9-4756-bf65-b06c40f19b31","savedPayload":{"position":{"x":17088.863570684196,"y":23834.192858602757},"targetPosition":{"x":16985.996399601307,"y":23990.955721275663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lower 60 Begin","id":"3b48dde7-59c2-4c52-9aab-a8bfafcb7e99"}}},{"type":"Polygon Vertex","name":"Lower 60 End","project":"Superalgos","id":"d5881d46-60c2-4f18-80ef-9defa218d9a5","savedPayload":{"position":{"x":17169.58255706972,"y":23952.845712275623},"targetPosition":{"x":16985.996399601307,"y":23990.955721275663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lower 60 End","id":"db3520c1-9af2-4715-af97-cca2986db9ac"}}}],"id":"d4fd8b32-5d47-4bdd-bbea-239a78a31f70","savedPayload":{"position":{"x":20125.526376997615,"y":18138.290089755566},"targetPosition":{"x":20168.350101238982,"y":19037.270695020274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"fd680561-143c-44f1-a9cb-f0c185f6769b","savedPayload":{"position":{"x":20168.350101238982,"y":19037.270695020274},"targetPosition":{"x":20618.350101238982,"y":18257.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Wave Trend","config":"{ \n \"codeName\": \"waveTrend\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Wave Trend","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.waveTrend","project":"Superalgos","id":"332d453d-9874-4936-b435-7d09042620d9","savedPayload":{"position":{"x":19568.9720477059,"y":17526.667829615144},"targetPosition":{"x":20003.638669535983,"y":17643.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"540f54ff-b28d-4130-9aa4-deba874115e8","savedPayload":{"position":{"x":19685.440618002038,"y":17324.938348377334},"targetPosition":{"x":20003.638669535983,"y":17643.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab66b69f-d80d-40bb-8c50-9948cec124b5","savedPayload":{"position":{"x":20003.638669535983,"y":17643.13639991128},"targetPosition":{"x":20393.350101238982,"y":17868.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Signal","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.waveTrendSignal","project":"Superalgos","id":"a3cc36f6-bb87-4038-8774-d115eebf8950","savedPayload":{"position":{"x":20168.350101238982,"y":17028.42496820828},"targetPosition":{"x":20393.350101238982,"y":17418.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"0fc2adb9-86a3-47b3-a7a3-a602e3a829d5","savedPayload":{"position":{"x":20618.350101238982,"y":17028.42496820828},"targetPosition":{"x":20393.350101238982,"y":17418.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"901b3dfa-790a-4669-b0d6-97a99262293f","savedPayload":{"position":{"x":20393.350101238982,"y":17418.13639991128},"targetPosition":{"x":20393.350101238982,"y":17868.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c902b183-78b4-43f5-a537-75795f838954","savedPayload":{"position":{"x":20393.350101238982,"y":17868.13639991128},"targetPosition":{"x":20618.350101238982,"y":18257.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cfa6bcb9-8d18-4658-81f4-1f7d55adc742","savedPayload":{"position":{"x":20618.350101238982,"y":18257.84783161428},"targetPosition":{"x":21068.350101238982,"y":18257.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f991328f-70b7-492d-baf5-ec38d70e737b","savedPayload":{"position":{"x":21052.350101238982,"y":18277.84783161428},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Super Trend","config":"{ \n \"codeName\": \"PlotterSuperTrend\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Super Trend","config":"{ \n \"codeName\": \"superTrend\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"UP Trend Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.uptrend","project":"Superalgos","id":"05d1244b-e39d-4ec3-a899-4690af33f70d","savedPayload":{"position":{"x":20921.841958176403,"y":18518.963273135036},"targetPosition":{"x":20697.150312856626,"y":18530.7388632897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"807b982d-7dd4-4b96-ba1f-460b1b6b4fb7","savedPayload":{"position":{"x":20697.150312856626,"y":18530.7388632897},"targetPosition":{"x":20472.45866753685,"y":18542.51445344436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"UP Trend End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.uptrend","project":"Superalgos","id":"709b85bb-ad49-4adb-a651-1b2cecc80b27","savedPayload":{"position":{"x":20633.724244832236,"y":18962.625645368098},"targetPosition":{"x":20553.091456184542,"y":18752.57004940623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"adf1bd2c-2a5a-4243-9591-2a462635b074","savedPayload":{"position":{"x":20553.091456184542,"y":18752.57004940623},"targetPosition":{"x":20472.45866753685,"y":18542.51445344436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Down Trend Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.downtrend","project":"Superalgos","id":"cf21fd4d-3219-4ab5-994e-aa4b152645ce","savedPayload":{"position":{"x":20122.74298488121,"y":18825.70862941679},"targetPosition":{"x":20297.60082620903,"y":18684.111541430575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6e276847-0fa5-4473-898f-ccd4c63591c4","savedPayload":{"position":{"x":20297.60082620903,"y":18684.111541430575},"targetPosition":{"x":20472.45866753685,"y":18542.51445344436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Down Trend End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.downtrend","project":"Superalgos","id":"89c531b8-c842-44cb-ad8f-99d4a9f61f4e","savedPayload":{"position":{"x":20095.05691196141,"y":18297.4268876876},"targetPosition":{"x":20283.75778974913,"y":18419.97067056598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab5aabfe-781f-41d6-a809-95299392ca90","savedPayload":{"position":{"x":20283.75778974913,"y":18419.97067056598},"targetPosition":{"x":20472.45866753685,"y":18542.51445344436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"603526b3-a7a3-4a2b-9233-8a7414077f20","savedPayload":{"position":{"x":20472.45866753685,"y":18542.51445344436},"targetPosition":{"x":20588.927237832984,"y":18107.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"UP Trend","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"41571575-f05c-407e-969a-df51b088ef60","savedPayload":{"position":{"x":20199.215806129985,"y":18767.51445344436},"targetPosition":{"x":20140.981520981917,"y":18550.18114252932},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.trend != 1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.0,\n \"lineWidth\": 0,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n}","project":"Superalgos","id":"b3ab1b97-8eee-4c8b-be96-a090897e42ad","savedPayload":{"position":{"x":19822.78346944797,"y":18868.379194063265},"targetPosition":{"x":19981.882495214944,"y":18709.280168296293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4070b155-77b5-4c09-b1b4-6ebe49cfcf1d","savedPayload":{"position":{"x":19981.882495214944,"y":18709.280168296293},"targetPosition":{"x":20140.981520981917,"y":18550.18114252932},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fe128ca4-0803-4db3-b409-8c6a3d31b47b","savedPayload":{"position":{"x":20140.981520981917,"y":18550.18114252932},"targetPosition":{"x":20199.215806129985,"y":18332.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"UP Trend Begin","project":"Superalgos","id":"87966102-abf2-4ba4-a9b1-2e29faadfb43","savedPayload":{"position":{"x":19809.504374426986,"y":18557.84783161428},"targetPosition":{"x":20199.215806129985,"y":18332.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"UP Trend Begin","id":"807b982d-7dd4-4b96-ba1f-460b1b6b4fb7"}}},{"type":"Polygon Vertex","name":"UP Trend End","project":"Superalgos","id":"04f54fc4-3887-414c-91b2-9d71d70ec519","savedPayload":{"position":{"x":19764.549184299904,"y":18216.379261318143},"targetPosition":{"x":20199.215806129985,"y":18332.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"UP Trend End","id":"adf1bd2c-2a5a-4243-9591-2a462635b074"}}}],"id":"e51152bb-9000-4200-88c1-632aaf05333b","savedPayload":{"position":{"x":20199.215806129985,"y":18332.84783161428},"targetPosition":{"x":20588.927237832984,"y":18107.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Down Trend","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"91670c53-5e35-4144-8fac-6f8feb43e59d","savedPayload":{"position":{"x":21085.20916918861,"y":16468.704063229266},"targetPosition":{"x":21244.30819495558,"y":16627.80308899624},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[{"type":"Style Condition","name":"New Style Condition","code":"record.trend != -1","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"opacity\": 0.0,\n \"lineWidth\": 0,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n}","project":"Superalgos","id":"2395d71a-99ee-4330-84d4-1837025d78d6","savedPayload":{"position":{"x":21360.776765251718,"y":16193.136467166158},"targetPosition":{"x":21302.54248010365,"y":16410.4697780812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba17827a-0425-4044-8e15-d29792f800d5","savedPayload":{"position":{"x":21302.54248010365,"y":16410.4697780812},"targetPosition":{"x":21244.30819495558,"y":16627.80308899624},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a97ad15a-c206-4b75-8d8e-1c95197b9b57","savedPayload":{"position":{"x":21244.30819495558,"y":16627.80308899624},"targetPosition":{"x":21302.54248010365,"y":16845.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Down Trend Begin","project":"Superalgos","id":"54f9e103-c71f-4ec3-b950-0df008f2e6fa","savedPayload":{"position":{"x":21527.54248010365,"y":16455.42496820828},"targetPosition":{"x":21302.54248010365,"y":16845.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Down Trend Begin","id":"6e276847-0fa5-4473-898f-ccd4c63591c4"}}},{"type":"Polygon Vertex","name":"Down Trend End","project":"Superalgos","id":"d57924a2-920b-40ec-8b56-3ae304ef2979","savedPayload":{"position":{"x":21737.20910193373,"y":16728.667829615144},"targetPosition":{"x":21302.54248010365,"y":16845.13639991128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Down Trend End","id":"ab5aabfe-781f-41d6-a809-95299392ca90"}}}],"id":"4f25fc3c-5e09-4feb-bcfa-7ac9e729a4dc","savedPayload":{"position":{"x":20363.927237832984,"y":17718.13639991128},"targetPosition":{"x":20588.927237832984,"y":18107.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"cff527e9-cc21-4872-9732-2b713890e8b8","savedPayload":{"position":{"x":20588.927237832984,"y":18107.84783161428},"targetPosition":{"x":20848.734858968317,"y":17957.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Super Trend","config":"{ \n \"codeName\": \"superTrend\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Up Trend","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"Up Trend","code":"record.uptrend","project":"Superalgos","id":"5b0f1653-7d8e-4ed1-8dec-70dd6701c16b","savedPayload":{"position":{"x":20456.650439272085,"y":17294.96336120078},"targetPosition":{"x":20666.706035233954,"y":17375.596149848472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"1384fd63-8258-44d4-ab3f-5f18c3eaaaa1","savedPayload":{"position":{"x":20525.10894724774,"y":17200.738308520653},"targetPosition":{"x":20666.706035233954,"y":17375.596149848472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"07dfc209-e925-4f10-bbc9-608896333744","savedPayload":{"position":{"x":20666.706035233954,"y":17375.596149848472},"targetPosition":{"x":20848.734858968317,"y":17507.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Down Trend","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.downtrend","project":"Superalgos","id":"14561cfc-7d72-4cb5-8567-7892d8ae6a8c","savedPayload":{"position":{"x":20656.662252355574,"y":17105.15923766015},"targetPosition":{"x":20779.206035233954,"y":17293.86011544787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"9d950966-b1bb-406e-b3b3-d1fdaea7577e","savedPayload":{"position":{"x":20767.43044507929,"y":17069.168470128094},"targetPosition":{"x":20779.206035233954,"y":17293.86011544787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3be37b3c-92d2-4f4c-a0d3-644acc172106","savedPayload":{"position":{"x":20779.206035233954,"y":17293.86011544787},"targetPosition":{"x":20848.734858968317,"y":17507.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Trend","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.trend","project":"Superalgos","id":"d8579565-736a-48ec-af20-e7cd3cdf2294","savedPayload":{"position":{"x":20930.039272857342,"y":17069.168470128094},"targetPosition":{"x":20918.26368270268,"y":17293.86011544787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"ba78eeae-12db-4b4a-9e68-2b30598fc986","savedPayload":{"position":{"x":21040.80746558106,"y":17105.15923766015},"targetPosition":{"x":20918.26368270268,"y":17293.86011544787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c265c3b9-bd32-49fe-8676-d2b93e513455","savedPayload":{"position":{"x":20918.26368270268,"y":17293.86011544787},"targetPosition":{"x":20848.734858968317,"y":17507.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ATR N Period","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.atrNPeriod","project":"Superalgos","id":"48978331-2944-4c90-8ffe-896ef6ce0a52","savedPayload":{"position":{"x":21076.52155504871,"y":17272.82228586368},"targetPosition":{"x":21030.76368270268,"y":17375.596149848472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"00b8eb7b-440e-4e3b-81ee-bd1de53de6b0","savedPayload":{"position":{"x":21142.64739593161,"y":17363.83669773086},"targetPosition":{"x":21030.76368270268,"y":17375.596149848472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cd7a1729-5463-4d4b-bec3-eb94685354a1","savedPayload":{"position":{"x":21030.76368270268,"y":17375.596149848472},"targetPosition":{"x":20848.734858968317,"y":17507.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4e328571-7ea2-44a4-8239-a8bfd6614a6d","savedPayload":{"position":{"x":20848.734858968317,"y":17507.84783161428},"targetPosition":{"x":20848.734858968317,"y":17957.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"acfb7d6b-e877-4fb0-bef4-3923c049244b","savedPayload":{"position":{"x":20848.734858968317,"y":17957.84783161428},"targetPosition":{"x":21108.54248010365,"y":18107.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c6fdad31-1843-49e2-abe3-51fe7ed4a836","savedPayload":{"position":{"x":21109.6450029265,"y":18101.512255926536},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Donchian Channel","config":"{ \n \"codeName\": \"PlotterDonchianChannel\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Donchian Channel","config":"{ \n \"codeName\": \"donchian\", \n \"icon\": \"oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"hiHigh Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.hiHigh","project":"Superalgos","id":"55651897-b11c-45f5-a388-b2015d93f406","savedPayload":{"position":{"x":21553.4755458967,"y":17354.015278897445},"targetPosition":{"x":21404.176069369405,"y":17185.6862371112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"50921056-6afc-4c1f-a6b9-3caa26d760af","savedPayload":{"position":{"x":21404.176069369405,"y":17185.6862371112},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"hiHigh End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.hiHigh","project":"Superalgos","id":"ba3e4c9d-b10b-4e21-9452-f8fd45fa0c63","savedPayload":{"position":{"x":21177.840106353022,"y":17460.714139275784},"targetPosition":{"x":21216.358349597565,"y":17239.03566730037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"922ff9da-5d6f-4db2-b052-15b2a9a33fcd","savedPayload":{"position":{"x":21216.358349597565,"y":17239.03566730037},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"loLow Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.loLow","project":"Superalgos","id":"8103aa93-0697-45da-bbbc-3872ec54fe9a","savedPayload":{"position":{"x":20958.880182505698,"y":17179.506432350485},"targetPosition":{"x":21057.545652617835,"y":17125.45668667531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8e0ce244-ab42-4e17-a9ce-0c7019722135","savedPayload":{"position":{"x":21057.545652617835,"y":17125.45668667531},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"loLow End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.loLow","project":"Superalgos","id":"03e5140a-a35e-4f09-82cd-15b5ecc94027","savedPayload":{"position":{"x":20943.552471245835,"y":16887.036278691015},"targetPosition":{"x":21047.327178444593,"y":16930.47658423566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c4f84735-1bcb-4ff2-9611-ea6f7a344352","savedPayload":{"position":{"x":21047.327178444593,"y":16930.47658423566},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Mid Point Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.midPoint","project":"Superalgos","id":"bb353f64-f496-4db0-84c5-650922328ff7","savedPayload":{"position":{"x":21162.65817340271,"y":16692.70043331914},"targetPosition":{"x":21193.397646549176,"y":16800.919353987745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"881ca3b6-39c7-4930-a596-b3aad84ab0ad","savedPayload":{"position":{"x":21193.397646549176,"y":16800.919353987745},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Mid Point End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.midPoint","project":"Superalgos","id":"a016b845-9a98-4e67-a4c5-43f7fb8aa3fc","savedPayload":{"position":{"x":21451.206226310387,"y":16742.83775152869},"targetPosition":{"x":21385.763015154294,"y":16834.344232794112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9493a69b-1a23-4b91-928f-88edebf47e71","savedPayload":{"position":{"x":21385.763015154294,"y":16834.344232794112},"targetPosition":{"x":21254.87659284211,"y":17017.357195324956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63f034d5-a5e4-47e1-8949-47da43c99b36","savedPayload":{"position":{"x":20519.830036640586,"y":17580.03500079752},"targetPosition":{"x":20959.9964569708,"y":17486.47473992953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"hiHigh","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"65953e73-b3e0-46d9-9eda-6cc40a7f5738","savedPayload":{"position":{"x":20125.7845637797,"y":17579.474516733975},"targetPosition":{"x":20405.85869172886,"y":17471.964131870383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f22dc14f-5ba4-49b0-9c92-d8cba9c6b895","savedPayload":{"position":{"x":20405.85869172886,"y":17471.964131870383},"targetPosition":{"x":20685.93281967802,"y":17364.45374700679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"hiHigh Begin","project":"Superalgos","id":"45dea2ad-ffd9-4e03-84e5-fddaa7df9365","savedPayload":{"position":{"x":20411.86918238524,"y":17242.432754084053},"targetPosition":{"x":20685.93281967802,"y":17364.45374700679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"hiHigh Begin","id":"50921056-6afc-4c1f-a6b9-3caa26d760af"}}},{"type":"Polygon Vertex","name":"hiHigh End","project":"Superalgos","id":"261569f5-3798-45cf-94e9-377f8163be3b","savedPayload":{"position":{"x":20578.422434814427,"y":17084.379619057632},"targetPosition":{"x":20685.93281967802,"y":17364.45374700679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"hiHigh End","id":"922ff9da-5d6f-4db2-b052-15b2a9a33fcd"}}}],"id":"83f6ab27-cdde-40d2-ae59-18b0bc64747b","savedPayload":{"position":{"x":20685.93281967802,"y":17364.45374700679},"targetPosition":{"x":20959.9964569708,"y":17486.47473992953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"loLow","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"81ad12f9-de32-439d-b54f-b8173a9d7e83","savedPayload":{"position":{"x":21908.90457949552,"y":16705.316284191722},"targetPosition":{"x":21971.278086740847,"y":16998.760564411863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"9d836367-daba-432f-901d-f0c89c5d7d70","savedPayload":{"position":{"x":21971.278086740847,"y":16998.760564411863},"targetPosition":{"x":22033.651593986175,"y":17292.204844632004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"loLow Begin","project":"Superalgos","id":"09df170c-f916-4d62-a7c6-eed4a9a575c4","savedPayload":{"position":{"x":22197.043304490682,"y":17040.603674248378},"targetPosition":{"x":22033.651593986175,"y":17292.204844632004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"loLow Begin","id":"8e0ce244-ab42-4e17-a9ce-0c7019722135"}}},{"type":"Polygon Vertex","name":"loLow End","project":"Superalgos","id":"166b6f98-ae48-4253-8554-6efa78fe8c7b","savedPayload":{"position":{"x":22327.095874206316,"y":17229.831337386677},"targetPosition":{"x":22033.651593986175,"y":17292.204844632004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"loLow End","id":"c4f84735-1bcb-4ff2-9611-ea6f7a344352"}}}],"id":"955b060d-1916-499a-b281-6ad2d778e470","savedPayload":{"position":{"x":20809.9964569708,"y":17226.667118794197},"targetPosition":{"x":20959.9964569708,"y":17486.47473992953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Mid Point","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [5,5],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"lineWidth\": 2,\n \"lineDash\": [5,5],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"0babee6c-8476-4607-9c4b-8755442c337c","savedPayload":{"position":{"x":20613.76276132119,"y":16721.83059444487},"targetPosition":{"x":20802.558878636144,"y":16954.97438288196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"70981c2b-54c8-4621-b6b3-c3f31d20ba9e","savedPayload":{"position":{"x":20802.558878636144,"y":16954.97438288196},"targetPosition":{"x":20991.354995951096,"y":17188.11817131905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Mid Point Begin","project":"Superalgos","id":"18757d43-015d-4613-8eec-c62d45430523","savedPayload":{"position":{"x":21022.713534931394,"y":16889.761602708568},"targetPosition":{"x":20991.354995951096,"y":17188.11817131905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Mid Point Begin","id":"881ca3b6-39c7-4930-a596-b3aad84ab0ad"}}},{"type":"Polygon Vertex","name":"Mid Point End","project":"Superalgos","id":"caeda3ac-dcce-419a-8b02-385fde1add1d","savedPayload":{"position":{"x":21224.498784388186,"y":16999.322054004097},"targetPosition":{"x":20991.354995951096,"y":17188.11817131905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Mid Point End","id":"9493a69b-1a23-4b91-928f-88edebf47e71"}}}],"id":"e14b4a49-8143-4d23-91b2-012ccb487ed0","savedPayload":{"position":{"x":20991.354995951096,"y":17188.11817131905},"targetPosition":{"x":20959.9964569708,"y":17486.47473992953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"e30d5478-bee6-4de2-aaba-d2b7f3c9fcc7","savedPayload":{"position":{"x":20959.9964569708,"y":17486.47473992953},"targetPosition":{"x":21182.939904614017,"y":17687.21392183719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Donchian Channel","config":"{ \n \"codeName\": \"donchian\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Higher Highs","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"Higher Highs","code":"record.hiHigh","project":"Superalgos","id":"f20d1bbf-730c-42fe-89d5-dae9247a3e87","savedPayload":{"position":{"x":20814.619744098327,"y":17005.971321311557},"targetPosition":{"x":21081.921701354837,"y":17142.16847123342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"e9f188e5-39f2-4829-a984-20692feec630","savedPayload":{"position":{"x":21066.220914481954,"y":16842.57961080705},"targetPosition":{"x":21081.921701354837,"y":17142.16847123342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fc38d930-d64d-43b1-ab5c-0298399637c7","savedPayload":{"position":{"x":21081.921701354837,"y":17142.16847123342},"targetPosition":{"x":21245.313411859344,"y":17393.769641617047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Lower Lows","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.loLow","project":"Superalgos","id":"f74f46f9-e98b-480d-a83a-ea771ac8798f","savedPayload":{"position":{"x":21214.98182079219,"y":16815.00840650836},"targetPosition":{"x":21307.68691910467,"y":17100.325361396906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"d1dd430a-4173-4e15-b63e-a79ce99f3a1f","savedPayload":{"position":{"x":21508.42610101233,"y":16877.38191375369},"targetPosition":{"x":21307.68691910467,"y":17100.325361396906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d335f544-6464-4427-9e05-65e0cee03904","savedPayload":{"position":{"x":21307.68691910467,"y":17100.325361396906},"targetPosition":{"x":21245.313411859344,"y":17393.769641617047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Mid Point","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.midPoint","project":"Superalgos","id":"e463947a-45b3-43ed-ac68-c7bee6d9e15d","savedPayload":{"position":{"x":21633.111732164834,"y":16963.07597385603},"targetPosition":{"x":21496.91458224297,"y":17230.37793111254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1,\n \"fontSize\": 14\n}\n\n\n\n","project":"Superalgos","id":"38521ffb-a1aa-4cea-be3f-2879dcd927a2","savedPayload":{"position":{"x":21796.503442669342,"y":17214.677144239657},"targetPosition":{"x":21496.91458224297,"y":17230.37793111254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3019461a-f4d1-4530-8f20-364f06dce9d3","savedPayload":{"position":{"x":21496.91458224297,"y":17230.37793111254},"targetPosition":{"x":21245.313411859344,"y":17393.769641617047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"239cb3b7-204e-4b5a-969f-d3cc6eec864c","savedPayload":{"position":{"x":21245.313411859344,"y":17393.769641617047},"targetPosition":{"x":21182.939904614017,"y":17687.21392183719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dd7b5cd7-3b5e-4809-949e-777ddcce4648","savedPayload":{"position":{"x":21182.939904614017,"y":17687.21392183719},"targetPosition":{"x":21275.6450029265,"y":17972.530876725734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"45f9ecae-362e-4302-ba60-b6d7f949c9bc","savedPayload":{"position":{"x":21259.6450029265,"y":17992.530876725734},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Directional Movement Index (DMI)","config":"{ \n \"codeName\": \"Plotter-DMI\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"DMI Directional Movement","config":"{ \n \"codeName\": \"DMI\", \n \"icon\": \"oscillator\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"ADX +DI -DI","project":"Superalgos","points":[{"type":"Point","name":"ADX Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.adx","project":"Superalgos","id":"9a5c382e-9075-4fd9-a6c3-3b4595bb9ecb","savedPayload":{"position":{"x":21361.810447616328,"y":17802.40510073104},"targetPosition":{"x":21255.45955868158,"y":17604.12628586977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fae38925-e197-4984-bbf3-4f5cf8cdde87","savedPayload":{"position":{"x":21255.45955868158,"y":17604.12628586977},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"ADX End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.adx","project":"Superalgos","id":"968b241e-722e-4a8b-aaf4-ee34cb41daaa","savedPayload":{"position":{"x":20776.622005525394,"y":17827.88853259208},"targetPosition":{"x":20865.33393062096,"y":17621.115240443796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8cc5bc3c-d019-4a1a-a069-f38d61131e7f","savedPayload":{"position":{"x":20865.33393062096,"y":17621.115240443796},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"+DI Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.plusDI","project":"Superalgos","id":"cc9624f8-ae30-4d30-9336-103a59a3bfd1","savedPayload":{"position":{"x":20391.83923040581,"y":17386.258445270687},"targetPosition":{"x":20608.812080541236,"y":17326.695182229534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ab40f6c8-026c-4c9e-970b-e1da797e83d7","savedPayload":{"position":{"x":20608.812080541236,"y":17326.695182229534},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"+DI End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.plusDI","project":"Superalgos","id":"f4f90058-af66-4c40-822f-ccf546ac016f","savedPayload":{"position":{"x":20497.211400060816,"y":16810.07130213191},"targetPosition":{"x":20679.060193644575,"y":16942.570420137017},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cee77e2a-f5ac-4f21-91dc-21fd2a63ffd4","savedPayload":{"position":{"x":20679.060193644575,"y":16942.570420137017},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-DI Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.minusDI","project":"Superalgos","id":"3abacd0d-e595-4322-9e4f-6e7462a6ce06","savedPayload":{"position":{"x":21013.391121539647,"y":16533.20777403501},"targetPosition":{"x":21023.180007963794,"y":16757.994734739084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"20776211-c287-4689-9048-83655653dac9","savedPayload":{"position":{"x":21023.180007963794,"y":16757.994734739084},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"-DI End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.minusDI","project":"Superalgos","id":"214b0afe-f312-490f-943b-66f6e302086d","savedPayload":{"position":{"x":21551.68453642131,"y":16764.15174462369},"targetPosition":{"x":21382.04228455157,"y":16911.957381798205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f0a11eef-05f1-474f-89e7-3bee3ab07a67","savedPayload":{"position":{"x":21382.04228455157,"y":16911.957381798205},"targetPosition":{"x":21042.75778081209,"y":17207.568656147232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0bea3584-667d-4f44-a761-cd73fde6da89","savedPayload":{"position":{"x":20481.098202389174,"y":17638.731722693676},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Chart Points","name":"BANDS","project":"Superalgos","points":[{"type":"Point","name":"Band 50 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 50","project":"Superalgos","id":"8153d621-7b8c-4d0b-a6da-8c82b1a09e2a","savedPayload":{"position":{"x":20308.729390350236,"y":18085.691741064627},"targetPosition":{"x":20340.04333806625,"y":17862.881425597774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3190a724-bdd5-42d8-8f98-cb0607d80ce8","savedPayload":{"position":{"x":20340.04333806625,"y":17862.881425597774},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 50 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 50","project":"Superalgos","id":"28976ae7-de81-4013-a436-036b58dfdae5","savedPayload":{"position":{"x":20085.777928617805,"y":18013.250419843844},"targetPosition":{"x":20191.40903024463,"y":17814.587211450584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"75de4dca-059a-43c8-97c0-a17cefd70e72","savedPayload":{"position":{"x":20191.40903024463,"y":17814.587211450584},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 75 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 75","project":"Superalgos","id":"28f64dde-54a2-4fd3-b2bd-9b1815490769","savedPayload":{"position":{"x":19901.04847630104,"y":17868.9239539563},"targetPosition":{"x":20068.25606203345,"y":17718.369567525555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"226d3395-f608-4bf7-9526-6cffaf7b734d","savedPayload":{"position":{"x":20068.25606203345,"y":17718.369567525555},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 75 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 75","project":"Superalgos","id":"c1a16632-8d96-4f3e-bdb9-ee30b9c2f300","savedPayload":{"position":{"x":19776.8221316657,"y":17670.12024521981},"targetPosition":{"x":19985.438498943226,"y":17585.83376170123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"85418e43-44b8-47a0-8172-767bdd742b05","savedPayload":{"position":{"x":19985.438498943226,"y":17585.83376170123},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 100 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 100","project":"Superalgos","id":"7bdd757b-7e1f-40b6-b46f-fae1ee4b5b4a","savedPayload":{"position":{"x":19728.082425260392,"y":17440.817954938255},"targetPosition":{"x":19952.945361339687,"y":17432.965568180192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f5c6c92d-c739-4f17-964d-080240fc4628","savedPayload":{"position":{"x":19952.945361339687,"y":17432.965568180192},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 100 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 100","project":"Superalgos","id":"2c839429-dbff-4e26-9366-5f1b1cc261d2","savedPayload":{"position":{"x":19760.708084999053,"y":17208.67432346098},"targetPosition":{"x":19974.69580116546,"y":17278.20314719534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"798370e8-9a99-4947-9a67-968bca900833","savedPayload":{"position":{"x":19974.69580116546,"y":17278.20314719534},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 25 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 25","project":"Superalgos","id":"8fc31d22-96f4-4311-82eb-a6db86a2469a","savedPayload":{"position":{"x":19870.763974813744,"y":17001.68929881925},"targetPosition":{"x":20048.066394375255,"y":17140.213130767523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c9437036-a169-4106-a07c-3e88867f8ff2","savedPayload":{"position":{"x":20048.066394375255,"y":17140.213130767523},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Band 25 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 25","project":"Superalgos","id":"b0947b18-8186-4774-a839-5e4f3b0aa1eb","savedPayload":{"position":{"x":20044.975730140864,"y":16844.82832975848},"targetPosition":{"x":20164.207564593336,"y":17035.639151393676},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"748819d2-1545-40ef-aa5b-5bf8d5916733","savedPayload":{"position":{"x":20164.207564593336,"y":17035.639151393676},"targetPosition":{"x":20402.67123349828,"y":17417.260794664067},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8f04ce0f-d46d-44c8-9bf0-b0cb86b8b0de","savedPayload":{"position":{"x":20402.67123349828,"y":17417.260794664067},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"ADX","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"108326b6-7de4-4b09-a38b-b1366de3c0d1","savedPayload":{"position":{"x":21374.578120454,"y":17069.54857399022},"targetPosition":{"x":21487.015676513583,"y":17065.8007763239},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4c6d1aad-872b-4d09-9eae-859d28f30589","savedPayload":{"position":{"x":21487.015676513583,"y":17065.8007763239},"targetPosition":{"x":21599.453232573167,"y":17062.05297865758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"ADX Begin","project":"Superalgos","id":"e70cdd03-d5b5-4da8-a647-ef0b6351f3e5","savedPayload":{"position":{"x":21270.831426596586,"y":16754.63191783596},"targetPosition":{"x":21599.453232573167,"y":17062.05297865758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ADX Begin","id":"fae38925-e197-4984-bbf3-4f5cf8cdde87"}}},{"type":"Polygon Vertex","name":"ADX End","project":"Superalgos","id":"8def43f6-65bf-404d-9407-46f1e7b90ea8","savedPayload":{"position":{"x":21584.462041907886,"y":16612.302754419237},"targetPosition":{"x":21599.453232573167,"y":17062.05297865758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"ADX End","id":"8cc5bc3c-d019-4a1a-a069-f38d61131e7f"}}}],"id":"e493efd6-ece7-4243-8a14-23ea1771b2f1","savedPayload":{"position":{"x":20833.620783519145,"y":17206.58909261876},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"+DI","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"1ff8bfc1-8a0e-4cea-bcda-d0dfbbfd6ecd","savedPayload":{"position":{"x":21481.497402973662,"y":16925.759560795497},"targetPosition":{"x":21590.436324602277,"y":16953.840895421803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"580eab00-426b-410c-8c33-86778ca7f89c","savedPayload":{"position":{"x":21590.436324602277,"y":16953.840895421803},"targetPosition":{"x":21699.37524623089,"y":16981.92223004811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"+DI Begin","project":"Superalgos","id":"65ec6c2d-5328-41f2-8eb6-0f03fbed8f42","savedPayload":{"position":{"x":21470.675453912034,"y":16594.37042061702},"targetPosition":{"x":21699.37524623089,"y":16981.92223004811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"+DI Begin","id":"ab40f6c8-026c-4c9e-970b-e1da797e83d7"}}},{"type":"Polygon Vertex","name":"+DI End","project":"Superalgos","id":"a61c7250-5391-45d5-9da3-133b3089268c","savedPayload":{"position":{"x":21811.700584736114,"y":16546.16654353365},"targetPosition":{"x":21699.37524623089,"y":16981.92223004811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"+DI End","id":"cee77e2a-f5ac-4f21-91dc-21fd2a63ffd4"}}}],"id":"900f1174-1224-4aa1-9d99-58103f23c4ac","savedPayload":{"position":{"x":20855.028641825884,"y":17091.08262545936},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"-DI","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"a6a9fd26-a928-484e-9408-7df706ab8202","savedPayload":{"position":{"x":21538.716013048677,"y":16766.686114286662},"targetPosition":{"x":21624.59574962824,"y":16817.917655792116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ed323d74-83e4-4338-b932-bb36584e68c4","savedPayload":{"position":{"x":21624.59574962824,"y":16817.917655792116},"targetPosition":{"x":21817.825156932253,"y":16933.188624179387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"-DI Begin","project":"Superalgos","id":"654b23d0-1ac9-4511-b0a1-b773a6c905d5","savedPayload":{"position":{"x":21707.575275314757,"y":16496.903208879576},"targetPosition":{"x":21817.825156932253,"y":16933.188624179387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-DI Begin","id":"20776211-c287-4689-9048-83655653dac9"}}},{"type":"Polygon Vertex","name":"-DI End","project":"Superalgos","id":"ae8b6d1e-6ec2-4bba-a5e6-c2a6d3813b53","savedPayload":{"position":{"x":22048.367093706795,"y":16546.729809571356},"targetPosition":{"x":21817.825156932253,"y":16933.188624179387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"-DI End","id":"f0a11eef-05f1-474f-89e7-3bee3ab07a67"}}}],"id":"057d309b-88ca-42f6-8e23-ea8ae1e2ed05","savedPayload":{"position":{"x":20905.602318583264,"y":16985.052707171322},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Band 50 - 75","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.LIGHT\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.LIGHT\"\n }\n}","project":"Superalgos","id":"f29f2ffc-a9e6-42b3-b524-32f9d70bc7df","savedPayload":{"position":{"x":21373.91235715429,"y":16560.290053880995},"targetPosition":{"x":21564.343857223186,"y":16680.126791910327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"dc5a2ec9-1b68-453d-bfc8-035e20b66703","savedPayload":{"position":{"x":21564.343857223186,"y":16680.126791910327},"targetPosition":{"x":21945.206857360976,"y":16919.800267968985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Band 50 Begin","project":"Superalgos","id":"0dc3c13a-0b4b-4a8c-bfc2-238bdb440b60","savedPayload":{"position":{"x":21735.206561909425,"y":16521.80544901997},"targetPosition":{"x":21945.206857360976,"y":16919.800267968985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 Begin","id":"3190a724-bdd5-42d8-8f98-cb0607d80ce8"}}},{"type":"Polygon Vertex","name":"Band 50 End","project":"Superalgos","id":"e2f2d64f-6fd0-477d-932a-20b83ce53cf1","savedPayload":{"position":{"x":21962.338676172203,"y":16470.12649645877},"targetPosition":{"x":21945.206857360976,"y":16919.800267968985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 End","id":"75de4dca-059a-43c8-97c0-a17cefd70e72"}}},{"type":"Polygon Vertex","name":"Band 75 End","project":"Superalgos","id":"dde5fc42-4c65-4f55-b754-ee07575081e6","savedPayload":{"position":{"x":22184.880333419635,"y":16538.937267831196},"targetPosition":{"x":21945.206857360976,"y":16919.800267968985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 End","id":"85418e43-44b8-47a0-8172-767bdd742b05"}}},{"type":"Polygon Vertex","name":"Band 75 Begin","project":"Superalgos","id":"4154f4b4-739c-4d2f-90d0-c4c6f735b3f3","savedPayload":{"position":{"x":22343.201676309993,"y":16709.799972517434},"targetPosition":{"x":21945.206857360976,"y":16919.800267968985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 Begin","id":"226d3395-f608-4bf7-9526-6cffaf7b734d"}}}],"id":"0c2cbdcc-700f-45af-a671-29be9b677dcc","savedPayload":{"position":{"x":20981.895301297216,"y":16895.725101463257},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Band 75 - 100","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.GREY\"\n }\n}","project":"Superalgos","id":"cd98d7c9-6bd1-4f1f-a21e-ecda719b6888","savedPayload":{"position":{"x":21773.289088391586,"y":16605.575283338283},"targetPosition":{"x":21922.24486405402,"y":16774.208544875866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4af5b3ce-bba8-4f3d-9b54-9674f9daa71f","savedPayload":{"position":{"x":21922.24486405402,"y":16774.208544875866},"targetPosition":{"x":22071.200639716455,"y":16942.84180641345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Band 75 Begin","project":"Superalgos","id":"2f2f44d1-6b8f-4def-a1fb-18500da9952b","savedPayload":{"position":{"x":21981.83492972587,"y":16501.804653921874},"targetPosition":{"x":22071.200639716455,"y":16942.84180641345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 Begin","id":"226d3395-f608-4bf7-9526-6cffaf7b734d"}}},{"type":"Polygon Vertex","name":"Band 75 End","project":"Superalgos","id":"c9d5eb01-23ba-4da5-8029-84f4ac6c2007","savedPayload":{"position":{"x":22214.32624088316,"y":16516.2095733477},"targetPosition":{"x":22071.200639716455,"y":16942.84180641345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 End","id":"85418e43-44b8-47a0-8172-767bdd742b05"}}},{"type":"Polygon Vertex","name":"Band 100 End","project":"Superalgos","id":"97b2cafc-9ca1-49fd-b86c-ebafcf546842","savedPayload":{"position":{"x":22408.467162791618,"y":16644.93025508858},"targetPosition":{"x":22071.200639716455,"y":16942.84180641345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 100 End","id":"798370e8-9a99-4947-9a67-968bca900833"}}},{"type":"Polygon Vertex","name":"Band 100 Begin","project":"Superalgos","id":"d0dedf91-ac18-4ef0-9335-765bcbdf95b0","savedPayload":{"position":{"x":22512.23779220803,"y":16853.476096422863},"targetPosition":{"x":22071.200639716455,"y":16942.84180641345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 100 Begin","id":"f5c6c92d-c739-4f17-964d-080240fc4628"}}}],"id":"9b1c6d74-48a6-4c92-85ae-8c0d211dfbf5","savedPayload":{"position":{"x":21078.70834927591,"y":16829.18733704332},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Level 50","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n }\n}","project":"Superalgos","id":"e06383fe-a5dd-4554-a163-f6d0adaa434a","savedPayload":{"position":{"x":22573.53479181756,"y":16658.64716489982},"targetPosition":{"x":22573.53479181756,"y":16358.64716489982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"281f1f26-a63f-47e8-aced-cf97115f7925","savedPayload":{"position":{"x":22106.754504680466,"y":16557.4076045345},"targetPosition":{"x":22185.59923706614,"y":17000.44655110131},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Band 50 Begin","project":"Superalgos","id":"5ab321e2-936f-4946-a708-62011d8bac64","savedPayload":{"position":{"x":22443.12343558253,"y":16631.419062723424},"targetPosition":{"x":22185.59923706614,"y":17000.44655110131},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 Begin","id":"3190a724-bdd5-42d8-8f98-cb0607d80ce8"}}},{"type":"Polygon Vertex","name":"Band 50 End","project":"Superalgos","id":"2afa5b8c-582f-45f6-8749-6e818fa56d7c","savedPayload":{"position":{"x":22628.638183632953,"y":16921.601818715637},"targetPosition":{"x":22185.59923706614,"y":17000.44655110131},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 End","id":"75de4dca-059a-43c8-97c0-a17cefd70e72"}}}],"id":"6df98b5c-0db8-447a-adab-23a356c6182b","savedPayload":{"position":{"x":21189.443813290713,"y":16789.973852597872},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Level 75","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.2,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.DARK\"\n }\n}","project":"Superalgos","id":"d58e329b-6996-469e-9279-319128435135","savedPayload":{"position":{"x":22793.79144749199,"y":16387.376449443695},"targetPosition":{"x":22558.66709336981,"y":16771.064523403034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"7befc553-bc07-43b5-9b53-eed7f7564b69","savedPayload":{"position":{"x":22328.302283873436,"y":16640.641823889655},"targetPosition":{"x":22279.134755407402,"y":17087.947708206575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Band 75 Begin","project":"Superalgos","id":"d7ee0589-7046-41da-97e2-64bece0f45ae","savedPayload":{"position":{"x":22630.194472265055,"y":16806.42137693395},"targetPosition":{"x":22279.134755407402,"y":17087.947708206575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 Begin","id":"226d3395-f608-4bf7-9526-6cffaf7b734d"}}},{"type":"Polygon Vertex","name":"Band 75 End","project":"Superalgos","id":"58218d74-b8ed-4c09-9920-bcd103d2c00b","savedPayload":{"position":{"x":22726.440639724322,"y":17137.11523667261},"targetPosition":{"x":22279.134755407402,"y":17087.947708206575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 75 End","id":"85418e43-44b8-47a0-8172-767bdd742b05"}}}],"id":"56c84477-78b8-4ec2-bbd6-c0f76f9c9a90","savedPayload":{"position":{"x":21306.55525446803,"y":16780.756982288527},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Band 25 - 50","project":"Superalgos","polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.LIGHT_GREY\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"paletteColor\": \"UI_COLOR.LIGHT_GREY\"\n }\n}","project":"Superalgos","id":"6a419c80-9d0a-4f32-8645-44f71498c2a6","savedPayload":{"position":{"x":22404.027957427996,"y":16752.247323424825},"targetPosition":{"x":22374.12873037469,"y":16975.251888897405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6c954fd3-d05d-421c-b9dd-9e413759d50b","savedPayload":{"position":{"x":22374.12873037469,"y":16975.251888897405},"targetPosition":{"x":22344.229503321385,"y":17198.256454369985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Band 25 Begin","project":"Superalgos","id":"646f52b1-0faf-44cd-bff8-eaf02feff5cd","savedPayload":{"position":{"x":22619.02104915733,"y":16841.900443704963},"targetPosition":{"x":22344.229503321385,"y":17198.256454369985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 25 Begin","id":"c9437036-a169-4106-a07c-3e88867f8ff2"}}},{"type":"Polygon Vertex","name":"Band 25 End","project":"Superalgos","id":"88b7af94-e3f7-46d8-b3ea-8438c3919f01","savedPayload":{"position":{"x":22760.38396809302,"y":17027.03886926077},"targetPosition":{"x":22344.229503321385,"y":17198.256454369985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 25 End","id":"748819d2-1545-40ef-aa5b-5bf8d5916733"}}},{"type":"Polygon Vertex","name":"Band 50 End","project":"Superalgos","id":"215b0fd2-a4c4-487f-a1ef-f6854e918ca3","savedPayload":{"position":{"x":22790.23863426655,"y":17258.0549084766},"targetPosition":{"x":22344.229503321385,"y":17198.256454369985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 End","id":"75de4dca-059a-43c8-97c0-a17cefd70e72"}}},{"type":"Polygon Vertex","name":"Band 50 Begin","project":"Superalgos","id":"fbed1fbe-4264-413d-91ea-4eaf3639bab7","savedPayload":{"position":{"x":22700.585513986407,"y":17473.04800020593},"targetPosition":{"x":22344.229503321385,"y":17198.256454369985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Band 50 Begin","id":"3190a724-bdd5-42d8-8f98-cb0607d80ce8"}}}],"id":"a39c8312-2af2-4dd4-946b-60dc03bb4868","savedPayload":{"position":{"x":21422.06172162743,"y":16802.164840595266},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[{"type":"Text","name":"New Text","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"","project":"Superalgos","id":"bbc7ba15-2edb-4f35-9649-4d9ce3c353de","savedPayload":{"position":{"x":21366.826062620083,"y":16432.627325428904},"targetPosition":{"x":21528.091639915467,"y":16852.738517352645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"ff933fea-8a4b-4532-b1ce-1cdd194f09d9","savedPayload":{"position":{"x":21644.5602102116,"y":16418.071895522564},"targetPosition":{"x":21528.091639915467,"y":16852.738517352645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.property","project":"Superalgos","id":"73edee06-950f-45cd-bd90-32ef9303ac94","savedPayload":{"position":{"x":21877.807322571105,"y":16569.544341380217},"targetPosition":{"x":21528.091639915467,"y":16852.738517352645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{ \n\"configuration\": \"Get the appropriate configuration from the documentation\"\n}","project":"Superalgos","id":"f6f816f8-5f5f-4b00-9fa2-21f2b30db3b2","savedPayload":{"position":{"x":21977.474930555025,"y":16829.18733704332},"targetPosition":{"x":21528.091639915467,"y":16852.738517352645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b37d84b-5045-456c-aabf-924be783d067","savedPayload":{"position":{"x":21528.091639915467,"y":16852.738517352645},"targetPosition":{"x":21283.004074158704,"y":17230.140272928085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cdb5a75e-613a-481d-88e0-38991cc242f2","savedPayload":{"position":{"x":21283.004074158704,"y":17230.140272928085},"targetPosition":{"x":21584.11284702019,"y":17564.555444392914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"DMI Directional Movement","config":"{ \n \"codeName\": \"DMI\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"ADX","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.adx","project":"Superalgos","id":"0eaf0b8e-aeb3-4b05-be3a-d235958773d2","savedPayload":{"position":{"x":22292.918013416493,"y":16644.210137309925},"targetPosition":{"x":22269.366833107168,"y":17093.593427949483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.MANGANESE_PURPLE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"581d5c5a-0805-4d53-80c3-ec3fd38fd825","savedPayload":{"position":{"x":22670.319768991933,"y":16889.297703066688},"targetPosition":{"x":22269.366833107168,"y":17093.593427949483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"57929c4f-d65a-4342-a156-83e3c37bcde3","savedPayload":{"position":{"x":22269.366833107168,"y":17093.593427949483},"targetPosition":{"x":22024.279267350405,"y":17470.995183524923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"+DI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.plusDI","project":"Superalgos","id":"f03ad7aa-8df8-48d4-b8f9-ca83062e24f1","savedPayload":{"position":{"x":22798.860859145447,"y":17076.326149795445},"targetPosition":{"x":22464.445687680618,"y":17377.434922656932},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"a59f5ccb-0893-4a38-8603-f33c7bd79d86","savedPayload":{"position":{"x":22892.421120013438,"y":17516.492570125658},"targetPosition":{"x":22464.445687680618,"y":17377.434922656932},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a2d73831-c487-4f26-8b5b-66980654a6ff","savedPayload":{"position":{"x":22464.445687680618,"y":17377.434922656932},"targetPosition":{"x":22024.279267350405,"y":17470.995183524923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"-DI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.minusDI","project":"Superalgos","id":"b0dc6011-498f-486e-947e-4b7d700927ae","savedPayload":{"position":{"x":22851.064313565403,"y":17739.63392959101},"targetPosition":{"x":22401.681022925844,"y":17716.082749281686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 1,\n \"fontSize\": 16\n}","project":"Superalgos","id":"b942aa1f-30ab-4633-bc95-9c9d5c7dc100","savedPayload":{"position":{"x":22605.97674780864,"y":18117.03568516645},"targetPosition":{"x":22401.681022925844,"y":17716.082749281686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c8fd597b-22d1-43c9-88a0-34afa3fd44c1","savedPayload":{"position":{"x":22401.681022925844,"y":17716.082749281686},"targetPosition":{"x":22024.279267350405,"y":17470.995183524923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9021a665-2e1b-472e-ab60-6b244795eb9e","savedPayload":{"position":{"x":22024.279267350405,"y":17470.995183524923},"targetPosition":{"x":21584.11284702019,"y":17564.555444392914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4e8c7782-32a0-496d-baab-d11bb1a562d0","savedPayload":{"position":{"x":21584.11284702019,"y":17564.555444392914},"targetPosition":{"x":21445.055199551465,"y":17992.530876725734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"24ac7fd1-9eb7-4931-9103-43dec214e698","savedPayload":{"position":{"x":21445.055199551465,"y":17992.530876725734},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Ichimoku Cloud","config":"{ \n \"codeName\": \"Plotter-Ichimoku\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Ichimoku","config":"{ \n \"codeName\": \"Ichimoku\", \n \"icon\": \"|moving-average\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Lagging Span Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.pastBegin\ny = record.previous.laggingSpan\n","project":"Superalgos","id":"40d770c4-6cc1-4a26-afed-5aae3615acd0","savedPayload":{"position":{"x":21665.92929803368,"y":17818.290980236306},"targetPosition":{"x":21597.053354308588,"y":17526.30450045346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed94f11a-7635-42cb-ac2d-fe9d05159b2a","savedPayload":{"position":{"x":21597.053354308588,"y":17526.30450045346},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Lagging Span End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.pastEnd\ny = record.laggingSpan\n","project":"Superalgos","id":"a671dd96-1e10-4fe7-bf9c-64acf9379878","savedPayload":{"position":{"x":21328.342054323566,"y":17800.061629020252},"targetPosition":{"x":21428.25973245353,"y":17517.189824845434},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"15d9b3e5-54b9-4f6f-9e69-37dae6d9d37b","savedPayload":{"position":{"x":21428.25973245353,"y":17517.189824845434},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Conersion Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.conversionLine","project":"Superalgos","id":"827748a6-7f40-4a30-a811-f88883118c88","savedPayload":{"position":{"x":21212.193219699046,"y":17479.581126561214},"targetPosition":{"x":21291.18926742016,"y":17418.265350088564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"a56bb9d9-6e55-4fa3-936d-81582cf1f94d","savedPayload":{"position":{"x":21291.18926742016,"y":17418.265350088564},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Conversion Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.conversionLine","project":"Superalgos","id":"3e816114-9409-4ef8-ae5b-92de87c7ba20","savedPayload":{"position":{"x":21129.755347622762,"y":17269.812523711415},"targetPosition":{"x":21229.360863362945,"y":17260.938897951215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"3eaf4ff4-cf81-4928-b2f8-26d75e89d3c0","savedPayload":{"position":{"x":21229.360863362945,"y":17260.938897951215},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Base Line Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.previous.baseLine","project":"Superalgos","id":"9473832d-9c65-47c0-81b7-06e6399b21b1","savedPayload":{"position":{"x":21173.813665420734,"y":17048.774666938338},"targetPosition":{"x":21262.404601711423,"y":17095.16050537141},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f7d3e6d3-089b-4bc7-8468-2e42bc6511b7","savedPayload":{"position":{"x":21262.404601711423,"y":17095.16050537141},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Base Line End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.baseLine","project":"Superalgos","id":"01e0f6a0-132f-497a-8cbf-45f305163405","savedPayload":{"position":{"x":21330.379968493304,"y":16886.64551398857},"targetPosition":{"x":21379.82932901585,"y":16973.563640659082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"385613d8-5b52-44b9-be18-91bca1c86c47","savedPayload":{"position":{"x":21379.82932901585,"y":16973.563640659082},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Plot Lead Line 1 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.forwardBegin\ny = record.previous.plotLeadLine1","project":"Superalgos","id":"19cecf0e-124a-4394-8968-2edcb21cfbd8","savedPayload":{"position":{"x":21549.74556185957,"y":16834.899925373804},"targetPosition":{"x":21544.35352404055,"y":16934.754449198008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"fbac2c1f-aa48-421f-b725-4b62cc53fc41","savedPayload":{"position":{"x":21544.35352404055,"y":16934.754449198008},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Plot Lead Line 1 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.forwardEnd\ny = record.plotLeadLine1","project":"Superalgos","id":"1584a320-70a4-4487-8b2e-cbacab3288ad","savedPayload":{"position":{"x":21762.263419588955,"y":16909.966759862375},"targetPosition":{"x":21703.74191733759,"y":16991.054575064434},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"cb4fb579-edd5-4de7-a831-003f24afcf39","savedPayload":{"position":{"x":21703.74191733759,"y":16991.054575064434},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Plot Lead Line 2 Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.forwardBegin\ny = record.previous.plotLeadLine2","project":"Superalgos","id":"66ad8d46-50dc-4306-9d06-a3c6f4ead8e2","savedPayload":{"position":{"x":21900.460623431813,"y":17088.012827901068},"targetPosition":{"x":21807.389820219734,"y":17124.589126093455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"b7ab8f9c-d7a0-4c4d-b7d6-1e1d0c02eb83","savedPayload":{"position":{"x":21807.389820219734,"y":17124.589126093455},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Plot Lead Line 2 End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.forwardEnd\ny = record.plotLeadLine2","project":"Superalgos","id":"e837a646-7549-469e-8d35-6c1cee681da4","savedPayload":{"position":{"x":21920.460537622814,"y":17312.509760900997},"targetPosition":{"x":21822.389755862983,"y":17292.961825843402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"02355e05-fe68-4efc-bfae-d2cc6f1457c3","savedPayload":{"position":{"x":21822.389755862983,"y":17292.961825843402},"targetPosition":{"x":21528.177410583496,"y":17234.318020670617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3086f338-1640-4ebb-bafe-bf8cfd3da0ec","savedPayload":{"position":{"x":21528.177410583496,"y":17234.318020670617},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Lagging Span","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.3,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.3,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\"\n }\n}","project":"Superalgos","id":"fbbfd9a2-92d9-4ce7-8c21-17f2dbc6f1fc","savedPayload":{"position":{"x":21410.45008670067,"y":17476.68789820106},"targetPosition":{"x":21496.48655215333,"y":17353.81509155771},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"cd32ab1b-e563-45d7-a3f8-ecb171273385","savedPayload":{"position":{"x":21496.48655215333,"y":17353.81509155771},"targetPosition":{"x":21582.523017605985,"y":17230.94228491436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Lagging Span Begin","project":"Superalgos","id":"01c3a82b-97af-4c64-9675-c2ae9e55c5c9","savedPayload":{"position":{"x":21287.080691702322,"y":17283.03673821444},"targetPosition":{"x":21582.523017605985,"y":17230.94228491436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lagging Span Begin","id":"ed94f11a-7635-42cb-ac2d-fe9d05159b2a"}}},{"type":"Polygon Vertex","name":"Lagging Span End","project":"Superalgos","id":"5e20b9a4-ae32-4a81-bb0b-289bf8d04a58","savedPayload":{"position":{"x":21336.777404319288,"y":17058.869354009046},"targetPosition":{"x":21582.523017605985,"y":17230.94228491436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Lagging Span End","id":"15d9b3e5-54b9-4f6f-9e69-37dae6d9d37b"}}}],"id":"90a34d00-99e2-4a5e-94f1-782aeaec89ed","savedPayload":{"position":{"x":21668.69257290389,"y":17578.536474266115},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Conversion Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TURQUOISE\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.TURQUOISE\"\n }\n}","project":"Superalgos","id":"e865a1b2-668e-427f-b16d-3ecc6c4f770f","savedPayload":{"position":{"x":21038.602226600873,"y":17184.139258675794},"targetPosition":{"x":21328.379974487594,"y":17106.493545145036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"5f0a0922-aecd-4b40-9fb3-b3fdd1207eea","savedPayload":{"position":{"x":21328.379974487594,"y":17106.493545145036},"targetPosition":{"x":21618.157722374315,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Conersion Line Begin","project":"Superalgos","id":"0e09b636-d71d-49d5-9d9a-6e3b067925ca","savedPayload":{"position":{"x":21358.350101238982,"y":16878.84783161428},"targetPosition":{"x":21618.157722374315,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Conersion Line Begin","id":"a56bb9d9-6e55-4fa3-936d-81582cf1f94d"}}},{"type":"Polygon Vertex","name":"Conversion Line End","project":"Superalgos","id":"b92598e2-5755-4a95-85f7-80bc63612184","savedPayload":{"position":{"x":21540.512008843558,"y":16739.070083727558},"targetPosition":{"x":21618.157722374315,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Conversion Line End","id":"3eaf4ff4-cf81-4928-b2f8-26d75e89d3c0"}}}],"id":"59bb987c-d919-4454-ad68-f52a84639d18","savedPayload":{"position":{"x":21783.445715098944,"y":17408.40794463353},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Base Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 2,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\n }\n}","project":"Superalgos","id":"623a0cc7-8641-46ab-bb9b-6132f6b4374c","savedPayload":{"position":{"x":21231.574628289956,"y":16643.36908833409},"targetPosition":{"x":21503.466964400952,"y":16770.154566856298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"639d75aa-1e58-4c36-8257-67168abafb05","savedPayload":{"position":{"x":21503.466964400952,"y":16770.154566856298},"targetPosition":{"x":21775.359300511947,"y":16896.940045378506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Base Line Begin","project":"Superalgos","id":"eca8fef0-6505-4e10-908e-5fcf8a99293a","savedPayload":{"position":{"x":21672.753257514247,"y":16615.032259142732},"targetPosition":{"x":21775.359300511947,"y":16896.940045378506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Line Begin","id":"f7d3e6d3-089b-4bc7-8468-2e42bc6511b7"}}},{"type":"Polygon Vertex","name":"Base Line End","project":"Superalgos","id":"09535200-2132-4847-960a-9ce3698e72b9","savedPayload":{"position":{"x":21902.14477903416,"y":16625.04770926751},"targetPosition":{"x":21775.359300511947,"y":16896.940045378506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Base Line End","id":"385613d8-5b52-44b9-be18-91bca1c86c47"}}}],"id":"5ae2d724-fb7c-478e-bc67-bd08b88562bb","savedPayload":{"position":{"x":21980.708232909925,"y":17351.843827868066},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Lead Line 1","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 1,\n \"lineWidth\": 0.5,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"77e51645-bb9d-4c7a-a8bb-70de2bca0f05","savedPayload":{"position":{"x":22157.707358062016,"y":16835.402485750586},"targetPosition":{"x":22162.9430799932,"y":17135.356794297502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"70f77c83-7b79-4a15-926e-173e9fcbf78f","savedPayload":{"position":{"x":22162.9430799932,"y":17135.356794297502},"targetPosition":{"x":22168.178801924387,"y":17435.31110284442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Plot Lead Line 1 Begin","project":"Superalgos","id":"878fdf21-37b6-4487-ba94-22f16b609ec4","savedPayload":{"position":{"x":22376.576313062087,"y":17219.509162742823},"targetPosition":{"x":22168.178801924387,"y":17435.31110284442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 Begin","id":"fbac2c1f-aa48-421f-b725-4b62cc53fc41"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 1 End","project":"Superalgos","id":"3d6e5394-4cef-41ce-8091-4b557155d5a9","savedPayload":{"position":{"x":22468.133110471303,"y":17430.075380913233},"targetPosition":{"x":22168.178801924387,"y":17435.31110284442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 End","id":"cb4fb579-edd5-4de7-a831-003f24afcf39"}}}],"id":"c8fca9b3-dfe0-4442-8275-493b9d545d7a","savedPayload":{"position":{"x":22168.178801924387,"y":17435.31110284442},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Lead Line 2","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.5,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.5,\n \"lineWidth\": 1,\n \"lineDash\": [0,0],\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"62ad6e42-cc75-4cf3-8217-b460a5b465f4","savedPayload":{"position":{"x":22293.064391706495,"y":16449.292335840837},"targetPosition":{"x":22215.418678175738,"y":16739.070083727558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"0637699a-e7e2-4d24-b5c0-7c76748dda74","savedPayload":{"position":{"x":22215.418678175738,"y":16739.070083727558},"targetPosition":{"x":22137.77296464498,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Plot Lead Line 2 Begin","project":"Superalgos","id":"3d4d544a-28fc-463b-b792-5d08ec382a6f","savedPayload":{"position":{"x":22397.580585780313,"y":16878.84783161428},"targetPosition":{"x":22137.77296464498,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 Begin","id":"b7ab8f9c-d7a0-4c4d-b7d6-1e1d0c02eb83"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 2 End","project":"Superalgos","id":"507b22e5-4ae9-4290-a0df-7d7bac232aa9","savedPayload":{"position":{"x":22427.5507125317,"y":17106.493545145036},"targetPosition":{"x":22137.77296464498,"y":17028.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 End","id":"02355e05-fe68-4efc-bfae-d2cc6f1457c3"}}}],"id":"8bcba1bd-2717-4d86-a955-b7a396e27687","savedPayload":{"position":{"x":22258.137859397168,"y":17619.754503965716},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Cloud Green","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.plotLeadLine1 > record.plotLeadLine2","project":"Superalgos","id":"13e89aa0-e3e2-40ac-abc6-0b98ee4bf44a","savedPayload":{"position":{"x":22308.130465244914,"y":16908.557171243552},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.GREEN\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.GREEN\"\n }\n}","project":"Superalgos","id":"403e5719-537a-4f87-ba17-a2885f64f841","savedPayload":{"position":{"x":22647.064232990466,"y":16804.753950499042},"targetPosition":{"x":22412.514788250057,"y":16991.80089105666},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"a896ce8e-5bd8-49fc-b445-ac872d80ad69","savedPayload":{"position":{"x":22412.514788250057,"y":16991.80089105666},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Plot Lead Line 1 Begin","project":"Superalgos","id":"c42cc383-9c0e-4aea-851a-c224501448b4","savedPayload":{"position":{"x":22470.443717164195,"y":17112.091551427384},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 Begin","id":"fbac2c1f-aa48-421f-b725-4b62cc53fc41"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 1 End","project":"Superalgos","id":"f315431a-2603-459e-9f05-34b8ee64356c","savedPayload":{"position":{"x":22470.443717164195,"y":17245.604111801174},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 End","id":"cb4fb579-edd5-4de7-a831-003f24afcf39"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 2 End","project":"Superalgos","id":"52eb035e-85aa-4746-ad09-7a6f1b636f3c","savedPayload":{"position":{"x":22412.514788250057,"y":17365.894772171898},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 End","id":"02355e05-fe68-4efc-bfae-d2cc6f1457c3"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 2 Begin","project":"Superalgos","id":"52b3d278-b029-46f3-8772-e7dd7b5d42a3","savedPayload":{"position":{"x":22308.130465244914,"y":17449.138491985006},"targetPosition":{"x":22177.965343509648,"y":17178.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 Begin","id":"b7ab8f9c-d7a0-4c4d-b7d6-1e1d0c02eb83"}}}],"id":"d3ee5217-2b18-443a-a8dc-6884ff3711e9","savedPayload":{"position":{"x":22208.492562553198,"y":17818.870913987237},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Cloud Red","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.plotLeadLine1 < record.plotLeadLine2","project":"Superalgos","id":"0486bacd-b7c4-468b-a2bd-fca7604d031a","savedPayload":{"position":{"x":22353.262376958122,"y":17319.896147383693},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.RED\"\n },\n \"atMousePosition\": {\n \"opacity\": 0.1,\n \"paletteColor\": \"UI_COLOR.RED\"\n }\n}","project":"Superalgos","id":"acf85f27-802a-4609-a45f-f602dd9dcd1c","savedPayload":{"position":{"x":22666.324703801554,"y":17486.15855163223},"targetPosition":{"x":22368.211040833583,"y":17452.569208801237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f6448eec-e334-4c22-8d0e-a3c68316ce42","savedPayload":{"position":{"x":22368.211040833583,"y":17452.569208801237},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Plot Lead Line 1 Begin","project":"Superalgos","id":"ae3a2357-a62e-498d-81e0-90f06b7c3ec4","savedPayload":{"position":{"x":22324.1146376341,"y":17578.589488924845},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 Begin","id":"fbac2c1f-aa48-421f-b725-4b62cc53fc41"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 1 End","project":"Superalgos","id":"cc92f4b4-eee9-4017-b30e-7e69d13f7200","savedPayload":{"position":{"x":22229.707000820214,"y":17672.99712573873},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 1 End","id":"cb4fb579-edd5-4de7-a831-003f24afcf39"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 2 End","project":"Superalgos","id":"d7e2bed8-30ec-479d-8909-a1d6f05084a1","savedPayload":{"position":{"x":22103.686720696605,"y":17717.093528938214},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 End","id":"02355e05-fe68-4efc-bfae-d2cc6f1457c3"}}},{"type":"Polygon Vertex","name":"Plot Lead Line 2 Begin","project":"Superalgos","id":"9fb73913-c17f-4c3f-b60f-b1f2821d740f","savedPayload":{"position":{"x":21971.013659279062,"y":17702.144865062754},"targetPosition":{"x":22070.09737786561,"y":17418.979865970243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Plot Lead Line 2 Begin","id":"b7ab8f9c-d7a0-4c4d-b7d6-1e1d0c02eb83"}}}],"id":"e1707dc5-c49a-4b2d-b2b9-d6fd2e064a3c","savedPayload":{"position":{"x":22042.472497531788,"y":17939.491551727508},"targetPosition":{"x":21959.781290786686,"y":17651.113042946014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"2a9c9e98-7ccf-4999-804c-2094204d1ca6","savedPayload":{"position":{"x":21959.781290786686,"y":17651.113042946014},"targetPosition":{"x":21837.760297863948,"y":17925.176680238794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Ichimoku Cloud","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Lagging Span","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.laggingSpan","project":"Superalgos","id":"e923bf3d-c6c5-4f08-9292-4910b5aafd6f","savedPayload":{"position":{"x":22311.43541858742,"y":17488.427625711018},"targetPosition":{"x":22342.79395756772,"y":17786.7841943215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"4b843355-d7ea-45af-8fb1-ecefe26e6a75","savedPayload":{"position":{"x":22585.499055880202,"y":17610.448618633756},"targetPosition":{"x":22342.79395756772,"y":17786.7841943215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce794350-6644-4e6c-afac-e8a7a10c60ca","savedPayload":{"position":{"x":22342.79395756772,"y":17786.7841943215},"targetPosition":{"x":22220.77296464498,"y":18060.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Conversion Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.conversionLine","project":"Superalgos","id":"468401fd-3794-4749-9434-4f9c2107db49","savedPayload":{"position":{"x":22767.862101497816,"y":17385.249012143493},"targetPosition":{"x":22584.830612113707,"y":17796.344468082665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.TURQUOISE\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"32127f3e-22ec-4d64-ab18-90aef4433588","savedPayload":{"position":{"x":23032.36546502943,"y":17749.306659612223},"targetPosition":{"x":22584.830612113707,"y":17796.344468082665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f6d23c72-ba68-4d19-8291-53e729d60d43","savedPayload":{"position":{"x":22584.830612113707,"y":17796.344468082665},"targetPosition":{"x":22220.77296464498,"y":18060.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Base Line","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.baseLine","project":"Superalgos","id":"b00a3c5a-16ca-4a05-b8a2-87442f67e7ee","savedPayload":{"position":{"x":22761.834631567945,"y":17853.15371694624},"targetPosition":{"x":22519.129533255462,"y":18029.48929263398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"f9456c22-246e-4ebb-9f1a-64023ddc007e","savedPayload":{"position":{"x":22793.193170548242,"y":18151.51028555672},"targetPosition":{"x":22519.129533255462,"y":18029.48929263398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab82afc6-55b3-4ec7-9e1e-eec7e1260efc","savedPayload":{"position":{"x":22519.129533255462,"y":18029.48929263398},"targetPosition":{"x":22220.77296464498,"y":18060.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Lead Line 1","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.leadLine1","project":"Superalgos","id":"a275f6d4-c570-4d08-a93a-fcb8d2ed168a","savedPayload":{"position":{"x":23079.403273499876,"y":18196.841512527946},"targetPosition":{"x":22631.868420584153,"y":18243.87932099839},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"bf48ad18-804f-482c-ae5d-dbb0a3522237","savedPayload":{"position":{"x":22896.371784115767,"y":18607.936968467115},"targetPosition":{"x":22631.868420584153,"y":18243.87932099839},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8b7ebb57-8606-435a-be7b-921bc4e6a2d5","savedPayload":{"position":{"x":22631.868420584153,"y":18243.87932099839},"targetPosition":{"x":22220.77296464498,"y":18060.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Lead Line 2","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.leadLine2","project":"Superalgos","id":"2dafd617-bb89-4aad-b697-6a361de69a98","savedPayload":{"position":{"x":22671.172177625504,"y":18425.5739228495},"targetPosition":{"x":22397.108540332723,"y":18303.552929926762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"fontSize\": 14\n}","project":"Superalgos","id":"34880e13-f3bd-4fa6-8245-cb47783fc1d1","savedPayload":{"position":{"x":22428.46707931302,"y":18601.909498537243},"targetPosition":{"x":22397.108540332723,"y":18303.552929926762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"375c2ae1-cdb0-42a9-a243-0ea3a9d486a0","savedPayload":{"position":{"x":22397.108540332723,"y":18303.552929926762},"targetPosition":{"x":22220.77296464498,"y":18060.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c2502509-bfd7-483e-bae8-db4db0ae302b","savedPayload":{"position":{"x":22220.77296464498,"y":18060.84783161428},"targetPosition":{"x":21837.760297863948,"y":17925.176680238794},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c5dedee0-0553-457c-9a14-5c5d97907cb2","savedPayload":{"position":{"x":21837.760297863948,"y":17925.176680238794},"targetPosition":{"x":21595.055199551465,"y":18101.512255926536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f1d66d3b-c40e-4633-aa38-0f85d032d1f8","savedPayload":{"position":{"x":21595.055199551465,"y":18101.512255926536},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d2083ac0-43e2-41e4-83c7-eb09a6f29353","savedPayload":{"position":{"x":21352.350101238982,"y":18277.84783161428},"targetPosition":{"x":21352.350101238982,"y":18277.84783161428},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Super-Scripts/Masters.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Super-Scripts/Masters.json deleted file mode 100644 index c11116e8f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Super-Scripts/Masters.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Super Scripts","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","scriptsLibrary":{"type":"Scripts Library","name":"New Scripts Library","project":"Superalgos","masterScripts":[],"id":"1dd2a75d-7d97-4994-8c95-b392d933b1c1","savedPayload":{"position":{"x":32216.005839901147,"y":23700.96496038412},"targetPosition":{"x":31667.987888976095,"y":23701.16308226429},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"S"}}},"id":"17b5ea06-62d8-4a79-b0ba-f9d3b997c17f","savedPayload":{"position":{"x":31667.987888976095,"y":23701.16308226429},"targetPosition":{"x":31667.987888976095,"y":23701.16308226429},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Engines/Low-Frequency.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Engines/Low-Frequency.json deleted file mode 100644 index 09c476cab..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Engines/Low-Frequency.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Trading Engine","name":"Low-Frequency","project":"Superalgos","current":{"type":"Current","name":"New Current","project":"Superalgos","episode":{"type":"Episode","name":"New Episode","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5eb83933-432a-4029-8a3e-e4d8d760dd27","savedPayload":{"position":{"x":25079.57302866531,"y":38997.25347206287},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"8ba7fe0c-c5df-408e-be8a-ebde90f2a50d","savedPayload":{"position":{"x":25151.200052242173,"y":38903.9073175564},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d7faf864-3fa8-4280-b7d3-a022338b0dfe","savedPayload":{"position":{"x":25237.94829000812,"y":38824.41720300039},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f6722d05-77f9-4a68-ba69-38f56cdc7e91","savedPayload":{"position":{"x":25337.18194065536,"y":38761.19839530167},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"613903ae-45e4-4eee-a178-d6ec049490ec","savedPayload":{"position":{"x":25445.885839923623,"y":38716.171765941916},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b2bfb20d-64d5-4c98-b0cd-a466654c1e6a","savedPayload":{"position":{"x":25560.757074840472,"y":38690.70542626965},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"2615490b-e968-4607-a6e5-009c3ae78957","savedPayload":{"position":{"x":25678.305341060608,"y":38685.57315812922},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"6bcc264b-a189-4aca-8397-d3520bdf4078","savedPayload":{"position":{"x":25794.958993997225,"y":38700.930902891014},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"headOfTheMarket":{"type":"Head Of The Market","name":"New Head Of The Market","config":"{\n\"initialValue\": false\n}","project":"Superalgos","id":"f7e00135-13b1-4265-95da-dd3a2c763b6f","savedPayload":{"position":{"x":25907.173571435444,"y":38736.312023251856},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"processDate":{"type":"Process Date","name":"New Process Date","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d9163f6e-0d50-4ddd-b13b-14f7b4124ec8","savedPayload":{"position":{"x":26011.539490223113,"y":38790.64148177327},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"episodeBaseAsset":{"type":"Episode Base Asset","name":"New Episode Base Asset","project":"Superalgos","balance":{"type":"Balance","name":"Base Asset","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"72f6a6b6-f35b-4d80-b8ad-4a4ed55f2387","savedPayload":{"position":{"x":26631.361190187592,"y":37516.82453342587},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0176b616-7628-42b1-8c06-4cfb1bfd05aa","savedPayload":{"position":{"x":26762.206945449754,"y":37539.273282385664},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d3844a95-57a8-48f5-bfa9-e093bf815f57","savedPayload":{"position":{"x":26888.194991298173,"y":37580.06458398567},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hits":{"type":"Hits","name":"New Hits","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c5eff46f-38bc-4ab9-9d07-ed6c5e161895","savedPayload":{"position":{"x":27007.034576869337,"y":37638.357395005914},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"fails":{"type":"Fails","name":"New Fails","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4a05a6d4-add4-4b8e-a64f-82f1cb8363cd","savedPayload":{"position":{"x":27116.349591987062,"y":37712.964354443466},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitRatio":{"type":"Hit Ratio","name":"New Hit Ratio","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"348b1305-f52f-4dd0-b8f7-d0950aed6604","savedPayload":{"position":{"x":27213.927870404877,"y":37802.36824126911},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"be210037-a2bd-445e-8a18-081e3e4fc995","savedPayload":{"position":{"x":27297.788954388394,"y":37904.75336466626},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"405d086e-9461-4e0d-b875-8decf729a434","savedPayload":{"position":{"x":27366.22966481311,"y":38018.04700156576},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"annualizedRateOfReturn":{"type":"Annualized Rate Of Return","name":"New Annualized Rate Of Return","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2fa70a73-35be-40a2-a0e8-6ef12e76a105","savedPayload":{"position":{"x":27417.861737768006,"y":38139.983460360105},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"388b582a-74fb-4245-b831-892b19868e85","savedPayload":{"position":{"x":27451.655598760684,"y":38268.360259796464},"targetPosition":{"x":26540.29728736959,"y":38439.59967163882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"11def55a-16a2-4105-a2c0-2dc7b39422d5","savedPayload":{"position":{"x":26104.885644729577,"y":38862.26850535013},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"episodeQuotedAsset":{"type":"Episode Quoted Asset","name":"New Episode Quoted Asset","project":"Superalgos","balance":{"type":"Balance","name":"Quoted Asset","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"31600195-9fe6-48f2-a744-12609943a948","savedPayload":{"position":{"x":26900.142882093933,"y":37665.62536258093},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"020629af-dc56-40f5-b724-aa7a38017577","savedPayload":{"position":{"x":27025.087861501757,"y":37710.45914685346},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3dafbad0-221d-4728-a507-682516c5c7d2","savedPayload":{"position":{"x":27142.075789959148,"y":37772.51585614169},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hits":{"type":"Hits","name":"New Hits","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ff31de06-cf8f-4a56-8bd3-0fc978257133","savedPayload":{"position":{"x":27248.98644615458,"y":37850.56825842247},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"fails":{"type":"Fails","name":"New Fails","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"48db7b5c-f10c-4d10-9662-0f28bebcc16a","savedPayload":{"position":{"x":27343.684006398573,"y":37943.03428049915},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitRatio":{"type":"Hit Ratio","name":"New Hit Ratio","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e8dabb5-0d33-470a-9c62-92bfd48fbc66","savedPayload":{"position":{"x":27424.25242262616,"y":38048.03561851676},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b87d87fa-37b4-4a84-ab28-44e1f69bf485","savedPayload":{"position":{"x":27489.055784687967,"y":38163.4402837918},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"37ab9b9a-d76c-4d1e-bbb0-8f81d852ef5f","savedPayload":{"position":{"x":27536.775704360283,"y":38286.911173681394},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"annualizedRateOfReturn":{"type":"Annualized Rate Of Return","name":"New Annualized Rate Of Return","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3eefd2a4-05e5-45cc-8319-b2f473907651","savedPayload":{"position":{"x":27566.43703226065,"y":38415.974967012604},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"7b13fa53-921e-457b-bde5-dd4c13247936","savedPayload":{"position":{"x":27577.40659099431,"y":38548.274574557996},"targetPosition":{"x":26650.0945868782,"y":38558.59588157081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9d3a2c33-2d9f-4d01-a410-9c29b534b886","savedPayload":{"position":{"x":26184.37575928559,"y":38949.01674311608},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"episodeCounters":{"type":"Episode Counters","name":"New Episode Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6c6579c8-fb13-41f6-a25b-1833d2963640","savedPayload":{"position":{"x":26696.880001023572,"y":38231.499516312484},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"strategies":{"type":"Strategies","name":"New Strategies","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"caf6b80c-fff7-4c1e-abf9-3b37cd8d3806","savedPayload":{"position":{"x":26876.813516098868,"y":38251.301385967454},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"positions":{"type":"Positions","name":"New Positions","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e9184950-7342-4ba0-96cd-bf51ac20c432","savedPayload":{"position":{"x":27035.56087360951,"y":38338.41892234468},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"orders":{"type":"Orders","name":"New Orders","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"668e9060-80e2-41d4-8528-65b40a9dc523","savedPayload":{"position":{"x":27149.023639648192,"y":38479.6037915106},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"hits":{"type":"Hits","name":"New Hits","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e9beeed6-f4c1-4862-a84a-9215a5dc0b76","savedPayload":{"position":{"x":27199.800126237802,"y":38653.26316035404},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"fails":{"type":"Fails","name":"New Fails","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"db9005e4-0895-4a13-80de-3d7592477457","savedPayload":{"position":{"x":27208.560036450064,"y":38801.91504505259},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[{"type":"User Defined Counter","name":"New User Defined Counter","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"43f2fef0-fffd-45d1-9ded-ba2bda6908cb","savedPayload":{"position":{"x":27080.97550104554,"y":39002.123378978824},"targetPosition":{"x":26737.085206597716,"y":38694.28189376598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"id":"5a0d3549-0f15-4815-b4b3-11b78cc0ee8f","savedPayload":{"position":{"x":26247.594566984306,"y":39048.25039376332},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"episodeStatistics":{"type":"Episode Statistics","name":"New Episode Statistics","project":"Superalgos","profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e3d6d413-30e8-4d83-9fdb-0c344065bb25","savedPayload":{"position":{"x":26879.258404249587,"y":37920.64334273329},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9d578e19-1f24-46a0-95bc-ac1b0db612d8","savedPayload":{"position":{"x":27226.09350092782,"y":38022.316366277024},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"660dcca3-ccee-4e7c-91b2-2c23884d901e","savedPayload":{"position":{"x":27542.41600456259,"y":38236.93848308982},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2c041b27-ee4b-444d-a80f-d4441a072079","savedPayload":{"position":{"x":27683.01331454022,"y":38565.58791639396},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"annualizedRateOfReturn":{"type":"Annualized Rate Of Return","name":"New Annualized Rate Of Return","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"adaf52e7-6cfb-419c-a977-8453841db79c","savedPayload":{"position":{"x":27722.356833313796,"y":38924.89584103659},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Write your Formula code here.","project":"Superalgos","id":"03dfd055-de12-4acd-a2d6-09571bcb476b","savedPayload":{"position":{"x":27622.144835222593,"y":39272.236233147254},"targetPosition":{"x":27210.73885919225,"y":39058.18029870713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c4634159-3ab1-4053-bcd3-ef6807874149","savedPayload":{"position":{"x":27210.73885919225,"y":39058.18029870713},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Write your Formula code here.","project":"Superalgos","id":"e26802c2-6390-430a-8223-a22b45fa625f","savedPayload":{"position":{"x":27395.377518962443,"y":39555.08586593574},"targetPosition":{"x":27097.231403728576,"y":39199.89843401947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40e19232-9c8e-4f03-857e-98a57ac22551","savedPayload":{"position":{"x":27097.231403728576,"y":39199.89843401947},"targetPosition":{"x":26798.627519538335,"y":38844.17291665672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fb2b103c-aa99-4528-b517-26f8b19c8f2e","savedPayload":{"position":{"x":26292.62119634406,"y":39156.95429303159},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"distanceToEvent":{"type":"Distance To Event","name":"New Distance To Event","project":"Superalgos","triggerOn":{"type":"Trigger On","name":"New Trigger On","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"902bb26e-1767-438f-ad17-90ecdf895917","savedPayload":{"position":{"x":27519.62667445321,"y":38369.269711367975},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"triggerOff":{"type":"Trigger Off","name":"New Trigger Off","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"38a99470-0ba3-449b-b390-e91b641df71e","savedPayload":{"position":{"x":27610.380184824062,"y":38477.54388510572},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"takePosition":{"type":"Take Position","name":"New Take Position","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2ab42094-807b-4a1b-a98e-0461ac76b96a","savedPayload":{"position":{"x":27679.601302689145,"y":38603.457372213175},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"closePosition":{"type":"Close Position","name":"New Close Position","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"266078a8-278e-4725-a40a-517565ed5be2","savedPayload":{"position":{"x":27732.18258424558,"y":38738.8504988495},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhase":{"type":"Next Phase","name":"New Next Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"700d730c-0ce4-41e5-beb4-d247ea87ff39","savedPayload":{"position":{"x":27761.595104922962,"y":38881.675333765794},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhase":{"type":"Move To Phase","name":"New Move To Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"db34eaee-4206-47f0-9611-5157b8e8b5be","savedPayload":{"position":{"x":27769.45390187273,"y":39027.69510453201},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"createOrder":{"type":"Create Order","name":"New Create Order","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0bbe164f-0d90-4784-a367-f78123ec00d7","savedPayload":{"position":{"x":27753.678847854237,"y":39173.18487792207},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"cancelOrder":{"type":"Cancel Order","name":"New Cancel Order","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8c07e14b-2113-4651-9370-ac2506b7662a","savedPayload":{"position":{"x":27715.811288713623,"y":39314.66402924311},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"closeOrder":{"type":"Close Order","name":"New Close Order","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3a0488f3-87b0-4f44-92f9-5abc53a68d58","savedPayload":{"position":{"x":27635.80862109924,"y":39477.052563658755},"targetPosition":{"x":26836.775895790874,"y":39002.288269761615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5fa3b58c-7e8c-4327-acbf-d6b367c2248d","savedPayload":{"position":{"x":26318.08753601633,"y":39271.82552794844},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"candle":{"type":"Candle","name":"New Candle","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"99e6ab4d-b289-4ffa-8011-7cd6cc8e7be2","savedPayload":{"position":{"x":26465.853467494246,"y":39083.49491604371},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"30567d08-6c02-4566-b96e-9d308511550a","savedPayload":{"position":{"x":26572.05090533018,"y":39161.36209909829},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"open":{"type":"Open","name":"New Open","project":"Superalgos","id":"3a56e6c9-1780-496e-88f1-8bad9ba7df83","savedPayload":{"position":{"x":26640.366063672005,"y":39273.941995796165},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"close":{"type":"Close","name":"New Close","project":"Superalgos","id":"b2eaedfb-9589-49f1-8b38-91384c91821c","savedPayload":{"position":{"x":26660.398578940636,"y":39404.095337404375},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"min":{"type":"Min","name":"New Min","project":"Superalgos","id":"ee29c140-d133-4265-a4ad-1d3f9bd098c6","savedPayload":{"position":{"x":26629.09868228163,"y":39532.007457506064},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"max":{"type":"Max","name":"New Max","project":"Superalgos","id":"a6bcef43-3109-4da4-9fdc-fa9f03e5ce6b","savedPayload":{"position":{"x":26551.231499227048,"y":39638.204895341994},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"index":{"type":"Index","name":"New Index","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d4a0e8f8-bf5e-42d1-b5bc-b5de3ed078dc","savedPayload":{"position":{"x":26438.651602529175,"y":39706.52005368382},"targetPosition":{"x":26323.21980415676,"y":39389.373794168576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"83f13bc0-737a-4679-aab3-e596a728693f","savedPayload":{"position":{"x":26323.21980415676,"y":39389.373794168576},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cycle":{"type":"Cycle","name":"New Cycle","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c9986759-eca8-4a11-b5fa-4930d3022ecc","savedPayload":{"position":{"x":26434.248337278103,"y":39394.21031396878},"targetPosition":{"x":26307.86205939496,"y":39506.02744710519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c0aa558a-35de-42e0-a6c0-48c45da865a4","savedPayload":{"position":{"x":26475.83516786942,"y":39489.8534763674},"targetPosition":{"x":26307.86205939496,"y":39506.02744710519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"lastBegin":{"type":"Last Begin","name":"New Last Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"983768b0-972f-4ade-98e1-865a8c733117","savedPayload":{"position":{"x":26453.261980219468,"y":39591.67454585481},"targetPosition":{"x":26307.86205939496,"y":39506.02744710519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"lastEnd":{"type":"Last End","name":"New Last End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3f54c869-6154-478d-94fc-c0dbde606801","savedPayload":{"position":{"x":26375.150964776094,"y":39660.78133465768},"targetPosition":{"x":26307.86205939496,"y":39506.02744710519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"10a54b94-404f-4107-9f37-5ab09b13a0e5","savedPayload":{"position":{"x":26307.86205939496,"y":39506.02744710519},"targetPosition":{"x":25648.862254589007,"y":39359.93070769697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"772a16fc-f0e4-4bfa-8045-bf8bc984eb53","savedPayload":{"position":{"x":25648.862254589007,"y":39359.93070769697},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategy":{"type":"Strategy","name":"New Strategy","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"989dc7f3-b431-49a1-b77e-a44a9c5cb9dd","savedPayload":{"position":{"x":25735.71344420418,"y":38530.68253349248},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6d661273-f8fd-48ac-8258-d4851c18e9b5","savedPayload":{"position":{"x":25939.64797816796,"y":38438.85299300389},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6440a481-de19-4054-ada3-aaf4847f7bf5","savedPayload":{"position":{"x":26159.514008823884,"y":38398.552758268794},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d73398fd-bef4-439b-b015-7c485f323fd9","savedPayload":{"position":{"x":26382.311865445023,"y":38412.04713032502},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8ab7d69f-a2e4-42dc-b3c8-e55c6e9395ed","savedPayload":{"position":{"x":26595.694240399192,"y":38478.540623816945},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"752b56ac-dacf-4de6-b9cd-1f907c4639d8","savedPayload":{"position":{"x":26786.9625473435,"y":38594.166174587124},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"95eaccfe-cf23-4bde-9cc3-4d4ac22c4147","savedPayload":{"position":{"x":26945.000240075933,"y":38752.198952305},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e982b53e-71c4-40bd-a158-b477b51c18e6","savedPayload":{"position":{"x":27060.630246565583,"y":38943.46540385107},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"No Stage\"\n}","project":"Superalgos","id":"b3fcda1e-aaed-4f29-8f4e-6a3c53f41d5c","savedPayload":{"position":{"x":27127.130733889135,"y":39156.838394092636},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"index":{"type":"Index","name":"New Index","config":"{\n\"initialValue\": -1\n}","project":"Superalgos","id":"2b5497a7-5945-4c6d-89c7-328f488efcd9","savedPayload":{"position":{"x":27140.62586725256,"y":39379.63071652675},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"strategyName":{"type":"Strategy Name","name":"New Strategy Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"165503a7-6932-4492-b55d-e1f078e84184","savedPayload":{"position":{"x":27100.325069580518,"y":39599.49150342043},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"strategyCounters":{"type":"Strategy Counters","name":"New Strategy Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6444a48f-005e-435d-971f-6f4b918b448b","savedPayload":{"position":{"x":27405.553205550626,"y":40043.410686268035},"targetPosition":{"x":27008.48636625059,"y":39803.4582140897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"0959dc76-33eb-416f-ba6d-49bf7bdedcfe","savedPayload":{"position":{"x":27008.48636625059,"y":39803.4582140897},"targetPosition":{"x":26215.303766163488,"y":39323.84508560717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4ae1a2e2-3986-426d-887c-854ffcd0bacf","savedPayload":{"position":{"x":25867.848015043488,"y":39506.252314841164},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"position":{"type":"Position","name":"New Position","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3477c173-53bc-42ea-a3b7-4f00a1c02015","savedPayload":{"position":{"x":25868.07288277947,"y":39066.238270489695},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"9261f02f-9032-4602-9770-072e9268313c","savedPayload":{"position":{"x":25984.726535716087,"y":39050.8805257279},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f0b88792-57a2-4081-90d4-e38705f487cd","savedPayload":{"position":{"x":26102.274801936223,"y":39056.01279386833},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3ef9a99a-9339-4ff9-b634-aa59a5f8e28a","savedPayload":{"position":{"x":26217.14603685307,"y":39081.4791335406},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4d36149a-9c7e-4646-8c15-64a9404c8970","savedPayload":{"position":{"x":26325.849936121336,"y":39126.50576290035},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"207d3050-dd30-4da0-ab7d-c29819d88f66","savedPayload":{"position":{"x":26425.083586768575,"y":39189.72457059907},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"a927c8ca-6401-40b6-a322-697e234c031c","savedPayload":{"position":{"x":26511.83182453452,"y":39269.21468515508},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"cabf5599-bd58-4d1c-92f5-9de5799d6aa4","savedPayload":{"position":{"x":26583.458848111386,"y":39362.56083966154},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"No Stage\"\n}","project":"Superalgos","id":"eab14f99-22d2-492d-b398-1aac390d7066","savedPayload":{"position":{"x":26637.788306632807,"y":39466.92675844922},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetRate":{"type":"Entry Target Rate","name":"New Entry Target Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"71b3e7d9-80d0-422d-999e-99549f5ab59d","savedPayload":{"position":{"x":26673.16942699364,"y":39579.141335887434},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetRate":{"type":"Exit Target Rate","name":"New Exit Target Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bc637b55-04bd-4701-9683-78593832cb09","savedPayload":{"position":{"x":26688.527171755442,"y":39695.79498882405},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"stopLoss":{"type":"Stop Loss","name":"New Stop Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a2c06262-0906-4aac-8048-86e6c861a3f1","savedPayload":{"position":{"x":26990.156914741634,"y":39672.61899086224},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3dbcd6ca-7f17-4e43-a211-a0052d85a2a8","savedPayload":{"position":{"x":27013.779845355468,"y":39744.408211190166},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stopLossPhase":{"type":"Stop Loss Phase","name":"New Stop Loss Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cd72e0d5-5947-4dba-98e0-a6b245d0589a","savedPayload":{"position":{"x":27020.835895423064,"y":39819.65412246461},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stopLossPosition":{"type":"Stop Loss Position","name":"New Stop Loss Position","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"952c2041-9073-4207-a65d-2676a4d17bf7","savedPayload":{"position":{"x":27010.97124513053,"y":39894.58358049471},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"initialValue":{"type":"Initial Value","name":"New Initial Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"081a3ca6-613e-4fa2-944f-b2d153f3976c","savedPayload":{"position":{"x":26984.68054923473,"y":39965.43930937667},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"finalValue":{"type":"Final Value","name":"New Final Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"da4d0a4f-f6d5-47f4-98f4-3ebe8dbfd5ad","savedPayload":{"position":{"x":26943.282133008262,"y":40028.66830699658},"targetPosition":{"x":26683.39490361501,"y":39813.34325504419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6cc8dba0-5f83-4a35-af20-ec8c0f2cfcff","savedPayload":{"position":{"x":26683.39490361501,"y":39813.34325504419},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takeProfit":{"type":"Take Profit","name":"New Take Profit","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2685e828-a599-44df-9fc7-3ddcd004339a","savedPayload":{"position":{"x":26984.46668285857,"y":39842.8968077673},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"85b941f4-bdf3-44ff-bb77-bd65eb39e6b5","savedPayload":{"position":{"x":26995.264660789868,"y":39917.697467381186},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"takeProfitPhase":{"type":"Take Profit Phase","name":"New Take Profit Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bb18fe69-5012-4f64-ad50-387872f0c4e2","savedPayload":{"position":{"x":26989.147198232382,"y":39993.025494422494},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"takeProfitPosition":{"type":"Take Profit Position","name":"New Take Profit Position","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"90a1092c-47e5-4d98-9d9a-c1cb2f057274","savedPayload":{"position":{"x":26966.421050303044,"y":40065.103627072924},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"initialValue":{"type":"Initial Value","name":"New Initial Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"57ef7f9f-6d22-4d67-8a2b-4707646f24fb","savedPayload":{"position":{"x":26928.225800955162,"y":40130.3175667893},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"finalValue":{"type":"Final Value","name":"New Final Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a6692953-5973-4c51-ab28-aba3c749041f","savedPayload":{"position":{"x":26876.476719480506,"y":40185.39721432455},"targetPosition":{"x":26657.92856394274,"y":39928.214489961036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"df523873-e747-41bb-ac2e-a4091fd911e5","savedPayload":{"position":{"x":26657.92856394274,"y":39928.214489961036},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionCounters":{"type":"Position Counters","name":"New Position Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fb374cfd-85ce-434a-98fb-29262017b4df","savedPayload":{"position":{"x":26612.90193458299,"y":40036.91838922929},"targetPosition":{"x":26313.53577838534,"y":39881.07823226247},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"9c24f6bf-cc20-4384-abf5-db31a0adfe75","savedPayload":{"position":{"x":26313.53577838534,"y":39881.07823226247},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionStatistics":{"type":"Position Statistics","name":"New Position Statistics","project":"Superalgos","profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"45ce7818-05a2-4bcb-b822-034f801e3efa","savedPayload":{"position":{"x":26884.295767597934,"y":40180.20462975081},"targetPosition":{"x":26549.683126884272,"y":40136.15203987654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c8373104-21d5-41d3-a551-71753683853b","savedPayload":{"position":{"x":26861.49246910683,"y":40265.30769829976},"targetPosition":{"x":26549.683126884272,"y":40136.15203987654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"c809d913-3522-46b3-9735-b63a32cbdc5b","savedPayload":{"position":{"x":26817.439879232563,"y":40341.60902216699},"targetPosition":{"x":26549.683126884272,"y":40136.15203987654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cedad2f7-7afc-4d24-8318-f800a3447b24","savedPayload":{"position":{"x":26755.140109174718,"y":40403.908792224836},"targetPosition":{"x":26549.683126884272,"y":40136.15203987654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"03d2f3b4-3d5e-4b8d-b0ba-a73b52842cf0","savedPayload":{"position":{"x":26678.83878530749,"y":40447.96138209911},"targetPosition":{"x":26614.26095609588,"y":40292.056710987825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"445bfb04-2212-4586-8507-831dcc60a4d4","savedPayload":{"position":{"x":26614.26095609588,"y":40292.056710987825},"targetPosition":{"x":26549.683126884272,"y":40136.15203987654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dd3ec368-eae6-49cf-8753-b317c8e7725e","savedPayload":{"position":{"x":26549.683126884272,"y":40136.15203987654},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionBaseAsset":{"type":"Position Base Asset","name":"New Position Base Asset","project":"Superalgos","beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8c6d01dc-f258-4957-81a9-743eff6367c4","savedPayload":{"position":{"x":27943.145573957176,"y":40528.495143789114},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e0d3197-eb56-4390-b319-1e29888e5eb0","savedPayload":{"position":{"x":27882.81665654305,"y":40700.221743666916},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetSize":{"type":"Entry Target Size","name":"New Entry Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4f34b4ec-74cb-42ad-be53-3ce37b6cf429","savedPayload":{"position":{"x":27790.21319557095,"y":40856.688529932275},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetSize":{"type":"Exit Target Size","name":"New Exit Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"543c7935-d286-45a0-944d-95fc013f54a6","savedPayload":{"position":{"x":27668.866528629245,"y":40992.03788820454},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c6a22f90-dc9e-4f23-a5c6-db20864d5764","savedPayload":{"position":{"x":27523.44886577071,"y":41101.1227219441},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f8d76bbb-9697-4244-beed-e180394b0190","savedPayload":{"position":{"x":27359.516084863855,"y":41179.72845870105},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"f729b426-5742-4050-9f5f-17be937603fe","savedPayload":{"position":{"x":27183.195897213132,"y":41224.855149552284},"targetPosition":{"x":27042.637756026634,"y":40308.59453041709},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"49b6cd2f-d026-45a1-94a6-34da6a8a00d0","savedPayload":{"position":{"x":26470.19301232826,"y":40222.90027764249},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionQuotedAsset":{"type":"Position Quoted Asset","name":"New Position Quoted Asset","project":"Superalgos","beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7ac0990c-72be-4a29-b8f5-742e3d3a187f","savedPayload":{"position":{"x":27761.688435589145,"y":40780.37977062033},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7671b848-4e6e-4671-8180-984b622a5252","savedPayload":{"position":{"x":27672.388671130255,"y":40938.901111931395},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetSize":{"type":"Entry Target Size","name":"New Entry Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3f327b74-3799-4344-8694-b2b9affaec47","savedPayload":{"position":{"x":27553.982854112837,"y":41076.9145706256},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetSize":{"type":"Exit Target Size","name":"New Exit Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9340a64e-303d-4e87-a281-5aba9d0735c4","savedPayload":{"position":{"x":27411.00794481684,"y":41189.03491674229},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5af6674b-b49c-4f44-bddb-0316342fa013","savedPayload":{"position":{"x":27248.84873273896,"y":41271.13036330342},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fd0421eb-6448-4fe6-8758-54584c7b2c3c","savedPayload":{"position":{"x":27073.74836764316,"y":41320.189093948065},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"0ff63d38-707c-40a6-92ac-3e89744857c9","savedPayload":{"position":{"x":26892.513563228218,"y":41333.956424291755},"targetPosition":{"x":26912.910128232936,"y":40407.14680398015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"37210802-7554-4c5f-8154-b89ac2cef413","savedPayload":{"position":{"x":26376.846857821794,"y":40294.52730121935},"targetPosition":{"x":26014.16962218769,"y":39725.23807529565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"37e18e8e-1d1c-42b8-a39c-ae9f169298f7","savedPayload":{"position":{"x":26014.16962218769,"y":39725.23807529565},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategyTriggerStage":{"type":"Strategy Trigger Stage","name":"New Strategy Trigger Stage","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"931c5ac7-f366-43ad-9343-c2d742858956","savedPayload":{"position":{"x":26687.495869745806,"y":39561.33780670659},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"59e8db85-8e15-4cc8-b9f8-13ee48f3ac6e","savedPayload":{"position":{"x":26849.214864537797,"y":39690.192344738694},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"383a0db7-d66b-4737-a0ad-c0fbd83141b1","savedPayload":{"position":{"x":26938.862813535343,"y":39876.373362304585},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"98dd6291-cae7-42bb-bfe0-7258b98b3e48","savedPayload":{"position":{"x":26938.876998544132,"y":40082.71045798584},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"af5e94f8-f9fa-4efd-b476-b39e73a17647","savedPayload":{"position":{"x":26849.185387212936,"y":40268.91608316282},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ff9e5f2c-39ed-4132-85ad-ea1f8bc79c77","savedPayload":{"position":{"x":26687.50401547213,"y":40397.7777899075},"targetPosition":{"x":26486.269393060757,"y":39979.54958981221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cf358488-11ec-493e-8fa1-f9e49ebc49a4","savedPayload":{"position":{"x":26065.55093774257,"y":39983.549392142086},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategyOpenStage":{"type":"Strategy Open Stage","name":"New Strategy Open Stage","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"479be369-3e1b-403b-8205-60b134ffe853","savedPayload":{"position":{"x":26717.693920004793,"y":39980.93332606477},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7f4c00d9-28f8-4217-acc8-28a0610697c4","savedPayload":{"position":{"x":26812.24405285206,"y":40091.53585481641},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"f6545702-f89a-4e30-b35b-f2b9e8e0d54a","savedPayload":{"position":{"x":26867.894644630876,"y":40225.806913052686},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"ff2a4db2-77c1-4e50-8e93-4b19e59da2f5","savedPayload":{"position":{"x":26879.32449730161,"y":40370.4781856045},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ce4c89e0-d04d-42e1-9817-74076e9e7c4c","savedPayload":{"position":{"x":26845.437183360176,"y":40511.77131515347},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"63c332fa-e15c-44ac-96eb-1dbc96754827","savedPayload":{"position":{"x":26769.525094220226,"y":40635.67512471821},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stageDefinedIn":{"type":"Stage Defined In","name":"New Stage Defined In","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d5138adf-43da-40c0-8c09-3469ce877c08","savedPayload":{"position":{"x":26659.034580917163,"y":40730.039684422314},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stageBaseAsset":{"type":"Stage Base Asset","name":"New Stage Base Asset","project":"Superalgos","targetSize":{"type":"Target Size","name":"New Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ec5ef5ba-d046-4d53-b0da-d501792676be","savedPayload":{"position":{"x":26826.478893512518,"y":41138.256932855},"targetPosition":{"x":26524.34891285769,"y":40785.485289418706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizePlaced":{"type":"Size Placed","name":"New Size Placed","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1026f6d6-b8dd-4ecf-81b9-11dfab3a552e","savedPayload":{"position":{"x":26702.337045231805,"y":41214.49772144105},"targetPosition":{"x":26524.34891285769,"y":40785.485289418706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"r"}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bb1b0ee5-f7f6-4646-aa36-0e08629a7042","savedPayload":{"position":{"x":26560.952778895356,"y":41248.45335289074},"targetPosition":{"x":26524.34891285769,"y":40785.485289418706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":""}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9e964d4d-860e-4c93-9399-f06296a74049","savedPayload":{"position":{"x":26416.108636578167,"y":41236.87746640037},"targetPosition":{"x":26524.34891285769,"y":40785.485289418706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29dd1ff0-989e-403b-8d43-788a8140c9e1","savedPayload":{"position":{"x":26524.757789851326,"y":40785.62411304567},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"stageQuotedAsset":{"type":"Stage Quoted Asset","name":"New Stage Quoted Asset","project":"Superalgos","targetSize":{"type":"Target Size","name":"New Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8727b1ed-fbd4-4b60-ae3c-05ffc4c2cd86","savedPayload":{"position":{"x":26557.84431167494,"y":41225.78149730856},"targetPosition":{"x":26379.827294671064,"y":40796.959758909245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizePlaced":{"type":"Size Placed","name":"New Size Placed","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"364ee3d9-3cdc-433c-8716-1d3b6bddd980","savedPayload":{"position":{"x":26416.34337624856,"y":41259.837503325216},"targetPosition":{"x":26379.827294671064,"y":40796.959758909245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"79c2e37f-7081-4d6e-b302-046e2ec27e79","savedPayload":{"position":{"x":26271.619267107017,"y":41248.42654433535},"targetPosition":{"x":26379.827294671064,"y":40796.959758909245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7d0d2ba9-182a-4c72-b8b1-e9ba6d970293","savedPayload":{"position":{"x":26137.208528392126,"y":41192.64709135101},"targetPosition":{"x":26379.827294671064,"y":40796.959758909245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48381545-119a-422d-b6ea-5868072f8cf4","savedPayload":{"position":{"x":26379.827294671064,"y":40796.959758909245},"targetPosition":{"x":26416.28020069989,"y":40334.21231454935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ecf3bffe-dd3d-4b29-b744-2a9a7dd3f7b7","savedPayload":{"position":{"x":26014.16962218769,"y":40241.86070898852},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategyManageStage":{"type":"Strategy Manage Stage","name":"New Strategy Manage Stage","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a1884450-68d0-41fd-a7af-f55c1fa2ac98","savedPayload":{"position":{"x":26653.34611229984,"y":40481.94883824352},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c178d9c3-ab54-474a-aecc-e26890ba579f","savedPayload":{"position":{"x":26676.542815183064,"y":40686.68350031838},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"f3b3a0fa-650a-4fdc-b080-98d71a5aeadb","savedPayload":{"position":{"x":26608.683814226788,"y":40882.07994192977},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"02e7b009-0743-424a-b019-136886535362","savedPayload":{"position":{"x":26462.27259474241,"y":41027.97374948291},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"12c10a40-ec02-4ad5-aa19-7248bc152a09","savedPayload":{"position":{"x":26267.184531852814,"y":41096.27202172908},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6c5e211f-117b-4bdb-b5d0-d4ff9137d20f","savedPayload":{"position":{"x":26062.451804990058,"y":41073.46517430623},"targetPosition":{"x":26215.35034606709,"y":40635.12820812342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"23623d89-4f23-4827-bd18-d10ed8cd91ce","savedPayload":{"position":{"x":25867.848015043488,"y":40460.84646944301},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategyCloseStage":{"type":"Strategy Close Stage","name":"New Strategy Close Stage","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"77de6af4-78af-47eb-9d05-1b45bd90f432","savedPayload":{"position":{"x":26377.413914805977,"y":40799.60720340439},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ee5c568c-cc11-4ef1-b53d-528e54090442","savedPayload":{"position":{"x":26366.07367934739,"y":40944.49497876898},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"171cfa7e-95e0-4c9d-a682-52b346e1f4d0","savedPayload":{"position":{"x":26310.464487306286,"y":41078.822255782834},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"c7c4bde9-a2cf-40db-b7a4-23d84ec57389","savedPayload":{"position":{"x":26216.078211412954,"y":41189.35921898455},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ac995378-3294-475b-9863-ec9d01a2c620","savedPayload":{"position":{"x":26092.160168265225,"y":41265.309205080266},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"36633085-158f-42dd-8d0a-22d94af1d95f","savedPayload":{"position":{"x":25950.84425131375,"y":41299.242711719635},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stageDefinedIn":{"type":"Stage Defined In","name":"New Stage Defined In","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d0add24e-c4fb-4ffa-8d5c-f80712fb2e5f","savedPayload":{"position":{"x":25806.25521648328,"y":41287.837358437435},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"stageBaseAsset":{"type":"Stage Base Asset","name":"New Stage Base Asset","project":"Superalgos","targetSize":{"type":"Target Size","name":"New Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c3c3f2eb-97a1-49e2-9274-dae429f86bb7","savedPayload":{"position":{"x":25637.34720774029,"y":41695.5661009598},"targetPosition":{"x":25673.619838039398,"y":41231.75066442703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizePlaced":{"type":"Size Placed","name":"New Size Placed","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"32c52f90-73a0-40a3-b6b5-f66ae5c9bcf7","savedPayload":{"position":{"x":25496.54472354154,"y":41660.430351022},"targetPosition":{"x":25673.619838039398,"y":41231.75066442703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0b788290-7362-4697-8426-28d8256be6e4","savedPayload":{"position":{"x":25393.437375818605,"y":41576.23507384883},"targetPosition":{"x":25673.619838039398,"y":41231.75066442703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4706a702-a16a-4382-bb31-60dd83460120","savedPayload":{"position":{"x":25277.868294695025,"y":41473.532405414866},"targetPosition":{"x":25673.619838039398,"y":41231.75066442703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ccf55d5f-01a0-4b6c-b6bd-6114040e1ea6","savedPayload":{"position":{"x":25672.049827390925,"y":41232.22793415701},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"stageQuotedAsset":{"type":"Stage Quoted Asset","name":"New Stage Quoted Asset","project":"Superalgos","targetSize":{"type":"Target Size","name":"New Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"81269885-7567-4162-bdae-9ae3aaf02300","savedPayload":{"position":{"x":26544.0087396545,"y":41256.31046163614},"targetPosition":{"x":26366.432170918735,"y":40827.357588879415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizePlaced":{"type":"Size Placed","name":"New Size Placed","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8d101afe-a76b-452a-831b-3b8c5d45d27f","savedPayload":{"position":{"x":26402.420396619702,"y":41290.453427450906},"targetPosition":{"x":26366.432170918735,"y":40827.357588879415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5560b6f6-b787-4a6c-a082-6a5a9cc16d77","savedPayload":{"position":{"x":26257.60629452864,"y":41278.89521428991},"targetPosition":{"x":26366.432170918735,"y":40827.357588879415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8211c5c6-520d-4296-81b5-888d9c8fb90d","savedPayload":{"position":{"x":26123.317311841063,"y":41222.869883809886},"targetPosition":{"x":26366.432170918735,"y":40827.357588879415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0851ffc1-4ce3-4977-9a68-61e0d1b89d32","savedPayload":{"position":{"x":25566.734918779308,"y":41143.463985161274},"targetPosition":{"x":25914.43603717759,"y":40836.245570884625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c7c28513-1e64-4ab8-8d7d-4448c0027721","savedPayload":{"position":{"x":25648.862254589007,"y":40607.1680765872},"targetPosition":{"x":25390.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9404147f-b225-4709-a1b5-394cf9903622","savedPayload":{"position":{"x":25390.55093774257,"y":39983.549392142086},"targetPosition":{"x":24940.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"last":{"type":"Last","name":"New Last","project":"Superalgos","position":{"type":"Position","name":"New Position","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7cb38892-bc86-4771-b74e-edebdc17ec3a","savedPayload":{"position":{"x":25335.215503950876,"y":40675.491426764405},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"22d3c1b5-001d-4ca3-b38e-10f70610e1be","savedPayload":{"position":{"x":25347.4862497436,"y":40752.9658665994},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"df386025-376f-453b-aa1a-2a4ab2888c83","savedPayload":{"position":{"x":25346.117280042403,"y":40831.394088254696},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5f07b765-ee12-4181-85c0-94748b03d839","savedPayload":{"position":{"x":25331.150190298922,"y":40908.3930899019},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d82fcc11-12d7-45e4-8a03-f8b2fe6bd28e","savedPayload":{"position":{"x":25303.039747961306,"y":40981.62329583934},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e026edaf-074a-4eab-9f95-85ed3bc5003c","savedPayload":{"position":{"x":25262.640074595405,"y":41048.85964331587},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"45078dd6-c7e7-42b0-b0bf-db5927a4b404","savedPayload":{"position":{"x":25211.17869383323,"y":41108.05918993665},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e5d13ca1-1c13-4c44-9d97-50fd98de5755","savedPayload":{"position":{"x":25150.219233688516,"y":41157.42318743402},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"No Stage\"\n}","project":"Superalgos","id":"20fcc6f8-e21c-4412-9ce8-833da712c35c","savedPayload":{"position":{"x":25081.61391651079,"y":41195.45173572342},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetRate":{"type":"Entry Target Rate","name":"New Entry Target Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7a3f4b4f-0ff4-424d-b35f-626ba3ea02e8","savedPayload":{"position":{"x":25007.44728014653,"y":41220.98935660845},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetRate":{"type":"Exit Target Rate","name":"New Exit Target Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cfedd274-c3ea-4048-95c8-ff040c67fefe","savedPayload":{"position":{"x":24929.972840311537,"y":41233.260102401175},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"stopLoss":{"type":"Stop Loss","name":"New Stop Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"996de0cd-fa45-4173-b6be-3b7c6fef4462","savedPayload":{"position":{"x":24930.23871359802,"y":41674.95686080506},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"611661d8-b2d9-47b8-926d-1899598a7330","savedPayload":{"position":{"x":24880.136279519767,"y":41680.98189961582},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"stopLossPhase":{"type":"Stop Loss Phase","name":"New Stop Loss Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1e86cfaa-6316-4629-99e5-c19bf7690b00","savedPayload":{"position":{"x":24829.674288716888,"y":41681.35936146408},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"stopLossPosition":{"type":"Stop Loss Position","name":"New Stop Loss Position","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"fb0a2f9c-46fc-4a94-a137-bda440bb257e","savedPayload":{"position":{"x":24779.48733000246,"y":41676.08449954809},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"initialValue":{"type":"Initial Value","name":"New Initial Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"25512e02-953b-434c-9480-78690e8c1a2b","savedPayload":{"position":{"x":24730.20653350146,"y":41665.22364831699},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"finalValue":{"type":"Final Value","name":"New Final Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f492cbaa-6bdf-4ad4-aaff-b501188371a3","savedPayload":{"position":{"x":24682.451633823282,"y":41648.913389276626},"targetPosition":{"x":24851.544618656237,"y":41231.89113269997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dde16cfc-ae9b-4f8f-a994-2023cc79e609","savedPayload":{"position":{"x":24851.544618656237,"y":41231.89113269997},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takeProfit":{"type":"Take Profit","name":"New Take Profit","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6d9c0e84-fb34-4b87-b9f3-ea95c6d2a3cf","savedPayload":{"position":{"x":24775.106615551857,"y":41666.923693268174},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"02b3db46-b6d5-488a-82ce-2587c9e38589","savedPayload":{"position":{"x":24724.71911301695,"y":41664.15700182685},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"takeProfitPhase":{"type":"Take Profit Phase","name":"New Take Profit Phase","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"019e4501-c133-464f-9fbd-8635aed9e325","savedPayload":{"position":{"x":24674.958207679752,"y":41655.76609643711},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"takeProfitPosition":{"type":"Take Profit Position","name":"New Take Profit Position","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d105ba15-57a8-4330-b1ac-d57d235bc4d0","savedPayload":{"position":{"x":24626.449671796836,"y":41641.85649760277},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"initialValue":{"type":"Initial Value","name":"New Initial Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"284b2b0e-8416-4acb-bc29-ca9530ba679b","savedPayload":{"position":{"x":24579.80352835223,"y":41622.60312659969},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"finalValue":{"type":"Final Value","name":"New Final Value","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7d28caa5-7ba5-4cec-bda5-709cc313fb37","savedPayload":{"position":{"x":24535.606379664474,"y":41598.24810573932},"targetPosition":{"x":24774.54561700903,"y":41216.924042956496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e9a86fd6-21b5-46db-b551-b4502467025e","savedPayload":{"position":{"x":24774.54561700903,"y":41216.924042956496},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionCounters":{"type":"Position Counters","name":"New Position Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"54222121-067d-4819-969b-ed18bf53b077","savedPayload":{"position":{"x":24701.315411071595,"y":41188.81360061888},"targetPosition":{"x":24799.948919099137,"y":40986.58494020157},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"6cfdc33a-accb-4fa6-99d2-cf90bc576452","savedPayload":{"position":{"x":24799.948919099137,"y":40986.58494020157},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionStatistics":{"type":"Position Statistics","name":"New Position Statistics","project":"Superalgos","profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"00306590-32f1-40b3-9d28-2a311c4907bc","savedPayload":{"position":{"x":25227.60779164675,"y":42126.23856962929},"targetPosition":{"x":25209.967804808028,"y":41789.647569589906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c97c73f5-99a0-4267-b0cd-550265dabfc9","savedPayload":{"position":{"x":25139.89056245065,"y":42119.33507397363},"targetPosition":{"x":25209.967804808028,"y":41789.647569589906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"391d41bd-a921-4273-b41e-caf758f04e01","savedPayload":{"position":{"x":25056.948981513095,"y":42089.96391972858},"targetPosition":{"x":25209.967804808028,"y":41789.647569589906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"53d86a40-81ed-41d2-a565-41b35f78a202","savedPayload":{"position":{"x":24984.435380507522,"y":42040.12670251782},"targetPosition":{"x":25209.967804808028,"y":41789.647569589906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"c691ada5-0a55-4c33-9eb7-770dcfe20fd1","savedPayload":{"position":{"x":24927.291441508078,"y":41973.219746334355},"targetPosition":{"x":25068.629623158053,"y":41881.43365796213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1d77229e-c424-492e-a2f3-04e81345d118","savedPayload":{"position":{"x":25068.629623158053,"y":41881.43365796213},"targetPosition":{"x":25209.967804808028,"y":41789.647569589906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ca4c6442-d2f1-4eff-9b4f-03f51bc26246","savedPayload":{"position":{"x":24634.079063595065,"y":41148.41392725298},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionBaseAsset":{"type":"Position Base Asset","name":"New Position Base Asset","project":"Superalgos","beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a033536f-b761-407b-bfcb-fdb4c6887af6","savedPayload":{"position":{"x":24771.59719967077,"y":42425.05577755761},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a75ae534-5dc2-4af6-883e-15221b92911c","savedPayload":{"position":{"x":24641.83506127433,"y":42397.863701891154},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetSize":{"type":"Entry Target Size","name":"New Entry Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6d04c944-0069-4834-aebf-7ad11f6e87d9","savedPayload":{"position":{"x":24520.242724796062,"y":42345.94969946568},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetSize":{"type":"Exit Target Size","name":"New Exit Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1de6e566-f52e-447a-9558-6ea566eb44e6","savedPayload":{"position":{"x":24411.17883882052,"y":42271.33251126339},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"299519f3-5af9-43f7-9d56-aebde2eb1646","savedPayload":{"position":{"x":24318.785567700066,"y":42176.86048149901},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a7b1ab74-2854-470a-8dce-318368b447d0","savedPayload":{"position":{"x":24246.589826552925,"y":42066.11018836148},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e9dbeafb-424f-4aca-8560-02f8b66d584c","savedPayload":{"position":{"x":24197.313300573507,"y":41943.02640743328},"targetPosition":{"x":24844.076014362035,"y":41755.31650097937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"75f6f07f-522c-45ed-ad5d-c5b3cb7c6c07","savedPayload":{"position":{"x":24574.879516974288,"y":41096.9525464908},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"positionQuotedAsset":{"type":"Position Quoted Asset","name":"New Position Quoted Asset","project":"Superalgos","beginBalance":{"type":"Begin Balance","name":"New Begin Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"814f50a4-a3c2-441e-9380-7adc1f50fe63","savedPayload":{"position":{"x":24868.49032922609,"y":42304.914587216226},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endBalance":{"type":"End Balance","name":"New End Balance","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c19014a7-b345-4e4b-bc3c-9b7d4e44ec00","savedPayload":{"position":{"x":24743.44851483475,"y":42262.16415150715},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"entryTargetSize":{"type":"Entry Target Size","name":"New Entry Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"eb40f77a-bf19-44c8-9842-42f81c8450d0","savedPayload":{"position":{"x":24629.149540113624,"y":42195.84070559779},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitTargetSize":{"type":"Exit Target Size","name":"New Exit Target Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2ae48a53-42f3-470f-afb7-b1201231ab67","savedPayload":{"position":{"x":24529.985850561643,"y":42108.4930223198},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"profitLoss":{"type":"Profit Loss","name":"New Profit Loss","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d89b53ac-e902-4399-871d-eb444acb4b9c","savedPayload":{"position":{"x":24449.768251156645,"y":42003.47782415643},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"ROI":{"type":"ROI","name":"New ROI","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4013695d-57f7-4d35-b926-a716130d5bd7","savedPayload":{"position":{"x":24391.579459257224,"y":41884.83078627988},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"hitFail":{"type":"Hit Fail","name":"New Hit Fail","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6a12c16d-6fd8-47b4-ae90-688b2990dd2d","savedPayload":{"position":{"x":24357.65563750342,"y":41757.11144781773},"targetPosition":{"x":25022.99565097977,"y":41648.75394581618},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d48e215-20ac-47e3-9e19-4079bd8aa08c","savedPayload":{"position":{"x":24525.51551947691,"y":41035.99308634609},"targetPosition":{"x":24898.58242712668,"y":40784.35627978425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"aafaaba0-bc67-4f12-a749-f1f1c02d3a17","savedPayload":{"position":{"x":24898.58242712668,"y":40784.35627978425},"targetPosition":{"x":24715.55093774257,"y":40373.260823845085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"strategy":{"type":"Strategy","name":"New Strategy","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"33eefe8a-94c7-4f43-b32b-cab99cf96e76","savedPayload":{"position":{"x":25819.05460590862,"y":41247.09103968442},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"19e984be-3241-4542-ad9b-b271872888ae","savedPayload":{"position":{"x":25811.310665941855,"y":41409.01268760272},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"97723b40-10c4-4bb4-b4d8-4f3e185f9662","savedPayload":{"position":{"x":25764.94348173699,"y":41564.48700699766},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"48b58adb-c7d2-4635-95cb-45ea9eeda108","savedPayload":{"position":{"x":25682.727272114127,"y":41704.30164041368},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"beginRate":{"type":"Begin Rate","name":"New Begin Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ef8bbe43-9fb3-4e9e-84d9-3725e74ee42c","savedPayload":{"position":{"x":25569.43926587677,"y":41820.34101825383},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"endRate":{"type":"End Rate","name":"New End Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"84b9ef17-7c4e-472a-ac52-46bb6ae33b64","savedPayload":{"position":{"x":25431.673759377016,"y":41905.8927256483},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"50ede031-76b4-4eb6-ae73-0d56619ed6f3","savedPayload":{"position":{"x":25277.437016919743,"y":41956.02728636982},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"24635c41-8cf9-45ba-8bbb-71c2d1e21442","savedPayload":{"position":{"x":25116.01888422149,"y":41967.77579011939},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"No Stage\"\n}","project":"Superalgos","id":"3a505e32-35a6-4c5f-a5de-f20243cfc849","savedPayload":{"position":{"x":24956.179587695362,"y":41940.50048673324},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"index":{"type":"Index","name":"New Index","config":"{\n\"initialValue\": -1\n}","project":"Superalgos","id":"442baa35-4bf6-4b8b-8d3d-387e31345ab7","savedPayload":{"position":{"x":24807.48005971809,"y":41875.67827085548},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"strategyName":{"type":"Strategy Name","name":"New Strategy Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"a1afe24b-0e40-4faa-adf1-cb0f629a19d7","savedPayload":{"position":{"x":24678.637364726557,"y":41777.191424169345},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"strategyCounters":{"type":"Strategy Counters","name":"New Strategy Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"72a7b066-ea44-44cc-bc9c-9645bb103846","savedPayload":{"position":{"x":24291.12288250862,"y":41827.88645707342},"targetPosition":{"x":24576.928650988786,"y":41650.3760506836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"89864f0c-2efe-4101-98ef-b9248a524207","savedPayload":{"position":{"x":24576.928650988786,"y":41650.3760506836},"targetPosition":{"x":25148.286684508028,"y":41295.940347947595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"886fcf92-e98b-4ba3-a5f7-29b2da8ee6c8","savedPayload":{"position":{"x":24621.99067687458,"y":40813.4272441753},"targetPosition":{"x":24715.55093774257,"y":40373.260823845085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"limitOrders":{"type":"Limit Order","name":"New Limit Order","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5c4a87d7-7e76-4cb4-b02f-a5b96faff9c9","savedPayload":{"position":{"x":24615.668963572203,"y":41058.41930620631},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"683fdd1f-306a-4e4e-bb90-a6152496f5be","savedPayload":{"position":{"x":24541.106641262882,"y":41094.975492001075},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"014b85ce-5670-4737-9ffe-e475a31abc7e","savedPayload":{"position":{"x":24461.096702669864,"y":41117.20844849275},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7788884e-d628-4828-9f3c-d03b8ea0b2ed","savedPayload":{"position":{"x":24378.36379029058,"y":41124.3610590135},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0f9906dc-ddff-4b6e-8a82-558d6c67e16e","savedPayload":{"position":{"x":24295.72527422892,"y":41116.18974999066},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"99919a0d-bd78-4a50-946a-bc033bfca7a0","savedPayload":{"position":{"x":24215.99531003539,"y":41092.97278555261},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"b88600a1-1a4f-49e8-aef5-9f66dd632842","savedPayload":{"position":{"x":24141.889006015044,"y":41055.500791577586},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"e161b4f7-99f0-43ee-9310-c06cab1b1ab0","savedPayload":{"position":{"x":24075.929963470586,"y":41005.04983187771},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"93510545-cf4c-4d2f-bdac-f5100e113f0c","savedPayload":{"position":{"x":24020.36433848671,"y":40943.337953376315},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"1ce311ec-e3ec-44a1-85c0-5562d626a602","savedPayload":{"position":{"x":23977.084351778623,"y":40872.46668008051},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6678ca6b-6f7d-4fb8-ad26-becd97592a80","savedPayload":{"position":{"x":23947.56385138505,"y":40794.84944820168},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6983f5e7-d2a4-43b2-996a-2d07bf022251","savedPayload":{"position":{"x":23932.808122540944,"y":40713.12941947984},"targetPosition":{"x":24156.971944409343,"y":40693.749508093206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"b159cae7-c3d8-4bc5-bccf-217d5ed764f5","savedPayload":{"position":{"x":24156.971944409343,"y":40693.749508093206},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"84601506-b411-4098-b89b-a0fc25dab789","savedPayload":{"position":{"x":23933.319653894563,"y":40630.08947148074},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"98690132-d002-4a52-a440-e7bbeffa67b5","savedPayload":{"position":{"x":23798.673840035168,"y":40715.89743856113},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b1d09bc5-fb51-49ec-ac2c-b717d549e76d","savedPayload":{"position":{"x":23740.96272532097,"y":40634.06633589641},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ecd9ad56-cd63-469b-91ae-adba390bf171","savedPayload":{"position":{"x":23724.47199243181,"y":40535.299145728524},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c8d6b34b-b656-4ef7-aeca-3faa55f2408f","savedPayload":{"position":{"x":23752.46783326196,"y":40439.15792137033},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"843d0988-74dd-4cef-8789-3f8cfaba0288","savedPayload":{"position":{"x":23819.40532818855,"y":40364.6846114007},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e9960576-d623-492b-b881-f7b5ec209bf3","savedPayload":{"position":{"x":23912.02668540687,"y":40326.629568214325},"targetPosition":{"x":23949.08102585916,"y":40548.55743003804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6bd8cfef-5ca4-4c17-b492-5f377b2da318","savedPayload":{"position":{"x":23949.08102585916,"y":40548.55743003804},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"41aa065e-0d3e-4c56-bc5a-71f492deadfa","savedPayload":{"position":{"x":23800.960640274487,"y":40608.163250043945},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a3d7adcb-33e5-4707-bc03-12fc7c5f1a62","savedPayload":{"position":{"x":23759.268592614695,"y":40517.12108790566},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b998c6bd-9e7e-4950-9b74-c58a4f613b4c","savedPayload":{"position":{"x":23761.20706936003,"y":40417.00543262244},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e1810107-ca1f-4508-98a9-ae31ed8cb55a","savedPayload":{"position":{"x":23806.39213141721,"y":40327.64541756107},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"314e7ea2-53a9-4e00-a530-77667403bbf1","savedPayload":{"position":{"x":23885.8743230874,"y":40266.739889633114},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1dcd1b89-604e-4b52-b530-20d94f682e2f","savedPayload":{"position":{"x":23983.911221525206,"y":40246.35193560198},"targetPosition":{"x":23979.555503816166,"y":40471.309771036176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ececab38-e728-45bf-bab7-0ec18ab1f00c","savedPayload":{"position":{"x":23979.555503816166,"y":40471.309771036176},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"90fb70dd-b116-4dad-b100-10176078d976","savedPayload":{"position":{"x":23808.069542488083,"y":40465.21267776605},"targetPosition":{"x":24023.705315968862,"y":40400.977070854104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"85f98313-ef05-4b22-abd4-019c5a150669","savedPayload":{"position":{"x":23811.495568212824,"y":40326.19724097118},"targetPosition":{"x":24023.705315968862,"y":40400.977070854104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"shortcutKey":""}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"688b2648-42c0-448d-ba4d-48c4edea9317","savedPayload":{"position":{"x":23895.97850483633,"y":40215.74515751865},"targetPosition":{"x":24023.705315968862,"y":40400.977070854104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"1f12b4f2-a850-4396-9f03-00b04c39e43a","savedPayload":{"position":{"x":24029.24874203782,"y":40176.04536915908},"targetPosition":{"x":24026.47702900334,"y":40288.51122000659},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"46b38d34-1481-42cf-91b6-e8f969d5667d","savedPayload":{"position":{"x":24026.47702900334,"y":40288.51122000659},"targetPosition":{"x":24023.705315968862,"y":40400.977070854104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ddd03e8-4355-4f1f-b9c0-1eaef13de32e","savedPayload":{"position":{"x":24023.705315968862,"y":40400.977070854104},"targetPosition":{"x":24381.13576627774,"y":40674.36959670657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0f344181-126b-4235-97c5-92b1f8caa20d","savedPayload":{"position":{"x":24381.13576627774,"y":40674.36959670657},"targetPosition":{"x":24715.55093774257,"y":40373.260823845085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"marketOrders":{"type":"Market Order","name":"New Market Order","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4e19c5cd-06c8-41aa-88b6-c3e53500f2ce","savedPayload":{"position":{"x":24232.018671792004,"y":40868.85652852827},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"8638e802-8f3e-4eef-806a-689732daa685","savedPayload":{"position":{"x":24150.209299013477,"y":40854.60447065566},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"34cfab6e-fa47-41d1-9c7c-fc50251db9d6","savedPayload":{"position":{"x":24072.411695032162,"y":40825.56264835082},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"746e3b6d-1121-456a-a236-95f0e8f02bc9","savedPayload":{"position":{"x":24001.275163943697,"y":40782.7200460405},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"10b91c50-0ff3-4746-89f3-ea5a2bf10b78","savedPayload":{"position":{"x":23939.222174995433,"y":40727.535617162364},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b9ff8ac5-6b93-4268-95fd-3e64a9d8ded1","savedPayload":{"position":{"x":23888.36586830165,"y":40661.88860125541},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"b6040957-3530-47b9-8798-1be2aa79ba91","savedPayload":{"position":{"x":23850.438094391386,"y":40588.014528711436},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"d2122053-2ec2-4879-a1eb-a05af04f6a37","savedPayload":{"position":{"x":23826.730438115806,"y":40508.42909246875},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"7c7100ce-fabe-4f5b-a875-0f73ec1bea7a","savedPayload":{"position":{"x":23818.050235275172,"y":40425.84247910639},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"a78a397d-2efc-41d9-b887-b3673c4a6caf","savedPayload":{"position":{"x":23824.693079766468,"y":40343.06707669066},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6202ca96-5782-40e8-9a43-5187eab3825c","savedPayload":{"position":{"x":23846.432757487757,"y":40262.92170227271},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e7cbae6-c274-40d6-a41f-089e5fdc39f5","savedPayload":{"position":{"x":23882.528949788106,"y":40188.135610454534},"targetPosition":{"x":24075.272517307476,"y":40304.21712138503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"f6d8f35f-224e-4135-8685-6341d3e128c9","savedPayload":{"position":{"x":24075.272517307476,"y":40304.21712138503},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"1f66bae9-8ab5-4096-baf0-f03304ae3761","savedPayload":{"position":{"x":23931.752444131344,"y":40121.25555189699},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"be9f87f1-2617-4b74-a034-1ea4061af8dd","savedPayload":{"position":{"x":23781.120581905147,"y":39987.26350720631},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"05925960-9b83-4221-a42f-6b1b3101f37f","savedPayload":{"position":{"x":23803.618350468754,"y":39942.18136771351},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f2f1aca9-c603-4c63-ae7a-ceec8bcf539f","savedPayload":{"position":{"x":23835.58377278791,"y":39903.2357560538},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"14a0e462-f77a-4d50-a9ec-2f194bf6a422","savedPayload":{"position":{"x":23875.413969111552,"y":39872.379567818534},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b5cd9cdf-7786-4d90-bfab-8fd9f2c6b55e","savedPayload":{"position":{"x":23921.1116870796,"y":39851.16006113003},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"561f0374-fada-47b9-87bb-8552ec85d183","savedPayload":{"position":{"x":23970.385452296076,"y":39840.641270658605},"targetPosition":{"x":23992.426993454683,"y":40064.55904678045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6078ba38-48d9-4123-9464-b671acb313df","savedPayload":{"position":{"x":23992.426993454683,"y":40064.55904678045},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a74f0e67-f759-4263-a1a3-25a069a8d57d","savedPayload":{"position":{"x":23868.980898534206,"y":39905.169939226},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e40ea964-d259-4779-acbc-6133cbbdf983","savedPayload":{"position":{"x":23899.379421229092,"y":39864.989362953886},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"66ba7df9-f806-4985-b1cd-d6ce3a36bf0e","savedPayload":{"position":{"x":23937.9568088524,"y":39832.58050527961},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bd853d02-c376-4235-9b0a-f323af11a6a8","savedPayload":{"position":{"x":23982.778630103556,"y":39809.56848165457},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"195c9857-33af-4dfa-b5a9-cafc956b6b67","savedPayload":{"position":{"x":24031.597331705405,"y":39797.10721103315},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"beee6763-fc4f-42a5-acfa-b28a7d4c7091","savedPayload":{"position":{"x":24081.96494011048,"y":39795.82155355807},"targetPosition":{"x":24062.48639875202,"y":40019.97682658671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e06730c6-fa37-4125-b497-79711fc685cb","savedPayload":{"position":{"x":24062.48639875202,"y":40019.97682658671},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ce8ba99f-24ae-4415-8bec-0ff5e4c93c28","savedPayload":{"position":{"x":28524.75903026903,"y":38599.58524216726},"targetPosition":{"x":28156.64229933887,"y":38776.66430717461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2440e044-a31c-47ff-834f-e7079a5f9d2e","savedPayload":{"position":{"x":28561.50015320121,"y":38722.596268130015},"targetPosition":{"x":28156.64229933887,"y":38776.66430717461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"056b2fe1-a3af-4f7b-a135-47b18de2b6a4","savedPayload":{"position":{"x":28558.89456885485,"y":38851.16412902759},"targetPosition":{"x":28156.64229933887,"y":38776.66430717461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"0b0697e8-0423-45fe-b3bb-fc7c6214e514","savedPayload":{"position":{"x":28596.976363657457,"y":39015.912011659995},"targetPosition":{"x":28417.6837892345,"y":38918.302149310555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0074bb8-e239-43eb-8371-4de534b53651","savedPayload":{"position":{"x":28417.6837892345,"y":38918.302149310555},"targetPosition":{"x":28156.64229933887,"y":38776.66430717461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"37e193a3-bd64-4a96-a0f4-697cd09d3590","savedPayload":{"position":{"x":24139.54487100294,"y":39989.02708535397},"targetPosition":{"x":24268.016084826846,"y":40420.29863231553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1eb34afa-52d4-486e-83ec-e52dfaf6448a","savedPayload":{"position":{"x":24268.016084826846,"y":40420.29863231553},"targetPosition":{"x":24715.55093774257,"y":40373.260823845085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"44fbb36a-4652-4bf8-badd-47c574fe7774","savedPayload":{"position":{"x":24715.55093774257,"y":40373.260823845085},"targetPosition":{"x":24940.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeOrders":{"type":"Exchange Orders","name":"New Exchange Orders","project":"Superalgos","marketBuyOrders":{"type":"Market Buy Orders","name":"New Market Buy Orders","project":"Superalgos","marketOrders":[{"type":"Market Order","name":"Market Buy Order #1","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3cd2b72e-afd0-4552-a6fe-01c7a47f3501","savedPayload":{"position":{"x":23807.93755889947,"y":40477.93896980991},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"913dc1ca-9313-4039-b832-bb4f08c75aef","savedPayload":{"position":{"x":23684.62336115574,"y":40495.527930775956},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"63f4f9e6-563e-4fc7-842c-08cf6937be11","savedPayload":{"position":{"x":23560.176858868148,"y":40490.15848188161},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fded8848-e5f2-448a-bb2a-8cbb6dae639e","savedPayload":{"position":{"x":23438.83592841497,"y":40462.01347326904},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b51ba6d2-3ed2-49b2-bbc2-de3930bb877d","savedPayload":{"position":{"x":23324.732689650387,"y":40412.051349450325},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9ddd0b24-7dfa-499d-8481-8d4e1d182db5","savedPayload":{"position":{"x":23221.75279151877,"y":40341.973510629155},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"c38e8adb-0f45-403c-9c6f-7647bb881f4d","savedPayload":{"position":{"x":23133.40309094022,"y":40254.16637355747},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"e6caddd6-d5f5-4c33-b742-6b49a20840dd","savedPayload":{"position":{"x":23062.692231004152,"y":40151.620104975205},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"0a3420c6-4177-4f3d-916c-a148ca850968","savedPayload":{"position":{"x":23012.028185237363,"y":40037.82679506823},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"fc76ed8e-8212-497d-9fc0-f0e032bb4956","savedPayload":{"position":{"x":22983.136256953614,"y":39916.66153852539},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e8c6e52e-ba3b-45e9-9bb4-07c022209252","savedPayload":{"position":{"x":22977.000326118556,"y":39792.25047283656},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"18a54f80-526e-4059-88e0-d45e65990c67","savedPayload":{"position":{"x":22993.829344497542,"y":39668.83026762913},"targetPosition":{"x":23322.601122707816,"y":39745.08882683697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"ff67287a-0a4e-4551-aa03-041288fc28cb","savedPayload":{"position":{"x":23322.601122707816,"y":39745.08882683697},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"49e850c8-3501-4d41-899e-96224d1ee461","savedPayload":{"position":{"x":23033.050220053865,"y":39550.60384996522},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1d33a196-fae3-4a34-a22f-56891d939f0d","savedPayload":{"position":{"x":22756.052370475314,"y":39429.274547096415},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d7a3341e-e7d6-4363-bab2-f45927dc7ba7","savedPayload":{"position":{"x":22767.250623698008,"y":39354.53276406417},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"57d4e7ab-d804-40f6-a3f2-342b11da6c71","savedPayload":{"position":{"x":22794.799724698383,"y":39284.15675934559},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ae1e20cb-745b-4817-9ae3-8ed9c126034f","savedPayload":{"position":{"x":22837.31824651726,"y":39221.67547968187},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9d44c42c-ba10-4660-b3c1-44c26373f1f2","savedPayload":{"position":{"x":22892.674132928754,"y":39170.22199733445},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e9d13246-5f13-4252-ba8a-bf842424cd98","savedPayload":{"position":{"x":22958.091608642135,"y":39132.37640475926},"targetPosition":{"x":23093.3273329107,"y":39441.597278701425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9b9934b9-3d46-442c-a5c2-47534e7861bb","savedPayload":{"position":{"x":23093.3273329107,"y":39441.597278701425},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1a093948-32c1-461a-8f5a-386ee7dbe1f3","savedPayload":{"position":{"x":22843.34009900386,"y":39271.4356164817},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c374a797-47e4-4d35-9340-9627dbae21da","savedPayload":{"position":{"x":22868.081447278142,"y":39200.02412796865},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f40cc3e1-35f3-4e54-a8ef-dea041b8f86a","savedPayload":{"position":{"x":22908.093029414882,"y":39135.908542492165},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"11b292ec-138c-4b98-a479-292abd79eba7","savedPayload":{"position":{"x":22961.368497611933,"y":39082.30388323139},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"05cf852d-17ca-4143-81ef-2b66dc27ae64","savedPayload":{"position":{"x":23025.23639743491,"y":39041.89811163524},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3e0af072-76d7-432a-8b37-2d7d1197205b","savedPayload":{"position":{"x":23096.49412569756,"y":39016.71734181134},"targetPosition":{"x":23172.60801828414,"y":39345.52264188316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1b6e6937-8c99-46a5-99bd-f1c19c4aa6e8","savedPayload":{"position":{"x":23172.60801828414,"y":39345.52264188316},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f67adf1e-206a-4864-95e8-e2ee7a7c8fd2","savedPayload":{"position":{"x":25199.17766486532,"y":37822.4049851995},"targetPosition":{"x":25005.075592454497,"y":38182.119858144506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a44a1653-e899-4fb3-b8c6-ab452221676b","savedPayload":{"position":{"x":25301.144790651415,"y":37900.18397301675},"targetPosition":{"x":25005.075592454497,"y":38182.119858144506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"feb097b5-2ac2-4b21-816b-074bbe292378","savedPayload":{"position":{"x":25373.952021751153,"y":38005.77059365839},"targetPosition":{"x":25005.075592454497,"y":38182.119858144506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"cd91cb19-8193-4a92-8238-0ae05b0abfe7","savedPayload":{"position":{"x":25477.67498328942,"y":38119.869471055754},"targetPosition":{"x":25274.650696604815,"y":38146.47734443928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"00dfb443-2533-489f-a0c6-a1110ed94c7c","savedPayload":{"position":{"x":25274.650696604815,"y":38146.47734443928},"targetPosition":{"x":25005.075592454497,"y":38182.119858144506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ef52d686-c0de-4467-9620-591012e62d45","savedPayload":{"position":{"x":23268.19246752049,"y":39265.65164603844},"targetPosition":{"x":23651.37290091809,"y":39821.34738604481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3","savedPayload":{"position":{"x":23651.37290091809,"y":39821.34738604481},"targetPosition":{"x":24268.016084826846,"y":39546.800151968644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Market Order","name":"Market Buy Order #2","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c3e4801b-1175-4110-9dad-7c77890b5251","savedPayload":{"position":{"x":23231.586951162804,"y":39613.92986970048},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"c79c56d6-c202-40fb-a179-970b96ffb32c","savedPayload":{"position":{"x":23154.69736526818,"y":39515.93112229013},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"22593cb5-8c92-48a4-88fc-aba10a5d8d9a","savedPayload":{"position":{"x":23097.124193271207,"y":39405.47256544979},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1e28e08a-bc3f-49bf-9f57-1fc67241081d","savedPayload":{"position":{"x":23060.828020492834,"y":39286.31573285221},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a2a427a2-c57b-451e-b844-97b983781bdf","savedPayload":{"position":{"x":23047.044869564572,"y":39162.51836751864},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3f8c5c95-f622-4dce-a111-ba139e53f34d","savedPayload":{"position":{"x":23056.24410916021,"y":39038.29624024694},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"925cb3cc-166a-4db5-aed8-217d3634c1e2","savedPayload":{"position":{"x":23088.112470208594,"y":38917.87958659333},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"66821726-82b4-43c9-9b52-c01ae5a6e421","savedPayload":{"position":{"x":23141.564713896107,"y":38805.369051274116},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"2b460638-d6e8-431f-a14e-41d40cab2494","savedPayload":{"position":{"x":23214.780588172867,"y":38704.59604562809},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b49fd1ee-ea92-4687-9a54-ac215d966725","savedPayload":{"position":{"x":23305.266814253147,"y":38618.992273498625},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"a50280fa-32e2-45db-b575-1737b08a69a4","savedPayload":{"position":{"x":23409.941992234046,"y":38551.472868675184},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8f794d98-218a-4f47-b59d-7582b04f21c6","savedPayload":{"position":{"x":23525.241534473465,"y":38504.337123508434},"targetPosition":{"x":23623.58557404861,"y":38827.19111508983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"eabd1631-8836-47db-98b2-b99d794e125b","savedPayload":{"position":{"x":23623.58557404861,"y":38827.19111508983},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"5afe9f6b-f429-46eb-8440-3380f1f6d449","savedPayload":{"position":{"x":23647.239053346995,"y":38479.19018926692},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c0e36342-f7ec-4fd0-a2bd-e1ca2349fece","savedPayload":{"position":{"x":23613.814387065562,"y":38178.63836330383},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8378ccb4-daee-4ea7-bbde-a05b19a815db","savedPayload":{"position":{"x":23684.141796506978,"y":38150.96544355657},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f4beed06-e887-4746-ae63-36c076452b2b","savedPayload":{"position":{"x":23758.863754910308,"y":38139.63566251503},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c5548fa3-6d39-4b8b-9b83-479b33dce985","savedPayload":{"position":{"x":23834.23339126949,"y":38145.21714270968},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"acfb692f-cc8b-4385-b7e9-f69596075365","savedPayload":{"position":{"x":23906.471357301274,"y":38167.43000541732},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b1824d29-63f5-4245-8d82-50acbe1c7e6a","savedPayload":{"position":{"x":23971.955339749355,"y":38205.16040494897},"targetPosition":{"x":23771.780069669298,"y":38476.88841463582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"98802c83-3a16-4dff-b385-591e59949e3f","savedPayload":{"position":{"x":23771.780069669298,"y":38476.88841463582},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3e9d6b2d-5df3-4dac-a271-a8b6581c4305","savedPayload":{"position":{"x":23794.150774948346,"y":38175.312288340836},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4225b562-96e6-41f8-80ba-ff36fd97bbff","savedPayload":{"position":{"x":23868.365612259844,"y":38161.033180213715},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0200f5ed-e48e-4c8c-9bc1-41fc0643db8c","savedPayload":{"position":{"x":23943.89712912937,"y":38163.6264340515},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4522d317-dc29-48c7-9019-f56dc19f86da","savedPayload":{"position":{"x":24016.957859908933,"y":38182.962013278266},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4d5524ae-0dbd-482a-bfbb-cfb357a74cbe","savedPayload":{"position":{"x":24083.8842344822,"y":38218.070351213246},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2bc7e9dd-86ec-482b-a5f7-346a7d06b4fd","savedPayload":{"position":{"x":24141.32028496787,"y":38267.19096919272},"targetPosition":{"x":23894.6234885,"y":38497.51018378953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e3fdab87-ca49-479a-8a43-d4dde949fbe3","savedPayload":{"position":{"x":23894.6234885,"y":38497.51018378953},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"238be086-0999-4feb-b230-b480537fd34f","savedPayload":{"position":{"x":24002.231744493216,"y":38202.98290543343},"targetPosition":{"x":24011.586024545268,"y":38540.35324711259},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c99d1a46-a434-4cbe-a22e-e58ed5f50ba6","savedPayload":{"position":{"x":24106.942744523454,"y":38216.60435374768},"targetPosition":{"x":24011.586024545268,"y":38540.35324711259},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"305db308-40c2-446b-80d6-2dcfd0b2eac1","savedPayload":{"position":{"x":24202.319564412894,"y":38261.91659943566},"targetPosition":{"x":24011.586024545268,"y":38540.35324711259},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"6cd597c1-85da-4694-ae90-6466c7e32cfa","savedPayload":{"position":{"x":24279.02605650137,"y":38334.48416418046},"targetPosition":{"x":24145.30604052332,"y":38437.41870564652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7474b7a-3366-4e8f-8112-c698e76bdda8","savedPayload":{"position":{"x":24145.30604052332,"y":38437.41870564652},"targetPosition":{"x":24011.586024545268,"y":38540.35324711259},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"caef76b7-9fa7-4d01-bddb-6fe620392bce","savedPayload":{"position":{"x":24011.586024545268,"y":38540.35324711259},"targetPosition":{"x":23721.929613623757,"y":39150.04510667123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f9d549de-24f3-4dc8-8c09-33d6b301280d","savedPayload":{"position":{"x":23721.929613623757,"y":39150.04510667123},"targetPosition":{"x":24268.016084826846,"y":39546.800151968644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a5823c2e-46a8-4824-a267-5606466e19db","savedPayload":{"position":{"x":24268.016084826846,"y":39546.800151968644},"targetPosition":{"x":24715.55093774257,"y":39593.83796043909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"marketSellOrders":{"type":"Market Sell Orders","name":"New Market Sell Orders","project":"Superalgos","marketOrders":[{"type":"Market Order","name":"Market Sell Order #1","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9e62e429-ace2-469c-8d43-ddb407499fa5","savedPayload":{"position":{"x":23461.61475509137,"y":39775.60894289682},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"4c89aeee-df1f-4f7e-b049-877f473d8c4e","savedPayload":{"position":{"x":23351.512941609995,"y":39717.356444399695},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"fbfd7a04-bfa3-4e4e-a607-42a7d3ba92b5","savedPayload":{"position":{"x":23253.989689241847,"y":39639.86465024972},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"99a80e5b-0bde-4f49-a81c-a0e88b2c118f","savedPayload":{"position":{"x":23172.36603538007,"y":39545.772450555494},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"90744b76-8917-4e5e-9313-87e7487efcfc","savedPayload":{"position":{"x":23109.421575660148,"y":39438.284042326464},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d1d02b18-2e2a-4646-8b0d-f7144bcdd945","savedPayload":{"position":{"x":23067.299808164284,"y":39321.05981438672},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"63a268b6-7f8b-49e9-b420-37a08d4b9bbe","savedPayload":{"position":{"x":23047.435139165056,"y":39198.09169722379},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"db3e6d10-ee2b-49da-ac75-71cc0a2246cc","savedPayload":{"position":{"x":23050.50403614019,"y":39073.56722258366},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"853d913d-eedd-4349-9a40-a52f690668eb","savedPayload":{"position":{"x":23076.401991483937,"y":38951.72692209955},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"dd180ddb-0851-47a9-a979-3ce5da36b223","savedPayload":{"position":{"x":23124.247081388232,"y":38836.71992107312},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"f3515c3c-7ebe-408b-ae1a-c80acb939e37","savedPayload":{"position":{"x":23192.409998700252,"y":38732.46264498862},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e4dc4641-78f4-446a-8e3e-7932afb51ce0","savedPayload":{"position":{"x":23278.569537023337,"y":38642.50545034029},"targetPosition":{"x":23499.72783640288,"y":38897.44712330795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"86d6ac94-c819-4724-aee1-4d0c61298b77","savedPayload":{"position":{"x":23499.72783640288,"y":38897.44712330795},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"a763d22c-0245-42ab-a0d2-b06233dc552a","savedPayload":{"position":{"x":23379.79163661688,"y":38569.911721500124},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6699cd68-35c8-4f90-8850-6ab7cfe2016a","savedPayload":{"position":{"x":23227.01124379973,"y":38308.93900266459},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c7b98e92-df2c-4e5a-9940-0d10a5ea930a","savedPayload":{"position":{"x":23280.002938760597,"y":38255.05379809736},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8771390c-321e-457b-bf9d-bc2d341bf4dc","savedPayload":{"position":{"x":23343.6566073385,"y":38214.31136956576},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9d9efc68-ba3e-4c36-8f56-0beac18d35e0","savedPayload":{"position":{"x":23414.78038879637,"y":38188.754712561924},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"85c030de-a925-45ae-a811-e53e8f4f75be","savedPayload":{"position":{"x":23489.807839744863,"y":38179.66534458334},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"75d5db30-1378-4aa3-8f50-fa1f973b6b38","savedPayload":{"position":{"x":23564.976770506066,"y":38187.49904449435},"targetPosition":{"x":23492.629300281744,"y":38517.15355083719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bf184263-2b70-4934-a1ef-a3d9881f9171","savedPayload":{"position":{"x":23492.629300281744,"y":38517.15355083719},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cad488ae-7e5d-4600-a796-22708671364c","savedPayload":{"position":{"x":23390.403895232652,"y":38232.55106495851},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5de83a17-4069-4cab-82a9-c2faa0aed4f4","savedPayload":{"position":{"x":23452.39468624252,"y":38189.3205567953},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fb23eb72-a33c-4c80-8b54-ade1b5eed5bd","savedPayload":{"position":{"x":23522.45093174815,"y":38160.96817644138},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"306baf20-5d8a-4614-8ecd-5adc8738ab11","savedPayload":{"position":{"x":23597.05971907049,"y":38148.91563063695},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4b930ee3-6684-4a26-878f-43dd26fbbdd7","savedPayload":{"position":{"x":23672.47985207403,"y":38153.76728435566},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0eb0f6d9-d10a-485a-8b34-f0788a9f31d7","savedPayload":{"position":{"x":23744.929450362928,"y":38175.27985542134},"targetPosition":{"x":23613.239976715682,"y":38486.027554576955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"96cb5ac0-a52a-4c5c-b613-357434c50a9f","savedPayload":{"position":{"x":23613.239976715682,"y":38486.027554576955},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5647419a-17f5-44d8-85b4-e57287adeb8d","savedPayload":{"position":{"x":26677.060795249614,"y":38098.910326331024},"targetPosition":{"x":26308.944064319454,"y":38275.98939133837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cc5b4f99-1d79-47ea-b554-91f19187e628","savedPayload":{"position":{"x":26713.801918181794,"y":38221.92135229378},"targetPosition":{"x":26308.944064319454,"y":38275.98939133837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"50282e17-b223-4318-a93a-f001a8756b9f","savedPayload":{"position":{"x":26711.196333835433,"y":38350.48921319135},"targetPosition":{"x":26308.944064319454,"y":38275.98939133837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"9a913ce3-65eb-46f2-ac68-b877e8fc52fc","savedPayload":{"position":{"x":26749.27812863804,"y":38515.23709582376},"targetPosition":{"x":26569.985554215084,"y":38417.62723347432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1684af0b-83de-4fae-b7c1-7e177c983952","savedPayload":{"position":{"x":26569.985554215084,"y":38417.62723347432},"targetPosition":{"x":26308.944064319454,"y":38275.98939133837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b9099572-9359-4b04-9cf0-d10e5905fa37","savedPayload":{"position":{"x":23737.516413989302,"y":38477.59369119055},"targetPosition":{"x":23720.88613578242,"y":39152.38879627561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604","savedPayload":{"position":{"x":23720.88613578242,"y":39152.38879627561},"targetPosition":{"x":24381.13576627774,"y":39292.7291875776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Market Order","name":"Market Sell Order #2","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0b81731f-f5aa-4385-8087-883b0053f35e","savedPayload":{"position":{"x":23503.189125604902,"y":38737.84051023626},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e4da00c4-a47d-44a2-8af1-64e863d1e368","savedPayload":{"position":{"x":23498.586362396632,"y":38613.36329351009},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"ba273d24-bcbe-40ac-bc04-e9216cfa4744","savedPayload":{"position":{"x":23516.934598531276,"y":38490.159782424606},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d4cc6bef-c37c-40b1-a881-4e8bddadda43","savedPayload":{"position":{"x":23557.609006833543,"y":38372.42552478349},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"34645282-c5b4-4fdf-ad2e-567903e0dbb2","savedPayload":{"position":{"x":23619.22446911228,"y":38264.16981952403},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4926adb9-5dfa-459d-bb6c-5f2929ec7c73","savedPayload":{"position":{"x":23699.68274469918,"y":38169.07918485044},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"f7a4d950-f67d-423e-ab99-ba43888bfc8e","savedPayload":{"position":{"x":23796.243923518203,"y":38090.39181827787},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"1eb65c1b-c8bf-458a-80f2-02054c23ccc6","savedPayload":{"position":{"x":23905.619730437036,"y":38030.78732369987},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"a3372580-6256-41e4-993e-ea10cfa6c845","savedPayload":{"position":{"x":24024.085503532875,"y":37992.295460691574},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"33431686-26aa-485e-a0de-3981bb35dff8","savedPayload":{"position":{"x":24147.60703298698,"y":37976.22702348183},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"12ec632d-d6d6-4841-b2bc-268353c80597","savedPayload":{"position":{"x":24271.97794126153,"y":37983.129203427845},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9b62a3d1-92a5-4d06-bdad-ffbf6f1bb330","savedPayload":{"position":{"x":24392.96292624171,"y":38012.76695506982},"targetPosition":{"x":24282.75611065818,"y":38331.766497074095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"33fe6333-e5ba-46ae-ba6e-eb72db5a18c2","savedPayload":{"position":{"x":24282.75611065818,"y":38331.766497074095},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"be48c3db-3bc7-4105-b883-ad0ed50819b2","savedPayload":{"position":{"x":24506.4419893695,"y":38064.13100032214},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5cc67466-ca02-4eb2-b137-0390110f1a17","savedPayload":{"position":{"x":24656.060797167193,"y":37801.33293952455},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0848e446-525d-4e6a-a074-5926230c2df0","savedPayload":{"position":{"x":24729.222600690973,"y":37820.28249126665},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"92451f64-da38-4044-8f2c-cc95258a60f3","savedPayload":{"position":{"x":24796.333413100165,"y":37855.03697103338},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"17b37fa1-aaec-4185-8a02-231691462c8d","savedPayload":{"position":{"x":24854.02801803022,"y":37903.8536440872},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"39d8b4de-b9a4-4a7a-a3b3-949c3baef162","savedPayload":{"position":{"x":24899.413367078265,"y":37964.28463860049},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"911090ca-bba6-45f4-9c5c-7af3945cf131","savedPayload":{"position":{"x":24930.21364933031,"y":38033.299692170505},"targetPosition":{"x":24608.550737253234,"y":38135.472198228126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cbd98498-37d3-4b4f-b797-392f4405f28f","savedPayload":{"position":{"x":24608.550737253234,"y":38135.472198228126},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"023905b1-a2a1-4df6-a128-1da70299913a","savedPayload":{"position":{"x":24803.911017479822,"y":37904.64115760412},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dcd46554-00ff-4808-a75c-607b31e6114c","savedPayload":{"position":{"x":24872.345131272607,"y":37936.71150333775},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a58bd9db-f888-4678-8291-c8b7f2d3185d","savedPayload":{"position":{"x":24931.92713566967,"y":37983.20580146243},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0af2b201-7c59-4052-9110-dd1bfdb02206","savedPayload":{"position":{"x":24979.669340177763,"y":38041.7926337269},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e05bef30-b5dd-4475-9cf3-5537ce25f702","savedPayload":{"position":{"x":25013.17775130876,"y":38109.53421172413},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ec7a47e6-2858-4ef5-849c-3838dd074290","savedPayload":{"position":{"x":25030.772117409615,"y":38183.03368986913},"targetPosition":{"x":24695.811978949663,"y":38224.361109857426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d60208af-cf08-4b32-8772-9daa1b7479cf","savedPayload":{"position":{"x":24695.811978949663,"y":38224.361109857426},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ac0449d3-86dc-45b2-8f93-c7573015ffbc","savedPayload":{"position":{"x":26893.358806797398,"y":37922.362945650595},"targetPosition":{"x":26525.242075867238,"y":38099.442010657935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a82976da-584f-4845-beb9-3c1bdd08d034","savedPayload":{"position":{"x":26930.09992972958,"y":38045.37397161334},"targetPosition":{"x":26525.242075867238,"y":38099.442010657935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"585d2e1b-0ee9-4554-a0d3-7aa6797060b3","savedPayload":{"position":{"x":26927.494345383217,"y":38173.941832510915},"targetPosition":{"x":26525.242075867238,"y":38099.442010657935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"ce0d0c85-9440-475d-834b-d44a7a8ad44f","savedPayload":{"position":{"x":26965.576140185825,"y":38338.68971514332},"targetPosition":{"x":26786.283565762868,"y":38241.07985279389},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b43d17da-95d3-4286-9f23-60d4b04fae2e","savedPayload":{"position":{"x":26786.283565762868,"y":38241.07985279389},"targetPosition":{"x":26525.242075867238,"y":38099.442010657935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"78c636c0-cedc-4e63-a357-68f172f3a408","savedPayload":{"position":{"x":24765.25413753115,"y":38327.770729935},"targetPosition":{"x":24172.549295074652,"y":38650.76603907837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d5d8b542-53f6-4cae-8f16-197523dd0dab","savedPayload":{"position":{"x":24172.549295074652,"y":38650.76603907837},"targetPosition":{"x":24381.13576627774,"y":39292.7291875776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0cb8959b-8c1b-45f2-aa32-11c1efa63cc1","savedPayload":{"position":{"x":24381.13576627774,"y":39292.7291875776},"targetPosition":{"x":24715.55093774257,"y":39593.83796043909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"limitBuyOrders":{"type":"Limit Buy Orders","name":"New Limit Buy Orders","project":"Superalgos","limitOrders":[{"type":"Limit Order","name":"Limit Buy Order #1","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0194d2f8-65b6-4b14-a475-98894e185842","savedPayload":{"position":{"x":23622.167059568223,"y":39434.82004603908},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b489aabd-42fc-4dfa-88d7-a06447eb9ab3","savedPayload":{"position":{"x":23526.582610331872,"y":39354.94905019436},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"ddb47e49-1bd2-4ec6-bcba-ab683fe6057a","savedPayload":{"position":{"x":23447.301924958432,"y":39258.87441337609},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"717a205b-4e4c-483c-8cc4-b7b37b1c346c","savedPayload":{"position":{"x":23387.024812101597,"y":39149.8678421123},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1f6e73ab-b746-4866-a778-f0463def7cba","savedPayload":{"position":{"x":23347.80393654528,"y":39031.64142444839},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1c848292-d64a-456f-b1b9-b9e4a387436e","savedPayload":{"position":{"x":23330.97491816629,"y":38908.22121924096},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"94931a87-f582-496a-9568-414b6c7b85ce","savedPayload":{"position":{"x":23337.110849001347,"y":38783.81015355213},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"0216b354-f6d6-41d2-8a38-ed7dfe714b24","savedPayload":{"position":{"x":23366.002777285095,"y":38662.64489700929},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"03a48411-88af-4c63-97e6-bad700dd2fbf","savedPayload":{"position":{"x":23416.666823051884,"y":38548.85158710231},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"91379553-15c6-4663-8d4c-8c5d3bbc5822","savedPayload":{"position":{"x":23487.377682987953,"y":38446.30531852005},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"57d6275e-125c-4950-a515-ce56fe4c032d","savedPayload":{"position":{"x":23575.727383566504,"y":38358.49818144836},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"588c867e-9337-4872-8490-62a114e0e0c0","savedPayload":{"position":{"x":23678.70728169812,"y":38288.420342627185},"targetPosition":{"x":23842.02738733197,"y":38583.77232432995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"371c590e-927d-4d94-8ed9-3edf5e3f8410","savedPayload":{"position":{"x":23842.02738733197,"y":38583.77232432995},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"41cd34ec-9e60-425f-97ba-cc2e874ce66b","savedPayload":{"position":{"x":23792.810520462703,"y":38238.458218808475},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"623c7f3e-bf42-4d57-8bd5-16e664ceaaa3","savedPayload":{"position":{"x":23593.078223128876,"y":38106.30247806487},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"01d4bade-b1c7-4230-9638-06b14acff0ae","savedPayload":{"position":{"x":23670.003033728215,"y":37977.29432601533},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0d2c2d0b-6be9-48b5-990e-b1a9f86a45a8","savedPayload":{"position":{"x":23795.284432635406,"y":37894.438421766834},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5210cb3d-0652-4891-b974-90583714dbf0","savedPayload":{"position":{"x":23944.10890232136,"y":37874.145393316765},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a494886b-7045-4d81-be56-14ebaecc329c","savedPayload":{"position":{"x":24086.999931352424,"y":37920.434523827316},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"92603bc3-edc6-4f83-b4fc-d485cf4dbad9","savedPayload":{"position":{"x":24195.656198985536,"y":38024.13768330195},"targetPosition":{"x":23914.15145091588,"y":38210.313210195905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ec2bce1d-0e80-4158-bc17-ff7a0c290593","savedPayload":{"position":{"x":23914.15145091588,"y":38210.313210195905},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8cf38f76-2cd3-44f6-bb86-f2b8bfad423d","savedPayload":{"position":{"x":23742.10352913699,"y":38043.706958748655},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7f645045-3a7d-4086-84ae-abbf53f7f22e","savedPayload":{"position":{"x":23841.42373438793,"y":37931.03031249979},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"58409d16-1157-486d-8ef2-68cd23246714","savedPayload":{"position":{"x":23979.796711858384,"y":37872.60558411411},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"284001b7-b135-41de-9915-112dce35ba8e","savedPayload":{"position":{"x":24129.815996327136,"y":37880.00450758067},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"40a8de4e-7754-4614-ae93-9bd30cb4b918","savedPayload":{"position":{"x":24261.768428639363,"y":37951.761635365074},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"16be0d25-24d4-4d4b-ac26-c48a266d22b7","savedPayload":{"position":{"x":24349.519211285246,"y":38073.664588266205},"targetPosition":{"x":24038.597953203473,"y":38204.94376130156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7c5da6d9-1986-4f7b-aecc-7268bf83bb66","savedPayload":{"position":{"x":24038.597953203473,"y":38204.94376130156},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f5214e63-7a64-40d0-8c15-db40a6cafa6f","savedPayload":{"position":{"x":21830.580513844245,"y":39735.573436537336},"targetPosition":{"x":22220.189681090207,"y":39663.27174536938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"65fac651-eb4d-419f-b35d-d813f3baef3f","savedPayload":{"position":{"x":21862.11315985001,"y":39492.966089776026},"targetPosition":{"x":22220.189681090207,"y":39663.27174536938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e9a5a1b7-4755-4262-b762-4753e75cfe90","savedPayload":{"position":{"x":22030.618707739006,"y":39314.801132366396},"targetPosition":{"x":22220.189681090207,"y":39663.27174536938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"d13bdc2c-7cd0-4635-9557-1d112f122504","savedPayload":{"position":{"x":22284.07234028221,"y":39172.40954649531},"targetPosition":{"x":22258.824201120482,"y":39366.641800521145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1509fcc5-09bf-4ce5-a508-bb80acac4a49","savedPayload":{"position":{"x":22258.824201120482,"y":39366.641800521145},"targetPosition":{"x":22220.189681090207,"y":39663.27174536938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87b2e55b-69dc-433a-af96-2619bd7ec970","savedPayload":{"position":{"x":24161.912150947202,"y":38222.5327222676},"targetPosition":{"x":24005.347492965822,"y":38879.12430603271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"008e16b8-9487-4db3-81e1-d11c19a7f59e","savedPayload":{"position":{"x":23958.29361426891,"y":39030.66256040167},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #2","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d516c43a-d83f-4062-a162-3b054a188996","savedPayload":{"position":{"x":23647.861433606467,"y":38793.44388220315},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"706d8275-0d37-4b82-b297-46240caf7037","savedPayload":{"position":{"x":23617.478983219728,"y":38672.64375959749},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5617dbbc-8ad0-4b30-a360-d22fe67fb185","savedPayload":{"position":{"x":23609.810816068057,"y":38548.31772802896},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"17edfdf5-0772-483a-8140-2447bad2a472","savedPayload":{"position":{"x":23625.11806238685,"y":38424.69956138999},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f09d53f0-b4fc-4495-a331-c9c0b3b5dbd6","savedPayload":{"position":{"x":23662.879452261735,"y":38305.99892808182},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"52d30ed5-1c58-47be-a12c-7d95a6dde07a","savedPayload":{"position":{"x":23721.80906685032,"y":38196.25803580604},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"c847c219-47bb-44da-bbb6-ee2ba07e253d","savedPayload":{"position":{"x":23799.90012880608,"y":38099.2139790294},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"d7f72ff1-0b5f-4fe3-925c-a1e5f0adb39a","savedPayload":{"position":{"x":23894.49334067401,"y":38018.17147671393},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"659e5c4e-3d5e-42a6-8c88-e5defe7118ee","savedPayload":{"position":{"x":24002.367444076,"y":37955.8903340762},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"7917f816-7f0f-468b-a5e3-3a5bcf499e04","savedPayload":{"position":{"x":24119.848915801424,"y":37914.491460730744},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"4e0c3898-8897-4a60-97a9-06373c32f158","savedPayload":{"position":{"x":24242.937065234168,"y":37895.38464565687},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8d17bb58-f671-4c13-8de1-3be5093e98a2","savedPayload":{"position":{"x":24367.44027307326,"y":37899.22054852582},"targetPosition":{"x":24325.96547497392,"y":38234.1624705401},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"bbce9d28-eac9-4e9c-aabc-13b7c27fdee2","savedPayload":{"position":{"x":24325.96547497392,"y":38234.1624705401},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"a319ae7f-4df1-47f5-9b09-f130ca02d11b","savedPayload":{"position":{"x":24489.118731900882,"y":37925.86854226605},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4ff538d9-3562-46c8-98be-26129f3db05c","savedPayload":{"position":{"x":24405.211104447142,"y":37701.552603320946},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7dbb1024-5bdf-4ea5-9124-c413f2027233","savedPayload":{"position":{"x":24543.273672711304,"y":37642.39808510565},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9ce1108e-4b0a-4ce1-a307-9ecc6a46a9ba","savedPayload":{"position":{"x":24693.329932088916,"y":37649.00480914852},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ae8b0433-bad6-4c82-8a92-08e60e6f9531","savedPayload":{"position":{"x":24825.659400090997,"y":37720.064232726734},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cb2ee517-1712-46d8-b167-586d816f541f","savedPayload":{"position":{"x":24914.052602665306,"y":37841.50216551397},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9a8f6143-6b20-4d85-9080-e97b8891322d","savedPayload":{"position":{"x":24941.002181970518,"y":37989.26633558321},"targetPosition":{"x":24603.828827738886,"y":37974.421161411476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c1a0e27c-1166-431d-ba8a-2f511fb525c4","savedPayload":{"position":{"x":24603.828827738886,"y":37974.421161411476},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dca23083-2e1c-4dd8-b054-e5c15f624cc2","savedPayload":{"position":{"x":24562.567832713292,"y":37738.50664151234},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f82d03c0-698d-4811-81a9-7d91c5eb2b1d","savedPayload":{"position":{"x":24709.14923758897,"y":37705.728271729},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7fb770cd-de9f-4ed2-bf36-6e72190980e2","savedPayload":{"position":{"x":24855.436521639127,"y":37739.795269046175},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1837436f-430f-4ab8-88d4-7ae0c12af61c","savedPayload":{"position":{"x":24972.455694161832,"y":37833.9602468409},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c47f2fc4-b14e-400b-abc7-93708c15654d","savedPayload":{"position":{"x":25037.029672892993,"y":37969.572676403266},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1faf0d1b-61ac-4835-a937-d9a1508126d5","savedPayload":{"position":{"x":25036.368789397027,"y":38119.77285288114},"targetPosition":{"x":24707.6642458531,"y":38043.22500474955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f2870e23-9835-4532-bd91-b4fcc21dd948","savedPayload":{"position":{"x":24707.6642458531,"y":38043.22500474955},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"62fb7451-7bf5-496d-9353-d735820b30b2","savedPayload":{"position":{"x":22136.78827655305,"y":38804.201616175735},"targetPosition":{"x":22494.4536877684,"y":38974.46433056115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2262cd32-bff0-4385-bbc9-521774bf944e","savedPayload":{"position":{"x":22305.176577745442,"y":38626.36864778603},"targetPosition":{"x":22494.4536877684,"y":38974.46433056115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e524691-0da3-4c5e-bc7a-319d871dae43","savedPayload":{"position":{"x":22545.70112885696,"y":38581.078322363246},"targetPosition":{"x":22494.4536877684,"y":38974.46433056115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"25d54fc5-92c9-43e4-8cbf-71cb76a1334d","savedPayload":{"position":{"x":22834.52925066909,"y":38615.22046207104},"targetPosition":{"x":22700.516337961657,"y":38756.77932743088},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7d89aff-04c2-47cb-82f2-eaf9310be4ed","savedPayload":{"position":{"x":22700.516337961657,"y":38756.77932743088},"targetPosition":{"x":22494.4536877684,"y":38974.46433056115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e9e813ef-9592-4176-bc78-b55ba7b8c551","savedPayload":{"position":{"x":24797.088995616505,"y":38129.93703991651},"targetPosition":{"x":24284.49067687458,"y":38569.10439255438},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"68fee060-9d11-4222-b788-46cc11a9305d","savedPayload":{"position":{"x":24055.88804351142,"y":38786.04019147373},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #3","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"19953c5d-b9dd-496e-ac1c-366d00fb0e35","savedPayload":{"position":{"x":24045.640069137913,"y":38289.66243999943},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"a1a87815-ca21-4253-98fc-6fe7bf39209b","savedPayload":{"position":{"x":24092.064680987016,"y":38174.07473162304},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"39d13327-892e-49b0-a3b9-1b81bcc7b8a2","savedPayload":{"position":{"x":24158.938011277634,"y":38068.98562367704},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a664b78f-0261-463b-8122-4f49ca906ee6","savedPayload":{"position":{"x":24243.982768952443,"y":37977.97379969204},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8d4e39cb-5cde-4cef-9504-a4e065d3ed12","savedPayload":{"position":{"x":24344.302856788763,"y":37904.138558177176},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c7a0e139-7cb3-49bb-8aea-a1c5283c5f3d","savedPayload":{"position":{"x":24456.48199451602,"y":37849.99426972665},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"c937b8cc-6adf-49df-8322-3eb3eb0dfdc1","savedPayload":{"position":{"x":24576.700056142952,"y":37817.38475314472},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"5025336e-e85b-419d-9bd9-f5811e3fa9b2","savedPayload":{"position":{"x":24700.863159766533,"y":37807.42048640778},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"643aa93b-e58d-4928-a576-c2f1ec3c2745","savedPayload":{"position":{"x":24824.743079810083,"y":37820.44079066873},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e5d2af2d-22c8-453b-a4cc-e4fb81225457","savedPayload":{"position":{"x":24944.121234174112,"y":37856.0022750821},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6d137135-5b2d-4b29-a7c6-bc92ac579612","savedPayload":{"position":{"x":25054.93234299007,"y":37912.8939359475},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"111c6c6f-c6af-44e6-bdf6-ba6b8325c9b5","savedPayload":{"position":{"x":25153.402866850494,"y":37989.17839598817},"targetPosition":{"x":24922.97512821537,"y":38235.77382836173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"d479f8d6-64ad-46ec-8537-fe131d79a8a9","savedPayload":{"position":{"x":24922.97512821537,"y":38235.77382836173},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"d8e6194b-d355-442a-a6c1-72580597638f","savedPayload":{"position":{"x":25236.17951016771,"y":38082.257879410565},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"986a2c18-c5e3-419f-8b40-79a5880d4763","savedPayload":{"position":{"x":25300.146414366023,"y":37851.46280672264},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fb4e15d2-6acf-427c-b243-22c1ce1ec97c","savedPayload":{"position":{"x":25446.611531792198,"y":37884.756937711696},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dbcd4995-b198-4340-ace5-1fee2d4836c7","savedPayload":{"position":{"x":25564.126260782654,"y":37978.30274601586},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a82ab2a6-6739-436f-a3bb-a90818584a8f","savedPayload":{"position":{"x":25629.415368037255,"y":38113.57233703646},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"04f910f4-2a94-4ed7-a800-f7b2d218e88f","savedPayload":{"position":{"x":25629.547545145877,"y":38263.77390929917},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0a58a068-de29-459c-9c6c-ed59e3251927","savedPayload":{"position":{"x":25564.496612811112,"y":38399.15819931599},"targetPosition":{"x":25300.443413633177,"y":38188.96267604326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"553ae1bd-21d8-4d72-8283-2aa1f909b5cd","savedPayload":{"position":{"x":25300.443413633177,"y":38188.96267604326},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4e4e7ae3-ec61-46dc-a1bf-471888a346dd","savedPayload":{"position":{"x":25405.72964305102,"y":37973.8512158541},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"74010dbf-1e63-4989-b8f2-43d7a9a1508b","savedPayload":{"position":{"x":25543.583133007636,"y":38033.49134569771},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"746b590a-a40c-4671-a0b4-02fc443f36df","savedPayload":{"position":{"x":25641.907953252245,"y":38147.03763363723},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"827661f4-2537-4d0f-92ee-feb8e0266e05","savedPayload":{"position":{"x":25681.229667260617,"y":38292.00084479242},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7a964074-cc1a-4464-83c4-5a9c37bd174e","savedPayload":{"position":{"x":25653.76012732422,"y":38439.66923733687},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1ab0c697-faf9-4cb9-8ebb-474ece1a12d8","savedPayload":{"position":{"x":25564.94001271926,"y":38560.79527509318},"targetPosition":{"x":25344.00614709044,"y":38305.659082015234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8deb2930-0f19-452a-8c4a-44d87159e3c8","savedPayload":{"position":{"x":25344.00614709044,"y":38305.659082015234},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c7fbd2e6-2de9-4b89-a086-4c321fbfd725","savedPayload":{"position":{"x":22862.583020497375,"y":39223.276599698256},"targetPosition":{"x":23150.11963139264,"y":39495.69165348484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5b0c5718-5ab8-462c-b7a4-f81f4bc02165","savedPayload":{"position":{"x":23077.542385565215,"y":39106.17480343931},"targetPosition":{"x":23150.11963139264,"y":39495.69165348484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"737d2666-fc0b-4d12-81fd-1ea60b82ae3f","savedPayload":{"position":{"x":23320.435206318027,"y":39137.16587996768},"targetPosition":{"x":23150.11963139264,"y":39495.69165348484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"225697e6-ae0f-47e0-9ba1-4803266d331d","savedPayload":{"position":{"x":23584.616561577666,"y":39258.89335237155},"targetPosition":{"x":23412.501896960148,"y":39352.79279441036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"49b649cd-2b6c-488c-9d2e-b7093798f8d4","savedPayload":{"position":{"x":23412.501896960148,"y":39352.79279441036},"targetPosition":{"x":23150.11963139264,"y":39495.69165348484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e7cd13f9-2f0b-4d6b-8870-a75c0b3f1992","savedPayload":{"position":{"x":25365.384233899356,"y":38428.37314118302},"targetPosition":{"x":24692.547389580246,"y":38482.369260735286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"accb5840-90b8-4f57-869f-71d9cbdee6ee","savedPayload":{"position":{"x":24239.666466950315,"y":38597.38636278901},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #4","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"98451bf9-2b66-4d19-8fbd-f792d88fb324","savedPayload":{"position":{"x":24663.565047388107,"y":38115.903107448314},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"17d393b9-5199-4676-918d-74c235161186","savedPayload":{"position":{"x":24769.064097661212,"y":38049.67838921927},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"14d7acd3-ff50-4ede-9afa-a9bd25100060","savedPayload":{"position":{"x":24884.935586164003,"y":38003.96667228376},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"88413b58-802d-438e-927d-2f73ce62f26a","savedPayload":{"position":{"x":25007.23364832805,"y":37980.32461433687},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4bce6443-38b7-4fc2-80f2-18bebc2ca65c","savedPayload":{"position":{"x":25131.793570326707,"y":37979.55731730644},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ccc3cb23-544f-4d93-b0cd-7f31dc6374b6","savedPayload":{"position":{"x":25254.373613409472,"y":38001.69091057259},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"0669d33c-a13b-4573-9373-e36505a14627","savedPayload":{"position":{"x":25370.79946122772,"y":38045.971661162956},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"bbb2315b-a527-4199-9dc6-30ba8454ae0c","savedPayload":{"position":{"x":25477.10637117142,"y":38110.891641225084},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d8ca88ce-db47-4b7f-88b3-b6df03ec32ed","savedPayload":{"position":{"x":25569.674188923516,"y":38194.240078700896},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b133f9b6-c2bb-415d-a48e-665e75695ec1","savedPayload":{"position":{"x":25645.350628473323,"y":38293.17864251759},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"35499c65-da01-47b2-b7e1-12a8e1c32d01","savedPayload":{"position":{"x":25701.558619435855,"y":38404.338098548105},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ed741871-50af-4101-ab56-4744c8b88b1c","savedPayload":{"position":{"x":25736.38406609294,"y":38523.9330448384},"targetPosition":{"x":25405.018951129874,"y":38587.990913875015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"7f1b2469-a692-4acc-b259-aaaf71557551","savedPayload":{"position":{"x":25405.018951129874,"y":38587.990913875015},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"813fc2a2-ec07-4ff7-b77f-ba596f533c90","savedPayload":{"position":{"x":25748.641029627197,"y":38647.890818930886},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1d83de0d-6af9-498d-a687-831d17d2cc58","savedPayload":{"position":{"x":25936.049282228916,"y":38498.77248583093},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8449f2d7-1306-40ef-946a-2579132dec2e","savedPayload":{"position":{"x":26034.972252126554,"y":38611.79803961242},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1d1b73f3-77f0-49b0-a13b-b5236d4b1b13","savedPayload":{"position":{"x":26075.058818434227,"y":38756.551612910764},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a2b4b46f-cf1a-4e13-9aad-023be83def72","savedPayload":{"position":{"x":26048.369345065235,"y":38904.36298524817},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"066530a0-f4d3-4786-b71d-0ba43e73d510","savedPayload":{"position":{"x":25960.19000954521,"y":39025.95630154568},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8232e36b-b592-44e5-bc01-9fafa8574e10","savedPayload":{"position":{"x":25827.98581072248,"y":39097.24851426642},"targetPosition":{"x":25737.912113846065,"y":38771.99018749981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6fe6a708-fd2a-4c8d-adf0-8db9d11afaea","savedPayload":{"position":{"x":25737.912113846065,"y":38771.99018749981},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0761f871-8503-42b0-a57f-0409cecaa870","savedPayload":{"position":{"x":25949.529806617047,"y":38659.84705344326},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f4963f9f-ac80-4e63-af92-dedb30938cfc","savedPayload":{"position":{"x":26026.000033958968,"y":38789.12518040701},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4aeb6c33-f400-4066-a5d9-d8dd06b9b5a1","savedPayload":{"position":{"x":26038.80565100231,"y":38938.77993627237},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"362996ac-69e5-4f09-abdb-faa740362bbe","savedPayload":{"position":{"x":25985.410348241054,"y":39079.170361245066},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e7ab1462-db02-4a8b-9a42-64aeda463217","savedPayload":{"position":{"x":25876.389720237483,"y":39182.490409883685},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b65fdf40-e781-4eff-b519-b6d8f88d8900","savedPayload":{"position":{"x":25733.336639417965,"y":39228.27627941812},"targetPosition":{"x":25704.562679108556,"y":38892.005095389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"790babc4-3b12-48c9-b54e-685e8a68ce93","savedPayload":{"position":{"x":25704.562679108556,"y":38892.005095389344},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5dd514a8-cc41-42a5-9f9b-0e66182d2ea1","savedPayload":{"position":{"x":22510.68654053713,"y":38642.39004963482},"targetPosition":{"x":22798.223151432398,"y":38914.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8dec1cc6-15ca-4b47-950a-bf8ce1621597","savedPayload":{"position":{"x":22725.64590560497,"y":38525.288253375875},"targetPosition":{"x":22798.223151432398,"y":38914.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"aeb7a9fc-db49-4260-bfa7-50489799e684","savedPayload":{"position":{"x":22968.538726357783,"y":38556.279329904246},"targetPosition":{"x":22798.223151432398,"y":38914.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"0b3e6c5e-d7ce-4524-afbc-34e680e04fc1","savedPayload":{"position":{"x":23232.720081617423,"y":38678.006802308126},"targetPosition":{"x":23060.605416999904,"y":38771.90624434693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"80e7267f-7958-498a-a54a-bdb29d0e3e35","savedPayload":{"position":{"x":23060.605416999904,"y":38771.90624434693},"targetPosition":{"x":22798.223151432398,"y":38914.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a6e13625-1b79-46a4-95cd-336b5797d8c2","savedPayload":{"position":{"x":25649.72840041642,"y":39003.84857885333},"targetPosition":{"x":25073.653836166806,"y":38652.04878291163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3928e158-cbb9-40b6-910d-a2d20603bc64","savedPayload":{"position":{"x":24481.650285572592,"y":38493.42190961356},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #5","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c22b5f40-1de3-4b41-bf8b-fb435cbb1c8c","savedPayload":{"position":{"x":24291.46214896387,"y":38389.90371667877},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e5100c66-e044-449e-b449-7760e5ee259d","savedPayload":{"position":{"x":24396.961199236976,"y":38323.67899844972},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"4dd1e856-ec07-411f-8d84-322c0a507818","savedPayload":{"position":{"x":24512.832687739767,"y":38277.96728151421},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"77686e92-830d-4e5b-9d16-4c2e0a146809","savedPayload":{"position":{"x":24635.130749903812,"y":38254.32522356732},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6d2484c7-ff50-48d2-b869-1efa87a21d04","savedPayload":{"position":{"x":24759.69067190247,"y":38253.557926536894},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b2f5836a-23fe-4095-a4a1-4b70901230b3","savedPayload":{"position":{"x":24882.270714985236,"y":38275.69151980305},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"261cab5d-e958-48c0-b3f0-3703315ea7dd","savedPayload":{"position":{"x":24998.696562803485,"y":38319.97227039341},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"2d0c5bbc-ee77-4976-997e-55e2045f9673","savedPayload":{"position":{"x":25105.003472747183,"y":38384.89225045554},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"9f6733f5-ee05-469a-8ca1-bd77b71b011a","savedPayload":{"position":{"x":25197.57129049928,"y":38468.24068793135},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"fa6e2f1d-78bd-4296-9c61-0c36c6d73a33","savedPayload":{"position":{"x":25273.247730049086,"y":38567.17925174804},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"59d3bba7-5222-45c0-8472-1468ce021224","savedPayload":{"position":{"x":25329.455721011618,"y":38678.33870777856},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f00e782e-ac01-46e8-995d-83bd7d5ecf0f","savedPayload":{"position":{"x":25364.281167668705,"y":38797.93365406885},"targetPosition":{"x":25032.916052705637,"y":38861.99152310547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"ebce24a6-271f-4028-bdc5-370ac91b64cc","savedPayload":{"position":{"x":25032.916052705637,"y":38861.99152310547},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"b8059d97-a6c0-48cf-ab6a-d14b2526eb58","savedPayload":{"position":{"x":25376.53813120296,"y":38921.89142816134},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"60f71d1c-6a79-4ed7-ac1f-ec58984f4960","savedPayload":{"position":{"x":25563.94638380468,"y":38772.773095061384},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3027eeaa-862d-4739-bc09-f837c1896b0c","savedPayload":{"position":{"x":25662.869353702317,"y":38885.79864884287},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e3a4b9fc-e9a1-404f-90f2-c7647e1cb338","savedPayload":{"position":{"x":25702.95592000999,"y":39030.55222214122},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dc3f44ea-2f1a-4799-a51a-fd92d838c61d","savedPayload":{"position":{"x":25676.266446641,"y":39178.36359447862},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"963e906a-5e4e-4207-b2ab-b77e12721d43","savedPayload":{"position":{"x":25588.087111120974,"y":39299.956910776134},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d5ab8302-9908-471c-b9c2-6839eaf85fd3","savedPayload":{"position":{"x":25455.882912298242,"y":39371.24912349688},"targetPosition":{"x":25365.80921542183,"y":39045.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"20e5ece1-2a3e-4e8d-8f13-96622f9a5c72","savedPayload":{"position":{"x":25365.80921542183,"y":39045.990796730264},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0ccacad9-8aff-4728-979f-27e20eebf1f4","savedPayload":{"position":{"x":25577.42690819281,"y":38933.84766267372},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c17618d5-88f2-4b2b-a4d4-a4f0173853a8","savedPayload":{"position":{"x":25653.89713553473,"y":39063.12578963747},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"42e91165-1451-4c00-949c-c322955a6753","savedPayload":{"position":{"x":25666.702752578072,"y":39212.78054550282},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"189e375f-0bdc-43a6-b3aa-9fecdc3de029","savedPayload":{"position":{"x":25613.307449816817,"y":39353.17097047552},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4856c933-b4e2-4240-8e04-abda3da63715","savedPayload":{"position":{"x":25504.286821813246,"y":39456.49101911414},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"320baed7-0e30-4141-8018-373858a8777d","savedPayload":{"position":{"x":25361.233740993728,"y":39502.27688864857},"targetPosition":{"x":25332.45978068432,"y":39166.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"55d7405e-f678-4bb5-a642-ff6c29fe5ab0","savedPayload":{"position":{"x":25332.45978068432,"y":39166.0057046198},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cb5b62af-fcbb-401c-b7aa-c2f0d239c6e2","savedPayload":{"position":{"x":22138.583642112895,"y":38916.390658865275},"targetPosition":{"x":22426.12025300816,"y":39188.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b79f935b-06c3-4479-b46d-ebfc0eeef325","savedPayload":{"position":{"x":22353.543007180735,"y":38799.28886260633},"targetPosition":{"x":22426.12025300816,"y":39188.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"192e6727-286f-4868-bd57-9f5ebb59b14e","savedPayload":{"position":{"x":22596.435827933547,"y":38830.2799391347},"targetPosition":{"x":22426.12025300816,"y":39188.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"7c205b94-6aae-4332-9442-3f5ea752171c","savedPayload":{"position":{"x":22860.617183193186,"y":38952.00741153858},"targetPosition":{"x":22688.502518575668,"y":39045.906853577384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e12ca256-8faf-41fa-bca4-873b8677d686","savedPayload":{"position":{"x":22688.502518575668,"y":39045.906853577384},"targetPosition":{"x":22426.12025300816,"y":39188.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"251da11c-15cc-49d6-8919-0fa27251a0ed","savedPayload":{"position":{"x":25277.625501992185,"y":39277.84918808378},"targetPosition":{"x":24701.55093774257,"y":38926.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8498313c-e3ff-4d36-a5c8-7d502096e3b2","savedPayload":{"position":{"x":24744.99965658178,"y":38489.9744775032},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #6","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a11152a1-1102-4a49-aedc-30c605f017ef","savedPayload":{"position":{"x":23979.46214896387,"y":38494.90371667877},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"5f0a50aa-03eb-4b65-a8e3-d3ce13b96954","savedPayload":{"position":{"x":24084.961199236976,"y":38428.67899844972},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e610e024-6c1f-4a1d-b5bc-355ed39ac36f","savedPayload":{"position":{"x":24200.832687739767,"y":38382.96728151421},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a85b9419-fb7d-4f4b-af06-0e1c7651c200","savedPayload":{"position":{"x":24323.130749903812,"y":38359.32522356732},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"618376b2-8493-4978-8c74-fe4c9c5ddfe2","savedPayload":{"position":{"x":24447.69067190247,"y":38358.557926536894},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"735bad1a-1c50-4c78-8d5d-5d7134c34917","savedPayload":{"position":{"x":24570.270714985236,"y":38380.69151980305},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"7b252033-59b3-4224-982c-495fa4b6b499","savedPayload":{"position":{"x":24686.696562803485,"y":38424.97227039341},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"78541c24-6e1c-465d-9b18-d3f7ab20695b","savedPayload":{"position":{"x":24793.003472747183,"y":38489.89225045554},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"916bac0f-27aa-4cd0-9439-1cc90d29e1d7","savedPayload":{"position":{"x":24885.57129049928,"y":38573.24068793135},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"dc367fb4-0528-48ec-87ad-2d9be203ffb1","savedPayload":{"position":{"x":24961.247730049086,"y":38672.17925174804},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b04f5e67-59d1-48dd-b54d-62adb71cb562","savedPayload":{"position":{"x":25017.455721011618,"y":38783.33870777856},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a89bf5f9-c4d0-4310-90eb-575e2d0305d6","savedPayload":{"position":{"x":25052.281167668705,"y":38902.93365406885},"targetPosition":{"x":24720.916052705637,"y":38966.99152310547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"8245dbf6-fda1-4014-a9da-f0a8b83f256c","savedPayload":{"position":{"x":24720.916052705637,"y":38966.99152310547},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"28b65e25-2e17-406b-962e-e5f0a964a52b","savedPayload":{"position":{"x":25064.53813120296,"y":39026.89142816134},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8d0b359a-a6c2-4a6b-8874-43ee2fb59c00","savedPayload":{"position":{"x":25251.94638380468,"y":38877.773095061384},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b43be8c0-0c1d-4a84-bba5-49718fac4b8a","savedPayload":{"position":{"x":25350.869353702317,"y":38990.79864884287},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a40df24d-f364-4a5f-946c-8ee16acca1a5","savedPayload":{"position":{"x":25390.95592000999,"y":39135.55222214122},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3595e151-3c5c-489b-b2a9-576b36745e03","savedPayload":{"position":{"x":25364.266446641,"y":39283.36359447862},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8749eea9-dac1-4ef5-a553-4a80d262db51","savedPayload":{"position":{"x":25276.087111120974,"y":39404.956910776134},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dea29acc-ddde-42e2-8c5a-a6035c572844","savedPayload":{"position":{"x":25143.882912298242,"y":39476.24912349688},"targetPosition":{"x":25053.80921542183,"y":39150.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d9f8c6cd-dfac-430e-97c5-8e2fa833db3a","savedPayload":{"position":{"x":25053.80921542183,"y":39150.990796730264},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"293650db-33b2-4ece-b97e-d77b58300715","savedPayload":{"position":{"x":25265.42690819281,"y":39038.84766267372},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e91d96e-d7a6-42ff-9ceb-d74a14c2f089","savedPayload":{"position":{"x":25341.89713553473,"y":39168.12578963747},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"dd2de844-7af3-4ddd-a55a-71f3a9053012","savedPayload":{"position":{"x":25354.702752578072,"y":39317.78054550282},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fa5d61b2-b806-400e-8d69-dd781bc884c8","savedPayload":{"position":{"x":25301.307449816817,"y":39458.17097047552},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c9e27b64-41d5-4647-814f-17e52d2cb87e","savedPayload":{"position":{"x":25192.286821813246,"y":39561.49101911414},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6d2ad7f1-dd19-4a64-8874-25d4f79bfd45","savedPayload":{"position":{"x":25049.233740993728,"y":39607.27688864857},"targetPosition":{"x":25020.45978068432,"y":39271.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"84de3049-f76d-4c78-a53a-8338fca49b4f","savedPayload":{"position":{"x":25020.45978068432,"y":39271.0057046198},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1a73d081-e1de-4ccc-bb52-dfab03c48d13","savedPayload":{"position":{"x":21826.583642112895,"y":39021.390658865275},"targetPosition":{"x":22114.12025300816,"y":39293.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"59b76a85-9aa5-4cc2-a8d7-77c21a8833de","savedPayload":{"position":{"x":22041.543007180735,"y":38904.28886260633},"targetPosition":{"x":22114.12025300816,"y":39293.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"01b21bcc-944c-471d-a57e-cf1282453bde","savedPayload":{"position":{"x":22284.435827933547,"y":38935.2799391347},"targetPosition":{"x":22114.12025300816,"y":39293.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"f6c6fd6c-0917-4461-a327-69af16129979","savedPayload":{"position":{"x":22548.617183193186,"y":39057.00741153858},"targetPosition":{"x":22376.502518575668,"y":39150.906853577384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad48743e-11b3-4e9a-9767-f2d72907299f","savedPayload":{"position":{"x":22376.502518575668,"y":39150.906853577384},"targetPosition":{"x":22114.12025300816,"y":39293.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"14f78e25-d3d8-4ee8-8511-07c19be592ec","savedPayload":{"position":{"x":24965.625501992185,"y":39382.84918808378},"targetPosition":{"x":24389.55093774257,"y":39031.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6b09d2c2-7ac5-40db-b680-87f2815e2109","savedPayload":{"position":{"x":24989.62202550972,"y":38587.56890674571},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Buy Order #7","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2612e09d-8ba6-4c50-9513-341b4da6080a","savedPayload":{"position":{"x":23949.46214896387,"y":38557.90371667877},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d3912688-22d8-4a54-bc73-302efbddad30","savedPayload":{"position":{"x":24054.961199236976,"y":38491.67899844972},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d02af40e-a745-41b3-8740-0bcd18a18664","savedPayload":{"position":{"x":24170.832687739767,"y":38445.96728151421},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"82e747c3-4913-4ce6-8c69-d9cc46f2f138","savedPayload":{"position":{"x":24293.130749903812,"y":38422.32522356732},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f4870048-4305-4b2c-bb61-7bc43190f0af","savedPayload":{"position":{"x":24417.69067190247,"y":38421.557926536894},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3b29b69e-bd44-4cca-bb6e-4930c7e3695f","savedPayload":{"position":{"x":24540.270714985236,"y":38443.69151980305},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"c1cc192a-4f0e-4ed7-ace6-c56bf084c78b","savedPayload":{"position":{"x":24656.696562803485,"y":38487.97227039341},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"37d3d60f-80c4-4de0-ac52-ccfe5bc6cfa8","savedPayload":{"position":{"x":24763.003472747183,"y":38552.89225045554},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"dddaf984-1a75-4511-8f1a-6eeab4bfa93d","savedPayload":{"position":{"x":24855.57129049928,"y":38636.24068793135},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"89177c4c-3cfe-489b-9ed8-7af85c13567b","savedPayload":{"position":{"x":24931.247730049086,"y":38735.17925174804},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"f2eed8da-6556-423d-8dd4-bdeefc7c1bd4","savedPayload":{"position":{"x":24987.455721011618,"y":38846.33870777856},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"af682a52-f263-4989-9aa1-ccfdbad4bac1","savedPayload":{"position":{"x":25022.281167668705,"y":38965.93365406885},"targetPosition":{"x":24690.916052705637,"y":39029.99152310547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"38c42cf8-1c36-4e29-a274-8160e510dd82","savedPayload":{"position":{"x":24690.916052705637,"y":39029.99152310547},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"3d09eb30-6129-4103-96d4-90805564bd16","savedPayload":{"position":{"x":25034.53813120296,"y":39089.89142816134},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7c37d5f1-5b9c-4303-b00a-0ed498a1f9d7","savedPayload":{"position":{"x":25221.94638380468,"y":38940.773095061384},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6b431250-651b-46de-b2eb-d8d6ac31fd2b","savedPayload":{"position":{"x":25320.869353702317,"y":39053.79864884287},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"01ffc4b8-59e0-434b-9291-6549c6284ece","savedPayload":{"position":{"x":25360.95592000999,"y":39198.55222214122},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1116159b-0ea7-4c55-a0c5-fadf76bf7935","savedPayload":{"position":{"x":25334.266446641,"y":39346.36359447862},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7950d646-808a-4c39-84a4-e4b769434e60","savedPayload":{"position":{"x":25246.087111120974,"y":39467.956910776134},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"77f8e5ba-d4cb-466c-a310-4b4a0411ecc0","savedPayload":{"position":{"x":25113.882912298242,"y":39539.24912349688},"targetPosition":{"x":25023.80921542183,"y":39213.990796730264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9d714138-76af-4ffc-a3d6-3b91f538a220","savedPayload":{"position":{"x":25023.80921542183,"y":39213.990796730264},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fada26f7-d74f-44cb-b837-1e5f07c65bd5","savedPayload":{"position":{"x":25235.42690819281,"y":39101.84766267372},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cd457342-4011-44b6-a199-8ff9ed3cd326","savedPayload":{"position":{"x":25311.89713553473,"y":39231.12578963747},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"695c70b5-0c2a-4167-a554-6e54bcc8a550","savedPayload":{"position":{"x":25324.702752578072,"y":39380.78054550282},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d3a952b5-4b25-496f-9ebe-b23a92b3dc67","savedPayload":{"position":{"x":25271.307449816817,"y":39521.17097047552},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8ab3f8ec-1614-4b7a-b2f6-e2901e0decb6","savedPayload":{"position":{"x":25162.286821813246,"y":39624.49101911414},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d9d683b4-56c2-4e94-acb1-8dc4010019fb","savedPayload":{"position":{"x":25019.233740993728,"y":39670.27688864857},"targetPosition":{"x":24990.45978068432,"y":39334.0057046198},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"28d98991-dc7f-4f86-8b1c-11017bd6ce5c","savedPayload":{"position":{"x":24990.45978068432,"y":39334.0057046198},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7936390b-a672-4127-a666-cb6bdd262fdd","savedPayload":{"position":{"x":21796.583642112895,"y":39084.390658865275},"targetPosition":{"x":22084.12025300816,"y":39356.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1e8819ed-7051-4221-b5c2-820e67d283ea","savedPayload":{"position":{"x":22011.543007180735,"y":38967.28886260633},"targetPosition":{"x":22084.12025300816,"y":39356.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bc03238d-774e-430c-945e-e71b5d7cff9d","savedPayload":{"position":{"x":22254.435827933547,"y":38998.2799391347},"targetPosition":{"x":22084.12025300816,"y":39356.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"685faf9b-c439-4e23-9954-08867d8fdd39","savedPayload":{"position":{"x":22518.617183193186,"y":39120.00741153858},"targetPosition":{"x":22346.502518575668,"y":39213.906853577384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb7525d3-4548-475f-bdcd-72f10864ce58","savedPayload":{"position":{"x":22346.502518575668,"y":39213.906853577384},"targetPosition":{"x":22084.12025300816,"y":39356.80571265187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bc4aa133-ed34-423c-8fcb-1abc965867c4","savedPayload":{"position":{"x":24935.625501992185,"y":39445.84918808378},"targetPosition":{"x":24359.55093774257,"y":39094.049392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9b628e4a-2adb-488f-9916-f2a950119635","savedPayload":{"position":{"x":25178.27585419444,"y":38771.34733018461},"targetPosition":{"x":24621.99067687458,"y":39153.67154010887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f8247166-0cc2-4b14-ba38-37795aa65d87","savedPayload":{"position":{"x":24621.99067687458,"y":39153.67154010887},"targetPosition":{"x":24715.55093774257,"y":39593.83796043909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"limitSellOrders":{"type":"Limit Sell Orders","name":"New Limit Sell Orders","project":"Superalgos","limitOrders":[{"type":"Limit Order","name":"Limit Sell Order #1","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b93b7202-379b-42b8-8bf4-30c8ee6eb2b0","savedPayload":{"position":{"x":23867.274975722255,"y":39059.873921094484},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"61e8fafd-e4c8-4002-a4c5-3f61436788a8","savedPayload":{"position":{"x":23809.5317662827,"y":38949.50415767776},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"e6f893c2-0b55-4383-bac8-9cf1d4c84d1c","savedPayload":{"position":{"x":23773.052135523558,"y":38830.40336232894},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"57f75a48-8bd4-4cca-8a61-b2447a2e0ecb","savedPayload":{"position":{"x":23759.078353517834,"y":38706.62736978798},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"601a8f27-12cd-4770-ad2d-34ed37ea253d","savedPayload":{"position":{"x":23768.08628065203,"y":38582.39122302791},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6a7faff9-39e1-479e-8875-8da5c8555685","savedPayload":{"position":{"x":23799.76916277141,"y":38461.92563502181},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"163600f3-bf47-4a17-a399-578cef593d68","savedPayload":{"position":{"x":23853.048077324824,"y":38349.33291688669},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"0b05fbb2-9102-4921-ace7-13ae89e086a0","savedPayload":{"position":{"x":23926.108674778174,"y":38248.44727859856},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"22927833-41b3-4478-8a3b-c0d6d14183ca","savedPayload":{"position":{"x":24016.462964111714,"y":38162.70425957033},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"2c4f393e-d02b-4b97-a2d5-35c81590f77b","savedPayload":{"position":{"x":24121.034038370213,"y":38095.02373547759},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"3a7feba8-a01f-4459-9c95-bfec028b0c91","savedPayload":{"position":{"x":24236.260855038978,"y":38047.71048539448},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"31d8d314-f897-4c86-b303-ae6365c71657","savedPayload":{"position":{"x":24358.21950307569,"y":38022.375705306586},"targetPosition":{"x":24396.081295804543,"y":38357.745254686604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"525dd597-3f3a-41c3-bf05-882d631a400d","savedPayload":{"position":{"x":24396.081295804543,"y":38357.745254686604},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"020c2bc8-15f0-4074-9f01-2ef3848665d7","savedPayload":{"position":{"x":24482.756826994733,"y":38019.882140764086},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"36ac5e3a-da4a-4356-8162-7adad0331fd4","savedPayload":{"position":{"x":24348.80205798106,"y":37821.35191568933},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"50c0c606-517c-45dd-98b5-37408700fdb4","savedPayload":{"position":{"x":24469.240598465494,"y":37731.60177503785},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"shortcutKey":"w"}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9ab92cbc-aa48-44d5-b006-91203998b94b","savedPayload":{"position":{"x":24616.69310054976,"y":37702.99601670025},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c2965e06-91ec-4acf-aaa9-a4d23b3301f8","savedPayload":{"position":{"x":24761.954787809813,"y":37741.2003619419},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"65109b61-420e-44f2-9fe1-e1594fb26ccc","savedPayload":{"position":{"x":24876.254801566116,"y":37838.64797164213},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9452d3af-bbda-4b69-821b-291340311173","savedPayload":{"position":{"x":24936.95462229656,"y":37976.038151583314},"targetPosition":{"x":24605.6318575961,"y":38040.31470711678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2688db6f-483d-440e-8bc1-46774884e344","savedPayload":{"position":{"x":24605.6318575961,"y":38040.31470711678},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"3a6e4be3-f60c-4aad-874d-3b75485271c4","savedPayload":{"position":{"x":24510.437756210795,"y":37820.55071217861},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2b6bd448-1833-4d7e-b0ce-6215ae843dfd","savedPayload":{"position":{"x":24645.31714674086,"y":37754.4592619659},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"53b2fd1b-e305-4de2-87ad-5c7fede63db8","savedPayload":{"position":{"x":24795.51528407209,"y":37753.434897182815},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d2080fab-3a99-44f8-89a6-9d9942fb9a27","savedPayload":{"position":{"x":24931.283585046767,"y":37817.68050583764},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a6e7af83-68d1-41f1-9d1f-b1b8af71c45f","savedPayload":{"position":{"x":25025.73147256792,"y":37934.471457215615},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e2fd39a4-12c4-4e69-ae03-cf88ef0dcba8","savedPayload":{"position":{"x":25060.152384184654,"y":38080.6758710493},"targetPosition":{"x":24722.660233085022,"y":38082.97759782367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0792e616-00d7-4c93-8e0e-eadaf04faf76","savedPayload":{"position":{"x":24722.660233085022,"y":38082.97759782367},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"94544402-f217-4671-8a78-a7f0ac1c7826","savedPayload":{"position":{"x":23087.309251354538,"y":37986.27703745461},"targetPosition":{"x":23374.845862249804,"y":38258.692091241195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"02898028-e79c-4650-9de9-83f533faacb4","savedPayload":{"position":{"x":23302.268616422378,"y":37869.175241195655},"targetPosition":{"x":23374.845862249804,"y":38258.692091241195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"78527442-4d45-4317-87d6-6be7bd952391","savedPayload":{"position":{"x":23545.16143717519,"y":37900.166317724026},"targetPosition":{"x":23374.845862249804,"y":38258.692091241195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"aa79b285-9cad-44f5-b1a7-bc66e1cc01ca","savedPayload":{"position":{"x":23809.34279243483,"y":38021.89379012791},"targetPosition":{"x":23637.22812781731,"y":38115.79323216671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a4cb4ecd-a8bc-4762-b7c5-cae00e806743","savedPayload":{"position":{"x":23637.22812781731,"y":38115.79323216671},"targetPosition":{"x":23374.845862249804,"y":38258.692091241195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42c09a9e-3aec-44b8-8aa3-9211d2707503","savedPayload":{"position":{"x":24829.856692494286,"y":38146.41797931025},"targetPosition":{"x":24433.943088533397,"y":38693.11480406662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"929c1c8c-1964-4495-991c-0a516f1e9ba0","savedPayload":{"position":{"x":24433.943088533397,"y":38693.11480406662},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"e"}}},{"type":"Limit Order","name":"Limit Sell Order #2","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e15dae16-7526-4267-9273-99a25b3a00f6","savedPayload":{"position":{"x":23992.79835227518,"y":38674.56245977585},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b2f25feb-fed7-4511-b31e-fc1e14cb000c","savedPayload":{"position":{"x":23981.687262826097,"y":38550.49672476292},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"c50f2c48-b43c-464a-863c-c3ea0a866b4b","savedPayload":{"position":{"x":23993.562379775653,"y":38426.50178732401},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bf7e3856-d410-4c9d-9315-08b3c2f830a2","savedPayload":{"position":{"x":24028.019310258762,"y":38306.80014633807},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ce6e002a-ec8f-4856-883a-66ca4e7adbbc","savedPayload":{"position":{"x":24083.884664834357,"y":38195.46809762258},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7b9b7ca1-14cf-4000-960b-cb74e974d09a","savedPayload":{"position":{"x":24159.25601585547,"y":38096.29692056848},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"2bb7de1a-a85f-4950-82f7-5d6e10e86ae3","savedPayload":{"position":{"x":24251.56668236105,"y":38012.66377066761},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"7ff72f98-48b5-4525-92d9-57b64cce2277","savedPayload":{"position":{"x":24357.67313531769,"y":37947.416674532964},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"48dcaeca-8ad9-4f3d-ab39-7124531aaaab","savedPayload":{"position":{"x":24473.96204673062,"y":37902.77754376812},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"046378c8-2a44-4501-ad49-ab79289c3838","savedPayload":{"position":{"x":24596.473337194842,"y":37880.26651043255},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"406574dc-e33c-4ca0-bac7-0360c0597f6b","savedPayload":{"position":{"x":24721.0350316497,"y":37880.65016076748},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"aa95b773-3784-4ad4-a0f3-5d6dc6bf12f0","savedPayload":{"position":{"x":24843.405330985814,"y":37903.9154300209},"targetPosition":{"x":24750.044696084708,"y":38228.2455733176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"65419c94-25bf-43f5-9a95-a3c5a22ed1f8","savedPayload":{"position":{"x":24750.044696084708,"y":38228.2455733176},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"61bd4976-9f93-4841-bd69-054e54be0b37","savedPayload":{"position":{"x":24959.417061426295,"y":37949.27004735199},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"21ae960d-6cac-4d7c-b7a1-9afeef86837f","savedPayload":{"position":{"x":24911.63322001211,"y":37714.58976503274},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e171ab29-a9f0-4787-94cd-f63a8fd08f04","savedPayload":{"position":{"x":25057.249814370964,"y":37677.76128110645},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a971e83d-f240-4750-b4b8-db6fb4884fc0","savedPayload":{"position":{"x":25204.425112850236,"y":37707.7606360748},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5fcae54c-4a6f-4ed7-b0d9-6a5305980ead","savedPayload":{"position":{"x":25324.009242599524,"y":37798.64608976837},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"962130d5-da33-4773-a0d3-8f837f9f0239","savedPayload":{"position":{"x":25392.31710011887,"y":37932.41666344621},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"96fe0924-c448-49f9-8d35-3516cddadece","savedPayload":{"position":{"x":25395.819476485678,"y":38082.577454402985},"targetPosition":{"x":25065.119582631723,"y":38015.16951566441},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"927e1f8b-1435-4838-8c19-89f5e08ca928","savedPayload":{"position":{"x":25065.119582631723,"y":38015.16951566441},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cd98e3d4-3d9d-4aca-b61b-edf26b8193dd","savedPayload":{"position":{"x":25061.27174063924,"y":37775.70485329909},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"851f78ee-6610-4f5f-a02b-8be28fab03e8","savedPayload":{"position":{"x":25211.176151924945,"y":37766.26042329693},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"eaaf2c8e-717c-4329-86d8-44e514b2ad8e","savedPayload":{"position":{"x":25350.333144257776,"y":37822.79237236877},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b7cc7990-9132-463f-827f-e4cb3b10a599","savedPayload":{"position":{"x":25451.1809686577,"y":37934.103854682064},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"13599a3b-cba1-4992-990e-ea03ca474985","savedPayload":{"position":{"x":25493.74547668491,"y":38078.14826601892},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a3f33aae-6f04-4f12-8976-a73359a3741b","savedPayload":{"position":{"x":25469.59624550519,"y":38226.395844125305},"targetPosition":{"x":25156.913322018652,"y":38099.36970760249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7305508f-4939-431c-be88-f4fd0896abd7","savedPayload":{"position":{"x":25156.913322018652,"y":38099.36970760249},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7e0ef872-6dbb-4383-bacd-3618f0c5421a","savedPayload":{"position":{"x":23125.68654053713,"y":38309.39004963482},"targetPosition":{"x":23413.223151432398,"y":38581.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1270d136-9730-4f09-878a-30a089bc8135","savedPayload":{"position":{"x":23340.64590560497,"y":38192.288253375875},"targetPosition":{"x":23413.223151432398,"y":38581.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f3e85b22-eee3-477d-998f-f564b7f32dd5","savedPayload":{"position":{"x":23583.538726357783,"y":38223.279329904246},"targetPosition":{"x":23413.223151432398,"y":38581.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"bfa4439c-9331-4a2f-8107-05f435d92685","savedPayload":{"position":{"x":23847.720081617423,"y":38345.006802308126},"targetPosition":{"x":23675.605416999904,"y":38438.90624434693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bc017de9-4fce-4d25-84a9-5cfdad34217e","savedPayload":{"position":{"x":23675.605416999904,"y":38438.90624434693},"targetPosition":{"x":23413.223151432398,"y":38581.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0a4e2dc8-458c-4bf6-be14-5bf2e5d2b765","savedPayload":{"position":{"x":25231.67235388671,"y":38199.003286616775},"targetPosition":{"x":24656.6840611836,"y":38552.57571661431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e133f5d4-034b-4333-9ea4-a6b52183476e","savedPayload":{"position":{"x":24656.6840611836,"y":38552.57571661431},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Sell Order #3","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"21dfc9c5-eb2f-4c78-80e2-8259f7affefa","savedPayload":{"position":{"x":24256.219143271155,"y":38366.61680360287},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"435255ea-97df-49b6-a8e0-8317bada8362","savedPayload":{"position":{"x":24293.431736458893,"y":38247.742980490766},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"ecdf173f-f860-4072-8439-0cfc38cbe8a7","savedPayload":{"position":{"x":24351.853722209784,"y":38137.73100616993},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f0c266ca-9ffb-4ca0-a1fe-33ab9427c60f","savedPayload":{"position":{"x":24429.495609868525,"y":38040.32720648105},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5cbe73d5-f73c-4638-8577-34b8618cc383","savedPayload":{"position":{"x":24523.713398072083,"y":37958.848550999544},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c3e11b4b-c754-4d2b-b764-026ef7d58f3e","savedPayload":{"position":{"x":24631.298613044964,"y":37896.069697614956},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"62606235-38b2-4632-b325-6b7d342cb78e","savedPayload":{"position":{"x":24748.58756932551,"y":37854.128504884364},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"eec3d4f3-541c-406f-ab2a-f915553be12d","savedPayload":{"position":{"x":24871.58613218019,"y":37834.453229823295},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"52458d96-4992-4a22-826e-a58defe970e8","savedPayload":{"position":{"x":24996.105733071494,"y":37837.713890326064},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"3e3e4e4d-7951-4e3f-aad9-c383b7aa4e02","savedPayload":{"position":{"x":25117.906006335877,"y":37863.79944850998},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"173cac06-8ac9-44a1-97c5-c03f930f3e57","savedPayload":{"position":{"x":25232.839189750644,"y":37911.821591977256},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"19ca42cb-2a54-4731-b277-8af7fa427a7f","savedPayload":{"position":{"x":25336.991371601765,"y":37980.14498422834},"targetPosition":{"x":25126.62161941813,"y":38244.05939718488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"398d330c-c2d6-4568-b1bb-3f707f933712","savedPayload":{"position":{"x":25126.62161941813,"y":38244.05939718488},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"0921a747-2bc1-400c-a2d3-c9f2de534a9a","savedPayload":{"position":{"x":25426.815774253075,"y":38066.44295408499},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e772b9b0-eb04-46f7-b3ad-b7391556e38c","savedPayload":{"position":{"x":25472.477517132083,"y":37831.34056012229},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4587d77c-0f66-4188-b7a1-804cbb7f973f","savedPayload":{"position":{"x":25621.10335889194,"y":37853.04053574794},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c8fbc574-9bb0-436e-bf51-f3e3b3dff06e","savedPayload":{"position":{"x":25745.59534872015,"y":37937.07787417315},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e5feb02b-e7f4-4d5f-aca8-09b74b330314","savedPayload":{"position":{"x":25821.296321237176,"y":38066.807949872484},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fd0fc56c-22e6-4d90-8005-553adb3798da","savedPayload":{"position":{"x":25833.212770424518,"y":38216.53613031874},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"920b17bf-fe0e-4fed-bfba-fbc85bbb196a","savedPayload":{"position":{"x":25778.984497374968,"y":38356.6069130789},"targetPosition":{"x":25499.253535404776,"y":38167.77672768675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"341467d7-22c6-45bb-b7fb-9d45e39c17f9","savedPayload":{"position":{"x":25499.253535404776,"y":38167.77672768675},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"39b7fe39-2b11-4ba8-a2b5-6fcbc4f128eb","savedPayload":{"position":{"x":25587.33775186769,"y":37945.067721986816},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8e86045f-2ec5-40b6-bd28-6cf203b7d72c","savedPayload":{"position":{"x":25729.445596177666,"y":37993.70814104908},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"38b2dc9d-492d-4183-bcc2-1cc2edb12408","savedPayload":{"position":{"x":25836.376052890697,"y":38099.189927193045},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"abe419e4-1bab-4116-a588-539058869394","savedPayload":{"position":{"x":25886.950233638785,"y":38240.6211190237},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f89e98a8-a2d8-4440-bff5-e321f4fa4782","savedPayload":{"position":{"x":25871.15130167314,"y":38389.989534459244},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"83e6f934-08de-4572-bc6b-e5b5edd3b26a","savedPayload":{"position":{"x":25792.10842923075,"y":38517.71092693927},"targetPosition":{"x":25551.83787398037,"y":38280.69550491008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f2412f2a-9af9-49aa-8cc3-d1f5b3393826","savedPayload":{"position":{"x":25551.83787398037,"y":38280.69550491008},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"63d2ceed-a735-4a6e-a480-7ea813d0c8e5","savedPayload":{"position":{"x":23484.301156937585,"y":38865.676433094966},"targetPosition":{"x":23771.83776783285,"y":39138.091486881545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"13cadd4e-2fe3-41ed-912e-3608eb4f35f3","savedPayload":{"position":{"x":23699.260522005425,"y":38748.57463683601},"targetPosition":{"x":23771.83776783285,"y":39138.091486881545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"22ad5823-ef3e-4d85-bd0c-22e6d3c87233","savedPayload":{"position":{"x":23942.153342758236,"y":38779.56571336438},"targetPosition":{"x":23771.83776783285,"y":39138.091486881545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"697772bb-a90c-455d-a0eb-ffb21046f211","savedPayload":{"position":{"x":24206.334698017876,"y":38901.29318576826},"targetPosition":{"x":24034.220033400357,"y":38995.19262780706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed24a5b4-b33d-4068-b069-35529ac9c027","savedPayload":{"position":{"x":24034.220033400357,"y":38995.19262780706},"targetPosition":{"x":23771.83776783285,"y":39138.091486881545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c8b9919c-ca7b-4fef-877f-aa90d7fe867f","savedPayload":{"position":{"x":25582.77809339763,"y":38401.353972227786},"targetPosition":{"x":24916.251867234492,"y":38507.97381014142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a5d970bf-0f85-4546-9c4a-a0a113e7ea04","savedPayload":{"position":{"x":24916.251867234492,"y":38507.97381014142},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Sell Order #4","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"43478f0c-6a3a-4939-a7db-236129532cf9","savedPayload":{"position":{"x":24617.433921196473,"y":38182.91888719357},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"b11738b3-7b4d-49b8-9b30-c49fcacbb1da","savedPayload":{"position":{"x":24697.304917041194,"y":38087.334437957215},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"ee5f047c-40d8-4fc3-985c-2f94a8e473c0","savedPayload":{"position":{"x":24793.379553859464,"y":38008.05375258377},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b7a5de66-c4be-4540-8d4b-b5c8569f5382","savedPayload":{"position":{"x":24902.38612512326,"y":37947.77663972694},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"86cc532f-273c-4cef-9fe4-1095739c3c59","savedPayload":{"position":{"x":25020.612542787167,"y":37908.55576417062},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"019fbb21-bf78-4cc0-87b0-15910b42b1ed","savedPayload":{"position":{"x":25144.032747994595,"y":37891.72674579163},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"63a76c09-04f5-4df0-a1c5-28ddbc8be5b6","savedPayload":{"position":{"x":25268.443813683432,"y":37897.86267662669},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"4677088b-93a1-4a06-ace6-2afff21d1c7e","savedPayload":{"position":{"x":25389.609070226266,"y":37926.75460491044},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"543746cc-7674-4cef-a773-499631d2cd1d","savedPayload":{"position":{"x":25503.402380133244,"y":37977.41865067723},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"8018fcb0-4077-448f-8d08-53c63251057d","savedPayload":{"position":{"x":25605.94864871551,"y":38048.1295106133},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"16fc199e-6a3d-4d52-842b-b8b89dc2134b","savedPayload":{"position":{"x":25693.75578578719,"y":38136.47921119184},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6cc6b150-b02b-4f94-b91f-798be8cc2e28","savedPayload":{"position":{"x":25763.833624608364,"y":38239.45910932346},"targetPosition":{"x":25468.481642905605,"y":38402.779214957314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"e86bb45a-c318-471c-b8e7-6a27b1dfa7fa","savedPayload":{"position":{"x":25468.481642905605,"y":38402.779214957314},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"37896346-c3dd-4c1e-9890-0de8095607dc","savedPayload":{"position":{"x":25813.795748427077,"y":38353.562348088046},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"42f061ed-52b6-4bf8-9603-0b7621767a79","savedPayload":{"position":{"x":25945.951489170682,"y":38153.83005075422},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"12293cf5-ede5-4d18-bdab-de9c3976c7c1","savedPayload":{"position":{"x":26074.959641220215,"y":38230.75486135356},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"84d7df9e-8a6e-4fb4-abce-3b5450a3037e","savedPayload":{"position":{"x":26157.81554546872,"y":38356.03626026076},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0b55890d-e3e8-4e6c-bbd5-b4f8706fc52f","savedPayload":{"position":{"x":26178.108573918787,"y":38504.860729946704},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a837b250-aade-4479-8f95-49298fd037c9","savedPayload":{"position":{"x":26131.819443408232,"y":38647.75175897777},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"77b57646-02d9-4ce0-8240-aa3637421ea3","savedPayload":{"position":{"x":26028.116283933596,"y":38756.40802661088},"targetPosition":{"x":25841.940757039647,"y":38474.90327854123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4aa992de-9815-4ca7-b9b7-cc348fb0a706","savedPayload":{"position":{"x":25841.940757039647,"y":38474.90327854123},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"ee83b795-4340-4edf-9268-15576dd48467","savedPayload":{"position":{"x":26008.547008486898,"y":38302.85535676233},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7c14d3ab-95e0-4fd0-8cb2-15259c9d72c7","savedPayload":{"position":{"x":26121.22365473576,"y":38402.17556201327},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"02819dda-f0e1-49bf-a9ed-b07c4b8a4767","savedPayload":{"position":{"x":26179.64838312144,"y":38540.54853948373},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"92e2d4bc-a719-4a37-b91d-79b91fa7e09d","savedPayload":{"position":{"x":26172.249459654882,"y":38690.56782395248},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"8daf0f36-1e8e-4f1a-bc44-e8a8e2492d45","savedPayload":{"position":{"x":26100.492331870475,"y":38822.52025626471},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bd9e6a90-448a-42e9-9582-fc577ec8a819","savedPayload":{"position":{"x":25978.589378969347,"y":38910.27103891059},"targetPosition":{"x":25847.31020593399,"y":38599.349780828816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ef56bd7f-b36d-47ec-bc9f-861728d84989","savedPayload":{"position":{"x":25847.31020593399,"y":38599.349780828816},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"cf1e2969-52f2-47a6-af1d-d2f8cdc05d28","savedPayload":{"position":{"x":23173.68654053713,"y":38305.39004963482},"targetPosition":{"x":23461.223151432398,"y":38577.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7b0037a1-612c-4cad-8f1c-9f96b2450d96","savedPayload":{"position":{"x":23388.64590560497,"y":38188.288253375875},"targetPosition":{"x":23461.223151432398,"y":38577.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f8c739bf-e5d3-45d9-b965-b91a8eeb0cf9","savedPayload":{"position":{"x":23631.538726357783,"y":38219.279329904246},"targetPosition":{"x":23461.223151432398,"y":38577.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"1753e430-35e6-40b7-935c-d020b28ebf90","savedPayload":{"position":{"x":23895.720081617423,"y":38341.006802308126},"targetPosition":{"x":23723.605416999904,"y":38434.90624434693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5977664e-04dc-4333-91dd-951bae431ac7","savedPayload":{"position":{"x":23723.605416999904,"y":38434.90624434693},"targetPosition":{"x":23461.223151432398,"y":38577.805103421415},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8b70f49a-490a-4ef5-a310-9e9828a611ff","savedPayload":{"position":{"x":25829.721244967954,"y":38722.66397857255},"targetPosition":{"x":25173.129661202845,"y":38566.099320591165},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7fb716f8-8bba-4c0d-8df3-69a7bc9ae317","savedPayload":{"position":{"x":25173.129661202845,"y":38566.099320591165},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Sell Order #5","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c21909ae-7bce-48a4-97c0-03001f36bc9a","savedPayload":{"position":{"x":25021.45101053211,"y":38151.43505309549},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"6628bc0e-a38e-42bc-ae67-447a6094e6e8","savedPayload":{"position":{"x":25131.820773948835,"y":38093.69184365594},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"af947606-2995-4abb-899d-bf1612455701","savedPayload":{"position":{"x":25250.921569297654,"y":38057.2122128968},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"11f5acb6-bca7-4df0-9c5a-28e500087b70","savedPayload":{"position":{"x":25374.69756183862,"y":38043.23843089107},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"01da2344-3681-4947-8e39-b632718a6a35","savedPayload":{"position":{"x":25498.93370859869,"y":38052.246358025266},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"732ad726-a4c8-4561-a4de-a59b25111848","savedPayload":{"position":{"x":25619.399296604784,"y":38083.92924014465},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"e83e876a-31fb-4a82-9a3b-afa626f1c103","savedPayload":{"position":{"x":25731.992014739903,"y":38137.20815469806},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"263be304-708d-4f68-a896-12214ac404ef","savedPayload":{"position":{"x":25832.877653028037,"y":38210.268752151416},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"4567768f-7801-4b8e-9506-02435026da34","savedPayload":{"position":{"x":25918.62067205627,"y":38300.62304148495},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"44d63c52-6d96-48dd-8492-44526e0ddea2","savedPayload":{"position":{"x":25986.30119614901,"y":38405.19411574345},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"77cc4f80-04c4-4907-b914-b46fc9531c8f","savedPayload":{"position":{"x":26033.61444623212,"y":38520.42093241222},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"eb351029-a49c-46ba-ba2c-302a353ff97b","savedPayload":{"position":{"x":26058.94922632001,"y":38642.379580448935},"targetPosition":{"x":25723.579676939993,"y":38680.241373177785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"4f014f57-4f7b-460d-b740-6c3a6c1df9bf","savedPayload":{"position":{"x":25723.579676939993,"y":38680.241373177785},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"f29b9169-c7cc-4ab2-9013-92a353605f2d","savedPayload":{"position":{"x":26061.44279086251,"y":38766.91690436797},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f3faef60-5aba-4eec-8e35-a584de65dc14","savedPayload":{"position":{"x":26259.97301593727,"y":38632.962135354304},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5d887d94-d554-4a08-b37c-3cb901e34a16","savedPayload":{"position":{"x":26349.72315658875,"y":38753.40067583873},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"de852846-2ada-4974-bf5f-39c1e126834b","savedPayload":{"position":{"x":26378.32891492635,"y":38900.853177922996},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7eb49c05-59dc-483b-b40c-56c31d71a2f8","savedPayload":{"position":{"x":26340.124569684707,"y":39046.11486518305},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"03450469-57f1-4efa-9f64-b751c125aa96","savedPayload":{"position":{"x":26242.676959984474,"y":39160.41487893936},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e51385a8-87d1-4a59-9f45-f271e01c9804","savedPayload":{"position":{"x":26105.286780043283,"y":39221.11469966979},"targetPosition":{"x":26041.010224509824,"y":38889.79193496934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f872512b-a913-4f51-9e5a-23196a41bf42","savedPayload":{"position":{"x":26041.010224509824,"y":38889.79193496934},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f03155f6-d118-4bc7-a459-06ac485f5332","savedPayload":{"position":{"x":26260.77421944799,"y":38794.59783358404},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1229e93b-73e5-43f8-a857-4cb0829eb0d8","savedPayload":{"position":{"x":26326.865669660696,"y":38929.4772241141},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"17ca5b23-50ae-4711-a2e0-48b5fb70e8a1","savedPayload":{"position":{"x":26327.890034443786,"y":39079.675361445334},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"c603c52c-44c7-4137-a34e-1817e5efe103","savedPayload":{"position":{"x":26263.644425788956,"y":39215.44366242001},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0c23efa1-82e9-44c7-b863-dc186153f2d4","savedPayload":{"position":{"x":26146.853474410982,"y":39309.89154994116},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0d9004c8-6370-42cf-a432-477ffbd8bc6a","savedPayload":{"position":{"x":26000.649060577292,"y":39344.31246155789},"targetPosition":{"x":25998.347333802925,"y":39006.820310458264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ad61a2f9-b057-485c-b18a-492e0ad86541","savedPayload":{"position":{"x":25998.347333802925,"y":39006.820310458264},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"eeaf0a5e-54fa-431a-974b-f62ae5097578","savedPayload":{"position":{"x":23150.28331456428,"y":38968.759320922516},"targetPosition":{"x":23437.819925459546,"y":39241.174374709095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"578670d9-2033-417d-bdbb-8ae5a38511f1","savedPayload":{"position":{"x":23365.24267963212,"y":38851.65752466356},"targetPosition":{"x":23437.819925459546,"y":39241.174374709095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fe07db0c-aae2-4697-8caa-523ad1dc38a9","savedPayload":{"position":{"x":23608.13550038493,"y":38882.64860119193},"targetPosition":{"x":23437.819925459546,"y":39241.174374709095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"d96a7df0-089c-4e53-a9bf-ec276a357d5b","savedPayload":{"position":{"x":23872.31685564457,"y":39004.37607359581},"targetPosition":{"x":23700.202191027052,"y":39098.27551563461},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9a3fb4f7-641a-4ff8-8a17-3461011e8e30","savedPayload":{"position":{"x":23700.202191027052,"y":39098.27551563461},"targetPosition":{"x":23437.819925459546,"y":39241.174374709095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a270a831-de12-4466-a643-3d21f866a19b","savedPayload":{"position":{"x":25934.906952316345,"y":39114.01676986753},"targetPosition":{"x":25388.210127559974,"y":38718.103165906636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3c44b04d-6b6b-4278-ba85-898b1f12cdfa","savedPayload":{"position":{"x":25388.210127559974,"y":38718.103165906636},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Sell Order #6","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9c727aaf-1a30-4470-9318-2f8825c33024","savedPayload":{"position":{"x":25406.76247185075,"y":38276.95842964841},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"00f6d4a8-702b-4c06-bcd5-c7a557564ce8","savedPayload":{"position":{"x":25530.82820686368,"y":38265.84734019933},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"fc4008d3-a179-4d99-b0bd-f27eb6a615fe","savedPayload":{"position":{"x":25654.82314430259,"y":38277.72245714889},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e3568259-dff9-47c5-99da-f254adc3d046","savedPayload":{"position":{"x":25774.52478528853,"y":38312.179387632},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7c07afb3-62e6-4d0b-a854-290a842c0aaf","savedPayload":{"position":{"x":25885.856834004015,"y":38368.04474220759},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"41c315de-6ccb-4f5f-a929-33a59a1dbc37","savedPayload":{"position":{"x":25985.028011058123,"y":38443.416093228705},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"b8b1bdaa-e081-4e66-8a55-9a5df6520c74","savedPayload":{"position":{"x":26068.66116095898,"y":38535.72675973429},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"ab9e5c18-bc35-4490-a925-154c0ec58163","savedPayload":{"position":{"x":26133.908257093633,"y":38641.83321269093},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"64cf7d12-6dab-4925-9582-e0d25fe98019","savedPayload":{"position":{"x":26178.547387858478,"y":38758.12212410386},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"7d294033-4349-4bb2-936e-4d9d1e93e32b","savedPayload":{"position":{"x":26201.05842119405,"y":38880.63341456808},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"eedd3c1c-9624-4090-bdad-6969901a8dee","savedPayload":{"position":{"x":26200.674770859117,"y":39005.195109022934},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"403af118-41a8-426d-a929-f68f23caafc4","savedPayload":{"position":{"x":26177.4095016057,"y":39127.565408359056},"targetPosition":{"x":25853.079358308994,"y":39034.20477345795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"2895d29d-2521-4073-81d8-a444696ed084","savedPayload":{"position":{"x":25853.079358308994,"y":39034.20477345795},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"6f5d0936-6867-4375-a034-655623224b20","savedPayload":{"position":{"x":26132.05488427461,"y":39243.577138799534},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"bce7180e-040c-4f8b-a9b3-86bf0d9664d8","savedPayload":{"position":{"x":26366.735166593862,"y":39195.793297385346},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a28ea194-f3ec-47d0-96c1-c1c680810a44","savedPayload":{"position":{"x":26403.563650520147,"y":39341.4098917442},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"20b0bac5-aef4-4ee3-ba01-32e3db00e5a2","savedPayload":{"position":{"x":26373.564295551794,"y":39488.58519022348},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"7a704287-a289-4834-bc5e-893c19c23817","savedPayload":{"position":{"x":26282.678841858222,"y":39608.16931997276},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"72bf8991-9547-4202-9784-9bb9acba42b0","savedPayload":{"position":{"x":26148.90826818039,"y":39676.47717749211},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"b6f079e8-44f8-47e4-a323-48da22aa9d93","savedPayload":{"position":{"x":25998.747477223613,"y":39679.97955385892},"targetPosition":{"x":26066.155415962185,"y":39349.27966000496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8d7fdc43-8442-4477-9d6d-bdbd65c19434","savedPayload":{"position":{"x":26066.155415962185,"y":39349.27966000496},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5fbeec0b-5946-47c7-bac0-11baaf975f5a","savedPayload":{"position":{"x":26305.620078327513,"y":39345.43181801247},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"9d8bcda5-45b6-4b04-8247-e3a85d8dc3ae","savedPayload":{"position":{"x":26315.064508329662,"y":39495.33622929818},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"4dd613cf-99fe-45bc-be8e-bb24ae859dd7","savedPayload":{"position":{"x":26258.532559257827,"y":39634.493221631004},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"80e5a664-a670-46be-b835-ac0b6a16f210","savedPayload":{"position":{"x":26147.221076944534,"y":39735.34104603093},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"d0f2e08f-5270-4c1d-b408-4c0ce2d91cc2","savedPayload":{"position":{"x":26003.176665607676,"y":39777.90555405815},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f6757945-c686-4e3f-8423-2699c33c02a4","savedPayload":{"position":{"x":25854.929087501296,"y":39753.75632287842},"targetPosition":{"x":25981.955224024106,"y":39441.073399391884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c4fe4a32-5cb5-42c3-ae18-f5d888f9b8f0","savedPayload":{"position":{"x":25981.955224024106,"y":39441.073399391884},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"41425b71-3c1f-4952-ab7e-c073498f118a","savedPayload":{"position":{"x":23274.77329546256,"y":39265.89477474961},"targetPosition":{"x":23562.309906357827,"y":39538.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"553275c8-ceea-497c-95b7-1e23f6e51a58","savedPayload":{"position":{"x":23489.7326605304,"y":39148.79297849066},"targetPosition":{"x":23562.309906357827,"y":39538.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"35916359-97c9-4ab4-8ca7-a6c5f60d17da","savedPayload":{"position":{"x":23732.625481283212,"y":39179.78405501903},"targetPosition":{"x":23562.309906357827,"y":39538.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"a63dd474-1b20-4504-8790-f3a53ec5a725","savedPayload":{"position":{"x":23996.80683654285,"y":39301.51152742291},"targetPosition":{"x":23824.692171925333,"y":39395.41096946171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eca5c17c-3f6a-49b1-951e-53339faa9d14","savedPayload":{"position":{"x":23824.692171925333,"y":39395.41096946171},"targetPosition":{"x":23562.309906357827,"y":39538.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c92fa7f-81c6-4abd-941b-1ef17c952c7e","savedPayload":{"position":{"x":25882.321645009826,"y":39515.83243125994},"targetPosition":{"x":25528.74921501229,"y":38940.84413855684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"90d28d1e-6fd2-4a83-a423-3f34bf455004","savedPayload":{"position":{"x":25528.74921501229,"y":38940.84413855684},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Limit Order","name":"Limit Sell Order #7","project":"Superalgos","serialNumber":{"type":"Serial Number","name":"New Serial Number","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fa31d1c9-8ee0-4ba8-87ae-a5771ad35b44","savedPayload":{"position":{"x":25714.70812802373,"y":38540.3792206444},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"identifier":{"type":"Identifier","name":"New Identifier","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"c9a2076d-d9bf-48c8-abfb-f3edb9905fd1","savedPayload":{"position":{"x":25833.581951135835,"y":38577.591813832136},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exchangeId":{"type":"Exchange Id","name":"New Exchange Id","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"d910eaf4-2bcb-4b9c-8f70-5d69ed385648","savedPayload":{"position":{"x":25943.593925456666,"y":38636.01379958302},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"begin":{"type":"Begin","name":"New Begin","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"a027a7b2-1833-4557-9c72-ac1f84e8889e","savedPayload":{"position":{"x":26040.99772514555,"y":38713.655687241764},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"end":{"type":"End","name":"New End","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e8a616de-c956-474b-a572-943dba739546","savedPayload":{"position":{"x":26122.476380627057,"y":38807.873475445325},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rate":{"type":"Rate","name":"New Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5b4b3cd4-6107-4940-9e0d-80614590def4","savedPayload":{"position":{"x":26185.25523401164,"y":38915.4586904182},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"exitType":{"type":"Exit Type","name":"New Exit Type","config":"{\n\"initialValue\": \"No Exit\"\n}","project":"Superalgos","id":"0299f975-8ff6-4062-ada4-7602145d273a","savedPayload":{"position":{"x":26227.19642674223,"y":39032.74764669875},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"status":{"type":"Status","name":"New Status","config":"{\n\"initialValue\": \"Not Open\"\n}","project":"Superalgos","id":"4ea390ec-59f1-41cd-8a1d-6489d492be32","savedPayload":{"position":{"x":26246.8717018033,"y":39155.74620955343},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderName":{"type":"Order Name","name":"New Order Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"dfad8d25-bbb5-49e3-a595-83d97ad08a35","savedPayload":{"position":{"x":26243.611041300534,"y":39280.26581044473},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"algorithmName":{"type":"Algorithm Name","name":"New Algorithm Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"dfdae604-14c1-471a-9c5b-ec2b3ef28dc7","savedPayload":{"position":{"x":26217.525483116624,"y":39402.06608370911},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"situationName":{"type":"Situation Name","name":"New Situation Name","config":"{\n\"initialValue\": \"\"\n}","project":"Superalgos","id":"402a0802-a66e-4241-9b40-716457d3ee7a","savedPayload":{"position":{"x":26169.50333964934,"y":39516.99926712389},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderCounters":{"type":"Order Counters","name":"New Order Counters","project":"Superalgos","periods":{"type":"Periods","name":"New Periods","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"e5d84547-cd32-4627-b4e8-1d0b3cf34e1e","savedPayload":{"position":{"x":26101.179947398257,"y":39621.151448975004},"targetPosition":{"x":25837.265534441718,"y":39410.78169679137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedCounters":[],"id":"a6ed37b6-d121-4b7d-a928-b7e131c8ebbc","savedPayload":{"position":{"x":25837.265534441718,"y":39410.78169679137},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"lock":{"type":"Lock","name":"New Lock","config":"{\n\"initialValue\": \"Open\"\n}","project":"Superalgos","id":"e00e5e44-6768-485d-b98f-d07c032b95c4","savedPayload":{"position":{"x":26014.881977541605,"y":39710.97585162631},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"orderBaseAsset":{"type":"Order Base Asset","name":"New Order Base Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"37c1f14a-3dc7-46cc-982f-facdb981df85","savedPayload":{"position":{"x":26249.9843715043,"y":39756.63759450532},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"1919145a-09dc-44f1-bf66-db1cd2423d19","savedPayload":{"position":{"x":26228.284395878654,"y":39905.26343626518},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"f0086e54-7654-4319-8cd1-32aba52593ba","savedPayload":{"position":{"x":26144.24705745345,"y":40029.75542609339},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"244d134e-63c9-4f01-9e5b-a64b74114ca8","savedPayload":{"position":{"x":26014.516981754106,"y":40105.45639861042},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"fc1b011f-bc04-470d-9446-facb1649bd97","savedPayload":{"position":{"x":25864.788801307855,"y":40117.37284779776},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"edcd8dc1-7e0e-49d9-bfd5-ce9e08138be9","savedPayload":{"position":{"x":25724.718018547697,"y":40063.14457474821},"targetPosition":{"x":25913.54820393984,"y":39783.413612778015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9f098ef2-5e76-4a6f-a220-905680a6a857","savedPayload":{"position":{"x":25913.54820393984,"y":39783.413612778015},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderQuotedAsset":{"type":"Order Quoted Asset","name":"New Order Quoted Asset","project":"Superalgos","actualSize":{"type":"Actual Size","name":"New Actual Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"606e7a63-b911-4c72-9b6f-453330b7d907","savedPayload":{"position":{"x":26136.257209639778,"y":39871.49782924093},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"size":{"type":"Size","name":"New Size","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"0393cb12-8ea6-4ce1-acc0-c9d74cc38515","savedPayload":{"position":{"x":26087.61679057752,"y":40013.605673550905},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"sizeFilled":{"type":"Size Filled","name":"New Size Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"6345257d-26b2-4e6b-9126-adecf0940dcb","savedPayload":{"position":{"x":25982.13500443355,"y":40120.536130263936},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"amountReceived":{"type":"Amount Received","name":"New Amount Received","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"2d00e2be-471c-4603-bdeb-80f7c85f3d3b","savedPayload":{"position":{"x":25840.70381260289,"y":40171.110311012024},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesPaid":{"type":"Fees Paid","name":"New Fees Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"32bad449-4c6d-4e9f-b8b4-0f9ff1478aaa","savedPayload":{"position":{"x":25691.335397167346,"y":40155.311379046376},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"feesToBePaid":{"type":"Fees To Be Paid","name":"New Fees To Be Paid","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"99a244e7-f907-41d5-b32d-822f27730787","savedPayload":{"position":{"x":25563.614004687322,"y":40076.268506603985},"targetPosition":{"x":25800.629426716514,"y":39835.99795135361},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c69e4280-e76f-4b74-8178-3363c95d7b4d","savedPayload":{"position":{"x":25800.629426716514,"y":39835.99795135361},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"orderStatistics":{"type":"Order Statistics","name":"New Order Statistics","project":"Superalgos","percentageFilled":{"type":"Percentage Filled","name":"New Percentage Filled","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"61215a99-f445-4ba1-a76a-0f46a754b027","savedPayload":{"position":{"x":23214.77329546256,"y":39400.89477474961},"targetPosition":{"x":23502.309906357827,"y":39673.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"actualRate":{"type":"Actual Rate","name":"New Actual Rate","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"5436c96d-ed7b-4b52-abc9-9739ef923808","savedPayload":{"position":{"x":23429.7326605304,"y":39283.79297849066},"targetPosition":{"x":23502.309906357827,"y":39673.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"days":{"type":"Days","name":"New Days","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","id":"79935293-07bc-4415-bb91-1e45c95064e4","savedPayload":{"position":{"x":23672.625481283212,"y":39314.78405501903},"targetPosition":{"x":23502.309906357827,"y":39673.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"userDefinedStatistics":[{"type":"User Defined Statistic","name":"New User Defined Statistic","config":"{\n\"initialValue\": 0\n}","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"80438372-c0f2-4f67-ae8f-7c5e909a990a","savedPayload":{"position":{"x":23936.80683654285,"y":39436.51152742291},"targetPosition":{"x":23764.692171925333,"y":39530.41096946171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a1c12939-d02f-483d-b5e9-6532f4f88c08","savedPayload":{"position":{"x":23764.692171925333,"y":39530.41096946171},"targetPosition":{"x":23502.309906357827,"y":39673.30982853619},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"61467c34-b621-4980-876a-9c66eef0144f","savedPayload":{"position":{"x":25679.970959398812,"y":39866.93817077087},"targetPosition":{"x":25573.35112148518,"y":39200.41194460773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5bfce673-ceb2-4104-bd7e-75d62453164e","savedPayload":{"position":{"x":25573.35112148518,"y":39200.41194460773},"targetPosition":{"x":24898.58242712668,"y":39182.74250449992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1b0f368b-51b9-4c61-9c7b-b0b308cf7ba9","savedPayload":{"position":{"x":24898.58242712668,"y":39182.74250449992},"targetPosition":{"x":24715.55093774257,"y":39593.83796043909},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07f9794a-dea7-4075-bdea-00e4b90960a6","savedPayload":{"position":{"x":24715.55093774257,"y":39593.83796043909},"targetPosition":{"x":24940.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"eb20f622-71bf-4479-a574-d2320e1d4bd1","savedPayload":{"position":{"x":24940.55093774257,"y":39983.549392142086},"targetPosition":{"x":24940.55093774257,"y":39983.549392142086},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Mines/Masters.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Mines/Masters.json deleted file mode 100644 index 0b5dee81d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Mines/Masters.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Trading Mine","name":"Masters","config":"{ \n\"codeName\": \"Masters\"\n}","project":"Superalgos","tradingBots":[{"type":"Trading Bot","name":"Low Frequency","config":"{\n\"codeName\": \"Low-Frequency\",\n\"repo\": \"Exchange-Raw-Data-Sensor-Bot\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Trading","config":"{\n \"codeName\": \"Trading\",\n \"sessionRunWaitTime\": 5000,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Low-Frequency-Trading-Process\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Trading Engine","project":"Superalgos","outputDatasets":[],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Episode","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episode Counters","project":"Superalgos","id":"ec8d74ba-a4ad-417a-b479-6bae95b8a1fe","savedPayload":{"position":{"x":24910.97457254189,"y":18457.46644293786},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3ed03a02-381d-43fe-9faa-761728c53bd8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Counters","project":"Superalgos","id":"22b0af33-8c2f-4194-839b-affd18f298d5","savedPayload":{"position":{"x":24834.601232363748,"y":18490.07023931273},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Statistics","project":"Superalgos","id":"23ab91ae-2e78-4993-bb69-855f69cef1ce","savedPayload":{"position":{"x":24753.53736157276,"y":18508.085329665024},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Statistics","project":"Superalgos","id":"d0a4515a-279d-4c27-8de2-168108861242","savedPayload":{"position":{"x":24670.543493063306,"y":18510.89823169951},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"91953362-8751-4440-a898-21245cd47c15"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Candle","project":"Superalgos","id":"7fc80977-5b37-413e-8107-0a89a16e08b0","savedPayload":{"position":{"x":24588.445883487308,"y":18498.413155411115},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Candle","project":"Superalgos","id":"a6888750-1043-420c-9253-633e1399c5e4","savedPayload":{"position":{"x":24510.040268473647,"y":18471.05526509864},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Balances","project":"Superalgos","id":"0ad114df-f076-4a86-8c62-4c4a146da73c","savedPayload":{"position":{"x":24437.996657204443,"y":18429.756200904503},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"acddff59-b51b-4b45-b58f-71d4077755ee"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Balances","project":"Superalgos","id":"04b51302-957d-4365-ad55-9f89d60e261c","savedPayload":{"position":{"x":24374.76840845468,"y":18375.922352927064},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"213b8fe8-f772-41ea-a3f5-97867be555f7"}}},{"type":"Output Dataset","name":"Multi-Period-Market Distance To Event","project":"Superalgos","id":"6d460b9b-5bf6-49ad-9611-70904cdc85be","savedPayload":{"position":{"x":24322.508684401608,"y":18311.386968292616},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0ef6aa1d-3345-40f8-bc4f-4d2e2ff199ff"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Distance To Event","project":"Superalgos","id":"ef6652ab-d2ef-482c-bfb4-a96bbd36d239","savedPayload":{"position":{"x":24282.997127269216,"y":18238.34772212322},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"c291211b-4012-4440-a302-8e15412b0990"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Base Asset","project":"Superalgos","id":"83ceb16b-c882-4528-908a-d03387b475f1","savedPayload":{"position":{"x":24257.579255746765,"y":18159.291878346256},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"e8b67591-d484-4c08-a711-7a4418ee101a"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Base Asset","project":"Superalgos","id":"bf9c3526-8056-425f-954e-33bea9d757bf","savedPayload":{"position":{"x":24247.120644963576,"y":18076.91158890451},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"c6f34adc-2863-4ce6-8379-9b3cc1b37b73"}}},{"type":"Output Dataset","name":"Multi-Period-Market Episode Quoted Asset","project":"Superalgos","id":"c6af3132-aa9f-4703-8031-d078c75bc579","savedPayload":{"position":{"x":24251.977450366147,"y":17994.01221575066},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"99d1f17b-92cb-4544-88a2-fe463dd1de4b"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episode Quoted Asset","project":"Superalgos","id":"5390a269-2c8e-4eee-ba8d-23e026cd793d","savedPayload":{"position":{"x":24271.984279271586,"y":17913.41679761062},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"daf4e3e9-426d-44c3-8b43-6849778d972f"}}},{"type":"Output Dataset","name":"Multi-Period-Market Current Episode","project":"Superalgos","id":"a97335c5-a44f-4052-b66b-b5bedbe6b3a0","savedPayload":{"position":{"x":24306.45982311707,"y":17837.869914785595},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"26f6b248-21de-4898-9ee5-58b728a04267"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Current Episode","project":"Superalgos","id":"f448ea93-263f-419d-95a4-518301c1968d","savedPayload":{"position":{"x":24354.230058605797,"y":17769.944225761697},"targetPosition":{"x":24696.86240363471,"y":18061.668541066385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ecdfe444-00e6-4ad4-a482-14b59a1e752a"}}}],"outputDatasetFolders":[],"id":"995b0e5f-ea6a-4142-9877-4edd429d8bd7","savedPayload":{"position":{"x":24696.86240363471,"y":18061.668541066385},"targetPosition":{"x":25046.57808629035,"y":17778.47436509396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Strategy","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Current Strategy","project":"Superalgos","id":"6907e0fe-9f3e-466b-85ca-04f83447b5c3","savedPayload":{"position":{"x":24397.82260813974,"y":18249.822810246827},"targetPosition":{"x":24602.118333022536,"y":17848.869874362063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7b4550d3-69d1-41ac-bad3-e2283f798bb8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Current Strategy","project":"Superalgos","id":"6f3c4eff-ed37-4fe6-862c-39d96ea9e10e","savedPayload":{"position":{"x":24201.16539713777,"y":18053.165599244858},"targetPosition":{"x":24602.118333022536,"y":17848.869874362063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"49d55660-71e9-4c5a-8b1a-198934844e4a"}}},{"type":"Output Dataset","name":"Multi-Period-Market Last Strategy","project":"Superalgos","id":"922a493f-254d-48dc-870b-83e96a0df0fe","savedPayload":{"position":{"x":24157.658579754723,"y":17778.47436509396},"targetPosition":{"x":24602.118333022536,"y":17848.869874362063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a2e7b5d2-8556-4c58-b2f6-a9c27c939e94"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Last Strategy","project":"Superalgos","id":"0a0466df-1c89-4ecb-beb0-1e3bedaf4953","savedPayload":{"position":{"x":24283.92028148859,"y":17530.671822828117},"targetPosition":{"x":24602.118333022536,"y":17848.869874362063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"76ff2401-1d4f-4dda-87f6-5e0b7af3eab2"}}}],"outputDatasetFolders":[],"id":"fafacd7f-c6d4-425a-b483-68054946b94c","savedPayload":{"position":{"x":24602.118333022536,"y":17848.869874362063},"targetPosition":{"x":25046.57808629035,"y":17778.47436509396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Position","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Current Position","project":"Superalgos","id":"2e19e13d-2709-4622-856d-c5efa444eff5","savedPayload":{"position":{"x":24331.240331320878,"y":17956.828098898823},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7506dd91-ad9d-4aad-bb1a-604bc5d3fe8d"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Current Position","project":"Superalgos","id":"7f943c9b-5a42-4590-a02b-dc52e26ab8bd","savedPayload":{"position":{"x":24232.88802615388,"y":17835.373116909428},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"06678152-1082-4f00-9275-22ffde715469"}}},{"type":"Output Dataset","name":"Multi-Period-Market Last Position","project":"Superalgos","id":"2f77df6b-e0f3-4a23-bf2c-bc2531567744","savedPayload":{"position":{"x":24182.007141098795,"y":17687.60429706668},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"485671ff-0d50-4c08-958c-93e657cd238f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Last Position","project":"Superalgos","id":"a464a09e-8f91-43f1-8752-85194adc3927","savedPayload":{"position":{"x":24184.734661815157,"y":17531.344739879132},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"a909df42-6192-4bbd-9f38-e8800149aaa1"}}},{"type":"Output Dataset","name":"Multi-Period-Market Stop Loss","project":"Superalgos","id":"30e7e833-628e-4133-8960-e0e19d268425","savedPayload":{"position":{"x":24240.741609050656,"y":17385.441654089052},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"b0276d53-e43b-4f1b-a5d8-b118921970dd"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Stop Loss","project":"Superalgos","id":"63595c6e-3a95-4f40-8016-3d7957eb0944","savedPayload":{"position":{"x":24343.27271839418,"y":17267.493105142938},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b5d51a14-eed9-405f-90d7-e91c0ceed659"}}},{"type":"Output Dataset","name":"Multi-Period-Market Take Profit","project":"Superalgos","id":"504a520b-1aa2-44c3-95e0-1aa96444f847","savedPayload":{"position":{"x":24479.961224860886,"y":17191.725428778882},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"67fd9603-5184-4570-bebb-07c33974b40c"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Take Profit","project":"Superalgos","id":"a1c1a1e1-2617-4c71-b10b-4a0f9542da34","savedPayload":{"position":{"x":24634.320477263384,"y":17167.2773249782},"targetPosition":{"x":24626.466894366607,"y":17617.208787798576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"d1fc090a-18c0-4ff6-87d6-726d276bad43"}}}],"outputDatasetFolders":[],"id":"945db015-7460-4822-b1ce-9086206ddbb5","savedPayload":{"position":{"x":24626.466894366607,"y":17617.208787798576},"targetPosition":{"x":25046.57808629035,"y":17778.47436509396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Stages","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Open Stage","project":"Superalgos","id":"4d3664a4-74a0-428f-8790-93ec819ab48d","savedPayload":{"position":{"x":24337.900551298226,"y":17575.264351944043},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"b553683f-14f4-48be-91a6-0fb5381887e4"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Open Stage","project":"Superalgos","id":"e5c413a5-599d-4544-a8ee-240de57b4bc2","savedPayload":{"position":{"x":24313.452447497544,"y":17420.905099541545},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"3287fb46-854d-41de-8a42-285f9c10d4fa"}}},{"type":"Output Dataset","name":"Multi-Period-Market Close Stage","project":"Superalgos","id":"d1ac39c5-f175-40a4-b55c-2631e262b360","savedPayload":{"position":{"x":24343.27271839418,"y":17267.493105142938},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0c30c4d3-3e58-4422-a178-450c24f95001"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Close Stage","project":"Superalgos","id":"a7425ac8-801e-4d44-8beb-43e0670cd6dd","savedPayload":{"position":{"x":24423.764599217673,"y":17133.532119392592},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"4903a08c-90b6-4726-aa4d-1d8a0acdbd77"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trigger Stage","project":"Superalgos","id":"84379ea1-432c-42c2-910b-ce2d64cae90c","savedPayload":{"position":{"x":24545.219581207068,"y":17035.179814225594},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a179150b-2eaa-45ef-a7fa-14a1decf7dfc"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trigger Stage","project":"Superalgos","id":"433f36c0-cd49-410a-8649-603edcd1c9bc","savedPayload":{"position":{"x":24692.988401049817,"y":16984.29892917051},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"493f0951-e638-4da1-88b4-1c1d3829046e"}}},{"type":"Output Dataset","name":"Multi-Period-Market Manage Stage","project":"Superalgos","id":"7213f716-e04b-4f34-afdc-2189c1cb65ec","savedPayload":{"position":{"x":24849.247958237363,"y":16987.02644988687},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"56d1a25b-54b1-419c-a323-f2fad41de0ec"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Manage Stage","project":"Superalgos","id":"d0a10c39-8aeb-4700-bc2d-7711a272f9da","savedPayload":{"position":{"x":24995.151044027443,"y":17043.03339712237},"targetPosition":{"x":24763.38391031792,"y":17428.75868243832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"fef1dba7-fc21-4338-b75e-a040d71dbde5"}}}],"outputDatasetFolders":[],"id":"dc792f37-8560-4ef0-82f1-1d620b8d1754","savedPayload":{"position":{"x":24763.38391031792,"y":17428.75868243832},"targetPosition":{"x":25046.57808629035,"y":17778.47436509396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Orders","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Market Buy Orders","project":"Superalgos","id":"234a4f87-b71a-4354-8e78-a8adb1c9d04e","savedPayload":{"position":{"x":24527.791268348305,"y":17295.998374431183},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a2ea8001-2143-4055-b1d3-525d95fa8e6f"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Market Buy Orders","project":"Superalgos","id":"35e9dacf-0814-4d91-8ee4-ee9674252333","savedPayload":{"position":{"x":24549.918585966214,"y":17189.79599330211},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"557357c6-f814-4bf9-9426-82fc5e22c028"}}},{"type":"Output Dataset","name":"Multi-Period-Market Market Sell Orders","project":"Superalgos","id":"fad3d464-a7e1-4fe6-a6e5-c90cd2c2ccd6","savedPayload":{"position":{"x":24596.818817337735,"y":17091.9750740683},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"917cfdae-b736-4ed5-ad8e-d572c49ea489"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Market Sell Orders","project":"Superalgos","id":"4d0c0274-c640-40d9-a617-e632fe0307ac","savedPayload":{"position":{"x":24665.766291490956,"y":17008.22061299106},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"3c878a50-6d76-412b-95d7-f2e546960293"}}},{"type":"Output Dataset","name":"Multi-Period-Market Limit Buy Orders","project":"Superalgos","id":"b3970d06-c11b-4e23-9688-4305533c0697","savedPayload":{"position":{"x":24752.75403184197,"y":16943.400114913107},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"df8cfaa4-a4d4-4bc1-9fa2-4f8e91e45a87"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Limit Buy Orders","project":"Superalgos","id":"0b27dde5-84e1-45b5-80b5-675bf309a7c4","savedPayload":{"position":{"x":24852.726627109147,"y":16901.28071156982},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"12652573-9506-4d3e-82bb-64b1bb9e7ce0"}}},{"type":"Output Dataset","name":"Multi-Period-Market Limit Sell Orders","project":"Superalgos","id":"4090e0da-861e-4681-bc52-ec95cfb59a6d","savedPayload":{"position":{"x":24959.87403344115,"y":16884.3102295857},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f645108f-4648-497f-b361-0be5b84c233a"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Limit Sell Orders","project":"Superalgos","id":"ef44fbac-4f91-47a8-983a-a34a9bff9e8b","savedPayload":{"position":{"x":25067.96923304694,"y":16893.474931688474},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e98191d1-5b13-42eb-bd52-31e3c6830188"}}},{"type":"Output Dataset","name":"Multi-Period-Market Last Market Order","project":"Superalgos","id":"7e238b18-d0f3-426c-b10d-194e81d6e5bf","savedPayload":{"position":{"x":25170.7301258355,"y":16928.242198704265},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"768b42e9-59fe-494f-9e05-3be57fb17ca8"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Last Market Order","project":"Superalgos","id":"4bc6b052-2f68-4335-8f0d-930d869a289d","savedPayload":{"position":{"x":25262.184622238598,"y":16986.59148344799},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"26a39916-4f2d-42ab-ae86-7ab622f80624"}}},{"type":"Output Dataset","name":"Multi-Period-Market Last Limit Order","project":"Superalgos","id":"614692d9-50af-4f5f-9790-ef471eecd20b","savedPayload":{"position":{"x":25337.01771934886,"y":17065.13173758137},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f9263cd7-460d-461c-be7b-ed2a69d38d11"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Last Limit Order","project":"Superalgos","id":"3520e492-6504-4db7-9cab-1a118a31f89b","savedPayload":{"position":{"x":25390.880389569473,"y":17159.29848701637},"targetPosition":{"x":24976.182577022246,"y":17334.014611826147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f3d5b047-d9c2-4e71-8fce-6e9be3499556"}}}],"outputDatasetFolders":[],"id":"d6594a81-44be-4a3d-9186-b590e4df0d73","savedPayload":{"position":{"x":24976.182577022246,"y":17334.014611826147},"targetPosition":{"x":25046.57808629035,"y":17778.47436509396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"914ae121-5a93-4ee5-9a99-6aba6a39aead","savedPayload":{"position":{"x":25052.57808629035,"y":17778.47436509396},"targetPosition":{"x":25472.68927821409,"y":17939.739942389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Trading System","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Trading System Errors","project":"Superalgos","id":"fffef2bc-4075-4d0d-b7ea-f66f3c794439","savedPayload":{"position":{"x":24848.043146083233,"y":17641.515576746246},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2ef33675-fc52-49fd-a8ef-bc5da1711dd1"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Errors","project":"Superalgos","id":"82523512-94b4-4b08-8932-049265af5daa","savedPayload":{"position":{"x":24835.406391167166,"y":17568.276348547904},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2d0dd4c2-4f4c-4d8c-b9a5-9ca62f186369"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Highlights","project":"Superalgos","id":"777f4b37-3c50-4ae8-8005-42aa960cdae6","savedPayload":{"position":{"x":24834.996765875156,"y":17493.956066464092},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"6e0f951c-25e7-4b92-85da-8be04d424bd0"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Highlights","project":"Superalgos","id":"da5be91d-2f77-4147-b31b-c2f273af28d1","savedPayload":{"position":{"x":24846.825443717356,"y":17420.581994051536},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"fa53ecfb-a558-4810-b6f8-1f9c6c8bfc5b"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Values","project":"Superalgos","id":"eae22a32-d154-4854-a471-f6b5febd41d8","savedPayload":{"position":{"x":24870.569769197293,"y":17350.155584733722},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9c4ec2f8-f4a8-45b9-aba3-b093a7b8f86a"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Values","project":"Superalgos","id":"2e848753-bdf4-4303-93ce-cea96b78fb3a","savedPayload":{"position":{"x":24905.58205901271,"y":17284.59788736889},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b3d3fe62-e714-4cb9-a78d-55bc0add1d7c"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Status","project":"Superalgos","id":"beca64ab-2509-43f5-bca6-095c6eaf6ecf","savedPayload":{"position":{"x":24950.907269167674,"y":17225.697145044996},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b83dc93-dc14-44d9-8f8c-889f39a952da"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Status","project":"Superalgos","id":"2aa4ae9f-6938-4967-b0ce-97c97e729127","savedPayload":{"position":{"x":25005.309046083155,"y":17175.060016469855},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"0f8dcda3-1eab-439d-956c-c6eb9b1c481f"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Progress","project":"Superalgos","id":"cde9d10e-f3fc-445c-8ab8-f765f428e7d6","savedPayload":{"position":{"x":25067.303451099753,"y":17134.067750509854},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"77735fc0-9ce6-4dec-a3ad-8075a22eda40"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Progress","project":"Superalgos","id":"e277a4df-c725-4164-ba3f-bcd595ba5f60","savedPayload":{"position":{"x":25135.199438455966,"y":17103.838509321522},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2fde11bd-4515-4a4e-9dc0-f6869dd3a04e"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Running","project":"Superalgos","id":"63ba83d9-9098-4fe0-bc15-8c4aa138cb98","savedPayload":{"position":{"x":25207.144982608348,"y":17085.196867802726},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"c7b45884-6cdf-43f7-a1e5-c5325effd207"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Running","project":"Superalgos","id":"dca719f2-e5b1-4676-a5cc-0aa78cdf817d","savedPayload":{"position":{"x":25281.177596660455,"y":17078.651321338966},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"a21cbc62-e6d8-4286-b0ff-430071d46700"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Announcements","project":"Superalgos","id":"d1a11ace-444a-4709-8464-230cf0b5b4a4","savedPayload":{"position":{"x":25355.27786388957,"y":17084.380415374806},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9e29a710-30c0-4faa-b71a-f4ee109673a2"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Announcements","project":"Superalgos","id":"5cc7df48-a3d5-49c4-ab98-95d977d7ac12","savedPayload":{"position":{"x":25427.424522170655,"y":17102.22787515958},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b7e24195-a9d0-45e7-9dba-447db8000feb"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Warnings","project":"Superalgos","id":"030ff471-5471-4e48-8da1-24e48bd7a95e","savedPayload":{"position":{"x":25495.649598738117,"y":17131.706868515223},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0381cc1b-24c3-4705-9c76-94129e8605ff"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Warnings","project":"Superalgos","id":"5be3c8fd-243e-47ca-90e5-cc263c14da8b","savedPayload":{"position":{"x":25558.092091352682,"y":17172.01328534898},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b93b5cc3-7d61-4071-8eba-de15a4fea64b"}}},{"type":"Output Dataset","name":"Multi-Period-Market Trading System Infos","project":"Superalgos","id":"bdeac361-8693-44df-a47d-10eb881a0f3e","savedPayload":{"position":{"x":25613.04873159127,"y":17222.047671680626},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"cd834a3e-1b23-4e15-a068-59c235a90f89"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trading System Infos","project":"Superalgos","id":"540aea70-6c45-46e7-a4c7-717731f50872","savedPayload":{"position":{"x":25659.020445569426,"y":17280.44521988094},"targetPosition":{"x":25283.65778882998,"y":17528.644486450172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e24a4dcf-5adb-4c63-b9db-3ba2a7ece789"}}}],"outputDatasetFolders":[],"id":"c01cb90b-67d6-4e38-8720-46c405e790ca","savedPayload":{"position":{"x":25289.65778882998,"y":17528.644486450172},"targetPosition":{"x":25472.68927821409,"y":17939.739942389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Simulation Objects","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Episodes","project":"Superalgos","id":"f80a4896-072b-4e06-9d1b-e68998fef8ad","savedPayload":{"position":{"x":25301.536388553945,"y":17209.869191403413},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"38264ecd-10e7-4a62-a2ca-9b607c30e72c"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Episodes","project":"Superalgos","id":"4d029e2f-760c-4ad2-b3db-336f28f84b60","savedPayload":{"position":{"x":25444.923366125364,"y":17108.53329452643},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cdc39b61-9aa5-46d5-9e80-915e0c2d545d"}}},{"type":"Output Dataset","name":"Multi-Period-Market Strategies","project":"Superalgos","id":"cf8fb7ee-dc19-4e15-b6c5-41a36ba68a50","savedPayload":{"position":{"x":25616.17522877093,"y":17069.7829542266},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"03d1a187-b188-4ad7-b99e-6e4f6c6f0278"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Strategies","project":"Superalgos","id":"a312982f-f91a-475f-a27c-582a8312a4cd","savedPayload":{"position":{"x":25789.220432804857,"y":17099.517558541862},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"58a5a046-53a1-43a7-bb76-0c29d94ef579"}}}],"outputDatasetFolders":[{"type":"Output Dataset Folder","name":"Orders","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Market Buy Orders","project":"Superalgos","id":"7548b90c-e06e-4733-bea8-09f5338b5170","savedPayload":{"position":{"x":25736.92539867225,"y":16790.489820789164},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"45609efb-0edc-4aa9-bc12-f5b4ca6dc5bf"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Market Buy Orders","project":"Superalgos","id":"669a6acd-3570-4ffd-901f-61087b26c682","savedPayload":{"position":{"x":25886.772968376106,"y":16746.10294845561},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"5eed53d0-a3e7-4082-b7f1-cb321b3d306b"}}},{"type":"Output Dataset","name":"Multi-Period-Market Market Sell Orders","project":"Superalgos","id":"6cad3b70-d38a-46a8-ad81-899f8b2bd79f","savedPayload":{"position":{"x":26042.76482830682,"y":16755.64381933112},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"6112bd4d-07cb-41db-98c4-e286d172b5c0"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Market Sell Orders","project":"Superalgos","id":"4fe326fe-2bc5-4808-b1f4-4d234d3ec8d8","savedPayload":{"position":{"x":26186.08605796209,"y":16817.96166357985},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"07cd5668-5e0f-4385-9c02-72eebc99344a"}}},{"type":"Output Dataset","name":"Multi-Period-Market Limit Buy Orders","project":"Superalgos","id":"57dd9169-fc8f-4ff9-8019-bfd6c3dd62a9","savedPayload":{"position":{"x":26299.45000184941,"y":16925.54002947197},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"b82fb0f9-74c1-42e6-961c-a696214ef079"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Limit Buy Orders","project":"Superalgos","id":"e06f03ae-e9e5-4a58-ba22-e5f0c3251de0","savedPayload":{"position":{"x":26369.183295262348,"y":17065.40337839331},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2e03f52e-0cd2-46b4-9c10-0b8516ef9c71"}}},{"type":"Output Dataset","name":"Multi-Period-Market Limit Sell Orders","project":"Superalgos","id":"0319a6de-a73d-4a29-883b-28e473f3c5f1","savedPayload":{"position":{"x":26386.8750738615,"y":17220.68212630076},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"356495a9-b063-495d-b06d-5281c7c0007e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Limit Sell Orders","project":"Superalgos","id":"1e6c50d7-3828-4f96-828f-8447a99b10f1","savedPayload":{"position":{"x":26350.391448044968,"y":17372.647364526434},"targetPosition":{"x":25937.714414571663,"y":17193.210283510074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"934ab813-127e-4bbf-aa71-09b3cdadc0d0"}}}],"outputDatasetFolders":[],"id":"035fbced-8761-4dca-b634-ffae62724f7f","savedPayload":{"position":{"x":25937.714414571663,"y":17193.210283510074},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Stages","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Trigger Stages","project":"Superalgos","id":"2faef203-7d0e-47d2-9d36-47f38ed179a6","savedPayload":{"position":{"x":26007.659898263788,"y":16887.693438464572},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"e951c491-c864-4668-9d70-c48df90d8342"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Trigger Stages","project":"Superalgos","id":"e676f3b6-e65b-42e7-84be-44c12be7f3f7","savedPayload":{"position":{"x":26163.087121566296,"y":16904.02949790925},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ace4518d-bfe1-49e2-af7b-4ff9559fe6a9"}}},{"type":"Output Dataset","name":"Multi-Period-Market Open Stages","project":"Superalgos","id":"c8bd6875-e505-458b-afa7-80b779b7cf99","savedPayload":{"position":{"x":26303.55367498026,"y":16972.539613612767},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"613bf56d-986e-4a94-9b39-4f0ac3300b0c"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Open Stages","project":"Superalgos","id":"3d2d5c0c-8bf1-4c5c-aa6b-8ca822df0c7c","savedPayload":{"position":{"x":26412.117219098414,"y":17084.960454519656},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"44a0d895-2a7e-4f9a-b9a7-81dc32bf30e4"}}},{"type":"Output Dataset","name":"Multi-Period-Market Manage Stages","project":"Superalgos","id":"eec39a94-771d-4dd6-b1c0-1856a759f24a","savedPayload":{"position":{"x":26475.683388272842,"y":17227.73240806164},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f6e10004-71dd-4ae9-8c1f-0b71de02d274"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Manage Stages","project":"Superalgos","id":"c8340bc7-1214-452e-b8b2-5d2a83e971f2","savedPayload":{"position":{"x":26486.58516436437,"y":17383.635069551936},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8f3984d8-e735-4dab-a9cc-51e97d704154"}}},{"type":"Output Dataset","name":"Multi-Period-Market Close Stages","project":"Superalgos","id":"c889f02f-9bba-4f5b-a1a3-70c76e5bbb22","savedPayload":{"position":{"x":26443.507632283272,"y":17533.864277136578},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ee0f2bab-26b6-44c6-af1c-efbca2c765cd"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Close Stages","project":"Superalgos","id":"2052f35f-d3ab-425d-97b3-5b69edb3d1ef","savedPayload":{"position":{"x":26351.646578155196,"y":17660.300171233885},"targetPosition":{"x":26039.050311448646,"y":17336.597261081493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cbd3905d-fafc-47f3-8a61-20c9aab10d86"}}}],"outputDatasetFolders":[],"id":"1b4dcc33-ac77-4f53-9a63-47e8426f3776","savedPayload":{"position":{"x":26039.050311448646,"y":17336.597261081493},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Output Dataset Folder","name":"Position","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Period-Market Positions","project":"Superalgos","id":"d2c1174c-ce8a-404f-98fd-d3b91895ef6e","savedPayload":{"position":{"x":26193.234389019824,"y":17072.906538666033},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"55df9376-2806-429d-b43d-b96700787f74"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Positions","project":"Superalgos","id":"9ca58bc6-4b21-4b70-ba5d-c6abafa3fee0","savedPayload":{"position":{"x":26311.095998146862,"y":17123.046211382498},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"fd62b468-93fa-44e0-941f-fff7ea4b04ea"}}},{"type":"Output Dataset","name":"Multi-Period-Market Position Base Asset","project":"Superalgos","id":"57931139-936d-4ee2-99eb-9b9628321398","savedPayload":{"position":{"x":26410.05740576955,"y":17204.36032754608},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"a0ff2796-59dd-4aa4-93ed-ba4601b9de5d"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Position Base Asset","project":"Superalgos","id":"ea9f9e0d-114d-4ed4-9b61-7d155a881969","savedPayload":{"position":{"x":26482.10134718845,"y":17310.26130105888},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"9985d32d-c070-4593-8a2a-ec8bc1c78cbb"}}},{"type":"Output Dataset","name":"Multi-Period-Market Position Quoted Asset","project":"Superalgos","id":"57285cd0-120d-43a2-b4a8-d25bc166c6ce","savedPayload":{"position":{"x":26521.391250731624,"y":17432.169664864225},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"abab2ab2-3a9b-49bd-8935-9bb01c113761"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Position Quoted Asset","project":"Superalgos","id":"f085adfd-36e2-4ebd-9a42-eff08f337439","savedPayload":{"position":{"x":26524.744082080055,"y":17560.20912834357},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"40ac7181-100d-4b65-b7fd-a8103cda2300"}}},{"type":"Output Dataset","name":"Multi-Period-Market Stop Loss","project":"Superalgos","id":"09a58e0e-2309-447e-8be4-c272385c49bd","savedPayload":{"position":{"x":26491.888214777948,"y":17684.006695645818},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"0ea22a69-e7cb-4fcf-b7ae-4b7233b196c4"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Stop Loss","project":"Superalgos","id":"19c2422b-f0f9-4714-bf28-e58897c75355","savedPayload":{"position":{"x":26425.485435792758,"y":17793.53302412063},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"75b13383-2771-4f58-b2c4-ffadad2e9519"}}},{"type":"Output Dataset","name":"Multi-Period-Market Take Profit","project":"Superalgos","id":"8555e8dd-5892-435e-9051-a8ac0d901815","savedPayload":{"position":{"x":26330.915303365324,"y":17879.91494201313},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3cd59aa1-0590-43b6-9fb7-c85276ac132e"}}},{"type":"Output Dataset","name":"Multi-Period-Daily Take Profit","project":"Superalgos","id":"fd77d264-2a52-4b8a-9a85-2510a1cb6f68","savedPayload":{"position":{"x":26215.83932719469,"y":17936.154300068712},"targetPosition":{"x":26077.800651748476,"y":17507.84912372706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"916d5610-87ae-47e7-9067-9a406141e3df"}}}],"outputDatasetFolders":[],"id":"31ecd1c1-4248-4b51-9066-e6c6b9c4a819","savedPayload":{"position":{"x":26077.800651748476,"y":17507.84912372706},"targetPosition":{"x":25627.954855509473,"y":17519.628750465603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"059498d1-eae4-4842-8846-8d21b32ab139","savedPayload":{"position":{"x":25633.954855509473,"y":17519.628750465603},"targetPosition":{"x":25472.68927821409,"y":17939.739942389344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f50da2e7-a341-4272-9947-db65142b1e23","savedPayload":{"position":{"x":25472.68927821409,"y":17939.739942389344},"targetPosition":{"x":25655.7207675982,"y":18350.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"Low Frequency Trading","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"e7fd528f-46bb-4a13-a11f-b6994236e3e7","savedPayload":{"position":{"x":25291.66312012947,"y":17720.269056028683},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a8577e6c-9afc-4c9e-87ef-ee38531de864"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Period-Market","config":"{\n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"0517c2f1-627f-44e2-b58d-6d3f72d6c931","savedPayload":{"position":{"x":25368.343404603813,"y":17602.191772551305},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Exchange Raw Data Historic-OHLCVs","config":"{\"mainUtility\": \"Market Starting Point\"}","project":"Superalgos","id":"0b6d7ced-ccef-4a98-909c-443125480c10","savedPayload":{"position":{"x":25477.75857606864,"y":17513.589113709793},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"181c7c34-7243-497a-9ddb-1b0067c6d66e"}}}],"dataDependencies":[],"dataMineDataDependencies":[{"type":"Data Mine Data Dependencies","name":"Masters","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"Webhooks","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"External Signals Single File","project":"Superalgos","id":"4d262c83-ea85-4c13-b2c2-e06273f0dce3","savedPayload":{"position":{"x":24714.128609369203,"y":17369.058508141694},"targetPosition":{"x":25161.663462284927,"y":17416.096316612136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Single File","id":"c52d1012-5e3b-41a0-b5af-84098b0594bf"}}}],"dataDependencyFolders":[],"id":"6b94d500-7c95-4178-b714-a13261f88ddf","savedPayload":{"position":{"x":25161.663462284927,"y":17416.096316612136},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Candles Volumes","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Period-Market","project":"Superalgos","id":"d49e652b-79c6-409b-abac-22604b4e88aa","savedPayload":{"position":{"x":24808.39142755848,"y":17505.10263569847},"targetPosition":{"x":25198.10285926148,"y":17280.10263569847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}},{"type":"Data Dependency","name":"Candles Multi-Period-Daily","project":"Superalgos","id":"16310d45-0ce4-4c0d-a307-c205aeb48e64","savedPayload":{"position":{"x":24750.568006345755,"y":17233.064827228027},"targetPosition":{"x":25198.10285926148,"y":17280.10263569847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"678a567c-f08d-49b9-813b-4e54fd6afadb"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Daily","project":"Superalgos","id":"1f7365be-a68e-491a-8446-32ba2ea0e7a3","savedPayload":{"position":{"x":24863.68768779665,"y":16978.993862836982},"targetPosition":{"x":25198.10285926148,"y":17280.10263569847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2e683057-f911-4105-bc77-16f2706d1915"}}},{"type":"Data Dependency","name":"Volumes Multi-Period-Market","project":"Superalgos","id":"3cf1d63c-155a-45ae-a2b3-36faabb5ea9f","savedPayload":{"position":{"x":25104.542598393487,"y":16839.936215368256},"targetPosition":{"x":25198.10285926148,"y":17280.10263569847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9bf0483c-4825-4a46-9cf4-1b5262579fc1"}}}],"dataDependencyFolders":[],"id":"c226ac3e-1e4d-48fc-8b5e-27ea871abeeb","savedPayload":{"position":{"x":25198.10285926148,"y":17280.10263569847},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Bollinger Bands","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"af7dc60c-d5d2-433b-ab09-fd37c61654a7","savedPayload":{"position":{"x":24834.61672340561,"y":17255.585613089082},"targetPosition":{"x":25274.78314373582,"y":17162.02535222109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f5b2a7d8-fc32-44a3-a002-9b0fc30a9719"}}},{"type":"Data Dependency","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"a7dd4c24-e5b3-4ddf-b350-44c5ef206eea","savedPayload":{"position":{"x":24863.68768779665,"y":16978.993862836982},"targetPosition":{"x":25274.78314373582,"y":17162.02535222109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"506104fa-e99a-4a46-930e-176bce311aff"}}},{"type":"Data Dependency","name":"Percentage Bandwidth Multi-Period-Market","project":"Superalgos","id":"eeb73829-8815-4e9d-be40-80ce46049381","savedPayload":{"position":{"x":25049.78314373582,"y":16772.313920518092},"targetPosition":{"x":25274.78314373582,"y":17162.02535222109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"207e9481-0730-4304-a938-cfe223d70856"}}},{"type":"Data Dependency","name":"Percentage Bandwidth Multi-Period-Daily","project":"Superalgos","id":"05418e2b-de4a-4855-ad43-82dd22c5ab57","savedPayload":{"position":{"x":25321.820952206264,"y":16714.490499305368},"targetPosition":{"x":25274.78314373582,"y":17162.02535222109},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e60d62dd-87f7-4f2d-ac21-3ac5c30a50ea"}}}],"dataDependencyFolders":[],"id":"42a0318e-15de-4d4f-937a-aa93c8bf6799","savedPayload":{"position":{"x":25274.78314373582,"y":17162.02535222109},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Bollinger Channels","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Bollinger Channels Objects Market","project":"Superalgos","id":"38f62ac3-67a7-4bfe-bede-7c64ffce5585","savedPayload":{"position":{"x":24941.034826345156,"y":17151.5643733297},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"610cd062-ab88-4892-b711-0fb430305c61"}}},{"type":"Data Dependency","name":"Bollinger Channels Objects Daily","project":"Superalgos","id":"63c7dc87-60f4-450b-b03f-460e24871381","savedPayload":{"position":{"x":24941.034826345156,"y":16995.28101342946},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"64910fea-c92a-4a55-850a-aa62d98b478e"}}},{"type":"Data Dependency","name":"Bollinger Channels Market","project":"Superalgos","id":"31fd8b9d-5d0f-4df7-9db8-a92565e93280","savedPayload":{"position":{"x":24994.48688349765,"y":16848.42269337958},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"22c1f2c6-3838-4657-add8-2e01d7056917"}}},{"type":"Data Dependency","name":"Bollinger Channels Daily","project":"Superalgos","id":"3edfa5d9-1267-45df-95a7-d6a0fabf0dc5","savedPayload":{"position":{"x":25094.943890841707,"y":16728.70269397604},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"96b4e65b-e6db-44a0-80a5-ceb9d68a09ec"}}},{"type":"Data Dependency","name":"Bollinger Sub-Channels Objects Market","project":"Superalgos","id":"ac0cddc1-4817-45fa-a960-038a8f014fa2","savedPayload":{"position":{"x":25230.2892507041,"y":16650.56101402592},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"869f615e-0cc0-44fd-8648-4a951c23a410"}}},{"type":"Data Dependency","name":"Bollinger Sub-Channels Objects Daily","project":"Superalgos","id":"37ed91b7-4a0a-4f56-af52-697b97e866cf","savedPayload":{"position":{"x":25384.19831520065,"y":16623.42269337958},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"029479ae-275d-4854-ad3e-66948656a053"}}},{"type":"Data Dependency","name":"Bollinger Sub-Channels Market","project":"Superalgos","id":"82e17882-4e77-47d6-8ac4-709232f21771","savedPayload":{"position":{"x":25538.1073796972,"y":16650.56101402592},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Market","id":"f8d44a4d-3771-4a71-97ca-dc604ff565d3"}}},{"type":"Data Dependency","name":"Bollinger Sub-Channels Daily","project":"Superalgos","id":"a592c4ef-e086-4081-9c99-7c557376627d","savedPayload":{"position":{"x":25673.452739559594,"y":16728.70269397604},"targetPosition":{"x":25384.19831520065,"y":17073.42269337958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Daily","id":"ca71e765-0f66-4b18-b500-847b9d16169b"}}}],"dataDependencyFolders":[],"id":"5b8b4ab5-f886-4639-89e5-c8c4eca90f9c","savedPayload":{"position":{"x":25384.19831520065,"y":17073.42269337958},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Candle Channels","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Candles Channels Multi-Period-Market","project":"Superalgos","id":"1470209a-172e-40ca-bec0-25f57eb4ee5c","savedPayload":{"position":{"x":25104.542598393487,"y":16839.936215368256},"targetPosition":{"x":25515.63805433266,"y":17022.967704752366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"df7d1cd7-95b0-499c-b51a-772c3fb8a2b0"}}},{"type":"Data Dependency","name":"Candles Channels Multi-Period-Daily","project":"Superalgos","id":"81c48ba3-d186-4b22-8981-752d3d28e554","savedPayload":{"position":{"x":25290.63805433266,"y":16633.256273049366},"targetPosition":{"x":25515.63805433266,"y":17022.967704752366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"07734f1c-e2e7-4a35-8567-6a996c68883e"}}},{"type":"Data Dependency","name":"Candles Channels Objects Multi-Period-Market","project":"Superalgos","id":"f72351b7-367b-459e-a297-b5abec7155f8","savedPayload":{"position":{"x":25562.675862803102,"y":16575.432851836642},"targetPosition":{"x":25515.63805433266,"y":17022.967704752366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"566b9df4-da86-4b4f-a3f4-ef8a76443714"}}},{"type":"Data Dependency","name":"Candles Channels Objects Multi-Period-Daily","project":"Superalgos","id":"c1d62c3f-6345-4ff9-9170-26a7ff91d1f2","savedPayload":{"position":{"x":25816.746827194147,"y":16688.552533287537},"targetPosition":{"x":25515.63805433266,"y":17022.967704752366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8a7d224b-7571-4e1a-8b8f-8a35aa25dc63"}}}],"dataDependencyFolders":[],"id":"4e734cf8-48e2-49a7-836f-b1249bef2547","savedPayload":{"position":{"x":25515.63805433266,"y":17022.967704752366},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Resistances and Supports","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Resistances Multi-Period-Market","project":"Superalgos","id":"f7bf772f-37d3-47a8-a243-a158e2efa091","savedPayload":{"position":{"x":25321.820952206264,"y":16714.490499305368},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"44e905fc-719f-453b-a567-fd5e3bfcae91"}}},{"type":"Data Dependency","name":"Resistances Multi-Period-Daily","project":"Superalgos","id":"39757544-c0bc-4ccf-b786-fc961d845db0","savedPayload":{"position":{"x":25562.675862803102,"y":16575.432851836642},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f4530d48-3239-4ab0-8c4d-d611cd55fde3"}}},{"type":"Data Dependency","name":"Supports Multi-Period-Market","project":"Superalgos","id":"70ed349c-815a-4eef-b06b-5c8690bf5268","savedPayload":{"position":{"x":25839.267613055203,"y":16604.503816227683},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"4a1bd251-76ed-4530-8723-08e41d50f12d"}}},{"type":"Data Dependency","name":"Supports Multi-Period-Daily","project":"Superalgos","id":"b7b2012d-6b3a-4a81-a841-0b08061a6b60","savedPayload":{"position":{"x":26045.947555374092,"y":16790.599272166855},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"deaaf4ec-9352-40b6-af9a-8541a73a5e13"}}}],"dataDependencyFolders":[],"id":"955c58c7-5e4f-4f91-9a12-0c6a81fb9ba0","savedPayload":{"position":{"x":25656.236123671093,"y":17015.599272166855},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Fees Band","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Fees Band 0.2 Multi-Period-Market","project":"Superalgos","id":"05b4030f-7240-4f9c-a03a-45591d7c9079","savedPayload":{"position":{"x":25745.191996114318,"y":16604.503816227683},"targetPosition":{"x":25792.22980458476,"y":17052.038669143407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9c699a57-f0cf-434c-8ef8-40aac182200e"}}},{"type":"Data Dependency","name":"Fees Band 0.2 Multi-Period-Daily","project":"Superalgos","id":"93dee846-2d29-46f7-8298-bc17475a360d","savedPayload":{"position":{"x":26156.287452053486,"y":16787.535305611793},"targetPosition":{"x":25792.22980458476,"y":17052.038669143407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2dd03ed7-736e-4959-ad8e-8108e59b8796"}}}],"dataDependencyFolders":[],"id":"dc1f8f70-5255-48aa-945a-c6ca9d9eb9cf","savedPayload":{"position":{"x":25792.22980458476,"y":17052.038669143407},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Volume Analysis","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Volume Analysis Multi-Period-Market","project":"Superalgos","id":"943209e4-1d8c-4a82-a6c3-51fb0a92a848","savedPayload":{"position":{"x":26003.86734893013,"y":16688.552533287537},"targetPosition":{"x":25910.307088062138,"y":17128.71895361775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"1d4df142-34c0-4439-a532-208c56cbb349"}}},{"type":"Data Dependency","name":"Volume Analysis Multi-Period-Daily","project":"Superalgos","id":"489ed763-0358-4ad6-8b67-27479e37456d","savedPayload":{"position":{"x":26338.282520394958,"y":16989.661306149024},"targetPosition":{"x":25910.307088062138,"y":17128.71895361775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cccbe688-75e9-405c-a087-8c1bb953430f"}}}],"dataDependencyFolders":[],"id":"967f32f4-bf9a-48ee-b029-0aac6d7f6c6f","savedPayload":{"position":{"x":25910.307088062138,"y":17128.71895361775},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Candle Analysis","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"Candle Analysis Multi-Period-Market","project":"Superalgos","id":"f28c08ba-4f8e-4f1d-a8d6-9b448332ca91","savedPayload":{"position":{"x":26223.90974690365,"y":16848.42269337958},"targetPosition":{"x":25998.90974690365,"y":17238.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"f65e4bf0-df3b-414c-aeba-f21dadb5d7ec"}}},{"type":"Data Dependency","name":"Candle Analysis Multi-Period-Daily","project":"Superalgos","id":"6f2baf08-d5ba-4e97-99a0-d3b1860779ae","savedPayload":{"position":{"x":26448.90974690365,"y":17238.13412508258},"targetPosition":{"x":25998.90974690365,"y":17238.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2127b8f1-932e-41c4-8eb9-1e0b6f02c2ec"}}}],"dataDependencyFolders":[],"id":"9372e4cf-b684-4535-b1db-0806cb0f21cd","savedPayload":{"position":{"x":25998.90974690365,"y":17238.13412508258},"targetPosition":{"x":25609.19831520065,"y":17463.13412508258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bb373fba-6e46-49cb-96f3-3993b0fabddf","savedPayload":{"position":{"x":25609.19831520065,"y":17463.13412508258},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}},{"type":"Data Mine Data Dependencies","name":"","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"SMA","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"f6c100bb-6d55-4413-885a-cf72c0c88737","savedPayload":{"position":{"x":25051.32356560553,"y":17419.160283167195},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"3b21f9d7-2cbc-4c23-80c8-cc5e5b06a22c"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f222eb9d-03d7-4d07-8359-eab4175236f8","savedPayload":{"position":{"x":25004.285757135083,"y":17337.68840901969},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2c338fe0-385f-45ab-b210-b98ef013228d"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f6916d88-c2c3-47b1-b1e2-17b07cc7f806","savedPayload":{"position":{"x":24975.214792744042,"y":17248.217180503572},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"78a6ef37-4df8-4ac8-83a0-c9a732467c59"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"3ef5ba50-e0e4-43e3-9ff6-7e5a38cdb27a","savedPayload":{"position":{"x":24965.381213074255,"y":17154.65691963558},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f155e2ed-7082-4021-a4ff-a6f3cfd5683d"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"c54592c1-b3ff-4e26-afd7-2c99a41bc480","savedPayload":{"position":{"x":24975.214792744042,"y":17061.09665876759},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"af9b9cef-2a74-486f-b79e-047d68669a1f"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"da27910b-25c6-4353-aaa6-11833ceff9e2","savedPayload":{"position":{"x":25004.285757135083,"y":16971.62543025147},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"de5cfa30-edbf-4d5b-8d7f-facfb69a0f3e"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"94e0b16a-5479-41cc-ac49-c3731d7649a7","savedPayload":{"position":{"x":25051.32356560553,"y":16890.153556103967},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Muti-Period-Market","id":"a5d28568-fb58-469a-9820-b9f0e8eab705"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f53b92bf-81a9-460c-8606-d7393f7ea1b9","savedPayload":{"position":{"x":25114.272440212768,"y":16820.241748170753},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"01f32aa3-55e9-4f8c-80c7-997b52073274"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"7255a015-bcba-46cc-bce3-a086bde7cd9c","savedPayload":{"position":{"x":25190.381213074255,"y":16764.945487932582},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"c0862b3d-d35a-4d3e-8d80-258b8a01c37c"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"7d125034-419a-4213-99f9-17ee742b5060","savedPayload":{"position":{"x":25276.32356560553,"y":16726.68148730276},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f5050eb2-0a99-464e-b5e2-2d8f40453e9a"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"40e2db15-fa28-4e7f-a06f-55db43a82c9b","savedPayload":{"position":{"x":25368.343404603813,"y":16707.122066719858},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"6ba76363-0f50-4e67-8678-3eb4fd6d07d6"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"4428af09-2752-4150-8a93-e67835f9f153","savedPayload":{"position":{"x":25462.419021544698,"y":16707.122066719858},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"92d92b3e-6870-499b-bfec-33bab220bf62"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"22181196-5218-4820-97e8-7e5611db578a","savedPayload":{"position":{"x":25554.43886054298,"y":16726.68148730276},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"4c486321-22e0-4991-9a1c-571bada649ad"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"43064f0e-46fb-4ddf-9aa1-2e60cfc2bcdd","savedPayload":{"position":{"x":25640.381213074255,"y":16764.945487932582},"targetPosition":{"x":25415.381213074255,"y":17154.65691963558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"819688c9-c7bd-444b-9658-2a4379125c72"}}}],"dataDependencyFolders":[],"id":"865ca804-48d0-453f-859b-59da94c60e7f","savedPayload":{"position":{"x":25415.381213074255,"y":17154.65691963558},"targetPosition":{"x":25749.796384539084,"y":17455.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"EMA","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"45ed8174-7f73-4ef4-9b97-c7fdd06d3440","savedPayload":{"position":{"x":25206.236123671093,"y":17015.599272166855},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ea1af06a-2584-43f0-aecf-ec8ad9169e9c"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"896fadd1-75bd-4c5f-9ee6-e0bb01aef101","savedPayload":{"position":{"x":25216.06970334088,"y":16922.039011298864},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e7f5899c-fc4c-412d-a8db-77c1bef8ed21"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"fede78a8-c43d-466b-bdbd-37e06a3f5c1b","savedPayload":{"position":{"x":25245.14066773192,"y":16832.567782782746},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"85e3f0ce-5331-4c0b-900a-e73aaf53d96e"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"7b1ed9bd-230c-416f-a429-53162bee94c6","savedPayload":{"position":{"x":25292.178476202367,"y":16751.09590863524},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e04edb48-09ab-4f92-beb7-14ba647de7d6"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"9baa62ae-c198-46b7-8ac0-4e682cac04d1","savedPayload":{"position":{"x":25355.127350809606,"y":16681.184100702027},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"6b6840f7-3b76-474a-9d27-9515cbcd6499"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"cb48a108-c578-4423-a809-b93fe5dc1178","savedPayload":{"position":{"x":25431.236123671093,"y":16625.887840463856},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ef3d5a7d-11eb-4ead-8e24-49ac7c80b0c7"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"6c98f48d-b32a-4afa-b6e2-f5879d75d2cb","savedPayload":{"position":{"x":25517.178476202367,"y":16587.623839834036},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"4e36a5a5-7a03-43a9-b3e0-0c5763c29199"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f8ffaf2b-65bc-4000-8d70-6a5bd073330e","savedPayload":{"position":{"x":25609.19831520065,"y":16568.06441925113},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"15ccbcff-318d-46db-93f2-d649b57fd52a"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"1474cd98-5fa6-40cb-997b-c845639bb284","savedPayload":{"position":{"x":25703.273932141536,"y":16568.06441925113},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"5586aa74-2ecb-4b71-83ea-d621aa400660"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"523d76b3-5cb7-43a2-84d3-2cd9e416f4cd","savedPayload":{"position":{"x":25795.29377113982,"y":16587.623839834036},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"0198fa3f-98e3-4c57-a4a4-a7a8e27905d3"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"116353fa-9a96-4b92-aae0-3360a555417e","savedPayload":{"position":{"x":25881.236123671093,"y":16625.887840463856},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ea61dfed-8f93-4b4f-8575-61ca2547ea90"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"3bed9aac-6c45-43d3-8886-f415cf8e2a0c","savedPayload":{"position":{"x":25957.34489653258,"y":16681.184100702027},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b251aca0-1996-4d13-99ed-6fb9796ec8d6"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"c6c3542a-4fac-429b-9887-d4aa78602149","savedPayload":{"position":{"x":26020.29377113982,"y":16751.09590863524},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"dea3491f-aae7-4419-a98f-108cf5d69b87"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"c6efe95b-6f58-4916-b879-eafe896d42fe","savedPayload":{"position":{"x":26067.331579610265,"y":16832.567782782746},"targetPosition":{"x":25656.236123671093,"y":17015.599272166855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"6624337b-4afd-44b8-a2ea-3f1779ddda7e"}}}],"dataDependencyFolders":[],"id":"c4bcaef1-029d-42a2-adaf-c89bd5e340ed","savedPayload":{"position":{"x":25656.236123671093,"y":17015.599272166855},"targetPosition":{"x":25749.796384539084,"y":17455.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"MACD","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"4ebcee82-fb06-48c5-bd00-be086fe9b10d","savedPayload":{"position":{"x":25609.124963770802,"y":16732.073969851346},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"01d43ed0-2a80-4eca-bee6-db2fe40470fc"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"dc57c67e-aee7-43e5-812c-1a2b6f4b0523","savedPayload":{"position":{"x":25735.56085786811,"y":16640.21291572327},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"dd5d3067-ff7b-4353-ba4f-c030bd3da796"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"929cdf22-03cf-4808-87c9-410788b306ff","savedPayload":{"position":{"x":25885.79006545275,"y":16597.135383642173},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"19b1d791-d2ea-4f25-a6e1-fe0a64450745"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"6acc9176-a33a-4d95-a065-8a7f278d3d7b","savedPayload":{"position":{"x":26041.692726943045,"y":16608.0371597337},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ec2611a6-699b-45a5-beec-679dd4b7734a"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"0cc6f43f-ed39-4ff4-9811-cc3ad841bc42","savedPayload":{"position":{"x":26184.46468048503,"y":16671.603328908128},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"c390cbd3-0ba0-4507-8614-42c88f4ce7e6"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"756737a7-a6c7-4f2a-845b-2881814537d2","savedPayload":{"position":{"x":26296.88552139192,"y":16780.166873026283},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"29e18539-f188-4d29-9531-25cd3ee8f282"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"a4c788e6-3c63-46a3-b752-f584eab5213b","savedPayload":{"position":{"x":26365.395637095437,"y":16920.633426440247},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"89254c6c-9be2-4037-b063-467edc660d10"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"ba2ac8fe-e021-444d-957e-84be68d6f918","savedPayload":{"position":{"x":26381.731696540115,"y":17076.060649742754},"targetPosition":{"x":25932.827873923194,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"8a9dde13-e4b8-40f3-80bc-ea51050b2f08"}}}],"dataDependencyFolders":[],"id":"cc197aba-39d0-4736-8c2b-bda6eb134bf0","savedPayload":{"position":{"x":25932.827873923194,"y":17044.670236557897},"targetPosition":{"x":25749.796384539084,"y":17455.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"RSI","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"d346bec8-3710-4295-8953-20350461715c","savedPayload":{"position":{"x":26364.507816242083,"y":16841.05426079407},"targetPosition":{"x":26139.507816242083,"y":17230.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"5ec62760-e144-4496-98ab-0415a4b315ec"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"3e7e6c8d-9473-49b2-b2fd-4a3f6dc58edc","savedPayload":{"position":{"x":26589.507816242083,"y":17230.76569249707},"targetPosition":{"x":26139.507816242083,"y":17230.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f1556d09-f134-4678-83fb-04002d1dcd34"}}}],"dataDependencyFolders":[],"id":"285b291e-023c-4c30-9739-b75f72e47ef8","savedPayload":{"position":{"x":26139.507816242083,"y":17230.76569249707},"targetPosition":{"x":25749.796384539084,"y":17455.76569249707},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35f72951-fd87-499a-9094-2674c68386c3","savedPayload":{"position":{"x":25749.796384539084,"y":17455.76569249707},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"type":"Data Mine Data Dependencies","name":"","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"Super Trend","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"aa25c359-b0ad-471a-9beb-2f36a5343e25","savedPayload":{"position":{"x":25210.191245981965,"y":16945.115952620785},"targetPosition":{"x":25621.286701921137,"y":17128.147442004894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7c8e7a6f-99c8-4d90-9f44-e3e9e909eb88"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"75981994-324a-46e8-bb53-fa2d3ce6d2ca","savedPayload":{"position":{"x":25574.248893450695,"y":16680.61258908917},"targetPosition":{"x":25621.286701921137,"y":17128.147442004894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"c17b5d3f-7cf7-418a-92b8-f8c67a120446"}}}],"dataDependencyFolders":[],"id":"182ce481-aaa7-4eb6-a941-87ea4bd18e5f","savedPayload":{"position":{"x":25621.286701921137,"y":17128.147442004894},"targetPosition":{"x":25885.79006545275,"y":17492.20508947362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Wave Trend","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"b5de16ef-ce7e-4dc2-9719-0715ed9b6de7","savedPayload":{"position":{"x":25574.248893450695,"y":16680.61258908917},"targetPosition":{"x":25838.75225698231,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9b727bdd-1684-43e1-a39c-fbd14ce64828"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"3ab774f7-128d-4d79-870d-eeedeb53674e","savedPayload":{"position":{"x":26021.78374636642,"y":16633.574780618725},"targetPosition":{"x":25838.75225698231,"y":17044.670236557897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"3bf983d5-4d3c-46f8-a130-9e621b76e62d"}}}],"dataDependencyFolders":[],"id":"afd3b0b9-8d11-4d78-a777-de60564a8162","savedPayload":{"position":{"x":25838.75225698231,"y":17044.670236557897},"targetPosition":{"x":25885.79006545275,"y":17492.20508947362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Donchian Channel","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"1a048d09-ae81-4514-a9bd-605420d81ba4","savedPayload":{"position":{"x":26021.78374636642,"y":16633.574780618725},"targetPosition":{"x":26068.82155483686,"y":17081.10963353445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"7298225c-3b68-4f34-a935-fc0ab3d8f662"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"981bf6e9-f3e9-4818-9db0-f97924723a2b","savedPayload":{"position":{"x":26432.879202305587,"y":16816.606270002834},"targetPosition":{"x":26068.82155483686,"y":17081.10963353445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"50ed783e-0e71-4903-8a82-854c8bd2ed6e"}}}],"dataDependencyFolders":[],"id":"cb76ca1e-8d5e-4155-a830-105e5b2e9591","savedPayload":{"position":{"x":26068.82155483686,"y":17081.10963353445},"targetPosition":{"x":25885.79006545275,"y":17492.20508947362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"DMI Directional Movement","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"dc3dfe16-1717-4205-84bc-cfb4901cd882","savedPayload":{"position":{"x":26432.879202305587,"y":16816.606270002834},"targetPosition":{"x":26249.847712921477,"y":17227.701725942006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"ffc7f78b-9ec3-4218-b76f-47233d535a17"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"475e4ca7-1deb-400d-8f00-2cb436ccf866","savedPayload":{"position":{"x":26697.3825658372,"y":17180.663917471564},"targetPosition":{"x":26249.847712921477,"y":17227.701725942006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"9b222dca-e8c2-4392-9c3e-7c970dca4a52"}}}],"dataDependencyFolders":[],"id":"b5dc9ede-b1c0-4c9d-8af3-47dca243d9ae","savedPayload":{"position":{"x":26249.847712921477,"y":17227.701725942006},"targetPosition":{"x":25885.79006545275,"y":17492.20508947362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Ichimoku Cloud","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"c077f92a-4899-4a01-961c-da5c6a460ed4","savedPayload":{"position":{"x":26697.3825658372,"y":17180.663917471564},"targetPosition":{"x":26333.324918368475,"y":17445.167281003178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"80018870-2528-42bf-a3a7-6f0b5e44d9c9"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"2ae91f5c-28de-40d1-93ba-89e50bca120b","savedPayload":{"position":{"x":26744.420374307647,"y":17628.198770387287},"targetPosition":{"x":26333.324918368475,"y":17445.167281003178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"ef8da44c-8cc5-41fc-add6-f2feff945632"}}}],"dataDependencyFolders":[],"id":"bb7bd319-2d2a-4ee7-af94-e21613f73543","savedPayload":{"position":{"x":26333.324918368475,"y":17445.167281003178},"targetPosition":{"x":25885.79006545275,"y":17492.20508947362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4753c44e-2dfa-48c4-8e93-159d17f4511b","savedPayload":{"position":{"x":25885.79006545275,"y":17492.20508947362},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Zeus","id":"d2083ac0-43e2-41e4-83c7-eb09a6f29353"}}},{"type":"Data Mine Data Dependencies","name":"","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"ATR","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"0bd705dc-9278-4d39-b266-f142a556c94c","savedPayload":{"position":{"x":25602.914413045364,"y":16874.414517551642},"targetPosition":{"x":25980.316168620804,"y":17119.502083308405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"67695466-be2d-43b4-9824-83baa7a08412"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"0681e9a9-9895-4420-aa40-598f1474919a","savedPayload":{"position":{"x":25819.05059132542,"y":16699.390891384664},"targetPosition":{"x":25980.316168620804,"y":17119.502083308405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"e3d0bccf-5f97-4902-92df-4ac8fe8c41a8"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"e59288bb-e428-4686-837f-1475ae86f7b0","savedPayload":{"position":{"x":26096.784738916936,"y":16684.835461478324},"targetPosition":{"x":25980.316168620804,"y":17119.502083308405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"2570d2c7-72e3-4131-97dc-a9f97f493e93"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"75de7f05-ae08-462d-9840-c7e8ce83db21","savedPayload":{"position":{"x":26330.031851276442,"y":16836.307907335977},"targetPosition":{"x":25980.316168620804,"y":17119.502083308405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"93eb665f-d903-4825-9fb1-2783e917ac89"}}}],"dataDependencyFolders":[],"id":"fb94c6f8-1001-49ee-95fb-300c10e94c7d","savedPayload":{"position":{"x":25980.316168620804,"y":17119.502083308405},"targetPosition":{"x":26003.86734893013,"y":17568.885373947964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"ROC","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"06cc9d0c-7a8d-4da0-8ab8-1724352c44f0","savedPayload":{"position":{"x":26134.3246635978,"y":16818.083267269838},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"40268fec-e5e8-4b05-9f27-c4072ebda94a"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"4384ac6e-1f40-426a-baea-42e353612ffd","savedPayload":{"position":{"x":26331.887991066884,"y":16785.275644087655},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"cb60d68b-b11d-4317-8830-65c212a8c728"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f44fb6a3-2dee-47ad-850b-37fb02cc7d82","savedPayload":{"position":{"x":26524.12109277358,"y":16841.436512205426},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"41a488be-c66c-458d-99fc-490b9e8172ef"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"727b8b9a-b93b-4c75-bfe7-24e5a5117140","savedPayload":{"position":{"x":26672.949845340612,"y":16975.442522924583},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"30276899-0d68-40e3-9c35-a28442485b55"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"d62366e0-983c-44f4-8091-0c5d35c7fd3a","savedPayload":{"position":{"x":26748.8968890572,"y":17160.752142346322},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"9c6b7d85-01f5-449c-a5be-9a357b6588bc"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"68de0e1d-b715-457f-8317-3de7f4a95ba7","savedPayload":{"position":{"x":26736.919980485916,"y":17360.662527670836},"targetPosition":{"x":26304.976121791617,"y":17234.470202483135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"66f59b6d-9d4b-4cef-9ffd-aed019219809"}}}],"dataDependencyFolders":[],"id":"b9d44070-286a-4e06-a1b1-e8f0a4c443cb","savedPayload":{"position":{"x":26304.976121791617,"y":17234.470202483135},"targetPosition":{"x":26003.86734893013,"y":17568.885373947964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Stochastic","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"4e1b5819-e232-4e83-b823-adaaea13f6be","savedPayload":{"position":{"x":26830.652395145127,"y":17300.246627881876},"targetPosition":{"x":26453.250639569687,"y":17545.33419363864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"88b1ff0e-ad99-474c-8833-7b76a5a57ebd"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"e326bbc5-5a60-47a7-bc0c-f5cbf73ed6f4","savedPayload":{"position":{"x":26854.203575454452,"y":17749.629918521434},"targetPosition":{"x":26453.250639569687,"y":17545.33419363864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"4b941e0d-8b0a-41e2-bc20-54e0bc0d936a"}}}],"dataDependencyFolders":[],"id":"8906261a-12ed-426f-9e61-e3364d3416f9","savedPayload":{"position":{"x":26453.250639569687,"y":17545.33419363864},"targetPosition":{"x":26003.86734893013,"y":17568.885373947964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"590a75c2-4bf6-48e0-9d78-161dde4ab1dd","savedPayload":{"position":{"x":26003.86734893013,"y":17568.885373947964},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Alpha","id":"511bef1e-62d8-4ff9-8d87-15bd0d3d630c"}}},{"type":"Data Mine Data Dependencies","name":"","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"Candles Probabilities","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"701b2fe3-63a4-42ea-8258-a6ccfbb4dda1","savedPayload":{"position":{"x":26317.47000777164,"y":16838.589113709793},"targetPosition":{"x":26317.47000777164,"y":17288.589113709793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"85c67513-347a-4948-9121-dee04543fcff"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"ad078b3b-3e2f-41d4-b47d-0276b121a9e1","savedPayload":{"position":{"x":26707.18143947464,"y":17063.589113709793},"targetPosition":{"x":26317.47000777164,"y":17288.589113709793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"fa17370b-0a9c-4350-9cce-1df4be39b58c"}}}],"dataDependencyFolders":[],"id":"9661bd50-2f23-4064-b92c-969cc5c43a8a","savedPayload":{"position":{"x":26317.47000777164,"y":17288.589113709793},"targetPosition":{"x":26092.47000777164,"y":17678.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Data Dependencies","name":"Candles Channels Probabilities","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"ef21ded7-724f-4808-92ee-0aea97adb1b6","savedPayload":{"position":{"x":26932.18143947464,"y":17453.300545412792},"targetPosition":{"x":26542.47000777164,"y":17678.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"fdee2b9c-3036-4db2-af42-b3507a6ffacf"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"94b23c10-760f-470a-b662-a81279f667b3","savedPayload":{"position":{"x":26932.18143947464,"y":17903.300545412792},"targetPosition":{"x":26542.47000777164,"y":17678.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"2774470d-7382-48e3-bd0a-957f0332a698"}}}],"dataDependencyFolders":[],"id":"2463d929-6149-4723-8ef0-7dd9705bb5c6","savedPayload":{"position":{"x":26542.47000777164,"y":17678.300545412792},"targetPosition":{"x":26092.47000777164,"y":17678.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"90d6ef9d-8d5b-48ec-b593-ac9b45bfc3d7","savedPayload":{"position":{"x":26092.47000777164,"y":17678.300545412792},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Samurai","id":"37e312af-e076-47aa-a1cd-bf5b2e16127d"}}},{"type":"Data Mine Data Dependencies","name":"","project":"Superalgos","botDataDependencies":[{"type":"Bot Data Dependencies","name":"Candle Patterns","project":"Superalgos","dataDependencies":[{"type":"Data Dependency","name":"","project":"Superalgos","id":"aeae278a-dfe9-4eb8-ae40-43221dd83c16","savedPayload":{"position":{"x":26645.719312161098,"y":17270.559392743104},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"07be5b9b-e8fd-49fc-ab77-20f89fdea10f"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"9eb1255c-faa0-43da-9931-9f72fe2025bb","savedPayload":{"position":{"x":26794.353619982718,"y":17318.853606890294},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"9e6d7f95-b2fe-466e-9a5d-175479cbf85d"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"67d4fcaf-7a5d-4cbc-ba27-c7bf56bb4ea4","savedPayload":{"position":{"x":26917.506588193897,"y":17415.071250815323},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"144d8665-1ff0-4db3-9340-a33fd7d0d098"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"0c6208be-27c6-49f8-a96f-9eac016daeb5","savedPayload":{"position":{"x":27000.324151284123,"y":17547.60705663965},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"f0a11771-dd69-4b9a-9347-7cb2d1f231ff"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"6bea13b9-5a49-4bd0-9f6d-e592b48a8d82","savedPayload":{"position":{"x":27032.81728888766,"y":17700.475250160685},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"8c35ce52-9dee-4d20-92e6-50ba7fd2882b"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"4b02fcb4-0e38-45c8-b0a9-c10556b57f0c","savedPayload":{"position":{"x":27011.06684906189,"y":17855.237671145536},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"4f1260c8-6d74-454e-963a-fa3ff910329c"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"f4aae5aa-54ac-44b2-a9f2-f96e558d6d17","savedPayload":{"position":{"x":26937.696255852094,"y":17993.227687573355},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Market","id":"087fc67e-78f9-4204-ba5e-8b670566a716"}}},{"type":"Data Dependency","name":"","project":"Superalgos","id":"b4b47d84-e4d2-459d-b13e-a4fc62985b46","savedPayload":{"position":{"x":26821.555085634012,"y":18097.8016669472},"targetPosition":{"x":26583.09141672907,"y":17716.18002367681},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Period-Daily","id":"b60cb94f-79c5-410c-b166-abc97d0f2bc3"}}}],"dataDependencyFolders":[],"id":"2a036cda-055e-409e-a588-a08134c16ecf","savedPayload":{"position":{"x":26583.09141672907,"y":17716.18002367681},"targetPosition":{"x":26142.924996398855,"y":17809.7402845448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"61739442-c10b-49af-a5a2-ece01fa74fdd","savedPayload":{"position":{"x":26142.924996398855,"y":17809.7402845448},"targetPosition":{"x":25702.75857606864,"y":17903.300545412792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Buddha","id":"38d04c99-51a6-4c1c-853e-ba67e216854b"}}}],"id":"5175cccd-58ed-40d8-8e0d-1a234d7460eb","savedPayload":{"position":{"x":25702.75857606864,"y":17903.300545412792},"targetPosition":{"x":25655.7207675982,"y":18350.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"a8577e6c-9afc-4c9e-87ef-ee38531de864","savedPayload":{"position":{"x":25920.224131129813,"y":17986.77775085979},"targetPosition":{"x":25655.7207675982,"y":18350.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"a47d063a-c7b9-40d9-8d77-26cead472b6c","savedPayload":{"position":{"x":26066.81622353737,"y":18167.803908944406},"targetPosition":{"x":25655.7207675982,"y":18350.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"dd185847-d39a-4501-8863-f906716b5f79","savedPayload":{"position":{"x":26103.255620513923,"y":18397.87320679896},"targetPosition":{"x":25655.7207675982,"y":18350.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8c8d761-96e5-4a86-9285-6c3881d61442","savedPayload":{"position":{"x":25655.7207675982,"y":18350.835398328516},"targetPosition":{"x":25391.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"products":[],"productDefinitionFolders":[{"type":"Product Definition Folder","name":"Trading Engine","project":"Superalgos","products":[],"productDefinitionFolders":[{"type":"Product Definition Folder","name":"Episode","project":"Superalgos","products":[{"type":"Product Definition","name":"Episode Counters","config":"{\n \"codeName\": \"Episode-Counters\",\n \"singularVariableName\": \"episodeCounter\",\n \"pluralVariableName\": \"episodeCounters\",\n \"nodePath\": \"tradingEngine.current.episode.episodeCounters\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"3ed03a02-381d-43fe-9faa-761728c53bd8","savedPayload":{"position":{"x":25303.217193651126,"y":17860.069597774705},"targetPosition":{"x":25525.131453997004,"y":17897.20530909336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"15f5b150-f1cf-403c-8cb9-2c7c4e1db8e8","savedPayload":{"position":{"x":25334.320632361807,"y":17777.973474640887},"targetPosition":{"x":25525.131453997004,"y":17897.20530909336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"f0032eaa-4b31-4e39-84c1-5e5957f21ba9","savedPayload":{"position":{"x":24830.1814199832,"y":17651.11059506823},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"baf72135-2aa6-4be6-b673-09151eeea3e6","savedPayload":{"position":{"x":24815.202323747173,"y":17495.546732755483},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{\n \"codeName\": \"periods\",\n \"isString\": false\n}","project":"Superalgos","id":"4274f7bf-7f70-4775-8d30-fc56153f70fc","savedPayload":{"position":{"x":24854.332552032636,"y":17344.241366637707},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Strategies","config":"{\n \"codeName\": \"strategies\",\n \"isString\": false\n}","project":"Superalgos","id":"10f5cc85-e009-4feb-9eba-8997ccc46ba5","savedPayload":{"position":{"x":24942.8524218077,"y":17215.44415689808},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Positions","config":"{\n \"codeName\": \"positions\",\n \"isString\": false\n}","project":"Superalgos","id":"d3aaaeb9-d602-4188-a594-372d67545aed","savedPayload":{"position":{"x":25070.08513036335,"y":17124.689947875577},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Orders","config":"{\n \"codeName\": \"orders\",\n \"isString\": false\n}","project":"Superalgos","id":"2be38b73-1ea0-4e08-ae4a-9caaa44e486f","savedPayload":{"position":{"x":25220.68453529298,"y":17082.925036567784},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hits","config":"{\n \"codeName\": \"hits\",\n \"isString\": false\n}","project":"Superalgos","id":"bb822003-abbb-4748-8d18-02c67a33e24f","savedPayload":{"position":{"x":25376.48612575158,"y":17095.186887662865},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fails","config":"{\n \"codeName\": \"fails\",\n \"isString\": false\n}","project":"Superalgos","id":"e114274f-a7ba-47e4-b0d3-710b5bd7fcd9","savedPayload":{"position":{"x":25518.697930543254,"y":17159.996540953107},"targetPosition":{"x":25263.81512392708,"y":17530.853325833014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"72e8a046-c0a4-4402-b1b9-c6a65b759515","savedPayload":{"position":{"x":25263.81512392708,"y":17530.853325833014},"targetPosition":{"x":25525.131453997004,"y":17897.20530909336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"d81c6019-864e-42f5-94ba-2f249b865f85","savedPayload":{"position":{"x":25531.131453997004,"y":17897.20530909336},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Counters","id":"5e478e3f-e432-4364-8f2c-2f3b2849848b"}}},{"type":"Product Definition","name":"Episode Statistics","config":"{\n \"codeName\": \"Episode-Statistics\",\n \"singularVariableName\": \"episodeStatistics\",\n \"pluralVariableName\": \"episodeStatistics\",\n \"nodePath\": \"tradingEngine.current.episode.episodeStatistics\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"fc9dc0f7-35e0-4548-bb91-f920825d694f","savedPayload":{"position":{"x":25439.875401784375,"y":17670.268837851996},"targetPosition":{"x":25635.70543337085,"y":17781.064138875277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"91953362-8751-4440-a898-21245cd47c15","savedPayload":{"position":{"x":25497.181601422577,"y":17603.761719313767},"targetPosition":{"x":25635.70543337085,"y":17781.064138875277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"8a268555-b786-4756-9e5c-7a190c3ae37e","savedPayload":{"position":{"x":25065.49928413865,"y":17340.647707643926},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"ef14e964-9f33-4b53-bf44-bd81c386319d","savedPayload":{"position":{"x":25085.63629039387,"y":17214.157207347635},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss","config":"{\n \"codeName\": \"profitLoss\",\n \"isString\": false\n}","project":"Superalgos","id":"360e05d7-340f-4975-93f2-b15835e975d2","savedPayload":{"position":{"x":25140.594098470014,"y":17098.46371134378},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{\n \"codeName\": \"days\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"72167f7d-b29e-4f27-a68c-4a3fa3d7c321","savedPayload":{"position":{"x":25225.92035360342,"y":17002.940018622874},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI","config":"{\n \"codeName\": \"ROI\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"2e89519e-eab5-4656-ade5-3a18eb1cf07f","savedPayload":{"position":{"x":25334.70243005795,"y":16935.324890667893},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Annualized Rate Of Return","config":"{ \n\"codeName\": \"annualizedRateOfReturn\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"9177857b-5e67-4e42-a874-b0e1633ad45d","savedPayload":{"position":{"x":25458.12745095119,"y":16901.096103023097},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail","config":"{\n \"codeName\": \"hitFail\",\n \"isString\": true\n}","project":"Superalgos","id":"81ebbfbf-23c5-4156-b1b4-0f0f35dc1d03","savedPayload":{"position":{"x":25586.196255127223,"y":16903.026668497037},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"8356215e-6e31-45d0-bd78-ba080d2258de","savedPayload":{"position":{"x":25708.53346972622,"y":16940.96018415652},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"59b47d20-5679-4889-8c1f-7853aa68f4a0","savedPayload":{"position":{"x":25815.22806118879,"y":17011.823502162122},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"df7dbe99-16e8-42ad-9c8b-5acdf3b63f05","savedPayload":{"position":{"x":25897.636268251812,"y":17109.875697929412},"targetPosition":{"x":25515.448164135636,"y":17347.430434931397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c0f124f4-1e7d-4d06-94fd-b547257b4061","savedPayload":{"position":{"x":25515.448164135636,"y":17347.430434931397},"targetPosition":{"x":25635.70543337085,"y":17781.064138875277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"400c7f49-37da-41fb-b83d-879960aa74ff","savedPayload":{"position":{"x":25635.70543337085,"y":17781.064138875277},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Statistics","id":"6ce18a43-2e6a-452e-a72d-1c56a58d3f81"}}},{"type":"Product Definition","name":"Episode Candle","config":"{\n \"codeName\": \"Episode-Candle\",\n \"singularVariableName\": \"episodeCandle\",\n \"pluralVariableName\": \"episodeCandles\",\n \"nodePath\": \"tradingEngine.current.episode.candle\",\n \"saveAtCycle\": \"Second\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"17fb41f5-61b5-4433-9a10-950ff8216a7e","savedPayload":{"position":{"x":25621.56963892438,"y":17536.602203405477},"targetPosition":{"x":25767.69544979867,"y":17707.693545665483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"bbc9467d-28bf-432b-9e49-582d1bcabfb9","savedPayload":{"position":{"x":25698.166626064307,"y":17493.705829499075},"targetPosition":{"x":25767.69544979867,"y":17707.693545665483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\"\n}","project":"Superalgos","id":"9ffe3183-b249-41b6-8e57-56b5d5023376","savedPayload":{"position":{"x":25402.049106991435,"y":17054.78502060278},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\"\n}","project":"Superalgos","id":"b7b61cc0-b94d-40cb-abe1-047463675f5b","savedPayload":{"position":{"x":25510.750421127617,"y":16916.89806096556},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Open","config":"{\n \"codeName\": \"open\",\n \"isString\": false\n}","project":"Superalgos","id":"f93f3ac6-8420-401c-9921-2229d02f5832","savedPayload":{"position":{"x":25663.944395407474,"y":16831.105313152755},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Close","config":"{\n \"codeName\": \"close\",\n \"isString\": false\n}","project":"Superalgos","id":"86935367-3d64-4ad2-8171-be1368ca0a8d","savedPayload":{"position":{"x":25838.30863595373,"y":16810.467945305667},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Min","config":"{\n \"codeName\": \"min\",\n \"isString\": false\n}","project":"Superalgos","id":"e5bad869-4386-48a6-b434-36253eaf7f48","savedPayload":{"position":{"x":26007.297767758995,"y":16858.12780960081},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Max","config":"{\n \"codeName\": \"max\",\n \"isString\": false\n}","project":"Superalgos","id":"9c960e9d-7d1f-440b-9e5a-76e81f5a8e29","savedPayload":{"position":{"x":26145.184727396216,"y":16966.829123736992},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Index","config":"{ \n\"codeName\": \"index\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"67d251d5-a236-42e7-8b34-4a5276e64d25","savedPayload":{"position":{"x":26230.97747520902,"y":17120.02309801685},"targetPosition":{"x":25803.0020428762,"y":17259.080745485575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d52a6d09-8b78-49db-a525-48a82991fcbc","savedPayload":{"position":{"x":25803.0020428762,"y":17259.080745485575},"targetPosition":{"x":25767.69544979867,"y":17707.693545665483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"b9a58113-cf27-4d57-9810-87a2cc158804","savedPayload":{"position":{"x":25773.69544979867,"y":17707.693545665483},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Candle","id":"31789d43-d608-4eeb-a3ff-338a99074045"}}},{"type":"Product Definition","name":"Episode Balances","config":"{\n \"codeName\": \"Episode-Balances\",\n \"singularVariableName\": \"episodeBalance\",\n \"pluralVariableName\": \"episodeBalances\",\n \"nodePath\": \"tradingEngine.current.episode\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"acddff59-b51b-4b45-b58f-71d4077755ee","savedPayload":{"position":{"x":25843.66121000014,"y":17475.19186325882},"targetPosition":{"x":25922.45787078352,"y":17685.94310583971},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"213b8fe8-f772-41ea-a3f5-97867be555f7","savedPayload":{"position":{"x":25930.310257541583,"y":17461.08016976041},"targetPosition":{"x":25922.45787078352,"y":17685.94310583971},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"c9e3558a-d9e9-4466-97fb-c0e9ec3752c1","savedPayload":{"position":{"x":25788.107127859446,"y":16961.05136501033},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"bfb43790-48a8-4437-a191-9f4c396504fb","savedPayload":{"position":{"x":25915.339836415096,"y":16870.297155987828},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Balance Base Asset","config":"{ \n\"codeName\": \"balanceBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"balance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"7658d8bf-a4e0-490e-a3ae-df3bef72e491","savedPayload":{"position":{"x":26065.939241344728,"y":16828.532244680035},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Balance Quoted Asset","config":"{ \n\"codeName\": \"balanceQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"balance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1f5cf49c-7040-4cee-b525-83810013a4fb","savedPayload":{"position":{"x":26221.740831803327,"y":16840.794095775116},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Balance Base Asset","config":"{ \n\"codeName\": \"beginBalanceBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"beginBalance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b2e41c55-b66c-4895-b2a8-82b9cf53bfa1","savedPayload":{"position":{"x":26363.952636595,"y":16905.603749065358},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Balance Quoted Asset","config":"{ \n\"codeName\": \"beginBalanceQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"beginBalance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"121b09db-2f3d-43c9-a271-e716a66f019b","savedPayload":{"position":{"x":26475.421813239172,"y":17015.14420387534},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Balance Base Asset","config":"{ \n\"codeName\": \"endBalanceBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"endBalance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"14f17c26-2832-4aa6-b39f-05acc8c3626f","savedPayload":{"position":{"x":26542.703533922708,"y":17156.20326471005},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Balance Quoted Asset","config":"{ \n\"codeName\": \"endBalanceQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"endBalance\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b8d553ad-2dfb-4db7-b858-b086daeee2a6","savedPayload":{"position":{"x":26557.682630158735,"y":17311.767127022795},"targetPosition":{"x":26109.069829978827,"y":17276.460533945265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0755daf6-8847-48c4-9013-394ddb96a89b","savedPayload":{"position":{"x":26109.069829978827,"y":17276.460533945265},"targetPosition":{"x":25922.45787078352,"y":17685.94310583971},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"a9a53d82-133b-4417-b639-f9a56d338233","savedPayload":{"position":{"x":25928.45787078352,"y":17685.94310583971},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Balances","id":"e5d9e3e1-d1f4-4493-b452-33fe49c81228"}}},{"type":"Product Definition","name":"Distance To Event","config":"{\n \"codeName\": \"Distance-To-Event\",\n \"singularVariableName\": \"distanceToEvent\",\n \"pluralVariableName\": \"distanceToEvents\",\n \"nodePath\": \"tradingEngine.current.episode.distanceToEvent\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"0ef6aa1d-3345-40f8-bc4f-4d2e2ff199ff","savedPayload":{"position":{"x":26073.362593817423,"y":17493.44481075381},"targetPosition":{"x":26075.326064304558,"y":17718.436243443248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"c291211b-4012-4440-a302-8e15412b0990","savedPayload":{"position":{"x":26159.612547823137,"y":17509.819876165722},"targetPosition":{"x":26075.326064304558,"y":17718.436243443248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"0235ad32-fd46-41eb-b875-ae81f3ce48c5","savedPayload":{"position":{"x":26162.342969907175,"y":17009.74041912518},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"9d6c01fa-af2b-4d51-9aa4-f169c53e63b3","savedPayload":{"position":{"x":26270.477964004276,"y":16963.839837379986},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Trigger On","config":"{ \n\"codeName\": \"triggerOn\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7e17fb3f-495f-49c5-9b41-6869155b99fc","savedPayload":{"position":{"x":26386.808292265225,"y":16947.49067594499},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Trigger Off","config":"{ \n\"codeName\": \"triggerOff\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"9de32719-925a-4796-b562-379323cb4d82","savedPayload":{"position":{"x":26503.40623506399,"y":16961.80710315372},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Take Position","config":"{ \n\"codeName\": \"takePosition\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e4276497-b218-4b18-b089-70fcc5806fa3","savedPayload":{"position":{"x":26612.32583528605,"y":17005.81347815091},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Close Position","config":"{ \n\"codeName\": \"closePosition\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"4793082b-ddc8-4246-bb0e-c7f6340da600","savedPayload":{"position":{"x":26706.144402174425,"y":17076.510839204486},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Next Phase","config":"{ \n\"codeName\": \"nextPhase\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"0ada00bc-9398-47a0-9659-63b0838b81d7","savedPayload":{"position":{"x":26778.468355438177,"y":17169.08127799155},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Move To Phase","config":"{ \n\"codeName\": \"moveToPhase\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"9020e64b-d301-49f6-bc6c-cb8086730b19","savedPayload":{"position":{"x":26824.36893718337,"y":17277.21627208865},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Create Order","config":"{ \n\"codeName\": \"createOrder\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"906c1925-caab-4db6-8fec-06845a13fd0a","savedPayload":{"position":{"x":26840.718098618367,"y":17393.5466003496},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Cancel Order","config":"{ \n\"codeName\": \"cancelOrder\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e864d723-5ad5-4bbd-ad7b-0f975d480ee3","savedPayload":{"position":{"x":26826.40167140964,"y":17510.144543148366},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Close Order","config":"{ \n\"codeName\": \"closeOrder\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f5be374b-36e6-484c-bd78-6e126e3020fb","savedPayload":{"position":{"x":26782.395296412447,"y":17619.064143370426},"targetPosition":{"x":26390.73523323949,"y":17397.473541323867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c3c5d0b-6072-4e57-bff9-9823e0f79b5b","savedPayload":{"position":{"x":26390.73523323949,"y":17397.473541323867},"targetPosition":{"x":26075.326064304558,"y":17718.436243443248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"8ea88d6c-7d7f-4152-b781-ea108df52c63","savedPayload":{"position":{"x":26081.326064304558,"y":17718.436243443248},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Distance To Event","id":"56eb7de2-0281-404a-bd4d-34ac113e2325"}}},{"type":"Product Definition","name":"Episode Base Asset","config":"{\n \"codeName\": \"Episode-BaseAsset\",\n \"singularVariableName\": \"episodeBaseAsset\",\n \"pluralVariableName\": \"episodeBaseAssets\",\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"e8b67591-d484-4c08-a711-7a4418ee101a","savedPayload":{"position":{"x":26282.96841345648,"y":17589.159471037732},"targetPosition":{"x":26207.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"c6f34adc-2863-4ce6-8379-9b3cc1b37b73","savedPayload":{"position":{"x":26358.416256559627,"y":17634.04622080106},"targetPosition":{"x":26207.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"2d706d6c-f204-4209-bda6-20f6bccef1fb","savedPayload":{"position":{"x":26555.288461587297,"y":17161.373625351527},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"45aadf3c-c609-42fc-95dd-400968a950dd","savedPayload":{"position":{"x":26696.031234557788,"y":17165.059104565964},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hits","config":"{\n \"codeName\": \"hits\",\n \"isString\": false\n}","project":"Superalgos","id":"16a724af-e57e-4e5b-9f8f-597ade0521d8","savedPayload":{"position":{"x":26828.746690203145,"y":17212.056112271857},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fails","config":"{\n \"codeName\": \"fails\",\n \"isString\": false\n}","project":"Superalgos","id":"94c63c77-f7e4-4d15-bb6c-6b49bb600b10","savedPayload":{"position":{"x":26940.44371504185,"y":17297.764253907553},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Ratio","config":"{\n \"codeName\": \"hitRatio\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"0b91b798-b30f-46f5-935b-1e4dac8dfee0","savedPayload":{"position":{"x":27020.188626043757,"y":17413.79381940601},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI","config":"{\n \"codeName\": \"ROI\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"db2cd2b2-5c5f-4eef-874a-201059d80ea0","savedPayload":{"position":{"x":27060.175435704536,"y":17548.78702647072},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss","config":"{ \n\"codeName\": \"profitLoss\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"c4bb2bd0-02a8-47de-9fa8-c2b87776e36f","savedPayload":{"position":{"x":27056.4899564901,"y":17689.52979944121},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Annualized Rate Of Return","config":"{ \n\"codeName\": \"annualizedRateOfReturn\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"432a1f4e-283a-4276-b436-42ef167dd9e7","savedPayload":{"position":{"x":27009.492948784206,"y":17822.245255086567},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail","config":"{ \n\"codeName\": \"hitFail\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"08161b1c-ad52-4c01-88b1-8cd8ed077b6b","savedPayload":{"position":{"x":26923.78480714851,"y":17933.94227992527},"targetPosition":{"x":26614.02524808632,"y":17607.523812969743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e2ea652a-5508-4eef-998a-8cb0b2fac0a7","savedPayload":{"position":{"x":26614.02524808632,"y":17607.523812969743},"targetPosition":{"x":26207.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"234969ff-eab1-4d59-b6fa-79433c9a20e9","savedPayload":{"position":{"x":26213.861870128883,"y":17801.253806533474},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Base Asset","id":"a99b25e6-7aca-41a2-aacc-1911aac2ee3e"}}},{"type":"Product Definition","name":"Episode Quoted Asset","config":"{\n \"codeName\": \"Episode-QuotedAsset\",\n \"singularVariableName\": \"episodeQuotedAsset\",\n \"pluralVariableName\": \"episodeQuotedAssets\",\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"99d1f17b-92cb-4544-88a2-fe463dd1de4b","savedPayload":{"position":{"x":26453.19711361641,"y":17750.791243482417},"targetPosition":{"x":26310.079514053912,"y":17924.406774744653},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"daf4e3e9-426d-44c3-8b43-6849778d972f","savedPayload":{"position":{"x":26508.742722447172,"y":17818.775673117827},"targetPosition":{"x":26310.079514053912,"y":17924.406774744653},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"408f6716-f1a1-4f7f-924c-c5c0d9bb814d","savedPayload":{"position":{"x":26855.40562959129,"y":17441.942982906585},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"b07f31ed-986d-4b45-bd05-017e3d9268bd","savedPayload":{"position":{"x":26986.40006665146,"y":17493.543063911868},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hits","config":"{\n \"codeName\": \"hits\",\n \"isString\": false\n}","project":"Superalgos","id":"709ed8fc-94d8-4f8c-977a-fa865c43a83e","savedPayload":{"position":{"x":27095.037877674193,"y":17583.097164413473},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fails","config":"{\n \"codeName\": \"fails\",\n \"isString\": false\n}","project":"Superalgos","id":"d874a492-fb07-4704-8589-73f864040da9","savedPayload":{"position":{"x":27170.684836792447,"y":17701.839105094194},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Ratio","config":"{\n \"codeName\": \"hitRatio\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"4ad7e208-1cfb-402d-89d6-3ca98832f2f9","savedPayload":{"position":{"x":27205.936092584372,"y":17838.145597476454},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI","config":"{\n \"codeName\": \"ROI\",\n \"isString\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"02d21bbe-a2b9-4d61-9ee6-243f21208c9f","savedPayload":{"position":{"x":27197.34100652311,"y":17978.6740123827},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss","config":"{ \n\"codeName\": \"profitLoss\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 2\n}","project":"Superalgos","id":"d78850bc-4017-4a14-b7a2-4efb03156596","savedPayload":{"position":{"x":27145.740925517828,"y":18109.66844944287},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Annualized Rate Of Return","config":"{ \n\"codeName\": \"annualizedRateOfReturn\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"51e1f4b1-fe6a-4125-ae19-a34859928ab0","savedPayload":{"position":{"x":27056.186825016222,"y":18218.306260465604},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail","config":"{ \n\"codeName\": \"hitFail\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"cb125657-fff3-49bc-99d5-393d2baaec15","savedPayload":{"position":{"x":26937.444884335502,"y":18293.95321958386},"targetPosition":{"x":26758.007803319142,"y":17881.276186110554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e5dde8e0-9f3d-4d58-878b-316e2888384f","savedPayload":{"position":{"x":26758.007803319142,"y":17881.276186110554},"targetPosition":{"x":26310.079514053912,"y":17924.406774744653},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0","savedPayload":{"position":{"x":26310.079514053912,"y":17924.406774744653},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Quoted Asset","id":"ede92318-db13-4951-83b1-11fc0345d677"}}},{"type":"Product Definition","name":"Current Episode","config":"{\n \"codeName\": \"Current-Episode\",\n \"singularVariableName\": \"currentEpisode\",\n \"pluralVariableName\": \"currentEpisodes\",\n \"nodePath\": \"tradingEngine.current.episode\",\n \"saveAtCycle\": \"Second\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"26f6b248-21de-4898-9ee5-58b728a04267","savedPayload":{"position":{"x":26552.240289300447,"y":17958.844950900115},"targetPosition":{"x":26358.373728201102,"y":18073.041082566273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"ecdfe444-00e6-4ad4-a482-14b59a1e752a","savedPayload":{"position":{"x":26581.184043667956,"y":18041.727134850258},"targetPosition":{"x":26358.373728201102,"y":18073.041082566273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"fb250d69-0a1d-44db-a823-6ce600fabc5c","savedPayload":{"position":{"x":27015.63076841781,"y":17794.052021217816},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"1e3e49d8-8494-474c-85df-93d080271a32","savedPayload":{"position":{"x":27109.449335306184,"y":17864.74938227139},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\"\n}","project":"Superalgos","id":"8da52905-c159-42b2-81eb-bcdb0e82213c","savedPayload":{"position":{"x":27181.773288569937,"y":17957.319821058456},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\"\n}","project":"Superalgos","id":"3fb36608-3225-4e84-9e7c-deb0cd4e0c90","savedPayload":{"position":{"x":27227.67387031513,"y":18065.454815155557},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"dc27dfcd-81f7-4796-94bf-9552681c5781","savedPayload":{"position":{"x":27244.023031750126,"y":18181.785143416506},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f2738fa9-e225-49ba-adce-8e3f5490ae79","savedPayload":{"position":{"x":27229.7066045414,"y":18298.38308621527},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"0bfb640f-7160-4f9f-9a37-a93ad21ac304","savedPayload":{"position":{"x":27185.700229544207,"y":18407.30268643733},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"66977e9f-19c3-445e-baec-72fd24bcfd4f","savedPayload":{"position":{"x":27115.002868490632,"y":18501.121253325706},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Cycle","config":"{ \n\"codeName\": \"cycle\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"2e9b2ae9-fa39-4767-8f15-918680491022","savedPayload":{"position":{"x":27022.432429703567,"y":18573.44520658946},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Head Of The Market","config":"{ \n\"codeName\": \"headOfTheMarket\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"87f75619-ada5-4a35-851c-901776e8dd53","savedPayload":{"position":{"x":26914.297435606466,"y":18619.345788334653},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Process Date","config":"{ \n\"codeName\": \"processDate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"aa739894-963f-4535-b4c4-d057e185ad9c","savedPayload":{"position":{"x":26797.967107345517,"y":18635.694949769648},"targetPosition":{"x":26794.04016637125,"y":18185.712084390772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"973a9bbe-dcc2-4df3-acef-63999441e21f","savedPayload":{"position":{"x":26794.04016637125,"y":18185.712084390772},"targetPosition":{"x":26358.373728201102,"y":18073.041082566273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7","savedPayload":{"position":{"x":26358.373728201102,"y":18073.041082566273},"targetPosition":{"x":25912.753097267396,"y":18135.668977998303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Episode","id":"bf241117-1c2c-470c-a172-b86b2befa9a2"}}}],"productDefinitionFolders":[],"id":"6e3006f3-06dc-4cc6-a8fc-51f0e99ca9eb","savedPayload":{"position":{"x":25912.753097267396,"y":18135.668977998303},"targetPosition":{"x":25819.192836399405,"y":18575.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Strategy","project":"Superalgos","products":[{"type":"Product Definition","name":"Current Strategy","config":"{\n \"codeName\": \"Current-Strategy\",\n \"singularVariableName\": \"currentStrategy\",\n \"pluralVariableName\": \"currentStrategies\",\n \"nodePath\": \"tradingEngine.current.strategy\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"7b4550d3-69d1-41ac-bad3-e2283f798bb8","savedPayload":{"position":{"x":26172.85887689315,"y":17580.021452331584},"targetPosition":{"x":26213.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"49d55660-71e9-4c5a-8b1a-198934844e4a","savedPayload":{"position":{"x":26260.64200056288,"y":17581.170596368367},"targetPosition":{"x":26213.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"3808ed7c-4ae4-4ad8-8ea8-237ee2f8cc8c","savedPayload":{"position":{"x":26169.661764209803,"y":17094.168808337923},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"c8b93e25-fe0e-450a-bcc7-262a06936372","savedPayload":{"position":{"x":26258.817248308853,"y":17032.36376325653},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"702327c6-5dfe-4ab0-bce1-750637a4b863","savedPayload":{"position":{"x":26360.17295149346,"y":16993.690964361147},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"a152bb71-b294-48e7-bf9c-9be7510c8461","savedPayload":{"position":{"x":26467.838448707527,"y":16980.397934153665},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Strategy Name","config":"{ \n\"codeName\": \"strategyName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"35b9d166-f366-4601-a472-5e8d74be8f82","savedPayload":{"position":{"x":26575.55661260113,"y":16993.25721523155},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Index","config":"{ \n\"codeName\": \"index\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"dcdb4018-97ea-4bb8-9e55-5efa00ab8404","savedPayload":{"position":{"x":26677.067255028363,"y":17031.521472920136},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"c2ac38c8-3bc5-4359-8f92-510263b841d1","savedPayload":{"position":{"x":26766.470946427537,"y":17092.966927647485},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"1ae37227-35b8-4abc-a42b-aa0c42fa9fc2","savedPayload":{"position":{"x":26838.571869223724,"y":17174.022592929978},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"288b5fed-0d4b-4b85-9cb5-802c2ff30ca7","savedPayload":{"position":{"x":26889.179779860195,"y":17269.977808126754},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"3802817a-f022-4762-9ff4-412d42f22316","savedPayload":{"position":{"x":26915.353530523036,"y":17375.25600491359},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"97832d1b-40b4-4fc3-9e52-ec3beacf164e","savedPayload":{"position":{"x":26915.571997961433,"y":17483.73879716392},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategy.strategyCounters\"\n}","project":"Superalgos","id":"d219dca7-ae8f-422d-a90a-f86b617a76e2","savedPayload":{"position":{"x":26889.822485641962,"y":17589.121559311046},"targetPosition":{"x":26468.744676745056,"y":17430.397021653567},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a4bce1f3-c9cc-470d-b271-1190684aff6f","savedPayload":{"position":{"x":26468.744676745056,"y":17430.397021653567},"targetPosition":{"x":26213.861870128883,"y":17801.253806533474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"895d8a04-ef45-41a7-909a-ba31013ffb90","savedPayload":{"position":{"x":26213.861870128883,"y":17801.253806533474},"targetPosition":{"x":26120.301609260892,"y":18241.420226863687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Strategy","id":"a3c31000-1b82-4fe9-ae56-6d5893582b16"}}},{"type":"Product Definition","name":"Last Strategy","config":"{\n \"codeName\": \"Last-Strategy\",\n \"singularVariableName\": \"lastStrategy\",\n \"pluralVariableName\": \"lastStrategies\",\n \"nodePath\": \"tradingEngine.last.strategy\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a2e7b5d2-8556-4c58-b2f6-a9c27c939e94","savedPayload":{"position":{"x":26719.368383853718,"y":17956.23676852067},"targetPosition":{"x":26548.277041593712,"y":18102.36257939496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"76ff2401-1d4f-4dda-87f6-5e0b7af3eab2","savedPayload":{"position":{"x":26762.26475776012,"y":18032.8337556606},"targetPosition":{"x":26548.277041593712,"y":18102.36257939496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"02e1c6bb-e984-4104-98c8-dbcba98ab660","savedPayload":{"position":{"x":27138.530559706396,"y":17710.541665721303},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"0fbc8383-f53b-42c2-ac1a-060f6bc80c5c","savedPayload":{"position":{"x":27236.63304087845,"y":17756.85005729708},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"5785bb06-20d0-4683-b5d3-3cce32ddf13f","savedPayload":{"position":{"x":27320.802518749602,"y":17825.290271625694},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"cca74655-a684-4b14-a70b-63a95f520418","savedPayload":{"position":{"x":27386.147369209586,"y":17911.884812220418},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Strategy Name","config":"{ \n\"codeName\": \"strategyName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"10192034-747b-49ed-ba2b-a645da326297","savedPayload":{"position":{"x":27428.869987068534,"y":18011.601119140236},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Index","config":"{ \n\"codeName\": \"index\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"5cc8df5d-637c-4059-88ca-b30193db45cd","savedPayload":{"position":{"x":27446.487489066883,"y":18118.644043080993},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e44d0b8d-1bd1-457b-b3ec-efafe83135e2","savedPayload":{"position":{"x":27437.9760100255,"y":18226.792638388455},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"c1181965-30d7-455c-84f8-b59a10b17292","savedPayload":{"position":{"x":27403.830206168306,"y":18329.761701807496},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"f233bd2e-9c8a-415c-b348-890e2b8c835b","savedPayload":{"position":{"x":27346.03450750053,"y":18421.567045649525},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"09b0f818-5159-433b-8eae-f0209351e6b3","savedPayload":{"position":{"x":27267.947789949932,"y":18496.873277029285},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"8cfbc9c3-071f-43d0-b245-4c0278f975c0","savedPayload":{"position":{"x":27174.108169706877,"y":18551.303871506},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.strategy.strategyCounters\"\n}","project":"Superalgos","id":"bb8b605d-bf3a-4408-a147-f316bdee7df7","savedPayload":{"position":{"x":27069.969264406758,"y":18581.69552077584},"targetPosition":{"x":26996.88984177362,"y":18137.66917247249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"325b09da-1fc2-43bc-a59d-381c30a4ba1d","savedPayload":{"position":{"x":26996.88984177362,"y":18137.66917247249},"targetPosition":{"x":26548.277041593712,"y":18102.36257939496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3","savedPayload":{"position":{"x":26548.277041593712,"y":18102.36257939496},"targetPosition":{"x":26120.301609260892,"y":18241.420226863687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Last Strategy","id":"028aaa23-630c-4aa6-a168-6b2a128b1a83"}}}],"productDefinitionFolders":[],"id":"bb870967-9e1d-44a9-9bbc-68e6c024a3c3","savedPayload":{"position":{"x":26120.301609260892,"y":18241.420226863687},"targetPosition":{"x":25819.192836399405,"y":18575.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Position","project":"Superalgos","products":[{"type":"Product Definition","name":"Current Position","config":"{\n \"codeName\": \"Current-Position\",\n \"singularVariableName\": \"currentPosition\",\n \"pluralVariableName\": \"currentPositions\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"7506dd91-ad9d-4aad-bb1a-604bc5d3fe8d","savedPayload":{"position":{"x":26368.572619662187,"y":17784.495918437016},"targetPosition":{"x":26386.22591620095,"y":18008.80231852697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"06678152-1082-4f00-9275-22ffde715469","savedPayload":{"position":{"x":26455.754739935313,"y":17794.814602360562},"targetPosition":{"x":26386.22591620095,"y":18008.80231852697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"6e9bd403-9341-4573-9509-39592db0f4ae","savedPayload":{"position":{"x":26351.210041573737,"y":16671.600015575885},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"e9f969f0-20f4-4d61-870b-2997e715c706","savedPayload":{"position":{"x":26422.843873590267,"y":16610.41894322483},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"c9761b5c-3714-4253-9906-873e8933e698","savedPayload":{"position":{"x":26500.48045145376,"y":16557.06080156826},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"e0d6465b-de24-4ce2-9cc3-b7e3e563d4d7","savedPayload":{"position":{"x":26583.26917257065,"y":16512.11019357207},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1b892131-86ea-4264-bfae-3eae52374803","savedPayload":{"position":{"x":26670.30298638772,"y":16476.059607503983},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f7d48869-1ac5-4e6c-9f73-52112cf5a9c8","savedPayload":{"position":{"x":26760.6283322278,"y":16449.30402112903},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"08064bc3-d662-46d7-a9ac-da517de9f0f3","savedPayload":{"position":{"x":26853.25558670007,"y":16432.136574250515},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"07748c3d-c020-4734-b505-38ceeb96ddc2","savedPayload":{"position":{"x":26947.16990622103,"y":16424.745357008942},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"5f987e27-560f-485d-b832-46025f14f446","savedPayload":{"position":{"x":27041.342345853176,"y":16427.211349127127},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionCounters\"\n}","project":"Superalgos","id":"c00c9780-7a99-40fe-8563-9ef38089edae","savedPayload":{"position":{"x":27134.741132641047,"y":16439.507532679385},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"90759217-f2a3-4203-8249-35c703108863","savedPayload":{"position":{"x":27226.342969931648,"y":16461.49918810557},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"905584a9-29a2-4e59-be9d-7859ada74e43","savedPayload":{"position":{"x":27315.1442488267,"y":16492.945370226786},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"a85c3f00-4b38-430d-a911-b404de9c2ce3","savedPayload":{"position":{"x":27400.172043931765,"y":16533.501548091175},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Base Asset","config":"{ \n\"codeName\": \"profitLossInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3c081ea4-6bcb-4ba2-8e3e-2f572b428003","savedPayload":{"position":{"x":27480.494772930466,"y":16582.72337972713},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Quoted Asset","config":"{ \n\"codeName\": \"profitLossInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1b65da38-1f4b-4c28-81bb-38e95fed5a3d","savedPayload":{"position":{"x":27555.23240319528,"y":16640.071580446915},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Base Asset","config":"{ \n\"codeName\": \"ROIInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"9705d87a-bc3a-473e-b205-4eefcbbeeb21","savedPayload":{"position":{"x":27623.566093609174,"y":16704.917831362563},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Quoted Asset","config":"{ \n\"codeName\": \"ROIInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3fdcd35b-a08a-4d68-bcbd-f547b8265203","savedPayload":{"position":{"x":27684.747165960227,"y":16776.551663379094},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Base Asset","config":"{ \n\"codeName\": \"hitFailInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"14d4fbc8-7b1b-4b27-a9ed-c4c5601116d8","savedPayload":{"position":{"x":27738.1053076168,"y":16854.188241242588},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Quoted Asset","config":"{ \n\"codeName\": \"hitFailInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"2ba0cad6-6f43-4fb3-9dfb-8ad67e0c8a09","savedPayload":{"position":{"x":27783.05591561299,"y":16936.976962359477},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Base Asset","config":"{ \n\"codeName\": \"entryTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"7a3cc7f2-ecf2-4f50-968a-ca27117b4bac","savedPayload":{"position":{"x":27819.106501681075,"y":17024.010776176547},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Quoted Asset","config":"{ \n\"codeName\": \"entryTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"cfa55f9f-0792-4a1d-8bbd-5350864e8a61","savedPayload":{"position":{"x":27845.862088056027,"y":17114.336122016626},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Base Asset","config":"{ \n\"codeName\": \"exitTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8172e284-94fd-4dc4-8591-53a2c5ca475a","savedPayload":{"position":{"x":27863.029534934547,"y":17206.963376488897},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Quoted Asset","config":"{ \n\"codeName\": \"exitTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"0d0bdeba-f4d9-4de7-81d0-b4aa3bb9ec6b","savedPayload":{"position":{"x":27870.420752176116,"y":17300.877696009855},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Rate","config":"{ \n\"codeName\": \"entryTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f03c45fb-c2ca-4294-abce-650cf8656471","savedPayload":{"position":{"x":27867.95476005793,"y":17395.050135642003},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Rate","config":"{ \n\"codeName\": \"exitTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"472bf4ef-2e4f-4aa9-a054-ed458249032d","savedPayload":{"position":{"x":27855.658576505673,"y":17488.448922429874},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Profit Loss","config":"{ \n\"codeName\": \"profitLoss\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2ab54033-cbad-4618-9681-e8ae36c1ace5","savedPayload":{"position":{"x":27833.66692107949,"y":17580.050759720474},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics ROI","config":"{ \n\"codeName\": \"ROI\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"a0778ae5-4242-4a8e-8ebc-6af71dad5c58","savedPayload":{"position":{"x":27802.220738958273,"y":17668.852038615525},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Hit Fail","config":"{ \n\"codeName\": \"hitFail\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\"\n}","project":"Superalgos","id":"e87e024f-3726-4d08-a890-829b44616eeb","savedPayload":{"position":{"x":27761.664561093883,"y":17753.87983372059},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"d6e98d71-15ee-4e22-b18c-b154b1ecec52","savedPayload":{"position":{"x":27712.44272945793,"y":17834.202562719292},"targetPosition":{"x":26970.729159698116,"y":17324.436949486942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a35249e0-a2dc-43b0-bb8c-ebd6265e13c2","savedPayload":{"position":{"x":26970.729159698116,"y":17324.436949486942},"targetPosition":{"x":26386.22591620095,"y":18008.80231852697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9","savedPayload":{"position":{"x":26386.22591620095,"y":18008.80231852697},"targetPosition":{"x":26247.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Position","id":"0d2212c7-07bb-4c41-94fb-00844415ba5e"}}},{"type":"Product Definition","name":"Last Position","config":"{\n \"codeName\": \"Last-Position\",\n \"singularVariableName\": \"lastPosition\",\n \"pluralVariableName\": \"lastPositions\",\n \"nodePath\": \"tradingEngine.last.position\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"485671ff-0d50-4c08-958c-93e657cd238f","savedPayload":{"position":{"x":26728.78809326204,"y":17980.430350348506},"targetPosition":{"x":26611.22591620095,"y":18172.274387328176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a909df42-6192-4bbd-9f38-e8800149aaa1","savedPayload":{"position":{"x":26793.254739935313,"y":18040.02270556237},"targetPosition":{"x":26611.22591620095,"y":18172.274387328176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"a616f774-00d3-475e-b0b6-631a93777573","savedPayload":{"position":{"x":27368.885271560815,"y":17069.87318462143},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"2e577616-21a7-4199-a64f-d90386edc6ec","savedPayload":{"position":{"x":27462.799591081774,"y":17062.48196737986},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"9993ddd9-d4f8-4eef-91db-45eb57c04d8e","savedPayload":{"position":{"x":27556.97203071392,"y":17064.947959498044},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"dd7f3f5d-3f52-4256-b7e1-c2d94aa85795","savedPayload":{"position":{"x":27650.370817501793,"y":17077.244143050302},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e7f50ea4-ebd4-448f-bd18-54fc2d7e2e7b","savedPayload":{"position":{"x":27741.972654792393,"y":17099.235798476486},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d9ff5483-8800-49f7-8d9f-9e8e48f8b795","savedPayload":{"position":{"x":27830.773933687444,"y":17130.681980597703},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"f0e01315-185f-4092-9b13-0f529a794336","savedPayload":{"position":{"x":27915.80172879251,"y":17171.238158462093},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"a41e9fac-16b2-4b08-b9e8-b494359f1737","savedPayload":{"position":{"x":27996.12445779121,"y":17220.459990098047},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e6137e7e-940e-44b9-937f-4c6a89709af4","savedPayload":{"position":{"x":28070.862088056027,"y":17277.808190817832},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionCounters\"\n}","project":"Superalgos","id":"3976c01c-c92d-47b1-965d-4e4d7678a59a","savedPayload":{"position":{"x":28139.19577846992,"y":17342.65444173348},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"5a796662-dd46-4e75-8d5b-192ec323901e","savedPayload":{"position":{"x":28200.376850820972,"y":17414.28827375001},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"373f4395-e367-4089-ad1c-6bcefb4a1d40","savedPayload":{"position":{"x":28253.734992477544,"y":17491.924851613505},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"337bc66f-9deb-4e01-b4a8-24cac360726f","savedPayload":{"position":{"x":28298.685600473735,"y":17574.713572730394},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Base Asset","config":"{ \n\"codeName\": \"profitLossInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionBaseAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2c6b4f74-ede6-4055-96e9-7b6a7fe6f14b","savedPayload":{"position":{"x":28334.73618654182,"y":17661.747386547464},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Quoted Asset","config":"{ \n\"codeName\": \"profitLossInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionQuotedAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1ea905bd-9a4f-45ef-a3f9-ecdfb8e68ce1","savedPayload":{"position":{"x":28361.491772916772,"y":17752.072732387544},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Base Asset","config":"{ \n\"codeName\": \"ROIInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionBaseAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"29924f25-d402-499e-a51a-952a4d1bc015","savedPayload":{"position":{"x":28378.659219795292,"y":17844.699986859814},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Quoted Asset","config":"{ \n\"codeName\": \"ROIInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionQuotedAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2af609c6-806d-4dd2-af9e-4cc9e1a2b0c3","savedPayload":{"position":{"x":28386.05043703686,"y":17938.614306380772},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Base Asset","config":"{ \n\"codeName\": \"hitFailInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionBaseAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"1f4d9780-e2f9-400c-b47b-e303c3a2bac1","savedPayload":{"position":{"x":28383.584444918677,"y":18032.78674601292},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Quoted Asset","config":"{ \n\"codeName\": \"hitFailInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.position.positionQuotedAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"4019c021-32b6-48bc-9523-39befbf74aeb","savedPayload":{"position":{"x":28371.28826136642,"y":18126.18553280079},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Base Asset","config":"{ \n\"codeName\": \"entryTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"e8cd2d2b-0ca6-46e1-946b-2aa4bfdb341c","savedPayload":{"position":{"x":28349.296605940235,"y":18217.78737009139},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Quoted Asset","config":"{ \n\"codeName\": \"entryTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2f52b5a7-cd53-485d-b2b6-64c1ce2f5af1","savedPayload":{"position":{"x":28317.850423819018,"y":18306.588648986442},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Base Asset","config":"{ \n\"codeName\": \"exitTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"45e8300d-baf1-4d87-aef6-ec10dd85da2d","savedPayload":{"position":{"x":28277.29424595463,"y":18391.61644409151},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Quoted Asset","config":"{ \n\"codeName\": \"exitTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4c4be570-1f2d-4e3e-9c4e-8076fd4a5b9d","savedPayload":{"position":{"x":28228.072414318674,"y":18471.93917309021},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Rate","config":"{ \n\"codeName\": \"entryTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"546beb6d-17ef-4b1b-b0e5-f9f716cbf09c","savedPayload":{"position":{"x":28170.72421359889,"y":18546.676803355025},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Rate","config":"{ \n\"codeName\": \"exitTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d71cf631-337c-40ff-8637-89ab1bf10316","savedPayload":{"position":{"x":28105.87796268324,"y":18615.010493768918},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Profit Loss","config":"{ \n\"codeName\": \"profitLoss\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"c5e7ea1d-2314-48a4-8c2f-eea2054521aa","savedPayload":{"position":{"x":28034.24413066671,"y":18676.19156611997},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics ROI","config":"{ \n\"codeName\": \"ROI\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"6ccc1352-bb8a-4b4c-9e3e-e3107e4610c8","savedPayload":{"position":{"x":27956.607552803216,"y":18729.549707776543},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Hit Fail","config":"{ \n\"codeName\": \"hitFail\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\"\n}","project":"Superalgos","id":"afc68726-a40f-49f8-b9a3-c841e9f14c84","savedPayload":{"position":{"x":27873.818831686327,"y":18774.500315772733},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"871e0d9c-c467-4fbf-bb51-ff06cdd97a24","savedPayload":{"position":{"x":27786.785017869257,"y":18810.55090184082},"targetPosition":{"x":27486.35884455886,"y":17962.17355985786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"731e7326-c591-4d9f-a9d7-1c7abd42156f","savedPayload":{"position":{"x":27486.35884455886,"y":17962.17355985786},"targetPosition":{"x":26611.22591620095,"y":18172.274387328176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"477cd6d5-862a-44d0-9313-786a4e63a602","savedPayload":{"position":{"x":26611.22591620095,"y":18172.274387328176},"targetPosition":{"x":26247.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Last Position","id":"08c88b9c-70f1-49ff-aa16-21f2bc1c0ba1"}}},{"type":"Product Definition","name":"Stop Loss","config":"{\n \"codeName\": \"Stop-Loss\",\n \"singularVariableName\": \"stopLoss\",\n \"pluralVariableName\": \"stopLosses\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAtCycle\": \"Second\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b0276d53-e43b-4f1b-a5d8-b118921970dd","savedPayload":{"position":{"x":26905.041163547263,"y":18350.673978577644},"targetPosition":{"x":26697.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b5d51a14-eed9-405f-90d7-e91c0ceed659","savedPayload":{"position":{"x":26922.168268732225,"y":18436.77775085979},"targetPosition":{"x":26697.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\",\n \"childProperty\": \"begin\"\n}","project":"Superalgos","id":"496f95fc-0a29-4a08-a5ba-7fbd1979b326","savedPayload":{"position":{"x":27068.64104381858,"y":18521.56398768685},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\",\n \"childProperty\": \"end\"\n}","project":"Superalgos","id":"62a7bb07-5534-4c43-818c-8125eb98cc21","savedPayload":{"position":{"x":27079.852541725177,"y":18621.068783750008},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stop Loss","config":"{\n \"codeName\": \"stopLoss\",\n \"isString\": false\n}","project":"Superalgos","id":"f1054e02-00f1-4a93-8a5f-10bb181d57ac","savedPayload":{"position":{"x":27046.780239325562,"y":18715.583993842713},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stop Loss Phase","config":"{\n \"codeName\": \"stopLossPhase\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"d6b29dfa-d7bf-4995-bff3-2641052c3e4a","savedPayload":{"position":{"x":26975.974511715147,"y":18786.389721453128},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Initial Value","config":"{\n \"codeName\": \"initialValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"a87ea0f8-6d19-40ce-97b4-d4ce51b41df2","savedPayload":{"position":{"x":26881.459301622443,"y":18819.462023852742},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Final Value","config":"{\n \"codeName\": \"finalValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"c78fd29a-b6c9-4fab-a805-2f11cce53f6a","savedPayload":{"position":{"x":26781.954505559286,"y":18808.250525946147},"targetPosition":{"x":26856.267294499197,"y":18595.876776626763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d1352dcb-8236-4dfc-98da-4abb3c3813d5","savedPayload":{"position":{"x":26856.267294499197,"y":18595.876776626763},"targetPosition":{"x":26697.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a1c047bd-e95e-469a-aac9-3d45c4157440","savedPayload":{"position":{"x":26697.168268732225,"y":18436.77775085979},"targetPosition":{"x":26247.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Stop Loss","id":"cdafbd38-ade8-4548-b951-b404c1bd7885"}}},{"type":"Product Definition","name":"Take Profit","config":"{\n \"codeName\": \"Take-Profit\",\n \"singularVariableName\": \"takeProfit\",\n \"pluralVariableName\": \"takeProfits\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAtCycle\": \"Second\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"67fd9603-5184-4570-bebb-07c33974b40c","savedPayload":{"position":{"x":26824.009148290428,"y":18753.806321258984},"targetPosition":{"x":26605.22591620095,"y":18701.281114391404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"d1fc090a-18c0-4ff6-87d6-726d276bad43","savedPayload":{"position":{"x":26787.254739935313,"y":18833.53279615721},"targetPosition":{"x":26605.22591620095,"y":18701.281114391404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\",\n \"childProperty\": \"begin\"\n}","project":"Superalgos","id":"cba47a0d-3982-454d-a2e1-8bfbc9314c0e","savedPayload":{"position":{"x":26855.917604589114,"y":18988.22083969751},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\",\n \"childProperty\": \"end\"\n}","project":"Superalgos","id":"e30faa7e-ff94-485a-a2c6-6c2f4767ef0c","savedPayload":{"position":{"x":26806.500445269656,"y":19075.311863860024},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Take Profit","config":"{\n \"codeName\": \"takeProfit\",\n \"isString\": false\n}","project":"Superalgos","id":"094ba661-8e22-4924-9529-465052979f5c","savedPayload":{"position":{"x":26724.189743975443,"y":19132.33686344209},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stop Loss Phase","config":"{\n \"codeName\": \"takeProfitPhase\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"b7897f40-beef-425c-afb0-b62383df7644","savedPayload":{"position":{"x":26625.288144572296,"y":19148.001337910762},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Initial Value","config":"{\n \"codeName\": \"initialValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"e0218aec-2f5e-4307-8533-990d87464375","savedPayload":{"position":{"x":26529.384321770525,"y":19119.20274598534},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Final Value","config":"{\n \"codeName\": \"finalValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"046e68e8-98db-49a9-bf07-c3a9638a7fbb","savedPayload":{"position":{"x":26455.473203859223,"y":19051.64500198821},"targetPosition":{"x":26640.423670835004,"y":18923.51099102531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3012a392-5c3a-4204-82f1-44f46d08621a","savedPayload":{"position":{"x":26640.423670835004,"y":18923.51099102531},"targetPosition":{"x":26605.22591620095,"y":18701.281114391404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5","savedPayload":{"position":{"x":26611.22591620095,"y":18701.281114391404},"targetPosition":{"x":26247.168268732225,"y":18436.77775085979},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Take Profit","id":"d06674eb-36cf-4048-bd99-31712b0523a0"}}}],"productDefinitionFolders":[],"id":"83cdc0a1-260e-42bb-a054-5719c34b0165","savedPayload":{"position":{"x":26247.168268732225,"y":18436.77775085979},"targetPosition":{"x":25819.192836399405,"y":18575.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Stages","project":"Superalgos","products":[{"type":"Product Definition","name":"Open Stage","config":"{\n \"codeName\": \"Current-Strategy-Open-Stage\",\n \"singularVariableName\": \"currentStrategyOpenStage\",\n \"pluralVariableName\": \"currentStrategyOpenStages\",\n \"nodePath\": \"tradingEngine.current.strategyOpenStage\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b553683f-14f4-48be-91a6-0fb5381887e4","savedPayload":{"position":{"x":26690.639424976314,"y":18165.2051973563},"targetPosition":{"x":26593.774428194447,"y":18368.28688633502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"3287fb46-854d-41de-8a42-285f9c10d4fa","savedPayload":{"position":{"x":26760.98201392686,"y":18217.732499904276},"targetPosition":{"x":26593.774428194447,"y":18368.28688633502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"16f06257-04df-47fc-8a3c-29daf922e556","savedPayload":{"position":{"x":26953.391419289896,"y":17772.730675610972},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"4d6aabc2-0b50-4948-9c21-82f6a1df7bbf","savedPayload":{"position":{"x":27041.51427949525,"y":17768.690509040265},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"22ea5554-c115-4081-bc2a-03243d8630c4","savedPayload":{"position":{"x":27128.732081048973,"y":17781.919890311783},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"37d59f42-6664-4cdb-a563-599f4c926ed2","savedPayload":{"position":{"x":27211.693092749658,"y":17811.910421722387},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"4768b50b-1fb1-4a31-a9ce-9dd1bb7ae14c","savedPayload":{"position":{"x":27287.20916944272,"y":17857.509583968847},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"fa740c89-d602-4dda-953b-80b4744e742c","savedPayload":{"position":{"x":27352.378270650755,"y":17916.965026818336},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"f022ac0c-4a8c-4ea1-bc77-f9e03c706e6e","savedPayload":{"position":{"x":27404.69598436158,"y":17987.99191094515},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3491a030-50f3-4909-be44-b40a7c8fe8c0","savedPayload":{"position":{"x":27442.151770177406,"y":18067.860713024627},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageBaseAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"20e53cb6-ac86-4d7f-823c-d9dcd3fe3683","savedPayload":{"position":{"x":27463.306223254778,"y":18153.502119783792},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageQuotedAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"6e4fd9ec-7ff6-4f34-911e-4954d1e17b18","savedPayload":{"position":{"x":27467.346389825485,"y":18241.62497998915},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Placed In Base Asset","config":"{\n \"codeName\": \"sizePlacedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageBaseAsset\",\n \"childProperty\": \"sizePlaced\",\n \"decimals\": 10\n}","project":"Superalgos","id":"180c4f89-8767-48c0-8319-c3564cf17c90","savedPayload":{"position":{"x":27454.117008553967,"y":18328.84278154287},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Placed In Quoted Asset","config":"{\n \"codeName\": \"sizePlacedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageQuotedAsset\",\n \"childProperty\": \"sizePlaced\",\n \"decimals\": 10\n}","project":"Superalgos","id":"df80e04b-729b-482e-a088-90a164e53095","savedPayload":{"position":{"x":27424.126477143363,"y":18411.803793243555},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Target Size In Base Asset","config":"{\n \"codeName\": \"targetSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageBaseAsset\",\n \"childProperty\": \"targetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"709e3369-660e-4109-bbcb-3d4e45b6609f","savedPayload":{"position":{"x":27378.527314896903,"y":18487.31986993662},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Target Size In Quoted Asset","config":"{\n \"codeName\": \"targetSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyOpenStage.stageQuotedAsset\",\n \"childProperty\": \"targetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"eb37666f-1459-4bbc-8a33-5030dd2468fa","savedPayload":{"position":{"x":27319.071872047414,"y":18552.488971144652},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stage Defined In","config":"{ \n\"codeName\": \"stageDefinedIn\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"68d9f756-49e1-4541-b94b-e6502c2dd812","savedPayload":{"position":{"x":27248.0449879206,"y":18604.806684855477},"targetPosition":{"x":27017.963099185927,"y":18218.073799679823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"59f991ac-f3e7-410e-9caf-bf14ed61d69c","savedPayload":{"position":{"x":27017.963099185927,"y":18218.073799679823},"targetPosition":{"x":26593.774428194447,"y":18368.28688633502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"73c3c041-ba2a-4798-a362-a453409b518a","savedPayload":{"position":{"x":26593.774428194447,"y":18368.28688633502},"targetPosition":{"x":26259.35925672962,"y":18669.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Strategy Open Stage","id":"f759a457-fc11-43a8-bf2c-6ebf1db0e78d"}}},{"type":"Product Definition","name":"Close Stage","config":"{\n \"codeName\": \"Current-Strategy-Close-Stage\",\n \"singularVariableName\": \"currentStrategyCloseStage\",\n \"pluralVariableName\": \"currentStrategyCloseStages\",\n \"nodePath\": \"tradingEngine.current.strategyCloseStage\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"0c30c4d3-3e58-4422-a178-450c24f95001","savedPayload":{"position":{"x":26904.627959994283,"y":18514.997129667652},"targetPosition":{"x":26706.89410964534,"y":18622.357850726064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"4903a08c-90b6-4726-aa4d-1d8a0acdbd77","savedPayload":{"position":{"x":26930.6615361032,"y":18598.838946490843},"targetPosition":{"x":26706.89410964534,"y":18622.357850726064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"840e560a-bfeb-473e-9a22-e0388757f531","savedPayload":{"position":{"x":27347.88952448233,"y":18351.920318984463},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"4beb9d7d-106c-440a-9ea0-db16de4c2da4","savedPayload":{"position":{"x":27421.557166308456,"y":18400.449073187192},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"517d1407-6464-46e0-b5f7-ce3ca23a7cbd","savedPayload":{"position":{"x":27484.341814769083,"y":18462.417204951566},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"23275807-6666-4821-a84b-060a46ed4993","savedPayload":{"position":{"x":27533.830691033912,"y":18535.443313726006},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"75a1d315-4027-402a-8646-565331def8e4","savedPayload":{"position":{"x":27568.12196534176,"y":18616.721047103823},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"f46867ef-8d39-4aa9-b57d-12ab7eb8c293","savedPayload":{"position":{"x":27585.89784325175,"y":18703.126947372388},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"73317d39-d014-45f3-bf3b-07230c4055cc","savedPayload":{"position":{"x":27586.475207744625,"y":18791.340484241362},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"f4815fd2-f336-4867-ae0c-8d31ac90ced9","savedPayload":{"position":{"x":27569.831871026712,"y":18877.971660959596},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageBaseAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"81b366f7-5fb3-4b55-98c8-cea47462b138","savedPayload":{"position":{"x":27536.607427194394,"y":18959.691289989132},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageQuotedAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"7f1e01e4-f353-4cd4-b145-871558d5ab60","savedPayload":{"position":{"x":27488.078672991665,"y":19033.35893181526},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Placed In Base Asset","config":"{\n \"codeName\": \"sizePlacedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageBaseAsset\",\n \"childProperty\": \"sizePlaced\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3074287b-add9-4baf-a74c-9f09c17cf4f8","savedPayload":{"position":{"x":27426.110541227292,"y":19096.143580275886},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Placed In Quoted Asset","config":"{\n \"codeName\": \"sizePlacedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageQuotedAsset\",\n \"childProperty\": \"sizePlaced\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b8c6b690-b924-4a51-88c0-e17e95c16d38","savedPayload":{"position":{"x":27353.08443245285,"y":19145.632456540716},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Target Size In Base Asset","config":"{\n \"codeName\": \"targetSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageBaseAsset\",\n \"childProperty\": \"targetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"e0e42bb9-3f23-49d1-a286-bdb3b58f4a14","savedPayload":{"position":{"x":27271.806699075034,"y":19179.923730848564},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Target Size In Quoted Asset","config":"{\n \"codeName\": \"targetSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategyCloseStage.stageQuotedAsset\",\n \"childProperty\": \"targetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3ab9f66f-69b9-4d05-a7a1-105d49ce0c09","savedPayload":{"position":{"x":27185.40079880647,"y":19197.699608758554},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stage Defined In","config":"{ \n\"codeName\": \"stageDefinedIn\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7bcc6d7f-a5c9-4a06-9730-7744461e9a75","savedPayload":{"position":{"x":27097.187261937495,"y":19198.276973251428},"targetPosition":{"x":27138.362990336027,"y":18750.16475584283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"722161de-6374-4eb6-a3cc-ab6638d0c484","savedPayload":{"position":{"x":27138.362990336027,"y":18750.16475584283},"targetPosition":{"x":26706.89410964534,"y":18622.357850726064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a","savedPayload":{"position":{"x":26706.89410964534,"y":18622.357850726064},"targetPosition":{"x":26259.35925672962,"y":18669.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Strategy Close Stage","id":"6be13ce1-0fae-4355-99b2-dc8db000251f"}}},{"type":"Product Definition","name":"Trigger Stage","config":"{\n \"codeName\": \"Current-Strategy-Trigger-Stage\",\n \"singularVariableName\": \"currentStrategyTriggerStage\",\n \"pluralVariableName\": \"currentStrategyTriggerStages\",\n \"nodePath\": \"tradingEngine.current.strategyTriggerStage\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a179150b-2eaa-45ef-a7fa-14a1decf7dfc","savedPayload":{"position":{"x":26872.145782241725,"y":18923.76405244602},"targetPosition":{"x":26649.070688432617,"y":18894.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"493f0951-e638-4da1-88b4-1c1d3829046e","savedPayload":{"position":{"x":26843.926404284117,"y":19006.895659196507},"targetPosition":{"x":26649.070688432617,"y":18894.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"42eb64c6-8540-44fa-a428-e6f6514464c1","savedPayload":{"position":{"x":27006.29863778655,"y":19026.943464859356},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"56c868af-79a0-4b0e-a9ec-7d82999155b7","savedPayload":{"position":{"x":27004.42623763659,"y":19127.060377729053},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"22df8e6e-b5c8-4ee3-80a9-425ef95d88f8","savedPayload":{"position":{"x":26959.300162888412,"y":19216.45019539696},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"fcf315f5-afd7-449e-b0bf-d7cf4af9bba0","savedPayload":{"position":{"x":26879.858186080877,"y":19277.40816817978},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"5f4b2d5b-c8bc-401b-90ec-14ede9ec8f64","savedPayload":{"position":{"x":26781.834765012627,"y":19297.860821967402},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"292f1ff7-7038-4826-8af8-1fdd34661d0b","savedPayload":{"position":{"x":26684.644640404593,"y":19273.757257841848},"targetPosition":{"x":26786.04200995958,"y":19072.900160762034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9ec94f8-1ccc-4111-817f-2fb25f5f02b5","savedPayload":{"position":{"x":26786.04200995958,"y":19072.900160762034},"targetPosition":{"x":26649.070688432617,"y":18894.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"b6cff826-9056-4fbd-8eca-cbd6cceec962","savedPayload":{"position":{"x":26649.070688432617,"y":18894.395659196507},"targetPosition":{"x":26259.35925672962,"y":18669.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Strategy Trigger Stage","id":"823fa15f-bf29-4784-a5f8-5b82d2ed7645"}}},{"type":"Product Definition","name":"Manage Stage","config":"{\n \"codeName\": \"Current-Strategy-Manage-Stage\",\n \"singularVariableName\": \"currentStrategyManageStage\",\n \"pluralVariableName\": \"currentStrategyManageStages\",\n \"nodePath\": \"tradingEngine.current.strategyManageStage\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"56d1a25b-54b1-419c-a323-f2fad41de0ec","savedPayload":{"position":{"x":26605.599979591494,"y":19235.370894666772},"targetPosition":{"x":26442.390746113728,"y":19080.49111513568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"fef1dba7-fc21-4338-b75e-a040d71dbde5","savedPayload":{"position":{"x":26533.906490805784,"y":19286.038843105263},"targetPosition":{"x":26442.390746113728,"y":19080.49111513568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"4df09191-2517-4b69-8d05-ba22ee71d7a5","savedPayload":{"position":{"x":26653.48458261442,"y":19397.697862820958},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"41b7d04c-0aeb-478f-9515-8ee8d6eb15e4","savedPayload":{"position":{"x":26593.122534182974,"y":19477.593577562362},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1250e9d7-07f0-47a5-b1bb-9ad2af6ee8ef","savedPayload":{"position":{"x":26504.072756291956,"y":19523.38701794895},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"c629a906-31b2-4dae-bc5b-44f189b024ae","savedPayload":{"position":{"x":26403.97264957653,"y":19526.00823149247},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"e876f72a-fef5-4956-b401-3d2b7b4b8b95","savedPayload":{"position":{"x":26312.64826781894,"y":19484.938054703547},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"e248dba4-bfa4-4879-8276-edc85ee6b0d9","savedPayload":{"position":{"x":26248.187524846304,"y":19408.310939787894},"targetPosition":{"x":26448.280559483,"y":19305.41401325518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"188b2d1c-91c4-4a50-9101-91596ac53407","savedPayload":{"position":{"x":26448.280559483,"y":19305.41401325518},"targetPosition":{"x":26442.390746113728,"y":19080.49111513568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"bd691611-e7a6-49a8-b07d-c15360b55e40","savedPayload":{"position":{"x":26442.390746113728,"y":19080.49111513568},"targetPosition":{"x":26259.35925672962,"y":18669.395659196507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Current Strategy Manage Stage","id":"34a912c3-4b0f-4f21-9736-4ef47cd0544d"}}}],"productDefinitionFolders":[],"id":"e3ceaf77-f718-477c-bf10-3dc0cf2235bb","savedPayload":{"position":{"x":26259.35925672962,"y":18669.395659196507},"targetPosition":{"x":25819.192836399405,"y":18575.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Orders","project":"Superalgos","products":[{"type":"Product Definition","name":"Market Buy Orders","config":"{ \n \"codeName\": \"Market-Buy-Orders\", \n \"singularVariableName\": \"marketBuyOrder\", \n \"pluralVariableName\": \"marketBuyOrders\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a2ea8001-2143-4055-b1d3-525d95fa8e6f","savedPayload":{"position":{"x":26729.687883722007,"y":18547.789827507248},"targetPosition":{"x":26569.99494307753,"y":18706.292712996186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"557357c6-f814-4bf9-9426-82fc5e22c028","savedPayload":{"position":{"x":26778.18841068418,"y":18620.966983899278},"targetPosition":{"x":26569.99494307753,"y":18706.292712996186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"1f788bde-d5cc-4556-9cb3-f6ad2a085870","savedPayload":{"position":{"x":27065.774088629263,"y":18260.310672248503},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"cbe57e07-e492-45ef-be26-6e5ace5cc49d","savedPayload":{"position":{"x":27109.432480725412,"y":18266.953751153596},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"0eef5d2a-489b-402b-a1bc-bbf6105bc226","savedPayload":{"position":{"x":27152.229510133304,"y":18277.844112562674},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"76a37b2a-ff68-425c-95ae-9da13d4f11e3","savedPayload":{"position":{"x":27193.753018064504,"y":18292.87687634209},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"81aa9c0a-b729-471f-8b3f-046d83779376","savedPayload":{"position":{"x":27233.60311043858,"y":18311.9072687589},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"48215010-5717-4f29-aa92-edc16d881270","savedPayload":{"position":{"x":27271.39600908169,"y":18334.75201673107},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"588b02df-d269-4fac-a942-0e148bef8573","savedPayload":{"position":{"x":27306.767747720205,"y":18361.191112847406},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f44959e8-ba4e-41f2-a349-7003d00ef570","savedPayload":{"position":{"x":27339.37767717487,"y":18390.969934159235},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"43c9c172-0930-4a94-86c4-6de1b82604d3","savedPayload":{"position":{"x":27368.91174599864,"y":18423.801694338566},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e637160d-ab4a-4d36-8324-994615efa900","savedPayload":{"position":{"x":27395.085524963783,"y":18459.3702055872},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b9cf9af0-758e-46c8-ad34-0afb01aa1658","savedPayload":{"position":{"x":27417.646946270812,"y":18497.332923698094},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderCounters\"\n}","project":"Superalgos","id":"69f674b7-9532-406e-bda9-6a128a9b3e8b","savedPayload":{"position":{"x":27436.378731099216,"y":18537.3242469433},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"5f50a6c7-0123-4f45-802c-897b7f1d9186","savedPayload":{"position":{"x":27451.100482121266,"y":18578.95903701849},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"ff92e722-7f93-4935-ab39-5fe5d901d275","savedPayload":{"position":{"x":27461.67042082689,"y":18621.83632813534},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"7ed49f47-7cf0-4c04-8ec7-c42b77bbc496","savedPayload":{"position":{"x":27467.986752928235,"y":18665.5431885413},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"c8db7716-5a26-4aa6-b6fa-594e9b4998f0","savedPayload":{"position":{"x":27469.988648694307,"y":18709.658697278046},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"9033bc32-f754-4d94-87a6-4c16cd8ca7d7","savedPayload":{"position":{"x":27467.656828774532,"y":18753.75799788046},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"1524688a-c64c-434c-84ea-79e57f7e37bc","savedPayload":{"position":{"x":27461.01374986944,"y":18797.41638997661},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"200c3a3d-f082-4cb0-86b1-ba12429f6c0e","savedPayload":{"position":{"x":27450.12338846036,"y":18840.2134193845},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"256902a5-0c3d-4a8d-9f85-e68bb07405e0","savedPayload":{"position":{"x":27435.090624680946,"y":18881.736927315702},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"5f054d54-a92e-4d88-a654-20f9257ab794","savedPayload":{"position":{"x":27416.060232264135,"y":18921.587019689778},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2180ac7e-b09a-404f-86cd-3e0d0eb0635f","savedPayload":{"position":{"x":27393.215484291966,"y":18959.37991833289},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"cd182952-6fd9-40be-82c6-d5b1356c3fc7","savedPayload":{"position":{"x":27366.77638817563,"y":18994.751656971403},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"81cb024b-b64e-4f2c-be9d-c343fc27b08e","savedPayload":{"position":{"x":27336.9975668638,"y":19027.36158642607},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"bfd95185-6f74-4710-b798-b76a5c3cc109","savedPayload":{"position":{"x":27304.16580668447,"y":19056.89565524984},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4a7527d6-b18c-4e2d-a999-7a0adae10446","savedPayload":{"position":{"x":27268.597295435833,"y":19083.06943421498},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"563763f2-8250-4ba4-86b6-4513fff2809d","savedPayload":{"position":{"x":27230.63457732494,"y":19105.63085552201},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"f8f2196b-973a-4f6f-a78b-408d4ac24b4d","savedPayload":{"position":{"x":27190.643254079736,"y":19124.362640350413},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"cc17eb10-cd63-4be5-9190-6d2f94e02f70","savedPayload":{"position":{"x":27149.008464004546,"y":19139.084391372464},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"cf03df3f-d37a-4970-a8d3-d1983d680ebf","savedPayload":{"position":{"x":27106.131172887694,"y":19149.654330078087},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"3af34380-403a-4cee-b0b1-767b8fff60f5","savedPayload":{"position":{"x":27062.424312481737,"y":19155.970662179432},"targetPosition":{"x":27019.99179588592,"y":18707.975705137116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2b743c15-4ca6-46e9-a96e-b0a62b42de60","savedPayload":{"position":{"x":27019.99179588592,"y":18707.975705137116},"targetPosition":{"x":26569.99494307753,"y":18706.292712996186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"7c769317-2639-4460-8b88-9dc92f7b0585","savedPayload":{"position":{"x":26569.99494307753,"y":18706.292712996186},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Market Buy Orders","id":"50d624c9-9a6e-4d57-a147-29d5c004b3f2"}}},{"type":"Product Definition","name":"Market Sell Orders","config":"{ \n \"codeName\": \"Market-Sell-Orders\", \n \"singularVariableName\": \"marketSellOrder\", \n \"pluralVariableName\": \"marketSellOrders\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"917cfdae-b736-4ed5-ad8e-d572c49ea489","savedPayload":{"position":{"x":26815.45275882104,"y":18830.338045364537},"targetPosition":{"x":26602.802566259714,"y":18903.85604046527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"3c878a50-6d76-412b-95d7-f2e546960293","savedPayload":{"position":{"x":26827.399845457454,"y":18917.311975102904},"targetPosition":{"x":26602.802566259714,"y":18903.85604046527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"7dd0d738-2116-4010-a9d5-19624a9bc097","savedPayload":{"position":{"x":27242.98849717597,"y":18717.15061555652},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"5843c701-ba88-42c1-97c2-215cb97b309c","savedPayload":{"position":{"x":27279.441025362685,"y":18742.078489243562},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"f3f77a4c-acf5-4026-aa2a-9b34e231a9d5","savedPayload":{"position":{"x":27313.274665769386,"y":18770.459300975966},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"cc0b04e1-acd8-413b-8366-e620d55a22be","savedPayload":{"position":{"x":27344.163581943616,"y":18802.019728022216},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"89bb217d-a5ce-4197-b33b-4b251e3ec5c9","savedPayload":{"position":{"x":27371.81029673701,"y":18836.455826217178},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"3a6b6603-5de8-47a1-b2cb-e2078397aca1","savedPayload":{"position":{"x":27395.948557172884,"y":18873.435957110538},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a0d62501-1822-4d56-afce-b5eee40212f7","savedPayload":{"position":{"x":27416.345898607917,"y":18912.603981826407},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"9f72bb4a-779d-453f-a7b2-bf240eec29fa","savedPayload":{"position":{"x":27432.805883493776,"y":18953.582690875344},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7b91a979-7175-49aa-a83b-faa1d7c22bf3","savedPayload":{"position":{"x":27445.169993178064,"y":18995.977436887973},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b47e5776-92ed-468e-8040-16a655a9a92b","savedPayload":{"position":{"x":27453.319154525612,"y":19039.379935284862},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"178e1183-6b29-4a8b-b2a2-3e817bf56c0b","savedPayload":{"position":{"x":27457.174886657856,"y":19083.37219628023},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderCounters\"\n}","project":"Superalgos","id":"16eb66bd-cbd5-4272-83bd-7aa5cbf79965","savedPayload":{"position":{"x":27456.700056766607,"y":19127.53055035208},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"4694fc1a-8031-4b21-8002-fb2259b98221","savedPayload":{"position":{"x":27451.899237723286,"y":19171.42972841128},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"3fdfa893-f3ff-4595-bfd1-e9e191a2f7de","savedPayload":{"position":{"x":27442.818664039678,"y":19214.646957375397},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"fd90ed73-a52a-41b0-988e-f85896e4e119","savedPayload":{"position":{"x":27429.545786604296,"y":19256.76603170456},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"a0541e00-0150-4089-82c3-1f596ed4fc0c","savedPayload":{"position":{"x":27412.20843048254,"y":19297.381321688354},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"2320eff7-cd11-46a6-8f2b-7c6c6bd9afa2","savedPayload":{"position":{"x":27390.97356389142,"y":19336.101679881656},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"cbcd69c4-f332-4615-a1aa-ff5a63c2f63a","savedPayload":{"position":{"x":27366.045690204377,"y":19372.55420806837},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"67d569c5-929d-4f9a-a7a2-1a31aecab027","savedPayload":{"position":{"x":27337.664878471973,"y":19406.38784847507},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"42ccc010-d59e-45d0-9ded-718df8f547cc","savedPayload":{"position":{"x":27306.104451425723,"y":19437.2767646493},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"da1eb092-2796-4d86-9e20-095b75b18911","savedPayload":{"position":{"x":27271.66835323076,"y":19464.923479442696},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4b2b02b0-2297-4cae-997e-ddadffae94e1","savedPayload":{"position":{"x":27234.6882223374,"y":19489.06173987857},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"49e12e85-2250-420d-ae4e-4d7ee514e59c","savedPayload":{"position":{"x":27195.520197621532,"y":19509.459081313602},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"f28662d2-c0e7-4051-a8ab-868707defe65","savedPayload":{"position":{"x":27154.541488572595,"y":19525.91906619946},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"a4c176bc-6da0-459f-ac04-7c414f92ce02","savedPayload":{"position":{"x":27112.146742559966,"y":19538.28317588375},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"294f76ca-f9e2-4286-a23d-5c99566196e6","savedPayload":{"position":{"x":27068.744244163077,"y":19546.432337231297},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8568ef28-9a27-42e2-bb4c-4369687ffc12","savedPayload":{"position":{"x":27024.75198316771,"y":19550.28806936354},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"cf72b9d2-d399-4a2b-9928-9caa64660f4a","savedPayload":{"position":{"x":26980.59362909586,"y":19549.813239472292},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"885e6120-43c9-4eee-85c1-668a539be5b6","savedPayload":{"position":{"x":26936.69445103666,"y":19545.01242042897},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"9e9c5625-295a-4292-a5de-8b4e5d637afd","savedPayload":{"position":{"x":26893.477222072543,"y":19535.931846745363},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"f8d17b8d-ae68-4b25-970e-2fb371884d48","savedPayload":{"position":{"x":26851.35814774338,"y":19522.65896930998},"targetPosition":{"x":27007.505498371127,"y":19100.618681076812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e2626cbd-29b0-4582-a408-4720feb8123d","savedPayload":{"position":{"x":27007.505498371127,"y":19100.618681076812},"targetPosition":{"x":26602.802566259714,"y":18903.85604046527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"9cc7645a-54fe-40d6-9896-9278167011fb","savedPayload":{"position":{"x":26602.802566259714,"y":18903.85604046527},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Market Sell Orders","id":"4f84a1a5-f9cd-4b9d-9d91-661ba912e2ca"}}},{"type":"Product Definition","name":"Limit Buy Orders","config":"{ \n \"codeName\": \"Limit-Buy-Orders\", \n \"singularVariableName\": \"limitBuyOrder\", \n \"pluralVariableName\": \"limitBuyOrders\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"df8cfaa4-a4d4-4bc1-9fa2-4f8e91e45a87","savedPayload":{"position":{"x":26770.131163999882,"y":19122.11717802818},"targetPosition":{"x":26546.641698141942,"y":19096.089142171968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"12652573-9506-4d3e-82bb-64b1bb9e7ce0","savedPayload":{"position":{"x":26743.158543280795,"y":19205.66162766295},"targetPosition":{"x":26546.641698141942,"y":19096.089142171968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"b0dc1303-0b65-4328-b885-f33d4ef395a6","savedPayload":{"position":{"x":27204.437739439563,"y":19205.639632297083},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"451e4e45-854c-4b9f-ac75-ddfe076fb6d8","savedPayload":{"position":{"x":27226.46453344854,"y":19243.915029662054},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"fa7958e6-31e1-4216-b3bf-f341cae3ad92","savedPayload":{"position":{"x":27244.633617429135,"y":19284.16512388637},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"f3230b63-049f-457a-abc1-9117d8443337","savedPayload":{"position":{"x":27258.77001317039,"y":19326.00228455971},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"544aae22-e5cf-41d2-912e-f19699a7f65a","savedPayload":{"position":{"x":27268.73757945357,"y":19369.023596954274},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7cccabcc-97ae-4e46-86b4-70c8b6ab73c5","savedPayload":{"position":{"x":27274.440323166542,"y":19412.81474231386},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"3f94ee88-bb65-4f46-9cef-c3468b2e5831","savedPayload":{"position":{"x":27275.823323769913,"y":19456.95398796998},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"fbe17bbd-1af9-4b97-be44-f267039077e5","savedPayload":{"position":{"x":27272.873262211855,"y":19501.016248858},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"593c0354-1f6a-4ec1-879b-13f95de9d66d","savedPayload":{"position":{"x":27265.61854919783,"y":19544.577181318688},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7a473c6b-849a-46f7-befa-661675c6b6a7","savedPayload":{"position":{"x":27254.12905158,"y":19587.217269759614},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7e05bfad-d3ba-4170-bb97-b02911c65b81","savedPayload":{"position":{"x":27238.515419501215,"y":19628.52586681965},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderCounters\"\n}","project":"Superalgos","id":"e86cdc19-1330-4dbd-b0d9-6300bb84b504","savedPayload":{"position":{"x":27218.92802077368,"y":19668.10514812754},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"dc8ff39f-2ebf-4097-a324-69714556e67e","savedPayload":{"position":{"x":27195.555492754702,"y":19705.573943568044},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"e9f153ec-763f-45ce-ab8e-9095762a8b5c","savedPayload":{"position":{"x":27168.622925665823,"y":19740.571408158543},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"45ca3d8c-ba98-4ff9-8825-d515ad54d235","savedPayload":{"position":{"x":27138.389694850954,"y":19772.760497183477},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"0952905d-7adc-497d-859c-9bf80bd5753c","savedPayload":{"position":{"x":27105.14696285,"y":19801.83121211918},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"7becceb8-d380-4e4e-b5ce-70b63b32445f","savedPayload":{"position":{"x":27069.214875344464,"y":19827.503586089166},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"4deb6a9d-3914-4a70-b2f5-992a09504eec","savedPayload":{"position":{"x":27030.939477979493,"y":19849.530380098142},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"3213e0e6-5b5f-4e9a-b67e-33f596bad152","savedPayload":{"position":{"x":26990.689383755176,"y":19867.69946407874},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"737e90c6-6468-4873-a786-8e998b39163b","savedPayload":{"position":{"x":26948.852223081838,"y":19881.835859819992},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"08461bfb-7f11-40d4-96a8-0b84ab258efe","savedPayload":{"position":{"x":26905.830910687273,"y":19891.80342610317},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1c6d07ec-602d-412b-b384-b9170f8bb8de","savedPayload":{"position":{"x":26862.039765327685,"y":19897.506169816144},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"bb16c953-c112-4828-8f29-6604be02b427","savedPayload":{"position":{"x":26817.900519671566,"y":19898.889170419516},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"a698c86e-8997-4053-9bd7-222876eb9a74","savedPayload":{"position":{"x":26773.838258783548,"y":19895.939108861457},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"07aef603-7b78-4446-b0e2-03c365d5941c","savedPayload":{"position":{"x":26730.27732632286,"y":19888.68439584743},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"d28dd916-3d2e-459c-9899-4dc31385242d","savedPayload":{"position":{"x":26687.637237881932,"y":19877.1948982296},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b5bedab9-5eb2-4334-9c65-901f03abf58c","savedPayload":{"position":{"x":26646.328640821896,"y":19861.581266150817},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"0c5084c6-c8cd-4985-8971-2055b7e81781","savedPayload":{"position":{"x":26606.749359514008,"y":19841.993867423284},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"980d1de1-2e7e-434c-88c8-e0990cefff6d","savedPayload":{"position":{"x":26569.280564073502,"y":19818.621339404304},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"cc86032e-ef23-4fbd-920a-11e92467a2f8","savedPayload":{"position":{"x":26534.283099483004,"y":19791.688772315425},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"5c1dcd41-a39e-4933-b591-3a8f1c2d8de9","savedPayload":{"position":{"x":26502.09401045807,"y":19761.455541500556},"targetPosition":{"x":26825.894330495972,"y":19448.960177145575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d3c594aa-6573-44f7-b93e-2bd2b0d4134e","savedPayload":{"position":{"x":26825.894330495972,"y":19448.960177145575},"targetPosition":{"x":26546.641698141942,"y":19096.089142171968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"4c827ee0-a29b-4b65-8438-03e2ea98b410","savedPayload":{"position":{"x":26546.641698141942,"y":19096.089142171968},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Limit Buy Orders","id":"17ec46bd-e5c0-48d5-a3b6-e108cc835f17"}}},{"type":"Product Definition","name":"Limit Sell Orders","config":"{ \n \"codeName\": \"Limit-Sell-Orders\", \n \"singularVariableName\": \"limitSellOrder\", \n \"pluralVariableName\": \"limitSellOrders\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f645108f-4648-497f-b361-0be5b84c233a","savedPayload":{"position":{"x":26602.699596945753,"y":19365.336789837926},"targetPosition":{"x":26412.635687422786,"y":19244.917894739},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"e98191d1-5b13-42eb-bd52-31e3c6830188","savedPayload":{"position":{"x":26542.149527202062,"y":19428.904756513497},"targetPosition":{"x":26412.635687422786,"y":19244.917894739},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"5d3f01ca-9d2b-4446-906c-0f9dfcf8016f","savedPayload":{"position":{"x":26957.757265783745,"y":19629.02648178012},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"ef7f6f85-9aac-4eb1-935e-84c03beb5ae0","savedPayload":{"position":{"x":26960.995648920612,"y":19673.06849095794},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"68c5cf4d-ee84-4d53-be73-923d6ec0c070","savedPayload":{"position":{"x":26959.901566563552,"y":19717.21584287803},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"f551a912-c93a-49a5-8ec6-b23845504195","savedPayload":{"position":{"x":26954.48555532376,"y":19761.043374408},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"5ca3123d-351b-4b1b-9bdd-2be83cb30d4b","savedPayload":{"position":{"x":26944.79977435016,"y":19804.129002460657},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a4d2dcb3-66b5-4689-9ff5-6e79ca264c3a","savedPayload":{"position":{"x":26930.937503008317,"y":19846.057788884846},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"74cfaaa3-4241-4585-bb78-afe6ab4fad13","savedPayload":{"position":{"x":26913.03224254914,"y":19886.4259365467},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e79e457e-0f39-4444-b196-e2ab8e9d51b3","savedPayload":{"position":{"x":26891.256430418864,"y":19924.844678116762},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"26467972-56e9-445c-84cc-043cf332e7cf","savedPayload":{"position":{"x":26865.819779592173,"y":19960.944020111892},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"259e069d-8c48-4b18-b3be-876eb376edfd","savedPayload":{"position":{"x":26836.967258921613,"y":19994.376306134764},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"ab79d27c-63b2-4b9c-986c-69551d4acda6","savedPayload":{"position":{"x":26804.976733953637,"y":20024.81956499504},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderCounters\"\n}","project":"Superalgos","id":"df8ad782-de40-443e-9c25-0c9fd06c0ddd","savedPayload":{"position":{"x":26770.156290931485,"y":20051.98061146791},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"2adf7743-fa8c-484c-b2b2-16c144f2aa8c","savedPayload":{"position":{"x":26732.841269756253,"y":20075.5978698281},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"fd5472c9-a36f-4281-891d-57380ca2ef6c","savedPayload":{"position":{"x":26693.39103448032,"y":20095.4438929671},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"87559a66-ff26-4cfb-b9db-baa312369ee1","savedPayload":{"position":{"x":26652.185512435088,"y":20111.327552833147},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"aee3133b-1078-4262-84da-01e16ab7d491","savedPayload":{"position":{"x":26609.62153532308,"y":20123.095881098827},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"84f5a086-9b8d-4296-bba1-bccfc56fb263","savedPayload":{"position":{"x":26566.109017511724,"y":20130.635542329725},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"8bf3e674-bbc9-4ff6-bcba-c9487d5215a3","savedPayload":{"position":{"x":26522.067008333906,"y":20133.873925466592},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"1d59f7dc-e3c9-4456-8980-3fded2a58f1a","savedPayload":{"position":{"x":26477.919656413815,"y":20132.779843109533},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8a2fa2ac-a644-46bd-ad48-8acd59807416","savedPayload":{"position":{"x":26434.092124883842,"y":20127.36383186974},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"fd203e76-3248-4806-98bc-3dd66c8c4964","savedPayload":{"position":{"x":26391.00649683119,"y":20117.67805089614},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2967221c-0ec9-41e4-8185-689147f647eb","savedPayload":{"position":{"x":26349.077710407,"y":20103.815779554297},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"996a2f7a-28d7-4bbd-9695-3d29119b3008","savedPayload":{"position":{"x":26308.709562745145,"y":20085.91051909512},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4056be3b-3774-4537-8902-06ecf35d9958","savedPayload":{"position":{"x":26270.290821175084,"y":20064.134706964844},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\",\n \"decimals\": 10\n}","project":"Superalgos","id":"ed176195-45a7-4fa0-92d0-ac7a4feab4bc","savedPayload":{"position":{"x":26234.191479179954,"y":20038.698056138153},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"d4610df3-78d9-49fc-8218-be21473b12b6","savedPayload":{"position":{"x":26200.75919315708,"y":20009.845535467593},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"f0112290-2f1b-42cc-ab0e-51601b9b44e0","savedPayload":{"position":{"x":26170.315934296807,"y":19977.855010499617},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"aa23a704-83fd-4c85-a429-7c6228e6c373","savedPayload":{"position":{"x":26143.154887823937,"y":19943.034567477465},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"0f2548c2-6dfd-4858-94f2-4c711909dc60","savedPayload":{"position":{"x":26119.537629463746,"y":19905.719546302233},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"3f1abc5c-e271-453b-ad96-755d827b8e79","savedPayload":{"position":{"x":26099.691606324744,"y":19866.2693110263},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"dc782a78-4e32-4e52-9e9e-c57770f06536","savedPayload":{"position":{"x":26083.8079464587,"y":19825.063788981068},"targetPosition":{"x":26511.128611372933,"y":19684.006887918913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"38241371-e97c-4eb5-989e-26605c078620","savedPayload":{"position":{"x":26511.128611372933,"y":19684.006887918913},"targetPosition":{"x":26412.635687422786,"y":19244.917894739},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc","savedPayload":{"position":{"x":26412.635687422786,"y":19244.917894739},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Limit Sell Orders","id":"1ec8da3f-8749-430d-8ad9-35fffc0d61ec"}}},{"type":"Product Definition","name":"Last Market Order","config":"{ \n \"codeName\": \"Last-Market-Order\", \n \"singularVariableName\": \"lastMarketOrder\", \n \"pluralVariableName\": \"lastMarketOrders\",\n \"nodePath\": \"tradingEngine.last.marketOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"768b42e9-59fe-494f-9e05-3be57fb17ca8","savedPayload":{"position":{"x":26346.319932927134,"y":19511.82425378205},"targetPosition":{"x":26227.326068001046,"y":19320.864938455587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"26a39916-4f2d-42ab-ae86-7ab622f80624","savedPayload":{"position":{"x":26264.18509806945,"y":19542.825322088378},"targetPosition":{"x":26227.326068001046,"y":19320.864938455587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"8dbd8444-1037-4ab0-888b-dd49ffbfdc8b","savedPayload":{"position":{"x":26551.805169353538,"y":19903.45420596654},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"db3b180d-b86f-4749-a8a7-8d5d7689f032","savedPayload":{"position":{"x":26535.613740121873,"y":19944.539766899747},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"fbef9773-d1c5-4ac2-9ce3-287dd94fd114","savedPayload":{"position":{"x":26515.473187856016,"y":19983.840452036096},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"b9f73cfb-1c24-4ce7-a9ac-184841d1e16a","savedPayload":{"position":{"x":26491.577477084233,"y":20020.977774293788},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"9e7d08f0-4218-447b-8a13-54211abc880c","savedPayload":{"position":{"x":26464.156736563982,"y":20055.594080958155},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f8dafa7f-c43a-4dc9-909a-85eb44e49dbd","savedPayload":{"position":{"x":26433.475043016177,"y":20087.35599807282},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1a84e99a-ccb0-4483-90c6-f99c396b0dc8","savedPayload":{"position":{"x":26399.827877922,"y":20115.957641013138},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b098ae78-9591-4d50-8c01-09d5775d27ff","savedPayload":{"position":{"x":26363.53928187472,"y":20141.123560322347},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"9bd09a1b-af71-4467-b571-6815ddc01c7d","savedPayload":{"position":{"x":26324.958733891635,"y":20162.611394440406},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"c9301d25-01f7-4ae9-bd3b-184eedac1998","savedPayload":{"position":{"x":26284.457785740102,"y":20180.214203778316},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"89ad4f68-83b2-4f5b-9aa5-1db1815b12fd","savedPayload":{"position":{"x":26242.42648369088,"y":20193.762463659477},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderCounters\"\n}","project":"Superalgos","id":"10fdf7b0-2fb7-4692-86fe-0d5481e90b93","savedPayload":{"position":{"x":26199.269612159358,"y":20203.125696935},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"e5946038-66fd-4f81-a503-ac98a61095bb","savedPayload":{"position":{"x":26155.402795410326,"y":20208.213730549982},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\"\n}","project":"Superalgos","id":"9b802d6d-35f2-4535-8062-e3dc2b782574","savedPayload":{"position":{"x":26111.24849486912,"y":20208.977563959306},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"8dba345d-5995-4973-a80f-99cd5c07d106","savedPayload":{"position":{"x":26067.23194058715,"y":20205.409841029683},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"8255158c-b589-4b7b-9f8e-c66ec0ee1ed3","savedPayload":{"position":{"x":26023.777036044045,"y":20197.544920883247},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"9b78302a-2d32-45e1-84c9-7fa34ea3f378","savedPayload":{"position":{"x":25981.302275725422,"y":20185.45854700041},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"bb170388-df93-4218-a35b-dcf7a42d261b","savedPayload":{"position":{"x":25940.216714792215,"y":20169.26711776874},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"6067ba50-8879-4d74-8bc6-11b77677fbea","savedPayload":{"position":{"x":25900.916029655866,"y":20149.126565502887},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"5bdb31c2-8bfb-4ac9-8492-3d3d76c20e71","savedPayload":{"position":{"x":25863.778707398174,"y":20125.230854731104},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"eaf268d2-5576-4da0-9d30-708bd68f7a9c","savedPayload":{"position":{"x":25829.162400733807,"y":20097.810114210853},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"a050f0e0-b844-4c9f-ad32-85af779a59d5","savedPayload":{"position":{"x":25797.40048361914,"y":20067.128420663048},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"fb89644d-9ce1-4ee5-8b4a-ccbcff36ac8b","savedPayload":{"position":{"x":25768.798840678824,"y":20033.481255568873},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"fd00ddf7-d367-4ea6-a289-a29a15b41aab","savedPayload":{"position":{"x":25743.632921369615,"y":19997.192659521592},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"9e87631f-fcf4-4d3d-837d-82e7d12bf94f","savedPayload":{"position":{"x":25722.145087251556,"y":19958.612111538507},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"d8d0f0b6-9164-4166-af6b-adac7a1891b2","savedPayload":{"position":{"x":25704.542277913646,"y":19918.111163386973},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1bf66ce6-4819-4d7d-8853-f1f85d6c9c32","savedPayload":{"position":{"x":25690.994018032485,"y":19876.079861337752},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"20ae12e0-bde2-4e56-9df1-afec37006b55","savedPayload":{"position":{"x":25681.630784756962,"y":19832.92298980623},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"fa076306-c699-4067-bcf2-0890b5b72748","savedPayload":{"position":{"x":25676.54275114198,"y":19789.056173057197},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"17fef0b6-4279-4fda-8d40-015ec3f52529","savedPayload":{"position":{"x":25675.778917732656,"y":19744.90187251599},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.marketOrders.orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"0336d6d0-3d2d-4a87-b7b3-cd48c43c157d","savedPayload":{"position":{"x":25679.34664066228,"y":19700.88531823402},"targetPosition":{"x":26125.551552022545,"y":19759.204929669417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9292833c-b6ec-4734-b6ec-552aeecb540d","savedPayload":{"position":{"x":26125.551552022545,"y":19759.204929669417},"targetPosition":{"x":26227.326068001046,"y":19320.864938455587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0","savedPayload":{"position":{"x":26227.326068001046,"y":19320.864938455587},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Last Market Order","id":"05aa37c8-9f6d-4276-96a6-3123707e7686"}}},{"type":"Product Definition","name":"Last Limit Order","config":"{ \n \"codeName\": \"Last-Limit-Order\", \n \"singularVariableName\": \"lastLimitOrder\", \n \"pluralVariableName\": \"lastLimitOrders\",\n \"nodePath\": \"tradingEngine.last.limitOrders\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f9263cd7-460d-461c-be7b-ed2a69d38d11","savedPayload":{"position":{"x":26051.771308693147,"y":19532.56593107559},"targetPosition":{"x":26027.415682676532,"y":19308.888029884303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f3d5b047-d9c2-4e71-8fce-6e9be3499556","savedPayload":{"position":{"x":25964.31952008268,"y":19524.859959231453},"targetPosition":{"x":26027.415682676532,"y":19308.888029884303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"f5ab0d81-63ce-48d6-99f8-51c6bf2a6e97","savedPayload":{"position":{"x":26066.98524152267,"y":19974.569028446072},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"6e9e3c64-3e53-4049-b251-3a9e1e63b24c","savedPayload":{"position":{"x":26034.57091105665,"y":20004.560641910506},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"53856545-fe51-4ec7-bbb0-e398eb6fdbd0","savedPayload":{"position":{"x":25999.37297226591,"y":20031.230677580592},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"4b0399dd-39b4-4ef5-9c57-48f7a2465581","savedPayload":{"position":{"x":25961.730400542154,"y":20054.322288433497},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\"\n}","project":"Superalgos","id":"552cb522-d091-446c-b0c7-8644d9a39e9c","savedPayload":{"position":{"x":25922.005714428604,"y":20073.613089633556},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"34b51b42-1c7f-4691-81ff-e3baba398a2c","savedPayload":{"position":{"x":25880.581484368256,"y":20088.917300219786},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"4b2251b9-462f-4b9b-850c-2848dac1d08b","savedPayload":{"position":{"x":25837.856648341378,"y":20100.087532278103},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"22e3ead2-3ec4-437f-99d4-eb1cf2465f34","savedPayload":{"position":{"x":25794.242669874682,"y":20107.016210367525},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f1ba05d1-f727-4495-9bf9-aeb656da4e7b","savedPayload":{"position":{"x":25750.15957542263,"y":20109.636607530443},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"53acfd34-51ce-49b9-b42a-03706b2e7a86","savedPayload":{"position":{"x":25706.031909283058,"y":20107.923487909728},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1f8cb548-32a3-49c3-b1b1-20eb6130c58c","savedPayload":{"position":{"x":25662.284645003532,"y":20101.89334978381},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderCounters\"\n}","project":"Superalgos","id":"d4c99d02-1038-4ee5-8f67-6804d89ab65e","savedPayload":{"position":{"x":25619.33909265375,"y":20091.604266679253},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"fbd59c15-2863-4257-9211-7492ebb69c93","savedPayload":{"position":{"x":25577.60884137927,"y":20077.15532809094},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\"\n}","project":"Superalgos","id":"ead97685-20c5-44a7-b86c-33e7a55e416a","savedPayload":{"position":{"x":25537.49577631194,"y":20058.685685196062},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"97b1f010-04b2-4016-b313-48ea865b49a4","savedPayload":{"position":{"x":25499.38620819638,"y":20036.37321075224},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Lock","config":"{\n \"codeName\": \"lock\",\n \"isString\": true\n}","project":"Superalgos","id":"eba510cb-b866-45ba-984e-153216f4f3c6","savedPayload":{"position":{"x":25463.64715300637,"y":20010.432786085603},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"af94d067-ae2f-4610-b546-6d97904957e2","savedPayload":{"position":{"x":25430.622797380332,"y":19981.11423166617},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"839364f2-db1b-4bfd-b61c-015e70f5d171","savedPayload":{"position":{"x":25400.6311839159,"y":19948.69990120015},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"919ab388-ca0a-4d89-b0ea-929090ef1bf8","savedPayload":{"position":{"x":25373.961148245813,"y":19913.501962409413},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"1cd292aa-6c43-44ad-90e3-6f49f71be40f","savedPayload":{"position":{"x":25350.869537392908,"y":19875.859390685655},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"9abd9e70-fad1-4da5-86b8-fb5e1daf6a2a","savedPayload":{"position":{"x":25331.57873619285,"y":19836.134704572105},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3819475a-dec6-4cd3-8d9a-c10a9193d592","savedPayload":{"position":{"x":25316.27452560662,"y":19794.710474511758},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"034fc727-1072-4cbf-8540-693d0a34d4e6","savedPayload":{"position":{"x":25305.104293548302,"y":19751.98563848488},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"598761f1-33e1-4edb-bff9-33b2b8ba2933","savedPayload":{"position":{"x":25298.17561545888,"y":19708.371660018183},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"182d9d37-1cef-43ed-93c8-7b9bebdf150f","savedPayload":{"position":{"x":25295.555218295962,"y":19664.288565566127},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Base Asset","config":"{\n \"codeName\": \"actualSizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4fbfcb6e-829f-47ae-817c-9c1c000319d7","savedPayload":{"position":{"x":25297.268337916677,"y":19620.16089942656},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Size In Quoted Asset","config":"{\n \"codeName\": \"actualSizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"actualSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"a8b9518b-c4b5-4778-81b1-9fe05ac07f03","savedPayload":{"position":{"x":25303.298476042593,"y":19576.413635147033},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Base Asset","config":"{\n \"codeName\": \"amountReceivedInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"5cb701a7-772c-4f2f-8807-a0914f6e9bbc","savedPayload":{"position":{"x":25313.587559147152,"y":19533.46808279725},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Amount Received In Quoted Asset","config":"{\n \"codeName\": \"amountReceivedInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"amountReceived\",\n \"decimals\": 10\n}","project":"Superalgos","id":"c35a38b3-480a-4414-9b5e-c31f34a902f1","savedPayload":{"position":{"x":25328.036497735466,"y":19491.737831522772},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Base Asset","config":"{ \n\"codeName\": \"feesToBePaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderBaseAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"d252669b-695b-4862-a3ce-4d6cecb2aa73","savedPayload":{"position":{"x":25346.506140630343,"y":19451.62476645544},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees To Be Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesToBePaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.last.limitOrders.orderQuotedAsset\",\n \"childProperty\": \"feesToBePaid\"\n}","project":"Superalgos","id":"5c4ac5b8-307a-4316-bea0-75b90976d070","savedPayload":{"position":{"x":25368.818615074164,"y":19413.515198339883},"targetPosition":{"x":25745.531417841452,"y":19659.660407984953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e82595f6-184f-4a0c-8385-1364f22ea8e0","savedPayload":{"position":{"x":25745.531417841452,"y":19659.660407984953},"targetPosition":{"x":26027.415682676532,"y":19308.888029884303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3","savedPayload":{"position":{"x":26027.415682676532,"y":19308.888029884303},"targetPosition":{"x":26153.608007864234,"y":18876.944171190004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Last Limit Order","id":"2284d48f-cf52-4277-b81e-c62afef88b71"}}}],"productDefinitionFolders":[],"id":"1e82c85a-37f7-4610-a982-e14ab71a5286","savedPayload":{"position":{"x":26153.608007864234,"y":18876.944171190004},"targetPosition":{"x":25819.192836399405,"y":18575.835398328516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"db019824-6897-461b-b39b-ebe905a84231","savedPayload":{"position":{"x":25819.192836399405,"y":18575.835398328516},"targetPosition":{"x":25391.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Trading System","project":"Superalgos","products":[{"type":"Product Definition","name":"Trading System Errors","config":"{\n \"codeName\": \"Trading-System-Errors\",\n \"singularVariableName\": \"tradingSystemError\",\n \"pluralVariableName\": \"tradingSystemErrors\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"errors\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2ef33675-fc52-49fd-a8ef-bc5da1711dd1","savedPayload":{"position":{"x":26136.2214067986,"y":18271.109813707764},"targetPosition":{"x":26083.69619993102,"y":18489.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2d0dd4c2-4f4c-4d8c-b9a5-9ca62f186369","savedPayload":{"position":{"x":26215.947881696826,"y":18307.86422206288},"targetPosition":{"x":26083.69619993102,"y":18489.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"214b7654-8ea4-4b39-8f2d-8fb64d9a4b23","savedPayload":{"position":{"x":26328.06544377827,"y":18153.547636646676},"targetPosition":{"x":26275.54023691069,"y":18372.330868736153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"6efbb2e5-0be8-42c2-99c6-0f9ebe42b174","savedPayload":{"position":{"x":26467.38427389036,"y":18254.768691675064},"targetPosition":{"x":26275.54023691069,"y":18372.330868736153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Errors","config":"{\n \"codeName\": \"errors\",\n \"isString\": false\n}","project":"Superalgos","id":"e994737a-9a14-40f0-8ad0-a151c799a094","savedPayload":{"position":{"x":26494.323469000166,"y":18424.856075603733},"targetPosition":{"x":26275.54023691069,"y":18372.330868736153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbcd5cb4-66b1-4535-9592-0164a480b7f7","savedPayload":{"position":{"x":26275.54023691069,"y":18372.330868736153},"targetPosition":{"x":26083.69619993102,"y":18489.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8","savedPayload":{"position":{"x":26083.69619993102,"y":18489.893045797242},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Errors","id":"64684730-d049-4d3c-8013-b48c5438417e"}}},{"type":"Product Definition","name":"Trading System Highlights","config":"{\n \"codeName\": \"Trading-System-Highlights\",\n \"singularVariableName\": \"tradingSystemHighlight\",\n \"pluralVariableName\": \"tradingSystemHighlights\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"highlights\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"6e0f951c-25e7-4b92-85da-8be04d424bd0","savedPayload":{"position":{"x":26300.81266092922,"y":18397.603292754684},"targetPosition":{"x":26183.25048386813,"y":18589.447329734354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"fa53ecfb-a558-4810-b6f8-1f9c6c8bfc5b","savedPayload":{"position":{"x":26365.279307602494,"y":18457.195647968547},"targetPosition":{"x":26183.25048386813,"y":18589.447329734354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"9fefb3c2-2293-4ffa-8db8-9430dd662bcf","savedPayload":{"position":{"x":26519.595893018697,"y":18345.078085887104},"targetPosition":{"x":26402.03371595761,"y":18536.922122866774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"431d65d9-1f6d-4e73-8655-cbf36854d3cf","savedPayload":{"position":{"x":26620.816948047086,"y":18484.396915999194},"targetPosition":{"x":26402.03371595761,"y":18536.922122866774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Highlights","config":"{\n \"codeName\": \"highlights\",\n \"isString\": false\n}","project":"Superalgos","id":"6355df8f-6845-4652-8ebc-90468c526949","savedPayload":{"position":{"x":26593.87775293728,"y":18654.484299927863},"targetPosition":{"x":26402.03371595761,"y":18536.922122866774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"af6916b9-83d1-478b-ac92-35ea4f9b8a46","savedPayload":{"position":{"x":26402.03371595761,"y":18536.922122866774},"targetPosition":{"x":26183.25048386813,"y":18589.447329734354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"319f660a-78be-4cf4-8052-877837cad806","savedPayload":{"position":{"x":26183.25048386813,"y":18589.447329734354},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Highlights","id":"d979c9f0-530a-41d3-a357-b57a3e4f2201"}}},{"type":"Product Definition","name":"Trading System Values","config":"{\n \"codeName\": \"Trading-System-Values\",\n \"singularVariableName\": \"tradingSystemValue\",\n \"pluralVariableName\": \"tradingSystemValues\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"values\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"9c4ec2f8-f4a8-45b9-aba3-b093a7b8f86a","savedPayload":{"position":{"x":26418.25961099223,"y":18568.76723492295},"targetPosition":{"x":26247.168268732225,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b3d3fe62-e714-4cb9-a78d-55bc0add1d7c","savedPayload":{"position":{"x":26461.155984898633,"y":18645.36422206288},"targetPosition":{"x":26247.168268732225,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"begin\"\n}","project":"Superalgos","id":"956e9238-3cd9-4258-9295-77d3ad473508","savedPayload":{"position":{"x":26642.566011082185,"y":18586.420531461717},"targetPosition":{"x":26471.47466882218,"y":18732.54634233601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"end\"\n}","project":"Superalgos","id":"dbb03ed7-1d1f-4105-b559-eac7b4d8d4d9","savedPayload":{"position":{"x":26695.781068912132,"y":18750.199638874776},"targetPosition":{"x":26471.47466882218,"y":18732.54634233601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Values","config":"{\n \"codeName\": \"values\",\n \"isString\": false,\n \"decimals\": 10\n}","project":"Superalgos","id":"2349e00c-f032-432b-8c9a-07c1606574e8","savedPayload":{"position":{"x":26617.60047969647,"y":18903.637684596015},"targetPosition":{"x":26471.47466882218,"y":18732.54634233601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a65db5f6-3b75-435d-8155-2e2c7af39279","savedPayload":{"position":{"x":26471.47466882218,"y":18732.54634233601},"targetPosition":{"x":26247.168268732225,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"c90c009b-588d-45d4-aff1-05e375181dfa","savedPayload":{"position":{"x":26247.168268732225,"y":18714.893045797242},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Values","id":"476925ed-e2ac-443d-82f3-501b64ca6c87"}}},{"type":"Product Definition","name":"Trading System Status","config":"{\n \"codeName\": \"Trading-System-Status\",\n \"singularVariableName\": \"tradingSystemState\",\n \"pluralVariableName\": \"tradingSystemStatus\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"status\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2b83dc93-dc14-44d9-8f8c-889f39a952da","savedPayload":{"position":{"x":26471.065731214443,"y":18767.846920983822},"targetPosition":{"x":26263.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"0f8dcda3-1eab-439d-956c-c6eb9b1c481f","savedPayload":{"position":{"x":26488.192836399405,"y":18853.950693265968},"targetPosition":{"x":26263.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"214b03c2-5fc3-4157-bcfd-4796b0565d98","savedPayload":{"position":{"x":26678.93862602948,"y":18853.950693265968},"targetPosition":{"x":26471.065731214443,"y":18940.054465548114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"78c4b87a-592d-49ca-9c8c-f5d0dae8d7ba","savedPayload":{"position":{"x":26678.93862602948,"y":19026.15823783026},"targetPosition":{"x":26471.065731214443,"y":18940.054465548114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{\n \"codeName\": \"status\",\n \"isString\": false\n}","project":"Superalgos","id":"fdb4b903-20ff-4a67-a03f-f02e67b5d81b","savedPayload":{"position":{"x":26557.16950349659,"y":19147.927360363152},"targetPosition":{"x":26471.065731214443,"y":18940.054465548114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04b0fd4c-df6f-40df-9567-60a735d126e6","savedPayload":{"position":{"x":26471.065731214443,"y":18940.054465548114},"targetPosition":{"x":26263.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f","savedPayload":{"position":{"x":26269.192836399405,"y":18853.950693265968},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Status","id":"0437448d-8740-496b-8fce-d3804be81a2b"}}},{"type":"Product Definition","name":"Trading System Progress","config":"{\n \"codeName\": \"Trading-System-Progress\",\n \"singularVariableName\": \"tradingSystemProgress\",\n \"pluralVariableName\": \"tradingSystemProgresses\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"progress\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"77735fc0-9ce6-4dec-a3ad-8075a22eda40","savedPayload":{"position":{"x":26465.47466882218,"y":18975.355044195927},"targetPosition":{"x":26241.168268732225,"y":18993.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2fde11bd-4515-4a4e-9dc0-f6869dd3a04e","savedPayload":{"position":{"x":26455.155984898633,"y":19062.537164469057},"targetPosition":{"x":26241.168268732225,"y":18993.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"076e6f4d-1b05-42e1-abc6-c50c935ef056","savedPayload":{"position":{"x":26636.566011082185,"y":19121.48085507022},"targetPosition":{"x":26412.25961099223,"y":19139.134151608985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"280a33ea-29cc-41ab-9ffc-31c38a8e8d60","savedPayload":{"position":{"x":26583.350953252237,"y":19285.259962483276},"targetPosition":{"x":26412.25961099223,"y":19139.134151608985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Progress","config":"{\n \"codeName\": \"progress\",\n \"isString\": false\n}","project":"Superalgos","id":"5964f3e5-82af-47de-9492-19c634d4f5ad","savedPayload":{"position":{"x":26429.912907530997,"y":19363.44055169894},"targetPosition":{"x":26412.25961099223,"y":19139.134151608985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"218da162-dd8c-4f77-9150-3d2eee6e6e0d","savedPayload":{"position":{"x":26412.25961099223,"y":19139.134151608985},"targetPosition":{"x":26241.168268732225,"y":18993.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300","savedPayload":{"position":{"x":26247.168268732225,"y":18993.008340734694},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Progress","id":"99aecc8d-2bc4-4748-b642-78888c2d35eb"}}},{"type":"Product Definition","name":"Trading System Running","config":"{\n \"codeName\": \"Trading-System-Running\",\n \"singularVariableName\": \"tradingSystemRun\",\n \"pluralVariableName\": \"tradingSystemRunning\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"running\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"c7b45884-6cdf-43f7-a1e5-c5325effd207","savedPayload":{"position":{"x":26396.03371595761,"y":19170.979263665162},"targetPosition":{"x":26177.25048386813,"y":19118.454056797582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a21cbc62-e6d8-4286-b0ff-430071d46700","savedPayload":{"position":{"x":26359.279307602494,"y":19250.70573856339},"targetPosition":{"x":26177.25048386813,"y":19118.454056797582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"42cccc8c-a020-4cb2-8a40-4d3dacc86597","savedPayload":{"position":{"x":26513.595893018697,"y":19362.82330064483},"targetPosition":{"x":26294.81266092922,"y":19310.29809377725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"7fc1205e-ad17-40d0-bb05-21e8d1842b7c","savedPayload":{"position":{"x":26412.374837990308,"y":19502.14213075692},"targetPosition":{"x":26294.81266092922,"y":19310.29809377725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Running","config":"{\n \"codeName\": \"running\",\n \"isString\": false\n}","project":"Superalgos","id":"7c7cb8f0-6d6d-4761-b51c-70ee77c05811","savedPayload":{"position":{"x":26242.28745406164,"y":19529.08132586673},"targetPosition":{"x":26294.81266092922,"y":19310.29809377725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f2bf57f0-e966-4b75-a95f-ba206c266dae","savedPayload":{"position":{"x":26294.81266092922,"y":19310.29809377725},"targetPosition":{"x":26177.25048386813,"y":19118.454056797582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"17236f59-6ef2-4cc3-913c-1ff6db052236","savedPayload":{"position":{"x":26183.25048386813,"y":19118.454056797582},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Running","id":"ac1e8218-af24-491f-a552-736d83d68c01"}}},{"type":"Product Definition","name":"Trading System Announcements","config":"{\n \"codeName\": \"Trading-System-Announcements\",\n \"singularVariableName\": \"tradingSystemAnnouncement\",\n \"pluralVariableName\": \"tradingSystemAnnouncements\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"announcements\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"9e29a710-30c0-4faa-b71a-f4ee109673a2","savedPayload":{"position":{"x":26269.54023691069,"y":19335.570517795783},"targetPosition":{"x":26077.69619993102,"y":19218.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b7e24195-a9d0-45e7-9dba-447db8000feb","savedPayload":{"position":{"x":26209.947881696826,"y":19400.037164469057},"targetPosition":{"x":26077.69619993102,"y":19218.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"0487c17a-d445-4d37-b186-dc0e79e0dae7","savedPayload":{"position":{"x":26322.06544377827,"y":19554.35374988526},"targetPosition":{"x":26130.2214067986,"y":19436.79157282417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"cb847e27-30fe-43af-9b5f-19de453cc5f7","savedPayload":{"position":{"x":26182.74661366618,"y":19655.57480491365},"targetPosition":{"x":26130.2214067986,"y":19436.79157282417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Announcements","config":"{\n \"codeName\": \"announcements\",\n \"isString\": false\n}","project":"Superalgos","id":"b3aaeae8-ed67-4830-a49c-13baada2bc11","savedPayload":{"position":{"x":26012.65922973751,"y":19628.63560980384},"targetPosition":{"x":26130.2214067986,"y":19436.79157282417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"73ef953c-001b-474e-9221-23375777f3f3","savedPayload":{"position":{"x":26130.2214067986,"y":19436.79157282417},"targetPosition":{"x":26077.69619993102,"y":19218.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"4a6f828a-9671-431e-8257-fc920943581e","savedPayload":{"position":{"x":26083.69619993102,"y":19218.008340734694},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Announcements","id":"0a3b8bea-749a-48ce-8b53-e4a731555b98"}}},{"type":"Product Definition","name":"Trading System Warnings","config":"{\n \"codeName\": \"Trading-System-Warnings\",\n \"singularVariableName\": \"tradingSystemWarning\",\n \"pluralVariableName\": \"tradingSystemWarnings\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"warnings\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"0381cc1b-24c3-4705-9c76-94129e8605ff","savedPayload":{"position":{"x":26098.376294742422,"y":19453.017467858794},"targetPosition":{"x":25952.25048386813,"y":19281.926125598788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b93b5cc3-7d61-4071-8eba-de15a4fea64b","savedPayload":{"position":{"x":26021.779307602494,"y":19495.913841765196},"targetPosition":{"x":25952.25048386813,"y":19281.926125598788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"9de05c23-cce3-4229-bb5b-6d893a7caf2b","savedPayload":{"position":{"x":26080.722998203655,"y":19677.323867948748},"targetPosition":{"x":25934.597187329364,"y":19506.23252568874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"64348c8c-f29d-4dc0-9028-18f02e8b03a3","savedPayload":{"position":{"x":25916.943890790597,"y":19730.538925778696},"targetPosition":{"x":25934.597187329364,"y":19506.23252568874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Warnings","config":"{\n \"codeName\": \"warnings\",\n \"isString\": false\n}","project":"Superalgos","id":"0d7f3ba2-e9a0-42b0-aaca-02d1911fa209","savedPayload":{"position":{"x":25763.505845069358,"y":19652.358336563033},"targetPosition":{"x":25934.597187329364,"y":19506.23252568874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f6021fb9-4897-4984-8475-bf136233005e","savedPayload":{"position":{"x":25934.597187329364,"y":19506.23252568874},"targetPosition":{"x":25952.25048386813,"y":19281.926125598788},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"34310596-466a-4e9a-a5a2-256b0fe3e339","savedPayload":{"position":{"x":25958.25048386813,"y":19281.926125598788},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Warnings","id":"a9709093-95c1-4b1b-aeb5-329c7505ab75"}}},{"type":"Product Definition","name":"Trading System Infos","config":"{\n \"codeName\": \"Trading-System-Infos\",\n \"singularVariableName\": \"tradingSystemInfo\",\n \"pluralVariableName\": \"tradingSystemInfos\",\n \"nodePath\": \"tradingSystem\",\n \"propertyNameThatDefinesStatus\": \"infos\",\n \"propertyValueThatPreventsSavingObject\": \"->Empty Array->\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"cd834a3e-1b23-4e15-a068-59c235a90f89","savedPayload":{"position":{"x":25905.29660868155,"y":19511.823588081006},"targetPosition":{"x":25819.192836399405,"y":19303.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"e24a4dcf-5adb-4c63-b9db-3ba2a7ece789","savedPayload":{"position":{"x":25819.192836399405,"y":19528.950693265968},"targetPosition":{"x":25819.192836399405,"y":19303.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastBegin\"\n}","project":"Superalgos","id":"a3502c18-91c5-467b-aab5-deb330bf44bc","savedPayload":{"position":{"x":25819.192836399405,"y":19719.696482896044},"targetPosition":{"x":25733.08906411726,"y":19511.823588081006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.episode.cycle\",\n \"childProperty\": \"lastEnd\"\n}","project":"Superalgos","id":"7b3f0c7c-1bb1-4477-af46-5cccfe2309cb","savedPayload":{"position":{"x":25646.985291835113,"y":19719.696482896044},"targetPosition":{"x":25733.08906411726,"y":19511.823588081006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Infos","config":"{\n \"codeName\": \"infos\",\n \"isString\": false\n}","project":"Superalgos","id":"2f73152b-cbcf-462d-ba3a-d35417d2ca9c","savedPayload":{"position":{"x":25525.21616930222,"y":19597.927360363152},"targetPosition":{"x":25733.08906411726,"y":19511.823588081006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"60ed1049-434c-45e8-9a49-e7561cdb3d6b","savedPayload":{"position":{"x":25733.08906411726,"y":19511.823588081006},"targetPosition":{"x":25819.192836399405,"y":19303.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8","savedPayload":{"position":{"x":25819.192836399405,"y":19303.950693265968},"targetPosition":{"x":25819.192836399405,"y":18853.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Infos","id":"f175df3b-a277-44bc-88db-dcf6b0e3fa38"}}}],"productDefinitionFolders":[],"id":"57d56564-1a8f-4ee9-acfb-389ec2d3375a","savedPayload":{"position":{"x":25819.192836399405,"y":18853.950693265968},"targetPosition":{"x":25391.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Simulation Objects","project":"Superalgos","products":[{"type":"Product Definition","name":"Episodes","config":"{\n \"codeName\": \"Episode-Objects\",\n \"singularVariableName\": \"episodeObject\",\n \"pluralVariableName\": \"episodeObjects\",\n \"nodePath\": \"tradingEngine.current.episode\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"38264ecd-10e7-4a62-a2ca-9b607c30e72c","savedPayload":{"position":{"x":26300.989470862864,"y":18924.552163737113},"targetPosition":{"x":26103.255620513923,"y":19031.912884795525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"cdc39b61-9aa5-46d5-9e80-915e0c2d545d","savedPayload":{"position":{"x":26327.023046971783,"y":19008.393980560304},"targetPosition":{"x":26103.255620513923,"y":19031.912884795525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"e7c507b1-7d60-4f5d-9213-4001c116852a","savedPayload":{"position":{"x":27320.259782415276,"y":18460.09876220178},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"387fc08a-670c-4ca7-a2b9-449d1abc17fb","savedPayload":{"position":{"x":27413.924232029894,"y":18506.798134108074},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"2cea2a9b-293e-4b6c-8266-25ab09d94a1c","savedPayload":{"position":{"x":27501.533889971503,"y":18564.05552047356},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"811f4049-1507-4cd0-a57b-8d38f0cefa79","savedPayload":{"position":{"x":27581.903985909397,"y":18631.09661337177},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a25505b8-3a79-44c0-9a65-84c2acbde853","savedPayload":{"position":{"x":27653.94765216962,"y":18707.014797029165},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f06dc26f-dcd7-46d8-af5a-177db0354b16","savedPayload":{"position":{"x":27716.690621755748,"y":18790.783408248204},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"2c462bdb-cad9-4589-add4-10fdafa4b432","savedPayload":{"position":{"x":27769.284403638685,"y":18881.269620265848},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e3ea261e-5586-4578-97f6-e5d7139c6641","savedPayload":{"position":{"x":27811.017757142254,"y":18977.249762292202},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hits In Base Asset","config":"{ \n\"codeName\": \"hitsInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"hits\",\n \"decimals\": 0\n}","project":"Superalgos","id":"d4a1ae83-0774-49f5-8780-f3db92e7ac59","savedPayload":{"position":{"x":27841.326310253207,"y":19077.42586755874},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fails In Base Asset","config":"{ \n\"codeName\": \"failsInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"fails\",\n \"decimals\": 0\n}","project":"Superalgos","id":"39600b8b-e28f-4c5b-a44c-3a816c43a439","savedPayload":{"position":{"x":27859.800191784554,"y":19180.443226092233},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Ratio In Base Asset","config":"{ \n\"codeName\": \"hitRatioInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"hitRatio\",\n \"decimals\": 2\n}","project":"Superalgos","id":"f59830d2-1d39-47ff-b008-41c202c5f131","savedPayload":{"position":{"x":27866.189574180233,"y":19284.908704843132},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Base Asset","config":"{ \n\"codeName\": \"profitLossInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"02dfb7e5-a203-4c49-8ffc-6addba0f06c7","savedPayload":{"position":{"x":27860.408052004226,"y":19389.409587420174},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Base Asset","config":"{ \n\"codeName\": \"ROIInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"6bc1b577-8926-4c00-9091-3ddf6e86d105","savedPayload":{"position":{"x":27842.53381042585,"y":19492.532678656084},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Annualized Rate Of ReturnIn Base Asset","config":"{ \n\"codeName\": \"annualizedRateOfReturnInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"annualizedRateOfReturn\",\n \"decimals\": 2\n}","project":"Superalgos","id":"39e77c8f-3f22-45ea-8ad8-d28f7c0f3c0f","savedPayload":{"position":{"x":27812.808567899483,"y":19592.883415647902},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Base Asset","config":"{ \n\"codeName\": \"hitFailInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"e8384c2c-39b2-4d47-9828-f4968a6bc4e7","savedPayload":{"position":{"x":27771.634307337117,"y":19689.104726827885},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hits In Quoted Asset","config":"{ \n\"codeName\": \"hitsInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"hits\",\n \"decimals\": 0\n}","project":"Superalgos","id":"b31c6ade-c339-4129-ac5c-2383a9443c85","savedPayload":{"position":{"x":27719.567839979085,"y":19779.89538402843},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fails In Quoted Asset","config":"{ \n\"codeName\": \"failsInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"fails\",\n \"decimals\": 0\n}","project":"Superalgos","id":"0fe968f9-77ec-4258-bb12-7ac592665cf5","savedPayload":{"position":{"x":27657.313275477205,"y":19864.027599360812},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Ratio In Quoted Asset","config":"{ \n\"codeName\": \"hitRatioInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"hitRatio\",\n \"decimals\": 2\n}","project":"Superalgos","id":"5bbf2817-e7ed-4795-aecc-5ccefb04b6c1","savedPayload":{"position":{"x":27585.712500019676,"y":19940.363628940115},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Quoted Asset","config":"{ \n\"codeName\": \"profitLossInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"ae87f4f0-2dd4-4484-a803-b06096fbff58","savedPayload":{"position":{"x":27505.733791264578,"y":20007.871158919515},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Quoted Asset","config":"{ \n\"codeName\": \"ROIInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3dd87ddc-a9a9-4f94-8c14-ca651cb6b644","savedPayload":{"position":{"x":27418.458724045635,"y":20065.637265764115},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Annualized Rate Of ReturnIn Quoted Asset","config":"{ \n\"codeName\": \"annualizedRateOfReturnInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"annualizedRateOfReturn\",\n \"decimals\": 2\n}","project":"Superalgos","id":"8826c757-479b-498e-91ec-ccee35f9eef0","savedPayload":{"position":{"x":27325.06754392802,"y":20112.88076197567},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Quoted Asset","config":"{ \n\"codeName\": \"hitFailInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"aa3d008e-90a1-4e76-a389-68206925a8ee","savedPayload":{"position":{"x":27226.82320641175,"y":20148.96276031337},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Balance In Base Asset","config":"{ \n\"codeName\": \"beginBalanceInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"beginBalance\"\n}","project":"Superalgos","id":"a6826d46-bf05-4988-9314-8e41a3ecfce9","savedPayload":{"position":{"x":27125.05429762516,"y":20173.395313647794},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Balance In Base Asset","config":"{ \n\"codeName\": \"endBalanceInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeBaseAsset\",\n \"childProperty\": \"endBalance\"\n}","project":"Superalgos","id":"93c0d5a2-06cd-4bd9-bd2c-49fbab7d2bdb","savedPayload":{"position":{"x":27021.13706747667,"y":20185.84801360874},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Balance In Quoted Asset","config":"{ \n\"codeName\": \"beginBalanceInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"beginBalance\"\n}","project":"Superalgos","id":"fcf98b55-f145-484d-91ce-6e3417e3760d","savedPayload":{"position":{"x":26916.476818235693,"y":20186.152458791636},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Balance In Quoted Asset","config":"{ \n\"codeName\": \"endBalanceInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.episodeQuotedAsset\",\n \"childProperty\": \"endBalance\"\n}","project":"Superalgos","id":"e34b3fbc-a578-407d-ba84-055c56d52454","savedPayload":{"position":{"x":26812.488900230248,"y":20174.304532097667},"targetPosition":{"x":26966.193381895297,"y":19287.526695029057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5c2e7b4-cec1-4975-9abb-af447f80c59e","savedPayload":{"position":{"x":26966.193381895297,"y":19287.526695029057},"targetPosition":{"x":26103.255620513923,"y":19031.912884795525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"aeec080e-8caf-4976-8187-ba4e725b73b0","savedPayload":{"position":{"x":26103.255620513923,"y":19031.912884795525},"targetPosition":{"x":25655.7207675982,"y":19078.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Episode Objects","id":"b7320c91-b8aa-4642-bd11-a1efb2a88d39"}}},{"type":"Product Definition","name":"Strategies","config":"{\n \"codeName\": \"Strategy-Objects\",\n \"singularVariableName\": \"strategyObject\",\n \"pluralVariableName\": \"strategyObjects\",\n \"nodePath\": \"tradingEngine.current.strategy\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"03d1a187-b188-4ad7-b99e-6e4f6c6f0278","savedPayload":{"position":{"x":26285.739121656872,"y":19267.87199601935},"targetPosition":{"x":26060.81622353737,"y":19261.982182650077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"58a5a046-53a1-43a7-bb76-0c29d94ef579","savedPayload":{"position":{"x":26266.363951506955,"y":19353.497927342134},"targetPosition":{"x":26060.81622353737,"y":19261.982182650077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"ffa3b94b-d147-42eb-943e-4e1661c0b8c4","savedPayload":{"position":{"x":26761.639436793175,"y":19365.759192619862},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"95273be5-fbf1-42a5-87c3-29f5ecbaafa1","savedPayload":{"position":{"x":26803.55742590808,"y":19465.816406907546},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"19988cef-f604-49a9-91f5-f8b1c93b0302","savedPayload":{"position":{"x":26820.312095738125,"y":19572.997771805254},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"8e1f47f3-3a81-45ed-892e-ea3e21d544c6","savedPayload":{"position":{"x":26810.92972577354,"y":19681.074295973533},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Strategy Name","config":"{ \n\"codeName\": \"strategyName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"2bb2239e-adc4-4ad1-9c82-64e03c7c60f3","savedPayload":{"position":{"x":26775.95558525314,"y":19783.764964669906},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Index","config":"{ \n\"codeName\": \"index\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"85886ed3-2cbb-4386-b661-d7103a1c63bb","savedPayload":{"position":{"x":26717.422244098147,"y":19875.101769495133},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"78491f8d-a68a-4918-ab38-cc9fa8eff27e","savedPayload":{"position":{"x":26638.731447336446,"y":19949.776547348552},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"46f41431-bf06-4d5e-93b5-1b64dafb8d6a","savedPayload":{"position":{"x":26544.456418046415,"y":20003.44947157309},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b9c2814b-3d92-406b-88ab-78c71e635bd2","savedPayload":{"position":{"x":26440.07607825461,"y":20033.001266905965},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b78b86e0-a571-4f94-b837-b237c2043c3c","savedPayload":{"position":{"x":26331.65663390263,"y":20036.71449041883},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f99d1259-33b6-4c61-9332-5b751c1b2439","savedPayload":{"position":{"x":26225.499029007562,"y":20014.37334305814},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.strategy.strategyCounters\"\n}","project":"Superalgos","id":"9d920c3c-3693-465f-a5e9-e8ea5dcdfd55","savedPayload":{"position":{"x":26127.77275769872,"y":19967.27621110173},"targetPosition":{"x":26370.57578259956,"y":19588.400649605606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b0192e6c-445b-4b55-b344-b273b268897b","savedPayload":{"position":{"x":26370.57578259956,"y":19588.400649605606},"targetPosition":{"x":26060.81622353737,"y":19261.982182650077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"q"}}},"id":"21db6fce-8450-4b07-9015-d81a339fd030","savedPayload":{"position":{"x":26066.81622353737,"y":19261.982182650077},"targetPosition":{"x":25655.7207675982,"y":19078.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Strategy Objects","id":"d54a124c-6029-41a6-9bbd-bb3fe8b1a318"}}}],"productDefinitionFolders":[{"type":"Product Definition Folder","name":"Orders","project":"Superalgos","products":[{"type":"Product Definition","name":"Market Buy Orders","config":"{ \n \"codeName\": \"Market-Buy-Orders-Objects\", \n \"singularVariableName\": \"marketBuyOrdersObject\", \n \"pluralVariableName\": \"marketBuyOrdersObjects\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"45609efb-0edc-4aa9-bc12-f5b4ca6dc5bf","savedPayload":{"position":{"x":26578.09702594485,"y":19356.904568452548},"targetPosition":{"x":26370.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"5eed53d0-a3e7-4082-b7f1-cb321b3d306b","savedPayload":{"position":{"x":26595.224131129813,"y":19443.008340734694},"targetPosition":{"x":26370.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"2b09fe55-b85c-4242-bae1-85a671b006ad","savedPayload":{"position":{"x":27008.926321554478,"y":19224.3317038018},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"9fdc2c26-3835-4917-b12b-5f1b0bef5a05","savedPayload":{"position":{"x":27056.159022156542,"y":19255.357788979793},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"f889b073-b78f-4345-bca7-c1943b6f5ee3","savedPayload":{"position":{"x":27099.130679226433,"y":19292.05905130555},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"2cf8c3ee-79ae-49bb-882b-992379f41fd9","savedPayload":{"position":{"x":27137.16360406214,"y":19333.85668994792},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"94e5c88c-2317-4bd1-86e6-f578db5e882f","savedPayload":{"position":{"x":27169.657994719233,"y":19380.091531176808},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7b9b53d5-d93a-4301-a0e6-ce8322da8fce","savedPayload":{"position":{"x":27196.101395245845,"y":19430.034423926685},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"5906d64e-d90e-4dae-a2bb-c806e3d5d21d","savedPayload":{"position":{"x":27216.07677741914,"y":19482.897738944448},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"294ae361-a9f7-404a-a6dd-3dc25d8c6c27","savedPayload":{"position":{"x":27229.26911752954,"y":19537.84779017325},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e837a938-5448-4987-bdf0-d28de65d33fb","savedPayload":{"position":{"x":27235.47036449278,"y":19594.017982479647},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"4424a014-cc5f-494e-be78-0b49f960045b","savedPayload":{"position":{"x":27234.5827209398,"y":19650.522478376515},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"137a18b5-33a3-433e-b85b-c8fbe03cbe69","savedPayload":{"position":{"x":27226.620185539687,"y":19706.470168209416},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderCounters\"\n}","project":"Superalgos","id":"35ca0a49-129b-49e2-864a-3c43ed3bf38b","savedPayload":{"position":{"x":27211.708332232287,"y":19760.97872348815},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"4b0020d5-4d5b-4747-aa28-baf6e28f67d9","savedPayload":{"position":{"x":27190.082329852172,"y":19813.188511734148},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"eedcf7ad-6668-4b14-8f07-7ee44998c47a","savedPayload":{"position":{"x":27162.083233375615,"y":19862.276153398143},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"46b407ab-5799-4ea6-946b-d857abb76183","savedPayload":{"position":{"x":27128.15260527991,"y":19907.467507047568},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"c2fcb23d-4a6d-457a-8d38-03a46786fedc","savedPayload":{"position":{"x":27088.82555183929,"y":19948.04987803936},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"ca02a2ed-731a-4df8-9f76-fe8d60b7ad8e","savedPayload":{"position":{"x":27044.72228417937,"y":19983.383258140246},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"ac187d63-a2cc-487c-8e81-03c786749d9c","savedPayload":{"position":{"x":26996.53833717715,"y":20012.910418838896},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"97b70829-4c2e-433c-8233-f6254788232a","savedPayload":{"position":{"x":26945.03360046056,"y":20036.165699172427},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"e8f83131-1dbc-48b7-9862-49130126b67d","savedPayload":{"position":{"x":26891.02033449505,"y":20052.78234947794},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"895ce4a6-2cf5-4f2e-b160-38f0237cbce4","savedPayload":{"position":{"x":26835.350360750865,"y":20062.498315253815},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"10253d7f-83fc-4bce-b757-f9fe36481f28","savedPayload":{"position":{"x":26778.901627969575,"y":20065.16036991573},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"d436d73b-be15-4d1a-baeb-c41b6706bbde","savedPayload":{"position":{"x":26722.564366387982,"y":20060.726531271437},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"320e3ae5-5884-4c25-b61b-2d0ef4730884","savedPayload":{"position":{"x":26667.227048275476,"y":20049.266723604993},"targetPosition":{"x":26785.969920759893,"y":19615.215885298985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d79b050c-2805-4b39-bcd3-1678628f8d1c","savedPayload":{"position":{"x":26785.969920759893,"y":19615.215885298985},"targetPosition":{"x":26370.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"db256083-9aa2-48e1-8fd6-3425a5085302","savedPayload":{"position":{"x":26370.224131129813,"y":19443.008340734694},"targetPosition":{"x":25920.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Market Buy Orders","id":"e00fe7d4-894d-4483-a73a-3cd77943ea80"}}},{"type":"Product Definition","name":"Market Sell Orders","config":"{ \n \"codeName\": \"Market-Sell-Orders-Objects\", \n \"singularVariableName\": \"marketSellOrdersObject\", \n \"pluralVariableName\": \"marketSellOrdersObjects\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"6112bd4d-07cb-41db-98c4-e286d172b5c0","savedPayload":{"position":{"x":30561.738732165315,"y":19494.9752599936},"targetPosition":{"x":29408.814780098182,"y":19536.331183214137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"07cd5668-5e0f-4385-9c02-72eebc99344a","savedPayload":{"position":{"x":30489.972435810672,"y":19938.880402813473},"targetPosition":{"x":29408.814780098182,"y":19536.331183214137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"0ba08ecb-3542-4acd-abbe-7059306ed669","savedPayload":{"position":{"x":31137.75016687439,"y":19583.491557084188},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"0ae49e68-38d8-4356-bde3-c648a29177a7","savedPayload":{"position":{"x":31223.59019320684,"y":19700.48808514457},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"b7057c53-6d99-44ca-9eff-4dd21ebe2116","savedPayload":{"position":{"x":31293.925598084115,"y":19827.10169376592},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"01b26cba-240f-451e-8533-2e090a3103fd","savedPayload":{"position":{"x":31347.809295129613,"y":19961.494120027153},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"052e9ef4-da9f-4198-b13f-7a2e0c60b906","savedPayload":{"position":{"x":31384.415963180018,"y":20101.568255043232},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a6e9d3dc-20e3-4cf3-94f4-79f3723b4d34","savedPayload":{"position":{"x":31403.17513221224,"y":20245.12110225893},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b38cf81f-59f2-4508-9fbc-e82b1ad38d65","savedPayload":{"position":{"x":31403.79324483422,"y":20389.636504684615},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"0132786e-0a9a-4096-a6a5-57f03485d0b1","savedPayload":{"position":{"x":31386.26222781504,"y":20533.34014537474},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d1cb7813-1e5a-43f2-af35-f82a9ee47a0b","savedPayload":{"position":{"x":31350.858055249915,"y":20673.714015474605},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"8ab09d9d-7c5a-45d4-ad6a-8a4292c1b137","savedPayload":{"position":{"x":31298.193419518546,"y":20808.570665695763},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b1d35b5f-2d9f-4ba0-b4bc-cc12c74104e8","savedPayload":{"position":{"x":31228.990190844597,"y":20935.73691104689},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderCounters\"\n}","project":"Superalgos","id":"b1dbf0d5-39bb-4c1a-ac6d-d1d647e82d54","savedPayload":{"position":{"x":31144.394291431676,"y":21053.227009645278},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"8b25c33c-8f96-4a6e-8180-43027d0fc396","savedPayload":{"position":{"x":31045.741167293418,"y":21159.18943521726},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"2ffc6fc2-9e28-4ef6-9047-a2bd2b618bd3","savedPayload":{"position":{"x":30934.58488915104,"y":21251.951816221826},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"e5c5802a-d778-40e5-9039-4067a6a56e4f","savedPayload":{"position":{"x":30812.678958481207,"y":21330.05196198316},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"7fccf0bc-d0a4-48d9-b4ac-c467bc74ef0f","savedPayload":{"position":{"x":30681.94435157234,"y":21392.255360223204},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"2149cdc5-19f8-4e11-9d5c-e6c062998223","savedPayload":{"position":{"x":30544.444149962183,"y":21437.582953517252},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"df8e190a-1138-4ffa-baef-6a560ba51739","savedPayload":{"position":{"x":30402.351837467053,"y":21465.323233903342},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"e78e7e63-95da-479e-9d5c-9531b2b2bf26","savedPayload":{"position":{"x":30257.89452491479,"y":21475.03389310028},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8010dd65-bb12-492e-a5b8-4e8b12e1e211","savedPayload":{"position":{"x":30113.5996546336,"y":21466.557990485704},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"857f1eed-2dd2-4646-8b63-acb4cec04400","savedPayload":{"position":{"x":29971.2601313813,"y":21440.023120152193},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"3578ea56-a788-42bc-a964-0ba02e432a2e","savedPayload":{"position":{"x":29833.350606475353,"y":21395.85959370992},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"0f88abbf-bbcb-4281-90e2-5bd844c7bdfc","savedPayload":{"position":{"x":29702.03898532638,"y":21334.71973025635},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.marketSellOrders.marketOrders[index].orderQuotedAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"c5a06ac6-e0c8-4a38-a790-d3569bb73ef5","savedPayload":{"position":{"x":29579.22571035548,"y":21257.44662910848},"targetPosition":{"x":30253.090992910802,"y":20322.300037072073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8b01d5ae-7d6f-4c08-9f05-2f8edb699fd6","savedPayload":{"position":{"x":30253.090992910802,"y":20322.300037072073},"targetPosition":{"x":29408.814780098182,"y":19536.331183214137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"1958f79b-5c6c-4874-9154-98c314822ed7","savedPayload":{"position":{"x":26284.28177859854,"y":19707.511704266308},"targetPosition":{"x":25920.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Market Sell Orders","id":"a9811005-1b7d-45bb-8003-0e60caab5f09"}}},{"type":"Product Definition","name":"Limit Buy Orders","config":"{ \n \"codeName\": \"Limit-Buy-Orders-Objects\", \n \"singularVariableName\": \"limitBuyOrdersObject\", \n \"pluralVariableName\": \"limitBuyOrdersObjects\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"b82fb0f9-74c1-42e6-961c-a696214ef079","savedPayload":{"position":{"x":28297.197763643733,"y":21254.638734022392},"targetPosition":{"x":27618.030908282355,"y":20544.350359783835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"2e03f52e-0cd2-46b4-9c10-0b8516ef9c71","savedPayload":{"position":{"x":27973.536925117998,"y":21460.391216004435},"targetPosition":{"x":27618.030908282355,"y":20544.350359783835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"890f7170-f42d-43d8-a084-b9b88ea212cc","savedPayload":{"position":{"x":28566.53165501038,"y":21671.070019801824},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"3e6e8e40-2e6c-4bd4-b709-effa25749403","savedPayload":{"position":{"x":28540.63485756526,"y":21792.12269491024},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"280a9209-b9cd-4cb7-b0b7-3dfe2f472140","savedPayload":{"position":{"x":28499.693156964597,"y":21908.857857102503},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"254561e5-52c3-4669-920e-4fe5370653c4","savedPayload":{"position":{"x":28444.689411601263,"y":22019.021801782652},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"8ef21836-adad-4918-9816-fbb3c9dd1fc5","savedPayload":{"position":{"x":28376.135292015268,"y":22121.64233460315},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"4d6fd5f1-a95b-4ec1-a49c-6c057190d354","savedPayload":{"position":{"x":28295.34173115862,"y":22214.827356148584},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"12402a8e-c9d4-4adb-94c3-22f526d72d14","savedPayload":{"position":{"x":28203.659913217394,"y":22297.206187916145},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"8cc955fb-62ec-40b9-963b-275956de04d9","savedPayload":{"position":{"x":28102.142034383698,"y":22367.542065015663},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"63af17a0-e994-4b5f-b853-207bf27c496c","savedPayload":{"position":{"x":27992.76073699908,"y":22424.442118304734},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"0af4f067-ac3d-4ee7-ba1d-d9c22ae2f46f","savedPayload":{"position":{"x":27876.92096092378,"y":22467.126723543264},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"f8cb0422-95bb-4c53-a5f6-7e02819021c0","savedPayload":{"position":{"x":27756.744444576438,"y":22495.171417414513},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderCounters\"\n}","project":"Superalgos","id":"d16faba6-3464-4536-9c93-afbe6e0d4262","savedPayload":{"position":{"x":27634.110580413726,"y":22507.721865495383},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"75fd2c91-2bfe-428c-9ff6-7d28d566a96d","savedPayload":{"position":{"x":27510.91556099024,"y":22504.747941266374},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"5d621574-54fd-4279-8c47-7bb9710bcc90","savedPayload":{"position":{"x":27389.173590827744,"y":22486.635706378893},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"0bddc747-8300-4b15-8a7a-134ff133d2ec","savedPayload":{"position":{"x":27270.44003256182,"y":22453.23846783036},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"4564e44d-dbd5-4d97-8433-fc1dd877bd2f","savedPayload":{"position":{"x":27156.8443638509,"y":22405.040629805422},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"dc313012-cb3e-4087-9ae1-af1125a074e3","savedPayload":{"position":{"x":27050.026317545897,"y":22343.18494480721},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"ba489aaa-0872-4e7f-bad0-a7c43b0da4b5","savedPayload":{"position":{"x":26951.898528766327,"y":22268.42286949116},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"56b30e10-c354-4a0c-a570-07976dc45b76","savedPayload":{"position":{"x":26864.141771684357,"y":22181.819082158923},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4696e371-b17b-48fc-8ebb-dfa00e0b2aed","savedPayload":{"position":{"x":26787.70832147373,"y":22084.910878230232},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8161a21f-02f8-4929-acd1-f684a7deb41b","savedPayload":{"position":{"x":26724.04682404267,"y":21979.423067100885},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2c17774e-a962-487f-939c-411973472057","savedPayload":{"position":{"x":26674.004763905472,"y":21866.301966483763},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"d96f2a66-4d03-4cda-90c7-3dd7eae7712a","savedPayload":{"position":{"x":26638.53767020416,"y":21747.95572609214},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitBuyOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"9a713d83-5701-47a7-b0a0-4969671df884","savedPayload":{"position":{"x":26618.133927503637,"y":21625.844692678227},"targetPosition":{"x":27595.290901255852,"y":21526.407214958588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aaad0279-43dd-46fc-b099-40cba6c3b6a8","savedPayload":{"position":{"x":27595.290901255852,"y":21526.407214958588},"targetPosition":{"x":27618.030908282355,"y":20544.350359783835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb","savedPayload":{"position":{"x":26059.28177859854,"y":19870.983773067514},"targetPosition":{"x":25920.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Limit Buy Orders","id":"7e3120c7-a0c9-483c-ada9-8c53deb10f33"}}},{"type":"Product Definition","name":"Limit Sell Orders","config":"{ \n \"codeName\": \"Limit-Sell-Orders-Objects\", \n \"singularVariableName\": \"limitSellOrdersObject\", \n \"pluralVariableName\": \"limitSellOrdersObjects\",\n \"nodePathType\": \"array\",\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"356495a9-b063-495d-b06d-5281c7c0007e","savedPayload":{"position":{"x":28056.842483361772,"y":21371.855356224252},"targetPosition":{"x":27446.21311072474,"y":20601.957715152446},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"934ab813-127e-4bbf-aa71-09b3cdadc0d0","savedPayload":{"position":{"x":27715.73892569853,"y":21546.866004515214},"targetPosition":{"x":27446.21311072474,"y":20601.957715152446},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Exchange Id","config":"{\n \"codeName\": \"exchangeId\",\n \"isString\": true\n}","project":"Superalgos","id":"5c8236b1-b257-44f4-98bd-a158b67aad16","savedPayload":{"position":{"x":28286.642705425853,"y":21811.62837671577},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"16140fc9-d4ae-43c2-ba47-f676b79a9775","savedPayload":{"position":{"x":28249.628877741394,"y":21929.826458928645},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"2d871d0f-e668-4e9d-9fcf-439f37cd082f","savedPayload":{"position":{"x":28198.237875678045,"y":22042.222135762946},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"fc6f8fe4-b752-448a-9ece-8497abf2901c","savedPayload":{"position":{"x":28133.194574364174,"y":22146.995566699028},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"3502765f-2f50-44c6-b85c-64d7f72f5592","savedPayload":{"position":{"x":28055.5442435588,"y":22242.94335722536},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Rate","config":"{ \n\"codeName\": \"rate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"608ebfd0-4294-4e24-8111-a8f695072ca0","savedPayload":{"position":{"x":27966.384495706923,"y":22328.192014211934},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"c49c3510-e24b-418f-9334-760c5da57ccf","savedPayload":{"position":{"x":27867.37167569742,"y":22401.71176915763},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"04b96ab3-eb13-4039-a385-8e5c4377daa4","savedPayload":{"position":{"x":27759.874814033887,"y":22462.230037799345},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Order Name","config":"{ \n\"codeName\": \"orderName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6ec27702-5283-4fbf-b6a7-92663a6e9e9b","savedPayload":{"position":{"x":27645.70028038436,"y":22508.917596845477},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6a4285a4-c9d5-4d5b-a218-da8e19ca5970","savedPayload":{"position":{"x":27526.492771804093,"y":22540.642978294054},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Algorithm Name","config":"{ \n\"codeName\": \"algorithmName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e3e35a81-c5b2-4768-ab16-99b42ef83358","savedPayload":{"position":{"x":27404.277467496388,"y":22557.45893567008},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderCounters\"\n}","project":"Superalgos","id":"815780d8-f647-42cc-9a40-aa99caa350c7","savedPayload":{"position":{"x":27281.165965446533,"y":22558.67093566599},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Percentage Filled","config":"{\n \"codeName\": \"percentageFilled\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"d824c424-4324-46b1-87b9-182cc9f0d054","savedPayload":{"position":{"x":27158.815874086402,"y":22544.367134465414},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Actual Rate","config":"{ \n\"codeName\": \"actualRate\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\"\n}","project":"Superalgos","id":"d722bfd4-eb08-4dfc-8cc9-f706f93df80e","savedPayload":{"position":{"x":27039.057545900876,"y":22514.986069123413},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"d05fe7d4-d772-4ad4-9890-a3aa342fc5f6","savedPayload":{"position":{"x":26923.871803818827,"y":22470.67621583085},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"d4b14139-33ad-4da1-942c-ce8df0d3efa9","savedPayload":{"position":{"x":26815.13676709853,"y":22412.417912489123},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"9ade3c97-f409-4c23-b66f-b6670100e039","savedPayload":{"position":{"x":26714.66890764104,"y":22340.94618200058},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"780e674d-64fc-401a-ad5d-1012645f512e","savedPayload":{"position":{"x":26623.842255693136,"y":22257.341933241474},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Base Asset","config":"{\n \"codeName\": \"sizeInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"8dade5f4-6361-49b2-ae94-2b66b21d5522","savedPayload":{"position":{"x":26544.287342494084,"y":22163.153899990564},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size In Quoted Asset","config":"{\n \"codeName\": \"sizeInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"size\",\n \"decimals\": 10\n}","project":"Superalgos","id":"896f401d-5a79-45bb-b15b-abc2881d7762","savedPayload":{"position":{"x":26477.24095152323,"y":22059.599923252197},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Base Asset","config":"{\n \"codeName\": \"sizeFilledInBaseAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b92661d6-16ec-48a6-bb66-18c4ad4dd148","savedPayload":{"position":{"x":26423.46979906318,"y":21948.60958956997},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Size Filled In Quoted Asset","config":"{\n \"codeName\": \"sizeFilledInQuotedAsset\",\n \"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"sizeFilled\",\n \"decimals\": 10\n}","project":"Superalgos","id":"c24a527a-db24-472d-8c3f-f0da838f8062","savedPayload":{"position":{"x":26384.19042546744,"y":21831.394549288983},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Base Asset","config":"{ \n\"codeName\": \"feesPaidInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"b50fa760-b069-411f-b27e-6dd1d165e927","savedPayload":{"position":{"x":26359.85221739352,"y":21710.328594972158},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Fees Paid In Quoted Asset","config":"{ \n\"codeName\": \"feesPaidInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[index].orderBaseAsset\",\n \"childProperty\": \"feesPaid\"\n}","project":"Superalgos","id":"d5d472fb-bf5a-40e7-ac92-7b03279022c3","savedPayload":{"position":{"x":26350.85964166914,"y":21586.961644423463},"targetPosition":{"x":27332.892945833497,"y":21578.01924614344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7dc5d5fc-ff33-4652-bc9c-fad0566a3d9f","savedPayload":{"position":{"x":27332.892945833497,"y":21578.01924614344},"targetPosition":{"x":27446.21311072474,"y":20601.957715152446},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e","savedPayload":{"position":{"x":25781.166483661087,"y":19870.983773067514},"targetPosition":{"x":25920.224131129813,"y":19443.008340734694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Limit Sell Orders","id":"fb243322-ec2a-4f03-bb77-e97e4699d1c6"}}}],"productDefinitionFolders":[],"id":"cb9c928a-1a5d-441c-b369-0a72f98f2407","savedPayload":{"position":{"x":25920.224131129813,"y":19443.008340734694},"targetPosition":{"x":25655.7207675982,"y":19078.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Stages","project":"Superalgos","products":[{"type":"Product Definition","name":"Trigger Stages","config":"{\n \"codeName\": \"Trigger-Stages-Objects\",\n \"singularVariableName\": \"triggerStagesObject\",\n \"pluralVariableName\": \"triggerStagesObjects\",\n \"nodePath\": \"tradingEngine.current.strategyTriggerStage\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"e951c491-c864-4668-9d70-c48df90d8342","savedPayload":{"position":{"x":26309.54510158075,"y":19780.853939431203},"targetPosition":{"x":26086.47000777164,"y":19751.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"ace4518d-bfe1-49e2-af7b-4ff9559fe6a9","savedPayload":{"position":{"x":26281.32572362314,"y":19863.98554618169},"targetPosition":{"x":26086.47000777164,"y":19751.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"75d29f56-b520-43e9-af25-105a88b84f0f","savedPayload":{"position":{"x":26443.697957125572,"y":19884.03335184454},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"08e2f14d-f121-48ed-b266-d78fe59ef437","savedPayload":{"position":{"x":26441.825556975615,"y":19984.150264714237},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"675b3923-9fdb-4e08-abab-2ba83424c851","savedPayload":{"position":{"x":26396.699482227436,"y":20073.540082382144},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6a6f3698-8dfc-4368-9db6-e5ac251aefec","savedPayload":{"position":{"x":26317.2575054199,"y":20134.498055164964},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6db4ef3b-ea01-4765-a749-f9bee13fa2a3","savedPayload":{"position":{"x":26219.23408435165,"y":20154.950708952587},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"8435db2d-1a90-4994-ba46-7d11618a65ab","savedPayload":{"position":{"x":26122.043959743616,"y":20130.847144827032},"targetPosition":{"x":26223.441329298603,"y":19929.99004774722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"167c8a3e-7c2a-488f-87f7-be3f6034d276","savedPayload":{"position":{"x":26223.441329298603,"y":19929.99004774722},"targetPosition":{"x":26086.47000777164,"y":19751.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"18cc2e79-7e57-418c-b635-6c68fc11d681","savedPayload":{"position":{"x":26086.47000777164,"y":19751.48554618169},"targetPosition":{"x":25696.75857606864,"y":19526.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Trigger Stage Objects","id":"6c6cddbc-cd78-445f-9498-8627ac99563d"}}},{"type":"Product Definition","name":"Open Stages","config":"{\n \"codeName\": \"Open-Stages-Objects\",\n \"singularVariableName\": \"openStagesObject\",\n \"pluralVariableName\": \"openStagesObjects\",\n \"nodePath\": \"tradingEngine.current.strategyOpenStage\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"613bf56d-986e-4a94-9b39-4f0ac3300b0c","savedPayload":{"position":{"x":28398.6614474727,"y":21928.22275844946},"targetPosition":{"x":27740.84508349377,"y":20980.998416317794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"44a0d895-2a7e-4f9a-b9a7-81dc32bf30e4","savedPayload":{"position":{"x":27986.095580353165,"y":22107.939905953335},"targetPosition":{"x":27740.84508349377,"y":20980.998416317794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"e36b3b00-b339-4ce5-9526-a2077f5e1138","savedPayload":{"position":{"x":28468.57238629253,"y":22791.973017604116},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"73751c42-16ed-4a24-8586-d86c3c9a81be","savedPayload":{"position":{"x":28082.754021654368,"y":23129.75593680144},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d76fd073-ae0d-4af8-b729-5d94a1cf21ed","savedPayload":{"position":{"x":27588.701816424502,"y":23266.5820034291},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"3db414d7-fb6f-4cce-be3b-342101e90246","savedPayload":{"position":{"x":27084.434021559406,"y":23175.5858485332},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"340b1f7b-b041-4ee0-9327-0959de0d8d9a","savedPayload":{"position":{"x":26669.36231396078,"y":22874.619854762474},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"6fa53271-06c2-48b1-a763-2926ce948fbc","savedPayload":{"position":{"x":26425.89018402749,"y":22423.412213674277},"targetPosition":{"x":27536.02002765068,"y":22115.902618767796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"517166b0-13ae-4f3d-bcb4-d3292dd9daf7","savedPayload":{"position":{"x":27536.02002765068,"y":22115.902618767796},"targetPosition":{"x":27740.84508349377,"y":20980.998416317794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"d5938c00-0849-466d-ae14-4ea91b571678","savedPayload":{"position":{"x":25879.79006545275,"y":19937.581002120864},"targetPosition":{"x":25696.75857606864,"y":19526.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Open Stage Objects","id":"8f7cad9f-153d-44e6-bdc2-812bc97e3929"}}},{"type":"Product Definition","name":"Manage Stages","config":"{\n \"codeName\": \"Manage-Stages-Objects\",\n \"singularVariableName\": \"manageStagesObject\",\n \"pluralVariableName\": \"manageStagesObjects\",\n \"nodePath\": \"tradingEngine.current.strategyManageStage\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"f6e10004-71dd-4ae9-8c1f-0b71de02d274","savedPayload":{"position":{"x":27664.23350042233,"y":21505.375775512246},"targetPosition":{"x":27169.4545030535,"y":20659.82377732973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"8f3984d8-e735-4dab-a9cc-51e97d704154","savedPayload":{"position":{"x":27302.888149758302,"y":21630.39266316751},"targetPosition":{"x":27169.4545030535,"y":20659.82377732973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"0a0419db-885a-4623-9ce3-ef4cd12d7a52","savedPayload":{"position":{"x":27666.62411628632,"y":22241.66352220627},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"4478d5f4-808f-45b5-9197-c144e6c1d81f","savedPayload":{"position":{"x":27317.585605250995,"y":22502.312126408855},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"abf359ac-dc22-4274-a00c-25c986836002","savedPayload":{"position":{"x":26890.3587458279,"y":22585.71195647841},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"78333d72-e1e6-4a85-9e23-850a66e3ca71","savedPayload":{"position":{"x":26468.97508991858,"y":22475.36790895691},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"ba45b561-33a9-4e8e-bf3c-a6b8ece1d0a3","savedPayload":{"position":{"x":26137.198528003973,"y":22193.126859834138},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"45ef8759-341e-4e74-a374-035374659cc5","savedPayload":{"position":{"x":25960.7448968667,"y":21794.862226010446},"targetPosition":{"x":26921.268299705767,"y":21607.540024649887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d418fdcd-d800-4f99-8a67-05eb6a09d390","savedPayload":{"position":{"x":26921.268299705767,"y":21607.540024649887},"targetPosition":{"x":27169.4545030535,"y":20659.82377732973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"8fab86b3-db8d-4113-8418-1d256bd98cf2","savedPayload":{"position":{"x":25603.19831520065,"y":19966.651966511905},"targetPosition":{"x":25696.75857606864,"y":19526.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Manage Stage Objects","id":"768a5cc5-72db-4218-9a8b-706c51186b3d"}}},{"type":"Product Definition","name":"Close Stages","config":"{\n \"codeName\": \"Close-Stages-Objects\",\n \"singularVariableName\": \"closeStagesObject\",\n \"pluralVariableName\": \"closeStagesObjects\",\n \"nodePath\": \"tradingEngine.current.strategyCloseStage\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"ee0f2bab-26b6-44c6-af1c-efbca2c765cd","savedPayload":{"position":{"x":27347.964704616847,"y":21569.271820620306},"targetPosition":{"x":26912.050299901148,"y":20691.916982233615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"cbd3905d-fafc-47f3-8a61-20c9aab10d86","savedPayload":{"position":{"x":26978.92628007235,"y":21669.32612854922},"targetPosition":{"x":26912.050299901148,"y":20691.916982233615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"fb4236d5-0356-4226-bf11-8d119d361bf3","savedPayload":{"position":{"x":27300.080083118486,"y":22304.001601423606},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"68f1a928-d89f-4d57-80d8-1e68b113bea5","savedPayload":{"position":{"x":26934.051949713037,"y":22540.23414313807},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"cd79288d-539d-499f-a998-5770f3c5efab","savedPayload":{"position":{"x":26502.102999881954,"y":22594.268741317428},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7afb54b6-807f-4452-9fd6-bb4bd32dd462","savedPayload":{"position":{"x":26089.214231924274,"y":22455.418533798624},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"56d33c0a-1f4c-4721-b43d-976bbff00208","savedPayload":{"position":{"x":25777.45870130793,"y":22151.179326432477},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"eae9d270-5193-46f6-abc8-c1c1eccc9661","savedPayload":{"position":{"x":25628.586038385503,"y":21741.78221500365},"targetPosition":{"x":26599.70532043249,"y":21620.43811822156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c4aaf6da-f1d9-4a88-8e7a-531135090572","savedPayload":{"position":{"x":26599.70532043249,"y":21620.43811822156},"targetPosition":{"x":26912.050299901148,"y":20691.916982233615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"ba911e61-f951-48cd-b547-9a70aa211100","savedPayload":{"position":{"x":25362.343404603813,"y":19827.59431904318},"targetPosition":{"x":25696.75857606864,"y":19526.48554618169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Close Stage Objects","id":"de84947f-ec29-4125-a2b3-a3da595d1653"}}}],"productDefinitionFolders":[],"id":"4ce02b43-0869-4bed-b021-a3b9f7c10451","savedPayload":{"position":{"x":25702.75857606864,"y":19526.48554618169},"targetPosition":{"x":25655.7207675982,"y":19078.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Product Definition Folder","name":"Position","project":"Superalgos","products":[{"type":"Product Definition","name":"Positions","config":"{\n \"codeName\": \"Position-Objects\",\n \"singularVariableName\": \"positionObject\",\n \"pluralVariableName\": \"positionObjects\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"55df9376-2806-429d-b43d-b96700787f74","savedPayload":{"position":{"x":25923.036678725373,"y":19971.665973734955},"targetPosition":{"x":25731.192641745703,"y":19854.103796673866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"fd62b468-93fa-44e0-941f-fff7ea4b04ea","savedPayload":{"position":{"x":25863.44432351151,"y":20036.13262040823},"targetPosition":{"x":25731.192641745703,"y":19854.103796673866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Serial Number","config":"{\n \"codeName\": \"serialNumber\",\n \"isString\": false\n}","project":"Superalgos","id":"a8700d50-9286-4b62-a141-abd506386983","savedPayload":{"position":{"x":26833.59384445245,"y":20611.76315203373},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Identifier","config":"{\n \"codeName\": \"identifier\",\n \"isString\": true\n}","project":"Superalgos","id":"6ce2fa31-04d9-4541-a793-569b668e6201","savedPayload":{"position":{"x":26840.98506169402,"y":20705.67747155469},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"0f5cf2f4-3c5b-4607-8635-c7310906b95c","savedPayload":{"position":{"x":26838.519069575836,"y":20799.849911186837},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"ba8a1af9-323f-4acb-a438-a61f232b4033","savedPayload":{"position":{"x":26826.222886023577,"y":20893.24869797471},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Type","config":"{ \n\"codeName\": \"exitType\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"85df8c0c-7d11-44c2-a7a9-928d4ac0ad06","savedPayload":{"position":{"x":26804.231230597394,"y":20984.85053526531},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"9c8b786e-23f6-4bf9-bf83-6fd03b494a66","savedPayload":{"position":{"x":26772.785048476177,"y":21073.65181416036},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Begin Rate","config":"{ \n\"codeName\": \"beginRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"b0719341-cda1-4503-bed5-f4e98d7e07db","savedPayload":{"position":{"x":26732.228870611787,"y":21158.679609265426},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End Rate","config":"{ \n\"codeName\": \"endRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a052f724-c517-4032-85f7-96d3a29ba9ce","savedPayload":{"position":{"x":26683.007038975833,"y":21239.002338264127},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Situation Name","config":"{ \n\"codeName\": \"situationName\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"a4dfa19d-51b8-4151-91e5-6031059f09f1","savedPayload":{"position":{"x":26625.658838256048,"y":21313.739968528942},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Periods","config":"{ \n\"codeName\": \"periods\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionCounters\"\n}","project":"Superalgos","id":"5309d28b-041a-4622-ade5-9349c19787da","savedPayload":{"position":{"x":26560.8125873404,"y":21382.073658942834},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 1","config":"{ \n\"codeName\": \"userDefinedStatistic1\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 0\n}","project":"Superalgos","id":"0853d6cc-4429-431e-82f0-e4d958f095ea","savedPayload":{"position":{"x":26489.17875532387,"y":21443.254731293888},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 2","config":"{ \n\"codeName\": \"userDefinedStatistic2\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 1\n}","project":"Superalgos","id":"925756d5-4662-44ac-bfa6-a326c5e61b23","savedPayload":{"position":{"x":26411.542177460375,"y":21496.61287295046},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"User Defined Statistic 3","config":"{ \n\"codeName\": \"userDefinedStatistic3\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n\"childProperty\": \"userDefinedStatistics\",\n\"index\": 2\n}","project":"Superalgos","id":"3d22802e-0b11-47e4-8c98-7c9830f166fb","savedPayload":{"position":{"x":26328.753456343486,"y":21541.56348094665},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Base Asset","config":"{ \n\"codeName\": \"profitLossInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"5cbdddf2-f50e-49c6-b995-c557a44adde5","savedPayload":{"position":{"x":26241.719642526412,"y":21577.614067014736},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Quoted Asset","config":"{ \n\"codeName\": \"profitLossInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"0e1b30a0-5408-4b8b-aa61-efd21d9ef1b1","savedPayload":{"position":{"x":26151.394296686336,"y":21604.369653389687},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Base Asset","config":"{ \n\"codeName\": \"ROIInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"d41d6380-be40-4823-a6d2-adc43038d514","savedPayload":{"position":{"x":26058.767042214065,"y":21621.537100268208},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Quoted Asset","config":"{ \n\"codeName\": \"ROIInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"5306784e-c744-49cd-962a-670d8e452ac7","savedPayload":{"position":{"x":25964.852722693107,"y":21628.928317509777},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Base Asset","config":"{ \n\"codeName\": \"hitFailInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"bf8e5f03-9c93-4b76-ae3d-4f2b3eeccab5","savedPayload":{"position":{"x":25870.68028306096,"y":21626.462325391592},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Quoted Asset","config":"{ \n\"codeName\": \"hitFailInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"43463fcd-ac98-4ae3-a148-d43d709ba86c","savedPayload":{"position":{"x":25777.281496273088,"y":21614.166141839334},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Base Asset","config":"{ \n\"codeName\": \"entryTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"e6b2213f-f108-428f-b93c-e58db1da49e2","savedPayload":{"position":{"x":25685.679658982488,"y":21592.17448641315},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Quoted Asset","config":"{ \n\"codeName\": \"entryTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"2e419e2b-cb42-4067-a861-7ebf1804a903","savedPayload":{"position":{"x":25596.87838008744,"y":21560.728304291933},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Base Asset","config":"{ \n\"codeName\": \"exitTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"739818f5-d2e4-4fea-b818-a598ed4a9c21","savedPayload":{"position":{"x":25511.85058498237,"y":21520.172126427544},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Quoted Asset","config":"{ \n\"codeName\": \"exitTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"76337d8e-1242-4e84-96c4-7e93b218a1ab","savedPayload":{"position":{"x":25431.52785598367,"y":21470.95029479159},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Rate","config":"{ \n\"codeName\": \"entryTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"06eb81a4-5736-40f5-8248-9aeb8e9cc409","savedPayload":{"position":{"x":25356.790225718854,"y":21413.602094071804},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Rate","config":"{ \n\"codeName\": \"exitTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"7c3162ae-a955-4c61-bd01-69a198893335","savedPayload":{"position":{"x":25288.456535304962,"y":21348.755843156156},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Profit Loss","config":"{ \n\"codeName\": \"profitLoss\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"399ae646-1616-4fdd-9ce3-228ea91b7bfc","savedPayload":{"position":{"x":25227.27546295391,"y":21277.122011139625},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics ROI","config":"{ \n\"codeName\": \"ROI\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 10\n}","project":"Superalgos","id":"eaa127cc-7067-45a6-8268-463c659209d0","savedPayload":{"position":{"x":25173.917321297336,"y":21199.48543327613},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Hit Fail","config":"{ \n\"codeName\": \"hitFail\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\"\n}","project":"Superalgos","id":"2db6cdcd-128e-4bdd-9e9f-1d009c497a16","savedPayload":{"position":{"x":25128.966713301146,"y":21116.696712159242},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Statistics Days","config":"{ \n\"codeName\": \"days\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionStatistics\",\n \"decimals\": 2\n}","project":"Superalgos","id":"42bb6a56-afc0-4c71-9b08-fd59959e8c88","savedPayload":{"position":{"x":25092.91612723306,"y":21029.662898342172},"targetPosition":{"x":25941.29346921602,"y":20729.236725031777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"823244e2-6d28-4e3a-96ea-42f6a7981bca","savedPayload":{"position":{"x":25941.29346921602,"y":20729.236725031777},"targetPosition":{"x":25731.192641745703,"y":19854.103796673866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d","savedPayload":{"position":{"x":25737.192641745703,"y":19854.103796673866},"targetPosition":{"x":25472.68927821409,"y":19490.04614920514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Position Objects","id":"8854b5f8-8407-4a0d-9099-5456a8e4cced"}}},{"type":"Product Definition","name":"Position Base Asset","config":"{\n \"codeName\": \"Position-Base-Asset-Objects\",\n \"singularVariableName\": \"positionBaseAssetObject\",\n \"pluralVariableName\": \"positionBaseAssetObjects\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"a0ff2796-59dd-4aa4-93ed-ba4601b9de5d","savedPayload":{"position":{"x":25627.087807742944,"y":20135.314852469804},"targetPosition":{"x":25519.727086684532,"y":19937.581002120864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"9985d32d-c070-4593-8a2a-ec8bc1c78cbb","savedPayload":{"position":{"x":25543.245990919753,"y":20161.348428578724},"targetPosition":{"x":25519.727086684532,"y":19937.581002120864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"ab0b9bad-a26f-4bd2-9c8a-b54d8e18ba1f","savedPayload":{"position":{"x":25775.608255527106,"y":20604.174236933726},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"c7ef2775-8664-4ad2-b1f7-75bcf27f30df","savedPayload":{"position":{"x":25701.679740629956,"y":20695.468349767078},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"fab4ea05-53c0-4899-a319-9da3db9c650d","savedPayload":{"position":{"x":25606.64162368459,"y":20764.517583509434},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Base Asset","config":"{ \n\"codeName\": \"profitLossInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"807ac077-7ed6-484b-883f-40590c678635","savedPayload":{"position":{"x":25496.970595302922,"y":20806.616346990504},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Base Asset","config":"{ \n\"codeName\": \"ROIInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"686128cb-42c2-41c8-8953-461220b65741","savedPayload":{"position":{"x":25380.140554829224,"y":20818.89567905055},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Base Asset","config":"{ \n\"codeName\": \"hitFailInBaseAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"3989fb34-a5da-416b-8f76-92476fba2d8b","savedPayload":{"position":{"x":25264.113276451,"y":20800.518763502234},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Base Asset","config":"{ \n\"codeName\": \"entryTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"fe6f9596-bc0c-44dc-b70e-f7ee436b9b59","savedPayload":{"position":{"x":25156.79582744559,"y":20752.73795677089},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Base Asset","config":"{ \n\"codeName\": \"exitTargetSizeInBaseAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionBaseAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"b02b1740-a282-4407-93de-68a0f9aa91a4","savedPayload":{"position":{"x":25065.501714612237,"y":20678.80944187374},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Rate","config":"{ \n\"codeName\": \"entryTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1ed47645-109e-41f4-a570-80d8f45cef9f","savedPayload":{"position":{"x":24996.45248086988,"y":20583.771324928373},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Rate","config":"{ \n\"codeName\": \"exitTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"e408f858-f3b2-4eac-aff7-b8ff5fa5b12c","savedPayload":{"position":{"x":24954.35371738881,"y":20474.100296546705},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Candle Close","config":"{ \n\"codeName\": \"candleClose\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\",\n \"childProperty\": \"close\",\n \"decimals\": 10\n}","project":"Superalgos","id":"6d2910e9-5d9a-4cd3-bbba-8e22fc554855","savedPayload":{"position":{"x":24942.074385328764,"y":20357.270256073007},"targetPosition":{"x":25391.920181567766,"y":20369.04988281155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2c81cbf8-d93e-4704-bab2-bc9c0efdb3a4","savedPayload":{"position":{"x":25391.920181567766,"y":20369.04988281155},"targetPosition":{"x":25519.727086684532,"y":19937.581002120864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"b371b039-f6c8-4f60-84cb-52f55c96c84d","savedPayload":{"position":{"x":25519.727086684532,"y":19937.581002120864},"targetPosition":{"x":25472.68927821409,"y":19490.04614920514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Position Base Asset","id":"42a79594-bac8-40bf-a9eb-f13716e15465"}}},{"type":"Product Definition","name":"Position Quoted Asset","config":"{\n \"codeName\": \"Position-Quoted-Asset-Objects\",\n \"singularVariableName\": \"positionQuotedAssetObject\",\n \"pluralVariableName\": \"positionQuotedAssetObjects\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAsObjects\": true,\n \"propertyNameThatDefinesObject\": \"status\",\n \"propertyValueThatClosesObject\": \"Closed\",\n \"propertyValueThatPreventsSavingObject\": \"Not Open\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"abab2ab2-3a9b-49bd-8935-9bb01c113761","savedPayload":{"position":{"x":25283.76797546071,"y":20126.064503263813},"targetPosition":{"x":25289.65778882998,"y":19901.141605144312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"40ac7181-100d-4b65-b7fd-a8103cda2300","savedPayload":{"position":{"x":25198.142044137923,"y":20106.689333113896},"targetPosition":{"x":25289.65778882998,"y":19901.141605144312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false\n}","project":"Superalgos","id":"07c757d3-bc46-4222-90da-d86cba491ebb","savedPayload":{"position":{"x":25177.960763991276,"y":20606.368864904387},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false\n}","project":"Superalgos","id":"91d9db38-e2ef-4947-88f0-e2babea49598","savedPayload":{"position":{"x":25068.289735609607,"y":20648.467628385457},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Status","config":"{ \n\"codeName\": \"status\",\n\"isString\": true,\n\"isCalculated\": false\n}","project":"Superalgos","id":"d879d6c0-51b6-47db-a4c9-0ec0f69eefcd","savedPayload":{"position":{"x":24951.45969513591,"y":20660.746960445504},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Profit Loss In Quoted Asset","config":"{ \n\"codeName\": \"profitLossInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"profitLoss\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4d007dcc-ea53-474d-833b-d43580ea5a1d","savedPayload":{"position":{"x":24835.432416757685,"y":20642.370044897187},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"ROI In Quoted Asset","config":"{ \n\"codeName\": \"ROIInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"ROI\",\n \"decimals\": 10\n}","project":"Superalgos","id":"7dea3349-8f02-4ecf-8ab8-6a4ec6d0890e","savedPayload":{"position":{"x":24728.114967752274,"y":20594.58923816584},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Hit Fail In Quoted Asset","config":"{ \n\"codeName\": \"hitFailInQuotedAsset\",\n\"isString\": true,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"hitFail\"\n}","project":"Superalgos","id":"093a203a-838d-49af-ad26-2feb6b808bdd","savedPayload":{"position":{"x":24636.820854918922,"y":20520.66072326869},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Size In Quoted Asset","config":"{ \n\"codeName\": \"entryTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"entryTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"7fb1fb82-57c1-4c64-9613-e1938e99a8ab","savedPayload":{"position":{"x":24567.771621176566,"y":20425.622606323326},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Size In Quoted Asset","config":"{ \n\"codeName\": \"exitTargetSizeInQuotedAsset\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.position.positionQuotedAsset\",\n \"childProperty\": \"exitTargetSize\",\n \"decimals\": 10\n}","project":"Superalgos","id":"a44876b4-75a0-4fd1-a623-eeba4decd42f","savedPayload":{"position":{"x":24525.672857695496,"y":20315.951577941658},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Entry Target Rate","config":"{ \n\"codeName\": \"entryTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"37888758-269e-48b2-9ca0-5d69d607dacf","savedPayload":{"position":{"x":24513.39352563545,"y":20199.12153746796},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Exit Target Rate","config":"{ \n\"codeName\": \"exitTargetRate\",\n\"isString\": false,\n\"isCalculated\": false\n}","project":"Superalgos","id":"1bd0adb3-e67c-49f2-831c-1fa0c74a85f5","savedPayload":{"position":{"x":24531.770441183766,"y":20083.094259089736},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Candle Close","config":"{ \n\"codeName\": \"candleClose\",\n\"isString\": false,\n\"isCalculated\": false,\n \"nodePath\": \"tradingEngine.current.episode.candle\",\n \"childProperty\": \"close\",\n \"decimals\": 10\n}","project":"Superalgos","id":"4451d357-0968-462e-82d2-6321f0681397","savedPayload":{"position":{"x":24579.55124791511,"y":19975.776810084324},"targetPosition":{"x":24963.23932187445,"y":20210.9011642065},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b46f9e1f-74e0-4858-bb93-d4d85e72c3a9","savedPayload":{"position":{"x":24963.23932187445,"y":20210.9011642065},"targetPosition":{"x":25289.65778882998,"y":19901.141605144312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},"id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909","savedPayload":{"position":{"x":25289.65778882998,"y":19901.141605144312},"targetPosition":{"x":25472.68927821409,"y":19490.04614920514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Position Quoted Asset","id":"baed45c2-228e-4679-876e-1867bbef5e9f"}}},{"type":"Product Definition","name":"Stop Loss","config":"{\n \"codeName\": \"Stop-Loss\",\n \"singularVariableName\": \"stopLoss\",\n \"pluralVariableName\": \"stopLosses\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAtCycle\": \"Second\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"0ea22a69-e7cb-4fcf-b7ae-4b7233b196c4","savedPayload":{"position":{"x":24985.069453684275,"y":19946.393549716424},"targetPosition":{"x":25102.631630745364,"y":19754.549512736754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"75b13383-2771-4f58-b2c4-ffadad2e9519","savedPayload":{"position":{"x":24920.602807011,"y":19886.80119450256},"targetPosition":{"x":25102.631630745364,"y":19754.549512736754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\",\n \"childProperty\": \"begin\"\n}","project":"Superalgos","id":"048960a1-1de4-4492-b214-37bfc59d661b","savedPayload":{"position":{"x":24752.267743148557,"y":19904.30222507848},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\",\n \"childProperty\": \"end\"\n}","project":"Superalgos","id":"f44a0a9b-3abb-4323-be28-c14a677d2d5f","savedPayload":{"position":{"x":24684.709999151426,"y":19830.39110716718},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stop Loss","config":"{\n \"codeName\": \"stopLoss\",\n \"isString\": false\n}","project":"Superalgos","id":"1152e12b-354a-49cf-bfe1-dbb54a5471bf","savedPayload":{"position":{"x":24655.911407226005,"y":19734.48728436541},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Stop Loss Phase","config":"{\n \"codeName\": \"stopLossPhase\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"2dc164a2-1df6-40d4-861d-15b0cbc6c627","savedPayload":{"position":{"x":24671.575881694676,"y":19635.58568496226},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Initial Value","config":"{\n \"codeName\": \"initialValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"8f18d1a9-9ad9-4dff-8091-c419757a3e78","savedPayload":{"position":{"x":24728.600881276743,"y":19553.27498366805},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Final Value","config":"{\n \"codeName\": \"finalValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.stopLoss\"\n}","project":"Superalgos","id":"5a762d29-97b5-4b34-87e2-6089dfb259be","savedPayload":{"position":{"x":24815.691905439257,"y":19503.85782434859},"targetPosition":{"x":24880.40175411146,"y":19719.3517581027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04d49dc8-b542-4700-8d07-99323b0f1f62","savedPayload":{"position":{"x":24880.40175411146,"y":19719.3517581027},"targetPosition":{"x":25102.631630745364,"y":19754.549512736754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b","savedPayload":{"position":{"x":25108.631630745364,"y":19754.549512736754},"targetPosition":{"x":25472.68927821409,"y":19490.04614920514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Stop Loss","id":"9b8e4fc2-b62a-4d47-ac5f-08818e463da2"}}},{"type":"Product Definition","name":"Take Profit","config":"{\n \"codeName\": \"Take-Profit\",\n \"singularVariableName\": \"takeProfit\",\n \"pluralVariableName\": \"takeProfits\",\n \"nodePath\": \"tradingEngine.current.position\",\n \"saveAtCycle\": \"Second\"\n}","project":"Superalgos","datasets":[{"type":"Dataset Definition","name":"Multi-Period-Market","config":"{\n \"codeName\": \"Multi-Period-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"3cd59aa1-0590-43b6-9fb7-c85276ac132e","savedPayload":{"position":{"x":24827.420574949425,"y":19644.444678733995},"targetPosition":{"x":25025.154425298366,"y":19537.083957675582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},{"type":"Dataset Definition","name":"Multi-Period-Daily","config":"{\n \"codeName\": \"Multi-Period-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset/@Period/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Session/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }","project":"Superalgos","id":"916d5610-87ae-47e7-9067-9a406141e3df","savedPayload":{"position":{"x":24801.386998840506,"y":19560.602861910804},"targetPosition":{"x":25025.154425298366,"y":19537.083957675582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}}],"record":{"type":"Record Definition","name":"New Record Definition","project":"Superalgos","properties":[{"type":"Record Property","name":"Begin","config":"{\n \"codeName\": \"begin\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\",\n \"childProperty\": \"begin\"\n}","project":"Superalgos","id":"3f8411d3-5a4f-4243-9f6f-d61cc4a28fb5","savedPayload":{"position":{"x":24646.85404189999,"y":19491.591667050736},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"End","config":"{\n \"codeName\": \"end\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\",\n \"childProperty\": \"end\"\n}","project":"Superalgos","id":"437e1ec6-c754-46bb-9942-e05eb056629c","savedPayload":{"position":{"x":24625.30287833176,"y":19393.80388931888},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Take Profit","config":"{\n \"codeName\": \"takeProfit\",\n \"isString\": false\n}","project":"Superalgos","id":"81208625-05fb-4e89-bb88-ff16df25bdb7","savedPayload":{"position":{"x":24648.31447753201,"y":19296.349446489796},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Take Profit Phase","config":"{\n \"codeName\": \"takeProfitPhase\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"4ccb1152-df42-41ef-b8db-da8ee01c6f09","savedPayload":{"position":{"x":24711.331110060382,"y":19218.53038616609},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Initial Value","config":"{\n \"codeName\": \"initialValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"9fb3dde7-59a6-4149-b1a1-457d17e5bfbd","savedPayload":{"position":{"x":24801.871558996358,"y":19175.759727633023},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Record Property","name":"Final Value","config":"{\n \"codeName\": \"finalValue\",\n \"isString\": false,\n \"nodePath\": \"tradingEngine.current.position.takeProfit\"\n}","project":"Superalgos","id":"d391644b-9fa2-4eb2-b5ad-0d5c8ec7efa2","savedPayload":{"position":{"x":24902.003178022427,"y":19176.508724360767},"targetPosition":{"x":24850.296583970547,"y":19395.486869689368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fe08bafa-9d05-4c76-9448-0d21bd36346c","savedPayload":{"position":{"x":24850.296583970547,"y":19395.486869689368},"targetPosition":{"x":25025.154425298366,"y":19537.083957675582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89","savedPayload":{"position":{"x":25025.154425298366,"y":19537.083957675582},"targetPosition":{"x":25472.68927821409,"y":19490.04614920514},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Plotter Module","name":"Take Profit","id":"78a2df79-8912-44d7-a8c7-4b6a0a7235c2"}}}],"productDefinitionFolders":[],"id":"5572f4e4-17f2-4037-b524-97d3cf582a64","savedPayload":{"position":{"x":25472.68927821409,"y":19490.04614920514},"targetPosition":{"x":25655.7207675982,"y":19078.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7e586bb9-0198-431d-83af-cb552d5f6e4e","savedPayload":{"position":{"x":25655.7207675982,"y":19078.950693265968},"targetPosition":{"x":25391.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8c7f3687-b5ae-4a45-bda1-751cb2c55995","savedPayload":{"position":{"x":25391.217404066585,"y":18714.893045797242},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"j"}}}],"plotters":[{"type":"Plotter","name":"Trading Engine","config":"{ \n\"codeName\": \"Trading-Engine\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Episode Counters","config":"{ \n\"codeName\": \"Episode-Counters\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Episode Counters","config":"{ \n \"codeName\": \"Episode-Counters\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"a603cdac-43fd-4ed9-bc66-12c708158f4c","savedPayload":{"position":{"x":25394.435035785104,"y":18214.335562081542},"targetPosition":{"x":25546.044692554773,"y":18380.5869138781},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed1e5a45-552b-4050-96b6-8f3b7e0e0e42","savedPayload":{"position":{"x":25546.044692554773,"y":18380.5869138781},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Strategies","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.strategies","project":"Superalgos","id":"bd3377de-142c-4f1f-a9cd-1e3a92227fb9","savedPayload":{"position":{"x":25568.73070398044,"y":18115.701751712768},"targetPosition":{"x":25633.19252665244,"y":18331.270008693715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3445841f-c443-47ed-ab69-af44aafbd805","savedPayload":{"position":{"x":25633.19252665244,"y":18331.270008693715},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Positions","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.positions","project":"Superalgos","id":"a4e07f20-da19-4745-932b-021844ede19f","savedPayload":{"position":{"x":25768.561281280894,"y":18102.459815476497},"targetPosition":{"x":25733.10781530267,"y":18324.64904057558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"960b035e-f799-4e83-81ab-4ce423d081d6","savedPayload":{"position":{"x":25733.10781530267,"y":18324.64904057558},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Orders","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.orders","project":"Superalgos","id":"bb28084c-0e1e-4c27-a488-7d8417fb7794","savedPayload":{"position":{"x":25954.34787109093,"y":18177.232481246007},"targetPosition":{"x":25826.001110207686,"y":18362.035373460334},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4ba9c931-98ec-4390-a68e-7392b7e2c0e4","savedPayload":{"position":{"x":25826.001110207686,"y":18362.035373460334},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hits","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hits","project":"Superalgos","id":"4a2c6bca-66d4-4f1f-a2c9-a034f879032d","savedPayload":{"position":{"x":26089.293160775658,"y":18325.21010553909},"targetPosition":{"x":25893.47375505005,"y":18436.024185606875},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77748bc7-f305-46f7-a51d-4b07420f0174","savedPayload":{"position":{"x":25893.47375505005,"y":18436.024185606875},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fails","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.fails","project":"Superalgos","id":"0b4b3713-a461-4a82-a014-496bf0a13a44","savedPayload":{"position":{"x":26146.669580717662,"y":18517.08390503803},"targetPosition":{"x":25922.161965021052,"y":18531.961085356346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c96317c-9c59-4617-ac0d-80a4475b7044","savedPayload":{"position":{"x":25922.161965021052,"y":18531.961085356346},"targetPosition":{"x":25697.654349324443,"y":18546.83826567466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2a5783fe-af9a-443c-b4e7-32d8bdabff82","savedPayload":{"position":{"x":25697.654349324443,"y":18546.83826567466},"targetPosition":{"x":25613.648021874604,"y":18755.567604648342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"11308192-1761-4746-8567-50f5d50eee37","savedPayload":{"position":{"x":25725.032058770234,"y":18739.761076730018},"targetPosition":{"x":25613.648021874604,"y":18755.567604648342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"5e478e3f-e432-4364-8f2c-2f3b2849848b","savedPayload":{"position":{"x":25613.648021874604,"y":18755.567604648342},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Episode Statistics","config":"{ \n\"codeName\": \"Episode-Statistics\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Episode Statistics","config":"{ \n \"codeName\": \"Episode-Statistics\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"8ccceec4-4b55-4002-82fc-5eb003680884","savedPayload":{"position":{"x":25492.140665186413,"y":18236.580023736882},"targetPosition":{"x":25622.605530827106,"y":18419.893740717787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a656f547-17d4-48c8-8a30-110cb1cc8d54","savedPayload":{"position":{"x":25622.605530827106,"y":18419.893740717787},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLoss","project":"Superalgos","id":"2c744dce-e9bc-4b52-ae5a-88153818efe8","savedPayload":{"position":{"x":25677.054513783554,"y":18159.67438612484},"targetPosition":{"x":25715.062455125677,"y":18381.440921911766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dac1e943-73af-419a-89d3-cf7413d0410d","savedPayload":{"position":{"x":25715.062455125677,"y":18381.440921911766},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROI","project":"Superalgos","id":"0262af09-67a3-4948-9f03-903b95f75754","savedPayload":{"position":{"x":25877.024240219933,"y":18170.615912914152},"targetPosition":{"x":25815.047318343866,"y":18386.911685306422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c5ddf4c7-c06c-48cb-b474-aa1049dda30f","savedPayload":{"position":{"x":25815.047318343866,"y":18386.911685306422},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Ratio","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitRatio","project":"Superalgos","id":"2e63251f-fa85-44c1-a977-6ea9b1289de4","savedPayload":{"position":{"x":26052.443387707066,"y":18267.23750053518},"targetPosition":{"x":25902.756892087433,"y":18435.222479116936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f4dba581-f375-45b7-b3e9-8397b74c14f9","savedPayload":{"position":{"x":25902.756892087433,"y":18435.222479116936},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Annualized Rate Of Return","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.annualizedRateOfReturn","project":"Superalgos","id":"3b65f366-e8c3-4298-9617-9d7cd121a0fc","savedPayload":{"position":{"x":26168.56804271047,"y":18430.402058573556},"targetPosition":{"x":25960.819219589135,"y":18516.804758136124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0ddc2941-7f32-43c4-a2ac-33933f7176ea","savedPayload":{"position":{"x":25960.819219589135,"y":18516.804758136124},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFail","project":"Superalgos","id":"1fda27ad-cc5a-441a-8d2e-d0e820d994eb","savedPayload":{"position":{"x":26202.398293131297,"y":18627.792845227807},"targetPosition":{"x":25977.734344799548,"y":18615.50015146325},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aa06aaaa-c76e-4cb7-b2a4-752703cd91d8","savedPayload":{"position":{"x":25977.734344799548,"y":18615.50015146325},"targetPosition":{"x":25753.0703964678,"y":18603.207457698692},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6ea43033-418d-4d87-b640-02010679aa8b","savedPayload":{"position":{"x":25753.0703964678,"y":18603.207457698692},"targetPosition":{"x":25644.517028136182,"y":18800.289080951243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"a22754c1-aa31-4bef-8d7f-4b0df8b2c6e5","savedPayload":{"position":{"x":25756.99421639698,"y":18798.02366245888},"targetPosition":{"x":25644.517028136182,"y":18800.289080951243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"6ce18a43-2e6a-452e-a72d-1c56a58d3f81","savedPayload":{"position":{"x":25644.517028136182,"y":18800.289080951243},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Candle","config":"{ \n\"codeName\": \"Current-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"db2a5867-c3c9-40ae-86f2-19845ca4bffe","savedPayload":{"position":{"x":25772.359118971082,"y":18802.233894264013},"targetPosition":{"x":25669.770386296972,"y":18848.405334877447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"31789d43-d608-4eeb-a3ff-338a99074045","savedPayload":{"position":{"x":25669.770386296972,"y":18848.405334877447},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Episode Balances","config":"{ \n\"codeName\": \"Current-Balance\"\n}","project":"Superalgos","panels":[{"type":"Plotter Panel","name":"Current Balance","config":"{ \n \"codeName\": \"Current-Balance\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Balance Base Asset","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.balanceBaseAsset","project":"Superalgos","id":"fcc203c4-9d04-4ac2-8740-75deaee8e2a4","savedPayload":{"position":{"x":26111.197603362525,"y":18536.394795062704},"targetPosition":{"x":26144.28573143284,"y":18701.86907790086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab01ee28-2095-4f64-8162-173c6aa8d32b","savedPayload":{"position":{"x":26144.28573143284,"y":18701.86907790086},"targetPosition":{"x":26177.373859503154,"y":18867.343360739018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Balance Quoted Asset","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.balanceQuotedAsset","project":"Superalgos","id":"37fd5f0b-0bbf-419b-9d30-e54e0569937a","savedPayload":{"position":{"x":26318.36282983316,"y":18560.702919431475},"targetPosition":{"x":26247.868344668157,"y":18714.023140085246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"01cbacca-656b-4437-be3c-dcf8f10d7ac8","savedPayload":{"position":{"x":26247.868344668157,"y":18714.023140085246},"targetPosition":{"x":26177.373859503154,"y":18867.343360739018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Both Assets in Base Asset","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.balanceBaseAsset + (record.balanceQuotedAsset / candle.close)","project":"Superalgos","id":"d3dc0826-e399-4967-85c7-bc0fe04dbc4a","savedPayload":{"position":{"x":26471.675061676586,"y":18702.13727005446},"targetPosition":{"x":26324.52446058987,"y":18784.74031539674},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"809c4813-6f76-4591-ac3a-b9a38d3012b4","savedPayload":{"position":{"x":26324.52446058987,"y":18784.74031539674},"targetPosition":{"x":26177.373859503154,"y":18867.343360739018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Both Assets in Quoted Asset","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.balanceQuotedAsset + (record.balanceBaseAsset * candle.close)","project":"Superalgos","id":"063de6a6-f51c-4531-9de5-1f6095e052ef","savedPayload":{"position":{"x":26512.574237219713,"y":18906.674732170453},"targetPosition":{"x":26344.974048361433,"y":18887.009046454736},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32d1a407-2032-4c99-a96a-82ded9d663a3","savedPayload":{"position":{"x":26344.974048361433,"y":18887.009046454736},"targetPosition":{"x":26177.373859503154,"y":18867.343360739018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cb03ef16-522f-4189-ab3a-b410bf1f4176","savedPayload":{"position":{"x":26177.373859503154,"y":18867.343360739018},"targetPosition":{"x":26062.95106626077,"y":18991.3755617459},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"27e334d8-0ec2-4047-a961-af4c5fcf8d32","savedPayload":{"position":{"x":26227.57749984122,"y":19028.452506962334},"targetPosition":{"x":26062.95106626077,"y":18991.3755617459},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"e5d9e3e1-d1f4-4493-b452-33fe49c81228","savedPayload":{"position":{"x":25689.039845529376,"y":18899.214723096346},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Distance To Event","config":"{ \n\"codeName\": \"Distance-To-Event\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"dc45b078-aeee-40bf-8f6d-f8b12a57494f","savedPayload":{"position":{"x":25812.701653258297,"y":18931.697638560865},"targetPosition":{"x":25702.044413726744,"y":18951.97633031493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"56eb7de2-0281-404a-bd4d-34ac113e2325","savedPayload":{"position":{"x":25702.044413726744,"y":18951.97633031493},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Strategy","config":"{ \n\"codeName\": \"Current-Strategy\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"97c36937-1cdc-42ce-b886-ca8220b14025","savedPayload":{"position":{"x":25820.889204851148,"y":18999.128192531152},"targetPosition":{"x":25708.594455001024,"y":19005.920773491158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"a3c31000-1b82-4fe9-ae56-6d5893582b16","savedPayload":{"position":{"x":25708.594455001024,"y":19005.920773491158},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Last Strategy","config":"{ \n\"codeName\": \"Last-Strategy\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"c242da84-b00b-4900-ad95-b25a57ef9603","savedPayload":{"position":{"x":25820.889204851148,"y":19067.054002131223},"targetPosition":{"x":25708.594455001024,"y":19060.261421171217},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"028aaa23-630c-4aa6-a168-6b2a128b1a83","savedPayload":{"position":{"x":25708.594455001024,"y":19060.261421171217},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Position","config":"{ \n\"codeName\": \"Current-Position\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"daf7ee4e-434b-48df-af3b-b17489fe6a12","savedPayload":{"position":{"x":25812.701653258297,"y":19134.48455610151},"targetPosition":{"x":25702.044413726744,"y":19114.205864347445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"0d2212c7-07bb-4c41-94fb-00844415ba5e","savedPayload":{"position":{"x":25702.044413726744,"y":19114.205864347445},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Last Position","config":"{ \n\"codeName\": \"Last-Position\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"c4473b0f-99f8-4129-b8ee-1f6a988e9440","savedPayload":{"position":{"x":25796.445943011586,"y":19200.43656512474},"targetPosition":{"x":25689.039845529376,"y":19166.96747156603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"08c88b9c-70f1-49ff-aa16-21f2bc1c0ba1","savedPayload":{"position":{"x":25689.039845529376,"y":19166.96747156603},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Previous Candle","config":"{ \n\"codeName\": \"Previous-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"559cabae-7e0e-4ff8-b1dd-8f822421fe6e","savedPayload":{"position":{"x":25772.359118971082,"y":19263.948300398362},"targetPosition":{"x":25669.770386296972,"y":19217.776859784928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"076dcee2-2923-4455-8697-263649515a3b","savedPayload":{"position":{"x":25669.770386296972,"y":19217.776859784928},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Market Buy Orders","config":"{ \n\"codeName\": \"Market-Buy-Orders\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"8ed02a94-4fce-4314-ab0a-6642e85bdca3","savedPayload":{"position":{"x":25740.792421270096,"y":19324.09361780612},"targetPosition":{"x":25644.517028136182,"y":19265.893113711132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"50d624c9-9a6e-4d57-a147-29d5c004b3f2","savedPayload":{"position":{"x":25644.517028136182,"y":19265.893113711132},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Market Sell Orders","config":"{ \n\"codeName\": \"Market-Sell-Orders\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"15dc7163-1703-4cad-9253-d48d7bb01800","savedPayload":{"position":{"x":25702.206163443123,"y":19379.995463184743},"targetPosition":{"x":25613.648021874604,"y":19310.614590014033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"4f84a1a5-f9cd-4b9d-9d91-661ba912e2ca","savedPayload":{"position":{"x":25613.648021874604,"y":19310.614590014033},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Limit Buy Orders","config":"{ \n\"codeName\": \"Limit-Buy-Orders\",\n \"useRateAtMousePosition\": true\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"b89ff555-961b-4190-b874-4968e26db1b4","savedPayload":{"position":{"x":25657.163020017964,"y":19430.83866174862},"targetPosition":{"x":25577.613507134476,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"17ec46bd-e5c0-48d5-a3b6-e108cc835f17","savedPayload":{"position":{"x":25577.613507134476,"y":19351.289148865133},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Limit Sell Orders","config":"{ \n\"codeName\": \"Limit-Sell-Orders\",\n \"useRateAtMousePosition\": true\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"fe4a4590-f68f-454e-84ba-96ae9cef3b70","savedPayload":{"position":{"x":25606.319821454086,"y":19475.88180517378},"targetPosition":{"x":25536.938948283376,"y":19387.32366360526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"1ec8da3f-8749-430d-8ad9-35fffc0d61ec","savedPayload":{"position":{"x":25536.938948283376,"y":19387.32366360526},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Strategy Open Stage","config":"{ \n\"codeName\": \"Current-Strategy-Open-Stage\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"eca15627-7af5-4aef-9095-90c42831202c","savedPayload":{"position":{"x":25550.417976075463,"y":19514.468063000753},"targetPosition":{"x":25492.217471980475,"y":19418.19266986684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"f759a457-fc11-43a8-bf2c-6ebf1db0e78d","savedPayload":{"position":{"x":25492.217471980475,"y":19418.19266986684},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Strategy Close Stage","config":"{ \n\"codeName\": \"Current-Strategy-Close-Stage\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"59cb7431-a489-4ab2-ba79-78996e8630c8","savedPayload":{"position":{"x":25490.272658667705,"y":19546.03476070174},"targetPosition":{"x":25444.10121805427,"y":19443.44602802763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"6be13ce1-0fae-4355-99b2-dc8db000251f","savedPayload":{"position":{"x":25444.10121805427,"y":19443.44602802763},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Strategy Trigger Stage","config":"{ \n\"codeName\": \"Current-Strategy-Trigger-Stage\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"aec5592e-57b9-4256-88d8-861534624284","savedPayload":{"position":{"x":25426.760923394082,"y":19570.121584742243},"targetPosition":{"x":25393.291829835372,"y":19462.715487260033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"823fa15f-bf29-4784-a5f8-5b82d2ed7645","savedPayload":{"position":{"x":25393.291829835372,"y":19462.715487260033},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Strategy Manage Stage","config":"{ \n\"codeName\": \"Current-Strategy-Manage-Stage\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"c060b2bf-e594-4bb5-b0d6-d48f5c03d2e0","savedPayload":{"position":{"x":25360.808914370853,"y":19586.377294988954},"targetPosition":{"x":25340.530222616788,"y":19475.7200554574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"34a912c3-4b0f-4f21-9736-4ef47cd0544d","savedPayload":{"position":{"x":25340.530222616788,"y":19475.7200554574},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Current Episode","config":"{ \n\"codeName\": \"Current-Position\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"808e43e8-468e-4d37-b2c2-210b902f2d6b","savedPayload":{"position":{"x":25293.378360400566,"y":19594.564846581805},"targetPosition":{"x":25286.58577944056,"y":19482.27009673168},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"bf241117-1c2c-470c-a172-b86b2befa9a2","savedPayload":{"position":{"x":25286.58577944056,"y":19482.27009673168},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Episode Base Asset","config":"{ \n\"codeName\": \"Previous-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"3e32e9c9-41c5-44c8-85ae-2ef6ee053135","savedPayload":{"position":{"x":25225.452550800495,"y":19594.564846581805},"targetPosition":{"x":25232.2451317605,"y":19482.27009673168},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"a99b25e6-7aca-41a2-aacc-1911aac2ee3e","savedPayload":{"position":{"x":25232.2451317605,"y":19482.27009673168},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Episode Quoted Asset","config":"{ \n\"codeName\": \"Previous-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"82cc01b1-b354-4e30-a1a0-7bb378dc322c","savedPayload":{"position":{"x":25158.021996830208,"y":19586.377294988954},"targetPosition":{"x":25178.300688584273,"y":19475.7200554574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"ede92318-db13-4951-83b1-11fc0345d677","savedPayload":{"position":{"x":25178.300688584273,"y":19475.7200554574},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Last Market Order","config":"{ \n\"codeName\": \"Previous-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"0bbba556-73d6-43f9-bf55-17e83ea9ab40","savedPayload":{"position":{"x":25092.06998780698,"y":19570.121584742243},"targetPosition":{"x":25125.53908136569,"y":19462.715487260033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"05aa37c8-9f6d-4276-96a6-3123707e7686","savedPayload":{"position":{"x":25125.53908136569,"y":19462.715487260033},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Last Limit Order","config":"{ \n\"codeName\": \"Previous-Candle\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"c89abeeb-79ff-4f3f-a031-091b10f8037a","savedPayload":{"position":{"x":25028.558252533356,"y":19546.03476070174},"targetPosition":{"x":25074.72969314679,"y":19443.44602802763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"2284d48f-cf52-4277-b81e-c62afef88b71","savedPayload":{"position":{"x":25074.72969314679,"y":19443.44602802763},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Stop Loss","config":"{ \n\"codeName\": \"Stop-Loss\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"097b8ec2-54f5-4fca-8de3-1cd4ac9eb05e","savedPayload":{"position":{"x":24968.412935125598,"y":19514.468063000753},"targetPosition":{"x":25026.613439220586,"y":19418.19266986684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"cdafbd38-ade8-4548-b951-b404c1bd7885","savedPayload":{"position":{"x":25026.613439220586,"y":19418.19266986684},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Take Profit","config":"{ \n\"codeName\": \"Take-Profit\"\n}","project":"Superalgos","panels":[],"recordValues":{"type":"Record Values","name":"New Record Values","project":"Superalgos","id":"a480ca2f-187a-429a-915b-e8f6a1913bc0","savedPayload":{"position":{"x":24912.511089746975,"y":19475.88180517378},"targetPosition":{"x":24981.891962917685,"y":19387.32366360526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{}}},"id":"d06674eb-36cf-4048-bd99-31712b0523a0","savedPayload":{"position":{"x":24981.891962917685,"y":19387.32366360526},"targetPosition":{"x":25259.41545560053,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ebb03c87-e87e-4f4b-8763-361854776287","savedPayload":{"position":{"x":25259.41545560053,"y":19033.091097331187},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Trading System","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Highlights","config":"{ \n\"codeName\": \"Highlights\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesHighlights":{"type":"Nodes Highlights","name":"New Nodes Highlights","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"fa39a76d-1b97-41a2-ab18-f33c2f31fded","savedPayload":{"position":{"x":25797.168268732225,"y":19443.008340734694},"targetPosition":{"x":25369.192836399405,"y":19303.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d979c9f0-530a-41d3-a357-b57a3e4f2201","savedPayload":{"position":{"x":25369.192836399405,"y":19303.950693265968},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Values","config":"{ \n\"codeName\": \"Values\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesValues":{"type":"Nodes Values","name":"New Nodes Values","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"f42e5006-d8ec-437a-8906-53d7ce68b79c","savedPayload":{"position":{"x":25669.332699004037,"y":19693.89977286047},"targetPosition":{"x":25305.27505153531,"y":19429.396409328856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"476925ed-e2ac-443d-82f3-501b64ca6c87","savedPayload":{"position":{"x":25305.27505153531,"y":19429.396409328856},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Errors","config":"{ \n\"codeName\": \"Errors\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Middle Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin + (record.end - record.begin)\ny = 0","project":"Superalgos","id":"733b921d-8f51-4bca-b0b5-b0d9a1f9c734","savedPayload":{"position":{"x":26898.04100900101,"y":19671.031443827065},"targetPosition":{"x":26450.506156085285,"y":19718.069252297508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f189c006-3adb-4b21-8b9d-342f94e7640f","savedPayload":{"position":{"x":26450.506156085285,"y":19718.069252297508},"targetPosition":{"x":26002.97130316956,"y":19765.10706076795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e50625b6-8b4d-4ae2-960b-b45769639162","savedPayload":{"position":{"x":26002.97130316956,"y":19765.10706076795},"targetPosition":{"x":25555.436450253837,"y":19812.144869238393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"bullet-error\", \n\"size\": 10\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.errors.length> 0","project":"Superalgos","id":"956eb8d9-f297-4783-ac35-625b8d7b1c67","savedPayload":{"position":{"x":26127.38200954338,"y":20130.536799844875},"targetPosition":{"x":25905.152132909476,"y":20095.33904521082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"1da7aa3c-77fb-4d0d-8895-e1c231dcca90","savedPayload":{"position":{"x":25985.78492155717,"y":20305.39464117269},"targetPosition":{"x":25905.152132909476,"y":20095.33904521082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"f189c006-3adb-4b21-8b9d-342f94e7640f"}}},"id":"bd5f7149-372f-4a70-94df-4727b3cd3b32","savedPayload":{"position":{"x":25905.152132909476,"y":20095.33904521082},"targetPosition":{"x":25555.436450253837,"y":19812.144869238393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[{"type":"Text","name":"New Text","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"record.errors.length> 0","project":"Superalgos","id":"ac81077c-8c42-4c4c-b443-5faa1ad3b3b4","savedPayload":{"position":{"x":25797.32997457578,"y":20372.179722154116},"targetPosition":{"x":25602.47425872428,"y":20259.679722154116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": -15\n }","project":"Superalgos","id":"5d4e3be6-6a2b-4cca-8086-c2db9a75bd23","savedPayload":{"position":{"x":25693.990003416337,"y":20465.2274501237},"targetPosition":{"x":25602.47425872428,"y":20259.679722154116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"f189c006-3adb-4b21-8b9d-342f94e7640f"}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.errors.length","project":"Superalgos","id":"adc6d425-cfa0-47e9-a67d-444a112ee3c2","savedPayload":{"position":{"x":25555.694128290284,"y":20479.762932319223},"targetPosition":{"x":25602.47425872428,"y":20259.679722154116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.5,\n \"fontSize\": 10\n}","project":"Superalgos","id":"0907179a-16cc-4682-83af-2e7e0ad4d7ba","savedPayload":{"position":{"x":25435.266672991867,"y":20410.23410858486},"targetPosition":{"x":25602.47425872428,"y":20259.679722154116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ead7ed8a-332d-4ab1-b53e-1e9e0f705a81","savedPayload":{"position":{"x":25602.47425872428,"y":20259.679722154116},"targetPosition":{"x":25555.436450253837,"y":19812.144869238393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c2dcdcbc-31bf-4a44-b47f-a2e1bba10db9","savedPayload":{"position":{"x":25555.436450253837,"y":19812.144869238393},"targetPosition":{"x":25205.7207675982,"y":19528.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[],"nodesErrors":{"type":"Nodes Errors","name":"New Nodes Errors","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"c814ea79-0fa6-44bb-a636-d46d7b3720c4","savedPayload":{"position":{"x":25366.986344893583,"y":19949.06188518971},"targetPosition":{"x":25205.7207675982,"y":19528.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"64684730-d049-4d3c-8013-b48c5438417e","savedPayload":{"position":{"x":25205.7207675982,"y":19528.950693265968},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Status","config":"{ \n\"codeName\": \"Status\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesStatus":{"type":"Nodes Status","name":"New Nodes Status","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"2b1290d8-41ff-48a3-a11b-45f1228e2a84","savedPayload":{"position":{"x":25219.332699004037,"y":20020.84391046288},"targetPosition":{"x":25080.27505153531,"y":19592.86847813006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0437448d-8740-496b-8fce-d3804be81a2b","savedPayload":{"position":{"x":25080.27505153531,"y":19592.86847813006},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Progress","config":"{ \n\"codeName\": \"Progress\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesProgress":{"type":"Nodes Progress","name":"New Nodes Progress","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"00c9d7bc-295f-48b6-81a0-71b6bc0b6299","savedPayload":{"position":{"x":24941.217404066585,"y":20064.893045797242},"targetPosition":{"x":24941.217404066585,"y":19614.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"99aecc8d-2bc4-4748-b642-78888c2d35eb","savedPayload":{"position":{"x":24941.217404066585,"y":19614.893045797242},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Running","config":"{ \n\"codeName\": \"Running\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesRunning":{"type":"Nodes Running","name":"New Nodes Running","config":"{ \n\"nodePath\": \"\"\n}","project":"Superalgos","id":"3ef03483-8d69-452c-9f56-984574b79e32","savedPayload":{"position":{"x":24663.102109129133,"y":20020.84391046288},"targetPosition":{"x":24802.15975659786,"y":19592.86847813006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac1e8218-af24-491f-a552-736d83d68c01","savedPayload":{"position":{"x":24802.15975659786,"y":19592.86847813006},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Announcements","config":"{ \n\"codeName\": \"Announcements\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","panels":[],"nodesAnnouncements":{"type":"Nodes Announcements","name":"New Nodes Announcements","project":"Superalgos","id":"197785fc-72c7-46ef-83bf-a095b01cbfec","savedPayload":{"position":{"x":24412.210677003357,"y":19893.008340734694},"targetPosition":{"x":24676.71404053497,"y":19528.950693265968},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a3b8bea-749a-48ce-8b53-e4a731555b98","savedPayload":{"position":{"x":24676.71404053497,"y":19528.950693265968},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Warnings","config":"{ \n\"codeName\": \"Warnings\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Middle Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin + (record.end - record.begin)\ny = 0","project":"Superalgos","id":"60641507-8c97-4860-8e20-0190645c9028","savedPayload":{"position":{"x":24026.31855953257,"y":21486.854641013415},"targetPosition":{"x":23989.22992074465,"y":21131.710615915534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6667ade6-17c3-4415-9665-61b2cd65a128","savedPayload":{"position":{"x":23989.22992074465,"y":21131.710615915534},"targetPosition":{"x":23952.13413354043,"y":20776.477101811004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"52f34194-677e-4f9f-a6fb-90cb76defaa9","savedPayload":{"position":{"x":23952.13413354043,"y":20776.477101811004},"targetPosition":{"x":23914.866628465992,"y":20421.043773168527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"bullet-warning\", \n\"size\": 10\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.warnings.length> 0","project":"Superalgos","id":"daa37240-427a-42cb-aaa0-d67dc309b195","savedPayload":{"position":{"x":23662.345324086724,"y":20875.157725057943},"targetPosition":{"x":23690.330748151286,"y":20698.608063028038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"4e52702c-9902-47ab-854e-9284d5535f97","savedPayload":{"position":{"x":23523.548226273782,"y":20762.726715602428},"targetPosition":{"x":23690.330748151286,"y":20698.608063028038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"6667ade6-17c3-4415-9665-61b2cd65a128"}}},"id":"7850e440-3961-4027-b5cb-d551cb7378b0","savedPayload":{"position":{"x":23690.330748151286,"y":20698.608063028038},"targetPosition":{"x":23914.866628465992,"y":20421.043773168527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[{"type":"Text","name":"New Text","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"record.warnings.length> 0","project":"Superalgos","id":"c0348c71-25ea-455e-ba9a-bac2c52ae160","savedPayload":{"position":{"x":23476.106223371065,"y":20619.477842683515},"targetPosition":{"x":23559.68532865562,"y":20458.256837707813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": -15\n }","project":"Superalgos","id":"8b40e546-1464-4f76-a316-fa24d598a9f7","savedPayload":{"position":{"x":23390.781006507113,"y":20536.642438181694},"targetPosition":{"x":23559.68532865562,"y":20458.256837707813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"6667ade6-17c3-4415-9665-61b2cd65a128"}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.warnings.length","project":"Superalgos","id":"a115a163-0e52-457f-a4c8-fa802bf3f43b","savedPayload":{"position":{"x":23376.11878952918,"y":20420.15539066471},"targetPosition":{"x":23559.68532865562,"y":20458.256837707813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.5,\n \"fontSize\": 10\n}","project":"Superalgos","id":"2ba2d788-3f0d-4f88-b712-8db4568ab1c2","savedPayload":{"position":{"x":23447.411266743704,"y":20314.064092151217},"targetPosition":{"x":23559.68532865562,"y":20458.256837707813},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8e5362d1-e9bf-43c4-b069-e3224108076a","savedPayload":{"position":{"x":23559.68532865562,"y":20458.256837707813},"targetPosition":{"x":23914.866628465992,"y":20421.043773168527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b30412b8-45bc-4f2e-922e-8660c28ca181","savedPayload":{"position":{"x":23914.866628465992,"y":20421.043773168527},"targetPosition":{"x":24363.87948203239,"y":19866.58761833955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[],"nodesWarnings":{"type":"Nodes Warnings","name":"New Nodes Warnings","project":"Superalgos","id":"3d3a4958-90dd-458e-b1c8-a31bc1ff864c","savedPayload":{"position":{"x":23697.384035251325,"y":20121.88029406598},"targetPosition":{"x":24363.87948203239,"y":19866.58761833955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9709093-95c1-4b1b-aeb5-329c7505ab75","savedPayload":{"position":{"x":24577.15975659786,"y":19429.396409328856},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Infos","config":"{ \n\"codeName\": \"Infos\",\n\"connectTo\": \"Trading System\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Middle Point","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin + (record.end - record.begin)\ny = 0","project":"Superalgos","id":"990f865c-15f2-4d9f-af98-7328567ca132","savedPayload":{"position":{"x":23441.757922188623,"y":21103.36443499447},"targetPosition":{"x":23515.974942241388,"y":20754.132323114452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"672516ff-44dd-433e-a225-0145820bcf4b","savedPayload":{"position":{"x":23515.974942241388,"y":20754.132323114452},"targetPosition":{"x":23590.18833449328,"y":20404.82719849961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1f66a38f-e2e0-464e-8205-26fbd19545ad","savedPayload":{"position":{"x":23590.18833449328,"y":20404.82719849961},"targetPosition":{"x":23664.22801065474,"y":20055.512012425057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"bullet-info\", \n\"size\": 10\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.infos.length> 0","project":"Superalgos","id":"336f9905-b6b5-4a2d-af4b-79e393c6ea43","savedPayload":{"position":{"x":23283.586112992107,"y":20409.463456126858},"targetPosition":{"x":23364.819778941892,"y":20250.102039693717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"d96df59a-4c0a-4796-a66d-eb3402886378","savedPayload":{"position":{"x":23186.23889021938,"y":20259.601305986784},"targetPosition":{"x":23364.819778941892,"y":20250.102039693717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"672516ff-44dd-433e-a225-0145820bcf4b"}}},"id":"a75d9a2a-2c04-4cde-a4bc-30018b845ba4","savedPayload":{"position":{"x":23364.819778941892,"y":20250.102039693717},"targetPosition":{"x":23664.22801065474,"y":20055.512012425057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[{"type":"Text","name":"New Text","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"record.infos.length> 0","project":"Superalgos","id":"55bcdf23-d5c5-4b48-8876-52dd78195a14","savedPayload":{"position":{"x":23185.61259644389,"y":20108.753058817678},"targetPosition":{"x":23314.926610066625,"y":19981.24938324716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"Middle Point","config":"{ \n\"offsetX\": 0,\n \"offsetY\": -15\n }","project":"Superalgos","id":"70422153-eccc-4bfc-8b45-bafb05cc8720","savedPayload":{"position":{"x":23130.066846094483,"y":20003.599989666465},"targetPosition":{"x":23314.926610066625,"y":19981.24938324716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Middle Point","id":"672516ff-44dd-433e-a225-0145820bcf4b"}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.infos.length","project":"Superalgos","id":"38bac0f6-2e49-4def-a4fa-a997c40b7074","savedPayload":{"position":{"x":23152.17651322318,"y":19888.32387683588},"targetPosition":{"x":23314.926610066625,"y":19981.24938324716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.5,\n \"fontSize\": 10\n}","project":"Superalgos","id":"5952c7e2-ddca-41e8-aecc-4a3e33e6420e","savedPayload":{"position":{"x":23252.727217789175,"y":19809.36426677312},"targetPosition":{"x":23314.926610066625,"y":19981.24938324716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b9c1ad2c-f7ad-433b-a149-e33623cd4121","savedPayload":{"position":{"x":23314.926610066625,"y":19981.24938324716},"targetPosition":{"x":23664.22801065474,"y":20055.512012425057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a6e20b3-0cf5-42ec-b9d0-58215ed556c1","savedPayload":{"position":{"x":23664.22801065474,"y":20055.512012425057},"targetPosition":{"x":24262.31217291204,"y":19667.07007836019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[],"nodesInfos":{"type":"Nodes Infos","name":"New Nodes Infos","project":"Superalgos","id":"4183f03b-db5b-4ba7-8e4f-befc192cbe36","savedPayload":{"position":{"x":23549.553601565916,"y":19703.871255766393},"targetPosition":{"x":24262.31217291204,"y":19667.07007836019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f175df3b-a277-44bc-88db-dcf6b0e3fa38","savedPayload":{"position":{"x":24513.241971733765,"y":19303.950693265968},"targetPosition":{"x":24941.217404066585,"y":19164.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34f9d374-f4ae-4abf-96e3-978c6b8a879a","savedPayload":{"position":{"x":24941.217404066585,"y":19164.893045797242},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Trading Episode","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Episode Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"76185b66-f987-453f-8c6a-922af52e1496","savedPayload":{"position":{"x":25427.60919975209,"y":19631.77072969557},"targetPosition":{"x":25232.938190958066,"y":19678.240375209243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d36cc3b7-cf35-4b2d-9e62-af77e624bd8a","savedPayload":{"position":{"x":25232.938190958066,"y":19678.240375209243},"targetPosition":{"x":24845.000147389183,"y":19773.066561954387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"015889b5-8517-4d56-8335-b546931b7582","savedPayload":{"position":{"x":25443.265852365555,"y":19819.486587033978},"targetPosition":{"x":25243.569084746458,"y":19803.739244921046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d51a844a-acff-4717-b416-ac02113bcb84","savedPayload":{"position":{"x":25243.569084746458,"y":19803.739244921046},"targetPosition":{"x":24845.000147389183,"y":19773.066561954387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"6da64a35-215f-4e20-a1a4-b715565c9ec5","savedPayload":{"position":{"x":25399.53827765419,"y":20002.764037030935},"targetPosition":{"x":25214.525581431055,"y":19926.009858296286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cdc081f1-7080-407e-a1d8-20e71c2903f5","savedPayload":{"position":{"x":25214.525581431055,"y":19926.009858296286},"targetPosition":{"x":24845.000147389183,"y":19773.066561954387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"ef75589f-d40b-48f3-9d22-c3819d4362d6","savedPayload":{"position":{"x":25298.93083741564,"y":20165.28813323237},"targetPosition":{"x":25146.869386439772,"y":20035.034797671662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a53dfccb-7edd-4b83-84dc-56f62fb77e2e","savedPayload":{"position":{"x":25146.869386439772,"y":20035.034797671662},"targetPosition":{"x":24845.000147389183,"y":19773.066561954387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"75792ba3-caac-448f-976a-2e0beaa5fb15","savedPayload":{"position":{"x":24845.000147389183,"y":19773.066561954387},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"aab82eaa-0871-4f3c-a133-f211a2de6a5d","savedPayload":{"position":{"x":24245.979671521156,"y":20232.976397686947},"targetPosition":{"x":24078.779762334307,"y":20577.500690620127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 2,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 2,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"2eff63cf-253f-46a3-b434-2e793943f39a","savedPayload":{"position":{"x":24792.55059602381,"y":20747.205554246633},"targetPosition":{"x":24450.783855635804,"y":20666.160678812274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4b53ad47-88ba-4e43-b0c6-da437e26469b","savedPayload":{"position":{"x":24450.783855635804,"y":20666.160678812274},"targetPosition":{"x":24078.779762334307,"y":20577.500690620127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"b06f7ce1-592a-46e1-99ae-6d5b728b7ce6","savedPayload":{"position":{"x":24109.91297694319,"y":20958.129613361627},"targetPosition":{"x":24078.779762334307,"y":20577.500690620127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"d36cc3b7-cf35-4b2d-9e62-af77e624bd8a"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"1d460f06-361e-4e8a-a119-02e7d1d40b14","savedPayload":{"position":{"x":23694.349050710403,"y":20714.58276632412},"targetPosition":{"x":24078.779762334307,"y":20577.500690620127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"cdc081f1-7080-407e-a1d8-20e71c2903f5"}}}],"id":"7237c558-a0e5-46c6-8cf5-ebc555e98efb","savedPayload":{"position":{"x":24769.415570056815,"y":19919.10435787508},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"dac76f26-8574-413e-9a59-c3d22393f884","savedPayload":{"position":{"x":24125.34951961687,"y":20448.114324078524},"targetPosition":{"x":23839.69732282563,"y":20712.286183561904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 2,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 2,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"01979f43-b2d9-4efb-beae-be89986ad308","savedPayload":{"position":{"x":24434.580644591468,"y":21141.89978871252},"targetPosition":{"x":24149.491183441933,"y":20936.062861603354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"31d548c0-90ae-456a-80c1-f11da75d9203","savedPayload":{"position":{"x":24149.491183441933,"y":20936.062861603354},"targetPosition":{"x":23839.69732282563,"y":20712.286183561904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"7732c454-a983-4af6-aa1b-4ac89412c735","savedPayload":{"position":{"x":23723.10471225306,"y":21076.13322759533},"targetPosition":{"x":23839.69732282563,"y":20712.286183561904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"d36cc3b7-cf35-4b2d-9e62-af77e624bd8a"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"bdff1a41-c544-44ba-aafb-db30fa1ef9a1","savedPayload":{"position":{"x":23433.160941247017,"y":20691.996021616073},"targetPosition":{"x":23839.69732282563,"y":20712.286183561904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"cdc081f1-7080-407e-a1d8-20e71c2903f5"}}}],"id":"4958982a-b51a-40ef-8764-dd5451cf9837","savedPayload":{"position":{"x":24650.05497860393,"y":20029.578348366314},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"7965d803-ccde-40ec-b09f-dc50b498257c","savedPayload":{"position":{"x":23537.03154447312,"y":16160.650063190064},"targetPosition":{"x":23765.91706815518,"y":16346.103988950654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"63e9bbd0-f235-4ec7-a6bc-9ab46db2d307","savedPayload":{"position":{"x":23765.91706815518,"y":16346.103988950654},"targetPosition":{"x":24033.39056085776,"y":16562.828459543056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"3bec1e67-abaf-428e-b443-dc27969767b5","savedPayload":{"position":{"x":23997.561263329026,"y":16220.41623451958},"targetPosition":{"x":24033.39056085776,"y":16562.828459543056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"d36cc3b7-cf35-4b2d-9e62-af77e624bd8a"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"471fc78f-4538-4834-bbed-a329d1e4601e","savedPayload":{"position":{"x":24250.164232306724,"y":16295.06035250861},"targetPosition":{"x":24033.39056085776,"y":16562.828459543056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"d51a844a-acff-4717-b416-ac02113bcb84"}}}],"id":"86fefa5e-8de8-4d00-a632-e1827ce60030","savedPayload":{"position":{"x":24497.63904292664,"y":20085.95117843772},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"c4bb446c-e574-4e59-afed-3538eab694d5","savedPayload":{"position":{"x":23657.715624489734,"y":16122.358204813214},"targetPosition":{"x":23865.460538755982,"y":16330.280713946628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"6f0d820a-fb29-48d7-89f1-d1ea5a74e653","savedPayload":{"position":{"x":23865.460538755982,"y":16330.280713946628},"targetPosition":{"x":24094.89791082273,"y":16559.93821830005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"ef071433-8fc9-4d59-a4c5-9bd2e7bc4fb0","savedPayload":{"position":{"x":24094.896121211164,"y":16234.255474737212},"targetPosition":{"x":24094.89791082273,"y":16559.93821830005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"cdc081f1-7080-407e-a1d8-20e71c2903f5"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"c4f97c3d-8990-4091-8ff0-638afe58c282","savedPayload":{"position":{"x":24325.4610126125,"y":16329.333935430455},"targetPosition":{"x":24094.89791082273,"y":16559.93821830005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"a53dfccb-7edd-4b83-84dc-56f62fb77e2e"}}}],"id":"79a3b846-3b23-4c01-9aa1-cedcebb5ca03","savedPayload":{"position":{"x":24335.491203518046,"y":20079.658749080834},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"episode\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"c03a6ea3-1555-4c1d-b268-d6e1032fd656","savedPayload":{"position":{"x":24070.03168610451,"y":20173.585929165576},"targetPosition":{"x":24187.7731712701,"y":20011.42469680636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"d36cc3b7-cf35-4b2d-9e62-af77e624bd8a"}}},"id":"ad9be6ea-d6dd-4c5d-932a-8b34d322fa76","savedPayload":{"position":{"x":24187.7731712701,"y":20011.42469680636},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"episode\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"45d5d8a0-92e4-4e20-af13-8ea425c068cb","savedPayload":{"position":{"x":23906.149483423887,"y":19996.213392145008},"targetPosition":{"x":24077.15070623846,"y":19891.666454330654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"cdc081f1-7080-407e-a1d8-20e71c2903f5"}}},"id":"5bc2bd0b-c164-432b-abb6-269dbca0f627","savedPayload":{"position":{"x":24077.15070623846,"y":19891.666454330654},"targetPosition":{"x":24432.704392618998,"y":19674.341377278408},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"0d8e669e-47fd-41f7-8108-8df3e7acd5ef","savedPayload":{"position":{"x":24375.216810266797,"y":19795.748902132946},"targetPosition":{"x":24304.821300998694,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Episode Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"b5d632ba-523a-401c-84db-1ce47efa7059","savedPayload":{"position":{"x":24538.903008738773,"y":20265.51611152992},"targetPosition":{"x":24392.77719786448,"y":20094.424769269914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0ccc88ff-cae0-46e6-8e91-36dd4b185d12","savedPayload":{"position":{"x":24392.77719786448,"y":20094.424769269914},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"3292dd95-270f-490b-bba8-0eb82afa4b29","savedPayload":{"position":{"x":24309.112047318988,"y":20394.205233249126},"targetPosition":{"x":24239.583223584625,"y":20180.217517082718},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f7b5fd21-8167-4949-be53-8de453a38904","savedPayload":{"position":{"x":24239.583223584625,"y":20180.217517082718},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"7a945058-1f89-420d-94ea-6c01142e814a","savedPayload":{"position":{"x":24047.5656864996,"y":20425.16128501976},"targetPosition":{"x":24065.21898303837,"y":20200.854884929806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"03168102-4498-4cc9-a685-1fea8ec5d208","savedPayload":{"position":{"x":24065.21898303837,"y":20200.854884929806},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Rate","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"15ec12a6-815c-4432-a16b-d2600297aa83","savedPayload":{"position":{"x":23794.081988791706,"y":20353.671488577045},"targetPosition":{"x":23896.229851233104,"y":20153.195020634663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"534c09c7-1812-4266-ba81-b9fc8cf3d070","savedPayload":{"position":{"x":23896.229851233104,"y":20153.195020634663},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Rate","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"bf1f2748-56f4-451a-87dc-8cd385d649de","savedPayload":{"position":{"x":23587.25154933588,"y":20190.619517372772},"targetPosition":{"x":23758.342891595887,"y":20044.49370649848},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"54b9bfa4-3d94-4a39-b7ae-e5c882022fcf","savedPayload":{"position":{"x":23758.342891595887,"y":20044.49370649848},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin","config":"{\n }","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"UI.projects.superalgos.utilities.dates.formatDate(record.begin)","project":"Superalgos","id":"6ad056b5-bcf6-4e6a-88d6-9435c67765e5","savedPayload":{"position":{"x":23458.56242761667,"y":19960.828555952987},"targetPosition":{"x":23672.55014378308,"y":19891.299732218624},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"70bc2470-d0e3-48a0-97c2-67189f3aaa9c","savedPayload":{"position":{"x":23672.55014378308,"y":19891.299732218624},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End","config":"{\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"UI.projects.superalgos.utilities.dates.formatDate(record.end)","project":"Superalgos","id":"81c41360-308d-4609-9a3b-b234a65fa49a","savedPayload":{"position":{"x":23427.606375846037,"y":19699.2821951336},"targetPosition":{"x":23651.91277593599,"y":19716.935491672368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4daad4f7-a1db-40d1-a88e-fe4669b422f5","savedPayload":{"position":{"x":23651.91277593599,"y":19716.935491672368},"targetPosition":{"x":24100.5255761159,"y":19752.242084749898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bcbb3368-ea4c-466b-8423-8f0517ad35da","savedPayload":{"position":{"x":24100.5255761159,"y":19752.242084749898},"targetPosition":{"x":24304.821300998694,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Episode Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Hits","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitsInBaseAsset","project":"Superalgos","id":"178cea7f-657c-47b5-bf08-783fccf30abd","savedPayload":{"position":{"x":24044.659383650134,"y":20444.504380283553},"targetPosition":{"x":23974.26387438203,"y":20000.04462701574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d06bfec8-344e-4d09-ad45-5d881051c86d","savedPayload":{"position":{"x":23974.26387438203,"y":20000.04462701574},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fails","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.failsInBaseAsset","project":"Superalgos","id":"9b2e4688-d344-4aaf-a819-fb37e2d7f01f","savedPayload":{"position":{"x":23763.077346577724,"y":20444.504380283553},"targetPosition":{"x":23833.472855845826,"y":20000.04462701574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3456d30c-437f-475a-b6d4-86c56c5c5875","savedPayload":{"position":{"x":23833.472855845826,"y":20000.04462701574},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Ratio","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitRatioInBaseAsset","project":"Superalgos","id":"43ffaa8c-1678-40bc-8b89-1d3613b0bf80","savedPayload":{"position":{"x":23495.27691534834,"y":20357.490745517458},"targetPosition":{"x":23699.572640231134,"y":19956.537809632693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c9328b65-a3e0-4c81-9e7f-321d02566f6a","savedPayload":{"position":{"x":23699.572640231134,"y":19956.537809632693},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLossInBaseAsset","project":"Superalgos","id":"b1750d80-b1a6-4e57-b575-176c5c63cc85","savedPayload":{"position":{"x":23267.472262046038,"y":20191.98097681582},"targetPosition":{"x":23585.670313579983,"y":19873.782925281874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"91a729d3-1a8d-44c6-89f6-548456b1e300","savedPayload":{"position":{"x":23585.670313579983,"y":19873.782925281874},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROIInBaseAsset","project":"Superalgos","id":"57eb486f-3069-4df2-a095-7ae86f3c849e","savedPayload":{"position":{"x":23101.9624933444,"y":19964.17632351352},"targetPosition":{"x":23502.915429229164,"y":19759.880598630723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c0532fa-8338-4659-acdb-4429c00c69f5","savedPayload":{"position":{"x":23502.915429229164,"y":19759.880598630723},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Annualized Rate Of Return","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.annualizedRateOfReturnInBaseAsset","project":"Superalgos","id":"9668524f-81b7-4805-a095-729344436bdc","savedPayload":{"position":{"x":23014.948858578304,"y":19696.375892284133},"targetPosition":{"x":23459.408611846116,"y":19625.98038301603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"01f3e8f9-42bd-477d-a073-ece04b3462c3","savedPayload":{"position":{"x":23459.408611846116,"y":19625.98038301603},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFailInBaseAsset","project":"Superalgos","id":"5530bf09-a7d7-4721-b6c9-35959c6ef57f","savedPayload":{"position":{"x":23014.948858578304,"y":19414.793855211723},"targetPosition":{"x":23459.408611846116,"y":19485.189364479826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e6a87a47-eb70-41c8-9b56-37bb3c1cff42","savedPayload":{"position":{"x":23459.408611846116,"y":19485.189364479826},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Balance","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginBalanceInBaseAsset","project":"Superalgos","id":"bdcfb0ac-dd92-47c6-b1ce-2052125a69d3","savedPayload":{"position":{"x":23101.9624933444,"y":19146.993423982338},"targetPosition":{"x":23502.915429229164,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"05d8cc70-c3e8-416e-9976-94aabb6fb850","savedPayload":{"position":{"x":23502.915429229164,"y":19351.289148865133},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Balance","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endBalanceInBaseAsset","project":"Superalgos","id":"e93cb7de-6d1a-496d-8adc-23e546ccae20","savedPayload":{"position":{"x":23267.472262046038,"y":18919.188770680037},"targetPosition":{"x":23585.670313579983,"y":19237.386822213983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5f28fda1-332a-4052-abac-3586386868df","savedPayload":{"position":{"x":23585.670313579983,"y":19237.386822213983},"targetPosition":{"x":23903.86836511393,"y":19555.58487374793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b18a5300-448b-4165-9b36-dc5ee37e58cd","savedPayload":{"position":{"x":23903.86836511393,"y":19555.58487374793},"targetPosition":{"x":24304.821300998694,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Episode Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Hits","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitsInQuotedAsset","project":"Superalgos","id":"68babd3f-d90c-4df0-9050-746d17ab3ea1","savedPayload":{"position":{"x":23451.77009796529,"y":20082.79951136656},"targetPosition":{"x":23656.065822848086,"y":19681.846575481795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"962215d1-1e67-43c7-9a7c-01f5e6f9e6e8","savedPayload":{"position":{"x":23656.065822848086,"y":19681.846575481795},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fails","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.failsInQuotedAsset","project":"Superalgos","id":"9040394b-4c9c-4873-914c-31073717f3d7","savedPayload":{"position":{"x":23223.96544466299,"y":19917.28974266492},"targetPosition":{"x":23542.163496196936,"y":19599.091691130976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe5a306c-7f59-43aa-bf1e-62ad7639a87f","savedPayload":{"position":{"x":23542.163496196936,"y":19599.091691130976},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Ratio","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitRatioInQuotedAsset","project":"Superalgos","id":"c30aadb6-44a2-400d-96b2-a51c2eaccacf","savedPayload":{"position":{"x":23058.45567596135,"y":19689.48508936262},"targetPosition":{"x":23459.408611846116,"y":19485.189364479826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"19fb6789-7b00-4e86-bfde-775bcd813300","savedPayload":{"position":{"x":23459.408611846116,"y":19485.189364479826},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLossInQuotedAsset","project":"Superalgos","id":"b296257d-c3fd-406f-85de-b89121b332f6","savedPayload":{"position":{"x":22971.442041195256,"y":19421.684658133236},"targetPosition":{"x":23415.90179446307,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dad82788-bdb3-4df2-9cfd-2a8d22a2278f","savedPayload":{"position":{"x":23415.90179446307,"y":19351.289148865133},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROIInQuotedAsset","project":"Superalgos","id":"88e43d30-c26b-4d43-ba1a-e2a318154b95","savedPayload":{"position":{"x":22971.442041195256,"y":19140.102621060825},"targetPosition":{"x":23415.90179446307,"y":19210.498130328928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"54f32b24-0657-4be3-a24c-ea988797f93a","savedPayload":{"position":{"x":23415.90179446307,"y":19210.498130328928},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Annualized Rate Of Return","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.annualizedRateOfReturnInQuotedAsset","project":"Superalgos","id":"e30aa4c9-50ef-40a6-bf65-ae8674eddd3f","savedPayload":{"position":{"x":23058.45567596135,"y":18872.30218983144},"targetPosition":{"x":23459.408611846116,"y":19076.597914714235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b94cbb0-ec78-4a85-b815-06533aaa7ea9","savedPayload":{"position":{"x":23459.408611846116,"y":19076.597914714235},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFailInQuotedAsset","project":"Superalgos","id":"38b3d1b7-f954-4042-abfb-1fd9167e0e35","savedPayload":{"position":{"x":23223.96544466299,"y":18644.49753652914},"targetPosition":{"x":23542.163496196936,"y":18962.695588063085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"524a686a-eadf-4652-a2ca-f73f40dc10f1","savedPayload":{"position":{"x":23542.163496196936,"y":18962.695588063085},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Balance","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginBalanceInQuotedAsset","project":"Superalgos","id":"78d24874-e442-4b7d-9602-b434fa246640","savedPayload":{"position":{"x":23451.77009796529,"y":18478.9877678275},"targetPosition":{"x":23656.065822848086,"y":18879.940703712266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"480cfd81-87e5-4022-ac2b-9adb7f04c105","savedPayload":{"position":{"x":23656.065822848086,"y":18879.940703712266},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Balance","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endBalanceInQuotedAsset","project":"Superalgos","id":"abe4d95f-ae51-4237-8bda-0d2ec08ef13c","savedPayload":{"position":{"x":23719.570529194676,"y":18391.974133061405},"targetPosition":{"x":23789.96603846278,"y":18836.433886329218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0245f0f4-59c6-4f14-8ec9-5a80ab0cd05e","savedPayload":{"position":{"x":23789.96603846278,"y":18836.433886329218},"targetPosition":{"x":23860.36154773088,"y":19280.89363959703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dbdd55de-9279-48ef-a0b1-e50024f284e9","savedPayload":{"position":{"x":23860.36154773088,"y":19280.89363959703},"targetPosition":{"x":24304.821300998694,"y":19351.289148865133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b7320c91-b8aa-4642-bd11-a1efb2a88d39","savedPayload":{"position":{"x":24304.821300998694,"y":19351.289148865133},"targetPosition":{"x":24623.01935253264,"y":19033.091097331187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"12f444b2-b8e7-48ef-9ea1-9cbe5489f942","savedPayload":{"position":{"x":24623.01935253264,"y":19033.091097331187},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Trading Strategy","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Strategy Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = 0","project":"Superalgos","id":"458c8a52-4191-4fa5-b4f7-a0eb2edfcdc8","savedPayload":{"position":{"x":23673.031603122057,"y":19570.982297667073},"targetPosition":{"x":23570.047532580196,"y":19442.973500913187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a464e820-57a7-4233-b23b-e802fc9b3a33","savedPayload":{"position":{"x":23570.047532580196,"y":19442.973500913187},"targetPosition":{"x":23352.431821974955,"y":19172.245715531662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"3abb7e03-f8f3-4956-9729-756e7974c5a0","savedPayload":{"position":{"x":23534.01580878851,"y":19650.751238925084},"targetPosition":{"x":23475.69111797499,"y":19497.117910011708},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d2e900e2-444c-4268-b07a-fc41811c82d8","savedPayload":{"position":{"x":23475.69111797499,"y":19497.117910011708},"targetPosition":{"x":23352.431821974955,"y":19172.245715531662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = 0","project":"Superalgos","id":"5ef24a29-2154-4304-ae0d-e046db069042","savedPayload":{"position":{"x":23376.80753939302,"y":19682.75925339549},"targetPosition":{"x":23369.0567542045,"y":19519.26706893857},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e960d99e-f263-4ee8-9801-9b97f534bd5e","savedPayload":{"position":{"x":23369.0567542045,"y":19519.26706893857},"targetPosition":{"x":23352.431821974955,"y":19172.245715531662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"6d7f55b1-11df-4598-bab9-32a02ae6fa33","savedPayload":{"position":{"x":23217.43367888208,"y":19666.326567848617},"targetPosition":{"x":23261.188708707676,"y":19506.62044651284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3a8be5c7-aff5-4283-bd17-dadd6dddda4d","savedPayload":{"position":{"x":23261.188708707676,"y":19506.62044651284},"targetPosition":{"x":23352.431821974955,"y":19172.245715531662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87bdc7ca-4228-48a3-ab2d-4eba01abfa2e","savedPayload":{"position":{"x":24090.16004712051,"y":19461.6134806313},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"3d4e39c7-4178-4557-95b9-0bb94a15135c","savedPayload":{"position":{"x":23458.034916247892,"y":19095.896634054898},"targetPosition":{"x":23096.330833588872,"y":19175.230567710623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 4,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 4,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"83329324-581e-42e2-948e-7d06a3d9066c","savedPayload":{"position":{"x":23395.314169592093,"y":19811.027853873587},"targetPosition":{"x":23255.299233616654,"y":19513.51419379196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"4a04b54a-70b9-4e92-a474-d6ef03a97f26","savedPayload":{"position":{"x":23255.299233616654,"y":19513.51419379196},"targetPosition":{"x":23096.330833588872,"y":19175.230567710623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"b3a7f670-c86e-4382-93ee-bb6dbabfd159","savedPayload":{"position":{"x":22823.906812133944,"y":19431.684029138312},"targetPosition":{"x":23096.330833588872,"y":19175.230567710623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"a464e820-57a7-4233-b23b-e802fc9b3a33"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"0e17c75c-09f4-49ae-8e6a-55fdfd89f428","savedPayload":{"position":{"x":22759.97151481076,"y":18968.006912231718},"targetPosition":{"x":23096.330833588872,"y":19175.230567710623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"e960d99e-f263-4ee8-9801-9b97f534bd5e"}}}],"id":"9ae59a68-71fd-4ec8-9a70-da743f33baee","savedPayload":{"position":{"x":23932.68597436272,"y":19539.271099330323},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"5eb17be1-910b-4da5-959b-e7cf21dfa896","savedPayload":{"position":{"x":23232.584473975658,"y":19125.115409062902},"targetPosition":{"x":22859.18144953736,"y":19079.566504230155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 4,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 4,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"f790de9e-e87a-4f2a-86d5-c8f69d4b9525","savedPayload":{"position":{"x":22892.2516308732,"y":19781.12411657158},"targetPosition":{"x":22876.75695077428,"y":19453.107373591916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"a4e077b1-7bc7-4d90-b796-b4e808985b89","savedPayload":{"position":{"x":22876.75695077428,"y":19453.107373591916},"targetPosition":{"x":22859.18144953736,"y":19079.566504230155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"b158074f-5013-4899-b61b-232eb519370c","savedPayload":{"position":{"x":22509.604963398855,"y":19212.216856709278},"targetPosition":{"x":22859.18144953736,"y":19079.566504230155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"a464e820-57a7-4233-b23b-e802fc9b3a33"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"365ee7e7-0529-4acc-a77f-d596c195399f","savedPayload":{"position":{"x":22627.923464950298,"y":18759.529686353388},"targetPosition":{"x":22859.18144953736,"y":19079.566504230155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"e960d99e-f263-4ee8-9801-9b97f534bd5e"}}}],"id":"504f327c-a08d-4c3d-8e77-850299cc30ed","savedPayload":{"position":{"x":23757.480617567562,"y":19550.754665118457},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"e2422730-fb47-4014-a707-8c346d6bc327","savedPayload":{"position":{"x":23864.690743282812,"y":16265.600788433647},"targetPosition":{"x":24093.576266964872,"y":16451.054714194237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bbd7ee22-fb16-4b59-9e0c-04018e9dd3fa","savedPayload":{"position":{"x":24093.576266964872,"y":16451.054714194237},"targetPosition":{"x":24361.04975966745,"y":16667.77918478664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"a3a9eca0-36f3-4058-b8d7-872ce77209cd","savedPayload":{"position":{"x":24325.220462138717,"y":16325.366959763163},"targetPosition":{"x":24361.04975966745,"y":16667.77918478664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"a464e820-57a7-4233-b23b-e802fc9b3a33"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"d480fdc6-89e5-4547-a2ae-17ff5e4fc917","savedPayload":{"position":{"x":24577.823431116416,"y":16400.01107775219},"targetPosition":{"x":24361.04975966745,"y":16667.77918478664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"d2e900e2-444c-4268-b07a-fc41811c82d8"}}}],"id":"f9500afd-e0f4-45d3-9647-45ec778554e8","savedPayload":{"position":{"x":23591.217404066585,"y":19494.31590920324},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"03ebe379-fb32-47fc-bfd6-b9ccc73bfd16","savedPayload":{"position":{"x":23985.374823299426,"y":16227.308930056797},"targetPosition":{"x":24193.119737565674,"y":16435.23143919021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"054fcea5-2f72-4439-be45-c289a3bdab14","savedPayload":{"position":{"x":24193.119737565674,"y":16435.23143919021},"targetPosition":{"x":24422.55710963242,"y":16664.888943543632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"a0b737cf-ec7b-4026-870c-cebec148464f","savedPayload":{"position":{"x":24422.555320020856,"y":16339.206199980796},"targetPosition":{"x":24422.55710963242,"y":16664.888943543632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"e960d99e-f263-4ee8-9801-9b97f534bd5e"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"fceb54ef-473e-4062-9407-ec64e9040504","savedPayload":{"position":{"x":24653.120211422192,"y":16434.28466067404},"targetPosition":{"x":24422.55710963242,"y":16664.888943543632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"3a8be5c7-aff5-4283-bd17-dadd6dddda4d"}}}],"id":"354102dd-fd58-4f84-8e90-0d891defa0c8","savedPayload":{"position":{"x":23459.208400935528,"y":19378.547120554165},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"strategy\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"64c0d038-c401-4317-84fd-b73e1b210d00","savedPayload":{"position":{"x":23164.217471321463,"y":19279.307332944445},"targetPosition":{"x":23381.550782236503,"y":19221.073047796377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"a464e820-57a7-4233-b23b-e802fc9b3a33"}}},"id":"01f6ebd3-e14f-4434-a0fb-1d8167122ce3","savedPayload":{"position":{"x":23381.550782236503,"y":19221.073047796377},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"strategy\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"56f86edf-c2cc-491b-8cea-4bae0f03ebfd","savedPayload":{"position":{"x":23146.99212263926,"y":19016.499297751707},"targetPosition":{"x":23370.06721644837,"y":19045.86769100122},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"e960d99e-f263-4ee8-9801-9b97f534bd5e"}}},"id":"df6a3044-b207-4564-8c28-8d64c679ee9a","savedPayload":{"position":{"x":23370.06721644837,"y":19045.86769100122},"targetPosition":{"x":23816.217404066585,"y":19104.60447750024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"b02b7fee-30b0-41f0-ae06-a073c57289d9","savedPayload":{"position":{"x":23816.217404066585,"y":19104.60447750024},"targetPosition":{"x":24041.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Strategy Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"b037ec89-e05b-432c-9b61-da05bda134cc","savedPayload":{"position":{"x":23479.661122517937,"y":18350.40302067966},"targetPosition":{"x":23591.84654970082,"y":18341.995885151187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0316c81d-7b05-42cb-876e-19d25eb1896a","savedPayload":{"position":{"x":23591.84654970082,"y":18341.995885151187},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"ed7a2560-35b9-4142-bd68-77347bf66b89","savedPayload":{"position":{"x":23502.047513899164,"y":18201.879018370582},"targetPosition":{"x":23606.770810621638,"y":18242.979883611803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5d9060d4-50fb-4cda-8037-85f7ffae5c27","savedPayload":{"position":{"x":23606.770810621638,"y":18242.979883611803},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.strategyName","project":"Superalgos","id":"925d79c1-efdd-4555-baba-72e686294057","savedPayload":{"position":{"x":23586.6591050689,"y":18077.776607351676},"targetPosition":{"x":23663.17853806813,"y":18160.24494293253},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1a4951ef-23ae-4228-8479-a0fe687c2d82","savedPayload":{"position":{"x":23663.17853806813,"y":18160.24494293253},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Triggered By Situation","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"24317532-e6bf-4827-9196-e052fe28bcb3","savedPayload":{"position":{"x":23716.737532702904,"y":18002.67579214142},"targetPosition":{"x":23749.897489824132,"y":18110.177732792363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6c79326f-b90c-4155-8f61-8ee2322b9b09","savedPayload":{"position":{"x":23749.897489824132,"y":18110.177732792363},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"2a35de7b-ad59-439b-aa6c-0668ffd92816","savedPayload":{"position":{"x":23866.519168901043,"y":17991.45121024326},"targetPosition":{"x":23849.751913956225,"y":18102.694678193588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6a34a5de-3b89-4f07-a947-5b94c8926dc1","savedPayload":{"position":{"x":23849.751913956225,"y":18102.694678193588},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"33bd5e59-f2bf-4b5c-bd74-6975e07b3056","savedPayload":{"position":{"x":24006.337923663057,"y":18046.326027762596},"targetPosition":{"x":23942.9644171309,"y":18139.277889873145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a0c5053d-5b1e-4f7e-8edb-58baaaa8a45a","savedPayload":{"position":{"x":23942.9644171309,"y":18139.277889873145},"targetPosition":{"x":23816.217404066585,"y":18325.181614094243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b256b76c-3834-4d62-aa56-f42cce9f47e9","savedPayload":{"position":{"x":23816.217404066585,"y":18325.181614094243},"targetPosition":{"x":24041.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d54a124c-6029-41a6-9bbd-bb3fe8b1a318","savedPayload":{"position":{"x":24041.217404066585,"y":18714.893045797242},"targetPosition":{"x":24491.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"62890699-eabf-4ea8-8ca0-cac07cc06dea","savedPayload":{"position":{"x":24491.217404066585,"y":18714.893045797242},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Trading Position","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Position Objects","config":"{ \n \"codeName\": \"Position-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Left Exit Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.exitTargetRate","project":"Superalgos","id":"594bc655-cbf0-4e81-8fcc-b0f001e71fc4","savedPayload":{"position":{"x":23372.89131831053,"y":19594.166578643504},"targetPosition":{"x":23258.289226615554,"y":19452.589943059153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3b122c9b-56d5-4cb6-86ba-12d1919aeeba","savedPayload":{"position":{"x":23258.289226615554,"y":19452.589943059153},"targetPosition":{"x":23028.47649584858,"y":19168.88288477962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Exit Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.exitTargetRate","project":"Superalgos","id":"ef80ea85-cfba-4fa6-9646-3688f54f33ba","savedPayload":{"position":{"x":23056.792676404817,"y":19714.77684558158},"targetPosition":{"x":23047.457563011074,"y":19533.740963507993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eb3dd27b-831c-47ae-8a19-1b01626add98","savedPayload":{"position":{"x":23047.457563011074,"y":19533.740963507993},"targetPosition":{"x":23028.47649584858,"y":19168.88288477962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Left Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.entryTargetRate","project":"Superalgos","id":"cdc9f3f0-3bca-4c9c-901f-1371aad3dcfe","savedPayload":{"position":{"x":22730.669448976547,"y":19627.42686922161},"targetPosition":{"x":22829.732153144694,"y":19474.879679402802},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b61fa42b-45d1-416b-b06b-734d33223a80","savedPayload":{"position":{"x":22829.732153144694,"y":19474.879679402802},"targetPosition":{"x":23028.47649584858,"y":19168.88288477962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.entryTargetRate","project":"Superalgos","id":"c450be56-8c02-4039-9b4a-8e0bde52fcc6","savedPayload":{"position":{"x":22517.899313523405,"y":19364.533311359763},"targetPosition":{"x":22687.304882078766,"y":19299.63546617169},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"467129cb-1aa4-4639-ab0f-74d14146f721","savedPayload":{"position":{"x":22687.304882078766,"y":19299.63546617169},"targetPosition":{"x":23028.47649584858,"y":19168.88288477962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"774f0a60-aa67-408f-9768-8a24f5b9c033","savedPayload":{"position":{"x":24079.821300998694,"y":19337.541618092513},"targetPosition":{"x":23963.352730702558,"y":18902.87499626243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Entry Target Rate Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 2,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 3,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"bc128809-8c93-4f5d-9de9-4e0b28c1132e","savedPayload":{"position":{"x":21462.0855205249,"y":19494.420337141244},"targetPosition":{"x":21975.50998714314,"y":18981.053483751624},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"cbd2cb8e-ca62-4b68-9bca-11ad55e50fb1","savedPayload":{"position":{"x":21975.50998714314,"y":18981.053483751624},"targetPosition":{"x":22489.031257440536,"y":18467.716125216677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"e1fc573d-a98e-4801-af1f-08f56d98a78a","savedPayload":{"position":{"x":21762.882913942445,"y":18467.716005129925},"targetPosition":{"x":22489.031257440536,"y":18467.716125216677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"b61fa42b-45d1-416b-b06b-734d33223a80"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"72aece06-d0ac-4068-8310-7037f0ba4943","savedPayload":{"position":{"x":21975.60058357288,"y":17954.297287620375},"targetPosition":{"x":22489.031257440536,"y":18467.716125216677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"467129cb-1aa4-4639-ab0f-74d14146f721"}}}],"id":"543ebae2-5624-49ad-a00f-df63335e92a9","savedPayload":{"position":{"x":23738.352730702558,"y":19292.58642796543},"targetPosition":{"x":23963.352730702558,"y":18902.87499626243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Exit Target Rate Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 2,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 3,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"8737606b-fbf1-4e8e-a124-930ec555d3d6","savedPayload":{"position":{"x":21256.28928373682,"y":19005.553773101605},"targetPosition":{"x":21885.1239293732,"y":18642.568827656476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"477ff931-5b51-4d4f-acff-3a14c7028a52","savedPayload":{"position":{"x":21885.1239293732,"y":18642.568827656476},"targetPosition":{"x":22513.99599403495,"y":18279.565926553114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Exit Target Rate","project":"Superalgos","id":"b849d38a-644a-470a-a110-d250b5e9d5f3","savedPayload":{"position":{"x":21812.569736612473,"y":18091.692025952238},"targetPosition":{"x":22513.99599403495,"y":18279.565926553114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Exit Target Rate","id":"3b122c9b-56d5-4cb6-86ba-12d1919aeeba"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"dc283f46-e843-40b1-ab59-6d38ab0b7741","savedPayload":{"position":{"x":22150.94314223121,"y":17650.710827287014},"targetPosition":{"x":22513.99599403495,"y":18279.565926553114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"eb3dd27b-831c-47ae-8a19-1b01626add98"}}}],"id":"b066c240-8552-4622-9597-77e812491910","savedPayload":{"position":{"x":23528.686108872476,"y":19019.343566558568},"targetPosition":{"x":23963.352730702558,"y":18902.87499626243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"d99cb56a-d182-4672-9e89-54bb809eff30","savedPayload":{"position":{"x":23963.352730702558,"y":18902.87499626243},"targetPosition":{"x":24188.352730702558,"y":18513.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Position Object","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"482e894d-68a1-499f-b55e-97827c1df506","savedPayload":{"position":{"x":23302.956041198773,"y":19420.909541569563},"targetPosition":{"x":23308.310523146647,"y":19195.973262763608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5a612794-8d2e-4689-82ce-f6bdcba13755","savedPayload":{"position":{"x":23308.310523146647,"y":19195.973262763608},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"d1f7c811-2a35-44a0-8908-2076f59ab2ad","savedPayload":{"position":{"x":23113.491104760207,"y":19389.049446558405},"targetPosition":{"x":23182.000565520935,"y":19174.733199422837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"32444aa5-bc40-4905-97e7-f795118fc229","savedPayload":{"position":{"x":23182.000565520935,"y":19174.733199422837},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Situation Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"8ae3f86b-d0f8-4851-a477-02d0960fb4e5","savedPayload":{"position":{"x":22940.67685552979,"y":19305.101468281875},"targetPosition":{"x":23066.79106603399,"y":19118.767880571817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8fd749c8-cdc1-4a20-8901-d22fdd70612d","savedPayload":{"position":{"x":23066.79106603399,"y":19118.767880571817},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Entry Target Rate","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.entryTargetRate","project":"Superalgos","id":"b97f9930-22b1-4e18-9d12-f2adc9de796d","savedPayload":{"position":{"x":22798.513676214257,"y":19175.866572682087},"targetPosition":{"x":22972.01561315697,"y":19032.61128350529},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"08193c38-6100-40cf-84e9-533cd29ca463","savedPayload":{"position":{"x":22972.01561315697,"y":19032.61128350529},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Target Rate","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitTargetRate","project":"Superalgos","id":"305c84ca-413b-462a-b908-8be894e80197","savedPayload":{"position":{"x":22698.51878212477,"y":19011.814602411014},"targetPosition":{"x":22905.352350430647,"y":18923.243303324576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"87fcd4c7-8315-4b89-8c6a-ca8d6ede7a25","savedPayload":{"position":{"x":22905.352350430647,"y":18923.243303324576},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Position Begin Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"c7d06e13-042f-4e12-8093-b9f27dc8e655","savedPayload":{"position":{"x":22648.793164887924,"y":18826.236072445383},"targetPosition":{"x":22872.201938939415,"y":18799.524283347488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"67fb7b91-c601-48dd-9d79-5188dc43a921","savedPayload":{"position":{"x":22872.201938939415,"y":18799.524283347488},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Position End Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"4f114564-7657-4037-9f5e-43e2fcfb75a5","savedPayload":{"position":{"x":22653.365298282617,"y":18634.165451604997},"targetPosition":{"x":22875.25002786921,"y":18671.47720278723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a0921f86-e8f0-40d9-99ee-0a316dd6ad67","savedPayload":{"position":{"x":22875.25002786921,"y":18671.47720278723},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"48b097fa-bc1f-4cd9-bcf4-284bd77c5055","savedPayload":{"position":{"x":22711.864775252736,"y":18451.163159302385},"targetPosition":{"x":22914.249679182623,"y":18549.47567458549},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5e243e8e-1909-4a9d-a605-984e530846c3","savedPayload":{"position":{"x":22914.249679182623,"y":18549.47567458549},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"0cea2f32-e0b8-4011-8389-eb24536ec638","savedPayload":{"position":{"x":22819.552316083948,"y":18292.054952903356},"targetPosition":{"x":22986.041373070097,"y":18443.403536986138},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b98c147d-3f4d-41d6-b821-df00d7eeab29","savedPayload":{"position":{"x":22986.041373070097,"y":18443.403536986138},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"95d9e4b7-2951-4dac-b0e6-c9cdb77cd0b9","savedPayload":{"position":{"x":22967.703716660573,"y":18169.730833037425},"targetPosition":{"x":23084.808973454514,"y":18361.854123742185},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"298d34c8-3b72-4c1f-92bd-b3e2c2f3e73e","savedPayload":{"position":{"x":23084.808973454514,"y":18361.854123742185},"targetPosition":{"x":23319.019487042395,"y":18746.1007051517},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3d274e02-8896-4311-a0c8-9041b6507090","savedPayload":{"position":{"x":23319.019487042395,"y":18746.1007051517},"targetPosition":{"x":24188.352730702558,"y":18513.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"a"}}},{"type":"Plotter Panel","name":"Position Combined Statistics","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLoss","project":"Superalgos","id":"96dd9046-7942-489e-8960-2de57321551b","savedPayload":{"position":{"x":23082.929900924002,"y":18150.514992281533},"targetPosition":{"x":23191.596556381523,"y":18121.3978497075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e226898a-74c0-4e4e-95e2-b2435c464dd5","savedPayload":{"position":{"x":23191.596556381523,"y":18121.3978497075},"targetPosition":{"x":23408.929867296563,"y":18063.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROI","project":"Superalgos","id":"b7079949-8602-4b96-97f3-bc704e9e77e7","savedPayload":{"position":{"x":23116.646293519316,"y":17894.413564559432},"targetPosition":{"x":23214.074151445064,"y":17950.663564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"06a9c88b-3edb-4a5e-a239-c2cad3cbad17","savedPayload":{"position":{"x":23214.074151445064,"y":17950.663564559432},"targetPosition":{"x":23408.929867296563,"y":18063.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFail","project":"Superalgos","id":"7dc1c993-470e-4c7b-b879-9a91361859a4","savedPayload":{"position":{"x":23321.578439574463,"y":17737.16359818687},"targetPosition":{"x":23350.695582148495,"y":17845.83025364439},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2102dc89-6799-4287-8c4d-d3591c9fd17e","savedPayload":{"position":{"x":23350.695582148495,"y":17845.83025364439},"targetPosition":{"x":23408.929867296563,"y":18063.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"05d6bb3e-f975-471f-be1f-3215025ce6fe","savedPayload":{"position":{"x":23408.929867296563,"y":18063.163564559432},"targetPosition":{"x":24188.352730702558,"y":18513.163564559432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"a"}}}],"id":"8854b5f8-8407-4a0d-9099-5456a8e4cced","savedPayload":{"position":{"x":24188.352730702558,"y":18513.163564559432},"targetPosition":{"x":24623.01935253264,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Position Base Asset","config":"{ \n \"codeName\": \"Position-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Left Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.entryTargetRate","project":"Superalgos","id":"2d03dfa3-bce6-478b-8f65-a50344ae4601","savedPayload":{"position":{"x":23729.694148615177,"y":19125.127778141414},"targetPosition":{"x":23683.93627626915,"y":19022.35391415662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1c279ac2-347d-453f-9b5e-436216cebd7d","savedPayload":{"position":{"x":23683.93627626915,"y":19022.35391415662},"targetPosition":{"x":23592.420531577092,"y":18816.806186187037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.entryTargetRate","project":"Superalgos","id":"174cdc36-dc92-4e69-aecb-3418b9863d4e","savedPayload":{"position":{"x":23471.47134860555,"y":19131.889580129842},"targetPosition":{"x":23511.7877429294,"y":19026.861782148906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"609e9ed3-5503-4a3e-949b-d2ab2cf10f10","savedPayload":{"position":{"x":23511.7877429294,"y":19026.861782148906},"targetPosition":{"x":23592.420531577092,"y":18816.806186187037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Exit Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\n\nif (record.exitTargetRate > 0) {\n y = record.exitTargetRate\n} else {\n y = record.candleClose\n}","project":"Superalgos","id":"ce2f05dc-daa2-472f-89e4-66d37b7eb0ae","savedPayload":{"position":{"x":23284.098939622716,"y":18954.079803225122},"targetPosition":{"x":23386.872803607508,"y":18908.321930879094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"93ba04d2-21ec-41a2-9a2e-eb47a8d39149","savedPayload":{"position":{"x":23386.872803607508,"y":18908.321930879094},"targetPosition":{"x":23592.420531577092,"y":18816.806186187037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0ac578ec-3648-4413-82ea-944a6fc7db1d","savedPayload":{"position":{"x":23592.420531577092,"y":18816.806186187037},"targetPosition":{"x":23753.686108872476,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Profit Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInBaseAsset > 0","project":"Superalgos","id":"35ca8e2f-58a1-49dc-ab7a-a40eb53483a5","savedPayload":{"position":{"x":23433.35213509526,"y":19088.149301927013},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"3dba4bdb-c7ff-44ff-897b-a7b98a253585","savedPayload":{"position":{"x":23091.774400825314,"y":19495.62920136998},"targetPosition":{"x":23234.029377061175,"y":19068.70588069502},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"b672a718-2e17-4659-aff7-63a98fab5c1f","savedPayload":{"position":{"x":23234.029377061175,"y":19068.70588069502},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"33837834-ffbd-46c0-8d62-2d6122bcff17","savedPayload":{"position":{"x":22749.479570129748,"y":19287.62755984479},"targetPosition":{"x":23062.881961713392,"y":18964.705059932425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2bdd5fe6-32ba-4120-a4f7-bd4e4099a206","savedPayload":{"position":{"x":23062.881961713392,"y":18964.705059932425},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"8b93b7e7-30ed-46a5-ba59-95cb38ba87fa","savedPayload":{"position":{"x":22953.80773364684,"y":18796.745477677625},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"1c279ac2-347d-453f-9b5e-436216cebd7d"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"bcc031f8-556b-4d6f-b438-4f9b14804d0f","savedPayload":{"position":{"x":22928.410181437728,"y":18598.09358908528},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"609e9ed3-5503-4a3e-949b-d2ab2cf10f10"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"fa6bc1ba-8d7c-4c08-8dfc-5cca7451113f","savedPayload":{"position":{"x":22991.719601781602,"y":18408.094836996635},"targetPosition":{"x":23376.284353297036,"y":18641.78256002006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"93ba04d2-21ec-41a2-9a2e-eb47a8d39149"}}}],"id":"2628b290-a09a-4807-8a45-7ff5a880d195","savedPayload":{"position":{"x":23376.284353297036,"y":18641.78256002006},"targetPosition":{"x":23753.686108872476,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Loss Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInBaseAsset < 0","project":"Superalgos","id":"9aba703c-bd76-446b-9017-0fc1e03d5ae2","savedPayload":{"position":{"x":22023.20045372594,"y":18040.972980447877},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"a7260cb4-6c92-42da-9a63-bc05e0cc0451","savedPayload":{"position":{"x":21165.407470708364,"y":18026.051181132298},"targetPosition":{"x":21845.026547994963,"y":17771.03712562104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ec365a09-3739-47f0-8068-1c88d4d815c3","savedPayload":{"position":{"x":21845.026547994963,"y":17771.03712562104},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"6c71aefb-c41b-4fe1-b0cc-25827fd91a9e","savedPayload":{"position":{"x":21078.701614979993,"y":17386.22910736162},"targetPosition":{"x":21801.706985097913,"y":17451.151683588323},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"a2f74418-ca41-437e-b377-414a234acf1b","savedPayload":{"position":{"x":21801.706985097913,"y":17451.151683588323},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"1b7b3265-d7ca-43fb-9dc7-4703eb918db5","savedPayload":{"position":{"x":21901.543590600046,"y":17143.84548066967},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"1c279ac2-347d-453f-9b5e-436216cebd7d"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"36b61d3e-013b-483f-a3ec-d88d6c4693aa","savedPayload":{"position":{"x":22124.794814657387,"y":16910.313396429872},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"609e9ed3-5503-4a3e-949b-d2ab2cf10f10"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"10f40dfc-bf39-41dc-b2ca-3e93c13aa1a5","savedPayload":{"position":{"x":22427.2834116487,"y":16796.793417903085},"targetPosition":{"x":22524.794142525996,"y":17516.13028195662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"93ba04d2-21ec-41a2-9a2e-eb47a8d39149"}}}],"id":"e37cfbb4-fe54-49ad-9525-29b0d77e082b","savedPayload":{"position":{"x":23304.302818232918,"y":18373.14381395397},"targetPosition":{"x":23753.686108872476,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Empty Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInBaseAsset === 0","project":"Superalgos","id":"19cb9968-c1eb-451c-913b-807689e76acc","savedPayload":{"position":{"x":22067.049338032837,"y":17228.41512599113},"targetPosition":{"x":22788.96459776694,"y":17152.676819189437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"c4823f51-eef8-488c-8b2f-a3eccff5a2ae","savedPayload":{"position":{"x":21462.795424749023,"y":16562.415933664364},"targetPosition":{"x":22125.827744592418,"y":16857.53524865068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"c2a0e17f-1ee8-4132-84d3-59a06a3b122d","savedPayload":{"position":{"x":22125.827744592418,"y":16857.53524865068},"targetPosition":{"x":22788.96459776694,"y":17152.676819189437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"b7295cca-db57-485e-94e4-e8770da6bb6b","savedPayload":{"position":{"x":22362.254224586814,"y":16565.503997090218},"targetPosition":{"x":22788.96459776694,"y":17152.676819189437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"1c279ac2-347d-453f-9b5e-436216cebd7d"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"f60220b1-c42c-4160-807d-eb7563c58e50","savedPayload":{"position":{"x":22727.41369816442,"y":16455.92498429848},"targetPosition":{"x":22788.96459776694,"y":17152.676819189437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"609e9ed3-5503-4a3e-949b-d2ab2cf10f10"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"8ec2c8d2-ed4a-4927-9208-4acde0721ac9","savedPayload":{"position":{"x":23084.41551792769,"y":16490.225387381783},"targetPosition":{"x":22788.96459776694,"y":17152.676819189437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"93ba04d2-21ec-41a2-9a2e-eb47a8d39149"}}}],"id":"23c30ca5-95ec-47b2-a65f-01969b1a5a78","savedPayload":{"position":{"x":23403.970426216838,"y":18113.500818290868},"targetPosition":{"x":23753.686108872476,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"a1635ebb-9528-4f34-8729-4812e12a850f","savedPayload":{"position":{"x":23753.686108872476,"y":18396.694994263296},"targetPosition":{"x":24188.352730702558,"y":18280.22642396716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Position Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Entry Target Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.entryTargetSizeInBaseAsset","project":"Superalgos","id":"31a77b72-a21e-4f05-acc9-2235fe404434","savedPayload":{"position":{"x":23222.055703842798,"y":17671.90220508309},"targetPosition":{"x":23385.05568702908,"y":17715.577918944142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c9bd8ca1-e2be-4ae1-b026-d80853994004","savedPayload":{"position":{"x":23385.05568702908,"y":17715.577918944142},"targetPosition":{"x":23711.05565340164,"y":17802.929346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Target Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitTargetSizeInBaseAsset","project":"Superalgos","id":"1ab726ad-0192-49ad-94c2-f931a565257f","savedPayload":{"position":{"x":23272.63029273577,"y":17549.804346666242},"targetPosition":{"x":23418.772079624392,"y":17634.179346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"917b6343-ae61-4086-b3d2-c03831ae6833","savedPayload":{"position":{"x":23418.772079624392,"y":17634.179346666242},"targetPosition":{"x":23711.05565340164,"y":17802.929346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLossInBaseAsset","project":"Superalgos","id":"d1dc5d27-95f5-480d-bd36-4c1291ae2b24","savedPayload":{"position":{"x":23353.08284542595,"y":17444.956538690552},"targetPosition":{"x":23472.40711475118,"y":17564.28080801578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"232bfbcc-1e50-40b0-84cf-d4bcebadfe2f","savedPayload":{"position":{"x":23472.40711475118,"y":17564.28080801578},"targetPosition":{"x":23711.05565340164,"y":17802.929346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROIInBaseAsset + ' %'","project":"Superalgos","id":"6e6fe2c8-e8ca-4b85-b19c-25aad68a9485","savedPayload":{"position":{"x":23457.93065340164,"y":17364.50398600037},"targetPosition":{"x":23542.30565340164,"y":17510.645772888995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd5a890c-5c35-4b61-a80f-7e6d5fa1315f","savedPayload":{"position":{"x":23542.30565340164,"y":17510.645772888995},"targetPosition":{"x":23711.05565340164,"y":17802.929346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFailInBaseAsset","project":"Superalgos","id":"67b4e235-40db-4a56-8f55-64922adcbc02","savedPayload":{"position":{"x":23580.028511818487,"y":17313.9293971074},"targetPosition":{"x":23623.70422567954,"y":17476.92938029368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"24a6f905-7d60-4543-a3ff-98d142797358","savedPayload":{"position":{"x":23623.70422567954,"y":17476.92938029368},"targetPosition":{"x":23711.05565340164,"y":17802.929346666242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b4298480-8922-4c40-ac79-b4484f8558bd","savedPayload":{"position":{"x":23711.05565340164,"y":17802.929346666242},"targetPosition":{"x":24188.352730702558,"y":18280.22642396716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42a79594-bac8-40bf-a9eb-f13716e15465","savedPayload":{"position":{"x":24188.352730702558,"y":18280.22642396716},"targetPosition":{"x":24623.01935253264,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Position Quoted Asset","config":"{ \n \"codeName\": \"Position-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Left Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.entryTargetRate","project":"Superalgos","id":"800c7bf9-3d8d-46ae-88ac-c168b80cbc78","savedPayload":{"position":{"x":23485.160640160142,"y":18580.87368809243},"targetPosition":{"x":23496.920092277753,"y":18468.9899748635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"17cf1421-4fc5-4cff-83d5-394cfcb4a88e","savedPayload":{"position":{"x":23496.920092277753,"y":18468.9899748635},"targetPosition":{"x":23520.438996512974,"y":18245.22254840564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Entry Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.entryTargetRate","project":"Superalgos","id":"4dbc8252-a487-41d9-9f3a-b054398acc8b","savedPayload":{"position":{"x":23258.152234521247,"y":18457.61818038496},"targetPosition":{"x":23345.581155185155,"y":18386.819636391854},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"a00d0039-31a4-4033-8ad5-b0e0d9d13e4e","savedPayload":{"position":{"x":23345.581155185155,"y":18386.819636391854},"targetPosition":{"x":23520.438996512974,"y":18245.22254840564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Right Exit Target Rate","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\n\nif (record.exitTargetRate > 0) {\n y = record.exitTargetRate\n} else {\n y = record.candleClose\n}","project":"Superalgos","id":"8aab882e-d77b-4fcb-8eb0-1d4f6381c86d","savedPayload":{"position":{"x":23184.787856826184,"y":18209.944192052808},"targetPosition":{"x":23296.671570055114,"y":18221.70364417042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2af047d2-b4f1-4395-8d35-67c70c582c0e","savedPayload":{"position":{"x":23296.671570055114,"y":18221.70364417042},"targetPosition":{"x":23520.438996512974,"y":18245.22254840564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2d8c4071-9ea0-45cf-9b0d-e73fd57a9928","savedPayload":{"position":{"x":23520.438996512974,"y":18245.22254840564},"targetPosition":{"x":23870.154679168612,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Profit Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInQuotedAsset > 0","project":"Superalgos","id":"264f839b-e67b-4629-8465-cb404eb93754","savedPayload":{"position":{"x":22425.326746735624,"y":17534.521621008265},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"07f5de9d-d271-4377-95d5-7ca4b1ffee19","savedPayload":{"position":{"x":21570.93679926165,"y":17609.241165512532},"targetPosition":{"x":22219.954057659943,"y":17284.75750175246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"90188cf7-8395-4899-addc-0499321cff14","savedPayload":{"position":{"x":22219.954057659943,"y":17284.75750175246},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"916fb502-a39c-4203-83fc-32d41c4c5755","savedPayload":{"position":{"x":21417.842940176495,"y":16981.622110798973},"targetPosition":{"x":22143.438295651096,"y":16970.96403191608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"88d51449-8118-4d83-b768-112f9e212cc7","savedPayload":{"position":{"x":22143.438295651096,"y":16970.96403191608},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"b4c2062a-382b-43bc-a281-9df152bc8a49","savedPayload":{"position":{"x":22210.605966523988,"y":16655.288129632347},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"17cf1421-4fc5-4cff-83d5-394cfcb4a88e"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"4d43870a-1769-43e3-a927-641900ff72c0","savedPayload":{"position":{"x":22408.179951441143,"y":16399.787129165146},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"a00d0039-31a4-4033-8ad5-b0e0d9d13e4e"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"6347f1dc-7ab3-4570-877b-df9e04058758","savedPayload":{"position":{"x":22697.02940242601,"y":16255.34791241491},"targetPosition":{"x":22869.114835620177,"y":16960.31595339953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"2af047d2-b4f1-4395-8d35-67c70c582c0e"}}}],"id":"9cf82ef4-557e-498e-b121-ff28235b3a25","savedPayload":{"position":{"x":23420.771388529054,"y":17985.57955274254},"targetPosition":{"x":23870.154679168612,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Loss Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInQuotedAsset < 0","project":"Superalgos","id":"ba9c6218-12de-4eeb-80ad-a5c949ea925d","savedPayload":{"position":{"x":22397.049330060323,"y":16774.97541065155},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBody":{"type":"Polygon Body","name":"New Polygon Body","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"dd6fee79-df88-4f2c-8526-f364a1343f83","savedPayload":{"position":{"x":21661.752330509007,"y":16333.499038389782},"targetPosition":{"x":22377.683122853537,"y":16452.2483728414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"196adfa2-00ad-48a4-8eb3-c82256e91031","savedPayload":{"position":{"x":22377.683122853537,"y":16452.2483728414},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"a04ad71d-d9f8-4122-913e-19892b51689b","savedPayload":{"position":{"x":21906.75471544863,"y":15735.807516784016},"targetPosition":{"x":22500.188603762326,"y":16153.480741624891},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1fe378dc-3deb-4825-9401-83f963060acd","savedPayload":{"position":{"x":22500.188603762326,"y":16153.480741624891},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"78ee45ea-40df-4cb4-9e16-0b07d9e298fd","savedPayload":{"position":{"x":22740.185699967307,"y":15937.199960418315},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"17cf1421-4fc5-4cff-83d5-394cfcb4a88e"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"b719aa97-15aa-4d6c-a08e-451314cb604a","savedPayload":{"position":{"x":23036.43086060968,"y":15868.853725771041},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"a00d0039-31a4-4033-8ad5-b0e0d9d13e4e"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"508f7dd3-087d-4952-9140-29936aac5aa4","savedPayload":{"position":{"x":23368.842004495316,"y":15899.63043492085},"targetPosition":{"x":23093.72333063888,"y":16571.206982114538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"2af047d2-b4f1-4395-8d35-67c70c582c0e"}}}],"id":"61faa796-9697-48b0-a582-613e1b351931","savedPayload":{"position":{"x":23492.752923593172,"y":17716.94080667645},"targetPosition":{"x":23870.154679168612,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Empty Triangle","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.ROIInQuotedAsset === 0","project":"Superalgos","id":"9b162bfd-0d6a-4ca2-ae2a-36b9b25d8180","savedPayload":{"position":{"x":22840.839624946886,"y":16092.870322126799},"targetPosition":{"x":23504.294162962302,"y":16388.191400652075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"93ec6c1e-fe4c-4857-b9e7-6914e626423a","savedPayload":{"position":{"x":22650.68667572161,"y":15213.189039494302},"targetPosition":{"x":23077.47253754621,"y":15800.661709435191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"29555fd1-c64d-4237-88f3-32fee8ae4c2c","savedPayload":{"position":{"x":23077.47253754621,"y":15800.661709435191},"targetPosition":{"x":23504.294162962302,"y":16388.191400652075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Left Entry Target Rate","project":"Superalgos","id":"c4b528b7-667e-4aa1-b397-0f5bb15abd95","savedPayload":{"position":{"x":23428.501887887658,"y":15665.922402318753},"targetPosition":{"x":23504.294162962302,"y":16388.191400652075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Left Entry Target Rate","id":"17cf1421-4fc5-4cff-83d5-394cfcb4a88e"}}},{"type":"Polygon Vertex","name":"Right Entry Target Rate","project":"Superalgos","id":"48fe8782-73d1-46d8-aa7d-55a843996fb3","savedPayload":{"position":{"x":23799.581442944764,"y":15724.737064206025},"targetPosition":{"x":23504.294162962302,"y":16388.191400652075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Entry Target Rate","id":"a00d0039-31a4-4033-8ad5-b0e0d9d13e4e"}}},{"type":"Polygon Vertex","name":"Right Exit Target Rate","project":"Superalgos","id":"339258b7-534f-41b7-b0ea-9f958bb982ab","savedPayload":{"position":{"x":24091.761302414718,"y":15961.330167876793},"targetPosition":{"x":23504.294162962302,"y":16388.191400652075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Right Exit Target Rate","id":"2af047d2-b4f1-4395-8d35-67c70c582c0e"}}}],"id":"58c807a3-8443-43d9-82e9-81c3d0545399","savedPayload":{"position":{"x":23708.88910187323,"y":17541.917180509474},"targetPosition":{"x":23870.154679168612,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[],"texts":[],"id":"d2ad64d7-e463-4f5f-9f3d-05c98a5e8101","savedPayload":{"position":{"x":23870.154679168612,"y":17962.028372433215},"targetPosition":{"x":24304.821300998694,"y":18078.49694272935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Position Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Entry Target Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.entryTargetSizeInQuotedAsset","project":"Superalgos","id":"8a47d5d4-b86c-40cb-a4f1-a64244e80bfd","savedPayload":{"position":{"x":23772.145637578804,"y":17068.52420200854},"targetPosition":{"x":23891.469906904033,"y":17187.848471333768},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"38cae0a2-4954-4cbc-a178-3e665885c393","savedPayload":{"position":{"x":23891.469906904033,"y":17187.848471333768},"targetPosition":{"x":24130.118445554494,"y":17426.49700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Target Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitTargetSizeInQuotedAsset","project":"Superalgos","id":"4ece6618-31a7-4e14-86b6-d1aecf9d0494","savedPayload":{"position":{"x":23876.993445554494,"y":16988.071649318357},"targetPosition":{"x":23961.368445554494,"y":17134.21343620698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"821330e4-19c2-4267-a189-a2d28087850a","savedPayload":{"position":{"x":23961.368445554494,"y":17134.21343620698},"targetPosition":{"x":24130.118445554494,"y":17426.49700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Profit Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.profitLossInQuotedAsset","project":"Superalgos","id":"ec9c4116-3155-41cf-8e01-fbe6c8428c28","savedPayload":{"position":{"x":23999.09130397134,"y":16937.497060425387},"targetPosition":{"x":24042.767017832393,"y":17100.497043611667},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"83330178-d79b-4709-bdee-5c3875214e06","savedPayload":{"position":{"x":24042.767017832393,"y":17100.497043611667},"targetPosition":{"x":24130.118445554494,"y":17426.49700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"ROI","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.ROIInQuotedAsset + ' %'","project":"Superalgos","id":"7ad9a57d-8322-4677-8a2a-d108ea01fdca","savedPayload":{"position":{"x":24130.118445554494,"y":16920.24700998423},"targetPosition":{"x":24130.118445554494,"y":17088.99700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b5e39cc4-9b95-4e92-9814-41c34c2ea4a8","savedPayload":{"position":{"x":24130.118445554494,"y":17088.99700998423},"targetPosition":{"x":24130.118445554494,"y":17426.49700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Hit Fail","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.hitFailInQuotedAsset","project":"Superalgos","id":"56c8470e-20fb-40c1-8224-37240bcad860","savedPayload":{"position":{"x":24261.145587137646,"y":16937.497060425387},"targetPosition":{"x":24217.469873276594,"y":17100.497043611667},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"09ec6e2f-ad57-4127-94af-0046a7b0d400","savedPayload":{"position":{"x":24217.469873276594,"y":17100.497043611667},"targetPosition":{"x":24130.118445554494,"y":17426.49700998423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f15d0a31-30bd-49a6-8c45-1bcd1a9cc5a8","savedPayload":{"position":{"x":24130.118445554494,"y":17426.49700998423},"targetPosition":{"x":24304.821300998694,"y":18078.49694272935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"baed45c2-228e-4679-876e-1867bbef5e9f","savedPayload":{"position":{"x":24304.821300998694,"y":18078.49694272935},"targetPosition":{"x":24623.01935253264,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Stop Loss","config":"{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"histogram|band|moving-average|oscillator|trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.stopLoss","project":"Superalgos","id":"eeef1100-0dcc-4367-99f1-b23a5e98b2ff","savedPayload":{"position":{"x":23663.26018878705,"y":17924.281426129244},"targetPosition":{"x":23703.5765831109,"y":17819.253628148308},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7d0349ba-640b-43f2-b500-d62c06fecd81","savedPayload":{"position":{"x":23703.5765831109,"y":17819.253628148308},"targetPosition":{"x":23743.892977434745,"y":17714.225830167372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.stopLoss","project":"Superalgos","id":"79f690f8-360a-49a8-9df0-bc42d1975099","savedPayload":{"position":{"x":23602.29588944853,"y":17539.367988839556},"targetPosition":{"x":23673.094433441638,"y":17626.796909503464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a4c015cf-419c-44f6-9816-6828e5fbc3c3","savedPayload":{"position":{"x":23673.094433441638,"y":17626.796909503464},"targetPosition":{"x":23743.892977434745,"y":17714.225830167372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fdf923e9-1d23-41c0-9210-38d35313c4ab","savedPayload":{"position":{"x":23743.892977434745,"y":17714.225830167372},"targetPosition":{"x":24188.352730702558,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.stopLoss > 0","project":"Superalgos","id":"b8677c90-5e19-402b-b494-d2cce015c167","savedPayload":{"position":{"x":23386.446858933028,"y":17643.83032089927},"targetPosition":{"x":23787.399794817793,"y":17439.534596016474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.5,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 0.8,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"1eee2eba-1af0-4cc0-ad50-22ac23a10dac","savedPayload":{"position":{"x":22898.480288282168,"y":17298.74357748027},"targetPosition":{"x":23342.94004154998,"y":17369.13908674837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"83ae727f-2dc3-4153-9b7f-2bee0748e134","savedPayload":{"position":{"x":23342.94004154998,"y":17369.13908674837},"targetPosition":{"x":23787.399794817793,"y":17439.534596016474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"ac7ed016-4516-4ebc-a902-95e97ace1f55","savedPayload":{"position":{"x":23469.201743283847,"y":17121.33654448253},"targetPosition":{"x":23787.399794817793,"y":17439.534596016474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"7d0349ba-640b-43f2-b500-d62c06fecd81"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"6f873316-c57a-48b4-80c7-362f823d37b4","savedPayload":{"position":{"x":23717.00428554969,"y":16995.07484274866},"targetPosition":{"x":23787.399794817793,"y":17439.534596016474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"a4c015cf-419c-44f6-9816-6828e5fbc3c3"}}}],"id":"9d351f29-6a3e-4c2b-b008-ebe1414d2aa8","savedPayload":{"position":{"x":23787.399794817793,"y":17439.534596016474},"targetPosition":{"x":24188.352730702558,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"phase\", \n\"size\": 20\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"(record.positions !== record.previous.positions && record.stopLossPhase >= 0 ) || \n(record.stopLossPhase !== record.previous.stopLossPhase && record.stopLossPhase >= 0 ) ","project":"Superalgos","id":"ef8dedb9-454b-423b-94e7-1a522047aa12","savedPayload":{"position":{"x":23795.356128032043,"y":17120.333602136125},"targetPosition":{"x":23984.057005819763,"y":17242.877385014504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 10\n }","project":"Superalgos","id":"860a9f6e-cc9d-46fb-83d6-fb908e12a30f","savedPayload":{"position":{"x":23995.832595974425,"y":17018.185739694727},"targetPosition":{"x":23984.057005819763,"y":17242.877385014504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"7d0349ba-640b-43f2-b500-d62c06fecd81"}}},"id":"d4a99750-dd06-453f-a126-ac48c25372ab","savedPayload":{"position":{"x":23984.057005819763,"y":17242.877385014504},"targetPosition":{"x":24188.352730702558,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[{"type":"Text","name":"New Text","config":"{ \n\"codeName\": \"\", \n\"fontSize\": 10\n}","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"(record.positions !== record.previous.positions && record.stopLossPhase >= 0 ) || \n(record.stopLossPhase !== record.previous.stopLossPhase && record.stopLossPhase >= 0 ) ","project":"Superalgos","id":"8e0eb7c3-171a-4fc3-a3e4-3c67bb772343","savedPayload":{"position":{"x":24099.649214203688,"y":17040.271541864484},"targetPosition":{"x":24258.74823997066,"y":17199.370567631457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"Begin","config":"{ \n\"offsetX\": -3,\n \"offsetY\": -15\n }","project":"Superalgos","id":"817671c1-fd3f-43ff-9670-9c3bcb94b8fb","savedPayload":{"position":{"x":24223.550485336607,"y":16977.140690997552},"targetPosition":{"x":24258.74823997066,"y":17199.370567631457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"7d0349ba-640b-43f2-b500-d62c06fecd81"}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.stopLossPhase","project":"Superalgos","id":"ccafd036-b292-48b1-847e-6735a3eb8253","savedPayload":{"position":{"x":24360.896102412058,"y":16998.894099689074},"targetPosition":{"x":24258.74823997066,"y":17199.370567631457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.5,\n \"fontSize\": 10\n}","project":"Superalgos","id":"42f9061a-9d2a-4d3f-9f7a-c47c9e6e0601","savedPayload":{"position":{"x":24459.224707913043,"y":17097.22270519006},"targetPosition":{"x":24258.74823997066,"y":17199.370567631457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7e69ccc1-a9f7-4a64-aeaa-344eb46f63f7","savedPayload":{"position":{"x":24258.74823997066,"y":17199.370567631457},"targetPosition":{"x":24188.352730702558,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"41dd1d86-998c-46d7-a37e-1a1508fd8b51","savedPayload":{"position":{"x":24188.352730702558,"y":17643.83032089927},"targetPosition":{"x":24506.550782236503,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Stop Loss Panel","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Stop Loss","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.stopLoss","project":"Superalgos","id":"1a5679d8-426b-4789-ac5b-c8d9c3a18fd8","savedPayload":{"position":{"x":24339.825176560207,"y":17177.646067947495},"targetPosition":{"x":24481.42226454642,"y":17352.503909275314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f590d585-66dd-47b9-99e8-38d081a1d1a0","savedPayload":{"position":{"x":24481.42226454642,"y":17352.503909275314},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Stop Loss Phase","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.stopLossPhase","project":"Superalgos","id":"9067e496-6c73-4ada-b403-6a097667f8a2","savedPayload":{"position":{"x":24605.355967300642,"y":17190.324282623467},"targetPosition":{"x":24611.243762377973,"y":17302.670105283356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e78ebe16-bfdc-4814-b334-5aad14fbf307","savedPayload":{"position":{"x":24611.243762377973,"y":17302.670105283356},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Initial Value","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.initialValue","project":"Superalgos","id":"cf99addf-c741-4b6a-b145-e06091ac92ea","savedPayload":{"position":{"x":24806.835026850207,"y":17244.310433921553},"targetPosition":{"x":24745.563135411016,"y":17338.660872815413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"216ff270-5de0-42df-8bde-2530f1e7e120","savedPayload":{"position":{"x":24745.563135411016,"y":17338.660872815413},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Final Value","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.finalValue","project":"Superalgos","id":"8e9018c1-228b-41c2-8e5d-ea35b5f547d9","savedPayload":{"position":{"x":24938.10274647544,"y":17406.412567631593},"targetPosition":{"x":24833.074948494504,"y":17446.72896195544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1d498821-6624-4450-b9cf-4ca95c4a00c7","savedPayload":{"position":{"x":24833.074948494504,"y":17446.72896195544},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1b6d3bd0-e594-4b09-9f1c-021177676d84","savedPayload":{"position":{"x":24623.019352532636,"y":17527.361750603133},"targetPosition":{"x":24506.550782236503,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9b8e4fc2-b62a-4d47-ac5f-08818e463da2","savedPayload":{"position":{"x":24506.550782236503,"y":17962.028372433215},"targetPosition":{"x":24623.01935253264,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Take Profit","config":"{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"histogram|band|moving-average|oscillator|trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.takeProfit","project":"Superalgos","id":"4e73522f-8830-4026-8aa9-aa20558e6bb0","savedPayload":{"position":{"x":24028.05031928108,"y":17507.693261293964},"targetPosition":{"x":24115.479239944987,"y":17436.894717300856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9baaa58e-af64-4348-9320-fad9823153a9","savedPayload":{"position":{"x":24115.479239944987,"y":17436.894717300856},"targetPosition":{"x":24202.908160608895,"y":17366.09617330775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.takeProfit","project":"Superalgos","id":"f7740d4c-0742-4f8b-8ad3-b7fec1e92066","savedPayload":{"position":{"x":24167.710405974845,"y":17143.86629667384},"targetPosition":{"x":24185.30928329187,"y":17254.981234990795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bcbd8777-10f8-46a6-ba09-4d635570057d","savedPayload":{"position":{"x":24185.30928329187,"y":17254.981234990795},"targetPosition":{"x":24202.908160608895,"y":17366.09617330775},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc2dda29-1eb7-4f6f-8527-2e54ba32bb8b","savedPayload":{"position":{"x":24202.908160608895,"y":17366.09617330775},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.takeProfit > 0","project":"Superalgos","id":"b96a45dc-f0db-4c23-8f66-081302ea7bbf","savedPayload":{"position":{"x":26569.112002446196,"y":16676.11048973976},"targetPosition":{"x":26146.905331465543,"y":16780.975770196957},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.5,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.8,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"5033856c-d71d-4608-a6f2-347ef82d8591","savedPayload":{"position":{"x":26084.06092851102,"y":15571.019366885823},"targetPosition":{"x":26115.567478095134,"y":16175.902612099606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1e3604e1-777b-4344-a47a-d3fefa10014b","savedPayload":{"position":{"x":26115.567478095134,"y":16175.902612099606},"targetPosition":{"x":26146.905331465543,"y":16780.975770196957},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"74cef8d6-de4c-464d-8c00-97a88227f626","savedPayload":{"position":{"x":26476.857455321606,"y":16272.850166000817},"targetPosition":{"x":26146.905331465543,"y":16780.975770196957},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"9baaa58e-af64-4348-9320-fad9823153a9"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"e3c98070-e46c-4d6d-9079-2b9d556722cc","savedPayload":{"position":{"x":26712.62787798267,"y":16563.643719677715},"targetPosition":{"x":26146.905331465543,"y":16780.975770196957},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"bcbd8777-10f8-46a6-ba09-4d635570057d"}}}],"id":"a0b598d2-cdb6-4ce7-96c5-ef3317ae1768","savedPayload":{"position":{"x":24377.931786775873,"y":17149.959995027693},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"phase\", \n\"size\": 20\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"(record.positions !== record.previous.positions && record.takeProfitPhase >= 0 ) || \n(record.takeProfitPhase !== record.previous.takeProfitPhase && record.takeProfitPhase >= 0 ) ","project":"Superalgos","id":"a404c20d-5c4d-4505-81f0-263987496ba0","savedPayload":{"position":{"x":24544.422670400563,"y":16877.501992021193},"targetPosition":{"x":24646.57053284196,"y":17077.978459963575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 10\n }","project":"Superalgos","id":"c1ed6b36-4dd8-4ff5-ae66-6c6878b4edc1","savedPayload":{"position":{"x":24769.11431572034,"y":16889.277582175855},"targetPosition":{"x":24646.57053284196,"y":17077.978459963575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"9baaa58e-af64-4348-9320-fad9823153a9"}}},"id":"0da5f29a-4847-460d-b982-68b8d5cc7fe5","savedPayload":{"position":{"x":24646.57053284196,"y":17077.978459963575},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[{"type":"Text","name":"New Text","config":"{ \n\"codeName\": \"\", \n\"fontSize\": 10\n}","project":"Superalgos","textCondition":{"type":"Text Condition","name":"New Text Condition","code":"(record.positions !== record.previous.positions && record.takeProfitPhase >= 0 ) || \n(record.takeProfitPhase !== record.previous.takeProfitPhase && record.takeProfitPhase >= 0 ) ","project":"Superalgos","id":"81c4f7bc-db04-4c61-a8e8-5a4a6308dda0","savedPayload":{"position":{"x":24847.979243356996,"y":16960.312757032454},"targetPosition":{"x":24906.213528505064,"y":17177.646067947495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"textPosition":{"type":"Text Position","name":"Begin","config":"{ \n\"offsetX\": -3,\n \"offsetY\": -15\n }","project":"Superalgos","id":"5833e42f-c848-4271-9e20-f48d5a98929a","savedPayload":{"position":{"x":24986.84631715276,"y":16967.590471985626},"targetPosition":{"x":24906.213528505064,"y":17177.646067947495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"9baaa58e-af64-4348-9320-fad9823153a9"}}},"textFormula":{"type":"Text Formula","name":"New Text Formula","code":"record.takeProfitPhase","project":"Superalgos","id":"00f3fb76-f50d-4879-b1d2-49c51824aef9","savedPayload":{"position":{"x":25094.914406292784,"y":17055.102285069115},"targetPosition":{"x":24906.213528505064,"y":17177.646067947495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"textStyle":{"type":"Text Style","name":"New Text Style","config":"{\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.5,\n \"fontSize\": 10\n}","project":"Superalgos","id":"e4d1b248-ee99-42e0-9c77-18b9792b6631","savedPayload":{"position":{"x":25130.90517382484,"y":17189.421658102157},"targetPosition":{"x":24906.213528505064,"y":17177.646067947495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f26f4f43-95e1-406d-94e8-7c818e363777","savedPayload":{"position":{"x":24906.213528505064,"y":17177.646067947495},"targetPosition":{"x":24623.019352532636,"y":17527.361750603133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"95465ef6-b26a-4ca3-817c-26b50e9ef8e0","savedPayload":{"position":{"x":24623.019352532636,"y":17527.361750603133},"targetPosition":{"x":24739.487922828772,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Take Profit Panel","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Take Profit","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.takeProfit","project":"Superalgos","id":"64f4a076-de71-444a-a543-f62da7701e6f","savedPayload":{"position":{"x":24987.29046509461,"y":17199.37056763146},"targetPosition":{"x":25022.488219728664,"y":17421.600444265365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"321eb006-13d4-4f66-aeab-f6fd2aa4758b","savedPayload":{"position":{"x":25022.488219728664,"y":17421.600444265365},"targetPosition":{"x":25057.685974362717,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Take Profit Phase","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.takeProfitPhase","project":"Superalgos","id":"0e3f0594-6a97-4e2e-a261-84be8b4ef02c","savedPayload":{"position":{"x":25210.907768024816,"y":17343.115618985696},"targetPosition":{"x":25159.833836804115,"y":17443.353852956887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eccb236b-4d20-4df2-9810-543bfbb3fc25","savedPayload":{"position":{"x":25159.833836804115,"y":17443.353852956887},"targetPosition":{"x":25057.685974362717,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Initial Value","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.initialValue","project":"Superalgos","id":"9c72c8d4-8b90-42ff-9ffc-a247ecf7f8cb","savedPayload":{"position":{"x":25358.40067627629,"y":17490.60852723717},"targetPosition":{"x":25258.1624423051,"y":17541.68245845787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"59c28a01-9fc1-45f7-b0c0-2fd02035298e","savedPayload":{"position":{"x":25258.1624423051,"y":17541.68245845787},"targetPosition":{"x":25057.685974362717,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Final Value","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.finalValue","project":"Superalgos","id":"79ac8b14-7f99-4d31-872a-bf6d3ab7248c","savedPayload":{"position":{"x":25391.030789313576,"y":17696.626952850347},"targetPosition":{"x":25279.915850996622,"y":17679.028075533322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"653490ef-1b6d-4fdc-b1f0-0f8bfc1ad7a7","savedPayload":{"position":{"x":25279.915850996622,"y":17679.028075533322},"targetPosition":{"x":25057.685974362717,"y":17643.83032089927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"33aa2293-7958-4cc3-bb41-fc97c17ccd67","savedPayload":{"position":{"x":25057.685974362717,"y":17643.83032089927},"targetPosition":{"x":24739.487922828772,"y":17962.028372433215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"78a2df79-8912-44d7-a8c7-4b6a0a7235c2","savedPayload":{"position":{"x":24739.487922828772,"y":17962.028372433215},"targetPosition":{"x":24623.01935253264,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cd6f9452-2cce-424d-8059-e3b312f627c4","savedPayload":{"position":{"x":24623.01935253264,"y":18396.694994263296},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Trading Stages","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Trigger Stage Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate * 0.90","project":"Superalgos","id":"11876454-5f52-49ff-b29f-a5ddbd44e55f","savedPayload":{"position":{"x":23953.634761775054,"y":18983.6418680964},"targetPosition":{"x":23958.405529617292,"y":18783.39297649099},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ee6913fa-364d-4b80-bad5-35de44ca43fd","savedPayload":{"position":{"x":23958.405529617292,"y":18783.39297649099},"targetPosition":{"x":23967.684520128718,"y":18383.664611408898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"f064b6c0-7eaf-4341-997a-8655f56c4ca8","savedPayload":{"position":{"x":23767.94253246708,"y":18949.947089032758},"targetPosition":{"x":23834.43055042814,"y":18761.087884904173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"38094e81-9ae7-449d-bc9c-125f756b9f04","savedPayload":{"position":{"x":23834.43055042814,"y":18761.087884904173},"targetPosition":{"x":23967.684520128718,"y":18383.664611408898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.beginRate * 0.90","project":"Superalgos","id":"2a99561e-32d8-430f-9f67-44ce7b3dbdb7","savedPayload":{"position":{"x":23602.20663344135,"y":18860.257501555803},"targetPosition":{"x":23723.823366611363,"y":18701.39680428531},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"18c413f8-8acc-4172-91a6-d90a0762118c","savedPayload":{"position":{"x":23723.823366611363,"y":18701.39680428531},"targetPosition":{"x":23967.684520128718,"y":18383.664611408898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"7ab18100-017d-4aef-b48d-32f69b294062","savedPayload":{"position":{"x":23471.234673007188,"y":18721.05727518828},"targetPosition":{"x":23636.01044652075,"y":18607.867618782395},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"185d7e04-fa68-401d-b666-9152e57c3378","savedPayload":{"position":{"x":23636.01044652075,"y":18607.867618782395},"targetPosition":{"x":23967.684520128718,"y":18383.664611408898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a14053c2-6a61-4f8c-be0d-585e226b6bca","savedPayload":{"position":{"x":23967.684520128718,"y":18383.664611408898},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"6b0d0c65-790f-4123-85da-5eeaae17e347","savedPayload":{"position":{"x":24024.31893563412,"y":17630.485376124627},"targetPosition":{"x":23805.45539209999,"y":17340.196301060725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"37f505da-f3f9-4eb2-b57e-4364f4c7557c","savedPayload":{"position":{"x":23377.789652508112,"y":17867.812847777677},"targetPosition":{"x":23573.694825711726,"y":17626.112833393323},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"debc9932-c238-4867-9bf3-51bbe419e2ff","savedPayload":{"position":{"x":23573.694825711726,"y":17626.112833393323},"targetPosition":{"x":23805.45539209999,"y":17340.196301060725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"172928bb-91a1-471b-8dc0-86069d7c02a0","savedPayload":{"position":{"x":23461.659798144865,"y":17208.384482990754},"targetPosition":{"x":23805.45539209999,"y":17340.196301060725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"ee6913fa-364d-4b80-bad5-35de44ca43fd"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"a1267ac2-8258-49cb-95fd-05af04277e88","savedPayload":{"position":{"x":23841.39246989028,"y":16965.754606139933},"targetPosition":{"x":23805.45539209999,"y":17340.196301060725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"18c413f8-8acc-4172-91a6-d90a0762118c"}}}],"id":"9e88f3a0-09ad-44fd-a84e-731228860e66","savedPayload":{"position":{"x":23847.21084764623,"y":18284.078003063783},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"d567e677-4217-4379-b873-1afc6fd52f11","savedPayload":{"position":{"x":23910.21343606553,"y":17444.060066378373},"targetPosition":{"x":23789.57396245202,"y":17098.694237658383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.PATINATED_TURQUOISE\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"592cc0ee-978d-4030-8fde-4ec503294f15","savedPayload":{"position":{"x":23192.813045226125,"y":17422.152888421446},"targetPosition":{"x":23465.667922806253,"y":17274.236201487205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"07121085-90a5-4b16-a2b5-6dbb11c3d08c","savedPayload":{"position":{"x":23465.667922806253,"y":17274.236201487205},"targetPosition":{"x":23789.57396245202,"y":17098.694237658383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"8591ccfd-d6ec-495e-859d-29894c061971","savedPayload":{"position":{"x":23522.24863433687,"y":16845.215356289587},"targetPosition":{"x":23789.57396245202,"y":17098.694237658383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"ee6913fa-364d-4b80-bad5-35de44ca43fd"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"72ad8b4e-d393-453d-8b57-527f63c248f2","savedPayload":{"position":{"x":23965.88121273497,"y":16766.91825748183},"targetPosition":{"x":23789.57396245202,"y":17098.694237658383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"18c413f8-8acc-4172-91a6-d90a0762118c"}}}],"id":"e2e18af7-af5f-4634-b8a4-4fabd2ddd7a5","savedPayload":{"position":{"x":23774.320507376346,"y":18145.827472651818},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"e75c26a6-3516-4eeb-98c7-dcde0cd36ac9","savedPayload":{"position":{"x":24011.056589387055,"y":13341.960424578621},"targetPosition":{"x":24239.942113069115,"y":13527.414350339212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"460b5169-b17a-4c63-a789-44dd11736441","savedPayload":{"position":{"x":24239.942113069115,"y":13527.414350339212},"targetPosition":{"x":24507.415605771694,"y":13744.138820931614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"bb8d8af7-3a7e-4bbd-b4a3-2f254e8a7288","savedPayload":{"position":{"x":24471.58630824296,"y":13401.726595908138},"targetPosition":{"x":24507.415605771694,"y":13744.138820931614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"ee6913fa-364d-4b80-bad5-35de44ca43fd"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"a146b387-51f1-41c0-8528-99088c6f22f8","savedPayload":{"position":{"x":24724.18927722066,"y":13476.370713897168},"targetPosition":{"x":24507.415605771694,"y":13744.138820931614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"38094e81-9ae7-449d-bc9c-125f756b9f04"}}}],"id":"08d916aa-6d2d-497b-8738-9b0966e3901e","savedPayload":{"position":{"x":23759.9992238542,"y":17990.616409282826},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"2ecdf0cb-d87f-41cf-8317-d14776d5dda1","savedPayload":{"position":{"x":24131.74066940367,"y":13303.668566201772},"targetPosition":{"x":24339.485583669917,"y":13511.591075335185},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"a7ba9639-8238-467d-b0be-b9b2e51311f0","savedPayload":{"position":{"x":24339.485583669917,"y":13511.591075335185},"targetPosition":{"x":24568.922955736663,"y":13741.248579688607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"354df2e6-8fd8-4beb-83ba-0bdcb67d613e","savedPayload":{"position":{"x":24568.9211661251,"y":13415.56583612577},"targetPosition":{"x":24568.922955736663,"y":13741.248579688607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"18c413f8-8acc-4172-91a6-d90a0762118c"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"6babbbfe-f55b-424e-90a3-a7e0bf17b8a1","savedPayload":{"position":{"x":24799.486057526436,"y":13510.644296819013},"targetPosition":{"x":24568.922955736663,"y":13741.248579688607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"185d7e04-fa68-401d-b666-9152e57c3378"}}}],"id":"70de0f73-5a2d-4a5a-a5f7-1863f192a14d","savedPayload":{"position":{"x":23806.295532315955,"y":17841.523107494806},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"trigger-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"4a525c63-9096-4b33-980f-926bb7c16783","savedPayload":{"position":{"x":23779.517425616163,"y":17565.66729854801},"targetPosition":{"x":23906.169735536485,"y":17721.488854982836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"ee6913fa-364d-4b80-bad5-35de44ca43fd"}}},"id":"c5fd3ce1-b24e-455c-9557-b43a68d6e942","savedPayload":{"position":{"x":23906.169735536485,"y":17721.488854982836},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"trigger-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"3433cd26-6fad-49b0-a789-6e12a9a8aad0","savedPayload":{"position":{"x":23985.707335767092,"y":17456.818597680136},"targetPosition":{"x":24042.922979998802,"y":17649.29875956626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"18c413f8-8acc-4172-91a6-d90a0762118c"}}},"id":"9657d954-28e9-496d-a8e6-6f4c9974796d","savedPayload":{"position":{"x":24042.922979998802,"y":17649.29875956626},"targetPosition":{"x":24158.210377696632,"y":18032.396906137597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"09119fa5-53de-4885-af93-32aacf6445bb","savedPayload":{"position":{"x":24158.210377696632,"y":18032.396906137597},"targetPosition":{"x":24612.97355199314,"y":18080.07393575662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Trigger Stage Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"d6725ef3-05e1-4146-89e6-4e0bd9581a57","savedPayload":{"position":{"x":24136.141488558333,"y":17603.948025093236},"targetPosition":{"x":24260.701196638118,"y":17630.585317927158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"983b2057-a7ec-42a8-914a-4dc778bf71a2","savedPayload":{"position":{"x":24260.701196638118,"y":17630.585317927158},"targetPosition":{"x":24427.44088328152,"y":17662.33720700488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"4f0e461a-fc1c-4340-b9a0-9a59b068e8e9","savedPayload":{"position":{"x":24221.22124511846,"y":17437.466547787037},"targetPosition":{"x":24307.599691353065,"y":17529.79164760578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"cbb7504c-0db6-47e8-9d75-d197d5d23bfe","savedPayload":{"position":{"x":24307.599691353065,"y":17529.79164760578},"targetPosition":{"x":24427.44088328152,"y":17662.33720700488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"67721b90-f4f5-4ea0-ba40-cf5364f48ba6","savedPayload":{"position":{"x":24393.630197051298,"y":17357.3819697611},"targetPosition":{"x":24409.249062335773,"y":17482.727396056966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"6408eb74-1535-45b9-be83-9c0841bdb019","savedPayload":{"position":{"x":24409.249062335773,"y":17482.727396056966},"targetPosition":{"x":24427.44088328152,"y":17662.33720700488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"8bfbb311-c3cf-4c53-a42d-dc30c5336d17","savedPayload":{"position":{"x":24587.40475662828,"y":17401.744207783537},"targetPosition":{"x":24523.24547406063,"y":17513.078689135087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4837a800-f016-4f60-836b-0fc7acc7d489","savedPayload":{"position":{"x":24523.24547406063,"y":17513.078689135087},"targetPosition":{"x":24427.44088328152,"y":17662.33720700488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c10b9b7b-04d8-460b-9dcc-2eaed24e17df","savedPayload":{"position":{"x":24427.44088328152,"y":17662.33720700488},"targetPosition":{"x":24612.97355199314,"y":18080.07393575662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6c6cddbc-cd78-445f-9498-8627ac99563d","savedPayload":{"position":{"x":24581.688913748076,"y":18057.575831546175},"targetPosition":{"x":24936.211964982052,"y":18315.02517647312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Open Stage Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate * 1.05","project":"Superalgos","id":"c6d764f4-ffbe-4b62-8807-ff40e314f047","savedPayload":{"position":{"x":23748.168759963883,"y":18277.93435146567},"targetPosition":{"x":23869.924226643827,"y":18119.01897140589},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"3f1ad539-6b21-4cbb-9623-daf242df45bc","savedPayload":{"position":{"x":23869.924226643827,"y":18119.01897140589},"targetPosition":{"x":24112.330856768156,"y":17801.07553114317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"ee137d40-fd2c-4754-a18f-2d5c5c564c4c","savedPayload":{"position":{"x":23617.703285161606,"y":18141.538322202814},"targetPosition":{"x":23782.729973895257,"y":18028.122193249652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c4b7fef3-79e2-45a6-96d6-4c9b6abf1514","savedPayload":{"position":{"x":23782.729973895257,"y":18028.122193249652},"targetPosition":{"x":24112.330856768156,"y":17801.07553114317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.beginRate * 1.05","project":"Superalgos","id":"c7026d19-1d0a-499c-8bd2-2aa847d0d17b","savedPayload":{"position":{"x":23536.24676435274,"y":17971.585519594522},"targetPosition":{"x":23728.273675326196,"y":17914.83920841476},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"04304653-9361-433e-8e34-ca08c38ddb21","savedPayload":{"position":{"x":23728.273675326196,"y":17914.83920841476},"targetPosition":{"x":24112.330856768156,"y":17801.07553114317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"5c87a7ab-9f96-495f-9073-95fcc251ed95","savedPayload":{"position":{"x":23512.083039382753,"y":17782.299475112093},"targetPosition":{"x":23712.192752087623,"y":17787.588822714322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bfe5be37-4f1d-4b6b-be9b-1ed24bf51056","savedPayload":{"position":{"x":23712.192752087623,"y":17787.588822714322},"targetPosition":{"x":24112.330856768156,"y":17801.07553114317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6977ed19-0d15-49df-adec-e0b6beec8296","savedPayload":{"position":{"x":24112.330856768156,"y":17801.07553114317},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"fbe73700-5914-4750-853f-f205da0e00d5","savedPayload":{"position":{"x":23823.512662519723,"y":17466.501172816945},"targetPosition":{"x":23669.55248658413,"y":17137.432160629713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"c845a7dc-a73e-4bc2-92f5-a9f9e76963e1","savedPayload":{"position":{"x":23142.055197191596,"y":17564.090182030504},"targetPosition":{"x":23382.87582752122,"y":17369.290545821023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f2e9bf45-007e-434e-b977-07a4ba08bd7e","savedPayload":{"position":{"x":23382.87582752122,"y":17369.290545821023},"targetPosition":{"x":23669.55248658413,"y":17137.432160629713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"64879334-0c33-40de-b993-bbccaebc1ce5","savedPayload":{"position":{"x":23360.426325249937,"y":16936.87765768171},"targetPosition":{"x":23669.55248658413,"y":17137.432160629713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"3f1ad539-6b21-4cbb-9623-daf242df45bc"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"f3e5ca2b-9766-47fc-87b5-a8d400f073fb","savedPayload":{"position":{"x":23782.274626122147,"y":16778.836470480615},"targetPosition":{"x":23669.55248658413,"y":17137.432160629713},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"04304653-9361-433e-8e34-ca08c38ddb21"}}}],"id":"21db891e-4c47-4a5a-88a5-036297086138","savedPayload":{"position":{"x":24073.406096601542,"y":17649.665993859668},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"de754019-110e-46e7-8991-969f82d7027f","savedPayload":{"position":{"x":23750.621590364204,"y":17260.892652857692},"targetPosition":{"x":23704.25096066634,"y":16897.922228570224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GOLDEN_ORANGE\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"8f03ebb4-360c-430d-adef-13b574d53d80","savedPayload":{"position":{"x":23053.13589393478,"y":17090.412107672168},"targetPosition":{"x":23350.94171730639,"y":17002.229593653705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"e34a2ef9-0533-40a7-901f-a07b503ca847","savedPayload":{"position":{"x":23350.94171730639,"y":17002.229593653705},"targetPosition":{"x":23704.25096066634,"y":16897.922228570224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"eaf26e8a-cd01-450f-b939-af89c22a5746","savedPayload":{"position":{"x":23495.525427014352,"y":16594.213442636104},"targetPosition":{"x":23704.25096066634,"y":16897.922228570224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"3f1ad539-6b21-4cbb-9623-daf242df45bc"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"3f4a9c46-b76a-4e07-b012-e447bbbabd11","savedPayload":{"position":{"x":23945.592510903658,"y":16610.04995509977},"targetPosition":{"x":23704.25096066634,"y":16897.922228570224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"04304653-9361-433e-8e34-ca08c38ddb21"}}}],"id":"2a3d0d93-13d9-4a9e-8d32-c0aa5d7ab1e3","savedPayload":{"position":{"x":24095.69934259661,"y":17495.2343839386},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"86f26dcc-e45b-4313-8182-e5f715a7ea2b","savedPayload":{"position":{"x":24450.17795246025,"y":13535.976728597892},"targetPosition":{"x":24679.06347614231,"y":13721.430654358483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"67e63d56-1a05-414e-a99b-a3003e3483c5","savedPayload":{"position":{"x":24679.06347614231,"y":13721.430654358483},"targetPosition":{"x":24946.536968844888,"y":13938.155124950885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"a4c6c33d-682a-418b-9dff-24a739838aeb","savedPayload":{"position":{"x":24910.707671316155,"y":13595.742899927409},"targetPosition":{"x":24946.536968844888,"y":13938.155124950885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"3f1ad539-6b21-4cbb-9623-daf242df45bc"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"499e2a85-9ef8-4ca7-9f87-5a01fe2a5ca3","savedPayload":{"position":{"x":25163.310640293854,"y":13670.387017916439},"targetPosition":{"x":24946.536968844888,"y":13938.155124950885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"c4b7fef3-79e2-45a6-96d6-4c9b6abf1514"}}}],"id":"616f49d0-daaa-4b82-be0d-56504b402616","savedPayload":{"position":{"x":24175.503670891194,"y":17361.02196231903},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"feff4d08-a0de-4e2e-bafa-896613af0a14","savedPayload":{"position":{"x":24570.862032476864,"y":13497.684870221043},"targetPosition":{"x":24778.60694674311,"y":13705.607379354456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f9c6d40c-a3fa-4f02-83c5-c2c39d478c42","savedPayload":{"position":{"x":24778.60694674311,"y":13705.607379354456},"targetPosition":{"x":25008.044318809858,"y":13935.264883707878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"680845ab-7423-4022-820b-a2d05b1ae32d","savedPayload":{"position":{"x":25008.042529198294,"y":13609.582140145041},"targetPosition":{"x":25008.044318809858,"y":13935.264883707878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"04304653-9361-433e-8e34-ca08c38ddb21"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"b5abef98-275f-4c3c-9704-bc17e83f4f9b","savedPayload":{"position":{"x":25238.60742059963,"y":13704.660600838284},"targetPosition":{"x":25008.044318809858,"y":13935.264883707878},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"bfe5be37-4f1d-4b6b-be9b-1ed24bf51056"}}}],"id":"0fab39ff-8caf-45f8-8650-33d7a65fa6e1","savedPayload":{"position":{"x":24300.58935161967,"y":17267.609238312958},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"open-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"cbb69a21-082e-4364-a069-c33f92f0a07c","savedPayload":{"position":{"x":24441.192568344843,"y":17028.700034623955},"targetPosition":{"x":24451.941207889042,"y":17229.205957942057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"3f1ad539-6b21-4cbb-9623-daf242df45bc"}}},"id":"472dcf1a-f045-4d96-8a97-f11011bc667a","savedPayload":{"position":{"x":24451.941207889042,"y":17229.205957942057},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"open-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"f0a4c47e-a1e4-436f-a470-1adb11c80b7a","savedPayload":{"position":{"x":24671.376007960083,"y":17061.831375195663},"targetPosition":{"x":24604.814310842226,"y":17251.22232007174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"04304653-9361-433e-8e34-ca08c38ddb21"}}},"id":"7c64940b-d01e-47e5-902c-ece8262864cc","savedPayload":{"position":{"x":24604.814310842226,"y":17251.22232007174},"targetPosition":{"x":24472.86230987924,"y":17628.784392450263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"d953dd4d-5603-4042-b15b-1e293988be14","savedPayload":{"position":{"x":24472.86230987924,"y":17628.784392450263},"targetPosition":{"x":24812.865548584658,"y":17934.85020292712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Open Stage Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"908c9dfe-fb97-457a-93e6-711df1e89436","savedPayload":{"position":{"x":24706.94461228994,"y":17268.857283834},"targetPosition":{"x":24791.616413206015,"y":17364.323215493157},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"13d4c685-4b50-4ce8-aba9-1075b89e4d79","savedPayload":{"position":{"x":24791.616413206015,"y":17364.323215493157},"targetPosition":{"x":24908.14729586783,"y":17487.514142464897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"428c5592-0629-49e4-a929-91ed47cdd1d3","savedPayload":{"position":{"x":24873.84998310131,"y":17184.49599486259},"targetPosition":{"x":24888.81759722733,"y":17310.230012956483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"74b0dbe2-935f-40f0-bd3b-812b925aa887","savedPayload":{"position":{"x":24888.81759722733,"y":17310.230012956483},"targetPosition":{"x":24908.14729586783,"y":17487.514142464897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"a862e1ab-2bd4-4627-8bc0-ca68102525bb","savedPayload":{"position":{"x":25060.018325494995,"y":17221.34053577333},"targetPosition":{"x":24998.7757025298,"y":17331.921504956874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"83bfb9e8-3774-4740-ba7b-635fb0088b59","savedPayload":{"position":{"x":24998.7757025298,"y":17331.921504956874},"targetPosition":{"x":24908.14729586783,"y":17487.514142464897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"be46adeb-8308-4ff1-9cc4-5939c3e040dd","savedPayload":{"position":{"x":25190.54749505843,"y":17371.430741823027},"targetPosition":{"x":25073.172988381953,"y":17423.446609478142},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ccae74f6-9331-4c03-a44f-9176cb815ce2","savedPayload":{"position":{"x":25073.172988381953,"y":17423.446609478142},"targetPosition":{"x":24908.14729586783,"y":17487.514142464897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"be56e169-d089-4aea-a18a-c01cf16a3485","savedPayload":{"position":{"x":24908.14729586783,"y":17487.514142464897},"targetPosition":{"x":24812.865548584658,"y":17934.85020292712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8f7cad9f-153d-44e6-bdc2-812bc97e3929","savedPayload":{"position":{"x":24800.791503600904,"y":17898.425268662773},"targetPosition":{"x":24936.211964982052,"y":18315.02517647312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Manage Stage Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate * 0.95","project":"Superalgos","id":"0c5c0deb-9d9f-4849-ac44-711f24c60962","savedPayload":{"position":{"x":23989.61297381892,"y":17597.579773541947},"targetPosition":{"x":24181.56988010251,"y":17540.6400028731},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"51020863-6f89-4c73-97fd-fbc7fc03348f","savedPayload":{"position":{"x":24181.56988010251,"y":17540.6400028731},"targetPosition":{"x":24564.757850042763,"y":17425.686459373293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"a2fd6f13-b771-40c1-9c7a-55d1bb965ae8","savedPayload":{"position":{"x":23964.172800887925,"y":17410.81649489765},"targetPosition":{"x":24164.41624574587,"y":17415.86336875541},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"38ed128c-3053-45dd-a069-24e21b798603","savedPayload":{"position":{"x":24164.41624574587,"y":17415.86336875541},"targetPosition":{"x":24564.757850042763,"y":17425.686459373293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.beginRate * 0.95","project":"Superalgos","id":"26bade31-216a-498d-961d-f5f5aeb03075","savedPayload":{"position":{"x":23998.196000742184,"y":17225.465024618632},"targetPosition":{"x":24187.002972329494,"y":17292.243737627356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d1bf6c44-0b02-4e8a-8877-20210246d2d0","savedPayload":{"position":{"x":24187.002972329494,"y":17292.243737627356},"targetPosition":{"x":24564.757850042763,"y":17425.686459373293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"d6044513-956e-4ba9-994b-cce2f42e9cb1","savedPayload":{"position":{"x":24089.83468421934,"y":17058.032316501794},"targetPosition":{"x":24248.62725198452,"y":17180.00421254225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f23b14cc-df91-40a6-b1b2-9876aa8690c9","savedPayload":{"position":{"x":24248.62725198452,"y":17180.00421254225},"targetPosition":{"x":24564.757850042763,"y":17425.686459373293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7bff6698-f9c9-4b44-a4ee-193ffd703e40","savedPayload":{"position":{"x":24564.757850042763,"y":17425.686459373293},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"4b05add4-cf40-4168-9cc8-7aa79d81e819","savedPayload":{"position":{"x":24415.763123001547,"y":16932.144616107194},"targetPosition":{"x":24484.49711032994,"y":16575.463548937794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"a60fc3c0-051e-4063-99b9-b0be3fc7b3f0","savedPayload":{"position":{"x":23806.780619230267,"y":16610.348454258638},"targetPosition":{"x":24116.234079965558,"y":16594.413862145233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"81182574-694d-43b5-a55b-f380bef4e226","savedPayload":{"position":{"x":24116.234079965558,"y":16594.413862145233},"targetPosition":{"x":24484.49711032994,"y":16575.463548937794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"270cce8d-9e8c-4b61-9f31-df178eb3dae1","savedPayload":{"position":{"x":24352.38939899577,"y":16231.458035432808},"targetPosition":{"x":24484.49711032994,"y":16575.463548937794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"51020863-6f89-4c73-97fd-fbc7fc03348f"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"2b20e9f7-72c4-4a93-b278-c77295400bc9","savedPayload":{"position":{"x":24786.65666431669,"y":16351.563062282014},"targetPosition":{"x":24484.49711032994,"y":16575.463548937794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"d1bf6c44-0b02-4e8a-8877-20210246d2d0"}}}],"id":"43435aed-68cb-4a56-88c4-2574d91f5b32","savedPayload":{"position":{"x":24632.677723003882,"y":17241.808935262274},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"28c153db-44db-466c-83c7-a47c56152c4b","savedPayload":{"position":{"x":24604.42413949528,"y":17368.684628122508},"targetPosition":{"x":24735.402082011235,"y":17159.59562994399},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"1ea48dcf-f651-4b4d-a218-d13fceaa4d33","savedPayload":{"position":{"x":24358.098579835358,"y":17024.962668422362},"targetPosition":{"x":24546.652807358096,"y":17092.105065052485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"8ad430dd-933a-4cf2-9f2d-b3189a57fae4","savedPayload":{"position":{"x":24546.652807358096,"y":17092.105065052485},"targetPosition":{"x":24735.402082011235,"y":17159.59562994399},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"e9ebc5af-2940-47d8-a067-26b70105b4e9","savedPayload":{"position":{"x":24740.189158804,"y":16958.592681203845},"targetPosition":{"x":24735.402082011235,"y":17159.59562994399},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"51020863-6f89-4c73-97fd-fbc7fc03348f"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"b5d31d62-415f-4437-a011-9d89d3dd4d61","savedPayload":{"position":{"x":24931.84999493606,"y":17116.63576135556},"targetPosition":{"x":24735.402082011235,"y":17159.59562994399},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"d1bf6c44-0b02-4e8a-8877-20210246d2d0"}}}],"id":"904be022-f1e2-475e-9115-88224353cfa2","savedPayload":{"position":{"x":24735.402082011235,"y":17159.59562994399},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"4f68d1c6-26e0-4c28-837d-fa6b137c48b6","savedPayload":{"position":{"x":24561.930872739886,"y":13885.76170133438},"targetPosition":{"x":24790.816396421946,"y":14071.21562709497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2cf632ed-a72b-4a59-817f-32a1160217cd","savedPayload":{"position":{"x":24790.816396421946,"y":14071.21562709497},"targetPosition":{"x":25058.289889124524,"y":14287.940097687373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"420cb596-82bf-40f0-9097-b6ac41d35b13","savedPayload":{"position":{"x":25022.46059159579,"y":13945.527872663897},"targetPosition":{"x":25058.289889124524,"y":14287.940097687373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"51020863-6f89-4c73-97fd-fbc7fc03348f"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"1b42a439-3e00-444b-ab69-5f4e6af4f0f3","savedPayload":{"position":{"x":25275.06356057349,"y":14020.171990652927},"targetPosition":{"x":25058.289889124524,"y":14287.940097687373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"38ed128c-3053-45dd-a069-24e21b798603"}}}],"id":"4c74d4d8-d0a4-4581-bee7-36485d7a91a5","savedPayload":{"position":{"x":24851.84722114082,"y":17095.424636529846},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"d11795b4-f398-4b0d-b028-f0b9aadb3fa7","savedPayload":{"position":{"x":24682.6149527565,"y":13847.469842957531},"targetPosition":{"x":24890.359867022747,"y":14055.392352090945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"1a75e942-11f7-4b82-8dce-8383521d48e4","savedPayload":{"position":{"x":24890.359867022747,"y":14055.392352090945},"targetPosition":{"x":25119.797239089494,"y":14285.049856444366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"9a6a4625-a7b7-47f6-8460-47f5899d7431","savedPayload":{"position":{"x":25119.79544947793,"y":13959.36711288153},"targetPosition":{"x":25119.797239089494,"y":14285.049856444366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"d1bf6c44-0b02-4e8a-8877-20210246d2d0"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"2ed6c5e7-fc8c-45e6-acb1-fdcb81fdee7b","savedPayload":{"position":{"x":25350.360340879266,"y":14054.445573574772},"targetPosition":{"x":25119.797239089494,"y":14285.049856444366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"f23b14cc-df91-40a6-b1b2-9876aa8690c9"}}}],"id":"9fc6d2c4-a67b-42e8-841b-7523f7ab4962","savedPayload":{"position":{"x":25059.35434285554,"y":17090.773714853665},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"manage-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"d806311b-133d-423b-9026-7a418da2b5e3","savedPayload":{"position":{"x":25288.869520532997,"y":16985.1670166947},"targetPosition":{"x":25179.76053830832,"y":17153.776879011035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"51020863-6f89-4c73-97fd-fbc7fc03348f"}}},"id":"61fd08ac-8bd8-4539-a116-22c4469a2b2e","savedPayload":{"position":{"x":25179.76053830832,"y":17153.776879011035},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"manage-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"608a821f-bdff-4ec0-abd9-251c7c085a34","savedPayload":{"position":{"x":25455.85101914124,"y":17147.537169013773},"targetPosition":{"x":25290.554108859025,"y":17261.511759905385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"d1bf6c44-0b02-4e8a-8877-20210246d2d0"}}},"id":"4a257e17-128c-4c00-9e2b-a76049e30657","savedPayload":{"position":{"x":25290.554108859025,"y":17261.511759905385},"targetPosition":{"x":24961.73392317004,"y":17489.296902865837},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"dd3a2274-3986-4c89-bab9-265f6fa6b1d1","savedPayload":{"position":{"x":24961.73392317004,"y":17489.296902865837},"targetPosition":{"x":25056.781273974313,"y":17936.99613464608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Manage Stage Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"d386f88a-6d4d-4606-992c-e19df72e7f29","savedPayload":{"position":{"x":25362.99844787749,"y":17336.127094477473},"targetPosition":{"x":25374.997958157037,"y":17463.060147419073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"434bbab3-b2a1-47b5-8c5a-55ac7a2a2674","savedPayload":{"position":{"x":25374.997958157037,"y":17463.060147419073},"targetPosition":{"x":25396.930917348676,"y":17631.17974777773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"5123b469-2376-4f03-a995-82df2842cde3","savedPayload":{"position":{"x":25547.349343509766,"y":17365.878163328063},"targetPosition":{"x":25485.459108529652,"y":17476.386215563372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7b7fa67c-cdfd-41c5-83a2-3362fe2cef3c","savedPayload":{"position":{"x":25485.459108529652,"y":17476.386215563372},"targetPosition":{"x":25396.930917348676,"y":17631.17974777773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"e172032f-6c23-4267-b1a5-80c4fa2f7571","savedPayload":{"position":{"x":25676.274546227418,"y":17505.2153018006},"targetPosition":{"x":25561.691138422226,"y":17558.604219809975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c3473f91-b229-43d5-a1d4-79d535b5ac64","savedPayload":{"position":{"x":25561.691138422226,"y":17558.604219809975},"targetPosition":{"x":25396.930917348676,"y":17631.17974777773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"2df876ce-61ff-4a24-a34a-03126c0e02a6","savedPayload":{"position":{"x":25693.775419998332,"y":17703.03138544741},"targetPosition":{"x":25568.123444674664,"y":17676.41891499346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"16af0d06-b721-48e5-8ed2-7072f25e8fc3","savedPayload":{"position":{"x":25568.123444674664,"y":17676.41891499346},"targetPosition":{"x":25396.930917348676,"y":17631.17974777773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3db5604f-cacf-4c87-b1ea-5aa364bf9f48","savedPayload":{"position":{"x":25396.930917348676,"y":17631.17974777773},"targetPosition":{"x":25056.781273974313,"y":17936.99613464608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"768a5cc5-72db-4218-9a8b-706c51186b3d","savedPayload":{"position":{"x":25071.14850997705,"y":17898.410158313432},"targetPosition":{"x":24936.211964982052,"y":18315.02517647312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Close Stage Objects","config":"{ \n \"codeName\": \"Strategy-Objects\", \n \"icon\": \"trend\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate * 1.05","project":"Superalgos","id":"bb2edfb7-4b27-4023-937f-87edcefa4b36","savedPayload":{"position":{"x":24603.981796664386,"y":17173.793306038704},"targetPosition":{"x":24792.878932990257,"y":17240.285894025405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"064c3de1-dd16-4010-9267-f588f070aa32","savedPayload":{"position":{"x":24792.878932990257,"y":17240.285894025405},"targetPosition":{"x":25170.227806190716,"y":17372.511667638948},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"Begin Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\ny = record.beginRate","project":"Superalgos","id":"52da9824-848c-4ef6-ac1d-4c1a52baf9c2","savedPayload":{"position":{"x":24693.43924790597,"y":17007.576275133044},"targetPosition":{"x":24852.4234484772,"y":17129.308396751825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ce4b9d0e-3e46-4cf2-9ea6-a108f962ba9b","savedPayload":{"position":{"x":24852.4234484772,"y":17129.308396751825},"targetPosition":{"x":25170.227806190716,"y":17372.511667638948},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Bottom","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.beginRate * 1.05","project":"Superalgos","id":"ec40fffd-d0b2-410e-b8a0-346fd3975c13","savedPayload":{"position":{"x":24829.932571856185,"y":16877.615490164808},"targetPosition":{"x":24943.351578285597,"y":17042.553220788395},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"9ad19ea8-8df3-4601-bfb9-0e858dad9140","savedPayload":{"position":{"x":24943.351578285597,"y":17042.553220788395},"targetPosition":{"x":25170.227806190716,"y":17372.511667638948},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End Top","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\ny = record.endRate","project":"Superalgos","id":"d9ac4f25-f9aa-4de6-8f05-b43a159248be","savedPayload":{"position":{"x":25002.747837940853,"y":16796.026877474058},"targetPosition":{"x":25059.39419093945,"y":16987.91674892192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"92930f08-af27-4807-a1eb-98fb82c58fb2","savedPayload":{"position":{"x":25059.39419093945,"y":16987.91674892192},"targetPosition":{"x":25170.227806190716,"y":17372.511667638948},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ebdc8337-0d63-48c8-940e-83f14c7de8f3","savedPayload":{"position":{"x":25170.227806190716,"y":17372.511667638948},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Closed Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed'","project":"Superalgos","id":"17f11af6-9a1b-4df5-93ad-52acea4e9ccb","savedPayload":{"position":{"x":25208.00714764315,"y":16848.37412295763},"targetPosition":{"x":25473.583762565733,"y":16600.096094773846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"272091f5-637f-4389-ae00-8806170ec5fe","savedPayload":{"position":{"x":24904.94351595144,"y":16230.678454146599},"targetPosition":{"x":25164.220706971144,"y":16399.093056012447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"92bb2d8c-cbd9-4a46-ba6e-10ec3c04afbe","savedPayload":{"position":{"x":25164.220706971144,"y":16399.093056012447},"targetPosition":{"x":25473.583762565733,"y":16600.096094773846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"67a714b2-66d1-4c20-afc6-4985557c8924","savedPayload":{"position":{"x":25568.620486288033,"y":16244.36669967966},"targetPosition":{"x":25473.583762565733,"y":16600.096094773846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"064c3de1-dd16-4010-9267-f588f070aa32"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"9e1c1d76-9d74-4812-b79a-176890c35d64","savedPayload":{"position":{"x":25848.896588752737,"y":16596.300635787647},"targetPosition":{"x":25473.583762565733,"y":16600.096094773846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"9ad19ea8-8df3-4601-bfb9-0e858dad9140"}}}],"id":"9463d512-21f5-48c1-8cd6-b14747b338cf","savedPayload":{"position":{"x":25302.20974161536,"y":17288.674570457908},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Open Base","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"cb0d72ee-ae97-4482-94d0-6be4fa885ca3","savedPayload":{"position":{"x":25380.193526422514,"y":16714.45717864927},"targetPosition":{"x":25712.084202970855,"y":16558.939762472644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RUSTED_RED\",\n \"opacity\": 0.25,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 10,\n \"lineDash\": [3,3]\n }\n}","project":"Superalgos","id":"4c30f5b9-b06f-4ed0-b8b8-6672347063e0","savedPayload":{"position":{"x":25327.843242628373,"y":15999.323623054206},"targetPosition":{"x":25503.43862266737,"y":16255.223247439988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"90ab3a19-e778-46ce-8aad-05799a66cc36","savedPayload":{"position":{"x":25503.43862266737,"y":16255.223247439988},"targetPosition":{"x":25712.084202970855,"y":16558.939762472644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"f0ed2d50-c494-4fae-863a-752ecad0fd1d","savedPayload":{"position":{"x":25935.98001848433,"y":16266.705827831736},"targetPosition":{"x":25712.084202970855,"y":16558.939762472644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"064c3de1-dd16-4010-9267-f588f070aa32"}}},{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"68c67883-1f21-4a00-9537-a794638a4d07","savedPayload":{"position":{"x":26060.468067215366,"y":16699.211162198673},"targetPosition":{"x":25712.084202970855,"y":16558.939762472644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"9ad19ea8-8df3-4601-bfb9-0e858dad9140"}}}],"id":"c3249cad-9f26-4ff2-ab0d-968c66bb7f2d","savedPayload":{"position":{"x":25455.963621188937,"y":17262.057680973976},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Left Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"15a2eeab-c29f-45e9-b407-30f99dfb2b3a","savedPayload":{"position":{"x":25706.113038509237,"y":15977.769488781074},"targetPosition":{"x":25817.154730275273,"y":16267.724869987025},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"ef752c53-dc77-4be4-80ec-f24b3ae0bf6d","savedPayload":{"position":{"x":25817.154730275273,"y":16267.724869987025},"targetPosition":{"x":25948.991874823794,"y":16611.832998990303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin Bottom","project":"Superalgos","id":"b6002088-f077-44c3-bdac-1e310ef78e32","savedPayload":{"position":{"x":26098.736003293696,"y":16275.224868604024},"targetPosition":{"x":25948.991874823794,"y":16611.832998990303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"064c3de1-dd16-4010-9267-f588f070aa32"}}},{"type":"Polygon Vertex","name":"Begin Top","project":"Superalgos","id":"210bad6f-d160-4d55-80f4-5a441a79cea1","savedPayload":{"position":{"x":26292.996323669162,"y":16479.665189475432},"targetPosition":{"x":25948.991874823794,"y":16611.832998990303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin Top","id":"ce4b9d0e-3e46-4cf2-9ea6-a108f962ba9b"}}}],"id":"dbd9d421-d90c-4ab8-a26b-c2254d7abec1","savedPayload":{"position":{"x":25608.27850607035,"y":17296.47688435172},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Right Line","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREY\",\n \"opacity\": 0.25,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.TITANIUM_YELLOW\",\n \"opacity\": 0.35,\n \"lineWidth\": 1,\n \"lineDash\": [1,1]\n }\n}","project":"Superalgos","id":"50698494-7f90-4d92-a87e-452567bce9b3","savedPayload":{"position":{"x":26164.53202427431,"y":16072.702860737658},"targetPosition":{"x":26156.52896593925,"y":16383.027662005394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"58d29c18-d22b-4294-97a0-3a9fae711b6c","savedPayload":{"position":{"x":26156.52896593925,"y":16383.027662005394},"targetPosition":{"x":26146.993297019664,"y":16751.563980824445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"End Bottom","project":"Superalgos","id":"4617c7b4-acc4-4122-a714-bc2b38b4566f","savedPayload":{"position":{"x":26414.030997271555,"y":16497.96932180807},"targetPosition":{"x":26146.993297019664,"y":16751.563980824445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Bottom","id":"9ad19ea8-8df3-4601-bfb9-0e858dad9140"}}},{"type":"Polygon Vertex","name":"End Top","project":"Superalgos","id":"d0589ad1-0f35-4e0f-ab38-8de7a56f04b6","savedPayload":{"position":{"x":26514.97091356275,"y":16760.848756377032},"targetPosition":{"x":26146.993297019664,"y":16751.563980824445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End Top","id":"92930f08-af27-4807-a1eb-98fb82c58fb2"}}}],"id":"a5e40c24-183d-4896-97b0-f9f0f104c240","savedPayload":{"position":{"x":25735.781677324325,"y":17386.56995393502},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"close-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"8c6238d9-007c-48b6-9d95-df4a6aa5c14b","savedPayload":{"position":{"x":26006.399601957903,"y":17446.4431610194},"targetPosition":{"x":25819.08439083658,"y":17518.642216019605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin Bottom","id":"064c3de1-dd16-4010-9267-f588f070aa32"}}},"id":"21f90d1d-d464-4bf4-9435-87afdc4daf19","savedPayload":{"position":{"x":25819.08439083658,"y":17518.642216019605},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"close-stage\",\n\"size\": 25\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"End Bottom","config":"{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }","project":"Superalgos","id":"cae4a4f0-e26b-40ab-8a29-04d1dfde4633","savedPayload":{"position":{"x":26046.20198605366,"y":17675.729129769694},"targetPosition":{"x":25845.465235867778,"y":17670.891224989064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End Bottom","id":"9ad19ea8-8df3-4601-bfb9-0e858dad9140"}}},"id":"63d17b18-3750-42c2-b785-9bfb4c2f7bfc","savedPayload":{"position":{"x":25845.465235867778,"y":17670.891224989064},"targetPosition":{"x":25445.489223080098,"y":17662.29899610047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"2236ae6a-63a0-4031-a6aa-95fd8dbd1e6d","savedPayload":{"position":{"x":25445.489223080098,"y":17662.29899610047},"targetPosition":{"x":25259.650016852967,"y":18080.142869128475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Close Stage Object","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"7ff88a72-886f-4417-980f-29ec65270b3b","savedPayload":{"position":{"x":25860.351018277473,"y":17773.697769214185},"targetPosition":{"x":25795.881018401167,"y":17883.70407874333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"30d603e4-521d-464e-9f80-a22f99d43bc4","savedPayload":{"position":{"x":25795.881018401167,"y":17883.70407874333},"targetPosition":{"x":25714.430132212674,"y":18032.693400433986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"b1f57c8d-346f-4c8f-8bf1-4d0e9f9cec6f","savedPayload":{"position":{"x":25992.17850610818,"y":17906.20460691568},"targetPosition":{"x":25877.29291097318,"y":17959.507066043225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1ccd3f25-5841-4563-98ef-f97f82b6da66","savedPayload":{"position":{"x":25877.29291097318,"y":17959.507066043225},"targetPosition":{"x":25714.430132212674,"y":18032.693400433986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Begin Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.beginRate","project":"Superalgos","id":"6e1dc213-47ad-407a-b993-c9ed20d0db14","savedPayload":{"position":{"x":26014.882942709355,"y":18094.651578501012},"targetPosition":{"x":25890.695033874275,"y":18070.769375650347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d6912158-6634-4cce-82e1-be1f3f8c0211","savedPayload":{"position":{"x":25890.695033874275,"y":18070.769375650347},"targetPosition":{"x":25714.430132212674,"y":18032.693400433986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"End Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.endRate","project":"Superalgos","id":"0ecdc927-ff01-4f77-87ff-47be6ad314d6","savedPayload":{"position":{"x":25912.687413960644,"y":18265.106323810534},"targetPosition":{"x":25826.678259869346,"y":18169.725107442817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f63619e4-c005-4a60-883e-ea24a36c04e6","savedPayload":{"position":{"x":25826.678259869346,"y":18169.725107442817},"targetPosition":{"x":25714.430132212674,"y":18032.693400433986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"069885e7-351f-45dc-8423-113db65b9592","savedPayload":{"position":{"x":25714.430132212674,"y":18032.693400433986},"targetPosition":{"x":25259.650016852967,"y":18080.142869128475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"de84947f-ec29-4125-a2b3-a3da595d1653","savedPayload":{"position":{"x":25290.45345596248,"y":18057.63918933579},"targetPosition":{"x":24936.211964982052,"y":18315.02517647312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"23f6d360-b2ec-462d-ba57-9226d0fc0c5b","savedPayload":{"position":{"x":24941.217404066585,"y":18264.893045797242},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter","name":"Exchange Orders","config":"{ \n \"codeName\": \"Exchange-Orders\"\n}","project":"Superalgos","modules":[{"type":"Plotter Module","name":"Market Buy Orders","config":"{ \n \"codeName\": \"Market-Buy-Orders\", \n \"icon\": \"trend\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}\n","project":"Superalgos","id":"bc2c1fb7-af45-4444-b883-7523eb94bcc0","savedPayload":{"position":{"x":24298.85766290749,"y":18246.543055860882},"targetPosition":{"x":24431.109344673296,"y":18064.51423212652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d2c59a6-72ce-4f42-8d14-62e4a7d11d73","savedPayload":{"position":{"x":24431.109344673296,"y":18064.51423212652},"targetPosition":{"x":24563.361026439103,"y":17882.485408392156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"76027de9-5f42-494b-be42-7b24e7663fb4","savedPayload":{"position":{"x":24115.826173523383,"y":17835.447599921714},"targetPosition":{"x":24339.593599981243,"y":17858.966504156935},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0e224c82-a863-4953-8e38-42ff372df6cd","savedPayload":{"position":{"x":24339.593599981243,"y":17858.966504156935},"targetPosition":{"x":24563.361026439103,"y":17882.485408392156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c8f9bc68-22a9-47a7-8b54-f8e1ee93760a","savedPayload":{"position":{"x":24563.361026439103,"y":17882.485408392156},"targetPosition":{"x":24768.908754408687,"y":17790.9696637001},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"a307230c-ee14-4b3a-8430-5993da0e1b7e","savedPayload":{"position":{"x":24147.75770250765,"y":17893.36836443652},"targetPosition":{"x":24353.305430477234,"y":17801.852619744463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"2c437c94-96f4-4b5b-9241-45636f73356e","savedPayload":{"position":{"x":24353.305430477234,"y":17801.852619744463},"targetPosition":{"x":24558.85315844682,"y":17710.336875052406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"7d4ca25c-5454-4d6a-8ead-a4ecee6709b8","savedPayload":{"position":{"x":24348.79756248495,"y":17629.704086404712},"targetPosition":{"x":24558.85315844682,"y":17710.336875052406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"5d2c59a6-72ce-4f42-8d14-62e4a7d11d73"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"cefe7159-5b2f-4036-9aad-1d72358cbf81","savedPayload":{"position":{"x":24467.33741375476,"y":17504.78914708282},"targetPosition":{"x":24558.85315844682,"y":17710.336875052406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"0e224c82-a863-4953-8e38-42ff372df6cd"}}}],"id":"6217d021-ea5b-4b20-b093-758a2d2fb5d4","savedPayload":{"position":{"x":24558.85315844682,"y":17710.336875052406},"targetPosition":{"x":24768.908754408687,"y":17790.9696637001},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"bullet-market-buy-order\", \n\"size\": 20\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"48799848-30ad-4ef3-914e-45c3299168da","savedPayload":{"position":{"x":24631.635137370602,"y":17482.648071745723},"targetPosition":{"x":24677.39300971663,"y":17585.421935730516},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"5d2c59a6-72ce-4f42-8d14-62e4a7d11d73"}}},"id":"c988d815-94cf-48e3-9447-2e81b97271b2","savedPayload":{"position":{"x":24677.39300971663,"y":17585.421935730516},"targetPosition":{"x":24768.908754408687,"y":17790.9696637001},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"486a0f30-691f-4c40-a18e-a1b0ac336ac1","savedPayload":{"position":{"x":24768.908754408687,"y":17790.9696637001},"targetPosition":{"x":25189.019946332428,"y":17952.235240995484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Market Buy Order","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"6c10223a-aec1-485d-a731-2122a2485359","savedPayload":{"position":{"x":23862.399092957447,"y":17170.9616351311},"targetPosition":{"x":24202.183627462626,"y":17033.749621410225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6edbd7e7-a5ef-4ec0-ae1d-41c6a7cec5e1","savedPayload":{"position":{"x":24202.183627462626,"y":17033.749621410225},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.rate","project":"Superalgos","id":"706b3e18-b354-4b2d-ad94-8a1e06aa3d6a","savedPayload":{"position":{"x":23809.295253307635,"y":16921.740187466366},"targetPosition":{"x":24175.591181145603,"y":16909.06589895518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"312fc9a8-af5d-428b-b1b9-9207bf4def4d","savedPayload":{"position":{"x":24175.591181145603,"y":16909.06589895518},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"6823da7b-b937-44ec-a748-6544810c5e4d","savedPayload":{"position":{"x":23844.686042368026,"y":16669.917379737602},"targetPosition":{"x":24193.281240664917,"y":16783.12074227086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bdc187a2-01a2-4d5e-a3b6-e03a3aa83337","savedPayload":{"position":{"x":24193.281240664917,"y":16783.12074227086},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"df586a2e-5e92-4719-b43a-b66e92d54cfb","savedPayload":{"position":{"x":23964.21643519404,"y":16445.037650075534},"targetPosition":{"x":24253.052371519163,"y":16670.65746647881},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c832572-6989-49fe-af66-337113d833bd","savedPayload":{"position":{"x":24253.052371519163,"y":16670.65746647881},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Order Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.orderName","project":"Superalgos","id":"ccaa9e2b-3d64-40fc-85e3-db8852ffe835","savedPayload":{"position":{"x":24153.45061837541,"y":16274.622167143008},"targetPosition":{"x":24347.685211466985,"y":16585.437309734738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"008d9794-b703-4e95-90a5-4be6541257b5","savedPayload":{"position":{"x":24347.685211466985,"y":16585.437309734738},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Algorithm Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.algorithmName","project":"Superalgos","id":"cb7fe638-c8c1-4017-91c5-332f2a42d411","savedPayload":{"position":{"x":24389.548221643516,"y":16179.227629767918},"targetPosition":{"x":24465.76049520407,"y":16537.741599180794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"233fcc31-94fb-4a83-8010-a47b06aa0175","savedPayload":{"position":{"x":24465.76049520407,"y":16537.741599180794},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Situation Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"b205501c-00a5-42a5-bfb1-e1d766474e9b","savedPayload":{"position":{"x":24643.593633954613,"y":16170.362364262595},"targetPosition":{"x":24592.833400129206,"y":16533.334709673683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef885584-c0ad-42ab-af01-1507c16da1c1","savedPayload":{"position":{"x":24592.833400129206,"y":16533.334709673683},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"43a37c5e-0519-4920-9c61-1c8e7ee35308","savedPayload":{"position":{"x":24855.758065811726,"y":16252.321756420351},"targetPosition":{"x":24714.016025858626,"y":16572.824580531535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"64741d06-09d2-497f-ab50-f1a0d1eba4bd","savedPayload":{"position":{"x":24714.016025858626,"y":16572.824580531535},"targetPosition":{"x":24541.967815566248,"y":16896.297154647396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"12929733-5964-4948-877b-b1edda37162a","savedPayload":{"position":{"x":24905.82577036,"y":17602.519558339845},"targetPosition":{"x":25189.019946332428,"y":17952.235240995484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Buy Order Stats","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Percentage Filled","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.percentageFilled","project":"Superalgos","id":"14e3004b-320d-4791-aa6e-3f0d872ec7ec","savedPayload":{"position":{"x":24618.09570162402,"y":16439.966226993307},"targetPosition":{"x":24760.75621966212,"y":16555.3445127771},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0d50ad49-9842-4e0e-86fd-12c026ada170","savedPayload":{"position":{"x":24760.75621966212,"y":16555.3445127771},"targetPosition":{"x":24954.703993567215,"y":16712.091785698405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Actual Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.actualRate","project":"Superalgos","id":"8a56fba9-5ffc-4adf-8d6e-021fd4e5a43c","savedPayload":{"position":{"x":24899.031477799002,"y":16292.004712325104},"targetPosition":{"x":24928.43089547231,"y":16464.4358144584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d6c7e18a-79da-4aed-8fae-298e604e05d0","savedPayload":{"position":{"x":24928.43089547231,"y":16464.4358144584},"targetPosition":{"x":24954.703993567215,"y":16712.091785698405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"d7dd0006-3d9f-49c8-984a-07b9d5f0dc48","savedPayload":{"position":{"x":25205.165582800037,"y":16377.122256855275},"targetPosition":{"x":25090.252681451027,"y":16520.09968608916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d411dc1c-83d7-4d2d-948e-c90f9e29121b","savedPayload":{"position":{"x":25090.252681451027,"y":16520.09968608916},"targetPosition":{"x":24954.703993567215,"y":16712.091785698405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"81a88e44-189c-44ec-9607-cb1e4de8baa1","savedPayload":{"position":{"x":25118.624437064325,"y":17507.77548772767},"targetPosition":{"x":25189.019946332428,"y":17952.235240995484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Buy Order Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInBaseAsset","project":"Superalgos","id":"d304ece3-18dc-4e5a-bc0e-1249258b184e","savedPayload":{"position":{"x":25167.2540342437,"y":17121.028593132574},"targetPosition":{"x":25258.769778935755,"y":17326.57632110216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8313aeb6-6167-45ca-a3ca-4dc22b7fa33a","savedPayload":{"position":{"x":25258.769778935755,"y":17326.57632110216},"targetPosition":{"x":25350.285523627812,"y":17532.124049071743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInBaseAsset","project":"Superalgos","id":"461ae1a5-1d20-451a-8852-13d56b5268fb","savedPayload":{"position":{"x":25511.5511009232,"y":17112.012857148005},"targetPosition":{"x":25430.918312275506,"y":17322.068453109874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"83d46c3b-27cb-4aa9-a358-2e156aeece00","savedPayload":{"position":{"x":25430.918312275506,"y":17322.068453109874},"targetPosition":{"x":25350.285523627812,"y":17532.124049071743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInBaseAsset","project":"Superalgos","id":"88cf9464-968d-4222-ac52-b8e4dc151e69","savedPayload":{"position":{"x":25761.38097956698,"y":17349.09255968763},"targetPosition":{"x":25555.833251597396,"y":17440.608304379686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38227d86-ab39-4e74-8eb0-0cd44edf49eb","savedPayload":{"position":{"x":25555.833251597396,"y":17440.608304379686},"targetPosition":{"x":25350.285523627812,"y":17532.124049071743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"608a9068-7324-4f4c-8fdd-d9d8e42e26c6","savedPayload":{"position":{"x":25350.285523627812,"y":17532.124049071743},"targetPosition":{"x":25189.019946332428,"y":17952.235240995484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Buy Order Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInQuotedAsset","project":"Superalgos","id":"1b8818af-996e-4d6b-8a97-f4606714ee91","savedPayload":{"position":{"x":25585.77343745851,"y":17221.506212107335},"targetPosition":{"x":25562.254533223288,"y":17445.273638565195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"56ca8980-8ba9-4e01-a040-cdf19c9ae7f5","savedPayload":{"position":{"x":25562.254533223288,"y":17445.273638565195},"targetPosition":{"x":25538.735628988066,"y":17669.041065023055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInQuotedAsset","project":"Superalgos","id":"82c2ea84-a616-47e6-920b-1e0804dd20ed","savedPayload":{"position":{"x":25888.451311643705,"y":17385.846889050626},"targetPosition":{"x":25713.593470315885,"y":17527.44397703684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"913a187b-5504-4b85-a382-8f74726a54f4","savedPayload":{"position":{"x":25713.593470315885,"y":17527.44397703684},"targetPosition":{"x":25538.735628988066,"y":17669.041065023055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInQuotedAsset","project":"Superalgos","id":"a337b247-237b-41f8-93a3-3f5a964ae63a","savedPayload":{"position":{"x":25986.270481903786,"y":17716.078873493498},"targetPosition":{"x":25762.503055445926,"y":17692.559969258276},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"040ea111-a7a0-453c-9c65-d731c846324f","savedPayload":{"position":{"x":25762.503055445926,"y":17692.559969258276},"targetPosition":{"x":25538.735628988066,"y":17669.041065023055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1a55af5e-821d-4421-80d2-2c543d25ea1a","savedPayload":{"position":{"x":25538.735628988066,"y":17669.041065023055},"targetPosition":{"x":25189.019946332428,"y":17952.235240995484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e00fe7d4-894d-4483-a73a-3cd77943ea80","savedPayload":{"position":{"x":25189.019946332428,"y":17952.235240995484},"targetPosition":{"x":25259.41545560053,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Market Sell Orders","config":"{ \n \"codeName\": \"Market-Sell-Orders\", \n \"icon\": \"trend\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"df7ab0aa-4814-411b-a2f6-9594f67c7b41","savedPayload":{"position":{"x":24570.56497222864,"y":17710.617819837822},"targetPosition":{"x":24784.552688395048,"y":17641.08899610346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"788a8d38-a7f8-4e9f-aa91-0d73d83967ba","savedPayload":{"position":{"x":24784.552688395048,"y":17641.08899610346},"targetPosition":{"x":24998.540404561456,"y":17571.560172369096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"464d3c72-0056-48b0-b044-9131f136797f","savedPayload":{"position":{"x":24664.12523309663,"y":17270.45139950761},"targetPosition":{"x":24831.332818829043,"y":17421.005785938352},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5c7415c1-6a1d-4838-8587-6883c11724b4","savedPayload":{"position":{"x":24831.332818829043,"y":17421.005785938352},"targetPosition":{"x":24998.540404561456,"y":17571.560172369096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2e23d19b-466f-485b-b61d-ded90fa7b221","savedPayload":{"position":{"x":24998.540404561456,"y":17571.560172369096},"targetPosition":{"x":25218.623614726563,"y":17618.34030280309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"New Polygon","project":"Superalgos","polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"fc7ced4a-bcf0-4c18-9e3b-959e7cac59f6","savedPayload":{"position":{"x":24655.91341151797,"y":17336.07916414738},"targetPosition":{"x":24875.996621683076,"y":17382.859294581376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"10637dce-3cba-4c02-9561-da3ec43bdf0c","savedPayload":{"position":{"x":24875.996621683076,"y":17382.859294581376},"targetPosition":{"x":25096.079831848183,"y":17429.63942501537},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"210399d5-7817-4136-b2bf-59bc5b5c4eb6","savedPayload":{"position":{"x":24973.536048969803,"y":17240.93854722765},"targetPosition":{"x":25096.079831848183,"y":17429.63942501537},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"788a8d38-a7f8-4e9f-aa91-0d73d83967ba"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"912ac4dc-6acb-4097-84e9-cf3d72060597","savedPayload":{"position":{"x":25142.85996228218,"y":17209.556214850265},"targetPosition":{"x":25096.079831848183,"y":17429.63942501537},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"5c7415c1-6a1d-4838-8587-6883c11724b4"}}}],"id":"5b8dcb5c-6b20-4edf-aae5-1c526cdca536","savedPayload":{"position":{"x":25096.079831848183,"y":17429.63942501537},"targetPosition":{"x":25218.623614726563,"y":17618.34030280309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"New Image","config":"{ \n\"codeName\": \"bullet-market-sell-order\", \n\"size\": 20\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"5321e00c-41b9-42a6-8e9a-e84067288a6a","savedPayload":{"position":{"x":25288.793810377556,"y":17288.215487555433},"targetPosition":{"x":25265.403745160558,"y":17398.257092637985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"788a8d38-a7f8-4e9f-aa91-0d73d83967ba"}}},"id":"8ad2d152-57e7-4db6-b810-44bb870c46e2","savedPayload":{"position":{"x":25265.403745160558,"y":17398.257092637985},"targetPosition":{"x":25218.623614726563,"y":17618.34030280309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"c24bfe41-ef93-4f0a-8c96-843536c85a2f","savedPayload":{"position":{"x":25218.623614726563,"y":17618.34030280309},"targetPosition":{"x":25463.711180483326,"y":17995.74205837853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Market Sell Order","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"3beb54d7-d0a4-499e-becc-22691e15a292","savedPayload":{"position":{"x":25264.31333581048,"y":17379.902973956123},"targetPosition":{"x":25604.097870315658,"y":17242.690960235246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b1093c73-8eac-4291-a67f-7e4d546a914b","savedPayload":{"position":{"x":25604.097870315658,"y":17242.690960235246},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.rate","project":"Superalgos","id":"08be12d1-b8cd-4ab1-affe-008e4a6c2c17","savedPayload":{"position":{"x":25211.209496160667,"y":17130.681526291388},"targetPosition":{"x":25577.505423998635,"y":17118.007237780203},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"18550807-aa68-4b52-83c6-e16a44beb9f6","savedPayload":{"position":{"x":25577.505423998635,"y":17118.007237780203},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"917325b0-e9a2-428c-b291-34f6a4a462ed","savedPayload":{"position":{"x":25246.60028522106,"y":16878.858718562624},"targetPosition":{"x":25595.19548351795,"y":16992.062081095883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f6b71a6b-982d-4b61-9693-bbda2cb5abac","savedPayload":{"position":{"x":25595.19548351795,"y":16992.062081095883},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"71213f89-f5d2-4946-a100-dd141090ea0c","savedPayload":{"position":{"x":25366.130678047073,"y":16653.978988900555},"targetPosition":{"x":25654.966614372195,"y":16879.59880530383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9dca5f8f-c6c8-475f-ad85-96975552fb12","savedPayload":{"position":{"x":25654.966614372195,"y":16879.59880530383},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Order Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.orderName","project":"Superalgos","id":"24ab5826-f6bb-4ca7-b720-2fbd7a7a142c","savedPayload":{"position":{"x":25555.36486122844,"y":16483.56350596803},"targetPosition":{"x":25749.599454320018,"y":16794.37864855976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2af2f91f-8198-4be6-9ff6-f2fa525573b8","savedPayload":{"position":{"x":25749.599454320018,"y":16794.37864855976},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Algorithm Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.algorithmName","project":"Superalgos","id":"a48449db-1def-49af-8210-c06704e34cc9","savedPayload":{"position":{"x":25791.462464496548,"y":16388.168968592938},"targetPosition":{"x":25867.674738057103,"y":16746.682938005815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9b58e3d6-c336-4193-adf4-305640812adf","savedPayload":{"position":{"x":25867.674738057103,"y":16746.682938005815},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Situation Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"e0490e8b-a1f0-463e-808e-d5d4e34b6880","savedPayload":{"position":{"x":26045.507876807646,"y":16379.303703087617},"targetPosition":{"x":25994.747642982238,"y":16742.276048498705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e865f45c-813d-43c6-861d-bacdf4b90b7d","savedPayload":{"position":{"x":25994.747642982238,"y":16742.276048498705},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"f43b14f3-f74f-44fc-9901-a3928fc38cdf","savedPayload":{"position":{"x":26257.672308664758,"y":16461.263095245373},"targetPosition":{"x":26115.930268711658,"y":16781.765919356556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7b13f0e5-8cd7-48e7-b743-2fbf89ae2029","savedPayload":{"position":{"x":26115.930268711658,"y":16781.765919356556},"targetPosition":{"x":25943.88205841928,"y":17105.238493472418},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a5856620-e9ce-4ee1-830c-5b5dc45e9139","savedPayload":{"position":{"x":25440.160000174,"y":17546.358767738973},"targetPosition":{"x":25463.711180483326,"y":17995.74205837853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Sell Order Stats","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Percentage Filled","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.percentageFilled","project":"Superalgos","id":"f5522236-9f5c-4fdb-b08d-2e4946abc2e3","savedPayload":{"position":{"x":25686.699363342137,"y":16973.220124804247},"targetPosition":{"x":25829.359881380235,"y":17088.59841058804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2c7e8609-e799-4098-adfe-0a7b75ccb263","savedPayload":{"position":{"x":25829.359881380235,"y":17088.59841058804},"targetPosition":{"x":26023.30765528533,"y":17245.345683509346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Actual Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.actualRate","project":"Superalgos","id":"c6fe3736-eb2b-4750-b7f0-72ae5ff7d713","savedPayload":{"position":{"x":25967.63513951712,"y":16825.258610136047},"targetPosition":{"x":25997.034557190425,"y":16997.68971226934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ffc9a08a-8c74-4c50-a441-3f59296079b3","savedPayload":{"position":{"x":25997.034557190425,"y":16997.68971226934},"targetPosition":{"x":26023.30765528533,"y":17245.345683509346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"8636289b-9bd2-4026-a816-e1f75abf64bb","savedPayload":{"position":{"x":26273.769244518153,"y":16910.376154666217},"targetPosition":{"x":26158.856343169144,"y":17053.3535839001},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c54f0f59-b80f-4f72-bd85-ac1fd7a15b19","savedPayload":{"position":{"x":26158.856343169144,"y":17053.3535839001},"targetPosition":{"x":26023.30765528533,"y":17245.345683509346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fb23f6bb-8383-4276-8a77-5180e622653a","savedPayload":{"position":{"x":25668.00690536612,"y":17594.789122493767},"targetPosition":{"x":25463.711180483326,"y":17995.74205837853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Sell Order Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInBaseAsset","project":"Superalgos","id":"44fa5bfe-9b0b-48a9-a894-ddec881a6ad4","savedPayload":{"position":{"x":25934.673196926757,"y":17310.488072291555},"targetPosition":{"x":25887.89306649276,"y":17530.57128245666},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4498020e-77ee-4e27-9e10-9e463b1af7e6","savedPayload":{"position":{"x":25887.89306649276,"y":17530.57128245666},"targetPosition":{"x":25841.112936058766,"y":17750.65449262177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInBaseAsset","project":"Superalgos","id":"6e97ae4f-f7e2-4391-bae7-87ae36c4abd0","savedPayload":{"position":{"x":26218.514691634206,"y":17505.56692686501},"targetPosition":{"x":26029.813813846486,"y":17628.11070974339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dc0870d0-d0f2-42d2-aaef-5d7dda44618d","savedPayload":{"position":{"x":26029.813813846486,"y":17628.11070974339},"targetPosition":{"x":25841.112936058766,"y":17750.65449262177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInBaseAsset","project":"Superalgos","id":"05ae1a21-206b-4e53-b52d-b00917748c2a","savedPayload":{"position":{"x":26281.27935638898,"y":17844.21475348976},"targetPosition":{"x":26061.196146223872,"y":17797.434623055764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93694e2d-8e12-4bd3-9497-2489aa33caca","savedPayload":{"position":{"x":26061.196146223872,"y":17797.434623055764},"targetPosition":{"x":25841.112936058766,"y":17750.65449262177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3e9e4e57-bd41-41f5-8d52-c92d3a707e80","savedPayload":{"position":{"x":25841.112936058766,"y":17750.65449262177},"targetPosition":{"x":25463.711180483326,"y":17995.74205837853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Market Sell Order Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInQuotedAsset","project":"Superalgos","id":"394b6e9b-ee43-4cb9-8b7d-fef145bd8846","savedPayload":{"position":{"x":26214.20324398437,"y":17637.77570660438},"targetPosition":{"x":26063.648857553628,"y":17804.983292336794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"50b03be9-48dc-42db-8f6c-b9bac7d96276","savedPayload":{"position":{"x":26063.648857553628,"y":17804.983292336794},"targetPosition":{"x":25913.094471122884,"y":17972.190878069207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInQuotedAsset","project":"Superalgos","id":"34bd06ab-2d1e-4c03-9279-2fef1663d0a3","savedPayload":{"position":{"x":26362.47776176244,"y":17948.63969775988},"targetPosition":{"x":26137.78611644266,"y":17960.415287914544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5685f2bc-a91c-4e84-92ee-8dfe2bacd4a2","savedPayload":{"position":{"x":26137.78611644266,"y":17960.415287914544},"targetPosition":{"x":25913.094471122884,"y":17972.190878069207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInQuotedAsset","project":"Superalgos","id":"b63f1a7f-cbf8-4060-a74f-a2c624f3673f","savedPayload":{"position":{"x":26247.50964258771,"y":18273.299650930694},"targetPosition":{"x":26080.302056855297,"y":18122.74526449995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"28b9cc5b-898f-4cd6-87e9-5a8233362e88","savedPayload":{"position":{"x":26080.302056855297,"y":18122.74526449995},"targetPosition":{"x":25913.094471122884,"y":17972.190878069207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51d59c30-3a02-4d74-aa62-f1524ea544ee","savedPayload":{"position":{"x":25913.094471122884,"y":17972.190878069207},"targetPosition":{"x":25463.711180483326,"y":17995.74205837853},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a9811005-1b7d-45bb-8003-0e60caab5f09","savedPayload":{"position":{"x":25463.711180483326,"y":17995.74205837853},"targetPosition":{"x":25259.41545560053,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Limit Buy Orders","config":"{ \n \"codeName\": \"Market-Buy-Orders\", \n \"icon\": \"trend\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"94f80738-6b21-4e8d-8bdf-aa8ef6f8ad4f","savedPayload":{"position":{"x":24727.375565875533,"y":17250.017858541167},"targetPosition":{"x":25059.22409717837,"y":17311.522348394767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"491e71de-b648-48aa-b493-67ed00359e73","savedPayload":{"position":{"x":25059.22409717837,"y":17311.522348394767},"targetPosition":{"x":25391.072628481204,"y":17373.026838248366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"57bd54ae-96c8-4d10-bd6d-adf3d705e47e","savedPayload":{"position":{"x":24877.798601701186,"y":16934.649405625492},"targetPosition":{"x":25134.435615091195,"y":17153.83812193693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38fccc9b-d822-4598-a156-95c734ec3d6b","savedPayload":{"position":{"x":25134.435615091195,"y":17153.83812193693},"targetPosition":{"x":25391.072628481204,"y":17373.026838248366},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8901df44-b813-47f3-8ded-4e1f6c68ae8b","savedPayload":{"position":{"x":25391.072628481204,"y":17373.026838248366},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Status Open","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"bbbba1d8-fbf6-4e15-a4e7-edb6683dd74f","savedPayload":{"position":{"x":25154.780188360364,"y":17146.563771851004},"targetPosition":{"x":25469.86358230317,"y":17267.512954822545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [2,2]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"fa856a62-67b2-45b5-a186-a6538b220858","savedPayload":{"position":{"x":24945.290058319715,"y":16842.721690863902},"targetPosition":{"x":25207.576820311442,"y":17055.117322843224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bb28a0e6-1cb3-4138-95f0-069745242288","savedPayload":{"position":{"x":25207.576820311442,"y":17055.117322843224},"targetPosition":{"x":25469.86358230317,"y":17267.512954822545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"c4de49da-cd9d-4687-b08b-93f8bba1d454","savedPayload":{"position":{"x":25286.047907985598,"y":16984.461638140965},"targetPosition":{"x":25469.86358230317,"y":17267.512954822545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"491e71de-b648-48aa-b493-67ed00359e73"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"7b269f5c-62d2-4f58-a010-71f1179a3312","savedPayload":{"position":{"x":25382.51215458107,"y":16941.512988449984},"targetPosition":{"x":25469.86358230317,"y":17267.512954822545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"38fccc9b-d822-4598-a156-95c734ec3d6b"}}}],"id":"7be8ba85-07e7-4800-8988-ce76d2105b73","savedPayload":{"position":{"x":25469.86358230317,"y":17267.512954822545},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Status Closed Cancel Event","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed' && record.exitType === 'Cancel Event'","project":"Superalgos","id":"754cb109-361e-4b50-964a-0b5ef0ba4b70","savedPayload":{"position":{"x":25338.221496741236,"y":16967.863160880916},"targetPosition":{"x":25583.035346957884,"y":17200.182830177557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [4,4]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"6cae8828-961f-4184-b324-453570bf247e","savedPayload":{"position":{"x":25260.95318378265,"y":16606.98127913073},"targetPosition":{"x":25421.994265370267,"y":16903.582054654144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"bd024ea0-0641-43fe-8d01-63f23a7326cb","savedPayload":{"position":{"x":25421.994265370267,"y":16903.582054654144},"targetPosition":{"x":25583.035346957884,"y":17200.182830177557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"f05d7b53-3fba-4da7-91c2-154f4f2f92a2","savedPayload":{"position":{"x":25521.530857104284,"y":16868.33429887472},"targetPosition":{"x":25583.035346957884,"y":17200.182830177557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"491e71de-b648-48aa-b493-67ed00359e73"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"bc515a2b-68af-43a1-b0cb-036129122c87","savedPayload":{"position":{"x":25627.08793683215,"y":16865.570189463895},"targetPosition":{"x":25583.035346957884,"y":17200.182830177557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"38fccc9b-d822-4598-a156-95c734ec3d6b"}}}],"id":"ab881143-5631-4b27-a97a-94138dbd370d","savedPayload":{"position":{"x":25583.035346957884,"y":17200.182830177557},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Status Closed Filled","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed' && record.exitType === 'Filled'","project":"Superalgos","id":"c206ef6f-d846-4744-b49d-c1261977a591","savedPayload":{"position":{"x":25576.084930143195,"y":16872.96527348712},"targetPosition":{"x":25713.358547181277,"y":17181.286865441496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.GREEN\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"be3d2e3c-c973-421a-87d7-720472b42080","savedPayload":{"position":{"x":25642.801834475613,"y":16509.98458606791},"targetPosition":{"x":25678.080190828445,"y":16845.635725754702},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"daebbf6b-f45b-40f5-8182-bd95d1a657e9","savedPayload":{"position":{"x":25678.080190828445,"y":16845.635725754702},"targetPosition":{"x":25713.358547181277,"y":17181.286865441496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"72d869ee-aa3b-4995-9832-7ab1b06579bf","savedPayload":{"position":{"x":25783.52874283227,"y":16851.162050193838},"targetPosition":{"x":25713.358547181277,"y":17181.286865441496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"491e71de-b648-48aa-b493-67ed00359e73"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"da73c5dc-926a-4368-9229-98574af7fec4","savedPayload":{"position":{"x":25882.108547181277,"y":16889.00329166425},"targetPosition":{"x":25713.358547181277,"y":17181.286865441496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"38fccc9b-d822-4598-a156-95c734ec3d6b"}}}],"id":"a54693cf-8ec1-469d-afb9-2a724e4f6af7","savedPayload":{"position":{"x":25713.358547181277,"y":17181.286865441496},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"Status Closed Cancel Event","config":"{ \n\"codeName\": \"bullet-cancelled-order\", \n\"size\": 10\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.status === 'Closed' && record.exitType === 'Cancel Event'","project":"Superalgos","id":"9c3cb413-e20e-499b-ad72-de3ba1fc6543","savedPayload":{"position":{"x":25871.744902048882,"y":17047.77753430167},"targetPosition":{"x":25840.992657122082,"y":17213.701799953087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"End","config":"{ \n\"offsetX\": -5,\n \"offsetY\": 0\n }","project":"Superalgos","id":"b8016af3-22de-4a1b-b4cb-45a23b2928d5","savedPayload":{"position":{"x":25950.5870152778,"y":17085.38329325808},"targetPosition":{"x":25840.992657122082,"y":17213.701799953087},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End","id":"38fccc9b-d822-4598-a156-95c734ec3d6b"}}},"id":"d562a270-c953-4ebe-9985-9f724e0e7eb6","savedPayload":{"position":{"x":25840.992657122082,"y":17213.701799953087},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"Starting Point","config":"{ \n\"codeName\": \"bullet-limit-buy-order\", \n\"size\": 20\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"324aa438-7134-4918-b13e-082f3b3078dc","savedPayload":{"position":{"x":26071.912229847214,"y":17179.576963951993},"targetPosition":{"x":25946.506540547904,"y":17292.492753775052},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"491e71de-b648-48aa-b493-67ed00359e73"}}},"id":"89fe166c-e48e-4a0c-b357-149ffa17f2c2","savedPayload":{"position":{"x":25946.506540547904,"y":17292.492753775052},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"Status Closed Filled","config":"{ \n\"codeName\": \"bullet-limit-buy-order-filled\", \n\"size\": 20\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.status === 'Closed' && record.exitType === 'Filled'","project":"Superalgos","id":"09ebd654-f653-467c-91f3-e8b9ec95feeb","savedPayload":{"position":{"x":26152.907959522858,"y":17310.0834659487},"targetPosition":{"x":26013.83666519289,"y":17405.664518429767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"End","config":"{ \n\"offsetX\": -10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"a22c8598-870b-4d86-bb42-938cb21a5d28","savedPayload":{"position":{"x":26182.066465260355,"y":17392.424546025693},"targetPosition":{"x":26013.83666519289,"y":17405.664518429767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End","id":"38fccc9b-d822-4598-a156-95c734ec3d6b"}}},"id":"7c9a0ee3-b3f4-44c7-b51b-0efc830fd8d5","savedPayload":{"position":{"x":26013.83666519289,"y":17405.664518429767},"targetPosition":{"x":25695.695161949283,"y":17518.324333421166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"3ea3861e-f37d-4d78-a45e-9b5fa738aefd","savedPayload":{"position":{"x":25695.695161949283,"y":17518.324333421166},"targetPosition":{"x":25660.368391485295,"y":18192.3992693805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Limit Buy Order","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"5cec4759-6b80-42b0-9443-1b831b5b7d09","savedPayload":{"position":{"x":25833.520774648186,"y":16844.729747350353},"targetPosition":{"x":26024.779213225724,"y":17098.389452365012},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b09e6f5e-9273-4e1c-a54a-43ce45bc6dd8","savedPayload":{"position":{"x":26024.779213225724,"y":17098.389452365012},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.rate","project":"Superalgos","id":"f26cae34-697d-4ad2-a143-1693300d3311","savedPayload":{"position":{"x":26075.1492288885,"y":16718.485801362534},"targetPosition":{"x":26168.024723435738,"y":17022.524368134324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"387d66c8-900b-4e9d-8bc9-ea37b257256a","savedPayload":{"position":{"x":26168.024723435738,"y":17022.524368134324},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"b6443228-7052-4e44-8338-44a3d2498ae0","savedPayload":{"position":{"x":26344.131394734948,"y":16684.161952212493},"targetPosition":{"x":26327.57552282128,"y":17001.768915162287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d6f79efe-1f80-4033-92a1-6869a7e9fb06","savedPayload":{"position":{"x":26327.57552282128,"y":17001.768915162287},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"c448c5dc-5941-4bca-9328-79703fa9cabf","savedPayload":{"position":{"x":26608.390851391137,"y":16744.256958459442},"targetPosition":{"x":26483.943393495392,"y":17037.275687191617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bdddc9e-d08c-4944-8add-a1c1753489b1","savedPayload":{"position":{"x":26483.943393495392,"y":17037.275687191617},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Order Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.orderName","project":"Superalgos","id":"482dca74-9ba2-4a76-8101-fc24179e9299","savedPayload":{"position":{"x":26835.50307556864,"y":16891.596992091232},"targetPosition":{"x":26618.563015671192,"y":17124.042992508068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bc07d18f-6016-4959-ae36-efd2b9bd44f8","savedPayload":{"position":{"x":26618.563015671192,"y":17124.042992508068},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Algorithm Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.algorithmName","project":"Superalgos","id":"7a0ad104-5485-4807-891e-2aa1b970020c","savedPayload":{"position":{"x":26998.647709815898,"y":17107.574544065763},"targetPosition":{"x":26714.925452476375,"y":17251.78937096081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b04fe3cd-9003-4a69-a49d-ad6eface3203","savedPayload":{"position":{"x":26714.925452476375,"y":17251.78937096081},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Situation Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"cadd0d45-e81e-40fe-ac32-76bb35061bf2","savedPayload":{"position":{"x":27077.421494033337,"y":17366.417494960642},"targetPosition":{"x":26762.068994502195,"y":17404.718128900655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7239341a-6c4b-468a-bee8-21b27c2fa9d9","savedPayload":{"position":{"x":26762.068994502195,"y":17404.718128900655},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"d62047f4-7a35-4249-8b91-ffcc53228417","savedPayload":{"position":{"x":27059.098117231082,"y":17646.70383417113},"targetPosition":{"x":26748.843682533174,"y":17574.298399856838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a34576ad-99d8-469e-8b78-1bacb5aa7ee2","savedPayload":{"position":{"x":26748.843682533174,"y":17574.298399856838},"targetPosition":{"x":26304.926817547024,"y":17460.705984473396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"48ec80a7-6f68-4284-9bb5-f04ce3c1052b","savedPayload":{"position":{"x":25905.45595724206,"y":17814.99751380506},"targetPosition":{"x":25660.368391485295,"y":18192.3992693805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Buy Order Stats","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Percentage Filled","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.percentageFilled","project":"Superalgos","id":"bf5f428c-4b90-47d1-b001-8a3478e74522","savedPayload":{"position":{"x":26209.744370251676,"y":17393.41353984155},"targetPosition":{"x":26352.404888289773,"y":17508.791825625343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94b4e199-d798-4ba3-8fc7-3d739ae55cb1","savedPayload":{"position":{"x":26352.404888289773,"y":17508.791825625343},"targetPosition":{"x":26546.35266219487,"y":17665.539098546647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Actual Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.actualRate","project":"Superalgos","id":"cf967a95-e485-4fbe-9647-4b86624511f3","savedPayload":{"position":{"x":26490.680146426657,"y":17245.452025173345},"targetPosition":{"x":26520.079564099964,"y":17417.883127306643},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bd576bff-fa79-4ea3-87b7-565a2877a7b7","savedPayload":{"position":{"x":26520.079564099964,"y":17417.883127306643},"targetPosition":{"x":26546.35266219487,"y":17665.539098546647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"c523a647-b720-4932-ae18-771cb70e3145","savedPayload":{"position":{"x":26796.81425142769,"y":17330.569569703515},"targetPosition":{"x":26681.901350078682,"y":17473.546998937403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32b22d53-13c5-44db-941c-e29a4c1f05f7","savedPayload":{"position":{"x":26681.901350078682,"y":17473.546998937403},"targetPosition":{"x":26546.35266219487,"y":17665.539098546647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"90bd6690-de93-4158-a17f-728c28defc38","savedPayload":{"position":{"x":26061.32132737006,"y":17988.103544497706},"targetPosition":{"x":25660.368391485295,"y":18192.3992693805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Buy Order Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInBaseAsset","project":"Superalgos","id":"50c5c78c-49ba-43c1-9000-dfb7a2890db5","savedPayload":{"position":{"x":27168.42740560968,"y":17508.087845937593},"targetPosition":{"x":26932.92827047577,"y":17720.099271153897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e60271d1-8ce8-47e1-9776-42b583c9f2d6","savedPayload":{"position":{"x":26932.92827047577,"y":17720.099271153897},"targetPosition":{"x":26593.600999444443,"y":18025.86211070353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInBaseAsset","project":"Superalgos","id":"65c1b916-6c36-4818-901a-7b6411c523b2","savedPayload":{"position":{"x":27366.506969563958,"y":18066.024283002414},"targetPosition":{"x":27048.759936787967,"y":18049.597120613977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"63d19192-c46d-4e53-bf40-c229089d93b6","savedPayload":{"position":{"x":27048.759936787967,"y":18049.597120613977},"targetPosition":{"x":26593.600999444443,"y":18025.86211070353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInBaseAsset","project":"Superalgos","id":"7a32b13c-7e88-48d1-9ef7-dee529f39c95","savedPayload":{"position":{"x":27111.5787956666,"y":18600.943146731624},"targetPosition":{"x":26899.05404149945,"y":18365.04915827637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b1a42210-66b9-4e3a-aef5-4b0f385bcfc8","savedPayload":{"position":{"x":26899.05404149945,"y":18365.04915827637},"targetPosition":{"x":26593.600999444443,"y":18025.86211070353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8504b6e3-83c8-45ea-959a-41303f9d4274","savedPayload":{"position":{"x":26109.751682124854,"y":18215.950449689826},"targetPosition":{"x":25660.368391485295,"y":18192.3992693805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Buy Order Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInQuotedAsset","project":"Superalgos","id":"0b1e5b50-51c0-4753-b11f-37fe4179f81f","savedPayload":{"position":{"x":27249.905648596738,"y":18177.43630018128},"targetPosition":{"x":26938.08379991229,"y":18243.70523216879},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d30de7e2-c899-49da-b015-95ca5ca26133","savedPayload":{"position":{"x":26938.08379991229,"y":18243.70523216879},"targetPosition":{"x":26492.174089175543,"y":18338.662656737823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInQuotedAsset","project":"Superalgos","id":"d6a5ced0-9c91-4d52-ad4a-ac544a917496","savedPayload":{"position":{"x":27141.527686477177,"y":18760.17435970883},"targetPosition":{"x":26874.928420935088,"y":18587.15239263583},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3c7ad592-3802-479f-9f03-c7f5d90aa827","savedPayload":{"position":{"x":26874.928420935088,"y":18587.15239263583},"targetPosition":{"x":26492.174089175543,"y":18338.662656737823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInQuotedAsset","project":"Superalgos","id":"7b5c11c3-8e14-4de1-9f05-46d958bac220","savedPayload":{"position":{"x":26653.123886502704,"y":19096.015661650654},"targetPosition":{"x":26586.957890978683,"y":18784.71514709761},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0862104-b7d8-42da-bc28-b4218d1cad2e","savedPayload":{"position":{"x":26586.957890978683,"y":18784.71514709761},"targetPosition":{"x":26492.174089175543,"y":18338.662656737823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b60e7e48-8ae7-4701-848b-8faa9ba58c11","savedPayload":{"position":{"x":26037.770147060735,"y":18437.486835137264},"targetPosition":{"x":25660.368391485295,"y":18192.3992693805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7e3120c7-a0c9-483c-ada9-8c53deb10f33","savedPayload":{"position":{"x":25660.368391485295,"y":18192.3992693805},"targetPosition":{"x":25259.41545560053,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Module","name":"Limit Sell Orders","config":"{ \n \"codeName\": \"Market-Sell-Orders\", \n \"icon\": \"trend\",\n \"useRateAtMousePosition\": true,\n \"ratePropertyName\": \"actualRate\"\n}","project":"Superalgos","shapes":{"type":"Shapes","name":"New Shapes","project":"Superalgos","chartPoints":[{"type":"Chart Points","name":"New Chart Points","project":"Superalgos","points":[{"type":"Point","name":"Begin","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.begin\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"7f75a437-7e83-43b8-8353-459cec82a3da","savedPayload":{"position":{"x":25502.986052646083,"y":17156.288503591237},"targetPosition":{"x":25735.305721942725,"y":17401.102353807884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8a8ba4d-ceac-43f7-9cac-b15d3c577e0a","savedPayload":{"position":{"x":25735.305721942725,"y":17401.102353807884},"targetPosition":{"x":25967.625391239366,"y":17645.916204024532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Point","name":"End","project":"Superalgos","pointFormula":{"type":"Point Formula","name":"New Point Formula","code":"x = record.end\nif (record.actualRate !== 0) {\ny = record.actualRate\n} else {\ny = record.rate\n}","project":"Superalgos","id":"d69fedc3-dcb6-4b3a-a8a5-7db14d37f8da","savedPayload":{"position":{"x":25810.04977063663,"y":16989.566507756103},"targetPosition":{"x":25888.837580937998,"y":17317.741355890317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292","savedPayload":{"position":{"x":25888.837580937998,"y":17317.741355890317},"targetPosition":{"x":25967.625391239366,"y":17645.916204024532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"045c78e6-ddff-4981-b497-31d6d19f9ef1","savedPayload":{"position":{"x":25967.625391239366,"y":17645.916204024532},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"polygons":[{"type":"Polygon","name":"Status Open","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Open'","project":"Superalgos","id":"5aeb9711-2374-4a99-b757-f037eb05db27","savedPayload":{"position":{"x":25909.57244215658,"y":17323.81452317957},"targetPosition":{"x":26093.38811647415,"y":17606.86583986115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [2,2]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"f829eef3-dc45-4244-934b-8955baa9a363","savedPayload":{"position":{"x":25918.68526102995,"y":16954.86590711603},"targetPosition":{"x":26006.03668875205,"y":17280.86587348859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"f24f885d-8cb5-4519-a209-9dccea0d7b32","savedPayload":{"position":{"x":26006.03668875205,"y":17280.86587348859},"targetPosition":{"x":26093.38811647415,"y":17606.86583986115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"4f668994-11ef-4a59-a41c-b238fb22c449","savedPayload":{"position":{"x":26111.051501706144,"y":17269.828371881482},"targetPosition":{"x":26093.38811647415,"y":17606.86583986115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"d8a8ba4d-ceac-43f7-9cac-b15d3c577e0a"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"95434555-e691-495e-ba26-d489c6356590","savedPayload":{"position":{"x":26214.337299445688,"y":17291.782445918347},"targetPosition":{"x":26093.38811647415,"y":17606.86583986115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292"}}}],"id":"186d1b59-7d04-4b40-83c9-acc361b8a12a","savedPayload":{"position":{"x":26093.38811647415,"y":17606.86583986115},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Status Closed Cancel Event","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed' && record.exitType === 'Cancel Event'","project":"Superalgos","id":"831bf4d8-74d0-4451-9ac1-74129aed4035","savedPayload":{"position":{"x":26163.017161810956,"y":17287.066787727093},"targetPosition":{"x":26224.521651664556,"y":17618.91531902993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [4,4]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"1981c910-838a-472d-bef0-df163a5ba786","savedPayload":{"position":{"x":26312.62683141309,"y":16949.690037602606},"targetPosition":{"x":26268.574241538823,"y":17284.302678316268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"34016ca1-5c63-4cad-8f9e-5f042f3ff604","savedPayload":{"position":{"x":26268.574241538823,"y":17284.302678316268},"targetPosition":{"x":26224.521651664556,"y":17618.91531902993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"bf1708a8-16c7-45fc-88c4-1ad7aace15ea","savedPayload":{"position":{"x":26369.819146837355,"y":17314.29278556185},"targetPosition":{"x":26224.521651664556,"y":17618.91531902993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"d8a8ba4d-ceac-43f7-9cac-b15d3c577e0a"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"db93470c-9f50-465c-b5f1-e222beb27f6c","savedPayload":{"position":{"x":26456.841320961197,"y":17374.101468813282},"targetPosition":{"x":26224.521651664556,"y":17618.91531902993},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292"}}}],"id":"8e993263-dbfc-4d41-864a-9470e70d7e4f","savedPayload":{"position":{"x":26224.521651664556,"y":17618.91531902993},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Polygon","name":"Status Closed Filled","project":"Superalgos","polygonCondition":{"type":"Polygon Condition","name":"New Polygon Condition","code":"record.status === 'Closed' && record.exitType === 'Filled'","project":"Superalgos","id":"efdea12d-4ac6-4fa1-819f-1de25267d9bc","savedPayload":{"position":{"x":26411.232300457297,"y":17350.10540230856},"targetPosition":{"x":26341.062104806304,"y":17680.230217556218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonBorder":{"type":"Polygon Border","name":"New Polygon Border","project":"Superalgos","style":{"type":"Style","name":"New Style","config":"{\n \"default\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 1,\n \"lineDash\": [0,0]\n },\n \"atMousePosition\": {\n \"paletteColor\": \"UI_COLOR.RED\",\n \"opacity\": 1,\n \"lineWidth\": 3,\n \"lineDash\": [0,0]\n }\n}","project":"Superalgos","id":"753d66c8-8384-4ae0-bdae-8cfa0a3564b6","savedPayload":{"position":{"x":26678.562104806304,"y":17095.663070001723},"targetPosition":{"x":26509.812104806304,"y":17387.94664377897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"styleConditions":[],"id":"decddc18-331d-4a58-bf36-02808c215d87","savedPayload":{"position":{"x":26509.812104806304,"y":17387.94664377897},"targetPosition":{"x":26341.062104806304,"y":17680.230217556218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"polygonVertexes":[{"type":"Polygon Vertex","name":"Begin","project":"Superalgos","id":"373ba1e5-fa16-405f-b4f2-4d2d3cea3acb","savedPayload":{"position":{"x":26591.873483404925,"y":17454.398637910104},"targetPosition":{"x":26341.062104806304,"y":17680.230217556218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"Begin","id":"d8a8ba4d-ceac-43f7-9cac-b15d3c577e0a"}}},{"type":"Polygon Vertex","name":"End","project":"Superalgos","id":"b67222e6-6186-4e69-ad67-a3a6c5a89201","savedPayload":{"position":{"x":26649.38369676068,"y":17542.956600518137},"targetPosition":{"x":26341.062104806304,"y":17680.230217556218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Point","name":"End","id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292"}}}],"id":"bf0751d6-fdb2-4e66-a39c-2bd99252bd60","savedPayload":{"position":{"x":26341.062104806304,"y":17680.230217556218},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"images":[{"type":"Image","name":"Status Closed Cancel Event","config":"{ \n\"codeName\": \"bullet-cancelled-order\", \n\"size\": 10\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.status === 'Closed' && record.exitType === 'Cancel Event'","project":"Superalgos","id":"191dc665-7aaf-4aa6-8c8e-966ded042b38","savedPayload":{"position":{"x":26547.67417345872,"y":17665.316063312006},"targetPosition":{"x":26425.267248350396,"y":17781.47589796033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"End","config":"{ \n\"offsetX\": -5,\n \"offsetY\": 0\n }","project":"Superalgos","id":"ed6c3f2f-fa06-45f6-af44-7038503f9c5c","savedPayload":{"position":{"x":26589.354672417503,"y":17742.081992809646},"targetPosition":{"x":26425.267248350396,"y":17781.47589796033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End","id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292"}}},"id":"5533709c-4ba8-4b2e-af48-827be2e1fe75","savedPayload":{"position":{"x":26425.267248350396,"y":17781.47589796033},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"Starting Point","config":"{ \n\"codeName\": \"bullet-limit-sell-order\", \n\"size\": 20\n}","project":"Superalgos","imagePosition":{"type":"Image Position","name":"Begin","config":"{ \n\"offsetX\": 10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"8a78cf69-decb-4ab7-b182-f96676867972","savedPayload":{"position":{"x":26632.143182357173,"y":17889.599445018695},"targetPosition":{"x":26464.317612513776,"y":17907.238623195113},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"Begin","id":"d8a8ba4d-ceac-43f7-9cac-b15d3c577e0a"}}},"id":"5c00fd53-4ca0-4903-9b02-ccb5afd7df12","savedPayload":{"position":{"x":26464.317612513776,"y":17907.238623195113},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Image","name":"Status Closed Filled","config":"{ \n\"codeName\": \"bullet-limit-sell-order-filled\", \n\"size\": 20\n}","project":"Superalgos","imageCondition":{"type":"Image Condition","name":"New Image Condition","code":"record.status === 'Closed' && record.exitType === 'Filled'","project":"Superalgos","id":"510f3cbf-b1ba-4a5f-9db3-b90c91c6c38b","savedPayload":{"position":{"x":26620.960306934623,"y":18042.78951841247},"targetPosition":{"x":26452.268133345,"y":18038.37215838552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"imagePosition":{"type":"Image Position","name":"End","config":"{ \n\"offsetX\": -10,\n \"offsetY\": 0\n }","project":"Superalgos","id":"5feb84a7-3898-4c30-87c9-40b3d141eb5e","savedPayload":{"position":{"x":26596.15116107975,"y":18126.543791181335},"targetPosition":{"x":26452.268133345,"y":18038.37215838552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Point","name":"End","id":"a7c33161-bd93-4a7d-9d79-d6e6c3f3b292"}}},"id":"8564bc89-fb34-453f-8c5c-75459681cd7d","savedPayload":{"position":{"x":26452.268133345,"y":18038.37215838552},"targetPosition":{"x":26128.666472826982,"y":17942.516979547945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"texts":[],"id":"42719bff-262a-4401-9611-761f0db1e790","savedPayload":{"position":{"x":26128.666472826982,"y":17942.516979547945},"targetPosition":{"x":25703.875208868343,"y":18467.0905035314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"panels":[{"type":"Plotter Panel","name":"Limit Sell Order","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Serial Number","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.serialNumber","project":"Superalgos","id":"c5062c3f-117f-4c7f-8baf-1181e07c1f44","savedPayload":{"position":{"x":25603.880192707555,"y":19270.643344420576},"targetPosition":{"x":25943.664727212734,"y":19133.4313306997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2775824-cc6b-415a-a9a1-083a6f143c28","savedPayload":{"position":{"x":25943.664727212734,"y":19133.4313306997},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.rate","project":"Superalgos","id":"f1a1e227-ac94-4216-a73a-8e1499532932","savedPayload":{"position":{"x":25550.776353057743,"y":19021.42189675584},"targetPosition":{"x":25917.07228089571,"y":19008.747608244656},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9714ab0d-e1c1-4556-9467-d08f7cde214c","savedPayload":{"position":{"x":25917.07228089571,"y":19008.747608244656},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Status","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.status","project":"Superalgos","id":"5a83a8c5-a25c-4489-8659-a2de66406218","savedPayload":{"position":{"x":25586.167142118135,"y":18769.599089027077},"targetPosition":{"x":25934.762340415025,"y":18882.802451560336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"86407d60-10e5-43bf-ab20-ef5aadee9b29","savedPayload":{"position":{"x":25934.762340415025,"y":18882.802451560336},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Exit Type","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.exitType","project":"Superalgos","id":"4471f450-8aa3-428e-a2d7-11ea1f32fbce","savedPayload":{"position":{"x":25705.69753494415,"y":18544.719359365008},"targetPosition":{"x":25994.53347126927,"y":18770.339175768284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d944f70-0ef5-423a-88da-ee0d5cdf73ee","savedPayload":{"position":{"x":25994.53347126927,"y":18770.339175768284},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Order Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.orderName","project":"Superalgos","id":"dbf9a292-37f8-424e-800e-b479ae70f3de","savedPayload":{"position":{"x":25894.931718125517,"y":18374.30387643248},"targetPosition":{"x":26089.166311217094,"y":18685.119019024212},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a268a651-1823-4ae5-b1d3-8bb325ca0ad7","savedPayload":{"position":{"x":26089.166311217094,"y":18685.119019024212},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Algorithm Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.algorithmName","project":"Superalgos","id":"fc31dc8f-c014-43a2-b0e9-5885f0456011","savedPayload":{"position":{"x":26131.029321393624,"y":18278.90933905739},"targetPosition":{"x":26207.24159495418,"y":18637.42330847027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"09a1d252-4dd5-42f2-841a-0f9db2b2c1d4","savedPayload":{"position":{"x":26207.24159495418,"y":18637.42330847027},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Situation Name","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.situationName","project":"Superalgos","id":"ec99ec3d-02cc-445e-9281-f17347a84fc9","savedPayload":{"position":{"x":26385.07473370472,"y":18270.044073552068},"targetPosition":{"x":26334.314499879314,"y":18633.016418963158},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d9cee878-f71a-4829-8ce4-0debdc3833fa","savedPayload":{"position":{"x":26334.314499879314,"y":18633.016418963158},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Periods","config":"{\n \"valueDecimals\": 0\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.periods","project":"Superalgos","id":"55e5a5ee-fcbc-4ac0-ae44-4fc4ef2ca64f","savedPayload":{"position":{"x":26597.239165561834,"y":18352.003465709826},"targetPosition":{"x":26455.497125608734,"y":18672.50628982101},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a08ab071-656a-4f19-8d63-694d32f88b83","savedPayload":{"position":{"x":26455.497125608734,"y":18672.50628982101},"targetPosition":{"x":26283.448915316356,"y":18995.97886393687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5d485d15-9919-42cc-9399-54c679d7085d","savedPayload":{"position":{"x":26123.986400792084,"y":18305.824926236015},"targetPosition":{"x":25703.875208868343,"y":18467.0905035314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Sell Order Stats","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Percentage Filled","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.percentageFilled","project":"Superalgos","id":"e34fb8e5-a23a-461f-86b1-ee87aed3c3cf","savedPayload":{"position":{"x":26986.0723962566,"y":18232.14371165281},"targetPosition":{"x":26858.42963948916,"y":18325.545570627848},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cc61478e-bfdb-439b-a55c-4238c8ba920a","savedPayload":{"position":{"x":26858.42963948916,"y":18325.545570627848},"targetPosition":{"x":26646.795627538373,"y":18480.671535225363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Actual Rate","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.actualRate","project":"Superalgos","id":"ae5c666b-5001-479a-8d1f-2f00079e5585","savedPayload":{"position":{"x":27062.080870283033,"y":18545.620670988774},"targetPosition":{"x":26905.591419073797,"y":18521.417591734717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"172b26d5-66ca-4bcc-b453-e97fe8b0d06f","savedPayload":{"position":{"x":26905.591419073797,"y":18521.417591734717},"targetPosition":{"x":26646.795627538373,"y":18480.671535225363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Days","config":"{\n \"valueDecimals\": 2\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.days","project":"Superalgos","id":"c119f6cb-3354-4c7f-9d75-a4027adbdc2d","savedPayload":{"position":{"x":26891.88105174628,"y":18822.21496175113},"targetPosition":{"x":26799.92639171644,"y":18693.27010543133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"906f7f52-dedc-4c67-a18c-e1be9e753c5b","savedPayload":{"position":{"x":26799.92639171644,"y":18693.27010543133},"targetPosition":{"x":26646.795627538373,"y":18480.671535225363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"db2f6e9c-ce79-4465-a0dc-8ea02fac26b7","savedPayload":{"position":{"x":26148.334962136156,"y":18537.4860127995},"targetPosition":{"x":25703.875208868343,"y":18467.0905035314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Sell Order Base Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInBaseAsset","project":"Superalgos","id":"ace027c0-94cc-4f43-b7bc-5c845840b58f","savedPayload":{"position":{"x":27284.118642669102,"y":18700.96465435519},"targetPosition":{"x":26967.693916083277,"y":18733.821636006396},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7bf8afbb-b802-4355-812c-2b9c2bf10a71","savedPayload":{"position":{"x":26967.693916083277,"y":18733.821636006396},"targetPosition":{"x":26514.36200037679,"y":18781.263842312026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInBaseAsset","project":"Superalgos","id":"2e2c5d6c-3539-498f-b2ca-a720877aa5a3","savedPayload":{"position":{"x":27115.757142379465,"y":19268.57138872106},"targetPosition":{"x":26868.809412502742,"y":19068.470960417053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a75fbc3b-400f-4246-8946-22b17df79b7e","savedPayload":{"position":{"x":26868.809412502742,"y":19068.470960417053},"targetPosition":{"x":26514.36200037679,"y":18781.263842312026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInBaseAsset","project":"Superalgos","id":"5d54cc4b-46d5-4931-a687-d62dc4764ca1","savedPayload":{"position":{"x":26595.17520314173,"y":19551.37925824329},"targetPosition":{"x":26562.04104559584,"y":19235.264803650254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a22de527-1426-4575-a7bc-cce1aaf9c28c","savedPayload":{"position":{"x":26562.04104559584,"y":19235.264803650254},"targetPosition":{"x":26514.36200037679,"y":18781.263842312026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3e34000e-ad8c-4049-9eee-89e8ea362a0f","savedPayload":{"position":{"x":26053.59089152398,"y":18750.284679503828},"targetPosition":{"x":25703.875208868343,"y":18467.0905035314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plotter Panel","name":"Limit Sell Order Quoted Asset","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","panelData":[{"type":"Panel Data","name":"Size","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeInQuotedAsset","project":"Superalgos","id":"8b27eaa0-3c2b-42ea-830a-dbec2b2ddf21","savedPayload":{"position":{"x":26955.59633919207,"y":19289.145386940756},"targetPosition":{"x":26665.39116256476,"y":19159.96491881869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ea964346-031e-4c3e-9e72-c644659cc7e0","savedPayload":{"position":{"x":26665.39116256476,"y":19159.96491881869},"targetPosition":{"x":26248.531247833645,"y":18974.50594254728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Size Filled","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.sizeFilledInQuotedAsset","project":"Superalgos","id":"b9d28a73-c3a6-4da6-b86b-19f524a02b8a","savedPayload":{"position":{"x":26525.878839175366,"y":19697.01120346041},"targetPosition":{"x":26411.785498098317,"y":19399.980505865737},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b65033c3-ee30-48c1-9ce5-a517f4ec24f5","savedPayload":{"position":{"x":26411.785498098317,"y":19399.980505865737},"targetPosition":{"x":26248.531247833645,"y":18974.50594254728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Panel Data","name":"Fees Paid","config":"{\n \"valueDecimals\": 10\n}","project":"Superalgos","dataFormula":{"type":"Data Formula","name":"New Data Formula","code":"record.feesPaidInQuotedAsset","project":"Superalgos","id":"3b945002-5861-43c5-8cdd-835c6639acd6","savedPayload":{"position":{"x":25933.914514576503,"y":19682.149708045836},"targetPosition":{"x":26063.1824601456,"y":19391.27495675221},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b57e89db-a5bc-4d67-86ab-acee68676d5f","savedPayload":{"position":{"x":26063.1824601456,"y":19391.27495675221},"targetPosition":{"x":26248.531247833645,"y":18974.50594254728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae18b041-f16e-4d96-8a83-56845dddf64a","savedPayload":{"position":{"x":25865.140786163727,"y":18887.20169545514},"targetPosition":{"x":25703.875208868343,"y":18467.0905035314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fb243322-ec2a-4f03-bb77-e97e4699d1c6","savedPayload":{"position":{"x":25703.875208868343,"y":18467.0905035314},"targetPosition":{"x":25259.41545560053,"y":18396.694994263296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"93c15cbf-185a-4b59-b55f-847f437bb841","savedPayload":{"position":{"x":25259.41545560053,"y":18396.694994263296},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6a54eece-4582-4cda-a854-1cd805e00fed","savedPayload":{"position":{"x":24941.217404066585,"y":18714.893045797242},"targetPosition":{"x":24941.217404066585,"y":18714.893045797242},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Masters-Lightning-Strike.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Masters-Lightning-Strike.json deleted file mode 100644 index e4eda17a7..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Masters-Lightning-Strike.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Trading System","name":"Lightning Strike","config":"{ \n\"codeName\": \"Lightning Strike\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"My Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Trigger On","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e2ea7ded-2be1-43a3-a7fa-de3d9b8eeec4","savedPayload":{"position":{"x":30914.345537114667,"y":38604.01436324851},"targetPosition":{"x":31359.096259318965,"y":38830.60964671243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e693623c-e11f-49e3-99da-1897c7a47563","savedPayload":{"position":{"x":31359.096259318965,"y":38830.60964671243},"targetPosition":{"x":31803.948096117412,"y":39057.27709300647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9135663f-deeb-4b3f-8855-91750810a406","savedPayload":{"position":{"x":31803.948096117412,"y":39057.27709300647},"targetPosition":{"x":32249.606420886405,"y":39284.23888962723},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"05f2f6b7-15ab-4386-a299-91a949de634e","savedPayload":{"position":{"x":32249.606420886405,"y":39284.23888962723},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"Never Trigger Off","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"false","project":"Superalgos","id":"0eb59e3b-ccc8-4eab-a1f2-a7c8dea28949","savedPayload":{"position":{"x":32077.836612408217,"y":37610.39742636277},"targetPosition":{"x":32232.059454816794,"y":38085.06041310742},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31ab47dd-fe2d-47ac-9a77-08ec8beee068","savedPayload":{"position":{"x":32232.059454816794,"y":38085.06041310742},"targetPosition":{"x":32386.31006690743,"y":38559.9136542021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa93a965-e836-42b3-9784-79acda1468dd","savedPayload":{"position":{"x":32386.31006690743,"y":38559.9136542021},"targetPosition":{"x":32540.740280232243,"y":39035.59720645897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8a46ebed-4ed4-4b70-882b-416ffa1b37f6","savedPayload":{"position":{"x":32540.740280232243,"y":39035.59720645897},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Inmediate Take Position","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"90dda64b-17fd-469c-8066-3855596795ab","savedPayload":{"position":{"x":33610.303575265214,"y":37702.976973794255},"targetPosition":{"x":33383.88254713001,"y":38147.76160391372},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4054a522-7863-4ac2-9eab-26db2a6f037f","savedPayload":{"position":{"x":33383.88254713001,"y":38147.76160391372},"targetPosition":{"x":33148.83631252263,"y":38619.95922965271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b8d71ab-6430-4e3f-840a-162745ab8d22","savedPayload":{"position":{"x":33148.83631252263,"y":38619.95922965271},"targetPosition":{"x":32922.00489673196,"y":39065.5515863614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f8ca03db-0afa-4c98-abad-d9a5d17bdd36","savedPayload":{"position":{"x":32922.00489673196,"y":39065.5515863614},"targetPosition":{"x":32695.222935590078,"y":39511.15601095159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"a31576e1-6f47-4e02-8953-c863c79cf783","savedPayload":{"position":{"x":32695.41126749725,"y":39510.940299998096},"targetPosition":{"x":32849.88921624964,"y":39986.571104724644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"openStage":{"type":"Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"Entry Target Rate","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"c9aada83-91b0-4b34-955a-858bd201b4e2","savedPayload":{"position":{"x":33353.25964936278,"y":38243.16438209381},"targetPosition":{"x":33405.254754356094,"y":38739.5471855595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9158b840-9adc-4476-9137-72cc97037498","savedPayload":{"position":{"x":33405.254754356094,"y":38739.5471855595},"targetPosition":{"x":33457.172363266734,"y":39235.544022937276},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"Target Size in Quoted Asset","code":"tradingEngine.current.episode.episodeQuotedAsset.balance.value\n","project":"Superalgos","id":"a1796525-0b97-4b83-bf89-6f084f69cae2","savedPayload":{"position":{"x":34264.4235848001,"y":38648.56818369684},"targetPosition":{"x":33860.83685871737,"y":38942.01604804442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8ca6e0cd-15ac-4743-aed2-965ec3dff80c","savedPayload":{"position":{"x":33860.83685871737,"y":38942.01604804442},"targetPosition":{"x":33457.172363266734,"y":39235.544022937276},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a3827280-3a20-433b-a297-51994eb7198e","savedPayload":{"position":{"x":33457.55252810221,"y":39235.93511904878},"targetPosition":{"x":33254.28643413483,"y":39692.71385888185},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"Buy Orders","config":"{\n\"percentageOfStageTargetSize\": 100\n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[],"limitBuyOrders":[{"type":"Limit Buy Order","name":"Limit Buy","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": true\n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01min.support.support5Rate","project":"Superalgos","id":"d6637c4c-8cec-497e-83c5-2cce8375c193","savedPayload":{"position":{"x":35241.59987734892,"y":38672.17357687428},"targetPosition":{"x":34992.1899461272,"y":39104.52236174481},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3ff96eb6-5965-4f82-98d4-cd23bf8d0369","savedPayload":{"position":{"x":34992.1899461272,"y":39104.52236174481},"targetPosition":{"x":34743.09465383782,"y":39536.51330400031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Create Order Event","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"My Javascript Code","code":"true","project":"Superalgos","id":"3c441caf-e674-475e-aa34-8cc028743089","savedPayload":{"position":{"x":36567.8788325754,"y":38724.063003609175},"targetPosition":{"x":36111.93157735158,"y":38926.99289902902},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4162428b-4e63-4529-87be-beac9ffc13f0","savedPayload":{"position":{"x":36111.93157735158,"y":38926.99289902902},"targetPosition":{"x":35655.87094976003,"y":39130.00529796074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2395b55f-c4f9-478a-a20c-3a6ac69b9439","savedPayload":{"position":{"x":35655.87094976003,"y":39130.00529796074},"targetPosition":{"x":35199.32709772989,"y":39333.30878567805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"91a2d093-075b-443e-8d54-de0e50fdac61","savedPayload":{"position":{"x":35199.32709772989,"y":39333.30878567805},"targetPosition":{"x":34743.09465383782,"y":39536.51330400031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Cancel Order Event","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"My Javascript Code","code":"true","project":"Superalgos","id":"98e8e55b-b65e-436d-9d98-2b7f1eef0119","savedPayload":{"position":{"x":36697.04936103466,"y":39951.640038414},"targetPosition":{"x":36208.84178594226,"y":39847.96615377127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"70d79bb0-a78b-4d2e-b7ee-90335c1c7afb","savedPayload":{"position":{"x":36208.84178594226,"y":39847.96615377127},"targetPosition":{"x":35720.50924532801,"y":39744.23906739027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cc2b8c5e-90d8-4017-8726-b27d696ab4ef","savedPayload":{"position":{"x":35720.50924532801,"y":39744.23906739027},"targetPosition":{"x":35231.64731769253,"y":39640.336033600746},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"14564d4f-22a0-4c7c-be38-ad1323f3dcf8","savedPayload":{"position":{"x":35231.64731769253,"y":39640.336033600746},"targetPosition":{"x":34743.09465383782,"y":39536.51330400031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"simulatedExchangeEvents":{"type":"Simulated Exchange Events","name":"New Simulated Exchange Events","project":"Superalgos","simulatedPartialFill":{"type":"Simulated Partial Fill","name":"New Simulated Partial Fill","config":"{ \n\"fillProbability\": 1\n}","project":"Superalgos","id":"294c2555-7134-454e-bfcd-66ba4be59dfc","savedPayload":{"position":{"x":41425.55788253979,"y":39134.08377837748},"targetPosition":{"x":41131.01897175846,"y":39020.8730241269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"simulatedActualRate":{"type":"Simulated Actual Rate","name":"New Simulated Actual Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"62bea2ba-686f-410e-9fb3-02246c583ead","savedPayload":{"position":{"x":41299.62591467189,"y":39400.626322973476},"targetPosition":{"x":41256.84867186038,"y":39304.28463369237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bc1381f8-3d46-45e9-830a-369628b699c4","savedPayload":{"position":{"x":41256.84867186038,"y":39304.28463369237},"targetPosition":{"x":41131.01897175846,"y":39020.8730241269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"simulatedFeesPaid":{"type":"Simulated Fees Paid","name":"New Simulated Fees Paid","config":"{ \n\"percentage\": 0.1\n}","project":"Superalgos","id":"b1020734-07c6-42e9-937b-c173acf381a6","savedPayload":{"position":{"x":41017.93891067161,"y":39314.872589085964},"targetPosition":{"x":41131.01897175846,"y":39020.8730241269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"1ecbcd0b-9822-4caa-aced-c6e38c33afb5","savedPayload":{"position":{"x":35077.22886253331,"y":39907.9099498038},"targetPosition":{"x":34743.09465383782,"y":39536.51330400031},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b278718b-6ff9-44b4-8c6d-acdad79aabb5","savedPayload":{"position":{"x":34743.09465383782,"y":39536.51330400031},"targetPosition":{"x":34246.50997395279,"y":39588.605454525066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Buy Order #1","id":"008e16b8-9487-4db3-81e1-d11c19a7f59e"}}}],"limitSellOrders":[],"id":"e635ed9f-3c8c-45bf-8be0-e3836fa0844e","savedPayload":{"position":{"x":34246.50997395279,"y":39588.605454525066},"targetPosition":{"x":33750.33086761034,"y":39640.65651289832},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"6bdce67c-b2c2-40b6-940e-6c929d074e05","savedPayload":{"position":{"x":33750.33086761034,"y":39640.65651289832},"targetPosition":{"x":33254.28643413483,"y":39692.71385888185},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"d2fc92c9-b2cc-4332-aad3-d82234f01bf4","savedPayload":{"position":{"x":33254.28643413483,"y":39692.71385888185},"targetPosition":{"x":32849.88921624964,"y":39986.571104724644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"Stop Loss Phase #1","code":"if (tradingEngine.last.limitOrders.orderName.value === 'Limit Buy') \n{ tradingEngine.last.limitOrders.rate.value } \nelse \n{ 0 }","project":"Superalgos","id":"5b32bb95-b7be-427a-b448-bbc3f6c63275","savedPayload":{"position":{"x":34744.873603041866,"y":40436.607444803754},"targetPosition":{"x":34248.37557861643,"y":40384.38871479898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"b65f8638-f70a-45a4-9649-47d71ea1aa9d","savedPayload":{"position":{"x":34248.37557861643,"y":40384.38871479898},"targetPosition":{"x":33751.11407091601,"y":40332.17807628583},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8df55ed2-98c6-473e-8a09-0fd0f55af210","savedPayload":{"position":{"x":33751.11407091601,"y":40332.17807628583},"targetPosition":{"x":33253.896472627435,"y":40280.10443300038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01min.candle.close * 1.2","project":"Superalgos","id":"bb6b732f-e20d-4945-a545-ff2826ec145e","savedPayload":{"position":{"x":33863.556597032,"y":41649.88734467843},"targetPosition":{"x":33660.50700259472,"y":41193.72597459398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"d0d56645-d5b6-4b61-8970-b32163e23daa","savedPayload":{"position":{"x":33660.50700259472,"y":41193.72597459398},"targetPosition":{"x":33457.15421564119,"y":40736.86996495485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6f5ed0dc-4133-473b-9095-cf809e6ca000","savedPayload":{"position":{"x":33457.15421564119,"y":40736.86996495485},"targetPosition":{"x":33253.896472627435,"y":40280.10443300038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"c44831c2-dacf-4853-b70a-69e5b4276dff","savedPayload":{"position":{"x":33254.42756141783,"y":40280.44384930672},"targetPosition":{"x":32849.88921624964,"y":39986.571104724644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"Target Rate Formula","code":"tradingEngine.last.limitOrders.orderStatistics.actualRate.value","project":"Superalgos","id":"326c2266-7d3a-43ca-9847-e6a7ca93ddb5","savedPayload":{"position":{"x":33467.00915092142,"y":41692.51069066402},"targetPosition":{"x":33133.11772863275,"y":41321.591913134645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9937bbc6-860d-4460-aca0-0bd2517b76e5","savedPayload":{"position":{"x":33133.11772863275,"y":41321.591913134645},"targetPosition":{"x":32799.44636325951,"y":40950.9340472132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"7400ed81-c264-4e91-b467-89acf86dfcf6","savedPayload":{"position":{"x":32491.49857989301,"y":41900.554274555354},"targetPosition":{"x":32645.493266037513,"y":41425.774171062556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0e21ecb7-0090-478c-b439-48c1e6e79da1","savedPayload":{"position":{"x":32645.493266037513,"y":41425.774171062556},"targetPosition":{"x":32799.44636325951,"y":40950.9340472132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5fe56eb2-92f0-407c-b400-4a19e748b5ec","savedPayload":{"position":{"x":32799.49550024195,"y":40951.044082964625},"targetPosition":{"x":32695.553974415394,"y":40461.96734730436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"Race to Break Even","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[{"type":"Limit Sell Order","name":"Profit 0.6","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.008","project":"Superalgos","id":"53978d5a-9efe-43c9-8f90-33095de4527f","savedPayload":{"position":{"x":33526.24344862895,"y":41439.35033154521},"targetPosition":{"x":33218.58090376129,"y":41292.233700064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31dfa984-8378-49cc-8429-82245a6401b3","savedPayload":{"position":{"x":33218.58090376129,"y":41292.233700064},"targetPosition":{"x":32864.141897771595,"y":41122.801295419304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"b090d786-eab4-4a8c-bd9d-9d453f3359fa","savedPayload":{"position":{"x":33332.40974219164,"y":42447.284458375194},"targetPosition":{"x":33218.69998819087,"y":42125.64019774662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96e2f7c4-9eb8-4dfc-b186-793785812ffc","savedPayload":{"position":{"x":33218.69998819087,"y":42125.64019774662},"targetPosition":{"x":33104.93190041815,"y":41803.822558189335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"60b82e59-a9f8-414f-9483-c516518d8e8e","savedPayload":{"position":{"x":33104.93190041815,"y":41803.822558189335},"targetPosition":{"x":32990.99884170641,"y":41481.594512411095},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5837fa08-1862-4a07-a10d-c1a35cbca9df","savedPayload":{"position":{"x":32990.99884170641,"y":41481.594512411095},"targetPosition":{"x":32864.141897771595,"y":41122.801295419304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[6].orderCounters.periods.value >= 2","project":"Superalgos","id":"1362c6f6-45e3-4bcf-9d07-2138493dd413","savedPayload":{"position":{"x":32258.927095784515,"y":42391.22243930165},"targetPosition":{"x":32406.01383128465,"y":42082.79035704301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"a"}}},"id":"89d67597-c113-4e7e-94ee-03f4e8c69c19","savedPayload":{"position":{"x":32406.01383128465,"y":42082.79035704301},"targetPosition":{"x":32552.963121046443,"y":41774.7404994038},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"acb050f9-35d5-400a-a5f5-8810c1fa9df5","savedPayload":{"position":{"x":32552.963121046443,"y":41774.7404994038},"targetPosition":{"x":32700.100329616864,"y":41466.49501183684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"2dbc0df0-6c1c-4e5d-bbd0-3b1893706a93","savedPayload":{"position":{"x":32700.100329616864,"y":41466.49501183684},"targetPosition":{"x":32864.141897771595,"y":41122.801295419304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b80fe127-d306-4fc1-a3a8-95bf88de046f","savedPayload":{"position":{"x":32120.308098285655,"y":41601.39240981047},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #7","id":"5bfce673-ceb2-4104-bd7e-75d62453164e"}}},{"type":"Limit Sell Order","name":"Profit 0.5","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.007","project":"Superalgos","id":"4df6dc0e-887a-4627-9fd1-75926327eb09","savedPayload":{"position":{"x":33247.37163445384,"y":41714.39795817013},"targetPosition":{"x":33019.24014869904,"y":41460.72166041504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8306171d-b7d4-4b7f-a5c5-2bc320581a55","savedPayload":{"position":{"x":33019.24014869904,"y":41460.72166041504},"targetPosition":{"x":32732.347172201655,"y":41141.74431482714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.6'","project":"Superalgos","id":"b5c796b8-6da7-4e15-9063-7b778a6f92e7","savedPayload":{"position":{"x":32658.28385683019,"y":42566.07433907591},"targetPosition":{"x":32676.031980643544,"y":42225.39979540346},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4e968238-bb89-4633-8840-17a3eee97127","savedPayload":{"position":{"x":32676.031980643544,"y":42225.39979540346},"targetPosition":{"x":32693.818371948895,"y":41883.68872675964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b6f8f8a7-6201-40b8-85ef-f566d24f6f41","savedPayload":{"position":{"x":32693.818371948895,"y":41883.68872675964},"targetPosition":{"x":32711.499076037275,"y":41543.06416256766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f2509852-f910-40aa-9786-4858a185755b","savedPayload":{"position":{"x":32711.499076037275,"y":41543.06416256766},"targetPosition":{"x":32732.347172201655,"y":41141.74431482714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[5].orderCounters.periods.value >= 2","project":"Superalgos","id":"30d37563-9245-4814-a2d2-e81566fdfafb","savedPayload":{"position":{"x":31672.482740223073,"y":42095.69087452211},"targetPosition":{"x":31925.795367545423,"y":41867.6370538829},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7572eda9-8711-454e-abd3-ee9f4bae2a60","savedPayload":{"position":{"x":31925.795367545423,"y":41867.6370538829},"targetPosition":{"x":32179.6529831055,"y":41639.13233749392},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc3d3165-f40a-4224-aea1-8b7c55c29468","savedPayload":{"position":{"x":32179.6529831055,"y":41639.13233749392},"targetPosition":{"x":32433.8800353613,"y":41410.379327210394},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"036b27b4-55f7-4f1b-80cc-914950ce3016","savedPayload":{"position":{"x":32433.8800353613,"y":41410.379327210394},"targetPosition":{"x":32732.347172201655,"y":41141.74431482714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8a730b1e-e8d8-4ca0-9342-e58b27b3c0a2","savedPayload":{"position":{"x":31927.365051581302,"y":41629.49068121811},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #6","id":"90d28d1e-6fd2-4a83-a423-3f34bf455004"}}},{"type":"Limit Sell Order","name":"Profit 0.4","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.006","project":"Superalgos","id":"8cffe4c6-a60c-442c-9c67-27860832bdff","savedPayload":{"position":{"x":32848.211316179266,"y":41802.06882310109},"targetPosition":{"x":32734.14584043107,"y":41479.5539580411},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"882824fb-0d18-4c48-8cb1-c60fb9b2e4b3","savedPayload":{"position":{"x":32734.14584043107,"y":41479.5539580411},"targetPosition":{"x":32603.2875129115,"y":41109.50354170856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.5'","project":"Superalgos","id":"546d2700-547f-4fbc-b8cc-5b73a97ab69d","savedPayload":{"position":{"x":31998.91354794959,"y":42378.00520480642},"targetPosition":{"x":32145.804325899364,"y":42069.852822068424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"631f4eaa-9716-46e5-9022-a0f00231e34c","savedPayload":{"position":{"x":32145.804325899364,"y":42069.852822068424},"targetPosition":{"x":32292.681324142817,"y":41761.65636057538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aec594bc-6efe-4273-971e-0112bc46ec2b","savedPayload":{"position":{"x":32292.681324142817,"y":41761.65636057538},"targetPosition":{"x":32439.538817171982,"y":41453.33416256792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"029f599b-b17f-4851-88d7-9c80b1662af5","savedPayload":{"position":{"x":32439.538817171982,"y":41453.33416256792},"targetPosition":{"x":32603.2875129115,"y":41109.50354170856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[4].orderCounters.periods.value >= 2","project":"Superalgos","id":"5e1a76ec-7ab1-47d5-8f65-9e2aed7e5526","savedPayload":{"position":{"x":31278.74115806557,"y":41578.21628851325},"targetPosition":{"x":31600.284766726683,"y":41464.41880793689},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8091739-137a-4ba3-9427-02c44396d1c5","savedPayload":{"position":{"x":31600.284766726683,"y":41464.41880793689},"targetPosition":{"x":31922.20537803662,"y":41350.5016048914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6e36cc24-a86d-4889-a57f-de80068d33f0","savedPayload":{"position":{"x":31922.20537803662,"y":41350.5016048914},"targetPosition":{"x":32244.328943839944,"y":41236.56007283237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"07757b18-bb3e-45f5-8ae6-a635b479e703","savedPayload":{"position":{"x":32244.328943839944,"y":41236.56007283237},"targetPosition":{"x":32603.2875129115,"y":41109.50354170856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e065f375-4663-45f0-8d7a-e5eee5d90cb4","savedPayload":{"position":{"x":31738.24418607585,"y":41581.479335594864},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #5","id":"3c44b04d-6b6b-4278-ba85-898b1f12cdfa"}}},{"type":"Limit Sell Order","name":"Profit 0.3","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.005","project":"Superalgos","id":"ed5df221-812e-47e0-8ee5-34cee0346cea","savedPayload":{"position":{"x":32458.51909517061,"y":41763.25308625388},"targetPosition":{"x":32476.200927774764,"y":41422.16710314921},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5673a468-77ac-4312-a1b1-ea5e9d070988","savedPayload":{"position":{"x":32476.200927774764,"y":41422.16710314921},"targetPosition":{"x":32496.59695497345,"y":41029.87874391601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.4'","project":"Superalgos","id":"fcd99b77-0333-4105-950d-eb03ffc2129e","savedPayload":{"position":{"x":31452.725744553733,"y":41970.50239234119},"targetPosition":{"x":31706.488540719874,"y":41741.96747384216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b5c038b2-15ae-450f-8f86-242e2402257d","savedPayload":{"position":{"x":31706.488540719874,"y":41741.96747384216},"targetPosition":{"x":31960.172033357696,"y":41513.441911189846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"12e843fe-9a85-4300-b4e5-097af10db775","savedPayload":{"position":{"x":31960.172033357696,"y":41513.441911189846},"targetPosition":{"x":32213.885231247605,"y":41284.76568457185},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c9610e5d-0cb9-426a-af86-f7bfdb230d7b","savedPayload":{"position":{"x":32213.885231247605,"y":41284.76568457185},"targetPosition":{"x":32496.59695497345,"y":41029.87874391601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[3].orderCounters.periods.value >= 2","project":"Superalgos","id":"ed52c351-2965-4e4d-916e-0d882efc332e","savedPayload":{"position":{"x":31092.987109898088,"y":40957.260992700474},"targetPosition":{"x":31434.076625253387,"y":40974.9105228485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"675c8f52-d97a-4afc-a2e4-bedcd501662f","savedPayload":{"position":{"x":31434.076625253387,"y":40974.9105228485},"targetPosition":{"x":31775.158219884866,"y":40992.556729858356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9155dd9-9e2c-4254-8d2c-63d9c32e40eb","savedPayload":{"position":{"x":31775.158219884866,"y":40992.556729858356},"targetPosition":{"x":32116.453195252943,"y":41010.2398155988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"cbf59193-c567-4b58-a83c-d9871204a520","savedPayload":{"position":{"x":32116.453195252943,"y":41010.2398155988},"targetPosition":{"x":32496.59695497345,"y":41029.87874391601},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e8cb9d8f-6e16-4b5c-a5e4-141f2047ce19","savedPayload":{"position":{"x":31581.91312851621,"y":41464.74936994404},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #4","id":"7fb716f8-8bba-4c0d-8df3-69a7bc9ae317"}}},{"type":"Limit Sell Order","name":"Profit 0.2","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.004","project":"Superalgos","id":"25c6516a-f1d9-461f-b012-6d5524320da9","savedPayload":{"position":{"x":32112.844113213963,"y":41578.265782967275},"targetPosition":{"x":32259.53074678532,"y":41270.28074093093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29b9bd1b-a6e8-4a75-9df9-527db78c0e7b","savedPayload":{"position":{"x":32259.53074678532,"y":41270.28074093093},"targetPosition":{"x":32428.56779071538,"y":40915.463635987035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.3'","project":"Superalgos","id":"a0b1e36b-640d-4ec8-96ea-d26597b61e8e","savedPayload":{"position":{"x":31104.352197392087,"y":41384.89892049807},"targetPosition":{"x":31425.907001830434,"y":41271.04092736564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dab80166-691d-47b6-964a-76df68e98c42","savedPayload":{"position":{"x":31425.907001830434,"y":41271.04092736564},"targetPosition":{"x":31747.758596062507,"y":41157.01264579912},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"97061747-71e5-4abe-b339-30e3fd35519f","savedPayload":{"position":{"x":31747.758596062507,"y":41157.01264579912},"targetPosition":{"x":32069.840994373364,"y":41042.78172804365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"998dc335-6c8b-4559-9bbd-8c73bc5844da","savedPayload":{"position":{"x":32069.840994373364,"y":41042.78172804365},"targetPosition":{"x":32428.56779071538,"y":40915.463635987035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[2].orderCounters.periods.value >= 2","project":"Superalgos","id":"54de11dd-16f2-4c11-b530-c9b1bcb8a3de","savedPayload":{"position":{"x":31160.13313779977,"y":40311.56865287888},"targetPosition":{"x":31468.101886767312,"y":40458.210555517115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77ebec63-371b-40c5-9aa7-4779d885b269","savedPayload":{"position":{"x":31468.101886767312,"y":40458.210555517115},"targetPosition":{"x":31776.55684009257,"y":40605.055773593755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34f00d60-b8aa-4eda-8276-5bbaa3d6d4ea","savedPayload":{"position":{"x":31776.55684009257,"y":40605.055773593755},"targetPosition":{"x":32084.72831837753,"y":40751.78532580582},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"431cdafe-93a5-4647-8ea4-89fd44d9abf0","savedPayload":{"position":{"x":32084.72831837753,"y":40751.78532580582},"targetPosition":{"x":32428.56779071538,"y":40915.463635987035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5d13da4a-9bdf-44f9-8e7b-ca05423ce0a4","savedPayload":{"position":{"x":31482.158343581337,"y":41297.07835337361},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #3","id":"a5d970bf-0f85-4546-9c4a-a0a113e7ea04"}}},{"type":"Limit Sell Order","name":"Profit 0.1","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.003","project":"Superalgos","id":"f6a2eda5-75a8-4305-961d-9a1c52b1d837","savedPayload":{"position":{"x":31863.86379158337,"y":41275.67842631949},"targetPosition":{"x":32117.764150040988,"y":41046.82671568887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"66b3fe34-fe06-408f-8181-fc696710c2a9","savedPayload":{"position":{"x":32117.764150040988,"y":41046.82671568887},"targetPosition":{"x":32409.46893109646,"y":40783.897179757805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.2'","project":"Superalgos","id":"f0c458d6-d23f-48c4-9156-593429089f97","savedPayload":{"position":{"x":31006.07733211601,"y":40712.100114796194},"targetPosition":{"x":31346.822904391942,"y":40729.680465798825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"488d1160-ae61-45c0-b295-b533b38bbeb5","savedPayload":{"position":{"x":31346.822904391942,"y":40729.680465798825},"targetPosition":{"x":31688.054151700322,"y":40747.20673824515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c296ade6-4a0b-40d3-8ace-f02649f96da5","savedPayload":{"position":{"x":31688.054151700322,"y":40747.20673824515},"targetPosition":{"x":32029.190154471245,"y":40764.58685937668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8182ab58-4809-48ee-a481-06a6954dc89f","savedPayload":{"position":{"x":32029.190154471245,"y":40764.58685937668},"targetPosition":{"x":32409.46893109646,"y":40783.897179757805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"cancelOrderEvent":{"type":"Cancel Order Event","name":"New Cancel Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.exchangeOrders.limitSellOrders.limitOrders[1].orderCounters.periods.value >= 2","project":"Superalgos","id":"d255fc7b-cb37-471b-8fed-9031a1170765","savedPayload":{"position":{"x":31468.560326628227,"y":39740.6382995854},"targetPosition":{"x":31697.233735642047,"y":39994.224377012506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"317e867c-c4a0-48db-9bdf-75d5225f22bc","savedPayload":{"position":{"x":31697.233735642047,"y":39994.224377012506},"targetPosition":{"x":31925.747747545884,"y":40247.578001166636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c287f36d-074b-498c-ad12-be1bf473be63","savedPayload":{"position":{"x":31925.747747545884,"y":40247.578001166636},"targetPosition":{"x":32154.509315754025,"y":40501.17736249507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"7c575bbe-7429-4167-aba5-e7a3b59bd958","savedPayload":{"position":{"x":32154.509315754025,"y":40501.17736249507},"targetPosition":{"x":32409.46893109646,"y":40783.897179757805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"de750ccf-154f-4495-a9fd-cee163cccf66","savedPayload":{"position":{"x":31454.17302048519,"y":41104.261322089544},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #2","id":"e133f5d4-034b-4333-9ea4-a6b52183476e"}}},{"type":"Limit Sell Order","name":"Profit 0.0","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.exitTargetRate.value * 1.002","project":"Superalgos","id":"9344ebf6-3efa-4904-a952-d2dbb1b0ead1","savedPayload":{"position":{"x":31710.26963417929,"y":40712.43065670642},"targetPosition":{"x":32050.566814320024,"y":40685.54467465248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef824607-7571-4f06-84d6-ce4e97e4cc62","savedPayload":{"position":{"x":32050.566814320024,"y":40685.54467465248},"targetPosition":{"x":32442.128049335588,"y":40654.558105691816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.last.limitOrders.orderName.value === 'Profit 0.1'","project":"Superalgos","id":"91c9b7c1-1250-450e-b7b3-b5b5bf4abd77","savedPayload":{"position":{"x":31644.95885407582,"y":39498.13688057754},"targetPosition":{"x":31838.406108295792,"y":39779.02429749291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cb5f3c82-b13e-4edb-a738-89f653250d56","savedPayload":{"position":{"x":31838.406108295792,"y":39779.02429749291},"targetPosition":{"x":32032.145253834915,"y":40060.199256664135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff70b3ad-19b0-4be5-bf58-f3b9253ac170","savedPayload":{"position":{"x":32032.145253834915,"y":40060.199256664135},"targetPosition":{"x":32226.169212353423,"y":40341.40588284892},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5658a835-b46f-40c4-a7c1-5d5d6f10b95b","savedPayload":{"position":{"x":32226.169212353423,"y":40341.40588284892},"targetPosition":{"x":32442.128049335588,"y":40654.558105691816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c077f171-dabc-49e6-8956-3e1144a0b0ef","savedPayload":{"position":{"x":31502.307960676673,"y":40915.04483068321},"targetPosition":{"x":31953.374094968323,"y":41130.27686365215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #1","id":"929c1c8c-1964-4495-991c-0a516f1e9ba0"}}}],"id":"0fe764ce-3312-4964-9841-b55500e3f80a","savedPayload":{"position":{"x":31953.374094968323,"y":41130.27686365215},"targetPosition":{"x":32324.233706128747,"y":40796.34770851975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"33993524-848d-4d57-a503-075c5df4a31b","savedPayload":{"position":{"x":32324.233706128747,"y":40796.34770851975},"targetPosition":{"x":32695.553974415394,"y":40461.96734730436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"f4d8925b-697e-4f52-ad2e-d368780739d0","savedPayload":{"position":{"x":32695.553974415394,"y":40461.96734730436},"targetPosition":{"x":32849.88921624964,"y":39986.571104724644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"711041eb-3055-4611-b64f-570363bae854","savedPayload":{"position":{"x":32849.88921624964,"y":39986.571104724644},"targetPosition":{"x":32350.365708673427,"y":39986.57646886846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"628b758d-ffff-445f-9d4f-8aa480a13db3","savedPayload":{"position":{"x":32350.365708673427,"y":39986.57646886846},"targetPosition":{"x":32350.365708673427,"y":39986.57646886846},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json deleted file mode 100644 index b65cbaa38..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Trading-Systems/Sparta-WHB-BTC-USDT.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Trading System","name":"WHB v2","config":"{ \n\"codeName\": \"Sparta-WHB-BTC-USDT\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"Steep","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"123b1af6-9639-4b6d-a4c3-7a8a9287169c","savedPayload":{"position":{"x":31075.323254310468,"y":29934.630604067414},"targetPosition":{"x":31240.97284151726,"y":29966.829622037207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"427da1e1-cc4a-4c78-88f6-c254d87cc88f","savedPayload":{"position":{"x":31240.97284151726,"y":29966.829622037207},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"1b9e755e-eefe-4b0d-addd-1e19b6a597b6","savedPayload":{"position":{"x":31138.331069950404,"y":29770.489632553574},"targetPosition":{"x":31282.978051943886,"y":29857.402307694647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"55bf7721-7fb2-42f0-8a3c-c2b97e278a29","savedPayload":{"position":{"x":31282.978051943886,"y":29857.402307694647},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e8db5fac-2f00-47fe-ac57-dc93ad15f2b5","savedPayload":{"position":{"x":31253.678567961866,"y":29637.797514989197},"targetPosition":{"x":31359.876383951527,"y":29768.940895985063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"11e00b31-e7eb-4fe9-b006-dcd640dbbd3b","savedPayload":{"position":{"x":31359.876383951527,"y":29768.940895985063},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"7671ca91-4b4c-40c5-b0c2-199169b013e8","savedPayload":{"position":{"x":31407.45313773691,"y":29552.558879079636},"targetPosition":{"x":31462.392763801556,"y":29712.11513871202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd938286-61b3-41e4-bfbb-db34971ffa47","savedPayload":{"position":{"x":31462.392763801556,"y":29712.11513871202},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"19b7edeb-b180-429f-9adf-61bf47262033","savedPayload":{"position":{"x":31581.107296689723,"y":29525.054762303866},"targetPosition":{"x":31578.16220310343,"y":29693.779060861507},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8f94ab97-1574-4136-9404-b66dfc1e3b9f","savedPayload":{"position":{"x":31578.16220310343,"y":29693.779060861507},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"0aa38939-f2ef-4c2b-bfc1-a45bda2ac50e","savedPayload":{"position":{"x":31753.695790388152,"y":29558.602567062582},"targetPosition":{"x":31693.22119890239,"y":29716.144264033985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b2efc27-4aa5-472c-bb7a-73fc3796cc0e","savedPayload":{"position":{"x":31693.22119890239,"y":29716.144264033985},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"8f02c79c-1807-42ce-a9e8-e707ec73e9e4","savedPayload":{"position":{"x":31904.401899357294,"y":29649.15593298901},"targetPosition":{"x":31793.691938215143,"y":29776.513174651605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0ff24392-a128-4d59-8049-301e99ce941e","savedPayload":{"position":{"x":31793.691938215143,"y":29776.513174651605},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Slope Not Extreme, or...","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope != \"Extreme\" || \n(chart.at01hs.bollingerSubChannel.period <= 6 && \nchart.at08hs.bollingerChannel.direction === \"Down\" && \nchart.at06hs.bollingerChannel.direction === \"Down\" && \nchart.at04hs.bollingerChannel.direction === \"Down\" && \nchart.at02hs.bollingerSubChannel.slope === (\"Extreme\" || \"Steep\"))","project":"Superalgos","id":"231acfc1-6010-4d84-822f-056d1f3f9dc8","savedPayload":{"position":{"x":32015.048242670167,"y":29785.79278772708},"targetPosition":{"x":31867.45616709039,"y":29867.60441114365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"da235bf3-976c-4832-a565-98a6bb13236d","savedPayload":{"position":{"x":31867.45616709039,"y":29867.60441114365},"targetPosition":{"x":31572.27201593085,"y":30031.22765797679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c94fdd47-c451-4c27-ad56-82b346d60f87","savedPayload":{"position":{"x":31572.27201593085,"y":30031.22765797679},"targetPosition":{"x":31625.068647881923,"y":30364.572472927648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f5bf32a8-54eb-42ef-bc75-86caf1fd16a2","savedPayload":{"position":{"x":31625.068647881926,"y":30364.572472927648},"targetPosition":{"x":31660.26640251598,"y":30586.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close > chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"bd638ed9-46fa-42d5-9dfd-5ff8921f83cd","savedPayload":{"position":{"x":32189.273129579207,"y":29858.6870546241},"targetPosition":{"x":32057.021447813397,"y":30040.715878358464},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5fbd2ee-9cef-4887-a270-8fb307dff36d","savedPayload":{"position":{"x":32057.021447813397,"y":30040.715878358464},"targetPosition":{"x":31924.769766047593,"y":30222.744702092827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"faabf32b-db1f-49d2-8a74-39e9f653867c","savedPayload":{"position":{"x":31924.769766047593,"y":30222.744702092827},"targetPosition":{"x":31792.51808428179,"y":30404.77352582719},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d33d5a40-93e6-4a51-9bf0-389702d7c57c","savedPayload":{"position":{"x":31792.518084281786,"y":30404.77352582719},"targetPosition":{"x":31660.26640251598,"y":30586.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"b5967d93-adf2-4a9e-9f1f-8ddb83c11e89","savedPayload":{"position":{"x":32280.72522855829,"y":29996.73315620387},"targetPosition":{"x":32259.097183739108,"y":30164.091425128056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"946e10ee-70f9-4489-8ac9-c523116f997d","savedPayload":{"position":{"x":32259.097183739108,"y":30164.091425128056},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"35e54c04-f05e-4790-9431-da49c89895a4","savedPayload":{"position":{"x":32419.54778424952,"y":30035.350686748472},"targetPosition":{"x":32351.645554199928,"y":30189.83644549112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"299cc453-ffa7-4bcc-84be-fcf9187e0188","savedPayload":{"position":{"x":32351.645554199928,"y":30189.83644549112},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"91d65f47-922b-4e28-874a-7ccb83389509","savedPayload":{"position":{"x":32541.867235395224,"y":30111.51476952651},"targetPosition":{"x":32433.19185496373,"y":30240.61250067648},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"74da641c-243d-4e2c-86e7-b215d804796d","savedPayload":{"position":{"x":32433.19185496373,"y":30240.61250067648},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"8616a334-50d8-437a-9631-96e1b6611f77","savedPayload":{"position":{"x":32637.773987525372,"y":30219.055043516553},"targetPosition":{"x":32497.129689717167,"y":30312.30601666984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"98acfea3-5f57-4dd2-ad9b-f13643c04b3a","savedPayload":{"position":{"x":32497.129689717167,"y":30312.30601666984},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"bc3a1d72-8424-40e4-bf3b-e9aec5365cfe","savedPayload":{"position":{"x":32699.498245961793,"y":30349.259235286558},"targetPosition":{"x":32538.279195341438,"y":30399.108811183178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4219ab16-929b-4489-80f8-2e2970e170dd","savedPayload":{"position":{"x":32538.279195341438,"y":30399.108811183178},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"7ef4294e-31a6-4a56-b4cc-ed4a3f205bb2","savedPayload":{"position":{"x":32722.039478374263,"y":30491.578975573466},"targetPosition":{"x":32553.306683616425,"y":30493.98863804112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7bacba88-87bc-491a-95fa-4024d49438f5","savedPayload":{"position":{"x":32553.306683616425,"y":30493.98863804112},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"d717997d-c2f4-4332-abd3-cf4a0f25cb65","savedPayload":{"position":{"x":32703.57152817061,"y":30634.48436542732},"targetPosition":{"x":32540.994716813988,"y":30589.258897943688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"63558a06-3dab-46c6-b361-2d55aca38eea","savedPayload":{"position":{"x":32540.994716813988,"y":30589.258897943688},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Slope Not Extreme, or...","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope != \"Extreme\" || \n(chart.at01hs.bollingerSubChannel.period <= 6 && \nchart.at08hs.bollingerChannel.direction === \"Down\" && \nchart.at06hs.bollingerChannel.direction === \"Down\" && \nchart.at04hs.bollingerChannel.direction === \"Down\" && \nchart.at02hs.bollingerSubChannel.slope === (\"Extreme\" || \"Steep\"))","project":"Superalgos","id":"e8563aee-5cd1-4953-a1c4-890a47ef8af3","savedPayload":{"position":{"x":32645.59055884319,"y":30766.398060053234},"targetPosition":{"x":32502.340737262373,"y":30677.20136102763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d900ad86-c048-45d3-9b26-dc8665b8aba8","savedPayload":{"position":{"x":32502.340737262373,"y":30677.20136102763},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"8H Deviation","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at08hs.bollingerBand.deviation < 1575","project":"Superalgos","id":"84f24347-1102-48e1-9d13-b7ae0f043e5e","savedPayload":{"position":{"x":32552.793843700816,"y":30876.633196433573},"targetPosition":{"x":32440.476260500796,"y":30750.691451947856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"182deaef-3884-4ddd-b08b-2a554a130832","savedPayload":{"position":{"x":32440.476260500796,"y":30750.691451947856},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Below Top Band","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.candle.open < \nchart.at24hs.bollingerBand.movingAverage + chart.at24hs.bollingerBand.deviation || \nchart.at24hs.candle.close < \nchart.at24hs.bollingerBand.movingAverage + chart.at24hs.bollingerBand.deviation","project":"Superalgos","id":"7ea70416-894f-4fae-ad62-db36e510519f","savedPayload":{"position":{"x":32432.69922072101,"y":30956.259179412395},"targetPosition":{"x":32360.41317851425,"y":30803.775440600402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eb6577c9-7823-490c-9a25-81165b4d4f6b","savedPayload":{"position":{"x":32360.41317851425,"y":30803.775440600402},"targetPosition":{"x":32215.841094100742,"y":30498.80796297642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8a86bab-322e-4f20-8f2d-74671e8d2b7e","savedPayload":{"position":{"x":32215.841094100742,"y":30498.80796297642},"targetPosition":{"x":31882.49627914988,"y":30551.6045949275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"97e60ce9-228e-459d-b2cc-2ba447266e22","savedPayload":{"position":{"x":31882.496279149884,"y":30551.6045949275},"targetPosition":{"x":31660.26640251598,"y":30586.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"166df39d-b70e-4061-9557-a6bb41a74bea","savedPayload":{"position":{"x":31660.26640251598,"y":30586.802349561553},"targetPosition":{"x":31395.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"openStage":{"type":"Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"4f34635c-d4e2-47c1-8c75-cd18d577fe33","savedPayload":{"position":{"x":32067.85311861592,"y":30204.428343498927},"targetPosition":{"x":32021.072988181924,"y":30424.511553664033},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9f6351ce-0ca2-44f2-9e85-e9365265131b","savedPayload":{"position":{"x":32021.072988181924,"y":30424.511553664033},"targetPosition":{"x":31974.29285774793,"y":30644.59476382914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"492cee3d-1709-41c5-bfd8-e700a3fdf3da","savedPayload":{"position":{"x":32402.268290080745,"y":30505.537116360414},"targetPosition":{"x":32188.280573914337,"y":30575.065940094777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"df940eb5-ea9b-485d-a03a-27491d496fc3","savedPayload":{"position":{"x":32188.280573914337,"y":30575.065940094777},"targetPosition":{"x":31974.29285774793,"y":30644.59476382914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dbfab28a-d209-4896-96bb-05a26db8b73f","savedPayload":{"position":{"x":31974.29285774793,"y":30644.59476382914},"targetPosition":{"x":31823.738471317185,"y":30811.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"cc515fe8-2957-4ef9-aef8-e65512f6ebf0","savedPayload":{"position":{"x":33364.32094247293,"y":31139.26326259952},"targetPosition":{"x":33144.237732307825,"y":31092.483132165526},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"be9e2b59-adac-4ec8-8b16-73c9c1367eff","savedPayload":{"position":{"x":33144.237732307825,"y":31092.483132165526},"targetPosition":{"x":32924.15452214272,"y":31045.70300173153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"95614ecb-8d7a-4a56-8ca8-3a51ec209f45","savedPayload":{"position":{"x":32924.15452214272,"y":31045.70300173153},"targetPosition":{"x":32704.071311977616,"y":30998.922871297535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"938d2ee7-fd7b-409a-8ba3-2e10898ecf2c","savedPayload":{"position":{"x":32704.071311977616,"y":30998.922871297535},"targetPosition":{"x":32483.988101812505,"y":30952.14274086354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c54cb995-2b02-426e-bfe3-dea00d502d56","savedPayload":{"position":{"x":32483.988101812505,"y":30952.14274086354},"targetPosition":{"x":32263.904891647395,"y":30905.362610429544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"f3ccceff-a347-4100-b429-0788d0035868","savedPayload":{"position":{"x":32263.904891647395,"y":30905.362610429544},"targetPosition":{"x":32043.82168148229,"y":30858.582479995548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"381d75d8-f6de-4841-b6a3-fc3c01884438","savedPayload":{"position":{"x":32043.82168148229,"y":30858.582479995548},"targetPosition":{"x":31823.738471317185,"y":30811.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"262e5a8c-cb38-43be-840d-a41ee5f4665f","savedPayload":{"position":{"x":31823.738471317185,"y":30811.802349561553},"targetPosition":{"x":31395.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"098e918d-2dee-44f7-97bd-9d3a9ef0458a","savedPayload":{"position":{"x":32431.11247737981,"y":30845.80299720027},"targetPosition":{"x":32263.904891647395,"y":30996.357383631013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"q"}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Below 5%","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"96683629-b453-49a5-a871-94a0deb2a017","savedPayload":{"position":{"x":34709.05769560074,"y":43147.29248489483},"targetPosition":{"x":34350.794450271744,"y":43263.95908845504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c48e62b6-cdf5-4ee0-9872-6487a99d1861","savedPayload":{"position":{"x":34350.794450271744,"y":43263.95908845504},"targetPosition":{"x":33993.38106367408,"y":43380.47742524669},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e502afa9-3ac9-4d7c-9a1c-02a66181c75c","savedPayload":{"position":{"x":33993.38106367408,"y":43380.47742524669},"targetPosition":{"x":33629.03081013233,"y":43499.30045523796},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"2ae990f4-51b6-47de-8cb4-3acd042c1218","savedPayload":{"position":{"x":32477.892607813807,"y":31065.886207365376},"targetPosition":{"x":32263.904891647395,"y":30996.357383631013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"92bc3860-4ffb-44e8-bd90-15b05113b3d2","savedPayload":{"position":{"x":32263.904891647395,"y":30996.357383631013},"targetPosition":{"x":32043.82168148229,"y":31043.13751406501},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P1: Trailing 5.25% Above MA","project":"Superalgos","formula":{"type":"Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.0525 < tradingEngine.current.position.stopLoss.value) \n{chart.at01hs.bollingerBand.movingAverage * 1.0525} \nelse {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"6f65573a-c2ac-476a-9ca1-738971e3ff78","savedPayload":{"position":{"x":32704.071311977616,"y":30902.797122763022},"targetPosition":{"x":32483.988101812505,"y":30949.577253197018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"e29bf8a5-014c-4868-b50a-c4b79b2b2eb3","savedPayload":{"position":{"x":32483.988101812505,"y":30949.577253197018},"targetPosition":{"x":32263.904891647395,"y":30996.357383631013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89593e32-77e8-4216-a351-64c852d06784","savedPayload":{"position":{"x":32043.82168148229,"y":31043.13751406501},"targetPosition":{"x":31823.738471317185,"y":31089.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"P1: 60% of Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.6","project":"Superalgos","id":"1766975c-17c8-477e-b2e5-cb6ff1c7ddd3","savedPayload":{"position":{"x":33314.04535671645,"y":45271.487712938455},"targetPosition":{"x":32946.24898886059,"y":45349.681816214885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"c3f076df-8b01-4a9a-ad60-9bf53433e4bf","savedPayload":{"position":{"x":34892.563316073385,"y":44818.65764511538},"targetPosition":{"x":34525.300786683394,"y":44739.66279607378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"553fde3a-dcb6-41b2-89c8-ba278a2fd4e0","savedPayload":{"position":{"x":34525.300786683394,"y":44739.66279607378},"targetPosition":{"x":34158.05296887747,"y":44662.307954719756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa198094-34dd-4f2e-8d57-002ca886ba71","savedPayload":{"position":{"x":34158.05296887747,"y":44662.307954719756},"targetPosition":{"x":33782.92022434599,"y":44582.296709466376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Entering Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"f1452048-936e-4c93-a615-66ed6b18bd11","savedPayload":{"position":{"x":34462.142449704144,"y":45448.81149551981},"targetPosition":{"x":34182.69168377307,"y":45198.65311590572},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d85e95b6-4108-40d6-9ed0-a382f8d5015a","savedPayload":{"position":{"x":34182.69168377307,"y":45198.65311590572},"targetPosition":{"x":33902.315930860655,"y":44946.60348367144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"67baba53-16eb-4a64-b7ae-f8b2e999e710","savedPayload":{"position":{"x":33746.86737551633,"y":45681.825152902136},"targetPosition":{"x":33824.63395623886,"y":45314.558632879474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f3a53caf-c1d2-4786-869d-3e4ed1c9b71b","savedPayload":{"position":{"x":33824.63395623886,"y":45314.558632879474},"targetPosition":{"x":33902.315930860655,"y":44946.60348367144},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"034c0358-0163-4448-9511-8e154f07226e","savedPayload":{"position":{"x":33902.315930860655,"y":44946.60348367144},"targetPosition":{"x":33782.92022434599,"y":44582.296709466376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a2d912bb-6362-4505-91b6-8b726dd670c7","savedPayload":{"position":{"x":32829.90240058197,"y":45707.41475850233},"targetPosition":{"x":32946.24898886059,"y":45349.681816214885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"17a900a2-bcfd-4e3f-b115-baa06c2b077a","savedPayload":{"position":{"x":32946.24898886059,"y":45349.681816214885},"targetPosition":{"x":32662.57024758354,"y":45034.571909609454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P2: 85% MA - 4 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 0.85 - \nchart.at01hs.bollingerBand.deviation * 4 > 1) \n{chart.at01hs.bollingerBand.movingAverage * 0.85 - \nchart.at01hs.bollingerBand.deviation * 4} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"77e53622-cb53-410d-892f-cd474b28c29e","savedPayload":{"position":{"x":33565.495667517156,"y":45550.699227629724},"targetPosition":{"x":33197.76323381353,"y":45629.00513569311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"8H Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"5fbde96a-6337-465e-8304-ca3def2b6410","savedPayload":{"position":{"x":34313.896196108704,"y":34006.94768962772},"targetPosition":{"x":34027.55809144888,"y":33903.90890385494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b855a2c5-d616-4379-a31a-5e187f36bfc4","savedPayload":{"position":{"x":34027.55809144888,"y":33903.90890385494},"targetPosition":{"x":33670.54217406637,"y":33767.06013221846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"9bff4bf4-56cd-46ea-adf1-273dbe6c8299","savedPayload":{"position":{"x":33943.545916131174,"y":34380.65230579139},"targetPosition":{"x":33826.05464291599,"y":34116.36499175626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3dbea2ad-06be-4a8e-ba8e-7718704e1dbe","savedPayload":{"position":{"x":33826.05464291599,"y":34116.36499175626},"targetPosition":{"x":33670.54217406637,"y":33767.06013221846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"f969b936-fd9a-45f2-bf59-4a18d691bc06","savedPayload":{"position":{"x":33365.21759514697,"y":34361.89351578371},"targetPosition":{"x":33469.069993306824,"y":34092.07750163722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8ac6da5-2f72-4c53-953a-4135624d6230","savedPayload":{"position":{"x":33469.069993306824,"y":34092.07750163722},"targetPosition":{"x":33670.54217406637,"y":33767.06013221846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"15b3728c-3b03-4a2b-9e05-6b7f772e6bf3","savedPayload":{"position":{"x":33670.3617968467,"y":33767.36681069698},"targetPosition":{"x":33435.187492379744,"y":33238.76127967883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 40","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.movingAverage <= 40","project":"Superalgos","id":"867dd327-29de-4b01-af95-8e18191a299a","savedPayload":{"position":{"x":33303.23943993116,"y":34347.47096855905},"targetPosition":{"x":33214.009041898185,"y":34072.534936798365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eef8d507-fcf6-4efa-9fcb-9e58ccc0af36","savedPayload":{"position":{"x":33214.009041898185,"y":34072.534936798365},"targetPosition":{"x":33095.222469697415,"y":33706.74008515364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"f2fa836d-23f0-47cb-ba81-550089468d9a","savedPayload":{"position":{"x":32887.809835374734,"y":34345.48828495419},"targetPosition":{"x":32977.1943507916,"y":34070.1752676027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f75a18be-7ac8-4276-89bd-b3ff8ea5c69f","savedPayload":{"position":{"x":32977.1943507916,"y":34070.1752676027},"targetPosition":{"x":33095.222469697415,"y":33706.74008515364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 3","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 3","project":"Superalgos","id":"5556b779-ef49-4a0b-ad26-1cdbfd6a01b8","savedPayload":{"position":{"x":32551.79163330382,"y":34101.68307275206},"targetPosition":{"x":32786.20141093785,"y":33931.303262504545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8762e6c-04a8-49dc-a6e7-de73f24bb295","savedPayload":{"position":{"x":32786.20141093785,"y":33931.303262504545},"targetPosition":{"x":33095.222469697415,"y":33706.74008515364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.direction === \"Up\"","project":"Superalgos","id":"42cf65fc-dc6a-4a45-9e14-1820db151b51","savedPayload":{"position":{"x":32419.40835986473,"y":33706.77467618883},"targetPosition":{"x":32708.281092431735,"y":33706.74468798921},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8137faa0-d59a-4eab-ad95-ca8d2250bbf6","savedPayload":{"position":{"x":32708.281092431735,"y":33706.74468798921},"targetPosition":{"x":33095.222469697415,"y":33706.74008515364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c688240e-5e54-456d-b219-16994f799907","savedPayload":{"position":{"x":33095.1260744772,"y":33706.85565164525},"targetPosition":{"x":33435.187492379744,"y":33238.76127967883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6e59e30a-bd6e-45ad-afb9-f1bab0a759d9","savedPayload":{"position":{"x":33081.37059716739,"y":45986.675750518916},"targetPosition":{"x":33197.76323381353,"y":45629.00513569311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"62709ed5-832a-43e8-8f74-29a359af7127","savedPayload":{"position":{"x":33197.76323381353,"y":45629.00513569311},"targetPosition":{"x":32946.2721927684,"y":45349.70875447456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P3: 90% MA - 4 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 0.9 - \nchart.at01hs.bollingerBand.deviation * 4 > 1) \n{chart.at01hs.bollingerBand.movingAverage * 0.9 - \nchart.at01hs.bollingerBand.deviation * 4} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"2d4907e5-54f3-4677-b191-15a85b95c64e","savedPayload":{"position":{"x":33816.99926232152,"y":45830.00500999967},"targetPosition":{"x":33449.171569216196,"y":45908.19263107522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"12H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"12H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at12hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"7e9cefff-d831-4c3d-ba5a-42ef48397d0f","savedPayload":{"position":{"x":34765.98380616339,"y":34347.39549418623},"targetPosition":{"x":34496.48882922251,"y":34243.977113013236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d1d9d786-da85-4a7b-b5b5-3278dcdccfa8","savedPayload":{"position":{"x":34496.48882922251,"y":34243.977113013236},"targetPosition":{"x":34139.1826846747,"y":34106.89727920106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"512f3976-5707-426d-b6cf-63306b90b71a","savedPayload":{"position":{"x":34412.36598168939,"y":34720.47374541691},"targetPosition":{"x":34294.68096502172,"y":34456.12380723472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e09d719-39f0-4e66-afe9-e46f816c0b8a","savedPayload":{"position":{"x":34294.68096502172,"y":34456.12380723472},"targetPosition":{"x":34139.1826846747,"y":34106.89727920106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 15","project":"Superalgos","id":"53159d45-d2aa-4faf-b9a8-b6643623a64b","savedPayload":{"position":{"x":33898.86836226647,"y":34733.99282114502},"targetPosition":{"x":34002.3451549622,"y":34463.91025400862},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3cf6274-a828-41f0-a293-8e79ecfe4e39","savedPayload":{"position":{"x":34002.3451549622,"y":34463.91025400862},"targetPosition":{"x":34139.1826846747,"y":34106.89727920106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7f47a98b-6d2e-40e4-8105-82a9fa301600","savedPayload":{"position":{"x":34138.72923068571,"y":34107.041593114736},"targetPosition":{"x":33903.444890449115,"y":33578.37533891156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H %B MA < 70 || 12H %B MA < 40","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 70 || \nchart.at12hs.percentageBandwidth.movingAverage <= 40","project":"Superalgos","id":"52ec70e3-9089-4cba-beb3-c8310ab966b5","savedPayload":{"position":{"x":33774.13609584818,"y":34693.67974843563},"targetPosition":{"x":33685.01926297211,"y":34418.94168257089},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9bb204df-4376-4a7d-996f-8e41d75f49c3","savedPayload":{"position":{"x":33685.01926297211,"y":34418.94168257089},"targetPosition":{"x":33564.09567865441,"y":34046.53559984974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Previous Up","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"a18dfaba-685b-4ac6-8435-211bb8d59f2b","savedPayload":{"position":{"x":33354.08646562934,"y":34693.63279292591},"targetPosition":{"x":33443.320245870666,"y":34418.66698641436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b9ddf58a-89b4-4fec-899a-ab905e97234a","savedPayload":{"position":{"x":33443.320245870666,"y":34418.66698641436},"targetPosition":{"x":33564.09567865441,"y":34046.53559984974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"1d3956c4-c13a-414f-86ce-49acc5557ebe","savedPayload":{"position":{"x":33013.86300374505,"y":34446.71004276765},"targetPosition":{"x":33247.674194499516,"y":34276.65968787363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee9eaf68-0a23-45a3-8aaf-42b97ebf4584","savedPayload":{"position":{"x":33247.674194499516,"y":34276.65968787363},"targetPosition":{"x":33564.09567865441,"y":34046.53559984974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"4f684afd-4c77-42b0-8b2b-64994ab95e09","savedPayload":{"position":{"x":32883.44848831362,"y":34047.03987855057},"targetPosition":{"x":33173.189255956066,"y":34046.762218374395},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5ca55797-a76b-4be7-921d-bdd84773a407","savedPayload":{"position":{"x":33173.189255956066,"y":34046.762218374395},"targetPosition":{"x":33564.09567865441,"y":34046.53559984974},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"73890378-cc74-4c04-8e2b-e467429bcdb5","savedPayload":{"position":{"x":33563.36381764707,"y":34046.74274547042},"targetPosition":{"x":33903.444890449115,"y":33578.37533891156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"41a619aa-ca95-4184-a651-0fdfced33f96","savedPayload":{"position":{"x":33332.908876866,"y":46265.96430054825},"targetPosition":{"x":33449.171569216196,"y":45908.19263107522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"c51fe1c0-ac69-4b35-913f-76e24ee4c4b2","savedPayload":{"position":{"x":33449.171569216196,"y":45908.19263107522},"targetPosition":{"x":33197.76323381353,"y":45629.00513569311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P4: MA - 3 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 3 > 1) \n{chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 3} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"d1425de3-3c9f-4b1a-a3ad-b5b2a604f857","savedPayload":{"position":{"x":34068.57788161443,"y":46109.40292379315},"targetPosition":{"x":33700.701198255425,"y":46187.50784931677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"24H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous %B < 20","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 20","project":"Superalgos","id":"1ff4ea62-15ff-4409-9e8c-0c5576958be6","savedPayload":{"position":{"x":35409.03748914336,"y":34332.41240836034},"targetPosition":{"x":35120.87684356308,"y":34347.3660115159},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13f09ae8-9b15-4e6a-be3c-d0745b7252a3","savedPayload":{"position":{"x":35120.87684356308,"y":34347.3660115159},"targetPosition":{"x":34736.1983014881,"y":34367.45608838943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"90d32cba-ec65-4a52-a96a-02e5436b790e","savedPayload":{"position":{"x":35299.74423366926,"y":34733.223274601914},"targetPosition":{"x":35057.00651498286,"y":34575.66060019508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a58f7e1-75da-4e8f-a4c5-185a59e8c938","savedPayload":{"position":{"x":35057.00651498286,"y":34575.66060019508},"targetPosition":{"x":34736.1983014881,"y":34367.45608838943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"fff48225-fa90-4ed5-aca8-4ae98a55e135","savedPayload":{"position":{"x":34976.39130225283,"y":34992.43466496907},"targetPosition":{"x":34872.571000307085,"y":34722.27863131596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e01c18f1-b9f7-4cc7-91be-6d18c3168f13","savedPayload":{"position":{"x":34872.571000307085,"y":34722.27863131596},"targetPosition":{"x":34736.1983014881,"y":34367.45608838943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H EMA 20 > 50 or Convergence","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.popularEMA.ema20 > chart.at01hs.popularEMA.ema50 || \n(chart.at01hs.popularEMA.ema50 - chart.at01hs.popularEMA.ema20 < \nchart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 && \nchart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 < chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema20)\n","project":"Superalgos","id":"7ee960b5-be23-4649-92ca-fc4ea5adc99b","savedPayload":{"position":{"x":34588.6896831818,"y":35003.24238230911},"targetPosition":{"x":34638.21451177582,"y":34734.76550724741},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4262c963-84df-44ba-ac06-7ecb331ba24d","savedPayload":{"position":{"x":34638.21451177582,"y":34734.76550724741},"targetPosition":{"x":34736.1983014881,"y":34367.45608838943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"186df69f-9a0d-49af-9394-0dbd05f18628","savedPayload":{"position":{"x":32493.284936710133,"y":34899.97010995033},"targetPosition":{"x":32434.623958472763,"y":34512.41242352729},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"d08197af-2643-4f8c-83ac-8eb33a9ff474","savedPayload":{"position":{"x":34851.28599295458,"y":34966.245125547284},"targetPosition":{"x":34635.47354092749,"y":34771.87096227452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"750174f5-0953-4204-bb06-9f68030e9185","savedPayload":{"position":{"x":34635.47354092749,"y":34771.87096227452},"targetPosition":{"x":34312.05778430146,"y":34480.55766622613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"9d8a9727-239e-42db-952a-7c04e065ffca","savedPayload":{"position":{"x":34462.2575998714,"y":35187.42822942591},"targetPosition":{"x":34402.217549161316,"y":34904.801585394336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f42f3843-bf81-4782-b129-f06e98f354d8","savedPayload":{"position":{"x":34402.217549161316,"y":34904.801585394336},"targetPosition":{"x":34312.05778430146,"y":34480.55766622613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"99b3c782-ecb4-43ca-9624-962220c38981","savedPayload":{"position":{"x":34017.69062754922,"y":35142.827005323794},"targetPosition":{"x":34135.06246520573,"y":34878.72637517916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0fdfb277-cfa0-4fc6-aee9-db2cc997b208","savedPayload":{"position":{"x":34135.06246520573,"y":34878.72637517916},"targetPosition":{"x":34312.05778430146,"y":34480.55766622613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H %B < 60 || 12H %B < 30","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 60 || \nchart.at12hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"90331db7-a6e8-47a6-be28-4e679b728ce3","savedPayload":{"position":{"x":33688.6060823321,"y":34841.204941147946},"targetPosition":{"x":33938.84406993014,"y":34696.41520430634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef2973eb-d707-41cc-b492-96dbf5215de1","savedPayload":{"position":{"x":33938.84406993014,"y":34696.41520430634},"targetPosition":{"x":34312.05778430146,"y":34480.55766622613},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"91020a9c-998e-407c-94f1-774941d9033c","savedPayload":{"position":{"x":32204.60372331289,"y":34829.153321840844},"targetPosition":{"x":32434.623958472763,"y":34512.41242352729},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"25% Target","project":"Superalgos","conditions":[{"type":"Condition","name":"25% Target","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close <= tradingEngine.current.position.entryTargetRate.value * 0.8","project":"Superalgos","id":"a8a904a9-cbf3-40cb-89ef-8066d65fe443","savedPayload":{"position":{"x":31439.153660104803,"y":34670.91668652775},"targetPosition":{"x":31631.279843679597,"y":34640.18604123795},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b841c21b-789a-49bf-b959-f91613e089a8","savedPayload":{"position":{"x":31631.279843679597,"y":34640.18604123795},"targetPosition":{"x":32053.638629901925,"y":34573.02752757285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"66105054-6e57-4aec-ada2-14054981fd68","savedPayload":{"position":{"x":32048.25665768771,"y":34573.683429503624},"targetPosition":{"x":32434.623958472763,"y":34512.41242352729},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"830013bf-e507-4960-9742-1a9b8ffdd16a","savedPayload":{"position":{"x":33584.52207707842,"y":46545.3487760963},"targetPosition":{"x":33700.701198255425,"y":46187.50784931677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"b30e4c2c-fe06-4217-af5a-5c728463388a","savedPayload":{"position":{"x":33700.701198255425,"y":46187.50784931677},"targetPosition":{"x":33449.171569216196,"y":45908.19263107522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P5: MA - 1.5 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 1.5 > 1) \n{chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 1.5} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"b04ad21c-bd81-401e-8b70-c158ab668f66","savedPayload":{"position":{"x":34320.106779168156,"y":46388.82870795658},"targetPosition":{"x":33952.307488258244,"y":46466.911476557114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"24H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous MA < 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"7637580c-cda0-4056-ad4a-de67510050fa","savedPayload":{"position":{"x":35876.25205652919,"y":34671.62305414491},"targetPosition":{"x":35586.44372881866,"y":34686.63835648769},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ecaa9841-49d1-45da-8249-17e373c7d662","savedPayload":{"position":{"x":35586.44372881866,"y":34686.63835648769},"targetPosition":{"x":35204.802553158996,"y":34706.52466078047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"f6f6d914-5813-4389-b29e-6c7edc4927e0","savedPayload":{"position":{"x":35768.29691707317,"y":35072.353314686974},"targetPosition":{"x":35525.69778322024,"y":34914.843887799856},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9fb9d04e-da7e-45a8-af44-e87d65e5650f","savedPayload":{"position":{"x":35525.69778322024,"y":34914.843887799856},"targetPosition":{"x":35204.802553158996,"y":34706.52466078047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"a08871c1-b85d-4afc-9480-7eeca7598dd1","savedPayload":{"position":{"x":35445.71323171194,"y":35333.763656162},"targetPosition":{"x":35341.881768878666,"y":35063.38160905354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1dcf89ef-e3e3-4d6e-bbfb-16ccdeeec348","savedPayload":{"position":{"x":35341.881768878666,"y":35063.38160905354},"targetPosition":{"x":35204.802553158996,"y":34706.52466078047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H EMA 20 > 50 or Convergence","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.popularEMA.ema20 > chart.at01hs.popularEMA.ema50 || (chart.at01hs.popularEMA.ema50 - chart.at01hs.popularEMA.ema20 < chart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 && chart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 < chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema20)","project":"Superalgos","id":"5dc14b5f-4a07-413a-83ac-7c57eb96a8d3","savedPayload":{"position":{"x":35031.521909945615,"y":35355.73056921952},"targetPosition":{"x":35106.25401711537,"y":35075.68784345852},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8a062525-23e1-48dc-83c1-c0cec0e30907","savedPayload":{"position":{"x":35106.25401711537,"y":35075.68784345852},"targetPosition":{"x":35204.802553158996,"y":34706.52466078047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f3086330-375a-4871-a7a8-f12b0543f1c3","savedPayload":{"position":{"x":33726.66071845453,"y":46849.50789825656},"targetPosition":{"x":33552.467278048556,"y":46508.107532752314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"aca8f925-5511-4d06-92bb-29b637072f66","savedPayload":{"position":{"x":35291.71769970888,"y":35293.15526062224},"targetPosition":{"x":35069.51748654536,"y":35093.00585602653},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0ff1bab-8072-4dab-97b8-69d3cb9d0d48","savedPayload":{"position":{"x":35069.51748654536,"y":35093.00585602653},"targetPosition":{"x":34780.54057706965,"y":34832.61490488943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H %B < 50 || 12H %B < 17.5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 50 || \nchart.at12hs.percentageBandwidth.movingAverage <= 17.5","project":"Superalgos","id":"7673df58-3326-4d28-9005-47214b0f05c0","savedPayload":{"position":{"x":34919.96500259511,"y":35488.16089355628},"targetPosition":{"x":34859.67021793508,"y":35204.39181583699},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5435a45d-891a-4456-8521-6587003fb171","savedPayload":{"position":{"x":34859.67021793508,"y":35204.39181583699},"targetPosition":{"x":34780.54057706965,"y":34832.61490488943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"4eadea14-f412-4849-b3f6-187e72b13bd8","savedPayload":{"position":{"x":34508.62639265218,"y":35444.61230201032},"targetPosition":{"x":34626.14280748206,"y":35180.09379289712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a94adefc-e6c3-4531-ab91-84d23096900a","savedPayload":{"position":{"x":34626.14280748206,"y":35180.09379289712},"targetPosition":{"x":34780.54057706965,"y":34832.61490488943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"c69a88a9-be56-4dd6-88d9-c360b06fa501","savedPayload":{"position":{"x":34201.18512479268,"y":35167.99486195829},"targetPosition":{"x":34451.70454936917,"y":35022.94867924883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe46196d-b481-4b9f-8908-43b5e7094d7f","savedPayload":{"position":{"x":34451.70454936917,"y":35022.94867924883},"targetPosition":{"x":34780.54057706965,"y":34832.61490488943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"80b47c3e-843a-43f5-8f74-5d2a437457fc","savedPayload":{"position":{"x":33434.240282908795,"y":46872.8894925803},"targetPosition":{"x":33552.467278048556,"y":46508.107532752314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"66% Target","project":"Superalgos","conditions":[{"type":"Condition","name":"66% Target","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close <= tradingEngine.current.position.entryTargetRate.value * 0.6","project":"Superalgos","id":"8a74b52a-5fc5-4ed0-85a3-4092e474081c","savedPayload":{"position":{"x":31596.267109871722,"y":35023.159554406884},"targetPosition":{"x":31788.215617618942,"y":34992.51174426056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f27c3841-bbe5-40a0-81e1-031db8512b53","savedPayload":{"position":{"x":31788.215617618942,"y":34992.51174426056},"targetPosition":{"x":32210.72091809486,"y":34925.37752862128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff1379fd-2b18-4c17-b69b-5aed7bffc5c9","savedPayload":{"position":{"x":33210.889634246996,"y":46682.09164890673},"targetPosition":{"x":33552.467278048556,"y":46508.107532752314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5e8f7f0f-0a93-4f9d-ac7c-da2b53d38919","savedPayload":{"position":{"x":33836.17019015389,"y":46824.696261092555},"targetPosition":{"x":33952.307488258244,"y":46466.911476557114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"ac38aa6f-c935-4bd3-90f5-69163e3f23ac","savedPayload":{"position":{"x":33952.307488258244,"y":46466.911476557114},"targetPosition":{"x":33700.701198255425,"y":46187.50784931677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P6: Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"5a0e05fc-2b96-46dd-b913-fa10420404c0","savedPayload":{"position":{"x":34455.40981462937,"y":47025.64828811611},"targetPosition":{"x":34203.931419250424,"y":46746.35130423025},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"9dc858f9-63b4-48a4-bcfc-5cee9a7219b4","savedPayload":{"position":{"x":34203.931419250424,"y":46746.35130423025},"targetPosition":{"x":33952.307488258244,"y":46466.911476557114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"116048c4-81d3-469d-842c-390bb32de8ce","savedPayload":{"position":{"x":31974.29285774793,"y":31257.125230231417},"targetPosition":{"x":31823.738471317185,"y":31089.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7c129ba3-8e7d-422a-9e40-d3a362b2f251","savedPayload":{"position":{"x":31823.738471317185,"y":31089.917644499004},"targetPosition":{"x":31395.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"3d3dc6e9-d5c3-405d-bea2-ff0867368e87","savedPayload":{"position":{"x":32313.348983401283,"y":31359.39558072062},"targetPosition":{"x":32089.581556943423,"y":31382.91448495584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93fa6d49-ec93-4df0-aa39-0e41982a794a","savedPayload":{"position":{"x":32089.581556943423,"y":31382.91448495584},"targetPosition":{"x":31865.814130485564,"y":31406.43338919106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value - tradingEngine.current.strategyOpenStage.stageQuotedAsset.feesPaid.value","project":"Superalgos","id":"6e98a177-0236-4e1c-8d32-7c67df342fac","savedPayload":{"position":{"x":32130.317494017178,"y":31770.491036659787},"targetPosition":{"x":31998.06581225137,"y":31588.462212925424},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85c5712b-61bc-4eaf-92a9-4fdacd110f85","savedPayload":{"position":{"x":31998.06581225137,"y":31588.462212925424},"targetPosition":{"x":31865.814130485564,"y":31406.43338919106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4cd64320-79e3-4a06-a892-02756d235dbe","savedPayload":{"position":{"x":31865.814130485564,"y":31406.43338919106},"targetPosition":{"x":31660.26640251598,"y":31314.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"142e80e8-6ef4-443c-91c2-96e0a2041523","savedPayload":{"position":{"x":31945.0952739475,"y":35200.95805384226},"targetPosition":{"x":31882.71536786642,"y":34905.689225518174},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e4205ca-82db-4481-a5f9-8bd3d3619eac","savedPayload":{"position":{"x":31882.71536786642,"y":34905.689225518174},"targetPosition":{"x":31820.25060740452,"y":34610.32110299557},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4067e6b8-f217-4094-a02f-4da7014704a1","savedPayload":{"position":{"x":31820.25060740452,"y":34610.32110299557},"targetPosition":{"x":31753.280299356597,"y":34293.364650702104},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"092bc2da-ac37-407f-8e2f-6492ae11502c","savedPayload":{"position":{"x":31754.342019456864,"y":32209.987350330444},"targetPosition":{"x":31730.823115221643,"y":31986.219923872584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3b1d6016-48ec-4460-8200-30bc40049643","savedPayload":{"position":{"x":31730.823115221643,"y":31986.219923872584},"targetPosition":{"x":31707.304210986422,"y":31762.452497414724},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"f46a0d35-2aea-47d3-96c9-ec3e063c5168","savedPayload":{"position":{"x":31707.304210986422,"y":31762.452497414724},"targetPosition":{"x":31683.7853067512,"y":31538.685070956864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13f97380-5bfb-4f7d-a690-ffefb67fdfb9","savedPayload":{"position":{"x":31683.7853067512,"y":31538.685070956864},"targetPosition":{"x":31660.26640251598,"y":31314.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"bdaf22d5-ad3a-43e4-8a9e-848b8f32eff4","savedPayload":{"position":{"x":31660.26640251598,"y":31314.917644499004},"targetPosition":{"x":31395.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a5f437d-1a17-4619-95e6-925b7686c87c","savedPayload":{"position":{"x":31395.763038984365,"y":30950.85999703028},"targetPosition":{"x":30945.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"Xtreme","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Xtreme","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"afc33e4f-53e2-4106-83c3-9efa7e7bebc5","savedPayload":{"position":{"x":30821.328868810433,"y":31935.37647054132},"targetPosition":{"x":30653.97059988625,"y":31913.748425722137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0f055de8-0eb0-4a8c-aea8-0acc7480ac6c","savedPayload":{"position":{"x":30653.97059988625,"y":31913.748425722137},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"34bd2c52-c5aa-4e69-9b82-414008ee0b80","savedPayload":{"position":{"x":30782.71133826583,"y":32074.199026232545},"targetPosition":{"x":30628.225579523183,"y":32006.296796182953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4ccae6ab-5911-4e5b-aa69-57e157a5acf9","savedPayload":{"position":{"x":30628.225579523183,"y":32006.296796182953},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"527f0ba5-4997-44c4-94d8-095c7b3d869e","savedPayload":{"position":{"x":30706.547255487792,"y":32196.51847737825},"targetPosition":{"x":30577.449524337822,"y":32087.843096946755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bfed975b-1086-4648-b900-2c493bcd2278","savedPayload":{"position":{"x":30577.449524337822,"y":32087.843096946755},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"56266555-5754-48e1-be35-51840b451a61","savedPayload":{"position":{"x":30599.00698149775,"y":32292.425229508397},"targetPosition":{"x":30505.756008344462,"y":32151.78093170019},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca52539f-eab7-4867-80a9-4c03295df977","savedPayload":{"position":{"x":30505.756008344462,"y":32151.78093170019},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"63b99ed2-4919-4262-aa74-ca9de1f83e0a","savedPayload":{"position":{"x":30468.802789727746,"y":32354.14948794482},"targetPosition":{"x":30418.953213831126,"y":32192.930437324467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"04132e51-a148-4e3b-a41a-d47deaa5113d","savedPayload":{"position":{"x":30418.953213831126,"y":32192.930437324467},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"5de63c96-ba0b-4329-8f5d-36414ecec5f3","savedPayload":{"position":{"x":30326.483049440838,"y":32376.690720357292},"targetPosition":{"x":30324.073386973185,"y":32207.95792559945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"206f98c9-6ebc-47bf-97f9-7a2369cf2a20","savedPayload":{"position":{"x":30324.073386973185,"y":32207.95792559945},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"09a75c6c-1d70-4826-9926-b65c58db8ec9","savedPayload":{"position":{"x":30183.577659586983,"y":32358.222770153636},"targetPosition":{"x":30228.803127070616,"y":32195.645958797013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e5cc491c-ca57-4138-8c28-9b0f3aa706d7","savedPayload":{"position":{"x":30228.803127070616,"y":32195.645958797013},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (chart.at01hs.bollingerSubChannel.slope != \"Extreme\") {true} else {if (chart.at01hs.bollingerSubChannel.period <=7) {true} else {false}}","project":"Superalgos","id":"67f3557c-8ecd-46bc-afbc-433af0bc47de","savedPayload":{"position":{"x":30051.66396496107,"y":32300.241800826214},"targetPosition":{"x":30140.860663986674,"y":32156.9919792454},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f9dbefdb-09bf-4d90-964f-35b02cde3ce4","savedPayload":{"position":{"x":30140.860663986674,"y":32156.9919792454},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H %B MA > 70","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.previous.movingAverage >= 70","project":"Superalgos","id":"3e758bbf-798d-4350-b600-f66e65b79a94","savedPayload":{"position":{"x":29941.42882858073,"y":32207.44508568384},"targetPosition":{"x":30067.370573066448,"y":32095.127502483818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d4c531a6-e637-4fd8-a2b8-b8b248bf4a0a","savedPayload":{"position":{"x":30067.370573066448,"y":32095.127502483818},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Deviation > 2000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerBand.deviation > 2000","project":"Superalgos","id":"6dc8d475-f68f-4405-8418-5869e7ca3785","savedPayload":{"position":{"x":29861.80284560191,"y":32087.35046270403},"targetPosition":{"x":30014.2865844139,"y":32015.064420497278},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"445f4ffc-bac0-44f2-9441-cf01424fd36e","savedPayload":{"position":{"x":30014.2865844139,"y":32015.064420497278},"targetPosition":{"x":30319.254062037882,"y":31870.492336083767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a5bd03d-6958-4fd0-bd5d-84afb04a6bed","savedPayload":{"position":{"x":30319.254062037882,"y":31870.492336083767},"targetPosition":{"x":30266.457430086804,"y":31537.14752113291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b21fbf4b-4ed3-4536-93f3-531ca2700817","savedPayload":{"position":{"x":30266.457430086804,"y":31537.14752113291},"targetPosition":{"x":30231.25967545275,"y":31314.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close > chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"3b591e8c-1739-4466-b9f3-87be08d0db90","savedPayload":{"position":{"x":29702.252948389523,"y":32043.032939436456},"targetPosition":{"x":29834.50463015533,"y":31861.004115702093},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"20b59f4c-8ec5-4be8-9d06-f1b223045e83","savedPayload":{"position":{"x":29834.50463015533,"y":31861.004115702093},"targetPosition":{"x":29966.756311921137,"y":31678.97529196773},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b8da5dc-c9d7-4794-ba8a-ad3a737f82c6","savedPayload":{"position":{"x":29966.756311921137,"y":31678.97529196773},"targetPosition":{"x":30099.007993686944,"y":31496.946468233367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4e265461-a65e-4f61-a123-f74d32a3d14f","savedPayload":{"position":{"x":30099.007993686944,"y":31496.946468233367},"targetPosition":{"x":30231.25967545275,"y":31314.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Xtreme","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"88151639-ba25-411f-ab3a-8e002e9948f2","savedPayload":{"position":{"x":29596.49003594137,"y":31902.929253510425},"targetPosition":{"x":29622.88835191691,"y":31736.256846034994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fc0bf247-86a1-4352-a85b-a0515a158629","savedPayload":{"position":{"x":29622.88835191691,"y":31736.256846034994},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"5ce80f14-1175-4cce-8f3f-cd05977d02e8","savedPayload":{"position":{"x":29445.852293374843,"y":31853.984083954496},"targetPosition":{"x":29522.46319020589,"y":31703.62673299771},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"449a1458-781c-4214-9ddc-4e268891db36","savedPayload":{"position":{"x":29522.46319020589,"y":31703.62673299771},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"660a8819-2e1b-46f9-b8ff-0f07b772ffb7","savedPayload":{"position":{"x":29317.7121758923,"y":31760.884839059825},"targetPosition":{"x":29437.036445217527,"y":31641.560569734596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b9a2cd43-d129-444e-9684-04ba93aa939e","savedPayload":{"position":{"x":29437.036445217527,"y":31641.560569734596},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"9d354242-8f6f-4dd4-8488-f453699caf51","savedPayload":{"position":{"x":29224.612930997628,"y":31632.74472157728},"targetPosition":{"x":29374.970281954415,"y":31556.133824746234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2d429ceb-6816-4f9d-b211-4034080d39a3","savedPayload":{"position":{"x":29374.970281954415,"y":31556.133824746234},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"85a4f5bd-4255-4b8d-bb4e-62eddb053030","savedPayload":{"position":{"x":29175.6677614417,"y":31482.106979010754},"targetPosition":{"x":29342.34016891713,"y":31455.708663035213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b3dba7b-79a2-425e-be41-0368ea2f005d","savedPayload":{"position":{"x":29342.34016891713,"y":31455.708663035213},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"89150469-6c19-4781-8c80-f3ac0728d734","savedPayload":{"position":{"x":29175.6677614417,"y":31323.71708315752},"targetPosition":{"x":29342.34016891713,"y":31350.115399133058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c27245cb-4562-4e8b-8cd2-171427de3d04","savedPayload":{"position":{"x":29342.34016891713,"y":31350.115399133058},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"72d449b1-2eaf-449c-b4c2-7e54165620e4","savedPayload":{"position":{"x":29224.612930997628,"y":31173.07934059099},"targetPosition":{"x":29374.970281954415,"y":31249.690237422037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"72c0840a-0162-4fb5-8fe0-1043a3500942","savedPayload":{"position":{"x":29374.970281954415,"y":31249.690237422037},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (chart.at01hs.bollingerSubChannel.slope != \"Extreme\") {true} else {if (chart.at01hs.bollingerSubChannel.period <=7) {true} else {false}}","project":"Superalgos","id":"fd550ee5-bb66-4475-9712-165aff7123a2","savedPayload":{"position":{"x":29317.7121758923,"y":31044.939223108446},"targetPosition":{"x":29437.036445217527,"y":31164.263492433674},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"27abcda3-5917-4345-b070-f506dd03d511","savedPayload":{"position":{"x":29437.036445217527,"y":31164.263492433674},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H %B MA > 70","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.previous.movingAverage >= 70","project":"Superalgos","id":"ae35fa99-f82e-421d-9df7-695e52a2dbe3","savedPayload":{"position":{"x":29445.852293374843,"y":30951.839978213775},"targetPosition":{"x":29522.46319020589,"y":31102.19732917056},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"055aec39-19b4-4001-8c7e-4e9d0b46a41d","savedPayload":{"position":{"x":29522.46319020589,"y":31102.19732917056},"targetPosition":{"x":29675.68498386799,"y":31402.912031084135},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"935320b2-9c4b-4f95-a23b-eca780f9968e","savedPayload":{"position":{"x":29675.68498386799,"y":31402.912031084135},"targetPosition":{"x":30009.029798818847,"y":31350.115399133058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9473e9a0-df49-4111-aeb3-c3398a2cca06","savedPayload":{"position":{"x":30009.029798818847,"y":31350.115399133058},"targetPosition":{"x":30231.25967545275,"y":31314.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7653910c-4637-4b93-909a-934356164e61","savedPayload":{"position":{"x":30231.25967545275,"y":31314.917644499004},"targetPosition":{"x":30495.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"openStage":{"type":"Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"20253ca8-c331-4d15-83dd-3615e5b3bd94","savedPayload":{"position":{"x":29823.67295935281,"y":31697.29165056163},"targetPosition":{"x":29870.453089786806,"y":31477.208440396524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d8b919-87fd-4d37-86b7-7c1e7d6268ff","savedPayload":{"position":{"x":29870.453089786806,"y":31477.208440396524},"targetPosition":{"x":29917.2332202208,"y":31257.125230231417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"a90e0c3d-a8f5-4cce-a763-2cc1a0d64502","savedPayload":{"position":{"x":29489.257787887986,"y":31396.182877700143},"targetPosition":{"x":29703.245504054394,"y":31326.65405396578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1f3a30b8-30b5-46e9-b8b7-1ceb4bf80aae","savedPayload":{"position":{"x":29703.245504054394,"y":31326.65405396578},"targetPosition":{"x":29917.2332202208,"y":31257.125230231417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"82010f4f-3614-4bdc-8c40-4d99e9e31312","savedPayload":{"position":{"x":29917.2332202208,"y":31257.125230231417},"targetPosition":{"x":30067.787606651546,"y":31089.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"1fe7e332-45dd-45c0-b106-63cdaea4bed4","savedPayload":{"position":{"x":28527.2051354958,"y":30762.456731461036},"targetPosition":{"x":28747.288345660905,"y":30809.23686189503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f2f65162-a972-4815-885c-a82298951d0b","savedPayload":{"position":{"x":28747.288345660905,"y":30809.23686189503},"targetPosition":{"x":28967.371555826012,"y":30856.016992329027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0662db35-3b83-4fad-be6c-aed4105f1804","savedPayload":{"position":{"x":28967.371555826012,"y":30856.016992329027},"targetPosition":{"x":29187.45476599112,"y":30902.797122763022},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8c738920-803e-4d81-81d7-f08f9d94d4b6","savedPayload":{"position":{"x":29187.45476599112,"y":30902.797122763022},"targetPosition":{"x":29407.537976156225,"y":30949.577253197018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4d78477-d485-45cc-ba6e-d97c76cf7dcc","savedPayload":{"position":{"x":29407.537976156225,"y":30949.577253197018},"targetPosition":{"x":29627.621186321332,"y":30996.357383631013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"8243f9c5-daa7-4793-9752-ade0c6dc895a","savedPayload":{"position":{"x":29627.621186321332,"y":30996.357383631013},"targetPosition":{"x":29847.70439648644,"y":31043.13751406501},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"a2395358-86a8-43ae-8473-fd8bc36631b7","savedPayload":{"position":{"x":29847.70439648644,"y":31043.13751406501},"targetPosition":{"x":30067.787606651546,"y":31089.917644499004},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"17b1363e-f9cb-4a68-bb06-666749e377e9","savedPayload":{"position":{"x":30067.787606651546,"y":31089.917644499004},"targetPosition":{"x":30495.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"2477d7a0-e2ef-4f98-8859-c9abdd65f330","savedPayload":{"position":{"x":29460.41360058892,"y":31055.916996860287},"targetPosition":{"x":29627.621186321332,"y":30905.362610429544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"q"}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Below 5%","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"aa5d897c-69c4-4c32-a25d-76662d7e110f","savedPayload":{"position":{"x":27395.437900321685,"y":45499.13558438583},"targetPosition":{"x":27739.16174441729,"y":45387.42703343237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac91438d-54f6-4de5-bd93-2414037fd447","savedPayload":{"position":{"x":27739.16174441729,"y":45387.42703343237},"targetPosition":{"x":28083.096701816885,"y":45275.62140783953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ba1814d0-9aac-443f-8ce8-9f19e860b532","savedPayload":{"position":{"x":28083.096701816885,"y":45275.62140783953},"targetPosition":{"x":28436.764796764543,"y":45160.60887785924},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"784ae520-1c92-4923-b9b1-b3da21840959","savedPayload":{"position":{"x":29413.633470154924,"y":30835.83378669518},"targetPosition":{"x":29627.621186321332,"y":30905.362610429544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"48832805-7cb3-4fe7-b465-5e20cb5393ce","savedPayload":{"position":{"x":29627.621186321332,"y":30905.362610429544},"targetPosition":{"x":29847.70439648644,"y":30858.582479995548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P1: Trailing 4% Above MA","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.04 < tradingEngine.current.position.stopLoss.value) \n{chart.at01hs.bollingerBand.movingAverage * 1.04} \nelse {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"1348c680-76ae-4766-bb6d-b8885b8b976c","savedPayload":{"position":{"x":29187.45476599112,"y":30998.922871297535},"targetPosition":{"x":29407.537976156225,"y":30952.14274086354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"b65434d1-738d-4df6-9b40-cb3674874299","savedPayload":{"position":{"x":29407.537976156225,"y":30952.14274086354},"targetPosition":{"x":29627.621186321332,"y":30905.362610429544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e0588afd-77c9-41e2-9ba3-6ad4661b299e","savedPayload":{"position":{"x":29847.70439648644,"y":30858.582479995548},"targetPosition":{"x":30067.787606651546,"y":30811.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"P 1","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.6","project":"Superalgos","id":"da970219-d04e-4e81-b13f-11206c1ac444","savedPayload":{"position":{"x":29552.69111762365,"y":30407.858354362364},"targetPosition":{"x":29766.678833790058,"y":30477.387178096727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"598ad9f2-1628-484a-8064-dc02a603a76a","savedPayload":{"position":{"x":27141.352546152822,"y":44241.26971039022},"targetPosition":{"x":27495.175104833386,"y":44316.152772204965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8d0ee4a2-12bc-4397-88eb-0336f5727cc5","savedPayload":{"position":{"x":27495.175104833386,"y":44316.152772204965},"targetPosition":{"x":27849.176437450467,"y":44390.979339874495},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7aec6373-83e5-49e9-a929-24793f0edf63","savedPayload":{"position":{"x":27849.176437450467,"y":44390.979339874495},"targetPosition":{"x":28213.028976823505,"y":44467.6441906245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Entering Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"80b84359-b9be-4edb-959f-019c7db1a646","savedPayload":{"position":{"x":27559.969235306173,"y":43630.923525453385},"targetPosition":{"x":27828.938824338173,"y":43872.63429078541},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b49b85e8-3e0f-4690-81aa-63bcc653bf61","savedPayload":{"position":{"x":27828.938824338173,"y":43872.63429078541},"targetPosition":{"x":28098.064358305954,"y":44114.51517420761},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"ab06f5d1-3b5b-46bb-a11f-53bdfb934128","savedPayload":{"position":{"x":28246.871216683878,"y":43408.13058942948},"targetPosition":{"x":28172.528002608564,"y":43761.0448782765},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c7e3d21c-8c14-4803-baf0-993d5ea14115","savedPayload":{"position":{"x":28172.528002608564,"y":43761.0448782765},"targetPosition":{"x":28098.064358305954,"y":44114.51517420761},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"66e824e8-bcb1-4d2f-b0c0-71d69c21c21d","savedPayload":{"position":{"x":28098.064358305954,"y":44114.51517420761},"targetPosition":{"x":28213.028976823505,"y":44467.6441906245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"45d39511-6b07-4481-aae9-2db4bb322f55","savedPayload":{"position":{"x":29719.898703356062,"y":30257.30396793162},"targetPosition":{"x":29766.678833790058,"y":30477.387178096727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"af39b8d4-dff2-4b71-85b8-25f18c617aca","savedPayload":{"position":{"x":29766.678833790058,"y":30477.387178096727},"targetPosition":{"x":29917.2332202208,"y":30644.59476382914},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 2","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.7","project":"Superalgos","id":"6e57c877-ec29-43b0-9003-6a4bc491437b","savedPayload":{"position":{"x":29396.041237194207,"y":30356.95972279831},"targetPosition":{"x":29616.124447359314,"y":30310.179592364315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"4H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at04hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"70a8d00a-b4e5-4bf7-b778-5044173db6e0","savedPayload":{"position":{"x":29812.67441774126,"y":29491.425221160447},"targetPosition":{"x":29781.92217281446,"y":29657.349486811865},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"02fdb9bc-e3fe-4133-9992-33c81371e710","savedPayload":{"position":{"x":29781.92217281446,"y":29657.349486811865},"targetPosition":{"x":29751.16992788766,"y":29823.273752463283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"74c4dbfb-5dee-4404-9eda-2f93ba6fc5b5","savedPayload":{"position":{"x":29751.16992788766,"y":29823.273752463283},"targetPosition":{"x":29720.41768296086,"y":29989.1980181147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"4H %B < 50","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at04hs.percentageBandwidth.movingAverage <= 50","project":"Superalgos","id":"0ecf3b89-510e-41e2-bb99-fca45f1ecade","savedPayload":{"position":{"x":30029.63904657774,"y":29593.230911610062},"targetPosition":{"x":29937.731209418955,"y":29734.756569950852},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9031b3b-9d32-42c7-929d-7d83f7fa0fac","savedPayload":{"position":{"x":29937.731209418955,"y":29734.756569950852},"targetPosition":{"x":29845.82337226017,"y":29876.282228291642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"6131bc6f-dacb-4247-a4fc-d18f8d204491","savedPayload":{"position":{"x":30146.538074173743,"y":29723.060434629548},"targetPosition":{"x":29996.180723216956,"y":29799.671331460595},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f96a644-8447-4406-94c9-d466e0d4d7f9","savedPayload":{"position":{"x":29996.180723216956,"y":29799.671331460595},"targetPosition":{"x":29845.82337226017,"y":29876.282228291642},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9253d35a-1ff4-4889-aa4c-d2d9cc495879","savedPayload":{"position":{"x":29845.82337226017,"y":29876.282228291642},"targetPosition":{"x":29720.41768296086,"y":29989.1980181147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ca7f0fa8-4f3b-4090-bc50-ff76e84401f2","savedPayload":{"position":{"x":29720.41768296086,"y":29989.1980181147},"targetPosition":{"x":29616.124447359314,"y":30310.179592364315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"cbc568dd-3da9-4818-8501-6c7f48b2a42e","savedPayload":{"position":{"x":29616.124447359314,"y":30310.179592364315},"targetPosition":{"x":29766.678833790058,"y":30477.387178096727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 3","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.8","project":"Superalgos","id":"b20cc025-3f64-4362-bc52-a43fa66de135","savedPayload":{"position":{"x":29245.486850763464,"y":30189.752137065898},"targetPosition":{"x":29465.57006092857,"y":30142.972006631902},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"6H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at06hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"ad489932-52d2-423a-bb47-db08d9934027","savedPayload":{"position":{"x":30052.162272354126,"y":29705.099219426414},"targetPosition":{"x":29896.04073890948,"y":29992.932242028524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0a8b6d2-862f-4dc8-894f-98a147328521","savedPayload":{"position":{"x":29896.04073890948,"y":29992.932242028524},"targetPosition":{"x":29739.854985148024,"y":30281.041779624098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51dea0e4-a5b0-419e-9077-f5d60ad8e4cd","savedPayload":{"position":{"x":29739.854985148024,"y":30281.041779624098},"targetPosition":{"x":29576.313790416472,"y":30583.86671076985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"5H %B < 50","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at06hs.percentageBandwidth.movingAverage <= 50","project":"Superalgos","id":"10317b11-632c-4cbf-ad84-7ec0b75f999e","savedPayload":{"position":{"x":30399.757281309398,"y":30032.217909045383},"targetPosition":{"x":30145.727753739946,"y":30238.146283338727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8beb8b51-1353-4670-b392-b4e6c9c2cdf0","savedPayload":{"position":{"x":30145.727753739946,"y":30238.146283338727},"targetPosition":{"x":29891.131347398343,"y":30444.339473641743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"d87940c6-f532-4acd-96da-06e846214122","savedPayload":{"position":{"x":30541.834860457213,"y":30512.04205133554},"targetPosition":{"x":30216.777087561208,"y":30478.203269652593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2b584bd-42c3-4a54-94d1-afcc2e676afc","savedPayload":{"position":{"x":30216.777087561208,"y":30478.203269652593},"targetPosition":{"x":29891.131347398343,"y":30444.339473641743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0d104bb9-af75-4f6f-97b6-9d1bbad410b3","savedPayload":{"position":{"x":29891.131347398343,"y":30444.339473641743},"targetPosition":{"x":29576.313790416472,"y":30583.86671076985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"74fa819d-43c6-44b7-8ec4-64bd97c2ce29","savedPayload":{"position":{"x":29569.863296530115,"y":29821.99043238229},"targetPosition":{"x":29465.57006092857,"y":30142.972006631902},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"d909c920-b2a7-457f-96a4-1841a61b0428","savedPayload":{"position":{"x":29465.57006092857,"y":30142.972006631902},"targetPosition":{"x":29616.124447359314,"y":30310.179592364315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 4","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.85","project":"Superalgos","id":"72e1f768-6908-4402-8935-41705cb7c2e1","savedPayload":{"position":{"x":29094.93246433272,"y":30022.544551333485},"targetPosition":{"x":29315.015674497827,"y":29975.76442089949},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B 0< 15 && 1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.previous.movingAverage <= 15 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"72c3f3e2-037a-4840-a2ac-5f682a578c14","savedPayload":{"position":{"x":29874.90656577674,"y":29307.063268891063},"targetPosition":{"x":29718.77357235677,"y":29594.86170753431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3c4a2c7-bb79-4d9d-9a6f-bd56fc231211","savedPayload":{"position":{"x":29718.77357235677,"y":29594.86170753431},"targetPosition":{"x":29562.592338657883,"y":29882.869472221493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ea20d7db-4468-457c-b65f-a52744fb6fc5","savedPayload":{"position":{"x":29562.592338657883,"y":29882.869472221493},"targetPosition":{"x":29398.899029725475,"y":30185.57647056243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 40 && 1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.movingAverage <= 40 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 3","project":"Superalgos","id":"6485a5b2-2959-4358-947e-98d0f3c88011","savedPayload":{"position":{"x":30222.171178564622,"y":29633.853046262546},"targetPosition":{"x":29968.140008420076,"y":29839.753519159894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8553226-ae92-4b87-ae86-5b53607d3bd3","savedPayload":{"position":{"x":29968.140008420076,"y":29839.753519159894},"targetPosition":{"x":29713.653747334454,"y":30045.92476117662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.direction === \"Up\"","project":"Superalgos","id":"d1a82d5f-7ff4-4c23-9147-a13f5199f21f","savedPayload":{"position":{"x":30359.97452446457,"y":29943.62981102186},"targetPosition":{"x":30037.075252348648,"y":29994.765115099915},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c80b06ad-0f63-41c0-a485-0bc97313fd48","savedPayload":{"position":{"x":30037.075252348648,"y":29994.765115099915},"targetPosition":{"x":29713.653747334454,"y":30045.92476117662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a234bc0-ff31-4650-878e-c21a11204d2a","savedPayload":{"position":{"x":29713.653747334454,"y":30045.92476117662},"targetPosition":{"x":29398.899029725475,"y":30185.57647056243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"248f0567-8e65-41c6-9580-71229332c7bb","savedPayload":{"position":{"x":29419.30891009937,"y":29654.782846649876},"targetPosition":{"x":29315.015674497827,"y":29975.76442089949},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"d52d95cd-0d77-468c-a7f1-497c2476fe33","savedPayload":{"position":{"x":29315.015674497827,"y":29975.76442089949},"targetPosition":{"x":29465.57006092857,"y":30142.972006631902},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 5","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.9","project":"Superalgos","id":"a39ae165-abd6-4725-ac6a-4edbef7200e4","savedPayload":{"position":{"x":28944.378077901976,"y":29855.336965601073},"targetPosition":{"x":29164.461288067083,"y":29808.556835167077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Complex","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at12hs.percentageBandwidth.previous.movingAverage <= 15 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 15","project":"Superalgos","id":"0d7d916c-3334-4422-8998-28f78bcbaf78","savedPayload":{"position":{"x":29697.122114349182,"y":28908.726944748352},"targetPosition":{"x":29541.141576651138,"y":29196.344299952125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"60ecd582-0e23-4c8a-8077-7201d263cca2","savedPayload":{"position":{"x":29541.141576651138,"y":29196.344299952125},"targetPosition":{"x":29385.19517334748,"y":29484.04274537672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4d364cc4-cdb0-4fba-bc23-235dcb482a4e","savedPayload":{"position":{"x":29385.19517334748,"y":29484.04274537672},"targetPosition":{"x":29221.499578234634,"y":29787.14258710573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Complex","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 70 || chart.at12hs.percentageBandwidth.movingAverage <= 40 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"ddebbd89-cba4-4d06-8fe9-a13fcbd4ba18","savedPayload":{"position":{"x":30045.10715016517,"y":29235.31315188759},"targetPosition":{"x":29790.61435873267,"y":29441.434346657265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2bf45ba3-ea96-40d1-a8eb-1f5b58eb97e3","savedPayload":{"position":{"x":29790.61435873267,"y":29441.434346657265},"targetPosition":{"x":29536.113176797804,"y":29647.668860440335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Prev Prev Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"877fda2b-35d0-45b5-9457-3f791f5ceeb0","savedPayload":{"position":{"x":30182.953528688606,"y":29545.187878596458},"targetPosition":{"x":29859.584338640296,"y":29596.529836509013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"658ac695-5997-4780-9d05-8ca8cdd9cd6a","savedPayload":{"position":{"x":29859.584338640296,"y":29596.529836509013},"targetPosition":{"x":29536.113176797804,"y":29647.668860440335},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"11b94bab-c0d6-4b49-95c2-4a65f5794288","savedPayload":{"position":{"x":29536.113176797804,"y":29647.668860440335},"targetPosition":{"x":29221.499578234634,"y":29787.14258710573},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6b6a705b-b008-4784-8e06-a7ff7138725b","savedPayload":{"position":{"x":29268.754523668627,"y":29487.575260917463},"targetPosition":{"x":29164.461288067083,"y":29808.556835167077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"46eafddb-7478-432f-818f-0c458b59171b","savedPayload":{"position":{"x":29164.461288067083,"y":29808.556835167077},"targetPosition":{"x":29315.015674497827,"y":29975.76442089949},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 6","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation * 1.75","project":"Superalgos","id":"29d4e7bb-f154-44c4-825c-24719949e808","savedPayload":{"position":{"x":28793.823691471232,"y":29688.12937986866},"targetPosition":{"x":29013.90690163634,"y":29641.349249434665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 30 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"d5ac2bb6-e328-40f7-bae6-26c46b85f9ea","savedPayload":{"position":{"x":29401.251250099,"y":28455.622075619573},"targetPosition":{"x":29284.170036567153,"y":28761.166299644003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c57b02c1-e38e-4c24-8ca0-5d5790f8c475","savedPayload":{"position":{"x":29284.170036567153,"y":28761.166299644003},"targetPosition":{"x":29166.971657079706,"y":29067.24633926581},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbfd82c7-c57c-4d1e-9a95-b05ad5765eca","savedPayload":{"position":{"x":29166.971657079706,"y":29067.24633926581},"targetPosition":{"x":29044.20351071421,"y":29388.761341743604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 60 || chart.at12hs.percentageBandwidth.movingAverage <= 30 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"7af7ef05-50d0-4db9-ae3c-8aed6a9842cd","savedPayload":{"position":{"x":29867.284395806066,"y":28836.921399785744},"targetPosition":{"x":29613.240695694218,"y":29042.856164012057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b79e13b-e44f-41bb-9450-47881760fb81","savedPayload":{"position":{"x":29613.240695694218,"y":29042.856164012057},"targetPosition":{"x":29358.87726829868,"y":29249.038776782076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Prev Prev Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"8c6bbc80-2d99-434a-ad29-12505c118c41","savedPayload":{"position":{"x":30005.140598084403,"y":29146.780322527065},"targetPosition":{"x":29682.23983599029,"y":29197.939183669154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce4d9250-7aee-432f-b0f7-a25a0d3739d1","savedPayload":{"position":{"x":29682.23983599029,"y":29197.939183669154},"targetPosition":{"x":29358.87726829868,"y":29249.038776782076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"defc1a9e-ccaa-424b-be17-0efc30e2c0a6","savedPayload":{"position":{"x":29358.87726829868,"y":29249.038776782076},"targetPosition":{"x":29044.20351071421,"y":29388.761341743604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9fb1dbd3-fed7-424c-add0-f6b7481dab05","savedPayload":{"position":{"x":29118.200137237884,"y":29320.36767518505},"targetPosition":{"x":29013.90690163634,"y":29641.349249434665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"8c0276f0-0551-4ce2-9287-0c9bfe22085a","savedPayload":{"position":{"x":29013.90690163634,"y":29641.349249434665},"targetPosition":{"x":29164.461288067083,"y":29808.556835167077},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation * 1.25","project":"Superalgos","id":"4e6d15ed-8c85-43cd-90e3-a73eeed22389","savedPayload":{"position":{"x":28643.26930504049,"y":29520.921794136248},"targetPosition":{"x":28863.352515205595,"y":29474.141663702252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 30 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"c29560f8-3916-4e7b-bd05-ec4c5c70aaad","savedPayload":{"position":{"x":28684.506999529363,"y":28347.255729950233},"targetPosition":{"x":28535.982761822477,"y":28621.423196330805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29cd95e8-e310-4279-8fc6-a886eaeb939d","savedPayload":{"position":{"x":28535.982761822477,"y":28621.423196330805},"targetPosition":{"x":28387.281959765012,"y":28896.11491117168},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7849fb9b-2762-47fa-bc35-690f40049780","savedPayload":{"position":{"x":28387.281959765012,"y":28896.11491117168},"targetPosition":{"x":28235.51926868731,"y":29177.667254171032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 50 || chart.at12hs.percentageBandwidth.movingAverage <= 17.5 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"f15eb65a-7dfa-4d09-b624-3a3d3e2b6420","savedPayload":{"position":{"x":29059.887319675054,"y":28722.00932339908},"targetPosition":{"x":28794.113522475807,"y":28884.830545158376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b4307590-5fe4-4997-a25c-3221fcaea5ea","savedPayload":{"position":{"x":28794.113522475807,"y":28884.830545158376},"targetPosition":{"x":28528.18840968589,"y":29047.94235434471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"98b65fea-6bb0-4a9a-8d31-3997e56c6c63","savedPayload":{"position":{"x":29144.359722680336,"y":28950.717726368173},"targetPosition":{"x":28836.33492280896,"y":28999.32774570377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7a79c0f2-514b-441a-ae08-5e1c1d815095","savedPayload":{"position":{"x":28836.33492280896,"y":28999.32774570377},"targetPosition":{"x":28528.18840968589,"y":29047.94235434471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e2165070-d0eb-428c-a168-dfacb74f0844","savedPayload":{"position":{"x":28528.18840968589,"y":29047.94235434471},"targetPosition":{"x":28235.51926868731,"y":29177.667254171032},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5ea9ce09-4324-4961-a5c0-9018bd9e8d36","savedPayload":{"position":{"x":28967.64575080714,"y":29153.16008945264},"targetPosition":{"x":28863.352515205595,"y":29474.141663702252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"64a62511-14f3-45ad-897b-543abba98920","savedPayload":{"position":{"x":28863.352515205595,"y":29474.141663702252},"targetPosition":{"x":29013.90690163634,"y":29641.349249434665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 8","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"96ea6099-ad3a-4240-95d9-1486bb21c131","savedPayload":{"position":{"x":28562.243742344108,"y":29139.726492237427},"targetPosition":{"x":28712.79812877485,"y":29306.93407796984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"cd3e2a56-39ae-4a5e-8190-f2b65ba6f8e2","savedPayload":{"position":{"x":28712.79812877485,"y":29306.93407796984},"targetPosition":{"x":28863.352515205595,"y":29474.141663702252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1d7d8a99-1d8d-41e4-9544-61ae4667aa1a","savedPayload":{"position":{"x":29917.2332202208,"y":30644.59476382914},"targetPosition":{"x":30067.787606651546,"y":30811.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"fa22b9a6-5479-4409-b77a-b9a20b365f95","savedPayload":{"position":{"x":30067.787606651546,"y":30811.802349561553},"targetPosition":{"x":30495.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"00a8423d-4604-4d28-aa43-0fe8410c1a4e","savedPayload":{"position":{"x":29578.177094567447,"y":30542.32441333994},"targetPosition":{"x":29801.944521025307,"y":30518.805509104717},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"62dec497-f190-41dc-b7a6-430ffb78fa3c","savedPayload":{"position":{"x":29801.944521025307,"y":30518.805509104717},"targetPosition":{"x":30025.711947483167,"y":30495.286604869496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value - tradingEngine.current.strategyOpenStage.stageQuotedAsset.feesPaid.value","project":"Superalgos","id":"8bbc979f-5425-49af-807b-38944be9b312","savedPayload":{"position":{"x":29761.208583951553,"y":30131.22895740077},"targetPosition":{"x":29893.46026571736,"y":30313.257781135133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e4a38608-0a48-4e4c-b291-36ee1a1b85c5","savedPayload":{"position":{"x":29893.46026571736,"y":30313.257781135133},"targetPosition":{"x":30025.711947483167,"y":30495.286604869496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7421d18f-87c9-4790-8e17-16642ba1efac","savedPayload":{"position":{"x":30025.711947483167,"y":30495.286604869496},"targetPosition":{"x":30231.25967545275,"y":30586.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"f9b6428b-706c-4762-b526-e65ce3a9eba1","savedPayload":{"position":{"x":29531.21158822058,"y":41412.8767554386},"targetPosition":{"x":29569.16794466943,"y":41771.85148066509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7ce28ab2-846f-44e3-8d42-66e702d7cf6f","savedPayload":{"position":{"x":29569.16794466943,"y":41771.85148066509},"targetPosition":{"x":29607.708310118538,"y":42131.16499748407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"17c82be6-9c06-467f-8e89-bc76d7f3b0d8","savedPayload":{"position":{"x":29607.708310118538,"y":42131.16499748407},"targetPosition":{"x":29646.209330251946,"y":42500.54025517216},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"acb7cd15-47a6-4b89-a991-02d53cbd5d88","savedPayload":{"position":{"x":30137.184058511866,"y":29691.732643730113},"targetPosition":{"x":30160.702962747087,"y":29915.500070187973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4f521b37-053e-45a1-9cc0-a2b54430a6f1","savedPayload":{"position":{"x":30160.702962747087,"y":29915.500070187973},"targetPosition":{"x":30184.22186698231,"y":30139.267496645833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"7bacad1e-a99b-4dee-ba33-4857babf5f60","savedPayload":{"position":{"x":30184.22186698231,"y":30139.267496645833},"targetPosition":{"x":30207.74077121753,"y":30363.034923103693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fb3a68a-bccc-4f15-a093-81d7230e3534","savedPayload":{"position":{"x":30207.74077121753,"y":30363.034923103693},"targetPosition":{"x":30231.25967545275,"y":30586.802349561553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"b0b4389a-74f6-4807-af15-1b8c43c247cb","savedPayload":{"position":{"x":30231.25967545275,"y":30586.802349561553},"targetPosition":{"x":30495.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c6dfb2a4-3e3d-4a44-a9da-00251dae88a7","savedPayload":{"position":{"x":30495.763038984365,"y":30950.85999703028},"targetPosition":{"x":30945.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"975c2fc3-a8f5-43e9-900f-4a4f2430d128","savedPayload":{"position":{"x":30945.763038984365,"y":30950.85999703028},"targetPosition":{"x":30945.763038984365,"y":30950.85999703028},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"w"}}} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Exchange-Keys-Tests.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Exchange-Keys-Tests.json deleted file mode 100644 index c25dbbf76..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Exchange-Keys-Tests.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Workspace","name":"Exchange Keys Tests","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataMining":{"type":"Data Mining","name":"New Data Mining","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2017-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"f17f9567-af83-4292-a0dc-7c1c9dbf53b8","savedPayload":{"position":{"x":23640.023749611923,"y":29498.94353234636},"targetPosition":{"x":23929.801497498644,"y":29576.589245877116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"9eaa4440-c8bc-4daa-b858-efa1845087de","savedPayload":{"position":{"x":23929.801497498644,"y":29576.589245877116},"targetPosition":{"x":24219.579245385365,"y":29654.234959407873},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"97e5a05e-9463-41a4-8255-a9487df56496","savedPayload":{"position":{"x":24219.579245385365,"y":29654.234959407873},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"1ef6762d-a20c-46e0-8183-6aac6dd9073a","savedPayload":{"position":{"x":23997.224958916122,"y":29000.133396312},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7b44275e-9446-4807-b9c2-4ba1107a5295","savedPayload":{"position":{"x":24131.71127974133,"y":28922.487682781244},"targetPosition":{"x":24209.356993272086,"y":29212.265430667965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"78c835ef-be5b-4e74-8b0c-610afbbef304","savedPayload":{"position":{"x":24209.356993272086,"y":29212.265430667965},"targetPosition":{"x":24359.356993272086,"y":29472.073051803298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4da2db7-fcae-4918-b38a-5e6966a9994b","savedPayload":{"position":{"x":24359.356993272086,"y":29472.073051803298},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"22a8694f-078e-4f1f-8470-7a7b25237397","savedPayload":{"position":{"x":24664.6484203336,"y":28852.32517716519},"targetPosition":{"x":24664.6484203336,"y":29152.32517716519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"941a0543-0cc0-4a5d-a782-728d2835c100"}}},{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"dfb4a701-b06a-493a-8337-cf3facede11f","savedPayload":{"position":{"x":24814.6484203336,"y":28892.517556029856},"targetPosition":{"x":24664.6484203336,"y":29152.32517716519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"e598ee86-1e18-4aa1-95c2-64aaf66776ca"}}}],"id":"a9bb9d25-f785-4780-b9fe-8b6aad0dad4c","savedPayload":{"position":{"x":24664.6484203336,"y":29152.32517716519},"targetPosition":{"x":24587.002706802843,"y":29442.10292505191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"14f0385a-7e6b-41c0-a03e-ea7ed2282cb6","savedPayload":{"position":{"x":24587.002706802843,"y":29442.10292505191},"targetPosition":{"x":24509.356993272086,"y":29731.88067293863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"500fff37-a745-4fd2-a45c-c37ac9f804d3","savedPayload":{"position":{"x":24509.356993272086,"y":29731.88067293863},"targetPosition":{"x":24659.356993272086,"y":29991.688294073963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae77e964-ee43-427c-bbbc-72adee67237e","savedPayload":{"position":{"x":24659.356993272086,"y":29991.688294073963},"targetPosition":{"x":24809.356993272086,"y":30251.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"43154f4c-af57-4d35-b2a6-410709586cb0","savedPayload":{"position":{"x":24809.356993272086,"y":30251.495915209296},"targetPosition":{"x":24959.356993272086,"y":30511.30353634463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"af949a76-a6f4-4ec6-869e-f240480eea81","savedPayload":{"position":{"x":24959.356993272086,"y":30511.30353634463},"targetPosition":{"x":25109.356993272086,"y":30771.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a","savedPayload":{"position":{"x":25109.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMining":{"type":"Learning Mining","name":"New Learning Mining","project":"Superalgos","exchangeLearningTasks":[],"id":"bc318947-2ea5-42cc-8764-9fdd2c617e35","savedPayload":{"position":{"x":25409.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingEnvironment":{"type":"Testing Environment","name":"New Testing Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Market Sell Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Market Sell Test","config":"{\"folderName\":\"Market-Sell-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"b4b634ba-655e-4c09-bce6-229dab13ba5b","savedPayload":{"position":{"x":25993.448493222026,"y":28873.30601574248},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"8071732c-f05c-4a2f-9d03-40cd60cc1b86","savedPayload":{"position":{"x":25964.443948299995,"y":28784.039205332687},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"71b37f72-a808-4d56-a7d3-31459769b2ec","savedPayload":{"position":{"x":25964.443948299995,"y":28690.178526308548},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"fda1d83a-6bec-41b3-84d9-8acfb647ab25","savedPayload":{"position":{"x":25993.448493222026,"y":28600.911715898754},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"21f6ee18-a77c-4a21-9edf-d2b2f0c5ebc9","savedPayload":{"position":{"x":26048.618416122572,"y":28524.976831464654},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"f3d64425-b250-4831-99a9-4970fe528707","savedPayload":{"position":{"x":26124.553300556672,"y":28469.806908564107},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"6c428de2-340a-46e9-a556-7788da9d9480","savedPayload":{"position":{"x":26213.820110966466,"y":28440.802363642077},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"eff6e000-a626-4b8f-a719-2c9c8f712341","savedPayload":{"position":{"x":26307.680789990605,"y":28440.802363642077},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"70e4660c-b3da-409f-b591-4c860b92f910","savedPayload":{"position":{"x":26396.9476004004,"y":28469.806908564107},"targetPosition":{"x":26260.750450478536,"y":28737.108865820617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e9a23a4-e22d-45c9-90f4-5277b2b515be","savedPayload":{"position":{"x":26260.750450478536,"y":28737.108865820617},"targetPosition":{"x":26472.8824848345,"y":28949.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Market Sell Test","project":"Superalgos","id":"4d34775e-f3ea-428b-9895-54d0c33b5951","savedPayload":{"position":{"x":26472.8824848345,"y":28649.24090017658},"targetPosition":{"x":26472.8824848345,"y":28949.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Market Sell Test","id":"55880a95-a2df-4d15-b333-226800bf97ca"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"7d716611-d46f-4d1f-957f-db2af1a8a79c","savedPayload":{"position":{"x":26685.014519190463,"y":28737.108865820617},"targetPosition":{"x":26472.8824848345,"y":28949.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"5e233824-4d50-47c2-a3e6-d15fd0efb0eb","savedPayload":{"position":{"x":26472.8824848345,"y":28949.24090017658},"targetPosition":{"x":26472.8824848345,"y":29249.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cad4c7f6-c78b-45f8-aa23-e7e0380fc566","savedPayload":{"position":{"x":26472.8824848345,"y":29249.24090017658},"targetPosition":{"x":26472.8824848345,"y":29549.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"b9128662-e2a6-4f44-8434-846218e75f99","savedPayload":{"position":{"x":26472.8824848345,"y":29549.24090017658},"targetPosition":{"x":26472.8824848345,"y":29849.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d475b2c9-de3a-40df-a86a-ac9d4e5813c2","savedPayload":{"position":{"x":26472.8824848345,"y":29849.24090017658},"targetPosition":{"x":26472.8824848345,"y":30149.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Market Buy Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Market Buy Test","config":"{\"folderName\":\"Market-Buy-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"779afde4-7847-4a6e-8c35-d352fd4cf4ae","savedPayload":{"position":{"x":26834.98794589486,"y":28835.18366523604},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"7b9dd4a3-55cb-4df0-895b-806cc2a6cb82","savedPayload":{"position":{"x":26863.99249081689,"y":28745.916854826246},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"d110e662-a9fc-4a0e-a238-de847acce74b","savedPayload":{"position":{"x":26919.162413717437,"y":28669.981970392146},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"876acd33-a58b-4fa1-9e0e-60182057dfc8","savedPayload":{"position":{"x":26995.097298151537,"y":28614.8120474916},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"974a6278-555b-4364-b019-0aedcac1c8e9","savedPayload":{"position":{"x":27084.36410856133,"y":28585.80750256957},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"b1aa8dbc-b6f0-4308-9a1a-d953dab6ba76","savedPayload":{"position":{"x":27178.22478758547,"y":28585.80750256957},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"b504a87e-4b07-45a7-8cd2-e54fd900570b","savedPayload":{"position":{"x":27267.491597995264,"y":28614.8120474916},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"ec21d126-9a2c-496b-b184-95592cb94865","savedPayload":{"position":{"x":27343.426482429364,"y":28669.981970392146},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"e63ce0d8-971e-49ea-959f-3fc7569a41e4","savedPayload":{"position":{"x":27398.59640532991,"y":28745.916854826246},"targetPosition":{"x":27131.2944480734,"y":28882.11400474811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"649b5195-210b-4155-b915-0736f81706c9","savedPayload":{"position":{"x":27131.2944480734,"y":28882.11400474811},"targetPosition":{"x":27178.22478758547,"y":29178.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Market Buy Test","project":"Superalgos","id":"2ca43e5a-2655-4e09-86d2-84f07fdc1d63","savedPayload":{"position":{"x":27354.560363273213,"y":28935.715408614167},"targetPosition":{"x":27178.22478758547,"y":29178.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Market Buy Test","id":"32c85522-fa62-44b6-8801-320a948bc994"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"89654d82-c563-49f2-9a13-d24925cef8ca","savedPayload":{"position":{"x":27474.53128976401,"y":29131.49016741458},"targetPosition":{"x":27178.22478758547,"y":29178.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"fdcc3c62-6baf-4a43-a917-242781890f7c","savedPayload":{"position":{"x":27178.22478758547,"y":29178.42050692665},"targetPosition":{"x":27001.889211897727,"y":29421.125605239133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2ce804bd-b47f-4a8b-ab7a-1009c5007278","savedPayload":{"position":{"x":27001.889211897727,"y":29421.125605239133},"targetPosition":{"x":26825.553636209985,"y":29663.830703551615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"3e051e88-bb3a-46f8-8e4d-8bf26cae8b29","savedPayload":{"position":{"x":26825.553636209985,"y":29663.830703551615},"targetPosition":{"x":26649.218060522242,"y":29906.535801864098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f08a67a3-4b57-4896-a791-56e2f52e7ab9","savedPayload":{"position":{"x":26649.218060522242,"y":29906.535801864098},"targetPosition":{"x":26472.8824848345,"y":30149.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Limit Sell Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Limit Sell Test","config":"{\"folderName\":\"Limit-Sell-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"8286e180-55f5-4f86-8031-15303b220316","savedPayload":{"position":{"x":27538.21541995458,"y":29298.986515314176},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"9f514e86-240e-4ecf-af36-67a85ed9053f","savedPayload":{"position":{"x":27614.15030438868,"y":29243.81659241363},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"a16a7823-2004-4ee0-b509-39fafc8c17c6","savedPayload":{"position":{"x":27703.417114798474,"y":29214.8120474916},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"1db92728-3311-4260-86bd-546b9807a76f","savedPayload":{"position":{"x":27797.277793822614,"y":29214.8120474916},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"3637f856-0c2b-4eb7-a952-0321479fca23","savedPayload":{"position":{"x":27886.544604232407,"y":29243.81659241363},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"4f5ff734-ee78-4db3-9a8e-011f89f9c591","savedPayload":{"position":{"x":27962.479488666508,"y":29298.986515314176},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"35058c87-bf32-4651-823b-ed9c2d9665d8","savedPayload":{"position":{"x":28017.649411567054,"y":29374.921399748277},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"41abca93-9289-481c-8b62-605cc96af5b5","savedPayload":{"position":{"x":28046.653956489085,"y":29464.18821015807},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"9fecaa30-acd0-4cee-9a3a-1cf94c17fa43","savedPayload":{"position":{"x":28046.653956489085,"y":29558.04888918221},"targetPosition":{"x":27750.347454310544,"y":29511.11854967014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"64c9849a-3c83-4ea1-84ca-d92c690b1981","savedPayload":{"position":{"x":27750.347454310544,"y":29511.11854967014},"targetPosition":{"x":27614.15030438868,"y":29778.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Limit Sell Test","project":"Superalgos","id":"99866c7d-f1a7-4a21-812e-ad1120eaa14d","savedPayload":{"position":{"x":27899.467259277226,"y":29685.715408614167},"targetPosition":{"x":27614.15030438868,"y":29778.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Limit Sell Test","id":"4477bbc6-8017-466a-b51b-6ab710538a08"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"8147c1c7-0690-4831-84e3-3fb1a3eabe35","savedPayload":{"position":{"x":27881.45226164519,"y":29914.617656848513},"targetPosition":{"x":27614.15030438868,"y":29778.42050692665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"d356594c-57e5-49ff-8a64-5ab3113d4440","savedPayload":{"position":{"x":27614.15030438868,"y":29778.42050692665},"targetPosition":{"x":27328.833349500135,"y":29871.125605239133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"50b43d76-ccf5-4e19-bd34-3b56d3249c35","savedPayload":{"position":{"x":27328.833349500135,"y":29871.125605239133},"targetPosition":{"x":27043.51639461159,"y":29963.830703551615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"014abe8d-b4c4-4e18-a16f-cabedb767b06","savedPayload":{"position":{"x":27043.51639461159,"y":29963.830703551615},"targetPosition":{"x":26758.199439723045,"y":30056.535801864098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"40c7b78d-8414-49a0-951e-2926194bc547","savedPayload":{"position":{"x":26758.199439723045,"y":30056.535801864098},"targetPosition":{"x":26472.8824848345,"y":30149.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Limit Buy Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Limit Buy Test","config":"{\"folderName\":\"Limit-Buy-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}","project":"Superalgos","id":"18be5255-19fa-4732-a12d-0e8a7f7330ab","savedPayload":{"position":{"x":27834.52192213312,"y":30087.557641326108},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"de43a4c8-fe6b-4124-b5ac-3d641a41bd8c","savedPayload":{"position":{"x":27928.38260115726,"y":30087.557641326108},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}","project":"Superalgos","id":"3ca2e890-fef9-4583-b70f-4e6801538042","savedPayload":{"position":{"x":28017.649411567054,"y":30116.56218624814},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"6d357af8-c2b8-4829-9d62-7945b8de89fc","savedPayload":{"position":{"x":28093.584296001154,"y":30171.732109148685},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"661806d8-0000-409a-b704-006b768e278e","savedPayload":{"position":{"x":28148.7542189017,"y":30247.666993582785},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"f3f032d4-45be-4aa5-b995-3a6d42134c9d","savedPayload":{"position":{"x":28177.75876382373,"y":30336.93380399258},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"f7a4a05a-e653-4eb3-8e66-d64ef14f5157","savedPayload":{"position":{"x":28177.75876382373,"y":30430.794483016718},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"ba9eea7d-31fe-43f0-8623-d08eddb4ba85","savedPayload":{"position":{"x":28148.7542189017,"y":30520.061293426512},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"d1ee2efd-eb34-4e68-b302-ba79d35644ca","savedPayload":{"position":{"x":28093.584296001154,"y":30595.996177860612},"targetPosition":{"x":27881.45226164519,"y":30383.86414350465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"025dc7c1-865b-4af4-920f-4ada3aeed64a","savedPayload":{"position":{"x":27881.45226164519,"y":30383.86414350465},"targetPosition":{"x":27614.15030438868,"y":30520.061293426512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Limit Buy Test","project":"Superalgos","id":"de23608b-2682-452a-870e-ccb909929227","savedPayload":{"position":{"x":27899.467259277226,"y":30612.766391738995},"targetPosition":{"x":27614.15030438868,"y":30520.061293426512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Limit Buy Test","id":"e545e68f-dc9d-4583-88dc-c5ff6678dec5"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"d677265f-54c1-4cbd-be5c-18155afb39fd","savedPayload":{"position":{"x":27750.347454310544,"y":30787.36325068302},"targetPosition":{"x":27614.15030438868,"y":30520.061293426512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"10626ddb-3bb2-4bb6-9b1f-5adf83d9da1b","savedPayload":{"position":{"x":27614.15030438868,"y":30520.061293426512},"targetPosition":{"x":27328.833349500135,"y":30427.35619511403},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f179c58a-19b2-419f-8060-88c06c2ef1f8","savedPayload":{"position":{"x":27328.833349500135,"y":30427.35619511403},"targetPosition":{"x":27043.51639461159,"y":30334.651096801546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"7b75e00c-21cf-47ab-a473-55d78b3eaa2b","savedPayload":{"position":{"x":27043.51639461159,"y":30334.651096801546},"targetPosition":{"x":26758.199439723045,"y":30241.945998489064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"01a1206d-326e-446e-84af-744c43029abf","savedPayload":{"position":{"x":26758.199439723045,"y":30241.945998489064},"targetPosition":{"x":26472.8824848345,"y":30149.24090017658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ba98f759-f014-4f76-aebc-78b48e2f95e5","savedPayload":{"position":{"x":26472.8824848345,"y":30149.24090017658},"targetPosition":{"x":26230.177386522017,"y":30325.576475864324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"92a0085c-457b-4e47-a9fe-29047e996d9f","savedPayload":{"position":{"x":26230.177386522017,"y":30325.576475864324},"targetPosition":{"x":25987.472288209534,"y":30501.912051552066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"185d6891-611e-4b33-9d98-8fee0a568b70","savedPayload":{"position":{"x":25987.472288209534,"y":30501.912051552066},"targetPosition":{"x":25744.76718989705,"y":30678.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"ba36975c-08d6-458d-b7c0-eb4684a85b5d","savedPayload":{"position":{"x":25744.76718989705,"y":30678.24762723981},"targetPosition":{"x":25502.06209158457,"y":30854.58320292755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"5882d8a8-345b-4188-b1c1-797e9ff805d9","savedPayload":{"position":{"x":25559.356993272086,"y":31030.918778615294},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"productionEnvironment":{"type":"Production Environment","name":"New Production Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Market Sell Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Market Sell Test","config":"{\"folderName\":\"Market-Sell-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"a1604a40-69da-49be-8cbe-ff99fcf86e70","savedPayload":{"position":{"x":27057.824771784224,"y":30763.760843968677},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 5000\n}","project":"Superalgos","id":"3cefe4eb-1779-43f6-8919-136e7d945d3d","savedPayload":{"position":{"x":27105.12554555895,"y":30670.927848439886},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"c85a8e7b-887f-4483-a832-def727994b4d","savedPayload":{"position":{"x":27181.32448806863,"y":30599.871185001874},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"1ac8db07-37ef-456c-803e-c70f1e59c636","savedPayload":{"position":{"x":27277.230882269978,"y":30559.161335949928},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"c60d132a-6a68-491d-9f97-f380c6508225","savedPayload":{"position":{"x":27381.27700159468,"y":30553.708509893102},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"e4ad50eb-c378-4b8c-99a2-c3e69649b878","savedPayload":{"position":{"x":27480.913348495,"y":30584.17039812899},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"82198562-2473-4105-845e-42de1baff33d","savedPayload":{"position":{"x":27564.122309058886,"y":30646.87284736675},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"edf40df0-11e8-4450-aa5e-7fdee99dc85e","savedPayload":{"position":{"x":27620.867654608868,"y":30734.253016838717},"targetPosition":{"x":27344.716198573136,"y":30851.4723553855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9fbc397a-ccd0-456f-bda3-c28ee8783408","savedPayload":{"position":{"x":27344.716198573136,"y":30851.4723553855},"targetPosition":{"x":27360.41698544602,"y":31151.06121581187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Market Sell Test","project":"Superalgos","id":"e7b8de5b-1fe5-44b9-9110-73eaad6d41c6","savedPayload":{"position":{"x":27561.156167353678,"y":30928.117768168653},"targetPosition":{"x":27360.41698544602,"y":31151.06121581187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Market Sell Test","id":"55880a95-a2df-4d15-b333-226800bf97ca"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"ea07fa9e-ca1d-485c-aa89-41366c6a6bdf","savedPayload":{"position":{"x":27660.00584587239,"y":31135.360428938988},"targetPosition":{"x":27360.41698544602,"y":31151.06121581187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"8c585048-f305-4692-af06-0d9a072765de","savedPayload":{"position":{"x":27360.41698544602,"y":31151.06121581187},"targetPosition":{"x":27159.67780353836,"y":31374.00466345509},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8c0a6bb1-3737-4a75-a87a-8f700bb590b1","savedPayload":{"position":{"x":27159.67780353836,"y":31374.00466345509},"targetPosition":{"x":26958.938621630703,"y":31596.948111098307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"da567485-d05d-4ad3-8279-4817ba3d47fa","savedPayload":{"position":{"x":26958.938621630703,"y":31596.948111098307},"targetPosition":{"x":26758.199439723045,"y":31819.891558741525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"keyReference":{"type":"Key Reference","name":"Key for Live Test","project":"Superalgos","id":"149d8105-2e5e-4290-9ab7-17c98cc7eff8","savedPayload":{"position":{"x":27051.643719943186,"y":31882.265065986852},"targetPosition":{"x":26758.199439723045,"y":31819.891558741525},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Exchange Account Key","name":"Key for Live Test","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},"id":"d798bd71-de71-4306-b591-af59a32c4bb9","savedPayload":{"position":{"x":26758.199439723045,"y":31819.891558741525},"targetPosition":{"x":26472.8824848345,"y":31912.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Market Buy Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Market Buy Test","config":"{\"folderName\":\"Market-Buy-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"aee558a9-1377-4ce0-8910-f1eca3547299","savedPayload":{"position":{"x":27621.37948394236,"y":31326.989410232694},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 5000\n}","project":"Superalgos","id":"1526157b-f89e-48ee-951e-e1f4ae800005","savedPayload":{"position":{"x":27714.212479471153,"y":31279.68863645797},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"6fa42f68-9de8-487e-aa62-9901d9b49723","savedPayload":{"position":{"x":27817.62477776086,"y":31266.99120282051},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"a5c99862-8022-4b0f-9641-828fec537a47","savedPayload":{"position":{"x":27919.14332943476,"y":31290.42860721115},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"1b3ffaec-074b-493c-83f0-c2bbae61f55b","savedPayload":{"position":{"x":28006.523498906725,"y":31347.17395276113},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"2b5c5054-b26a-458a-b1f4-5ab88f8ce233","savedPayload":{"position":{"x":28069.225948144485,"y":31430.38291332502},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"85322466-349a-49f0-b5ae-d19ebc9df89d","savedPayload":{"position":{"x":28099.687836380373,"y":31530.019260225337},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"d60800b6-9530-4804-9184-4cf0093cac73","savedPayload":{"position":{"x":28094.235010323548,"y":31634.06537955004},"targetPosition":{"x":27801.923990887975,"y":31566.58006324688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"788e1cd0-b82f-4d91-8807-6747597df249","savedPayload":{"position":{"x":27801.923990887975,"y":31566.58006324688},"targetPosition":{"x":27638.532280383468,"y":31818.18123363051},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Market Buy Test","project":"Superalgos","id":"19808c93-9714-4575-ab04-9f0281c28609","savedPayload":{"position":{"x":27931.97656060361,"y":31755.80772638518},"targetPosition":{"x":27638.532280383468,"y":31818.18123363051},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Market Buy Test","id":"32c85522-fa62-44b6-8801-320a948bc994"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"5a4ca616-5dc4-410a-84ae-466d83a3261e","savedPayload":{"position":{"x":27890.133450767094,"y":31981.572944135016},"targetPosition":{"x":27638.532280383468,"y":31818.18123363051},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"3f545550-752e-4653-8265-3bbf1fb481ef","savedPayload":{"position":{"x":27638.532280383468,"y":31818.18123363051},"targetPosition":{"x":27345.088000163327,"y":31880.554740875836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0d2594df-1033-4342-822b-d176d3a5f7e0","savedPayload":{"position":{"x":27345.088000163327,"y":31880.554740875836},"targetPosition":{"x":27051.643719943186,"y":31942.928248121163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"584287b3-c655-496f-985e-835a89e48575","savedPayload":{"position":{"x":27051.643719943186,"y":31942.928248121163},"targetPosition":{"x":26758.199439723045,"y":32005.30175536649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"keyReference":{"type":"Key Reference","name":"Key for Live Test","project":"Superalgos","id":"07436fed-771c-4314-a421-845687628752","savedPayload":{"position":{"x":26958.938621630703,"y":32228.24520300971},"targetPosition":{"x":26758.199439723045,"y":32005.30175536649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Exchange Account Key","name":"Key for Live Test","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},"id":"e6f722f5-8256-41fc-8c31-ba1f601c75dc","savedPayload":{"position":{"x":26758.199439723045,"y":32005.30175536649},"targetPosition":{"x":26472.8824848345,"y":31912.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Limit Sell Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Limit Sell Test","config":"{\"folderName\":\"Limit-Sell-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"7c9cca26-3183-44e1-a262-bf190a987630","savedPayload":{"position":{"x":27746.247378418557,"y":32113.9000407242},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 5000\n}","project":"Superalgos","id":"e4184741-01e5-4ffa-a879-f2d5a67ee58f","savedPayload":{"position":{"x":27849.153546686888,"y":32130.198776591318},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"b2e44eb9-fa50-4223-9bdd-6218eb66556f","savedPayload":{"position":{"x":27940.279217664694,"y":32180.710560834024},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"d06f37f5-169d-4f40-90b2-9746abfd5a03","savedPayload":{"position":{"x":28008.633290560374,"y":32259.342926798097},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"1d0e8444-3347-49f6-8160-db51bdf014fa","savedPayload":{"position":{"x":28045.97125538404,"y":32356.61165065815},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"6cde8a52-3e3e-4786-982c-ade243736061","savedPayload":{"position":{"x":28047.789602528283,"y":32460.784688783184},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"5c609712-03f2-4f82-827e-0800c7cbc14f","savedPayload":{"position":{"x":28013.86901249156,"y":32559.297235345017},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"f5505843-83fa-4b6e-83b7-e642c1a6a108","savedPayload":{"position":{"x":27948.300809046894,"y":32640.267223337945},"targetPosition":{"x":27751.483100349742,"y":32413.854349271114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6f4afc12-5c28-4981-9a4b-a53c7bb82703","savedPayload":{"position":{"x":27751.483100349742,"y":32413.854349271114},"targetPosition":{"x":27471.408972400583,"y":32521.364734134706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Limit Sell Test","project":"Superalgos","id":"7a6d1dc3-cd48-4b59-8a89-5baf12daaf2d","savedPayload":{"position":{"x":27745.472609693363,"y":32643.385727057444},"targetPosition":{"x":27471.408972400583,"y":32521.364734134706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Limit Sell Test","id":"4477bbc6-8017-466a-b51b-6ab710538a08"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"c14fd982-6a13-455b-99a5-e8f5e1e60e3f","savedPayload":{"position":{"x":27578.919357264174,"y":32801.438862083865},"targetPosition":{"x":27471.408972400583,"y":32521.364734134706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"5774ae7f-f8ac-487a-b8f8-8d75b50b598c","savedPayload":{"position":{"x":27471.408972400583,"y":32521.364734134706},"targetPosition":{"x":27197.345335107802,"y":32399.343741211967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e60c7f58-72db-48ff-8c58-0e1095f6361b","savedPayload":{"position":{"x":27197.345335107802,"y":32399.343741211967},"targetPosition":{"x":26923.281697815022,"y":32277.32274828923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"614f1ca9-ceb6-4b74-87b7-b8f3ba261bd2","savedPayload":{"position":{"x":26923.281697815022,"y":32277.32274828923},"targetPosition":{"x":26649.218060522242,"y":32155.30175536649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"keyReference":{"type":"Key Reference","name":"Key for Live Test","project":"Superalgos","id":"d912d703-8ea7-4dea-b8c2-1da67b2ba1bb","savedPayload":{"position":{"x":26680.57659950254,"y":32453.65832397697},"targetPosition":{"x":26649.218060522242,"y":32155.30175536649},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Exchange Account Key","name":"Key for Live Test","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},"id":"41311868-ac39-4550-820e-f98403b6e946","savedPayload":{"position":{"x":26649.218060522242,"y":32155.30175536649},"targetPosition":{"x":26472.8824848345,"y":31912.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Limit Buy Test","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Limit Buy Test","config":"{\"folderName\":\"Limit-Buy-Test\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"0c9c6a84-d160-472b-895f-135d0d438756","savedPayload":{"position":{"x":27384.733163626533,"y":32823.91962070406},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 5000\n}","project":"Superalgos","id":"175962cc-ebcf-4a97-abb9-33be1fe95a91","savedPayload":{"position":{"x":27458.405846007918,"y":32897.59230308545},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"e445982a-8112-428f-930b-1005c13414d0","savedPayload":{"position":{"x":27502.43798060794,"y":32992.01952046},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"afc112c7-8f65-49e4-8e4e-6dd1d2c44487","savedPayload":{"position":{"x":27511.518642148745,"y":33095.81195681506},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"3fa047d3-f924-4f0f-885f-4661d4f557ff","savedPayload":{"position":{"x":27484.552568832216,"y":33196.45071251297},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"4e00590c-6f8b-4f54-b743-dec129dcf708","savedPayload":{"position":{"x":27424.792267077184,"y":33281.79726834672},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"190277a6-fc30-43a4-bec0-9c7e691b67c8","savedPayload":{"position":{"x":27339.445711243432,"y":33341.55757010175},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"06f68556-7c20-44b2-9325-fb5b8810e931","savedPayload":{"position":{"x":27238.80695554552,"y":33368.52364341828},"targetPosition":{"x":27212.66023272122,"y":33069.66523399076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f776f7f2-3c06-4173-be88-3a709d3522af","savedPayload":{"position":{"x":27212.66023272122,"y":33069.66523399076},"targetPosition":{"x":26922.8824848345,"y":32992.01952046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Limit Buy Test","project":"Superalgos","id":"45849a0c-2e13-4369-9b7c-6eca203184a4","savedPayload":{"position":{"x":27072.8824848345,"y":33251.827141595335},"targetPosition":{"x":26922.8824848345,"y":32992.01952046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Limit Buy Test","id":"e545e68f-dc9d-4583-88dc-c5ff6678dec5"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"48214443-a3f0-47b2-97df-38f71db82f5a","savedPayload":{"position":{"x":26845.236771303742,"y":33281.79726834672},"targetPosition":{"x":26922.8824848345,"y":32992.01952046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"eb7cdff6-22b7-4e31-9983-4fdcdfb55d3c","savedPayload":{"position":{"x":26922.8824848345,"y":32992.01952046},"targetPosition":{"x":26772.8824848345,"y":32732.211899324673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2a680499-1a72-45ff-a288-fa64e3731054","savedPayload":{"position":{"x":26772.8824848345,"y":32732.211899324673},"targetPosition":{"x":26622.8824848345,"y":32472.40427818934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"13315406-1535-418e-9f84-48b97c358e7c","savedPayload":{"position":{"x":26622.8824848345,"y":32472.40427818934},"targetPosition":{"x":26472.8824848345,"y":32212.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"keyReference":{"type":"Key Reference","name":"Key for Live Test","project":"Superalgos","id":"f657b5e6-4254-4226-98c8-e3b0ae9d3665","savedPayload":{"position":{"x":26322.8824848345,"y":32472.40427818934},"targetPosition":{"x":26472.8824848345,"y":32212.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Exchange Account Key","name":"Key for Live Test","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},"id":"2967ef6c-99c8-4bdb-982d-7c877fc4b89a","savedPayload":{"position":{"x":26472.8824848345,"y":32212.596657054008},"targetPosition":{"x":26472.8824848345,"y":31912.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"07b45fcd-e0c9-441a-bd16-215f3af0d13b","savedPayload":{"position":{"x":26472.8824848345,"y":31912.596657054008},"targetPosition":{"x":26230.177386522017,"y":31736.261081366265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"27c0d69c-6cf3-4c8f-bbae-57d94a0b3a3f","savedPayload":{"position":{"x":26230.177386522017,"y":31736.261081366265},"targetPosition":{"x":25987.472288209534,"y":31559.925505678522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"880f7081-7a17-453a-bf6d-c9b90e43c099","savedPayload":{"position":{"x":25987.472288209534,"y":31559.925505678522},"targetPosition":{"x":25744.76718989705,"y":31383.58992999078},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"d539c0ac-aaeb-4c44-9dba-ac26df819a8d","savedPayload":{"position":{"x":25744.76718989705,"y":31383.58992999078},"targetPosition":{"x":25502.06209158457,"y":31207.254354303037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"65a40d20-837c-4652-8356-f8054b4e1346","savedPayload":{"position":{"x":25409.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"u"}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","project":"Superalgos","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","project":"Superalgos","dataProducts":[],"dataMineProducts":[{"type":"Data Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Exchange Raw Data","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trades","project":"Superalgos","id":"4a24d1ef-02b3-48dd-93d9-dd5c4e03635f","savedPayload":{"position":{"x":25306.398909450258,"y":32081.12429394412},"targetPosition":{"x":25397.398909450258,"y":31992.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trades","id":"38dbb942-a15b-450b-a867-02a94030965f"}}},{"type":"Data Product","name":"Candles","project":"Superalgos","id":"7f02a266-6915-44ec-a367-e91669324581","savedPayload":{"position":{"x":25450.398909450258,"y":31960.12429394412},"targetPosition":{"x":25397.398909450258,"y":31992.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"d5aeb981-9621-4c71-a6d2-c1217a3696d6","savedPayload":{"position":{"x":25399.398909450258,"y":31973.12429394412},"targetPosition":{"x":25397.398909450258,"y":31992.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"3a43c6f3-bac0-404e-865f-822eb48c8660"}}}],"dataProductFolders":[],"id":"d5bc75ff-3cc6-4745-87dd-1ea8540825ba","savedPayload":{"position":{"x":25397.398909450258,"y":31992.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Webhooks","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"External Signals","project":"Superalgos","id":"d083884d-f7f1-42c9-871f-1040adb460ce","savedPayload":{"position":{"x":25505.398909450258,"y":32018.12429394412},"targetPosition":{"x":25484.398909450258,"y":31974.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"External Signals","id":"29196db8-4c41-47ea-be7e-952cd9be9a0b"}}}],"dataProductFolders":[],"id":"1e4cd0ff-6a2c-41e3-97e7-ed044f67e66f","savedPayload":{"position":{"x":25484.398909450258,"y":31974.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candles Volumes","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles","project":"Superalgos","id":"702e4a18-9549-4a2b-a427-626549ebba6a","savedPayload":{"position":{"x":25507.398909450258,"y":32057.12429394412},"targetPosition":{"x":25534.398909450258,"y":31989.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39","savedPayload":{"position":{"x":25500.398909450258,"y":31986.12429394412},"targetPosition":{"x":25534.398909450258,"y":31989.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}}],"dataProductFolders":[],"id":"456be755-6277-4ac3-9819-8c093557badd","savedPayload":{"position":{"x":25534.398909450258,"y":31989.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Bands","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Bands","project":"Superalgos","id":"07b29cab-5801-462d-b3b4-9b24ea301f32","savedPayload":{"position":{"x":25407.398909450258,"y":31888.12429394412},"targetPosition":{"x":25483.398909450258,"y":31973.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","project":"Superalgos","id":"33729649-7b5f-4fe3-938f-63ef34c2620a","savedPayload":{"position":{"x":25403.398909450258,"y":31948.12429394412},"targetPosition":{"x":25483.398909450258,"y":31973.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}}],"dataProductFolders":[],"id":"65e27653-bad4-4e5b-8072-dc43b72c1b81","savedPayload":{"position":{"x":25483.398909450258,"y":31973.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Channels","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Channels Objects","project":"Superalgos","id":"192ea9c9-f070-4c4e-a25b-27c9c9fb4784","savedPayload":{"position":{"x":25400.398909450258,"y":31913.12429394412},"targetPosition":{"x":25432.398909450258,"y":31934.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Channels","project":"Superalgos","id":"c43c8e35-4d83-4a3f-bc00-f3cfbba731eb","savedPayload":{"position":{"x":25464.398909450258,"y":31944.12429394412},"targetPosition":{"x":25432.398909450258,"y":31934.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels","id":"94bc3958-cc85-43a1-a178-103e84f42910"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","project":"Superalgos","id":"f2dd6c85-7484-47f1-b430-92db83c48f63","savedPayload":{"position":{"x":25444.398909450258,"y":31923.12429394412},"targetPosition":{"x":25432.398909450258,"y":31934.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Bollinger Sub-Channels","project":"Superalgos","id":"edd4b97f-bb3b-43e6-8ed9-3b4b2b1db506","savedPayload":{"position":{"x":25510.398909450258,"y":31913.12429394412},"targetPosition":{"x":25432.398909450258,"y":31934.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels","id":"79ce9c05-8a4c-4b58-850f-288037acc702"}}}],"dataProductFolders":[],"id":"1d943a6c-cb31-420c-bc7e-4b58c58cd49a","savedPayload":{"position":{"x":25432.398909450258,"y":31934.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candle Channels","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles Channels","project":"Superalgos","id":"bf3fef35-b83c-4288-b118-99154f16c61e","savedPayload":{"position":{"x":25551.398909450258,"y":31899.12429394412},"targetPosition":{"x":25562.398909450258,"y":31863.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels","id":"8c81d378-0947-4e9d-be25-58e69120152e"}}},{"type":"Data Product","name":"Candles Channels Objects","project":"Superalgos","id":"3984ddfe-e644-4558-8020-2118e05ad641","savedPayload":{"position":{"x":25549.398909450258,"y":31867.12429394412},"targetPosition":{"x":25562.398909450258,"y":31863.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles Channels Objects","id":"ba5dbb67-2030-42a0-9ff8-1ee80874f047"}}}],"dataProductFolders":[],"id":"d27fce8d-1259-4b1d-80fe-22b1aeb49b27","savedPayload":{"position":{"x":25562.398909450258,"y":31863.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Resistances and Supports","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Resistances","project":"Superalgos","id":"e15fdca5-73ef-45f3-97c1-b616abbe874c","savedPayload":{"position":{"x":25492.398909450258,"y":31882.12429394412},"targetPosition":{"x":25414.398909450258,"y":31821.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Resistances","id":"7a734501-a0fb-4305-803e-7e95d477c513"}}},{"type":"Data Product","name":"Supports","project":"Superalgos","id":"5ff61429-18da-487d-a20f-5134263b9203","savedPayload":{"position":{"x":25481.398909450258,"y":31786.12429394412},"targetPosition":{"x":25414.398909450258,"y":31821.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Supports","id":"bc3c43de-6312-47d4-ae3d-0c95c1b039e0"}}}],"dataProductFolders":[],"id":"d62bf947-bb66-4544-8385-e2894add4d84","savedPayload":{"position":{"x":25414.398909450258,"y":31821.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Fees Band","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Fees Band 0.2","project":"Superalgos","id":"01c32ddf-4742-4ad4-b25e-92572bf43a33","savedPayload":{"position":{"x":25402.398909450258,"y":31815.12429394412},"targetPosition":{"x":25459.398909450258,"y":31812.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Fees Band 0.2","id":"d6a14ed7-606d-40b9-b663-07ee04927460"}}}],"dataProductFolders":[],"id":"9a14e9cd-1a4a-4b19-b22d-06af75be388d","savedPayload":{"position":{"x":25459.398909450258,"y":31812.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Volume Analysis","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Volume Analysis","project":"Superalgos","id":"3eb282d5-d6de-4822-bf23-59b1f087b064","savedPayload":{"position":{"x":25473.398909450258,"y":31923.12429394412},"targetPosition":{"x":25446.398909450258,"y":31899.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volume Analysis","id":"c10f698e-1ed4-48a6-9c2d-344bcba5ca35"}}}],"dataProductFolders":[],"id":"bb22cc3e-075e-4e07-9b28-8d89cce0c94a","savedPayload":{"position":{"x":25446.398909450258,"y":31899.12429394412},"targetPosition":{"x":25479.398909450258,"y":31911.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5","savedPayload":{"position":{"x":25479.398909450258,"y":31911.12429394412},"targetPosition":{"x":25382.398909450258,"y":31948.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"4f64120e-f76d-44c1-ba08-c92955ebcfda","savedPayload":{"position":{"x":25342.294133864358,"y":32160.05964341079},"targetPosition":{"x":25264.6484203336,"y":31870.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"9bc0aea4-0596-449c-91bd-4fb4cb672aa8","savedPayload":{"position":{"x":25264.6484203336,"y":31870.28189552407},"targetPosition":{"x":25187.002706802843,"y":31580.504147637348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25187.002706802843,"y":31580.504147637348},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","exchangeTradingProducts":[{"type":"Exchange Trading Products","name":"Binance","project":"Superalgos","marketTradingProducts":[{"type":"Market Trading Products","name":"Binance BTC/USDT","project":"Superalgos","tradingSessionReferences":[{"type":"Trading Session Reference","name":"Market Sell Test Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"af6b126a-b204-47a9-8e9c-e5ba704d4520","savedPayload":{"position":{"x":24927.764999673167,"y":31942.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"ef99feae-f842-4988-923a-306d872f2510","savedPayload":{"position":{"x":25027.764999673167,"y":31878.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"74a66c9f-4b77-4c05-81d8-4c57419acab4","savedPayload":{"position":{"x":25054.764999673167,"y":31935.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"49bc94b6-ec53-4c14-afb7-035ccdc929f1","savedPayload":{"position":{"x":24924.764999673167,"y":31965.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"0030ba51-dde0-498b-83f0-24755fd86613","savedPayload":{"position":{"x":24997.764999673167,"y":31902.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"f72f995f-8b0b-4014-bd58-8a4924a33aa1","savedPayload":{"position":{"x":25053.764999673167,"y":31854.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"e7d0d5ad-b6cf-44e6-a1b6-6c59e2d41a81","savedPayload":{"position":{"x":24980.764999673167,"y":31825.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"ee7b0d7c-696b-4c71-a9c5-7220db1cb298","savedPayload":{"position":{"x":25012.764999673167,"y":31886.714097319156},"targetPosition":{"x":24998.764999673167,"y":31867.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"0d6231b1-ff88-48c9-9b31-5c4565389377","savedPayload":{"position":{"x":24998.764999673167,"y":31867.714097319156},"targetPosition":{"x":25042.764999673167,"y":31837.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"965386e7-d5ef-4680-adf9-7d5ca73777ae","savedPayload":{"position":{"x":25146.764999673167,"y":31955.714097319156},"targetPosition":{"x":25118.764999673167,"y":31856.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"323c9149-1d5f-4954-9a81-8a9cd7ce212b","savedPayload":{"position":{"x":25080.764999673167,"y":31936.714097319156},"targetPosition":{"x":25118.764999673167,"y":31856.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"d6ebd064-390d-40a2-8613-6331f66e1f0f","savedPayload":{"position":{"x":25118.764999673167,"y":31856.714097319156},"targetPosition":{"x":25042.764999673167,"y":31837.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"688ae681-811a-49c6-a342-56930881155a","savedPayload":{"position":{"x":24980.764999673167,"y":31794.714097319156},"targetPosition":{"x":24963.764999673167,"y":31836.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"d034781e-cd52-4cf2-acda-e9536e24197f","savedPayload":{"position":{"x":24864.764999673167,"y":31789.714097319156},"targetPosition":{"x":24963.764999673167,"y":31836.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"05ee0ea9-d591-4e91-8f2a-197696d6f6dd","savedPayload":{"position":{"x":25010.764999673167,"y":31807.714097319156},"targetPosition":{"x":24963.764999673167,"y":31836.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"eca872d6-69ae-4fb8-8389-047a8335fd76","savedPayload":{"position":{"x":24894.764999673167,"y":31917.714097319156},"targetPosition":{"x":24963.764999673167,"y":31836.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"de2afcac-3cbd-4fc3-9227-2ec2242fe6f5","savedPayload":{"position":{"x":24963.764999673167,"y":31836.714097319156},"targetPosition":{"x":25042.764999673167,"y":31837.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"5983e0eb-2454-4a58-83cd-a1befe9176f1","savedPayload":{"position":{"x":25047.764999673167,"y":31905.714097319156},"targetPosition":{"x":25068.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"71b749aa-656f-48cb-9299-bfa6da99f567","savedPayload":{"position":{"x":25047.764999673167,"y":31941.714097319156},"targetPosition":{"x":25068.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"9750a7c2-6554-4c36-86af-bbb1d56c6b22","savedPayload":{"position":{"x":25043.764999673167,"y":31949.714097319156},"targetPosition":{"x":25068.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"77424f95-b4ff-4a07-b8a1-14bcd61de5fe","savedPayload":{"position":{"x":25025.764999673167,"y":31957.714097319156},"targetPosition":{"x":25068.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"70a2f20d-ed85-44e4-81e7-3be08b62e4cb","savedPayload":{"position":{"x":25068.764999673167,"y":31860.714097319156},"targetPosition":{"x":25042.764999673167,"y":31837.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"c00a29e2-b28e-4649-86d6-ad47986d9ddd","savedPayload":{"position":{"x":24919.764999673167,"y":32001.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"3a696472-c9ac-4650-bdac-9d77ce332beb","savedPayload":{"position":{"x":24997.764999673167,"y":31845.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"3c10befe-7aa3-4871-8a62-dfabdc9402a6","savedPayload":{"position":{"x":25029.764999673167,"y":31954.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"1ccf48e3-92a3-47a0-82bd-8125c4c90c74","savedPayload":{"position":{"x":25059.764999673167,"y":31890.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"a8dea260-4f18-4722-876b-2f457622b395","savedPayload":{"position":{"x":24978.764999673167,"y":31992.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"ce63db98-98f3-48f1-ac70-419e7a4f5bfa","savedPayload":{"position":{"x":25042.764999673167,"y":31884.714097319156},"targetPosition":{"x":24987.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"ba69b442-179d-4cd9-952f-980fd18fbd27","savedPayload":{"position":{"x":24987.764999673167,"y":31931.714097319156},"targetPosition":{"x":25042.764999673167,"y":31837.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae58ab03-f437-41a4-b9b2-60df190241d2","savedPayload":{"position":{"x":25042.764999673167,"y":31837.714097319156},"targetPosition":{"x":24953.764999673167,"y":31926.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"eefe8b78-10db-46ba-9863-895706328ee7","savedPayload":{"position":{"x":25013.764999673167,"y":31865.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"980e5d66-63db-4e63-b2c0-ee4551b5344e","savedPayload":{"position":{"x":24951.764999673167,"y":31933.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"e17b0598-6ff5-4716-8522-6cb67a786865","savedPayload":{"position":{"x":24919.764999673167,"y":31874.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"95a42e51-55d0-4e78-bb63-b11de81f5cc1","savedPayload":{"position":{"x":24918.764999673167,"y":31886.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"27f0cc56-9a90-4644-9cd1-eef62cbba87f","savedPayload":{"position":{"x":24892.764999673167,"y":31771.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"1886e205-549d-495d-84ef-c87b624727af","savedPayload":{"position":{"x":25009.764999673167,"y":31888.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"30f1b15b-a576-42b7-9a1a-46f2f7d43f31","savedPayload":{"position":{"x":24989.764999673167,"y":31927.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"8f8b3b04-bdde-4f94-bccd-ad8a621373d3","savedPayload":{"position":{"x":24977.764999673167,"y":31800.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"94dadfff-8842-45f2-9f08-c05b174470d6","savedPayload":{"position":{"x":24939.764999673167,"y":31749.714097319156},"targetPosition":{"x":24973.764999673167,"y":31848.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"ee813847-bcea-49e4-9ba9-f062e06289cf","savedPayload":{"position":{"x":24973.764999673167,"y":31848.714097319156},"targetPosition":{"x":24953.764999673167,"y":31926.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"933c72cd-e04a-4170-950f-5148bd94e226","savedPayload":{"position":{"x":25022.764999673167,"y":31896.714097319156},"targetPosition":{"x":24998.764999673167,"y":31973.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"dbea46ed-0328-4163-8569-3cf74b7d4f46","savedPayload":{"position":{"x":24982.764999673167,"y":31887.714097319156},"targetPosition":{"x":24998.764999673167,"y":31973.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"2f1e63d1-a8f1-4648-a575-2a9980cf84ec","savedPayload":{"position":{"x":24959.764999673167,"y":31957.714097319156},"targetPosition":{"x":25001.764999673167,"y":31936.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"5cd4661f-9a23-4f17-ad87-1379b927f84a","savedPayload":{"position":{"x":24905.764999673167,"y":31921.714097319156},"targetPosition":{"x":25001.764999673167,"y":31936.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"5c29fbdc-068f-461c-8c04-cc79673eaaa1","savedPayload":{"position":{"x":24939.764999673167,"y":32018.714097319156},"targetPosition":{"x":25001.764999673167,"y":31936.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"866deeb2-93c8-4d20-abd0-1c99dcca6a86","savedPayload":{"position":{"x":24917.764999673167,"y":31976.714097319156},"targetPosition":{"x":25001.764999673167,"y":31936.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"fabf8a0b-1486-487d-b23a-825859041e29","savedPayload":{"position":{"x":25001.764999673167,"y":31936.714097319156},"targetPosition":{"x":24998.764999673167,"y":31973.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"eb7cfbfb-9cb8-4664-afd1-b24194e8b54f","savedPayload":{"position":{"x":25039.764999673167,"y":31860.714097319156},"targetPosition":{"x":25081.764999673167,"y":31951.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"7429411a-9974-4771-92b4-8bfb6c63689b","savedPayload":{"position":{"x":25016.764999673167,"y":31940.714097319156},"targetPosition":{"x":25081.764999673167,"y":31951.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"17d5ede0-5c0a-4c42-a1cc-c986499cc283","savedPayload":{"position":{"x":25156.764999673167,"y":31890.714097319156},"targetPosition":{"x":25081.764999673167,"y":31951.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"58734733-132e-469e-9e46-1c82d1ad1882","savedPayload":{"position":{"x":25040.764999673167,"y":31964.714097319156},"targetPosition":{"x":25081.764999673167,"y":31951.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"01fecbc3-1494-4b10-9cbc-3900d1c5d632","savedPayload":{"position":{"x":25081.764999673167,"y":31951.714097319156},"targetPosition":{"x":24998.764999673167,"y":31973.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"efd89151-ac6e-4e21-969d-d24a4e1a9990","savedPayload":{"position":{"x":25041.764999673167,"y":31828.714097319156},"targetPosition":{"x":25046.764999673167,"y":31884.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"4e7a96f8-2e26-41f5-a17b-6cde0fcbf21b","savedPayload":{"position":{"x":25086.764999673167,"y":31943.714097319156},"targetPosition":{"x":25046.764999673167,"y":31884.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"ca18284e-b483-4c84-925c-73f2d132c4b9","savedPayload":{"position":{"x":24963.764999673167,"y":31979.714097319156},"targetPosition":{"x":25046.764999673167,"y":31884.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"c69f708f-6cb6-435e-9eab-54cf797932ec","savedPayload":{"position":{"x":25053.764999673167,"y":31790.714097319156},"targetPosition":{"x":25046.764999673167,"y":31884.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"ce144ccb-3422-468d-8b6d-59ca0980de69","savedPayload":{"position":{"x":25080.764999673167,"y":31788.714097319156},"targetPosition":{"x":25046.764999673167,"y":31884.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"a4643639-e23e-4e73-95ec-36930ba8458b","savedPayload":{"position":{"x":25046.764999673167,"y":31884.714097319156},"targetPosition":{"x":24998.764999673167,"y":31973.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7ed5c57c-1678-4074-9daf-c1080d888220","savedPayload":{"position":{"x":24998.764999673167,"y":31973.714097319156},"targetPosition":{"x":24953.764999673167,"y":31926.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"acca241c-b350-4c45-aad1-10c2a42e4c15","savedPayload":{"position":{"x":24953.764999673167,"y":31926.714097319156},"targetPosition":{"x":24884.764999673167,"y":31872.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fba09d91-41fb-49a4-9977-a5bf12d5f1a4","savedPayload":{"position":{"x":24884.764999673167,"y":31872.714097319156},"targetPosition":{"x":24886.764999673167,"y":31791.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"31fbfb89-9f59-49ed-a975-d8da89624cbf","savedPayload":{"position":{"x":24886.764999673167,"y":31791.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Market Sell Test","id":"5e233824-4d50-47c2-a3e6-d15fd0efb0eb"}}},{"type":"Trading Session Reference","name":"Market Buy Test Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"550342f6-6715-46f1-aaeb-3666f37efef8","savedPayload":{"position":{"x":24698.764999673167,"y":31934.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"62ebd86b-9279-45cf-b7da-8809cbbcdd80","savedPayload":{"position":{"x":24798.764999673167,"y":32070.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"6c10c907-ec86-4889-9b0d-500845fc0833","savedPayload":{"position":{"x":24690.764999673167,"y":31991.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"97e6a200-5a2f-45d9-9e7a-59edc99def54","savedPayload":{"position":{"x":24793.764999673167,"y":32109.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"75d87172-a3b9-4eb2-a336-03fc418d1c33","savedPayload":{"position":{"x":24847.764999673167,"y":31955.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"bff11528-db57-4386-809a-4dd0626a95ba","savedPayload":{"position":{"x":24784.764999673167,"y":32126.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"95d0517f-bd59-4d48-a499-9212b29b18ea","savedPayload":{"position":{"x":24721.764999673167,"y":31989.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"c57df2e2-5def-4f07-be71-f28df93888eb","savedPayload":{"position":{"x":24771.764999673167,"y":32059.714097319156},"targetPosition":{"x":24787.764999673167,"y":32030.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"42cebea9-17dc-49fa-855a-c8ccd7c7160c","savedPayload":{"position":{"x":24787.764999673167,"y":32030.714097319156},"targetPosition":{"x":24789.764999673167,"y":31963.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"5733e6d8-1d24-477a-865b-7dff22e7d1bc","savedPayload":{"position":{"x":24674.764999673167,"y":31965.714097319156},"targetPosition":{"x":24756.764999673167,"y":31866.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"eff6f8c6-a7d2-4d2a-ad30-3025292c74c0","savedPayload":{"position":{"x":24835.764999673167,"y":31920.714097319156},"targetPosition":{"x":24756.764999673167,"y":31866.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"260218e7-97f6-436a-a360-d4bf9a242b37","savedPayload":{"position":{"x":24756.764999673167,"y":31866.714097319156},"targetPosition":{"x":24789.764999673167,"y":31963.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"e52bf25c-61eb-4730-b7a8-533128e0d9c8","savedPayload":{"position":{"x":24935.764999673167,"y":31946.714097319156},"targetPosition":{"x":24870.764999673167,"y":31959.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"01d88f4e-80b5-475e-981d-252e11e72d49","savedPayload":{"position":{"x":24807.764999673167,"y":32048.714097319156},"targetPosition":{"x":24870.764999673167,"y":31959.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"3b053fc9-fbaa-4034-b5c4-2eb7b87d1fa0","savedPayload":{"position":{"x":24857.764999673167,"y":31974.714097319156},"targetPosition":{"x":24870.764999673167,"y":31959.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"284180bf-7b70-4fbf-87ab-8595390cb810","savedPayload":{"position":{"x":24816.764999673167,"y":32050.714097319156},"targetPosition":{"x":24870.764999673167,"y":31959.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"6bbb9233-e830-41ae-bc91-b5c9060820a6","savedPayload":{"position":{"x":24870.764999673167,"y":31959.714097319156},"targetPosition":{"x":24789.764999673167,"y":31963.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"46e1fa7d-bf6f-413b-8d2d-8c5b9538dd2d","savedPayload":{"position":{"x":24795.764999673167,"y":31861.714097319156},"targetPosition":{"x":24745.764999673167,"y":31909.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"ecdf2259-dd0e-432f-accb-d61861c4db45","savedPayload":{"position":{"x":24655.764999673167,"y":31874.714097319156},"targetPosition":{"x":24745.764999673167,"y":31909.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"03081d41-68db-4c1b-9f18-9d23133f79a9","savedPayload":{"position":{"x":24654.764999673167,"y":31892.714097319156},"targetPosition":{"x":24745.764999673167,"y":31909.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"5103d516-1d1a-4727-83cb-0655d4c4c030","savedPayload":{"position":{"x":24679.764999673167,"y":32003.714097319156},"targetPosition":{"x":24745.764999673167,"y":31909.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"c1a3b0ff-b59a-4f3e-b35d-d34aa54359bf","savedPayload":{"position":{"x":24745.764999673167,"y":31909.714097319156},"targetPosition":{"x":24789.764999673167,"y":31963.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"ae7fe8f4-1256-40a2-a07e-d8f14e74a345","savedPayload":{"position":{"x":24944.764999673167,"y":32079.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"283eb566-8436-42fc-a97d-e15838f93e5e","savedPayload":{"position":{"x":24855.764999673167,"y":31953.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"068174df-082e-4f6c-aac4-9ea422147ec5","savedPayload":{"position":{"x":24900.764999673167,"y":31963.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"55b13a0d-35fe-4f71-b81b-b59fc06a68bd","savedPayload":{"position":{"x":24965.764999673167,"y":31966.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"91494b7f-170d-483f-9e6b-10a2436359c8","savedPayload":{"position":{"x":24892.764999673167,"y":32078.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"237aca5c-ab63-44ac-80c6-46a692bd900b","savedPayload":{"position":{"x":24785.764999673167,"y":31951.714097319156},"targetPosition":{"x":24874.764999673167,"y":31986.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"98cc3d56-44ac-4491-b5d2-1562f8abefb4","savedPayload":{"position":{"x":24874.764999673167,"y":31986.714097319156},"targetPosition":{"x":24789.764999673167,"y":31963.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"310f3c19-9104-487a-a814-ff42a891a2a7","savedPayload":{"position":{"x":24789.764999673167,"y":31963.714097319156},"targetPosition":{"x":24772.764999673167,"y":31869.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"8c893439-66a9-4666-ba68-37aa8f60086d","savedPayload":{"position":{"x":24644.764999673167,"y":31903.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"0aba9134-b5d2-4bf2-a0e8-75ee3add3d39","savedPayload":{"position":{"x":24786.764999673167,"y":31958.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"2246e50f-cc4e-46f3-971f-1e903ac4140f","savedPayload":{"position":{"x":24815.764999673167,"y":31992.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"0b72c894-19b9-4c11-9b76-403a2d20fa0d","savedPayload":{"position":{"x":24666.764999673167,"y":31879.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"7a6759c3-796f-449f-9eeb-8edb00a3fba5","savedPayload":{"position":{"x":24782.764999673167,"y":32018.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"02be1e52-f10d-4e47-ab7a-1b689fd7e9e8","savedPayload":{"position":{"x":24717.764999673167,"y":31886.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"990a64ed-e3c4-4225-8af0-ade63df03bdb","savedPayload":{"position":{"x":24692.764999673167,"y":31968.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"5f61fe7d-1abf-4a1c-bbde-901256f0e8a3","savedPayload":{"position":{"x":24680.764999673167,"y":31983.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"64c5e5fe-f0e5-47ff-966e-c640c15b98af","savedPayload":{"position":{"x":24679.764999673167,"y":31868.714097319156},"targetPosition":{"x":24719.764999673167,"y":31942.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"4ec6b843-dfd8-49dc-99e0-cc583bac3af2","savedPayload":{"position":{"x":24719.764999673167,"y":31942.714097319156},"targetPosition":{"x":24772.764999673167,"y":31869.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"6dd171bd-3714-4145-b325-8a419b0fa0d7","savedPayload":{"position":{"x":24753.764999673167,"y":31911.714097319156},"targetPosition":{"x":24758.764999673167,"y":31813.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"67c61a1d-55cb-4f84-ba77-592d1c866bd9","savedPayload":{"position":{"x":24704.764999673167,"y":31911.714097319156},"targetPosition":{"x":24758.764999673167,"y":31813.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"f60c55be-9792-4909-a189-e166fd2d08c9","savedPayload":{"position":{"x":24671.764999673167,"y":31759.714097319156},"targetPosition":{"x":24722.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"c5f56679-8f9d-4809-8f1a-294637eece1a","savedPayload":{"position":{"x":24738.764999673167,"y":31720.714097319156},"targetPosition":{"x":24722.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"a9ff72a4-5433-4a6f-960c-2ab4e0c69bcb","savedPayload":{"position":{"x":24797.764999673167,"y":31783.714097319156},"targetPosition":{"x":24722.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"dc93a316-1485-4558-a650-59fc4e8e1470","savedPayload":{"position":{"x":24763.764999673167,"y":31839.714097319156},"targetPosition":{"x":24722.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"a0259405-7032-4d54-bf86-d05e30694d4f","savedPayload":{"position":{"x":24722.764999673167,"y":31810.714097319156},"targetPosition":{"x":24758.764999673167,"y":31813.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"65eb0b72-18f8-45a0-88ab-ba2d89586570","savedPayload":{"position":{"x":24713.764999673167,"y":31849.714097319156},"targetPosition":{"x":24689.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"c662733e-90a9-4e7c-a8e6-d191e214fbae","savedPayload":{"position":{"x":24630.764999673167,"y":31832.714097319156},"targetPosition":{"x":24689.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"6e2e8516-861e-4d74-97d3-2b4a23f9ed60","savedPayload":{"position":{"x":24599.764999673167,"y":31925.714097319156},"targetPosition":{"x":24689.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"25b7412e-02d0-44e3-94ba-4a2e42ef4d31","savedPayload":{"position":{"x":24685.764999673167,"y":31838.714097319156},"targetPosition":{"x":24689.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"555716ca-d459-4718-93bc-b768337b239f","savedPayload":{"position":{"x":24689.764999673167,"y":31832.714097319156},"targetPosition":{"x":24758.764999673167,"y":31813.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"1cc2f02b-9d9c-49ce-acbb-268358f8fb0b","savedPayload":{"position":{"x":24744.764999673167,"y":31904.714097319156},"targetPosition":{"x":24826.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"74675b71-e0b7-4558-91fb-2cdaef2cd215","savedPayload":{"position":{"x":24832.764999673167,"y":31811.714097319156},"targetPosition":{"x":24826.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"15a688ae-6d2b-4c0d-be65-6953e5a783ed","savedPayload":{"position":{"x":24910.764999673167,"y":31787.714097319156},"targetPosition":{"x":24826.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"294e1d17-dcdf-45b4-b9f8-2d33eb037254","savedPayload":{"position":{"x":24852.764999673167,"y":31884.714097319156},"targetPosition":{"x":24826.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"5dc59b27-a217-4621-b480-e50de4f521ee","savedPayload":{"position":{"x":24888.764999673167,"y":31813.714097319156},"targetPosition":{"x":24826.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"ad9d8837-4b3e-4b14-8e5b-791eecd9d1ab","savedPayload":{"position":{"x":24826.764999673167,"y":31886.714097319156},"targetPosition":{"x":24758.764999673167,"y":31813.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5de3877-1145-4015-bb29-5cd989535fc9","savedPayload":{"position":{"x":24758.764999673167,"y":31813.714097319156},"targetPosition":{"x":24772.764999673167,"y":31869.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fa767b2-40c2-434f-a1e7-2792639fc546","savedPayload":{"position":{"x":24772.764999673167,"y":31869.714097319156},"targetPosition":{"x":24783.764999673167,"y":31802.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"90ca4269-c0b7-4fac-b796-0260aab60fad","savedPayload":{"position":{"x":24783.764999673167,"y":31802.714097319156},"targetPosition":{"x":24879.764999673167,"y":31733.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"a12b90ee-b775-4997-b302-ea249566b51a","savedPayload":{"position":{"x":24879.764999673167,"y":31733.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Market Buy Test","id":"fdcc3c62-6baf-4a43-a917-242781890f7c"}}},{"type":"Trading Session Reference","name":"Limit Sell Test Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"2e5bc2ba-80b0-4cba-8450-a007347ae96f","savedPayload":{"position":{"x":24764.764999673167,"y":31570.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"50c36325-e155-4ca1-bdf4-fc6ea1f6af2f","savedPayload":{"position":{"x":24904.764999673167,"y":31580.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"cce673e9-5df4-4aca-ac37-c13dc129af3b","savedPayload":{"position":{"x":24740.764999673167,"y":31571.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"b421e1fd-8cd1-4313-a73a-7d55776efc56","savedPayload":{"position":{"x":24808.764999673167,"y":31745.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"bf645300-9a7d-4a7e-b812-50a6aeed4bb2","savedPayload":{"position":{"x":24826.764999673167,"y":31699.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"9c42e43b-5d4b-4df2-b26f-2fd16980f4c1","savedPayload":{"position":{"x":24915.764999673167,"y":31725.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"477fdc77-d140-41cc-9fe4-f6a55e5ec2ad","savedPayload":{"position":{"x":24825.764999673167,"y":31677.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"3ec222ec-a9dd-4bbd-892e-850c0008a5f5","savedPayload":{"position":{"x":24862.764999673167,"y":31670.714097319156},"targetPosition":{"x":24831.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"c1d8a28c-b219-4337-a9e7-40797f536b5c","savedPayload":{"position":{"x":24831.764999673167,"y":31648.714097319156},"targetPosition":{"x":24817.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"179bd2e9-c1ba-4822-afe6-282cda148b10","savedPayload":{"position":{"x":24986.764999673167,"y":31621.714097319156},"targetPosition":{"x":24909.764999673167,"y":31613.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"7cc45469-394c-4388-80ac-b8054e28b7c1","savedPayload":{"position":{"x":24833.764999673167,"y":31657.714097319156},"targetPosition":{"x":24909.764999673167,"y":31613.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"59c9c332-1eba-41fd-be6e-e866f447718e","savedPayload":{"position":{"x":24909.764999673167,"y":31613.714097319156},"targetPosition":{"x":24817.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"71a20e8f-773b-4062-9509-18f113c373b4","savedPayload":{"position":{"x":24829.764999673167,"y":31721.714097319156},"targetPosition":{"x":24760.764999673167,"y":31717.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"aa58adb5-6506-493d-b19b-311f86fe467a","savedPayload":{"position":{"x":24797.764999673167,"y":31713.714097319156},"targetPosition":{"x":24760.764999673167,"y":31717.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"c1e8bcfd-7938-42f5-8130-712272717493","savedPayload":{"position":{"x":24692.764999673167,"y":31784.714097319156},"targetPosition":{"x":24760.764999673167,"y":31717.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"0a8204df-b712-4332-80ca-f4c6bdbf971b","savedPayload":{"position":{"x":24752.764999673167,"y":31626.714097319156},"targetPosition":{"x":24760.764999673167,"y":31717.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"6d9adbf6-cf0e-43a3-9714-794762e647e6","savedPayload":{"position":{"x":24760.764999673167,"y":31717.714097319156},"targetPosition":{"x":24817.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"d25ae25c-99cf-4d1d-845c-7250681f4aca","savedPayload":{"position":{"x":24843.764999673167,"y":31616.714097319156},"targetPosition":{"x":24788.764999673167,"y":31658.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"94a13c20-0208-4ee6-b02b-8d0dd2b49592","savedPayload":{"position":{"x":24796.764999673167,"y":31678.714097319156},"targetPosition":{"x":24788.764999673167,"y":31658.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"5afacccc-42f5-408e-b434-7e619c381d94","savedPayload":{"position":{"x":24737.764999673167,"y":31643.714097319156},"targetPosition":{"x":24788.764999673167,"y":31658.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"ee63fc52-1442-4619-a40b-1e739b805610","savedPayload":{"position":{"x":24725.764999673167,"y":31628.714097319156},"targetPosition":{"x":24788.764999673167,"y":31658.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"35a5ce5f-e3b5-47cd-bc7c-6b18add6aeda","savedPayload":{"position":{"x":24788.764999673167,"y":31658.714097319156},"targetPosition":{"x":24817.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"0b4d150b-ed78-4ec4-a5f8-89279cce3118","savedPayload":{"position":{"x":24760.764999673167,"y":31731.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"1403043e-48a1-482a-b69f-228683d31802","savedPayload":{"position":{"x":24757.764999673167,"y":31814.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"d5e7000c-3b8a-4338-a8db-bf715e239fc4","savedPayload":{"position":{"x":24647.764999673167,"y":31719.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"7d75926c-c53a-4435-8805-3d7f08c06a5a","savedPayload":{"position":{"x":24669.764999673167,"y":31849.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"6f351e8d-d5d1-474a-b7b8-7be64d742fee","savedPayload":{"position":{"x":24678.764999673167,"y":31747.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"a77dbf49-942f-4870-989d-0d1bd8271ba9","savedPayload":{"position":{"x":24775.764999673167,"y":31767.714097319156},"targetPosition":{"x":24722.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"2c826163-7690-461c-88b4-e274b76e9f6a","savedPayload":{"position":{"x":24722.764999673167,"y":31784.714097319156},"targetPosition":{"x":24817.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"374d7fd4-b055-426d-aaaf-f533f8bffdb6","savedPayload":{"position":{"x":24817.764999673167,"y":31695.714097319156},"targetPosition":{"x":24753.764999673167,"y":31632.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"4d8d9b35-49f5-4ce9-8863-d95d5933f4f9","savedPayload":{"position":{"x":24736.764999673167,"y":31625.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"a90fcc32-b0a8-4258-8942-f0ce95bf6e3e","savedPayload":{"position":{"x":24790.764999673167,"y":31555.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"d67e4026-f236-4ddc-9d06-b0b68159f611","savedPayload":{"position":{"x":24719.764999673167,"y":31513.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"68b249f0-24f0-4201-82c9-a88b8a595ea8","savedPayload":{"position":{"x":24756.764999673167,"y":31539.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"c3ad54c3-d011-4ec8-b640-32276ce5acb7","savedPayload":{"position":{"x":24680.764999673167,"y":31488.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"7a05dc55-88c0-4bf4-a104-da9e60e8eb9c","savedPayload":{"position":{"x":24793.764999673167,"y":31522.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"32af816a-2394-4a75-88fc-ade56882dbf9","savedPayload":{"position":{"x":24778.764999673167,"y":31449.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"e43371ae-82c3-4bcb-9025-17b0a17f4a0d","savedPayload":{"position":{"x":24844.764999673167,"y":31480.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"f1eff0a1-3858-43df-a6a9-7b86599367fd","savedPayload":{"position":{"x":24735.764999673167,"y":31453.714097319156},"targetPosition":{"x":24756.764999673167,"y":31536.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"bb4fd22a-0ad2-4b0b-9f28-329ff052ff6c","savedPayload":{"position":{"x":24756.764999673167,"y":31536.714097319156},"targetPosition":{"x":24753.764999673167,"y":31632.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"24d625d8-03fd-4c70-947d-c1d9e7c01e55","savedPayload":{"position":{"x":24826.764999673167,"y":31731.714097319156},"targetPosition":{"x":24729.764999673167,"y":31725.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"42759f94-af1a-499c-8395-dbcc7beb542d","savedPayload":{"position":{"x":24797.764999673167,"y":31776.714097319156},"targetPosition":{"x":24729.764999673167,"y":31725.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"785c180c-1d9f-4d2d-8f59-0921ef7d6ccd","savedPayload":{"position":{"x":24699.764999673167,"y":31715.714097319156},"targetPosition":{"x":24657.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"a9106cf3-94bb-4848-b038-81137b22c240","savedPayload":{"position":{"x":24643.764999673167,"y":31692.714097319156},"targetPosition":{"x":24657.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"e90d670b-3869-4996-8133-350dc0bdc8df","savedPayload":{"position":{"x":24754.764999673167,"y":31708.714097319156},"targetPosition":{"x":24657.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"5839789e-4d7d-46bc-8a80-1541b2e87db5","savedPayload":{"position":{"x":24652.764999673167,"y":31716.714097319156},"targetPosition":{"x":24657.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"4d4ebe65-57c2-4d74-ac29-50eaa15e3d22","savedPayload":{"position":{"x":24657.764999673167,"y":31734.714097319156},"targetPosition":{"x":24729.764999673167,"y":31725.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"cb322208-dca9-421f-9a18-0fe1937791ac","savedPayload":{"position":{"x":24765.764999673167,"y":31816.714097319156},"targetPosition":{"x":24712.764999673167,"y":31731.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"9c6f17e0-799e-4c4f-b3f2-00111cdbc14a","savedPayload":{"position":{"x":24692.764999673167,"y":31645.714097319156},"targetPosition":{"x":24712.764999673167,"y":31731.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"21fdd64f-7461-43c0-82f1-81eabc012c32","savedPayload":{"position":{"x":24792.764999673167,"y":31801.714097319156},"targetPosition":{"x":24712.764999673167,"y":31731.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"0d81e926-7b2d-4c87-b12a-314e555efb0f","savedPayload":{"position":{"x":24622.764999673167,"y":31775.714097319156},"targetPosition":{"x":24712.764999673167,"y":31731.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"c449c1b9-efc5-4d46-b452-635bdf1a3971","savedPayload":{"position":{"x":24712.764999673167,"y":31731.714097319156},"targetPosition":{"x":24729.764999673167,"y":31725.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"f00d57a6-7f92-48f9-8a10-8aadd0ce5915","savedPayload":{"position":{"x":24703.764999673167,"y":31738.714097319156},"targetPosition":{"x":24717.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"121e4867-a657-4b99-9756-572e61d4c865","savedPayload":{"position":{"x":24792.764999673167,"y":31721.714097319156},"targetPosition":{"x":24717.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"7ef6d164-9019-4f4f-ba48-54e4cb0894b0","savedPayload":{"position":{"x":24743.764999673167,"y":31837.714097319156},"targetPosition":{"x":24717.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"5408ed5b-19c6-41a7-b576-9079f60a414e","savedPayload":{"position":{"x":24766.764999673167,"y":31824.714097319156},"targetPosition":{"x":24717.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"01a098f2-e244-455c-b2cd-2252faf8f642","savedPayload":{"position":{"x":24652.764999673167,"y":31788.714097319156},"targetPosition":{"x":24717.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"90d3282e-79af-4061-a734-fe44e0f0a422","savedPayload":{"position":{"x":24717.764999673167,"y":31804.714097319156},"targetPosition":{"x":24729.764999673167,"y":31725.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c0b061e8-d23b-4c6c-a2f4-98adf4968138","savedPayload":{"position":{"x":24729.764999673167,"y":31725.714097319156},"targetPosition":{"x":24753.764999673167,"y":31632.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"36a9ca45-cc71-47b8-859c-305561707305","savedPayload":{"position":{"x":24753.764999673167,"y":31632.714097319156},"targetPosition":{"x":24776.764999673167,"y":31685.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f0ae7e7a-692d-416a-a891-86ccf8d05a9a","savedPayload":{"position":{"x":24776.764999673167,"y":31685.714097319156},"targetPosition":{"x":24730.764999673167,"y":31714.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"370748af-6bc5-4390-8cf0-4211579dc073","savedPayload":{"position":{"x":24730.764999673167,"y":31714.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Limit Sell Test","id":"d356594c-57e5-49ff-8a64-5ab3113d4440"}}},{"type":"Trading Session Reference","name":"Limit Buy Test Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"d19b0a61-9654-4e20-b0b9-78de8f319791","savedPayload":{"position":{"x":24639.764999673167,"y":31593.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"5dc89c56-71ce-4a29-8659-acaece4d40d0","savedPayload":{"position":{"x":24739.764999673167,"y":31588.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"e228ef3f-fae4-4d98-903c-f6b5c0555b9b","savedPayload":{"position":{"x":24693.764999673167,"y":31648.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"bf9deed9-66fb-4a5c-89e5-a50e2a27c878","savedPayload":{"position":{"x":24793.764999673167,"y":31625.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"a4357221-3ca4-4476-8f0e-55ca8fd6077f","savedPayload":{"position":{"x":24783.764999673167,"y":31637.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"71234a3e-18c0-4108-8e96-d3b547c45d8d","savedPayload":{"position":{"x":24694.764999673167,"y":31548.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"b61e958e-e14a-4385-818b-635de615f966","savedPayload":{"position":{"x":24767.764999673167,"y":31689.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"03e9cd6d-219d-4203-998c-f458fa5ccf57","savedPayload":{"position":{"x":24770.764999673167,"y":31648.714097319156},"targetPosition":{"x":24712.764999673167,"y":31597.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"7b48709e-e05e-4222-90be-854771a2e17e","savedPayload":{"position":{"x":24712.764999673167,"y":31597.714097319156},"targetPosition":{"x":24647.764999673167,"y":31677.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"107d5d56-4623-4060-9b6a-fe40dd708d4b","savedPayload":{"position":{"x":24654.764999673167,"y":31597.714097319156},"targetPosition":{"x":24734.764999673167,"y":31578.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"ff15650a-1e33-4cf5-a274-05a815ccc6c1","savedPayload":{"position":{"x":24705.764999673167,"y":31540.714097319156},"targetPosition":{"x":24734.764999673167,"y":31578.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"3948f40d-4771-4726-953f-6ba242d59e49","savedPayload":{"position":{"x":24734.764999673167,"y":31578.714097319156},"targetPosition":{"x":24647.764999673167,"y":31677.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"bd46eeb9-57ee-4810-a39e-5e503379aaf4","savedPayload":{"position":{"x":24730.764999673167,"y":31511.714097319156},"targetPosition":{"x":24717.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"2fb8b022-4566-45e9-b95a-fc43df641e9b","savedPayload":{"position":{"x":24662.764999673167,"y":31502.714097319156},"targetPosition":{"x":24717.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"aeb5092a-8dc2-4c52-862c-f0a1f6854dbb","savedPayload":{"position":{"x":24632.764999673167,"y":31676.714097319156},"targetPosition":{"x":24717.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"b406cc22-d370-4e58-8594-e8e105c52ce7","savedPayload":{"position":{"x":24803.764999673167,"y":31481.714097319156},"targetPosition":{"x":24717.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"0a59d232-ef6e-4558-94bf-e6cc259c48b4","savedPayload":{"position":{"x":24717.764999673167,"y":31579.714097319156},"targetPosition":{"x":24647.764999673167,"y":31677.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"c79fa173-d23e-4eb3-88e2-f050392fc7a0","savedPayload":{"position":{"x":24708.764999673167,"y":31583.714097319156},"targetPosition":{"x":24687.764999673167,"y":31679.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"a6d46519-34c3-416c-9aea-5bb30913c101","savedPayload":{"position":{"x":24770.764999673167,"y":31598.714097319156},"targetPosition":{"x":24687.764999673167,"y":31679.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"4521ebf5-26d8-4e1c-bcea-8d0e0c343f3a","savedPayload":{"position":{"x":24592.764999673167,"y":31763.714097319156},"targetPosition":{"x":24687.764999673167,"y":31679.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"5d78b016-420e-409e-96e6-da3379551551","savedPayload":{"position":{"x":24717.764999673167,"y":31707.714097319156},"targetPosition":{"x":24687.764999673167,"y":31679.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"11df6144-cc80-4731-9bf7-07dafeeea0f8","savedPayload":{"position":{"x":24687.764999673167,"y":31679.714097319156},"targetPosition":{"x":24647.764999673167,"y":31677.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"a4fa2fc3-3315-40e8-a218-3f5e2e104f58","savedPayload":{"position":{"x":24799.764999673167,"y":31747.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"b01514e4-7f38-484a-8c74-47377bb9b618","savedPayload":{"position":{"x":24760.764999673167,"y":31655.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"2f9686dc-3111-440e-aefb-f890c5779bd1","savedPayload":{"position":{"x":24819.764999673167,"y":31721.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"a4d92d93-d8bf-47f4-8aae-a383bd17c397","savedPayload":{"position":{"x":24729.764999673167,"y":31797.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"dcd133a5-d19c-4c0b-bdac-b8abe3e1ae60","savedPayload":{"position":{"x":24818.764999673167,"y":31802.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"2ebc0b8f-351a-479b-80f2-4145c7f02698","savedPayload":{"position":{"x":24806.764999673167,"y":31785.714097319156},"targetPosition":{"x":24742.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"8341eb35-2e42-408c-9481-8ac7babb0da5","savedPayload":{"position":{"x":24742.764999673167,"y":31719.714097319156},"targetPosition":{"x":24647.764999673167,"y":31677.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f2627fc0-e781-4e55-a43d-8db5675be443","savedPayload":{"position":{"x":24647.764999673167,"y":31677.714097319156},"targetPosition":{"x":24736.764999673167,"y":31682.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"f566b6b1-9b51-4f0a-9d08-be3f6ce372e9","savedPayload":{"position":{"x":24744.764999673167,"y":31837.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"c2e03de5-0423-46f6-89ec-5cfba32a1d26","savedPayload":{"position":{"x":24641.764999673167,"y":31778.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"ea84864d-1b31-4f4a-be5c-1685484c2553","savedPayload":{"position":{"x":24681.764999673167,"y":31768.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"c313204d-9493-4274-8141-dcb4a282b00f","savedPayload":{"position":{"x":24654.764999673167,"y":31795.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"19b52541-b96c-4080-807e-ee040f4096cf","savedPayload":{"position":{"x":24695.764999673167,"y":31667.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"d093b0c3-c589-487c-9257-c96a980532c1","savedPayload":{"position":{"x":24617.764999673167,"y":31663.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"ea18c9cd-3cbc-4285-910d-32e7188c202c","savedPayload":{"position":{"x":24717.764999673167,"y":31719.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"bcd7fda1-d122-4b27-af6b-202caa4d7a91","savedPayload":{"position":{"x":24802.764999673167,"y":31818.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"bf3e253f-58e9-430f-94b5-18c181bbb4ec","savedPayload":{"position":{"x":24732.764999673167,"y":31686.714097319156},"targetPosition":{"x":24707.764999673167,"y":31748.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"e1d044ca-7778-429f-a9d9-2d024a4b7282","savedPayload":{"position":{"x":24707.764999673167,"y":31748.714097319156},"targetPosition":{"x":24736.764999673167,"y":31682.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"f875b337-e53b-4598-893c-0e5ff2f3c453","savedPayload":{"position":{"x":24696.764999673167,"y":31719.714097319156},"targetPosition":{"x":24640.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"5657e5b7-539e-4fdc-8181-dd01fbbc93b3","savedPayload":{"position":{"x":24704.764999673167,"y":31627.714097319156},"targetPosition":{"x":24640.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"708895b2-3019-4814-8984-3a6915bd2a3c","savedPayload":{"position":{"x":24693.764999673167,"y":31730.714097319156},"targetPosition":{"x":24671.764999673167,"y":31675.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"3c2e2ef8-1454-4f69-b1fe-d914ba406959","savedPayload":{"position":{"x":24638.764999673167,"y":31746.714097319156},"targetPosition":{"x":24671.764999673167,"y":31675.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"648f8bce-5ea9-4cb5-bc7e-9b7359812e2d","savedPayload":{"position":{"x":24653.764999673167,"y":31725.714097319156},"targetPosition":{"x":24671.764999673167,"y":31675.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"e7ffc532-0d3a-4929-9c6b-98ed15517472","savedPayload":{"position":{"x":24574.764999673167,"y":31733.714097319156},"targetPosition":{"x":24671.764999673167,"y":31675.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"c0ccc54a-00ec-4135-9995-a4575a0a2f80","savedPayload":{"position":{"x":24671.764999673167,"y":31675.714097319156},"targetPosition":{"x":24640.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"7785f64c-5f0a-4c3d-a2d5-909e849ac0ed","savedPayload":{"position":{"x":24636.764999673167,"y":31751.714097319156},"targetPosition":{"x":24578.764999673167,"y":31788.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"7c421e39-6a5e-4e52-852d-5cb4e317499c","savedPayload":{"position":{"x":24571.764999673167,"y":31883.714097319156},"targetPosition":{"x":24578.764999673167,"y":31788.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"5bf1c587-1245-4805-8905-da4b025d8586","savedPayload":{"position":{"x":24610.764999673167,"y":31805.714097319156},"targetPosition":{"x":24578.764999673167,"y":31788.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"0ff63649-5288-468d-bffb-188c6ef9b4d3","savedPayload":{"position":{"x":24630.764999673167,"y":31819.714097319156},"targetPosition":{"x":24578.764999673167,"y":31788.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"ab6470f2-7faa-4d43-887c-df6be5bf5c44","savedPayload":{"position":{"x":24578.764999673167,"y":31788.714097319156},"targetPosition":{"x":24640.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"c0d88aad-81c3-443e-ac6e-a6ec970a7319","savedPayload":{"position":{"x":24697.764999673167,"y":31662.714097319156},"targetPosition":{"x":24604.764999673167,"y":31647.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"6f34fbe4-4bc0-4ede-9259-d235bb2b55ba","savedPayload":{"position":{"x":24608.764999673167,"y":31548.714097319156},"targetPosition":{"x":24604.764999673167,"y":31647.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"0a30a747-d41f-4556-bbfe-9e8c0ee500af","savedPayload":{"position":{"x":24537.764999673167,"y":31575.714097319156},"targetPosition":{"x":24604.764999673167,"y":31647.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"2f795dc2-7f08-4368-bb5d-466256027447","savedPayload":{"position":{"x":24540.764999673167,"y":31594.714097319156},"targetPosition":{"x":24604.764999673167,"y":31647.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"da6a3b1b-b748-4732-8e97-9e70e981c023","savedPayload":{"position":{"x":24625.764999673167,"y":31705.714097319156},"targetPosition":{"x":24604.764999673167,"y":31647.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"e971d94d-59ee-4677-bb75-4a574b442d91","savedPayload":{"position":{"x":24604.764999673167,"y":31647.714097319156},"targetPosition":{"x":24640.764999673167,"y":31695.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d61d21f2-4553-4299-b1e9-dd2cfcd629c9","savedPayload":{"position":{"x":24640.764999673167,"y":31695.714097319156},"targetPosition":{"x":24736.764999673167,"y":31682.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"73d40463-313e-4fe4-b04e-3dfbad3df9c5","savedPayload":{"position":{"x":24736.764999673167,"y":31682.714097319156},"targetPosition":{"x":24761.764999673167,"y":31752.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a148167-79ff-4573-8833-aa30f3f909d0","savedPayload":{"position":{"x":24761.764999673167,"y":31752.714097319156},"targetPosition":{"x":24839.764999673167,"y":31754.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"482fe95c-7751-41d8-ada4-db384a72d672","savedPayload":{"position":{"x":24839.764999673167,"y":31754.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Limit Buy Test","id":"10626ddb-3bb2-4bb6-9b1f-5adf83d9da1b"}}},{"type":"Trading Session Reference","name":"Market Sell Test Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"c772e7e1-0061-4136-b908-fa1dd407e79b","savedPayload":{"position":{"x":24928.764999673167,"y":31783.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"c630bd92-24b2-485d-b860-513c995f3ce9","savedPayload":{"position":{"x":24930.764999673167,"y":31826.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"7b45164c-bad1-4cda-bbd5-e046b5b8e474","savedPayload":{"position":{"x":24958.764999673167,"y":31732.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"d689f22d-84cf-4cd3-85f4-51d3ce056a0e","savedPayload":{"position":{"x":24914.764999673167,"y":31738.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"1a2fc357-95e8-477e-a537-b5638f943cff","savedPayload":{"position":{"x":24811.764999673167,"y":31735.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"2137ff34-359b-442c-b8e3-3aac847fb842","savedPayload":{"position":{"x":24928.764999673167,"y":31805.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"60142dc2-acb7-4678-b0a4-c73087b00916","savedPayload":{"position":{"x":24915.764999673167,"y":31659.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"6f639295-d116-45a2-88cd-dfcd2b9d273d","savedPayload":{"position":{"x":24978.764999673167,"y":31667.714097319156},"targetPosition":{"x":24879.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"4c5d799a-9a9f-4866-ae2d-3a436f125798","savedPayload":{"position":{"x":24879.764999673167,"y":31734.714097319156},"targetPosition":{"x":24805.764999673167,"y":31737.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"1b13f3ec-03a6-4cb2-ad78-9e0814ae1b12","savedPayload":{"position":{"x":24841.764999673167,"y":31697.714097319156},"targetPosition":{"x":24896.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"ab669475-91a5-4130-b392-7e7cb8e2d0cd","savedPayload":{"position":{"x":24914.764999673167,"y":31804.714097319156},"targetPosition":{"x":24896.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"171f3156-728e-4ed7-9e69-f427616fa26b","savedPayload":{"position":{"x":24896.764999673167,"y":31766.714097319156},"targetPosition":{"x":24805.764999673167,"y":31737.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"7bf6da13-7f2c-4dd3-b738-0996ef2aa263","savedPayload":{"position":{"x":24877.764999673167,"y":31705.714097319156},"targetPosition":{"x":24794.764999673167,"y":31707.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"e3f33a14-9d2e-42d3-9cb5-f88bb3c28af2","savedPayload":{"position":{"x":24768.764999673167,"y":31803.714097319156},"targetPosition":{"x":24794.764999673167,"y":31707.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"b84ac694-bba2-4864-865c-e3aac19f95de","savedPayload":{"position":{"x":24868.764999673167,"y":31758.714097319156},"targetPosition":{"x":24794.764999673167,"y":31707.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"8995d53c-eafe-4a05-9e4e-a7b7b2bf4bc6","savedPayload":{"position":{"x":24721.764999673167,"y":31744.714097319156},"targetPosition":{"x":24794.764999673167,"y":31707.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"b6e2e50a-9ed4-478e-a8fc-df37e2b97c98","savedPayload":{"position":{"x":24794.764999673167,"y":31707.714097319156},"targetPosition":{"x":24805.764999673167,"y":31737.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"ee07e9bb-bd73-44c9-a992-bb2408bda327","savedPayload":{"position":{"x":24703.764999673167,"y":31543.714097319156},"targetPosition":{"x":24777.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"1488937d-e2c4-4477-85c5-5c26e91ebbd0","savedPayload":{"position":{"x":24840.764999673167,"y":31598.714097319156},"targetPosition":{"x":24777.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"0109d854-9a3a-4dc0-b2fc-db0ba0c094b8","savedPayload":{"position":{"x":24690.764999673167,"y":31544.714097319156},"targetPosition":{"x":24777.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"4ad61724-9dc4-4bd6-a0a4-848df3d56fcf","savedPayload":{"position":{"x":24766.764999673167,"y":31696.714097319156},"targetPosition":{"x":24777.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"1514edc9-2ecb-42c6-ae80-b4df8ae34014","savedPayload":{"position":{"x":24777.764999673167,"y":31637.714097319156},"targetPosition":{"x":24805.764999673167,"y":31737.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"951c6b0a-037e-4045-a67f-6ff12007c9e1","savedPayload":{"position":{"x":24807.764999673167,"y":31718.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"8203a40b-ceec-4b70-9b5a-cce4743e00e2","savedPayload":{"position":{"x":24794.764999673167,"y":31725.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"e99c26c7-e419-440e-bbbf-f6cf457e8526","savedPayload":{"position":{"x":24924.764999673167,"y":31694.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"b7769657-59b9-41b9-a2c5-3c847f379378","savedPayload":{"position":{"x":24740.764999673167,"y":31747.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"a2fcc019-041f-4798-a040-08a2de71fb4f","savedPayload":{"position":{"x":24829.764999673167,"y":31779.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"ef95b2c3-9c0b-4bf2-aab4-16249d9ea1bc","savedPayload":{"position":{"x":24842.764999673167,"y":31842.714097319156},"targetPosition":{"x":24830.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"9c91142e-1ae4-4b4e-8af8-92a753e0eca1","savedPayload":{"position":{"x":24830.764999673167,"y":31769.714097319156},"targetPosition":{"x":24805.764999673167,"y":31737.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6eb7959f-0278-4deb-a91f-b217ee466945","savedPayload":{"position":{"x":24805.764999673167,"y":31737.714097319156},"targetPosition":{"x":24761.764999673167,"y":31712.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"466b5b5d-aecb-4d35-9abb-d2ba116147e9","savedPayload":{"position":{"x":24697.764999673167,"y":31900.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"4e37c936-f29d-4c23-9b37-ee68b8f152d4","savedPayload":{"position":{"x":24741.764999673167,"y":31760.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"506c1638-3e4d-4272-8211-8c968b0a93c0","savedPayload":{"position":{"x":24664.764999673167,"y":31827.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"9d905374-374d-4536-aff0-3f23e6eb0a53","savedPayload":{"position":{"x":24613.764999673167,"y":31735.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"28d0738c-201a-4fcc-9a01-89ce329007b3","savedPayload":{"position":{"x":24775.764999673167,"y":31848.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"3d6b154f-b5f0-45a8-ba7f-511ff1dbef89","savedPayload":{"position":{"x":24750.764999673167,"y":31890.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"e6929115-1e2e-4fbb-adf6-d62189c45b18","savedPayload":{"position":{"x":24713.764999673167,"y":31747.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"df1c866c-83d8-4b5b-a8e1-83ca458ac6c8","savedPayload":{"position":{"x":24786.764999673167,"y":31724.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"bfe5dcb5-6ecd-41d7-acb8-6d44db8dc7d5","savedPayload":{"position":{"x":24723.764999673167,"y":31838.714097319156},"targetPosition":{"x":24704.764999673167,"y":31810.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"3ce93f12-ce14-4200-b2ee-1e8c3494d8b9","savedPayload":{"position":{"x":24704.764999673167,"y":31810.714097319156},"targetPosition":{"x":24761.764999673167,"y":31712.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"7eee31d2-8509-4c72-b73a-0b90a6c95257","savedPayload":{"position":{"x":24863.764999673167,"y":31783.714097319156},"targetPosition":{"x":24796.764999673167,"y":31706.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"1cdc1b51-e529-43d4-8bdc-ad048d56fa80","savedPayload":{"position":{"x":24773.764999673167,"y":31696.714097319156},"targetPosition":{"x":24796.764999673167,"y":31706.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"b6797416-a974-4061-8fa7-50c018ef3981","savedPayload":{"position":{"x":24883.764999673167,"y":31694.714097319156},"targetPosition":{"x":24808.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"2d24771a-7ee9-428c-b3a9-1c9652276cdf","savedPayload":{"position":{"x":24736.764999673167,"y":31605.714097319156},"targetPosition":{"x":24808.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"fbe57855-e8a0-4ce2-b040-d7500eaebaaf","savedPayload":{"position":{"x":24745.764999673167,"y":31567.714097319156},"targetPosition":{"x":24808.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"00868cc6-9d8f-4421-b99c-8a5b653d9dcb","savedPayload":{"position":{"x":24798.764999673167,"y":31643.714097319156},"targetPosition":{"x":24808.764999673167,"y":31648.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"b74041fc-7587-4d6e-99c9-952d56c6bb1b","savedPayload":{"position":{"x":24808.764999673167,"y":31648.714097319156},"targetPosition":{"x":24796.764999673167,"y":31706.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"49926f4a-7c5c-44de-bc91-acbf61bec928","savedPayload":{"position":{"x":24853.764999673167,"y":31813.714097319156},"targetPosition":{"x":24757.764999673167,"y":31781.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"19d4d88b-77c8-4a5b-a72a-f2f227900bd2","savedPayload":{"position":{"x":24707.764999673167,"y":31720.714097319156},"targetPosition":{"x":24757.764999673167,"y":31781.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"dbdfb022-5558-4774-9278-cf63fda76d0b","savedPayload":{"position":{"x":24754.764999673167,"y":31830.714097319156},"targetPosition":{"x":24757.764999673167,"y":31781.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"a25bca0b-e409-4bd3-9a3c-1360869ff2ee","savedPayload":{"position":{"x":24810.764999673167,"y":31843.714097319156},"targetPosition":{"x":24757.764999673167,"y":31781.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"75fe1b6a-e9da-4fbd-b23b-39250307848c","savedPayload":{"position":{"x":24757.764999673167,"y":31781.714097319156},"targetPosition":{"x":24796.764999673167,"y":31706.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"d9445b43-d20b-457c-a7df-313fa329557a","savedPayload":{"position":{"x":24860.764999673167,"y":31826.714097319156},"targetPosition":{"x":24884.764999673167,"y":31761.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"829da6bf-6254-49d3-bd9e-68ff5936c45b","savedPayload":{"position":{"x":24847.764999673167,"y":31766.714097319156},"targetPosition":{"x":24884.764999673167,"y":31761.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"5c540fff-7339-40e5-bf70-98bb2f3e96ac","savedPayload":{"position":{"x":24874.764999673167,"y":31855.714097319156},"targetPosition":{"x":24884.764999673167,"y":31761.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"865fda04-4c2d-4a41-a67c-66e37e30ad4e","savedPayload":{"position":{"x":24964.764999673167,"y":31804.714097319156},"targetPosition":{"x":24884.764999673167,"y":31761.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"0c014440-11b7-4b2e-b40f-5fb5e5026934","savedPayload":{"position":{"x":24932.764999673167,"y":31758.714097319156},"targetPosition":{"x":24884.764999673167,"y":31761.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"1fe06bfa-cb5f-4ecb-afbc-0a5d70767596","savedPayload":{"position":{"x":24884.764999673167,"y":31761.714097319156},"targetPosition":{"x":24796.764999673167,"y":31706.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"17023ba7-69d8-4178-853b-d2917bc5cced","savedPayload":{"position":{"x":24796.764999673167,"y":31706.714097319156},"targetPosition":{"x":24761.764999673167,"y":31712.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"949e3c19-e63b-4de5-b8bd-7b83404499f3","savedPayload":{"position":{"x":24761.764999673167,"y":31712.714097319156},"targetPosition":{"x":24788.764999673167,"y":31758.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6d19feb0-301f-4135-b262-4e5128f5a4ee","savedPayload":{"position":{"x":24788.764999673167,"y":31758.714097319156},"targetPosition":{"x":24869.764999673167,"y":31793.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"0dd8263e-bf1b-423d-9d22-2de60d448f9b","savedPayload":{"position":{"x":24869.764999673167,"y":31793.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Market Sell Test","id":"8c585048-f305-4692-af06-0d9a072765de"}}},{"type":"Trading Session Reference","name":"Market Buy Test Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"ad77d5d5-6ed8-477f-a622-18ce3c2fe450","savedPayload":{"position":{"x":24885.764999673167,"y":31542.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"9953cb1c-1163-409b-a705-ca195be622cd","savedPayload":{"position":{"x":24879.764999673167,"y":31620.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"5bd4397a-ff71-45bc-8d78-48c30e1fbb47","savedPayload":{"position":{"x":24813.764999673167,"y":31558.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"dcceb724-01ad-41b8-8d36-6c66426e0cca","savedPayload":{"position":{"x":24895.764999673167,"y":31647.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"6b4c658c-682d-447d-9032-72b4c2348b83","savedPayload":{"position":{"x":24838.764999673167,"y":31579.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"42ed980c-68c3-4302-88f2-ee6c7c368f64","savedPayload":{"position":{"x":24901.764999673167,"y":31570.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"4a75a691-7370-4982-a105-c3e07b3bb2e4","savedPayload":{"position":{"x":24839.764999673167,"y":31597.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"6157b135-149f-4cd9-a30a-8effb5952912","savedPayload":{"position":{"x":24858.764999673167,"y":31603.714097319156},"targetPosition":{"x":24808.764999673167,"y":31621.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"3b64694e-4241-4387-b5b4-d34ccdcd8d1b","savedPayload":{"position":{"x":24808.764999673167,"y":31621.714097319156},"targetPosition":{"x":24813.764999673167,"y":31676.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"27fbd1fe-c409-44d2-bbe2-c1d660af7fa4","savedPayload":{"position":{"x":24784.764999673167,"y":31720.714097319156},"targetPosition":{"x":24861.764999673167,"y":31635.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"c24c3913-d4de-4a11-98be-5bbb6dfd08cf","savedPayload":{"position":{"x":24887.764999673167,"y":31543.714097319156},"targetPosition":{"x":24861.764999673167,"y":31635.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"ade37e1b-f3bc-438a-885d-e7008fbaa9cb","savedPayload":{"position":{"x":24861.764999673167,"y":31635.714097319156},"targetPosition":{"x":24813.764999673167,"y":31676.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"3d34c1ee-1791-4131-9f88-07fa53070a72","savedPayload":{"position":{"x":24910.764999673167,"y":31563.714097319156},"targetPosition":{"x":24854.764999673167,"y":31638.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"7abde642-8d39-4558-b7b4-986fa463eb9a","savedPayload":{"position":{"x":24916.764999673167,"y":31666.714097319156},"targetPosition":{"x":24854.764999673167,"y":31638.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"d6c885a8-dc87-4c02-b5ca-1f24b5d16f9d","savedPayload":{"position":{"x":24778.764999673167,"y":31628.714097319156},"targetPosition":{"x":24854.764999673167,"y":31638.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"cd0149c1-1fc5-45cd-9ed3-fbcae19af4fd","savedPayload":{"position":{"x":24868.764999673167,"y":31615.714097319156},"targetPosition":{"x":24854.764999673167,"y":31638.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"2bdb0b0a-a263-4b99-a217-c2d55bff1c62","savedPayload":{"position":{"x":24854.764999673167,"y":31638.714097319156},"targetPosition":{"x":24813.764999673167,"y":31676.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"d0f85c30-4e87-41cf-b653-7c3436c5a60c","savedPayload":{"position":{"x":24819.764999673167,"y":31588.714097319156},"targetPosition":{"x":24766.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"69dd97f0-c448-4f20-8f53-332aba17e578","savedPayload":{"position":{"x":24826.764999673167,"y":31557.714097319156},"targetPosition":{"x":24766.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"00a5c610-3402-44db-96d6-9269a4acef20","savedPayload":{"position":{"x":24726.764999673167,"y":31592.714097319156},"targetPosition":{"x":24766.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"3cb69492-aac5-4546-bd0e-36d4adb250b4","savedPayload":{"position":{"x":24831.764999673167,"y":31624.714097319156},"targetPosition":{"x":24766.764999673167,"y":31637.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"5247bd2f-d6d4-4412-8719-c67e8d862745","savedPayload":{"position":{"x":24766.764999673167,"y":31637.714097319156},"targetPosition":{"x":24813.764999673167,"y":31676.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"9a4a2ee5-5a97-4d9d-a18c-ecac60673368","savedPayload":{"position":{"x":24856.764999673167,"y":31561.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"df91093b-8031-4634-b560-d6f2f34199e0","savedPayload":{"position":{"x":24798.764999673167,"y":31552.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"26a4daa4-bda2-4b16-9687-9876c765a599","savedPayload":{"position":{"x":24979.764999673167,"y":31681.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"2da06c0a-e11f-45f2-8b9e-572bd50dd442","savedPayload":{"position":{"x":24815.764999673167,"y":31561.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"c653c750-8c46-4c4e-9121-f709321d638c","savedPayload":{"position":{"x":24939.764999673167,"y":31673.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"01be274a-a55b-4b96-9563-03785ff82b66","savedPayload":{"position":{"x":24901.764999673167,"y":31703.714097319156},"targetPosition":{"x":24895.764999673167,"y":31608.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"22ee64ef-c828-4d9f-8e10-2cc0e313413c","savedPayload":{"position":{"x":24895.764999673167,"y":31608.714097319156},"targetPosition":{"x":24813.764999673167,"y":31676.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3882cf1b-27ba-4202-ad7b-af7b3661a2bd","savedPayload":{"position":{"x":24813.764999673167,"y":31676.714097319156},"targetPosition":{"x":24827.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"766caf63-ffec-437d-b9a5-cc0c3609f671","savedPayload":{"position":{"x":24694.764999673167,"y":31522.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"ea8efcb0-44dd-4735-9f15-118c77adac66","savedPayload":{"position":{"x":24777.764999673167,"y":31573.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"889532ab-1a93-4946-9e28-9e7c1ba455f8","savedPayload":{"position":{"x":24814.764999673167,"y":31508.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"8d461184-fe2b-4498-9a9b-45920bd48722","savedPayload":{"position":{"x":24845.764999673167,"y":31623.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"2a95f694-9743-4611-9f84-95055c237066","savedPayload":{"position":{"x":24757.764999673167,"y":31676.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"c3868e61-bf92-4b69-a060-f1879c2670d3","savedPayload":{"position":{"x":24839.764999673167,"y":31532.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"3851fd2c-64ce-4194-add9-b27c75cc2a9f","savedPayload":{"position":{"x":24766.764999673167,"y":31662.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"c2f9e290-da48-435d-b520-4fa2a569c75f","savedPayload":{"position":{"x":24822.764999673167,"y":31609.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"b6f51286-7f8d-48e7-801d-fcb46c502180","savedPayload":{"position":{"x":24699.764999673167,"y":31614.714097319156},"targetPosition":{"x":24785.764999673167,"y":31579.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"d2d588d0-fed7-49e9-b369-37c3c80db72f","savedPayload":{"position":{"x":24785.764999673167,"y":31579.714097319156},"targetPosition":{"x":24827.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"5737ba1e-1987-46b1-8b0d-895e0be80390","savedPayload":{"position":{"x":24756.764999673167,"y":31769.714097319156},"targetPosition":{"x":24739.764999673167,"y":31728.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"8c81dac9-3f9c-4bd8-9bae-d093144101d7","savedPayload":{"position":{"x":24785.764999673167,"y":31805.714097319156},"targetPosition":{"x":24739.764999673167,"y":31728.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"6be8687e-5ea9-4a62-bf76-5aa7318ae585","savedPayload":{"position":{"x":24620.764999673167,"y":31685.714097319156},"targetPosition":{"x":24654.764999673167,"y":31661.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"a3e762bc-35fa-44d8-937d-b6bc7d167a64","savedPayload":{"position":{"x":24660.764999673167,"y":31580.714097319156},"targetPosition":{"x":24654.764999673167,"y":31661.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"96ec56aa-07db-46e5-8e47-84749c21ee6c","savedPayload":{"position":{"x":24720.764999673167,"y":31583.714097319156},"targetPosition":{"x":24654.764999673167,"y":31661.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"ccb5a20c-68bc-45ab-ad12-e90040cf31a7","savedPayload":{"position":{"x":24664.764999673167,"y":31728.714097319156},"targetPosition":{"x":24654.764999673167,"y":31661.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"fd5f90e4-faa9-4e73-8963-f693469f6ea3","savedPayload":{"position":{"x":24654.764999673167,"y":31661.714097319156},"targetPosition":{"x":24739.764999673167,"y":31728.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"656392f8-d5e2-4149-9db5-a58fc5f9fb65","savedPayload":{"position":{"x":24780.764999673167,"y":31622.714097319156},"targetPosition":{"x":24816.764999673167,"y":31653.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"b0f129f9-97f5-431d-aa14-ce8ab7dffb81","savedPayload":{"position":{"x":24865.764999673167,"y":31750.714097319156},"targetPosition":{"x":24816.764999673167,"y":31653.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"7ae3ddab-659b-43f1-b491-defe240bb75d","savedPayload":{"position":{"x":24868.764999673167,"y":31575.714097319156},"targetPosition":{"x":24816.764999673167,"y":31653.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"bf373b3e-98a7-4555-8597-b0a0d069ad40","savedPayload":{"position":{"x":24838.764999673167,"y":31645.714097319156},"targetPosition":{"x":24816.764999673167,"y":31653.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"a41d2e48-e4da-4518-adbb-be8c309b8a92","savedPayload":{"position":{"x":24816.764999673167,"y":31653.714097319156},"targetPosition":{"x":24739.764999673167,"y":31728.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"14539d08-52d2-4130-bfd6-c6f4c1549066","savedPayload":{"position":{"x":24696.764999673167,"y":31680.714097319156},"targetPosition":{"x":24682.764999673167,"y":31750.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"03c352f1-2bee-4d84-8b6a-b7854301773d","savedPayload":{"position":{"x":24608.764999673167,"y":31658.714097319156},"targetPosition":{"x":24682.764999673167,"y":31750.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"d13c2865-8cad-4ed0-8831-2f02c56279e5","savedPayload":{"position":{"x":24776.764999673167,"y":31651.714097319156},"targetPosition":{"x":24682.764999673167,"y":31750.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"d7eb0de3-356f-42ff-a00a-9454894abfe2","savedPayload":{"position":{"x":24615.764999673167,"y":31845.714097319156},"targetPosition":{"x":24682.764999673167,"y":31750.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"33d93a0d-9b7f-4ff0-a635-5175d18c8f64","savedPayload":{"position":{"x":24655.764999673167,"y":31792.714097319156},"targetPosition":{"x":24682.764999673167,"y":31750.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"722dec93-94b9-4cdb-8ac6-8697bdc7ae16","savedPayload":{"position":{"x":24682.764999673167,"y":31750.714097319156},"targetPosition":{"x":24739.764999673167,"y":31728.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1611b97c-ee37-4ee7-ad56-dbd2475ea518","savedPayload":{"position":{"x":24739.764999673167,"y":31728.714097319156},"targetPosition":{"x":24827.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b8215e8c-43c1-4c5b-8647-520fa57e0a60","savedPayload":{"position":{"x":24827.764999673167,"y":31639.714097319156},"targetPosition":{"x":24811.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7dd03b09-b76e-4ac7-93da-640b4f81b7be","savedPayload":{"position":{"x":24811.764999673167,"y":31719.714097319156},"targetPosition":{"x":24857.764999673167,"y":31784.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"3a5bcf2c-e639-4bcf-ba32-322ca9e22ce0","savedPayload":{"position":{"x":24857.764999673167,"y":31784.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Market Buy Test","id":"3f545550-752e-4653-8265-3bbf1fb481ef"}}},{"type":"Trading Session Reference","name":"Limit Sell Test Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"6e259543-d2e4-4d9a-ba1a-fc890aaa32a5","savedPayload":{"position":{"x":24930.764999673167,"y":31868.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"c74b3baa-824d-4ce4-a45e-b6cf32859d0e","savedPayload":{"position":{"x":24948.764999673167,"y":31953.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"39fe54ff-37d8-4140-a079-4c512631023d","savedPayload":{"position":{"x":25031.764999673167,"y":31953.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"57b21c5c-104b-4607-88da-a8c358fed8ab","savedPayload":{"position":{"x":24901.764999673167,"y":31956.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"455e80be-0a6c-4775-acb3-0efdb0bcfc02","savedPayload":{"position":{"x":25046.764999673167,"y":31903.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"8673be20-a5cb-4392-bbb3-472f22640c61","savedPayload":{"position":{"x":25031.764999673167,"y":31828.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"d23eb0f6-00d5-440e-9916-4df45026f8b7","savedPayload":{"position":{"x":24990.764999673167,"y":31951.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"e72e35e6-aef7-4ffc-8421-c2d71b0436b6","savedPayload":{"position":{"x":24913.764999673167,"y":31931.714097319156},"targetPosition":{"x":24966.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"a4aba4b5-e5de-46e0-aa5c-959f619a4fef","savedPayload":{"position":{"x":24966.764999673167,"y":31885.714097319156},"targetPosition":{"x":25020.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"79a005f0-3931-4160-bfdb-67dcce3288b8","savedPayload":{"position":{"x":24965.764999673167,"y":31779.714097319156},"targetPosition":{"x":24925.764999673167,"y":31856.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"6f7fdbf1-0cb8-4aa8-b18b-2c0998463fe6","savedPayload":{"position":{"x":25006.764999673167,"y":31835.714097319156},"targetPosition":{"x":24925.764999673167,"y":31856.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"a8554fe6-81d7-430b-a545-4de8f8e382ea","savedPayload":{"position":{"x":24925.764999673167,"y":31856.714097319156},"targetPosition":{"x":25020.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"01ab6e88-fe83-447e-ba50-88da1c8fddfa","savedPayload":{"position":{"x":24935.764999673167,"y":31866.714097319156},"targetPosition":{"x":24984.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"1d1b6643-9123-4b2c-946e-c81f22c58195","savedPayload":{"position":{"x":25066.764999673167,"y":31811.714097319156},"targetPosition":{"x":24984.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"758df5f1-6c16-45af-98c2-3a969600300c","savedPayload":{"position":{"x":24995.764999673167,"y":31866.714097319156},"targetPosition":{"x":24984.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"71f89d6d-9524-4c3e-b494-734301ebdc18","savedPayload":{"position":{"x":24978.764999673167,"y":31953.714097319156},"targetPosition":{"x":24984.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"674d167b-6f15-4bf1-96d0-ee5cdcc4737c","savedPayload":{"position":{"x":24984.764999673167,"y":31893.714097319156},"targetPosition":{"x":25020.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"3225c507-45b3-4912-ab4d-2d685d755f92","savedPayload":{"position":{"x":24966.764999673167,"y":31825.714097319156},"targetPosition":{"x":25020.764999673167,"y":31923.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"1bd25618-c4ed-40f9-a841-c239c65b773e","savedPayload":{"position":{"x":25088.764999673167,"y":31990.714097319156},"targetPosition":{"x":25020.764999673167,"y":31923.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"b811a8fe-57c8-4de9-a1ee-bc372d6240ea","savedPayload":{"position":{"x":25021.764999673167,"y":31829.714097319156},"targetPosition":{"x":25020.764999673167,"y":31923.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"d7ab5b88-5cb0-460f-a16c-54456c54013f","savedPayload":{"position":{"x":24941.764999673167,"y":31881.714097319156},"targetPosition":{"x":25020.764999673167,"y":31923.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"0b6b7606-75e8-4d2a-9db1-f836f7d194ab","savedPayload":{"position":{"x":25020.764999673167,"y":31923.714097319156},"targetPosition":{"x":25020.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"d409a810-1017-4699-8985-ce14dc39d2d9","savedPayload":{"position":{"x":24926.764999673167,"y":31834.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"1c577265-65fd-4a91-af62-bb819a2a89be","savedPayload":{"position":{"x":24974.764999673167,"y":31844.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"edc68552-549e-4c9d-ac7d-f709f507a468","savedPayload":{"position":{"x":25015.764999673167,"y":31844.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"586f236c-1b7c-4556-b5e1-ff1fa16f0a88","savedPayload":{"position":{"x":24831.764999673167,"y":31909.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"b4da3c6a-6aa1-45af-81d7-c44f48317818","savedPayload":{"position":{"x":24933.764999673167,"y":31932.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"387ec369-fc16-43af-9f14-9cb1fc9f6532","savedPayload":{"position":{"x":24894.764999673167,"y":31849.714097319156},"targetPosition":{"x":24927.764999673167,"y":31891.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"c3278eba-7b6b-4a61-9215-fa5d160148a3","savedPayload":{"position":{"x":24927.764999673167,"y":31891.714097319156},"targetPosition":{"x":25020.764999673167,"y":31893.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"21c483cf-2c57-4636-bf0c-f1855e6c4f0f","savedPayload":{"position":{"x":25020.764999673167,"y":31893.714097319156},"targetPosition":{"x":24987.764999673167,"y":31888.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"41db05a2-c262-482d-a0b8-4a80631e6c85","savedPayload":{"position":{"x":24897.764999673167,"y":31847.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"435426fd-8775-410a-8d20-bbc7b0b8fd9f","savedPayload":{"position":{"x":24985.764999673167,"y":31961.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"54800ef1-f430-4174-8229-86a2d34bf296","savedPayload":{"position":{"x":24977.764999673167,"y":31863.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"3dfa071e-eb45-404c-88c2-0c938d326899","savedPayload":{"position":{"x":24874.764999673167,"y":31939.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"3fa69f4b-646d-4fe3-abfb-be2d420a0811","savedPayload":{"position":{"x":24940.764999673167,"y":31875.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"a34a3ae4-0ef6-4ace-ace2-d54dc33112cb","savedPayload":{"position":{"x":24949.764999673167,"y":31883.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"208ef083-1d5a-4c91-87b4-a286c9bcdf09","savedPayload":{"position":{"x":24963.764999673167,"y":31920.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"676ef37d-0bb4-4052-83ba-b64eb1a2d490","savedPayload":{"position":{"x":24952.764999673167,"y":31978.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"91f7045f-cdb1-4466-b0dc-56c6cf6c33a7","savedPayload":{"position":{"x":24860.764999673167,"y":31939.714097319156},"targetPosition":{"x":24926.764999673167,"y":31931.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"f107db82-512c-41c6-b42f-cb75f2efee6a","savedPayload":{"position":{"x":24926.764999673167,"y":31931.714097319156},"targetPosition":{"x":24987.764999673167,"y":31888.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"fd1074c4-8a95-4a47-9c89-38dc9b9908cc","savedPayload":{"position":{"x":25003.764999673167,"y":31967.714097319156},"targetPosition":{"x":24964.764999673167,"y":31968.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"802b0a87-1e13-416a-971f-50e3fb059f5f","savedPayload":{"position":{"x":25015.764999673167,"y":31916.714097319156},"targetPosition":{"x":24964.764999673167,"y":31968.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"59362fd3-0095-4f58-bc2c-e5490bfe8941","savedPayload":{"position":{"x":24978.764999673167,"y":31964.714097319156},"targetPosition":{"x":24912.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"b704efb5-f094-4666-8aae-32f228946374","savedPayload":{"position":{"x":24824.764999673167,"y":31891.714097319156},"targetPosition":{"x":24912.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"1ebc0b50-818f-4956-a2af-18aac51fb93a","savedPayload":{"position":{"x":25001.764999673167,"y":31892.714097319156},"targetPosition":{"x":24912.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"313f5162-6c8c-418d-b04b-83df35662cde","savedPayload":{"position":{"x":24987.764999673167,"y":31848.714097319156},"targetPosition":{"x":24912.764999673167,"y":31885.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"762a0088-5139-4650-90db-e2cd21fdf0bb","savedPayload":{"position":{"x":24912.764999673167,"y":31885.714097319156},"targetPosition":{"x":24964.764999673167,"y":31968.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"ae0cc8a0-72d8-403e-91f6-e2dc26e64165","savedPayload":{"position":{"x":25017.764999673167,"y":31957.714097319156},"targetPosition":{"x":24929.764999673167,"y":31940.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"0fd07957-b8aa-4760-bdea-d61eeee8e8d0","savedPayload":{"position":{"x":24974.764999673167,"y":31862.714097319156},"targetPosition":{"x":24929.764999673167,"y":31940.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"4a6acbfc-a617-439e-af0d-59ac5cb2c4e6","savedPayload":{"position":{"x":25028.764999673167,"y":31864.714097319156},"targetPosition":{"x":24929.764999673167,"y":31940.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"4a5cdf2c-d595-4da5-aff2-b69d68b33051","savedPayload":{"position":{"x":24854.764999673167,"y":31911.714097319156},"targetPosition":{"x":24929.764999673167,"y":31940.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"6a67fcd1-2763-4fd7-ad7d-3362c9d0093e","savedPayload":{"position":{"x":24929.764999673167,"y":31940.714097319156},"targetPosition":{"x":24964.764999673167,"y":31968.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"40fe4925-06ba-4173-a698-d458c8296a70","savedPayload":{"position":{"x":24938.764999673167,"y":32022.714097319156},"targetPosition":{"x":25032.764999673167,"y":32017.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"afd8744e-9bc1-4e74-82ec-cf63fcf8acb4","savedPayload":{"position":{"x":25128.764999673167,"y":31968.714097319156},"targetPosition":{"x":25032.764999673167,"y":32017.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"7311fd34-bf6d-40a4-adba-4b8b725a539d","savedPayload":{"position":{"x":25051.764999673167,"y":31954.714097319156},"targetPosition":{"x":25032.764999673167,"y":32017.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"57ee4240-9bf1-400d-994b-9fe745dad975","savedPayload":{"position":{"x":24953.764999673167,"y":31985.714097319156},"targetPosition":{"x":25032.764999673167,"y":32017.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"721d981d-8d29-40c5-8fc7-f51acce96b27","savedPayload":{"position":{"x":24954.764999673167,"y":31937.714097319156},"targetPosition":{"x":25032.764999673167,"y":32017.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"303a1607-75f7-48cc-a889-9cd0f5c89283","savedPayload":{"position":{"x":25032.764999673167,"y":32017.714097319156},"targetPosition":{"x":24964.764999673167,"y":31968.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8fb9af4d-89be-4502-8dde-143becf3121e","savedPayload":{"position":{"x":24964.764999673167,"y":31968.714097319156},"targetPosition":{"x":24987.764999673167,"y":31888.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2a994613-3f52-421b-9d57-4b58e551d867","savedPayload":{"position":{"x":24987.764999673167,"y":31888.714097319156},"targetPosition":{"x":24892.764999673167,"y":31838.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"81c73c79-6186-4c18-af77-4fab5b4f9c31","savedPayload":{"position":{"x":24892.764999673167,"y":31838.714097319156},"targetPosition":{"x":24804.764999673167,"y":31814.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"4b006cd1-ee62-49d4-a5a3-98ba6b4c47b5","savedPayload":{"position":{"x":24804.764999673167,"y":31814.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Limit Sell Test","id":"5774ae7f-f8ac-487a-b8f8-8d75b50b598c"}}},{"type":"Trading Session Reference","name":"Limit Buy Test Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"9ce6335b-8e5a-4ec2-8630-86c002567576","savedPayload":{"position":{"x":24938.764999673167,"y":31836.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"4d1cdac9-963e-4cde-8f67-b06fe19477d2","savedPayload":{"position":{"x":24824.764999673167,"y":31730.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"a3652e16-ac56-40c8-b369-24bf1708d811","savedPayload":{"position":{"x":24883.764999673167,"y":31836.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"5c878cef-548d-4e8f-b8ee-fa3fdabafe9d","savedPayload":{"position":{"x":24781.764999673167,"y":31696.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"573e494a-435c-4143-8c30-fa942c64447e","savedPayload":{"position":{"x":24865.764999673167,"y":31814.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"e05ef1da-b8f0-4856-a973-726568f5ec12","savedPayload":{"position":{"x":24799.764999673167,"y":31676.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"37658dd9-ad46-4628-866e-2c3fae48785c","savedPayload":{"position":{"x":24867.764999673167,"y":31853.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"2a51448d-afbb-4f60-a5d5-1ae4dc606aad","savedPayload":{"position":{"x":24778.764999673167,"y":31670.714097319156},"targetPosition":{"x":24851.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"5bc50c78-5327-401c-bb00-971beffdcbb9","savedPayload":{"position":{"x":24851.764999673167,"y":31766.714097319156},"targetPosition":{"x":24797.764999673167,"y":31787.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"ae74b55c-fe14-4d9e-b578-6d1b96d9d7f7","savedPayload":{"position":{"x":24682.764999673167,"y":31671.714097319156},"targetPosition":{"x":24700.764999673167,"y":31696.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"1cd1d974-0484-4bf9-82fc-5fd129b2ddc6","savedPayload":{"position":{"x":24789.764999673167,"y":31677.714097319156},"targetPosition":{"x":24700.764999673167,"y":31696.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"5b23510c-8925-40de-a353-a9cc962c9a4f","savedPayload":{"position":{"x":24700.764999673167,"y":31696.714097319156},"targetPosition":{"x":24797.764999673167,"y":31787.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"a126a15e-a3c0-4199-af5a-fccc45467467","savedPayload":{"position":{"x":24718.764999673167,"y":31636.714097319156},"targetPosition":{"x":24761.764999673167,"y":31720.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"5f360b17-c7c9-4d44-8357-e8f8d1cc9183","savedPayload":{"position":{"x":24702.764999673167,"y":31672.714097319156},"targetPosition":{"x":24761.764999673167,"y":31720.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"f94a19cf-c3b3-446e-82d3-72543db67d23","savedPayload":{"position":{"x":24685.764999673167,"y":31670.714097319156},"targetPosition":{"x":24761.764999673167,"y":31720.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"a1c047bd-e95e-469a-aac9-3d45c4157440"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"f5ca1a9c-edcb-4816-93a8-3b5f511d8ff1","savedPayload":{"position":{"x":24796.764999673167,"y":31697.714097319156},"targetPosition":{"x":24761.764999673167,"y":31720.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"11513bf1-0f23-4d79-b760-83ccebc4e1c5"}}}],"dataProductFolders":[],"id":"c9b08b5b-7813-4daf-963e-afc10856a522","savedPayload":{"position":{"x":24761.764999673167,"y":31720.714097319156},"targetPosition":{"x":24797.764999673167,"y":31787.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"1a2e1697-7f30-4609-9591-6476f3533a0a","savedPayload":{"position":{"x":24829.764999673167,"y":31879.714097319156},"targetPosition":{"x":24739.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"6020e0b8-c0eb-43cc-bd0a-ada68ab128da","savedPayload":{"position":{"x":24747.764999673167,"y":31816.714097319156},"targetPosition":{"x":24739.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"1998b08d-c14d-46df-a55b-3bcc20d2e441","savedPayload":{"position":{"x":24808.764999673167,"y":31782.714097319156},"targetPosition":{"x":24739.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"9c8ee112-1103-4fc6-a711-7b395d438e7d","savedPayload":{"position":{"x":24652.764999673167,"y":31824.714097319156},"targetPosition":{"x":24739.764999673167,"y":31832.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"f8602f64-c4cc-43ec-91d3-95315178bf65","savedPayload":{"position":{"x":24739.764999673167,"y":31832.714097319156},"targetPosition":{"x":24797.764999673167,"y":31787.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"741d5b82-bd6f-4cd6-b8c0-9abad7f6b897","savedPayload":{"position":{"x":24704.764999673167,"y":31895.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"da530ea4-3cdc-46de-94a9-73dc3deaf177","savedPayload":{"position":{"x":24622.764999673167,"y":31748.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"f8b50d22-5c67-4168-ab2e-d3e0f0e91d3c","savedPayload":{"position":{"x":24779.764999673167,"y":31807.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"dce2c843-5e57-4d57-ad65-7b08f7cab6b0","savedPayload":{"position":{"x":24661.764999673167,"y":31789.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"c0976660-4631-4a4c-b07e-6782bc3b8032","savedPayload":{"position":{"x":24769.764999673167,"y":31721.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"cbc0704e-56ff-4ef5-958f-97fe7a4dd3c9","savedPayload":{"position":{"x":24616.764999673167,"y":31866.714097319156},"targetPosition":{"x":24708.764999673167,"y":31820.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"921bf141-58e0-496a-a4d7-cd76e13b0090","savedPayload":{"position":{"x":24708.764999673167,"y":31820.714097319156},"targetPosition":{"x":24797.764999673167,"y":31787.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0b0db856-5607-4fdf-970f-ca1d223623e9","savedPayload":{"position":{"x":24797.764999673167,"y":31787.714097319156},"targetPosition":{"x":24830.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"37806527-5e9d-48a9-9cf0-c9906965b398","savedPayload":{"position":{"x":24826.764999673167,"y":32039.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"da7e242b-5e54-4745-b8db-3d1957f38751","savedPayload":{"position":{"x":24737.764999673167,"y":31871.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"7975e8f0-204d-48cf-aec0-94ea4fcf4fd9","savedPayload":{"position":{"x":24774.764999673167,"y":31937.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"b57ef622-db82-4de5-9371-9f6985bd8a5e","savedPayload":{"position":{"x":24650.764999673167,"y":31977.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"d326be60-614b-4b0f-859f-befca690e357","savedPayload":{"position":{"x":24735.764999673167,"y":31913.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"e6befd18-7d0d-4364-8621-bc79ab621457","savedPayload":{"position":{"x":24665.764999673167,"y":31897.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"c9af4f59-f4ec-4dbc-95a3-caf511e65c90","savedPayload":{"position":{"x":24659.764999673167,"y":31870.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"f44e0ea3-7b0e-43e1-aa31-0fc55a7c4050","savedPayload":{"position":{"x":24807.764999673167,"y":32007.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"d2954e89-37f5-4cdc-ac1d-0141fc01639f","savedPayload":{"position":{"x":24759.764999673167,"y":31899.714097319156},"targetPosition":{"x":24742.764999673167,"y":31947.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"66538ee7-2307-47f0-af1f-39b196c74e54","savedPayload":{"position":{"x":24742.764999673167,"y":31947.714097319156},"targetPosition":{"x":24830.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"90f6560c-dca3-4a72-990e-f1588e08f772","savedPayload":{"position":{"x":24792.764999673167,"y":31835.714097319156},"targetPosition":{"x":24739.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"85e1e4f0-55e8-469b-a97b-bdc5fb3f016c","savedPayload":{"position":{"x":24780.764999673167,"y":31955.714097319156},"targetPosition":{"x":24739.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"e042d177-41d9-4966-a61a-218a2e93c553","savedPayload":{"position":{"x":24770.764999673167,"y":31817.714097319156},"targetPosition":{"x":24728.764999673167,"y":31822.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"b7f12e52-bbc5-476c-bc6a-8515b878e78d","savedPayload":{"position":{"x":24689.764999673167,"y":31751.714097319156},"targetPosition":{"x":24728.764999673167,"y":31822.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"8aaddd9d-9831-4ae5-9bc4-a2fb790e32ef","savedPayload":{"position":{"x":24629.764999673167,"y":31912.714097319156},"targetPosition":{"x":24728.764999673167,"y":31822.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"c0eddd3a-0b62-4405-8fc0-f2ddb3ccf965","savedPayload":{"position":{"x":24712.764999673167,"y":31734.714097319156},"targetPosition":{"x":24728.764999673167,"y":31822.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"191a620a-0e26-43ed-b494-15a0ba3f7c6a","savedPayload":{"position":{"x":24728.764999673167,"y":31822.714097319156},"targetPosition":{"x":24739.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"a9d6a1b3-8827-4bf3-ae65-354432d86a97","savedPayload":{"position":{"x":24912.764999673167,"y":31804.714097319156},"targetPosition":{"x":24828.764999673167,"y":31901.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"3a202999-43e4-4a7a-bac8-294164a71ceb","savedPayload":{"position":{"x":24915.764999673167,"y":31977.714097319156},"targetPosition":{"x":24828.764999673167,"y":31901.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"9871f9d6-f731-4c6b-a284-9d2f68813255","savedPayload":{"position":{"x":24801.764999673167,"y":31863.714097319156},"targetPosition":{"x":24828.764999673167,"y":31901.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"c84d8ff0-ffa6-4af0-b2c3-2aea021a8b45","savedPayload":{"position":{"x":24895.764999673167,"y":31994.714097319156},"targetPosition":{"x":24828.764999673167,"y":31901.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"53f8785a-b3c8-4786-9948-562a94bc386b","savedPayload":{"position":{"x":24828.764999673167,"y":31901.714097319156},"targetPosition":{"x":24739.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"bd457903-5cbf-4864-8f59-79b942757011","savedPayload":{"position":{"x":24795.764999673167,"y":31768.714097319156},"targetPosition":{"x":24759.764999673167,"y":31861.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"2bbf23d0-91c9-4c90-a48e-e8d64d5c555e","savedPayload":{"position":{"x":24788.764999673167,"y":31897.714097319156},"targetPosition":{"x":24759.764999673167,"y":31861.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"2d4e810c-6df7-4c1e-a135-83b833cb7a70","savedPayload":{"position":{"x":24712.764999673167,"y":31813.714097319156},"targetPosition":{"x":24759.764999673167,"y":31861.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"5f8943df-fcd6-4f9f-9542-3eb5ef302653","savedPayload":{"position":{"x":24678.764999673167,"y":31945.714097319156},"targetPosition":{"x":24759.764999673167,"y":31861.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"b9d56d81-c0e1-4ce1-a1fa-a12e2b75fc22","savedPayload":{"position":{"x":24814.764999673167,"y":31880.714097319156},"targetPosition":{"x":24759.764999673167,"y":31861.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"4d494e08-0248-4f2f-b8f0-900a055eaa57","savedPayload":{"position":{"x":24759.764999673167,"y":31861.714097319156},"targetPosition":{"x":24739.764999673167,"y":31886.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b2ae46a8-99a6-411a-840d-27d1fc9f742a","savedPayload":{"position":{"x":24739.764999673167,"y":31886.714097319156},"targetPosition":{"x":24830.764999673167,"y":31860.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d3eaa137-7556-4631-b66e-f2b48b9ea248","savedPayload":{"position":{"x":24830.764999673167,"y":31860.714097319156},"targetPosition":{"x":24798.764999673167,"y":31769.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2cbf8f-3d92-490b-a15e-0003763d228d","savedPayload":{"position":{"x":24798.764999673167,"y":31769.714097319156},"targetPosition":{"x":24875.764999673167,"y":31766.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"a5788d11-a17f-4bef-96df-e08164b6feeb","savedPayload":{"position":{"x":24875.764999673167,"y":31766.714097319156},"targetPosition":{"x":24803.764999673167,"y":31734.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Limit Buy Test","id":"eb7cdff6-22b7-4e31-9983-4fdcdfb55d3c"}}}],"id":"dd846b66-68f3-4ce8-bfa5-9a37102136fe","savedPayload":{"position":{"x":24659.356993272086,"y":32070.149263156625},"targetPosition":{"x":24809.356993272086,"y":31810.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"f601d2a7-fada-477f-9b63-3ef7ed42d44a","savedPayload":{"position":{"x":24809.356993272086,"y":31810.341642021293},"targetPosition":{"x":24959.356993272086,"y":31550.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24959.356993272086,"y":31550.53402088596},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","exchangeLearningProducts":[],"id":"04e0bf3f-5ecc-4111-9ca4-4f84b38a5fa8","savedPayload":{"position":{"x":24819.579245385365,"y":31368.372113281384},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25109.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25259.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24959.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"Binance","config":"{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}","project":"Superalgos","assets":[{"type":"Asset","name":"Bitcoin","config":"{ \n\"codeName\": \"BTC\"\n}","project":"Superalgos","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa","savedPayload":{"position":{"x":19794.079365950267,"y":30512.325102172115},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Asset","name":"Tether","config":"{ \n\"codeName\": \"USDT\"\n}","project":"Superalgos","id":"f110bfa0-bd5b-469b-a940-4524c8688136","savedPayload":{"position":{"x":20006.21140030623,"y":30724.45713652808},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"95d2c30f-215b-486e-8119-f4eac0279575","savedPayload":{"position":{"x":19716.43365241951,"y":30802.102850058836},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"E"}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","code":"{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}","project":"Superalgos","markets":[{"type":"Market","name":"BTC/USDT","config":"{ \n\"codeName\": \"BTC/USDT\"\n}","project":"Superalgos","baseAsset":{"type":"Market Base Asset","name":"Bitcoin","project":"Superalgos","id":"1017b30d-de1b-4212-991e-9fd0a5b6c814","savedPayload":{"position":{"x":20394.079365950267,"y":30936.589170884043},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},"quotedAsset":{"type":"Market Quoted Asset","name":"Tether","project":"Superalgos","id":"705c4a67-787a-48cd-a3dc-3a557438bf0b","savedPayload":{"position":{"x":20394.079365950267,"y":31091.880597945557},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}},"id":"9a867bf0-a71d-445c-b99a-75b60bbdce09","savedPayload":{"position":{"x":20104.301618063546,"y":31014.2348844148},"targetPosition":{"x":19804.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fd80894-900e-44ac-a1a7-56c14124f7a1","savedPayload":{"position":{"x":19804.301618063546,"y":31014.2348844148},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[{"type":"Exchange Account Asset","name":"Bitcoin","project":"Superalgos","id":"ba6f3d5c-b36b-49d9-947f-392068109169","savedPayload":{"position":{"x":20508.121182548915,"y":31438.498953126727},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},{"type":"Exchange Account Asset","name":"Tether","project":"Superalgos","id":"c90be267-90f9-45ae-b225-0578adb4aad9","savedPayload":{"position":{"x":20430.475469018158,"y":31728.27670101345},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}}],"id":"8ac5c2a9-a238-48ae-ab43-0a0a95a37464","savedPayload":{"position":{"x":20218.343434662194,"y":31516.144666657485},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"Key for Live Test","config":"{ \n\"codeName\": \"\",\n\"secret\": \"\"\n}","project":"Superalgos","id":"e85bbbd6-aca8-450f-9237-788062de5761","savedPayload":{"position":{"x":20083.857113836988,"y":32018.05444890017},"targetPosition":{"x":20006.21140030623,"y":31728.27670101345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"48925cc9-f3cd-4499-8466-1338fed28a0d","savedPayload":{"position":{"x":20006.21140030623,"y":31728.27670101345},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"63794496-c94b-42f9-81cc-c588708617a6","savedPayload":{"position":{"x":19928.565686775473,"y":31438.498953126727},"targetPosition":{"x":19716.43365241951,"y":31226.366918770764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b0c1ac5-515f-44a9-b9b9-e698a9c51eac","savedPayload":{"position":{"x":19716.43365241951,"y":31226.366918770764},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b","savedPayload":{"position":{"x":19504.301618063546,"y":31014.2348844148},"targetPosition":{"x":19204.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"tutorial":{"status":"Done"}}}],"id":"e3879d63-6f8f-41a3-8ac3-0349c4361722","savedPayload":{"position":{"x":19204.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"signalsProviders":[],"id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d","savedPayload":{"position":{"x":18904.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Charting Space","name":"New Charting Space","project":"Superalgos","viewport":{"type":"Viewport","name":"New Viewport","config":"{\"zoom\":\"0.00\"}","project":"Superalgos","id":"01713f1d-91b8-44f9-9c5d-a0c12fd09037","savedPayload":{"position":{"x":19200.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"frame":{"position":{"x":32.75000000000023,"y":196.24679487179492}}}},"dashboards":[{"type":"Dashboard","name":"Testing Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Market Sell Test Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2018-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-12-31T00:00:00.000Z\"\n}","project":"Superalgos","id":"fd48bf86-8507-4fe8-b17d-f6b495c44fca","savedPayload":{"position":{"x":19172.72442754679,"y":25509.37457447483},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 0,\n \"maxValue\": 25000\n}","project":"Superalgos","id":"73bf1025-3782-4738-95c6-a61a9d8ca311","savedPayload":{"position":{"x":19152.90135800328,"y":25624.738043830785},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"65761b5f-162b-44c3-a239-eea3ff65dfd5","savedPayload":{"position":{"x":19090.439541357806,"y":25723.734031675318},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cfce2193-fff6-43f4-8f0b-a3d5da610d43","savedPayload":{"position":{"x":19623.21944801067,"y":26384.83813731838},"targetPosition":{"x":19359.57431421208,"y":26241.690509240496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3cf2a26f-448d-4786-937b-a38a31f39ae4","savedPayload":{"position":{"x":19577.186625515766,"y":26448.19688194862},"targetPosition":{"x":19359.57431421208,"y":26241.690509240496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"027f82af-aef7-42e9-9d7b-f57212ba7753","savedPayload":{"position":{"x":19359.57431421208,"y":26241.690509240496},"targetPosition":{"x":19116.8692158996,"y":26065.354933552753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c071d06e-2a90-4598-9ed2-a77ebc0db9cb","savedPayload":{"position":{"x":19054.152137939003,"y":26662.068070773716},"targetPosition":{"x":19085.5106769193,"y":26363.711502163234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"48c79ec6-e652-4fb9-b84a-75e9954dd668","savedPayload":{"position":{"x":19085.5106769193,"y":26363.711502163234},"targetPosition":{"x":19116.8692158996,"y":26065.354933552753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"741033a0-7a03-4062-b000-90584c2e8a91","savedPayload":{"position":{"x":19116.8692158996,"y":26065.354933552753},"targetPosition":{"x":18994.84822297686,"y":25791.291296259973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"48871dbb-2f95-499e-a8ea-e1c75f5cd93c","savedPayload":{"position":{"x":18994.84822297686,"y":25791.291296259973},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ed659c36-b9fa-4d71-88c9-7ba91b47546b","savedPayload":{"position":{"x":18686.806237131383,"y":25241.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"af6b126a-b204-47a9-8e9c-e5ba704d4520"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e71bbc54-9629-40f9-8652-fa1c996a317f","savedPayload":{"position":{"x":18797.806237131383,"y":25071.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"ef99feae-f842-4988-923a-306d872f2510"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a7005267-2600-46df-8e0b-5fc7657ad8eb","savedPayload":{"position":{"x":18685.806237131383,"y":25105.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"74a66c9f-4b77-4c05-81d8-4c57419acab4"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1c41189c-1be6-4dba-bb30-ee5f2163fff5","savedPayload":{"position":{"x":18786.806237131383,"y":25137.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"49bc94b6-ec53-4c14-afb7-035ccdc929f1"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"699edf12-4f69-4cf4-b09c-fdf05cbecc71","savedPayload":{"position":{"x":18761.806237131383,"y":25211.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"0030ba51-dde0-498b-83f0-24755fd86613"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c3c550f8-640a-47c0-9fd1-acbda1c05a7c","savedPayload":{"position":{"x":18637.806237131383,"y":25122.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"f72f995f-8b0b-4014-bd58-8a4924a33aa1"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d61d2f85-abdd-4cb9-ac5f-a1855a53e116","savedPayload":{"position":{"x":18736.806237131383,"y":25213.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"e7d0d5ad-b6cf-44e6-a1b6-6c59e2d41a81"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1e90b58-2ca2-4390-8bf1-0395d33ee899","savedPayload":{"position":{"x":18704.806237131383,"y":25100.35640053908},"targetPosition":{"x":18725.806237131383,"y":25156.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"ee7b0d7c-696b-4c71-a9c5-7220db1cb298"}}}],"layerFolders":[],"id":"142caa43-6275-4611-9319-a19a188c554f","savedPayload":{"position":{"x":18725.806237131383,"y":25156.35640053908},"targetPosition":{"x":18787.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4d3f6b39-b352-4fc9-8590-70a56c3ebb03","savedPayload":{"position":{"x":18849.806237131383,"y":25001.35640053908},"targetPosition":{"x":18771.806237131383,"y":25039.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"965386e7-d5ef-4680-adf9-7d5ca73777ae"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"abe5e77c-bb85-4268-9209-191b59706d85","savedPayload":{"position":{"x":18694.806237131383,"y":25081.35640053908},"targetPosition":{"x":18771.806237131383,"y":25039.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"323c9149-1d5f-4954-9a81-8a9cd7ce212b"}}}],"layerFolders":[],"id":"c7aeeeb1-132d-4f9b-9d0b-67c2a9081e37","savedPayload":{"position":{"x":18771.806237131383,"y":25039.35640053908},"targetPosition":{"x":18787.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"98bc58c9-0270-414c-a6db-28ccf6db6f84","savedPayload":{"position":{"x":18876.806237131383,"y":25048.35640053908},"targetPosition":{"x":18852.806237131383,"y":25109.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"688ae681-811a-49c6-a342-56930881155a"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4162dda9-566c-4001-8f7f-00627bce1c21","savedPayload":{"position":{"x":18812.806237131383,"y":25151.35640053908},"targetPosition":{"x":18852.806237131383,"y":25109.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"d034781e-cd52-4cf2-acda-e9536e24197f"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e037cee5-529b-4c34-9264-8285a98a1f5d","savedPayload":{"position":{"x":18886.806237131383,"y":25061.35640053908},"targetPosition":{"x":18852.806237131383,"y":25109.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"05ee0ea9-d591-4e91-8f2a-197696d6f6dd"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"861868e0-c3fe-48dc-8577-4f41d708397b","savedPayload":{"position":{"x":18860.806237131383,"y":25078.35640053908},"targetPosition":{"x":18852.806237131383,"y":25109.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"eca872d6-69ae-4fb8-8389-047a8335fd76"}}}],"layerFolders":[],"id":"2d20158c-cded-4969-89da-ebe0467152c4","savedPayload":{"position":{"x":18852.806237131383,"y":25109.35640053908},"targetPosition":{"x":18787.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9df24bac-ea1f-4c1c-be99-b60586c0714f","savedPayload":{"position":{"x":18767.806237131383,"y":25237.35640053908},"targetPosition":{"x":18781.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"5983e0eb-2454-4a58-83cd-a1befe9176f1"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d714bfa4-6e74-48bf-8b76-f69e877fab4a","savedPayload":{"position":{"x":18833.806237131383,"y":25184.35640053908},"targetPosition":{"x":18781.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"71b749aa-656f-48cb-9299-bfa6da99f567"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f28cec9d-e554-43a6-bb3e-9235f06ed6ab","savedPayload":{"position":{"x":18750.806237131383,"y":25240.35640053908},"targetPosition":{"x":18781.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"9750a7c2-6554-4c36-86af-bbb1d56c6b22"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f8243116-98db-4cfd-ae95-b7de98c0bb27","savedPayload":{"position":{"x":18863.806237131383,"y":25169.35640053908},"targetPosition":{"x":18781.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"77424f95-b4ff-4a07-b8a1-14bcd61de5fe"}}}],"layerFolders":[],"id":"28057eee-6e65-46b5-b680-6453c855b992","savedPayload":{"position":{"x":18781.806237131383,"y":25219.35640053908},"targetPosition":{"x":18787.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6ce8611f-6f10-4a99-b71b-9ee93a103b17","savedPayload":{"position":{"x":18952.806237131383,"y":25095.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"c00a29e2-b28e-4649-86d6-ad47986d9ddd"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"42ea7322-1535-4ea1-8f7d-5018aeaba4bd","savedPayload":{"position":{"x":18865.806237131383,"y":25142.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"3a696472-c9ac-4650-bdac-9d77ce332beb"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9042af20-dd50-472e-ad01-0661f3cf2357","savedPayload":{"position":{"x":18925.806237131383,"y":25136.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"3c10befe-7aa3-4871-8a62-dfabdc9402a6"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"43753b80-56ad-4a7f-a5fe-0e915cc5fe6d","savedPayload":{"position":{"x":18834.806237131383,"y":25206.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"1ccf48e3-92a3-47a0-82bd-8125c4c90c74"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"544b5e96-143c-4f98-962b-88b43ec44962","savedPayload":{"position":{"x":18906.806237131383,"y":25071.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"a8dea260-4f18-4722-876b-2f457622b395"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e4118f5d-c326-4b99-9710-f62c8b406b27","savedPayload":{"position":{"x":18802.806237131383,"y":25223.35640053908},"targetPosition":{"x":18882.806237131383,"y":25160.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"ce63db98-98f3-48f1-ac70-419e7a4f5bfa"}}}],"layerFolders":[],"id":"36222930-622d-4f64-95a8-e661f2dd8025","savedPayload":{"position":{"x":18882.806237131383,"y":25160.35640053908},"targetPosition":{"x":18787.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ccde6a6b-3c2d-4dc2-95be-bb7460ac80ea","savedPayload":{"position":{"x":18787.806237131383,"y":25122.35640053908},"targetPosition":{"x":18691.806237131383,"y":25067.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3ef9ef4b-b74d-419d-8313-4476cd45b32b","savedPayload":{"position":{"x":18691.806237131383,"y":25067.35640053908},"targetPosition":{"x":18719.806237131383,"y":24971.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"886c629a-7598-48f8-8856-420c78848af0","savedPayload":{"position":{"x":18719.806237131383,"y":24971.35640053908},"targetPosition":{"x":18799.806237131383,"y":24956.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"fba09d91-41fb-49a4-9977-a5bf12d5f1a4"}}},"id":"982174ef-7070-421b-9e84-d65c77e60708","savedPayload":{"position":{"x":18880.680314546484,"y":25817.12485645986},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0a83a0c7-5e5d-4c8f-ac69-54c6e2faeb08","savedPayload":{"position":{"x":18809.806237131383,"y":25052.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"eefe8b78-10db-46ba-9863-895706328ee7"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"87fde0e2-8f16-4130-a44b-7934b94ad433","savedPayload":{"position":{"x":18786.806237131383,"y":25149.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"980e5d66-63db-4e63-b2c0-ee4551b5344e"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"74fe56a5-3c50-470e-bced-1405a5d0686c","savedPayload":{"position":{"x":18700.806237131383,"y":25060.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"e17b0598-6ff5-4716-8522-6cb67a786865"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1c7d6139-20d5-44c3-93f4-57cfc550a11a","savedPayload":{"position":{"x":18787.806237131383,"y":25129.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"95a42e51-55d0-4e78-bb63-b11de81f5cc1"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5b91e4be-8796-4abb-8e7a-69d21e56e8df","savedPayload":{"position":{"x":18819.806237131383,"y":25083.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"27f0cc56-9a90-4644-9cd1-eef62cbba87f"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"81fc84c2-f511-4adf-98ff-953cf040b5f5","savedPayload":{"position":{"x":18770.806237131383,"y":25133.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"1886e205-549d-495d-84ef-c87b624727af"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5b493261-47a0-41b7-a748-1b2bb19c06d6","savedPayload":{"position":{"x":18777.806237131383,"y":25207.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"30f1b15b-a576-42b7-9a1a-46f2f7d43f31"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7c06f4bd-01b0-4472-8929-f07d91723f3b","savedPayload":{"position":{"x":18799.806237131383,"y":25169.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"8f8b3b04-bdde-4f94-bccd-ad8a621373d3"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7737953d-3bce-4106-b637-198b7b8cb02e","savedPayload":{"position":{"x":18870.806237131383,"y":25170.35640053908},"targetPosition":{"x":18799.806237131383,"y":25147.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"94dadfff-8842-45f2-9f08-c05b174470d6"}}}],"layerFolders":[],"id":"5e8e426e-5a3a-4b71-ac11-f951e69f9e80","savedPayload":{"position":{"x":18799.806237131383,"y":25147.35640053908},"targetPosition":{"x":18830.806237131383,"y":25205.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f3532726-8039-4d44-883c-9b332ed84ef4","savedPayload":{"position":{"x":18830.806237131383,"y":25205.35640053908},"targetPosition":{"x":18851.806237131383,"y":25138.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35b4001e-c848-4cd6-804a-0590e495a283","savedPayload":{"position":{"x":18851.806237131383,"y":25138.35640053908},"targetPosition":{"x":18785.806237131383,"y":25054.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"fba09d91-41fb-49a4-9977-a5bf12d5f1a4"}}},"id":"de916aed-bef5-4f16-8bcc-6abc94deb2df","savedPayload":{"position":{"x":18765.31684519053,"y":25797.301786916352},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"760a17f3-5716-4766-88fb-416437b96d4d","savedPayload":{"position":{"x":18675.806237131383,"y":25207.35640053908},"targetPosition":{"x":18737.806237131383,"y":25143.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"933c72cd-e04a-4170-950f-5148bd94e226"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2a3df873-d3e0-4d7e-9db8-7a7a207daa14","savedPayload":{"position":{"x":18834.806237131383,"y":25187.35640053908},"targetPosition":{"x":18737.806237131383,"y":25143.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"dbea46ed-0328-4163-8569-3cf74b7d4f46"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5dd4f15d-589a-407c-8156-3c978bdbb6f3","savedPayload":{"position":{"x":18614.806237131383,"y":25043.35640053908},"targetPosition":{"x":18686.806237131383,"y":25078.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"2f1e63d1-a8f1-4648-a575-2a9980cf84ec"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4d4bb48a-4d3c-4d7e-ab60-c235ccd6e879","savedPayload":{"position":{"x":18692.806237131383,"y":25044.35640053908},"targetPosition":{"x":18686.806237131383,"y":25078.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"5cd4661f-9a23-4f17-ad87-1379b927f84a"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"aeb14b73-4c7e-49c8-80ee-835f676079e0","savedPayload":{"position":{"x":18676.806237131383,"y":25143.35640053908},"targetPosition":{"x":18686.806237131383,"y":25078.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"5c29fbdc-068f-461c-8c04-cc79673eaaa1"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"973fb890-d94c-48c2-9ec8-f7bd3fc4aaae","savedPayload":{"position":{"x":18618.806237131383,"y":25065.35640053908},"targetPosition":{"x":18686.806237131383,"y":25078.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"866deeb2-93c8-4d20-abd0-1c99dcca6a86"}}}],"layerFolders":[],"id":"e4e8d919-e4eb-41b0-a66c-a9154fb0273e","savedPayload":{"position":{"x":18686.806237131383,"y":25078.35640053908},"targetPosition":{"x":18737.806237131383,"y":25143.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a4b44983-245b-4d53-8fa5-2e0c0e0f382f","savedPayload":{"position":{"x":18696.806237131383,"y":25222.35640053908},"targetPosition":{"x":18742.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"eb7cfbfb-9cb8-4664-afd1-b24194e8b54f"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bea812b6-59ad-44f8-8bc1-a2e7af524136","savedPayload":{"position":{"x":18668.806237131383,"y":25207.35640053908},"targetPosition":{"x":18742.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"7429411a-9974-4771-92b4-8bfb6c63689b"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"57de7ad8-f9ad-44d9-af94-441bfb6bcba4","savedPayload":{"position":{"x":18762.806237131383,"y":25056.35640053908},"targetPosition":{"x":18742.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"17d5ede0-5c0a-4c42-a1cc-c986499cc283"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9a3d685f-2c2a-4adf-8635-f9f20d075ab9","savedPayload":{"position":{"x":18707.806237131383,"y":25146.35640053908},"targetPosition":{"x":18742.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"58734733-132e-469e-9e46-1c82d1ad1882"}}}],"layerFolders":[],"id":"744e4a5f-5e1e-4aaf-b787-c3031fcd7233","savedPayload":{"position":{"x":18742.806237131383,"y":25127.35640053908},"targetPosition":{"x":18737.806237131383,"y":25143.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"89e964d6-d478-436c-9d71-baac89621ba0","savedPayload":{"position":{"x":18843.806237131383,"y":25157.35640053908},"targetPosition":{"x":18805.806237131383,"y":25071.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"efd89151-ac6e-4e21-969d-d24a4e1a9990"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e2327aea-0657-4171-ade5-2a0cf120f300","savedPayload":{"position":{"x":18777.806237131383,"y":25037.35640053908},"targetPosition":{"x":18805.806237131383,"y":25071.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"4e7a96f8-2e26-41f5-a17b-6cde0fcbf21b"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ced2f038-8abf-4358-b721-2980f03f2b1f","savedPayload":{"position":{"x":18837.806237131383,"y":25164.35640053908},"targetPosition":{"x":18805.806237131383,"y":25071.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"ca18284e-b483-4c84-925c-73f2d132c4b9"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"34d7fb4f-8404-4f0f-aca1-444fb2aeef6a","savedPayload":{"position":{"x":18724.806237131383,"y":25084.35640053908},"targetPosition":{"x":18805.806237131383,"y":25071.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"c69f708f-6cb6-435e-9eab-54cf797932ec"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1d957e9c-f859-44e5-8eb1-eae191c3cbaf","savedPayload":{"position":{"x":18794.806237131383,"y":25095.35640053908},"targetPosition":{"x":18805.806237131383,"y":25071.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"ce144ccb-3422-468d-8b6d-59ca0980de69"}}}],"layerFolders":[],"id":"875e4071-612a-431e-81da-ec595a5f2f67","savedPayload":{"position":{"x":18805.806237131383,"y":25071.35640053908},"targetPosition":{"x":18737.806237131383,"y":25143.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89b5ee51-8d62-4f24-8d31-5297384f6854","savedPayload":{"position":{"x":18737.806237131383,"y":25143.35640053908},"targetPosition":{"x":18783.806237131383,"y":25096.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ffb952a8-c5ae-4240-84c6-523764a12ad1","savedPayload":{"position":{"x":18783.806237131383,"y":25096.35640053908},"targetPosition":{"x":18706.806237131383,"y":25088.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3becb931-1fc3-4e5b-8474-2d9492cb163f","savedPayload":{"position":{"x":18706.806237131383,"y":25088.35640053908},"targetPosition":{"x":18711.806237131383,"y":25005.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"fba09d91-41fb-49a4-9977-a5bf12d5f1a4"}}},"id":"3797c12a-022a-4b98-a32e-9c84032102e8","savedPayload":{"position":{"x":18666.320857345996,"y":25734.839970270878},"targetPosition":{"x":18872.82723005412,"y":25517.227658967193},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8673e5a0-19e4-4896-81d5-de2961660f37","savedPayload":{"position":{"x":18872.82723005412,"y":25517.227658967193},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":0},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"Market Sell Test","id":"5e233824-4d50-47c2-a3e6-d15fd0efb0eb"}}},{"type":"Time Machine","name":"Market Buy Test Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2018-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-12-31T00:00:00.000Z\"\n}","project":"Superalgos","id":"0c9699f0-2a81-4dc3-b003-96cad3ceb73c","savedPayload":{"position":{"x":18935.67058647266,"y":25706.530172972005},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 0,\n \"maxValue\": 25000\n}","project":"Superalgos","id":"7efa4da0-9ec1-4e2b-826a-8ec2c4e941e9","savedPayload":{"position":{"x":18851.824440390563,"y":25788.20947227818},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"bb1e7332-aa11-4f79-91a5-bfa446e6e141","savedPayload":{"position":{"x":18743.103387533698,"y":25831.58477416374},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a2d3b44a-a22d-4df5-be38-acf4b5eeb2e0","savedPayload":{"position":{"x":18785.544142750372,"y":26679.589402528338},"targetPosition":{"x":18656.390813707883,"y":26408.81381722338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8348c9d1-93e6-4502-abfc-cf14f3f410fc","savedPayload":{"position":{"x":18711.061471355526,"y":26703.79028949257},"targetPosition":{"x":18656.390813707883,"y":26408.81381722338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"c2a83c21-0792-4107-9c71-79a3278c277b","savedPayload":{"position":{"x":18656.390813707883,"y":26408.81381722338},"targetPosition":{"x":18563.6857153954,"y":26123.496862334836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cd0e7b8b-89fe-4e02-b6b9-21487138450c","savedPayload":{"position":{"x":18162.207351580084,"y":26569.38375762127},"targetPosition":{"x":18362.946533487742,"y":26346.440309978054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"ec58c0d6-5125-4728-8fad-4cf0c5f6b8fe","savedPayload":{"position":{"x":18362.946533487742,"y":26346.440309978054},"targetPosition":{"x":18563.6857153954,"y":26123.496862334836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cf5576aa-03e3-4c73-9287-a876e7ee673c","savedPayload":{"position":{"x":18563.6857153954,"y":26123.496862334836},"targetPosition":{"x":18626.059222640728,"y":25830.052582114695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"0188d46e-d080-4231-b757-ffbc59dbf12b","savedPayload":{"position":{"x":18626.059222640728,"y":25830.052582114695},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ee8e8270-0f24-4093-8d66-50253115472f","savedPayload":{"position":{"x":18839.806237131383,"y":24891.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"550342f6-6715-46f1-aaeb-3666f37efef8"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d7be8e1b-e4cc-4c11-8aad-16de3249e4f4","savedPayload":{"position":{"x":18961.806237131383,"y":24954.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"62ebd86b-9279-45cf-b7da-8809cbbcdd80"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e13630c2-4db9-4b73-b7a0-6efd09cb0531","savedPayload":{"position":{"x":18931.806237131383,"y":24976.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"6c10c907-ec86-4889-9b0d-500845fc0833"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d9bdded1-57a8-4a32-a7d4-b1e5a29b963d","savedPayload":{"position":{"x":18858.806237131383,"y":24906.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"97e6a200-5a2f-45d9-9e7a-59edc99def54"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bb8922a9-5f25-4da5-b5e3-2f06d21d938f","savedPayload":{"position":{"x":18858.806237131383,"y":25040.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"75d87172-a3b9-4eb2-a336-03fc418d1c33"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eb767725-5a37-4c1e-91a3-5508ef4040d9","savedPayload":{"position":{"x":18895.806237131383,"y":25036.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"bff11528-db57-4386-809a-4dd0626a95ba"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"78065a9b-475e-469f-bf8b-947ed0d6de1d","savedPayload":{"position":{"x":18878.806237131383,"y":25079.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"95d0517f-bd59-4d48-a499-9212b29b18ea"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f4a714f9-93fc-4a0c-a730-c5e579d3afb9","savedPayload":{"position":{"x":18882.806237131383,"y":25048.35640053908},"targetPosition":{"x":18896.806237131383,"y":24981.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"c57df2e2-5def-4f07-be71-f28df93888eb"}}}],"layerFolders":[],"id":"44312334-5d4a-4b17-a024-05295e0b37f0","savedPayload":{"position":{"x":18896.806237131383,"y":24981.35640053908},"targetPosition":{"x":18869.806237131383,"y":25063.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"efbcfd68-e4e3-4ca5-a8fb-ad6bbc1812c8","savedPayload":{"position":{"x":18956.806237131383,"y":25132.35640053908},"targetPosition":{"x":18956.806237131383,"y":25036.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"5733e6d8-1d24-477a-865b-7dff22e7d1bc"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1c7c9a92-4bf8-4de3-8ffd-49601a1d49a3","savedPayload":{"position":{"x":18956.806237131383,"y":25119.35640053908},"targetPosition":{"x":18956.806237131383,"y":25036.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"eff6f8c6-a7d2-4d2a-ad30-3025292c74c0"}}}],"layerFolders":[],"id":"53376817-9e22-48ce-aeae-99844dfed645","savedPayload":{"position":{"x":18956.806237131383,"y":25036.35640053908},"targetPosition":{"x":18869.806237131383,"y":25063.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1d211782-683e-4c10-a514-eaefbda2844e","savedPayload":{"position":{"x":18720.806237131383,"y":25051.35640053908},"targetPosition":{"x":18775.806237131383,"y":25066.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"e52bf25c-61eb-4730-b7a8-533128e0d9c8"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8b6748b9-a9e4-4dc7-abc6-c2e521c21a5c","savedPayload":{"position":{"x":18750.806237131383,"y":25103.35640053908},"targetPosition":{"x":18775.806237131383,"y":25066.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"01d88f4e-80b5-475e-981d-252e11e72d49"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"77583449-1cc9-4fb4-a1cd-1f2f40fdf5b9","savedPayload":{"position":{"x":18706.806237131383,"y":25083.35640053908},"targetPosition":{"x":18775.806237131383,"y":25066.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"3b053fc9-fbaa-4034-b5c4-2eb7b87d1fa0"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0e1a47ec-5b53-4165-9cb9-ab12a8a43c1b","savedPayload":{"position":{"x":18860.806237131383,"y":25162.35640053908},"targetPosition":{"x":18775.806237131383,"y":25066.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"284180bf-7b70-4fbf-87ab-8595390cb810"}}}],"layerFolders":[],"id":"eed14289-2344-42e8-85c9-90e0e0f50b7e","savedPayload":{"position":{"x":18775.806237131383,"y":25066.35640053908},"targetPosition":{"x":18869.806237131383,"y":25063.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2a3422b2-956b-4916-9489-e17a591d5ed6","savedPayload":{"position":{"x":18830.806237131383,"y":25050.35640053908},"targetPosition":{"x":18878.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"46e1fa7d-bf6f-413b-8d2d-8c5b9538dd2d"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b1a7b225-1558-419c-a8b1-573858bb0a73","savedPayload":{"position":{"x":18950.806237131383,"y":25033.35640053908},"targetPosition":{"x":18878.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"ecdf2259-dd0e-432f-accb-d61861c4db45"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"75e4fe6b-ae57-44ca-bd5a-48d76de53ec5","savedPayload":{"position":{"x":18799.806237131383,"y":25117.35640053908},"targetPosition":{"x":18878.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"03081d41-68db-4c1b-9f18-9d23133f79a9"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"03a7568b-3705-4782-8c98-5e82c066f28e","savedPayload":{"position":{"x":18823.806237131383,"y":25126.35640053908},"targetPosition":{"x":18878.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"5103d516-1d1a-4727-83cb-0655d4c4c030"}}}],"layerFolders":[],"id":"d31a6dc2-39aa-4d9a-b550-29820f9ae6a6","savedPayload":{"position":{"x":18878.806237131383,"y":25037.35640053908},"targetPosition":{"x":18869.806237131383,"y":25063.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"264e7306-9c74-4d51-b786-cc4d37bcf971","savedPayload":{"position":{"x":18959.806237131383,"y":24963.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"ae7fe8f4-1256-40a2-a07e-d8f14e74a345"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eac81b63-fbe9-4be2-92e8-9bb3e4ad4c06","savedPayload":{"position":{"x":18780.806237131383,"y":25110.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"283eb566-8436-42fc-a97d-e15838f93e5e"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4d3db6a6-ac09-4a9f-b819-55388ba9ad06","savedPayload":{"position":{"x":18876.806237131383,"y":24973.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"068174df-082e-4f6c-aac4-9ea422147ec5"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5e7e8624-54af-4717-9e06-badfb79564b5","savedPayload":{"position":{"x":18857.806237131383,"y":24926.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"55b13a0d-35fe-4f71-b81b-b59fc06a68bd"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dd1d7923-55eb-4f94-9b1b-5347e64441cb","savedPayload":{"position":{"x":18959.806237131383,"y":25027.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"91494b7f-170d-483f-9e6b-10a2436359c8"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dd22a2a7-7317-412b-ad50-67239ec537f3","savedPayload":{"position":{"x":18833.806237131383,"y":25089.35640053908},"targetPosition":{"x":18864.806237131383,"y":25023.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"237aca5c-ab63-44ac-80c6-46a692bd900b"}}}],"layerFolders":[],"id":"c4e96f13-0d90-4ca5-a674-9b89bcde4364","savedPayload":{"position":{"x":18864.806237131383,"y":25023.35640053908},"targetPosition":{"x":18869.806237131383,"y":25063.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"df851934-5cad-46a0-a86f-4c35e1853baa","savedPayload":{"position":{"x":18869.806237131383,"y":25063.35640053908},"targetPosition":{"x":18785.806237131383,"y":24968.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3f99af4d-ae8e-4fac-988d-06a0b670f387","savedPayload":{"position":{"x":18785.806237131383,"y":24968.35640053908},"targetPosition":{"x":18850.806237131383,"y":25003.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9be9aaea-c9a1-4a25-83f9-5efafc45b9b1","savedPayload":{"position":{"x":18850.806237131383,"y":25003.35640053908},"targetPosition":{"x":18861.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"90ca4269-c0b7-4fac-b796-0260aab60fad"}}},"id":"f8f4ba7b-854f-4395-b0dd-c40711e5d76c","savedPayload":{"position":{"x":18518.510858808604,"y":25783.84615848116},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dab951a1-3944-4a28-9a84-7b6ecfbf568e","savedPayload":{"position":{"x":19105.806237131383,"y":25155.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"8c893439-66a9-4666-ba68-37aa8f60086d"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"efa63e28-71a9-454b-bf54-3116e579cc17","savedPayload":{"position":{"x":19066.806237131383,"y":25184.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"0aba9134-b5d2-4bf2-a0e8-75ee3add3d39"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"638530f5-849f-4d29-aedf-4d3a60bc8990","savedPayload":{"position":{"x":19142.806237131383,"y":25216.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"2246e50f-cc4e-46f3-971f-1e903ac4140f"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"093747ed-1392-4166-a990-c40aac5a4bb5","savedPayload":{"position":{"x":19059.806237131383,"y":25128.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"0b72c894-19b9-4c11-9b76-403a2d20fa0d"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ad0ba50a-1521-400a-9bec-7adc9ed8dac7","savedPayload":{"position":{"x":19026.806237131383,"y":25199.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"7a6759c3-796f-449f-9eeb-8edb00a3fba5"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c98577cd-406c-4199-a639-823775b5841a","savedPayload":{"position":{"x":19003.806237131383,"y":25061.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"02be1e52-f10d-4e47-ab7a-1b689fd7e9e8"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"50fefb1d-6e1b-434a-8a14-0d4ba74781aa","savedPayload":{"position":{"x":19052.806237131383,"y":25177.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"990a64ed-e3c4-4225-8af0-ade63df03bdb"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"55a9489f-0161-4629-941a-a7c4d7d21224","savedPayload":{"position":{"x":19013.806237131383,"y":25033.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"5f61fe7d-1abf-4a1c-bbde-901256f0e8a3"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"20c3e752-496f-41c3-a51b-fe28747538cb","savedPayload":{"position":{"x":19105.806237131383,"y":25199.35640053908},"targetPosition":{"x":19099.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"64c5e5fe-f0e5-47ff-966e-c640c15b98af"}}}],"layerFolders":[],"id":"4c589cb0-0860-456f-95a7-b16292f2a881","savedPayload":{"position":{"x":19099.806237131383,"y":25126.35640053908},"targetPosition":{"x":19025.806237131383,"y":25206.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1b5b980b-84d0-4f36-8eb3-ecc3c63177f3","savedPayload":{"position":{"x":19025.806237131383,"y":25206.35640053908},"targetPosition":{"x":18977.806237131383,"y":25138.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9ca6089c-b716-4d7e-933e-1741223d38a2","savedPayload":{"position":{"x":18977.806237131383,"y":25138.35640053908},"targetPosition":{"x":18961.806237131383,"y":25053.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"90ca4269-c0b7-4fac-b796-0260aab60fad"}}},"id":"e6e88517-b26f-45f3-aa9f-86e9462d7840","savedPayload":{"position":{"x":18436.83155950243,"y":25700.00001239906},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"74365b5c-ed22-404f-a681-d02d26429a3d","savedPayload":{"position":{"x":18972.806237131383,"y":24961.35640053908},"targetPosition":{"x":18981.806237131383,"y":25033.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"6dd171bd-3714-4145-b325-8a419b0fa0d7"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"95a81224-0773-4e41-8a73-dc1cbbde24da","savedPayload":{"position":{"x":19065.806237131383,"y":24945.35640053908},"targetPosition":{"x":18981.806237131383,"y":25033.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"67c61a1d-55cb-4f84-ba77-592d1c866bd9"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b9b5c6b7-725a-4167-afe6-30b94163e0cd","savedPayload":{"position":{"x":18880.806237131383,"y":25179.35640053908},"targetPosition":{"x":18887.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"f60c55be-9792-4909-a189-e166fd2d08c9"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8cbd278e-2e81-47a3-807d-c78e3728d5ae","savedPayload":{"position":{"x":18951.806237131383,"y":25071.35640053908},"targetPosition":{"x":18887.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"c5f56679-8f9d-4809-8f1a-294637eece1a"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1b8862dc-8649-4572-8fc7-4a0360d23128","savedPayload":{"position":{"x":18814.806237131383,"y":25190.35640053908},"targetPosition":{"x":18887.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"a9ff72a4-5433-4a6f-960c-2ab4e0c69bcb"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"488d13fc-6cba-4fa4-acf7-d4fe9454db41","savedPayload":{"position":{"x":18885.806237131383,"y":25040.35640053908},"targetPosition":{"x":18887.806237131383,"y":25122.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"dc93a316-1485-4558-a650-59fc4e8e1470"}}}],"layerFolders":[],"id":"e3794aa2-3f70-45d4-8b49-83f1f6c0f45e","savedPayload":{"position":{"x":18887.806237131383,"y":25122.35640053908},"targetPosition":{"x":18981.806237131383,"y":25033.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"609178c7-c6ad-4efd-ba06-5ea393826b95","savedPayload":{"position":{"x":18966.806237131383,"y":25030.35640053908},"targetPosition":{"x":19048.806237131383,"y":24933.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"65eb0b72-18f8-45a0-88ab-ba2d89586570"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1db5eb8c-d273-42b7-b40a-f27b6e25d253","savedPayload":{"position":{"x":19090.806237131383,"y":24944.35640053908},"targetPosition":{"x":19048.806237131383,"y":24933.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"c662733e-90a9-4e7c-a8e6-d191e214fbae"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a9175416-a623-4ca0-92c4-4a6b6514fd0d","savedPayload":{"position":{"x":18987.806237131383,"y":24842.35640053908},"targetPosition":{"x":19048.806237131383,"y":24933.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"6e2e8516-861e-4d74-97d3-2b4a23f9ed60"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2b868f41-7928-4629-8302-c2b28af20bca","savedPayload":{"position":{"x":19057.806237131383,"y":24893.35640053908},"targetPosition":{"x":19048.806237131383,"y":24933.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"25b7412e-02d0-44e3-94ba-4a2e42ef4d31"}}}],"layerFolders":[],"id":"8709ed5a-8498-4fb3-8d59-5aab04cd50b7","savedPayload":{"position":{"x":19048.806237131383,"y":24933.35640053908},"targetPosition":{"x":18981.806237131383,"y":25033.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"744a8198-2e45-489a-9570-05de066ca452","savedPayload":{"position":{"x":18912.806237131383,"y":25103.35640053908},"targetPosition":{"x":18953.806237131383,"y":25082.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"1cc2f02b-9d9c-49ce-acbb-268358f8fb0b"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b5c179ed-307f-4749-a130-19e9aab33684","savedPayload":{"position":{"x":18900.806237131383,"y":25012.35640053908},"targetPosition":{"x":18953.806237131383,"y":25082.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"74675b71-e0b7-4558-91fb-2cdaef2cd215"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"59482c90-7b75-4f88-905e-27adc0869932","savedPayload":{"position":{"x":18977.806237131383,"y":25041.35640053908},"targetPosition":{"x":18953.806237131383,"y":25082.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"15a688ae-6d2b-4c0d-be65-6953e5a783ed"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a5035e04-41c9-4e30-af1d-24ec3e1243b5","savedPayload":{"position":{"x":18884.806237131383,"y":25101.35640053908},"targetPosition":{"x":18953.806237131383,"y":25082.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"294e1d17-dcdf-45b4-b9f8-2d33eb037254"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a1c647e1-1ca8-410f-806b-cafdd8672901","savedPayload":{"position":{"x":18950.806237131383,"y":25137.35640053908},"targetPosition":{"x":18953.806237131383,"y":25082.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"5dc59b27-a217-4621-b480-e50de4f521ee"}}}],"layerFolders":[],"id":"8fd279d9-354b-4c45-a04d-50e5bb117733","savedPayload":{"position":{"x":18953.806237131383,"y":25082.35640053908},"targetPosition":{"x":18981.806237131383,"y":25033.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3f7bbff3-40c6-4083-9718-811f52e84067","savedPayload":{"position":{"x":18981.806237131383,"y":25033.35640053908},"targetPosition":{"x":19005.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42db8fcf-64fa-493d-9758-d91a0629e4ef","savedPayload":{"position":{"x":19005.806237131383,"y":24969.35640053908},"targetPosition":{"x":18979.806237131383,"y":24962.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4f70d469-bc63-4bd9-9307-46b736aa653a","savedPayload":{"position":{"x":18979.806237131383,"y":24962.35640053908},"targetPosition":{"x":18922.806237131383,"y":24947.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"90ca4269-c0b7-4fac-b796-0260aab60fad"}}},"id":"ad32c2ab-067a-4c44-8e9a-61828358cb6b","savedPayload":{"position":{"x":18393.45625761687,"y":25591.278959542196},"targetPosition":{"x":18688.432729886055,"y":25536.608301894554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"47ae2940-cc08-482a-a157-ddf5d0393439","savedPayload":{"position":{"x":18688.432729886055,"y":25536.608301894554},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":480,"y":0},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"Market Buy Test","id":"fdcc3c62-6baf-4a43-a917-242781890f7c"}}},{"type":"Time Machine","name":"Limit Sell Test Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2018-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-12-31T00:00:00.000Z\"\n}","project":"Superalgos","id":"27f825ee-8fc3-4bb6-840b-f816d83d0a80","savedPayload":{"position":{"x":18628.004847258297,"y":25726.695650909725},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 0,\n \"maxValue\": 25000\n}","project":"Superalgos","id":"4581f97b-d56b-40d0-94a1-f5ec163c9d32","savedPayload":{"position":{"x":18512.16200261528,"y":25743.492064008442},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"dbb61c45-d6fb-408b-9f07-81cd93cac7e8","savedPayload":{"position":{"x":18398.709460445676,"y":25714.678788887028},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e3f6c2ef-e284-4456-86d2-be09cf78639a","savedPayload":{"position":{"x":17934.600138241603,"y":26425.67499455512},"targetPosition":{"x":17989.270795889246,"y":26130.698522285933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e2f06593-cd0b-4bf4-91ab-b58e03f77e22","savedPayload":{"position":{"x":17860.117466846757,"y":26401.47410759089},"targetPosition":{"x":17989.270795889246,"y":26130.698522285933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"16272619-9962-441b-ae53-1b3e9366b723","savedPayload":{"position":{"x":17989.270795889246,"y":26130.698522285933},"targetPosition":{"x":18081.97589420173,"y":25845.381567397388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fb2b8d18-b09d-4789-b3ae-19654312182d","savedPayload":{"position":{"x":17495.087333761447,"y":25970.128581888042},"targetPosition":{"x":17788.531613981588,"y":25907.755074642715},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"8176887f-6c73-494a-9ed9-ed8c0dc27029","savedPayload":{"position":{"x":17788.531613981588,"y":25907.755074642715},"targetPosition":{"x":18081.97589420173,"y":25845.381567397388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"616eb5bc-a1ee-4dcb-a7df-516fd3de265e","savedPayload":{"position":{"x":18081.97589420173,"y":25845.381567397388},"targetPosition":{"x":18304.919341844947,"y":25644.64238548973},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"dcdc6769-407c-4292-8b1e-e8deedaf02c1","savedPayload":{"position":{"x":18304.919341844947,"y":25644.64238548973},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4ffab2b4-bdb5-49c9-8847-bbc433cea8ec","savedPayload":{"position":{"x":19108.806237131383,"y":24870.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"2e5bc2ba-80b0-4cba-8450-a007347ae96f"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"174fdd56-f893-4cc6-b285-e2eb23a0dae8","savedPayload":{"position":{"x":18982.806237131383,"y":24754.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"50c36325-e155-4ca1-bdf4-fc6ea1f6af2f"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8d010500-7cb6-4fd5-8fef-13160016f936","savedPayload":{"position":{"x":19138.806237131383,"y":24807.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"cce673e9-5df4-4aca-ac37-c13dc129af3b"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c4c3f5ef-92fe-492e-b346-c08f22d6a93c","savedPayload":{"position":{"x":19047.806237131383,"y":24770.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"b421e1fd-8cd1-4313-a73a-7d55776efc56"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"adbb3eee-f552-43d9-a985-645c15ca228f","savedPayload":{"position":{"x":19035.806237131383,"y":24825.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"bf645300-9a7d-4a7e-b812-50a6aeed4bb2"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1a2a7fd-d26a-4936-9ec2-023c3792cae0","savedPayload":{"position":{"x":19021.806237131383,"y":24817.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"9c42e43b-5d4b-4df2-b26f-2fd16980f4c1"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a1f4275c-c570-40d2-b6fd-efbe4f0ee684","savedPayload":{"position":{"x":19129.806237131383,"y":24880.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"477fdc77-d140-41cc-9fe4-f6a55e5ec2ad"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5d987278-2e68-473a-87a2-54af423ba9f6","savedPayload":{"position":{"x":19037.806237131383,"y":24729.35640053908},"targetPosition":{"x":19040.806237131383,"y":24789.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"3ec222ec-a9dd-4bbd-892e-850c0008a5f5"}}}],"layerFolders":[],"id":"72a9b477-9348-4137-a367-3d27b9a115c4","savedPayload":{"position":{"x":19040.806237131383,"y":24789.35640053908},"targetPosition":{"x":19004.806237131383,"y":24713.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4658e451-85e9-4a65-ae72-0008dd6b2f31","savedPayload":{"position":{"x":18944.806237131383,"y":24739.35640053908},"targetPosition":{"x":18992.806237131383,"y":24734.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"179bd2e9-c1ba-4822-afe6-282cda148b10"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1ed2164f-b2bb-482c-9409-da442149ae04","savedPayload":{"position":{"x":18942.806237131383,"y":24813.35640053908},"targetPosition":{"x":18992.806237131383,"y":24734.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"7cc45469-394c-4388-80ac-b8054e28b7c1"}}}],"layerFolders":[],"id":"8246b106-cb7b-4c6b-bf7d-ec961b1db174","savedPayload":{"position":{"x":18992.806237131383,"y":24734.35640053908},"targetPosition":{"x":19004.806237131383,"y":24713.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"77ca389e-0984-4fdd-b6e3-804beca3b869","savedPayload":{"position":{"x":19028.806237131383,"y":24647.35640053908},"targetPosition":{"x":18984.806237131383,"y":24703.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"71a20e8f-773b-4062-9509-18f113c373b4"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cd75f6fd-6e1d-4899-b20d-811a7bc75e68","savedPayload":{"position":{"x":18968.806237131383,"y":24676.35640053908},"targetPosition":{"x":18984.806237131383,"y":24703.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"aa58adb5-6506-493d-b19b-311f86fe467a"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8a593236-8c19-4dc4-abce-4460ce9e1ed3","savedPayload":{"position":{"x":18972.806237131383,"y":24676.35640053908},"targetPosition":{"x":18984.806237131383,"y":24703.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"c1e8bcfd-7938-42f5-8130-712272717493"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ec341703-ec40-4fe9-83ab-e1b3c206cdd7","savedPayload":{"position":{"x":18884.806237131383,"y":24776.35640053908},"targetPosition":{"x":18984.806237131383,"y":24703.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"0a8204df-b712-4332-80ca-f4c6bdbf971b"}}}],"layerFolders":[],"id":"d82cf5b2-54ec-4278-a791-a70d6ada5432","savedPayload":{"position":{"x":18984.806237131383,"y":24703.35640053908},"targetPosition":{"x":19004.806237131383,"y":24713.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7b199aa3-a474-4333-be6f-cedfdd09cfcd","savedPayload":{"position":{"x":19173.806237131383,"y":24692.35640053908},"targetPosition":{"x":19089.806237131383,"y":24675.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"d25ae25c-99cf-4d1d-845c-7250681f4aca"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"88345064-93d6-4aaf-841e-faf49198cd0c","savedPayload":{"position":{"x":19059.806237131383,"y":24763.35640053908},"targetPosition":{"x":19089.806237131383,"y":24675.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"94a13c20-0208-4ee6-b02b-8d0dd2b49592"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"841e8832-d422-49d8-92e3-6d09c3de0cc0","savedPayload":{"position":{"x":19029.806237131383,"y":24655.35640053908},"targetPosition":{"x":19089.806237131383,"y":24675.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"5afacccc-42f5-408e-b434-7e619c381d94"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5da58e4d-c2a4-4e11-a70b-fe852a872b88","savedPayload":{"position":{"x":19134.806237131383,"y":24733.35640053908},"targetPosition":{"x":19089.806237131383,"y":24675.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"ee63fc52-1442-4619-a40b-1e739b805610"}}}],"layerFolders":[],"id":"bd64861b-225a-4856-81a3-8c6e7c0690b9","savedPayload":{"position":{"x":19089.806237131383,"y":24675.35640053908},"targetPosition":{"x":19004.806237131383,"y":24713.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c325fabc-ed83-476c-b116-e0d3a51fee08","savedPayload":{"position":{"x":19158.806237131383,"y":24730.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"0b4d150b-ed78-4ec4-a5f8-89279cce3118"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"842dae6a-907e-4c27-8202-a7bf8fe13d5a","savedPayload":{"position":{"x":19150.806237131383,"y":24653.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"1403043e-48a1-482a-b69f-228683d31802"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"358e779c-d3c3-4608-b919-e2e71903e56e","savedPayload":{"position":{"x":19175.806237131383,"y":24808.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"d5e7000c-3b8a-4338-a8db-bf715e239fc4"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dc35aa08-1122-467e-9c2e-7c2831f8c843","savedPayload":{"position":{"x":19141.806237131383,"y":24749.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"7d75926c-c53a-4435-8805-3d7f08c06a5a"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0df86ce7-a0f6-4b27-b42a-aaa8c97d78a1","savedPayload":{"position":{"x":19179.806237131383,"y":24765.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"6f351e8d-d5d1-474a-b7b8-7be64d742fee"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9f2baccc-c7a5-499d-8732-4e3786633716","savedPayload":{"position":{"x":18995.806237131383,"y":24691.35640053908},"targetPosition":{"x":19084.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"a77dbf49-942f-4870-989d-0d1bd8271ba9"}}}],"layerFolders":[],"id":"be2798b8-5e24-4f18-8da2-382dcce56152","savedPayload":{"position":{"x":19084.806237131383,"y":24714.35640053908},"targetPosition":{"x":19004.806237131383,"y":24713.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"09443c3c-940f-4e52-98b4-e63846086398","savedPayload":{"position":{"x":19004.806237131383,"y":24713.35640053908},"targetPosition":{"x":18980.806237131383,"y":24656.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3c29b166-5657-4781-8e56-ca48c996c009","savedPayload":{"position":{"x":18980.806237131383,"y":24656.35640053908},"targetPosition":{"x":18906.806237131383,"y":24754.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"24a60c3b-7a79-46f0-b3ca-98e2b93ed4df","savedPayload":{"position":{"x":18906.806237131383,"y":24754.35640053908},"targetPosition":{"x":18820.806237131383,"y":24797.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"f0ae7e7a-692d-416a-a891-86ccf8d05a9a"}}},"id":"cf0602c3-01b8-4e17-b5da-c5ac18deee2c","savedPayload":{"position":{"x":18245.07034216051,"y":25544.045261352203},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b2111aad-b8d1-46d4-a9b7-7c5d95aa5757","savedPayload":{"position":{"x":18776.806237131383,"y":24768.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"4d8d9b35-49f5-4ce9-8863-d95d5933f4f9"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fc52add0-7f38-42ee-bb27-e9e246884164","savedPayload":{"position":{"x":18765.806237131383,"y":24923.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"a90fcc32-b0a8-4258-8942-f0ce95bf6e3e"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"595f181f-bb38-4540-bf25-83f3dc63c5cd","savedPayload":{"position":{"x":18740.806237131383,"y":24883.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"d67e4026-f236-4ddc-9d06-b0b68159f611"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"737a587b-bd03-46d0-aa3a-58f12abbe2f3","savedPayload":{"position":{"x":18638.806237131383,"y":24811.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"68b249f0-24f0-4201-82c9-a88b8a595ea8"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a75c1188-da11-4be7-9b4e-72048c6a089b","savedPayload":{"position":{"x":18717.806237131383,"y":24931.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"c3ad54c3-d011-4ec8-b640-32276ce5acb7"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"adcca2c7-fd9f-4a01-89a1-d020d7586a70","savedPayload":{"position":{"x":18726.806237131383,"y":24782.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"7a05dc55-88c0-4bf4-a104-da9e60e8eb9c"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"13a88811-0ca8-47ed-a001-db7f46ddd15a","savedPayload":{"position":{"x":18790.806237131383,"y":24757.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"32af816a-2394-4a75-88fc-ade56882dbf9"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"323cf190-3e3d-49be-86a4-6848428e65d0","savedPayload":{"position":{"x":18681.806237131383,"y":24860.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"e43371ae-82c3-4bcb-9025-17b0a17f4a0d"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b6840e5a-0929-4c8c-9bdb-3cfd89069d1a","savedPayload":{"position":{"x":18783.806237131383,"y":24887.35640053908},"targetPosition":{"x":18714.806237131383,"y":24836.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"f1eff0a1-3858-43df-a6a9-7b86599367fd"}}}],"layerFolders":[],"id":"687a3cb1-a635-44c7-ab29-7ee8fbeb9f33","savedPayload":{"position":{"x":18714.806237131383,"y":24836.35640053908},"targetPosition":{"x":18654.806237131383,"y":24928.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"52203f48-4984-4006-893f-0f7fba88dd08","savedPayload":{"position":{"x":18654.806237131383,"y":24928.35640053908},"targetPosition":{"x":18706.806237131383,"y":24976.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f43573c8-bcab-4f16-9bd9-866d0f4ac70d","savedPayload":{"position":{"x":18706.806237131383,"y":24976.35640053908},"targetPosition":{"x":18776.806237131383,"y":24961.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"f0ae7e7a-692d-416a-a891-86ccf8d05a9a"}}},"id":"44311cf8-1065-43b1-9090-eface8dd8fea","savedPayload":{"position":{"x":18228.273929061794,"y":25428.202416709188},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"42d1a884-fe45-4338-bb7f-136fb61e0e55","savedPayload":{"position":{"x":18780.806237131383,"y":24756.35640053908},"targetPosition":{"x":18783.806237131383,"y":24815.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"24d625d8-03fd-4c70-947d-c1d9e7c01e55"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5cb523dd-8cc4-4885-93c2-390dfde23f58","savedPayload":{"position":{"x":18825.806237131383,"y":24847.35640053908},"targetPosition":{"x":18783.806237131383,"y":24815.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"42759f94-af1a-499c-8395-dbcc7beb542d"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0e40c2c2-8c4b-49db-b063-9bbb601dbe9e","savedPayload":{"position":{"x":18655.806237131383,"y":24913.35640053908},"targetPosition":{"x":18739.806237131383,"y":24904.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"785c180c-1d9f-4d2d-8f59-0921ef7d6ccd"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"90d16c67-e214-4656-8e3d-3bb055e72a0c","savedPayload":{"position":{"x":18780.806237131383,"y":24921.35640053908},"targetPosition":{"x":18739.806237131383,"y":24904.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"a9106cf3-94bb-4848-b038-81137b22c240"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1680acf8-ceab-432c-9ee8-085d643b2ff9","savedPayload":{"position":{"x":18763.806237131383,"y":24935.35640053908},"targetPosition":{"x":18739.806237131383,"y":24904.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"e90d670b-3869-4996-8133-350dc0bdc8df"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fc6fbc50-6577-45bb-9456-61668c841231","savedPayload":{"position":{"x":18668.806237131383,"y":24870.35640053908},"targetPosition":{"x":18739.806237131383,"y":24904.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"5839789e-4d7d-46bc-8a80-1541b2e87db5"}}}],"layerFolders":[],"id":"5d3739af-110e-41a5-b0cd-156653ab9b22","savedPayload":{"position":{"x":18739.806237131383,"y":24904.35640053908},"targetPosition":{"x":18783.806237131383,"y":24815.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"671bbdeb-1429-4d69-a36b-212747d2289a","savedPayload":{"position":{"x":18865.806237131383,"y":24936.35640053908},"targetPosition":{"x":18799.806237131383,"y":24872.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"cb322208-dca9-421f-9a18-0fe1937791ac"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"901a67f7-e62e-4d14-a86c-d88c6cfbdd8f","savedPayload":{"position":{"x":18839.806237131383,"y":24824.35640053908},"targetPosition":{"x":18799.806237131383,"y":24872.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"9c6f17e0-799e-4c4f-b3f2-00111cdbc14a"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c4c74df5-9881-4751-b0be-438eeb26c757","savedPayload":{"position":{"x":18789.806237131383,"y":24871.35640053908},"targetPosition":{"x":18799.806237131383,"y":24872.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"21fdd64f-7461-43c0-82f1-81eabc012c32"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"df814ef3-6ff6-4e86-8e3e-9593925322d5","savedPayload":{"position":{"x":18831.806237131383,"y":24796.35640053908},"targetPosition":{"x":18799.806237131383,"y":24872.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"0d81e926-7b2d-4c87-b12a-314e555efb0f"}}}],"layerFolders":[],"id":"fe0d3dda-f16c-4418-bc76-02fa6ba1a18a","savedPayload":{"position":{"x":18799.806237131383,"y":24872.35640053908},"targetPosition":{"x":18783.806237131383,"y":24815.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c3f1fd21-dee3-4689-9b3f-2ab656380067","savedPayload":{"position":{"x":18830.806237131383,"y":24917.35640053908},"targetPosition":{"x":18800.806237131383,"y":24851.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"f00d57a6-7f92-48f9-8a10-8aadd0ce5915"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a3f5cec3-9bc3-4a1f-b89c-451be43d7ead","savedPayload":{"position":{"x":18820.806237131383,"y":24840.35640053908},"targetPosition":{"x":18800.806237131383,"y":24851.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"121e4867-a657-4b99-9756-572e61d4c865"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1cd42a54-18e6-4dbd-afdc-b7b1d5d5dc48","savedPayload":{"position":{"x":18706.806237131383,"y":24839.35640053908},"targetPosition":{"x":18800.806237131383,"y":24851.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"7ef6d164-9019-4f4f-ba48-54e4cb0894b0"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"31e1f5a1-216c-4518-8e2c-4333c36ff925","savedPayload":{"position":{"x":18807.806237131383,"y":24944.35640053908},"targetPosition":{"x":18800.806237131383,"y":24851.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"5408ed5b-19c6-41a7-b576-9079f60a414e"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dd3310d5-9e56-40aa-a0e2-1e5c117f5798","savedPayload":{"position":{"x":18802.806237131383,"y":24812.35640053908},"targetPosition":{"x":18800.806237131383,"y":24851.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"01a098f2-e244-455c-b2cd-2252faf8f642"}}}],"layerFolders":[],"id":"5146e14f-b095-42d4-b604-be0b4c64b461","savedPayload":{"position":{"x":18800.806237131383,"y":24851.35640053908},"targetPosition":{"x":18783.806237131383,"y":24815.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9a9110b1-a584-446c-b33a-b3d5c557a435","savedPayload":{"position":{"x":18783.806237131383,"y":24815.35640053908},"targetPosition":{"x":18835.806237131383,"y":24831.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a750f8b9-6472-4d54-8dfe-3311255ca5ea","savedPayload":{"position":{"x":18835.806237131383,"y":24831.35640053908},"targetPosition":{"x":18876.806237131383,"y":24767.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5889e30a-9443-4ff0-82a0-666a60f11c56","savedPayload":{"position":{"x":18876.806237131383,"y":24767.35640053908},"targetPosition":{"x":18891.806237131383,"y":24803.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"f0ae7e7a-692d-416a-a891-86ccf8d05a9a"}}},"id":"51913410-524c-4877-8b06-8eb2fa1949d1","savedPayload":{"position":{"x":18257.087204183208,"y":25314.749874539582},"targetPosition":{"x":18527.862789488165,"y":25443.90320358207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"57b8d29a-ce65-4f0f-bbcc-45f0267bfb21","savedPayload":{"position":{"x":18527.862789488165,"y":25443.90320358207},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":960,"y":0},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"Limit Sell Test","id":"d356594c-57e5-49ff-8a64-5ab3113d4440"}}},{"type":"Time Machine","name":"Limit Buy Test Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2018-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-12-31T00:00:00.000Z\"\n}","project":"Superalgos","id":"8e560e39-9bcf-47d1-8207-4a49a86301d1","savedPayload":{"position":{"x":18367.245065109724,"y":25562.168481115168},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 0,\n \"maxValue\": 25000\n}","project":"Superalgos","id":"99257677-e296-4e7c-81ce-e95fb54f70a5","savedPayload":{"position":{"x":18263.65355120595,"y":25507.6663490918},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"be1f3d98-87c7-46b6-93fe-b7abc63a4867","savedPayload":{"position":{"x":18188.804534722312,"y":25417.670188732594},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0182a8bb-dbfc-424e-a308-ca0d1ea600f6","savedPayload":{"position":{"x":17395.41912168377,"y":25720.081587011173},"targetPosition":{"x":17613.031432987456,"y":25513.575214303048},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4d540b3d-d4b0-45bf-9be5-840cd6118691","savedPayload":{"position":{"x":17349.386299188867,"y":25656.722842380932},"targetPosition":{"x":17613.031432987456,"y":25513.575214303048},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"d4179282-809d-4bd0-93e4-b696479172d2","savedPayload":{"position":{"x":17613.031432987456,"y":25513.575214303048},"targetPosition":{"x":17855.73653129994,"y":25337.239638615305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ccbb6585-9f10-4455-9492-514b2a3e7c09","savedPayload":{"position":{"x":17307.60925671438,"y":25093.197652769828},"targetPosition":{"x":17581.67289400716,"y":25215.218645692566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"ee15c2f2-c526-4330-be02-08d43a2442ba","savedPayload":{"position":{"x":17581.67289400716,"y":25215.218645692566},"targetPosition":{"x":17855.73653129994,"y":25337.239638615305},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"073ef7bc-4a8d-4f4a-9a77-511c98e42ce1","savedPayload":{"position":{"x":17855.73653129994,"y":25337.239638615305},"targetPosition":{"x":18154.09309991042,"y":25305.881099635008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"e58fbf18-834c-4499-865b-1f13f39e408b","savedPayload":{"position":{"x":18154.09309991042,"y":25305.881099635008},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4f102436-d038-4bab-80d7-83b12ff98c3b","savedPayload":{"position":{"x":18568.806237131383,"y":24855.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"d19b0a61-9654-4e20-b0b9-78de8f319791"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"536dc61a-dd88-4572-987f-0979cadac714","savedPayload":{"position":{"x":18510.806237131383,"y":24687.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"5dc89c56-71ce-4a29-8659-acaece4d40d0"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c799408d-bc00-4db7-9846-f3e6d12ce8cd","savedPayload":{"position":{"x":18658.806237131383,"y":24832.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"e228ef3f-fae4-4d98-903c-f6b5c0555b9b"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"33b3c814-afa2-47e8-9327-4a4e981c0100","savedPayload":{"position":{"x":18628.806237131383,"y":24784.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"bf9deed9-66fb-4a5c-89e5-a50e2a27c878"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"322d3a2e-20dc-4a6f-8aa2-9a479001ce55","savedPayload":{"position":{"x":18603.806237131383,"y":24760.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"a4357221-3ca4-4476-8f0e-55ca8fd6077f"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"78ea17a2-84f8-426e-a4c7-1f3ddac1ae61","savedPayload":{"position":{"x":18623.806237131383,"y":24696.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"71234a3e-18c0-4108-8e96-d3b547c45d8d"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"74c95678-951d-445a-a4a4-f5b1488777fb","savedPayload":{"position":{"x":18623.806237131383,"y":24688.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"b61e958e-e14a-4385-818b-635de615f966"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"97d0ab7c-8e0a-42aa-b8a1-fa82429fbaa0","savedPayload":{"position":{"x":18620.806237131383,"y":24759.35640053908},"targetPosition":{"x":18610.806237131383,"y":24759.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"03e9cd6d-219d-4203-998c-f458fa5ccf57"}}}],"layerFolders":[],"id":"0569494f-37cb-4f89-9078-b3846ed6c94f","savedPayload":{"position":{"x":18610.806237131383,"y":24759.35640053908},"targetPosition":{"x":18617.806237131383,"y":24783.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3a8cbda9-52fe-466f-8fa4-e04a53335e88","savedPayload":{"position":{"x":18518.806237131383,"y":24715.35640053908},"targetPosition":{"x":18594.806237131383,"y":24706.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"107d5d56-4623-4060-9b6a-fe40dd708d4b"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bd15b81c-3871-44e3-9213-828a33af68bf","savedPayload":{"position":{"x":18612.806237131383,"y":24747.35640053908},"targetPosition":{"x":18594.806237131383,"y":24706.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"ff15650a-1e33-4cf5-a274-05a815ccc6c1"}}}],"layerFolders":[],"id":"f82a559b-93ec-45a1-a07f-b48116bf7d7f","savedPayload":{"position":{"x":18594.806237131383,"y":24706.35640053908},"targetPosition":{"x":18617.806237131383,"y":24783.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b8ec7c97-7155-47a0-b10a-5e2ad5e7b128","savedPayload":{"position":{"x":18683.806237131383,"y":24814.35640053908},"targetPosition":{"x":18708.806237131383,"y":24854.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"bd46eeb9-57ee-4810-a39e-5e503379aaf4"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d7928e7d-3b80-4000-9b39-5ace3d9d378b","savedPayload":{"position":{"x":18663.806237131383,"y":24917.35640053908},"targetPosition":{"x":18708.806237131383,"y":24854.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"2fb8b022-4566-45e9-b95a-fc43df641e9b"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cb7b6b96-ee9b-4efd-81f2-999e460f865a","savedPayload":{"position":{"x":18797.806237131383,"y":24814.35640053908},"targetPosition":{"x":18708.806237131383,"y":24854.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"aeb5092a-8dc2-4c52-862c-f0a1f6854dbb"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"38d2cfc3-f008-402a-b439-85b65d7ec6d2","savedPayload":{"position":{"x":18773.806237131383,"y":24761.35640053908},"targetPosition":{"x":18708.806237131383,"y":24854.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"b406cc22-d370-4e58-8594-e8e105c52ce7"}}}],"layerFolders":[],"id":"63448d79-3ba0-419c-88e3-9f63db3e9360","savedPayload":{"position":{"x":18708.806237131383,"y":24854.35640053908},"targetPosition":{"x":18617.806237131383,"y":24783.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9b2b36e3-9d88-4659-8063-26d2cdbeb0ab","savedPayload":{"position":{"x":18670.806237131383,"y":24740.35640053908},"targetPosition":{"x":18695.806237131383,"y":24748.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"c79fa173-d23e-4eb3-88e2-f050392fc7a0"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"83abea21-83c8-4453-8119-ea1cb0a77455","savedPayload":{"position":{"x":18671.806237131383,"y":24752.35640053908},"targetPosition":{"x":18695.806237131383,"y":24748.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"a6d46519-34c3-416c-9aea-5bb30913c101"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d7fe3340-7618-430d-afce-34a6ea6e9bbe","savedPayload":{"position":{"x":18704.806237131383,"y":24744.35640053908},"targetPosition":{"x":18695.806237131383,"y":24748.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"4521ebf5-26d8-4e1c-bcea-8d0e0c343f3a"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cd68a5ee-024c-422b-8eaf-996a081ab572","savedPayload":{"position":{"x":18739.806237131383,"y":24785.35640053908},"targetPosition":{"x":18695.806237131383,"y":24748.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"5d78b016-420e-409e-96e6-da3379551551"}}}],"layerFolders":[],"id":"d2d894b5-324f-43c8-af97-d21f10ec32f4","savedPayload":{"position":{"x":18695.806237131383,"y":24748.35640053908},"targetPosition":{"x":18617.806237131383,"y":24783.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"03d6f6c8-5844-4f80-9c15-70ec55d9887e","savedPayload":{"position":{"x":18769.806237131383,"y":24779.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"a4fa2fc3-3315-40e8-a218-3f5e2e104f58"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0c3dd1a5-a92e-4ad6-9145-7406b3966ed6","savedPayload":{"position":{"x":18769.806237131383,"y":24774.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"b01514e4-7f38-484a-8c74-47377bb9b618"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2ba240d9-ef54-4187-9321-d3670fb066d6","savedPayload":{"position":{"x":18719.806237131383,"y":24625.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"2f9686dc-3111-440e-aefb-f890c5779bd1"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f8cf2fc9-0d7d-478d-aa38-1e75b3bb7213","savedPayload":{"position":{"x":18645.806237131383,"y":24691.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"a4d92d93-d8bf-47f4-8aae-a383bd17c397"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3d5ea8aa-94e7-4f18-bed0-1babac20c647","savedPayload":{"position":{"x":18703.806237131383,"y":24651.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"dcd133a5-d19c-4c0b-bdac-b8abe3e1ae60"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2171be93-269a-423e-9170-210d64fb070e","savedPayload":{"position":{"x":18714.806237131383,"y":24781.35640053908},"targetPosition":{"x":18678.806237131383,"y":24720.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"2ebc0b8f-351a-479b-80f2-4145c7f02698"}}}],"layerFolders":[],"id":"f780d4ff-f345-45cf-b497-8882851d889d","savedPayload":{"position":{"x":18678.806237131383,"y":24720.35640053908},"targetPosition":{"x":18617.806237131383,"y":24783.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a78dc47-f3ea-4895-a035-7b2ffd227206","savedPayload":{"position":{"x":18617.806237131383,"y":24783.35640053908},"targetPosition":{"x":18670.806237131383,"y":24804.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0ccc0321-d804-4b11-947d-34f1f6788566","savedPayload":{"position":{"x":18670.806237131383,"y":24804.35640053908},"targetPosition":{"x":18717.806237131383,"y":24841.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8e058a52-fe13-421d-abf3-6d0d4f8f8810","savedPayload":{"position":{"x":18717.806237131383,"y":24841.35640053908},"targetPosition":{"x":18670.806237131383,"y":24900.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"5a148167-79ff-4573-8833-aa30f3f909d0"}}},"id":"e4db72d3-3c07-4eb8-9e49-96781dc53fa4","savedPayload":{"position":{"x":18164.803748060443,"y":25189.317957243533},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a739e1e5-19e8-40a9-9383-cea63841b4b9","savedPayload":{"position":{"x":18891.806237131383,"y":24842.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"f566b6b1-9b51-4f0a-9d08-be3f6ce372e9"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fa4030a9-0864-445e-8039-0d073471383c","savedPayload":{"position":{"x":18767.806237131383,"y":24881.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"c2e03de5-0423-46f6-89ec-5cfba32a1d26"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1f3c791-5091-4714-8d57-0d180846e4cc","savedPayload":{"position":{"x":18806.806237131383,"y":24976.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"ea84864d-1b31-4f4a-be5c-1685484c2553"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c6fc1201-b28c-4164-835e-90814b1a992b","savedPayload":{"position":{"x":18743.806237131383,"y":24862.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"c313204d-9493-4274-8141-dcb4a282b00f"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"12e70776-41ab-4be2-aff7-7baa6940faf7","savedPayload":{"position":{"x":18703.806237131383,"y":24816.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"19b52541-b96c-4080-807e-ee040f4096cf"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8fed1044-5d30-440b-a1a2-c47f3265f590","savedPayload":{"position":{"x":18709.806237131383,"y":24869.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"d093b0c3-c589-487c-9257-c96a980532c1"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"73f62553-13a3-467d-9019-e00c492c58a3","savedPayload":{"position":{"x":18796.806237131383,"y":24950.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"ea18c9cd-3cbc-4285-910d-32e7188c202c"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"972ea257-5350-4c57-b545-1c0208d5c901","savedPayload":{"position":{"x":18746.806237131383,"y":24850.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"bcd7fda1-d122-4b27-af6b-202caa4d7a91"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0b157606-13bb-40f9-b027-5d518a31c0d8","savedPayload":{"position":{"x":18746.806237131383,"y":24801.35640053908},"targetPosition":{"x":18797.806237131383,"y":24894.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"bf3e253f-58e9-430f-94b5-18c181bbb4ec"}}}],"layerFolders":[],"id":"0953813e-8850-4b4b-835e-ef1f892630ac","savedPayload":{"position":{"x":18797.806237131383,"y":24894.35640053908},"targetPosition":{"x":18801.806237131383,"y":24934.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f36fa8ea-ff74-4557-b7ba-529f68ae9e7f","savedPayload":{"position":{"x":18801.806237131383,"y":24934.35640053908},"targetPosition":{"x":18823.806237131383,"y":24847.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"caab0bd0-aaba-4878-836f-05e64cb5f700","savedPayload":{"position":{"x":18823.806237131383,"y":24847.35640053908},"targetPosition":{"x":18731.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"5a148167-79ff-4573-8833-aa30f3f909d0"}}},"id":"cad0d8e8-a446-400a-9693-ade257b77561","savedPayload":{"position":{"x":18219.30588008381,"y":25085.726443339758},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 5,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9576938d-adb7-4e1b-8a4a-526f2a91bd1f","savedPayload":{"position":{"x":18929.806237131383,"y":24746.35640053908},"targetPosition":{"x":18874.806237131383,"y":24710.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"f875b337-e53b-4598-893c-0e5ff2f3c453"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"753dd7dc-7541-41f2-a821-0185144fc13b","savedPayload":{"position":{"x":18847.806237131383,"y":24691.35640053908},"targetPosition":{"x":18874.806237131383,"y":24710.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"5657e5b7-539e-4fdc-8181-dd01fbbc93b3"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f290a791-ebf9-48e1-a290-d59e45961271","savedPayload":{"position":{"x":18780.806237131383,"y":24744.35640053908},"targetPosition":{"x":18848.806237131383,"y":24742.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"708895b2-3019-4814-8984-3a6915bd2a3c"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"846c7c16-0a36-487a-bbe7-0c857256d502","savedPayload":{"position":{"x":18800.806237131383,"y":24807.35640053908},"targetPosition":{"x":18848.806237131383,"y":24742.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"3c2e2ef8-1454-4f69-b1fe-d914ba406959"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eb88871d-258c-4fc9-ae78-43f1b6b605d4","savedPayload":{"position":{"x":18914.806237131383,"y":24779.35640053908},"targetPosition":{"x":18848.806237131383,"y":24742.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"648f8bce-5ea9-4cb5-bc7e-9b7359812e2d"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4f9654d6-9cea-4d93-bb05-c62dd4d7f2c1","savedPayload":{"position":{"x":18831.806237131383,"y":24832.35640053908},"targetPosition":{"x":18848.806237131383,"y":24742.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"e7ffc532-0d3a-4929-9c6b-98ed15517472"}}}],"layerFolders":[],"id":"9e302017-9b4e-4f40-b8bc-73c24c03f92f","savedPayload":{"position":{"x":18848.806237131383,"y":24742.35640053908},"targetPosition":{"x":18874.806237131383,"y":24710.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1a2abba1-d888-45c1-8192-baa7c63fb2d7","savedPayload":{"position":{"x":18891.806237131383,"y":24783.35640053908},"targetPosition":{"x":18844.806237131383,"y":24750.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"7785f64c-5f0a-4c3d-a2d5-909e849ac0ed"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2181bc6d-0363-4041-bcfd-e74695a9b3ec","savedPayload":{"position":{"x":18831.806237131383,"y":24715.35640053908},"targetPosition":{"x":18844.806237131383,"y":24750.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"7c421e39-6a5e-4e52-852d-5cb4e317499c"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eadd5f19-2640-47b0-aac1-00a442b16c5d","savedPayload":{"position":{"x":18941.806237131383,"y":24721.35640053908},"targetPosition":{"x":18844.806237131383,"y":24750.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"5bf1c587-1245-4805-8905-da4b025d8586"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b56b273c-7295-406d-81a9-a18477efb80a","savedPayload":{"position":{"x":18759.806237131383,"y":24699.35640053908},"targetPosition":{"x":18844.806237131383,"y":24750.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"0ff63649-5288-468d-bffb-188c6ef9b4d3"}}}],"layerFolders":[],"id":"69bf0d52-b4cc-44f9-892e-d7a4503c2859","savedPayload":{"position":{"x":18844.806237131383,"y":24750.35640053908},"targetPosition":{"x":18874.806237131383,"y":24710.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c37f7102-eb48-448d-ab78-b879246985f0","savedPayload":{"position":{"x":18935.806237131383,"y":24708.35640053908},"targetPosition":{"x":18860.806237131383,"y":24692.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"c0d88aad-81c3-443e-ac6e-a6ec970a7319"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bcafb008-8ab8-4bee-a65c-69d1a9604aae","savedPayload":{"position":{"x":18804.806237131383,"y":24718.35640053908},"targetPosition":{"x":18860.806237131383,"y":24692.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"6f34fbe4-4bc0-4ede-9259-d235bb2b55ba"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"84f21ad9-e056-44da-9d37-4abaa3078b1f","savedPayload":{"position":{"x":18867.806237131383,"y":24615.35640053908},"targetPosition":{"x":18860.806237131383,"y":24692.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"0a30a747-d41f-4556-bbfe-9e8c0ee500af"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c5414b3f-4862-4e9d-8600-15de324f6d0b","savedPayload":{"position":{"x":18941.806237131383,"y":24774.35640053908},"targetPosition":{"x":18860.806237131383,"y":24692.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"2f795dc2-7f08-4368-bb5d-466256027447"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"60e919a2-41c8-4aff-a5ce-28b7904f726e","savedPayload":{"position":{"x":18922.806237131383,"y":24770.35640053908},"targetPosition":{"x":18860.806237131383,"y":24692.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"da6a3b1b-b748-4732-8e97-9e70e981c023"}}}],"layerFolders":[],"id":"37077a07-b824-421b-bd37-40183770ba8c","savedPayload":{"position":{"x":18860.806237131383,"y":24692.35640053908},"targetPosition":{"x":18874.806237131383,"y":24710.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ac7256d-c3c6-4ae7-b49e-721cdd5f5a0a","savedPayload":{"position":{"x":18874.806237131383,"y":24710.35640053908},"targetPosition":{"x":18851.806237131383,"y":24727.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aefe49db-8b25-4bb9-aaa4-1bd0c4b4c15e","savedPayload":{"position":{"x":18851.806237131383,"y":24727.35640053908},"targetPosition":{"x":18794.806237131383,"y":24800.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"158f5234-7cc8-4596-b806-5818ed6d85e7","savedPayload":{"position":{"x":18794.806237131383,"y":24800.35640053908},"targetPosition":{"x":18824.806237131383,"y":24846.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"5a148167-79ff-4573-8833-aa30f3f909d0"}}},"id":"e8fae127-3d48-497a-bd43-467d33cea172","savedPayload":{"position":{"x":18309.302040443017,"y":25010.87742685612},"targetPosition":{"x":18452.4496685209,"y":25274.52256065471},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b8302461-dafb-43d2-8541-d54c30ab2968","savedPayload":{"position":{"x":18452.4496685209,"y":25274.52256065471},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":1440,"y":0},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"Limit Buy Test","id":"10626ddb-3bb2-4bb6-9b1f-5adf83d9da1b"}}}],"id":"8501eaa6-6145-4e11-b521-40351f13db84","savedPayload":{"position":{"x":18750.806237131383,"y":25243.164021674413},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Testing Environment","name":"New Testing Environment","id":"5882d8a8-345b-4188-b1c1-797e9ff805d9"}}},{"type":"Dashboard","name":"Production Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Market Sell Test Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2017-08-17T00:00:00.000Z\",\n \"toDate\": \"2020-10-24T23:59:59.999Z\"\n}","project":"Superalgos","id":"b21f3c80-bc93-40cf-8ffd-e5170ac0c1f2","savedPayload":{"position":{"x":18309.302040443017,"y":24955.83537422204},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 2788.83,\n \"maxValue\": 19996.6668\n}","project":"Superalgos","id":"9c8646c6-fd9a-4303-9553-a6a0d95775bc","savedPayload":{"position":{"x":18219.30588008381,"y":24880.986357738402},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\"value\":\"24-hs\"}","project":"Superalgos","id":"1ef1915d-323a-4ef3-b253-52131524a648","savedPayload":{"position":{"x":18164.803748060443,"y":24777.394843834627},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": true\n}","project":"Superalgos","id":"a487a2ba-5d79-47d1-9b9e-6397809a1c9d","savedPayload":{"position":{"x":17325.880844700932,"y":24908.243724800377},"targetPosition":{"x":17581.67289400716,"y":24751.494155385593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"54d31d06-01f4-47e4-a4f6-02ac464f8c07","savedPayload":{"position":{"x":17294.0269735467,"y":24836.69875879677},"targetPosition":{"x":17581.67289400716,"y":24751.494155385593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"a2ba9dbd-7084-4b8f-8812-fd2bd8c47feb","savedPayload":{"position":{"x":17581.67289400716,"y":24751.494155385593},"targetPosition":{"x":17855.73653129994,"y":24629.473162462855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"756d3e04-4f60-47e6-b860-6616533d7821","savedPayload":{"position":{"x":17370.326334674974,"y":24276.80201108737},"targetPosition":{"x":17613.031432987456,"y":24453.137586775112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"44304165-52cd-4c65-b43b-fe9582dd8f2d","savedPayload":{"position":{"x":17613.031432987456,"y":24453.137586775112},"targetPosition":{"x":17855.73653129994,"y":24629.473162462855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fdd17459-019e-4a84-a120-7f1e8d919bba","savedPayload":{"position":{"x":17855.73653129994,"y":24629.473162462855},"targetPosition":{"x":18154.09309991042,"y":24660.831701443152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"d417bfa3-5202-4b9d-afa9-ddf6ddec8006","savedPayload":{"position":{"x":18154.09309991042,"y":24660.831701443152},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bf19e237-c325-462e-9150-92d1d5ebdcda","savedPayload":{"position":{"x":18947.806237131383,"y":24907.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"c772e7e1-0061-4136-b908-fa1dd407e79b"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4164493c-c399-4614-b2e1-602a6572162e","savedPayload":{"position":{"x":18935.806237131383,"y":24966.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"c630bd92-24b2-485d-b860-513c995f3ce9"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d841c8dd-342d-4621-970d-490dde3afdc0","savedPayload":{"position":{"x":18967.806237131383,"y":25023.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"7b45164c-bad1-4cda-bbd5-e046b5b8e474"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"db6160ca-fcb2-4b64-9932-c521149587b0","savedPayload":{"position":{"x":18953.806237131383,"y":24979.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"d689f22d-84cf-4cd3-85f4-51d3ce056a0e"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"90e51db9-2851-4c70-aa83-5e404a6744b2","savedPayload":{"position":{"x":18837.806237131383,"y":25013.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"1a2fc357-95e8-477e-a537-b5638f943cff"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8be2bfa0-0487-4490-b91a-6ecb5a0263e6","savedPayload":{"position":{"x":18878.806237131383,"y":24896.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"2137ff34-359b-442c-b8e3-3aac847fb842"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c22666d5-723f-4df3-bb1c-8ace470cbe70","savedPayload":{"position":{"x":18810.806237131383,"y":24890.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"60142dc2-acb7-4678-b0a4-c73087b00916"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"60accf5e-1644-48fb-9ee2-14b8c1ec765f","savedPayload":{"position":{"x":18782.806237131383,"y":25011.35640053908},"targetPosition":{"x":18877.806237131383,"y":24972.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"6f639295-d116-45a2-88cd-dfcd2b9d273d"}}}],"layerFolders":[],"id":"c4bb4670-a861-4a71-abd8-358d5c2ab40f","savedPayload":{"position":{"x":18877.806237131383,"y":24972.35640053908},"targetPosition":{"x":18933.806237131383,"y":24889.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"857c81cc-1753-4979-b5dc-bdd0c238b6fb","savedPayload":{"position":{"x":19092.806237131383,"y":24960.35640053908},"targetPosition":{"x":19004.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"1b13f3ec-03a6-4cb2-ad78-9e0814ae1b12"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"90251eec-7207-4ffb-8f7f-e9e2ddf9e9f7","savedPayload":{"position":{"x":19025.806237131383,"y":24828.35640053908},"targetPosition":{"x":19004.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"ab669475-91a5-4130-b392-7e7cb8e2d0cd"}}}],"layerFolders":[],"id":"bfa6aae2-4ef4-456d-be44-e161dd0e7d22","savedPayload":{"position":{"x":19004.806237131383,"y":24921.35640053908},"targetPosition":{"x":18933.806237131383,"y":24889.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d832353c-b509-4b88-bc1d-c4a43751ff63","savedPayload":{"position":{"x":18861.806237131383,"y":25046.35640053908},"targetPosition":{"x":18867.806237131383,"y":24949.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"7bf6da13-7f2c-4dd3-b738-0996ef2aa263"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"48636e26-26ff-4a75-b274-8c6933528073","savedPayload":{"position":{"x":18858.806237131383,"y":25042.35640053908},"targetPosition":{"x":18867.806237131383,"y":24949.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"e3f33a14-9d2e-42d3-9cb5-f88bb3c28af2"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b1711264-20ac-4015-a0af-b946e0de530c","savedPayload":{"position":{"x":18804.806237131383,"y":24946.35640053908},"targetPosition":{"x":18867.806237131383,"y":24949.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"b84ac694-bba2-4864-865c-e3aac19f95de"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"617bc7ac-5e12-4445-b36a-d86e3419a512","savedPayload":{"position":{"x":18845.806237131383,"y":25003.35640053908},"targetPosition":{"x":18867.806237131383,"y":24949.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"8995d53c-eafe-4a05-9e4e-a7b7b2bf4bc6"}}}],"layerFolders":[],"id":"7f182443-56e5-42ac-ba4a-144fd20cb170","savedPayload":{"position":{"x":18867.806237131383,"y":24949.35640053908},"targetPosition":{"x":18933.806237131383,"y":24889.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1c511194-556b-49a3-875e-6393bc69fb12","savedPayload":{"position":{"x":18836.806237131383,"y":24879.35640053908},"targetPosition":{"x":18879.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"ee07e9bb-bd73-44c9-a992-bb2408bda327"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"975dede1-ec9c-4ed4-a35f-591c1234eebb","savedPayload":{"position":{"x":18887.806237131383,"y":24920.35640053908},"targetPosition":{"x":18879.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"1488937d-e2c4-4477-85c5-5c26e91ebbd0"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"45fd4f0e-b1f3-4e8c-b33f-bb79eaa672c1","savedPayload":{"position":{"x":18866.806237131383,"y":24856.35640053908},"targetPosition":{"x":18879.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"0109d854-9a3a-4dc0-b2fc-db0ba0c094b8"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6199bdd8-aa65-4c1d-b7df-e6a030a648ef","savedPayload":{"position":{"x":18897.806237131383,"y":24761.35640053908},"targetPosition":{"x":18879.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"4ad61724-9dc4-4bd6-a0a4-848df3d56fcf"}}}],"layerFolders":[],"id":"4cb952c0-fd9b-43b8-8b8e-59e8bcbd57e4","savedPayload":{"position":{"x":18879.806237131383,"y":24852.35640053908},"targetPosition":{"x":18933.806237131383,"y":24889.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2e6de9ef-2913-4e05-a3c7-d740922bc770","savedPayload":{"position":{"x":18906.806237131383,"y":24955.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"951c6b0a-037e-4045-a67f-6ff12007c9e1"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"61cbc9a1-b4a3-4746-bada-6e7028f50884","savedPayload":{"position":{"x":18859.806237131383,"y":24850.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"8203a40b-ceec-4b70-9b5a-cce4743e00e2"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"38f26c0b-c5ce-44af-a9ce-10e31ab751f3","savedPayload":{"position":{"x":18851.806237131383,"y":24888.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"e99c26c7-e419-440e-bbbf-f6cf457e8526"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cafc03f7-db8d-40fd-8d3a-6fe1bce837fc","savedPayload":{"position":{"x":18808.806237131383,"y":24803.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"b7769657-59b9-41b9-a2c5-3c847f379378"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"17062cef-032a-4016-b8b6-3c68199e8e57","savedPayload":{"position":{"x":18824.806237131383,"y":24941.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"a2fcc019-041f-4798-a040-08a2de71fb4f"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"71b37c54-289d-44be-859b-fb439cfea26e","savedPayload":{"position":{"x":18829.806237131383,"y":24918.35640053908},"targetPosition":{"x":18867.806237131383,"y":24887.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"ef95b2c3-9c0b-4bf2-aab4-16249d9ea1bc"}}}],"layerFolders":[],"id":"848910c7-dcd0-4166-b4bd-e63be1f29737","savedPayload":{"position":{"x":18867.806237131383,"y":24887.35640053908},"targetPosition":{"x":18933.806237131383,"y":24889.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bd05e122-f5cd-4eb9-8810-f508bdb839e7","savedPayload":{"position":{"x":18933.806237131383,"y":24889.35640053908},"targetPosition":{"x":18901.806237131383,"y":24811.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"892d74b8-6bb3-485c-8612-8d89573c42d8","savedPayload":{"position":{"x":18901.806237131383,"y":24811.35640053908},"targetPosition":{"x":18952.806237131383,"y":24859.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7dd6908b-a2fd-4527-a396-9788cbc2aa27","savedPayload":{"position":{"x":18952.806237131383,"y":24859.35640053908},"targetPosition":{"x":18998.806237131383,"y":24949.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"6d19feb0-301f-4135-b262-4e5128f5a4ee"}}},"id":"318027f0-8796-458d-9b57-7187eaa124ae","savedPayload":{"position":{"x":18188.804534722312,"y":24549.042612345565},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1251f024-809d-4844-9943-866878fbfaa3","savedPayload":{"position":{"x":18528.806237131383,"y":24558.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"466b5b5d-aecb-4d35-9abb-d2ba116147e9"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f2dfc41b-b144-44d6-a3ea-735fd0ac018f","savedPayload":{"position":{"x":18647.806237131383,"y":24596.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"4e37c936-f29d-4c23-9b37-ee68b8f152d4"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3b2eebbb-1690-4421-a380-73f87e515182","savedPayload":{"position":{"x":18663.806237131383,"y":24598.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"506c1638-3e4d-4272-8211-8c968b0a93c0"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0a6e8e18-b54a-49f2-8bd4-1a6cf98db3b4","savedPayload":{"position":{"x":18678.806237131383,"y":24734.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"9d905374-374d-4536-aff0-3f23e6eb0a53"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4f865f8b-004b-4465-b1fc-34da5623f0d2","savedPayload":{"position":{"x":18641.806237131383,"y":24568.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"28d0738c-201a-4fcc-9a01-89ce329007b3"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bcd5eae8-dc3a-4f2f-ac4d-b7a30f00b736","savedPayload":{"position":{"x":18505.806237131383,"y":24599.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"3d6b154f-b5f0-45a8-ba7f-511ff1dbef89"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d5675baa-f1c4-4ebe-9503-1af32784a671","savedPayload":{"position":{"x":18697.806237131383,"y":24685.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"e6929115-1e2e-4fbb-adf6-d62189c45b18"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9b00f2fa-10d0-445b-a308-e7adcbb8e0ce","savedPayload":{"position":{"x":18663.806237131383,"y":24645.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"df1c866c-83d8-4b5b-a8e1-83ca458ac6c8"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"59aca2a2-3b6b-4ba0-b832-17d22a0976b1","savedPayload":{"position":{"x":18667.806237131383,"y":24622.35640053908},"targetPosition":{"x":18604.806237131383,"y":24658.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"bfe5dcb5-6ecd-41d7-acb8-6d44db8dc7d5"}}}],"layerFolders":[],"id":"a3c9453b-e98c-4232-aebb-bf4de8edeb8f","savedPayload":{"position":{"x":18604.806237131383,"y":24658.35640053908},"targetPosition":{"x":18683.806237131383,"y":24725.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dd5d43f3-e4e2-4c86-acff-0ff5216817c0","savedPayload":{"position":{"x":18683.806237131383,"y":24725.35640053908},"targetPosition":{"x":18747.806237131383,"y":24782.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6e04c99e-b258-45cd-a9d1-2c7c4547ebfb","savedPayload":{"position":{"x":18747.806237131383,"y":24782.35640053908},"targetPosition":{"x":18830.806237131383,"y":24865.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"6d19feb0-301f-4135-b262-4e5128f5a4ee"}}},"id":"d9e995c6-6840-4bb1-89ce-a95895e4b40c","savedPayload":{"position":{"x":18263.65355120595,"y":24459.04645198636},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"45c9b717-f3ed-426d-9f10-2076f1e11f83","savedPayload":{"position":{"x":18894.806237131383,"y":24759.35640053908},"targetPosition":{"x":18922.806237131383,"y":24781.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"7eee31d2-8509-4c72-b73a-0b90a6c95257"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"61adbd76-d5b4-4d46-971a-32c64f54cac3","savedPayload":{"position":{"x":18918.806237131383,"y":24802.35640053908},"targetPosition":{"x":18922.806237131383,"y":24781.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"1cdc1b51-e529-43d4-8bdc-ad048d56fa80"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"85309e5b-9099-4dcd-b63a-0fa514c96ff2","savedPayload":{"position":{"x":18815.806237131383,"y":24699.35640053908},"targetPosition":{"x":18867.806237131383,"y":24777.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"b6797416-a974-4061-8fa7-50c018ef3981"}}},{"type":"Layer","name":"Market Sell Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"84247f80-42d7-4edc-987f-381707794022","savedPayload":{"position":{"x":18790.806237131383,"y":24832.35640053908},"targetPosition":{"x":18867.806237131383,"y":24777.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"2d24771a-7ee9-428c-b3a9-1c9652276cdf"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7e8e1bbd-7507-4766-bdf1-9cf5d76193a8","savedPayload":{"position":{"x":18888.806237131383,"y":24864.35640053908},"targetPosition":{"x":18867.806237131383,"y":24777.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"fbe57855-e8a0-4ce2-b040-d7500eaebaaf"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9d8c51d5-51c1-4e97-9311-494bd8dc7801","savedPayload":{"position":{"x":18854.806237131383,"y":24728.35640053908},"targetPosition":{"x":18867.806237131383,"y":24777.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"00868cc6-9d8f-4421-b99c-8a5b653d9dcb"}}}],"layerFolders":[],"id":"a3c220c5-0fd1-40d2-ad5f-67da77eec9b9","savedPayload":{"position":{"x":18867.806237131383,"y":24777.35640053908},"targetPosition":{"x":18922.806237131383,"y":24781.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0f52c578-850c-443d-b406-7293dcb4442f","savedPayload":{"position":{"x":18901.806237131383,"y":24624.35640053908},"targetPosition":{"x":18854.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"49926f4a-7c5c-44de-bc91-acbf61bec928"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6824736f-efa7-4904-b2ec-321b5eb0903b","savedPayload":{"position":{"x":18891.806237131383,"y":24785.35640053908},"targetPosition":{"x":18854.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"19d4d88b-77c8-4a5b-a72a-f2f227900bd2"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"10c5b6d1-4c97-437d-84de-68f195b56d75","savedPayload":{"position":{"x":18898.806237131383,"y":24632.35640053908},"targetPosition":{"x":18854.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"dbdfb022-5558-4774-9278-cf63fda76d0b"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"662131ef-4625-4eff-abd8-4750b4695f39","savedPayload":{"position":{"x":18871.806237131383,"y":24660.35640053908},"targetPosition":{"x":18854.806237131383,"y":24714.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"a25bca0b-e409-4bd3-9a3c-1360869ff2ee"}}}],"layerFolders":[],"id":"0491bdd6-780d-4df3-ae36-b4f7e87dab7d","savedPayload":{"position":{"x":18854.806237131383,"y":24714.35640053908},"targetPosition":{"x":18922.806237131383,"y":24781.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f5f4446e-50bf-4d6b-9289-0a2af97a3f91","savedPayload":{"position":{"x":18904.806237131383,"y":24643.35640053908},"targetPosition":{"x":18930.806237131383,"y":24684.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"d9445b43-d20b-457c-a7df-313fa329557a"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d240634c-20ce-4920-a425-cd212db36522","savedPayload":{"position":{"x":18882.806237131383,"y":24765.35640053908},"targetPosition":{"x":18930.806237131383,"y":24684.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"829da6bf-6254-49d3-bd9e-68ff5936c45b"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"31fe0db3-0e71-4a20-a22c-2a8a84f1d87e","savedPayload":{"position":{"x":18947.806237131383,"y":24597.35640053908},"targetPosition":{"x":18930.806237131383,"y":24684.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"5c540fff-7339-40e5-bf70-98bb2f3e96ac"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"75b61cf7-a768-43ab-b16c-823f82e423eb","savedPayload":{"position":{"x":18896.806237131383,"y":24697.35640053908},"targetPosition":{"x":18930.806237131383,"y":24684.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"865fda04-4c2d-4a41-a67c-66e37e30ad4e"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"609ed6ce-6b3c-4efa-8bfe-0d160c5c7d37","savedPayload":{"position":{"x":18867.806237131383,"y":24586.35640053908},"targetPosition":{"x":18930.806237131383,"y":24684.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"0c014440-11b7-4b2e-b40f-5fb5e5026934"}}}],"layerFolders":[],"id":"5d27e56f-0649-45a1-b989-6135f6066715","savedPayload":{"position":{"x":18930.806237131383,"y":24684.35640053908},"targetPosition":{"x":18922.806237131383,"y":24781.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"348d6897-0185-49a7-9a35-7132ca9d7d66","savedPayload":{"position":{"x":18922.806237131383,"y":24781.35640053908},"targetPosition":{"x":18902.806237131383,"y":24803.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4ce42d77-c233-4b7e-b0ac-c83d602f9eb3","savedPayload":{"position":{"x":18902.806237131383,"y":24803.35640053908},"targetPosition":{"x":18864.806237131383,"y":24899.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d96b357f-0fb7-47ad-a9dc-d2a3c50ea9ea","savedPayload":{"position":{"x":18864.806237131383,"y":24899.35640053908},"targetPosition":{"x":18823.806237131383,"y":24829.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"6d19feb0-301f-4135-b262-4e5128f5a4ee"}}},"id":"d9af6374-be84-467d-9ac5-487dcc768fa1","savedPayload":{"position":{"x":18367.245065109724,"y":24404.54431996299},"targetPosition":{"x":18452.4496685209,"y":24692.19024042345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"61f4dfa7-d73a-4e68-9e9e-b129bafd4471","savedPayload":{"position":{"x":18452.4496685209,"y":24692.19024042345},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":222.25},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"Market Sell Test","id":"8c585048-f305-4692-af06-0d9a072765de"}}},{"type":"Time Machine","name":"Market Buy Test Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2017-08-17T00:00:00.000Z\",\n \"toDate\": \"2020-10-24T23:59:59.999Z\"\n}","project":"Superalgos","id":"bf4f058c-97ed-416a-aeda-51dc4f9a11dd","savedPayload":{"position":{"x":18257.087204183208,"y":24651.962926538577},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 2788.83,\n \"maxValue\": 19996.6668\n}","project":"Superalgos","id":"6dbfd63b-e7ed-4bb4-8830-61ee1c0b8bfc","savedPayload":{"position":{"x":18228.273929061794,"y":24538.510384368972},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"ec0d4623-4095-414b-b7db-2e2aaea0ee18","savedPayload":{"position":{"x":18245.07034216051,"y":24422.667539725957},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": true\n}","project":"Superalgos","id":"b2365709-8e84-4bce-a2ec-776ecdee5018","savedPayload":{"position":{"x":17489.456413861648,"y":24035.41999771709},"targetPosition":{"x":17788.531613981588,"y":24058.957726435445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e5da3105-dad7-430c-9f18-bc86eb8a8494","savedPayload":{"position":{"x":17505.739166653933,"y":23958.815668665313},"targetPosition":{"x":17788.531613981588,"y":24058.957726435445},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"bd542bc1-0f04-4e3d-813e-c0d03d177632","savedPayload":{"position":{"x":17788.531613981588,"y":24058.957726435445},"targetPosition":{"x":18081.97589420173,"y":24121.331233680772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2e6a55e9-f789-42e3-a228-2e7de7621e96","savedPayload":{"position":{"x":17896.565697576763,"y":23550.69732390368},"targetPosition":{"x":17989.270795889246,"y":23836.014278792227},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"5ade6743-8b52-4d37-b395-4020bad60399","savedPayload":{"position":{"x":17989.270795889246,"y":23836.014278792227},"targetPosition":{"x":18081.97589420173,"y":24121.331233680772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6bcc4939-e07a-4c6e-9b82-3f6c3fb0361e","savedPayload":{"position":{"x":18081.97589420173,"y":24121.331233680772},"targetPosition":{"x":18304.919341844947,"y":24322.07041558843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"061b6b46-3ee0-44fd-a7a2-02f15042af82","savedPayload":{"position":{"x":18304.919341844947,"y":24322.07041558843},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"856b1996-732e-4eda-89cd-1c4f989f445d","savedPayload":{"position":{"x":19117.806237131383,"y":25146.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"ad77d5d5-6ed8-477f-a622-18ce3c2fe450"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"29849c9a-7898-4c5a-899a-4c56e85b18cb","savedPayload":{"position":{"x":19300.806237131383,"y":25040.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"9953cb1c-1163-409b-a705-ca195be622cd"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c565af79-4280-4d34-a3d9-f87442e6b94b","savedPayload":{"position":{"x":19158.806237131383,"y":25170.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"5bd4397a-ff71-45bc-8d78-48c30e1fbb47"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"141f05f5-7f86-4c88-a16e-ec9680f1a32c","savedPayload":{"position":{"x":19196.806237131383,"y":25049.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"dcceb724-01ad-41b8-8d36-6c66426e0cca"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8985adde-a9ec-4d0f-9728-dacc8f3aee37","savedPayload":{"position":{"x":19228.806237131383,"y":25101.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"6b4c658c-682d-447d-9032-72b4c2348b83"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"69793041-cd9a-41ba-a818-0a6ab301bd24","savedPayload":{"position":{"x":19150.806237131383,"y":25132.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"42ed980c-68c3-4302-88f2-ee6c7c368f64"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"749a32f7-20b8-4d36-b988-4f3adbe16576","savedPayload":{"position":{"x":19269.806237131383,"y":25127.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"4a75a691-7370-4982-a105-c3e07b3bb2e4"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"461663d1-afb9-4542-ab3c-ea842435c438","savedPayload":{"position":{"x":19131.806237131383,"y":25177.35640053908},"targetPosition":{"x":19212.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"6157b135-149f-4cd9-a30a-8effb5952912"}}}],"layerFolders":[],"id":"98ae127b-7f97-4cc6-8a76-59c12ba1f0bf","savedPayload":{"position":{"x":19212.806237131383,"y":25084.35640053908},"targetPosition":{"x":19122.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"25c8cdc3-6c1c-4cd6-9697-d0b97e208750","savedPayload":{"position":{"x":19240.806237131383,"y":25199.35640053908},"targetPosition":{"x":19175.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"27fbd1fe-c409-44d2-bbe2-c1d660af7fa4"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bb1302db-ebe1-439e-86d5-1ebbeff5a600","savedPayload":{"position":{"x":19097.806237131383,"y":25167.35640053908},"targetPosition":{"x":19175.806237131383,"y":25127.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"c24c3913-d4de-4a11-98be-5bbb6dfd08cf"}}}],"layerFolders":[],"id":"21fea14e-008c-4045-9bb4-9ba81fc3e1a8","savedPayload":{"position":{"x":19175.806237131383,"y":25127.35640053908},"targetPosition":{"x":19122.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b77a55f4-30ff-4b2d-bd92-1b66c4b0b21e","savedPayload":{"position":{"x":19217.806237131383,"y":24968.35640053908},"targetPosition":{"x":19173.806237131383,"y":25011.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"3d34c1ee-1791-4131-9f88-07fa53070a72"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2e04e968-172e-47b2-ac05-89bd52b4c6fe","savedPayload":{"position":{"x":19113.806237131383,"y":25046.35640053908},"targetPosition":{"x":19173.806237131383,"y":25011.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"7abde642-8d39-4558-b7b4-986fa463eb9a"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7bbcd536-f268-4e5e-b41b-53caa62704f0","savedPayload":{"position":{"x":19086.806237131383,"y":25012.35640053908},"targetPosition":{"x":19173.806237131383,"y":25011.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"d6c885a8-dc87-4c02-b5ca-1f24b5d16f9d"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a9e14322-0cf3-445d-a78b-a7a2e159a887","savedPayload":{"position":{"x":19231.806237131383,"y":25096.35640053908},"targetPosition":{"x":19173.806237131383,"y":25011.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"cd0149c1-1fc5-45cd-9ed3-fbcae19af4fd"}}}],"layerFolders":[],"id":"41a5af79-3065-4d35-8b5e-029b0a8a4f57","savedPayload":{"position":{"x":19173.806237131383,"y":25011.35640053908},"targetPosition":{"x":19122.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"943058ba-ec05-43a1-91a6-d80ce7bb7617","savedPayload":{"position":{"x":19185.806237131383,"y":25000.35640053908},"targetPosition":{"x":19130.806237131383,"y":25027.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"d0f85c30-4e87-41cf-b653-7c3436c5a60c"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ac894069-ecfe-47b9-99e8-47cc7c0759d9","savedPayload":{"position":{"x":19074.806237131383,"y":25022.35640053908},"targetPosition":{"x":19130.806237131383,"y":25027.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"69dd97f0-c448-4f20-8f53-332aba17e578"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3014be46-6170-4c85-a719-c4d54c60d25c","savedPayload":{"position":{"x":19076.806237131383,"y":25100.35640053908},"targetPosition":{"x":19130.806237131383,"y":25027.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"00a5c610-3402-44db-96d6-9269a4acef20"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"989f38a5-92ae-4b82-957e-d51cc4d701c2","savedPayload":{"position":{"x":19200.806237131383,"y":24985.35640053908},"targetPosition":{"x":19130.806237131383,"y":25027.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"3cb69492-aac5-4546-bd0e-36d4adb250b4"}}}],"layerFolders":[],"id":"dd49dfeb-3b4c-47fd-b4fc-f49c3cf75228","savedPayload":{"position":{"x":19130.806237131383,"y":25027.35640053908},"targetPosition":{"x":19122.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ccd73064-acf5-4a5a-ae8c-33351d93b10c","savedPayload":{"position":{"x":19019.806237131383,"y":25036.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"9a4a2ee5-5a97-4d9d-a18c-ecac60673368"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1dc9b7bd-ad69-463d-a6cd-611da57ffd96","savedPayload":{"position":{"x":19146.806237131383,"y":25089.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"df91093b-8031-4634-b560-d6f2f34199e0"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"554a8fe5-5378-4ce2-b8c0-0ee5baff897b","savedPayload":{"position":{"x":19187.806237131383,"y":24993.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"26a4daa4-bda2-4b16-9687-9876c765a599"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"30220eec-b355-44d9-a094-6741fe642047","savedPayload":{"position":{"x":19134.806237131383,"y":25015.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"2da06c0a-e11f-45f2-8b9e-572bd50dd442"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"862857eb-0c55-4e40-a264-4b5962a647e7","savedPayload":{"position":{"x":19166.806237131383,"y":24945.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"c653c750-8c46-4c4e-9121-f709321d638c"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9901b4f4-0dd8-4f38-a920-718f712db2a1","savedPayload":{"position":{"x":19112.806237131383,"y":24974.35640053908},"targetPosition":{"x":19101.806237131383,"y":25021.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"01be274a-a55b-4b96-9563-03785ff82b66"}}}],"layerFolders":[],"id":"42d8cfc0-845c-40bf-8dd6-9215dc6c6a48","savedPayload":{"position":{"x":19101.806237131383,"y":25021.35640053908},"targetPosition":{"x":19122.806237131383,"y":25037.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"456a23d7-9710-4e19-a1dc-a6ec7060b802","savedPayload":{"position":{"x":19122.806237131383,"y":25037.35640053908},"targetPosition":{"x":19110.806237131383,"y":24993.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"312c9626-ef05-4150-b90e-b82ec7c52fe7","savedPayload":{"position":{"x":19110.806237131383,"y":24993.35640053908},"targetPosition":{"x":19069.806237131383,"y":25072.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"53b811e7-fa7b-4dc6-b2c7-541fee7a7d79","savedPayload":{"position":{"x":19069.806237131383,"y":25072.35640053908},"targetPosition":{"x":19060.806237131383,"y":24996.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7dd03b09-b76e-4ac7-93da-640b4f81b7be"}}},"id":"ac57707b-d6ea-497e-a49b-02e5a78cc781","savedPayload":{"position":{"x":18398.709460445676,"y":24252.034012191132},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cde38a54-ca1c-4f62-85cc-3ffb28d1c762","savedPayload":{"position":{"x":19047.806237131383,"y":24880.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"766caf63-ffec-437d-b9a5-cc0c3609f671"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"77914335-c082-4dd3-8bd9-4f19cd3ba423","savedPayload":{"position":{"x":18924.806237131383,"y":24890.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"ea8efcb0-44dd-4735-9f15-118c77adac66"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cde87a12-2360-406d-88a3-cba7bbf556dc","savedPayload":{"position":{"x":19032.806237131383,"y":24919.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"889532ab-1a93-4946-9e28-9e7c1ba455f8"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4a4740b4-49ac-4859-8d8f-f12af44eea5e","savedPayload":{"position":{"x":18997.806237131383,"y":24871.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"8d461184-fe2b-4498-9a9b-45920bd48722"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"584969d9-fb8c-4cb0-8e24-f43cb8f45dda","savedPayload":{"position":{"x":18933.806237131383,"y":24912.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"2a95f694-9743-4611-9f84-95055c237066"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6a8542d0-d8c2-490e-a57b-87135f80d139","savedPayload":{"position":{"x":19031.806237131383,"y":24913.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"c3868e61-bf92-4b69-a060-f1879c2670d3"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d7f0193c-f234-45a9-ba58-424154b1599a","savedPayload":{"position":{"x":18909.806237131383,"y":24783.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"3851fd2c-64ce-4194-add9-b27c75cc2a9f"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1b7b0a5-4e26-4889-9ab1-e38a21b7f54e","savedPayload":{"position":{"x":19000.806237131383,"y":24761.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"c2f9e290-da48-435d-b520-4fa2a569c75f"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"861c05a8-5e4f-411f-abba-e127d1fc8cfd","savedPayload":{"position":{"x":19008.806237131383,"y":24755.35640053908},"targetPosition":{"x":18975.806237131383,"y":24824.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"b6f51286-7f8d-48e7-801d-fcb46c502180"}}}],"layerFolders":[],"id":"182fdf58-c67f-4243-86a5-08c6bd81cefa","savedPayload":{"position":{"x":18975.806237131383,"y":24824.35640053908},"targetPosition":{"x":18951.806237131383,"y":24856.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3f782702-5785-4ee6-9773-a408a16e97c6","savedPayload":{"position":{"x":18951.806237131383,"y":24856.35640053908},"targetPosition":{"x":19018.806237131383,"y":24782.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e8539604-bed2-401c-bdc3-8e883e2a6e21","savedPayload":{"position":{"x":19018.806237131383,"y":24782.35640053908},"targetPosition":{"x":18988.806237131383,"y":24871.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7dd03b09-b76e-4ac7-93da-640b4f81b7be"}}},"id":"5e18d7e7-ee62-4bd0-88b2-3091b3307536","savedPayload":{"position":{"x":18512.16200261528,"y":24223.220737069718},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"438a2b61-8bfc-452b-ad19-b0a135d9c5f6","savedPayload":{"position":{"x":19325.806237131383,"y":24790.35640053908},"targetPosition":{"x":19313.806237131383,"y":24820.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"5737ba1e-1987-46b1-8b0d-895e0be80390"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1aff397f-b7fd-44a4-915c-f83c7b765dbf","savedPayload":{"position":{"x":19243.806237131383,"y":24853.35640053908},"targetPosition":{"x":19313.806237131383,"y":24820.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"8c81dac9-3f9c-4bd8-9bae-d093144101d7"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"7868deaa-fdc3-41dd-ad28-13b3eff935fe","savedPayload":{"position":{"x":19247.806237131383,"y":24685.35640053908},"targetPosition":{"x":19220.806237131383,"y":24733.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"6be8687e-5ea9-4a62-bf76-5aa7318ae585"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"18d9ee65-980a-45fa-be89-a938b5dda339","savedPayload":{"position":{"x":19207.806237131383,"y":24639.35640053908},"targetPosition":{"x":19220.806237131383,"y":24733.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"a3e762bc-35fa-44d8-937d-b6bc7d167a64"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f8c9cdc5-5166-4fb3-bf92-e886f87f9757","savedPayload":{"position":{"x":19289.806237131383,"y":24633.35640053908},"targetPosition":{"x":19220.806237131383,"y":24733.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"96ec56aa-07db-46e5-8e47-84749c21ee6c"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9b301581-6f05-4c23-8edf-b8a84e3a5185","savedPayload":{"position":{"x":19208.806237131383,"y":24699.35640053908},"targetPosition":{"x":19220.806237131383,"y":24733.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"ccb5a20c-68bc-45ab-ad12-e90040cf31a7"}}}],"layerFolders":[],"id":"5143a66d-aa2f-43c3-99d1-1540098e3953","savedPayload":{"position":{"x":19220.806237131383,"y":24733.35640053908},"targetPosition":{"x":19313.806237131383,"y":24820.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5170f97c-5472-4a5f-89b5-957974d47581","savedPayload":{"position":{"x":19292.806237131383,"y":24831.35640053908},"targetPosition":{"x":19374.806237131383,"y":24837.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"656392f8-d5e2-4149-9db5-a58fc5f9fb65"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3e95e22d-fcc6-44ae-a485-3ab728c8a6d4","savedPayload":{"position":{"x":19459.806237131383,"y":24912.35640053908},"targetPosition":{"x":19374.806237131383,"y":24837.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"b0f129f9-97f5-431d-aa14-ce8ab7dffb81"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"090fe58b-bdd0-4991-a98e-0d0eab87bcca","savedPayload":{"position":{"x":19355.806237131383,"y":24862.35640053908},"targetPosition":{"x":19374.806237131383,"y":24837.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"7ae3ddab-659b-43f1-b491-defe240bb75d"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"575854e0-9537-4645-8512-2d1fb01a107c","savedPayload":{"position":{"x":19420.806237131383,"y":24928.35640053908},"targetPosition":{"x":19374.806237131383,"y":24837.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"bf373b3e-98a7-4555-8597-b0a0d069ad40"}}}],"layerFolders":[],"id":"502ac49e-0de5-42f0-ad92-1d8630016068","savedPayload":{"position":{"x":19374.806237131383,"y":24837.35640053908},"targetPosition":{"x":19313.806237131383,"y":24820.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"462539e3-e1d3-4a55-a357-d2db4caf2205","savedPayload":{"position":{"x":19306.806237131383,"y":24828.35640053908},"targetPosition":{"x":19221.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"14539d08-52d2-4130-bfd6-c6f4c1549066"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2d109454-01b6-41f0-932c-ac215a77f12c","savedPayload":{"position":{"x":19283.806237131383,"y":24786.35640053908},"targetPosition":{"x":19221.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"03c352f1-2bee-4d84-8b6a-b7854301773d"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d50a4061-cb60-4647-9169-99dba514841a","savedPayload":{"position":{"x":19189.806237131383,"y":24752.35640053908},"targetPosition":{"x":19221.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"d13c2865-8cad-4ed0-8831-2f02c56279e5"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1905c5bf-7ae2-4992-8d82-694d91a6339c","savedPayload":{"position":{"x":19152.806237131383,"y":24815.35640053908},"targetPosition":{"x":19221.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"d7eb0de3-356f-42ff-a00a-9454894abfe2"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"21f42541-2164-47a8-bfc4-b48d8881c760","savedPayload":{"position":{"x":19228.806237131383,"y":24789.35640053908},"targetPosition":{"x":19221.806237131383,"y":24852.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"33d93a0d-9b7f-4ff0-a635-5175d18c8f64"}}}],"layerFolders":[],"id":"40ffb0b2-a28a-4f0b-af5e-611c8bfe80f8","savedPayload":{"position":{"x":19221.806237131383,"y":24852.35640053908},"targetPosition":{"x":19313.806237131383,"y":24820.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bcaa18c6-e9f7-4d8f-adc5-98fb7c450133","savedPayload":{"position":{"x":19313.806237131383,"y":24820.35640053908},"targetPosition":{"x":19215.806237131383,"y":24875.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e64d8083-7b72-4727-9c2a-0e08389338d4","savedPayload":{"position":{"x":19215.806237131383,"y":24875.35640053908},"targetPosition":{"x":19206.806237131383,"y":24974.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a786b7d3-d75a-451c-9d6e-fa923fcf535b","savedPayload":{"position":{"x":19206.806237131383,"y":24974.35640053908},"targetPosition":{"x":19117.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7dd03b09-b76e-4ac7-93da-640b4f81b7be"}}},"id":"057d7db0-baf3-47d4-be01-1e5a3e11f327","savedPayload":{"position":{"x":18628.004847258297,"y":24240.017150168434},"targetPosition":{"x":18527.862789488165,"y":24522.80959749609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"19cb046f-4d2d-4765-87dd-d713b815f6c8","savedPayload":{"position":{"x":18527.862789488165,"y":24522.80959749609},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":480,"y":222.25},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"Market Buy Test","id":"3f545550-752e-4653-8265-3bbf1fb481ef"}}},{"type":"Time Machine","name":"Limit Sell Test Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2017-08-17T00:00:00.000Z\",\n \"toDate\": \"2020-10-24T23:59:59.999Z\"\n}","project":"Superalgos","id":"c59432e9-3a29-4185-ae1d-c25474a12ff3","savedPayload":{"position":{"x":18393.45625761687,"y":24375.433841535963},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 2788.83,\n \"maxValue\": 19996.6668\n}","project":"Superalgos","id":"7ce23add-b7d8-4c82-8d7b-e359215405cb","savedPayload":{"position":{"x":18436.83155950243,"y":24266.7127886791},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\"value\":\"24-hs\"}","project":"Superalgos","id":"94062d9b-2633-4335-9c22-5df96df4ead3","savedPayload":{"position":{"x":18518.510858808604,"y":24182.866642597},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": true\n}","project":"Superalgos","id":"c5c4ef4a-7963-4d99-a509-62113c102805","savedPayload":{"position":{"x":18134.824743807734,"y":23425.43807660105},"targetPosition":{"x":18362.946533487742,"y":23620.272491100106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"44e01854-1f89-420c-8f11-af6fc93d0405","savedPayload":{"position":{"x":18193.02466241029,"y":23373.0346345135},"targetPosition":{"x":18362.946533487742,"y":23620.272491100106},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"07db6330-aa15-46ff-ae02-620f5034ccb9","savedPayload":{"position":{"x":18362.946533487742,"y":23620.272491100106},"targetPosition":{"x":18563.6857153954,"y":23843.215938743324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6c846405-d0e1-4aa6-b1c2-1df12f1be0cd","savedPayload":{"position":{"x":18749.095912020366,"y":23272.582028966233},"targetPosition":{"x":18656.390813707883,"y":23557.89898385478},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"3f2811bf-99df-4df6-8354-a453e0a515da","savedPayload":{"position":{"x":18656.390813707883,"y":23557.89898385478},"targetPosition":{"x":18563.6857153954,"y":23843.215938743324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"65547cf5-6fdd-4426-bf0e-4eff419f0ad5","savedPayload":{"position":{"x":18563.6857153954,"y":23843.215938743324},"targetPosition":{"x":18626.059222640728,"y":24136.660218963465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"3d69cfdb-24e3-476d-827e-cf13f8e4bc82","savedPayload":{"position":{"x":18626.059222640728,"y":24136.660218963465},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f626c221-97ca-4d13-9b58-493204480f25","savedPayload":{"position":{"x":18752.806237131383,"y":25182.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"6e259543-d2e4-4d9a-ba1a-fc890aaa32a5"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"214fa689-81e0-4db1-9495-85702e956299","savedPayload":{"position":{"x":18769.806237131383,"y":25014.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"c74b3baa-824d-4ce4-a45e-b6cf32859d0e"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f0b72c26-9c66-4872-b7a8-41d3bb2ae15c","savedPayload":{"position":{"x":18810.806237131383,"y":25050.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"39fe54ff-37d8-4140-a079-4c512631023d"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b7269055-4ca2-4873-b0fe-4d6422525a39","savedPayload":{"position":{"x":18785.806237131383,"y":25154.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"57b21c5c-104b-4607-88da-a8c358fed8ab"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f99a5c2d-d080-4adc-a77c-2b20bb683be2","savedPayload":{"position":{"x":18721.806237131383,"y":25195.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"455e80be-0a6c-4775-acb3-0efdb0bcfc02"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"704be1a7-f1d1-4106-9b67-5031f58a1ebe","savedPayload":{"position":{"x":18668.806237131383,"y":25072.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"8673be20-a5cb-4392-bbb3-472f22640c61"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6ff476c1-1bcc-4a6d-b320-c74d5490dce1","savedPayload":{"position":{"x":18680.806237131383,"y":25042.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"d23eb0f6-00d5-440e-9916-4df45026f8b7"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a7d59d77-01fe-41b9-a8d7-04ed23178d5e","savedPayload":{"position":{"x":18742.806237131383,"y":25037.35640053908},"targetPosition":{"x":18733.806237131383,"y":25102.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"e72e35e6-aef7-4ffc-8421-c2d71b0436b6"}}}],"layerFolders":[],"id":"8f3e097c-b39d-496a-b30c-31fd5ecd869f","savedPayload":{"position":{"x":18733.806237131383,"y":25102.35640053908},"targetPosition":{"x":18799.806237131383,"y":25012.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5af5e933-b2ce-4847-87f8-edbb2f663360","savedPayload":{"position":{"x":18848.806237131383,"y":24839.35640053908},"targetPosition":{"x":18833.806237131383,"y":24927.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"79a005f0-3931-4160-bfdb-67dcce3288b8"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0e3bc752-97f2-41fc-a9be-dee3a4f9f4c1","savedPayload":{"position":{"x":18931.806237131383,"y":24909.35640053908},"targetPosition":{"x":18833.806237131383,"y":24927.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"6f7fdbf1-0cb8-4aa8-b18b-2c0998463fe6"}}}],"layerFolders":[],"id":"b804d34a-63e6-4486-8991-ce34ccd1548d","savedPayload":{"position":{"x":18833.806237131383,"y":24927.35640053908},"targetPosition":{"x":18799.806237131383,"y":25012.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c11df23a-4951-4d2e-a81f-5ececc7c6fc6","savedPayload":{"position":{"x":18841.806237131383,"y":25019.35640053908},"targetPosition":{"x":18779.806237131383,"y":25002.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"01ab6e88-fe83-447e-ba50-88da1c8fddfa"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"963be861-e362-427e-90aa-82a05b81b0a2","savedPayload":{"position":{"x":18735.806237131383,"y":24969.35640053908},"targetPosition":{"x":18779.806237131383,"y":25002.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"1d1b6643-9123-4b2c-946e-c81f22c58195"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a6080313-5851-449d-a877-80e9c0ac4a56","savedPayload":{"position":{"x":18759.806237131383,"y":24984.35640053908},"targetPosition":{"x":18779.806237131383,"y":25002.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"758df5f1-6c16-45af-98c2-3a969600300c"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8b122713-0451-4782-a62c-54310fdf5912","savedPayload":{"position":{"x":18758.806237131383,"y":25084.35640053908},"targetPosition":{"x":18779.806237131383,"y":25002.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"71f89d6d-9524-4c3e-b494-734301ebdc18"}}}],"layerFolders":[],"id":"d40ab47f-450f-4337-bee8-868905a70fa5","savedPayload":{"position":{"x":18779.806237131383,"y":25002.35640053908},"targetPosition":{"x":18799.806237131383,"y":25012.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b81b4d3d-def5-49b7-8f78-3fa5d97e6c7b","savedPayload":{"position":{"x":18709.806237131383,"y":25068.35640053908},"targetPosition":{"x":18742.806237131383,"y":25030.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"3225c507-45b3-4912-ab4d-2d685d755f92"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0c7d34f9-92cd-4c95-bb52-5311e5971f36","savedPayload":{"position":{"x":18723.806237131383,"y":24966.35640053908},"targetPosition":{"x":18742.806237131383,"y":25030.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"1bd25618-c4ed-40f9-a841-c239c65b773e"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"88e64d68-535f-44c1-aeb7-57ce838350f4","savedPayload":{"position":{"x":18685.806237131383,"y":25090.35640053908},"targetPosition":{"x":18742.806237131383,"y":25030.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"b811a8fe-57c8-4de9-a1ee-bc372d6240ea"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"69edc514-4311-4f8c-80db-28b5f70cf1ab","savedPayload":{"position":{"x":18779.806237131383,"y":25051.35640053908},"targetPosition":{"x":18742.806237131383,"y":25030.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"d7ab5b88-5cb0-460f-a16c-54456c54013f"}}}],"layerFolders":[],"id":"9c36b4f5-0c5b-4e90-b065-e0fcedd4d6c6","savedPayload":{"position":{"x":18742.806237131383,"y":25030.35640053908},"targetPosition":{"x":18799.806237131383,"y":25012.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fe7b092b-260f-4d5c-b5be-26dd2ee861be","savedPayload":{"position":{"x":18820.806237131383,"y":24973.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"d409a810-1017-4699-8985-ce14dc39d2d9"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b6418ec9-e913-4704-8829-9bc622ab8ed0","savedPayload":{"position":{"x":18814.806237131383,"y":25030.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"1c577265-65fd-4a91-af62-bb819a2a89be"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6b0cd0da-d042-410b-9008-ec8cf0bfa3c5","savedPayload":{"position":{"x":18658.806237131383,"y":25002.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"edc68552-549e-4c9d-ac7d-f709f507a468"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e511af81-527b-4284-8836-bfb29ebdf17a","savedPayload":{"position":{"x":18783.806237131383,"y":24944.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"586f236c-1b7c-4556-b5e1-ff1fa16f0a88"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"620729ae-c90a-4042-ab3c-d846ac30c116","savedPayload":{"position":{"x":18786.806237131383,"y":24892.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"b4da3c6a-6aa1-45af-81d7-c44f48317818"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ef9e3a13-e728-4999-8185-c382cd9f03b6","savedPayload":{"position":{"x":18830.806237131383,"y":25007.35640053908},"targetPosition":{"x":18742.806237131383,"y":24980.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"387ec369-fc16-43af-9f14-9cb1fc9f6532"}}}],"layerFolders":[],"id":"d929ae54-0841-46bb-962a-66b3ac07d9b3","savedPayload":{"position":{"x":18742.806237131383,"y":24980.35640053908},"targetPosition":{"x":18799.806237131383,"y":25012.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a15e080e-598f-4317-9f30-2d2574135511","savedPayload":{"position":{"x":18799.806237131383,"y":25012.35640053908},"targetPosition":{"x":18805.806237131383,"y":24948.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c6b1eaf0-349d-48c0-a242-5cc8c369f68d","savedPayload":{"position":{"x":18805.806237131383,"y":24948.35640053908},"targetPosition":{"x":18904.806237131383,"y":24977.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"33093a8d-727b-4fb8-b963-e2a6aa8b2a5f","savedPayload":{"position":{"x":18904.806237131383,"y":24977.35640053908},"targetPosition":{"x":18858.806237131383,"y":24958.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"81c73c79-6186-4c18-af77-4fab5b4f9c31"}}},"id":"2f275476-1b49-463b-a1cc-661d2b73a70d","savedPayload":{"position":{"x":18743.103387533698,"y":24135.12802691442},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"f73725b6-8348-4d36-adc2-ec58dee542fd","savedPayload":{"position":{"x":18866.806237131383,"y":25008.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"41db05a2-c262-482d-a0b8-4a80631e6c85"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4f5b0cf9-b16b-4289-bddb-e5b6006e411e","savedPayload":{"position":{"x":18758.806237131383,"y":24973.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"435426fd-8775-410a-8d20-bbc7b0b8fd9f"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"22ad64c1-7080-47b1-894b-ad9a1120b938","savedPayload":{"position":{"x":18817.806237131383,"y":25052.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"54800ef1-f430-4174-8229-86a2d34bf296"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5c76f16d-2707-4b08-850b-b169450c7d22","savedPayload":{"position":{"x":18837.806237131383,"y":24962.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"3dfa071e-eb45-404c-88c2-0c938d326899"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"06ef6604-e98e-4959-98ce-673305197fc2","savedPayload":{"position":{"x":18785.806237131383,"y":24900.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"3fa69f4b-646d-4fe3-abfb-be2d420a0811"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"551b61f1-fe32-4b32-935b-24eb42d203f5","savedPayload":{"position":{"x":18781.806237131383,"y":24877.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"a34a3ae4-0ef6-4ace-ace2-d54dc33112cb"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"05663cb9-539b-4671-939d-09e9b1515259","savedPayload":{"position":{"x":18879.806237131383,"y":24883.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"208ef083-1d5a-4c91-87b4-a286c9bcdf09"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"303d9fbf-034b-427a-a99f-be18814c8f97","savedPayload":{"position":{"x":18778.806237131383,"y":25051.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"676ef37d-0bb4-4052-83ba-b64eb1a2d490"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"49b6706c-3c70-4bf3-9c6a-acce1bbef7b0","savedPayload":{"position":{"x":18846.806237131383,"y":25052.35640053908},"targetPosition":{"x":18809.806237131383,"y":24960.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"91f7045f-cdb1-4466-b0dc-56c6cf6c33a7"}}}],"layerFolders":[],"id":"927cf398-bb07-4164-886a-c9986abf76be","savedPayload":{"position":{"x":18809.806237131383,"y":24960.35640053908},"targetPosition":{"x":18755.806237131383,"y":24999.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"581a2b26-65ef-4ee4-a6c4-5af5b15734d9","savedPayload":{"position":{"x":18755.806237131383,"y":24999.35640053908},"targetPosition":{"x":18820.806237131383,"y":25049.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9d75f444-719e-424c-b2ea-7b527d383d56","savedPayload":{"position":{"x":18820.806237131383,"y":25049.35640053908},"targetPosition":{"x":18848.806237131383,"y":25068.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"81c73c79-6186-4c18-af77-4fab5b4f9c31"}}},"id":"17ace8b5-9dac-4c90-b663-6b1eeb5fc2de","savedPayload":{"position":{"x":18851.824440390563,"y":24178.50332879998},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"fd121350-3e14-4146-a16c-bf45b7fc8e7b","savedPayload":{"position":{"x":18622.806237131383,"y":25025.35640053908},"targetPosition":{"x":18645.806237131383,"y":24963.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"fd1074c4-8a95-4a47-9c89-38dc9b9908cc"}}},{"type":"Layer","name":"Strategies","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"c2f22306-3968-4346-aab4-281632a01fe1","savedPayload":{"position":{"x":18562.806237131383,"y":25001.35640053908},"targetPosition":{"x":18645.806237131383,"y":24963.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"802b0a87-1e13-416a-971f-50e3fb059f5f"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"69e96da7-fcc7-4906-950c-3dbfa49009e1","savedPayload":{"position":{"x":18570.806237131383,"y":24985.35640053908},"targetPosition":{"x":18663.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"59362fd3-0095-4f58-bc2c-e5490bfe8941"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fa4b9e49-ca79-4b40-b2e9-bb91465e3d98","savedPayload":{"position":{"x":18627.806237131383,"y":24887.35640053908},"targetPosition":{"x":18663.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"b704efb5-f094-4666-8aae-32f228946374"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"090b5e2f-fe52-435c-aa1b-58ed3265f182","savedPayload":{"position":{"x":18712.806237131383,"y":24903.35640053908},"targetPosition":{"x":18663.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"1ebc0b50-818f-4956-a2af-18aac51fb93a"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"5f4d30e8-13b8-4014-bd52-33afa7cd55ce","savedPayload":{"position":{"x":18576.806237131383,"y":24932.35640053908},"targetPosition":{"x":18663.806237131383,"y":24969.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"313f5162-6c8c-418d-b04b-83df35662cde"}}}],"layerFolders":[],"id":"b0cc0fe7-3d67-4bed-a910-77f4eceb1288","savedPayload":{"position":{"x":18663.806237131383,"y":24969.35640053908},"targetPosition":{"x":18645.806237131383,"y":24963.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"56785160-c6ce-42de-af9d-39024111b953","savedPayload":{"position":{"x":18532.806237131383,"y":24915.35640053908},"targetPosition":{"x":18607.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"ae0cc8a0-72d8-403e-91f6-e2dc26e64165"}}},{"type":"Layer","name":"Open Stages","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"1e5490a2-6e6a-4071-9eee-e302e7b0f08e","savedPayload":{"position":{"x":18632.806237131383,"y":24914.35640053908},"targetPosition":{"x":18607.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"0fd07957-b8aa-4760-bdea-d61eeee8e8d0"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dfd92369-3705-499e-ac47-f03784408d51","savedPayload":{"position":{"x":18590.806237131383,"y":24889.35640053908},"targetPosition":{"x":18607.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"4a6acbfc-a617-439e-af0d-59ac5cb2c4e6"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5a10e141-e095-4666-8aec-b41fb041f5b0","savedPayload":{"position":{"x":18558.806237131383,"y":25009.35640053908},"targetPosition":{"x":18607.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"4a5cdf2c-d595-4da5-aff2-b69d68b33051"}}}],"layerFolders":[],"id":"54fd5c78-6d8e-4c31-93d8-c58d0864aae5","savedPayload":{"position":{"x":18607.806237131383,"y":24921.35640053908},"targetPosition":{"x":18645.806237131383,"y":24963.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7ed56365-6534-46db-8924-07f24df60a5f","savedPayload":{"position":{"x":18472.806237131383,"y":25035.35640053908},"targetPosition":{"x":18567.806237131383,"y":25051.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"40fe4925-06ba-4173-a698-d458c8296a70"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6c895b6e-8f58-4ee0-944b-2c11731ed786","savedPayload":{"position":{"x":18652.806237131383,"y":25080.35640053908},"targetPosition":{"x":18567.806237131383,"y":25051.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"afd8744e-9bc1-4e74-82ec-cf63fcf8acb4"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"72056be2-bc8c-45a0-8568-22a54aefc919","savedPayload":{"position":{"x":18478.806237131383,"y":25084.35640053908},"targetPosition":{"x":18567.806237131383,"y":25051.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"7311fd34-bf6d-40a4-adba-4b8b725a539d"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"13dc2c83-104c-4dff-8078-0fdbd40f5d3d","savedPayload":{"position":{"x":18616.806237131383,"y":25066.35640053908},"targetPosition":{"x":18567.806237131383,"y":25051.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"57ee4240-9bf1-400d-994b-9fe745dad975"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"be0d9b68-d1f5-486a-8fed-c0d3f628f3c6","savedPayload":{"position":{"x":18615.806237131383,"y":25006.35640053908},"targetPosition":{"x":18567.806237131383,"y":25051.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"721d981d-8d29-40c5-8fc7-f51acce96b27"}}}],"layerFolders":[],"id":"5a3ac590-23ca-4bbc-9b88-bd7e68b6dfe2","savedPayload":{"position":{"x":18567.806237131383,"y":25051.35640053908},"targetPosition":{"x":18645.806237131383,"y":24963.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a6114b6a-9cd4-4ac1-b0fe-64a58bfdddda","savedPayload":{"position":{"x":18645.806237131383,"y":24963.35640053908},"targetPosition":{"x":18682.806237131383,"y":25016.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bbe6f37c-1ccd-4e70-b01e-06def55338f2","savedPayload":{"position":{"x":18682.806237131383,"y":25016.35640053908},"targetPosition":{"x":18733.806237131383,"y":24992.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1c2ed238-426c-4af8-8355-503c42903aa0","savedPayload":{"position":{"x":18733.806237131383,"y":24992.35640053908},"targetPosition":{"x":18809.806237131383,"y":25031.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"81c73c79-6186-4c18-af77-4fab5b4f9c31"}}},"id":"d9c6e00e-8a52-44f6-af6c-c97616cc6bd4","savedPayload":{"position":{"x":18935.67058647266,"y":24260.182628106155},"targetPosition":{"x":18688.432729886055,"y":24430.104499183606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34216b14-6ed5-482e-b84c-f768c095e208","savedPayload":{"position":{"x":18688.432729886055,"y":24430.104499183606},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":960,"y":222.25},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"Limit Sell Test","id":"5774ae7f-f8ac-487a-b8f8-8d75b50b598c"}}},{"type":"Time Machine","name":"Limit Buy Test Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2017-08-17T00:00:00.000Z\",\n \"toDate\": \"2020-10-24T23:59:59.999Z\"\n}","project":"Superalgos","id":"8a383c28-6a10-4e97-8f5f-b41300f732bb","savedPayload":{"position":{"x":18666.320857345996,"y":24231.872830807282},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 2788.83,\n \"maxValue\": 19996.6668\n}","project":"Superalgos","id":"6da512cb-6683-44a9-83d3-14e8d996c654","savedPayload":{"position":{"x":18765.31684519053,"y":24169.411014161808},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\"value\":\"24-hs\"}","project":"Superalgos","id":"03ae330f-94a9-4d11-8c2a-8eed0558054c","savedPayload":{"position":{"x":18880.680314546484,"y":24149.5879446183},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"6ff1cf23-d228-4221-82c6-15add1a43677","savedPayload":{"position":{"x":19015.477067762527,"y":23311.290322795623},"targetPosition":{"x":19085.5106769193,"y":23603.001298914925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"702e4a18-9549-4a2b-a427-626549ebba6a"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"187f1618-bfee-4d2e-9764-2c36d81e20ec","savedPayload":{"position":{"x":19093.363761411663,"y":23303.104101422257},"targetPosition":{"x":19085.5106769193,"y":23603.001298914925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"eeb9e24a-0840-4f08-be63-ed0a56c28a39"}}}],"layerFolders":[],"id":"00f2f453-b2b8-46b3-a39a-40dfdd1ceb82","savedPayload":{"position":{"x":19085.5106769193,"y":23603.001298914925},"targetPosition":{"x":19116.8692158996,"y":23901.357867525407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0cee8c64-aae3-4b40-82b1-db91e4d3b4e4","savedPayload":{"position":{"x":19602.279412524564,"y":23548.68671614992},"targetPosition":{"x":19359.57431421208,"y":23725.022291837664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"07b29cab-5801-462d-b3b4-9b24ea301f32"}}}],"layerFolders":[],"id":"1a5041d1-20b9-4c7b-8e3e-b9b43fe4f0f7","savedPayload":{"position":{"x":19359.57431421208,"y":23725.022291837664},"targetPosition":{"x":19116.8692158996,"y":23901.357867525407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f29b7192-1dc7-43f0-a56e-a746b72df58b","savedPayload":{"position":{"x":19116.8692158996,"y":23901.357867525407},"targetPosition":{"x":18994.84822297686,"y":24175.421504818187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"1c8eeb10-b897-4994-bbc3-566a808e4bf5"}}},"id":"bffbfacc-1e08-42af-97a7-80b7f3841d96","savedPayload":{"position":{"x":18994.84822297686,"y":24175.421504818187},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d3555789-49d8-46bf-95e9-818532238387","savedPayload":{"position":{"x":18946.806237131383,"y":25282.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"9ce6335b-8e5a-4ec2-8630-86c002567576"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f5366eba-19db-40c5-a457-1a427eb770cc","savedPayload":{"position":{"x":18790.806237131383,"y":25131.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"4d1cdac9-963e-4cde-8f67-b06fe19477d2"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8b0da00c-3533-488e-8241-b0d6a8e702a9","savedPayload":{"position":{"x":18938.806237131383,"y":25259.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"a3652e16-ac56-40c8-b369-24bf1708d811"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b473d5fd-2626-4977-bad2-d5d966dd61c7","savedPayload":{"position":{"x":18820.806237131383,"y":25228.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"5c878cef-548d-4e8f-b8ee-fa3fdabafe9d"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"114689ec-f923-4e4c-b720-d934b2144dc2","savedPayload":{"position":{"x":18954.806237131383,"y":25149.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"573e494a-435c-4143-8c30-fa942c64447e"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fb598201-66bb-4182-a29d-5cf2f32c7236","savedPayload":{"position":{"x":18789.806237131383,"y":25210.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"e05ef1da-b8f0-4856-a973-726568f5ec12"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"46ccd48f-7e1c-4125-b00a-483862707e39","savedPayload":{"position":{"x":18956.806237131383,"y":25132.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"37658dd9-ad46-4628-866e-2c3fae48785c"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3d9aa542-4a51-4f84-abd3-39e72ed538df","savedPayload":{"position":{"x":18799.806237131383,"y":25123.35640053908},"targetPosition":{"x":18880.806237131383,"y":25219.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"2a51448d-afbb-4f60-a5d5-1ae4dc606aad"}}}],"layerFolders":[],"id":"089a07ee-288e-496a-9b5f-b3c12dc009c8","savedPayload":{"position":{"x":18880.806237131383,"y":25219.35640053908},"targetPosition":{"x":18902.806237131383,"y":25133.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c92ef7d0-c733-44d6-808a-253e884361c9","savedPayload":{"position":{"x":18892.806237131383,"y":25173.35640053908},"targetPosition":{"x":18966.806237131383,"y":25188.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"ae74b55c-fe14-4d9e-b578-6d1b96d9d7f7"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4728136f-2ca6-4207-abda-909c039a8d46","savedPayload":{"position":{"x":18993.806237131383,"y":25217.35640053908},"targetPosition":{"x":18966.806237131383,"y":25188.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"1cd1d974-0484-4bf9-82fc-5fd129b2ddc6"}}}],"layerFolders":[],"id":"ecff667b-f8d1-4804-b635-b95dd0151603","savedPayload":{"position":{"x":18966.806237131383,"y":25188.35640053908},"targetPosition":{"x":18902.806237131383,"y":25133.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b4d90446-e3e0-40c6-ba07-23aa180e037e","savedPayload":{"position":{"x":19004.806237131383,"y":25059.35640053908},"targetPosition":{"x":18993.806237131383,"y":25130.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"a126a15e-a3c0-4199-af5a-fccc45467467"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7cbe9abd-daed-4a81-b0ad-b1b3c3d8242b","savedPayload":{"position":{"x":19068.806237131383,"y":25197.35640053908},"targetPosition":{"x":18993.806237131383,"y":25130.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"5f360b17-c7c9-4d44-8357-e8f8d1cc9183"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1c59e1cf-21df-4277-9cb8-92176aa44ac9","savedPayload":{"position":{"x":18989.806237131383,"y":25158.35640053908},"targetPosition":{"x":18993.806237131383,"y":25130.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"f94a19cf-c3b3-446e-82d3-72543db67d23"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"70d1f6bb-bb1e-46d2-b8b7-2e8b54c34750","savedPayload":{"position":{"x":19065.806237131383,"y":25112.35640053908},"targetPosition":{"x":18993.806237131383,"y":25130.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"f5ca1a9c-edcb-4816-93a8-3b5f511d8ff1"}}}],"layerFolders":[],"id":"da5a5fd4-c66d-44c4-a8fb-81bcb8c9752f","savedPayload":{"position":{"x":18993.806237131383,"y":25130.35640053908},"targetPosition":{"x":18902.806237131383,"y":25133.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0254d344-16b9-4f1c-a3bb-d5c70a69926a","savedPayload":{"position":{"x":18725.806237131383,"y":25014.35640053908},"targetPosition":{"x":18813.806237131383,"y":25035.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"1a2e1697-7f30-4609-9591-6476f3533a0a"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a3f15a56-46f2-4963-ba1f-eba7d3a5933d","savedPayload":{"position":{"x":18743.806237131383,"y":24951.35640053908},"targetPosition":{"x":18813.806237131383,"y":25035.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"6020e0b8-c0eb-43cc-bd0a-ada68ab128da"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f4fa4a08-9f49-41b5-9314-874fad02bf3b","savedPayload":{"position":{"x":18754.806237131383,"y":25133.35640053908},"targetPosition":{"x":18813.806237131383,"y":25035.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"1998b08d-c14d-46df-a55b-3bcc20d2e441"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1825d0a-855b-4f1b-af50-d4bd620ba7a7","savedPayload":{"position":{"x":18829.806237131383,"y":25112.35640053908},"targetPosition":{"x":18813.806237131383,"y":25035.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"9c8ee112-1103-4fc6-a711-7b395d438e7d"}}}],"layerFolders":[],"id":"836f3122-917e-4e64-a002-88433262af82","savedPayload":{"position":{"x":18813.806237131383,"y":25035.35640053908},"targetPosition":{"x":18902.806237131383,"y":25133.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d851edba-4cc1-40b0-a507-8afc1a3ad2ca","savedPayload":{"position":{"x":18920.806237131383,"y":25067.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"741d5b82-bd6f-4cd6-b8c0-9abad7f6b897"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"60e75dbb-8d12-4752-a325-0f512069934e","savedPayload":{"position":{"x":18789.806237131383,"y":25072.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"da530ea4-3cdc-46de-94a9-73dc3deaf177"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dfce2838-aef8-4139-afef-6447490ec31d","savedPayload":{"position":{"x":18955.806237131383,"y":25225.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"f8b50d22-5c67-4168-ab2e-d3e0f0e91d3c"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"46b15fbf-f1bc-41e1-a1d9-c203f65a76b2","savedPayload":{"position":{"x":18974.806237131383,"y":25151.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"dce2c843-5e57-4d57-ad65-7b08f7cab6b0"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8876a7d9-9372-417f-862f-9f59b0a60693","savedPayload":{"position":{"x":18958.806237131383,"y":25109.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"c0976660-4631-4a4c-b07e-6782bc3b8032"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a495d599-215e-4115-b42a-173d54515f63","savedPayload":{"position":{"x":18901.806237131383,"y":25075.35640053908},"targetPosition":{"x":18887.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"cbc0704e-56ff-4ef5-958f-97fe7a4dd3c9"}}}],"layerFolders":[],"id":"ca564aa9-cc71-4146-b465-43174042cf2b","savedPayload":{"position":{"x":18887.806237131383,"y":25134.35640053908},"targetPosition":{"x":18902.806237131383,"y":25133.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7141338e-6717-45ea-bc3f-347f50ec3c77","savedPayload":{"position":{"x":18902.806237131383,"y":25133.35640053908},"targetPosition":{"x":18855.806237131383,"y":25034.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ab661e61-6712-487b-8386-515832e2f65e","savedPayload":{"position":{"x":18855.806237131383,"y":25034.35640053908},"targetPosition":{"x":18903.806237131383,"y":24985.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"606a0b94-4c65-4352-abd4-1264374f586f","savedPayload":{"position":{"x":18903.806237131383,"y":24985.35640053908},"targetPosition":{"x":18955.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2cbf8f-3d92-490b-a15e-0003763d228d"}}},"id":"03221f55-3b1b-41b6-af6c-6f18b15e9437","savedPayload":{"position":{"x":19090.439541357806,"y":24242.978769402842},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"2e841b8c-9314-4bcc-ae94-bbe3155ab2f5","savedPayload":{"position":{"x":19143.806237131383,"y":25115.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"37806527-5e9d-48a9-9cf0-c9906965b398"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"29341beb-df59-42f6-912c-1bfd7a1a385a","savedPayload":{"position":{"x":19127.806237131383,"y":25083.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"da7e242b-5e54-4745-b8db-3d1957f38751"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"907229b9-cdab-4d06-bd98-782f5b8edd6c","savedPayload":{"position":{"x":19071.806237131383,"y":25242.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"7975e8f0-204d-48cf-aec0-94ea4fcf4fd9"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5f1664ae-c194-4274-9f3d-80b20b50f485","savedPayload":{"position":{"x":19123.806237131383,"y":25218.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"b57ef622-db82-4de5-9371-9f6985bd8a5e"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ae8b8683-9c18-4459-a133-972323429449","savedPayload":{"position":{"x":19046.806237131383,"y":25194.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"d326be60-614b-4b0f-859f-befca690e357"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"70b90022-f333-4f3a-ae86-26cf36d4446a","savedPayload":{"position":{"x":19069.806237131383,"y":25142.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"e6befd18-7d0d-4364-8621-bc79ab621457"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"17482186-2229-45e5-a59f-0c4a18359ca5","savedPayload":{"position":{"x":18984.806237131383,"y":25171.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"c9af4f59-f4ec-4dbc-95a3-caf511e65c90"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0f7723b7-67fd-4b3d-b5a1-50e29749021b","savedPayload":{"position":{"x":18959.806237131383,"y":25169.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"f44e0ea3-7b0e-43e1-aa31-0fc55a7c4050"}}},{"type":"Layer","name":"Trading System Infos","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"ad84b70c-56ba-4626-8895-d74e91b9d5d3","savedPayload":{"position":{"x":18954.806237131383,"y":25105.35640053908},"targetPosition":{"x":19053.806237131383,"y":25158.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"d2954e89-37f5-4cdc-ac1d-0141fc01639f"}}}],"layerFolders":[],"id":"58cff029-ac14-4373-b93b-e424f0034d47","savedPayload":{"position":{"x":19053.806237131383,"y":25158.35640053908},"targetPosition":{"x":19099.806237131383,"y":25108.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c296a856-11ea-4fdc-9312-de45557dc0d3","savedPayload":{"position":{"x":19099.806237131383,"y":25108.35640053908},"targetPosition":{"x":19025.806237131383,"y":25022.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c07e7894-b447-4622-8625-94f450921f28","savedPayload":{"position":{"x":19025.806237131383,"y":25022.35640053908},"targetPosition":{"x":18969.806237131383,"y":25036.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2cbf8f-3d92-490b-a15e-0003763d228d"}}},"id":"c37118e3-6dbf-454f-ae0c-648df85b2dad","savedPayload":{"position":{"x":19152.90135800328,"y":24341.974757247375},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"b90dc285-fc57-4d95-a748-fb8113807439","savedPayload":{"position":{"x":18769.806237131383,"y":24969.35640053908},"targetPosition":{"x":18781.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"90f6560c-dca3-4a72-990e-f1588e08f772"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9321a0c6-6740-4fbc-97be-4871060cfa31","savedPayload":{"position":{"x":18863.806237131383,"y":24828.35640053908},"targetPosition":{"x":18781.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"85e1e4f0-55e8-469b-a97b-bdc5fb3f016c"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8475d66e-d6b8-4694-9252-ef1223ac2c81","savedPayload":{"position":{"x":18720.806237131383,"y":24793.35640053908},"targetPosition":{"x":18703.806237131383,"y":24874.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"e042d177-41d9-4966-a61a-218a2e93c553"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dc4278d4-2e4f-442d-9a1c-5b21060a3a81","savedPayload":{"position":{"x":18639.806237131383,"y":24852.35640053908},"targetPosition":{"x":18703.806237131383,"y":24874.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"b7f12e52-bbc5-476c-bc6a-8515b878e78d"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"082dcc05-ef58-43f7-b7a6-2c641e9ef05c","savedPayload":{"position":{"x":18800.806237131383,"y":24884.35640053908},"targetPosition":{"x":18703.806237131383,"y":24874.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"8aaddd9d-9831-4ae5-9bc4-a2fb790e32ef"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"568cf864-6de1-4dc4-b89b-8224121590c3","savedPayload":{"position":{"x":18783.806237131383,"y":24792.35640053908},"targetPosition":{"x":18703.806237131383,"y":24874.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"c0eddd3a-0b62-4405-8fc0-f2ddb3ccf965"}}}],"layerFolders":[],"id":"09222bd1-f520-40ff-908e-9aaab1040c77","savedPayload":{"position":{"x":18703.806237131383,"y":24874.35640053908},"targetPosition":{"x":18781.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6aef67f9-f74d-4033-ba0f-a91638188801","savedPayload":{"position":{"x":18718.806237131383,"y":25007.35640053908},"targetPosition":{"x":18809.806237131383,"y":24989.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"a9d6a1b3-8827-4bf3-ae65-354432d86a97"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"52caadf5-9b9d-423f-bb39-7f0aefccb547","savedPayload":{"position":{"x":18734.806237131383,"y":24916.35640053908},"targetPosition":{"x":18809.806237131383,"y":24989.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"3a202999-43e4-4a7a-bac8-294164a71ceb"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"569a1466-05d6-4c1b-9a7b-691dfbfca539","savedPayload":{"position":{"x":18733.806237131383,"y":24934.35640053908},"targetPosition":{"x":18809.806237131383,"y":24989.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"9871f9d6-f731-4c6b-a284-9d2f68813255"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ea8ca843-f7f2-4bc0-b20c-8f708fe0c481","savedPayload":{"position":{"x":18760.806237131383,"y":24929.35640053908},"targetPosition":{"x":18809.806237131383,"y":24989.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"c84d8ff0-ffa6-4af0-b2c3-2aea021a8b45"}}}],"layerFolders":[],"id":"e08f6ff7-94c3-4300-9e8f-8a2d50c0fc27","savedPayload":{"position":{"x":18809.806237131383,"y":24989.35640053908},"targetPosition":{"x":18781.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"38652ae1-12c3-4aeb-abf6-81fb432f11f6","savedPayload":{"position":{"x":18647.806237131383,"y":24950.35640053908},"targetPosition":{"x":18736.806237131383,"y":24915.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"bd457903-5cbf-4864-8f59-79b942757011"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"db2a2b05-09af-4555-8c7a-5353cce02e34","savedPayload":{"position":{"x":18669.806237131383,"y":24870.35640053908},"targetPosition":{"x":18736.806237131383,"y":24915.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"2bbf23d0-91c9-4c90-a48e-e8d64d5c555e"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0ba14823-21b1-42f9-a203-d21e80c60f25","savedPayload":{"position":{"x":18757.806237131383,"y":24951.35640053908},"targetPosition":{"x":18736.806237131383,"y":24915.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"2d4e810c-6df7-4c1e-a135-83b833cb7a70"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"129ea020-f53d-476c-ae08-aee3bc0db286","savedPayload":{"position":{"x":18692.806237131383,"y":24981.35640053908},"targetPosition":{"x":18736.806237131383,"y":24915.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"5f8943df-fcd6-4f9f-9542-3eb5ef302653"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"95a48ae8-b77c-406e-ae6f-ce2db5a0e3c6","savedPayload":{"position":{"x":18772.806237131383,"y":24876.35640053908},"targetPosition":{"x":18736.806237131383,"y":24915.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"b9d56d81-c0e1-4ce1-a1fa-a12e2b75fc22"}}}],"layerFolders":[],"id":"0269dd9e-4a2a-405c-9edd-1cffdcdc889e","savedPayload":{"position":{"x":18736.806237131383,"y":24915.35640053908},"targetPosition":{"x":18781.806237131383,"y":24918.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d8edb159-1caf-4ac7-a61f-0e9a16c0592f","savedPayload":{"position":{"x":18781.806237131383,"y":24918.35640053908},"targetPosition":{"x":18840.806237131383,"y":24995.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2f2d30b-b2fc-40db-8462-0eef29d04448","savedPayload":{"position":{"x":18840.806237131383,"y":24995.35640053908},"targetPosition":{"x":18926.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae13a4af-ef93-425f-a681-85caa9c44717","savedPayload":{"position":{"x":18926.806237131383,"y":24986.35640053908},"targetPosition":{"x":18846.806237131383,"y":24979.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2cbf8f-3d92-490b-a15e-0003763d228d"}}},"id":"bde51bc7-7202-41d2-a091-02e77463be0d","savedPayload":{"position":{"x":19172.72442754679,"y":24457.33822660333},"targetPosition":{"x":18872.82723005412,"y":24449.485142110967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"24f52217-e2a4-4d30-a685-9ec0a4949602","savedPayload":{"position":{"x":18872.82723005412,"y":24449.485142110967},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":1440,"y":222.25},"width":240,"height":111.125,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"Limit Buy Test","id":"eb7cdff6-22b7-4e31-9983-4fdcdfb55d3c"}}}],"id":"9eb7f962-8343-4932-a951-c25675460e73","savedPayload":{"position":{"x":18750.806237131383,"y":24723.548779403747},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Production Environment","name":"New Production Environment","id":"65a40d20-837c-4652-8356-f8054b4e1346"}}}],"id":"21d2ec55-9e56-4652-8e96-c7e451262c36","savedPayload":{"position":{"x":18900.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Plugins","name":"New Plugins","project":"Superalgos","pluginProjects":[{"type":"Plugin Project","name":"Superalgos","project":"Superalgos","pluginDataMines":{"type":"Plugin Data Mines","name":"New Plugin Data Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"d5234bd2-ef4e-4856-a6a0-ce7659653a48","savedPayload":{"position":{"x":18879.35218735615,"y":18688.55301821844},"targetPosition":{"x":31380.185902390363,"y":18528.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ecc1a524-de9b-4e73-8874-b99a7ea0402b","savedPayload":{"position":{"x":31120.37828125503,"y":18078.802375894946},"targetPosition":{"x":31120.37828125503,"y":18378.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbc3d9be-5e59-45d8-bb0f-4ec82763691d","savedPayload":{"position":{"x":31120.37828125503,"y":18378.802375894946},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingMines":{"type":"Plugin Trading Mines","name":"New Plugin Trading Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"ad1ce785-858f-4cfc-ba68-108b5e0c54d9","savedPayload":{"position":{"x":24941.217404066585,"y":18714.893045797242},"targetPosition":{"x":31720.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8a64c00e-4f8c-49bf-b57d-4e2e388bae41","savedPayload":{"position":{"x":31720.37828125503,"y":18678.802375894946},"targetPosition":{"x":31420.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d881813-3ab9-4e8b-ab5a-48dedab2dd19","savedPayload":{"position":{"x":31420.37828125503,"y":18678.802375894946},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingEngines":{"type":"Plugin Trading Engines","name":"New Plugin Trading Engines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Low-Frequency","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Low-Frequency","project":"Superalgos","id":"e117a2a4-09b3-4181-8455-e680de3bdeb3","savedPayload":{"position":{"x":30923.55093774257,"y":24967.049392142086},"targetPosition":{"x":29820.22642897682,"y":18678.80776835817},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9270d67-4630-4ac9-91ca-1dec4fb5aa38","savedPayload":{"position":{"x":29820.22642897682,"y":18678.80776835817},"targetPosition":{"x":30320.32799443869,"y":18678.805890109317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87a28762-63d0-45f7-bd39-9dea436d8244","savedPayload":{"position":{"x":31120.37828125503,"y":18978.802375894946},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5436943e-3045-4e0d-807e-1be272afaf7f","savedPayload":{"position":{"x":31120.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6","savedPayload":{"position":{"x":30820.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Design Space","name":"My Design Space","project":"Superalgos","spaceStyle":{"type":"Space Style","name":"My Space Style","config":" {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }","project":"Superalgos","id":"fad0e429-f7a7-4b62-a2a5-2ead29b8f695","savedPayload":{"position":{"x":25236.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"spaceSettings":{"type":"Space Settings","name":"New Space Settings","config":"{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}","project":"Superalgos","id":"05c9d6d5-24c4-4eec-9aca-9668d6486fdd","savedPayload":{"position":{"x":24636.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8485ce5-67f3-4476-b9e2-80994e49c318","savedPayload":{"position":{"x":24936.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":255,"y":588.3125}}}},{"type":"Ethereum Project","name":"My Ethereum Project","project":"Ethereum","id":"11f56dab-fa41-4d8c-973f-cc18546aecde","savedPayload":{"position":{"x":27514,"y":24995.5},"targetPosition":{"x":27514,"y":24995.5},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Superalgos Project","name":"My Superalgos Project","project":"Superalgos","id":"88808da0-70a8-4757-a3f0-cbd558027db3","savedPayload":{"position":{"x":22436,"y":25008.5},"targetPosition":{"x":22436,"y":25008.5},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Trading System","name":"Market Sell Test","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"New Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"82c686e0-0430-437d-81b5-69b9a6bd7cab","savedPayload":{"position":{"x":23822.931107026645,"y":31481.864217639464},"targetPosition":{"x":23526.624604848104,"y":31528.794557151534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab464395-675c-4793-a7a2-9d47cd148e98","savedPayload":{"position":{"x":23526.624604848104,"y":31528.794557151534},"targetPosition":{"x":23230.318102669564,"y":31575.724896663603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff2ad749-b612-4029-b87d-0e6f94b8b017","savedPayload":{"position":{"x":23230.318102669564,"y":31575.724896663603},"targetPosition":{"x":22934.011600491023,"y":31622.655236175673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d9bf1397-a180-4b2f-9f65-d439cd514991","savedPayload":{"position":{"x":22934.011600491023,"y":31622.655236175673},"targetPosition":{"x":22637.705098312483,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"false","project":"Superalgos","id":"cdf4dffb-c009-43d4-9ba1-96a665c2eea6","savedPayload":{"position":{"x":23608.525491562414,"y":32374.927878438713},"targetPosition":{"x":23365.82039324993,"y":32198.59230275097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce46e423-a513-43be-b2c4-b4642d49c811","savedPayload":{"position":{"x":23365.82039324993,"y":32198.59230275097},"targetPosition":{"x":23123.11529493745,"y":32022.256727063228},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a066867-d1d3-4ca3-bf5a-b736915078b1","savedPayload":{"position":{"x":23123.11529493745,"y":32022.256727063228},"targetPosition":{"x":22880.410196624965,"y":31845.921151375485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"08f09191-2948-462b-96d7-5e5a37993277","savedPayload":{"position":{"x":22880.410196624965,"y":31845.921151375485},"targetPosition":{"x":22637.705098312483,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"5a88b945-9013-4f1d-bcb7-1978b48a9c3e","savedPayload":{"position":{"x":22825.42645636076,"y":32854.811584401905},"targetPosition":{"x":22778.49611684869,"y":32558.505082223364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c3a90813-1633-420f-8334-adb3495d003f","savedPayload":{"position":{"x":22778.49611684869,"y":32558.505082223364},"targetPosition":{"x":22731.565777336622,"y":32262.198580044824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dc3907a2-0596-412f-b0d4-9c122f04b2d1","savedPayload":{"position":{"x":22731.565777336622,"y":32262.198580044824},"targetPosition":{"x":22684.635437824552,"y":31965.892077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d80fafba-59e6-4675-801b-c4b0e2f877ee","savedPayload":{"position":{"x":22684.635437824552,"y":31965.892077866283},"targetPosition":{"x":22637.705098312483,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7353944b-adc6-44ed-afb5-774491afcde3","savedPayload":{"position":{"x":19130.705098312483,"y":45130.58557568774},"targetPosition":{"x":18888,"y":44954.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"380cdd5d-22b5-44fe-a1eb-53802241898c","savedPayload":{"position":{"x":19790.537106395983,"y":45565.05315128686},"targetPosition":{"x":19497.09282617584,"y":45502.679644041535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c6612b9e-ce22-45f6-a5b5-5be3a8474eb8","savedPayload":{"position":{"x":19497.09282617584,"y":45502.679644041535},"targetPosition":{"x":19203.6485459557,"y":45440.30613679621},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"0.01","project":"Superalgos","id":"70e75529-3ffa-4a24-afae-6157368fcaf6","savedPayload":{"position":{"x":19389.058742580666,"y":46010.940046573305},"targetPosition":{"x":19296.353644268183,"y":45725.623091684756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a7c82c7e-0b07-48cb-abd8-5b525b093272","savedPayload":{"position":{"x":19296.353644268183,"y":45725.623091684756},"targetPosition":{"x":19203.6485459557,"y":45440.30613679621},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6220e35c-6ac9-40d6-b653-bf7295a3c970","savedPayload":{"position":{"x":19203.6485459557,"y":45440.30613679621},"targetPosition":{"x":18980.705098312483,"y":45239.56695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"New Market Sell Order","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"34c38bfa-3e9c-4e5a-b5d3-b0dc630341a0","savedPayload":{"position":{"x":22051.09054759519,"y":33832.67691642955},"targetPosition":{"x":22113.46405484052,"y":33539.2326362094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"81d0e878-836e-451d-adac-00359662a462","savedPayload":{"position":{"x":22113.46405484052,"y":33539.2326362094},"targetPosition":{"x":22175.837562085846,"y":33245.78835598926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"adb79cee-2cad-40d4-8252-2bb731e577aa","savedPayload":{"position":{"x":22175.837562085846,"y":33245.78835598926},"targetPosition":{"x":22238.211069331173,"y":32952.34407576911},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f791129a-6557-4cea-ad95-d682e8d9d5a1","savedPayload":{"position":{"x":22238.211069331173,"y":32952.34407576911},"targetPosition":{"x":22300.5845765765,"y":32658.89979554897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8353becc-bdef-48c9-b33d-fb1e70cdd24d","savedPayload":{"position":{"x":18793.5845765765,"y":46119.89979554898},"targetPosition":{"x":18855.958083821828,"y":45826.45551532884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"8ebb17c9-3478-4a8e-9300-0a2e976c455e","savedPayload":{"position":{"x":18855.958083821828,"y":45826.45551532884},"targetPosition":{"x":18918.331591067155,"y":45533.011235108694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a9cf0c8a-323f-4fa1-b0a8-92e30a32e7a6","savedPayload":{"position":{"x":18918.331591067155,"y":45533.011235108694},"targetPosition":{"x":18980.705098312483,"y":45239.56695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"48e6e22d-c509-4083-a39c-4729016b1912","savedPayload":{"position":{"x":18980.705098312483,"y":45239.56695488855},"targetPosition":{"x":18888,"y":44954.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"44b75b3e-8b07-45e1-a614-7ae26bb84e3c","savedPayload":{"position":{"x":22489.4154234235,"y":32658.89979554897},"targetPosition":{"x":22427.041916178172,"y":32365.455515328827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"3b7713ec-2508-4875-8d4f-fc0c2a9781fb","savedPayload":{"position":{"x":22427.041916178172,"y":32365.455515328827},"targetPosition":{"x":22364.668408932845,"y":32072.011235108686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2a14bfaf-2d7f-4aa7-82d8-c090faa7f9c5","savedPayload":{"position":{"x":22364.668408932845,"y":32072.011235108686},"targetPosition":{"x":22302.294901687517,"y":31778.566954888545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"bf4e06b0-7cef-4fb8-9cd6-59ba5b9971e4","savedPayload":{"position":{"x":21633.464558757863,"y":32380.78450061152},"targetPosition":{"x":21856.40800640108,"y":32180.045318703862},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"cf0f17be-ee22-4a03-91b3-65080f08cf57","savedPayload":{"position":{"x":21856.40800640108,"y":32180.045318703862},"targetPosition":{"x":22079.3514540443,"y":31979.306136796204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fbea453e-860f-4921-b56b-7aa6f2df80d0","savedPayload":{"position":{"x":22079.3514540443,"y":31979.306136796204},"targetPosition":{"x":22302.294901687517,"y":31778.566954888545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"e1248fab-eb87-42d9-90df-03fb6ffca691","savedPayload":{"position":{"x":18795.294901687517,"y":45239.56695488855},"targetPosition":{"x":18888,"y":44954.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","name":"New Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"3666b060-3dc1-48a5-abf8-f7bb72fd8fbe","savedPayload":{"position":{"x":22458.035713550933,"y":32451.30227449125},"targetPosition":{"x":22281.70013786319,"y":32208.597176178766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cfa4a75c-00a8-4b46-aae3-20b8a1bf431d","savedPayload":{"position":{"x":22281.70013786319,"y":32208.597176178766},"targetPosition":{"x":22105.364562175448,"y":31965.892077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"55fc8325-c79a-4fc3-8d94-44df3d5d5a1d","savedPayload":{"position":{"x":22011.50388315131,"y":32558.505082223364},"targetPosition":{"x":22058.434222663378,"y":32262.198580044824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85b45c4d-4e2c-4e8d-99cd-7dc5d52deb99","savedPayload":{"position":{"x":22058.434222663378,"y":32262.198580044824},"targetPosition":{"x":22105.364562175448,"y":31965.892077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"35963fce-2526-4e71-83e1-2cd1cbf1e910","savedPayload":{"position":{"x":21619.954365550482,"y":32318.56322924177},"targetPosition":{"x":21862.659463862965,"y":32142.227653554026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b52e2828-a51e-48de-862c-658ebc85f040","savedPayload":{"position":{"x":21862.659463862965,"y":32142.227653554026},"targetPosition":{"x":22105.364562175448,"y":31965.892077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"55be08b2-96ad-487d-b320-6bced938ce37","savedPayload":{"position":{"x":22105.364562175448,"y":31965.892077866283},"targetPosition":{"x":22152.294901687517,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","name":"New Close Execution","project":"Superalgos","executionAlgorithms":[],"id":"1fa656cd-7812-4016-a5ef-f885e973fcac","savedPayload":{"position":{"x":21909.589803375035,"y":31845.921151375485},"targetPosition":{"x":22152.294901687517,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStageEvent":{"type":"Close Stage Event","name":"New Close Stage Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"// Type you code","project":"Superalgos","id":"2b9a49a9-115b-487c-af28-398feccf60fa","savedPayload":{"position":{"x":20967.068892973355,"y":31481.864217639464},"targetPosition":{"x":21263.375395151896,"y":31528.794557151534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"856f19f2-a30c-4636-bd14-c427f318d781","savedPayload":{"position":{"x":21263.375395151896,"y":31528.794557151534},"targetPosition":{"x":21559.681897330436,"y":31575.724896663603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4056fb66-2266-4694-91d6-d36df68344d2","savedPayload":{"position":{"x":21559.681897330436,"y":31575.724896663603},"targetPosition":{"x":21855.988399508977,"y":31622.655236175673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ba6f0812-f648-4578-9887-0336e5cebc31","savedPayload":{"position":{"x":21855.988399508977,"y":31622.655236175673},"targetPosition":{"x":22152.294901687517,"y":31669.585575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"62dfd677-e10c-4e88-8a47-cad566cf1085","savedPayload":{"position":{"x":18645.294901687517,"y":45130.58557568774},"targetPosition":{"x":18888,"y":44954.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3ee57fc1-f4f4-4e68-8b74-2f5754f4f16f","savedPayload":{"position":{"x":18888,"y":44954.25},"targetPosition":{"x":18888,"y":44654.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55880a95-a2df-4d15-b333-226800bf97ca","savedPayload":{"position":{"x":18888,"y":44654.25},"targetPosition":{"x":18888,"y":44654.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading System","name":"Market Buy Test","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"New Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"f67fd2c9-7476-4d47-96a5-726a72ff9f03","savedPayload":{"position":{"x":24557.931107026645,"y":31467.364217639464},"targetPosition":{"x":24261.624604848104,"y":31514.294557151534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bf271ffa-7832-4110-9ff1-5ac1554c13b3","savedPayload":{"position":{"x":24261.624604848104,"y":31514.294557151534},"targetPosition":{"x":23965.318102669564,"y":31561.224896663603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7590c957-afb9-40d3-83c6-f57c94490a5c","savedPayload":{"position":{"x":23965.318102669564,"y":31561.224896663603},"targetPosition":{"x":23669.011600491023,"y":31608.155236175673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"904a8b56-e075-434f-bf35-06abea1cc59e","savedPayload":{"position":{"x":23669.011600491023,"y":31608.155236175673},"targetPosition":{"x":23372.705098312483,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"false","project":"Superalgos","id":"0a5e1b77-dcd3-4a5a-8358-8195fcc5297b","savedPayload":{"position":{"x":24343.525491562414,"y":32360.427878438713},"targetPosition":{"x":24100.82039324993,"y":32184.09230275097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"58411b15-3e3b-4315-8d7d-0dc6b9f79836","savedPayload":{"position":{"x":24100.82039324993,"y":32184.09230275097},"targetPosition":{"x":23858.11529493745,"y":32007.756727063228},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34b60145-0188-4439-96a7-67ba951ff8ef","savedPayload":{"position":{"x":23858.11529493745,"y":32007.756727063228},"targetPosition":{"x":23615.410196624965,"y":31831.421151375485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5f9e5d49-cf51-4b7f-960d-9248e6f99d30","savedPayload":{"position":{"x":23615.410196624965,"y":31831.421151375485},"targetPosition":{"x":23372.705098312483,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"b6237a71-e1ef-4fd2-bf8b-cdef9498a9dc","savedPayload":{"position":{"x":23560.42645636076,"y":32840.311584401905},"targetPosition":{"x":23513.49611684869,"y":32544.005082223364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2be72dec-5c9c-4d41-a3ca-7cfdb135c74f","savedPayload":{"position":{"x":23513.49611684869,"y":32544.005082223364},"targetPosition":{"x":23466.565777336622,"y":32247.698580044824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"727e1ab9-42c7-4a81-a2db-b999d6b43f7a","savedPayload":{"position":{"x":23466.565777336622,"y":32247.698580044824},"targetPosition":{"x":23419.635437824552,"y":31951.392077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"aed177fe-cd88-4187-a9b2-f4b1f94da2ac","savedPayload":{"position":{"x":23419.635437824552,"y":31951.392077866283},"targetPosition":{"x":23372.705098312483,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"9053893c-d47d-477c-a6b6-58796bfbe3ca","savedPayload":{"position":{"x":25202.705098312483,"y":45126.08557568774},"targetPosition":{"x":24960,"y":44949.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"c5da7472-383d-4e46-b453-2e55fe391752","savedPayload":{"position":{"x":25862.537106395983,"y":45560.55315128686},"targetPosition":{"x":25569.09282617584,"y":45498.179644041535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d56f8594-5cf4-4c15-b8b2-1cdd1ff8f9f0","savedPayload":{"position":{"x":25569.09282617584,"y":45498.179644041535},"targetPosition":{"x":25275.6485459557,"y":45435.80613679621},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"0.01","project":"Superalgos","id":"c68f99d0-f957-4038-b4b3-b63b542dd000","savedPayload":{"position":{"x":25461.058742580666,"y":46006.440046573305},"targetPosition":{"x":25368.353644268183,"y":45721.123091684756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"73af8e73-b02c-497a-a345-c8d953e8599a","savedPayload":{"position":{"x":25368.353644268183,"y":45721.123091684756},"targetPosition":{"x":25275.6485459557,"y":45435.80613679621},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fd20ed8d-8fdd-4c1c-bb86-f580160e3a40","savedPayload":{"position":{"x":25275.6485459557,"y":45435.80613679621},"targetPosition":{"x":25052.705098312483,"y":45235.06695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"New Market Buy Order","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"7c63c8db-785c-42df-8707-b382527e275a","savedPayload":{"position":{"x":30582.09054759519,"y":47290.17691642956},"targetPosition":{"x":30644.46405484052,"y":46996.73263620942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a48d9fa6-e5b8-42e9-9514-55a9f43bd5c2","savedPayload":{"position":{"x":30644.46405484052,"y":46996.73263620942},"targetPosition":{"x":30706.837562085846,"y":46703.28835598927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e9532248-ed8c-4601-888d-f53e7b55b6c3","savedPayload":{"position":{"x":30706.837562085846,"y":46703.28835598927},"targetPosition":{"x":30769.211069331173,"y":46409.84407576913},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"020de885-0cf5-4c54-bbc6-c2f0d90f83a5","savedPayload":{"position":{"x":30769.211069331173,"y":46409.84407576913},"targetPosition":{"x":30831.5845765765,"y":46116.39979554898},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a5ce64da-25e2-495f-89d5-368d9152e0d9","savedPayload":{"position":{"x":24865.5845765765,"y":46115.39979554898},"targetPosition":{"x":24927.958083821828,"y":45821.95551532884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"22c389fd-9199-4e67-9875-3b72fbe5bc4e","savedPayload":{"position":{"x":24927.958083821828,"y":45821.95551532884},"targetPosition":{"x":24990.331591067155,"y":45528.511235108694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ed8462d-2eb1-4edd-87bf-18dab3101293","savedPayload":{"position":{"x":24990.331591067155,"y":45528.511235108694},"targetPosition":{"x":25052.705098312483,"y":45235.06695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"a475579c-2eb2-415e-91ef-b82378c0ed6f","savedPayload":{"position":{"x":25052.705098312483,"y":45235.06695488855},"targetPosition":{"x":24960,"y":44949.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"9b6b10c7-ae2b-4d4e-a3ba-06dd803b0ce2","savedPayload":{"position":{"x":23224.4154234235,"y":32644.39979554897},"targetPosition":{"x":23162.041916178172,"y":32350.955515328827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"358685f9-6e9a-4510-856e-fb2450fadbe2","savedPayload":{"position":{"x":23162.041916178172,"y":32350.955515328827},"targetPosition":{"x":23099.668408932845,"y":32057.511235108686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"da3bcd5c-2d5b-4efb-9218-d63671366fa1","savedPayload":{"position":{"x":23099.668408932845,"y":32057.511235108686},"targetPosition":{"x":23037.294901687517,"y":31764.066954888545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"54edd99e-1b01-4727-aa29-002e8910f2da","savedPayload":{"position":{"x":22368.464558757863,"y":32366.28450061152},"targetPosition":{"x":22591.40800640108,"y":32165.545318703862},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"64451ccc-30ee-482c-8acb-d2de335c3caf","savedPayload":{"position":{"x":22591.40800640108,"y":32165.545318703862},"targetPosition":{"x":22814.3514540443,"y":31964.806136796204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9815ddf5-491d-44e4-b1be-899bb485815e","savedPayload":{"position":{"x":22814.3514540443,"y":31964.806136796204},"targetPosition":{"x":23037.294901687517,"y":31764.066954888545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"1b54637f-6c03-4ddf-b76c-14d632dfcf37","savedPayload":{"position":{"x":24867.294901687517,"y":45235.06695488855},"targetPosition":{"x":24960,"y":44949.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","name":"New Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"37c29578-3c3c-4648-88e8-38bb79d0881d","savedPayload":{"position":{"x":23193.035713550933,"y":32436.80227449125},"targetPosition":{"x":23016.70013786319,"y":32194.097176178766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ca135574-d18d-4505-9eea-6285a3a5b3ca","savedPayload":{"position":{"x":23016.70013786319,"y":32194.097176178766},"targetPosition":{"x":22840.364562175448,"y":31951.392077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"b3ef0de0-10eb-4d41-ac1f-f064d7cea256","savedPayload":{"position":{"x":22746.50388315131,"y":32544.005082223364},"targetPosition":{"x":22793.434222663378,"y":32247.698580044824},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"56a7ee8a-0c1c-4555-85ad-0d11bfda0b02","savedPayload":{"position":{"x":22793.434222663378,"y":32247.698580044824},"targetPosition":{"x":22840.364562175448,"y":31951.392077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"67df4e72-9dc4-4bb9-9466-dca238b642df","savedPayload":{"position":{"x":22354.954365550482,"y":32304.06322924177},"targetPosition":{"x":22597.659463862965,"y":32127.727653554026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c6723995-03bf-40e6-8f4e-aba9951d133d","savedPayload":{"position":{"x":22597.659463862965,"y":32127.727653554026},"targetPosition":{"x":22840.364562175448,"y":31951.392077866283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"69936f01-0d9c-4043-89f6-a29e2286fff3","savedPayload":{"position":{"x":22840.364562175448,"y":31951.392077866283},"targetPosition":{"x":22887.294901687517,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","name":"New Close Execution","project":"Superalgos","executionAlgorithms":[],"id":"cd990ace-cd25-47dc-b894-b7b931436971","savedPayload":{"position":{"x":22644.589803375035,"y":31831.421151375485},"targetPosition":{"x":22887.294901687517,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStageEvent":{"type":"Close Stage Event","name":"New Close Stage Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"// Type you code","project":"Superalgos","id":"64c08063-86a3-4fac-84fc-6ed7991f6543","savedPayload":{"position":{"x":21702.068892973355,"y":31467.364217639464},"targetPosition":{"x":21998.375395151896,"y":31514.294557151534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0f973d08-3e36-4c5d-b4c8-c8a8411ff68b","savedPayload":{"position":{"x":21998.375395151896,"y":31514.294557151534},"targetPosition":{"x":22294.681897330436,"y":31561.224896663603},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2be72dd7-ed07-420e-baac-15e8d04de42e","savedPayload":{"position":{"x":22294.681897330436,"y":31561.224896663603},"targetPosition":{"x":22590.988399508977,"y":31608.155236175673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"27a262ec-d70e-4acb-9d0f-0a1de460e163","savedPayload":{"position":{"x":22590.988399508977,"y":31608.155236175673},"targetPosition":{"x":22887.294901687517,"y":31655.085575687743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"f2f81048-f94e-4e9a-b1bc-70422439e8ff","savedPayload":{"position":{"x":24717.294901687517,"y":45126.08557568774},"targetPosition":{"x":24960,"y":44949.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6f2ff946-cc4e-47d0-803a-e424718fdfab","savedPayload":{"position":{"x":24960,"y":44949.75},"targetPosition":{"x":24960,"y":44649.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"32c85522-fa62-44b6-8801-320a948bc994","savedPayload":{"position":{"x":24960,"y":44649.75},"targetPosition":{"x":24960,"y":44649.75},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading System","name":"Limit Sell Test","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"New Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"fe95d865-2d23-4da2-b8fe-389feb6d73d2","savedPayload":{"position":{"x":35719.59777369331,"y":31464.982638692098},"targetPosition":{"x":35423.29127151477,"y":31511.912978204167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a02a5c0e-8de1-4cb5-bcd9-a99dfcf0c326","savedPayload":{"position":{"x":35423.29127151477,"y":31511.912978204167},"targetPosition":{"x":35126.984769336224,"y":31558.843317716237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a5b2b6c6-1f8a-4208-8112-b61dd32737d6","savedPayload":{"position":{"x":35126.984769336224,"y":31558.843317716237},"targetPosition":{"x":34830.67826715769,"y":31605.773657228307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"beae910f-35a8-44e9-ae12-c5837a597667","savedPayload":{"position":{"x":34830.67826715769,"y":31605.773657228307},"targetPosition":{"x":34534.37176497915,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"false","project":"Superalgos","id":"5052065b-b666-469b-bdcf-1d210a9f7cae","savedPayload":{"position":{"x":35505.19215822908,"y":32358.046299491347},"targetPosition":{"x":35262.487059916595,"y":32181.710723803604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"de14c43b-4961-4e39-bdc2-c52a05f43989","savedPayload":{"position":{"x":35262.487059916595,"y":32181.710723803604},"targetPosition":{"x":35019.78196160411,"y":32005.37514811586},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1d5b056-4c80-4e2c-9c9e-e699f20ee0a8","savedPayload":{"position":{"x":35019.78196160411,"y":32005.37514811586},"targetPosition":{"x":34777.07686329163,"y":31829.03957242812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"472de6d0-56b7-4ce1-b6b2-742c3f27923b","savedPayload":{"position":{"x":34777.07686329163,"y":31829.03957242812},"targetPosition":{"x":34534.37176497915,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"0db94d2c-3882-4500-954f-5422a72a877e","savedPayload":{"position":{"x":34722.09312302743,"y":32837.93000545454},"targetPosition":{"x":34675.162783515356,"y":32541.623503275998},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"547c966a-027f-4cbc-a57c-45ae29f8b2ef","savedPayload":{"position":{"x":34675.162783515356,"y":32541.623503275998},"targetPosition":{"x":34628.23244400328,"y":32245.317001097457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4056cab2-29f1-43d6-8563-7583dab735a1","savedPayload":{"position":{"x":34628.23244400328,"y":32245.317001097457},"targetPosition":{"x":34581.30210449122,"y":31949.010498918917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9748a775-688a-4842-b543-3d2aa52b1ad1","savedPayload":{"position":{"x":34581.30210449122,"y":31949.010498918917},"targetPosition":{"x":34534.37176497915,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"eaecaad5-727e-4e53-9c74-6eb36a7afcf4","savedPayload":{"position":{"x":31094.371764979147,"y":45099.703996740376},"targetPosition":{"x":30851.666666666664,"y":44923.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"e425e444-0e42-4278-8bc5-08beb8a14e94","savedPayload":{"position":{"x":31754.203773062647,"y":45534.171572339495},"targetPosition":{"x":31460.759492842506,"y":45471.79806509417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"51aef4dd-73b6-4165-aa8a-41499b0651a3","savedPayload":{"position":{"x":31460.759492842506,"y":45471.79806509417},"targetPosition":{"x":31167.315212622365,"y":45409.42455784884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"0.01","project":"Superalgos","id":"7b71f83c-c8ed-4dc9-84b2-b5aff83e38f5","savedPayload":{"position":{"x":31352.72540924733,"y":45980.05846762594},"targetPosition":{"x":31260.020310934848,"y":45694.74151273739},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cc8cb9ab-ea5a-4ae3-b8f3-333a6e97859c","savedPayload":{"position":{"x":31260.020310934848,"y":45694.74151273739},"targetPosition":{"x":31167.315212622365,"y":45409.42455784884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6e765c39-48a3-45fc-9bc6-966482412e5c","savedPayload":{"position":{"x":31167.315212622365,"y":45409.42455784884},"targetPosition":{"x":30944.371764979147,"y":45208.68537594118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[{"type":"Limit Sell Order","name":"New Limit Sell Order","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"e569a487-a8b0-422e-a7c9-f1c6a9f83899","savedPayload":{"position":{"x":36901.66143986814,"y":46662.652126378714},"targetPosition":{"x":36808.956341555655,"y":46377.335171490166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1fabf88c-7a72-44b6-b78e-2e4fa77eb044","savedPayload":{"position":{"x":36808.956341555655,"y":46377.335171490166},"targetPosition":{"x":36716.25124324317,"y":46092.01821660162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"57189339-b6c8-4c49-88d2-ba96211fb537","savedPayload":{"position":{"x":35913.294515612535,"y":46983.7920071745},"targetPosition":{"x":36114.03369752019,"y":46760.84855953128},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"de8607d8-46fb-4978-b975-2a17d992d47d","savedPayload":{"position":{"x":36114.03369752019,"y":46760.84855953128},"targetPosition":{"x":36314.77287942785,"y":46537.90511188806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f834e64a-bce7-4deb-90dc-da06fb93f8f7","savedPayload":{"position":{"x":36314.77287942785,"y":46537.90511188806},"targetPosition":{"x":36515.51206133551,"y":46314.96166424484},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"79e89895-3974-4ad2-be1e-c489488a27d9","savedPayload":{"position":{"x":36515.51206133551,"y":46314.96166424484},"targetPosition":{"x":36716.25124324317,"y":46092.01821660162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"082abe7e-89ee-435d-9082-050e366bba38","savedPayload":{"position":{"x":30757.251243243165,"y":46089.01821660162},"targetPosition":{"x":30819.624750488492,"y":45795.57393638147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Sell Order #1","id":"929c1c8c-1964-4495-991c-0a516f1e9ba0"}}}],"id":"dcd86d99-2342-4c1c-80da-1593354e643b","savedPayload":{"position":{"x":30819.624750488492,"y":45795.57393638147},"targetPosition":{"x":30881.99825773382,"y":45502.12965616133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"351958dd-f164-4da4-8f7c-afdf561ce81f","savedPayload":{"position":{"x":30881.99825773382,"y":45502.12965616133},"targetPosition":{"x":30944.371764979147,"y":45208.68537594118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"0b3fd57a-9a85-4625-9855-ab8aacb18a24","savedPayload":{"position":{"x":30944.371764979147,"y":45208.68537594118},"targetPosition":{"x":30851.666666666664,"y":44923.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"a8d4a862-7558-4665-977c-c59aae6fd23c","savedPayload":{"position":{"x":30946.082090090164,"y":46089.01821660162},"targetPosition":{"x":30883.708582844836,"y":45795.57393638147},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"8900c5f5-5093-4fd0-bf72-1cc4864bc20b","savedPayload":{"position":{"x":30883.708582844836,"y":45795.57393638147},"targetPosition":{"x":30821.33507559951,"y":45502.12965616133},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8bbfbc12-5c48-4961-8440-63dc6d3e4f66","savedPayload":{"position":{"x":30821.33507559951,"y":45502.12965616133},"targetPosition":{"x":30758.96156835418,"y":45208.68537594118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"435539bb-3c2e-4a31-9072-91156c955dfc","savedPayload":{"position":{"x":30090.131225424528,"y":45810.90292166416},"targetPosition":{"x":30313.074673067746,"y":45610.1637397565},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"1fc5ab60-0244-4510-83a8-1c5dd2f627fa","savedPayload":{"position":{"x":30313.074673067746,"y":45610.1637397565},"targetPosition":{"x":30536.018120710964,"y":45409.42455784884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a68668b-907f-43f3-a7eb-602fba202422","savedPayload":{"position":{"x":30536.018120710964,"y":45409.42455784884},"targetPosition":{"x":30758.96156835418,"y":45208.68537594118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7a9d231b-8092-4c0e-90a9-8cb34b784eb3","savedPayload":{"position":{"x":30758.96156835418,"y":45208.68537594118},"targetPosition":{"x":30851.666666666664,"y":44923.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","name":"New Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"cb4f0295-035d-4e6e-8cce-e4dc90cf1b6b","savedPayload":{"position":{"x":34354.7023802176,"y":32434.420695543882},"targetPosition":{"x":34178.366804529855,"y":32191.7155972314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1fd7f833-0d52-4b92-ae6b-8a75fd5f9f93","savedPayload":{"position":{"x":34178.366804529855,"y":32191.7155972314},"targetPosition":{"x":34002.03122884211,"y":31949.010498918917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"680ed906-6927-4a12-9301-65fc914af6c9","savedPayload":{"position":{"x":33908.17054981797,"y":32541.623503275998},"targetPosition":{"x":33955.100889330046,"y":32245.317001097457},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"100ae0f9-6358-4f92-b2f2-c2ee3a8a06a5","savedPayload":{"position":{"x":33955.100889330046,"y":32245.317001097457},"targetPosition":{"x":34002.03122884211,"y":31949.010498918917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"ddcee53d-c96c-42a3-8b95-9bdadef165a5","savedPayload":{"position":{"x":33516.62103221715,"y":32301.681650294402},"targetPosition":{"x":33759.32613052963,"y":32125.34607460666},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e9bacdf-c772-4cb5-878c-149d07fd283f","savedPayload":{"position":{"x":33759.32613052963,"y":32125.34607460666},"targetPosition":{"x":34002.03122884211,"y":31949.010498918917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"40be733b-e96a-4bae-ab9a-9581a183e433","savedPayload":{"position":{"x":34002.03122884211,"y":31949.010498918917},"targetPosition":{"x":34048.96156835418,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","name":"New Close Execution","project":"Superalgos","executionAlgorithms":[],"id":"02e0ea50-96fb-4033-9d63-29e8e11cc355","savedPayload":{"position":{"x":33806.2564700417,"y":31829.03957242812},"targetPosition":{"x":34048.96156835418,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStageEvent":{"type":"Close Stage Event","name":"New Close Stage Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"// Type you code","project":"Superalgos","id":"aa4ce03f-2f3b-4761-8fac-1f5931265425","savedPayload":{"position":{"x":32863.735559640016,"y":31464.982638692098},"targetPosition":{"x":33160.04206181856,"y":31511.912978204167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40031d48-d733-4c3a-944d-8f76e0c0f0f4","savedPayload":{"position":{"x":33160.04206181856,"y":31511.912978204167},"targetPosition":{"x":33456.348563997104,"y":31558.843317716237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"689d0ba1-a638-470a-95b1-00985718413f","savedPayload":{"position":{"x":33456.348563997104,"y":31558.843317716237},"targetPosition":{"x":33752.65506617564,"y":31605.773657228307},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ad4d9f17-53d6-43af-bd41-be6f06d2a6e6","savedPayload":{"position":{"x":33752.65506617564,"y":31605.773657228307},"targetPosition":{"x":34048.96156835418,"y":31652.703996740376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"c7c94b41-9950-45fa-9abe-54c487fc6119","savedPayload":{"position":{"x":30608.96156835418,"y":45099.703996740376},"targetPosition":{"x":30851.666666666664,"y":44923.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a654900e-c700-4f55-b064-56a0b3b5abde","savedPayload":{"position":{"x":30851.666666666664,"y":44923.36842105263},"targetPosition":{"x":30851.666666666664,"y":44623.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4477bbc6-8017-466a-b51b-6ab710538a08","savedPayload":{"position":{"x":30851.666666666664,"y":44623.36842105263},"targetPosition":{"x":30851.666666666664,"y":44623.36842105263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading System","name":"Limit Buy Test","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"New Trading Strategy","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"090ae5f7-8763-4099-811c-aae99b4c8b8b","savedPayload":{"position":{"x":36190.014440359984,"y":31490.456322902624},"targetPosition":{"x":35893.70793818144,"y":31537.386662414694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"866bf1a7-c739-45c7-8f42-b3815c95a9b1","savedPayload":{"position":{"x":35893.70793818144,"y":31537.386662414694},"targetPosition":{"x":35597.401436002896,"y":31584.317001926764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"19602cd9-07aa-4a81-911d-6cdb4d7433e4","savedPayload":{"position":{"x":35597.401436002896,"y":31584.317001926764},"targetPosition":{"x":35301.09493382436,"y":31631.247341438833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"02011198-8845-4622-97c7-ccad81bf2442","savedPayload":{"position":{"x":35301.09493382436,"y":31631.247341438833},"targetPosition":{"x":35004.78843164582,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"false","project":"Superalgos","id":"5d2b0008-5a84-4a06-a6c3-2b60887caf88","savedPayload":{"position":{"x":35975.60882489575,"y":32383.519983701874},"targetPosition":{"x":35732.90372658327,"y":32207.18440801413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d9ea32aa-a839-404a-8fc8-b9de02dda522","savedPayload":{"position":{"x":35732.90372658327,"y":32207.18440801413},"targetPosition":{"x":35490.19862827078,"y":32030.84883232639},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"43c5d3ab-b2af-449f-8cbb-e33f957a5350","savedPayload":{"position":{"x":35490.19862827078,"y":32030.84883232639},"targetPosition":{"x":35247.4935299583,"y":31854.513256638646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f0cc03dd-b075-4102-90e7-7cca53382ac9","savedPayload":{"position":{"x":35247.4935299583,"y":31854.513256638646},"targetPosition":{"x":35004.78843164582,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"41485b30-6d6f-4e32-8e9c-256569a43f99","savedPayload":{"position":{"x":35192.5097896941,"y":32863.403689665065},"targetPosition":{"x":35145.57945018203,"y":32567.097187486524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"217fc43c-7fb0-45e0-87f8-099a406db19f","savedPayload":{"position":{"x":35145.57945018203,"y":32567.097187486524},"targetPosition":{"x":35098.649110669954,"y":32270.790685307984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f1dadccd-ad5d-45df-8d41-f24a66c325c0","savedPayload":{"position":{"x":35098.649110669954,"y":32270.790685307984},"targetPosition":{"x":35051.71877115789,"y":31974.484183129443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a8188aee-5f2e-43e9-994c-59aa7ca23d54","savedPayload":{"position":{"x":35051.71877115789,"y":31974.484183129443},"targetPosition":{"x":35004.78843164582,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"9c4c6ccd-da02-4039-9b83-31ace8df7bca","savedPayload":{"position":{"x":37075.78843164582,"y":45155.1776809509},"targetPosition":{"x":36833.083333333336,"y":44978.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"a22173f4-976e-40d8-b393-18c3068a397c","savedPayload":{"position":{"x":37735.62043972933,"y":45589.64525655002},"targetPosition":{"x":37442.17615950919,"y":45527.271749304695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"26913ed0-0c8b-4792-8be6-04aad71e2002","savedPayload":{"position":{"x":37442.17615950919,"y":45527.271749304695},"targetPosition":{"x":37148.731879289044,"y":45464.89824205937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"0.01","project":"Superalgos","id":"e9f7864b-c7f5-436d-9b4b-fac965a3f67e","savedPayload":{"position":{"x":37334.14207591402,"y":46035.532151836465},"targetPosition":{"x":37241.43697760153,"y":45750.21519694792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4caa14e0-9c09-445f-a08e-02b9f9a37965","savedPayload":{"position":{"x":37241.43697760153,"y":45750.21519694792},"targetPosition":{"x":37148.731879289044,"y":45464.89824205937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e606f010-b37a-405c-8835-e4b5c0eafac9","savedPayload":{"position":{"x":37148.731879289044,"y":45464.89824205937},"targetPosition":{"x":36925.78843164582,"y":45264.15906015171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[],"limitBuyOrders":[{"type":"Limit Buy Order","name":"New Limit Buy Order","config":"{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}","project":"Superalgos","orderRate":{"type":"Order Rate","name":"New Order Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"c7dbf438-0af4-4e73-9e62-73efcb3c6f00","savedPayload":{"position":{"x":42649.07810653481,"y":46710.12581058924},"targetPosition":{"x":42556.37300822233,"y":46424.80885570069},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"70be3cf1-4c6b-43a6-8b03-8958cbb7d591","savedPayload":{"position":{"x":42556.37300822233,"y":46424.80885570069},"targetPosition":{"x":42463.66790990984,"y":46139.49190081214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"42fa7495-7b12-4893-80c8-f9577fd4cca0","savedPayload":{"position":{"x":41660.71118227921,"y":47031.26569138503},"targetPosition":{"x":41861.450364186865,"y":46808.32224374181},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"aaf81eb9-8dcb-49a0-aa17-934c32030c9a","savedPayload":{"position":{"x":41861.450364186865,"y":46808.32224374181},"targetPosition":{"x":42062.18954609452,"y":46585.37879609859},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8c7b682f-b726-4a57-870c-2989e4a321ea","savedPayload":{"position":{"x":42062.18954609452,"y":46585.37879609859},"targetPosition":{"x":42262.92872800218,"y":46362.435348455365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"16941fca-9e80-46d1-a13d-a7fa723e07d3","savedPayload":{"position":{"x":42262.92872800218,"y":46362.435348455365},"targetPosition":{"x":42463.66790990984,"y":46139.49190081214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b219d197-50b3-4088-8487-7b28db97b69f","savedPayload":{"position":{"x":36738.66790990984,"y":46144.49190081214},"targetPosition":{"x":36801.04141715517,"y":45851.047620592},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Limit Order","name":"Limit Buy Order #1","id":"008e16b8-9487-4db3-81e1-d11c19a7f59e"}}}],"limitSellOrders":[],"id":"54f7681c-8a08-425c-824b-910a7c31eb65","savedPayload":{"position":{"x":36801.04141715517,"y":45851.047620592},"targetPosition":{"x":36863.414924400495,"y":45557.603340371854},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e2d07ed0-0239-41fb-89bf-3f3bab5c6549","savedPayload":{"position":{"x":36863.414924400495,"y":45557.603340371854},"targetPosition":{"x":36925.78843164582,"y":45264.15906015171},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"b089c0fe-1aeb-461a-a8a2-f0cee5dd886d","savedPayload":{"position":{"x":36925.78843164582,"y":45264.15906015171},"targetPosition":{"x":36833.083333333336,"y":44978.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"1929e403-db8d-4c66-b61e-9bb4f00eb635","savedPayload":{"position":{"x":34856.49875675683,"y":32667.49190081213},"targetPosition":{"x":34794.125249511504,"y":32374.047620591988},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"77d27a1e-8fe1-4ff9-b16c-24ce1a356e02","savedPayload":{"position":{"x":34794.125249511504,"y":32374.047620591988},"targetPosition":{"x":34731.75174226618,"y":32080.603340371847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0965e385-4fec-4850-911b-61da96d99d74","savedPayload":{"position":{"x":34731.75174226618,"y":32080.603340371847},"targetPosition":{"x":34669.37823502085,"y":31787.159060151705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"d6de8484-fd4a-437e-abee-3f42d9934932","savedPayload":{"position":{"x":34000.5478920912,"y":32389.37660587468},"targetPosition":{"x":34223.49133973442,"y":32188.637423967022},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"7c0073aa-8720-41d6-942c-f0aa385163f2","savedPayload":{"position":{"x":34223.49133973442,"y":32188.637423967022},"targetPosition":{"x":34446.434787377635,"y":31987.898242059364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"74116c5a-ea03-4ea8-a2fa-2aeb0c688115","savedPayload":{"position":{"x":34446.434787377635,"y":31987.898242059364},"targetPosition":{"x":34669.37823502085,"y":31787.159060151705},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"1e5e0e70-f3de-4bba-9ad3-636249a2470d","savedPayload":{"position":{"x":36740.37823502085,"y":45264.15906015171},"targetPosition":{"x":36833.083333333336,"y":44978.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","name":"New Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"d9b3015c-f42f-4d6d-8b37-0dbcd98a1c61","savedPayload":{"position":{"x":34825.11904688427,"y":32459.89437975441},"targetPosition":{"x":34648.783471196526,"y":32217.189281441926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7b075a28-ef60-491a-b3aa-290bfdc0d214","savedPayload":{"position":{"x":34648.783471196526,"y":32217.189281441926},"targetPosition":{"x":34472.44789550878,"y":31974.484183129443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"f33a0e9b-9807-40e0-8826-24786f27c38e","savedPayload":{"position":{"x":34378.587216484644,"y":32567.097187486524},"targetPosition":{"x":34425.51755599672,"y":32270.790685307984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b47c64c-c133-4cbd-8208-45950b455fe5","savedPayload":{"position":{"x":34425.51755599672,"y":32270.790685307984},"targetPosition":{"x":34472.44789550878,"y":31974.484183129443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"// Type your formula","project":"Superalgos","id":"2b68918a-d69e-40b1-bc44-068fcedb08b0","savedPayload":{"position":{"x":33987.03769888382,"y":32327.15533450493},"targetPosition":{"x":34229.742797196304,"y":32150.819758817186},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d726a92-1c01-4896-8080-d5c2e4c5666b","savedPayload":{"position":{"x":34229.742797196304,"y":32150.819758817186},"targetPosition":{"x":34472.44789550878,"y":31974.484183129443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2fa2f176-355d-4b8f-a590-cb61ff568bfb","savedPayload":{"position":{"x":34472.44789550878,"y":31974.484183129443},"targetPosition":{"x":34519.37823502085,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","name":"New Close Execution","project":"Superalgos","executionAlgorithms":[],"id":"b2d650ac-7ecf-4e53-bde4-d3b1e266b1e1","savedPayload":{"position":{"x":34276.67313670837,"y":31854.513256638646},"targetPosition":{"x":34519.37823502085,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStageEvent":{"type":"Close Stage Event","name":"New Close Stage Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"// Type you code","project":"Superalgos","id":"0a95c74f-e6e7-48fc-8178-efd521abc30c","savedPayload":{"position":{"x":33334.15222630669,"y":31490.456322902624},"targetPosition":{"x":33630.45872848523,"y":31537.386662414694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"41e53993-169a-4487-a796-0632116e7efd","savedPayload":{"position":{"x":33630.45872848523,"y":31537.386662414694},"targetPosition":{"x":33926.765230663776,"y":31584.317001926764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e959aa82-a977-44bf-aa60-2b8895b572c6","savedPayload":{"position":{"x":33926.765230663776,"y":31584.317001926764},"targetPosition":{"x":34223.07173284231,"y":31631.247341438833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d4234f57-e506-4a78-b8c2-fdb971dc5186","savedPayload":{"position":{"x":34223.07173284231,"y":31631.247341438833},"targetPosition":{"x":34519.37823502085,"y":31678.177680950903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"d4ee0bcd-e085-4f8c-ba48-b74688f2fc64","savedPayload":{"position":{"x":36590.37823502085,"y":45155.1776809509},"targetPosition":{"x":36833.083333333336,"y":44978.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b294ceb8-83aa-4c56-b3f2-9f8f6b07d8b2","savedPayload":{"position":{"x":36833.083333333336,"y":44978.84210526316},"targetPosition":{"x":36833.083333333336,"y":44678.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e545e68f-dc9d-4583-88dc-c5ff6678dec5","savedPayload":{"position":{"x":36833.083333333336,"y":44678.84210526316},"targetPosition":{"x":36833.083333333336,"y":44678.84210526316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}]} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Getting-Started.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Getting-Started.json deleted file mode 100644 index 34680a2e2..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Getting-Started.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Workspace","name":"Getting Started","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataMining":{"type":"Data Mining","name":"New Data Mining","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b","savedPayload":{"position":{"x":23993.925629940142,"y":29195.742554406977},"targetPosition":{"x":24261.227587196652,"y":29331.93970432884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"343313ae-5705-484d-8bf8-aed25ba61cfa","savedPayload":{"position":{"x":24261.227587196652,"y":29331.93970432884},"targetPosition":{"x":24528.529544453162,"y":29468.136854250704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a8f38508-1cac-4ab1-815f-d338fc813377","savedPayload":{"position":{"x":24528.529544453162,"y":29468.136854250704},"targetPosition":{"x":24795.831501709672,"y":29604.334004172568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f","savedPayload":{"position":{"x":24387.47785744149,"y":28832.96091248782},"targetPosition":{"x":24610.421305084707,"y":29033.700094395477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"7c8b312c-09bf-4c59-853f-1592391a9c57","savedPayload":{"position":{"x":24672.794812330034,"y":28740.255814175336},"targetPosition":{"x":24610.421305084707,"y":29033.700094395477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"8d58e84b-d7ef-464f-8079-0ec0887e3da3","savedPayload":{"position":{"x":24610.421305084707,"y":29033.700094395477},"targetPosition":{"x":24703.12640339719,"y":29319.017049284023},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bf29e3bd-9386-408b-9091-042da0c53e81","savedPayload":{"position":{"x":24703.12640339719,"y":29319.017049284023},"targetPosition":{"x":24795.831501709672,"y":29604.334004172568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Resistances and Supports","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Resistances and Supports","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Market","project":"Superalgos","id":"a707814e-b81b-4102-9b5b-4e2fe969324f","savedPayload":{"position":{"x":25052.525014680516,"y":28770.141229233177},"targetPosition":{"x":25068.2258015534,"y":29069.730089659548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"5d9b2729-43fb-4e7e-aa4f-b8477c424e51"}}},{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Daily","project":"Superalgos","id":"c5395fbe-4b5a-4492-a7fb-e2d259905e27","savedPayload":{"position":{"x":25319.826971937026,"y":28906.33837915504},"targetPosition":{"x":25068.2258015534,"y":29069.730089659548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"be19d91b-9337-4f84-96b3-f4e54ea12df5"}}}],"id":"112be2cf-74ea-4272-9566-cf0cd24c111c","savedPayload":{"position":{"x":25068.2258015534,"y":29069.730089659548},"targetPosition":{"x":24932.028651631535,"y":29337.032046916058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e74c3232-7b59-4006-87fa-b3b2a328a52b","savedPayload":{"position":{"x":24932.028651631535,"y":29337.032046916058},"targetPosition":{"x":24795.831501709672,"y":29604.334004172568},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c193ecbb-c3e0-4fd5-94ed-bb6356d1d5ea","savedPayload":{"position":{"x":24795.831501709672,"y":29604.334004172568},"targetPosition":{"x":24888.536600022155,"y":29889.650959061113},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"85224e5e-f3ee-4e8d-b9bd-e5901bd49b33","savedPayload":{"position":{"x":24888.536600022155,"y":29889.650959061113},"targetPosition":{"x":24981.241698334637,"y":30174.96791394966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"70d459d6-d270-49e0-b70d-2053c65a40e2","savedPayload":{"position":{"x":24981.241698334637,"y":30174.96791394966},"targetPosition":{"x":25073.94679664712,"y":30460.284868838204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"af949a76-a6f4-4ec6-869e-f240480eea81","savedPayload":{"position":{"x":25073.94679664712,"y":30460.284868838204},"targetPosition":{"x":25166.651894959603,"y":30745.60182372675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a","savedPayload":{"position":{"x":25109.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMining":{"type":"Learning Mining","name":"New Learning Mining","project":"Superalgos","exchangeLearningTasks":[],"id":"1b19735e-0041-438f-824b-00df4f8942dd","savedPayload":{"position":{"x":25409.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingEnvironment":{"type":"Testing Environment","name":"New Testing Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Lightning Strike","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"Lightning Strike","config":"{\"folderName\":\"Lightning-Strike\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 0,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"fb252bd6-3e7d-49a0-9fc6-be392be5db5b","savedPayload":{"position":{"x":26091.344126806052,"y":30021.15686197025},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 1000\n}","project":"Superalgos","id":"ed578090-732c-4e41-a4ae-9d4f34607170","savedPayload":{"position":{"x":26118.929088256325,"y":29983.1894197532},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\",\n \"allowStartingFromThePast\": false\n}","project":"Superalgos","id":"47fa4509-16f4-42b7-9453-fa3b3d2885b0","savedPayload":{"position":{"x":26156.896530473376,"y":29955.604458302925},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"dfe3514c-1aa9-4cea-bb2d-e6657037e69d","savedPayload":{"position":{"x":26201.529935678274,"y":29941.102185841908},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"c711e510-373f-468d-8ed9-1601da6a06f5","savedPayload":{"position":{"x":26248.46027519034,"y":29941.102185841908},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"fdc7c383-8301-4393-b415-8c2d542e05fe","savedPayload":{"position":{"x":26293.09368039524,"y":29955.604458302925},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"28db17c9-2703-430b-a162-5e04b68640a3","savedPayload":{"position":{"x":26331.06112261229,"y":29983.1894197532},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"78270062-7d10-4afa-baee-2bda8a4b4ed2","savedPayload":{"position":{"x":26358.646084062562,"y":30021.15686197025},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"4c9cdc50-70c0-43ee-ad54-052f8b7ecbc8","savedPayload":{"position":{"x":26373.14835652358,"y":30065.790267175147},"targetPosition":{"x":26224.995105434307,"y":30089.25543693118},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e79ab7df-ba40-46aa-abcd-63df8031a931","savedPayload":{"position":{"x":26224.995105434307,"y":30089.25543693118},"targetPosition":{"x":26201.529935678274,"y":30237.408688020452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Lightning Strike","project":"Superalgos","id":"c6397744-c7b6-4fad-92a0-6954f282c0c2","savedPayload":{"position":{"x":26322.882484834518,"y":30149.24090017658},"targetPosition":{"x":26201.529935678274,"y":30237.408688020452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Lightning Strike","id":"628b758d-ffff-445f-9d4f-8aa480a13db3"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"720feaab-efc8-435a-bb3c-ab4e33ed1ca2","savedPayload":{"position":{"x":26349.683186767546,"y":30260.873857776485},"targetPosition":{"x":26201.529935678274,"y":30237.408688020452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"ce648922-fef2-44e3-8d76-2bd7ab72a29f","savedPayload":{"position":{"x":26201.529935678274,"y":30237.408688020452},"targetPosition":{"x":26080.17738652203,"y":30325.576475864324},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"60a5e5c0-cfb3-4488-b46c-55d637212aa5","savedPayload":{"position":{"x":26080.17738652203,"y":30325.576475864324},"targetPosition":{"x":25958.824837365788,"y":30413.744263708195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"cbfbb9e7-9c30-4482-8a9f-4c90771feffc","savedPayload":{"position":{"x":25958.824837365788,"y":30413.744263708195},"targetPosition":{"x":25837.472288209545,"y":30501.912051552066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08222935-2499-4a3e-a927-4f5dfbc392df","savedPayload":{"position":{"x":25837.472288209545,"y":30501.912051552066},"targetPosition":{"x":25716.1197390533,"y":30590.079839395938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"56c5656b-a7e0-42ed-92d6-631e78ca99d0","savedPayload":{"position":{"x":25716.1197390533,"y":30590.079839395938},"targetPosition":{"x":25594.76718989706,"y":30678.24762723981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1ce02342-473e-4614-ac76-c7788f56ab8e","savedPayload":{"position":{"x":25594.76718989706,"y":30678.24762723981},"targetPosition":{"x":25473.414640740815,"y":30766.41541508368},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"2db856e0-4719-408c-88bc-5b47d412c066","savedPayload":{"position":{"x":25473.414640740815,"y":30766.41541508368},"targetPosition":{"x":25352.062091584572,"y":30854.58320292755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"ba36975c-08d6-458d-b7c0-eb4684a85b5d","savedPayload":{"position":{"x":25352.062091584572,"y":30854.58320292755},"targetPosition":{"x":25230.70954242833,"y":30942.750990771423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"5882d8a8-345b-4188-b1c1-797e9ff805d9","savedPayload":{"position":{"x":25559.356993272086,"y":31030.918778615294},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"productionEnvironment":{"type":"Production Environment","name":"New Production Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Lightning Strike","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"Lightning Strike","config":"{\"folderName\":\"Lightning-Strike\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 0,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"5db563b5-a8d6-48c6-a34e-bbca8825ce37","savedPayload":{"position":{"x":29136.33779719249,"y":31900.557007311294},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 20\n}","project":"Superalgos","id":"f6cd46c1-66df-422c-82d4-02ac8e37f689","savedPayload":{"position":{"x":29271.38185908932,"y":31791.1034306834},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-min\"\n}","project":"Superalgos","id":"727de4cc-40e6-4064-843c-8cb3a9f2fcdf","savedPayload":{"position":{"x":29435.611912240918,"y":31734.531513385184},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}","project":"Superalgos","id":"598dc355-73c9-4e7f-a0e9-ee5fd7952825","savedPayload":{"position":{"x":29609.068802022866,"y":31737.555437792893},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"a3646bab-4d27-48a7-b17c-79d6da48f64d","savedPayload":{"position":{"x":29771.213170410017,"y":31799.79563397899},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"5021a926-442a-4341-8844-8a432293ecb1","savedPayload":{"position":{"x":29902.294526505633,"y":31913.74413225854},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"e8cedec0-1bc2-46ba-98de-b7ff746a74c8","savedPayload":{"position":{"x":29986.506569957906,"y":32065.668420774917},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"67da1d57-62ff-424c-ab2e-034e008fc079","savedPayload":{"position":{"x":30013.68034443371,"y":32237.1490071955},"targetPosition":{"x":29513.77662209029,"y":32228.37801386833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"726c35b1-e30b-4620-819f-a88a955f1902","savedPayload":{"position":{"x":29513.77662209029,"y":32228.37801386833},"targetPosition":{"x":29334.86323334934,"y":32695.002812706356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"Lightning Strike","project":"Superalgos","id":"ff1cd7c1-9415-4c49-8ecf-188fd0c60ea4","savedPayload":{"position":{"x":29791.614691734634,"y":32491.98444885297},"targetPosition":{"x":29334.86323334934,"y":32695.002812706356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"Lightning Strike","id":"628b758d-ffff-445f-9d4f-8aa480a13db3"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"5fd0a826-0819-4f19-a999-66cc64be0272","savedPayload":{"position":{"x":29801.561287125278,"y":32874.31813935596},"targetPosition":{"x":29334.86323334934,"y":32695.002812706356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"1ce123af-467f-4295-b317-dba8729faf25","savedPayload":{"position":{"x":29334.86323334934,"y":32695.002812706356},"targetPosition":{"x":28878.4539791934,"y":32897.99329377132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Resistances and Supports Multi-Period-Daily","project":"Superalgos","id":"0d54601b-fcac-42c9-8ce6-d532bfc81de5","savedPayload":{"position":{"x":29282.623855251295,"y":33191.91239116231},"targetPosition":{"x":28878.4539791934,"y":32897.99329377132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"7e2fdde9-8b64-44a3-85f1-10c3935bd3e3"}}},"id":"4d7e7fa0-afcb-4b2f-983b-ceacea91b29d","savedPayload":{"position":{"x":28878.4539791934,"y":32897.99329377132},"targetPosition":{"x":28381.61405979186,"y":32845.699264065865},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"2451fc98-0396-44df-902c-a3eaa90f0618","savedPayload":{"position":{"x":28381.61405979186,"y":32845.699264065865},"targetPosition":{"x":27884.825314464462,"y":32793.4798823336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"keyReference":{"type":"Key Reference","name":"Key for Lighting Strike","project":"Superalgos","id":"a0622fc9-c4e3-44c3-963d-7ae5fa163e99","savedPayload":{"position":{"x":28087.64901178369,"y":33249.50782050918},"targetPosition":{"x":27884.825314464462,"y":32793.4798823336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Exchange Account Key","name":"Key for Lighting Strike","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},"id":"c8492c4a-a7a7-4a80-a25a-a610377e6180","savedPayload":{"position":{"x":27884.825314464462,"y":32793.4798823336},"targetPosition":{"x":27480.530470283273,"y":32499.671050557776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dd73b670-11d7-4cdc-848b-c063fb7a3848","savedPayload":{"position":{"x":27480.530470283273,"y":32499.671050557776},"targetPosition":{"x":27076.338818500477,"y":32205.966385015265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1e087225-153c-4c7e-b9ec-2a36f32ee511","savedPayload":{"position":{"x":27076.338818500477,"y":32205.966385015265},"targetPosition":{"x":26672.09592394053,"y":31912.249482914292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"013985a8-7bf7-4b91-8e2d-f4e8bd81cb62","savedPayload":{"position":{"x":26672.09592394053,"y":31912.249482914292},"targetPosition":{"x":26267.828989419053,"y":31618.52729735555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"d539c0ac-aaeb-4c44-9dba-ac26df819a8d","savedPayload":{"position":{"x":26267.828989419053,"y":31618.52729735555},"targetPosition":{"x":25863.48739163261,"y":31324.7565723021},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"65a40d20-837c-4652-8356-f8054b4e1346","savedPayload":{"position":{"x":25409.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"u"}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","project":"Superalgos","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","project":"Superalgos","dataProducts":[],"dataMineProducts":[{"type":"Data Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Candles Volumes","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles","project":"Superalgos","id":"b9c30464-73e5-4f5c-b422-9ba1a02b78ab","savedPayload":{"position":{"x":25884.66459599203,"y":31894.120994910885},"targetPosition":{"x":25787.66459599203,"y":31992.120994910885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"07c11481-7dbd-477d-8bf7-79212542a6aa","savedPayload":{"position":{"x":25866.66459599203,"y":31951.120994910885},"targetPosition":{"x":25787.66459599203,"y":31992.120994910885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}}],"dataProductFolders":[],"id":"73bb62ff-8212-4387-b160-40ee8de2a133","savedPayload":{"position":{"x":25632.07188175108,"y":32661.969425653475},"targetPosition":{"x":25419.939847395115,"y":32449.83739129751},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Resistances and Supports","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Resistances","project":"Superalgos","id":"a1669770-1bbe-40f7-acb3-ded15272935f","savedPayload":{"position":{"x":25870.66459599203,"y":31844.120994910885},"targetPosition":{"x":25841.66459599203,"y":31926.120994910885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Resistances","id":"7a734501-a0fb-4305-803e-7e95d477c513"}}},{"type":"Data Product","name":"Supports","project":"Superalgos","id":"64899503-b618-493a-ba94-bfad2051a611","savedPayload":{"position":{"x":25893.66459599203,"y":31906.120994910885},"targetPosition":{"x":25841.66459599203,"y":31926.120994910885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Supports","id":"bc3c43de-6312-47d4-ae3d-0c95c1b039e0"}}}],"dataProductFolders":[],"id":"a1855a09-0948-43de-bba7-8900c5c161d8","savedPayload":{"position":{"x":25342.294133864358,"y":32739.615139184232},"targetPosition":{"x":25419.939847395115,"y":32449.83739129751},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d37d8bf1-be3b-49ac-805b-0ddb3944e6a0","savedPayload":{"position":{"x":25419.939847395115,"y":32449.83739129751},"targetPosition":{"x":25342.294133864358,"y":32160.05964341079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"6d7273da-5366-4fe3-9749-e643038abd7a","savedPayload":{"position":{"x":25342.294133864358,"y":32160.05964341079},"targetPosition":{"x":25264.6484203336,"y":31870.28189552407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"9bc0aea4-0596-449c-91bd-4fb4cb672aa8","savedPayload":{"position":{"x":25264.6484203336,"y":31870.28189552407},"targetPosition":{"x":25187.002706802843,"y":31580.504147637348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25187.002706802843,"y":31580.504147637348},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","exchangeTradingProducts":[{"type":"Exchange Trading Products","name":"Binance","project":"Superalgos","marketTradingProducts":[{"type":"Market Trading Products","name":"Binance BTC/USDT","project":"Superalgos","tradingSessionReferences":[{"type":"Trading Session Reference","name":"Lightning Strike Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"a01b42b0-ea87-47ab-b0e9-52d4b10cb631","savedPayload":{"position":{"x":24480.592002018682,"y":31761.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"559a20a7-6697-4245-9d6c-ad7c0e31ff84","savedPayload":{"position":{"x":24330.592002018682,"y":31690.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"24fab05f-ff78-4cca-af61-d4d0bb2f2960","savedPayload":{"position":{"x":24437.592002018682,"y":31733.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"7c580919-08ce-4aff-9e84-888fdf07caec","savedPayload":{"position":{"x":24298.592002018682,"y":31745.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"389797d4-8456-4258-9adf-246a6ba69016","savedPayload":{"position":{"x":24458.592002018682,"y":31765.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"323c7b0b-42b1-4ff0-9d4b-36c2fd605caa","savedPayload":{"position":{"x":24434.592002018682,"y":31776.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"63594fc6-3b89-4507-bca8-2d43ef618cbe","savedPayload":{"position":{"x":24492.592002018682,"y":31682.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"73bb3f9e-b112-4e5a-bce9-6d4bec41cc6c","savedPayload":{"position":{"x":24323.592002018682,"y":31849.454740869387},"targetPosition":{"x":24394.592002018682,"y":31753.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"a606455e-f5ce-4535-b1af-6d9dd529f91c","savedPayload":{"position":{"x":24394.592002018682,"y":31753.454740869387},"targetPosition":{"x":24438.592002018682,"y":31839.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"515f5fd6-d860-44d4-b5d6-a19acd9c5c86","savedPayload":{"position":{"x":24492.592002018682,"y":31734.454740869387},"targetPosition":{"x":24471.592002018682,"y":31803.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"556e97e8-eba3-419d-869d-950cc99371da","savedPayload":{"position":{"x":24465.592002018682,"y":31852.454740869387},"targetPosition":{"x":24471.592002018682,"y":31803.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"3af0887b-ae23-4f57-b376-4a540fe13112","savedPayload":{"position":{"x":24471.592002018682,"y":31803.454740869387},"targetPosition":{"x":24438.592002018682,"y":31839.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"d33abc39-702b-4d7a-8435-43d90e0f2c3a","savedPayload":{"position":{"x":24369.592002018682,"y":31805.454740869387},"targetPosition":{"x":24464.592002018682,"y":31882.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"d681fd5f-64af-4f39-9f6d-a767bef7692f","savedPayload":{"position":{"x":24415.592002018682,"y":31816.454740869387},"targetPosition":{"x":24464.592002018682,"y":31882.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}}],"dataProductFolders":[],"id":"895feaf2-ae82-4b8e-ada6-780beab73ea9","savedPayload":{"position":{"x":24464.592002018682,"y":31882.454740869387},"targetPosition":{"x":24438.592002018682,"y":31839.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"b0961496-1af9-48cd-bbeb-ac5973192e78","savedPayload":{"position":{"x":24572.592002018682,"y":31678.454740869387},"targetPosition":{"x":24537.592002018682,"y":31755.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"0c9cf78d-ce6e-4318-811d-e748ca72845d","savedPayload":{"position":{"x":24558.592002018682,"y":31710.454740869387},"targetPosition":{"x":24537.592002018682,"y":31755.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"e298787f-b7f2-4334-931e-38b9441e43f9","savedPayload":{"position":{"x":24521.592002018682,"y":31742.454740869387},"targetPosition":{"x":24537.592002018682,"y":31755.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"4719b69d-b23e-4037-8c0a-b641fd8ab14c","savedPayload":{"position":{"x":24461.592002018682,"y":31689.454740869387},"targetPosition":{"x":24537.592002018682,"y":31755.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"9fe11205-286a-4610-81ec-29cbc70d6075","savedPayload":{"position":{"x":24537.592002018682,"y":31755.454740869387},"targetPosition":{"x":24438.592002018682,"y":31839.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"90834a1b-cc7e-48a9-be5c-0e30380af4bd","savedPayload":{"position":{"x":24500.592002018682,"y":31771.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"e2112d60-5fc2-4e67-befe-d4fbd6c1de77","savedPayload":{"position":{"x":24508.592002018682,"y":31784.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"e734b6be-ba40-468c-a94f-1153dc85e00c","savedPayload":{"position":{"x":24462.592002018682,"y":31870.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"9a973229-4d9d-45af-b5aa-64906a915f6e","savedPayload":{"position":{"x":24439.592002018682,"y":31813.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"56517fe9-64da-4404-83f3-005106bc1c0a","savedPayload":{"position":{"x":24429.592002018682,"y":31799.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"d00c76e7-4be0-4518-9892-a0f6df943951","savedPayload":{"position":{"x":24611.592002018682,"y":31730.454740869387},"targetPosition":{"x":24528.592002018682,"y":31804.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"b5154bc1-4311-4148-b396-5ebca1c62417","savedPayload":{"position":{"x":24528.592002018682,"y":31804.454740869387},"targetPosition":{"x":24438.592002018682,"y":31839.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89edd698-1d64-4500-bcef-d13ea74bee1c","savedPayload":{"position":{"x":24438.592002018682,"y":31839.454740869387},"targetPosition":{"x":24453.592002018682,"y":31759.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"a0c29c57-0a20-4084-9697-142300f62f9c","savedPayload":{"position":{"x":24400.592002018682,"y":31844.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"aa0fe882-89a8-4811-8988-c589554afe9d","savedPayload":{"position":{"x":24311.592002018682,"y":31789.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"bbc65054-b22b-4cbb-816b-529672e2f498","savedPayload":{"position":{"x":24341.592002018682,"y":31813.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"776a3ece-8255-4e80-b60f-85bb818b561f","savedPayload":{"position":{"x":24357.592002018682,"y":31807.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"7593aaf9-0505-4b58-9920-235340ff2d2f","savedPayload":{"position":{"x":24342.592002018682,"y":31784.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"3e2e6105-f41f-42e2-bce5-74ebb3b81cbd","savedPayload":{"position":{"x":24349.592002018682,"y":31820.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"faab4399-898b-4393-8c27-fa2f3109c60a","savedPayload":{"position":{"x":24324.592002018682,"y":31838.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"9ff0f035-ca7f-4e65-a82c-186fa7f09157","savedPayload":{"position":{"x":24314.592002018682,"y":31914.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"04210a59-070a-45f1-a2a0-cf50bd4879f7","savedPayload":{"position":{"x":24406.592002018682,"y":31780.454740869387},"targetPosition":{"x":24395.592002018682,"y":31841.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"1a16bc12-581d-4626-846c-895f08e65fdf","savedPayload":{"position":{"x":24395.592002018682,"y":31841.454740869387},"targetPosition":{"x":24453.592002018682,"y":31759.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"73dff61a-7b05-4ca6-b963-99d6c578e9ba","savedPayload":{"position":{"x":24450.592002018682,"y":31727.454740869387},"targetPosition":{"x":24545.592002018682,"y":31727.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"a9c454c8-9075-4dcf-bfe9-ebd0c1658049","savedPayload":{"position":{"x":24507.592002018682,"y":31747.454740869387},"targetPosition":{"x":24545.592002018682,"y":31727.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"cad1eecc-e897-4086-b42c-fcfd843c04cc","savedPayload":{"position":{"x":24587.592002018682,"y":31833.454740869387},"targetPosition":{"x":24603.592002018682,"y":31752.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"fdf22e85-7071-4847-bdba-e3fb43a616ed","savedPayload":{"position":{"x":24584.592002018682,"y":31838.454740869387},"targetPosition":{"x":24603.592002018682,"y":31752.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"d2b1ab31-d8a1-422b-a717-33ee7df9b07b","savedPayload":{"position":{"x":24562.592002018682,"y":31737.454740869387},"targetPosition":{"x":24603.592002018682,"y":31752.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"3b5a12db-b969-4400-8b9d-afb9b7b81642","savedPayload":{"position":{"x":24689.592002018682,"y":31670.454740869387},"targetPosition":{"x":24603.592002018682,"y":31752.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"97736b8e-761c-43f2-83bf-df8f5d41b963","savedPayload":{"position":{"x":24603.592002018682,"y":31752.454740869387},"targetPosition":{"x":24545.592002018682,"y":31727.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"9fc29be1-9393-4933-95d3-bebddd73c05e","savedPayload":{"position":{"x":24524.592002018682,"y":31656.454740869387},"targetPosition":{"x":24504.592002018682,"y":31656.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"b555388f-db93-4db1-91be-7772550afa70","savedPayload":{"position":{"x":24456.592002018682,"y":31707.454740869387},"targetPosition":{"x":24504.592002018682,"y":31656.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"41953904-e48c-4176-bf0f-09d133bc444c","savedPayload":{"position":{"x":24458.592002018682,"y":31664.454740869387},"targetPosition":{"x":24504.592002018682,"y":31656.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"47b4553c-7f2e-438c-9f4b-9ba30e943a6c","savedPayload":{"position":{"x":24480.592002018682,"y":31712.454740869387},"targetPosition":{"x":24504.592002018682,"y":31656.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"ac789224-64dc-4ff5-a316-2dfbb6347b8a","savedPayload":{"position":{"x":24504.592002018682,"y":31656.454740869387},"targetPosition":{"x":24545.592002018682,"y":31727.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"6e49b57f-8c94-410f-985b-82c126155b11","savedPayload":{"position":{"x":24710.592002018682,"y":31651.454740869387},"targetPosition":{"x":24633.592002018682,"y":31702.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"ae8fa9a5-95b6-4769-8ade-f9854e6855ba","savedPayload":{"position":{"x":24690.592002018682,"y":31799.454740869387},"targetPosition":{"x":24633.592002018682,"y":31702.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"9e9b19ee-9c51-4586-b74d-d2880f13f71f","savedPayload":{"position":{"x":24673.592002018682,"y":31768.454740869387},"targetPosition":{"x":24633.592002018682,"y":31702.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"01491591-0462-453c-91e0-6da6f554a729","savedPayload":{"position":{"x":24553.592002018682,"y":31664.454740869387},"targetPosition":{"x":24633.592002018682,"y":31702.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"719dd8a6-58ab-41c6-9693-9b67c12232d2","savedPayload":{"position":{"x":24575.592002018682,"y":31611.454740869387},"targetPosition":{"x":24633.592002018682,"y":31702.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"2a4cb5a2-8e6a-4b14-816a-b8e0cce4dae5","savedPayload":{"position":{"x":24633.592002018682,"y":31702.454740869387},"targetPosition":{"x":24545.592002018682,"y":31727.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"39e122ca-cdc4-49a6-91a6-2f2c05f62ea0","savedPayload":{"position":{"x":24545.592002018682,"y":31727.454740869387},"targetPosition":{"x":24453.592002018682,"y":31759.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"363150a9-d4e7-4e2e-b327-89109935718c","savedPayload":{"position":{"x":24453.592002018682,"y":31759.454740869387},"targetPosition":{"x":24400.592002018682,"y":31793.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13a2b4f9-2c05-49b2-b42c-32ffa71ae0b7","savedPayload":{"position":{"x":24400.592002018682,"y":31793.454740869387},"targetPosition":{"x":24360.592002018682,"y":31706.454740869387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"a5de30a4-022e-4f8a-afd0-3eb6d8600ae8","savedPayload":{"position":{"x":24659.356993272086,"y":32370.149263156625},"targetPosition":{"x":24659.356993272086,"y":32070.149263156625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"Lightning Strike","id":"ce648922-fef2-44e3-8d76-2bd7ab72a29f"}}},{"type":"Trading Session Reference","name":"Lightning Strike Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"dc6cc4ef-4bd7-4837-8442-919462314db3","savedPayload":{"position":{"x":24057.07658106541,"y":32555.381497697002},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"776ed571-8321-47aa-8cfb-c8ebf565dace","savedPayload":{"position":{"x":24050.260548494378,"y":32685.43914685288},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"ded93703-a48d-44be-9703-878c28f949cd","savedPayload":{"position":{"x":23999.373237179447,"y":32805.32213960456},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"e702f1dd-1c91-4d05-ac55-19db363f5f3a","savedPayload":{"position":{"x":23910.552407881933,"y":32900.57081774167},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"b8abea53-8221-47bd-91a2-cdcdd2ad1027","savedPayload":{"position":{"x":23794.51116347094,"y":32959.69678496007},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"18bcbd26-c237-4acb-96f4-d9c95d833a42","savedPayload":{"position":{"x":23665.24579060881,"y":32975.568577006896},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"c444f4b5-fa67-4c21-afa8-1f998da7a2a2","savedPayload":{"position":{"x":23538.347601016434,"y":32946.271821518596},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"057570bd-69d4-4f3c-b0d4-94ee32f61e65","savedPayload":{"position":{"x":23429.122389176475,"y":32875.34013958112},"targetPosition":{"x":23684.871774199913,"y":32601.08250147393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"6a331de0-7872-4f86-bea0-6dd802c97921","savedPayload":{"position":{"x":23684.871774199913,"y":32601.08250147393},"targetPosition":{"x":23514.625336797584,"y":32266.955054903294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"88dd680c-a81b-48ae-96ba-838281abfa35","savedPayload":{"position":{"x":23665.24579060881,"y":32975.568577006896},"targetPosition":{"x":23494.99935320648,"y":32641.44113043626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"24af3ffc-6a52-4ee3-a30b-f068aa5b2062","savedPayload":{"position":{"x":23290.759715075845,"y":32955.94259341579},"targetPosition":{"x":23494.99935320648,"y":32641.44113043626},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"74c10f36-887b-4233-81e5-abe365511bfa","savedPayload":{"position":{"x":23494.99935320648,"y":32641.44113043626},"targetPosition":{"x":23514.625336797584,"y":32266.955054903294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"25280962-e4e5-40df-9e42-9edfbad6f6d3","savedPayload":{"position":{"x":23290.759715075845,"y":32955.94259341579},"targetPosition":{"x":23310.38569866695,"y":32581.456517882827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"7a95a249-132d-4e0f-9182-cc7af45cacea","savedPayload":{"position":{"x":22976.25825209631,"y":32751.702955285156},"targetPosition":{"x":23310.38569866695,"y":32581.456517882827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}}],"dataProductFolders":[],"id":"7eca88a8-3724-4ca1-aa30-9227727eb834","savedPayload":{"position":{"x":23310.38569866695,"y":32581.456517882827},"targetPosition":{"x":23514.625336797584,"y":32266.955054903294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"c9c4bca7-f918-4aa8-b538-ffe8aa31d5c2","savedPayload":{"position":{"x":23121.83496583686,"y":32807.5846200288},"targetPosition":{"x":23180.497890226947,"y":32437.201492305623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"4201d7c0-43aa-4ac0-bd7e-ab26b688aa2d","savedPayload":{"position":{"x":22915.332847281992,"y":32702.366535250578},"targetPosition":{"x":23180.497890226947,"y":32437.201492305623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"4fe24ddc-973f-4a5d-bf8a-d77090486125","savedPayload":{"position":{"x":22810.11476250377,"y":32495.86441669571},"targetPosition":{"x":23180.497890226947,"y":32437.201492305623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"e2f3d69e-2f0a-4463-8e74-4f0768c4fb70","savedPayload":{"position":{"x":22846.37044365631,"y":32266.955054903294},"targetPosition":{"x":23180.497890226947,"y":32437.201492305623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"7236bd16-a6e3-48ac-89bf-dc8674b7e812","savedPayload":{"position":{"x":23180.497890226947,"y":32437.201492305623},"targetPosition":{"x":23514.625336797584,"y":32266.955054903294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"0e0b284a-5014-4ab0-ada0-4322c14a099e","savedPayload":{"position":{"x":22959.973442347367,"y":32576.21397168598},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"95b3db7a-9b62-4eab-a76b-4af8794da5a6","savedPayload":{"position":{"x":22835.117657046547,"y":32465.473108499165},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"1c6eed42-23aa-4174-aade-be29222acb8c","savedPayload":{"position":{"x":22770.675141305597,"y":32311.52614338643},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"a2f44cd5-090d-42e5-9eb7-73e732310e85","savedPayload":{"position":{"x":22779.409525702606,"y":32144.86416082397},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"8c24d559-ba52-46fe-81b4-8a6bf50c74b6","savedPayload":{"position":{"x":22859.590858287545,"y":31998.49661043336},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"c451c035-5ece-451f-836f-b5334cb3f967","savedPayload":{"position":{"x":22995.338242782465,"y":31901.413380649665},"targetPosition":{"x":23140.13926126462,"y":32247.32907131219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"ce9593a8-3e87-43bb-88c7-af50cf651806","savedPayload":{"position":{"x":23140.13926126462,"y":32247.32907131219},"targetPosition":{"x":23514.625336797584,"y":32266.955054903294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8be94a26-6821-48bb-8169-3eae2a1131af","savedPayload":{"position":{"x":23514.625336797584,"y":32266.955054903294},"targetPosition":{"x":23718.86497492822,"y":31952.45359192376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"ba606f99-2ae5-44dc-b7db-399e657830e1","savedPayload":{"position":{"x":23312.861450927674,"y":32403.366186743522},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"2d20d8ae-4afa-4e92-8de2-89e66e5efdee","savedPayload":{"position":{"x":23199.53338349962,"y":32373.000022596396},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"f8a6219c-c7b4-410a-8aa4-1910583f51c8","savedPayload":{"position":{"x":23101.13564726847,"y":32309.099785534443},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"dcff6f56-7646-4505-aa93-6682a110f3f2","savedPayload":{"position":{"x":23027.300098233878,"y":32217.92047598042},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"0a9dff80-e462-4110-b988-11ce57bbbcd5","savedPayload":{"position":{"x":22985.25427437787,"y":32108.38736003708},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"c7e05ad0-7d4a-4ffb-9aee-191511f85ee7","savedPayload":{"position":{"x":22979.11391388994,"y":31991.22230225505},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"e4811789-fd94-49b0-9917-8d9d434f997d","savedPayload":{"position":{"x":23009.480078037068,"y":31877.894234826996},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"029ff3a7-9c65-425f-855a-882df68fa05b","savedPayload":{"position":{"x":23073.38031509902,"y":31779.496498595847},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"0f47adaf-25a0-431f-b15b-0fbf44069b38","savedPayload":{"position":{"x":23164.559624653044,"y":31705.660949561254},"targetPosition":{"x":23352.059624653044,"y":32030.42047598042},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"7096a712-deb7-4adb-86e0-d688f24d2832","savedPayload":{"position":{"x":23352.059624653044,"y":32030.42047598042},"targetPosition":{"x":23718.86497492822,"y":31952.45359192376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"c6fd6067-4b57-4860-ae3b-5668e4444490","savedPayload":{"position":{"x":23070.23606537805,"y":31918.460391195455},"targetPosition":{"x":23404.363511948686,"y":31748.213953793125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"60f88096-7343-42d1-afad-83fecd22fb44","savedPayload":{"position":{"x":23029.87743641572,"y":31728.58797020202},"targetPosition":{"x":23404.363511948686,"y":31748.213953793125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"9f939086-c934-4924-8353-776707a7cf10","savedPayload":{"position":{"x":22739.769389032703,"y":31678.362296741976},"targetPosition":{"x":23089.862048969153,"y":31543.97431566249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"da5f279e-d387-43cf-80f4-fc114b9ac906","savedPayload":{"position":{"x":22727.63986411075,"y":31446.917173749043},"targetPosition":{"x":23089.862048969153,"y":31543.97431566249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"367646bb-839a-4071-8305-6d26a647585d","savedPayload":{"position":{"x":22853.866902325462,"y":31252.544580116126},"targetPosition":{"x":23089.862048969153,"y":31543.97431566249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"0b2fc73a-9635-40b2-98d8-0c79c69175a9","savedPayload":{"position":{"x":23070.23606537805,"y":31169.488240129525},"targetPosition":{"x":23089.862048969153,"y":31543.97431566249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"88643ab2-7859-45d4-b967-8681cf970828","savedPayload":{"position":{"x":23089.862048969153,"y":31543.97431566249},"targetPosition":{"x":23404.363511948686,"y":31748.213953793125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"7fe8c58f-9cad-47c9-ba4e-d66bff094dcf","savedPayload":{"position":{"x":22863.73394682318,"y":31355.4235828324},"targetPosition":{"x":23234.117074546357,"y":31414.086507222488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"41f17745-1819-4681-8a2b-9bdda3cd67c4","savedPayload":{"position":{"x":22968.952031601402,"y":31148.921464277533},"targetPosition":{"x":23234.117074546357,"y":31414.086507222488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"e89c8bfd-fac9-4aff-afc0-3a89c1dc2710","savedPayload":{"position":{"x":23175.45415015627,"y":31043.70337949931},"targetPosition":{"x":23234.117074546357,"y":31414.086507222488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"bc2c6503-e935-4ad7-a76a-89b062d41e91","savedPayload":{"position":{"x":23404.363511948686,"y":31079.95906065185},"targetPosition":{"x":23234.117074546357,"y":31414.086507222488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"869369c1-13de-4086-ad40-77b3d54cfc36","savedPayload":{"position":{"x":23234.117074546357,"y":31414.086507222488},"targetPosition":{"x":23404.363511948686,"y":31748.213953793125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"3ed594a0-8452-4bd8-9eaa-37cd83a45b90","savedPayload":{"position":{"x":23109.488032560257,"y":31169.488240129525},"targetPosition":{"x":23423.98949553979,"y":31373.72787826016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"88997c97-e77f-490e-9eb5-c7531beec132","savedPayload":{"position":{"x":23253.74305813746,"y":31039.600431689523},"targetPosition":{"x":23423.98949553979,"y":31373.72787826016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"b4772611-d5d0-4fbd-b689-d42de3c045d4","savedPayload":{"position":{"x":23443.615479130895,"y":30999.241802727196},"targetPosition":{"x":23423.98949553979,"y":31373.72787826016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"9b064960-3829-441f-b955-334fb8324a53","savedPayload":{"position":{"x":23628.229133670426,"y":31059.226415280627},"targetPosition":{"x":23423.98949553979,"y":31373.72787826016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"cbcc817b-4333-4c80-addc-e2a0ee0845c1","savedPayload":{"position":{"x":23758.116942110428,"y":31203.48144085783},"targetPosition":{"x":23423.98949553979,"y":31373.72787826016},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"7f74f2e1-91b6-4d7a-87cb-1d6232a41876","savedPayload":{"position":{"x":23423.98949553979,"y":31373.72787826016},"targetPosition":{"x":23404.363511948686,"y":31748.213953793125},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"291949a0-847b-4b18-b3b4-191496fc38a9","savedPayload":{"position":{"x":23404.363511948686,"y":31748.213953793125},"targetPosition":{"x":23718.86497492822,"y":31952.45359192376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ae78f4fc-6ee5-4ae4-9847-3bab0e2e51a6","savedPayload":{"position":{"x":23718.86497492822,"y":31952.45359192376},"targetPosition":{"x":24085.670325203395,"y":31874.4867078671},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2b0766-a3d5-47e1-acd8-7345af564388","savedPayload":{"position":{"x":24085.670325203395,"y":31874.4867078671},"targetPosition":{"x":24330.207225386846,"y":31822.508785162663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"9ef30086-0c9d-47c2-8983-db5fc9a99583","savedPayload":{"position":{"x":24399.549372136753,"y":32220.149263156625},"targetPosition":{"x":24659.356993272086,"y":32070.149263156625},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"Lightning Strike","id":"1ce123af-467f-4295-b317-dba8729faf25"}}}],"id":"026bab29-64d0-4d83-862c-446657efa101","savedPayload":{"position":{"x":24659.356993272086,"y":32070.149263156625},"targetPosition":{"x":24809.356993272086,"y":31810.341642021293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"f601d2a7-fada-477f-9b63-3ef7ed42d44a","savedPayload":{"position":{"x":24809.356993272086,"y":31810.341642021293},"targetPosition":{"x":24959.356993272086,"y":31550.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24959.356993272086,"y":31550.53402088596},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","exchangeLearningProducts":[],"id":"2845a687-becc-4c3b-bc79-b2293ba876ba","savedPayload":{"position":{"x":24819.579245385365,"y":31368.372113281384},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25109.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25259.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24959.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"Binance","config":"{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}","project":"Superalgos","assets":[{"type":"Asset","name":"Bitcoin","config":"{ \n\"codeName\": \"BTC\"\n}","project":"Superalgos","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa","savedPayload":{"position":{"x":19794.079365950267,"y":30512.325102172115},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Asset","name":"Tether","config":"{ \n\"codeName\": \"USDT\"\n}","project":"Superalgos","id":"f110bfa0-bd5b-469b-a940-4524c8688136","savedPayload":{"position":{"x":20006.21140030623,"y":30724.45713652808},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"95d2c30f-215b-486e-8119-f4eac0279575","savedPayload":{"position":{"x":19716.43365241951,"y":30802.102850058836},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"E"}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","code":"{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}","project":"Superalgos","markets":[{"type":"Market","name":"BTC/USDT","config":"{ \n\"codeName\": \"BTC/USDT\"\n}","project":"Superalgos","baseAsset":{"type":"Market Base Asset","name":"Bitcoin","project":"Superalgos","id":"1017b30d-de1b-4212-991e-9fd0a5b6c814","savedPayload":{"position":{"x":20394.079365950267,"y":30936.589170884043},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},"quotedAsset":{"type":"Market Quoted Asset","name":"Tether","project":"Superalgos","id":"705c4a67-787a-48cd-a3dc-3a557438bf0b","savedPayload":{"position":{"x":20394.079365950267,"y":31091.880597945557},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}},"id":"9a867bf0-a71d-445c-b99a-75b60bbdce09","savedPayload":{"position":{"x":20104.301618063546,"y":31014.2348844148},"targetPosition":{"x":19804.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fd80894-900e-44ac-a1a7-56c14124f7a1","savedPayload":{"position":{"x":19804.301618063546,"y":31014.2348844148},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[{"type":"Exchange Account Asset","name":"Bitcoin","project":"Superalgos","id":"ba6f3d5c-b36b-49d9-947f-392068109169","savedPayload":{"position":{"x":20508.121182548915,"y":31438.498953126727},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},{"type":"Exchange Account Asset","name":"Tether","project":"Superalgos","id":"c90be267-90f9-45ae-b225-0578adb4aad9","savedPayload":{"position":{"x":20430.475469018158,"y":31728.27670101345},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}}],"id":"8ac5c2a9-a238-48ae-ab43-0a0a95a37464","savedPayload":{"position":{"x":20218.343434662194,"y":31516.144666657485},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"Key for Lighting Strike","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e85bbbd6-aca8-450f-9237-788062de5761","savedPayload":{"position":{"x":20083.857113836988,"y":32018.05444890017},"targetPosition":{"x":20006.21140030623,"y":31728.27670101345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"48925cc9-f3cd-4499-8466-1338fed28a0d","savedPayload":{"position":{"x":20006.21140030623,"y":31728.27670101345},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"63794496-c94b-42f9-81cc-c588708617a6","savedPayload":{"position":{"x":19928.565686775473,"y":31438.498953126727},"targetPosition":{"x":19716.43365241951,"y":31226.366918770764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b0c1ac5-515f-44a9-b9b9-e698a9c51eac","savedPayload":{"position":{"x":19716.43365241951,"y":31226.366918770764},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b","savedPayload":{"position":{"x":19504.301618063546,"y":31014.2348844148},"targetPosition":{"x":19204.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"tutorial":{"status":"Done"}}}],"id":"e3879d63-6f8f-41a3-8ac3-0349c4361722","savedPayload":{"position":{"x":19204.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Untested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"ACX","config":"{ \n\"codeName\": \"acx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ebcb522b-ae58-46d2-9d82-a9b0beec3976","savedPayload":{"position":{"x":17935.64382962515,"y":31014.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b2649588-27c6-442c-b179-f6d8817188b3","savedPayload":{"position":{"x":17954.64382962515,"y":31004.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b2051d5-7ee7-4e94-8c8d-306674889339","savedPayload":{"position":{"x":17838.64382962515,"y":30896.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1d5461aa-d26c-4df5-b383-8c83e311b8ca","savedPayload":{"position":{"x":17643.64382962515,"y":30952.23747069523},"targetPosition":{"x":17698.64382962515,"y":30973.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c6372400-de52-4b63-97f3-f748aac9c63f","savedPayload":{"position":{"x":17698.64382962515,"y":30973.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c948314e-2247-4234-b83d-cc2c1b152665","savedPayload":{"position":{"x":17766.64382962515,"y":30905.23747069523},"targetPosition":{"x":17837.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04ccb742-ef1b-4138-b38d-a6b0d92f2f8e","savedPayload":{"position":{"x":17837.64382962515,"y":30978.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9c21b2d-de21-43b5-8b48-51367a8c981c","savedPayload":{"position":{"x":19313.14497226101,"y":30565.583066825377},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"AOFEX","config":"{ \n\"codeName\": \"aofex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"623ef91b-04c0-4bd5-ac0d-b32c809be3ea","savedPayload":{"position":{"x":17973.64382962515,"y":30923.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"9d0b5855-59a6-4dda-9a4b-33d7a44d582e","savedPayload":{"position":{"x":17901.64382962515,"y":30994.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"e898e569-0dd3-4a22-baa5-caaace66d4ed","savedPayload":{"position":{"x":18062.64382962515,"y":30838.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"64a69d3d-15ff-41c3-a926-5ec93c932ab1","savedPayload":{"position":{"x":17822.64382962515,"y":31052.23747069523},"targetPosition":{"x":17893.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae2785c5-75a1-44fc-a71b-363d88cb5dac","savedPayload":{"position":{"x":17893.64382962515,"y":30981.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07ea69aa-7357-43b1-b548-a4c4fab70c55","savedPayload":{"position":{"x":17982.64382962515,"y":30899.23747069523},"targetPosition":{"x":17971.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2146b410-fc4e-452d-ae57-5d58c9a29706","savedPayload":{"position":{"x":17971.64382962515,"y":30962.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c2e9bb45-97c7-47e8-b13c-56946e673c53","savedPayload":{"position":{"x":19413.67778623216,"y":30647.89853748846},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bequant","config":"{ \n\"codeName\": \"bequant\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"b23c8adf-c880-48fd-b4af-4b4be86cf0e5","savedPayload":{"position":{"x":18059.64382962515,"y":31101.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"523bd94f-68f9-457e-91fd-806c1b95e98d","savedPayload":{"position":{"x":18006.64382962515,"y":31117.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9d914bb1-a68b-41ae-8666-0fcc755358c1","savedPayload":{"position":{"x":17859.64382962515,"y":30964.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15d903b5-113c-465e-8120-7c46a9a85565","savedPayload":{"position":{"x":17976.64382962515,"y":31146.23747069523},"targetPosition":{"x":17943.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2d1c0bc3-abe2-4340-91bf-2eef5b98a2f0","savedPayload":{"position":{"x":17943.64382962515,"y":31134.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a50d459-914c-4bfc-91e8-f15c383280eb","savedPayload":{"position":{"x":17936.64382962515,"y":31059.23747069523},"targetPosition":{"x":17931.64382962515,"y":31071.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b2f2b69f-3bef-4edc-9950-5261d9f36382","savedPayload":{"position":{"x":17931.64382962515,"y":31071.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e928d3e-a2c2-4341-aa2f-b753551c9479","savedPayload":{"position":{"x":19504.72140465123,"y":30740.600980501622},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bibox","config":"{ \n\"codeName\": \"bibox\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"13c1f22c-9a35-4d3f-b000-c96984fd6a2b","savedPayload":{"position":{"x":17995.64382962515,"y":31047.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3c6df49d-70c3-468a-bdd8-6768ce6d3a9d","savedPayload":{"position":{"x":17916.64382962515,"y":31018.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a54ef39-8fba-4a5f-ac24-5f27e763e28f","savedPayload":{"position":{"x":18050.64382962515,"y":31174.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"08df1f45-dab0-463a-8758-359973f2620d","savedPayload":{"position":{"x":17899.64382962515,"y":31242.23747069523},"targetPosition":{"x":17959.64382962515,"y":31180.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"105b52c2-90ad-4fa1-b690-d8fab14209b4","savedPayload":{"position":{"x":17959.64382962515,"y":31180.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"68c1ef42-1b7b-4cc6-981f-80b20dabcd89","savedPayload":{"position":{"x":17956.64382962515,"y":31128.23747069523},"targetPosition":{"x":17907.64382962515,"y":31057.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc35e5d0-ea61-42b6-979a-859f19c5ac6c","savedPayload":{"position":{"x":17907.64382962515,"y":31057.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e5f9ee4d-77a3-48ae-b354-b2f6a97d5e47","savedPayload":{"position":{"x":19585.208424334218,"y":30842.603544479174},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BigONE","config":"{ \n\"codeName\": \"bigone\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"3f289513-c1c8-457c-b65a-8cf62b5f5eb5","savedPayload":{"position":{"x":17778.64382962515,"y":31071.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b365e73-1cee-496a-921f-121cb628a130","savedPayload":{"position":{"x":17798.64382962515,"y":31121.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"447a4f6f-cfa0-443e-9339-d7c1153ada31","savedPayload":{"position":{"x":17921.64382962515,"y":31046.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d234c53-c121-471e-bce1-a258c13cd148","savedPayload":{"position":{"x":17848.64382962515,"y":31175.23747069523},"targetPosition":{"x":17944.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"816e1b6a-d790-4abd-9ae1-e203fa737af2","savedPayload":{"position":{"x":17944.64382962515,"y":31086.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"561a57f7-8c22-4e50-840d-d983ed6bb864","savedPayload":{"position":{"x":17891.64382962515,"y":31102.23747069523},"targetPosition":{"x":17813.64382962515,"y":31064.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e243bd5d-ade7-46c8-876b-6ad8c6eb5e0a","savedPayload":{"position":{"x":17813.64382962515,"y":31064.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fb9ee540-bf12-4dda-bf87-cb6b58fce649","savedPayload":{"position":{"x":19654.195208565325,"y":30952.710342620318},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance Jersey","config":"{ \n\"codeName\": \"binanceje\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0b979ea9-7a2d-4744-9517-2dfa632dfafc","savedPayload":{"position":{"x":17852.64382962515,"y":30989.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b9a4497d-20f1-4c61-9a79-444e0fe0ddf4","savedPayload":{"position":{"x":17924.64382962515,"y":30952.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1b24d8a4-ec70-4501-838c-7633f6f7288e","savedPayload":{"position":{"x":17882.64382962515,"y":31051.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"627472e3-638f-4d68-a917-d0844d6a227b","savedPayload":{"position":{"x":17991.64382962515,"y":31190.23747069523},"targetPosition":{"x":17986.64382962515,"y":31110.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"b8ce75fb-93c9-4ca2-9b2b-9f8ed8af34f3","savedPayload":{"position":{"x":17986.64382962515,"y":31110.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08b226e4-14ee-4ad3-8d96-efe77cc38489","savedPayload":{"position":{"x":17942.64382962515,"y":31066.23747069523},"targetPosition":{"x":17949.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2771eb11-bc72-4273-9e1b-9ac5410c6354","savedPayload":{"position":{"x":17949.64382962515,"y":31009.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2782350a-84a2-40ec-87c6-3c8043376a18","savedPayload":{"position":{"x":19710.872950374665,"y":31069.630473388454},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance US","config":"{ \n\"codeName\": \"binanceus\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"817ee1cf-b44c-4458-a9c4-a05a17ea0510","savedPayload":{"position":{"x":17943.64382962515,"y":30999.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c6694e9e-74dc-4c2e-9151-90f1d6631b45","savedPayload":{"position":{"x":17937.64382962515,"y":30989.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"00144904-5363-49eb-b445-8c8283d92b0d","savedPayload":{"position":{"x":17838.64382962515,"y":31193.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e71aa3c-03d4-4dbd-bc50-43b30f59e655","savedPayload":{"position":{"x":17783.64382962515,"y":31148.23747069523},"targetPosition":{"x":17703.64382962515,"y":31182.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a4d0df32-c600-4421-b893-2a05f0442ed6","savedPayload":{"position":{"x":17703.64382962515,"y":31182.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7a39543a-00e1-452b-8aba-36c2b240f9fc","savedPayload":{"position":{"x":17781.64382962515,"y":31156.23747069523},"targetPosition":{"x":17799.64382962515,"y":31119.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2543c4e5-8233-4348-b6dc-e47aed1ff381","savedPayload":{"position":{"x":17799.64382962515,"y":31119.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0b2b67d2-853b-470e-8b13-925956ad5621","savedPayload":{"position":{"x":19754.577155060477,"y":31191.993155151424},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitbank","config":"{ \n\"codeName\": \"bitbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eb6b6842-9bf7-450e-baa3-7a87541a1cf6","savedPayload":{"position":{"x":17955.64382962515,"y":31107.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6353ff56-759f-457d-81f3-fdb8ae5b3e83","savedPayload":{"position":{"x":17942.64382962515,"y":31183.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a2b297c7-f33b-48b9-98fa-d339c7b0ff67","savedPayload":{"position":{"x":17999.64382962515,"y":31016.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce6c354-b294-4062-b763-421e5edb69de","savedPayload":{"position":{"x":17883.64382962515,"y":31186.23747069523},"targetPosition":{"x":17845.64382962515,"y":31202.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"547dbf6c-a292-46c0-a628-62856858121e","savedPayload":{"position":{"x":17845.64382962515,"y":31202.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"097055b3-37e5-4100-a24b-91e404fe49a6","savedPayload":{"position":{"x":17945.64382962515,"y":31116.23747069523},"targetPosition":{"x":17897.64382962515,"y":31142.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51aed4ce-0303-431e-a15f-e6f133f7a2cf","savedPayload":{"position":{"x":17897.64382962515,"y":31142.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c9a96a7-ed12-4b3e-bb51-306a8da131f5","savedPayload":{"position":{"x":19784.79543078195,"y":31318.363797342816},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitBay","config":"{ \n\"codeName\": \"bitbay\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83b4e523-72a7-41ce-9363-fe0c799dcac1","savedPayload":{"position":{"x":17861.64382962515,"y":30965.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"966698f7-8a28-42d7-bb80-f7cd0601e44f","savedPayload":{"position":{"x":17823.64382962515,"y":31026.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"554829eb-3d40-4b95-a1cd-9de943763e2c","savedPayload":{"position":{"x":17914.64382962515,"y":30924.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2f534989-7ca7-4c3d-b14a-3b1071543c8c","savedPayload":{"position":{"x":17845.64382962515,"y":30853.23747069523},"targetPosition":{"x":17832.64382962515,"y":30821.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2f6b76b4-51d4-434f-8aa1-ed86b0e26bd2","savedPayload":{"position":{"x":17832.64382962515,"y":30821.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cbcc3ab6-9758-4273-99d2-9d05fdd392b5","savedPayload":{"position":{"x":17876.64382962515,"y":30921.23747069523},"targetPosition":{"x":17805.64382962515,"y":31015.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dada6c12-7c41-4ab8-9922-908233829f58","savedPayload":{"position":{"x":17805.64382962515,"y":31015.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8778eee5-97a2-4f9d-bd25-cd5a64ec6663","savedPayload":{"position":{"x":19801.173495885087,"y":31447.26081972472},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"33508b53-2769-4f3d-8c98-9fa37e5cbf5b","savedPayload":{"position":{"x":17888.64382962515,"y":31043.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4d4ad5a1-81a7-4f92-83db-99f57ce261bb","savedPayload":{"position":{"x":17975.64382962515,"y":30868.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"29d52baf-645c-4d8f-9631-ebd391b4c815","savedPayload":{"position":{"x":18034.64382962515,"y":31066.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d615c33d-c6cf-4572-ac32-8e9ddeb5bb52","savedPayload":{"position":{"x":18023.64382962515,"y":30916.23747069523},"targetPosition":{"x":18106.64382962515,"y":30982.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"0c189040-6318-483c-b6d7-982370a3298d","savedPayload":{"position":{"x":18106.64382962515,"y":30982.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd60de4a-d17c-4ba7-936a-cbf2305fe3bb","savedPayload":{"position":{"x":18037.64382962515,"y":31012.23747069523},"targetPosition":{"x":18039.64382962515,"y":30964.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d247f4f5-6f16-4a59-a4a5-6d1554b43562","savedPayload":{"position":{"x":18039.64382962515,"y":30964.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c076027-683d-4778-8a6a-e60984980fdf","savedPayload":{"position":{"x":19803.51933253116,"y":31577.173022561386},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8fc7f955-5c81-446c-bbeb-205988bf1fc0","savedPayload":{"position":{"x":17830.64382962515,"y":31051.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d5ba38e9-3282-4634-b922-16532c71f426","savedPayload":{"position":{"x":17819.64382962515,"y":31118.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1cebbed5-28f7-4ccd-afce-9e7634d90fb6","savedPayload":{"position":{"x":17892.64382962515,"y":30997.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d109aa9-c80c-4a64-96f0-1d8fda0a70a4","savedPayload":{"position":{"x":17888.64382962515,"y":30805.23747069523},"targetPosition":{"x":17942.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5459ab1e-a1ce-4dae-ae72-61c1f7f37ce0","savedPayload":{"position":{"x":17942.64382962515,"y":30905.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a4615f7a-000d-4ff9-b5ac-109bc9a3a849","savedPayload":{"position":{"x":17855.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e10d303e-ea21-4625-bae1-c32ad7a44e8a","savedPayload":{"position":{"x":17919.64382962515,"y":31043.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f3114102-a73c-4086-9594-5888ef1ab4ec","savedPayload":{"position":{"x":19791.80543793031,"y":31706.577304054405},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitforex","config":"{ \n\"codeName\": \"bitforex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"698e5e38-ad73-4cb6-b7f6-2b69913faff9","savedPayload":{"position":{"x":17897.64382962515,"y":30956.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"f0142bd4-1b63-4d12-a4b7-e150d0da197f","savedPayload":{"position":{"x":18020.64382962515,"y":31021.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"7164fb28-405b-461a-a7d4-59d438ecf1ce","savedPayload":{"position":{"x":17821.64382962515,"y":30984.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ce8a00c9-f090-4ec2-84ed-c6661f8bf7b0","savedPayload":{"position":{"x":17825.64382962515,"y":30965.23747069523},"targetPosition":{"x":17818.64382962515,"y":30913.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"579cd74b-98f6-4000-990b-25ae1456c94b","savedPayload":{"position":{"x":17818.64382962515,"y":30913.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dbac6eef-25d2-4cda-86a6-59ce8a9a26bc","savedPayload":{"position":{"x":17901.64382962515,"y":30907.23747069523},"targetPosition":{"x":17909.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1da9dd3-22ec-4536-bb5a-4d0bb8a56b81","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"499a5a3b-7871-4c95-9b2e-d58d4d9e2392","savedPayload":{"position":{"x":19766.169146786622,"y":31833.956517318737},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitkk","config":"{ \n\"codeName\": \"bitkk\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"efbb916c-780b-447f-a4c2-df68570d4ee1","savedPayload":{"position":{"x":17931.64382962515,"y":30937.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0d829516-81d9-46a5-9861-7d94cc89455d","savedPayload":{"position":{"x":17951.64382962515,"y":30912.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fc174aa3-c485-4b9b-ba19-444b0189ccb1","savedPayload":{"position":{"x":17788.64382962515,"y":30980.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15921d8a-4b45-481c-9165-79969ed3fd27","savedPayload":{"position":{"x":17796.64382962515,"y":30936.23747069523},"targetPosition":{"x":17891.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"927d5c8a-85df-48bb-b097-c36abb76ca0e","savedPayload":{"position":{"x":17891.64382962515,"y":30922.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"43d218c2-e633-47d5-8dd8-60bc7f7c0b9e","savedPayload":{"position":{"x":17834.64382962515,"y":30983.23747069523},"targetPosition":{"x":17853.64382962515,"y":30925.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2d310d61-cbc7-4306-af02-be3888939545","savedPayload":{"position":{"x":17853.64382962515,"y":30925.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ded39740-3c93-4fda-bb9c-6ac75d2109f4","savedPayload":{"position":{"x":19726.911021174266,"y":31957.817257542785},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMart","config":"{ \n\"codeName\": \"bitmart\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"10374855-6b4a-460b-9c95-70072ac00315","savedPayload":{"position":{"x":17907.64382962515,"y":30901.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3aded60c-4061-48ff-ad33-212c965b5c43","savedPayload":{"position":{"x":17829.64382962515,"y":30925.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1789a3ca-d948-497d-8d1b-1eefd25d16a3","savedPayload":{"position":{"x":17886.64382962515,"y":30937.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"038170bc-0ca7-4a92-8219-61b7bc8431b0","savedPayload":{"position":{"x":17893.64382962515,"y":31034.23747069523},"targetPosition":{"x":17835.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"55f79ede-ef02-405f-92bd-11902ab3cc7a","savedPayload":{"position":{"x":17835.64382962515,"y":30962.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8185c660-4af3-4a62-bfa9-8922861101b5","savedPayload":{"position":{"x":17895.64382962515,"y":30988.23747069523},"targetPosition":{"x":17819.64382962515,"y":30909.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"546d48c3-df31-495c-b3b4-cb35109c5542","savedPayload":{"position":{"x":17819.64382962515,"y":30909.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c7ed52a7-895b-46f1-a745-35954d8bcfc6","savedPayload":{"position":{"x":19674.491326722004,"y":32076.707370794375},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMax","config":"{ \n\"codeName\": \"bitmax\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8a042d0d-7a7a-4a76-889e-42d8642404f4","savedPayload":{"position":{"x":17944.64382962515,"y":31046.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0c4fcc48-51e6-4ff2-925f-405cda6d1122","savedPayload":{"position":{"x":17898.64382962515,"y":31024.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ef9d5381-d9e3-47f5-9069-6fc14eda0fa3","savedPayload":{"position":{"x":17879.64382962515,"y":31096.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c66fe606-9705-45b0-a196-7ea3efb0221e","savedPayload":{"position":{"x":17982.64382962515,"y":31053.23747069523},"targetPosition":{"x":17943.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"80a5f68e-776a-44de-8797-d2eb806c306e","savedPayload":{"position":{"x":17943.64382962515,"y":31083.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"011fcf1c-1c94-4c36-a246-d6c400aa39dc","savedPayload":{"position":{"x":17977.64382962515,"y":31041.23747069523},"targetPosition":{"x":17942.64382962515,"y":31103.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4a87b8c5-e009-427f-afb7-21afe5594b59","savedPayload":{"position":{"x":17942.64382962515,"y":31103.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fc6a9048-ab8c-48f9-91ae-6c95c28714b0","savedPayload":{"position":{"x":19609.524636419505,"y":32189.2329791979},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMEX","config":"{ \n\"codeName\": \"bitmex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f7636e2b-354a-4217-894b-5e26eddc0c2a","savedPayload":{"position":{"x":17894.64382962515,"y":30934.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6eb2ddd1-6d06-456c-b4e0-7df56ba182e6","savedPayload":{"position":{"x":17823.64382962515,"y":30834.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4a4b8fe-d923-4eb0-a066-171b83d1540d","savedPayload":{"position":{"x":17902.64382962515,"y":31064.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"918ed585-ce46-4d51-a07a-9beee51f70eb","savedPayload":{"position":{"x":17711.64382962515,"y":31036.23747069523},"targetPosition":{"x":17805.64382962515,"y":31078.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9efef4d8-5be3-4d17-a645-6edffd9535cf","savedPayload":{"position":{"x":17805.64382962515,"y":31078.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ad31a6e-f27b-45c3-9996-a41fb39aa154","savedPayload":{"position":{"x":17815.64382962515,"y":30988.23747069523},"targetPosition":{"x":17844.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"82887393-cb1c-4b01-8581-4b3dabc86584","savedPayload":{"position":{"x":17844.64382962515,"y":30896.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e2f1dd0-ebf1-4485-83d8-7723a9e3e714","savedPayload":{"position":{"x":19532.77262531095,"y":32294.07482287797},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bittrex","config":"{ \n\"codeName\": \"bittrex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"88d4ef94-f030-42df-9115-69d9611317b1","savedPayload":{"position":{"x":17839.64382962515,"y":31009.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"7fe8234d-9a39-4b28-bf98-43b4fdb57ee5","savedPayload":{"position":{"x":17878.64382962515,"y":31045.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5ba7fe13-1e0f-403a-8f4b-8e3968d2e5e2","savedPayload":{"position":{"x":17841.64382962515,"y":30890.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e926fbb8-d2ac-4e3d-aa59-a0a828d202fd","savedPayload":{"position":{"x":17707.64382962515,"y":30983.23747069523},"targetPosition":{"x":17782.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"4fbe41e1-cb15-4bc2-a3de-681c5b22cc97","savedPayload":{"position":{"x":17782.64382962515,"y":31052.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ab9fe180-1c07-44de-a0a1-863761ac52d6","savedPayload":{"position":{"x":17742.64382962515,"y":30961.23747069523},"targetPosition":{"x":17796.64382962515,"y":30903.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"584f29ca-9b3c-4b7f-a2b0-aab4180ecefd","savedPayload":{"position":{"x":17796.64382962515,"y":30903.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f598f002-8fc5-491f-888e-07d017ea83c6","savedPayload":{"position":{"x":19445.135140551556,"y":32390.003727075255},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bit-Z","config":"{ \n\"codeName\": \"bitz\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0a22e02b-7d2e-4955-9cfc-ed7d95f0c9a0","savedPayload":{"position":{"x":17751.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"298b45af-b73d-4cd5-848a-97de7b857569","savedPayload":{"position":{"x":17944.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6ede807b-b1ab-42b5-bfd7-3b12a942447e","savedPayload":{"position":{"x":17871.64382962515,"y":31049.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"dc172858-3241-4487-950a-e5cae03ac376","savedPayload":{"position":{"x":17751.64382962515,"y":31081.23747069523},"targetPosition":{"x":17753.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"19c07cee-1fdf-4e02-ac9f-d110b64ee033","savedPayload":{"position":{"x":17753.64382962515,"y":31028.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4ef5048-ac4c-410e-bd6d-3338e33ab108","savedPayload":{"position":{"x":17772.64382962515,"y":31098.23747069523},"targetPosition":{"x":17788.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e7e96c41-c839-4eec-9bcf-1c60d60fa3f5","savedPayload":{"position":{"x":17788.64382962515,"y":31134.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6cc10926-fe41-43be-887b-fa8aba1c7377","savedPayload":{"position":{"x":19347.639651522415,"y":32475.89501309667},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC-Alpha","config":"{ \n\"codeName\": \"btcalpha\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"263e3b9c-8fdd-4376-b53b-87f32d0f5898","savedPayload":{"position":{"x":17904.64382962515,"y":30922.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"804603e1-3e0f-4219-a9b7-ee27810d4f07","savedPayload":{"position":{"x":17829.64382962515,"y":30977.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"83b25fff-e448-483f-9bee-cb85fa592c6e","savedPayload":{"position":{"x":17734.64382962515,"y":30862.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"efcfa3ca-0f82-4eb7-9b04-ed5eb4e1c3cf","savedPayload":{"position":{"x":17799.64382962515,"y":30864.23747069523},"targetPosition":{"x":17837.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9ca8d728-ee11-4905-9a3a-5ca4ed50f3df","savedPayload":{"position":{"x":17837.64382962515,"y":30919.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2cfde277-afa6-4ad3-bb5b-8a32b89e2037","savedPayload":{"position":{"x":17829.64382962515,"y":30960.23747069523},"targetPosition":{"x":17903.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"297a0ea2-f6d7-47fd-9fb7-0d99d00a87d8","savedPayload":{"position":{"x":17903.64382962515,"y":30969.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30e5485f-213b-435b-a670-07b76cfe5cae","savedPayload":{"position":{"x":19241.429203691412,"y":32550.741684144767},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC Markets","config":"{ \n\"codeName\": \"btcmarkets\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"fcb3b880-0852-4d93-8714-67373f9dca16","savedPayload":{"position":{"x":17911.64382962515,"y":31036.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"953d8eff-0b2e-4b07-8635-393fddae0c9d","savedPayload":{"position":{"x":18025.64382962515,"y":31127.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c08873f6-9120-4764-8b06-c8110468b423","savedPayload":{"position":{"x":17935.64382962515,"y":30927.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"beaa2557-4976-4e53-8a24-7ea00fc3afd5","savedPayload":{"position":{"x":18054.64382962515,"y":30851.23747069523},"targetPosition":{"x":18125.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"445158a2-91b4-4ad8-8380-036cbba6ad7e","savedPayload":{"position":{"x":18125.64382962515,"y":30951.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd00e08c-a26d-4b11-93a3-b0e8f35bec4b","savedPayload":{"position":{"x":18027.64382962515,"y":31003.23747069523},"targetPosition":{"x":18016.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35cb55c1-ceb3-4093-98af-8a1c2411fe0f","savedPayload":{"position":{"x":18016.64382962515,"y":31075.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ac2fda42-95ca-404a-8dd2-72bff0ff5a0f","savedPayload":{"position":{"x":19127.749017450227,"y":32613.66623143447},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Buda","config":"{ \n\"codeName\": \"buda\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"27f3573d-e1f0-473f-9bfd-f9198e7240a0","savedPayload":{"position":{"x":17945.64382962515,"y":30937.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ddc0981-4e45-42f3-ae11-f5b136b2bc3d","savedPayload":{"position":{"x":17783.64382962515,"y":31008.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a325d59-e6a6-4f76-a311-5e67c5f5a8a2","savedPayload":{"position":{"x":17980.64382962515,"y":30843.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"fb985ab9-7759-4780-a052-8ee9be0b712a","savedPayload":{"position":{"x":17907.64382962515,"y":30968.23747069523},"targetPosition":{"x":17958.64382962515,"y":30884.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fdf7665a-2974-467b-9280-4077a888733f","savedPayload":{"position":{"x":17958.64382962515,"y":30884.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a3105cfc-f80e-4bcb-b399-6ea9c0f7edf0","savedPayload":{"position":{"x":17956.64382962515,"y":30936.23747069523},"targetPosition":{"x":17872.64382962515,"y":30941.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5d69a76f-e7bc-4538-950e-2e2353eccea3","savedPayload":{"position":{"x":17872.64382962515,"y":30941.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"90fe3d74-662e-4fac-aff3-f41990b61ccf","savedPayload":{"position":{"x":19007.931889043757,"y":32663.930922181273},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BW","config":"{ \n\"codeName\": \"bw\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"457616cd-25f9-4ad3-8c18-6331859dd42e","savedPayload":{"position":{"x":17890.64382962515,"y":31014.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8c1f9aa2-4253-4129-a533-e515644ddb38","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"24314a5b-85ca-4036-adc6-618120496f1d","savedPayload":{"position":{"x":17773.64382962515,"y":30945.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"f7c593f6-bd7a-41f7-a5e7-b2e1ea9a528f","savedPayload":{"position":{"x":17820.64382962515,"y":30885.23747069523},"targetPosition":{"x":17828.64382962515,"y":30802.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"60dfc799-f863-4895-8d17-568aa2303ef5","savedPayload":{"position":{"x":17828.64382962515,"y":30802.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"223e466d-d750-4e38-91ce-8a59c15242ba","savedPayload":{"position":{"x":17860.64382962515,"y":30865.23747069523},"targetPosition":{"x":17818.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cfff1310-5220-4978-9553-8514be141d14","savedPayload":{"position":{"x":17818.64382962515,"y":30919.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d72db90c-d572-4cbb-8348-e3cc485d8e86","savedPayload":{"position":{"x":18883.38256475272,"y":32700.94644884361},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bybit","config":"{ \n\"codeName\": \"bybit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"18fdf7c8-03c4-4f81-a88e-de97589765e1","savedPayload":{"position":{"x":17803.64382962515,"y":31059.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a62b2603-ac6f-4b6e-9541-86daf32027b1","savedPayload":{"position":{"x":17847.64382962515,"y":31104.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"66ecff99-7102-4f4a-9ce8-4d55fb22dfbc","savedPayload":{"position":{"x":17851.64382962515,"y":31165.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"625e127c-0ebb-4f57-af9f-9dfb57b262a1","savedPayload":{"position":{"x":18004.64382962515,"y":31091.23747069523},"targetPosition":{"x":18008.64382962515,"y":31027.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"8174bb53-66b8-4575-b206-74f9b6352a80","savedPayload":{"position":{"x":18008.64382962515,"y":31027.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ee16357e-abde-4800-b089-f43f4b696a35","savedPayload":{"position":{"x":17916.64382962515,"y":31077.23747069523},"targetPosition":{"x":17944.64382962515,"y":31101.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9e9473b-aff9-43c8-a6be-5cd30330bee2","savedPayload":{"position":{"x":17944.64382962515,"y":31101.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"516c3831-456b-4d17-b0a0-6a363ba2ddb2","savedPayload":{"position":{"x":18755.561271527895,"y":32724.27883821499},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ByteTrade","config":"{ \n\"codeName\": \"bytetrade\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e7a1e531-5a9e-466e-b98d-672de39eed3a","savedPayload":{"position":{"x":18088.64382962515,"y":31024.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"edafaba7-fd82-4d9f-b3f7-5d1c01c56599","savedPayload":{"position":{"x":17941.64382962515,"y":30943.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"50fa78b8-3aea-4e43-adcf-1e31820bf97f","savedPayload":{"position":{"x":17886.64382962515,"y":31008.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"b9c39b04-e86e-4ebb-9aba-39c375f2960c","savedPayload":{"position":{"x":17865.64382962515,"y":30941.23747069523},"targetPosition":{"x":17953.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5965d9cc-1d68-47a7-b838-e6dd81da6ea9","savedPayload":{"position":{"x":17953.64382962515,"y":31023.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f51a08be-ee3f-4d3b-a75e-d783d63092a7","savedPayload":{"position":{"x":17858.64382962515,"y":30967.23747069523},"targetPosition":{"x":17898.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d395efd0-691b-4a68-a7f1-9bce95b2f687","savedPayload":{"position":{"x":17898.64382962515,"y":30965.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45e2306f-03e8-4d17-a73a-72c11dd14e78","savedPayload":{"position":{"x":18625.966597164217,"y":32733.65453936303},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CEX.IO","config":"{ \n\"codeName\": \"cex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9de19f0a-5824-4e42-af00-484b64421dc3","savedPayload":{"position":{"x":17890.64382962515,"y":31049.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"39db01bc-0cea-422f-b9e9-7d84e3f5446d","savedPayload":{"position":{"x":17918.64382962515,"y":31105.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"93833d3c-42c9-4e4d-bf0f-5b80a90d10c2","savedPayload":{"position":{"x":17978.64382962515,"y":31126.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"42863a52-30f4-4322-9c20-99a45d6dc3d6","savedPayload":{"position":{"x":17884.64382962515,"y":31149.23747069523},"targetPosition":{"x":17895.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fcff471d-29be-4176-8ff8-12088361f9fc","savedPayload":{"position":{"x":17895.64382962515,"y":31148.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f7975a18-b3ab-49bc-ae45-eb02c99aff8c","savedPayload":{"position":{"x":17953.64382962515,"y":31167.23747069523},"targetPosition":{"x":17881.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ec432123-43fe-4171-8c41-b797d3161edb","savedPayload":{"position":{"x":17881.64382962515,"y":31096.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"346bfc30-e32a-453a-bdc6-0ead48221581","savedPayload":{"position":{"x":18496.117920729066,"y":32728.96363076407},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Prime","config":"{ \n\"codeName\": \"coinbaseprime\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"73cabd8d-9308-49ed-b544-44f785ee7d38","savedPayload":{"position":{"x":17867.64382962515,"y":30962.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"31bd1360-f0c5-4d70-876a-b152f7cedfd7","savedPayload":{"position":{"x":17960.64382962515,"y":30864.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b75fcfa-fe75-48a8-9d28-2ff19c58c041","savedPayload":{"position":{"x":17792.64382962515,"y":30841.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c900b14a-c728-45af-90f8-29b3e5f29f46","savedPayload":{"position":{"x":17801.64382962515,"y":30986.23747069523},"targetPosition":{"x":17793.64382962515,"y":31006.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"eaf72df3-b66f-4b83-83f9-91e22ec0c300","savedPayload":{"position":{"x":17793.64382962515,"y":31006.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9da95675-2071-41bf-b5ac-4f2af602994f","savedPayload":{"position":{"x":17809.64382962515,"y":30934.23747069523},"targetPosition":{"x":17862.64382962515,"y":31021.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4fc49ad4-57cc-43b0-b14b-15f26af994aa","savedPayload":{"position":{"x":17862.64382962515,"y":31021.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a8281db-6ace-4186-8cfb-cd249c4af48b","savedPayload":{"position":{"x":18367.537599231866,"y":32710.26110903248},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Pro","config":"{ \n\"codeName\": \"coinbasepro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a29d6e1a-a94e-4b6b-8741-e9af6e4762f4","savedPayload":{"position":{"x":17788.64382962515,"y":30897.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"10cd9004-0088-4bc0-8fe6-b937f1bb311b","savedPayload":{"position":{"x":17865.64382962515,"y":30918.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"004397e6-ae73-46a6-9ed7-b4ba1930f77b","savedPayload":{"position":{"x":17945.64382962515,"y":30899.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"a81a7021-2228-4386-a773-9ac80c9e723a","savedPayload":{"position":{"x":17738.64382962515,"y":30761.23747069523},"targetPosition":{"x":17792.64382962515,"y":30789.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"482d82f2-364e-483c-b51a-a3fbe8a91577","savedPayload":{"position":{"x":17792.64382962515,"y":30789.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d823ad8e-0452-40f0-bad9-c2cb3ad29a21","savedPayload":{"position":{"x":17850.64382962515,"y":30889.23747069523},"targetPosition":{"x":17772.64382962515,"y":30894.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c965322-fdd2-4e67-aaf3-dfc4b9dffc59","savedPayload":{"position":{"x":17772.64382962515,"y":30894.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4242da4b-a67e-44d8-8a19-b1c2f078c94c","savedPayload":{"position":{"x":18241.733119380056,"y":32677.766244135688},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CoinEx","config":"{ \n\"codeName\": \"coinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"af78f796-60e5-4794-87b8-772c7bc74be1","savedPayload":{"position":{"x":18043.64382962515,"y":31069.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d351e6d9-36eb-4d0e-aca5-94429bbb23a3","savedPayload":{"position":{"x":18094.64382962515,"y":31090.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"438f74c6-15e0-4553-af2a-febd5290c269","savedPayload":{"position":{"x":17908.64382962515,"y":31088.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"bfb22430-77c7-41a7-8083-771f7d7f3634","savedPayload":{"position":{"x":17927.64382962515,"y":30953.23747069523},"targetPosition":{"x":17947.64382962515,"y":30990.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"51daaa12-1c60-4cef-96d8-a445b4b32296","savedPayload":{"position":{"x":17947.64382962515,"y":30990.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"726b8c33-9873-4be1-b9ef-d6b4483f23b1","savedPayload":{"position":{"x":17986.64382962515,"y":31075.23747069523},"targetPosition":{"x":17919.64382962515,"y":31016.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"30469514-b983-4f6f-9d74-6d6ceef25eb6","savedPayload":{"position":{"x":17919.64382962515,"y":31016.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"62ad0961-6bdf-4a4a-a340-610816742d0a","savedPayload":{"position":{"x":18120.179423675774,"y":32631.860008654276},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"COSS","config":"{ \n\"codeName\": \"coss\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e6315232-c6b1-4e25-aade-7bc7ba9ba6ac","savedPayload":{"position":{"x":17787.64382962515,"y":30984.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b1e8451f-09a2-47b0-add3-cf9c35c487bb","savedPayload":{"position":{"x":17829.64382962515,"y":31095.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d1c9b795-0434-4ce1-9cb7-cc61fac7396d","savedPayload":{"position":{"x":17950.64382962515,"y":31149.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"22be64f9-4b08-4ac3-ae89-6726743a7d5a","savedPayload":{"position":{"x":17890.64382962515,"y":31165.23747069523},"targetPosition":{"x":17956.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7462500-ba74-4bf3-ad81-35fa232bede3","savedPayload":{"position":{"x":17956.64382962515,"y":31156.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cd41ced-981a-4075-af43-3a0497eb0fcb","savedPayload":{"position":{"x":17882.64382962515,"y":31131.23747069523},"targetPosition":{"x":17856.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5937899-c6ee-4d7a-b259-1ee23d721f60","savedPayload":{"position":{"x":17856.64382962515,"y":31148.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"695029de-7f61-45bb-aa4c-c6d51e6369ed","savedPayload":{"position":{"x":18004.301618063546,"y":32573.08061122679},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CREX24","config":"{ \n\"codeName\": \"crex24\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c5e12f4a-fb26-40d3-9e70-751b55018e74","savedPayload":{"position":{"x":17910.64382962515,"y":31024.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"00cb629e-bad4-4c6e-8abb-499cad3992f4","savedPayload":{"position":{"x":17938.64382962515,"y":31054.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"4909d182-e0d5-49a9-8ad2-a553c8aaaf88","savedPayload":{"position":{"x":17912.64382962515,"y":31301.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"075eb2a2-299b-4a0f-9f6d-76c385521dc4","savedPayload":{"position":{"x":17800.64382962515,"y":31332.23747069523},"targetPosition":{"x":17883.64382962515,"y":31289.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"e062ef2e-b252-4a66-8f58-d9aa8031f526","savedPayload":{"position":{"x":17883.64382962515,"y":31289.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e75be98-f874-486d-b749-536e364934dc","savedPayload":{"position":{"x":17920.64382962515,"y":31249.23747069523},"targetPosition":{"x":17845.64382962515,"y":31164.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"052f73cd-7ed7-4537-8b01-840b5b892fea","savedPayload":{"position":{"x":17845.64382962515,"y":31164.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07a7ec7c-273e-4675-8d8d-21ab8514a1f0","savedPayload":{"position":{"x":17895.458263866083,"y":32502.117186545547},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Deribit","config":"{ \n\"codeName\": \"deribit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f0b2354b-89e3-4eca-b051-664a3b8283f6","savedPayload":{"position":{"x":17862.64382962515,"y":30844.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ae1f824-82a8-4796-a2d5-3d2358d8089f","savedPayload":{"position":{"x":17912.64382962515,"y":31024.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2013fe7a-d52c-4c9d-ba53-d281d014a8fc","savedPayload":{"position":{"x":17873.64382962515,"y":30926.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706d5778-ed21-49bd-9277-1840ec52708d","savedPayload":{"position":{"x":17729.64382962515,"y":31033.23747069523},"targetPosition":{"x":17813.64382962515,"y":31053.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2e76bc02-6e10-4f14-9bf1-a11dc4268466","savedPayload":{"position":{"x":17813.64382962515,"y":31053.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"89a3ccc7-20ab-4e2d-929b-52d9286179b7","savedPayload":{"position":{"x":17855.64382962515,"y":30967.23747069523},"targetPosition":{"x":17818.64382962515,"y":30920.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5c8219e3-4509-4b8b-941b-b88ac2c12237","savedPayload":{"position":{"x":17818.64382962515,"y":30920.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"21971815-4248-45df-8e04-20b9a5a83f06","savedPayload":{"position":{"x":17794.92544989493,"y":32419.801715882462},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DigiFinex","config":"{ \n\"codeName\": \"digifinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e583c93e-9a44-4e0d-acb7-56d7e00a555a","savedPayload":{"position":{"x":17954.64382962515,"y":30992.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8917c7c0-b420-4d4f-a35a-c0fc6870f0de","savedPayload":{"position":{"x":18052.64382962515,"y":30972.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a00b5bb0-5ab9-42e2-91fe-b450c7eb66d2","savedPayload":{"position":{"x":18220.64382962515,"y":31090.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2aafc473-339b-4d23-9b74-06fa7574c293","savedPayload":{"position":{"x":18144.64382962515,"y":31123.23747069523},"targetPosition":{"x":18203.64382962515,"y":31084.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"99e9e136-1ac7-4400-a100-0a2d37f0882d","savedPayload":{"position":{"x":18203.64382962515,"y":31084.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7cee21b-ddcb-4fd7-b610-43aabb2d1766","savedPayload":{"position":{"x":18123.64382962515,"y":30998.23747069523},"targetPosition":{"x":18032.64382962515,"y":30976.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e84a25-4368-4ad6-939f-5a16cece62cc","savedPayload":{"position":{"x":18032.64382962515,"y":30976.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7d56781-0c51-4ec1-95fd-bf4dc8c00352","savedPayload":{"position":{"x":17703.88183147586,"y":32327.0992728693},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DSX","config":"{ \n\"codeName\": \"dsx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"d672ab56-cd32-4ff5-8fc5-3733262aeccb","savedPayload":{"position":{"x":17916.64382962515,"y":31106.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3731a7b5-ba9d-483e-bb41-abf3ae0232c6","savedPayload":{"position":{"x":17878.64382962515,"y":30946.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9ef7e0ac-dc27-4b47-a06e-0cb7e80ee3d7","savedPayload":{"position":{"x":18124.64382962515,"y":31136.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"77491a3c-3db7-446f-aa67-9b5a1a3be7b3","savedPayload":{"position":{"x":18109.64382962515,"y":31081.23747069523},"targetPosition":{"x":18188.64382962515,"y":31137.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"bd1bd0b7-4943-4aeb-bf90-d3192dcabbb1","savedPayload":{"position":{"x":18188.64382962515,"y":31137.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45747fef-f30e-4fae-b02d-5768ae7dbe68","savedPayload":{"position":{"x":18093.64382962515,"y":31072.23747069523},"targetPosition":{"x":18018.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2e1c9b-428c-4bb0-9e75-ceb8c9043d4b","savedPayload":{"position":{"x":18018.64382962515,"y":31005.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4c543abc-7372-4701-bc58-107578d45c25","savedPayload":{"position":{"x":17623.394811792878,"y":32225.09670889175},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoin","config":"{ \n\"codeName\": \"fcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a97d578c-6d7f-403c-8294-18aacf14abd8","savedPayload":{"position":{"x":17893.64382962515,"y":30953.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"442c3834-482e-4928-9255-8ac859ae012e","savedPayload":{"position":{"x":17905.64382962515,"y":30896.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"79754959-1219-4c4d-be63-22766158beb5","savedPayload":{"position":{"x":18106.64382962515,"y":30976.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1c3ae096-5024-43c3-abca-24498254e363","savedPayload":{"position":{"x":18112.64382962515,"y":30919.23747069523},"targetPosition":{"x":18126.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"59db5bfd-e413-48a7-af63-237ad56adc82","savedPayload":{"position":{"x":18126.64382962515,"y":30965.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"833c4e54-08f4-48ec-b90a-2767eb55f244","savedPayload":{"position":{"x":18069.64382962515,"y":31056.23747069523},"targetPosition":{"x":17996.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8cf17b3-0ea7-4a14-8c76-f655344b58a3","savedPayload":{"position":{"x":17996.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ddedcbd-07cb-4928-91b3-348f47118391","savedPayload":{"position":{"x":17554.408027561767,"y":32114.989910750606},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoinJP","config":"{ \n\"codeName\": \"fcoinjp\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"4a8a9810-6df6-451a-ab26-22bd7e7be85a","savedPayload":{"position":{"x":17930.64382962515,"y":31129.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"138ab40c-18ca-4a11-9709-0baa040873e6","savedPayload":{"position":{"x":18007.64382962515,"y":31122.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"258cdf92-8ed0-4133-ae2a-b9f086f56a13","savedPayload":{"position":{"x":17897.64382962515,"y":30887.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"537e8f0c-05ca-4403-bc96-da6c2f4678ae","savedPayload":{"position":{"x":17825.64382962515,"y":30842.23747069523},"targetPosition":{"x":17836.64382962515,"y":30926.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"62519e63-8f4e-4b72-a341-0a6eea01ac3f","savedPayload":{"position":{"x":17836.64382962515,"y":30926.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4974cc1-f594-436b-8aa4-aff2733b8e3c","savedPayload":{"position":{"x":17903.64382962515,"y":30977.23747069523},"targetPosition":{"x":17873.64382962515,"y":31061.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d84b404f-75e2-4eb5-b34a-b45af8a57ca7","savedPayload":{"position":{"x":17873.64382962515,"y":31061.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"982627ea-df84-4ba9-9219-612fbe1e4276","savedPayload":{"position":{"x":17497.730285752426,"y":31998.069779982467},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FTX","config":"{ \n\"codeName\": \"ftx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"20c0a4f5-bdb9-46cc-af7e-2111964551e3","savedPayload":{"position":{"x":17886.64382962515,"y":30940.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"75c99a0b-d3c9-4073-9283-d33e539c36bb","savedPayload":{"position":{"x":17992.64382962515,"y":31061.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2e037470-549e-4aa8-bbe7-95cdeaef88ea","savedPayload":{"position":{"x":17964.64382962515,"y":31027.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3b6f5b7b-9c61-4b71-b29a-ca1bc027e55f","savedPayload":{"position":{"x":17817.64382962515,"y":30943.23747069523},"targetPosition":{"x":17890.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a84010f0-04b5-4eab-a3a6-a5944b80a373","savedPayload":{"position":{"x":17890.64382962515,"y":30978.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cdc51a3-6136-4e03-9e2c-26a752140d17","savedPayload":{"position":{"x":17970.64382962515,"y":31008.23747069523},"targetPosition":{"x":18010.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55258a2b-3199-4070-beed-d34a8496870c","savedPayload":{"position":{"x":18010.64382962515,"y":30986.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0c0bcf5c-2774-423e-9fcf-c512b38dd06d","savedPayload":{"position":{"x":17454.026081066615,"y":31875.707098219504},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gate.io","config":"{ \n\"codeName\": \"gateio\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"71a15089-9d40-4726-9a41-37d406064164","savedPayload":{"position":{"x":17930.64382962515,"y":30993.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c025e976-c2c6-49de-81ec-48e2f737b412","savedPayload":{"position":{"x":17925.64382962515,"y":31053.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"876f964a-e12d-4438-87fb-a84be22f86d1","savedPayload":{"position":{"x":17914.64382962515,"y":30833.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0c5d34c4-467f-4e98-bd39-1b2d9afb834e","savedPayload":{"position":{"x":17852.64382962515,"y":30831.23747069523},"targetPosition":{"x":17870.64382962515,"y":30847.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"89316d8c-893a-46ae-b147-948b4b8a5292","savedPayload":{"position":{"x":17870.64382962515,"y":30847.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a2a5de53-bd45-4904-8bae-0cf5ed66d2af","savedPayload":{"position":{"x":17827.64382962515,"y":30882.23747069523},"targetPosition":{"x":17800.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f6f4072d-8cf6-4e47-8b4e-a21cd553348a","savedPayload":{"position":{"x":17800.64382962515,"y":30936.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c4028289-4cdb-4da0-90e6-5f93328b8e03","savedPayload":{"position":{"x":17423.807805345143,"y":31749.336456028108},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gemini","config":"{ \n\"codeName\": \"gemini\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9eb15872-8d15-4086-9920-46909eb5f9e7","savedPayload":{"position":{"x":17951.64382962515,"y":30901.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a84dcf06-57c6-47d7-97a0-9f03f3af8b34","savedPayload":{"position":{"x":18045.64382962515,"y":30891.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5da1ba65-3839-4664-8105-2ccb11652767","savedPayload":{"position":{"x":18028.64382962515,"y":31112.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"337fe5e2-b9fd-40eb-9f42-44fc5057d981","savedPayload":{"position":{"x":17957.64382962515,"y":31129.23747069523},"targetPosition":{"x":17875.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"17a3f4a3-8914-4995-afb0-7e8115791b17","savedPayload":{"position":{"x":17875.64382962515,"y":31086.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"32e4a3f1-40d8-421f-9634-7ab339858286","savedPayload":{"position":{"x":17941.64382962515,"y":31044.23747069523},"targetPosition":{"x":17877.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"365f6865-e707-415d-a168-b67c66ca9553","savedPayload":{"position":{"x":17877.64382962515,"y":30977.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"58bf8247-baef-4ea6-a483-7ed8f0ba5043","savedPayload":{"position":{"x":17407.429740242005,"y":31620.439433646203},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1632c520-fa79-442f-b33b-430cb1356de6","savedPayload":{"position":{"x":17809.64382962515,"y":31086.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"576d1666-dbd3-4914-9fe2-fa05bdf72eea","savedPayload":{"position":{"x":17840.64382962515,"y":31148.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"41317aae-08ce-48cf-a47b-c2d2cc3920ec","savedPayload":{"position":{"x":18096.64382962515,"y":30975.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"23d7e4ba-8432-4214-bd94-0db5046e39cd","savedPayload":{"position":{"x":18039.64382962515,"y":31075.23747069523},"targetPosition":{"x":17981.64382962515,"y":31126.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ab200349-5ba5-44d2-ad5c-fa826303cfcd","savedPayload":{"position":{"x":17981.64382962515,"y":31126.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a5f24785-5b2c-429b-a2e4-07063e2de904","savedPayload":{"position":{"x":18026.64382962515,"y":31066.23747069523},"targetPosition":{"x":17972.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13f275ca-06a6-4a72-8b4d-a9c079b9cef4","savedPayload":{"position":{"x":17972.64382962515,"y":31093.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8384fa0b-854c-4c23-846e-a5da0179a738","savedPayload":{"position":{"x":17405.083903595932,"y":31490.527230809537},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9a29cb9e-ee8d-4315-8532-eef82224b84a","savedPayload":{"position":{"x":17838.64382962515,"y":30922.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"badd79e7-1e21-4dc3-bfa7-8dfb4a6c6267","savedPayload":{"position":{"x":17920.64382962515,"y":30944.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ffdda0b7-af50-4010-84da-2bc0d562af2b","savedPayload":{"position":{"x":17887.64382962515,"y":30982.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"24816eed-adf7-453e-9b38-42ea4758dbaa","savedPayload":{"position":{"x":18021.64382962515,"y":30979.23747069523},"targetPosition":{"x":17931.64382962515,"y":30923.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"1dd16858-5641-4454-88a3-e5d7446e12a3","savedPayload":{"position":{"x":17931.64382962515,"y":30923.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457d75ed-ad21-4ee5-b36b-88cdc444008e","savedPayload":{"position":{"x":17836.64382962515,"y":31023.23747069523},"targetPosition":{"x":17808.64382962515,"y":31039.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b29ded7e-e2d5-4c7f-89af-b0816c32c743","savedPayload":{"position":{"x":17808.64382962515,"y":31039.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"09c634c2-5aba-49c5-80bc-4fd4175e7f0c","savedPayload":{"position":{"x":17416.79779819678,"y":31361.12294931652},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Pro","config":"{ \n\"codeName\": \"huobipro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"86caa38c-5bdf-40e4-b27b-8d8b64319575","savedPayload":{"position":{"x":18071.64382962515,"y":31171.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"001225af-c715-4566-9502-f8f0ac1c4531","savedPayload":{"position":{"x":18040.64382962515,"y":31019.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4bf5ccb-b529-4500-a192-d9c3a0613389","savedPayload":{"position":{"x":18129.64382962515,"y":31073.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e58c6d1-cfa7-4dc7-a322-e9356596ea1e","savedPayload":{"position":{"x":17976.64382962515,"y":31132.23747069523},"targetPosition":{"x":17953.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae04ddf4-ae3e-4bdc-9393-41acc38ef818","savedPayload":{"position":{"x":17953.64382962515,"y":31093.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2428e8ef-6a09-48fa-8ae4-ebfb28420be8","savedPayload":{"position":{"x":18033.64382962515,"y":31090.23747069523},"targetPosition":{"x":18085.64382962515,"y":31157.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55c71c8b-f21f-4d16-ae93-e29362c39bf5","savedPayload":{"position":{"x":18085.64382962515,"y":31157.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"967c3914-a76d-4389-9c7e-9c258ae683bd","savedPayload":{"position":{"x":17442.43408934047,"y":31233.743736052187},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Russia","config":"{ \n\"codeName\": \"huobiru\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9b7b32d6-a42e-44bb-8065-5aa32b1e844b","savedPayload":{"position":{"x":17980.64382962515,"y":31034.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8d74201c-33cd-4e12-8920-b08d0ef97572","savedPayload":{"position":{"x":17992.64382962515,"y":31105.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6e289d7-074b-4837-96e3-687988886fcc","savedPayload":{"position":{"x":18078.64382962515,"y":30954.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d72f81ba-6b41-414d-9cf0-d5f9c0c25403","savedPayload":{"position":{"x":18026.64382962515,"y":31021.23747069523},"targetPosition":{"x":18083.64382962515,"y":31117.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5354f66c-6e73-4fe5-80ca-2c25b761ef51","savedPayload":{"position":{"x":18083.64382962515,"y":31117.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81f5adbb-054c-47f2-b019-52585f5d7417","savedPayload":{"position":{"x":18008.64382962515,"y":31029.23747069523},"targetPosition":{"x":18018.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ecd8645b-4bb6-4641-a20f-cee51bf33f1a","savedPayload":{"position":{"x":18018.64382962515,"y":31009.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6f97bb5c-8d85-43ee-86a1-33e22cdfbb5e","savedPayload":{"position":{"x":17481.692214952825,"y":31109.882995828142},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KKEX","config":"{ \n\"codeName\": \"kkex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"daa4e07a-1cd8-4d92-8004-2eabfaa62f77","savedPayload":{"position":{"x":17924.64382962515,"y":31038.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"cb64951f-d984-4f51-a751-166a316084f3","savedPayload":{"position":{"x":17945.64382962515,"y":31156.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6915bf12-9271-47e2-8b49-924ae9f5c65f","savedPayload":{"position":{"x":17958.64382962515,"y":31297.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ff53381f-c6dd-4d17-a477-11396f60663f","savedPayload":{"position":{"x":17805.64382962515,"y":31141.23747069523},"targetPosition":{"x":17861.64382962515,"y":31223.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae05bfc4-6ac8-408c-a90b-263830b2a71e","savedPayload":{"position":{"x":17861.64382962515,"y":31223.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61c85f1a-a2a6-45c9-bb1e-3c76110f5d1e","savedPayload":{"position":{"x":17875.64382962515,"y":31252.23747069523},"targetPosition":{"x":17911.64382962515,"y":31154.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fafb114-37d2-4d04-9c42-83d04ff62fc7","savedPayload":{"position":{"x":17911.64382962515,"y":31154.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"16ae95ce-796f-4f2b-942c-f98dcbf9cf4b","savedPayload":{"position":{"x":17534.11190940509,"y":30990.99288257655},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Kraken","config":"{ \n\"codeName\": \"kraken\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"747af60f-c8b9-4377-aa6c-172d4137ea23","savedPayload":{"position":{"x":17854.64382962515,"y":31008.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c75f7d97-9dc2-4d3e-89eb-f8a3d5f16368","savedPayload":{"position":{"x":17916.64382962515,"y":30872.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0093e946-03f4-4aec-942d-c76aed12ab1a","savedPayload":{"position":{"x":17780.64382962515,"y":31091.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2a4235ac-e5ea-4484-bccd-f06c8a7275ec","savedPayload":{"position":{"x":17930.64382962515,"y":30869.23747069523},"targetPosition":{"x":17883.64382962515,"y":30953.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"737dec0a-23ab-4044-94ba-95c8bc50c0eb","savedPayload":{"position":{"x":17883.64382962515,"y":30953.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457b045e-dae5-4f53-a8b7-cab4757e5286","savedPayload":{"position":{"x":17836.64382962515,"y":31011.23747069523},"targetPosition":{"x":17926.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6eff12db-8e7c-402a-9e06-ae2618f506a0","savedPayload":{"position":{"x":17926.64382962515,"y":31005.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"644efe9c-597a-4ddf-9e28-b33fb3b62d3e","savedPayload":{"position":{"x":17599.078599707587,"y":30878.467274173025},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KuCoin","config":"{ \n\"codeName\": \"kucoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"01ca3037-4ed3-499e-ad6b-e14ca1d4a51f","savedPayload":{"position":{"x":17919.64382962515,"y":30949.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b3c4ce0-98b1-4d46-bd02-6cf44c3dd686","savedPayload":{"position":{"x":17998.64382962515,"y":30978.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d6c7c0ef-670d-4ed6-9246-6eb7d6bfc359","savedPayload":{"position":{"x":17927.64382962515,"y":30962.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e8c2c454-b246-4f63-b51b-74d9cbb01ac2","savedPayload":{"position":{"x":17927.64382962515,"y":30924.23747069523},"targetPosition":{"x":17912.64382962515,"y":30869.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"d2bb2603-3b52-443c-8923-86fefafc0b14","savedPayload":{"position":{"x":17912.64382962515,"y":30869.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa83b0b9-1039-4406-907c-f809a5af40f5","savedPayload":{"position":{"x":17953.64382962515,"y":30954.23747069523},"targetPosition":{"x":17966.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"471161d3-201e-40c6-b433-49643cf7e43b","savedPayload":{"position":{"x":17966.64382962515,"y":30962.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d79bc720-68e1-4771-a66a-bcffa30639d3","savedPayload":{"position":{"x":17675.830610816145,"y":30773.625430492953},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"LBank","config":"{ \n\"codeName\": \"lbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"def3f9d0-f09e-4e09-8b6d-a4c322a4384b","savedPayload":{"position":{"x":17877.64382962515,"y":31024.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"53eac3c1-96d6-4cb1-b54d-f3f174eaf733","savedPayload":{"position":{"x":17764.64382962515,"y":31036.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6c00704-1357-4426-910e-8134d6f87017","savedPayload":{"position":{"x":18030.64382962515,"y":31212.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"13990604-2192-4be1-b21b-53cf2bafc002","savedPayload":{"position":{"x":17893.64382962515,"y":31189.23747069523},"targetPosition":{"x":17964.64382962515,"y":31122.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ed2c483e-d412-406d-b6f3-cfb1112a3a05","savedPayload":{"position":{"x":17964.64382962515,"y":31122.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6033b63c-c7fe-4a5d-8cf6-82128e2cfb41","savedPayload":{"position":{"x":17951.64382962515,"y":31172.23747069523},"targetPosition":{"x":17891.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20ece5c4-dbfa-4f4a-a9ee-8c8d9c38943b","savedPayload":{"position":{"x":17891.64382962515,"y":31096.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cb2558d6-dab0-4f35-b83f-7cfc161b3d4f","savedPayload":{"position":{"x":17763.468095575536,"y":30677.69652629567},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Mercado Bitcoin","config":"{ \n\"codeName\": \"mercado\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83ab2c39-e844-496f-bebb-7b8607428902","savedPayload":{"position":{"x":17849.64382962515,"y":31081.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d69e722e-c71a-462a-8bbd-d3482d0eab21","savedPayload":{"position":{"x":17771.64382962515,"y":30887.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"18438709-83cf-49a3-96b8-888ab5adbcc5","savedPayload":{"position":{"x":17937.64382962515,"y":31080.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"6b9d4ed4-af81-462a-aace-fac0afd4687a","savedPayload":{"position":{"x":17787.64382962515,"y":30841.23747069523},"targetPosition":{"x":17873.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"802a4c53-8617-4257-95a5-45bfaa60ad0e","savedPayload":{"position":{"x":17873.64382962515,"y":30935.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"87936a4a-aac5-4aca-8f3e-2051611932c4","savedPayload":{"position":{"x":17866.64382962515,"y":31013.23747069523},"targetPosition":{"x":17829.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"48f3a793-bb97-447b-8f1a-1d6965219747","savedPayload":{"position":{"x":17829.64382962515,"y":30919.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5002072e-145c-4aeb-a611-3e0e4c60ee5d","savedPayload":{"position":{"x":17860.963584604677,"y":30591.805240274254},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKCoin","config":"{ \n\"codeName\": \"okcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1e4dd5c8-0545-4698-8695-c985880243a3","savedPayload":{"position":{"x":17921.64382962515,"y":31043.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0e188cae-9764-4963-a78b-e5d7ef272522","savedPayload":{"position":{"x":18005.64382962515,"y":30891.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6d82bfd7-b4e1-4f93-a0f8-18f62cee944e","savedPayload":{"position":{"x":18047.64382962515,"y":30877.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d815409c-1dd4-4e89-b844-5b96104509b4","savedPayload":{"position":{"x":17958.64382962515,"y":30988.23747069523},"targetPosition":{"x":17945.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"238b9d2c-e2c0-4a77-945e-8e28604c0a2d","savedPayload":{"position":{"x":17945.64382962515,"y":30961.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8416c29a-5d73-4b2a-9463-511f400deafb","savedPayload":{"position":{"x":17963.64382962515,"y":30898.23747069523},"targetPosition":{"x":18047.64382962515,"y":30885.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04abf32b-084e-4784-aa84-8c5612d3b7b9","savedPayload":{"position":{"x":18047.64382962515,"y":30885.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1f860b4b-2893-4a51-8649-19c47d494a37","savedPayload":{"position":{"x":17967.17403243568,"y":30516.958569226157},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKEX","config":"{ \n\"codeName\": \"okex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"7f618566-3d10-4c3c-90b2-7541a5146eeb","savedPayload":{"position":{"x":17770.64382962515,"y":31094.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"21205576-5d12-452c-814f-eb56182162ae","savedPayload":{"position":{"x":17794.64382962515,"y":31173.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"46456247-ae9c-41ea-8395-a5e4a78007d4","savedPayload":{"position":{"x":17724.64382962515,"y":31147.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706bf601-eaad-48bd-b0a7-8dad59066171","savedPayload":{"position":{"x":17715.64382962515,"y":31182.23747069523},"targetPosition":{"x":17706.64382962515,"y":31162.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"f9c7071c-2e5b-4c90-b482-dfc7ee001244","savedPayload":{"position":{"x":17706.64382962515,"y":31162.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e87e1e10-3404-48b9-8629-5df92ffa1979","savedPayload":{"position":{"x":17795.64382962515,"y":31083.23747069523},"targetPosition":{"x":17789.64382962515,"y":31181.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e8fd6a-6b23-4d65-8b8e-d966f845c07f","savedPayload":{"position":{"x":17789.64382962515,"y":31181.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"aa0edec0-8b27-4f94-abce-1e437ce5aba6","savedPayload":{"position":{"x":18080.854218676865,"y":30454.034021936455},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"RightBTC","config":"{ \n\"codeName\": \"rightbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ade372e9-5070-4fa9-843e-57732c4106c3","savedPayload":{"position":{"x":17999.64382962515,"y":30964.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b63d440e-4501-475c-b8a6-2b9a144e32a1","savedPayload":{"position":{"x":17984.64382962515,"y":30901.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"81d77477-4f2e-43c0-b284-dde54f91c37f","savedPayload":{"position":{"x":17864.64382962515,"y":31036.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce3cc34-1ba4-4155-96a5-c946b1bcc5ab","savedPayload":{"position":{"x":17819.64382962515,"y":31127.23747069523},"targetPosition":{"x":17810.64382962515,"y":31080.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7df4af7-37c1-403d-ada1-b6a527821bdd","savedPayload":{"position":{"x":17810.64382962515,"y":31080.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6de19501-5ce7-4944-b9dd-25b149acbb38","savedPayload":{"position":{"x":17861.64382962515,"y":31043.23747069523},"targetPosition":{"x":17946.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa87ace4-a976-401c-93f9-24a498261742","savedPayload":{"position":{"x":17946.64382962515,"y":30988.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c20cd9e1-52a0-4d17-b90c-e9d5b63315ce","savedPayload":{"position":{"x":18200.67134708334,"y":30403.76933118965},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"STEX","config":"{ \n\"codeName\": \"stex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f1d65161-4922-4a1e-ac98-df1a842347a7","savedPayload":{"position":{"x":17872.64382962515,"y":31001.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c313b2c6-6154-4a9a-b826-fd99cc500cd9","savedPayload":{"position":{"x":17888.64382962515,"y":31186.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d0a1259b-1c37-4d39-836e-3c434c3b3687","savedPayload":{"position":{"x":17778.64382962515,"y":31076.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"4a1e5627-459c-4dec-be13-c20d4a9ea58f","savedPayload":{"position":{"x":17841.64382962515,"y":31179.23747069523},"targetPosition":{"x":17795.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"6981eb0d-0f0e-4f8e-9781-4a03e22e93fd","savedPayload":{"position":{"x":17795.64382962515,"y":31105.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7704478a-9717-43a8-bd2e-88daa6f84bd0","savedPayload":{"position":{"x":17858.64382962515,"y":31091.23747069523},"targetPosition":{"x":17941.64382962515,"y":31173.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"262aad86-f430-49ea-a636-e8bd816a9636","savedPayload":{"position":{"x":17941.64382962515,"y":31173.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0ea23137-3c65-4de1-9772-6ac1b65196e8","savedPayload":{"position":{"x":18325.220671374373,"y":30366.753804527314},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TideBit","config":"{ \n\"codeName\": \"tidebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c92318bd-8b2d-489b-b8e8-cf30fb63286e","savedPayload":{"position":{"x":17981.64382962515,"y":31021.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"83bca3ec-fc1c-435c-b5fe-b1cf92463fd1","savedPayload":{"position":{"x":18051.64382962515,"y":31072.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2f3ee9b2-cd41-458c-84da-edac3155028a","savedPayload":{"position":{"x":18075.64382962515,"y":31059.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"009ae4b6-adbc-4900-9fc0-f18936eeed9b","savedPayload":{"position":{"x":18030.64382962515,"y":31058.23747069523},"targetPosition":{"x":18009.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"3ee88180-fe10-41df-8251-b1ed0a526e7a","savedPayload":{"position":{"x":18009.64382962515,"y":31028.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bb88e6e8-a99a-4c4e-9ca5-ffed49aa8b54","savedPayload":{"position":{"x":17987.64382962515,"y":31047.23747069523},"targetPosition":{"x":17925.64382962515,"y":31135.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13a4a95e-4333-4455-9f7c-90bc839d174a","savedPayload":{"position":{"x":17925.64382962515,"y":31135.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5563c310-701a-4c1e-8155-87c08c927ce3","savedPayload":{"position":{"x":18453.041964599197,"y":30343.421415155935},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TimeX","config":"{ \n\"codeName\": \"timex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"5c004b5f-eec4-414f-8d01-d9b3fddeee9e","savedPayload":{"position":{"x":17892.64382962515,"y":30973.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"59a33add-d0e9-4ae1-8a01-f1e0ed09cb61","savedPayload":{"position":{"x":17911.64382962515,"y":30878.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a4189ba1-d1d4-4ff8-91dd-a8696ca493e3","savedPayload":{"position":{"x":17953.64382962515,"y":30880.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3d34eb9d-e7cb-42fe-8785-c327b2bbc529","savedPayload":{"position":{"x":17839.64382962515,"y":30875.23747069523},"targetPosition":{"x":17930.64382962515,"y":30877.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"773de01f-0999-4a59-91f0-642148cd58d0","savedPayload":{"position":{"x":17930.64382962515,"y":30877.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fe33a596-4f98-4843-a5b1-26e7e0fcf1c8","savedPayload":{"position":{"x":17924.64382962515,"y":30871.23747069523},"targetPosition":{"x":18018.64382962515,"y":30832.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d078b9a3-cdc6-458e-a511-dc4f5bef38ba","savedPayload":{"position":{"x":18018.64382962515,"y":30832.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"27d69fa7-b561-4986-8c0d-1b374e7e1bf1","savedPayload":{"position":{"x":18582.63663896287,"y":30334.045714007894},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TOP.Q","config":"{ \n\"codeName\": \"topq\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eafef6a3-eed2-470e-a15c-aa4c10001cd2","savedPayload":{"position":{"x":17818.64382962515,"y":31115.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"2d5eb813-ceb6-40cd-8682-7205596bb8b5","savedPayload":{"position":{"x":17759.64382962515,"y":31188.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"61f7832c-c1f0-40bc-b1f2-ba947c58309d","savedPayload":{"position":{"x":17741.64382962515,"y":31288.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"63b973da-30a7-467a-b954-c57537aab18d","savedPayload":{"position":{"x":17677.64382962515,"y":31206.23747069523},"targetPosition":{"x":17756.64382962515,"y":31146.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"722dcf44-de3f-4d1a-8655-80561e1e4d55","savedPayload":{"position":{"x":17756.64382962515,"y":31146.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45d5e04a-4a53-4f32-b4c0-d882456cb263","savedPayload":{"position":{"x":17788.64382962515,"y":31228.23747069523},"targetPosition":{"x":17806.64382962515,"y":31163.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c66e8dfc-4847-4180-b82c-36458f9b405d","savedPayload":{"position":{"x":17806.64382962515,"y":31163.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8fdf13d8-e8d2-4ef4-8b34-f492a25d753a","savedPayload":{"position":{"x":18712.485315398026,"y":30338.736622606855},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Upbit","config":"{ \n\"codeName\": \"upbit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f456fec2-cee6-4f0c-b865-1188088879c9","savedPayload":{"position":{"x":17919.64382962515,"y":30973.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"947c1ca0-bff9-4372-b153-40054e29b705","savedPayload":{"position":{"x":17921.64382962515,"y":31014.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"34ffbe12-5a26-446a-8bf6-7395c0370ba2","savedPayload":{"position":{"x":17874.64382962515,"y":30900.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"8f00f19d-74a8-48d8-b951-79f35e87b110","savedPayload":{"position":{"x":17906.64382962515,"y":30902.23747069523},"targetPosition":{"x":17896.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"64e1bede-aabf-4831-83a6-fe1cea435613","savedPayload":{"position":{"x":17896.64382962515,"y":30896.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c80b956-f2ca-4a6f-a661-f17546288d3e","savedPayload":{"position":{"x":17945.64382962515,"y":30971.23747069523},"targetPosition":{"x":18027.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e3686b02-4ecc-4dcb-a311-b7ef542a3c37","savedPayload":{"position":{"x":18027.64382962515,"y":31048.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"74e57ecd-3394-42b4-b2c4-6f216f7e41db","savedPayload":{"position":{"x":18841.065636895226,"y":30357.439144338445},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"WhiteBit","config":"{ \n\"codeName\": \"whitebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c16eae45-a568-4b2e-b064-4431bdf34c24","savedPayload":{"position":{"x":17767.64382962515,"y":30899.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"dfdf793f-4ba6-4215-a325-323c0f223553","savedPayload":{"position":{"x":17920.64382962515,"y":31004.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fd749d13-dbac-493f-9af6-c521eddf909f","savedPayload":{"position":{"x":17815.64382962515,"y":30973.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"79f7d2d0-77a5-4f38-ac68-fd11f18e5e6b","savedPayload":{"position":{"x":17761.64382962515,"y":31182.23747069523},"targetPosition":{"x":17680.64382962515,"y":31153.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fd0506f4-58b7-431e-bc9d-69bce63c3379","savedPayload":{"position":{"x":17680.64382962515,"y":31153.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"47e8a4b1-9a6c-4555-a881-f7524183d72e","savedPayload":{"position":{"x":17720.64382962515,"y":31056.23747069523},"targetPosition":{"x":17817.64382962515,"y":31010.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7fa08b91-55ab-477d-a097-88ea7f25fb76","savedPayload":{"position":{"x":17817.64382962515,"y":31010.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"467ece1e-d1d0-4a11-ae7a-d0e22cd4eba5","savedPayload":{"position":{"x":18966.87011674703,"y":30389.934009235236},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ZB","config":"{ \n\"codeName\": \"zb\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"db206cbd-a587-4e8e-acbe-6581ad3b5cc4","savedPayload":{"position":{"x":17855.64382962515,"y":31027.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"1dd658c5-7755-44b7-85f0-9bcd787762a0","savedPayload":{"position":{"x":17789.64382962515,"y":31044.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0de82bbe-7909-4b65-b304-f59b41f618ae","savedPayload":{"position":{"x":17830.64382962515,"y":30696.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c89819d0-8880-4b36-a9b3-0b284d266e3b","savedPayload":{"position":{"x":17891.64382962515,"y":30748.23747069523},"targetPosition":{"x":17865.64382962515,"y":30772.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"7a55f503-17fa-45c4-880b-1a9a11a0a555","savedPayload":{"position":{"x":17865.64382962515,"y":30772.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e640fca2-8bab-45ff-9a47-8e7b9650c277","savedPayload":{"position":{"x":17846.64382962515,"y":30793.23747069523},"targetPosition":{"x":17909.64382962515,"y":30886.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"421a99cd-3d9a-46a5-8654-08d6336e75be","savedPayload":{"position":{"x":17909.64382962515,"y":30886.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07df07e8-39a8-4fbc-a0c8-150f20b6ac59","savedPayload":{"position":{"x":19088.423812451314,"y":30435.840244716648},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51f64e29-e3ab-4683-a5de-f397fbf94260","savedPayload":{"position":{"x":18604.301618063546,"y":31533.850126685462},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Testing Queue","project":"Superalgos","exchanges":[],"id":"895ce4b1-4890-4216-89ba-a012181d2546","savedPayload":{"position":{"x":18754.301618063546,"y":30754.427263279467},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"signalsProviders":[],"id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d","savedPayload":{"position":{"x":18904.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Charting Space","name":"New Charting Space","project":"Superalgos","viewport":{"type":"Viewport","name":"New Viewport","config":"{\"zoom\":\"0.00\"}","project":"Superalgos","id":"01713f1d-91b8-44f9-9c5d-a0c12fd09037","savedPayload":{"position":{"x":19200.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"frame":{"position":{"x":255,"y":432.6875}}}},"dashboards":[{"type":"Dashboard","name":"Testing Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2020-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-10-14T23:59:59.999Z\"\n}","project":"Superalgos","id":"691e2b6e-6b13-4a94-a8cd-15bbad6e8d2b","savedPayload":{"position":{"x":18783.434665834,"y":25740.977644897117},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 3744.3087,\n \"maxValue\": 12592.68\n}","project":"Superalgos","id":"d1c91955-e558-4ffe-a349-895405dd7475","savedPayload":{"position":{"x":18678.45195066214,"y":25792.749390696466},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\"value\":\"24-hs\"}","project":"Superalgos","id":"69064a57-bfa3-4a7a-a597-55887057befb","savedPayload":{"position":{"x":18561.64837946537,"y":25800.405101221888},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Indicators","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"550e7d96-2b55-4cb5-91d5-6fbceb32cbb8","savedPayload":{"position":{"x":18300.806237131383,"y":26622.58688508041},"targetPosition":{"x":18300.806237131383,"y":26322.58688508041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"b9c30464-73e5-4f5c-b422-9ba1a02b78ab"}}}],"layerFolders":[],"id":"a9026e9d-f9c2-4509-9a75-862421b5c70b","savedPayload":{"position":{"x":18300.806237131383,"y":26322.58688508041},"targetPosition":{"x":18300.806237131383,"y":26022.58688508041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Resistances and Supports","project":"Superalgos","layers":[{"type":"Layer","name":"Resistances","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"ea7115b6-1324-43dc-8fa2-90c12c2c2c48","savedPayload":{"position":{"x":17890.99861599605,"y":26432.394506215744},"targetPosition":{"x":18040.99861599605,"y":26172.58688508041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Resistances","id":"a1669770-1bbe-40f7-acb3-ded15272935f"}}},{"type":"Layer","name":"Supports","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"2d16e7e1-8676-4041-a1b1-0172e023558a","savedPayload":{"position":{"x":17740.99861599605,"y":26172.58688508041},"targetPosition":{"x":18040.99861599605,"y":26172.58688508041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Supports","id":"64899503-b618-493a-ba94-bfad2051a611"}}}],"layerFolders":[],"id":"b7fed612-b218-4378-bb3f-6c90fb947449","savedPayload":{"position":{"x":18040.99861599605,"y":26172.58688508041},"targetPosition":{"x":18300.806237131383,"y":26022.58688508041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa6b9a8f-d5f4-4f60-b3fa-bdf957806bfb","savedPayload":{"position":{"x":18300.806237131383,"y":26022.58688508041},"targetPosition":{"x":18450.806237131383,"y":25762.779263945078},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"d37d8bf1-be3b-49ac-805b-0ddb3944e6a0"}}},"id":"6a4b0ce0-7e88-4fe3-b9b5-2116d81b2da0","savedPayload":{"position":{"x":18450.806237131383,"y":25762.779263945078},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fbbb590b-c94d-4625-94e2-bc4bfa2ab6f9","savedPayload":{"position":{"x":17369.615314676776,"y":27668.841562264155},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"a01b42b0-ea87-47ab-b0e9-52d4b10cb631"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ab219d3d-1f44-4448-b5f9-f9f6ace6caea","savedPayload":{"position":{"x":17303.16747388602,"y":27829.462657681564},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"559a20a7-6697-4245-9d6c-ad7c0e31ff84"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7dd6f9d6-3840-4a95-a9c9-9445a1335868","savedPayload":{"position":{"x":17185.846232243683,"y":27957.548994948615},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"24fab05f-ff78-4cca-af61-d4d0bb2f2960"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"371bfe04-1b2d-4d60-ae70-03a2f7522466","savedPayload":{"position":{"x":17031.824555577114,"y":28037.77428784454},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"7c580919-08ce-4aff-9e84-888fdf07caec"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f1dea1ef-69f3-4b64-8586-ec43aa281cde","savedPayload":{"position":{"x":16859.980005705944,"y":28060.516661409252},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"389797d4-8456-4258-9adf-246a6ba69016"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eca94344-450b-4dc9-ad80-8e202b6e0517","savedPayload":{"position":{"x":16720.146686869968,"y":28081.644331195483},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"323c7b0b-42b1-4ff0-9d4b-36c2fd605caa"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a4c54659-0b38-4faf-9827-47976eb9cca7","savedPayload":{"position":{"x":16538.534133073324,"y":27928.11277999677},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"63594fc6-3b89-4507-bca8-2d43ef618cbe"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e82d97df-5b25-4967-b2b4-da065c5d3ad9","savedPayload":{"position":{"x":16438.118842172375,"y":27791.656999492337},"targetPosition":{"x":16881.455267522357,"y":27560.81805667489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"73bb3f9e-b112-4e5a-bce9-6d4bec41cc6c"}}}],"layerFolders":[],"id":"851d853d-e2d7-4138-b5fd-563f1f844f64","savedPayload":{"position":{"x":16881.455267522357,"y":27560.81805667489},"targetPosition":{"x":16815.94253388532,"y":27065.434531430084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dc84698a-bce4-4979-9aca-80661b054191","savedPayload":{"position":{"x":16665.05839477738,"y":27965.793638606552},"targetPosition":{"x":16624.806838862034,"y":27527.143951867685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"515f5fd6-d860-44d4-b5d6-a19acd9c5c86"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d3456e5b-0438-4273-a3ce-6b1d60573c33","savedPayload":{"position":{"x":16192.04282322282,"y":27776.28963880755},"targetPosition":{"x":16624.806838862034,"y":27527.143951867685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"556e97e8-eba3-419d-869d-950cc99371da"}}}],"layerFolders":[],"id":"6ad8b449-785f-40cc-afc0-19c68b508c17","savedPayload":{"position":{"x":16624.806838862034,"y":27527.143951867685},"targetPosition":{"x":16815.94253388532,"y":27065.434531430084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"4b8d055f-0c36-40a6-af78-5faf9b34b72c","savedPayload":{"position":{"x":16263.911411221576,"y":27887.017338929047},"targetPosition":{"x":16419.428268555628,"y":27369.65419953046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"d33abc39-702b-4d7a-8435-43d90e0f2c3a"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ac24a200-397f-4d7c-9916-581328c74f22","savedPayload":{"position":{"x":15930.683136179856,"y":27446.741891494232},"targetPosition":{"x":16419.428268555628,"y":27369.65419953046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"d681fd5f-64af-4f39-9f6d-a767bef7692f"}}}],"layerFolders":[],"id":"acf27818-08f1-4c0d-9cc9-30c38ba892fb","savedPayload":{"position":{"x":16419.428268555628,"y":27369.65419953046},"targetPosition":{"x":16815.94253388532,"y":27065.434531430084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b9eeeeb3-43db-4d4f-9f28-f42e947494f9","savedPayload":{"position":{"x":16081.8024827204,"y":27569.844459509128},"targetPosition":{"x":16320.487948353533,"y":27130.48564334826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"b0961496-1af9-48cd-bbeb-ac5973192e78"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"eda9462a-9688-42cf-ae97-b3dfd02c718c","savedPayload":{"position":{"x":15861.804663880679,"y":27334.104337992987},"targetPosition":{"x":16320.487948353533,"y":27130.48564334826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"0c9cf78d-ce6e-4318-811d-e748ca72845d"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1481d280-6112-4d0d-8a48-3fe4e65efc9d","savedPayload":{"position":{"x":15794.751172927,"y":27059.819168542694},"targetPosition":{"x":16320.487948353533,"y":27130.48564334826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"e298787f-b7f2-4334-931e-38b9441e43f9"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2f579332-aa55-4e51-bbf4-370614838fd3","savedPayload":{"position":{"x":15983.678465146957,"y":26766.521536690572},"targetPosition":{"x":16320.487948353533,"y":27130.48564334826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"4719b69d-b23e-4037-8c0a-b641fd8ab14c"}}}],"layerFolders":[],"id":"5b4e1c43-9fb7-439f-9ca9-e600bd41718d","savedPayload":{"position":{"x":16320.487948353533,"y":27130.48564334826},"targetPosition":{"x":16815.94253388532,"y":27065.434531430084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"be00b86a-5b53-4dbd-ab79-7d135115a05e","savedPayload":{"position":{"x":15981.681254722265,"y":27206.80398470277},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"90834a1b-cc7e-48a9-be5c-0e30380af4bd"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3870b052-156c-4f10-9658-3fe3df4baf10","savedPayload":{"position":{"x":15907.766921038878,"y":26991.828402965275},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"e2112d60-5fc2-4e67-befe-d4fbd6c1de77"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"5fa754c9-ffc3-499c-b566-0031b276cb73","savedPayload":{"position":{"x":15854.003963464067,"y":26791.47046059904},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"e734b6be-ba40-468c-a94f-1153dc85e00c"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"15ec260c-02f5-46e0-853b-6e751175dac7","savedPayload":{"position":{"x":15946.595933594896,"y":26584.386411643816},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"9a973229-4d9d-45af-b5aa-64906a915f6e"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"be57de60-d843-4bc8-bcb8-d8be27ceffbb","savedPayload":{"position":{"x":16112.599521408476,"y":26436.26698301044},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"56517fe9-64da-4404-83f3-005106bc1c0a"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"407c7816-701b-43bf-92d8-cc728af78f0e","savedPayload":{"position":{"x":16326.514663407172,"y":26374.73332350363},"targetPosition":{"x":16354.435022890473,"y":26873.913228534242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"d00c76e7-4be0-4518-9892-a0f6df943951"}}}],"layerFolders":[],"id":"ac1ed18a-243b-4211-bb24-83bbfc20cd0a","savedPayload":{"position":{"x":16354.435022890473,"y":26873.913228534242},"targetPosition":{"x":16815.94253388532,"y":27065.434531430084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"41428787-ca89-4ab9-a5cc-29e66e7c486d","savedPayload":{"position":{"x":16815.94253388532,"y":27065.434531430084},"targetPosition":{"x":17211.887378913278,"y":26761.65357700895},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"153096ea-a48c-4ed5-9f8e-49eafa7a779c","savedPayload":{"position":{"x":17211.887378913278,"y":26761.65357700895},"targetPosition":{"x":17608.087169245202,"y":26457.665815155528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"918bdf6d-3cfe-4c8b-894d-320cc72aef70","savedPayload":{"position":{"x":17608.087169245202,"y":26457.665815155528},"targetPosition":{"x":18004.58716757543,"y":26153.40165163241},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"13a2b4f9-2c05-49b2-b42c-32ffa71ae0b7"}}},"id":"f0cc2b79-bae6-4441-a456-9fda5962a74f","savedPayload":{"position":{"x":18362.80023504401,"y":25685.600071512363},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"49761e84-d6c2-4c25-9604-fb2ddf93e510","savedPayload":{"position":{"x":16908.868785422477,"y":26498.16661359802},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"a0c29c57-0a20-4084-9697-142300f62f9c"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"622a88bb-151c-48ef-bb99-e093498bf002","savedPayload":{"position":{"x":16784.079378960796,"y":26473.24915657477},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"aa0fe882-89a8-4811-8988-c589554afe9d"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fba6a9fb-5e9a-46dd-aa2b-33950f0ec9f1","savedPayload":{"position":{"x":16674.17772780151,"y":26410.629959027327},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"bbc65054-b22b-4cbb-816b-529672e2f498"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4ec0d56a-b497-4d90-9157-094c08930962","savedPayload":{"position":{"x":16589.35068678223,"y":26317.245278540355},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"776a3ece-8255-4e80-b60f-85bb818b561f"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5db72b24-ad72-49dd-8a32-1256fb25d04a","savedPayload":{"position":{"x":16537.989038785094,"y":26202.237839910187},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"7593aaf9-0505-4b58-9920-235340ff2d2f"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cbdfc3db-d5dd-476c-bf02-cf86d8a01300","savedPayload":{"position":{"x":16524.745363533515,"y":26077.08129911308},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"3e2e6105-f41f-42e2-bce5-74ebb3b81cbd"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"105a157c-b33a-40d0-9711-19526b04bfda","savedPayload":{"position":{"x":16551.015550574797,"y":25954.09235409774},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"faab4399-898b-4393-8c27-fa2f3109c60a"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ab8b1fdc-4319-4b37-ae29-333912412215","savedPayload":{"position":{"x":16613.786293229427,"y":25843.789915164496},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"9ff0f035-ca7f-4e65-a82c-186fa7f09157"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"051bd185-3255-41a5-bf62-ea8b27b32ddf","savedPayload":{"position":{"x":16732.783502595135,"y":25787.14617978885},"targetPosition":{"x":16926.50340983706,"y":26097.78127173703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"04210a59-070a-45f1-a2a0-cf50bd4879f7"}}}],"layerFolders":[],"id":"838dab4e-c0bf-47f3-ac6a-8f815e5e666b","savedPayload":{"position":{"x":16926.50340983706,"y":26097.78127173703},"targetPosition":{"x":17312.504725681127,"y":25994.118489364708},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"74e5c728-fd06-4e79-8ec1-32ab2720adf5","savedPayload":{"position":{"x":17312.504725681127,"y":25994.118489364708},"targetPosition":{"x":17728.621526107163,"y":25882.512207770327},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a7bce21-b09a-41e3-b9af-87f1939e9136","savedPayload":{"position":{"x":17435.249075924137,"y":26107.72559811088},"targetPosition":{"x":17918.14324924388,"y":25978.374425566097},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"13a2b4f9-2c05-49b2-b42c-32ffa71ae0b7"}}},"id":"a514d9bb-8862-4c81-b82e-dbde66abeb77","savedPayload":{"position":{"x":18311.02848924466,"y":25580.617356340503},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 0,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"17c8f568-4716-4a19-a607-689b78a83ef9","savedPayload":{"position":{"x":16115.39648009967,"y":25985.505720817862},"targetPosition":{"x":16420.303357177294,"y":25587.954983541822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"73dff61a-7b05-4ca6-b963-99d6c578e9ba"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"86978570-76c1-4780-a91d-4e72e88ef817","savedPayload":{"position":{"x":15957.823183600161,"y":25779.358465524216},"targetPosition":{"x":16420.303357177294,"y":25587.954983541822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"a9c454c8-9075-4dcf-bfe9-ebd0c1658049"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"653e6b00-bda3-4662-a2bd-934212e884d1","savedPayload":{"position":{"x":15579.86442305616,"y":25885.63691973226},"targetPosition":{"x":15924.454225865862,"y":25522.974911703473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"cad1eecc-e897-4086-b42c-fcfd843c04cc"}}},{"type":"Layer","name":"Market Sell Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"2887f930-5d79-42ff-ab1d-7d5cdc6b47da","savedPayload":{"position":{"x":15432.506269267476,"y":25613.627316851438},"targetPosition":{"x":15924.454225865862,"y":25522.974911703473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"fdf22e85-7071-4847-bdba-e3fb43a616ed"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"3040a2f6-0b1c-4ed3-a816-39c916465c9a","savedPayload":{"position":{"x":15473.387997903394,"y":25308.558987165365},"targetPosition":{"x":15924.454225865862,"y":25522.974911703473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"d2b1ab31-d8a1-422b-a717-33ee7df9b07b"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"a59ef70f-534f-410b-99ef-3a700d2ca82a","savedPayload":{"position":{"x":15650.72702979423,"y":25101.764675763054},"targetPosition":{"x":15924.454225865862,"y":25522.974911703473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"3b5a12db-b969-4400-8b9d-afb9b7b81642"}}}],"layerFolders":[],"id":"334a2964-17df-4237-a302-962416655896","savedPayload":{"position":{"x":15924.454225865862,"y":25522.974911703473},"targetPosition":{"x":16420.303357177294,"y":25587.954983541822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"a6b1a2c5-ca70-42b9-932f-2ff00aff2524","savedPayload":{"position":{"x":15544.017678857432,"y":25425.462084851635},"targetPosition":{"x":16023.52653783795,"y":25283.3082730222},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"9fc29be1-9393-4933-95d3-bebddd73c05e"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"663ddaf7-784f-4baa-8f69-3ed0ef5cd685","savedPayload":{"position":{"x":15550.823311983959,"y":25116.30607909466},"targetPosition":{"x":16023.52653783795,"y":25283.3082730222},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"b555388f-db93-4db1-91be-7772550afa70"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9a4be770-082c-4d0f-a747-0b74d792e76f","savedPayload":{"position":{"x":15728.277795953174,"y":24877.547726723427},"targetPosition":{"x":16023.52653783795,"y":25283.3082730222},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"41953904-e48c-4176-bf0f-09d133bc444c"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"efb9d388-a679-49b2-b792-1b8258a489d6","savedPayload":{"position":{"x":16036.125039599678,"y":24790.208940178803},"targetPosition":{"x":16023.52653783795,"y":25283.3082730222},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"47b4553c-7f2e-438c-9f4b-9ba30e943a6c"}}}],"layerFolders":[],"id":"eea75e9a-a735-4db8-9eea-cf2c4e4119e3","savedPayload":{"position":{"x":16023.52653783795,"y":25283.3082730222},"targetPosition":{"x":16420.303357177294,"y":25587.954983541822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bb0ea641-23a7-48d0-a70d-f3314722f129","savedPayload":{"position":{"x":15769.085211279895,"y":25043.34382759041},"targetPosition":{"x":16229.296572394282,"y":25126.066853588283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"6e49b57f-8c94-410f-985b-82c126155b11"}}},{"type":"Layer","name":"Position Base Asset","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"fa1cf76f-30a6-4cfd-ba4f-8511afca64b8","savedPayload":{"position":{"x":15844.85911518537,"y":24815.579664839803},"targetPosition":{"x":16229.296572394282,"y":25126.066853588283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"ae8fa9a5-95b6-4769-8ade-f9854e6855ba"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"bf7d5c92-8894-4040-8d2f-3f5cdec443af","savedPayload":{"position":{"x":16038.287615627753,"y":24659.155800255463},"targetPosition":{"x":16229.296572394282,"y":25126.066853588283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"9e9b19ee-9c51-4586-b74d-d2880f13f71f"}}},{"type":"Layer","name":"Stop Loss","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"125c9155-a747-4ac4-9d9f-1b93a4ae8d17","savedPayload":{"position":{"x":16294.541437710524,"y":24629.72000224595},"targetPosition":{"x":16229.296572394282,"y":25126.066853588283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"01491591-0462-453c-91e0-6da6f554a729"}}},{"type":"Layer","name":"Take Profit","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"3745d5cd-a2be-43ed-b5df-d05c328f8665","savedPayload":{"position":{"x":16532.917386265202,"y":24729.236040998087},"targetPosition":{"x":16229.296572394282,"y":25126.066853588283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"719dd8a6-58ab-41c6-9693-9b67c12232d2"}}}],"layerFolders":[],"id":"9854e8b2-d863-42f3-afd5-416d5e2c548e","savedPayload":{"position":{"x":16229.296572394282,"y":25126.066853588283},"targetPosition":{"x":16420.303357177294,"y":25587.954983541822},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6e31ae33-68d1-4dca-8b29-6e59a2a4448e","savedPayload":{"position":{"x":16420.303357177294,"y":25587.954983541822},"targetPosition":{"x":16915.0166511096,"y":25653.393625303714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8c851b59-3105-460c-bb4b-cb4944db1049","savedPayload":{"position":{"x":16915.0166511096,"y":25653.393625303714},"targetPosition":{"x":17409.9116821377,"y":25718.509455722615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"be53f7bc-6c26-4fd7-a0d0-96b965bbf655","savedPayload":{"position":{"x":17409.9116821377,"y":25718.509455722615},"targetPosition":{"x":17905.521538239824,"y":25783.587984353617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":40,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"13a2b4f9-2c05-49b2-b42c-32ffa71ae0b7"}}},"id":"43eeb152-b0b8-468d-84d1-7d03fd636387","savedPayload":{"position":{"x":18303.37277871924,"y":25463.81378514373},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"499eac86-6c40-4362-a36a-5f2002081866","savedPayload":{"position":{"x":18600.806237131383,"y":25502.971642809745},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":585,"y":-155},"width":240,"height":113.625,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"Lightning Strike","id":"ce648922-fef2-44e3-8d76-2bd7ab72a29f"}}}],"id":"885265c2-ebb1-4283-a617-34a88780276d","savedPayload":{"position":{"x":18750.806237131383,"y":25243.164021674413},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Testing Environment","name":"New Testing Environment","id":"5882d8a8-345b-4188-b1c1-797e9ff805d9"}}},{"type":"Dashboard","name":"Production Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"Lightning Strike Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-10-06T17:09:32.085Z\",\n \"toDate\": \"2020-10-06T21:09:32.085Z\"\n}","project":"Superalgos","id":"708c5a9f-a995-4210-aaaf-0794782f0e9e","savedPayload":{"position":{"x":18303.37277871924,"y":24502.89901593443},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 10419.75,\n \"maxValue\": 10844.37\n}","project":"Superalgos","id":"ee3f6af0-8649-489b-9168-b4f16d2f5a78","savedPayload":{"position":{"x":18311.02848924466,"y":24386.095444737657},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\n \"value\": \"01-min\",\n \"autoMinScale\": false,\n \"autoMaxScale\": true,\n \"fromDate\": \"2020-10-05T09:53:58.939Z\",\n \"toDate\": \"2020-10-05T13:53:58.939Z\"\n}","project":"Superalgos","id":"480f9696-76df-4026-a435-7bf364c08056","savedPayload":{"position":{"x":18362.80023504401,"y":24281.112729565797},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"New Data Mine Products","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 4,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"e3cbbcbe-c938-4669-b670-c317476e0a3b","savedPayload":{"position":{"x":17330.282280946285,"y":23355.185090627896},"targetPosition":{"x":17730.615945713467,"y":23355.800511833073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"b9c30464-73e5-4f5c-b422-9ba1a02b78ab"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"385a5f98-118a-43fd-b019-54e825d1f4ae","savedPayload":{"position":{"x":17530.242023030805,"y":23008.82762508108},"targetPosition":{"x":17730.615945713467,"y":23355.800511833073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"07c11481-7dbd-477d-8bf7-79212542a6aa"}}}],"layerFolders":[],"id":"6848a114-9979-41dd-8d95-3a899679ba08","savedPayload":{"position":{"x":17730.615945713467,"y":23355.800511833073},"targetPosition":{"x":18076.764681458488,"y":23555.35773780234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Resistances and Supports","project":"Superalgos","layers":[{"type":"Layer","name":"Resistances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0cf13cfa-2a37-4691-902c-513ab5780da8","savedPayload":{"position":{"x":17876.760168957182,"y":22808.70834871907},"targetPosition":{"x":18076.97910230742,"y":23155.764394445654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Resistances","id":"a1669770-1bbe-40f7-acb3-ded15272935f"}}},{"type":"Layer","name":"Supports","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"d9245f0b-54e8-44b1-94bd-56c7048eb5c1","savedPayload":{"position":{"x":18276.505496583897,"y":22808.73608811249},"targetPosition":{"x":18076.97910230742,"y":23155.764394445654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Supports","id":"64899503-b618-493a-ba94-bfad2051a611"}}}],"layerFolders":[],"id":"20bd60bb-917b-4a0f-acc5-b019d1c3bd81","savedPayload":{"position":{"x":18076.97910230742,"y":23155.764394445654},"targetPosition":{"x":18076.764681458488,"y":23555.35773780234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4cbbc012-c91e-4acd-a8d2-feb149e728a0","savedPayload":{"position":{"x":18076.764681458488,"y":23555.35773780234},"targetPosition":{"x":18301.331767523672,"y":23944.42452474204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":330,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"d37d8bf1-be3b-49ac-805b-0ddb3944e6a0"}}},"id":"bb7afb85-32ea-4471-8400-615a34fc126f","savedPayload":{"position":{"x":18450.806237131383,"y":24203.93353713308},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 4,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"05da2270-0016-4d22-89d8-b77cd14008a9","savedPayload":{"position":{"x":12562.806237131383,"y":25199.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"dc6cc4ef-4bd7-4837-8442-919462314db3"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a4165460-e0a7-4a0d-b506-15e756dfac93","savedPayload":{"position":{"x":12557.806237131383,"y":25188.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"776ed571-8321-47aa-8cfb-c8ebf565dace"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"371e0cd7-af57-4469-836d-45c4e6059760","savedPayload":{"position":{"x":12655.806237131383,"y":25216.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"ded93703-a48d-44be-9703-878c28f949cd"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5ed81442-77cc-4101-b1ff-8c7cbac57d4f","savedPayload":{"position":{"x":12583.806237131383,"y":25197.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"e702f1dd-1c91-4d05-ac55-19db363f5f3a"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5e046a6a-4f38-4b44-bae1-1aed6d4d3753","savedPayload":{"position":{"x":12651.806237131383,"y":25318.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"b8abea53-8221-47bd-91a2-cdcdd2ad1027"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b78a78ec-dca3-499b-881a-d2e3a82bf116","savedPayload":{"position":{"x":12668.806237131383,"y":25233.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"18bcbd26-c237-4acb-96f4-d9c95d833a42"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bb95c2a9-6f82-4a2a-9105-17b8f6c3c51a","savedPayload":{"position":{"x":12702.806237131383,"y":25219.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"c444f4b5-fa67-4c21-afa8-1f998da7a2a2"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4ad5b6f0-f4a9-4aab-aedf-9175647498b0","savedPayload":{"position":{"x":12659.806237131383,"y":25207.35640053908},"targetPosition":{"x":12653.806237131383,"y":25251.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"057570bd-69d4-4f3c-b0d4-94ee32f61e65"}}}],"layerFolders":[],"id":"7216b7a3-1371-4f07-a395-74c547579ab4","savedPayload":{"position":{"x":12653.806237131383,"y":25251.35640053908},"targetPosition":{"x":12701.806237131383,"y":25230.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d2c0a1c8-70ef-4f7b-835a-a99ac6a5837a","savedPayload":{"position":{"x":12548.806237131383,"y":25269.35640053908},"targetPosition":{"x":12643.806237131383,"y":25282.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"88dd680c-a81b-48ae-96ba-838281abfa35"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"076af680-2114-480b-a979-f7eea4966d7b","savedPayload":{"position":{"x":12640.806237131383,"y":25238.35640053908},"targetPosition":{"x":12643.806237131383,"y":25282.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"24af3ffc-6a52-4ee3-a30b-f068aa5b2062"}}}],"layerFolders":[],"id":"56112c60-50dd-4d19-89aa-1d46005f194f","savedPayload":{"position":{"x":12643.806237131383,"y":25282.35640053908},"targetPosition":{"x":12701.806237131383,"y":25230.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bb93ebef-f7ee-42c2-93b8-fe46eba0874a","savedPayload":{"position":{"x":12762.806237131383,"y":25220.35640053908},"targetPosition":{"x":12765.806237131383,"y":25191.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"25280962-e4e5-40df-9e42-9edfbad6f6d3"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"595e7228-5676-4f5c-82bf-baa43e9325ab","savedPayload":{"position":{"x":12826.806237131383,"y":25179.35640053908},"targetPosition":{"x":12765.806237131383,"y":25191.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"7a95a249-132d-4e0f-9182-cc7af45cacea"}}}],"layerFolders":[],"id":"9f594c8a-87fe-4c4b-b550-493405fe0b2d","savedPayload":{"position":{"x":12765.806237131383,"y":25191.35640053908},"targetPosition":{"x":12701.806237131383,"y":25230.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3ce44f39-8ac9-4984-ad9d-daa53ed3f707","savedPayload":{"position":{"x":12715.806237131383,"y":25087.35640053908},"targetPosition":{"x":12760.806237131383,"y":25157.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"c9c4bca7-f918-4aa8-b538-ffe8aa31d5c2"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a7d5f0aa-8259-4271-aa95-7b351aa9b9c0","savedPayload":{"position":{"x":12675.806237131383,"y":25087.35640053908},"targetPosition":{"x":12760.806237131383,"y":25157.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"4201d7c0-43aa-4ac0-bd7e-ab26b688aa2d"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9a9f6580-ab06-4005-9274-98f7e9a491e5","savedPayload":{"position":{"x":12725.806237131383,"y":25124.35640053908},"targetPosition":{"x":12760.806237131383,"y":25157.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"4fe24ddc-973f-4a5d-bf8a-d77090486125"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f60905ad-b491-45ee-9768-8087df9aef78","savedPayload":{"position":{"x":12804.806237131383,"y":25256.35640053908},"targetPosition":{"x":12760.806237131383,"y":25157.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"e2f3d69e-2f0a-4463-8e74-4f0768c4fb70"}}}],"layerFolders":[],"id":"5389c77c-63a7-4495-9cc5-cdc0c70b76e6","savedPayload":{"position":{"x":12760.806237131383,"y":25157.35640053908},"targetPosition":{"x":12701.806237131383,"y":25230.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f602d8ef-b6a6-423f-a772-9a4b5d5b9c43","savedPayload":{"position":{"x":12760.806237131383,"y":25246.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"0e0b284a-5014-4ab0-ada0-4322c14a099e"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0a0dd259-5704-46de-900f-5d1dc24af4f6","savedPayload":{"position":{"x":12826.806237131383,"y":25149.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"95b3db7a-9b62-4eab-a76b-4af8794da5a6"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"de6f83f6-a6d9-45c7-93fd-e2c72238040e","savedPayload":{"position":{"x":12748.806237131383,"y":25232.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"1c6eed42-23aa-4174-aade-be29222acb8c"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ac0f1c2a-5eed-45ee-84da-3d24e455abd3","savedPayload":{"position":{"x":12717.806237131383,"y":25162.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"a2f44cd5-090d-42e5-9eb7-73e732310e85"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"89def699-c33f-4344-a045-babca1f545ee","savedPayload":{"position":{"x":12816.806237131383,"y":25251.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"8c24d559-ba52-46fe-81b4-8a6bf50c74b6"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a7e04514-bf32-4021-822c-47af56c55a76","savedPayload":{"position":{"x":12842.806237131383,"y":25279.35640053908},"targetPosition":{"x":12775.806237131383,"y":25241.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"c451c035-5ece-451f-836f-b5334cb3f967"}}}],"layerFolders":[],"id":"a302255a-cf35-4801-ae3c-95cb47ae9613","savedPayload":{"position":{"x":12775.806237131383,"y":25241.35640053908},"targetPosition":{"x":12701.806237131383,"y":25230.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1857004e-2f12-4287-8847-173043d8d2ab","savedPayload":{"position":{"x":12701.806237131383,"y":25230.35640053908},"targetPosition":{"x":12718.806237131383,"y":25185.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"23ad1663-d4da-4ece-8964-30012894ae5b","savedPayload":{"position":{"x":12718.806237131383,"y":25185.35640053908},"targetPosition":{"x":12786.806237131383,"y":25096.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ddb3fafa-58f4-46c1-9b24-61efe3ec13a6","savedPayload":{"position":{"x":12786.806237131383,"y":25096.35640053908},"targetPosition":{"x":12784.806237131383,"y":25136.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":330,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2b0766-a3d5-47e1-acd8-7345af564388"}}},"id":"788a0207-20ea-411c-862d-b1b13db4e09f","savedPayload":{"position":{"x":18561.64837946537,"y":24166.307699856272},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 4,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2a1db97f-553d-47ea-b452-c90ba9af9e79","savedPayload":{"position":{"x":12580.806237131383,"y":25081.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"ba606f99-2ae5-44dc-b7db-399e657830e1"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3c1c9d45-c482-4374-92ad-c3c28bfb7679","savedPayload":{"position":{"x":12608.806237131383,"y":25222.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"2d20d8ae-4afa-4e92-8de2-89e66e5efdee"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a560c8af-91cd-4aea-ab9f-01ed60892abb","savedPayload":{"position":{"x":12678.806237131383,"y":25045.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"f8a6219c-c7b4-410a-8aa4-1910583f51c8"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"40debb84-1e2e-452b-99ff-95ff3994fb29","savedPayload":{"position":{"x":12660.806237131383,"y":25104.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"dcff6f56-7646-4505-aa93-6682a110f3f2"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5785c4fb-879d-4b89-aab8-9ec37d5f561b","savedPayload":{"position":{"x":12578.806237131383,"y":25058.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"0a9dff80-e462-4110-b988-11ce57bbbcd5"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"74d8c1f7-8dd5-4e2c-b3cf-7f7bcfe7143c","savedPayload":{"position":{"x":12680.806237131383,"y":25042.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"c7e05ad0-7d4a-4ffb-9aee-191511f85ee7"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4476fcb1-3898-440f-b69e-afba06be912a","savedPayload":{"position":{"x":12740.806237131383,"y":25084.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"e4811789-fd94-49b0-9917-8d9d434f997d"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"43fe3418-9b3c-4cd9-b9a9-3994851e0b65","savedPayload":{"position":{"x":12648.806237131383,"y":25054.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"029ff3a7-9c65-425f-855a-882df68fa05b"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"de34ba07-61b5-4785-bcf5-ff5b81d63e48","savedPayload":{"position":{"x":12565.806237131383,"y":25058.35640053908},"targetPosition":{"x":12648.806237131383,"y":25126.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"0f47adaf-25a0-431f-b15b-0fbf44069b38"}}}],"layerFolders":[],"id":"36e02794-0943-4520-af39-2f274050610c","savedPayload":{"position":{"x":12648.806237131383,"y":25126.35640053908},"targetPosition":{"x":12703.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1ccfa34c-ca21-4ac3-be74-30f85549bf5e","savedPayload":{"position":{"x":12703.806237131383,"y":25084.35640053908},"targetPosition":{"x":12677.806237131383,"y":25136.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c1c4bd7c-b755-461a-a5ed-b59804b4c280","savedPayload":{"position":{"x":12677.806237131383,"y":25136.35640053908},"targetPosition":{"x":12715.806237131383,"y":25039.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":330,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2b0766-a3d5-47e1-acd8-7345af564388"}}},"id":"ed6507e7-437f-4740-a897-11dc4da4d20a","savedPayload":{"position":{"x":18678.45195066214,"y":24173.963410381693},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 4,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"76852fcc-d524-43b8-a0b1-8645c2fed91e","savedPayload":{"position":{"x":13048.806237131383,"y":25113.35640053908},"targetPosition":{"x":13025.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"c6fd6067-4b57-4860-ae3b-5668e4444490"}}},{"type":"Layer","name":"Strategies","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"43b43957-23d5-401b-b3e0-391c430b72c9","savedPayload":{"position":{"x":13043.806237131383,"y":25078.35640053908},"targetPosition":{"x":13025.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"60f88096-7343-42d1-afad-83fecd22fb44"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"aaff7fb6-bd83-48f2-819a-a1dd674876a7","savedPayload":{"position":{"x":12917.806237131383,"y":24969.35640053908},"targetPosition":{"x":12987.806237131383,"y":24987.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"9f939086-c934-4924-8353-776707a7cf10"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bec241f4-5a8f-4fe7-9620-76d92f64da9c","savedPayload":{"position":{"x":13043.806237131383,"y":25078.35640053908},"targetPosition":{"x":12987.806237131383,"y":24987.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"da5f279e-d387-43cf-80f4-fc114b9ac906"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"2d03d083-7199-4bf2-8e8a-4c96f23a16a8","savedPayload":{"position":{"x":13073.806237131383,"y":25020.35640053908},"targetPosition":{"x":12987.806237131383,"y":24987.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"367646bb-839a-4071-8305-6d26a647585d"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"cb5de20d-e440-4bdb-a074-c408740e9022","savedPayload":{"position":{"x":12969.806237131383,"y":24975.35640053908},"targetPosition":{"x":12987.806237131383,"y":24987.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"0b2fc73a-9635-40b2-98d8-0c79c69175a9"}}}],"layerFolders":[],"id":"a8409c29-905d-495f-bbca-3d0eef14f91c","savedPayload":{"position":{"x":12987.806237131383,"y":24987.35640053908},"targetPosition":{"x":13025.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"04d1a0a8-1419-4fbd-9c28-eef6cfefd5d4","savedPayload":{"position":{"x":12922.806237131383,"y":25051.35640053908},"targetPosition":{"x":13018.806237131383,"y":25092.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"7fe8c58f-9cad-47c9-ba4e-d66bff094dcf"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"74cda6e5-4fe2-41ef-a611-2c0374780ad5","savedPayload":{"position":{"x":13001.806237131383,"y":25002.35640053908},"targetPosition":{"x":13018.806237131383,"y":25092.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"41f17745-1819-4681-8a2b-9bdda3cd67c4"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fb041378-9424-4709-a9ed-79426fcdfe68","savedPayload":{"position":{"x":13059.806237131383,"y":25160.35640053908},"targetPosition":{"x":13018.806237131383,"y":25092.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"e89c8bfd-fac9-4aff-afc0-3a89c1dc2710"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6c4ac373-c5ff-4bfd-8047-4caaba6b7788","savedPayload":{"position":{"x":12997.806237131383,"y":25084.35640053908},"targetPosition":{"x":13018.806237131383,"y":25092.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"bc2c6503-e935-4ad7-a76a-89b062d41e91"}}}],"layerFolders":[],"id":"4b2ee5fd-d4f7-4a7c-bb6e-5e4c633b1b9f","savedPayload":{"position":{"x":13018.806237131383,"y":25092.35640053908},"targetPosition":{"x":13025.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"4f77d851-9e93-4e85-9cfb-ec2ab200d79b","savedPayload":{"position":{"x":12919.806237131383,"y":25149.35640053908},"targetPosition":{"x":13010.806237131383,"y":25117.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"3ed594a0-8452-4bd8-9eaa-37cd83a45b90"}}},{"type":"Layer","name":"Position Base Asset","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"0213c668-a6d8-4737-ae57-d59d62b8f715","savedPayload":{"position":{"x":13105.806237131383,"y":25093.35640053908},"targetPosition":{"x":13010.806237131383,"y":25117.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"88997c97-e77f-490e-9eb5-c7531beec132"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f07986eb-010f-46cd-803d-dcac674adb80","savedPayload":{"position":{"x":13083.806237131383,"y":25172.35640053908},"targetPosition":{"x":13010.806237131383,"y":25117.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"b4772611-d5d0-4fbd-b689-d42de3c045d4"}}},{"type":"Layer","name":"Stop Loss","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"3f8f8fa3-2149-42d6-92e9-214354cfa186","savedPayload":{"position":{"x":12968.806237131383,"y":25080.35640053908},"targetPosition":{"x":13010.806237131383,"y":25117.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"9b064960-3829-441f-b955-334fb8324a53"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"65ec58e6-2c00-41d4-a145-e6b7e7178bf0","savedPayload":{"position":{"x":13081.806237131383,"y":25089.35640053908},"targetPosition":{"x":13010.806237131383,"y":25117.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"cbcc817b-4333-4c80-addc-e2a0ee0845c1"}}}],"layerFolders":[],"id":"66e5c011-9163-422d-863f-115135f832ad","savedPayload":{"position":{"x":13010.806237131383,"y":25117.35640053908},"targetPosition":{"x":13025.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"91b8a8e8-823d-4746-967f-c8d85a1ad3ad","savedPayload":{"position":{"x":13025.806237131383,"y":25029.35640053908},"targetPosition":{"x":12929.806237131383,"y":25064.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dcaccce7-d98d-49b3-b3b6-e83495b688c3","savedPayload":{"position":{"x":12929.806237131383,"y":25064.35640053908},"targetPosition":{"x":12861.806237131383,"y":25132.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e328f755-80a6-4799-8f12-002a2ddb983d","savedPayload":{"position":{"x":12861.806237131383,"y":25132.35640053908},"targetPosition":{"x":12827.806237131383,"y":25061.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":330,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"aa2b0766-a3d5-47e1-acd8-7345af564388"}}},"id":"93708a53-ad8d-48e0-9728-b87ea96d1545","savedPayload":{"position":{"x":18783.434665834,"y":24225.735156181043},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cc1fcc1e-81de-4011-8e59-c37ebe32ecf7","savedPayload":{"position":{"x":18600.806237131383,"y":24463.741158268414},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":585,"y":65},"width":240,"height":113.625,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"Lightning Strike","id":"1ce123af-467f-4295-b317-dba8729faf25"}}}],"id":"abc16155-6614-4397-bf7e-ab4a0ff7c1a4","savedPayload":{"position":{"x":18750.806237131383,"y":24723.548779403747},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Production Environment","name":"New Production Environment","id":"65a40d20-837c-4652-8356-f8054b4e1346"}}}],"id":"21d2ec55-9e56-4652-8e96-c7e451262c36","savedPayload":{"position":{"x":18900.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Plugins","name":"New Plugins","project":"Superalgos","pluginProjects":[{"type":"Plugin Project","name":"Superalgos","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","pluginDataMines":{"type":"Plugin Data Mines","name":"New Plugin Data Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"d5234bd2-ef4e-4856-a6a0-ce7659653a48","savedPayload":{"position":{"x":18879.35218735615,"y":18688.55301821844},"targetPosition":{"x":31820.67692045767,"y":18678.794324352373},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ecc1a524-de9b-4e73-8874-b99a7ea0402b","savedPayload":{"position":{"x":31820.67692045767,"y":18678.794324352373},"targetPosition":{"x":31320.502678827743,"y":18678.79704693609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbc3d9be-5e59-45d8-bb0f-4ec82763691d","savedPayload":{"position":{"x":30820.083379567513,"y":18941.11933078349},"targetPosition":{"x":30727.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingMines":{"type":"Plugin Trading Mines","name":"New Plugin Trading Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"ad1ce785-858f-4cfc-ba68-108b5e0c54d9","savedPayload":{"position":{"x":24941.217404066585,"y":18714.893045797242},"targetPosition":{"x":31320.45102232534,"y":19544.930491916948},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8a64c00e-4f8c-49bf-b57d-4e2e388bae41","savedPayload":{"position":{"x":31320.45102232534,"y":19544.930491916948},"targetPosition":{"x":31070.415084976332,"y":19111.835158656926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d881813-3ab9-4e8b-ab5a-48dedab2dd19","savedPayload":{"position":{"x":30484.673182942548,"y":18832.13795158269},"targetPosition":{"x":30727.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingSystems":{"type":"Plugin Trading Systems","name":"New Plugin Trading Systems","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters-Lightning-Strike","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters-Lightning-Strike","project":"Superalgos","id":"37ab4b0d-6bd8-46b6-9778-e193c32669a4","savedPayload":{"position":{"x":31050.365708673427,"y":31068.826468868458},"targetPosition":{"x":30320.47990890508,"y":19544.97425758733},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5fdcecee-8c8f-4e0f-b36b-81e9231970a6","savedPayload":{"position":{"x":30320.47990890508,"y":19544.97425758733},"targetPosition":{"x":30570.439042449398,"y":19111.851515318966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3569d452-c593-4e54-a356-7ff8c6b519f3","savedPayload":{"position":{"x":30484.673182942548,"y":18479.466800207203},"targetPosition":{"x":30727.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingEngines":{"type":"Plugin Trading Engines","name":"New Plugin Trading Engines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Low-Frequency","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Low-Frequency","project":"Superalgos","id":"e117a2a4-09b3-4181-8455-e680de3bdeb3","savedPayload":{"position":{"x":30923.55093774257,"y":24967.049392142086},"targetPosition":{"x":29820.22642897682,"y":18678.80776835817},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9270d67-4630-4ac9-91ca-1dec4fb5aa38","savedPayload":{"position":{"x":29820.22642897682,"y":18678.80776835817},"targetPosition":{"x":30320.32799443869,"y":18678.805890109317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87a28762-63d0-45f7-bd39-9dea436d8244","savedPayload":{"position":{"x":30820.083379567513,"y":18370.4854210064},"targetPosition":{"x":30727.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c4e402d7-5228-408c-9d67-379d6ef40bae","savedPayload":{"position":{"x":30727.37828125503,"y":18655.802375894946},"targetPosition":{"x":31027.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6","savedPayload":{"position":{"x":31027.37828125503,"y":18655.802375894946},"targetPosition":{"x":31027.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Tutorial","name":"Install a New Market","config":"{\n \"title\": \"Install a New Market\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"market\",\n \"definition\": \"This tutorial walks you through the process of setting up a new ->Market-> on which to run data mining and trading operations.\",\n \"bulletListIntro\": \"Setting up a new Market involves:\",\n \"bulletArray\": [\n [\n \"1. Adding the assets \",\n \"for the exchange of choice.\"\n ],\n [\n \"2. Setting up a market \",\n \"with the said assets.\"\n ],\n [\n \"3. Installing the market\",\n \"\"\n ]\n ],\n \"paragraph1\": \"Let's get on with it!\",\n \"callOut\": \"When you click the Next button below, you will go to the ->Exchange Assets-> node under Binance, in the ->Crypto Ecosystem-> hierarchy.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Add the Assets","config":"{\n \"title\": \"Add the Assets\",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"asset\",\n \"definition\": \"If the assets you wish to work with are not listed under ->Exchange Assets->, you must add and configure them first.\",\n \"paragraph1\": \"\",\n \"callOut\": \"In this section of the tutorial, you will learn to define which assets you may want to work with.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Each exchange may list hundreds of assets, however, you will likely be interested in just a few. Some automated operations may feed on your definitions, so keeping them free of junk is always a good idea.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Add the Assets\",\n \"summary\": \"\",\n \"subTitle\": \"Step 1: Add Nodes\",\n \"gif\": \"\",\n \"image\": \"exchange-assets\",\n \"definition\": \"Open the ->Exchange Assets-> node menu and use the Add Asset button to add the required assets.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"Assets under Exchange Assets may not be duplicated. If the definitions for the assets you are interested in already exist, you may reuse them instead of creating new ones. If such is the case, simply skip the next few steps until you need to set up the ->Market->.\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"1b3b8d0e-3aa9-4aba-8b74-351647a3b5b5","savedPayload":{"position":{"x":31853.428390593275,"y":44300.766834125825},"targetPosition":{"x":31499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Add the Assets\",\n \"summary\": \"\",\n \"subTitle\": \"Step 2: Configure Assets\",\n \"gif\": \"\",\n \"image\": \"asset\",\n \"definition\": \"Edit the configuration of each of the new assets entering the ticker (as listed by the exchange) in the codeName property. For example: 'codeName': 'ETH'\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"If the icon for the configured assets exist in the image library, the default icon is replaced automatically.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"05f7092a-2326-40e7-b618-f3be5523e670","savedPayload":{"position":{"x":31999.875,"y":44654.3202247191},"targetPosition":{"x":31499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Add the Assets\",\n \"summary\": \"\",\n \"subTitle\": \"Step 3: Label Nodes\",\n \"gif\": \"\",\n \"image\": \"asset\",\n \"definition\": \"Label the assets with the descriptive name of the coin or token, for ease of use. For example: Ether.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Keeping a tidy ->Workspace-> with proper labels for significant nodes helps in managing large operations and administering complexity.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"281274f1-a4ec-47a2-b97c-0c29aa71eed9","savedPayload":{"position":{"x":31853.428390593275,"y":45007.873615312375},"targetPosition":{"x":31499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"cd6f2f74-407e-46c9-b7de-95d9ab2cc82d","savedPayload":{"position":{"x":31499.875,"y":44654.3202247191},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Exchange Assets","name":"New Exchange Assets","id":"95d2c30f-215b-486e-8119-f4eac0279575"}}},{"type":"Tutorial Topic","name":"Set up the Market","config":"{ \n \"title\": \"Set Up the Market\",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"market\",\n \"definition\": \"If there is no ->Market-> set up with the pair you wish to work with under ->Exchange Markets->, you must set up the market definition before installing it.\",\n \"paragraph1\": \"\",\n \"callOut\": \"The next few steps teach you how to set up the market so that you may later install it.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"Make sure that the combination of base and quoted assets that you wish to define as a market in Superalgos exists as a market listed at the exchange.\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n }","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Set Up the Market\",\n \"summary\": \"\",\n \"subTitle\": \"Step 1: Add Market\",\n \"gif\": \"\",\n \"image\": \"market\",\n \"definition\": \"Add a new Market node using the Add Market option on the menu.\",\n \"paragraph1\": \"A Market node is added featuring two offspring: a ->Market Base Asset-> and a ->Market Quoted Asset->.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"Before continuing, make sure which is the base and which the quoted asset in the exchange's listing. Usually, the base asset is the first in the name of the pair, but this is not enforced on every exchange, so be vigilant.\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"cae5ddd4-0c48-488d-86f7-38192c7fdbca","savedPayload":{"position":{"x":31747.135947684135,"y":45139.597158245146},"targetPosition":{"x":31249.875,"y":45087.33292661132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Set Up the Market\",\n \"summary\": \"\",\n \"subTitle\": \"Step 2: Reference Base A.\",\n \"gif\": \"\",\n \"image\": \"asset\",\n \"definition\": \"Establish a reference from the ->Market Base Asset-> node in the Market you just defined to the corresponding ->Asset-> node defined under Exchange Assets.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"If you are not familiar with establishing references, please read about the topic in the documentation.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"https://docs.superalgos.org/suite-how-to-remove-and-establish-references.html\"\n}","project":"Superalgos","id":"a7a049cb-72e0-4d76-9247-ee0d873e79c8","savedPayload":{"position":{"x":31621.447412738697,"y":45421.89822979075},"targetPosition":{"x":31249.875,"y":45087.33292661132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Set Up the Market\",\n \"summary\": \"\",\n \"subTitle\": \"Step 3: Reference Quoted A.\",\n \"gif\": \"\",\n \"image\": \"asset\",\n \"definition\": \"Now establish a reference from the ->Market Quoted Asset-> node in the Market you just defined to the corresponding ->Asset-> node defined under Exchange Assets.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"9710d88d-c4ae-406b-9079-31bcf7395817","savedPayload":{"position":{"x":31353.83084540888,"y":45576.406726978224},"targetPosition":{"x":31249.875,"y":45087.33292661132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Set Up the Market\",\n \"summary\": \"\",\n \"subTitle\": \"Step 4: Label the Market\",\n \"gif\": \"\",\n \"image\": \"market\",\n \"definition\": \"Label the Market with the ticker names corresponding to the Market Base Asset and the Market Quoted Asset, just like the exchange listing. For example: ETH/USDT.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Keeping a tidy ->Workspace-> with proper labels for significant nodes helps in managing large operations and administering complexity.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"2d2ce361-6261-44b4-b7ff-466035934334","savedPayload":{"position":{"x":31046.5066784621,"y":45544.10565543262},"targetPosition":{"x":31249.875,"y":45087.33292661132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"4de3cd7d-f552-4f39-b4cd-e29269b64668","savedPayload":{"position":{"x":31249.875,"y":45087.33292661132},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Exchange Markets","name":"New Exchange Markets","id":"2fd80894-900e-44ac-a1a7-56c14124f7a1"}}},{"type":"Tutorial Topic","name":"Install the Market","config":"{\n \"title\": \"Install the Market\",\n \"summary\": \"Now that the Market is set up, installing it is just a click away.\",\n \"subTitle\": \"Single Step: Install\",\n \"gif\": \"\",\n \"image\": \"market\",\n \"definition\": \"Click the Install Market button on the ->Market-> node you just finished setting up.\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"The Install Market function sets up many data structures in the local ->Network Node-> and in the ->Charting Space->. The next few steps in the tutorial will help you get familiar with the installation.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[],"id":"e003540b-91f4-41ce-8082-45122ddb55e7","savedPayload":{"position":{"x":30749.875,"y":45087.33292661132},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Network Verification","config":"{\n \"title\": \"Network Verification\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"network-node\",\n \"definition\": \"The Install Market function sets up many data structures in the local ->Network Node->. \",\n \"paragraph1\": \"In the next few steps, you will verify that each of the expected data structures was created successfully. The expected structures are:\",\n \"callOut\": \"1. ->Data Mining-> tasks for all data mines included in your workspace.

2. Backtesting and live trading tasks for all included trading systems.

3. The corresponding ->Data Storage-> definitions.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Network Verification\",\n \"subTitle\": \"Step 1: Verify Data Mining\",\n \"gif\": \"\",\n \"image\": \"data-mining\",\n \"definition\": \"Verify that the ->Data Mining-> tasks for the corresponding Market were created successfully.\",\n \"bulletListIntro\": \"Look for the following data structures:\",\n \"bulletArray\": [\n [\n \"A ->Market Data Tasks-> node\",\n \" for the new market.\"\n ],\n [\n \"One ->Data Mine Tasks-> node\",\n \" for each Data Mine included in the Workspace.\"\n ],\n [\n \"One ->Task Manager-> per ->Data Mine->\",\n \" and one ->Task-> for each bot defined in each data mine.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"4bca0860-329c-4fde-a11e-d404d0f23431","savedPayload":{"position":{"x":30205.982373853763,"y":45058.828721906575},"targetPosition":{"x":30499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Network Verification\",\n \"subTitle\": \"Step 2: Verify Testing Env.\",\n \"gif\": \"\",\n \"image\": \"testing-environment\",\n \"definition\": \"Verify that the ->Testing Environment-> tasks for the corresponding ->Market-> were created successfully.\",\n \"bulletListIntro\": \"Look for the following data structures:\",\n \"bulletArray\": [\n [\n \"A ->Market Trading Tasks-> node\",\n \" for the new market.\"\n ],\n [\n \"One ->Trading Mine Tasks-> node\",\n \" for each trading mine included in the Workspace.\"\n ],\n [\n \"One ->Task Manager-> per trading mine and one ->Task-> with a ->Backtesting Session->\",\n \" for each ->Trading System-> in the workspace.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"495e3d4c-87a8-4147-ad2a-06920da9d7a6","savedPayload":{"position":{"x":30024.346741852423,"y":44808.828721906575},"targetPosition":{"x":30499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Network Verification\",\n \"subTitle\": \"Step 3: Verify Prod. Env.\",\n \"gif\": \"\",\n \"image\": \"production-environment\",\n \"definition\": \"Verify that the ->Production Environment-> tasks for the corresponding ->Market-> were created successfully.\",\n \"bulletListIntro\": \"Look for the following data structures:\",\n \"bulletArray\": [\n [\n \"A ->Market Trading Tasks-> node\",\n \" for the new market.\"\n ],\n [\n \"One ->Trading Mine Tasks-> node\",\n \" for each trading mine included in the workspace.\"\n ],\n [\n \"One ->Task Manager-> per ->Trading Mine-> and one ->Task-> with a ->Backtesting Session->\",\n \" for each ->Trading System-> in the workspace.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"43b85e55-3417-4b13-a7b6-7c5bc0fb691d","savedPayload":{"position":{"x":30024.346741852423,"y":44499.811727531625},"targetPosition":{"x":30499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Network Verification\",\n \"subTitle\": \"Step 4: Verify Data Storage\",\n \"gif\": \"\",\n \"image\": \"data-storage\",\n \"definition\": \"Verify that the ->Data Storage-> nodes for the corresponding ->Market-> were created successfully.\",\n \"bulletListIntro\": \"Look for the following data structures:\",\n \"bulletArray\": [\n [\n \"A ->Market Data Products-> node\",\n \" under ->Data Mines Data->, with a ->Data Mine Products-> node for each ->Data Mine-> in the workspace.\"\n ],\n [\n \"A ->Market Trading Products-> node\",\n \" under ->Trading Mines Data->, with a ->Trading Session Reference-> for each trading session in the testing and production environments.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f37edf40-24ba-42d0-9458-bf008c123659","savedPayload":{"position":{"x":30205.982373853763,"y":44249.811727531625},"targetPosition":{"x":30499.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"89c6f1e3-d4c8-48c0-aec1-9dda6e0b9797","savedPayload":{"position":{"x":30499.875,"y":44654.3202247191},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Network Node","name":"My Computer","id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4"}}},{"type":"Tutorial Topic","name":"Charts Verification","config":"{\n \"title\": \"Charts Verification\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"charting-space\",\n \"definition\": \"Beyond the data structures set up in the Network hierarchy, the Install Market function also sets up charts matching the trading sessions created.\",\n \"paragraph1\": \"In the next few steps you will verify that the expected data structures were created successfully.\",\n \"callOut\": \"The charts created allow working with each of the trading sessions independently.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Notice from the organization of the charts that Superalgos allows scaling up your operation to unlimited trading systems and charts.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Charts Verification\",\n \"subTitle\": \"Step 1: Verify Charting S.\",\n \"gif\": \"\",\n \"image\": \"charting-space\",\n \"definition\": \"Verify that the ->Charting Space-> data structures for the corresponding Market were created successfully.\",\n \"bulletListIntro\": \"Look for the following data structures:\",\n \"bulletArray\": [\n [\n \"A ->Time Machine-> node\",\n \" for each trading session created in the ->Testing Environment->.\"\n ],\n [\n \"A ->Time Machine-> node\",\n \" for each trading session created in the ->Production Environment->.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"17eb1e8e-e9f4-4fe4-a8ea-2c0ea0804d87","savedPayload":{"position":{"x":30316.862298107782,"y":43971.30752282688},"targetPosition":{"x":30749.875,"y":44221.30752282688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"New Tutorial Step","config":"{\n \"title\": \"Charts Verification\",\n \"subTitle\": \"Step 2: Verify the Charts\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"Verify that the time machines created show up on the chartsing space... you should find...\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": [\n [\n \"A ->Time Machine->\",\n \" for each trading session created in the ->Testing Environment->.\"\n ],\n [\n \"A ->Time Machine->\",\n \" for each trading session created in the ->Production Environment->.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Hover your mouse over a chart to see what ->Crypto Exchange-> and ->Market-> it features.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"a94fa42a-87c8-4874-ba45-ffa0ffd02f36","savedPayload":{"position":{"x":30749.875,"y":43721.30752282688},"targetPosition":{"x":30749.875,"y":44221.30752282688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"064a5be1-bb06-468b-8fad-d78d2c844ee1","savedPayload":{"position":{"x":30749.875,"y":44221.30752282688},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Charting Space","name":"New Charting Space","id":"21d2ec55-9e56-4652-8e96-c7e451262c36"}}},{"type":"Tutorial Topic","name":"The End","config":"{\n \"title\": \"You Made It!\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"tutorial\",\n \"definition\": \"Congratulations... you have reached the end of this tutorial!\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"You may revisit this tutorial at any point. If you select the Play option on the menu, you start right from the beginning. If you select the Resume option instead, you start where you last left, or where you last skipped a step.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[],"id":"9b5e9927-860c-4b89-ac5d-d7f6fd86b18d","savedPayload":{"position":{"x":31249.875,"y":44221.30752282688},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"d86ff84f-15d3-4a2d-9674-114c5b526de5","savedPayload":{"position":{"x":30999.875,"y":44654.3202247191},"targetPosition":{"x":30999.875,"y":44654.3202247191},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Done"}}},{"type":"Design Space","name":"My Design Space","project":"Superalgos","spaceStyle":{"type":"Space Style","name":"My Space Style","config":" {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }","project":"Superalgos","id":"fad0e429-f7a7-4b62-a2a5-2ead29b8f695","savedPayload":{"position":{"x":25236.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"spaceSettings":{"type":"Space Settings","name":"New Space Settings","config":"{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"animationSteps\": 2, \n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}","project":"Superalgos","id":"05c9d6d5-24c4-4eec-9aca-9668d6486fdd","savedPayload":{"position":{"x":24636.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8485ce5-67f3-4476-b9e2-80994e49c318","savedPayload":{"position":{"x":24936.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":255,"y":588.3125}}}},{"type":"Superalgos Project","name":"New Superalgos Project","project":"Superalgos","spaces":{"type":"Spaces","name":"New Spaces","project":"Superalgos","id":"97eff31b-b4a4-485c-8910-0a88f522e60a","savedPayload":{"position":{"x":25244,"y":24984},"targetPosition":{"x":24944,"y":24984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"mines":{"type":"Mines","name":"New Mines","project":"Superalgos","id":"11fc631a-a015-4988-aff4-5a1bbe822649","savedPayload":{"position":{"x":24794,"y":25243.807621135333},"targetPosition":{"x":24944,"y":24984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"otherHierarchies":{"type":"Other Hierarchies","name":"New Other Hierarchies","project":"Superalgos","id":"9cf63862-9273-4341-9e03-b98e2d20d6d3","savedPayload":{"position":{"x":24794,"y":24724.192378864667},"targetPosition":{"x":24944,"y":24984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5f868d2c-1aed-4791-871e-592b36b91afe","savedPayload":{"position":{"x":24571,"y":24986},"targetPosition":{"x":24571,"y":24986},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Tutorial","name":"Welcome to Superalgos!","config":"{\n \"title\": \"Congratulations!\",\n \"summary\": \"You are now running Superalgos Beta 6! Let's get you started! I can't wait to show you around!\",\n \"subTitle\": \"Welcome to Superalgos!\",\n \"gif\": \"\",\n \"image\": \"tutorial\",\n \"definition\": \"I'm an interactive tutorial, the first in a series created to walk you through the basic operation of the system!\",\n \"paragraph1\": \"My goal is to get you started and show you the tools that will help you move around comfortably to discover all the cool things that Superalgos may do for you.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Please, always click Next to continue!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Nodes & Hierarchies","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"That's Me","config":"{\n \"subTitle\": \"That's Me On the Right!\",\n \"gif\": \"\",\n \"image\": \"tutorial\",\n \"definition\": \"Tutorials are defined within the system, so you may create more of us if you wish! But we'll discuss that God-like power later on... let's focus on the basics first!\",\n \"paragraph1\": \"Superalgos is inherently a visual tool. The system represents information in hierarchical structures of interconnected nodes, represented by icons. What you see on your right is one of these hierarchies—in particular, a ->Tutorial-> hierarchy with a label reading Welcome to Superalgos!\",\n \"callOut\": \"Hover your mouse pointer over the Tutorial node and see what happens!\",\n \"paragraph2\": \"Wow! Cool right? That's a lot of buttons!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"57f5e946-1289-4508-95f0-dfe5e95a7346","savedPayload":{"position":{"x":19461.599287801997,"y":44485.094484167515},"targetPosition":{"x":19201.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Tutorial","name":"Welcome to Superalgos!","id":"6f36f540-8de9-4458-b2c7-875884121b87"}}},{"type":"Tutorial Step","name":"Expand That Node!","config":"{\n \"subTitle\": \"Expand That Node!\",\n \"gif\": \"\",\n \"image\": \"expand\",\n \"definition\": \"Each node features a menu. The button on the bottom-left expands and collapses the structure of nodes below the current node.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Go ahead and click the expand button!\",\n \"paragraph2\": \"The ->Tutorial-> node has several offspring, and these have several more offspring. That's why it's a hierarchy!\",\n \"note\": \"Structured visual representations of information are at the core of how Superalgos administers the complexity behind flexible and scalable trading operations.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"dc75d95f-68d8-44a0-a1d2-d4a12a2fd43f","savedPayload":{"position":{"x":19461.599287801997,"y":44785.094484167515},"targetPosition":{"x":19201.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"892c8d8c-824e-4293-af86-bdb81464c7d6","savedPayload":{"position":{"x":19201.791666666664,"y":44635.094484167515},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Start Data Mining","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Let's Go for a Ride!","config":"{\n \"subTitle\": \"Let's Go for a Ride!\",\n \"gif\": \"\",\n \"image\": \"network\",\n \"definition\": \"Before I show you the rest of the menu, let's take a look at another hierarchy: the ->Network->. \",\n \"paragraph1\": \"The Network hierarchy is the control room of the system. This is where you control your ->Data Mining->, ->Testing Environment->, and ->Production Environment->.\",\n \"callOut\": \"Expand the hierarchy and take a look inside!\",\n \"paragraph2\": \"See the nodes I mentioned earlier? Cool! We are here to start your first ever data mining operation. Are you ready?\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"43329093-256d-4bfa-84d1-3eb245287604","savedPayload":{"position":{"x":19397.08870011514,"y":44748.142799936926},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Network","name":"My Network","id":"3c165071-7558-4708-9999-8ffe71d346b1"}}},{"type":"Tutorial Step","name":"Ready to Rock?","config":"{\n \"subTitle\": \"Ready to Rock?\",\n \"gif\": \"\",\n \"image\": \"data-mining\",\n \"definition\": \"The ->Data Mining-> node controls all the data mining tasks defined for this ->Network Node->.\",\n \"bulletListIntro\": \"You are about to start the first of the following activities that we'll cover in the next few minutes:\",\n \"bulletArray\": [\n [\n \"1. Run a data mining operation\",\n \" to get data for the BTC/USDT ->Market-> from Binance.\"\n ],\n [\n \"2. Run a ->Backtesting Session->\",\n \" with an existing open-source strategy.\"\n ],\n [\n \"3. Run a ->Live Trading Session->\",\n \" with minimal funds, to test the critical aspects of the system.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Are you cool with this? Shall we start?\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"d35ce1f2-4963-4add-8998-9bb8995a24e7","savedPayload":{"position":{"x":19412.0373639906,"y":44880.81586135447},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}},{"type":"Tutorial Step","name":"Let's Mine Some Data!","config":"{\n \"subTitle\": \"Let's Mine Some Data!\",\n \"gif\": \"\",\n \"image\": \"run\",\n \"definition\": \"The Run All Exchange Data Tasks button on the top-right corner of the menu runs... well... all ->Exchange Data Tasks->!\",\n \"paragraph1\": \"And that is exactly what we want to do, so...\",\n \"callOut\": \"Select the button on the menu and let's mine!\",\n \"paragraph2\": \"Confirm the request by clicking the button a second time. In about 30 seconds, you should see a status notice below the Data Mining node indicating that 1 out of 1 Exchange Data Tasks node is running.\",\n \"note\": \"Your console app should show something similar to the video on the next step.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"37dc22e6-b981-472c-abd6-a61904b5c46e","savedPayload":{"position":{"x":19367.940960791115,"y":45006.83614147808},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-start-data-mining-console\",\n \"position\": \"Left\",\n \"slider\": \"toTop\"\n}","project":"Superalgos","id":"204754e6-6145-44fd-877f-6373b2c9caa1","savedPayload":{"position":{"x":19273.53332397723,"y":45101.243778291966},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"How Are Things Going?","config":"{\n \"subTitle\": \"How Are Things Going?\",\n \"gif\": \"\",\n \"image\": \"sensor-bot-instance\",\n \"definition\": \"I just dragged you deep into the confines of the Data Mining operation. See the progress of the ->Sensor Bot Instance-> to your right!\",\n \"paragraph1\": \"The sensor bot is currently extracting data from the exchange. As soon as she completes the extraction for the defined datetime range something really cool will happen... automatically!\",\n \"callOut\": \"Can you guess what that may be?\",\n \"paragraph2\": \"I won't tell you! You'll find out soon... be patient! It should take no longer than 3 to 5 minutes to extract the data from Binance. Fine! Click Next for a quick hint!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"bc5ee6e3-62d6-481d-8eb9-5061e93fcf32","savedPayload":{"position":{"x":19147.51304385362,"y":45145.340181491454},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","id":"d244c564-4e86-43c7-9796-dc3b6294ec8b"}}},{"type":"Tutorial Step","name":"Candles Volumes in Action","config":"{\n \"subTitle\": \"Candles Volumes in Action\",\n \"gif\": \"\",\n \"image\": \"indicator-bot-instance\",\n \"definition\": \"That's right! Indicators will start working as soon as the sensor bot finishes her job!\",\n \"paragraph1\": \"You're watching the processes of Candles Volumes. She turns the one-minute candles the sensor bot downloads from the exchange into candles for all time frames.\",\n \"callOut\": \"What happens after Candles Volumes finishes?\",\n \"paragraph2\": \"Other bots need Candles Volumes to finish her work so that they may start doing theirs. Imagine a bot needs to calculate a 20-periods Simple Moving Average for all time frames. She needs the ->Data Product-> produced by Candles Volumes as input for the SMA calculation. We call such a need a ->Data Dependency->.\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"c04422c9-b9b5-491d-9d69-7c12c5d48a46","savedPayload":{"position":{"x":19014.83998243608,"y":45130.391517615986},"targetPosition":{"x":19113.923701022628,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","id":"f0ef12ed-f0fd-4b88-8e15-27cf24265a5f"}}}],"tutorialTopics":[],"id":"acb0a041-37aa-49d3-b221-66ca76b7d874","savedPayload":{"position":{"x":19113.923701022628,"y":44847.22651852348},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Control Basics","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Moving Around","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Click & Drag Baby!","config":"{\n \"subTitle\": \"Click & Drag Baby!\",\n \"gif\": \"\",\n \"image\": \"hand-drag\",\n \"definition\": \"I want to show you something while the data mining operation progresses. I'll teach you how to walk... in two seconds!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Just click and drag with your mouse!\",\n \"paragraph2\": \"Easy, right? Great!

However, the design space is a huge place and I wouldn't want you to get tendinitis dragging your way around like this. I'll teach you a couple more tricks in the next couple of steps.\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"c01bc5ad-0d8a-4678-b415-32d08149af10","savedPayload":{"position":{"x":19649.596016681535,"y":45620.78800550081},"targetPosition":{"x":19151.9778734982,"y":45568.417341617576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Time to Take Control!","config":"{\n \"subTitle\": \"Time to Take Control!\",\n \"gif\": \"\",\n \"image\": \"key-ctrl\",\n \"definition\": \"Yes! You may use your keyboard too! You are going to love this for long-distance travel on the design space!\",\n \"paragraph1\": \"Here's the trick:\",\n \"callOut\": \"Regular folks may use the Ctrl key plus arrow keys: ← → ↑ ↓\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Of course Mac fanboys and fangirls must replace Ctrl with Command\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"da5d7044-7add-4cec-8602-60cba9f5964f","savedPayload":{"position":{"x":19523.81809404447,"y":45903.26572817753},"targetPosition":{"x":19151.9778734982,"y":45568.417341617576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Spacetime Teleportation!","config":"{\n \"subTitle\": \"Spacetime Teleportation!\",\n \"gif\": \"\",\n \"image\": \"mouse-right-click\",\n \"definition\": \"Ok, you're not actually going to be teleporting, nor will you bend spacetime, but it almost feels like it! It's time to learn to use the design space map.\",\n \"paragraph1\": \"I said earlier that the design space is huge, and I meant it! Going from one corner to the opposite would take hundreds of clicks and drags. While using the keyboard allows you to develop neck-breaking speeds, it's not as cool as teleporting! This is how it works:\",\n \"callOut\": \"Right-click to open the map and left-click anywhere on the map to go to that specific spot!\",\n \"paragraph2\": \"Look at me on the bottom-left corner of the design space? Now you know where to find me!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"56422b6d-9194-426a-844b-bc305ae93799","savedPayload":{"position":{"x":19256.09697828514,"y":46057.8865416851},"targetPosition":{"x":19151.9778734982,"y":45568.417341617576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Warp-Speed Zooming!","config":"{\n \"subTitle\": \"Warp-Speed Zooming!\",\n \"gif\": \"\",\n \"image\": \"mouse-wheel-down\",\n \"definition\": \"There's one more tool that you may find useful to manipulate spacetime! The native browser zoom function!\",\n \"paragraph1\": \"Sometimes you may wish to visualize larger sections of hierarchies than your screen allows.\",\n \"callOut\": \"Hit Ctrl and scroll the wheel of your mouse!\",\n \"paragraph2\": \" \",\n \"note\": \"\",\n \"tip\": \"Chrome indicates the level of zoom on the top-right corner. When zooming in or out, the design space gets centered on the screen. After applying the desired level of zoom, use the design space map to go back where you were.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"ab46d3df-1c4b-4520-a042-d022945134e7","savedPayload":{"position":{"x":18949.145878111103,"y":46025.543823771426},"targetPosition":{"x":19151.9778734982,"y":45568.417341617576},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"595cc636-c692-401c-9d45-a954146f4679","savedPayload":{"position":{"x":19051.791666666664,"y":45194.90210530285},"targetPosition":{"x":18901.791666666664,"y":44935.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Tutorials & Help","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"A Bit About Tutorials","config":"{\n \"subTitle\": \"A Bit About Tutorials...\",\n \"gif\": \"\",\n \"image\": \"tutorial\",\n \"definition\": \"Before we get back to business, let me tell you a few things about how we—tutorials—work.\",\n \"bulletListIntro\": \"This is likely the most important bit:\",\n \"bulletArray\": [\n [\n \"You are the boss!\",\n \" You may stop a tutorial and skip steps—or entire topics—at any point. Once you're ready to pick up the lesson again, find us on the bottom-left corner of the design space. Select Resume on the menu to start where you left, or on the first step skipped. Select Play to start from the beginning!\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Let's try that! Click the Stop button below, and once I'm gone, open my menu and select Resume.\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"82087d62-2c6a-4336-b974-6ecf06d1485b","savedPayload":{"position":{"x":18829.43738019742,"y":45484.67985318957},"targetPosition":{"x":18751.791666666664,"y":45194.90210530285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Tutorial","name":"Welcome to Superalgos!","id":"6f36f540-8de9-4458-b2c7-875884121b87"}}},{"type":"Tutorial Step","name":"Need a Quick Reminder?","config":"{\n \"subTitle\": \"Need a Quick Reminder?\",\n \"gif\": \"\",\n \"image\": \"key-left\",\n \"definition\": \"At this point, I'm probably overflowing your hippocampus! But don't worry... you may go back to any previous step!\",\n \"bulletListIntro\": \"If you ever need a reminder about any of these topics...\",\n \"bulletArray\": [\n [\n \"Find a ->Tutorial Topic-> and replay it!\",\n \" You may find me on the bottom-left corner of the design space, expand me, browse through the hierarchy of topics and steps, and click Play on any of them. Topics are arranged in a clockwise direction, starting from the right-hand side of the main ->Tutorial-> node.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Find the Need a Quick Reminder? step under the Tutorials & Help topic below. Then click Stop, and restart by clicking Play on the said ->Tutorial Step->!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"5d1d848b-4633-4b70-8cb0-01b527a99d23","savedPayload":{"position":{"x":18601.791666666664,"y":45454.70972643818},"targetPosition":{"x":18751.791666666664,"y":45194.90210530285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Tutorial","name":"Welcome to Superalgos!","id":"6f36f540-8de9-4458-b2c7-875884121b87"}}},{"type":"Tutorial Step","name":"Hungry For More Info?!","config":"{\n \"subTitle\": \"Hungry For More Info?\",\n \"gif\": \"\",\n \"image\": \"help\",\n \"definition\": \"I won't go into every detail as we move along, but if you need more info on a node, the help button on the menu takes you straight to its documentation.\",\n \"bulletListIntro\": \"The documentation of a node may include one or more of the following sections:\",\n \"bulletArray\": [\n [\n \"Definition:\",\n \" describes what the node is or does.\"\n ],\n [\n \"Content:\",\n \" describes how the node works.\"\n ],\n [\n \"Adding:\",\n \" describes how to add the node.\"\n ],\n [\n \"Configure:\",\n \" goes through the node's configuration.\"\n ],\n [\n \"Start:\",\n \" for nodes that may be started or stopped.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Click the help button on the ->Data Mining-> node!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"530a357e-59e6-4c88-b5da-5500e8bed6a8","savedPayload":{"position":{"x":18462.013918779943,"y":45272.547818833606},"targetPosition":{"x":18751.791666666664,"y":45194.90210530285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}}],"tutorialTopics":[],"id":"b230cbd7-658c-4a1c-b772-90462da2afaa","savedPayload":{"position":{"x":18751.791666666664,"y":45194.90210530285},"targetPosition":{"x":18901.791666666664,"y":44935.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"abde1c6f-1863-4752-9146-acda3dcfb987","savedPayload":{"position":{"x":18901.791666666664,"y":44935.094484167515},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Explore Data Mining","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Back to Work!","config":"{\n \"subTitle\": \"Ok... Back to Work!\",\n \"gif\": \"\",\n \"image\": \"data-mining\",\n \"definition\": \"Now that you're comfortable moving around, I want you to go on a little tour exploring the ->Data Mining-> section of the hierarchy.\",\n \"bulletListIntro\": \"Notice the following:\",\n \"bulletArray\": [\n [\n \"The section is organized—first and foremost—by exchange and market.\",\n \" This will help you work with multiple exchanges and multiple markets in an orderly fashion.\"\n ],\n [\n \"The ->Exchange Data Tasks-> and ->Market Data Tasks-> nodes\",\n \" may control all tasks in the exchange and market respectively.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Go out and check those nodes and their menus!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"20adac13-77a2-4694-a064-0851ae86b20b","savedPayload":{"position":{"x":18788.74335089725,"y":45130.391517615986},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"The Magic of Data Mines","config":"{\n \"subTitle\": \"The Magic of Data Mines\",\n \"gif\": \"\",\n \"image\": \"data-mine-tasks\",\n \"definition\": \"Within each market, the operation is organized by ->Data Mine->. Superalgos ships with several open-source data mines, each with multiple indicators.\",\n \"paragraph1\": \"Think of data mines as plugins that developers may create to extend the data analysis capacity of the system. An ->Indicator Bot-> may process data other indicators produce, hence adding value and producing deeper and richer analysis.\",\n \"callOut\": \"If you have a basic understanding of JavaScript, you may create indicators too!\",\n \"paragraph2\": \"But I'm getting ahead of myself talking about building data mines at this point! Let's get back on track!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"18b58454-4ed5-4c3c-939b-d1f87742a7a1","savedPayload":{"position":{"x":18656.070289479707,"y":45145.340181491454},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mine Tasks","name":"Masters","id":"85224e5e-f3ee-4e8d-b9bd-e5901bd49b33"}}},{"type":"Tutorial Step","name":"The Core of Data Mining","config":"{\n \"subTitle\": \"At the Core of Data Mining\",\n \"gif\": \"\",\n \"image\": \"task\",\n \"definition\": \"The core of a data mining operation are tasks running bots. One ->Task-> controls one bot, and a ->Task Manager-> may control multiple tasks.\",\n \"paragraph1\": \"Buy now you've learned about six different devices that you may use to control each bot in your data mining operation. At the highest level, the ->Data Mining-> node controls all data mining bots in the ->Network Node->.\",\n \"callOut\": \"We'll talk about network nodes in a minute...\",\n \"paragraph2\": \"At the lowest level, an individual task controls a single bot. The nodes in between are organizational nodes that help keep the operation orderly, and allow granular control over the different sections.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"22c05bc7-0d7b-42b7-9c5c-73376a7a9c97","savedPayload":{"position":{"x":18530.0500093561,"y":45101.243778291966},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Task","name":"Exchange Raw Data","id":"a8f38508-1cac-4ab1-815f-d338fc813377"}}},{"type":"Tutorial Step","name":"Are We Up to Date?","config":"{\n \"subTitle\": \"Are We Up to Date?\",\n \"gif\": \"\",\n \"image\": \"indicator-process-instance\",\n \"definition\": \"By now, all processes should be at 100%. When that happens, we refer to the data mining operation as being up to date.\",\n \"paragraph1\": \"When all processes are up to date, the bots keep running, processing information in realtime as it is produced at the exchange. That is, the data mining operation doesn't stop unless you stop it!\",\n \"callOut\": \"Look around and see if all processes are at 100%\",\n \"paragraph2\": \"To run a ->Live Trading Session->, you need a constant feed of information from the exchange, being processed in realtime, so that the ->Trading Bot-> may apply the rules of your ->Trading System-> to make live trading decisions.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"ad16ed9d-91fe-4f44-8c20-8c257b65cc9c","savedPayload":{"position":{"x":18435.642372542214,"y":45006.83614147808},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Time to Stop!","config":"{\n \"subTitle\": \"Time to Stop!\",\n \"gif\": \"\",\n \"image\": \"stop\",\n \"definition\": \"We are not going to run a ->Live Trading Session-> just yet, so there is no point in keeping our data mining running at this point.\",\n \"bulletListIntro\": \"There are two main reasons to run a data mining op:\",\n \"bulletArray\": [\n [\n \"To process historic data.\",\n \"You may want to process a datetime range of any given ->Market-> to run a ->Backtesting Session->, or to process new indicators.\"\n ],\n [\n \"To run a live session.\",\n \"Live sessions (->Paper Trading Session->, ->Forward Testing Session->, and ->Live Trading Session->) need a live market feed.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"If all processes are up to date, then select Stop All Tasks in the Masters ->Task Manager->\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"dc68fa92-dee8-4d89-8add-893084d24afa","savedPayload":{"position":{"x":18391.54596934273,"y":44880.81586135447},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Task Manager","name":"Masters","id":"c193ecbb-c3e0-4fd5-94ed-bb6356d1d5ea"}}},{"type":"Tutorial Step","name":"Careful With Your Data","config":"{\n \"subTitle\": \"Careful With Your Data!\",\n \"gif\": \"\",\n \"image\": \"dataset-definition\",\n \"definition\": \"It may take up to one minute for all tasks to come to a halt. You should never close the system before all tasks stop.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Take another quick look at the console app to see how tasks get stopped!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"Closing the backend before tasks stop may cause your data to become corrupt.\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"e2d919b0-de13-418a-a859-c354ab00e098","savedPayload":{"position":{"x":18406.49463321819,"y":44748.142799936926},"targetPosition":{"x":18689.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"07d273cd-95b0-4c7e-b81f-8c9c26041598","savedPayload":{"position":{"x":18689.6596323107,"y":44847.22651852348},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Charting Space","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"The Viewport","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"The Other Dimension","config":"{\n \"subTitle\": \"The Bright Side\",\n \"gif\": \"\",\n \"image\": \"charting-space\",\n \"definition\": \"So far, you've been confined to the dark side of Superalgos. Get ready to be exposed to the bright side: the ->Charting Space->.\",\n \"paragraph1\": \"The charting space lives on top of the design space, separated by a turquoise slider.\",\n \"callOut\": \"\",\n \"paragraph2\": \"As you will come to expect from Superalgos, the charting space is configurable and highly flexible. Everything that happens there is defined on the ->Charting Space-> hierarchy.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"The charting space is known for blowing people's minds. Please, refrain from continuing with this tutorial if you are currently under the influence of psychoactive substances.\",\n \"position\": \"Left\",\n \"slider\": \"toMiddle\",\n \"useReferenceParentTo\": \"Position at Node\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"6a04a6a7-2c77-4fc0-9aab-2355183e9de5","savedPayload":{"position":{"x":18525.856782232564,"y":45114.52847577999},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Charting Space","name":"New Charting Space","id":"21d2ec55-9e56-4652-8e96-c7e451262c36"}}},{"type":"Tutorial Step","name":"Break On Through","config":"{\n \"subTitle\": \"Break On Through!\",\n \"gif\": \"\",\n \"image\": \"full-board\",\n \"definition\": \"I'll get you up to speed with moving around and browsing the charting space in no time... Let's deal with the slider first!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Click it and drag it down to close the design space and open the charting space. Do the opposite for the reversed effect. To do it with the keyboard, hit Ctrl + Shift + ↓. Try ↑ ← → too!\",\n \"paragraph2\": \"\",\n \"note\": \"Unless you need both spaces to be partially open, it's always a good idea to fully close either of them to save computing resources in your machine.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"31192a2d-e45f-45ee-9f78-53aef9f1e4c2","savedPayload":{"position":{"x":18436.58997182277,"y":45143.53302070202},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Navigating the White Room","config":"{\n \"subTitle\": \"Navigating the White Room\",\n \"gif\": \"\",\n \"image\": \"mouse-right-click\",\n \"definition\": \"Just like the design space, the charting space features a huge area where you may set up charts... as many as your hardware can cope with! \",\n \"paragraph1\": \"There are only two charts in this default ->Workspace->, to keep things simple for newcomers. Advanced users monitor charts from multiple exchanges and multiple markets.\",\n \"callOut\": \"To move around the charting space, click and drag using your mouse.

The keyboard combination is Shift plus the arrow keys ↑ ← → ↓\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"repositionAtTimeMachineNoZoomReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"8c9f537d-1b51-41b0-abb8-fdcaf8db5224","savedPayload":{"position":{"x":18342.72929279863,"y":45143.53302070202},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Talkin Time Travel","config":"{\n \"subTitle\": \"Talkin' Time Travel\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"I mentioned earlier there are two charts in this workspace. In Superalgos, we call each of these a ->Time Machine->.\",\n \"paragraph1\": \"A time machine may hold one ->Timeline Chart-> or more. We call them time machines because all timeline charts within a time machine are synchronized in time. This feature of time machines allows to superimpose different layers of data sharing the same ->Time Scale->.\",\n \"callOut\": \"Hover your mouse pointer over the time machines!\",\n \"paragraph2\": \"Notice the label emerging on the left-hand side showing which exchange and market the data is associated with. A single time machine may hold data from multiple markets and multiple exchanges!\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"repositionAtTimeMachineNoZoomReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"2f4e6515-64e4-40ab-b894-5cb2468cad2c","savedPayload":{"position":{"x":18253.462482388837,"y":45114.52847577999},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Bending Time?","config":"{\n \"subTitle\": \"Bending time?\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"Ok... maybe it's not actually like bending, but, bear with me... You'll love how you can shape time machines to whatever format you wish.\",\n \"paragraph1\": \"Hover your mouse pointer over any of the edges of the turquoise frame defining the time machine and see what happens. See how the edge is highlighted in yellow?\",\n \"callOut\": \"Cool! Now, left-click the frame and pull!\",\n \"paragraph2\": \"\",\n \"note\": \"This is how you may shape time machines to your liking.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"88985962-8763-415e-a06e-362faaf83c3a","savedPayload":{"position":{"x":18177.527597954737,"y":45059.35855287944},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Size Matters?","config":"{\n \"subTitle\": \"Size Matters?\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"How about shaping the time machine to the exact aspect ratio of your screen?\",\n \"paragraph1\": \"Matching the aspect ratio of your time machines to the aspect ratio of your screen is crucial for charts to fit your screen tightly!\",\n \"callOut\": \"Point your mouse at one of the time machines and hit Ctrl + Shift + A. Do the same with the other one!\",\n \"paragraph2\": \"\",\n \"tip\": \"From now on, leave the time machines matching your screen... it'll work best for our ride!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"5dce35cc-5f3c-4f2d-b8f1-979ac03ddfa2","savedPayload":{"position":{"x":18122.35767505419,"y":44983.42366844534},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Putting Things in Order","config":"{\n \"subTitle\": \"Putting Things in Order\",\n \"gif\": \"\",\n \"image\": \"hand-drag\",\n \"definition\": \"One more thing before we dive into the charts. You need to know how to put the house in order!\",\n \"paragraph1\": \"The time will come in which you may be working with tens of charts. You already know how to change their format... Now you need to know how to move them around, so that you may create whatever arrangements you require. It's quite easy:\",\n \"callOut\": \"Hit Shift left-click, and drag!\",\n \"paragraph2\": \"I believe we've covered everything about how to manage the charting space. It's time to dive into the charts!\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" }","project":"Superalgos","id":"9cded7dd-5236-4000-9b0f-d576fa185734","savedPayload":{"position":{"x":18093.35313013216,"y":44894.156858035545},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Get In the Wormhole!","config":"{\n \"subTitle\": \"Get In the Wormhole!\",\n \"gif\": \"\",\n \"image\": \"mouse-wheel-up\",\n \"definition\": \"It's time to dive into a ->Time Machine-> and see what happens! Are you ready for a full-on immersive experience?\",\n \"paragraph1\": \"The charting space is like the Google Maps of market charts. As you already know, you left-click and drag to move around the landscape... but, how do you zoom in to see the details?\",\n \"callOut\": \"With the wheel of the mouse! Try it!\",\n \"paragraph2\": \"Exactly! Just like in Google Maps! Point the mouse to the area of interest, then roll the wheel of the mouse forwards to zoom in, and backward to zoom out!\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"ad3ff699-7830-478b-8b62-b3b0af7d0134","savedPayload":{"position":{"x":18093.35313013216,"y":44800.29617901141},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Dashboard","name":"Production Environment My Computer","id":"abc16155-6614-4397-bf7e-ab4a0ff7c1a4"}}},{"type":"Tutorial Step","name":"The Elegant Way...","config":"{\n \"subTitle\": \"The Elegant Way...\",\n \"gif\": \"\",\n \"image\": \"mouse-pointer\",\n \"definition\": \"I know! Zooming into a random spot is unlikely to position the chart squared with your screen, right? No worries...\",\n \"paragraph1\": \"I'll show you how to get into a chart so that everything fits nicely. First, use the Ctrl + Shift + A keys to adjust the aspect ratio to fit your screen. Then, zoom out fully with your mouse. From this position...\",\n \"callOut\": \"Double-click on the time machine on top! Twice!\",\n \"paragraph2\": \"The first double-click centers the chart, and takes you to a certain level of zoom; some margin is left to fit the name of the chart and the tab on the top-left corner. The second double-click takes you all the way in, to the zoom level on which layer managers emerge.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"keyPressedTimeMachineReferenceParent\": {\n \"shiftKey\": true,\n \"ctrlKey\": true,\n \"metaKey\": true,\n \"code\": \"ArrowRight\",\n \"key\": \"A\"\n },\n \"repositionAtTimeMachineNoZoomReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"dcb0863d-fdce-4620-a41a-ebdf5fa15989","savedPayload":{"position":{"x":18122.35767505419,"y":44711.029368601616},"targetPosition":{"x":18389.6596323107,"y":44847.22651852348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}}],"tutorialTopics":[],"id":"37f74e1d-2e40-409e-8475-b3d990cd7211","savedPayload":{"position":{"x":18389.6596323107,"y":44847.22651852348},"targetPosition":{"x":18601.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"The Charts","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Navigation & Scales","config":"{ \n \"title\": \" \",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Moving in Wonderland","config":"{\n \"subTitle\": \"Moving in Wonderland\",\n \"gif\": \"\",\n \"image\": \"mouse-left-click\",\n \"definition\": \"So, you are finally inside a chart. The first thing you'll want to do is move around and learn what these charts may do for you.\",\n \"paragraph1\": \"Let's get on with that! Like in the design space—when inside a time machine—you move by using your mouse and your keyboard. This is how: \",\n \"callOut\": \"With the mouse, left-click and drag. With the keyboard, use the arrow keys: ← → ↑ ↓\",\n \"paragraph2\": \"\",\n \"note\": \"What? It's not working? Are you stuck with a frozen chart? Like in the video on the next step? Don't worry! I know what's going on...\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"keyPressedTimeMachineReferenceParent\": {\n \"shiftKey\": true,\n \"ctrlKey\": true,\n \"metaKey\": true,\n \"code\": \"ArrowRight\",\n \"key\": \"A\"\n },\n \"repositionAtTimeMachineReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"6643c200-4d20-4e65-9fa6-93f60d7eb16b","savedPayload":{"position":{"x":18148.075566510575,"y":45222.40968991311},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-scales-auto-locked\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"23a3914b-29e2-40c9-9356-395699ce655c","savedPayload":{"position":{"x":18027.709470784208,"y":45084.75468592242},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Unlocking Time!","config":"{\n \"subTitle\": \"Unlocking Time!\",\n \"gif\": \"\",\n \"image\": \"time-scale\",\n \"definition\": \"The reason why you can't move is that scales are locked in the automatic mode so that you may easily find the data after your first data mining operation.\",\n \"paragraph1\": \"Setting the ->Time Scale-> in automatic mode forces the whole datetime range of available data into the chart.\",\n \"callOut\": \"To toggle between the various automatic modes and manual mode, hit Shift and make a gentle one-step roll with the wheel of your mouse on top of the time scale box.\",\n \"paragraph2\": \"Once you've taken care of that, you should be able to move freely on the X-axis, that is, the time axis of the chart. See the video on the next step for clarity.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"365c119b-2ce9-47b9-826e-f942134d6bbc","savedPayload":{"position":{"x":17894.803462038493,"y":45210.344852589114},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-scales-unlock-time-scale\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"51b4c5ac-f874-4814-9bce-31a0fd7949ee","savedPayload":{"position":{"x":17867.96697265997,"y":45029.46726978262},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Scaling Time!","config":"{\n \"subTitle\": \"Scaling Time!\",\n \"gif\": \"\",\n \"image\": \"time-scale\",\n \"definition\": \"Did you pick up the trick to scale time from the previous video? If not, go to the previous step and watch attentively!\",\n \"paragraph1\": \"That's it! Scroll it, my friend!\",\n \"callOut\": \"Scrolling the wheel of the mouse on top of the time scale box shrinks and expands time!\",\n \"paragraph2\": \"\",\n \"note\": \"There's one more interesting detail worth noting in the previous video: when the time scale exits the automatic mode, the two tiny green triangles indicating each end of the automatic scale disappear!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"a277338e-20c4-4608-bed1-4aa09c40491d","savedPayload":{"position":{"x":17688.260152897077,"y":45063.26602796679},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Playing With the Rate Scale!","config":"{\n \"subTitle\": \"Playing with the Rate Scale!\",\n \"gif\": \"\",\n \"image\": \"rate-scale\",\n \"definition\": \"Do I need to tell you how the ->Rate Scale-> works or can you figure it out on your own? Ok... I'll give you a hint...\",\n \"paragraph1\": \"\",\n \"callOut\": \"The rate scale works like the time scale! Check the video coming next for clarity!\",\n \"tip\": \"Play with the semi-automatic scale modes too! You know, when a single tiny triangle remains visible after a few flicks of the mouse wheel.\",\n \"note\": \"There's one more scale to work with. I'll tell you all about it after the video.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"documentationURL\": \"\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"2650860c-ce1a-4a1c-af5c-29742a5ab23c","savedPayload":{"position":{"x":17763.47366562651,"y":44896.593220865616},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-scales-unlock-rate-scale\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"0ff92017-1558-4587-8619-78fe07025467","savedPayload":{"position":{"x":17594.021680373444,"y":44827.869703654396},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"No Lock on Time Frames!","config":"{\n \"subTitle\": \"Time Frames Salad?\",\n \"gif\": \"\",\n \"image\": \"time-frame-scale\",\n \"definition\": \"News-flash about the ->Time Frame Scale->: there is no automatic mode!\",\n \"paragraph1\": \"You may freely toggle through all available time frames! In descending order: 24, 8, 6, 4, 3, 2, and 1 hours, and 45, 40, 30, 20, 15, 10, 5, 4, 3, 2, and 1 minutes.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"Beware when you switch the time frame scale to lower time frames! Dropping time frames too fast and without adjusting the time scale may cause too much information to be rendered on-screen at a time, slowing down your computer. How much information density your hardware may handle depends on its CPU and GPU performance.\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"32d93242-2796-4ab5-b182-da48a5f3cdce","savedPayload":{"position":{"x":17747.40543635252,"y":44728.31911085939},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-scales-time-frame-scale\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"af446d58-735f-4f02-a22e-60afd853bd93","savedPayload":{"position":{"x":17642.008093636618,"y":44578.892549390184},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Scales' Best-Kept Secrets","config":"{\n \"subTitle\": \"Scales' Best-Kept Secrets\",\n \"gif\": \"\",\n \"image\": \"balance\",\n \"definition\": \"You just learned the basics about the three scales governing the charts, but there's more!\",\n \"paragraph1\": \"Remember I mentioned that a ->Time Machine-> may feature multiple charts from multiple exchanges and markets? There is no limit as to how you may visualize data in Superalgos, and scales play a major role in more complex configurations than the ones we are exploring at this point.\",\n \"callOut\": \"If you wish to learn all the details, feel free to go through the Scale Boxes section of the documentation.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"https://docs.superalgos.org/suite-scale-boxes.html\" \n}","project":"Superalgos","id":"79f7a1e7-b211-452c-b60f-61653fab957a","savedPayload":{"position":{"x":17824.86383409981,"y":44578.07078072288},"targetPosition":{"x":18041.98404553133,"y":44785.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"7d8a4998-6575-4261-b37a-14c44956c4c8","savedPayload":{"position":{"x":18041.98404553133,"y":44785.094484167515},"targetPosition":{"x":18301.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Layers & Managers","config":"{ \n \"title\": \" \",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Switching Gears","config":"{\n \"subTitle\": \"Switching Gears...\",\n \"gif\": \"\",\n \"image\": \"layer-manager\",\n \"definition\": \"Leaving scales behind, let's take a look at how the system makes data available on the charts.\",\n \"paragraph1\": \"Every ->Timeline Chart-> has an associated ->Layer Manager->, which is represented as a drop-down menu listing multiple layers.\",\n \"callOut\": \"To open a layers manager, scroll the wheel of the mouse on its header. Use the wheel of the mouse to scroll through its content too!\",\n \"paragraph2\": \"See the video on the next step for clarity...\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"fdb608ad-eea0-42a7-abaa-adab5dfb7df5","savedPayload":{"position":{"x":17794.112413236533,"y":44654.0905015866},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-layer-managers-scroll\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"8b9a4e1e-dc3a-4f4e-87c5-579f7cc04f55","savedPayload":{"position":{"x":17745.334797663792,"y":44529.80716402037},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Layers on Top of Layers","config":"{\n \"subTitle\": \"Layers on Top of Layers\",\n \"gif\": \"\",\n \"image\": \"layer\",\n \"definition\": \"Your data mining operation features bots making data products. Each product is made available on the charts through a ->Layer-> in a layers manager.\",\n \"paragraph1\": \"The first layer manager to the left of this time machine features three layers. Those layers represent the data products that the ->Trading System-> we are going to test later on uses to make trading decisions.\",\n \"callOut\": \"To turn layers on and off, left-click on them!\",\n \"paragraph2\": \"\",\n \"note\": \"Superalgos ships with many more indicator bots, but we are not using them for this tutorial. You will learn about them later!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"bf48b83f-67dc-4dc4-b6d1-23b94bc26b40","savedPayload":{"position":{"x":17755.31220379549,"y":44396.66793184425},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-layer-on\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"9875e052-3270-49b1-8d63-7c1172fbeeae","savedPayload":{"position":{"x":17822.068483982384,"y":44281.04266283624},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"The Hard Data","config":"{\n \"subTitle\": \"The Hard Data\",\n \"gif\": \"\",\n \"image\": \"plotter-panel\",\n \"definition\": \"A ->Plotter Panel-> features non-graphical representations of data, mostly in the form of numerical values or text.\",\n \"paragraph1\": \"Each layer may or may not feature one or more associated panels. It's up to the developer of the corresponding ->Indicator Bot-> to define them or not.\",\n \"callOut\": \"To access panels, left-click on the plotter panel icon of the layer of choice.\",\n \"paragraph2\": \"\",\n \"tip\": \"You may move layers managers and plotter panels by left-clicking on their headers and dragging them to any corner of the screen.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"4f20424d-85a0-4dc4-afea-b611107942a5","savedPayload":{"position":{"x":17932.38173822141,"y":44205.832359574255},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-charts-layer-panels\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\"\n}","project":"Superalgos","id":"d5ff12ca-f763-4291-846a-7dec3d9b1d4f","savedPayload":{"position":{"x":18064.40307360726,"y":44185.93334501316},"targetPosition":{"x":18041.98404553133,"y":44485.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"14ecf560-9e64-4af8-911e-317cc3cd397a","savedPayload":{"position":{"x":18041.98404553133,"y":44485.094484167515},"targetPosition":{"x":18301.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"78e702e2-fad8-4ae4-8341-8deb43c6cab8","savedPayload":{"position":{"x":18301.791666666664,"y":44635.094484167515},"targetPosition":{"x":18601.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Setup Overview","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Back in Time","config":"{\n \"subTitle\": \"Back in Time\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"This is the ->Charting Space-> hierarchy setup of the ->Time Machine-> we've been playing with on the charts.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Spend a few minutes exploring these definitions! Take a peek at different node's menus!\",\n \"paragraph2\": \"I hope the structure of nodes is intuitive enough to grasp how powerful the concept of the design space is. You set up a time machine by adding timeline charts nodes and the desired scales. Then set up layer managers and layers referencing the corresponding ->Data Mine Products-> so that the desired data becomes available on a particular layers manager on the charts. It's like the Legoland® of trading charts!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"855e28cc-8651-4ad6-a8fa-bf792f170c57","savedPayload":{"position":{"x":18089.6596323107,"y":44422.96244981155},"targetPosition":{"x":18389.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Visual Scripting on Steroids","config":"{\n \"subTitle\": \"Visual Scripting on Steroids\",\n \"gif\": \"\",\n \"image\": \"indicator-bot\",\n \"definition\": \"Talking about block-building, we are now in the confines of the Masters ->Data Mine->. To your left, the definition of one of the bots you sent mining minutes ago.\",\n \"paragraph1\": \"Pretty much like with the Lego-like definitions of the ->Charting Space->, bots are too defined on a visual environment.\",\n \"callOut\": \"All developers need to code is the actual ->Data Building Procedure->.\",\n \"paragraph2\": \"Everything else is defined on a visual setting: processes with their dependencies, outputs and so on, and products, with their record and dataset definitions, etc.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"2dfc697d-48b0-49bb-8760-3c3a76b56916","savedPayload":{"position":{"x":18177.527597954737,"y":44210.83041545559},"targetPosition":{"x":18389.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Product Definition","name":"Resistances","id":"7a734501-a0fb-4305-803e-7e95d477c513"}}},{"type":"Tutorial Step","name":"Plotters Magic","config":"{\n \"subTitle\": \"Plotters Magic!\",\n \"gif\": \"\",\n \"image\": \"plotter\",\n \"definition\": \"And this is how plotters are built! Plotters create graphical representations of data... from candles, to everything else!\",\n \"paragraph1\": \"Again, visual scripting at its best! Plotters use stylized polygons made out of coordinate points to paint lines and shapes that represent data. Every layer made available on the charts is created with a set of definitions of the sort you are looking at right now. The particular case of the Resistances and Supports bot is a rather complex one, but does showcase the power of the tool!\",\n \"callOut\": \"Find the Resistance Zone 5 ->Polygon-> (to the right), expand it, and crawl your way up the branches for a sneak peek of how this beauty was built!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"086416b2-3bf6-4e35-8e26-7e89dd75cf74","savedPayload":{"position":{"x":18389.6596323107,"y":44122.96244981155},"targetPosition":{"x":18389.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Polygon","name":"Resistance Zone 5","id":"550e31bb-a95f-4fad-bfbb-b42aae7dc5d3"}}}],"tutorialTopics":[],"id":"2e9878b3-ebe5-48bb-8f97-2dfd8f6ac3e0","savedPayload":{"position":{"x":18389.6596323107,"y":44422.96244981155},"targetPosition":{"x":18601.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"6d0ab467-3134-4ba8-b37c-b3a9f5ba7638","savedPayload":{"position":{"x":18601.791666666664,"y":44635.094484167515},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Backtesting","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Network","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Let's Do Some Testing!","config":"{\n \"subTitle\": \"Let's Do Some Testing!\",\n \"gif\": \"\",\n \"image\": \"testing-environment\",\n \"definition\": \"We are back on the ->Network-> hierarchy to show you one of the core strategy-testing resources built-in the ->Trading Bot->.\",\n \"paragraph1\": \"But before you run your first ->Backtesting Session->, let's go on a quick scouting mission to grasp how the ->Testing Environment-> is set up.\",\n \"callOut\": \"Expand the testing environment and look at the structure of nodes to the right... Looks Familiar?\",\n \"paragraph2\": \"Indeed! It resembles the ->Data Mining-> section: tasks are organized by exchange, market, and trading mine, so that you may test any number of strategies optimized for different markets, on multiple exchanges.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"db2ed6a0-ba47-4caa-b2f2-78172f44a002","savedPayload":{"position":{"x":18323.319520975387,"y":44761.603765442924},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Testing Environment","name":"New Testing Environment","id":"5882d8a8-345b-4188-b1c1-797e9ff805d9"}}},{"type":"Tutorial Step","name":"Aim High, Trade Big!","config":"{\n \"subTitle\": \"Aim High, Trade Big!\",\n \"gif\": \"\",\n \"image\": \"network-node\",\n \"definition\": \"Picture an army of bots working with multiple exchanges, markets, and strategies, running on a network ala trading farm.\",\n \"paragraph1\": \"That is what the ->Network Node-> is about. What you've seen so far is running on your local machine. But...\",\n \"callOut\": \"Superalgos supports distributing tasks across networks of nodes running the backend to be processed in a coordinated fashion, enabling smart and scalable operations. Any machine running the GUI may control the enterprise!\",\n \"paragraph2\": \"You may set up a network with a few Raspberry Pi, an industrial-grade datacenter—or anything in between.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"ff49ac75-5039-4f1f-9d05-826751b5e4e4","savedPayload":{"position":{"x":18217.017554444417,"y":44712.597887636104},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Network Node","name":"My Computer","id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4"}}},{"type":"Tutorial Step","name":"Machines Learn Too!","config":"{\n \"subTitle\": \"Machines Learn Too!\",\n \"gif\": \"\",\n \"image\": \"learning-mining\",\n \"definition\": \"Superalgos is constantly evolving, growing, and getting stronger. I heard this through the grapevine, I mean, on the Superalgos Develop group...\",\n \"paragraph1\": \"With upcoming Beta 7, you will be able to train a new type of Learning Bot running a reinforcement learning algorithm! You will feed the bot with data mined from any source, and the learning process will output a policy file describing how to make decisions. \",\n \"callOut\": \"And—of course—this intelligence will be available for consumption from within conditions and formulas in trading systems!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"9e657088-c8dc-40d4-b730-4d0fdc0e4f38","savedPayload":{"position":{"x":18137.561080825933,"y":44626.642358738405},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Learning Mining","name":"New Learning Mining","id":"1b19735e-0041-438f-824b-00df4f8942dd"}}},{"type":"Tutorial Step","name":"Civil Works Ahead!","config":"{\n \"subTitle\": \"Civil Works Ahead!\",\n \"gif\": \"\",\n \"image\": \"under-construction\",\n \"definition\": \"Please, do not be surprised to find an under construction sign here and there...\",\n \"paragraph1\": \"As I mentioned earlier, Superalgos is constantly growing, and infrastructure architected for the upcoming version may occasionally be merged to the current version in a service pack, along with necessary fixes and minor improvements.\",\n \"callOut\": \"If you are curious about what is cooking for the upcoming Superalgos release, join the Superalgos Develop Telegram group.\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"7f2ff93e-9799-423a-923f-5a2382731241","savedPayload":{"position":{"x":18097.04662795362,"y":44516.823128835684},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Enough Digressing!","config":"{\n \"subTitle\": \"Enough Digressing!\",\n \"gif\": \"\",\n \"image\": \"backtesting-session\",\n \"definition\": \"We'll run a ->Backtesting Session-> with a bunch of preconfigured parameters so that you may have a quick glimpse at how simulations work.\",\n \"paragraph1\": \"As you can see to the right, a trading session has a reference to a ->Trading System->. That is, the ->Trading Bot-> will apply the rules of the referenced trading system to make decisions. There's also a reference to a ->Trading Engine->—a subject worth its own chapter, so I'll leave it for later! \",\n \"callOut\": \"The trading session is affected by several parameters. Take a quick look at their configurations selecting Configure on the menu!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"57d77273-09c9-4800-acfd-148ebc9faf21","savedPayload":{"position":{"x":18101.642154012858,"y":44399.859180166844},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Backtesting Session","name":"Lightning Strike","id":"ce648922-fef2-44e3-8d76-2bd7ab72a29f"}}},{"type":"Tutorial Step","name":"What? When? How?","config":"{\n \"subTitle\": \"What? When? How?\",\n \"gif\": \"\",\n \"image\": \"trading-parameters\",\n \"definition\": \"->Trading Parameters-> determine key aspects of how the trading session is run. Let's take a quick, superficial look...\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": [\n [\n \"->Session Base Asset->:\",\n \" no capital is assigned in BTC.\"\n ],\n [\n \"->Session Quoted Asset->:\",\n \" 1000 USDT of initial capital.\"\n ],\n [\n \"->Time Range->:\",\n \" we'll test a single day, 2020-09-01.\"\n ],\n [\n \"->Time Frame->:\",\n \" orders are placed/canceled every minute, thus 01-min is appropriate.\"\n ],\n [\n \"->Slippage->:\",\n \"it's irrelevant for this case, as the trading system uses limit orders only.\"\n ],\n [\n \"->Fee Structure->:\",\n \"0.1% is the lower Binance tier.\"\n ]\n ],\n \"paragraph1\": \"The remaining parameters do not affect the simulation. To learn more about these ->Trading Parameters->, take a look at the documentation.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"https://docs.superalgos.org/suite-parameters.html\"\n}","project":"Superalgos","id":"0f48b2d4-48eb-4041-a9eb-4a257ca34fdd","savedPayload":{"position":{"x":18150.648031819677,"y":44293.557213635875},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Ready. Set. Go!","config":"{\n \"subTitle\": \"Ready. Set. Go!\",\n \"gif\": \"\",\n \"image\": \"task\",\n \"definition\": \"Let's get going! This is going to be quick anyway, as we are testing a single day worth of historic data.\",\n \"paragraph1\": \"Running a trading task is quite similar to running a data mining task. The difference lies in that—after running the task—you also need to run the trading session.\",\n \"callOut\": \"Select Run on the ->Task-> menu and then select Run on the ->Backtesting Session-> menu.\",\n \"paragraph2\": \"\",\n \"note\": \"When the progress notice of the ->Trading Process Instance-> get's to the 100% mark, stop the task and click Next.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"eca826de-b47a-4589-80bc-0fcf17b4af98","savedPayload":{"position":{"x":18236.603560717376,"y":44214.10074001739},"targetPosition":{"x":18393.35313013216,"y":44469.89278932362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Task","name":"Lightning Strike","id":"08222935-2499-4a3e-a927-4f5dfbc392df"}}}],"tutorialTopics":[],"id":"e3e4bbab-06a8-4ac2-945d-520d605c7c28","savedPayload":{"position":{"x":18393.35313013216,"y":44469.89278932362},"targetPosition":{"x":18689.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"On the Charts","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Trading System & Orders","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Getting to the Fun Bits","config":"{\n \"subTitle\": \"Getting to the Fun Bits!\",\n \"gif\": \"\",\n \"image\": \"time-machine\",\n \"definition\": \"I took the liberty of bringing you to a particular moment in time, interesting for what comes next.\",\n \"paragraph1\": \"You are about to be exposed to the beauty of simulations. Am I a simulation? Are you? Is this whole thing real?\",\n \"callOut\": \"Look around and decide for yourself!\",\n \"paragraph2\": \"First of all, notice you are now in the 1-minute time frame, thus, these are 1-minute candles. The span of time in your screen is little more than one hour, at the beginning of September 1st 2020.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"repositionAtTimeMachineReferenceParent\": true,\n \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.timeScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T23:40:00.000Z\",\n \"toDate\": \"2020-09-01T01:00:00.000Z\"\n }\n },\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 11400,\n \"maxValue\": 11800\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n }\n ],\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"c3854cd2-deb1-42ea-83ae-e2db25c94b8f","savedPayload":{"position":{"x":17959.377104123312,"y":44554.0672571462},"targetPosition":{"x":18122.76881462782,"y":44302.46608676257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"What Is It We Are Testing?","config":"{\n \"subTitle\": \"What Is It We Are Testing?\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"We've run a backtest but we haven't discussed the ->Trading System-> we are testing! Let's go through the basics!\",\n \"paragraph1\": \"The trading idea is buy the falling knife and sell the rebound. The strategy places a ->Limit Buy Order-> a distance below the price. If the order is not filled by the next minute, the order is canceled and a new order is placed, potentially at an adjusted rate. If the price drops suddenly, chances are the order will get filled. If that happens, then the strategy tries to sell at a higher price.\",\n \"callOut\": \"\",\n \"paragraph2\": \" \",\n \"note\": \"Let's not discuss the merits of the trading idea but the implementation. This is a demo to show off the capacities of the ->Trading Bot->, not the strategy per se.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f8027526-427e-4ab8-b1b8-2b3d1662d5d5","savedPayload":{"position":{"x":17842.69468667866,"y":44409.97647162616},"targetPosition":{"x":18122.76881462782,"y":44302.46608676257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Green Silver Bullets","config":"{\n \"subTitle\": \"Green Silver Bullets\",\n \"gif\": \"\",\n \"image\": \"bullet-limit-buy-order\",\n \"definition\": \"Do you see the green bullets with an L in the center? Those are the limit buy orders I mentioned.\",\n \"paragraph1\": \"Notice how an order is placed every minute and is canceled before a new order is placed. Do you recognize the symbol for the order cancellation? It's the smaller, darker bullet with a white horizontal stripe in the middle!\",\n \"callOut\": \"Notice the knife falling at 00:21 AM! The price fell well below the rate of the limit order, therefore, the order was filled! That is what the bigger—filled—green bullet indicates!\",\n \"paragraph2\": \"So... what happens afterward?\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.timeScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T23:40:00.000Z\",\n \"toDate\": \"2020-09-01T01:00:00.000Z\"\n }\n },\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 11400,\n \"maxValue\": 11800\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n }\n ],\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"c1622cba-b4f1-4bdd-adc5-d1f40045617f","savedPayload":{"position":{"x":17832.9910667411,"y":44224.820373231814},"targetPosition":{"x":18122.76881462782,"y":44302.46608676257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Sell It Quick!","config":"{\n \"subTitle\": \"Sell It Quick!\",\n \"gif\": \"\",\n \"image\": \"bullet-limit-sell-order\",\n \"definition\": \"I'm sure you noted there are no more limit buy orders after the order got filled. Instead, sell orders start popping up!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Notice how the first ->Limit Sell Order-> is placed at 00:22 AM, the minute after the buy order filled!\",\n \"paragraph2\": \"It's the same minute Superalgos would have gotten notice from the exchange that the order got filled. The ->Trading Bot-> connects with the exchange and goes through two distinct cycles. In the first ->Cycle->, it finds out the status of existing orders. In the second, it gives new instructions.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"bc79cac7-40bc-4c9c-b33d-88757ebd89e0","savedPayload":{"position":{"x":17933.972697312867,"y":44069.32229832548},"targetPosition":{"x":18122.76881462782,"y":44302.46608676257},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}}],"tutorialTopics":[],"id":"3b4175ca-1cc8-4945-bccc-2b9c895ebbfb","savedPayload":{"position":{"x":18122.76881462782,"y":44302.46608676257},"targetPosition":{"x":18422.35767505419,"y":44286.76529988969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Support","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Shall We Dig Deeper?","config":"{\n \"subTitle\": \"Shall We Dig Deeper?\",\n \"gif\": \"\",\n \"image\": \"layer-resistance\",\n \"definition\": \"The logic behind the placing of buy orders is influenced by the Resistances & Supports ->Indicator Bot-> from the Masters ->Data Mine-> you ran earlier.\",\n \"paragraph1\": \"I took the liberty to turn the Supports layer on to show you this beauty... I hope you don't mind!\",\n \"callOut\": \"The indicator identifies levels (price ranges) on which price is rejected, and keeps a counter of how many rejections occur until the level is breached.\",\n \"paragraph2\": \"The way levels are represented on-screen varies with the number of rejections the level has witnessed, giving us a visual clue of how strong each support level may be. Once a level is breached, it disappears.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.timeScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T23:00:00.000Z\",\n \"toDate\": \"2020-09-01T02:00:00.000Z\"\n }\n },\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 11400,\n \"maxValue\": 11800\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n },\n {\n \"nodePath\": \"referenceParent.timelineCharts[0].layerManager\",\n \"properties\": {\n \"visibleLayers\": 3,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n }\n },\n {\n \"nodePath\": \"referenceParent.timelineCharts[0].layerManager.botLayers[1].layers[1]\",\n \"properties\": {\n \"status\": \"on\",\n \"showPanels\": false\n }\n }\n ],\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"c2c01aaa-8d57-41de-8eca-30de64007320","savedPayload":{"position":{"x":17959.377104123312,"y":44050.864916378945},"targetPosition":{"x":18258.965964549683,"y":44035.16412950606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"Who's Keeping Score?","config":"{\n \"subTitle\": \"Who's Keeping Score?\",\n \"gif\": \"\",\n \"image\": \"layer-resistance\",\n \"definition\": \"Check the table below and see if you can interpret the support levels you see on the charts. \",\n \"paragraph1\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
Rejections  <\\/th>\\r\\n   Graphics  <\\/th>\\r\\n   Comments<\\/th>\\r\\n <\\/tr>\\r\\n <\\/thead>\\r\\n
1<\\/td>\\r\\n <\\/span><\\/td>\\r\\n   A faint, grey dotted line.<\\/td>\\r\\n <\\/tr>\\r\\n
2<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   A grey block.<\\/td>\\r\\n <\\/tr>\\r\\n
3<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   A turquoise block.<\\/td>\\r\\n <\\/tr>\\r\\n
4<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   A yellow block.<\\/td>\\r\\n <\\/tr>\\r\\n
5<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   A green block.<\\/td>\\r\\n <\\/tr>\\r\\n
6<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   An orange block.<\\/td>\\r\\n <\\/tr>\\r\\n
7 or more<\\/td>\\r\\n  <\\/span><\\/td>\\r\\n   A purple block.<\\/td>\\r\\n <\\/tr>\\r\\n <\\/tbody>\\r\\n <\\/table>\",\n \"paragraph2\": \"
For a new support level with one rejection, the dotted line marks the exact level on which price bounced. For further rejections, the blocks mark the rate ranges on which subsequent rejections are counted.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"1b10ba0b-25e4-40e6-9298-fd0e060218c7","savedPayload":{"position":{"x":17991.664007293173,"y":43898.9669795842},"targetPosition":{"x":18258.965964549683,"y":44035.16412950606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"The Power of Data Mining","config":"{\n \"subTitle\": \"The Power of Data Mining\",\n \"gif\": \"\",\n \"image\": \"layer-resistance\",\n \"definition\": \"Why do levels jump up and down? There's something I haven't told you yet, 'cos I'm afraid it may blow your mind!\",\n \"paragraph1\": \"\",\n \"callOut\": \"The bot keeps track of all support levels alive since the start of the dataset, but only shows you the five levels closest to the current price.\",\n \"paragraph2\": \"Keeping track of information for the whole span of the dataset—which may count years—is the true value of data mining, and the kind of things you wouldn't be able to calculate with a function, on the fly. The ->Plotter-> associated with the ->Indicator Bot-> dynamically shows the five levels of support closest to the price because those are the relevant levels for the context.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}\n","project":"Superalgos","id":"8019055c-dcbd-4f0c-a1be-715cf6512a09","savedPayload":{"position":{"x":18095.574254045176,"y":43783.562959122435},"targetPosition":{"x":18258.965964549683,"y":44035.16412950606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Find the Logic Challenge","config":"{\n \"subTitle\": \"Find the Logic Challenge!\",\n \"gif\": \"\",\n \"image\": \"layer-resistance\",\n \"definition\": \"Now that you know how the indicator works, can you find the relationship between buy orders and support levels?\",\n \"paragraph1\": \"\",\n \"callOut\": \"Take some time to explore the period of time tested looking for clues on how support levels determine the rate of the ->Limit Buy Order->!\",\n \"paragraph2\": \"It's fun noticing how new levels form when price changes direction, and how an established level changes color when price bounces-off it.\",\n \"tip\": \"But the trick lies in counting levels above the order!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"1b6dc587-016b-4c65-9f8e-3e3e59ddc9b7","savedPayload":{"position":{"x":18243.2651776768,"y":43735.57526907969},"targetPosition":{"x":18258.965964549683,"y":44035.16412950606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Here's How It Works","config":"{\n \"subTitle\": \"Here's How it Works...\",\n \"gif\": \"\",\n \"image\": \"layer-resistance\",\n \"definition\": \"Got it? The ->Trading Bot-> places the ->Limit Buy Order-> at the fifth support level! What's the logic behind this?\",\n \"paragraph1\": \"It's sort of arbitrary, but the strategy defines a falling knife as the price action capable of breaching at least four support levels and getting to the fifth during a single minute. Statistically, such events—in this time frame—produce more bounces than continuations. They may be caused by large market orders that temporarily increase the bid/ask spread in the order book.\",\n \"callOut\": \"Take a minute to verify that buy orders are placed at the fifth support level!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f9e682fd-3906-4dd4-ad44-9c4af0d8a632","savedPayload":{"position":{"x":18395.163114471547,"y":43767.86217224955},"targetPosition":{"x":18258.965964549683,"y":44035.16412950606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"dbb272f3-27d5-4938-96a4-e5ee1b87bff2","savedPayload":{"position":{"x":18258.965964549683,"y":44035.16412950606},"targetPosition":{"x":18422.35767505419,"y":44286.76529988969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"5e3deefe-2224-4b65-be4d-0b7ab311bd48","savedPayload":{"position":{"x":18422.35767505419,"y":44286.76529988969},"targetPosition":{"x":18689.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Trading System","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Come Meet Someone","config":"{\n \"subTitle\": \"Come Meet Someone!\",\n \"gif\": \"\",\n \"image\": \"execution-algorithm\",\n \"definition\": \"Sorry for dragging you away from the charts, but I wanted to introduce you to someone: the guy on the right is the one placing the buy orders!\",\n \"paragraph1\": \"We are inside the Lightning Strike ->Trading System->, within the definitions of the ->Open Stage->. In this stage, the ->Execution Algorithm-> takes over after the decision to take a position has already been made on the ->Trigger Stage->. I know you still don't know what a ->Situation-> or a ->Condition-> are, but I'd still like you to do something...\",\n \"callOut\": \"Take a few minutes to explore the nodes below the execution algorithm, check the formulas and conditions, and see what you can make of them!\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"395d6137-6954-48d0-89d7-a41226d6c667","savedPayload":{"position":{"x":19408.217412411857,"y":36455.60858874119},"targetPosition":{"x":19518.573469233084,"y":36939.052289423926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Execution Algorithm","name":"Buy Orders","id":"e635ed9f-3c8c-45bf-8be0-e3836fa0844e"}}},{"type":"Tutorial Step","name":"Formulations","config":"{\n \"subTitle\": \"Formulations...\",\n \"gif\": \"\",\n \"image\": \"formula\",\n \"definition\": \"What you just went through is the definition of the ->Limit Buy Order-> that is placed and cancelled every minute until it gets filled.\",\n \"paragraph1\": \"This is the node that determines the rate of the limit order. Remember what we discussed earlier about placing the order at the rate of the fifth support level?\",\n \"callOut\": \"Go to the ->Formula-> attached to the ->Order Rate-> node and click Edit on the menu.\",\n \"paragraph2\": \"Well... that is how it's done! As you can see, the syntax is virtually self-explanatory! It involves defining the time frame, the indicator, and the indicator property involved.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f8c57877-6059-4c16-8dbe-18571d22d8ca","savedPayload":{"position":{"x":19673.91879671924,"y":36463.42473176237},"targetPosition":{"x":19518.573469233084,"y":36939.052289423926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Order Rate","name":"New Order Rate","id":"3ff96eb6-5965-4f82-98d4-cd23bf8d0369"}}},{"type":"Tutorial Step","name":"The Seller","config":"{\n \"subTitle\": \"The Seller\",\n \"gif\": \"\",\n \"image\": \"execution-algorithm\",\n \"definition\": \"We are now in the ->Close Stage->. I though it would be interesting to tell you more about execution algorithms, with another example.\",\n \"paragraph1\": \"An ->Execution Algorithm-> may handle multiple orders, of all types. In this case, multiple limit sell orders are defined.\",\n \"callOut\": \"Select Configure on the menu of the algorithm and reflect on the implications of this definition!\",\n \"paragraph2\": \"Both the open stage, where you define how to take a position, and the close stage, where you define how to exit, may feature multiple execution algorithms, each of them handling a certain amount of capital.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"29fe5e28-80f8-4ca0-902b-5b8de961aeca","savedPayload":{"position":{"x":19890.649921265922,"y":36604.39018086119},"targetPosition":{"x":19518.573469233084,"y":36939.052289423926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Execution Algorithm","name":"Race to Break Even","id":"0fe764ce-3312-4964-9841-b55500e3f80a"}}},{"type":"Tutorial Step","name":"Simplifying Complexity","config":"{\n \"subTitle\": \"Simplifying Complexity\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"We haven't discussed trading systems as a framework, but a feature relevant to this explanation is that they may handle multiple strategies.\",\n \"paragraph1\": \"Each strategy features an ->Open Stage-> and a ->Close Stage->, each with its own execution definitions. Each stage may feature multiple execution algorithms, and each algorithm may handle multiple orders.\",\n \"callOut\": \"Do you see the pattern? We call it granularity. \",\n \"paragraph2\": \"Superalgos breaks down each issue to the minimum expression, and integrates the solutions. This is how it allows you to design, deploy, and manage both simple and the most complex trading setups you may envision.\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"4b24efc4-d836-4a22-9791-8f34fed6f6d2","savedPayload":{"position":{"x":20042.9669346752,"y":36803.6408586289},"targetPosition":{"x":19518.573469233084,"y":36939.052289423926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading Strategy","name":"My Trading Strategy","id":"711041eb-3055-4611-b64f-570363bae854"}}},{"type":"Tutorial Step","name":"Let's Take a Peek","config":"{\n \"subTitle\": \"Let's Take a Peek...\",\n \"gif\": \"\",\n \"image\": \"limit-sell-order\",\n \"definition\": \"Before we leave the trading system, let's take a quick look into one of these orders and see what may be of interest.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Expand Profit 0.6 and check the formula of the ->Order Rate-> node.\",\n \"paragraph2\": \"Let's focus on this misterious bit of the formula:
tradingEngine.current.position.exitTargetRate.value

The formula is fetching the value of the ->Exit Target Rate->, defined elsewhere. Let's not focus and what this target rate may be. Instead, let's take a look at the mechanism by which a ->Trading System-> may have access to information processed by the ->Trading Bot->. \",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"66730e1d-6c7d-4af9-a053-b77d3c0c80a3","savedPayload":{"position":{"x":19994.4937190843,"y":37093.71203626196},"targetPosition":{"x":19518.573469233084,"y":36939.052289423926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Limit Sell Order","name":"Profit 0.6","id":"b80fe127-d306-4fc1-a3a8-95bf88de046f"}}}],"tutorialTopics":[],"id":"4a22546a-13ad-4d99-8309-9583c44d331a","savedPayload":{"position":{"x":18553.462482388837,"y":44155.66049255504},"targetPosition":{"x":18689.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Trading Engine","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Find the Node Challenge","config":"{\n \"subTitle\": \"Find the Node Challenge\",\n \"gif\": \"\",\n \"image\": \"trading-engine\",\n \"definition\": \"The ->Trading Engine-> administers the complexity entailed in automated trading by making information accessible to users and trading systems.\",\n \"paragraph1\": \"Rember my comments about granularity? Remember how the formula on the trading system fetched the value of the exit target rate? Here's a quick reminder:

tradingEngine.current.position.exitTargetRate.value\",\n \"callOut\": \"What if I told you that this string holds the path to that piece of information in the data structure of the ->Trading Engine-> hierarchy? Can you find the ->Exit Target Rate-> node? Expand the node and follow the breadcrumb trail!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"1da79160-ab19-4a67-ad10-383158a5330c","savedPayload":{"position":{"x":18489.989349188396,"y":43955.810599682474},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},{"type":"Tutorial Step","name":"Found It?","config":"{\n \"subTitle\": \"Found It?\",\n \"gif\": \"\",\n \"image\": \"copy-path\",\n \"definition\": \"This is how the ->Trading Engine-> makes every bit of information processed by the ->Trading Bot-> available to trading systems.\",\n \"paragraph1\": \"There is a path to every piece of data, and by knowing the path, you may access the data from within any ->Formula-> or ->Condition-> in a ->Trading Strategy->. Let's run a quick check:\",\n \"callOut\": \"Open the menu of the ->Exit Target Rate-> node to the left, and click Copy Node Path. Now, open a text editor and paste what you copied.\",\n \"paragraph2\": \"Ok! This is how formulas and conditions access the information... How about humans?\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"ff08fcfb-7c33-4d70-9260-f960f4e1dd12","savedPayload":{"position":{"x":18588.537506403467,"y":43865.7336076863},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Entry Target Rate","name":"New Entry Target Rate","id":"71b3e7d9-80d0-422d-999e-99549f5ab59d"}}},{"type":"Tutorial Step","name":"The Coolest Trick!","config":"{\n \"subTitle\": \"The Coolest Trick!\",\n \"gif\": \"\",\n \"image\": \"exit-target-rate\",\n \"definition\": \"Humans may access this information by using a cool trick that makes the charting space interact with the design space!\",\n \"bulletListIntro\": \"To use this trick, I just did the following:\",\n \"bulletArray\": [\n [\n \"Split the screen in half\",\n \" pulling the slider up so that we can see both spaces at the same time.\"\n ],\n [\n \"Turn on the Current Position layer\",\n \" on the Trading Engine layers manager. I chose this layer because it corresponds to this section of the hierarchy... tradingEngine.current.position... remember ?\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"Now, slide the mouse pointer across the candles on which the position is taken and see what happens on the nodes to the left...\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"repositionAtTimeMachineReferenceParent\": true,\n \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.timeScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-08-31T23:40:00.000Z\",\n \"toDate\": \"2020-09-01T01:00:00.000Z\"\n }\n },\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 11000,\n \"maxValue\": 11800\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n },\n {\n \"nodePath\": \"referenceParent.timelineCharts[1].layerManager\",\n \"properties\": {\n \"visibleLayers\": 3,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n }\n },\n {\n \"nodePath\": \"referenceParent.timelineCharts[1].layerManager.botLayers[0].layerFolders[0].layerFolders[2].layers[0]\",\n \"properties\": {\n \"status\": \"on\"\n }\n }\n ],\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"2cc2befe-1858-4c96-a45c-52e3dbfa7384","savedPayload":{"position":{"x":18716.409270139156,"y":43827.335485119074},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Backtesting Session My Computer","id":"499eac86-6c40-4362-a36a-5f2002081866"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-backtesting-trading-engine-visualization-01\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"0276fff4-493c-42c8-8d06-267a23646783","savedPayload":{"position":{"x":18848.278069343352,"y":43848.2214510773},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Exit Target Rate","name":"New Exit Target Rate","id":"bc637b55-04bd-4701-9683-78593832cb09"}}},{"type":"Tutorial Step","name":"Feedback Loops","config":"{\n \"subTitle\": \"Feedback Loops\",\n \"gif\": \"\",\n \"image\": \"limit-buy-order\",\n \"definition\": \"Lets take a look at another example to let the notion of the constant feedback loop sink in before we move on!\",\n \"paragraph1\": \"This is the data structure where information about limit buy orders is kept.\",\n \"callOut\": \"Go to the Trading Engine layers manager on the charts (the second counting from the left). Scroll down and turn on the Limit Buy Orders layer. Now swipe the mouse pointer over a few of the buy orders and check the effect on the nodes on the design space.\",\n \"paragraph2\": \"Can you envision the implications of having this level of control over the data managed by the trading bot?\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f5c6cc94-ab96-4729-aa90-12c904c58066","savedPayload":{"position":{"x":18958.025671068972,"y":43924.25478385339},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Rate","name":"New Rate","id":"1c848292-d64a-456f-b1b9-b9e4a387436e"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-backtesting-trading-engine-visualization-02\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"3169f747-4d89-463d-8307-aa7f7b4a4a62","savedPayload":{"position":{"x":19023.91521682825,"y":44040.376149403404},"targetPosition":{"x":18736.58997182277,"y":44126.65594763301},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"9c34436a-f531-443a-bcd5-d69e352da251","savedPayload":{"position":{"x":18736.58997182277,"y":44126.65594763301},"targetPosition":{"x":18689.6596323107,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"9cf3ea6e-9edb-44ed-81ff-8a00886ce731","savedPayload":{"position":{"x":18689.6596323107,"y":44422.96244981155},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Live Trading","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Set Up & Run","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Enough Chit Chat","config":"{\n \"subTitle\": \"Enough Chit Chat!\",\n \"gif\": \"\",\n \"image\": \"production-environment\",\n \"definition\": \"Ok, my friend... It's time for the real deal! Are you ready for a little ->Live Trading Session->?\",\n \"bulletListIntro\": \"I'll help you with the three main requirements:\",\n \"bulletArray\": [\n [\n \"Check your parameters,\",\n \" in particular, decide how much capital you wish to assign to the session.\"\n ],\n [\n \"Set up an ->Exchange Account Key->\",\n \" so that the app may access your account at the exchange.\"\n ],\n [\n \"Ensure a live data feed\",\n \", that is, the data mining operation with the indicators required by the ->Trading System-> must be running and up to date.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"To proceed with a ->Live Trading Session->, click Next.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"8dfa9fdb-3591-4dbe-a865-0ef760ce9742","savedPayload":{"position":{"x":18159.272682972678,"y":36848.0484591931},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Production Environment","name":"New Production Environment","id":"65a40d20-837c-4652-8356-f8054b4e1346"}}},{"type":"Tutorial Step","name":"Warning!","config":"{\n \"warning\": \"Superalgos is a piece of computer software. Like with any software, errors may occur at any point, including errors that may cause you to lose money. You are responsible for taking all precautions you may deem appropriate before trading live. Even if you take all possible precautionary measures, things may still go wrong and errors may occur. By using this software to trade live despite the warnings, you acknowledge that you are aware of the inherent risks in trading and in using software for that purpose. The Superalgos Project offers the software AS IS, with no explicit or implied warranties of any kind. The project, the software, the superalgos.org website, and this tutorial do not offer financial advice. Although the strategies shipping with the system may be fully functional, Superalgos does not make any express or implied recommendation as to how you should use them. We share strategies for educational purposes only. Trade under your responsibility and at your own risk. The use of the software is subject to the terms of the LICENSE.\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"1ad5babb-40d3-48f4-a784-5c2ea0e6b171","savedPayload":{"position":{"x":18157.116172849153,"y":36696.1732869149},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Let's Start With 20 Bucks!","config":"{\n \"subTitle\": \"Let's Start With 20 Bucks!\",\n \"gif\": \"\",\n \"image\": \"session-quoted-asset\",\n \"definition\": \"The default initialBalance is set to 20 USDT, which ensures we are above the minimum transaction amount supported by Binance.\",\n \"paragraph1\": \"The initialBalance is defined in the configuration of the ->Session Quoted Asset->.\",\n \"callOut\": \"Check that the above is the case and decide for yourself if you wish to change it.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"important\": \"Make sure you have at least 20 USDT at the exchange! The ->Trading Bot-> will place one limit order for 20 USDT, and cancel it the next minute in case it is not filled, as explained earlier.\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"04b09505-d781-4d1f-8686-57eb3a0cf95c","savedPayload":{"position":{"x":18197.71414351859,"y":36545.037133627135},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Session Quoted Asset","name":"","id":"f6cd46c1-66df-422c-82d4-02ac8e37f689"}}},{"type":"Tutorial Step","name":"Enjoy the Outdoors!","config":"{\n \"subTitle\": \"Enjoy the Outdoors!\",\n \"gif\": \"\",\n \"image\": \"crypto-ecosystem\",\n \"definition\": \"I believe you haven't visited the ->Crypto Ecosystem-> hierarchy, right? This is where you configure which exchanges and markets you wish to work with...\",\n \"paragraph1\": \"... among other things, such as your accounts with those exchanges, your API keys, your assets, and so on.\",\n \"callOut\": \"Why don't you take a little walk and I'll catch up with you in the next step?\",\n \"paragraph2\": \"\",\n \"tip\": \"Just look around... enjoy the views...\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"ff963975-de14-44e0-a552-44b29644a938","savedPayload":{"position":{"x":18283.057980918613,"y":36413.74506356766},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d"}}},{"type":"Tutorial Step","name":"Your Keys, Your Coins!","config":"{\n \"subTitle\": \"Your Keys, Your Coins!\",\n \"gif\": \"\",\n \"image\": \"exchange-account-key\",\n \"definition\": \"This is where you configure your ->Exchange Account Key-> for the Lightning Strike ->Live Trading Session->.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Open the configuration and carefully enter the API name or label and the API secret key.\",\n \"paragraph2\": \"Delete the default text string for each parameter first, so that no foreign character gets mixed up with the keys.\",\n \"note\": \"In the future, when you get to run multiple live sessions at the same time, you will need to set up one ->Exchange Account Key-> per session. This is a requirement in most exchanges.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"a36187cc-415e-424b-8275-352f953552f8","savedPayload":{"position":{"x":18404.720160624332,"y":36315.165434983646},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Exchange Account Key","name":"Key for Lighting Strike","id":"e85bbbd6-aca8-450f-9237-788062de5761"}}},{"type":"Tutorial Step","name":"Fire Up the Machine!","config":"{\n \"subTitle\": \"Fire Up the Machine!\",\n \"gif\": \"\",\n \"image\": \"data-mining\",\n \"definition\": \"Now it's time to fire up your ->Data Mining-> operation.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Select Run All Exchange Data Tasks on the menu.\",\n \"paragraph2\": \"We'll give it a few minutes to catch up with the present time. Remember, all indicators must get to 100% before we can start trading!\",\n \"tip\": \"If you're getting a bit anxious, feel free to go down the ->Data Mining-> section and check the status of the process instances!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"87824465-1fda-4f6a-bb4f-31f6d7f77268","savedPayload":{"position":{"x":18550.880762064968,"y":36259.07819241989},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}},{"type":"Tutorial Step","name":"Are We Ready Yet?","config":"{\n \"subTitle\": \"Are We Ready Yet?\",\n \"gif\": \"\",\n \"image\": \"indicator-process-instance\",\n \"definition\": \"Resistances and Supports Multi-Period-Daily to the left is the last of the process to finish.\",\n \"paragraph1\": \"If this process is at 100%, then we are ready to go.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"Either way, nothing catastrophic happens if you attempt to run a ->Live Trading Session-> when the required indicators are not up to date. There would be an error, and you'd be notified of the reason. So, no big deal!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"f05ce10a-6ccd-4910-9373-8f3d211fe390","savedPayload":{"position":{"x":18707.063491628538,"y":36250.93142289231},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Indicator Process Instance","name":"Resistances and Supports Multi-Period-Daily","id":"c5395fbe-4b5a-4492-a7fb-e2d259905e27"}}},{"type":"Tutorial Step","name":"Let's Do this!","config":"{\n \"subTitle\": \"Let's Do This!\",\n \"gif\": \"\",\n \"image\": \"live-trading-session\",\n \"definition\": \"We've gone through the 3-point checklist and we are ready to go, so let's get on with it!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Run the Lightning Strike ->Task->, and then run the Lightning Strike ->Live Trading Session-> to the right!\",\n \"paragraph2\": \"\",\n \"note\": \"Once you run the session, the trading bot may have to wait up to 60 seconds for the last indicator to finish processing. Once it does, you will see the current date and a 0% progress notice under the ->Trading Process Instance->, which will remain like that throughout the run.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"ba33c98c-dc22-408d-8206-c173344cdb24","savedPayload":{"position":{"x":18858.462373841467,"y":36291.5831070938},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Task","name":"Lightning Strike","id":"c8492c4a-a7a7-4a80-a25a-a610377e6180"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-live-trading-process-progress\",\n \"position\": \"Left\",\n\"positionAtReferenceParent\": true,\n \"slider\": \"toTop\"\n}","project":"Superalgos","id":"bd2e54f6-f3ca-4bf7-a453-b2a2ce55e65c","savedPayload":{"position":{"x":18990.00116780749,"y":36377.20811973339},"targetPosition":{"x":18654.621267607057,"y":36749.10774608528},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading Process Instance","name":"Low Frequency Trading","id":"4d7e7fa0-afcb-4b2f-983b-ceacea91b29d"}}}],"tutorialTopics":[],"id":"8f866187-280e-4e87-b871-41dc645fd412","savedPayload":{"position":{"x":18751.791666666664,"y":44075.28686303218},"targetPosition":{"x":18901.791666666664,"y":44335.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Monitoring","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Check Your Console!","config":"{\n \"subTitle\": \"Check Your Console!\",\n \"gif\": \"\",\n \"image\": \"trading-process-instance\",\n \"definition\": \"If you don't see any errors on the ->Trading Process Instance->, chances are everything is working fine!\",\n \"paragraph1\": \"However, you may want to take a look at your console application and see if you notice anything out of the norm.\",\n \"callOut\": \"Take a look at your console app!\",\n \"paragraph2\": \"\",\n \"note\": \"You should be able to see the alternating executions of the Candles-Volumes and Resistances-And-Support indicators, with the Low-Frequency ->Trading Bot->\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"036556c5-b0bd-494a-bec2-bd7413506475","savedPayload":{"position":{"x":18901.791666666664,"y":43815.47924189685},"targetPosition":{"x":19051.791666666664,"y":44075.28686303218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-live-trading-console\",\n \"position\": \"Left\",\n \"slider\": \"toTop\"\n}","project":"Superalgos","id":"2708d375-3245-455d-85d2-b164ab3ba86f","savedPayload":{"position":{"x":19051.791666666664,"y":43775.28686303218},"targetPosition":{"x":19051.791666666664,"y":44075.28686303218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Is It Working?","config":"{\n \"subTitle\": \"Is It Working?\",\n \"gif\": \"\",\n \"image\": \"binance\",\n \"definition\": \"The unequivocal way to verify things are working fine is logging on to Binance and checking your order history for BTC/USDT.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Go to Binance and take a look at what's going on!\",\n \"paragraph2\": \"\",\n \"note\": \"At any point in time, you should see one open order and a number of canceled orders pilling up in your order history, pretty much like in the video on the next step!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"8f6913ec-257f-49ba-bdbb-dcd43e5fe727","savedPayload":{"position":{"x":19201.791666666664,"y":43815.47924189685},"targetPosition":{"x":19051.791666666664,"y":44075.28686303218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"welcome-live-trading-binance-orders\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"changeNodeConfigWithEvalReferenceParent\": {\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"(new Date((new Date()).valueOf() - 60000 * 120)).toISOString()\",\n \"toDate\": \"(new Date((new Date()).valueOf() + 60000 * 120)).toISOString()\"\n }\n}","project":"Superalgos","id":"9a3be7a3-9fe8-4d58-a84c-abd59c43e7f2","savedPayload":{"position":{"x":19311.599287801997,"y":43925.28686303218},"targetPosition":{"x":19051.791666666664,"y":44075.28686303218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Scale","name":"New Time Scale","id":"708c5a9f-a995-4210-aaaf-0794782f0e9e"}}},{"type":"Tutorial Step","name":"Monitor the Fun Way","config":"{\n \"subTitle\": \"Monitoring the Fun Way!\",\n \"gif\": \"\",\n \"image\": \"bullet-limit-buy-order\",\n \"definition\": \"You thought I would let you monitor the ->Live Trading Session-> watching the ugly list of orders at the exchange? No way!\",\n \"paragraph1\": \"Superalgos produces the same kind of simulations you love for live sessions too, in realtime!\",\n \"callOut\": \"Can you see the first few buy orders on the chart?\",\n \"paragraph2\": \"\",\n \"note\": \"I just brought you to the present time, on the 1-minute chart. You should be able to see the latest candle forming and a few orders already. The ->Rate Scale-> is in automatic mode at both ends. Feel free to change the scales to your liking.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\",\n \"repositionAtTimeMachineReferenceParent\": true,\n \"batchConfigChangesReferenceParent\": [\n {\n \"nodePath\": \"referenceParent.rateScale\",\n \"properties\": {\n \"autoMinScale\": true,\n \"autoMaxScale\": true\n }\n },\n {\n \"nodePath\": \"referenceParent.timeFrameScale\",\n \"properties\": {\n \"value\": \"01-min\"\n }\n }\n ]\n}","project":"Superalgos","id":"d84be58b-a1c7-4504-89aa-f98efe132c30","savedPayload":{"position":{"x":19351.791666666664,"y":44075.28686303218},"targetPosition":{"x":19051.791666666664,"y":44075.28686303218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Time Machine","name":"Lightning Strike Live Trading Session My Computer","id":"cc1fcc1e-81de-4011-8e59-c37ebe32ecf7"}}}],"tutorialTopics":[],"id":"03e5e234-40eb-4fbe-8df3-95a40f1b34ea","savedPayload":{"position":{"x":19051.791666666664,"y":44075.28686303218},"targetPosition":{"x":18901.791666666664,"y":44335.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"8f829077-b2bd-4747-a01d-762f35b3a070","savedPayload":{"position":{"x":18901.791666666664,"y":44335.094484167515},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"The End","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"What's Next?","config":"{\n \"subTitle\": \"What's Next?\",\n \"gif\": \"\",\n \"image\": \"bullet-info\",\n \"definition\": \"There are tons of things we haven't covered yet, I know! Just look around! So much stuff to see! It's mind-boggling.\",\n \"paragraph1\": \"I'm sure you still have tons of questions floating in your head... How do I build my own strategies? How do I measure performance? How do I build an indicator? How do I deploy a trading farm? How may I integrate with TradingView? How do I set up Telegram announcements? Don't worry! You'll get there my friend... you'll just have to do some reading!\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"tip\": \"In the meantime, remember to stop your live session and data mining when you no longer need them running, and especially before closing the backend.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"06efb824-f003-4a3c-8323-549a6427d83e","savedPayload":{"position":{"x":19066.99336151056,"y":44126.65594763301},"targetPosition":{"x":19113.923701022628,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Ready for More?","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Ready for More Tutorials?\",\n \"gif\": \"\",\n \"image\": \"tutorial\",\n \"definition\": \"There are a few more tutorials ready to walk you through other matters upon request!\",\n \"bulletListIntro\": \"At the bottom of this workspace:\",\n \"bulletArray\": [\n [\n \"Developers Intro\",\n \" is a technical overview!\"\n ],\n [\n \"Install a New Market\",\n \" helps you go beyond BTC/USDT!\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"You may also want to load the Weak-hands Buster V.2 plugin workspace from the tab on the left. It features a tutorial about the Trading Bot Layers to complete your understanding on simulations and how they help you design and debug strategies.\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"6ccf52bb-9a95-40e8-8f2c-35530f44114e","savedPayload":{"position":{"x":19250.12085094449,"y":44155.66049255504},"targetPosition":{"x":19113.923701022628,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"What Else Is Cooking?","config":"{\n \"subTitle\": \"What Else Is Cooking?\",\n \"gif\": \"\",\n \"image\": \"ethereum\",\n \"definition\": \"Superalgos is turning into a multi-project platform, and Ethereum is the first project being integrated...\",\n \"paragraph1\": \"\",\n \"bulletListIntro\": \"What does integrating Ethereum means, you ask? It means that—with Beta 7—you will be able to:\",\n \"bulletArray\": [\n [\n \"Connect to an Ethereum node\",\n \" right from within Superalgos using the visual interface.\"\n ],\n [\n \"Mine blockchain data\",\n \" to access coin and contract information for all Ethereum-based projects, including De-Fi or what have you, visualizing data on the charts, building indicators, and leveraging the whole infrastructure.\"\n ],\n [\n \"Use the data to trade\",\n \" by consuming related indicators from within trading systems!\"\n ]\n ],\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"96d43586-d877-4499-92a5-e84882a38a47","savedPayload":{"position":{"x":19381.225658279138,"y":44286.76529988969},"targetPosition":{"x":19113.923701022628,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"This Is The End","config":"{\n \"subTitle\": \"This Is The End!\",\n \"gif\": \"\",\n \"image\": \"close-stage-event\",\n \"definition\": \"Ok, my friend, this is the end! I hope you've enjoyed the show and that I've managed to get you hooked to Superalgos!\",\n \"paragraph1\": \"There's no doubt in my mind that you haven't seen anything like Superalgos before. As you may now figure, Superalgos is a vast system and keeps growing fast.\",\n \"callOut\": \"We count on your help once you start using the system! Superalgos is a community project, and we want your help to grow it stronger!

You may start by spreading the word, bringing your friends, and \",\n \"externalLink\": [\n \"joining the community!\",\n \"https://t.me/superalgoscommunity\"\n ],\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"708b6ed8-28ac-41c8-bf4f-7c1cec6af6a3","savedPayload":{"position":{"x":19410.23020320117,"y":44469.89278932362},"targetPosition":{"x":19113.923701022628,"y":44422.96244981155},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Tutorial","name":"Welcome to Superalgos!","id":"6f36f540-8de9-4458-b2c7-875884121b87"}}}],"tutorialTopics":[],"id":"fcea7b25-5a13-40e6-a92f-9c530b8a7476","savedPayload":{"position":{"x":19113.923701022628,"y":44422.96244981155},"targetPosition":{"x":18901.791666666664,"y":44635.094484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"6f36f540-8de9-4458-b2c7-875884121b87","savedPayload":{"position":{"x":18896.791666666664,"y":44662.094484167515},"targetPosition":{"x":18896.791666666664,"y":44662.094484167515},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isPlaying":true,"isRunning":false},"tutorial":{"status":"Done"}}},{"type":"Tutorial","name":"Developers Intro","config":"{ \n\"title\": \"Intro for Developers\",\n \"summary\": \"This tutorial walks you through the technical aspects of Superalgos so that you may take advantage of the infrastructure in place as efficiently as possible.\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"I will cover the following topics:\",\n \"bulletArray\": \n[\n [\"Architecture:\", \"Architectural overview of the system.\"], \n[\"Backend:\", \"How the backend is organized.\"], \n[\"Frontend:\", \"How the UI works.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"This is a 3-year-old project that has pivoted a few times to reach its current state of development. It was initially intended for trading bots competitions and is now focused on crypto-trading automation in general. The main technical pivot occurred when we decided to depart from a centralized cloud-based app, to a decentralized network of nodes.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Architecture","config":"{ \n\"title\": \"System Architecture\",\n \"summary\": \"Superalgos is essentially a Node.js application + a Web App.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"The overall idea is that Superalgos runs at users' machines. Advanced users may deploy multiple Superalgos nodes in a LAN and distribute tasks easily. In the current version, these nodes are not ready to be exposed to the Internet. Someday they will, and eventually, they will be able to provide services to other users. These services may include:\",\n \"bulletArray\": \n[\n [\"Data Products:\", \"Pre-calculated indicators or studies.\"], \n [\"Backtest Execution:\", \"To scale testing capabilities.\"], \n[\"Live Trading Execution:\", \"Only if trusted entities emerge.\"], \n[\"Data Processing Execution:\", \"External data processing power.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Backend","config":"{ \n\"title\": \"Backend\",\n \"summary\": \"The backend has two main components: The Backend Servers and the Task Server. When you run the app, what you are running are the Backend Servers. An instance of the Task Server is put to run once a user decides to run a task.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \"Once the services at the backend are running, the default web browser is called with the URL of the local machine so that it may load the UI and let users interact with the system.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The system holds all of its data and logs in the installation folder. The system does not modify—in any way—anything outside the installation folder. Deleting this folder completely removes Superalgos from the computer.\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Backend Servers","config":"{ \n\"title\": \"Backend Servers\",\n \"summary\": \"Is a collection of servers running on a single Node.js process.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"The servers are:\",\n \"bulletArray\": \n[\n [\"Web Server:\", \"Serves all the JS files that form the User Interface to the browser.\"], \n[\"Web Sockets Server:\", \"Enables the UI to reach the backend via WS.\"], \n[\"Events Server:\", \"Enables the UI to communicate with the Task Manager Server and all of the Task Servers process instances via events over WS.\"] ,\n[\"Task Manager Server:\", \"Manges Task Servers processes based on users commands.\"]\n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"All of these servers are custom built—in-house—for Superalgos. We prefer to build on top of rock-solid, widely-used, low-level libraries only, like WS, for instance.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Web Server","config":"{ \n \"subTitle\": \"Web Server\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"The Web Server has two main goals: it serves all the JS files that form the Web App and all the data files to be plotted at the charts to the browser that is running the UI.\",\n \"bulletListIntro\": \"The complete list Web Server uses is:\",\n \"bulletArray\": \n[\n [\"JS Files:\", \"Enables the Web App to run on a browser.\"], \n[\"JSON Data Files:\", \"Allows the UI to access data to plot.\"], \n[\"Images:\", \"Images used on the UI are served from the Web Server.\"] ,\n[\"JSON Workspaces Files:\", \"Allow users to create definitions on different Workspaces.\"] ,\n[\"JSON Plugin Files:\", \"Files that are automatically included on Workspaces for convenience.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"4c01144d-0021-4fda-b233-d2984a08be4d","savedPayload":{"position":{"x":24947.810098056187,"y":44088.83878258969},"targetPosition":{"x":25246.166666666668,"y":44120.19732156999},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Web Sockets Server","config":"{ \n \"subTitle\": \"Web Sockets Server\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"This is a simple implementation of a web sockets server. It essentially allows the UI or any of the other services to communicate with the Events Server via WS.\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \"The system does not allow different processes to talk to each other via WS. All they can do is talk to the Events Server to subscribe to events or to emit events.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The Web Socket Server enables this indirect communication mechanism between all processes and the UI running on a single machine, as well as communication between processes running on different machines.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"3b772db2-8aee-4f6e-b4d2-3dbd9c3edc83","savedPayload":{"position":{"x":25023.22321902345,"y":43919.45813966233},"targetPosition":{"x":25246.166666666668,"y":44120.19732156999},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Events Server","config":"{ \n \"subTitle\": \"Events Server\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"The Events Server provides the communication model between processes and the UI. It essentially allows any entity inside each process to create a system-wide event handler and allow any other entity inside a process (or the UI) to subscribe or emit events at that event handler.\",\n \"bulletListIntro\": \"Events-based communication happens between:\",\n \"bulletArray\": \n[\n [\"UI and Task Manager:\", \"To run and stop Task Server processes.\"], \n[\"Task Server and UI:\", \"To get online feedback of what is going on at the Task Server, to display relevant status info at the UI.\"]\n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The communication between the UI and the Web Server is HTTP only.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"56f1a417-2b2a-4b82-9ede-11dc2658a4a6","savedPayload":{"position":{"x":25183.79315942134,"y":43826.753041349846},"targetPosition":{"x":25246.166666666668,"y":44120.19732156999},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Task Manager Server","config":"{ \n \"subTitle\": \"Task Manager Server\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"The Task Manager Server is a simple server to manage the execution of Task Servers Node.js processes. It keeps track of all the instances running at any point in time and allows the UI to decide when to run more instance or stop any of those running.\",\n \"bulletListIntro\": \"The Task Manager Server provides the following commands to the UI:\",\n \"bulletArray\": \n[\n [\"Run Task:\", \"Used to run a new task, spawns a Node.js fork process where a Task Server is run.\"], \n[\"Stop Task:\", \"Sends a fork-process-message to the Task Server instance that needs to stop.\"], \n[\"Task Status:\", \"Tells the caller if the Task Id provided corresponds to a running task or not.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"e4892c24-71fd-4b41-a913-7e27abd5ff91","savedPayload":{"position":{"x":25368.187659589406,"y":43846.13368427721},"targetPosition":{"x":25246.166666666668,"y":44120.19732156999},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"3ce65c39-db2b-4ae1-a091-81871192942c","savedPayload":{"position":{"x":25246.166666666668,"y":44120.19732156999},"targetPosition":{"x":25396.166666666668,"y":44380.00494270532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Task Server","config":"{\n \"title\": \"Task Server\",\n \"summary\": \"The Task Server is a Node.js fork process of Backend Servers that receives the definition of the Task that needs to run from the UI . \",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"The definition includes:\",\n \"bulletArray\": [\n [\n \"Bot to run:\",\n \"The bot might be a Sensor Bot, an Indicator Bot or a Trading Bot.\"\n ],\n [\n \"Processes to run:\",\n \"Each bot definition may have one or more bot processes. \"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"The UI is where all definitions live. Every time the user runs a task, the UI collects all the relevant information into a single, giant JSON object and sends this to the Task Manager Server, which in turn, after the fork process is running, passes this definition to the Task Server instance just created. With that definition, the Task Server knows all the details of the task to run.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[],"id":"1efab353-979b-4b8c-a117-2f1206c16ae4","savedPayload":{"position":{"x":25696.166666666668,"y":44380.00494270532},"targetPosition":{"x":25396.166666666668,"y":44380.00494270532},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"04f8ffd7-52eb-41fa-bd19-e0708060e427","savedPayload":{"position":{"x":25396.166666666668,"y":44380.00494270532},"targetPosition":{"x":25246.166666666668,"y":44639.81256384066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Frontend","config":"{ \n\"title\": \"Frontend\",\n \"summary\": \"The Frontend is essentially a Javascript web-app running on the browser.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"As of today it contains:\",\n \"bulletArray\": \n[\n [\"Canvas App:\", \"Most of the functionality is here. The name reflects the fact that most of the UI is rendered in an HTML 5 canvas object.\"], \n[\"Files Component\", \"Includes the mechanisms to read data files in a way that is suitable for navigating through large datasets while plotting the information in real-time.\"]\n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The UI was built entirely in-house. We did not reuse any framework to display the design space or the charts.\",\n \"tip\": \"\",\n \"important\": \"The UI is tested in Chrome only.\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Canvas App","config":"{ \n\"title\": \"Canvas App\",\n \"summary\": \"Most of the action happens on an HTML 5 Canvas animation. The rest is pure HTML + CSS, nothing else. \",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"The main object of the Canvas App is called canvas. It is essentially a collection of different space objects:\",\n \"bulletArray\": \n[\n\n[\"Charting Space:\", \"Where charts are displayed,\"], \n [\"Design Space:\", \"Where definitions are maintained.\"], \n [\"Floating Space:\", \"Enables visual scripting.\"], \n[\"Side Space:\", \"Currently, the workspace selector.\"],\n[\"Docs Space:\", \"In-app documentation.\"],\n[\"Tutorial Space:\", \"Enables tutorials like this one.\"],\n[\"Panel Space:\", \"Where plotter panels live.\"],\n[\"Cockpit Space:\", \"Currently, the slider .\"],\n[\"Top Space:\", \"Currently, the top bar with logo.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Canvas Animation","config":"{ \n \"subTitle\": \"Canvas Animation\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"The animation runs a physics() and a draw() function for each space, allowing each of them to have their own physics engine / rules and render themselves as a top-level layer on the UI.\",\n \"paragraph1\": \"At each frame, the animation calls the physics() function of each space first and, second, the draw() function. Then, it requests a callback from the browser and starts all over again.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Depending on how many things the user keeps open, both the physics() call or the draw() call may last more or less time. This makes the frames-per-second variable, and a function of the number of things that need to be calculated or rendered on-screen.\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"4c215e8b-7a83-4586-bcb0-31ee3308a82a","savedPayload":{"position":{"x":25656.671702498086,"y":44621.39575959029},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Charting Space","config":"{ \n \"subTitle\": \"Charting Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"This is where the charts are displayed. It allows users to navigate through multi-dimensional datasets.\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \"The Charting Space has its own object structure that partially matches the definitions set by the user on the Charting Space hierarchy. This means that, whenever the user adds a chart, removes a scale, or changes a configuration of any of the nodes inside the Charting Space hierarchy, the Charting Space senses these changes and adapts its object model, most of the time in real-time, which in turn changes the way that the charts are displayed.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The Charting Space uses the Files Components as its data provider.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"e4fb4c74-d980-4c56-b87e-60696c078abe","savedPayload":{"position":{"x":25731.863569088302,"y":44664.807804007025},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Design Space","config":"{ \n \"subTitle\": \"Design Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"Manages the core concept of nodes which, when attached to one another, may form vast definitions easily made and maintained by users.\",\n \"bulletListIntro\": \"\",\n\n \"paragraph1\": \"The system features a file called App Schema which has the rules about the existing types of nodes, which nodes may be the child of other nodes, and which may reference other nodes and which. It also defines the menu items of nodes. All these rules are enforced on the Design Space. \",\n \"callOut\": \"Users may then attach nodes, establish references between nodes, select menu items, and more...\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The Design Space is tightly coupled with the Floating Space.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"602ed273-6058-4660-bdca-dbbed6863bd2","savedPayload":{"position":{"x":25787.67301761278,"y":44731.31891478677},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Floating Space","config":"{ \n \"subTitle\": \"Floating Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"This is like the low-level part of the Design Space. It features a physics engine that governs the physical interactions of floating objects.\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \"At runtime, each node on the Design Space behaves like a molecule featuring three atoms working together: the first one is called Floating Object and belongs to the Floating Space, which controls its position and collision-related physics; the second one is a UiObject which lives at the Design Space and controls the UI of the node, including menu, label, etc.; the third one is a Node that is—essentially—the information contained in that node.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"When you save the Workspace, Floating Objects and UIOBjects are detached from Nodes, and saved as a big JSON object with only its data.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"87fa3d5c-f9c2-4340-a171-eafbf5926fb8","savedPayload":{"position":{"x":25817.36860491972,"y":44812.90687037003},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Side Space","config":"{ \n \"subTitle\": \"Side Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"It is the section on the left, accessed by clicking a tab button. As of today, it features a Workspace selector for users to switch between different workspaces. \",\n \"bulletListIntro\": \"On the Side Space users may:\",\n \"bulletArray\": \n[\n [\"Select an included workspace:\", \"The system ships with one or more included workspaces that serve as examples or case studies.\"], \n[\"Select one's own workspaces:\", \"By renaming any included workspace, the user may create a workspace and switch workspaces using the Side Space.\"]\n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The Side Space is expected to grow in functionality in the future.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"5d2b9869-82e1-4d98-b213-0fd5906608c7","savedPayload":{"position":{"x":25817.36860491972,"y":44899.7309592035},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Docs Space","config":"{ \n \"subTitle\": \"Docs Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"This is where the documentation web site is loaded. It's an HTML iFrame inside a DIV, animated in and out of the screen.\",\n \"bulletListIntro\": \"\",\n\n \"paragraph1\": \"\",\n \"callOut\": \"There is an ongoing effort to bring the documentation web site into the app. What you can see today is just the first step in that direction. \",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The current documentation is implemented as a separate repository, hosted by Github Pages.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"aaaee2ea-644e-4769-8848-ef2b2bc62841","savedPayload":{"position":{"x":25787.67301761278,"y":44981.31891478677},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Tutorial Space","config":"{ \n \"subTitle\": \"Tutorial Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"Enables running tutorials. It is not based on the HTML canvas, but on HTML + CSS.\",\n \"paragraph1\": \"The Tutorial Space is the highest top-tier layer of all the system since its rendered above everything else. It can manipulate other spaces based on the configuration of each tutorial topic and step. \",\n \"callOut\": \"Not only may tutorials move the user around the UI, but may also take most actions users themselves may take, like, for instance, running tasks of any kind.\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"The Tutorial Space is a new addition to the system. For that reason, few tutorials exist today, but we expect this to change in the future.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"782d10c5-de47-4927-b287-5cb630f305f9","savedPayload":{"position":{"x":25731.863569088302,"y":45047.83002556651},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Panel Space","config":"{ \n \"subTitle\": \"Panel Space\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"The Panel Space is where all panels defined by plotters exist. The space has its own physics engine which governs the way users interact with panels, and panels with other panels.\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \"Panels are constrained within the boundaries of the Panel Space, which matches the boundaries of the Charting Space.\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"Although the panel space has existed since the project's inception, it is still quite underdeveloped, and there is a lot of room to improve it.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"54722f4b-8f86-4220-9e0f-5417297450a6","savedPayload":{"position":{"x":25656.671702498086,"y":45091.242069983244},"targetPosition":{"x":25571.166666666668,"y":44856.31891478677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"d284c632-42b2-47e6-b1f6-6c64029311a0","savedPayload":{"position":{"x":25696.166666666668,"y":44899.62018497599},"targetPosition":{"x":25396.166666666668,"y":44899.62018497599},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Files Component","config":"{ \n\"title\": \"Files Component\",\n \"summary\": \"Encapsulates different data providers able to read datasets organized in different ways.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"The system defines these types of data providers:\",\n \"bulletArray\": \n[\n [\"Market Files:\", \"For time-frames of 1 hour and above, it is convenient to have a single file with all the data of the whole market.\"], \n[\"Daily Files:\", \"For time-frames below 1 hour, up to 1 minute, it is convenient to split market data into one file per day.\"], \n[\"Single File:\", \"Sometimes a process may generate a single file irrespective of the time-frame.\"], \n[\"Files Sequence:\", \"Some processes may produce a sequence of files.\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"Daily Files are managed by a File Cursor which dynamically loads the files of one day and its neighboring days.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[],"id":"719861ad-82fd-4c93-b510-86af1d666908","savedPayload":{"position":{"x":25246.166666666668,"y":45159.42780611132},"targetPosition":{"x":25396.166666666668,"y":44899.62018497599},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"b2cfb2eb-be83-4075-bf26-932a75e83566","savedPayload":{"position":{"x":25396.166666666668,"y":44899.62018497599},"targetPosition":{"x":25246.166666666668,"y":44639.81256384066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"33eb3496-ba79-468a-a30a-9b3e4ba0f4c8","savedPayload":{"position":{"x":25246.166666666668,"y":44639.81256384066},"targetPosition":{"x":24946.166666666668,"y":44639.81256384066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Concusion","config":"{ \n\"title\": \"Parting Thoughts...\",\n \"summary\": \"As you can see, Superalgos is much more than a trading bot. It's a holistic infrastructure to manage complexity in the easiest way possible for users.\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"paragraph1\": \" This introduction covered the highest level topics of the system in the hope it may help you understand the foundations on which the system is being built.\",\n \"callOut\": \"We hope you agree it's a good idea to reuse this infrastructure to build trading intelligence rather than code a trading bot from scratch. We hope more devs will join us!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"If you like the project, there are many ways to contribute. Take a look at this page featuring the roadmap to becoming a part of the team.\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"https://docs.superalgos.org/contributing-to-superalgos.html\" \n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[],"id":"bbc427d1-eec8-489b-bc23-d99281687741","savedPayload":{"position":{"x":24646.166666666668,"y":44639.81256384066},"targetPosition":{"x":24946.166666666668,"y":44639.81256384066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"6a03c441-823d-4147-aef3-d592f110dfd8","savedPayload":{"position":{"x":24944.166666666668,"y":44636.81256384066},"targetPosition":{"x":24944.166666666668,"y":44636.81256384066},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Done"}}}]} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Trading-System-Design-Tutorials.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Trading-System-Design-Tutorials.json deleted file mode 100644 index ac3a00f4e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Trading-System-Design-Tutorials.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Workspace","name":"Trading System Design Tutorials","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataMining":{"type":"Data Mining","name":"New Data Mining","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[],"id":"af949a76-a6f4-4ec6-869e-f240480eea81","savedPayload":{"position":{"x":24959.356993272086,"y":30511.30353634463},"targetPosition":{"x":25109.356993272086,"y":30771.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a","savedPayload":{"position":{"x":25109.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMining":{"type":"Learning Mining","name":"New Learning Mining","project":"Superalgos","exchangeLearningTasks":[],"id":"1b19735e-0041-438f-824b-00df4f8942dd","savedPayload":{"position":{"x":25409.356993272086,"y":30771.11115747996},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingEnvironment":{"type":"Testing Environment","name":"New Testing Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[],"id":"ba36975c-08d6-458d-b7c0-eb4684a85b5d","savedPayload":{"position":{"x":25859.356993272086,"y":31030.918778615294},"targetPosition":{"x":25559.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"5882d8a8-345b-4188-b1c1-797e9ff805d9","savedPayload":{"position":{"x":25559.356993272086,"y":31030.918778615294},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"productionEnvironment":{"type":"Production Environment","name":"New Production Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[],"id":"d539c0ac-aaeb-4c44-9dba-ac26df819a8d","savedPayload":{"position":{"x":25559.356993272086,"y":31550.53402088596},"targetPosition":{"x":25409.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"65a40d20-837c-4652-8356-f8054b4e1346","savedPayload":{"position":{"x":25409.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"u"}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","project":"Superalgos","marketDataProducts":[],"id":"9bc0aea4-0596-449c-91bd-4fb4cb672aa8","savedPayload":{"position":{"x":25264.6484203336,"y":31870.28189552407},"targetPosition":{"x":25187.002706802843,"y":31580.504147637348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25187.002706802843,"y":31580.504147637348},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","exchangeTradingProducts":[{"type":"Exchange Trading Products","name":"Binance","project":"Superalgos","marketTradingProducts":[],"id":"f601d2a7-fada-477f-9b63-3ef7ed42d44a","savedPayload":{"position":{"x":24809.356993272086,"y":31810.341642021293},"targetPosition":{"x":24959.356993272086,"y":31550.53402088596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24959.356993272086,"y":31550.53402088596},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","exchangeLearningProducts":[],"id":"2845a687-becc-4c3b-bc79-b2293ba876ba","savedPayload":{"position":{"x":24819.579245385365,"y":31368.372113281384},"targetPosition":{"x":25109.356993272086,"y":31290.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25109.356993272086,"y":31290.726399750627},"targetPosition":{"x":25259.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25259.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24959.356993272086,"y":31030.918778615294},"targetPosition":{"x":24959.356993272086,"y":31030.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"Binance","config":"{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}","project":"Superalgos","assets":[{"type":"Asset","name":"Bitcoin","config":"{ \n\"codeName\": \"BTC\"\n}","project":"Superalgos","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa","savedPayload":{"position":{"x":19794.079365950267,"y":30512.325102172115},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Asset","name":"Tether","config":"{ \n\"codeName\": \"USDT\"\n}","project":"Superalgos","id":"f110bfa0-bd5b-469b-a940-4524c8688136","savedPayload":{"position":{"x":20006.21140030623,"y":30724.45713652808},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"95d2c30f-215b-486e-8119-f4eac0279575","savedPayload":{"position":{"x":19716.43365241951,"y":30802.102850058836},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"E"}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","code":"{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}","project":"Superalgos","markets":[{"type":"Market","name":"BTC/USDT","config":"{ \n\"codeName\": \"BTC/USDT\"\n}","project":"Superalgos","baseAsset":{"type":"Market Base Asset","name":"Bitcoin","project":"Superalgos","id":"1017b30d-de1b-4212-991e-9fd0a5b6c814","savedPayload":{"position":{"x":20394.079365950267,"y":30936.589170884043},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},"quotedAsset":{"type":"Market Quoted Asset","name":"Tether","project":"Superalgos","id":"705c4a67-787a-48cd-a3dc-3a557438bf0b","savedPayload":{"position":{"x":20394.079365950267,"y":31091.880597945557},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}},"id":"9a867bf0-a71d-445c-b99a-75b60bbdce09","savedPayload":{"position":{"x":20104.301618063546,"y":31014.2348844148},"targetPosition":{"x":19804.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fd80894-900e-44ac-a1a7-56c14124f7a1","savedPayload":{"position":{"x":19804.301618063546,"y":31014.2348844148},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[{"type":"Exchange Account Asset","name":"Bitcoin","project":"Superalgos","id":"ba6f3d5c-b36b-49d9-947f-392068109169","savedPayload":{"position":{"x":20508.121182548915,"y":31438.498953126727},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},{"type":"Exchange Account Asset","name":"Tether","project":"Superalgos","id":"c90be267-90f9-45ae-b225-0578adb4aad9","savedPayload":{"position":{"x":20430.475469018158,"y":31728.27670101345},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}}],"id":"8ac5c2a9-a238-48ae-ab43-0a0a95a37464","savedPayload":{"position":{"x":20218.343434662194,"y":31516.144666657485},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"Key for Lighting Strike","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e85bbbd6-aca8-450f-9237-788062de5761","savedPayload":{"position":{"x":20083.857113836988,"y":32018.05444890017},"targetPosition":{"x":20006.21140030623,"y":31728.27670101345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"48925cc9-f3cd-4499-8466-1338fed28a0d","savedPayload":{"position":{"x":20006.21140030623,"y":31728.27670101345},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"63794496-c94b-42f9-81cc-c588708617a6","savedPayload":{"position":{"x":19928.565686775473,"y":31438.498953126727},"targetPosition":{"x":19716.43365241951,"y":31226.366918770764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b0c1ac5-515f-44a9-b9b9-e698a9c51eac","savedPayload":{"position":{"x":19716.43365241951,"y":31226.366918770764},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b","savedPayload":{"position":{"x":19504.301618063546,"y":31014.2348844148},"targetPosition":{"x":19204.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"tutorial":{"status":"Done"}}}],"id":"e3879d63-6f8f-41a3-8ac3-0349c4361722","savedPayload":{"position":{"x":19204.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Untested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"ACX","config":"{ \n\"codeName\": \"acx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ebcb522b-ae58-46d2-9d82-a9b0beec3976","savedPayload":{"position":{"x":17935.64382962515,"y":31014.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b2649588-27c6-442c-b179-f6d8817188b3","savedPayload":{"position":{"x":17954.64382962515,"y":31004.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b2051d5-7ee7-4e94-8c8d-306674889339","savedPayload":{"position":{"x":17838.64382962515,"y":30896.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1d5461aa-d26c-4df5-b383-8c83e311b8ca","savedPayload":{"position":{"x":17643.64382962515,"y":30952.23747069523},"targetPosition":{"x":17698.64382962515,"y":30973.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c6372400-de52-4b63-97f3-f748aac9c63f","savedPayload":{"position":{"x":17698.64382962515,"y":30973.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c948314e-2247-4234-b83d-cc2c1b152665","savedPayload":{"position":{"x":17766.64382962515,"y":30905.23747069523},"targetPosition":{"x":17837.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04ccb742-ef1b-4138-b38d-a6b0d92f2f8e","savedPayload":{"position":{"x":17837.64382962515,"y":30978.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9c21b2d-de21-43b5-8b48-51367a8c981c","savedPayload":{"position":{"x":19313.14497226101,"y":30565.583066825377},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"AOFEX","config":"{ \n\"codeName\": \"aofex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"623ef91b-04c0-4bd5-ac0d-b32c809be3ea","savedPayload":{"position":{"x":17973.64382962515,"y":30923.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"9d0b5855-59a6-4dda-9a4b-33d7a44d582e","savedPayload":{"position":{"x":17901.64382962515,"y":30994.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"e898e569-0dd3-4a22-baa5-caaace66d4ed","savedPayload":{"position":{"x":18062.64382962515,"y":30838.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"64a69d3d-15ff-41c3-a926-5ec93c932ab1","savedPayload":{"position":{"x":17822.64382962515,"y":31052.23747069523},"targetPosition":{"x":17893.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae2785c5-75a1-44fc-a71b-363d88cb5dac","savedPayload":{"position":{"x":17893.64382962515,"y":30981.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07ea69aa-7357-43b1-b548-a4c4fab70c55","savedPayload":{"position":{"x":17982.64382962515,"y":30899.23747069523},"targetPosition":{"x":17971.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2146b410-fc4e-452d-ae57-5d58c9a29706","savedPayload":{"position":{"x":17971.64382962515,"y":30962.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c2e9bb45-97c7-47e8-b13c-56946e673c53","savedPayload":{"position":{"x":19413.67778623216,"y":30647.89853748846},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bequant","config":"{ \n\"codeName\": \"bequant\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"b23c8adf-c880-48fd-b4af-4b4be86cf0e5","savedPayload":{"position":{"x":18059.64382962515,"y":31101.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"523bd94f-68f9-457e-91fd-806c1b95e98d","savedPayload":{"position":{"x":18006.64382962515,"y":31117.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9d914bb1-a68b-41ae-8666-0fcc755358c1","savedPayload":{"position":{"x":17859.64382962515,"y":30964.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15d903b5-113c-465e-8120-7c46a9a85565","savedPayload":{"position":{"x":17976.64382962515,"y":31146.23747069523},"targetPosition":{"x":17943.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2d1c0bc3-abe2-4340-91bf-2eef5b98a2f0","savedPayload":{"position":{"x":17943.64382962515,"y":31134.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a50d459-914c-4bfc-91e8-f15c383280eb","savedPayload":{"position":{"x":17936.64382962515,"y":31059.23747069523},"targetPosition":{"x":17931.64382962515,"y":31071.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b2f2b69f-3bef-4edc-9950-5261d9f36382","savedPayload":{"position":{"x":17931.64382962515,"y":31071.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e928d3e-a2c2-4341-aa2f-b753551c9479","savedPayload":{"position":{"x":19504.72140465123,"y":30740.600980501622},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bibox","config":"{ \n\"codeName\": \"bibox\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"13c1f22c-9a35-4d3f-b000-c96984fd6a2b","savedPayload":{"position":{"x":17995.64382962515,"y":31047.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3c6df49d-70c3-468a-bdd8-6768ce6d3a9d","savedPayload":{"position":{"x":17916.64382962515,"y":31018.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a54ef39-8fba-4a5f-ac24-5f27e763e28f","savedPayload":{"position":{"x":18050.64382962515,"y":31174.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"08df1f45-dab0-463a-8758-359973f2620d","savedPayload":{"position":{"x":17899.64382962515,"y":31242.23747069523},"targetPosition":{"x":17959.64382962515,"y":31180.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"105b52c2-90ad-4fa1-b690-d8fab14209b4","savedPayload":{"position":{"x":17959.64382962515,"y":31180.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"68c1ef42-1b7b-4cc6-981f-80b20dabcd89","savedPayload":{"position":{"x":17956.64382962515,"y":31128.23747069523},"targetPosition":{"x":17907.64382962515,"y":31057.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc35e5d0-ea61-42b6-979a-859f19c5ac6c","savedPayload":{"position":{"x":17907.64382962515,"y":31057.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e5f9ee4d-77a3-48ae-b354-b2f6a97d5e47","savedPayload":{"position":{"x":19585.208424334218,"y":30842.603544479174},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BigONE","config":"{ \n\"codeName\": \"bigone\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"3f289513-c1c8-457c-b65a-8cf62b5f5eb5","savedPayload":{"position":{"x":17778.64382962515,"y":31071.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b365e73-1cee-496a-921f-121cb628a130","savedPayload":{"position":{"x":17798.64382962515,"y":31121.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"447a4f6f-cfa0-443e-9339-d7c1153ada31","savedPayload":{"position":{"x":17921.64382962515,"y":31046.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d234c53-c121-471e-bce1-a258c13cd148","savedPayload":{"position":{"x":17848.64382962515,"y":31175.23747069523},"targetPosition":{"x":17944.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"816e1b6a-d790-4abd-9ae1-e203fa737af2","savedPayload":{"position":{"x":17944.64382962515,"y":31086.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"561a57f7-8c22-4e50-840d-d983ed6bb864","savedPayload":{"position":{"x":17891.64382962515,"y":31102.23747069523},"targetPosition":{"x":17813.64382962515,"y":31064.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e243bd5d-ade7-46c8-876b-6ad8c6eb5e0a","savedPayload":{"position":{"x":17813.64382962515,"y":31064.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fb9ee540-bf12-4dda-bf87-cb6b58fce649","savedPayload":{"position":{"x":19654.195208565325,"y":30952.710342620318},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance Jersey","config":"{ \n\"codeName\": \"binanceje\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0b979ea9-7a2d-4744-9517-2dfa632dfafc","savedPayload":{"position":{"x":17852.64382962515,"y":30989.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b9a4497d-20f1-4c61-9a79-444e0fe0ddf4","savedPayload":{"position":{"x":17924.64382962515,"y":30952.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1b24d8a4-ec70-4501-838c-7633f6f7288e","savedPayload":{"position":{"x":17882.64382962515,"y":31051.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"627472e3-638f-4d68-a917-d0844d6a227b","savedPayload":{"position":{"x":17991.64382962515,"y":31190.23747069523},"targetPosition":{"x":17986.64382962515,"y":31110.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"b8ce75fb-93c9-4ca2-9b2b-9f8ed8af34f3","savedPayload":{"position":{"x":17986.64382962515,"y":31110.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08b226e4-14ee-4ad3-8d96-efe77cc38489","savedPayload":{"position":{"x":17942.64382962515,"y":31066.23747069523},"targetPosition":{"x":17949.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2771eb11-bc72-4273-9e1b-9ac5410c6354","savedPayload":{"position":{"x":17949.64382962515,"y":31009.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2782350a-84a2-40ec-87c6-3c8043376a18","savedPayload":{"position":{"x":19710.872950374665,"y":31069.630473388454},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance US","config":"{ \n\"codeName\": \"binanceus\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"817ee1cf-b44c-4458-a9c4-a05a17ea0510","savedPayload":{"position":{"x":17943.64382962515,"y":30999.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c6694e9e-74dc-4c2e-9151-90f1d6631b45","savedPayload":{"position":{"x":17937.64382962515,"y":30989.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"00144904-5363-49eb-b445-8c8283d92b0d","savedPayload":{"position":{"x":17838.64382962515,"y":31193.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e71aa3c-03d4-4dbd-bc50-43b30f59e655","savedPayload":{"position":{"x":17783.64382962515,"y":31148.23747069523},"targetPosition":{"x":17703.64382962515,"y":31182.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a4d0df32-c600-4421-b893-2a05f0442ed6","savedPayload":{"position":{"x":17703.64382962515,"y":31182.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7a39543a-00e1-452b-8aba-36c2b240f9fc","savedPayload":{"position":{"x":17781.64382962515,"y":31156.23747069523},"targetPosition":{"x":17799.64382962515,"y":31119.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2543c4e5-8233-4348-b6dc-e47aed1ff381","savedPayload":{"position":{"x":17799.64382962515,"y":31119.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0b2b67d2-853b-470e-8b13-925956ad5621","savedPayload":{"position":{"x":19754.577155060477,"y":31191.993155151424},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitbank","config":"{ \n\"codeName\": \"bitbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eb6b6842-9bf7-450e-baa3-7a87541a1cf6","savedPayload":{"position":{"x":17955.64382962515,"y":31107.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6353ff56-759f-457d-81f3-fdb8ae5b3e83","savedPayload":{"position":{"x":17942.64382962515,"y":31183.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a2b297c7-f33b-48b9-98fa-d339c7b0ff67","savedPayload":{"position":{"x":17999.64382962515,"y":31016.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce6c354-b294-4062-b763-421e5edb69de","savedPayload":{"position":{"x":17883.64382962515,"y":31186.23747069523},"targetPosition":{"x":17845.64382962515,"y":31202.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"547dbf6c-a292-46c0-a628-62856858121e","savedPayload":{"position":{"x":17845.64382962515,"y":31202.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"097055b3-37e5-4100-a24b-91e404fe49a6","savedPayload":{"position":{"x":17945.64382962515,"y":31116.23747069523},"targetPosition":{"x":17897.64382962515,"y":31142.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51aed4ce-0303-431e-a15f-e6f133f7a2cf","savedPayload":{"position":{"x":17897.64382962515,"y":31142.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c9a96a7-ed12-4b3e-bb51-306a8da131f5","savedPayload":{"position":{"x":19784.79543078195,"y":31318.363797342816},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitBay","config":"{ \n\"codeName\": \"bitbay\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83b4e523-72a7-41ce-9363-fe0c799dcac1","savedPayload":{"position":{"x":17861.64382962515,"y":30965.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"966698f7-8a28-42d7-bb80-f7cd0601e44f","savedPayload":{"position":{"x":17823.64382962515,"y":31026.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"554829eb-3d40-4b95-a1cd-9de943763e2c","savedPayload":{"position":{"x":17914.64382962515,"y":30924.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2f534989-7ca7-4c3d-b14a-3b1071543c8c","savedPayload":{"position":{"x":17845.64382962515,"y":30853.23747069523},"targetPosition":{"x":17832.64382962515,"y":30821.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2f6b76b4-51d4-434f-8aa1-ed86b0e26bd2","savedPayload":{"position":{"x":17832.64382962515,"y":30821.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cbcc3ab6-9758-4273-99d2-9d05fdd392b5","savedPayload":{"position":{"x":17876.64382962515,"y":30921.23747069523},"targetPosition":{"x":17805.64382962515,"y":31015.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dada6c12-7c41-4ab8-9922-908233829f58","savedPayload":{"position":{"x":17805.64382962515,"y":31015.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8778eee5-97a2-4f9d-bd25-cd5a64ec6663","savedPayload":{"position":{"x":19801.173495885087,"y":31447.26081972472},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"33508b53-2769-4f3d-8c98-9fa37e5cbf5b","savedPayload":{"position":{"x":17888.64382962515,"y":31043.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4d4ad5a1-81a7-4f92-83db-99f57ce261bb","savedPayload":{"position":{"x":17975.64382962515,"y":30868.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"29d52baf-645c-4d8f-9631-ebd391b4c815","savedPayload":{"position":{"x":18034.64382962515,"y":31066.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d615c33d-c6cf-4572-ac32-8e9ddeb5bb52","savedPayload":{"position":{"x":18023.64382962515,"y":30916.23747069523},"targetPosition":{"x":18106.64382962515,"y":30982.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"0c189040-6318-483c-b6d7-982370a3298d","savedPayload":{"position":{"x":18106.64382962515,"y":30982.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd60de4a-d17c-4ba7-936a-cbf2305fe3bb","savedPayload":{"position":{"x":18037.64382962515,"y":31012.23747069523},"targetPosition":{"x":18039.64382962515,"y":30964.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d247f4f5-6f16-4a59-a4a5-6d1554b43562","savedPayload":{"position":{"x":18039.64382962515,"y":30964.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c076027-683d-4778-8a6a-e60984980fdf","savedPayload":{"position":{"x":19803.51933253116,"y":31577.173022561386},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8fc7f955-5c81-446c-bbeb-205988bf1fc0","savedPayload":{"position":{"x":17830.64382962515,"y":31051.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d5ba38e9-3282-4634-b922-16532c71f426","savedPayload":{"position":{"x":17819.64382962515,"y":31118.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1cebbed5-28f7-4ccd-afce-9e7634d90fb6","savedPayload":{"position":{"x":17892.64382962515,"y":30997.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d109aa9-c80c-4a64-96f0-1d8fda0a70a4","savedPayload":{"position":{"x":17888.64382962515,"y":30805.23747069523},"targetPosition":{"x":17942.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5459ab1e-a1ce-4dae-ae72-61c1f7f37ce0","savedPayload":{"position":{"x":17942.64382962515,"y":30905.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a4615f7a-000d-4ff9-b5ac-109bc9a3a849","savedPayload":{"position":{"x":17855.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e10d303e-ea21-4625-bae1-c32ad7a44e8a","savedPayload":{"position":{"x":17919.64382962515,"y":31043.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f3114102-a73c-4086-9594-5888ef1ab4ec","savedPayload":{"position":{"x":19791.80543793031,"y":31706.577304054405},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitforex","config":"{ \n\"codeName\": \"bitforex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"698e5e38-ad73-4cb6-b7f6-2b69913faff9","savedPayload":{"position":{"x":17897.64382962515,"y":30956.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"f0142bd4-1b63-4d12-a4b7-e150d0da197f","savedPayload":{"position":{"x":18020.64382962515,"y":31021.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"7164fb28-405b-461a-a7d4-59d438ecf1ce","savedPayload":{"position":{"x":17821.64382962515,"y":30984.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ce8a00c9-f090-4ec2-84ed-c6661f8bf7b0","savedPayload":{"position":{"x":17825.64382962515,"y":30965.23747069523},"targetPosition":{"x":17818.64382962515,"y":30913.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"579cd74b-98f6-4000-990b-25ae1456c94b","savedPayload":{"position":{"x":17818.64382962515,"y":30913.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dbac6eef-25d2-4cda-86a6-59ce8a9a26bc","savedPayload":{"position":{"x":17901.64382962515,"y":30907.23747069523},"targetPosition":{"x":17909.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1da9dd3-22ec-4536-bb5a-4d0bb8a56b81","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"499a5a3b-7871-4c95-9b2e-d58d4d9e2392","savedPayload":{"position":{"x":19766.169146786622,"y":31833.956517318737},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitkk","config":"{ \n\"codeName\": \"bitkk\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"efbb916c-780b-447f-a4c2-df68570d4ee1","savedPayload":{"position":{"x":17931.64382962515,"y":30937.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0d829516-81d9-46a5-9861-7d94cc89455d","savedPayload":{"position":{"x":17951.64382962515,"y":30912.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fc174aa3-c485-4b9b-ba19-444b0189ccb1","savedPayload":{"position":{"x":17788.64382962515,"y":30980.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15921d8a-4b45-481c-9165-79969ed3fd27","savedPayload":{"position":{"x":17796.64382962515,"y":30936.23747069523},"targetPosition":{"x":17891.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"927d5c8a-85df-48bb-b097-c36abb76ca0e","savedPayload":{"position":{"x":17891.64382962515,"y":30922.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"43d218c2-e633-47d5-8dd8-60bc7f7c0b9e","savedPayload":{"position":{"x":17834.64382962515,"y":30983.23747069523},"targetPosition":{"x":17853.64382962515,"y":30925.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2d310d61-cbc7-4306-af02-be3888939545","savedPayload":{"position":{"x":17853.64382962515,"y":30925.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ded39740-3c93-4fda-bb9c-6ac75d2109f4","savedPayload":{"position":{"x":19726.911021174266,"y":31957.817257542785},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMart","config":"{ \n\"codeName\": \"bitmart\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"10374855-6b4a-460b-9c95-70072ac00315","savedPayload":{"position":{"x":17907.64382962515,"y":30901.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3aded60c-4061-48ff-ad33-212c965b5c43","savedPayload":{"position":{"x":17829.64382962515,"y":30925.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1789a3ca-d948-497d-8d1b-1eefd25d16a3","savedPayload":{"position":{"x":17886.64382962515,"y":30937.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"038170bc-0ca7-4a92-8219-61b7bc8431b0","savedPayload":{"position":{"x":17893.64382962515,"y":31034.23747069523},"targetPosition":{"x":17835.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"55f79ede-ef02-405f-92bd-11902ab3cc7a","savedPayload":{"position":{"x":17835.64382962515,"y":30962.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8185c660-4af3-4a62-bfa9-8922861101b5","savedPayload":{"position":{"x":17895.64382962515,"y":30988.23747069523},"targetPosition":{"x":17819.64382962515,"y":30909.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"546d48c3-df31-495c-b3b4-cb35109c5542","savedPayload":{"position":{"x":17819.64382962515,"y":30909.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c7ed52a7-895b-46f1-a745-35954d8bcfc6","savedPayload":{"position":{"x":19674.491326722004,"y":32076.707370794375},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMax","config":"{ \n\"codeName\": \"bitmax\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8a042d0d-7a7a-4a76-889e-42d8642404f4","savedPayload":{"position":{"x":17944.64382962515,"y":31046.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0c4fcc48-51e6-4ff2-925f-405cda6d1122","savedPayload":{"position":{"x":17898.64382962515,"y":31024.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ef9d5381-d9e3-47f5-9069-6fc14eda0fa3","savedPayload":{"position":{"x":17879.64382962515,"y":31096.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c66fe606-9705-45b0-a196-7ea3efb0221e","savedPayload":{"position":{"x":17982.64382962515,"y":31053.23747069523},"targetPosition":{"x":17943.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"80a5f68e-776a-44de-8797-d2eb806c306e","savedPayload":{"position":{"x":17943.64382962515,"y":31083.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"011fcf1c-1c94-4c36-a246-d6c400aa39dc","savedPayload":{"position":{"x":17977.64382962515,"y":31041.23747069523},"targetPosition":{"x":17942.64382962515,"y":31103.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4a87b8c5-e009-427f-afb7-21afe5594b59","savedPayload":{"position":{"x":17942.64382962515,"y":31103.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fc6a9048-ab8c-48f9-91ae-6c95c28714b0","savedPayload":{"position":{"x":19609.524636419505,"y":32189.2329791979},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMEX","config":"{ \n\"codeName\": \"bitmex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f7636e2b-354a-4217-894b-5e26eddc0c2a","savedPayload":{"position":{"x":17894.64382962515,"y":30934.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6eb2ddd1-6d06-456c-b4e0-7df56ba182e6","savedPayload":{"position":{"x":17823.64382962515,"y":30834.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4a4b8fe-d923-4eb0-a066-171b83d1540d","savedPayload":{"position":{"x":17902.64382962515,"y":31064.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"918ed585-ce46-4d51-a07a-9beee51f70eb","savedPayload":{"position":{"x":17711.64382962515,"y":31036.23747069523},"targetPosition":{"x":17805.64382962515,"y":31078.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9efef4d8-5be3-4d17-a645-6edffd9535cf","savedPayload":{"position":{"x":17805.64382962515,"y":31078.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ad31a6e-f27b-45c3-9996-a41fb39aa154","savedPayload":{"position":{"x":17815.64382962515,"y":30988.23747069523},"targetPosition":{"x":17844.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"82887393-cb1c-4b01-8581-4b3dabc86584","savedPayload":{"position":{"x":17844.64382962515,"y":30896.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e2f1dd0-ebf1-4485-83d8-7723a9e3e714","savedPayload":{"position":{"x":19532.77262531095,"y":32294.07482287797},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bittrex","config":"{ \n\"codeName\": \"bittrex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"88d4ef94-f030-42df-9115-69d9611317b1","savedPayload":{"position":{"x":17839.64382962515,"y":31009.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"7fe8234d-9a39-4b28-bf98-43b4fdb57ee5","savedPayload":{"position":{"x":17878.64382962515,"y":31045.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5ba7fe13-1e0f-403a-8f4b-8e3968d2e5e2","savedPayload":{"position":{"x":17841.64382962515,"y":30890.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e926fbb8-d2ac-4e3d-aa59-a0a828d202fd","savedPayload":{"position":{"x":17707.64382962515,"y":30983.23747069523},"targetPosition":{"x":17782.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"4fbe41e1-cb15-4bc2-a3de-681c5b22cc97","savedPayload":{"position":{"x":17782.64382962515,"y":31052.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ab9fe180-1c07-44de-a0a1-863761ac52d6","savedPayload":{"position":{"x":17742.64382962515,"y":30961.23747069523},"targetPosition":{"x":17796.64382962515,"y":30903.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"584f29ca-9b3c-4b7f-a2b0-aab4180ecefd","savedPayload":{"position":{"x":17796.64382962515,"y":30903.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f598f002-8fc5-491f-888e-07d017ea83c6","savedPayload":{"position":{"x":19445.135140551556,"y":32390.003727075255},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bit-Z","config":"{ \n\"codeName\": \"bitz\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0a22e02b-7d2e-4955-9cfc-ed7d95f0c9a0","savedPayload":{"position":{"x":17751.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"298b45af-b73d-4cd5-848a-97de7b857569","savedPayload":{"position":{"x":17944.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6ede807b-b1ab-42b5-bfd7-3b12a942447e","savedPayload":{"position":{"x":17871.64382962515,"y":31049.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"dc172858-3241-4487-950a-e5cae03ac376","savedPayload":{"position":{"x":17751.64382962515,"y":31081.23747069523},"targetPosition":{"x":17753.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"19c07cee-1fdf-4e02-ac9f-d110b64ee033","savedPayload":{"position":{"x":17753.64382962515,"y":31028.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4ef5048-ac4c-410e-bd6d-3338e33ab108","savedPayload":{"position":{"x":17772.64382962515,"y":31098.23747069523},"targetPosition":{"x":17788.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e7e96c41-c839-4eec-9bcf-1c60d60fa3f5","savedPayload":{"position":{"x":17788.64382962515,"y":31134.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6cc10926-fe41-43be-887b-fa8aba1c7377","savedPayload":{"position":{"x":19347.639651522415,"y":32475.89501309667},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC-Alpha","config":"{ \n\"codeName\": \"btcalpha\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"263e3b9c-8fdd-4376-b53b-87f32d0f5898","savedPayload":{"position":{"x":17904.64382962515,"y":30922.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"804603e1-3e0f-4219-a9b7-ee27810d4f07","savedPayload":{"position":{"x":17829.64382962515,"y":30977.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"83b25fff-e448-483f-9bee-cb85fa592c6e","savedPayload":{"position":{"x":17734.64382962515,"y":30862.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"efcfa3ca-0f82-4eb7-9b04-ed5eb4e1c3cf","savedPayload":{"position":{"x":17799.64382962515,"y":30864.23747069523},"targetPosition":{"x":17837.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9ca8d728-ee11-4905-9a3a-5ca4ed50f3df","savedPayload":{"position":{"x":17837.64382962515,"y":30919.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2cfde277-afa6-4ad3-bb5b-8a32b89e2037","savedPayload":{"position":{"x":17829.64382962515,"y":30960.23747069523},"targetPosition":{"x":17903.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"297a0ea2-f6d7-47fd-9fb7-0d99d00a87d8","savedPayload":{"position":{"x":17903.64382962515,"y":30969.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30e5485f-213b-435b-a670-07b76cfe5cae","savedPayload":{"position":{"x":19241.429203691412,"y":32550.741684144767},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC Markets","config":"{ \n\"codeName\": \"btcmarkets\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"fcb3b880-0852-4d93-8714-67373f9dca16","savedPayload":{"position":{"x":17911.64382962515,"y":31036.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"953d8eff-0b2e-4b07-8635-393fddae0c9d","savedPayload":{"position":{"x":18025.64382962515,"y":31127.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c08873f6-9120-4764-8b06-c8110468b423","savedPayload":{"position":{"x":17935.64382962515,"y":30927.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"beaa2557-4976-4e53-8a24-7ea00fc3afd5","savedPayload":{"position":{"x":18054.64382962515,"y":30851.23747069523},"targetPosition":{"x":18125.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"445158a2-91b4-4ad8-8380-036cbba6ad7e","savedPayload":{"position":{"x":18125.64382962515,"y":30951.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd00e08c-a26d-4b11-93a3-b0e8f35bec4b","savedPayload":{"position":{"x":18027.64382962515,"y":31003.23747069523},"targetPosition":{"x":18016.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35cb55c1-ceb3-4093-98af-8a1c2411fe0f","savedPayload":{"position":{"x":18016.64382962515,"y":31075.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ac2fda42-95ca-404a-8dd2-72bff0ff5a0f","savedPayload":{"position":{"x":19127.749017450227,"y":32613.66623143447},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Buda","config":"{ \n\"codeName\": \"buda\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"27f3573d-e1f0-473f-9bfd-f9198e7240a0","savedPayload":{"position":{"x":17945.64382962515,"y":30937.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ddc0981-4e45-42f3-ae11-f5b136b2bc3d","savedPayload":{"position":{"x":17783.64382962515,"y":31008.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a325d59-e6a6-4f76-a311-5e67c5f5a8a2","savedPayload":{"position":{"x":17980.64382962515,"y":30843.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"fb985ab9-7759-4780-a052-8ee9be0b712a","savedPayload":{"position":{"x":17907.64382962515,"y":30968.23747069523},"targetPosition":{"x":17958.64382962515,"y":30884.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fdf7665a-2974-467b-9280-4077a888733f","savedPayload":{"position":{"x":17958.64382962515,"y":30884.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a3105cfc-f80e-4bcb-b399-6ea9c0f7edf0","savedPayload":{"position":{"x":17956.64382962515,"y":30936.23747069523},"targetPosition":{"x":17872.64382962515,"y":30941.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5d69a76f-e7bc-4538-950e-2e2353eccea3","savedPayload":{"position":{"x":17872.64382962515,"y":30941.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"90fe3d74-662e-4fac-aff3-f41990b61ccf","savedPayload":{"position":{"x":19007.931889043757,"y":32663.930922181273},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BW","config":"{ \n\"codeName\": \"bw\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"457616cd-25f9-4ad3-8c18-6331859dd42e","savedPayload":{"position":{"x":17890.64382962515,"y":31014.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8c1f9aa2-4253-4129-a533-e515644ddb38","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"24314a5b-85ca-4036-adc6-618120496f1d","savedPayload":{"position":{"x":17773.64382962515,"y":30945.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"f7c593f6-bd7a-41f7-a5e7-b2e1ea9a528f","savedPayload":{"position":{"x":17820.64382962515,"y":30885.23747069523},"targetPosition":{"x":17828.64382962515,"y":30802.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"60dfc799-f863-4895-8d17-568aa2303ef5","savedPayload":{"position":{"x":17828.64382962515,"y":30802.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"223e466d-d750-4e38-91ce-8a59c15242ba","savedPayload":{"position":{"x":17860.64382962515,"y":30865.23747069523},"targetPosition":{"x":17818.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cfff1310-5220-4978-9553-8514be141d14","savedPayload":{"position":{"x":17818.64382962515,"y":30919.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d72db90c-d572-4cbb-8348-e3cc485d8e86","savedPayload":{"position":{"x":18883.38256475272,"y":32700.94644884361},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bybit","config":"{ \n\"codeName\": \"bybit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"18fdf7c8-03c4-4f81-a88e-de97589765e1","savedPayload":{"position":{"x":17803.64382962515,"y":31059.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a62b2603-ac6f-4b6e-9541-86daf32027b1","savedPayload":{"position":{"x":17847.64382962515,"y":31104.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"66ecff99-7102-4f4a-9ce8-4d55fb22dfbc","savedPayload":{"position":{"x":17851.64382962515,"y":31165.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"625e127c-0ebb-4f57-af9f-9dfb57b262a1","savedPayload":{"position":{"x":18004.64382962515,"y":31091.23747069523},"targetPosition":{"x":18008.64382962515,"y":31027.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"8174bb53-66b8-4575-b206-74f9b6352a80","savedPayload":{"position":{"x":18008.64382962515,"y":31027.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ee16357e-abde-4800-b089-f43f4b696a35","savedPayload":{"position":{"x":17916.64382962515,"y":31077.23747069523},"targetPosition":{"x":17944.64382962515,"y":31101.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9e9473b-aff9-43c8-a6be-5cd30330bee2","savedPayload":{"position":{"x":17944.64382962515,"y":31101.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"516c3831-456b-4d17-b0a0-6a363ba2ddb2","savedPayload":{"position":{"x":18755.561271527895,"y":32724.27883821499},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ByteTrade","config":"{ \n\"codeName\": \"bytetrade\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e7a1e531-5a9e-466e-b98d-672de39eed3a","savedPayload":{"position":{"x":18088.64382962515,"y":31024.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"edafaba7-fd82-4d9f-b3f7-5d1c01c56599","savedPayload":{"position":{"x":17941.64382962515,"y":30943.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"50fa78b8-3aea-4e43-adcf-1e31820bf97f","savedPayload":{"position":{"x":17886.64382962515,"y":31008.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"b9c39b04-e86e-4ebb-9aba-39c375f2960c","savedPayload":{"position":{"x":17865.64382962515,"y":30941.23747069523},"targetPosition":{"x":17953.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5965d9cc-1d68-47a7-b838-e6dd81da6ea9","savedPayload":{"position":{"x":17953.64382962515,"y":31023.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f51a08be-ee3f-4d3b-a75e-d783d63092a7","savedPayload":{"position":{"x":17858.64382962515,"y":30967.23747069523},"targetPosition":{"x":17898.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d395efd0-691b-4a68-a7f1-9bce95b2f687","savedPayload":{"position":{"x":17898.64382962515,"y":30965.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45e2306f-03e8-4d17-a73a-72c11dd14e78","savedPayload":{"position":{"x":18625.966597164217,"y":32733.65453936303},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CEX.IO","config":"{ \n\"codeName\": \"cex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9de19f0a-5824-4e42-af00-484b64421dc3","savedPayload":{"position":{"x":17890.64382962515,"y":31049.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"39db01bc-0cea-422f-b9e9-7d84e3f5446d","savedPayload":{"position":{"x":17918.64382962515,"y":31105.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"93833d3c-42c9-4e4d-bf0f-5b80a90d10c2","savedPayload":{"position":{"x":17978.64382962515,"y":31126.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"42863a52-30f4-4322-9c20-99a45d6dc3d6","savedPayload":{"position":{"x":17884.64382962515,"y":31149.23747069523},"targetPosition":{"x":17895.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fcff471d-29be-4176-8ff8-12088361f9fc","savedPayload":{"position":{"x":17895.64382962515,"y":31148.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f7975a18-b3ab-49bc-ae45-eb02c99aff8c","savedPayload":{"position":{"x":17953.64382962515,"y":31167.23747069523},"targetPosition":{"x":17881.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ec432123-43fe-4171-8c41-b797d3161edb","savedPayload":{"position":{"x":17881.64382962515,"y":31096.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"346bfc30-e32a-453a-bdc6-0ead48221581","savedPayload":{"position":{"x":18496.117920729066,"y":32728.96363076407},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Prime","config":"{ \n\"codeName\": \"coinbaseprime\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"73cabd8d-9308-49ed-b544-44f785ee7d38","savedPayload":{"position":{"x":17867.64382962515,"y":30962.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"31bd1360-f0c5-4d70-876a-b152f7cedfd7","savedPayload":{"position":{"x":17960.64382962515,"y":30864.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b75fcfa-fe75-48a8-9d28-2ff19c58c041","savedPayload":{"position":{"x":17792.64382962515,"y":30841.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c900b14a-c728-45af-90f8-29b3e5f29f46","savedPayload":{"position":{"x":17801.64382962515,"y":30986.23747069523},"targetPosition":{"x":17793.64382962515,"y":31006.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"eaf72df3-b66f-4b83-83f9-91e22ec0c300","savedPayload":{"position":{"x":17793.64382962515,"y":31006.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9da95675-2071-41bf-b5ac-4f2af602994f","savedPayload":{"position":{"x":17809.64382962515,"y":30934.23747069523},"targetPosition":{"x":17862.64382962515,"y":31021.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4fc49ad4-57cc-43b0-b14b-15f26af994aa","savedPayload":{"position":{"x":17862.64382962515,"y":31021.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a8281db-6ace-4186-8cfb-cd249c4af48b","savedPayload":{"position":{"x":18367.537599231866,"y":32710.26110903248},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Pro","config":"{ \n\"codeName\": \"coinbasepro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a29d6e1a-a94e-4b6b-8741-e9af6e4762f4","savedPayload":{"position":{"x":17788.64382962515,"y":30897.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"10cd9004-0088-4bc0-8fe6-b937f1bb311b","savedPayload":{"position":{"x":17865.64382962515,"y":30918.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"004397e6-ae73-46a6-9ed7-b4ba1930f77b","savedPayload":{"position":{"x":17945.64382962515,"y":30899.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"a81a7021-2228-4386-a773-9ac80c9e723a","savedPayload":{"position":{"x":17738.64382962515,"y":30761.23747069523},"targetPosition":{"x":17792.64382962515,"y":30789.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"482d82f2-364e-483c-b51a-a3fbe8a91577","savedPayload":{"position":{"x":17792.64382962515,"y":30789.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d823ad8e-0452-40f0-bad9-c2cb3ad29a21","savedPayload":{"position":{"x":17850.64382962515,"y":30889.23747069523},"targetPosition":{"x":17772.64382962515,"y":30894.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c965322-fdd2-4e67-aaf3-dfc4b9dffc59","savedPayload":{"position":{"x":17772.64382962515,"y":30894.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4242da4b-a67e-44d8-8a19-b1c2f078c94c","savedPayload":{"position":{"x":18241.733119380056,"y":32677.766244135688},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CoinEx","config":"{ \n\"codeName\": \"coinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"af78f796-60e5-4794-87b8-772c7bc74be1","savedPayload":{"position":{"x":18043.64382962515,"y":31069.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d351e6d9-36eb-4d0e-aca5-94429bbb23a3","savedPayload":{"position":{"x":18094.64382962515,"y":31090.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"438f74c6-15e0-4553-af2a-febd5290c269","savedPayload":{"position":{"x":17908.64382962515,"y":31088.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"bfb22430-77c7-41a7-8083-771f7d7f3634","savedPayload":{"position":{"x":17927.64382962515,"y":30953.23747069523},"targetPosition":{"x":17947.64382962515,"y":30990.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"51daaa12-1c60-4cef-96d8-a445b4b32296","savedPayload":{"position":{"x":17947.64382962515,"y":30990.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"726b8c33-9873-4be1-b9ef-d6b4483f23b1","savedPayload":{"position":{"x":17986.64382962515,"y":31075.23747069523},"targetPosition":{"x":17919.64382962515,"y":31016.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"30469514-b983-4f6f-9d74-6d6ceef25eb6","savedPayload":{"position":{"x":17919.64382962515,"y":31016.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"62ad0961-6bdf-4a4a-a340-610816742d0a","savedPayload":{"position":{"x":18120.179423675774,"y":32631.860008654276},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"COSS","config":"{ \n\"codeName\": \"coss\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e6315232-c6b1-4e25-aade-7bc7ba9ba6ac","savedPayload":{"position":{"x":17787.64382962515,"y":30984.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b1e8451f-09a2-47b0-add3-cf9c35c487bb","savedPayload":{"position":{"x":17829.64382962515,"y":31095.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d1c9b795-0434-4ce1-9cb7-cc61fac7396d","savedPayload":{"position":{"x":17950.64382962515,"y":31149.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"22be64f9-4b08-4ac3-ae89-6726743a7d5a","savedPayload":{"position":{"x":17890.64382962515,"y":31165.23747069523},"targetPosition":{"x":17956.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7462500-ba74-4bf3-ad81-35fa232bede3","savedPayload":{"position":{"x":17956.64382962515,"y":31156.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cd41ced-981a-4075-af43-3a0497eb0fcb","savedPayload":{"position":{"x":17882.64382962515,"y":31131.23747069523},"targetPosition":{"x":17856.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5937899-c6ee-4d7a-b259-1ee23d721f60","savedPayload":{"position":{"x":17856.64382962515,"y":31148.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"695029de-7f61-45bb-aa4c-c6d51e6369ed","savedPayload":{"position":{"x":18004.301618063546,"y":32573.08061122679},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CREX24","config":"{ \n\"codeName\": \"crex24\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c5e12f4a-fb26-40d3-9e70-751b55018e74","savedPayload":{"position":{"x":17910.64382962515,"y":31024.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"00cb629e-bad4-4c6e-8abb-499cad3992f4","savedPayload":{"position":{"x":17938.64382962515,"y":31054.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"4909d182-e0d5-49a9-8ad2-a553c8aaaf88","savedPayload":{"position":{"x":17912.64382962515,"y":31301.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"075eb2a2-299b-4a0f-9f6d-76c385521dc4","savedPayload":{"position":{"x":17800.64382962515,"y":31332.23747069523},"targetPosition":{"x":17883.64382962515,"y":31289.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"e062ef2e-b252-4a66-8f58-d9aa8031f526","savedPayload":{"position":{"x":17883.64382962515,"y":31289.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e75be98-f874-486d-b749-536e364934dc","savedPayload":{"position":{"x":17920.64382962515,"y":31249.23747069523},"targetPosition":{"x":17845.64382962515,"y":31164.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"052f73cd-7ed7-4537-8b01-840b5b892fea","savedPayload":{"position":{"x":17845.64382962515,"y":31164.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07a7ec7c-273e-4675-8d8d-21ab8514a1f0","savedPayload":{"position":{"x":17895.458263866083,"y":32502.117186545547},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Deribit","config":"{ \n\"codeName\": \"deribit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f0b2354b-89e3-4eca-b051-664a3b8283f6","savedPayload":{"position":{"x":17862.64382962515,"y":30844.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ae1f824-82a8-4796-a2d5-3d2358d8089f","savedPayload":{"position":{"x":17912.64382962515,"y":31024.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2013fe7a-d52c-4c9d-ba53-d281d014a8fc","savedPayload":{"position":{"x":17873.64382962515,"y":30926.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706d5778-ed21-49bd-9277-1840ec52708d","savedPayload":{"position":{"x":17729.64382962515,"y":31033.23747069523},"targetPosition":{"x":17813.64382962515,"y":31053.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2e76bc02-6e10-4f14-9bf1-a11dc4268466","savedPayload":{"position":{"x":17813.64382962515,"y":31053.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"89a3ccc7-20ab-4e2d-929b-52d9286179b7","savedPayload":{"position":{"x":17855.64382962515,"y":30967.23747069523},"targetPosition":{"x":17818.64382962515,"y":30920.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5c8219e3-4509-4b8b-941b-b88ac2c12237","savedPayload":{"position":{"x":17818.64382962515,"y":30920.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"21971815-4248-45df-8e04-20b9a5a83f06","savedPayload":{"position":{"x":17794.92544989493,"y":32419.801715882462},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DigiFinex","config":"{ \n\"codeName\": \"digifinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e583c93e-9a44-4e0d-acb7-56d7e00a555a","savedPayload":{"position":{"x":17954.64382962515,"y":30992.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8917c7c0-b420-4d4f-a35a-c0fc6870f0de","savedPayload":{"position":{"x":18052.64382962515,"y":30972.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a00b5bb0-5ab9-42e2-91fe-b450c7eb66d2","savedPayload":{"position":{"x":18220.64382962515,"y":31090.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2aafc473-339b-4d23-9b74-06fa7574c293","savedPayload":{"position":{"x":18144.64382962515,"y":31123.23747069523},"targetPosition":{"x":18203.64382962515,"y":31084.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"99e9e136-1ac7-4400-a100-0a2d37f0882d","savedPayload":{"position":{"x":18203.64382962515,"y":31084.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7cee21b-ddcb-4fd7-b610-43aabb2d1766","savedPayload":{"position":{"x":18123.64382962515,"y":30998.23747069523},"targetPosition":{"x":18032.64382962515,"y":30976.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e84a25-4368-4ad6-939f-5a16cece62cc","savedPayload":{"position":{"x":18032.64382962515,"y":30976.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7d56781-0c51-4ec1-95fd-bf4dc8c00352","savedPayload":{"position":{"x":17703.88183147586,"y":32327.0992728693},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DSX","config":"{ \n\"codeName\": \"dsx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"d672ab56-cd32-4ff5-8fc5-3733262aeccb","savedPayload":{"position":{"x":17916.64382962515,"y":31106.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3731a7b5-ba9d-483e-bb41-abf3ae0232c6","savedPayload":{"position":{"x":17878.64382962515,"y":30946.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9ef7e0ac-dc27-4b47-a06e-0cb7e80ee3d7","savedPayload":{"position":{"x":18124.64382962515,"y":31136.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"77491a3c-3db7-446f-aa67-9b5a1a3be7b3","savedPayload":{"position":{"x":18109.64382962515,"y":31081.23747069523},"targetPosition":{"x":18188.64382962515,"y":31137.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"bd1bd0b7-4943-4aeb-bf90-d3192dcabbb1","savedPayload":{"position":{"x":18188.64382962515,"y":31137.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45747fef-f30e-4fae-b02d-5768ae7dbe68","savedPayload":{"position":{"x":18093.64382962515,"y":31072.23747069523},"targetPosition":{"x":18018.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2e1c9b-428c-4bb0-9e75-ceb8c9043d4b","savedPayload":{"position":{"x":18018.64382962515,"y":31005.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4c543abc-7372-4701-bc58-107578d45c25","savedPayload":{"position":{"x":17623.394811792878,"y":32225.09670889175},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoin","config":"{ \n\"codeName\": \"fcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a97d578c-6d7f-403c-8294-18aacf14abd8","savedPayload":{"position":{"x":17893.64382962515,"y":30953.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"442c3834-482e-4928-9255-8ac859ae012e","savedPayload":{"position":{"x":17905.64382962515,"y":30896.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"79754959-1219-4c4d-be63-22766158beb5","savedPayload":{"position":{"x":18106.64382962515,"y":30976.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1c3ae096-5024-43c3-abca-24498254e363","savedPayload":{"position":{"x":18112.64382962515,"y":30919.23747069523},"targetPosition":{"x":18126.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"59db5bfd-e413-48a7-af63-237ad56adc82","savedPayload":{"position":{"x":18126.64382962515,"y":30965.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"833c4e54-08f4-48ec-b90a-2767eb55f244","savedPayload":{"position":{"x":18069.64382962515,"y":31056.23747069523},"targetPosition":{"x":17996.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8cf17b3-0ea7-4a14-8c76-f655344b58a3","savedPayload":{"position":{"x":17996.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ddedcbd-07cb-4928-91b3-348f47118391","savedPayload":{"position":{"x":17554.408027561767,"y":32114.989910750606},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoinJP","config":"{ \n\"codeName\": \"fcoinjp\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"4a8a9810-6df6-451a-ab26-22bd7e7be85a","savedPayload":{"position":{"x":17930.64382962515,"y":31129.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"138ab40c-18ca-4a11-9709-0baa040873e6","savedPayload":{"position":{"x":18007.64382962515,"y":31122.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"258cdf92-8ed0-4133-ae2a-b9f086f56a13","savedPayload":{"position":{"x":17897.64382962515,"y":30887.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"537e8f0c-05ca-4403-bc96-da6c2f4678ae","savedPayload":{"position":{"x":17825.64382962515,"y":30842.23747069523},"targetPosition":{"x":17836.64382962515,"y":30926.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"62519e63-8f4e-4b72-a341-0a6eea01ac3f","savedPayload":{"position":{"x":17836.64382962515,"y":30926.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4974cc1-f594-436b-8aa4-aff2733b8e3c","savedPayload":{"position":{"x":17903.64382962515,"y":30977.23747069523},"targetPosition":{"x":17873.64382962515,"y":31061.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d84b404f-75e2-4eb5-b34a-b45af8a57ca7","savedPayload":{"position":{"x":17873.64382962515,"y":31061.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"982627ea-df84-4ba9-9219-612fbe1e4276","savedPayload":{"position":{"x":17497.730285752426,"y":31998.069779982467},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FTX","config":"{ \n\"codeName\": \"ftx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"20c0a4f5-bdb9-46cc-af7e-2111964551e3","savedPayload":{"position":{"x":17886.64382962515,"y":30940.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"75c99a0b-d3c9-4073-9283-d33e539c36bb","savedPayload":{"position":{"x":17992.64382962515,"y":31061.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2e037470-549e-4aa8-bbe7-95cdeaef88ea","savedPayload":{"position":{"x":17964.64382962515,"y":31027.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3b6f5b7b-9c61-4b71-b29a-ca1bc027e55f","savedPayload":{"position":{"x":17817.64382962515,"y":30943.23747069523},"targetPosition":{"x":17890.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a84010f0-04b5-4eab-a3a6-a5944b80a373","savedPayload":{"position":{"x":17890.64382962515,"y":30978.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cdc51a3-6136-4e03-9e2c-26a752140d17","savedPayload":{"position":{"x":17970.64382962515,"y":31008.23747069523},"targetPosition":{"x":18010.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55258a2b-3199-4070-beed-d34a8496870c","savedPayload":{"position":{"x":18010.64382962515,"y":30986.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0c0bcf5c-2774-423e-9fcf-c512b38dd06d","savedPayload":{"position":{"x":17454.026081066615,"y":31875.707098219504},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gate.io","config":"{ \n\"codeName\": \"gateio\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"71a15089-9d40-4726-9a41-37d406064164","savedPayload":{"position":{"x":17930.64382962515,"y":30993.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c025e976-c2c6-49de-81ec-48e2f737b412","savedPayload":{"position":{"x":17925.64382962515,"y":31053.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"876f964a-e12d-4438-87fb-a84be22f86d1","savedPayload":{"position":{"x":17914.64382962515,"y":30833.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0c5d34c4-467f-4e98-bd39-1b2d9afb834e","savedPayload":{"position":{"x":17852.64382962515,"y":30831.23747069523},"targetPosition":{"x":17870.64382962515,"y":30847.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"89316d8c-893a-46ae-b147-948b4b8a5292","savedPayload":{"position":{"x":17870.64382962515,"y":30847.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a2a5de53-bd45-4904-8bae-0cf5ed66d2af","savedPayload":{"position":{"x":17827.64382962515,"y":30882.23747069523},"targetPosition":{"x":17800.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f6f4072d-8cf6-4e47-8b4e-a21cd553348a","savedPayload":{"position":{"x":17800.64382962515,"y":30936.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c4028289-4cdb-4da0-90e6-5f93328b8e03","savedPayload":{"position":{"x":17423.807805345143,"y":31749.336456028108},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gemini","config":"{ \n\"codeName\": \"gemini\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9eb15872-8d15-4086-9920-46909eb5f9e7","savedPayload":{"position":{"x":17951.64382962515,"y":30901.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a84dcf06-57c6-47d7-97a0-9f03f3af8b34","savedPayload":{"position":{"x":18045.64382962515,"y":30891.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5da1ba65-3839-4664-8105-2ccb11652767","savedPayload":{"position":{"x":18028.64382962515,"y":31112.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"337fe5e2-b9fd-40eb-9f42-44fc5057d981","savedPayload":{"position":{"x":17957.64382962515,"y":31129.23747069523},"targetPosition":{"x":17875.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"17a3f4a3-8914-4995-afb0-7e8115791b17","savedPayload":{"position":{"x":17875.64382962515,"y":31086.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"32e4a3f1-40d8-421f-9634-7ab339858286","savedPayload":{"position":{"x":17941.64382962515,"y":31044.23747069523},"targetPosition":{"x":17877.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"365f6865-e707-415d-a168-b67c66ca9553","savedPayload":{"position":{"x":17877.64382962515,"y":30977.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"58bf8247-baef-4ea6-a483-7ed8f0ba5043","savedPayload":{"position":{"x":17407.429740242005,"y":31620.439433646203},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1632c520-fa79-442f-b33b-430cb1356de6","savedPayload":{"position":{"x":17809.64382962515,"y":31086.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"576d1666-dbd3-4914-9fe2-fa05bdf72eea","savedPayload":{"position":{"x":17840.64382962515,"y":31148.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"41317aae-08ce-48cf-a47b-c2d2cc3920ec","savedPayload":{"position":{"x":18096.64382962515,"y":30975.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"23d7e4ba-8432-4214-bd94-0db5046e39cd","savedPayload":{"position":{"x":18039.64382962515,"y":31075.23747069523},"targetPosition":{"x":17981.64382962515,"y":31126.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ab200349-5ba5-44d2-ad5c-fa826303cfcd","savedPayload":{"position":{"x":17981.64382962515,"y":31126.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a5f24785-5b2c-429b-a2e4-07063e2de904","savedPayload":{"position":{"x":18026.64382962515,"y":31066.23747069523},"targetPosition":{"x":17972.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13f275ca-06a6-4a72-8b4d-a9c079b9cef4","savedPayload":{"position":{"x":17972.64382962515,"y":31093.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8384fa0b-854c-4c23-846e-a5da0179a738","savedPayload":{"position":{"x":17405.083903595932,"y":31490.527230809537},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9a29cb9e-ee8d-4315-8532-eef82224b84a","savedPayload":{"position":{"x":17838.64382962515,"y":30922.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"badd79e7-1e21-4dc3-bfa7-8dfb4a6c6267","savedPayload":{"position":{"x":17920.64382962515,"y":30944.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ffdda0b7-af50-4010-84da-2bc0d562af2b","savedPayload":{"position":{"x":17887.64382962515,"y":30982.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"24816eed-adf7-453e-9b38-42ea4758dbaa","savedPayload":{"position":{"x":18021.64382962515,"y":30979.23747069523},"targetPosition":{"x":17931.64382962515,"y":30923.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"1dd16858-5641-4454-88a3-e5d7446e12a3","savedPayload":{"position":{"x":17931.64382962515,"y":30923.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457d75ed-ad21-4ee5-b36b-88cdc444008e","savedPayload":{"position":{"x":17836.64382962515,"y":31023.23747069523},"targetPosition":{"x":17808.64382962515,"y":31039.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b29ded7e-e2d5-4c7f-89af-b0816c32c743","savedPayload":{"position":{"x":17808.64382962515,"y":31039.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"09c634c2-5aba-49c5-80bc-4fd4175e7f0c","savedPayload":{"position":{"x":17416.79779819678,"y":31361.12294931652},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Pro","config":"{ \n\"codeName\": \"huobipro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"86caa38c-5bdf-40e4-b27b-8d8b64319575","savedPayload":{"position":{"x":18071.64382962515,"y":31171.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"001225af-c715-4566-9502-f8f0ac1c4531","savedPayload":{"position":{"x":18040.64382962515,"y":31019.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4bf5ccb-b529-4500-a192-d9c3a0613389","savedPayload":{"position":{"x":18129.64382962515,"y":31073.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e58c6d1-cfa7-4dc7-a322-e9356596ea1e","savedPayload":{"position":{"x":17976.64382962515,"y":31132.23747069523},"targetPosition":{"x":17953.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae04ddf4-ae3e-4bdc-9393-41acc38ef818","savedPayload":{"position":{"x":17953.64382962515,"y":31093.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2428e8ef-6a09-48fa-8ae4-ebfb28420be8","savedPayload":{"position":{"x":18033.64382962515,"y":31090.23747069523},"targetPosition":{"x":18085.64382962515,"y":31157.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55c71c8b-f21f-4d16-ae93-e29362c39bf5","savedPayload":{"position":{"x":18085.64382962515,"y":31157.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"967c3914-a76d-4389-9c7e-9c258ae683bd","savedPayload":{"position":{"x":17442.43408934047,"y":31233.743736052187},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Russia","config":"{ \n\"codeName\": \"huobiru\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9b7b32d6-a42e-44bb-8065-5aa32b1e844b","savedPayload":{"position":{"x":17980.64382962515,"y":31034.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8d74201c-33cd-4e12-8920-b08d0ef97572","savedPayload":{"position":{"x":17992.64382962515,"y":31105.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6e289d7-074b-4837-96e3-687988886fcc","savedPayload":{"position":{"x":18078.64382962515,"y":30954.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d72f81ba-6b41-414d-9cf0-d5f9c0c25403","savedPayload":{"position":{"x":18026.64382962515,"y":31021.23747069523},"targetPosition":{"x":18083.64382962515,"y":31117.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5354f66c-6e73-4fe5-80ca-2c25b761ef51","savedPayload":{"position":{"x":18083.64382962515,"y":31117.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81f5adbb-054c-47f2-b019-52585f5d7417","savedPayload":{"position":{"x":18008.64382962515,"y":31029.23747069523},"targetPosition":{"x":18018.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ecd8645b-4bb6-4641-a20f-cee51bf33f1a","savedPayload":{"position":{"x":18018.64382962515,"y":31009.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6f97bb5c-8d85-43ee-86a1-33e22cdfbb5e","savedPayload":{"position":{"x":17481.692214952825,"y":31109.882995828142},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KKEX","config":"{ \n\"codeName\": \"kkex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"daa4e07a-1cd8-4d92-8004-2eabfaa62f77","savedPayload":{"position":{"x":17924.64382962515,"y":31038.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"cb64951f-d984-4f51-a751-166a316084f3","savedPayload":{"position":{"x":17945.64382962515,"y":31156.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6915bf12-9271-47e2-8b49-924ae9f5c65f","savedPayload":{"position":{"x":17958.64382962515,"y":31297.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ff53381f-c6dd-4d17-a477-11396f60663f","savedPayload":{"position":{"x":17805.64382962515,"y":31141.23747069523},"targetPosition":{"x":17861.64382962515,"y":31223.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae05bfc4-6ac8-408c-a90b-263830b2a71e","savedPayload":{"position":{"x":17861.64382962515,"y":31223.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61c85f1a-a2a6-45c9-bb1e-3c76110f5d1e","savedPayload":{"position":{"x":17875.64382962515,"y":31252.23747069523},"targetPosition":{"x":17911.64382962515,"y":31154.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fafb114-37d2-4d04-9c42-83d04ff62fc7","savedPayload":{"position":{"x":17911.64382962515,"y":31154.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"16ae95ce-796f-4f2b-942c-f98dcbf9cf4b","savedPayload":{"position":{"x":17534.11190940509,"y":30990.99288257655},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Kraken","config":"{ \n\"codeName\": \"kraken\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"747af60f-c8b9-4377-aa6c-172d4137ea23","savedPayload":{"position":{"x":17854.64382962515,"y":31008.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c75f7d97-9dc2-4d3e-89eb-f8a3d5f16368","savedPayload":{"position":{"x":17916.64382962515,"y":30872.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0093e946-03f4-4aec-942d-c76aed12ab1a","savedPayload":{"position":{"x":17780.64382962515,"y":31091.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2a4235ac-e5ea-4484-bccd-f06c8a7275ec","savedPayload":{"position":{"x":17930.64382962515,"y":30869.23747069523},"targetPosition":{"x":17883.64382962515,"y":30953.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"737dec0a-23ab-4044-94ba-95c8bc50c0eb","savedPayload":{"position":{"x":17883.64382962515,"y":30953.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457b045e-dae5-4f53-a8b7-cab4757e5286","savedPayload":{"position":{"x":17836.64382962515,"y":31011.23747069523},"targetPosition":{"x":17926.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6eff12db-8e7c-402a-9e06-ae2618f506a0","savedPayload":{"position":{"x":17926.64382962515,"y":31005.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"644efe9c-597a-4ddf-9e28-b33fb3b62d3e","savedPayload":{"position":{"x":17599.078599707587,"y":30878.467274173025},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KuCoin","config":"{ \n\"codeName\": \"kucoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"01ca3037-4ed3-499e-ad6b-e14ca1d4a51f","savedPayload":{"position":{"x":17919.64382962515,"y":30949.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b3c4ce0-98b1-4d46-bd02-6cf44c3dd686","savedPayload":{"position":{"x":17998.64382962515,"y":30978.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d6c7c0ef-670d-4ed6-9246-6eb7d6bfc359","savedPayload":{"position":{"x":17927.64382962515,"y":30962.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e8c2c454-b246-4f63-b51b-74d9cbb01ac2","savedPayload":{"position":{"x":17927.64382962515,"y":30924.23747069523},"targetPosition":{"x":17912.64382962515,"y":30869.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"d2bb2603-3b52-443c-8923-86fefafc0b14","savedPayload":{"position":{"x":17912.64382962515,"y":30869.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa83b0b9-1039-4406-907c-f809a5af40f5","savedPayload":{"position":{"x":17953.64382962515,"y":30954.23747069523},"targetPosition":{"x":17966.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"471161d3-201e-40c6-b433-49643cf7e43b","savedPayload":{"position":{"x":17966.64382962515,"y":30962.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d79bc720-68e1-4771-a66a-bcffa30639d3","savedPayload":{"position":{"x":17675.830610816145,"y":30773.625430492953},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"LBank","config":"{ \n\"codeName\": \"lbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"def3f9d0-f09e-4e09-8b6d-a4c322a4384b","savedPayload":{"position":{"x":17877.64382962515,"y":31024.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"53eac3c1-96d6-4cb1-b54d-f3f174eaf733","savedPayload":{"position":{"x":17764.64382962515,"y":31036.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6c00704-1357-4426-910e-8134d6f87017","savedPayload":{"position":{"x":18030.64382962515,"y":31212.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"13990604-2192-4be1-b21b-53cf2bafc002","savedPayload":{"position":{"x":17893.64382962515,"y":31189.23747069523},"targetPosition":{"x":17964.64382962515,"y":31122.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ed2c483e-d412-406d-b6f3-cfb1112a3a05","savedPayload":{"position":{"x":17964.64382962515,"y":31122.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6033b63c-c7fe-4a5d-8cf6-82128e2cfb41","savedPayload":{"position":{"x":17951.64382962515,"y":31172.23747069523},"targetPosition":{"x":17891.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20ece5c4-dbfa-4f4a-a9ee-8c8d9c38943b","savedPayload":{"position":{"x":17891.64382962515,"y":31096.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cb2558d6-dab0-4f35-b83f-7cfc161b3d4f","savedPayload":{"position":{"x":17763.468095575536,"y":30677.69652629567},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Mercado Bitcoin","config":"{ \n\"codeName\": \"mercado\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83ab2c39-e844-496f-bebb-7b8607428902","savedPayload":{"position":{"x":17849.64382962515,"y":31081.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d69e722e-c71a-462a-8bbd-d3482d0eab21","savedPayload":{"position":{"x":17771.64382962515,"y":30887.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"18438709-83cf-49a3-96b8-888ab5adbcc5","savedPayload":{"position":{"x":17937.64382962515,"y":31080.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"6b9d4ed4-af81-462a-aace-fac0afd4687a","savedPayload":{"position":{"x":17787.64382962515,"y":30841.23747069523},"targetPosition":{"x":17873.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"802a4c53-8617-4257-95a5-45bfaa60ad0e","savedPayload":{"position":{"x":17873.64382962515,"y":30935.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"87936a4a-aac5-4aca-8f3e-2051611932c4","savedPayload":{"position":{"x":17866.64382962515,"y":31013.23747069523},"targetPosition":{"x":17829.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"48f3a793-bb97-447b-8f1a-1d6965219747","savedPayload":{"position":{"x":17829.64382962515,"y":30919.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5002072e-145c-4aeb-a611-3e0e4c60ee5d","savedPayload":{"position":{"x":17860.963584604677,"y":30591.805240274254},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKCoin","config":"{ \n\"codeName\": \"okcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1e4dd5c8-0545-4698-8695-c985880243a3","savedPayload":{"position":{"x":17921.64382962515,"y":31043.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0e188cae-9764-4963-a78b-e5d7ef272522","savedPayload":{"position":{"x":18005.64382962515,"y":30891.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6d82bfd7-b4e1-4f93-a0f8-18f62cee944e","savedPayload":{"position":{"x":18047.64382962515,"y":30877.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d815409c-1dd4-4e89-b844-5b96104509b4","savedPayload":{"position":{"x":17958.64382962515,"y":30988.23747069523},"targetPosition":{"x":17945.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"238b9d2c-e2c0-4a77-945e-8e28604c0a2d","savedPayload":{"position":{"x":17945.64382962515,"y":30961.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8416c29a-5d73-4b2a-9463-511f400deafb","savedPayload":{"position":{"x":17963.64382962515,"y":30898.23747069523},"targetPosition":{"x":18047.64382962515,"y":30885.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04abf32b-084e-4784-aa84-8c5612d3b7b9","savedPayload":{"position":{"x":18047.64382962515,"y":30885.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1f860b4b-2893-4a51-8649-19c47d494a37","savedPayload":{"position":{"x":17967.17403243568,"y":30516.958569226157},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKEX","config":"{ \n\"codeName\": \"okex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"7f618566-3d10-4c3c-90b2-7541a5146eeb","savedPayload":{"position":{"x":17770.64382962515,"y":31094.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"21205576-5d12-452c-814f-eb56182162ae","savedPayload":{"position":{"x":17794.64382962515,"y":31173.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"46456247-ae9c-41ea-8395-a5e4a78007d4","savedPayload":{"position":{"x":17724.64382962515,"y":31147.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706bf601-eaad-48bd-b0a7-8dad59066171","savedPayload":{"position":{"x":17715.64382962515,"y":31182.23747069523},"targetPosition":{"x":17706.64382962515,"y":31162.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"f9c7071c-2e5b-4c90-b482-dfc7ee001244","savedPayload":{"position":{"x":17706.64382962515,"y":31162.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e87e1e10-3404-48b9-8629-5df92ffa1979","savedPayload":{"position":{"x":17795.64382962515,"y":31083.23747069523},"targetPosition":{"x":17789.64382962515,"y":31181.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e8fd6a-6b23-4d65-8b8e-d966f845c07f","savedPayload":{"position":{"x":17789.64382962515,"y":31181.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"aa0edec0-8b27-4f94-abce-1e437ce5aba6","savedPayload":{"position":{"x":18080.854218676865,"y":30454.034021936455},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"RightBTC","config":"{ \n\"codeName\": \"rightbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ade372e9-5070-4fa9-843e-57732c4106c3","savedPayload":{"position":{"x":17999.64382962515,"y":30964.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b63d440e-4501-475c-b8a6-2b9a144e32a1","savedPayload":{"position":{"x":17984.64382962515,"y":30901.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"81d77477-4f2e-43c0-b284-dde54f91c37f","savedPayload":{"position":{"x":17864.64382962515,"y":31036.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce3cc34-1ba4-4155-96a5-c946b1bcc5ab","savedPayload":{"position":{"x":17819.64382962515,"y":31127.23747069523},"targetPosition":{"x":17810.64382962515,"y":31080.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7df4af7-37c1-403d-ada1-b6a527821bdd","savedPayload":{"position":{"x":17810.64382962515,"y":31080.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6de19501-5ce7-4944-b9dd-25b149acbb38","savedPayload":{"position":{"x":17861.64382962515,"y":31043.23747069523},"targetPosition":{"x":17946.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa87ace4-a976-401c-93f9-24a498261742","savedPayload":{"position":{"x":17946.64382962515,"y":30988.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c20cd9e1-52a0-4d17-b90c-e9d5b63315ce","savedPayload":{"position":{"x":18200.67134708334,"y":30403.76933118965},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"STEX","config":"{ \n\"codeName\": \"stex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f1d65161-4922-4a1e-ac98-df1a842347a7","savedPayload":{"position":{"x":17872.64382962515,"y":31001.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c313b2c6-6154-4a9a-b826-fd99cc500cd9","savedPayload":{"position":{"x":17888.64382962515,"y":31186.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d0a1259b-1c37-4d39-836e-3c434c3b3687","savedPayload":{"position":{"x":17778.64382962515,"y":31076.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"4a1e5627-459c-4dec-be13-c20d4a9ea58f","savedPayload":{"position":{"x":17841.64382962515,"y":31179.23747069523},"targetPosition":{"x":17795.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"6981eb0d-0f0e-4f8e-9781-4a03e22e93fd","savedPayload":{"position":{"x":17795.64382962515,"y":31105.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7704478a-9717-43a8-bd2e-88daa6f84bd0","savedPayload":{"position":{"x":17858.64382962515,"y":31091.23747069523},"targetPosition":{"x":17941.64382962515,"y":31173.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"262aad86-f430-49ea-a636-e8bd816a9636","savedPayload":{"position":{"x":17941.64382962515,"y":31173.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0ea23137-3c65-4de1-9772-6ac1b65196e8","savedPayload":{"position":{"x":18325.220671374373,"y":30366.753804527314},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TideBit","config":"{ \n\"codeName\": \"tidebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c92318bd-8b2d-489b-b8e8-cf30fb63286e","savedPayload":{"position":{"x":17981.64382962515,"y":31021.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"83bca3ec-fc1c-435c-b5fe-b1cf92463fd1","savedPayload":{"position":{"x":18051.64382962515,"y":31072.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2f3ee9b2-cd41-458c-84da-edac3155028a","savedPayload":{"position":{"x":18075.64382962515,"y":31059.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"009ae4b6-adbc-4900-9fc0-f18936eeed9b","savedPayload":{"position":{"x":18030.64382962515,"y":31058.23747069523},"targetPosition":{"x":18009.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"3ee88180-fe10-41df-8251-b1ed0a526e7a","savedPayload":{"position":{"x":18009.64382962515,"y":31028.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bb88e6e8-a99a-4c4e-9ca5-ffed49aa8b54","savedPayload":{"position":{"x":17987.64382962515,"y":31047.23747069523},"targetPosition":{"x":17925.64382962515,"y":31135.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13a4a95e-4333-4455-9f7c-90bc839d174a","savedPayload":{"position":{"x":17925.64382962515,"y":31135.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5563c310-701a-4c1e-8155-87c08c927ce3","savedPayload":{"position":{"x":18453.041964599197,"y":30343.421415155935},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TimeX","config":"{ \n\"codeName\": \"timex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"5c004b5f-eec4-414f-8d01-d9b3fddeee9e","savedPayload":{"position":{"x":17892.64382962515,"y":30973.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"59a33add-d0e9-4ae1-8a01-f1e0ed09cb61","savedPayload":{"position":{"x":17911.64382962515,"y":30878.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a4189ba1-d1d4-4ff8-91dd-a8696ca493e3","savedPayload":{"position":{"x":17953.64382962515,"y":30880.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3d34eb9d-e7cb-42fe-8785-c327b2bbc529","savedPayload":{"position":{"x":17839.64382962515,"y":30875.23747069523},"targetPosition":{"x":17930.64382962515,"y":30877.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"773de01f-0999-4a59-91f0-642148cd58d0","savedPayload":{"position":{"x":17930.64382962515,"y":30877.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fe33a596-4f98-4843-a5b1-26e7e0fcf1c8","savedPayload":{"position":{"x":17924.64382962515,"y":30871.23747069523},"targetPosition":{"x":18018.64382962515,"y":30832.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d078b9a3-cdc6-458e-a511-dc4f5bef38ba","savedPayload":{"position":{"x":18018.64382962515,"y":30832.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"27d69fa7-b561-4986-8c0d-1b374e7e1bf1","savedPayload":{"position":{"x":18582.63663896287,"y":30334.045714007894},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TOP.Q","config":"{ \n\"codeName\": \"topq\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eafef6a3-eed2-470e-a15c-aa4c10001cd2","savedPayload":{"position":{"x":17818.64382962515,"y":31115.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"2d5eb813-ceb6-40cd-8682-7205596bb8b5","savedPayload":{"position":{"x":17759.64382962515,"y":31188.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"61f7832c-c1f0-40bc-b1f2-ba947c58309d","savedPayload":{"position":{"x":17741.64382962515,"y":31288.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"63b973da-30a7-467a-b954-c57537aab18d","savedPayload":{"position":{"x":17677.64382962515,"y":31206.23747069523},"targetPosition":{"x":17756.64382962515,"y":31146.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"722dcf44-de3f-4d1a-8655-80561e1e4d55","savedPayload":{"position":{"x":17756.64382962515,"y":31146.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45d5e04a-4a53-4f32-b4c0-d882456cb263","savedPayload":{"position":{"x":17788.64382962515,"y":31228.23747069523},"targetPosition":{"x":17806.64382962515,"y":31163.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c66e8dfc-4847-4180-b82c-36458f9b405d","savedPayload":{"position":{"x":17806.64382962515,"y":31163.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8fdf13d8-e8d2-4ef4-8b34-f492a25d753a","savedPayload":{"position":{"x":18712.485315398026,"y":30338.736622606855},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Upbit","config":"{ \n\"codeName\": \"upbit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f456fec2-cee6-4f0c-b865-1188088879c9","savedPayload":{"position":{"x":17919.64382962515,"y":30973.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"947c1ca0-bff9-4372-b153-40054e29b705","savedPayload":{"position":{"x":17921.64382962515,"y":31014.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"34ffbe12-5a26-446a-8bf6-7395c0370ba2","savedPayload":{"position":{"x":17874.64382962515,"y":30900.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"8f00f19d-74a8-48d8-b951-79f35e87b110","savedPayload":{"position":{"x":17906.64382962515,"y":30902.23747069523},"targetPosition":{"x":17896.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"64e1bede-aabf-4831-83a6-fe1cea435613","savedPayload":{"position":{"x":17896.64382962515,"y":30896.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c80b956-f2ca-4a6f-a661-f17546288d3e","savedPayload":{"position":{"x":17945.64382962515,"y":30971.23747069523},"targetPosition":{"x":18027.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e3686b02-4ecc-4dcb-a311-b7ef542a3c37","savedPayload":{"position":{"x":18027.64382962515,"y":31048.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"74e57ecd-3394-42b4-b2c4-6f216f7e41db","savedPayload":{"position":{"x":18841.065636895226,"y":30357.439144338445},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"WhiteBit","config":"{ \n\"codeName\": \"whitebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c16eae45-a568-4b2e-b064-4431bdf34c24","savedPayload":{"position":{"x":17767.64382962515,"y":30899.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"dfdf793f-4ba6-4215-a325-323c0f223553","savedPayload":{"position":{"x":17920.64382962515,"y":31004.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fd749d13-dbac-493f-9af6-c521eddf909f","savedPayload":{"position":{"x":17815.64382962515,"y":30973.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"79f7d2d0-77a5-4f38-ac68-fd11f18e5e6b","savedPayload":{"position":{"x":17761.64382962515,"y":31182.23747069523},"targetPosition":{"x":17680.64382962515,"y":31153.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fd0506f4-58b7-431e-bc9d-69bce63c3379","savedPayload":{"position":{"x":17680.64382962515,"y":31153.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"47e8a4b1-9a6c-4555-a881-f7524183d72e","savedPayload":{"position":{"x":17720.64382962515,"y":31056.23747069523},"targetPosition":{"x":17817.64382962515,"y":31010.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7fa08b91-55ab-477d-a097-88ea7f25fb76","savedPayload":{"position":{"x":17817.64382962515,"y":31010.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"467ece1e-d1d0-4a11-ae7a-d0e22cd4eba5","savedPayload":{"position":{"x":18966.87011674703,"y":30389.934009235236},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ZB","config":"{ \n\"codeName\": \"zb\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"db206cbd-a587-4e8e-acbe-6581ad3b5cc4","savedPayload":{"position":{"x":17855.64382962515,"y":31027.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"1dd658c5-7755-44b7-85f0-9bcd787762a0","savedPayload":{"position":{"x":17789.64382962515,"y":31044.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0de82bbe-7909-4b65-b304-f59b41f618ae","savedPayload":{"position":{"x":17830.64382962515,"y":30696.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c89819d0-8880-4b36-a9b3-0b284d266e3b","savedPayload":{"position":{"x":17891.64382962515,"y":30748.23747069523},"targetPosition":{"x":17865.64382962515,"y":30772.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"7a55f503-17fa-45c4-880b-1a9a11a0a555","savedPayload":{"position":{"x":17865.64382962515,"y":30772.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e640fca2-8bab-45ff-9a47-8e7b9650c277","savedPayload":{"position":{"x":17846.64382962515,"y":30793.23747069523},"targetPosition":{"x":17909.64382962515,"y":30886.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"421a99cd-3d9a-46a5-8654-08d6336e75be","savedPayload":{"position":{"x":17909.64382962515,"y":30886.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07df07e8-39a8-4fbc-a0c8-150f20b6ac59","savedPayload":{"position":{"x":19088.423812451314,"y":30435.840244716648},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51f64e29-e3ab-4683-a5de-f397fbf94260","savedPayload":{"position":{"x":18604.301618063546,"y":31533.850126685462},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Testing Queue","project":"Superalgos","exchanges":[],"id":"895ce4b1-4890-4216-89ba-a012181d2546","savedPayload":{"position":{"x":18754.301618063546,"y":30754.427263279467},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"signalsProviders":[],"id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d","savedPayload":{"position":{"x":18904.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Charting Space","name":"New Charting Space","project":"Superalgos","viewport":{"type":"Viewport","name":"New Viewport","config":"{\"zoom\":\"1.60\"}","project":"Superalgos","id":"01713f1d-91b8-44f9-9c5d-a0c12fd09037","savedPayload":{"position":{"x":19200.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"frame":{"position":{"x":-5385,"y":-601.1875}}}},"dashboards":[],"id":"21d2ec55-9e56-4652-8e96-c7e451262c36","savedPayload":{"position":{"x":18900.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Plugins","name":"New Plugins","project":"Superalgos","pluginProjects":[{"type":"Plugin Project","name":"Superalgos","config":"{ \n \"codeName\": \"Superalgos\"\n}","project":"Superalgos","pluginDataMines":{"type":"Plugin Data Mines","name":"New Plugin Data Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"d5234bd2-ef4e-4856-a6a0-ce7659653a48","savedPayload":{"position":{"x":18879.35218735615,"y":18688.55301821844},"targetPosition":{"x":31820.67692045767,"y":18678.794324352373},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ecc1a524-de9b-4e73-8874-b99a7ea0402b","savedPayload":{"position":{"x":31820.67692045767,"y":18678.794324352373},"targetPosition":{"x":31320.502678827743,"y":18678.79704693609},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbc3d9be-5e59-45d8-bb0f-4ec82763691d","savedPayload":{"position":{"x":31234.673182942548,"y":18370.4854210064},"targetPosition":{"x":31327.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingMines":{"type":"Plugin Trading Mines","name":"New Plugin Trading Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"ad1ce785-858f-4cfc-ba68-108b5e0c54d9","savedPayload":{"position":{"x":24941.217404066585,"y":18714.893045797242},"targetPosition":{"x":31320.45102232534,"y":19544.930491916948},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8a64c00e-4f8c-49bf-b57d-4e2e388bae41","savedPayload":{"position":{"x":31320.45102232534,"y":19544.930491916948},"targetPosition":{"x":31070.415084976332,"y":19111.835158656926},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d881813-3ab9-4e8b-ab5a-48dedab2dd19","savedPayload":{"position":{"x":31570.083379567513,"y":18479.466800207203},"targetPosition":{"x":31327.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingSystems":{"type":"Plugin Trading Systems","name":"New Plugin Trading Systems","project":"Superalgos","pluginFiles":[],"id":"3569d452-c593-4e54-a356-7ff8c6b519f3","savedPayload":{"position":{"x":31570.083379567513,"y":18832.13795158269},"targetPosition":{"x":31327.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingEngines":{"type":"Plugin Trading Engines","name":"New Plugin Trading Engines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Low-Frequency","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Low-Frequency","project":"Superalgos","id":"e117a2a4-09b3-4181-8455-e680de3bdeb3","savedPayload":{"position":{"x":30923.55093774257,"y":24967.049392142086},"targetPosition":{"x":31141.968084630065,"y":19226.436285672036},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9270d67-4630-4ac9-91ca-1dec4fb5aa38","savedPayload":{"position":{"x":31141.968084630065,"y":19226.436285672036},"targetPosition":{"x":31234.673182942548,"y":18941.11933078349},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87a28762-63d0-45f7-bd39-9dea436d8244","savedPayload":{"position":{"x":31234.673182942548,"y":18941.11933078349},"targetPosition":{"x":31327.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c4e402d7-5228-408c-9d67-379d6ef40bae","savedPayload":{"position":{"x":31327.37828125503,"y":18655.802375894946},"targetPosition":{"x":31027.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6","savedPayload":{"position":{"x":31027.37828125503,"y":18655.802375894946},"targetPosition":{"x":31027.37828125503,"y":18655.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Design Space","name":"My Design Space","project":"Superalgos","spaceStyle":{"type":"Space Style","name":"My Space Style","config":" {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }","project":"Superalgos","id":"fad0e429-f7a7-4b62-a2a5-2ead29b8f695","savedPayload":{"position":{"x":25236.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"spaceSettings":{"type":"Space Settings","name":"New Space Settings","config":"{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"animationSteps\": 2, \n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}","project":"Superalgos","id":"05c9d6d5-24c4-4eec-9aca-9668d6486fdd","savedPayload":{"position":{"x":24636.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8485ce5-67f3-4476-b9e2-80994e49c318","savedPayload":{"position":{"x":24936.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":255,"y":588.3125}}}},{"type":"Superalgos Project","name":"New Superalgos Project","project":"Superalgos","spaces":{"type":"Spaces","name":"New Spaces","project":"Superalgos","id":"97eff31b-b4a4-485c-8910-0a88f522e60a","savedPayload":{"position":{"x":24871,"y":24986},"targetPosition":{"x":24571,"y":24986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"mines":{"type":"Mines","name":"New Mines","project":"Superalgos","id":"11fc631a-a015-4988-aff4-5a1bbe822649","savedPayload":{"position":{"x":24421,"y":25245.807621135333},"targetPosition":{"x":24571,"y":24986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"otherHierarchies":{"type":"Other Hierarchies","name":"New Other Hierarchies","project":"Superalgos","id":"9cf63862-9273-4341-9e03-b98e2d20d6d3","savedPayload":{"position":{"x":24421,"y":24726.192378864667},"targetPosition":{"x":24571,"y":24986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5f868d2c-1aed-4791-871e-592b36b91afe","savedPayload":{"position":{"x":24571,"y":24986},"targetPosition":{"x":24571,"y":24986},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Tutorial","name":"Introduction to Trading Systems","config":"{\n \"title\": \"Trading Systems\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"Trading systems are the heart and soul of systematic trading, as they concentrate the biggest chunk of trading intelligence.\",\n \"paragraph1\": \"The rest of the infrastructure built into Superalgos—data mining and visualization, the trading bot and trading engine, the visual strategy designer and debugger—all have significant equity in the intelligence pie, but it's fair to argue that were developed to support the design, testing, and deployment of trading systems!\",\n \"callOut\": \"This tutorial will introduce you to how Superalgos views and handles trading systems. The rest of the turorials will teach you how to build them!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Frame It Flexibly!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Frame It Flexibly!\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"A ->Trading System-> governs trading strategies, and provides a flexible—but structured— framework to build them.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Please, read this page to get up to speed with how trading systems work!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"There is no substitute for knowledge, so you will need to do some reading before I get your hands dirty with good ol' trading logic!\",\n \"important\": \"\",\n \"warning\": \"Skipping the reading may result in permanent neurological impairment. Your call!\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"https://docs.superalgos.org/suite-trading-systems.html\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Points To Take Home","config":"{\n \"subTitle\": \"Points to Take Home...\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"There are some key learnings in the previous reading: multiple strategies, single positions, and precedence.\",\n \"bulletListIntro\": \"Let's take some mental notes for what comes next:\",\n \"bulletArray\": [\n [\n \"Multiple strategies\",\n \"may coexist within a trading system—as many as you wish.\"\n ],\n [\n \"One active strategy\",\n \" with one open position at any given moment is allowed only.\"\n ],\n [\n \"Precedence\",\n \" is given by the order in which strategies are defined around the ->Trading System-> node. You may change the order, of course!\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"You are probably asking why? Do these rules sound arbitrary? They are, for good reason!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"89160f01-f0fe-4127-9ef1-ccf23bcfbe5b","savedPayload":{"position":{"x":19518,"y":44653.25},"targetPosition":{"x":19218,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"332ef29e-d676-4cc0-a4f5-d83670327002","savedPayload":{"position":{"x":19218,"y":44653.25},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"WHB Example","config":"{ \n\"title\": \"\",\n \"summary\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"But... But... Why?","config":"{\n \"subTitle\": \"But... But... Why?\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"Why would I want to have multiple strategies within a trading system, when only one of them may trade at any point?\",\n \"paragraph1\": \"Before answering the burning question, let's take a look at a couple of examples. Take a look at the two strategies within the Weak-hands Buster (WHB v2) trading system! \",\n \"callOut\": \"Explore the definitions of the ->Trigger On Event-> on the ->Trigger Stage-> and see if you notice the difference between the two.\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"There's a hint in the name of each strategy!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"aa24806b-a88f-44e0-a19d-426e034058d5","savedPayload":{"position":{"x":19278.007055568993,"y":45074.76410481041},"targetPosition":{"x":19010.705098312483,"y":44938.56695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading System","name":"WHB v2","id":"975c2fc3-a8f5-43e9-900f-4a4f2430d128"}}},{"type":"Tutorial Step","name":"Steep Vs. Extreme","config":"{ \n \"subTitle\": \"Steep Vs. Extreme\",\n \"gif\": \"\",\n \"image\": \"condition\",\n \"definition\": \"Did you find the difference? Don't worry if you didn't! There are lots of conditions! I'll give you another hint!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Look again and notice that the first seven conditions of the ->Trigger On Event-> are the same on both strategies! The remaining conditions are different, though!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"You may drag the ->Trigger On Event-> of a strategy and pin it closer to the event of the other strategy for easier comparison!\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"f7c47550-e805-4075-8ad6-dd7528610483","savedPayload":{"position":{"x":19103.410196624965,"y":45223.8839097771},"targetPosition":{"x":19010.705098312483,"y":44938.56695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"A Particular Case","config":"{ \n \"subTitle\": \"A Particular Case...\",\n \"gif\": \"\",\n \"image\": \"trading-strategy\",\n \"definition\": \"Both strategies are virtually the same in that they share the same base rules for triggering... with minor differences...\",\n \"paragraph1\": \"Beyond the seven conditions in common, the Steep strategy has one additional ->Condition-> while the Xtreme strategy has three. We won't analyze those differences one by one, although you may if you wish! Let's instead reveal the underlying concept behind the differences:\",\n \"callOut\": \"Within the market ->Situation-> defined by the first seven conditions, the Steep strategy deals with a certain type of price action—price falling on a steep curve—while the Xtreme strategy deals with price falling on an extremely steep curve!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"5d7560ee-feb7-406c-8a3c-265518d27310","savedPayload":{"position":{"x":18874.50794839062,"y":45205.86891214506},"targetPosition":{"x":19010.705098312483,"y":44938.56695488855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading Strategy","name":"Xtreme","id":"c6dfb2a4-3e3d-4a44-a9da-00251dae88a7"}}}],"tutorialTopics":[],"id":"2e6298c8-100f-4393-bfc7-c6cdb2bbec03","savedPayload":{"position":{"x":19010.705098312483,"y":44938.56695488855},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"BB Top Bounce Example","config":"{ \n\"title\": \"\",\n \"summary\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Another Example?","config":"{ \n \"subTitle\": \"Another Example?\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"Let's take a look at another example! This is BB Top Bounce, a ->Trading System-> based on the bounce off the upper Bollinger Band trading idea.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Expand the trading system node... Let's see what it may teach us!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"I told you! You may have as many strategies as you wish under the same trading system! Well... there your are!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"06d2bbcb-9bbc-44a6-9aaa-b5b4d9f32ea5","savedPayload":{"position":{"x":18628.364562175448,"y":45125.89207786629},"targetPosition":{"x":18675.294901687517,"y":44829.58557568774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading System","name":"BB Top Bounce","id":"3313017d-fdce-481b-9679-fe8e4f67cd45"}}},{"type":"Tutorial Step","name":"At the Count of Three","config":"{ \n \"subTitle\": \"At The Count of Three!\",\n \"gif\": \"\",\n \"image\": \"condition\",\n \"definition\": \"BB Top Bounce features an interesting approach: it defines the trading idea with three simple conditions.\",\n \"paragraph1\": \"You are looking at the ->Trigger On Event-> of the first strategy. Notice the first three conditions defined...\",\n \"callOut\": \"Now go and look at the trigger on event of any of the other strategies... What do you see?\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"Eaxctly! All strategies feature the same first three conditions on the trigger on event. This shows that all strategies are based on the same trading idea. Now... how are they different?\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n }","project":"Superalgos","id":"36476e87-3d2e-4fa4-8c08-ff0928e726c7","savedPayload":{"position":{"x":18432.589803375035,"y":45005.921151375485},"targetPosition":{"x":18675.294901687517,"y":44829.58557568774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Condition","name":"Previous Breakup","id":"f0534c68-ab47-4370-b1fd-b3be4c1c262f"}}},{"type":"Tutorial Step","name":"Time Frame Analysis","config":"{ \n \"subTitle\": \"Time Frame Analysys\",\n \"gif\": \"\",\n \"image\": \"time-frame\",\n \"definition\": \"Each strategy specializes in specific market conditions by analyzing the state of the market on different time frames!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Take a look at the name of each strategy... 3H Down, 2H Down, 4H Up...\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"If you study the conditions that define the trigger on event, you will notice that 3H Down referes to the fact that the particular strategy is triggered when the 3-hour time frame is in a downwtrend.\",\n \"note\": \"Each of the strategies speciallizes on a certain time frame and trend!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n }","project":"Superalgos","id":"833b9d28-43d6-415a-a4da-d73a0b040c70","savedPayload":{"position":{"x":18378.988399508977,"y":44782.65523617568},"targetPosition":{"x":18675.294901687517,"y":44829.58557568774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Trading Strategy","name":"S6 - 2H Up","id":"f1ca0dbb-65e8-4c60-84f0-89596e22e9be"}}}],"tutorialTopics":[],"id":"98cb5e4e-d977-4d81-99e4-c349f13c0cd8","savedPayload":{"position":{"x":18675.294901687517,"y":44829.58557568774},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Conclusions","config":"{ \n\"title\": \"\",\n \"summary\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Unpacking Lessons...","config":"{ \n \"subTitle\": \"Unpacking These Lessons\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"We've covered two examples of trading systems featuring multiple strategies... what can we learn from them?\",\n \"paragraph1\": \"In the case of Weak-hands Buster, each strategy represents a particular case of the same trading idea. In the case of BB Top Bounce, each strategy specializes in specific market conditions.\",\n \"callOut\": \"In the next few steps, we will unpack the implications of using multiple strategies within the same trading system and—finally—answer the burning question: why would we want to use such a setup?\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"6b70202a-4cb2-40fc-a066-146469561aee","savedPayload":{"position":{"x":18401.231264394737,"y":44598.935417235},"targetPosition":{"x":18675.294901687517,"y":44476.91442431226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Granularity","config":"{ \n \"subTitle\": \"Granularity!\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"I mentioned the concept of granularity during the Welcome tutorial... remember?\",\n \"paragraph1\": \"Granularity is a device the helps in handling complexity. Instead of letting strategies grow into a complex web of rules and definitions, it is always preferable to split complex logic in pieces and deal with smaller units.\",\n \"callOut\": \"Splitting complex logic into multiple strategies helps in keeping strategies simple and understandable. It makes strategies easier to debug and to maintain!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"Whenever you can, keep it simple!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"b00bc7cc-ce47-4563-8c7d-3e3d9599020c","savedPayload":{"position":{"x":18376.938333077036,"y":44445.55588533196},"targetPosition":{"x":18675.294901687517,"y":44476.91442431226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Hyper Specialization!","config":"{ \n \"subTitle\": \"Hyper Specialization!\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"Specialization is a very interesting concept that may lead to designing more efficient trading systems!\",\n \"paragraph1\": \"It is a well-known fact that most strategies perform better on certain market conditions.\",\n \"callOut\": \"Like with BB Top Bounce, a single trading system may feature multiple strategies, each specializing in specific trends, volatility ranges, or any other market parameter.\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Instead of designing a strategy to evaluate a range of market conditions, keep them focused!\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"07133a71-e21f-4cac-9c23-47a2b3d68532","savedPayload":{"position":{"x":18432.589803375035,"y":44300.578848624515},"targetPosition":{"x":18675.294901687517,"y":44476.91442431226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Fine-grain Management","config":"{ \n \"subTitle\": \"Fine-Grain Management!\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"When complex trading logic is split into multiple strategies, you gain the opportunity to manage the resulting trades differently!\",\n \"paragraph1\": \"We haven't yet got into how strategies are defined, but you do know that Superalgos allows managing the take profit and stop loss targets...\",\n \"callOut\": \"Each strategy in a trading system may have its own logic for managing positions!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"If you handle multiple variations of the same logic for example, to take a position, then you will likely need to handle multiple variations for managing the position. It is easier and cleaner to do both on separate strategies.\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"5ef392db-5784-4c0f-b797-cb758243aaae","savedPayload":{"position":{"x":18553.27390876478,"y":44202.85078701947},"targetPosition":{"x":18675.294901687517,"y":44476.91442431226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Going Long & Short","config":"{\n \"subTitle\": \"Going Long & Short\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"We covered the three main reasons why it's a good idea to split complex logic into more than one strategy...\",\n \"bulletListIntro\": \"We also covered a couple of examples of trading systems doing just that. There is another example that comes to mind:\",\n \"bulletArray\": [\n [\n \"Going long and short:\",\n \" designing a strategy that goes both long and short is probably not a good idea. Split the logic and build one strategy for going long and another for going short!\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\n \"\",\n \"\"\n ],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Remember the KISS principle!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"2c9fd60b-60ab-495d-adb6-66c75e655ec2","savedPayload":{"position":{"x":18706.653440667815,"y":44178.55785570177},"targetPosition":{"x":18675.294901687517,"y":44476.91442431226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"fc843922-ed15-4e32-a334-8b6ebf3ad50c","savedPayload":{"position":{"x":18675.294901687517,"y":44476.91442431226},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"The End","config":"{ \n\"title\": \"\",\n \"summary\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\" \n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Stay Tunned!","config":"{ \n \"subTitle\": \"Stay Tunned!\",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"episode\",\n \"definition\": \"Congratulations! You now know as much about trading systems as I do! Coming next, The Mysteries of a ->Trading Strategy->!\",\n \"paragraph1\": \"More tutorials about designing strategies are currently in development... Stay tunned!\",\n \"callOut\": \"If you haven't yet, join the Community so that you are the first to know when a new tutorial becomes available!\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"You may also watch this workspace plugin. At some point it will get updated with the second tutorial in the series!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n }","project":"Superalgos","id":"9d4fbef3-d436-46af-bab1-d0b35c794ba0","savedPayload":{"position":{"x":19103.410196624965,"y":44082.6160902229},"targetPosition":{"x":19010.705098312483,"y":44367.93304511145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"5693e204-dae0-401d-a611-12ccc7341c8a","savedPayload":{"position":{"x":19010.705098312483,"y":44367.93304511145},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"45fec5f4-819e-4c12-898e-8882543c1480","savedPayload":{"position":{"x":18918,"y":44653.25},"targetPosition":{"x":18918,"y":44653.25},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isPlaying":true,"isRunning":false},"tutorial":{"status":"Done"}}},{"type":"Trading System","name":"WHB v2","config":"{ \n\"codeName\": \"Sparta-WHB-BTC-USDT\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"Steep","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"123b1af6-9639-4b6d-a4c3-7a8a9287169c","savedPayload":{"position":{"x":30964.791167201525,"y":30229.944673438946},"targetPosition":{"x":31112.035244718674,"y":30258.56602274543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"427da1e1-cc4a-4c78-88f6-c254d87cc88f","savedPayload":{"position":{"x":31112.035244718674,"y":30258.56602274543},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"1b9e755e-eefe-4b0d-addd-1e19b6a597b6","savedPayload":{"position":{"x":31020.798114437024,"y":30084.04158764887},"targetPosition":{"x":31149.37320954234,"y":30161.297298885376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"55bf7721-7fb2-42f0-8a3c-c2b97e278a29","savedPayload":{"position":{"x":31149.37320954234,"y":30161.297298885376},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e8db5fac-2f00-47fe-ac57-dc93ad15f2b5","savedPayload":{"position":{"x":31123.329223780544,"y":29966.09303870276},"targetPosition":{"x":31217.72728243802,"y":30082.664932921303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"11e00b31-e7eb-4fe9-b006-dcd640dbbd3b","savedPayload":{"position":{"x":31217.72728243802,"y":30082.664932921303},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"7671ca91-4b4c-40c5-b0c2-199169b013e8","savedPayload":{"position":{"x":31260.01773024725,"y":29890.3253623387},"targetPosition":{"x":31308.852953415826,"y":30032.153148678597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"dd938286-61b3-41e4-bfbb-db34971ffa47","savedPayload":{"position":{"x":31308.852953415826,"y":30032.153148678597},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"19b7edeb-b180-429f-9adf-61bf47262033","savedPayload":{"position":{"x":31414.37698264975,"y":29865.877258538017},"targetPosition":{"x":31411.759121684157,"y":30015.854412811477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8f94ab97-1574-4136-9404-b66dfc1e3b9f","savedPayload":{"position":{"x":31411.759121684157,"y":30015.854412811477},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"0aa38939-f2ef-4c2b-bfc1-a45bda2ac50e","savedPayload":{"position":{"x":31567.78897704836,"y":29895.697529434652},"targetPosition":{"x":31514.033784616564,"y":30035.734593409234},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b2efc27-4aa5-472c-bb7a-73fc3796cc0e","savedPayload":{"position":{"x":31514.033784616564,"y":30035.734593409234},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"8f02c79c-1807-42ce-a9e8-e707ec73e9e4","savedPayload":{"position":{"x":31701.7499627987,"y":29976.189410258146},"targetPosition":{"x":31603.341108450124,"y":30089.395847291562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0ff24392-a128-4d59-8049-301e99ce941e","savedPayload":{"position":{"x":31603.341108450124,"y":30089.395847291562},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Slope Not Extreme, or...","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope != \"Extreme\" || \n(chart.at01hs.bollingerSubChannel.period <= 6 && \nchart.at08hs.bollingerChannel.direction === \"Down\" && \nchart.at06hs.bollingerChannel.direction === \"Down\" && \nchart.at04hs.bollingerChannel.direction === \"Down\" && \nchart.at02hs.bollingerSubChannel.slope === (\"Extreme\" || \"Steep\"))","project":"Superalgos","id":"231acfc1-6010-4d84-822f-056d1f3f9dc8","savedPayload":{"position":{"x":31800.1022679657,"y":30097.64439224754},"targetPosition":{"x":31668.90931189479,"y":30170.36583528449},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"da235bf3-976c-4832-a565-98a6bb13236d","savedPayload":{"position":{"x":31668.90931189479,"y":30170.36583528449},"targetPosition":{"x":31406.523399752972,"y":30315.808721358393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c94fdd47-c451-4c27-ad56-82b346d60f87","savedPayload":{"position":{"x":31406.523399752972,"y":30315.808721358393},"targetPosition":{"x":31453.45373926504,"y":30612.115223536934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f5bf32a8-54eb-42ef-bc75-86caf1fd16a2","savedPayload":{"position":{"x":31453.45373926504,"y":30612.115223536934},"targetPosition":{"x":31476.918909021075,"y":30760.268474626206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Above MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close > chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"bd638ed9-46fa-42d5-9dfd-5ff8921f83cd","savedPayload":{"position":{"x":32219.093423928174,"y":29894.80063053251},"targetPosition":{"x":32086.841742162364,"y":30076.829454266874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e5fbd2ee-9cef-4887-a270-8fb307dff36d","savedPayload":{"position":{"x":32086.841742162364,"y":30076.829454266874},"targetPosition":{"x":31954.59006039656,"y":30258.858278001237},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"faabf32b-db1f-49d2-8a74-39e9f653867c","savedPayload":{"position":{"x":31954.59006039656,"y":30258.858278001237},"targetPosition":{"x":31822.338378630757,"y":30440.8871017356},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d33d5a40-93e6-4a51-9bf0-389702d7c57c","savedPayload":{"position":{"x":31565.086696864946,"y":30638.915925469963},"targetPosition":{"x":31476.918909021075,"y":30760.268474626206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Steep","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"b5967d93-adf2-4a9e-9f1f-8ddb83c11e89","savedPayload":{"position":{"x":32310.545522907258,"y":30032.84673211228},"targetPosition":{"x":32288.917478088075,"y":30200.205001036466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"946e10ee-70f9-4489-8ac9-c523116f997d","savedPayload":{"position":{"x":32288.917478088075,"y":30200.205001036466},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"35e54c04-f05e-4790-9431-da49c89895a4","savedPayload":{"position":{"x":32449.368078598487,"y":30071.464262656882},"targetPosition":{"x":32381.465848548894,"y":30225.95002139953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"299cc453-ffa7-4bcc-84be-fcf9187e0188","savedPayload":{"position":{"x":32381.465848548894,"y":30225.95002139953},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"91d65f47-922b-4e28-874a-7ccb83389509","savedPayload":{"position":{"x":32571.68752974419,"y":30147.62834543492},"targetPosition":{"x":32463.012149312697,"y":30276.72607658489},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"74da641c-243d-4e2c-86e7-b215d804796d","savedPayload":{"position":{"x":32463.012149312697,"y":30276.72607658489},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"8616a334-50d8-437a-9631-96e1b6611f77","savedPayload":{"position":{"x":32667.59428187434,"y":30255.168619424963},"targetPosition":{"x":32526.949984066134,"y":30348.41959257825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"98acfea3-5f57-4dd2-ad9b-f13643c04b3a","savedPayload":{"position":{"x":32526.949984066134,"y":30348.41959257825},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"bc3a1d72-8424-40e4-bf3b-e9aec5365cfe","savedPayload":{"position":{"x":32729.31854031076,"y":30385.372811194968},"targetPosition":{"x":32568.099489690405,"y":30435.222387091588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4219ab16-929b-4489-80f8-2e2970e170dd","savedPayload":{"position":{"x":32568.099489690405,"y":30435.222387091588},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"7ef4294e-31a6-4a56-b4cc-ed4a3f205bb2","savedPayload":{"position":{"x":32751.85977272323,"y":30527.692551481876},"targetPosition":{"x":32583.126977965392,"y":30530.10221394953},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"7bacba88-87bc-491a-95fa-4024d49438f5","savedPayload":{"position":{"x":32583.126977965392,"y":30530.10221394953},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"d717997d-c2f4-4332-abd3-cf4a0f25cb65","savedPayload":{"position":{"x":32733.391822519578,"y":30670.59794133573},"targetPosition":{"x":32570.815011162955,"y":30625.372473852098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"63558a06-3dab-46c6-b361-2d55aca38eea","savedPayload":{"position":{"x":32570.815011162955,"y":30625.372473852098},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Slope Not Extreme, or...","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope != \"Extreme\" || \n(chart.at01hs.bollingerSubChannel.period <= 6 && \nchart.at08hs.bollingerChannel.direction === \"Down\" && \nchart.at06hs.bollingerChannel.direction === \"Down\" && \nchart.at04hs.bollingerChannel.direction === \"Down\" && \nchart.at02hs.bollingerSubChannel.slope === (\"Extreme\" || \"Steep\"))","project":"Superalgos","id":"e8563aee-5cd1-4953-a1c4-890a47ef8af3","savedPayload":{"position":{"x":32675.410853192156,"y":30802.511635961644},"targetPosition":{"x":32532.16103161134,"y":30713.31493693604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d900ad86-c048-45d3-9b26-dc8665b8aba8","savedPayload":{"position":{"x":32532.16103161134,"y":30713.31493693604},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"8H Deviation","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at08hs.bollingerBand.deviation < 1575","project":"Superalgos","id":"84f24347-1102-48e1-9d13-b7ae0f043e5e","savedPayload":{"position":{"x":32582.614138049783,"y":30912.746772341983},"targetPosition":{"x":32470.296554849763,"y":30786.805027856266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"182deaef-3884-4ddd-b08b-2a554a130832","savedPayload":{"position":{"x":32470.296554849763,"y":30786.805027856266},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Below Top Band","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.candle.open < \nchart.at24hs.bollingerBand.movingAverage + chart.at24hs.bollingerBand.deviation || \nchart.at24hs.candle.close < \nchart.at24hs.bollingerBand.movingAverage + chart.at24hs.bollingerBand.deviation","project":"Superalgos","id":"7ea70416-894f-4fae-ad62-db36e510519f","savedPayload":{"position":{"x":32462.519515069976,"y":30992.372755320805},"targetPosition":{"x":32390.233472863216,"y":30839.889016508812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"eb6577c9-7823-490c-9a25-81165b4d4f6b","savedPayload":{"position":{"x":32390.233472863216,"y":30839.889016508812},"targetPosition":{"x":32245.66138844971,"y":30534.92153888483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8a86bab-322e-4f20-8f2d-74671e8d2b7e","savedPayload":{"position":{"x":32245.66138844971,"y":30534.92153888483},"targetPosition":{"x":31912.316573498847,"y":30587.71817083591},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"97e60ce9-228e-459d-b2cc-2ba447266e22","savedPayload":{"position":{"x":31625.072160110347,"y":30736.803304870173},"targetPosition":{"x":31476.918909021075,"y":30760.268474626206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"166df39d-b70e-4061-9557-a6bb41a74bea","savedPayload":{"position":{"x":31476.918909021075,"y":30760.268474626206},"targetPosition":{"x":31300.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"openStage":{"type":"Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"4f34635c-d4e2-47c1-8c75-cd18d577fe33","savedPayload":{"position":{"x":32097.673412964887,"y":30240.541919407337},"targetPosition":{"x":32050.89328253089,"y":30460.625129572443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9f6351ce-0ca2-44f2-9e85-e9365265131b","savedPayload":{"position":{"x":32050.89328253089,"y":30460.625129572443},"targetPosition":{"x":32004.113152096896,"y":30680.70833973755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"492cee3d-1709-41c5-bfd8-e700a3fdf3da","savedPayload":{"position":{"x":32432.08858442971,"y":30541.650692268824},"targetPosition":{"x":32218.100868263304,"y":30611.179516003187},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"df940eb5-ea9b-485d-a03a-27491d496fc3","savedPayload":{"position":{"x":32218.100868263304,"y":30611.179516003187},"targetPosition":{"x":32004.113152096896,"y":30680.70833973755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dbfab28a-d209-4896-96bb-05a26db8b73f","savedPayload":{"position":{"x":31686.269879175707,"y":30798.796750804595},"targetPosition":{"x":31585.900288221877,"y":30910.268474626206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"cc515fe8-2957-4ef9-aef8-e65512f6ebf0","savedPayload":{"position":{"x":32612.955268992384,"y":31128.57574998485},"targetPosition":{"x":32466.23312888231,"y":31097.388996362188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"be9e2b59-adac-4ec8-8b16-73c9c1367eff","savedPayload":{"position":{"x":32466.23312888231,"y":31097.388996362188},"targetPosition":{"x":32319.51098877224,"y":31066.202242739524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"95614ecb-8d7a-4a56-8ca8-3a51ec209f45","savedPayload":{"position":{"x":32319.51098877224,"y":31066.202242739524},"targetPosition":{"x":32172.788848662167,"y":31035.01548911686},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"938d2ee7-fd7b-409a-8ba3-2e10898ecf2c","savedPayload":{"position":{"x":32172.788848662167,"y":31035.01548911686},"targetPosition":{"x":32026.066708552094,"y":31003.828735494197},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c54cb995-2b02-426e-bfe3-dea00d502d56","savedPayload":{"position":{"x":32026.066708552094,"y":31003.828735494197},"targetPosition":{"x":31879.344568442022,"y":30972.641981871533},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"f3ccceff-a347-4100-b429-0788d0035868","savedPayload":{"position":{"x":31879.344568442022,"y":30972.641981871533},"targetPosition":{"x":31732.62242833195,"y":30941.45522824887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"381d75d8-f6de-4841-b6a3-fc3c01884438","savedPayload":{"position":{"x":31732.62242833195,"y":30941.45522824887},"targetPosition":{"x":31585.900288221877,"y":30910.268474626206},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"262e5a8c-cb38-43be-840d-a41ee5f4665f","savedPayload":{"position":{"x":31585.900288221877,"y":30910.268474626206},"targetPosition":{"x":31300.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"098e918d-2dee-44f7-97bd-9d3a9ef0458a","savedPayload":{"position":{"x":32460.932771728778,"y":30881.91657310868},"targetPosition":{"x":32293.72518599636,"y":31032.470959539423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"q"}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Below 5%","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"96683629-b453-49a5-a871-94a0deb2a017","savedPayload":{"position":{"x":34738.87798994971,"y":43183.406060803245},"targetPosition":{"x":34380.61474462071,"y":43300.072664363455},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c48e62b6-cdf5-4ee0-9872-6487a99d1861","savedPayload":{"position":{"x":34380.61474462071,"y":43300.072664363455},"targetPosition":{"x":34023.20135802305,"y":43416.5910011551},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e502afa9-3ac9-4d7c-9a1c-02a66181c75c","savedPayload":{"position":{"x":34023.20135802305,"y":43416.5910011551},"targetPosition":{"x":33658.8511044813,"y":43535.41403114637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"2ae990f4-51b6-47de-8cb4-3acd042c1218","savedPayload":{"position":{"x":32507.712902162773,"y":31101.999783273786},"targetPosition":{"x":32293.72518599636,"y":31032.470959539423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"92bc3860-4ffb-44e8-bd90-15b05113b3d2","savedPayload":{"position":{"x":32293.72518599636,"y":31032.470959539423},"targetPosition":{"x":32073.64197583126,"y":31079.25108997342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P1: Trailing 5.25% Above MA","project":"Superalgos","formula":{"type":"Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.0525 < tradingEngine.current.position.stopLoss.value) \n{chart.at01hs.bollingerBand.movingAverage * 1.0525} \nelse {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"6f65573a-c2ac-476a-9ca1-738971e3ff78","savedPayload":{"position":{"x":32733.891606326582,"y":30938.910698671432},"targetPosition":{"x":32513.808396161472,"y":30985.690829105428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"e29bf8a5-014c-4868-b50a-c4b79b2b2eb3","savedPayload":{"position":{"x":32513.808396161472,"y":30985.690829105428},"targetPosition":{"x":32293.72518599636,"y":31032.470959539423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89593e32-77e8-4216-a351-64c852d06784","savedPayload":{"position":{"x":32098.64197583126,"y":31095.25108997342},"targetPosition":{"x":31878.558765666152,"y":31142.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"P1: 60% of Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.6","project":"Superalgos","id":"1766975c-17c8-477e-b2e5-cb6ff1c7ddd3","savedPayload":{"position":{"x":33343.86565106542,"y":45307.60128884687},"targetPosition":{"x":32976.06928320956,"y":45385.7953921233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"c3f076df-8b01-4a9a-ad60-9bf53433e4bf","savedPayload":{"position":{"x":34922.38361042235,"y":44854.771221023795},"targetPosition":{"x":34555.12108103236,"y":44775.776371982196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"553fde3a-dcb6-41b2-89c8-ba278a2fd4e0","savedPayload":{"position":{"x":34555.12108103236,"y":44775.776371982196},"targetPosition":{"x":34187.87326322644,"y":44698.42153062817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fa198094-34dd-4f2e-8d57-002ca886ba71","savedPayload":{"position":{"x":34187.87326322644,"y":44698.42153062817},"targetPosition":{"x":33812.740518694955,"y":44618.41028537479},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Entering Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"f1452048-936e-4c93-a615-66ed6b18bd11","savedPayload":{"position":{"x":34491.96274405311,"y":45484.925071428224},"targetPosition":{"x":34212.511978122035,"y":45234.76669181413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d85e95b6-4108-40d6-9ed0-a382f8d5015a","savedPayload":{"position":{"x":34212.511978122035,"y":45234.76669181413},"targetPosition":{"x":33932.13622520962,"y":44982.71705957985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"67baba53-16eb-4a64-b7ae-f8b2e999e710","savedPayload":{"position":{"x":33776.6876698653,"y":45717.93872881055},"targetPosition":{"x":33854.45425058783,"y":45350.67220878789},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f3a53caf-c1d2-4786-869d-3e4ed1c9b71b","savedPayload":{"position":{"x":33854.45425058783,"y":45350.67220878789},"targetPosition":{"x":33932.13622520962,"y":44982.71705957985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"034c0358-0163-4448-9511-8e154f07226e","savedPayload":{"position":{"x":33932.13622520962,"y":44982.71705957985},"targetPosition":{"x":33812.740518694955,"y":44618.41028537479},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a2d912bb-6362-4505-91b6-8b726dd670c7","savedPayload":{"position":{"x":32859.72269493093,"y":45743.528334410745},"targetPosition":{"x":32976.06928320956,"y":45385.7953921233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"17a900a2-bcfd-4e3f-b115-baa06c2b077a","savedPayload":{"position":{"x":32976.06928320956,"y":45385.7953921233},"targetPosition":{"x":32692.390541932506,"y":45070.68548551787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P2: 85% MA - 4 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 0.85 - \nchart.at01hs.bollingerBand.deviation * 4 > 1) \n{chart.at01hs.bollingerBand.movingAverage * 0.85 - \nchart.at01hs.bollingerBand.deviation * 4} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"77e53622-cb53-410d-892f-cd474b28c29e","savedPayload":{"position":{"x":33595.31596186612,"y":45586.81280353814},"targetPosition":{"x":33227.5835281625,"y":45665.11871160152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"8H Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"5fbde96a-6337-465e-8304-ca3def2b6410","savedPayload":{"position":{"x":34343.71649045767,"y":34043.06126553613},"targetPosition":{"x":34057.37838579785,"y":33940.02247976336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b855a2c5-d616-4379-a31a-5e187f36bfc4","savedPayload":{"position":{"x":34057.37838579785,"y":33940.02247976336},"targetPosition":{"x":33700.36246841534,"y":33803.173708126866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"9bff4bf4-56cd-46ea-adf1-273dbe6c8299","savedPayload":{"position":{"x":33973.36621048014,"y":34416.7658816998},"targetPosition":{"x":33855.874937264954,"y":34152.47856766467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3dbea2ad-06be-4a8e-ba8e-7718704e1dbe","savedPayload":{"position":{"x":33855.874937264954,"y":34152.47856766467},"targetPosition":{"x":33700.36246841534,"y":33803.173708126866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"f969b936-fd9a-45f2-bf59-4a18d691bc06","savedPayload":{"position":{"x":33395.037889495936,"y":34398.007091692125},"targetPosition":{"x":33498.89028765579,"y":34128.191077545634},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8ac6da5-2f72-4c53-953a-4135624d6230","savedPayload":{"position":{"x":33498.89028765579,"y":34128.191077545634},"targetPosition":{"x":33700.36246841534,"y":33803.173708126866},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"15b3728c-3b03-4a2b-9e05-6b7f772e6bf3","savedPayload":{"position":{"x":33700.18209119567,"y":33803.480386605384},"targetPosition":{"x":33465.00778672871,"y":33274.874855587244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 40","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.movingAverage <= 40","project":"Superalgos","id":"867dd327-29de-4b01-af95-8e18191a299a","savedPayload":{"position":{"x":33333.05973428013,"y":34383.58454446746},"targetPosition":{"x":33243.82933624715,"y":34108.64851270677},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eef8d507-fcf6-4efa-9fcb-9e58ccc0af36","savedPayload":{"position":{"x":33243.82933624715,"y":34108.64851270677},"targetPosition":{"x":33125.04276404638,"y":33742.85366106205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"f2fa836d-23f0-47cb-ba81-550089468d9a","savedPayload":{"position":{"x":32917.6301297237,"y":34381.601860862604},"targetPosition":{"x":33007.01464514057,"y":34106.28884351111},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f75a18be-7ac8-4276-89bd-b3ff8ea5c69f","savedPayload":{"position":{"x":33007.01464514057,"y":34106.28884351111},"targetPosition":{"x":33125.04276404638,"y":33742.85366106205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 3","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 3","project":"Superalgos","id":"5556b779-ef49-4a0b-ad26-1cdbfd6a01b8","savedPayload":{"position":{"x":32581.611927652786,"y":34137.79664866047},"targetPosition":{"x":32816.02170528682,"y":33967.41683841296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8762e6c-04a8-49dc-a6e7-de73f24bb295","savedPayload":{"position":{"x":32816.02170528682,"y":33967.41683841296},"targetPosition":{"x":33125.04276404638,"y":33742.85366106205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.direction === \"Up\"","project":"Superalgos","id":"42cf65fc-dc6a-4a45-9e14-1820db151b51","savedPayload":{"position":{"x":32449.228654213697,"y":33742.88825209724},"targetPosition":{"x":32738.1013867807,"y":33742.85826389762},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8137faa0-d59a-4eab-ad95-ca8d2250bbf6","savedPayload":{"position":{"x":32738.1013867807,"y":33742.85826389762},"targetPosition":{"x":33125.04276404638,"y":33742.85366106205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c688240e-5e54-456d-b219-16994f799907","savedPayload":{"position":{"x":33124.94636882617,"y":33742.969227553665},"targetPosition":{"x":33465.00778672871,"y":33274.874855587244},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6e59e30a-bd6e-45ad-afb9-f1bab0a759d9","savedPayload":{"position":{"x":33111.19089151636,"y":46022.78932642733},"targetPosition":{"x":33227.5835281625,"y":45665.11871160152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"62709ed5-832a-43e8-8f74-29a359af7127","savedPayload":{"position":{"x":33227.5835281625,"y":45665.11871160152},"targetPosition":{"x":32976.09248711737,"y":45385.82233038297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P3: 90% MA - 4 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 0.9 - \nchart.at01hs.bollingerBand.deviation * 4 > 1) \n{chart.at01hs.bollingerBand.movingAverage * 0.9 - \nchart.at01hs.bollingerBand.deviation * 4} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"2d4907e5-54f3-4677-b191-15a85b95c64e","savedPayload":{"position":{"x":33846.81955667049,"y":45866.11858590809},"targetPosition":{"x":33478.99186356516,"y":45944.30620698363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"12H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"12H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at12hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"7e9cefff-d831-4c3d-ba5a-42ef48397d0f","savedPayload":{"position":{"x":34795.80410051236,"y":34383.509070094646},"targetPosition":{"x":34526.309123571475,"y":34280.09068892164},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d1d9d786-da85-4a7b-b5b5-3278dcdccfa8","savedPayload":{"position":{"x":34526.309123571475,"y":34280.09068892164},"targetPosition":{"x":34169.002979023666,"y":34143.010855109475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"512f3976-5707-426d-b6cf-63306b90b71a","savedPayload":{"position":{"x":34442.18627603836,"y":34756.58732132532},"targetPosition":{"x":34324.501259370685,"y":34492.23738314313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e09d719-39f0-4e66-afe9-e46f816c0b8a","savedPayload":{"position":{"x":34324.501259370685,"y":34492.23738314313},"targetPosition":{"x":34169.002979023666,"y":34143.010855109475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 15","project":"Superalgos","id":"53159d45-d2aa-4faf-b9a8-b6643623a64b","savedPayload":{"position":{"x":33928.688656615435,"y":34770.10639705343},"targetPosition":{"x":34032.165449311164,"y":34500.02382991703},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3cf6274-a828-41f0-a293-8e79ecfe4e39","savedPayload":{"position":{"x":34032.165449311164,"y":34500.02382991703},"targetPosition":{"x":34169.002979023666,"y":34143.010855109475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7f47a98b-6d2e-40e4-8105-82a9fa301600","savedPayload":{"position":{"x":34168.54952503468,"y":34143.15516902314},"targetPosition":{"x":33933.26518479808,"y":33614.48891481997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H %B MA < 70 || 12H %B MA < 40","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 70 || \nchart.at12hs.percentageBandwidth.movingAverage <= 40","project":"Superalgos","id":"52ec70e3-9089-4cba-beb3-c8310ab966b5","savedPayload":{"position":{"x":33803.95639019715,"y":34729.793324344035},"targetPosition":{"x":33714.83955732108,"y":34455.055258479304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9bb204df-4376-4a7d-996f-8e41d75f49c3","savedPayload":{"position":{"x":33714.83955732108,"y":34455.055258479304},"targetPosition":{"x":33593.91597300338,"y":34082.64917575815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Previous Up","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"a18dfaba-685b-4ac6-8435-211bb8d59f2b","savedPayload":{"position":{"x":33383.90675997831,"y":34729.74636883433},"targetPosition":{"x":33473.14054021963,"y":34454.780562322776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b9ddf58a-89b4-4fec-899a-ab905e97234a","savedPayload":{"position":{"x":33473.14054021963,"y":34454.780562322776},"targetPosition":{"x":33593.91597300338,"y":34082.64917575815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"1d3956c4-c13a-414f-86ce-49acc5557ebe","savedPayload":{"position":{"x":33043.683298094016,"y":34482.82361867606},"targetPosition":{"x":33277.49448884848,"y":34312.773263782045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee9eaf68-0a23-45a3-8aaf-42b97ebf4584","savedPayload":{"position":{"x":33277.49448884848,"y":34312.773263782045},"targetPosition":{"x":33593.91597300338,"y":34082.64917575815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"4f684afd-4c77-42b0-8b2b-64994ab95e09","savedPayload":{"position":{"x":32913.268782662584,"y":34083.15345445898},"targetPosition":{"x":33203.00955030503,"y":34082.87579428281},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5ca55797-a76b-4be7-921d-bdd84773a407","savedPayload":{"position":{"x":33203.00955030503,"y":34082.87579428281},"targetPosition":{"x":33593.91597300338,"y":34082.64917575815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"73890378-cc74-4c04-8e2b-e467429bcdb5","savedPayload":{"position":{"x":33593.18411199604,"y":34082.85632137883},"targetPosition":{"x":33933.26518479808,"y":33614.48891481997},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"41a619aa-ca95-4184-a651-0fdfced33f96","savedPayload":{"position":{"x":33362.72917121497,"y":46302.077876456664},"targetPosition":{"x":33478.99186356516,"y":45944.30620698363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"c51fe1c0-ac69-4b35-913f-76e24ee4c4b2","savedPayload":{"position":{"x":33478.99186356516,"y":45944.30620698363},"targetPosition":{"x":33227.5835281625,"y":45665.11871160152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P4: MA - 3 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 3 > 1) \n{chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 3} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"d1425de3-3c9f-4b1a-a3ad-b5b2a604f857","savedPayload":{"position":{"x":34098.3981759634,"y":46145.51649970157},"targetPosition":{"x":33730.52149260439,"y":46223.62142522518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"24H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous %B < 20","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 20","project":"Superalgos","id":"1ff4ea62-15ff-4409-9e8c-0c5576958be6","savedPayload":{"position":{"x":35438.85778349233,"y":34368.52598426875},"targetPosition":{"x":35150.697137912044,"y":34383.479587424314},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13f09ae8-9b15-4e6a-be3c-d0745b7252a3","savedPayload":{"position":{"x":35150.697137912044,"y":34383.479587424314},"targetPosition":{"x":34766.018595837064,"y":34403.569664297844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":" chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"90d32cba-ec65-4a52-a96a-02e5436b790e","savedPayload":{"position":{"x":35329.56452801823,"y":34769.33685051033},"targetPosition":{"x":35086.826809331826,"y":34611.774176103485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a58f7e1-75da-4e8f-a4c5-185a59e8c938","savedPayload":{"position":{"x":35086.826809331826,"y":34611.774176103485},"targetPosition":{"x":34766.018595837064,"y":34403.569664297844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"fff48225-fa90-4ed5-aca8-4ae98a55e135","savedPayload":{"position":{"x":35006.211596601795,"y":35028.548240877484},"targetPosition":{"x":34902.39129465605,"y":34758.39220722437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e01c18f1-b9f7-4cc7-91be-6d18c3168f13","savedPayload":{"position":{"x":34902.39129465605,"y":34758.39220722437},"targetPosition":{"x":34766.018595837064,"y":34403.569664297844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H EMA 20 > 50 or Convergence","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.popularEMA.ema20 > chart.at01hs.popularEMA.ema50 || \n(chart.at01hs.popularEMA.ema50 - chart.at01hs.popularEMA.ema20 < \nchart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 && \nchart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 < chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 && \nchart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 < \nchart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema20)\n","project":"Superalgos","id":"7ee960b5-be23-4649-92ca-fc4ea5adc99b","savedPayload":{"position":{"x":34618.50997753077,"y":35039.35595821752},"targetPosition":{"x":34668.034806124786,"y":34770.879083155814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4262c963-84df-44ba-ac06-7ecb331ba24d","savedPayload":{"position":{"x":34668.034806124786,"y":34770.879083155814},"targetPosition":{"x":34766.018595837064,"y":34403.569664297844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"186df69f-9a0d-49af-9394-0dbd05f18628","savedPayload":{"position":{"x":32523.1052310591,"y":34936.08368585874},"targetPosition":{"x":32464.44425282173,"y":34548.525999435704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"d08197af-2643-4f8c-83ac-8eb33a9ff474","savedPayload":{"position":{"x":34881.10628730355,"y":35002.3587014557},"targetPosition":{"x":34665.293835276454,"y":34807.98453818294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"750174f5-0953-4204-bb06-9f68030e9185","savedPayload":{"position":{"x":34665.293835276454,"y":34807.98453818294},"targetPosition":{"x":34341.87807865043,"y":34516.671242134544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"9d8a9727-239e-42db-952a-7c04e065ffca","savedPayload":{"position":{"x":34492.07789422037,"y":35223.54180533432},"targetPosition":{"x":34432.03784351028,"y":34940.91516130275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f42f3843-bf81-4782-b129-f06e98f354d8","savedPayload":{"position":{"x":34432.03784351028,"y":34940.91516130275},"targetPosition":{"x":34341.87807865043,"y":34516.671242134544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"99b3c782-ecb4-43ca-9624-962220c38981","savedPayload":{"position":{"x":34047.51092189819,"y":35178.94058123221},"targetPosition":{"x":34164.8827595547,"y":34914.839951087575},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0fdfb277-cfa0-4fc6-aee9-db2cc997b208","savedPayload":{"position":{"x":34164.8827595547,"y":34914.839951087575},"targetPosition":{"x":34341.87807865043,"y":34516.671242134544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H %B < 60 || 12H %B < 30","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 60 || \nchart.at12hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"90331db7-a6e8-47a6-be28-4e679b728ce3","savedPayload":{"position":{"x":33718.42637668107,"y":34877.31851705635},"targetPosition":{"x":33968.66436427911,"y":34732.52878021475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef2973eb-d707-41cc-b492-96dbf5215de1","savedPayload":{"position":{"x":33968.66436427911,"y":34732.52878021475},"targetPosition":{"x":34341.87807865043,"y":34516.671242134544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"91020a9c-998e-407c-94f1-774941d9033c","savedPayload":{"position":{"x":32234.42401766186,"y":34865.26689774926},"targetPosition":{"x":32464.44425282173,"y":34548.525999435704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"25% Target","project":"Superalgos","conditions":[{"type":"Condition","name":"25% Target","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close <= tradingEngine.current.position.entryTargetRate.value * 0.8","project":"Superalgos","id":"a8a904a9-cbf3-40cb-89ef-8066d65fe443","savedPayload":{"position":{"x":31468.97395445377,"y":34707.030262436165},"targetPosition":{"x":31661.100138028563,"y":34676.29961714636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b841c21b-789a-49bf-b959-f91613e089a8","savedPayload":{"position":{"x":31661.100138028563,"y":34676.29961714636},"targetPosition":{"x":32083.458924250892,"y":34609.14110348126},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"66105054-6e57-4aec-ada2-14054981fd68","savedPayload":{"position":{"x":32078.076952036678,"y":34609.79700541204},"targetPosition":{"x":32464.44425282173,"y":34548.525999435704},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"830013bf-e507-4960-9742-1a9b8ffdd16a","savedPayload":{"position":{"x":33614.34237142739,"y":46581.46235200472},"targetPosition":{"x":33730.52149260439,"y":46223.62142522518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"b30e4c2c-fe06-4217-af5a-5c728463388a","savedPayload":{"position":{"x":33730.52149260439,"y":46223.62142522518},"targetPosition":{"x":33478.99186356516,"y":45944.30620698363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P5: MA - 1.5 Deviations","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 1.5 > 1) \n{chart.at01hs.bollingerBand.movingAverage - \nchart.at01hs.bollingerBand.deviation * 1.5} \nelse {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"b04ad21c-bd81-401e-8b70-c158ab668f66","savedPayload":{"position":{"x":34349.92707351712,"y":46424.94228386499},"targetPosition":{"x":33982.12778260721,"y":46503.02505246553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"24H Previous Oversold","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous MA < 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"7637580c-cda0-4056-ad4a-de67510050fa","savedPayload":{"position":{"x":35906.07235087816,"y":34707.73663005332},"targetPosition":{"x":35616.26402316763,"y":34722.7519323961},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ecaa9841-49d1-45da-8249-17e373c7d662","savedPayload":{"position":{"x":35616.26402316763,"y":34722.7519323961},"targetPosition":{"x":35234.62284750796,"y":34742.63823668889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"f6f6d914-5813-4389-b29e-6c7edc4927e0","savedPayload":{"position":{"x":35798.11721142213,"y":35108.46689059539},"targetPosition":{"x":35555.518077569206,"y":34950.95746370827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9fb9d04e-da7e-45a8-af44-e87d65e5650f","savedPayload":{"position":{"x":35555.518077569206,"y":34950.95746370827},"targetPosition":{"x":35234.62284750796,"y":34742.63823668889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 10","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"a08871c1-b85d-4afc-9480-7eeca7598dd1","savedPayload":{"position":{"x":35475.533526060906,"y":35369.877232070416},"targetPosition":{"x":35371.70206322763,"y":35099.495184961954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1dcf89ef-e3e3-4d6e-bbfb-16ccdeeec348","savedPayload":{"position":{"x":35371.70206322763,"y":35099.495184961954},"targetPosition":{"x":35234.62284750796,"y":34742.63823668889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H EMA 20 > 50 or Convergence","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.popularEMA.ema20 > chart.at01hs.popularEMA.ema50 || (chart.at01hs.popularEMA.ema50 - chart.at01hs.popularEMA.ema20 < chart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 && chart.at01hs.popularEMA.previous.ema50 - chart.at01hs.popularEMA.previous.ema20 < chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 && chart.at01hs.popularEMA.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.ema20 < chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema50 - chart.at01hs.popularEMA.previous.previous.previous.previous.previous.ema20)","project":"Superalgos","id":"5dc14b5f-4a07-413a-83ac-7c57eb96a8d3","savedPayload":{"position":{"x":35061.34220429458,"y":35391.844145127936},"targetPosition":{"x":35136.074311464334,"y":35111.80141936694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8a062525-23e1-48dc-83c1-c0cec0e30907","savedPayload":{"position":{"x":35136.074311464334,"y":35111.80141936694},"targetPosition":{"x":35234.62284750796,"y":34742.63823668889},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f3086330-375a-4871-a7a8-f12b0543f1c3","savedPayload":{"position":{"x":33756.481012803495,"y":46885.621474164975},"targetPosition":{"x":33582.28757239752,"y":46544.22110866073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"24H Previous Previous Up","project":"Superalgos","conditions":[{"type":"Condition","name":"24H Previous Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"aca8f925-5511-4d06-92bb-29b637072f66","savedPayload":{"position":{"x":35321.53799405785,"y":35329.26883653065},"targetPosition":{"x":35099.337780894326,"y":35129.119431934945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0ff1bab-8072-4dab-97b8-69d3cb9d0d48","savedPayload":{"position":{"x":35099.337780894326,"y":35129.119431934945},"targetPosition":{"x":34810.36087141862,"y":34868.72848079784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H %B < 50 || 12H %B < 17.5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.movingAverage <= 50 || \nchart.at12hs.percentageBandwidth.movingAverage <= 17.5","project":"Superalgos","id":"7673df58-3326-4d28-9005-47214b0f05c0","savedPayload":{"position":{"x":34949.78529694408,"y":35524.2744694647},"targetPosition":{"x":34889.49051228405,"y":35240.505391745406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5435a45d-891a-4456-8521-6587003fb171","savedPayload":{"position":{"x":34889.49051228405,"y":35240.505391745406},"targetPosition":{"x":34810.36087141862,"y":34868.72848079784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"4eadea14-f412-4849-b3f6-187e72b13bd8","savedPayload":{"position":{"x":34538.446687001146,"y":35480.725877918725},"targetPosition":{"x":34655.963101831025,"y":35216.207368805524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a94adefc-e6c3-4531-ab91-84d23096900a","savedPayload":{"position":{"x":34655.963101831025,"y":35216.207368805524},"targetPosition":{"x":34810.36087141862,"y":34868.72848079784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Channel Period > 5","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"c69a88a9-be56-4dd6-88d9-c360b06fa501","savedPayload":{"position":{"x":34231.00541914165,"y":35204.1084378667},"targetPosition":{"x":34481.524843718136,"y":35059.062255157245},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fe46196d-b481-4b9f-8908-43b5e7094d7f","savedPayload":{"position":{"x":34481.524843718136,"y":35059.062255157245},"targetPosition":{"x":34810.36087141862,"y":34868.72848079784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"80b47c3e-843a-43f5-8f74-5d2a437457fc","savedPayload":{"position":{"x":33464.06057725776,"y":46909.00306848872},"targetPosition":{"x":33582.28757239752,"y":46544.22110866073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"66% Target","project":"Superalgos","conditions":[{"type":"Condition","name":"66% Target","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close <= tradingEngine.current.position.entryTargetRate.value * 0.6","project":"Superalgos","id":"8a74b52a-5fc5-4ed0-85a3-4092e474081c","savedPayload":{"position":{"x":31626.08740422069,"y":35059.2731303153},"targetPosition":{"x":31818.03591196791,"y":35028.62532016897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f27c3841-bbe5-40a0-81e1-031db8512b53","savedPayload":{"position":{"x":31818.03591196791,"y":35028.62532016897},"targetPosition":{"x":32240.541212443826,"y":34961.49110452969},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ff1379fd-2b18-4c17-b69b-5aed7bffc5c9","savedPayload":{"position":{"x":33240.70992859596,"y":46718.205224815145},"targetPosition":{"x":33582.28757239752,"y":46544.22110866073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5e8f7f0f-0a93-4f9d-ac7c-da2b53d38919","savedPayload":{"position":{"x":33865.99048450286,"y":46860.80983700097},"targetPosition":{"x":33982.12778260721,"y":46503.02505246553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"ac38aa6f-c935-4bd3-90f5-69163e3f23ac","savedPayload":{"position":{"x":33982.12778260721,"y":46503.02505246553},"targetPosition":{"x":33730.52149260439,"y":46223.62142522518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P6: Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"5a0e05fc-2b96-46dd-b913-fa10420404c0","savedPayload":{"position":{"x":34485.230108978336,"y":47061.76186402452},"targetPosition":{"x":34233.75171359939,"y":46782.464880138665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"9dc858f9-63b4-48a4-bcfc-5cee9a7219b4","savedPayload":{"position":{"x":34233.75171359939,"y":46782.464880138665},"targetPosition":{"x":33982.12778260721,"y":46503.02505246553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"116048c4-81d3-469d-842c-390bb32de8ce","savedPayload":{"position":{"x":32029.113152096896,"y":31309.238806139827},"targetPosition":{"x":31878.558765666152,"y":31142.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7c129ba3-8e7d-422a-9e40-d3a362b2f251","savedPayload":{"position":{"x":31585.900288221877,"y":31095.67867125117},"targetPosition":{"x":31300.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"3d3dc6e9-d5c3-405d-bea2-ff0867368e87","savedPayload":{"position":{"x":32343.16927775025,"y":31395.50915662903},"targetPosition":{"x":32119.40185129239,"y":31419.02806086425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"93fa6d49-ec93-4df0-aa39-0e41982a794a","savedPayload":{"position":{"x":32119.40185129239,"y":31419.02806086425},"targetPosition":{"x":31895.63442483453,"y":31442.54696509947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value - tradingEngine.current.strategyOpenStage.stageQuotedAsset.feesPaid.value","project":"Superalgos","id":"6e98a177-0236-4e1c-8d32-7c67df342fac","savedPayload":{"position":{"x":32160.137788366144,"y":31806.604612568197},"targetPosition":{"x":32027.886106600337,"y":31624.575788833834},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"85c5712b-61bc-4eaf-92a9-4fdacd110f85","savedPayload":{"position":{"x":32027.886106600337,"y":31624.575788833834},"targetPosition":{"x":31895.63442483453,"y":31442.54696509947},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4cd64320-79e3-4a06-a892-02756d235dbe","savedPayload":{"position":{"x":31920.63442483453,"y":31458.54696509947},"targetPosition":{"x":31715.086696864946,"y":31367.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"142e80e8-6ef4-443c-91c2-96e0a2041523","savedPayload":{"position":{"x":31974.915568296467,"y":35237.07162975067},"targetPosition":{"x":31912.53566221539,"y":34941.80280142659},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e4205ca-82db-4481-a5f9-8bd3d3619eac","savedPayload":{"position":{"x":31912.53566221539,"y":34941.80280142659},"targetPosition":{"x":31850.070901753486,"y":34646.434678903985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4067e6b8-f217-4094-a02f-4da7014704a1","savedPayload":{"position":{"x":31850.070901753486,"y":34646.434678903985},"targetPosition":{"x":31783.100593705563,"y":34329.47822661052},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"092bc2da-ac37-407f-8e2f-6492ae11502c","savedPayload":{"position":{"x":31784.16231380583,"y":32246.100926238854},"targetPosition":{"x":31760.64340957061,"y":32022.333499780994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3b1d6016-48ec-4460-8200-30bc40049643","savedPayload":{"position":{"x":31760.64340957061,"y":32022.333499780994},"targetPosition":{"x":31737.12450533539,"y":31798.566073323134},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"f46a0d35-2aea-47d3-96c9-ec3e063c5168","savedPayload":{"position":{"x":31737.12450533539,"y":31798.566073323134},"targetPosition":{"x":31713.605601100167,"y":31574.798646865274},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13f97380-5bfb-4f7d-a690-ffefb67fdfb9","savedPayload":{"position":{"x":31738.605601100167,"y":31590.798646865274},"targetPosition":{"x":31715.086696864946,"y":31367.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"bdaf22d5-ad3a-43e4-8a9e-848b8f32eff4","savedPayload":{"position":{"x":31476.918909021075,"y":31245.67867125117},"targetPosition":{"x":31300.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a5f437d-1a17-4619-95e6-925b7686c87c","savedPayload":{"position":{"x":31300.583333333332,"y":31002.97357293869},"targetPosition":{"x":31000.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"Xtreme","project":"Superalgos","triggerStage":{"type":"Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"Xtreme","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"afc33e4f-53e2-4106-83c3-9efa7e7bebc5","savedPayload":{"position":{"x":31040.931984044848,"y":31747.813210703476},"targetPosition":{"x":30892.169078334464,"y":31728.588281975313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0f055de8-0eb0-4a8c-aea8-0acc7480ac6c","savedPayload":{"position":{"x":30892.169078334464,"y":31728.588281975313},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"34bd2c52-c5aa-4e69-9b82-414008ee0b80","savedPayload":{"position":{"x":31006.605290227424,"y":31871.211037984565},"targetPosition":{"x":30869.284615789515,"y":31810.853500162706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"4ccae6ab-5911-4e5b-aa69-57e157a5acf9","savedPayload":{"position":{"x":30869.284615789515,"y":31810.853500162706},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"527f0ba5-4997-44c4-94d8-095c7b3d869e","savedPayload":{"position":{"x":30938.903883313615,"y":31979.93943900297},"targetPosition":{"x":30824.15034451364,"y":31883.33910084164},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"bfed975b-1086-4648-b900-2c493bcd2278","savedPayload":{"position":{"x":30824.15034451364,"y":31883.33910084164},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"56266555-5754-48e1-be35-51840b451a61","savedPayload":{"position":{"x":30843.3125286558,"y":32065.18988534088},"targetPosition":{"x":30760.422774741764,"y":31940.17273173358},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"ca52539f-eab7-4867-80a9-4c03295df977","savedPayload":{"position":{"x":30760.422774741764,"y":31940.17273173358},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"63b99ed2-4919-4262-aa74-ca9de1f83e0a","savedPayload":{"position":{"x":30727.57546930468,"y":32120.055892839915},"targetPosition":{"x":30683.26473517435,"y":31976.75007006627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"04132e51-a148-4e3b-a41a-d47deaa5113d","savedPayload":{"position":{"x":30683.26473517435,"y":31976.75007006627},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"5de63c96-ba0b-4329-8f5d-36414ecec5f3","savedPayload":{"position":{"x":30601.069033494095,"y":32140.092543873227},"targetPosition":{"x":30598.92711130063,"y":31990.107837421812},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"206f98c9-6ebc-47bf-97f9-7a2369cf2a20","savedPayload":{"position":{"x":30598.92711130063,"y":31990.107837421812},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"09a75c6c-1d70-4826-9926-b65c58db8ec9","savedPayload":{"position":{"x":30474.04202029067,"y":32123.676588136645},"targetPosition":{"x":30514.24243583168,"y":31979.163866930758},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"e5cc491c-ca57-4138-8c28-9b0f3aa706d7","savedPayload":{"position":{"x":30514.24243583168,"y":31979.163866930758},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (chart.at01hs.bollingerSubChannel.slope != \"Extreme\") {true} else {if (chart.at01hs.bollingerSubChannel.period <=7) {true} else {false}}","project":"Superalgos","id":"67f3557c-8ecd-46bc-afbc-433af0bc47de","savedPayload":{"position":{"x":30356.785402845413,"y":32072.137948734493},"targetPosition":{"x":30436.071357534838,"y":31944.80477399599},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"f9dbefdb-09bf-4d90-964f-35b02cde3ce4","savedPayload":{"position":{"x":30436.071357534838,"y":31944.80477399599},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H %B MA > 70","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.previous.movingAverage >= 70","project":"Superalgos","id":"3e758bbf-798d-4350-b600-f66e65b79a94","savedPayload":{"position":{"x":30258.79861495178,"y":31989.65197971905},"targetPosition":{"x":30370.746832272416,"y":31889.814127985694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d4c531a6-e637-4fd8-a2b8-b8b248bf4a0a","savedPayload":{"position":{"x":30370.746832272416,"y":31889.814127985694},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Deviation > 2000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerBand.deviation > 2000","project":"Superalgos","id":"6dc8d475-f68f-4405-8418-5869e7ca3785","savedPayload":{"position":{"x":30188.01996341505,"y":31882.901203736994},"targetPosition":{"x":30323.561064581263,"y":31818.646943997657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"445f4ffc-bac0-44f2-9441-cf01424fd36e","savedPayload":{"position":{"x":30323.561064581263,"y":31818.646943997657},"targetPosition":{"x":30594.643266913692,"y":31690.138424518984},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8a5bd03d-6958-4fd0-bd5d-84afb04a6bed","savedPayload":{"position":{"x":30594.643266913692,"y":31690.138424518984},"targetPosition":{"x":30547.712927401622,"y":31393.831922340443},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b21fbf4b-4ed3-4536-93f3-531ca2700817","savedPayload":{"position":{"x":30547.712927401622,"y":31393.831922340443},"targetPosition":{"x":30524.24775764559,"y":31245.67867125117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close > chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"3b591e8c-1739-4466-b9f3-87be08d0db90","savedPayload":{"position":{"x":29732.07324273849,"y":32079.146515344866},"targetPosition":{"x":29864.324924504297,"y":31897.117691610503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"20b59f4c-8ec5-4be8-9d06-f1b223045e83","savedPayload":{"position":{"x":29864.324924504297,"y":31897.117691610503},"targetPosition":{"x":29996.576606270104,"y":31715.08886787614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b8da5dc-c9d7-4794-ba8a-ad3a737f82c6","savedPayload":{"position":{"x":29996.576606270104,"y":31715.08886787614},"targetPosition":{"x":30128.82828803591,"y":31533.060044141777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4e265461-a65e-4f61-a123-f74d32a3d14f","savedPayload":{"position":{"x":30436.079969801718,"y":31367.031220407414},"targetPosition":{"x":30524.24775764559,"y":31245.67867125117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"Xtreme","project":"Superalgos","conditions":[{"type":"Condition","name":"3 Closes Below MA","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage && \nchart.at01hs.candle.previous.close < chart.at01hs.bollingerBand.previous.movingAverage && \nchart.at01hs.candle.previous.previous.close < chart.at01hs.bollingerBand.previous.previous.movingAverage","project":"Superalgos","id":"88151639-ba25-411f-ab3a-8e002e9948f2","savedPayload":{"position":{"x":29626.310330290336,"y":31939.042829418835},"targetPosition":{"x":29652.708646265877,"y":31772.370421943404},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"fc0bf247-86a1-4352-a85b-a0515a158629","savedPayload":{"position":{"x":29652.708646265877,"y":31772.370421943404},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Breakdown","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"5ce80f14-1175-4cce-8f3f-cd05977d02e8","savedPayload":{"position":{"x":29475.67258772381,"y":31890.097659862906},"targetPosition":{"x":29552.283484554857,"y":31739.74030890612},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"449a1458-781c-4214-9ddc-4e268891db36","savedPayload":{"position":{"x":29552.283484554857,"y":31739.74030890612},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"660a8819-2e1b-46f9-b8ff-0f07b772ffb7","savedPayload":{"position":{"x":29347.532470241265,"y":31796.998414968235},"targetPosition":{"x":29466.856739566494,"y":31677.674145643006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"b9a2cd43-d129-444e-9684-04ba93aa939e","savedPayload":{"position":{"x":29466.856739566494,"y":31677.674145643006},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation > 200","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 200","project":"Superalgos","id":"9d354242-8f6f-4dd4-8488-f453699caf51","savedPayload":{"position":{"x":29254.433225346595,"y":31668.85829748569},"targetPosition":{"x":29404.79057630338,"y":31592.247400654644},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"2d429ceb-6816-4f9d-b211-4034080d39a3","savedPayload":{"position":{"x":29404.79057630338,"y":31592.247400654644},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Candle Size < 750","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.max - chart.at01hs.candle.min < 750","project":"Superalgos","id":"85a4f5bd-4255-4b8d-bb4e-62eddb053030","savedPayload":{"position":{"x":29205.488055790665,"y":31518.220554919164},"targetPosition":{"x":29372.160463266096,"y":31491.822238943623},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"0b3dba7b-79a2-425e-be41-0368ea2f005d","savedPayload":{"position":{"x":29372.160463266096,"y":31491.822238943623},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Deviation < 1000","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.bollingerBand.deviation < 1000","project":"Superalgos","id":"89150469-6c19-4781-8c80-f3ac0728d734","savedPayload":{"position":{"x":29205.488055790665,"y":31359.83065906593},"targetPosition":{"x":29372.160463266096,"y":31386.228975041467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"c27245cb-4562-4e8b-8cd2-171427de3d04","savedPayload":{"position":{"x":29372.160463266096,"y":31386.228975041467},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Not Completly Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 30 || \nchart.at03hs.percentageBandwidth.movingAverage >= 30 || \nchart.at04hs.percentageBandwidth.movingAverage >= 30 || \nchart.at06hs.percentageBandwidth.movingAverage >= 30 || \nchart.at08hs.percentageBandwidth.movingAverage >= 30","project":"Superalgos","id":"72d449b1-2eaf-449c-b4c2-7e54165620e4","savedPayload":{"position":{"x":29254.433225346595,"y":31209.1929164994},"targetPosition":{"x":29404.79057630338,"y":31285.803813330447},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"72c0840a-0162-4fb5-8fe0-1043a3500942","savedPayload":{"position":{"x":29404.79057630338,"y":31285.803813330447},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"if (chart.at01hs.bollingerSubChannel.slope != \"Extreme\") {true} else {if (chart.at01hs.bollingerSubChannel.period <=7) {true} else {false}}","project":"Superalgos","id":"fd550ee5-bb66-4475-9712-165aff7123a2","savedPayload":{"position":{"x":29347.532470241265,"y":31081.052799016856},"targetPosition":{"x":29466.856739566494,"y":31200.377068342084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"27abcda3-5917-4345-b070-f506dd03d511","savedPayload":{"position":{"x":29466.856739566494,"y":31200.377068342084},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H %B MA > 70","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at02hs.percentageBandwidth.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.movingAverage >= 70 || \nchart.at02hs.percentageBandwidth.previous.previous.previous.previous.previous.movingAverage >= 70","project":"Superalgos","id":"ae35fa99-f82e-421d-9df7-695e52a2dbe3","savedPayload":{"position":{"x":29475.67258772381,"y":30987.953554122185},"targetPosition":{"x":29552.283484554857,"y":31138.31090507897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"055aec39-19b4-4001-8c7e-4e9d0b46a41d","savedPayload":{"position":{"x":29552.283484554857,"y":31138.31090507897},"targetPosition":{"x":29705.505278216955,"y":31439.025606992545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"935320b2-9c4b-4f95-a23b-eca780f9968e","savedPayload":{"position":{"x":29705.505278216955,"y":31439.025606992545},"targetPosition":{"x":30038.850093167814,"y":31386.228975041467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9473e9a0-df49-4111-aeb3-c3398a2cca06","savedPayload":{"position":{"x":30376.094506556317,"y":31269.143841007204},"targetPosition":{"x":30524.24775764559,"y":31245.67867125117},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"7653910c-4637-4b93-909a-934356164e61","savedPayload":{"position":{"x":30524.24775764559,"y":31245.67867125117},"targetPosition":{"x":30700.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},"openStage":{"type":"Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"20253ca8-c331-4d15-83dd-3615e5b3bd94","savedPayload":{"position":{"x":29853.493253701778,"y":31733.40522647004},"targetPosition":{"x":29900.273384135773,"y":31513.322016304934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d8b919-87fd-4d37-86b7-7c1e7d6268ff","savedPayload":{"position":{"x":29900.273384135773,"y":31513.322016304934},"targetPosition":{"x":29947.05351456977,"y":31293.238806139827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"a90e0c3d-a8f5-4cce-a763-2cc1a0d64502","savedPayload":{"position":{"x":29519.078082236952,"y":31432.296453608553},"targetPosition":{"x":29733.06579840336,"y":31362.76762987419},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1f3a30b8-30b5-46e9-b8b7-1ceb4bf80aae","savedPayload":{"position":{"x":29733.06579840336,"y":31362.76762987419},"targetPosition":{"x":29947.05351456977,"y":31293.238806139827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"82010f4f-3614-4bdc-8c40-4d99e9e31312","savedPayload":{"position":{"x":29972.05351456977,"y":31309.238806139827},"targetPosition":{"x":30122.607901000512,"y":31142.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"1fe7e332-45dd-45c0-b106-63cdaea4bed4","savedPayload":{"position":{"x":28557.025429844765,"y":30798.570307369446},"targetPosition":{"x":28777.108640009872,"y":30845.35043780344},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f2f65162-a972-4815-885c-a82298951d0b","savedPayload":{"position":{"x":28777.108640009872,"y":30845.35043780344},"targetPosition":{"x":28997.19185017498,"y":30892.130568237437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0662db35-3b83-4fad-be6c-aed4105f1804","savedPayload":{"position":{"x":28997.19185017498,"y":30892.130568237437},"targetPosition":{"x":29217.275060340085,"y":30938.910698671432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8c738920-803e-4d81-81d7-f08f9d94d4b6","savedPayload":{"position":{"x":29217.275060340085,"y":30938.910698671432},"targetPosition":{"x":29437.358270505192,"y":30985.690829105428},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4d78477-d485-45cc-ba6e-d97c76cf7dcc","savedPayload":{"position":{"x":29437.358270505192,"y":30985.690829105428},"targetPosition":{"x":29657.4414806703,"y":31032.470959539423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"8243f9c5-daa7-4793-9752-ade0c6dc895a","savedPayload":{"position":{"x":29657.4414806703,"y":31032.470959539423},"targetPosition":{"x":29877.524690835406,"y":31079.25108997342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"a2395358-86a8-43ae-8473-fd8bc36631b7","savedPayload":{"position":{"x":29902.524690835406,"y":31095.25108997342},"targetPosition":{"x":30122.607901000512,"y":31142.031220407414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"17b1363e-f9cb-4a68-bb06-666749e377e9","savedPayload":{"position":{"x":30415.266378444787,"y":31095.67867125117},"targetPosition":{"x":30700.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"2477d7a0-e2ef-4f98-8859-c9abdd65f330","savedPayload":{"position":{"x":29490.233894937886,"y":31092.030572768697},"targetPosition":{"x":29657.4414806703,"y":30941.476186337954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"shortcutKey":"q"}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Close Below 5%","code":"chart.at24hs.candlesProbability.begin > chart.at24hs.candlesProbability.begin","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.close < tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"aa5d897c-69c4-4c32-a25d-76662d7e110f","savedPayload":{"position":{"x":27425.258194670652,"y":45535.24916029425},"targetPosition":{"x":27768.98203876626,"y":45423.54060934078},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac91438d-54f6-4de5-bd93-2414037fd447","savedPayload":{"position":{"x":27768.98203876626,"y":45423.54060934078},"targetPosition":{"x":28112.91699616585,"y":45311.73498374794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ba1814d0-9aac-443f-8ce8-9f19e860b532","savedPayload":{"position":{"x":28112.91699616585,"y":45311.73498374794},"targetPosition":{"x":28466.58509111351,"y":45196.72245376765},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"784ae520-1c92-4923-b9b1-b3da21840959","savedPayload":{"position":{"x":29443.45376450389,"y":30871.94736260359},"targetPosition":{"x":29657.4414806703,"y":30941.476186337954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"48832805-7cb3-4fe7-b465-5e20cb5393ce","savedPayload":{"position":{"x":29657.4414806703,"y":30941.476186337954},"targetPosition":{"x":29877.524690835406,"y":30894.696055903958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P1: Trailing 4% Above MA","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.04 < tradingEngine.current.position.stopLoss.value) \n{chart.at01hs.bollingerBand.movingAverage * 1.04} \nelse {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"1348c680-76ae-4766-bb6d-b8885b8b976c","savedPayload":{"position":{"x":29217.275060340085,"y":31035.036447205945},"targetPosition":{"x":29437.358270505192,"y":30988.25631677195},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"b65434d1-738d-4df6-9b40-cb3674874299","savedPayload":{"position":{"x":29437.358270505192,"y":30988.25631677195},"targetPosition":{"x":29657.4414806703,"y":30941.476186337954},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e0588afd-77c9-41e2-9ba3-6ad4661b299e","savedPayload":{"position":{"x":29902.524690835406,"y":30910.696055903958},"targetPosition":{"x":30122.607901000512,"y":30863.915925469963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"P 1","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.6","project":"Superalgos","id":"da970219-d04e-4e81-b13f-11206c1ac444","savedPayload":{"position":{"x":29582.511411972617,"y":30443.971930270774},"targetPosition":{"x":29796.499128139025,"y":30513.500754005137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.previous.movingAverage <= 10","project":"Superalgos","id":"598ad9f2-1628-484a-8064-dc02a603a76a","savedPayload":{"position":{"x":27171.17284050179,"y":44277.38328629863},"targetPosition":{"x":27524.995399182353,"y":44352.26634811338},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8d0ee4a2-12bc-4397-88eb-0336f5727cc5","savedPayload":{"position":{"x":27524.995399182353,"y":44352.26634811338},"targetPosition":{"x":27878.996731799434,"y":44427.09291578291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7aec6373-83e5-49e9-a929-24793f0edf63","savedPayload":{"position":{"x":27878.996731799434,"y":44427.09291578291},"targetPosition":{"x":28242.849271172472,"y":44503.757766532915},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"3H Entering Oversold","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at03hs.percentageBandwidth.movingAverage <= 30","project":"Superalgos","id":"80b84359-b9be-4edb-959f-019c7db1a646","savedPayload":{"position":{"x":27589.78952965514,"y":43667.0371013618},"targetPosition":{"x":27858.75911868714,"y":43908.747866693826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b49b85e8-3e0f-4690-81aa-63bcc653bf61","savedPayload":{"position":{"x":27858.75911868714,"y":43908.747866693826},"targetPosition":{"x":28127.88465265492,"y":44150.628750116026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"ab06f5d1-3b5b-46bb-a11f-53bdfb934128","savedPayload":{"position":{"x":28276.691511032845,"y":43444.24416533789},"targetPosition":{"x":28202.34829695753,"y":43797.158454184915},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c7e3d21c-8c14-4803-baf0-993d5ea14115","savedPayload":{"position":{"x":28202.34829695753,"y":43797.158454184915},"targetPosition":{"x":28127.88465265492,"y":44150.628750116026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"66e824e8-bcb1-4d2f-b0c0-71d69c21c21d","savedPayload":{"position":{"x":28127.88465265492,"y":44150.628750116026},"targetPosition":{"x":28242.849271172472,"y":44503.757766532915},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"45d39511-6b07-4481-aae9-2db4bb322f55","savedPayload":{"position":{"x":29749.71899770503,"y":30293.41754384003},"targetPosition":{"x":29796.499128139025,"y":30513.500754005137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"af39b8d4-dff2-4b71-85b8-25f18c617aca","savedPayload":{"position":{"x":29796.499128139025,"y":30513.500754005137},"targetPosition":{"x":29947.05351456977,"y":30680.70833973755},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 2","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.7","project":"Superalgos","id":"6e57c877-ec29-43b0-9003-6a4bc491437b","savedPayload":{"position":{"x":29425.861531543174,"y":30393.07329870672},"targetPosition":{"x":29645.94474170828,"y":30346.293168272725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"4H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at04hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"70a8d00a-b4e5-4bf7-b778-5044173db6e0","savedPayload":{"position":{"x":29842.494712090225,"y":29527.538797068857},"targetPosition":{"x":29811.742467163425,"y":29693.463062720275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"02fdb9bc-e3fe-4133-9992-33c81371e710","savedPayload":{"position":{"x":29811.742467163425,"y":29693.463062720275},"targetPosition":{"x":29780.990222236625,"y":29859.387328371693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"74c4dbfb-5dee-4404-9eda-2f93ba6fc5b5","savedPayload":{"position":{"x":29780.990222236625,"y":29859.387328371693},"targetPosition":{"x":29750.237977309826,"y":30025.31159402311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"4H %B < 50","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at04hs.percentageBandwidth.movingAverage <= 50","project":"Superalgos","id":"0ecf3b89-510e-41e2-bb99-fca45f1ecade","savedPayload":{"position":{"x":30059.459340926707,"y":29629.344487518472},"targetPosition":{"x":29967.55150376792,"y":29770.870145859262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9031b3b-9d32-42c7-929d-7d83f7fa0fac","savedPayload":{"position":{"x":29967.55150376792,"y":29770.870145859262},"targetPosition":{"x":29875.643666609136,"y":29912.395804200052},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"6131bc6f-dacb-4247-a4fc-d18f8d204491","savedPayload":{"position":{"x":30176.35836852271,"y":29759.174010537958},"targetPosition":{"x":30026.001017565923,"y":29835.784907369005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f96a644-8447-4406-94c9-d466e0d4d7f9","savedPayload":{"position":{"x":30026.001017565923,"y":29835.784907369005},"targetPosition":{"x":29875.643666609136,"y":29912.395804200052},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9253d35a-1ff4-4889-aa4c-d2d9cc495879","savedPayload":{"position":{"x":29875.643666609136,"y":29912.395804200052},"targetPosition":{"x":29750.237977309826,"y":30025.31159402311},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ca7f0fa8-4f3b-4090-bc50-ff76e84401f2","savedPayload":{"position":{"x":29750.237977309826,"y":30025.31159402311},"targetPosition":{"x":29645.94474170828,"y":30346.293168272725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"cbc568dd-3da9-4818-8501-6c7f48b2a42e","savedPayload":{"position":{"x":29645.94474170828,"y":30346.293168272725},"targetPosition":{"x":29796.499128139025,"y":30513.500754005137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 3","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.8","project":"Superalgos","id":"b20cc025-3f64-4362-bc52-a43fa66de135","savedPayload":{"position":{"x":29275.30714511243,"y":30225.865712974308},"targetPosition":{"x":29495.390355277537,"y":30179.085582540312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"6H Previous %B < 15","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at06hs.percentageBandwidth.previous.movingAverage <= 15","project":"Superalgos","id":"ad489932-52d2-423a-bb47-db08d9934027","savedPayload":{"position":{"x":30081.982566703093,"y":29741.212795334824},"targetPosition":{"x":29925.861033258447,"y":30029.045817936934},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d0a8b6d2-862f-4dc8-894f-98a147328521","savedPayload":{"position":{"x":29925.861033258447,"y":30029.045817936934},"targetPosition":{"x":29769.67527949699,"y":30317.155355532508},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51dea0e4-a5b0-419e-9077-f5d60ad8e4cd","savedPayload":{"position":{"x":29769.67527949699,"y":30317.155355532508},"targetPosition":{"x":29606.13408476544,"y":30619.98028667826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"5H %B < 50","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at06hs.percentageBandwidth.movingAverage <= 50","project":"Superalgos","id":"10317b11-632c-4cbf-ad84-7ec0b75f999e","savedPayload":{"position":{"x":30429.577575658364,"y":30068.331484953793},"targetPosition":{"x":30175.548048088913,"y":30274.259859247137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8beb8b51-1353-4670-b392-b4e6c9c2cdf0","savedPayload":{"position":{"x":30175.548048088913,"y":30274.259859247137},"targetPosition":{"x":29920.95164174731,"y":30480.453049550153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"d87940c6-f532-4acd-96da-06e846214122","savedPayload":{"position":{"x":30571.65515480618,"y":30548.15562724395},"targetPosition":{"x":30246.597381910175,"y":30514.316845561003},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b2b584bd-42c3-4a54-94d1-afcc2e676afc","savedPayload":{"position":{"x":30246.597381910175,"y":30514.316845561003},"targetPosition":{"x":29920.95164174731,"y":30480.453049550153},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0d104bb9-af75-4f6f-97b6-9d1bbad410b3","savedPayload":{"position":{"x":29920.95164174731,"y":30480.453049550153},"targetPosition":{"x":29606.13408476544,"y":30619.98028667826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"74fa819d-43c6-44b7-8ec4-64bd97c2ce29","savedPayload":{"position":{"x":29599.68359087908,"y":29858.1040082907},"targetPosition":{"x":29495.390355277537,"y":30179.085582540312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"d909c920-b2a7-457f-96a4-1841a61b0428","savedPayload":{"position":{"x":29495.390355277537,"y":30179.085582540312},"targetPosition":{"x":29645.94474170828,"y":30346.293168272725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 4","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.85","project":"Superalgos","id":"72e1f768-6908-4402-8935-41705cb7c2e1","savedPayload":{"position":{"x":29124.752758681687,"y":30058.658127241895},"targetPosition":{"x":29344.835968846794,"y":30011.8779968079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B 0< 15 && 1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.previous.movingAverage <= 15 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 5","project":"Superalgos","id":"72c3f3e2-037a-4840-a2ac-5f682a578c14","savedPayload":{"position":{"x":29904.726860125706,"y":29343.176844799473},"targetPosition":{"x":29748.593866705738,"y":29630.97528344272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a3c4a2c7-bb79-4d9d-9a6f-bd56fc231211","savedPayload":{"position":{"x":29748.593866705738,"y":29630.97528344272},"targetPosition":{"x":29592.41263300685,"y":29918.983048129903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ea20d7db-4468-457c-b65f-a52744fb6fc5","savedPayload":{"position":{"x":29592.41263300685,"y":29918.983048129903},"targetPosition":{"x":29428.719324074442,"y":30221.69004647084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"8H %B < 40 && 1H Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at08hs.percentageBandwidth.movingAverage <= 40 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 3","project":"Superalgos","id":"6485a5b2-2959-4358-947e-98d0f3c88011","savedPayload":{"position":{"x":30251.99147291359,"y":29669.966622170956},"targetPosition":{"x":29997.960302769043,"y":29875.867095068304},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d8553226-ae92-4b87-ae86-5b53607d3bd3","savedPayload":{"position":{"x":29997.960302769043,"y":29875.867095068304},"targetPosition":{"x":29743.47404168342,"y":30082.03833708503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Previous Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.direction === \"Up\"","project":"Superalgos","id":"d1a82d5f-7ff4-4c23-9147-a13f5199f21f","savedPayload":{"position":{"x":30389.794818813538,"y":29979.74338693027},"targetPosition":{"x":30066.895546697615,"y":30030.878691008325},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c80b06ad-0f63-41c0-a485-0bc97313fd48","savedPayload":{"position":{"x":30066.895546697615,"y":30030.878691008325},"targetPosition":{"x":29743.47404168342,"y":30082.03833708503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5a234bc0-ff31-4650-878e-c21a11204d2a","savedPayload":{"position":{"x":29743.47404168342,"y":30082.03833708503},"targetPosition":{"x":29428.719324074442,"y":30221.69004647084},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"248f0567-8e65-41c6-9580-71229332c7bb","savedPayload":{"position":{"x":29449.129204448338,"y":29690.896422558286},"targetPosition":{"x":29344.835968846794,"y":30011.8779968079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"d52d95cd-0d77-468c-a7f1-497c2476fe33","savedPayload":{"position":{"x":29344.835968846794,"y":30011.8779968079},"targetPosition":{"x":29495.390355277537,"y":30179.085582540312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 5","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage * 0.9","project":"Superalgos","id":"a39ae165-abd6-4725-ac6a-4edbef7200e4","savedPayload":{"position":{"x":28974.198372250943,"y":29891.450541509483},"targetPosition":{"x":29194.28158241605,"y":29844.670411075487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Complex","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at12hs.percentageBandwidth.previous.movingAverage <= 15 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >= 15","project":"Superalgos","id":"0d7d916c-3334-4422-8998-28f78bcbaf78","savedPayload":{"position":{"x":29726.94240869815,"y":28944.840520656762},"targetPosition":{"x":29570.961871000105,"y":29232.457875860535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"60ecd582-0e23-4c8a-8077-7201d263cca2","savedPayload":{"position":{"x":29570.961871000105,"y":29232.457875860535},"targetPosition":{"x":29415.01546769645,"y":29520.15632128513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4d364cc4-cdb0-4fba-bc23-235dcb482a4e","savedPayload":{"position":{"x":29415.01546769645,"y":29520.15632128513},"targetPosition":{"x":29251.3198725836,"y":29823.25616301414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Complex","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 70 || chart.at12hs.percentageBandwidth.movingAverage <= 40 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"ddebbd89-cba4-4d06-8fe9-a13fcbd4ba18","savedPayload":{"position":{"x":30074.92744451414,"y":29271.426727796},"targetPosition":{"x":29820.434653081636,"y":29477.547922565675},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2bf45ba3-ea96-40d1-a8eb-1f5b58eb97e3","savedPayload":{"position":{"x":29820.434653081636,"y":29477.547922565675},"targetPosition":{"x":29565.93347114677,"y":29683.782436348745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Prev Prev Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"877fda2b-35d0-45b5-9457-3f791f5ceeb0","savedPayload":{"position":{"x":30212.773823037573,"y":29581.301454504868},"targetPosition":{"x":29889.404632989263,"y":29632.643412417423},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"658ac695-5997-4780-9d05-8ca8cdd9cd6a","savedPayload":{"position":{"x":29889.404632989263,"y":29632.643412417423},"targetPosition":{"x":29565.93347114677,"y":29683.782436348745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"11b94bab-c0d6-4b49-95c2-4a65f5794288","savedPayload":{"position":{"x":29565.93347114677,"y":29683.782436348745},"targetPosition":{"x":29251.3198725836,"y":29823.25616301414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6b6a705b-b008-4784-8e06-a7ff7138725b","savedPayload":{"position":{"x":29298.574818017594,"y":29523.688836825873},"targetPosition":{"x":29194.28158241605,"y":29844.670411075487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"46eafddb-7478-432f-818f-0c458b59171b","savedPayload":{"position":{"x":29194.28158241605,"y":29844.670411075487},"targetPosition":{"x":29344.835968846794,"y":30011.8779968079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 6","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation * 1.75","project":"Superalgos","id":"29d4e7bb-f154-44c4-825c-24719949e808","savedPayload":{"position":{"x":28823.6439858202,"y":29724.24295577707},"targetPosition":{"x":29043.727195985306,"y":29677.462825343075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 30 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"d5ac2bb6-e328-40f7-bae6-26c46b85f9ea","savedPayload":{"position":{"x":29431.07154444797,"y":28491.735651527983},"targetPosition":{"x":29313.99033091612,"y":28797.279875552413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c57b02c1-e38e-4c24-8ca0-5d5790f8c475","savedPayload":{"position":{"x":29313.99033091612,"y":28797.279875552413},"targetPosition":{"x":29196.791951428673,"y":29103.35991517422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbfd82c7-c57c-4d1e-9a95-b05ad5765eca","savedPayload":{"position":{"x":29196.791951428673,"y":29103.35991517422},"targetPosition":{"x":29074.023805063178,"y":29424.874917652014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 60 || chart.at12hs.percentageBandwidth.movingAverage <= 30 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"7af7ef05-50d0-4db9-ae3c-8aed6a9842cd","savedPayload":{"position":{"x":29897.104690155033,"y":28873.034975694154},"targetPosition":{"x":29643.060990043185,"y":29078.969739920467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b79e13b-e44f-41bb-9450-47881760fb81","savedPayload":{"position":{"x":29643.060990043185,"y":29078.969739920467},"targetPosition":{"x":29388.697562647645,"y":29285.152352690486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Prev Prev Up","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"8c6bbc80-2d99-434a-ad29-12505c118c41","savedPayload":{"position":{"x":30034.96089243337,"y":29182.893898435475},"targetPosition":{"x":29712.060130339258,"y":29234.052759577564},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ce4d9250-7aee-432f-b0f7-a25a0d3739d1","savedPayload":{"position":{"x":29712.060130339258,"y":29234.052759577564},"targetPosition":{"x":29388.697562647645,"y":29285.152352690486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"defc1a9e-ccaa-424b-be17-0efc30e2c0a6","savedPayload":{"position":{"x":29388.697562647645,"y":29285.152352690486},"targetPosition":{"x":29074.023805063178,"y":29424.874917652014},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9fb1dbd3-fed7-424c-add0-f6b7481dab05","savedPayload":{"position":{"x":29148.02043158685,"y":29356.48125109346},"targetPosition":{"x":29043.727195985306,"y":29677.462825343075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"8c0276f0-0551-4ce2-9287-0c9bfe22085a","savedPayload":{"position":{"x":29043.727195985306,"y":29677.462825343075},"targetPosition":{"x":29194.28158241605,"y":29844.670411075487},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation * 1.25","project":"Superalgos","id":"4e6d15ed-8c85-43cd-90e3-a73eeed22389","savedPayload":{"position":{"x":28673.089599389456,"y":29557.035370044658},"targetPosition":{"x":28893.172809554562,"y":29510.255239610662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.percentageBandwidth.previous.movingAverage <= 30 && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=10","project":"Superalgos","id":"c29560f8-3916-4e7b-bd05-ec4c5c70aaad","savedPayload":{"position":{"x":28714.32729387833,"y":28383.369305858643},"targetPosition":{"x":28565.803056171444,"y":28657.536772239215},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"29cd95e8-e310-4279-8fc6-a886eaeb939d","savedPayload":{"position":{"x":28565.803056171444,"y":28657.536772239215},"targetPosition":{"x":28417.10225411398,"y":28932.22848708009},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7849fb9b-2762-47fa-bc35-690f40049780","savedPayload":{"position":{"x":28417.10225411398,"y":28932.22848708009},"targetPosition":{"x":28265.339563036276,"y":29213.780830079442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"(chart.at24hs.percentageBandwidth.movingAverage <= 50 || chart.at12hs.percentageBandwidth.movingAverage <= 17.5 ) && chart.at01hs.bollingerSubChannel.slope === \"Extreme\" && chart.at01hs.bollingerSubChannel.period >=5","project":"Superalgos","id":"f15eb65a-7dfa-4d09-b624-3a3d3e2b6420","savedPayload":{"position":{"x":29089.70761402402,"y":28758.12289930749},"targetPosition":{"x":28823.933816824774,"y":28920.944121066786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b4307590-5fe4-4997-a25c-3221fcaea5ea","savedPayload":{"position":{"x":28823.933816824774,"y":28920.944121066786},"targetPosition":{"x":28558.008704034855,"y":29084.05593025312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at24hs.bollingerChannel.previous.previous.direction === \"Up\"","project":"Superalgos","id":"98b65fea-6bb0-4a9a-8d31-3997e56c6c63","savedPayload":{"position":{"x":29174.180017029303,"y":28986.831302276583},"targetPosition":{"x":28866.155217157928,"y":29035.44132161218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7a79c0f2-514b-441a-ae08-5e1c1d815095","savedPayload":{"position":{"x":28866.155217157928,"y":29035.44132161218},"targetPosition":{"x":28558.008704034855,"y":29084.05593025312},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e2165070-d0eb-428c-a168-dfacb74f0844","savedPayload":{"position":{"x":28558.008704034855,"y":29084.05593025312},"targetPosition":{"x":28265.339563036276,"y":29213.780830079442},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5ea9ce09-4324-4961-a5c0-9018bd9e8d36","savedPayload":{"position":{"x":28997.466045156107,"y":29189.27366536105},"targetPosition":{"x":28893.172809554562,"y":29510.255239610662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"64a62511-14f3-45ad-897b-543abba98920","savedPayload":{"position":{"x":28893.172809554562,"y":29510.255239610662},"targetPosition":{"x":29043.727195985306,"y":29677.462825343075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"P 8","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"96ea6099-ad3a-4240-95d9-1486bb21c131","savedPayload":{"position":{"x":28592.064036693075,"y":29175.840068145837},"targetPosition":{"x":28742.61842312382,"y":29343.04765387825},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"cd3e2a56-39ae-4a5e-8190-f2b65ba6f8e2","savedPayload":{"position":{"x":28742.61842312382,"y":29343.04765387825},"targetPosition":{"x":28893.172809554562,"y":29510.255239610662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1d7d8a99-1d8d-41e4-9544-61ae4667aa1a","savedPayload":{"position":{"x":29972.05351456977,"y":30696.70833973755},"targetPosition":{"x":30122.607901000512,"y":30863.915925469963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"fa22b9a6-5479-4409-b77a-b9a20b365f95","savedPayload":{"position":{"x":30415.266378444787,"y":30910.268474626206},"targetPosition":{"x":30700.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"00a8423d-4604-4d28-aa43-0fe8410c1a4e","savedPayload":{"position":{"x":29607.997388916414,"y":30578.43798924835},"targetPosition":{"x":29831.764815374274,"y":30554.919085013127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"62dec497-f190-41dc-b7a6-430ffb78fa3c","savedPayload":{"position":{"x":29831.764815374274,"y":30554.919085013127},"targetPosition":{"x":30055.532241832134,"y":30531.400180777906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value - tradingEngine.current.strategyOpenStage.stageQuotedAsset.feesPaid.value","project":"Superalgos","id":"8bbc979f-5425-49af-807b-38944be9b312","savedPayload":{"position":{"x":29791.02887830052,"y":30167.34253330918},"targetPosition":{"x":29923.280560066327,"y":30349.371357043543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e4a38608-0a48-4e4c-b291-36ee1a1b85c5","savedPayload":{"position":{"x":29923.280560066327,"y":30349.371357043543},"targetPosition":{"x":30055.532241832134,"y":30531.400180777906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7421d18f-87c9-4790-8e17-16642ba1efac","savedPayload":{"position":{"x":30080.532241832134,"y":30547.400180777906},"targetPosition":{"x":30286.079969801718,"y":30638.915925469963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"f9b6428b-706c-4762-b526-e65ce3a9eba1","savedPayload":{"position":{"x":29561.031882569547,"y":41448.99033134701},"targetPosition":{"x":29598.988239018396,"y":41807.96505657351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7ce28ab2-846f-44e3-8d42-66e702d7cf6f","savedPayload":{"position":{"x":29598.988239018396,"y":41807.96505657351},"targetPosition":{"x":29637.528604467505,"y":42167.27857339248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"17c82be6-9c06-467f-8e89-bc76d7f3b0d8","savedPayload":{"position":{"x":29637.528604467505,"y":42167.27857339248},"targetPosition":{"x":29676.029624600913,"y":42536.65383108058},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"acb7cd15-47a6-4b89-a991-02d53cbd5d88","savedPayload":{"position":{"x":30167.004352860833,"y":29727.846219638523},"targetPosition":{"x":30190.523257096054,"y":29951.613646096383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4f521b37-053e-45a1-9cc0-a2b54430a6f1","savedPayload":{"position":{"x":30190.523257096054,"y":29951.613646096383},"targetPosition":{"x":30214.042161331276,"y":30175.381072554243},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"7bacad1e-a99b-4dee-ba33-4857babf5f60","savedPayload":{"position":{"x":30214.042161331276,"y":30175.381072554243},"targetPosition":{"x":30237.561065566497,"y":30399.148499012103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fb3a68a-bccc-4f15-a093-81d7230e3534","savedPayload":{"position":{"x":30262.561065566497,"y":30415.148499012103},"targetPosition":{"x":30286.079969801718,"y":30638.915925469963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"b0b4389a-74f6-4807-af15-1b8c43c247cb","savedPayload":{"position":{"x":30524.24775764559,"y":30760.268474626206},"targetPosition":{"x":30700.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c6dfb2a4-3e3d-4a44-a9da-00251dae88a7","savedPayload":{"position":{"x":30700.583333333332,"y":31002.97357293869},"targetPosition":{"x":31000.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"975c2fc3-a8f5-43e9-900f-4a4f2430d128","savedPayload":{"position":{"x":31000.583333333332,"y":31002.97357293869},"targetPosition":{"x":31000.583333333332,"y":31002.97357293869},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"w"}}},{"type":"Trading System","name":"BB Top Bounce","config":"{ \n\"codeName\": \"\"\n}","project":"Superalgos","tradingStrategies":[{"type":"Trading Strategy","name":"S1 - 3H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"99948a6e-e866-4339-86ba-eac367226312","savedPayload":{"position":{"x":36232.34461109166,"y":30022.443431659598},"targetPosition":{"x":36524.05558721097,"y":30092.47704081637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0534c68-ab47-4370-b1fd-b3be4c1c262f","savedPayload":{"position":{"x":36524.05558721097,"y":30092.47704081637},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"d3bd1690-1f94-484b-ac3c-7be2c7be85ed","savedPayload":{"position":{"x":36330.3563667053,"y":29809.83949859766},"targetPosition":{"x":36573.06146501779,"y":29986.175074285402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2d7334d-cf52-44d9-a20e-5be201ca6799","savedPayload":{"position":{"x":36573.06146501779,"y":29986.175074285402},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"d1fa707f-eb75-4b1c-8117-688b9b94e539","savedPayload":{"position":{"x":36502.2674245007,"y":29650.92655136069},"targetPosition":{"x":36659.01699391549,"y":29906.718600666918},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fb71bcfb-2a40-4e8a-b8e8-b492128350a0","savedPayload":{"position":{"x":36659.01699391549,"y":29906.718600666918},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"8c8c5128-b88b-44a5-8e36-d5c61127404f","savedPayload":{"position":{"x":36721.90588430614,"y":29569.897645616064},"targetPosition":{"x":36768.83622381821,"y":29866.204147794604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22246178-a8f9-4ec8-b55b-36cf7a24fbff","savedPayload":{"position":{"x":36768.83622381821,"y":29866.204147794604},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Medium, Steep or Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Medium\" || chart.at03hs.bollingerSubChannel.slope === \"Steep\" || chart.at03hs.bollingerSubChannel.slope === \"Extreme\" ","project":"Superalgos","id":"bf8df41c-c62f-4cd6-840e-1dd538359c3b","savedPayload":{"position":{"x":36955.83378164382,"y":29579.08869773454},"targetPosition":{"x":36885.80017248705,"y":29870.799673853842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9dba774d-1afa-40dd-b5ec-8f4029824473","savedPayload":{"position":{"x":36885.80017248705,"y":29870.799673853842},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"c4428437-7308-46f3-884e-22d2aac8d1a0","savedPayload":{"position":{"x":37168.43771470576,"y":29677.10045334818},"targetPosition":{"x":36992.10213901802,"y":29919.805551660662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7766453d-73ca-46f7-a39c-00f4f11af05e","savedPayload":{"position":{"x":36992.10213901802,"y":29919.805551660662},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"eac9b2d4-4364-4116-9d99-e92b8bbce5e7","savedPayload":{"position":{"x":37327.35066194273,"y":29849.011511143577},"targetPosition":{"x":37071.5586126365,"y":30005.76108055836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40cb1853-f93e-4023-8d45-708376281bde","savedPayload":{"position":{"x":37071.5586126365,"y":30005.76108055836},"targetPosition":{"x":36815.766563330275,"y":30162.510649973145},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d558598-60b5-4104-9a84-1773b125c509","savedPayload":{"position":{"x":36815.766563330275,"y":30162.510649973145},"targetPosition":{"x":36862.69690284234,"y":30458.817152151685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"3afd4ef5-2175-48fa-844f-e4e4ed775b26","savedPayload":{"position":{"x":36862.69690284234,"y":30458.817152151685},"targetPosition":{"x":36909.62724235441,"y":30755.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"0fb11814-5ba2-4c23-86b0-e6f8c01363e6","savedPayload":{"position":{"x":37262.29839372989,"y":30269.713457705253},"targetPosition":{"x":37174.13060588602,"y":30391.066006861496},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"32415e55-51cb-44cf-a0d9-9de73b946da8","savedPayload":{"position":{"x":37174.13060588602,"y":30391.066006861496},"targetPosition":{"x":37085.96281804215,"y":30512.41855601774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"317dd29a-db32-4f10-bee0-325b7a7c816c","savedPayload":{"position":{"x":37085.96281804215,"y":30512.41855601774},"targetPosition":{"x":36997.79503019828,"y":30633.771105173983},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"547d578f-4568-4b1f-965d-1d598b7b67bb","savedPayload":{"position":{"x":36997.79503019828,"y":30633.771105173983},"targetPosition":{"x":36909.62724235441,"y":30755.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"903651ac-50d3-44ea-aae2-0b6bbe43b989","savedPayload":{"position":{"x":37642.30746502504,"y":30077.84102306748},"targetPosition":{"x":37572.27385586827,"y":30369.551999186784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4c4c6084-bebe-46ce-a12f-68924568c81d","savedPayload":{"position":{"x":37572.27385586827,"y":30369.551999186784},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"b16e3f56-5a3f-4af9-a9d1-ff3bbf9ca0b8","savedPayload":{"position":{"x":37854.91139808698,"y":30175.85277868112},"targetPosition":{"x":37678.57582239924,"y":30418.557876993604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c4e1f247-db57-4488-81e9-c7602562b8f3","savedPayload":{"position":{"x":37678.57582239924,"y":30418.557876993604},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"34452811-c161-4b33-8335-bc996a8638ad","savedPayload":{"position":{"x":38013.82434532395,"y":30347.76383647652},"targetPosition":{"x":37758.03229601772,"y":30504.513405891303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"db35b110-1991-4e3d-a1bd-04b0d1bad669","savedPayload":{"position":{"x":37758.03229601772,"y":30504.513405891303},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"8fcf0aed-cd6b-4df9-8ec4-4511fcde66d8","savedPayload":{"position":{"x":38094.85325106858,"y":30567.402296281947},"targetPosition":{"x":37798.54674889004,"y":30614.332635794017},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48bd56ea-0d5a-404d-a887-061493bebbcf","savedPayload":{"position":{"x":37798.54674889004,"y":30614.332635794017},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Medium, Steep or Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Medium\" || chart.at03hs.bollingerSubChannel.slope === \"Steep\" || chart.at03hs.bollingerSubChannel.slope === \"Extreme\" ","project":"Superalgos","id":"40b36ec9-ebf1-43fe-8003-f0d130b7cb36","savedPayload":{"position":{"x":38085.66219895011,"y":30801.330193619633},"targetPosition":{"x":37793.9512228308,"y":30731.29658446286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c90a754-52bd-47cf-a3b5-95ad037bbb62","savedPayload":{"position":{"x":37793.9512228308,"y":30731.29658446286},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"3f28257c-cc33-4c59-b40b-85bc88821f96","savedPayload":{"position":{"x":37987.65044333647,"y":31013.93412668157},"targetPosition":{"x":37744.94534502398,"y":30837.59855099383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fc2fb509-2854-4359-aa1e-b32a2174bd35","savedPayload":{"position":{"x":37744.94534502398,"y":30837.59855099383},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"5226a3d7-c8f8-41bd-9b45-f6238576628f","savedPayload":{"position":{"x":37815.73938554107,"y":31172.84707391854},"targetPosition":{"x":37658.98981612628,"y":30917.055024612313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b38876e-bcad-4cec-90e2-c2e358723d29","savedPayload":{"position":{"x":37658.98981612628,"y":30917.055024612313},"targetPosition":{"x":37502.240246711495,"y":30661.262975306086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"46e2ecf6-82ae-435d-a3a0-d5e2903404fd","savedPayload":{"position":{"x":37502.240246711495,"y":30661.262975306086},"targetPosition":{"x":37205.93374453295,"y":30708.193314818156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"93418d2a-3047-4f80-aa59-0c6fdb35ad43","savedPayload":{"position":{"x":37205.93374453295,"y":30708.193314818156},"targetPosition":{"x":36909.62724235441,"y":30755.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"1055a2cc-e93a-4dd8-a992-f56553527ddd","savedPayload":{"position":{"x":36909.62724235441,"y":30755.123654330226},"targetPosition":{"x":36733.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"e0c6286e-4947-427a-aea3-a793fb1acf75","savedPayload":{"position":{"x":30660.074262288428,"y":26955.101379950684},"targetPosition":{"x":30589.672153528496,"y":27285.81247617225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fff26070-c80f-4e78-bb0f-71e16d943698","savedPayload":{"position":{"x":30589.672153528496,"y":27285.81247617225},"targetPosition":{"x":30503.801197896137,"y":27686.654444471693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"f2dd66ad-27a6-4859-aeb9-bd7316555b99","savedPayload":{"position":{"x":31214.005524997876,"y":27456.12722250138},"targetPosition":{"x":30893.255042587676,"y":27560.238393491753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b5e86b74-5db2-4019-85c6-ea397d675f50","savedPayload":{"position":{"x":30893.255042587676,"y":27560.238393491753},"targetPosition":{"x":30503.801197896137,"y":27686.654444471693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f7416bc8-8652-4670-965b-9b1f1f3da0ad","savedPayload":{"position":{"x":37100.97821250904,"y":30329.651930508615},"targetPosition":{"x":37000.608621555206,"y":30441.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"0d3863ca-6912-4fea-8b35-0889324ea7f5","savedPayload":{"position":{"x":32585.518100478395,"y":28426.328643001223},"targetPosition":{"x":32255.774890456778,"y":28356.378726730196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5b5e9ad8-778b-42ae-aa7f-c303e129df7f","savedPayload":{"position":{"x":32255.774890456778,"y":28356.378726730196},"targetPosition":{"x":31926.252265504947,"y":28286.48842673435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1fbcc4bd-145e-43ac-8e1a-721435920b4a","savedPayload":{"position":{"x":31926.252265504947,"y":28286.48842673435},"targetPosition":{"x":31596.602925623316,"y":28216.586773394847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8548a589-0711-4acc-aba9-6a77970c7b8f","savedPayload":{"position":{"x":31596.602925623316,"y":28216.586773394847},"targetPosition":{"x":31267.374075182648,"y":28146.799860983512},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"70c7f73b-a1a6-467c-a0eb-a284133ac599","savedPayload":{"position":{"x":31267.374075182648,"y":28146.799860983512},"targetPosition":{"x":30937.4926764588,"y":28076.9136479518},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"09d1d3b2-8917-4792-b2a4-4902156c05b2","savedPayload":{"position":{"x":30937.4926764588,"y":28076.9136479518},"targetPosition":{"x":30607.58702948344,"y":28007.064494229548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"fe61959d-43e7-4440-9932-9a09846e9b1b","savedPayload":{"position":{"x":37294.05290177535,"y":30503.497161575553},"targetPosition":{"x":37000.608621555206,"y":30441.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"e35699bc-1fe9-4cdc-b029-6361f0ce8592","savedPayload":{"position":{"x":37018.60862155521,"y":30905.123654330226},"targetPosition":{"x":36733.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Standard Run","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"853852d1-d2fa-4e32-a891-e98ca52a556e","savedPayload":{"position":{"x":37828.440629638724,"y":30765.047654556878},"targetPosition":{"x":37605.4971819955,"y":30965.786836464536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"3bdebe73-3546-43f3-b644-73ec62086c66","savedPayload":{"position":{"x":31708.4115705378,"y":28195.51920297809},"targetPosition":{"x":31547.7961936945,"y":28247.588420751177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"36615e86-2c8e-4182-ab3e-5c263c44fcb1","savedPayload":{"position":{"x":31547.7961936945,"y":28247.588420751177},"targetPosition":{"x":31380.11140496785,"y":28301.94906628679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6aae47da-70b4-4fd3-b2da-65a1d645b915","savedPayload":{"position":{"x":31380.11140496785,"y":28301.94906628679},"targetPosition":{"x":31173.31202825888,"y":28369.033314611406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"18261801-3d1b-4dfe-872c-019fff59db4d","savedPayload":{"position":{"x":37890.81413688405,"y":31058.49193477702},"targetPosition":{"x":37605.4971819955,"y":30965.786836464536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"fdeb890a-e7d8-4ef6-ab49-3a88aee6e82c","savedPayload":{"position":{"x":37605.4971819955,"y":30965.786836464536},"targetPosition":{"x":37312.05290177536,"y":31028.160343709864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"0e9e87f6-4636-4f1f-8091-d1c3090ee345","savedPayload":{"position":{"x":38192.38574243579,"y":30841.03982197388},"targetPosition":{"x":37898.94146221565,"y":30903.41332921921},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"0464ed08-0432-4da6-b407-fbf1fbc65bd9","savedPayload":{"position":{"x":37898.94146221565,"y":30903.41332921921},"targetPosition":{"x":37605.4971819955,"y":30965.786836464536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a9042fd2-0f05-4208-91b7-81e00b6493fb","savedPayload":{"position":{"x":37312.05290177536,"y":31028.160343709864},"targetPosition":{"x":37018.60862155521,"y":31090.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"Initial","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"f191391f-f798-4819-b46b-8ae9538ff71f","savedPayload":{"position":{"x":37713.531265590675,"y":31474.0472389963},"targetPosition":{"x":37420.08698537053,"y":31536.420746241627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"65b73feb-09e0-491d-99fd-30f331acac97","savedPayload":{"position":{"x":37359.42380323621,"y":32693.943216459},"targetPosition":{"x":37297.050295990884,"y":32400.49893623886},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fa12e6f8-f9d6-4eb7-9e3b-1e0f17581548","savedPayload":{"position":{"x":37297.050295990884,"y":32400.49893623886},"targetPosition":{"x":37234.67678874556,"y":32107.054656018718},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"2eff0ccd-bf54-4456-aff5-9f46cf1469ff","savedPayload":{"position":{"x":36788.789893459114,"y":32508.533019834034},"targetPosition":{"x":37011.733341102336,"y":32307.793837926376},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a4af8e92-a505-48fd-8080-8a715cd856dc","savedPayload":{"position":{"x":37011.733341102336,"y":32307.793837926376},"targetPosition":{"x":37234.67678874556,"y":32107.054656018718},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ef07d7e4-53c0-4746-a1a2-4b4856cba9df","savedPayload":{"position":{"x":37234.67678874556,"y":32107.054656018718},"targetPosition":{"x":37327.38188705804,"y":31821.737701130172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"2484f7be-38df-4139-94b4-d753e6d50eed","savedPayload":{"position":{"x":37327.38188705804,"y":31821.737701130172},"targetPosition":{"x":37420.08698537053,"y":31536.420746241627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"977b23fa-f70b-4ae6-8b8b-62ca894ca11c","savedPayload":{"position":{"x":37420.08698537053,"y":31536.420746241627},"targetPosition":{"x":37219.34780346287,"y":31313.47729859841},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < tradingEngine.current.position.entryTargetRate.value * 0.97) {chart.at01hs.base7EMA.ema7 * 0.97} else {tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"aadae3ad-5cf1-4417-baad-c6e8b0ab8f31","savedPayload":{"position":{"x":37843.76961492141,"y":31558.625011977187},"targetPosition":{"x":37620.82616727819,"y":31759.364193884845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"bfc7fa92-c54c-43e7-8a6d-f89572d1fee2","savedPayload":{"position":{"x":32848.11801781877,"y":29433.190048673023},"targetPosition":{"x":32489.13901744403,"y":29172.741205930462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5ea229bf-a68c-40f9-a6ac-8bae8171ecda","savedPayload":{"position":{"x":32489.13901744403,"y":29172.741205930462},"targetPosition":{"x":32130.09432522794,"y":28912.57394763465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"585c2f06-93d7-403f-ab70-0aab9c936f72","savedPayload":{"position":{"x":32130.09432522794,"y":28912.57394763465},"targetPosition":{"x":31770.837286568618,"y":28652.27817579852},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"cddeb772-d0f7-4ba8-b303-b623746f3f6e","savedPayload":{"position":{"x":37821.56534918585,"y":31982.307641528063},"targetPosition":{"x":37620.82616727819,"y":31759.364193884845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"4862beb3-990c-43ba-a21b-93ce1227d060","savedPayload":{"position":{"x":30356.803144975464,"y":29977.027683667045},"targetPosition":{"x":30287.001926189878,"y":29647.09064034791},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dc6ade59-03df-4aa5-a892-5e225a38cb35","savedPayload":{"position":{"x":30287.001926189878,"y":29647.09064034791},"targetPosition":{"x":30216.717927469545,"y":29316.650521555188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"54428b89-eb5f-4844-9fec-b049f074b3c8","savedPayload":{"position":{"x":30008.53939563968,"y":29958.624221548424},"targetPosition":{"x":30112.642715874397,"y":29637.862210602863},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"81b0626e-e4c7-40dc-ae8d-ec5603067461","savedPayload":{"position":{"x":30112.642715874397,"y":29637.862210602863},"targetPosition":{"x":30216.717927469545,"y":29316.650521555188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"05867691-257f-4795-b70f-180ef26713fd","savedPayload":{"position":{"x":29715.617432026134,"y":29769.06720866268},"targetPosition":{"x":29966.14502769772,"y":29543.011788486867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2d354bdf-7142-4921-aec4-60a295569584","savedPayload":{"position":{"x":29966.14502769772,"y":29543.011788486867},"targetPosition":{"x":30216.717927469545,"y":29316.650521555188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"74adc18a-fcb8-47ad-a447-1595f16cc7f6","savedPayload":{"position":{"x":29557.146819038135,"y":29458.239281448587},"targetPosition":{"x":29886.947078772697,"y":29387.47681273229},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8c760094-3830-48d3-a97c-a9dee27f3c7e","savedPayload":{"position":{"x":29886.947078772697,"y":29387.47681273229},"targetPosition":{"x":30216.717927469545,"y":29316.650521555188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"45a3f428-25a5-4cf2-a13f-08bf3bbc4972","savedPayload":{"position":{"x":29575.49984177845,"y":29110.12204522665},"targetPosition":{"x":29896.113230670315,"y":29213.246549897754},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6106746d-8995-425e-8dd9-009894a5dd07","savedPayload":{"position":{"x":29896.113230670315,"y":29213.246549897754},"targetPosition":{"x":30216.717927469545,"y":29316.650521555188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"61a873ab-dc8f-4023-93cd-a861bd965858","savedPayload":{"position":{"x":30216.717927469545,"y":29316.650521555188},"targetPosition":{"x":30478.081833129254,"y":29080.62985154736},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"aa98a93e-c928-4900-854a-97b3750182d2","savedPayload":{"position":{"x":37397.88271963497,"y":31960.103375792503},"targetPosition":{"x":37620.82616727819,"y":31759.364193884845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"83f85765-e13b-406a-bd56-7fd820eebc16"}}}],"announcements":[],"id":"e3b43a25-cbb0-4ebc-ac2f-148a56d7d934","savedPayload":{"position":{"x":37620.82616727819,"y":31759.364193884845},"targetPosition":{"x":37420.08698537053,"y":31536.420746241627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < tradingEngine.current.position.entryTargetRate.value * 0.97) {chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else {tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"e603a735-7a74-4654-b0bb-50bee2d1e307","savedPayload":{"position":{"x":38044.50879682907,"y":31781.568459620405},"targetPosition":{"x":37821.56534918585,"y":31982.307641528063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"12b3cadf-b8f9-4f43-8799-40c1509f8d07","savedPayload":{"position":{"x":33276.36316941772,"y":28857.469367335805},"targetPosition":{"x":32871.312357186885,"y":29037.561341070905},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d45aa91c-a153-4311-8403-8e4492ffcc95","savedPayload":{"position":{"x":32871.312357186885,"y":29037.561341070905},"targetPosition":{"x":32466.11502117118,"y":29217.827200149855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"47191a8e-485b-4f11-be05-c1b6253da95e","savedPayload":{"position":{"x":33348.23434863162,"y":29310.338070119637},"targetPosition":{"x":32907.287094696025,"y":29264.074150155684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a6eff46-6a7b-4a29-81a4-93a751a056bf","savedPayload":{"position":{"x":32907.287094696025,"y":29264.074150155684},"targetPosition":{"x":32466.11502117118,"y":29217.827200149855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"e9cfe84c-e144-4e95-88ce-8bfdffd42f89","savedPayload":{"position":{"x":33183.78961291561,"y":29738.914073585504},"targetPosition":{"x":32825.05225077626,"y":29478.410978732412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9dfa9604-bc08-4df3-980d-2f8b06185031","savedPayload":{"position":{"x":32825.05225077626,"y":29478.410978732412},"targetPosition":{"x":32466.11502117118,"y":29217.827200149855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"8c332bfe-ab0c-4905-9440-86091b7040b1","savedPayload":{"position":{"x":32827.16675847116,"y":30027.801407002575},"targetPosition":{"x":32646.678138329895,"y":29622.87742858933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e358399e-001d-4d07-83e4-2bf9d65ed1bd","savedPayload":{"position":{"x":32646.678138329895,"y":29622.87742858933},"targetPosition":{"x":32466.11502117118,"y":29217.827200149855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div previous ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"51ec782d-f54f-46b5-b45a-9db5cf7a380e","savedPayload":{"position":{"x":32374.55744255693,"y":30099.522740027394},"targetPosition":{"x":32420.21871188943,"y":29658.7441522492},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c64c6aff-2525-4e58-9e27-ac7a8b3dc8cb","savedPayload":{"position":{"x":32420.21871188943,"y":29658.7441522492},"targetPosition":{"x":32466.11502117118,"y":29217.827200149855},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08f82342-86ce-4222-b954-968397dd2d33","savedPayload":{"position":{"x":32466.11502117118,"y":29217.827200149855},"targetPosition":{"x":32107.10431858636,"y":28957.278677572656},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"170cad22-eef5-48c3-b5d9-fae484dab493","savedPayload":{"position":{"x":38022.304531093505,"y":32205.25108917128},"targetPosition":{"x":37821.56534918585,"y":31982.307641528063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"83f85765-e13b-406a-bd56-7fd820eebc16"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"0320d330-7d8e-4577-8ea3-debcdf5c4971","savedPayload":{"position":{"x":30438.59607486645,"y":30472.179220273865},"targetPosition":{"x":30542.698894395682,"y":30151.358078490208},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6611a627-dfaf-4248-8aaa-e27fb7ac7141","savedPayload":{"position":{"x":30542.698894395682,"y":30151.358078490208},"targetPosition":{"x":30646.3093096187,"y":29830.136785819006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"51f5f720-c0df-4209-a32f-80f67688004d","savedPayload":{"position":{"x":29987.259212930716,"y":29969.575628396386},"targetPosition":{"x":30316.465906869023,"y":29900.058060312607},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"62ebc71f-7dab-4090-9f0e-c557cbbf5045","savedPayload":{"position":{"x":30316.465906869023,"y":29900.058060312607},"targetPosition":{"x":30646.3093096187,"y":29830.136785819006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9cfa9122-1b64-4a37-877f-1c722493562a","savedPayload":{"position":{"x":30646.3093096187,"y":29830.136785819006},"targetPosition":{"x":30907.50581187509,"y":29593.980731702766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"73f3e391-cceb-4d27-932f-7b3c76d63b24","savedPayload":{"position":{"x":37598.621901542625,"y":32183.04682343572},"targetPosition":{"x":37821.56534918585,"y":31982.307641528063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"e3b43a25-cbb0-4ebc-ac2f-148a56d7d934"}}}],"announcements":[],"id":"913c2adb-a405-40e1-b661-300ec59c4ea0","savedPayload":{"position":{"x":37821.56534918585,"y":31982.307641528063},"targetPosition":{"x":37620.82616727819,"y":31759.364193884845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < tradingEngine.current.position.entryTargetRate.value * 0.97) {chart.at01hs.base7EMA.ema7 * 0.8} else {tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"be65b94d-3942-43c3-96aa-354447d5d591","savedPayload":{"position":{"x":31163.038080304315,"y":28763.09242213212},"targetPosition":{"x":30728.598662820616,"y":28855.087452087282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"fb87ce68-53e9-4553-a0d4-c996920c9b7a","savedPayload":{"position":{"x":32723.176693428482,"y":30781.150517978276},"targetPosition":{"x":32364.583361990008,"y":30520.611601156663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1c9f9e96-a31d-42dc-a72f-ee8c25057426","savedPayload":{"position":{"x":32364.583361990008,"y":30520.611601156663},"targetPosition":{"x":32005.8214763321,"y":30259.98272123045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"2d8cbbda-0c6c-4f48-ab1a-4f3ee6cb46d1","savedPayload":{"position":{"x":31904.79503351319,"y":31120.06777220819},"targetPosition":{"x":31950.924122443583,"y":30679.179072055602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e4719fbb-2730-46bf-9593-75e9544d860c","savedPayload":{"position":{"x":31950.924122443583,"y":30679.179072055602},"targetPosition":{"x":32005.8214763321,"y":30259.98272123045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"60819e62-c36a-4cf6-86ea-09aa1046f1b7","savedPayload":{"position":{"x":32005.8214763321,"y":30259.98272123045},"targetPosition":{"x":31825.213568535517,"y":29854.67915149992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"297f0537-a281-46ab-89a4-9aab36495673","savedPayload":{"position":{"x":30819.53503532434,"y":29283.148889042415},"targetPosition":{"x":30728.598662820616,"y":28855.087452087282},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"e3b43a25-cbb0-4ebc-ac2f-148a56d7d934"}}}],"announcements":[],"id":"83f85765-e13b-406a-bd56-7fd820eebc16","savedPayload":{"position":{"x":38022.304531093505,"y":32205.25108917128},"targetPosition":{"x":37821.56534918585,"y":31982.307641528063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cf907f3e-a01a-4ffb-9e3b-23ea0d8f34d1","savedPayload":{"position":{"x":37219.34780346287,"y":31313.47729859841},"targetPosition":{"x":37018.60862155521,"y":31090.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"3f7a5501-fa20-4b3b-b038-2297cb2fd04e","savedPayload":{"position":{"x":37018.60862155521,"y":31090.53385095519},"targetPosition":{"x":36733.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"b8a7ff2a-dc3b-43e0-9226-b8e6f532c476","savedPayload":{"position":{"x":37762.40401686815,"y":30835.837765917335},"targetPosition":{"x":37464.04744825767,"y":30867.196304897632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2bc75a78-2139-4752-82be-2f5a8a7928fd","savedPayload":{"position":{"x":37464.04744825767,"y":30867.196304897632},"targetPosition":{"x":37165.69087964718,"y":30898.55484387793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"a56977af-ba08-4617-a417-4edb66c5ca2f","savedPayload":{"position":{"x":37518.36203102267,"y":31383.965040502895},"targetPosition":{"x":37342.026455334926,"y":31141.259942190412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"28601045-4302-4e44-9f9c-6f789094a474","savedPayload":{"position":{"x":37342.026455334926,"y":31141.259942190412},"targetPosition":{"x":37165.69087964718,"y":30898.55484387793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1a05ddeb-09bf-4284-bc2a-bfee83eee2c7","savedPayload":{"position":{"x":37165.69087964718,"y":30898.55484387793},"targetPosition":{"x":36891.62724235441,"y":30776.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"b862adde-91b6-4146-a860-7fe3c44f43d4","savedPayload":{"position":{"x":37111.13701521649,"y":32865.02983122857},"targetPosition":{"x":37079.77847623619,"y":32566.673262618082},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9568610b-062b-4f5c-95b7-8ff55754334d","savedPayload":{"position":{"x":37079.77847623619,"y":32566.673262618082},"targetPosition":{"x":37048.419937255894,"y":32268.316694007597},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"76be967f-7051-4fa8-9f3c-255c8cf12d77","savedPayload":{"position":{"x":37048.419937255894,"y":32268.316694007597},"targetPosition":{"x":37017.0613982756,"y":31969.960125397116},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"3c2ba6d3-e215-4a9f-9b48-9c9340086dda","savedPayload":{"position":{"x":37017.0613982756,"y":31969.960125397116},"targetPosition":{"x":36985.7028592953,"y":31671.603556786635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"69200cc2-ab70-45f4-ae63-29cb1bd73d0a","savedPayload":{"position":{"x":36985.7028592953,"y":31671.603556786635},"targetPosition":{"x":36954.344320315,"y":31373.246988176154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"47778ccf-4a59-4ce1-93f2-110cdd8e900b","savedPayload":{"position":{"x":36954.344320315,"y":31373.246988176154},"targetPosition":{"x":36922.985781334704,"y":31074.890419565672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d6ffda9f-f303-48be-8de2-d6d68c3e76c8","savedPayload":{"position":{"x":36922.985781334704,"y":31074.890419565672},"targetPosition":{"x":36891.62724235441,"y":30776.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"3b34675d-60d7-44ef-9ef7-c434fe9ca560","savedPayload":{"position":{"x":36909.62724235441,"y":31240.53385095519},"targetPosition":{"x":36733.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"77e56192-a0b0-4786-afdb-8e59ba757ccf","savedPayload":{"position":{"x":36733.291666666664,"y":30997.82875264271},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S3 - 2H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"0c6d7b91-4bbf-4e27-850c-6348ffea4055","savedPayload":{"position":{"x":36941.73020320117,"y":30192.21005423667},"targetPosition":{"x":37118.065778888915,"y":30434.915152549154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9c8b0541-0125-4ed1-8bcb-2d8a539bcc85","savedPayload":{"position":{"x":37118.065778888915,"y":30434.915152549154},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"b09863b6-7ea3-4929-8b3c-f99409fb1bf1","savedPayload":{"position":{"x":37108.991157951685,"y":30106.986341084546},"targetPosition":{"x":37201.69625626417,"y":30392.30329597309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"26835b4a-83a2-4209-84a0-e38c74ff993a","savedPayload":{"position":{"x":37201.69625626417,"y":30392.30329597309},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"2fc1bc08-9def-4a37-abc3-dbac24a2c360","savedPayload":{"position":{"x":37294.40135457666,"y":30077.620250861637},"targetPosition":{"x":37294.40135457666,"y":30377.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1fa5642c-48f4-492b-81d3-5d752decd8af","savedPayload":{"position":{"x":37294.40135457666,"y":30377.620250861637},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","code":"chart.at02hs.bollingerBand.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"07c23ae8-6440-4b6e-aabe-67afdba80c7c","savedPayload":{"position":{"x":37479.81155120163,"y":30106.986341084546},"targetPosition":{"x":37387.106452889144,"y":30392.30329597309},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c14a9e3b-6d84-44c9-8273-1a37850087b4","savedPayload":{"position":{"x":37387.106452889144,"y":30392.30329597309},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Up","code":"chart.at02hs.bollingerBand.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"57d558fd-ecfa-429a-9304-88f41b32b44c","savedPayload":{"position":{"x":37647.07250595214,"y":30192.21005423667},"targetPosition":{"x":37470.7369302644,"y":30434.915152549154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ab49ca45-333d-4ed9-99a1-a3ca632cbbb2","savedPayload":{"position":{"x":37470.7369302644,"y":30434.915152549154},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H NOT Side","code":"chart.at04hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"261d9835-4d23-4b58-946d-b9324d920273","savedPayload":{"position":{"x":37779.81155120163,"y":30324.94909948615},"targetPosition":{"x":37537.106452889144,"y":30501.284675173894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4d450dc4-bfbb-4779-b070-cac385b809c7","savedPayload":{"position":{"x":37537.106452889144,"y":30501.284675173894},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H RSI > 60","code":"chart.at24hs.rsi14.value < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.rsi14.value > 60","project":"Superalgos","id":"c0afd580-e4b8-4c7c-ac4c-7370e5a79a98","savedPayload":{"position":{"x":37865.035264353755,"y":30492.21005423667},"targetPosition":{"x":37579.71830946521,"y":30584.915152549154},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"95207d90-4af8-4b5a-8321-0076e8b8929d","savedPayload":{"position":{"x":37579.71830946521,"y":30584.915152549154},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"92ef2b33-6bd1-4ab7-91a4-ddb3e035ed08","savedPayload":{"position":{"x":37894.40135457666,"y":30677.620250861637},"targetPosition":{"x":37594.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3ac7ebe1-3f6f-4e35-a8a2-f39aa509c849","savedPayload":{"position":{"x":37594.40135457666,"y":30677.620250861637},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 3: 02H Down && 4H Side && 1H Medium, Steep or Extreme","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Down\" && chart.at12hs.bollingerChannel.direction === \"Down\" && chart.at04hs.bollingerSubChannel.slope === \"Side\" && (chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\")) {false} else {true}","project":"Superalgos","id":"6ef3aec8-78cb-4942-bcfd-ff860b2b7971","savedPayload":{"position":{"x":37865.035264353755,"y":30863.030447486602},"targetPosition":{"x":37579.71830946521,"y":30770.32534917412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5af02e84-f067-45ee-8d7e-44966254e430","savedPayload":{"position":{"x":37579.71830946521,"y":30770.32534917412},"targetPosition":{"x":37294.40135457666,"y":30677.620250861637},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20017afc-2e99-4596-9a1d-41b8b8ee7999","savedPayload":{"position":{"x":37294.40135457666,"y":30677.620250861637},"targetPosition":{"x":37118.065778888915,"y":30920.32534917412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"e6080867-291e-4dc7-b00f-582656e25e80","savedPayload":{"position":{"x":37118.065778888915,"y":30920.32534917412},"targetPosition":{"x":36941.73020320117,"y":31163.030447486602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"890f22bb-d291-4fdd-b444-5afbea478f13","savedPayload":{"position":{"x":31414.3174286547,"y":28295.415640704618},"targetPosition":{"x":31088.537319585448,"y":28346.3096726738},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef921c85-8bd3-49cc-aeaa-2556181fec27","savedPayload":{"position":{"x":31088.537319585448,"y":28346.3096726738},"targetPosition":{"x":30762.5709795214,"y":28398.387854006236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d4217f36-b6e4-45dc-979d-5ad1e74d0b85","savedPayload":{"position":{"x":30762.5709795214,"y":28398.387854006236},"targetPosition":{"x":30400.520368511934,"y":28455.712099738113},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"92cd971f-1315-425e-883c-4adefb12883e","savedPayload":{"position":{"x":37089.883454290444,"y":31139.56527773057},"targetPosition":{"x":36941.73020320117,"y":31163.030447486602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"f5611889-2d66-4b5a-84ca-1bd444e56cb0","savedPayload":{"position":{"x":31170.08607539528,"y":28527.038016519247},"targetPosition":{"x":30904.051511136568,"y":28721.061266532975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96fdbdfc-c7d9-4e54-972c-de01d3f58a76","savedPayload":{"position":{"x":30904.051511136568,"y":28721.061266532975},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"ccd315a6-ae1c-4fcf-b6d4-deac89aef390","savedPayload":{"position":{"x":31262.48907735243,"y":28708.77258316442},"targetPosition":{"x":30950.997838714247,"y":28813.477755918284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"382fb23e-b4bc-4792-a492-328fa6201f6c","savedPayload":{"position":{"x":30950.997838714247,"y":28813.477755918284},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"cbc7b7f8-b6f1-4752-9259-6372178089e4","savedPayload":{"position":{"x":31298.687545034096,"y":28915.160331027575},"targetPosition":{"x":30968.847711589355,"y":28915.570711517896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"74975af2-4802-47bc-8251-97981c77dc4a","savedPayload":{"position":{"x":30968.847711589355,"y":28915.570711517896},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Down","code":"chart.at02hs.bollingerBand.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"b7bdf1ce-16a5-4fc0-a87b-f8815615ef99","savedPayload":{"position":{"x":31263.08438131275,"y":29115.90411641114},"targetPosition":{"x":30951.05218496165,"y":29017.098469734265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a1e09269-19e5-4dff-8aeb-66d8bf6bd96d","savedPayload":{"position":{"x":30951.05218496165,"y":29017.098469734265},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Up","code":"chart.at02hs.bollingerBand.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"c516d181-ad48-49cd-a298-fddb6e91de94","savedPayload":{"position":{"x":31171.52957208873,"y":29302.956437265246},"targetPosition":{"x":30905.375264537026,"y":29109.78758536721},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d57a06c7-d40b-4488-93fe-f7441dd299c6","savedPayload":{"position":{"x":30905.375264537026,"y":29109.78758536721},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H NOT Side","code":"chart.at04hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"9fabe671-7d14-43b5-ba69-831f4f2a066f","savedPayload":{"position":{"x":31026.16947841445,"y":29445.145002547026},"targetPosition":{"x":30831.55109461194,"y":29181.564929910513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"177c777c-ff05-4dc0-8b6b-d663b7329938","savedPayload":{"position":{"x":30831.55109461194,"y":29181.564929910513},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H RSI > 60","code":"chart.at24hs.rsi14.value < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.rsi14.value > 60","project":"Superalgos","id":"e48e0eea-8553-4baa-ab82-de8e822619b3","savedPayload":{"position":{"x":30842.12087487519,"y":29538.89596896828},"targetPosition":{"x":30739.28350911039,"y":29226.871666737672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee231079-650d-4046-8e5b-ad3a82e09efa","savedPayload":{"position":{"x":30739.28350911039,"y":29226.871666737672},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"241ea7c4-ec8c-4f74-994f-27cdc3cc5084","savedPayload":{"position":{"x":30640.5405985436,"y":29573.97579321247},"targetPosition":{"x":30637.610420856836,"y":29245.27333622449},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b1bb2780-2f92-47da-9ea5-39d0397e7144","savedPayload":{"position":{"x":30637.610420856836,"y":29245.27333622449},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 3: 02H Down && 4H Side && 1H Medium, Steep or Extreme","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Down\" && chart.at12hs.bollingerChannel.direction === \"Down\" && chart.at04hs.bollingerSubChannel.slope === \"Side\" && (chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\")) {false} else {true}","project":"Superalgos","id":"35f95b09-f037-43ba-96f9-fa9d7d677bea","savedPayload":{"position":{"x":30437.08340736183,"y":29539.07626458395},"targetPosition":{"x":30534.098685811034,"y":29225.435375311725},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6d92e5f1-7164-4f38-9a56-07334aee23fd","savedPayload":{"position":{"x":30534.098685811034,"y":29225.435375311725},"targetPosition":{"x":30637.994358093514,"y":28914.762398661194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2f0018b8-a386-4eb2-8cf8-b61c00af7639","savedPayload":{"position":{"x":30637.994358093514,"y":28914.762398661194},"targetPosition":{"x":30341.576475936905,"y":28699.688984745393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a937976d-4084-4184-a913-910b75ed6659","savedPayload":{"position":{"x":37184.43530151366,"y":31339.366023174345},"targetPosition":{"x":36941.73020320117,"y":31163.030447486602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"def5d0af-b5ee-43f9-9ea0-0b73cd37d82e","savedPayload":{"position":{"x":36941.73020320117,"y":31163.030447486602},"targetPosition":{"x":36645.42370102263,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"0b0e860d-f3c3-4372-9873-4a9dd4e9d100","savedPayload":{"position":{"x":27883.404137703503,"y":27020.980158767794},"targetPosition":{"x":27962.593635858742,"y":27228.341033963836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"d340cdb1-a381-4206-a857-07ae5d92ad04","savedPayload":{"position":{"x":27962.593635858742,"y":27228.341033963836},"targetPosition":{"x":28120.887727664493,"y":27642.082447776105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"f3292c7f-4273-4130-a41d-8d8d16133ff3","savedPayload":{"position":{"x":28538.25225147877,"y":27124.92435611169},"targetPosition":{"x":28399.301500681046,"y":27297.625137149545},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"459ba766-3c86-4b1c-81ee-467a438ff57d","savedPayload":{"position":{"x":28399.301500681046,"y":27297.625137149545},"targetPosition":{"x":28120.887727664493,"y":27642.082447776105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4dcaba6c-a6cc-4893-858b-0c21fb1b3849","savedPayload":{"position":{"x":37062.520088492325,"y":31338.307543484094},"targetPosition":{"x":36912.72565827914,"y":31346.157936920536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"c9114021-830b-42a4-a360-4c2bbf1cbe60","savedPayload":{"position":{"x":31267.236296113108,"y":30841.158852651693},"targetPosition":{"x":31089.04250438432,"y":30566.63563771385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1cda8d70-96d1-4f9d-a532-047fc4a3179c","savedPayload":{"position":{"x":31089.04250438432,"y":30566.63563771385},"targetPosition":{"x":30910.13260274625,"y":30291.000940031132},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"43a8d235-6498-4bf5-9a01-4ffe21dec3a1","savedPayload":{"position":{"x":30910.13260274625,"y":30291.000940031132},"targetPosition":{"x":30731.81429666208,"y":30014.30806968196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"d085a3ab-b86b-4fae-a802-e45d30212b12","savedPayload":{"position":{"x":30731.81429666208,"y":30014.30806968196},"targetPosition":{"x":30552.12214729171,"y":29738.005517680074},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5f38bb78-6259-4ceb-a80e-9acd18e3daa2","savedPayload":{"position":{"x":30552.12214729171,"y":29738.005517680074},"targetPosition":{"x":30373.49788098172,"y":29463.179795115248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"e2222c7e-1bd3-4a7c-9774-48cd1cc16d3d","savedPayload":{"position":{"x":30373.49788098172,"y":29463.179795115248},"targetPosition":{"x":30192.65461372908,"y":29184.67193358906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"759388ff-86bc-41f0-9ec7-9964e904e630","savedPayload":{"position":{"x":36994.42151353139,"y":31471.95852211235},"targetPosition":{"x":36912.72565827914,"y":31346.157936920536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"69a1d5f7-b453-489d-bf1b-b25c2bdcaa48","savedPayload":{"position":{"x":36912.72565827914,"y":31346.157936920536},"targetPosition":{"x":36645.42370102263,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Slow Run","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"d86eeec2-43f3-453c-8d05-2ef2723a241b","savedPayload":{"position":{"x":30628.750458731716,"y":29444.22584982375},"targetPosition":{"x":30335.641900646377,"y":29593.364568646706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"f903c817-fc50-48ab-abd4-9b58953e95b7","savedPayload":{"position":{"x":31354.35293324729,"y":29004.36124045612},"targetPosition":{"x":31190.350033326875,"y":29012.728621250448},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"abd14bc4-e08a-4804-a38d-379dc8869915","savedPayload":{"position":{"x":31190.350033326875,"y":29012.728621250448},"targetPosition":{"x":31012.159511378668,"y":29021.900387965332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3e9ec975-1cfd-4629-86c2-01a2b7cee8fc","savedPayload":{"position":{"x":31012.159511378668,"y":29021.900387965332},"targetPosition":{"x":30798.162689666744,"y":29032.850857985562},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"86e1e0cc-e723-4488-97cc-e5df9ff768b4","savedPayload":{"position":{"x":30318.592456730752,"y":29922.378034473746},"targetPosition":{"x":30335.641900646377,"y":29593.364568646706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"9bf160d5-af24-47b8-a457-59da431e3fe3","savedPayload":{"position":{"x":30335.985236418375,"y":29593.585798081505},"targetPosition":{"x":30000.263128435952,"y":29375.018041496223},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"c57b9aaa-edc1-4a24-a2f9-1eeb3eed3d5c","savedPayload":{"position":{"x":30887.882988813966,"y":29952.307069692128},"targetPosition":{"x":30611.66794025359,"y":29772.816802796347},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"22d1ba82-cecd-4ebf-a9b0-c02a2dcc4385","savedPayload":{"position":{"x":30611.66794025359,"y":29772.816802796347},"targetPosition":{"x":30335.641900646377,"y":29593.364568646706},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f41b282c-06b8-4a86-9c94-18173ce77526","savedPayload":{"position":{"x":36907.421436136305,"y":31558.958599507438},"targetPosition":{"x":36781.62085094449,"y":31477.262744255182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"db43ceff-373d-42f3-9109-71257f48d0bb","savedPayload":{"position":{"x":29963.419511023865,"y":30102.60700104823},"targetPosition":{"x":29687.293381288575,"y":29923.59921681066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"b85e0a3d-dddf-4c06-8265-09a128565a72","savedPayload":{"position":{"x":31058.52588944567,"y":30833.786651167844},"targetPosition":{"x":30879.418189435026,"y":30557.66843219543},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a8c6c9e7-c45b-4e14-8f6e-5bffa6f7b0f0","savedPayload":{"position":{"x":30879.418189435026,"y":30557.66843219543},"targetPosition":{"x":30700.063150956645,"y":30281.98509302498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"25f76ae7-93a2-47ab-be49-bf91a4ab8b37","savedPayload":{"position":{"x":30402.455539239483,"y":30868.73569754444},"targetPosition":{"x":30551.047002704865,"y":30575.35467935803},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0f943c1c-645b-455a-a11d-e67435b5b68b","savedPayload":{"position":{"x":30551.047002704865,"y":30575.35467935803},"targetPosition":{"x":30700.063150956645,"y":30281.98509302498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89136673-be89-4f40-82cf-78a32f735291","savedPayload":{"position":{"x":30700.063150956645,"y":30281.98509302498},"targetPosition":{"x":30681.660920309834,"y":29936.971426818083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"3b4bb3aa-6317-41b7-bb90-39e703fbc836","savedPayload":{"position":{"x":29394.027785704282,"y":30072.76493936967},"targetPosition":{"x":29687.293381288575,"y":29923.59921681066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"0d840032-5e32-4356-96af-434e6524664d","savedPayload":{"position":{"x":29687.293381288575,"y":29923.59921681066},"targetPosition":{"x":29708.07835823884,"y":29523.75334836753},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < tradingEngine.current.position.entryTargetRate.value * 0.97) {chart.at01hs.base7EMA.ema7 * 0.97} else {tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"214e21c2-bdab-4d05-91b2-02f327d177b8","savedPayload":{"position":{"x":29946.393108542863,"y":30430.799958743184},"targetPosition":{"x":29670.280630142137,"y":30251.783960346103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"401d2bc0-0193-42de-8a65-df43242eb516","savedPayload":{"position":{"x":28501.818840734773,"y":30459.073701008725},"targetPosition":{"x":28795.2904049326,"y":30308.68538983982},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b023b429-024c-46eb-86f8-6e4e23be3b3c","savedPayload":{"position":{"x":28795.2904049326,"y":30308.68538983982},"targetPosition":{"x":29089.767308016446,"y":30158.016812615177},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ee7cd341-d632-47d6-9ddf-4462e6961461","savedPayload":{"position":{"x":29089.767308016446,"y":30158.016812615177},"targetPosition":{"x":29397.421653947713,"y":30001.01592852205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5c96f85d-f36d-496f-8c82-68bdbde4456f","savedPayload":{"position":{"x":29376.947507133722,"y":30401.02096048522},"targetPosition":{"x":29670.280630142137,"y":30251.783960346103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"241d29a5-2372-4c0b-9dd1-9c74e98d8593","savedPayload":{"position":{"x":29670.280630142137,"y":30251.783960346103},"targetPosition":{"x":29687.293381288575,"y":29923.59921681066},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"54a1a04f-b59d-40d9-91d6-9716c0198983","savedPayload":{"position":{"x":29873.802401111498,"y":30824.136034971496},"targetPosition":{"x":29653.26417838019,"y":30579.922938459444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"23d9abaa-63cc-4aef-abaf-7b493213cd29","savedPayload":{"position":{"x":30246.65141582158,"y":31295.024756333136},"targetPosition":{"x":29969.773150566944,"y":31115.05454536248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"28be9fea-5e5c-4c99-b4a4-6c01a831d9ce","savedPayload":{"position":{"x":29969.773150566944,"y":31115.05454536248},"targetPosition":{"x":29694.625354176365,"y":30936.26681649351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"c59f1c98-a4e9-40c1-8690-6543baa7a966","savedPayload":{"position":{"x":29992.316603955267,"y":31521.918904245278},"targetPosition":{"x":29842.909583427114,"y":31228.23200175602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c24d0f99-6491-40b3-94d9-49f91d354f3c","savedPayload":{"position":{"x":29842.909583427114,"y":31228.23200175602},"targetPosition":{"x":29694.625354176365,"y":30936.26681649351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"d6b4d297-a5fa-4561-acb0-b8d3b891912e","savedPayload":{"position":{"x":29660.853960277716,"y":31594.960795931773},"targetPosition":{"x":29677.031205104722,"y":31265.17693260894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c3f66d39-dc88-4049-895a-378f492a7d35","savedPayload":{"position":{"x":29677.031205104722,"y":31265.17693260894},"targetPosition":{"x":29694.625354176365,"y":30936.26681649351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"e9ac7090-a4d5-409d-9432-0d422f60e6e1","savedPayload":{"position":{"x":29335.298864916324,"y":31486.63353797164},"targetPosition":{"x":29515.12504217762,"y":31211.490554445976},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a05e64ed-4262-42f1-b9dc-cc14f8b27c2d","savedPayload":{"position":{"x":29515.12504217762,"y":31211.490554445976},"targetPosition":{"x":29694.625354176365,"y":30936.26681649351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div previous ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"cb158763-cb2f-494b-88ab-dafeb3825ca4","savedPayload":{"position":{"x":29108.662346425976,"y":31234.71321458},"targetPosition":{"x":29401.756647823844,"y":31085.83615624845},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"386bbe6b-9082-47e7-b750-e0e9d16a7030","savedPayload":{"position":{"x":29401.756647823844,"y":31085.83615624845},"targetPosition":{"x":29694.625354176365,"y":30936.26681649351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"32813be2-a6cd-4e5d-9a58-87eae5b3b5e9","savedPayload":{"position":{"x":29694.625354176365,"y":30936.26681649351},"targetPosition":{"x":29712.578097013517,"y":30591.046990362483},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"264bdd5b-5246-4a3f-bd09-5c50baf57963","savedPayload":{"position":{"x":29687.127001026383,"y":30994.110277214997},"targetPosition":{"x":29653.26417838019,"y":30579.922938459444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"241d29a5-2372-4c0b-9dd1-9c74e98d8593"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"308d9cf6-beba-4d14-9b90-bb11409e3835","savedPayload":{"position":{"x":28685.307493106106,"y":31070.38987175031},"targetPosition":{"x":28928.46656131198,"y":30851.330910451536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a787ffbe-ea25-41cb-a719-de115285eead","savedPayload":{"position":{"x":28928.46656131198,"y":30851.330910451536},"targetPosition":{"x":29172.212336936514,"y":30630.964646086664},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d4b41076-5b23-498d-bc3e-1ccf277a1a43","savedPayload":{"position":{"x":29172.212336936514,"y":30630.964646086664},"targetPosition":{"x":29429.004617362232,"y":30399.743487852218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"7cb4214c-3e3e-4a70-ad14-6ae2a568f24c","savedPayload":{"position":{"x":29408.346875663025,"y":30799.857453568977},"targetPosition":{"x":29653.26417838019,"y":30579.922938459444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"241d29a5-2372-4c0b-9dd1-9c74e98d8593"}}}],"announcements":[],"id":"592ad0d7-d583-4827-8ae6-48f6ad25c1a3","savedPayload":{"position":{"x":29653.26417838019,"y":30579.922938459444},"targetPosition":{"x":29670.280630142137,"y":30251.783960346103},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"580ecace-0d6d-4632-ad8d-e6dc86df51c8","savedPayload":{"position":{"x":29899.364120937164,"y":31066.547004323686},"targetPosition":{"x":29623.511054874885,"y":30886.983540492874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"bf6a5ecf-f5c8-4d13-a15c-1b567422bee0","savedPayload":{"position":{"x":19029.764085880444,"y":26496.17139964985},"targetPosition":{"x":18863.366996299963,"y":26122.22514428357},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ca87de8b-af92-4d83-af59-7c71f17e1be4","savedPayload":{"position":{"x":18863.366996299963,"y":26122.22514428357},"targetPosition":{"x":18696.865053089474,"y":25748.069407462383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"d626af7e-c8bb-4e17-95e5-ba5abda158d8","savedPayload":{"position":{"x":18215.965566488427,"y":26410.63625659715},"targetPosition":{"x":18456.385995020508,"y":26079.431586512917},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"98a76d2a-1ec4-413c-85b2-59865c6e1187","savedPayload":{"position":{"x":18456.385995020508,"y":26079.431586512917},"targetPosition":{"x":18696.865053089474,"y":25748.069407462383},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9406f175-4d00-436d-ab9e-27081d36611b","savedPayload":{"position":{"x":18696.865053089474,"y":25748.069407462383},"targetPosition":{"x":18739.410533983973,"y":25340.537448332063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"aef3e320-bbaf-42e5-8083-21157428bfaf","savedPayload":{"position":{"x":29444.434095928715,"y":31163.215897061025},"targetPosition":{"x":29623.511054874885,"y":30886.983540492874},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"241d29a5-2372-4c0b-9dd1-9c74e98d8593"}}}],"announcements":[],"id":"9b594083-3fb0-4dfa-ba4b-1b1ada8687fe","savedPayload":{"position":{"x":29623.511054874885,"y":30886.983540492874},"targetPosition":{"x":29653.26417838019,"y":30579.922938459444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"80d81cb5-6a3a-4eff-ad9f-5590450c7366","savedPayload":{"position":{"x":36773.77045750805,"y":31627.05717446837},"targetPosition":{"x":36781.62085094449,"y":31477.262744255182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"3ea826ac-fe6b-4b8c-a0dc-f830202e8306","savedPayload":{"position":{"x":36781.62085094449,"y":31477.262744255182},"targetPosition":{"x":36645.42370102263,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"b4e3481e-02c3-4b1a-b0fc-b45ea73bb669","savedPayload":{"position":{"x":30014.18102670089,"y":30031.86045648549},"targetPosition":{"x":29758.95720075127,"y":29824.500662033657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba7855bc-df15-4472-bab3-6f7e54becbe2","savedPayload":{"position":{"x":29758.95720075127,"y":29824.500662033657},"targetPosition":{"x":29441.24507605964,"y":29566.366849256083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"395f39ec-ec09-4bb6-9f12-e8ee9b7597a8","savedPayload":{"position":{"x":29326.14826859976,"y":30294.033295551068},"targetPosition":{"x":29377.49627452898,"y":29969.211619681766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b8c905c4-1526-48e8-9ad9-e946f7e5fcd8","savedPayload":{"position":{"x":29377.49627452898,"y":29969.211619681766},"targetPosition":{"x":29441.24507605964,"y":29566.366849256083},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fab71da1-214c-48e3-af1c-07502a6faabb","savedPayload":{"position":{"x":36652.24855394236,"y":31646.304353151794},"targetPosition":{"x":36598.49336151056,"y":31506.267289177213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"e4c80caa-13c7-489e-a47c-294c01bd2703","savedPayload":{"position":{"x":26928.950308228996,"y":29470.989509943145},"targetPosition":{"x":26888.374522680926,"y":29278.809978069694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cbe12b3f-1a4a-4700-906f-fceb0606fcfe","savedPayload":{"position":{"x":26888.374522680926,"y":29278.809978069694},"targetPosition":{"x":26847.693191545106,"y":29085.95649903469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ddb0a9e7-a6eb-4607-968a-2f42ac3a8d60","savedPayload":{"position":{"x":26847.693191545106,"y":29085.95649903469},"targetPosition":{"x":26798.164770546806,"y":28851.42195851409},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4018e1b8-c111-492f-b1c8-3b86633fb347","savedPayload":{"position":{"x":28446.92406850885,"y":30342.968105805696},"targetPosition":{"x":28653.961663737085,"y":30087.154074591956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9d2f1590-9146-49cd-9e1f-d6b5baeecf4b","savedPayload":{"position":{"x":28653.961663737085,"y":30087.154074591956},"targetPosition":{"x":28860.26723061133,"y":29832.209026900367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"4a3fc4cf-8739-472e-a5f0-93b022eed042","savedPayload":{"position":{"x":28860.26723061133,"y":29832.209026900367},"targetPosition":{"x":29117.101720726136,"y":29514.851190096342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"06f7907c-2767-4a2f-881d-46c6b8b207ce","savedPayload":{"position":{"x":36504.095302853086,"y":31622.839183395758},"targetPosition":{"x":36598.49336151056,"y":31506.267289177213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"b81728f5-c26c-47a9-b659-456150614134","savedPayload":{"position":{"x":36598.49336151056,"y":31506.267289177213},"targetPosition":{"x":36645.42370102263,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4af71378-a61f-4d1d-a1cd-6933897ef3bd","savedPayload":{"position":{"x":36645.42370102263,"y":31209.960786998672},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S8 - 4H Up","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"0b8368d3-b1b1-413b-bbeb-95641a85b80f","savedPayload":{"position":{"x":37532.11259279449,"y":30464.261045287967},"targetPosition":{"x":37474.437806609996,"y":30910.549762419123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6034fcd2-8d4d-48b8-a392-18535fa70a53","savedPayload":{"position":{"x":37474.437806609996,"y":30910.549762419123},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"5e94af5d-2be9-4ae9-ae44-2867f755a827","savedPayload":{"position":{"x":37778.90824735666,"y":30532.914432922815},"targetPosition":{"x":37597.83563389108,"y":30944.876456236547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f811cfed-9f3e-4211-84da-066b038d0b33","savedPayload":{"position":{"x":37597.83563389108,"y":30944.876456236547},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"9d5052c6-8411-4f18-ace8-17f021dfd5e2","savedPayload":{"position":{"x":37996.36504939348,"y":30668.31724675044},"targetPosition":{"x":37706.56403490949,"y":31012.57786315036},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d4f2d1aa-32fd-4345-8291-3da0a9bf3fc5","savedPayload":{"position":{"x":37706.56403490949,"y":31012.57786315036},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"3347b5df-6552-43dd-8265-43bb7d87df98","savedPayload":{"position":{"x":38166.86594206929,"y":30859.499956066065},"targetPosition":{"x":37791.8144812474,"y":31108.169217808172},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7a4b6d88-b433-435d-a683-6eb73780f27b","savedPayload":{"position":{"x":37791.8144812474,"y":31108.169217808172},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"3bf685d6-ac1f-4bab-a7f1-8450ee657948","savedPayload":{"position":{"x":38276.59795706737,"y":31090.974074768295},"targetPosition":{"x":37846.68048874644,"y":31223.906277159287},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"22eebcad-ee09-4e3b-897e-9495bb82784d","savedPayload":{"position":{"x":37846.68048874644,"y":31223.906277159287},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Side or 1H Extreme or Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope === \"Side\" || (chart.at04hs.bollingerSubChannel.slope === \"Gentle\" && (chart.at01hs.bollingerSubChannel.slope === \"Extreme\" || chart.at01hs.bollingerSubChannel.slope === \"Side\"))","project":"Superalgos","id":"d5a69ea3-5ae1-4e4b-b858-8844f20f6369","savedPayload":{"position":{"x":38316.671259134,"y":31343.986946389472},"targetPosition":{"x":37866.71713977975,"y":31350.412712969875},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"54ac9a91-76eb-4d28-9d75-bcad0008c481","savedPayload":{"position":{"x":37866.71713977975,"y":31350.412712969875},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"e84f9d0b-15fc-4656-a2ed-392304b44df3","savedPayload":{"position":{"x":38283.839347660825,"y":31598.04097279632},"targetPosition":{"x":37850.301184043165,"y":31477.4397261733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"658b7720-b18e-42d0-9cb3-7f5c71928409","savedPayload":{"position":{"x":37850.301184043165,"y":31477.4397261733},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 3: 02H Down && 4H Side && 1H Medium, Steep or Extreme","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Down\" && chart.at12hs.bollingerChannel.direction === \"Down\" && chart.at04hs.bollingerSubChannel.slope === \"Side\" && (chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\")) {false} else {true}","project":"Superalgos","id":"84b0abb3-cf34-491e-9436-4fdb07ee4977","savedPayload":{"position":{"x":38180.76206885653,"y":31832.554207686837},"targetPosition":{"x":37798.76254464102,"y":31594.696343618558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f39b86b4-5a2a-470c-8503-0ee11eab51f6","savedPayload":{"position":{"x":37798.76254464102,"y":31594.696343618558},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 4: 02H Up && 02H Gentle && 3H Side","code":"chart.at02hs.percentageBandwidth.movingAverage > chart.at24hs.bollingerSubChannel.slope + chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Gentle\" && chart.at03hs.bollingerSubChannel.slope === \"Side\") {false} else {true}","project":"Superalgos","id":"3bde8f4f-c2e3-413b-8df1-37aeb20a85f9","savedPayload":{"position":{"x":38015.79013082563,"y":32028.5277834741},"targetPosition":{"x":37716.27657562557,"y":31692.68313151219},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"04fd8c8d-8074-4932-b3e1-56357c7829ea","savedPayload":{"position":{"x":37716.27657562557,"y":31692.68313151219},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 2: 02H, 03H, 04H, 06H, all Up && 2H Steep && 1H, 6H NOT Gentle","code":"chart.at24hs.bollingerChannel.direction + chart.at24hs.bollingerBand.slope > chart.at01hs.rsi14.value","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerSubChannel.direction === \"Up\" && chart.at03hs.bollingerSubChannel.direction === \"Up\" && chart.at04hs.bollingerSubChannel.direction === \"Up\" && chart.at06hs.bollingerSubChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Steep\" && chart.at01hs.bollingerSubChannel.slope != \"Gentle\" && chart.at06hs.bollingerSubChannel.slope != \"Gentle\") {false} else {true}","project":"Superalgos","id":"cf1a034f-093e-422f-ba6f-ec4c3ce091d2","savedPayload":{"position":{"x":37802.28857886153,"y":32170.08508654756},"targetPosition":{"x":37609.52579964352,"y":31763.46178304892},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"69c8d1ca-52b4-4eed-a65b-7a8a870bb46d","savedPayload":{"position":{"x":37609.52579964352,"y":31763.46178304892},"targetPosition":{"x":37416.763020425504,"y":31356.83847955028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"64643171-239b-49ac-adc7-0124075eb96e","savedPayload":{"position":{"x":37416.763020425504,"y":31356.83847955028},"targetPosition":{"x":36972.303267157695,"y":31427.23398881838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9c8b28ef-af88-416c-9262-20efbf357408","savedPayload":{"position":{"x":36972.303267157695,"y":31427.23398881838},"targetPosition":{"x":36675.99676497915,"y":31474.16432833045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"09286632-34ad-4ea0-9f01-32bd89b20900","savedPayload":{"position":{"x":30519.77668544699,"y":29902.464765692268},"targetPosition":{"x":30266.652518669805,"y":29718.199237967332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f75343e2-3c65-413b-85de-8e88a1f91e09","savedPayload":{"position":{"x":30266.652518669805,"y":29718.199237967332},"targetPosition":{"x":30012.543549092195,"y":29533.717903239143},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"68074fb6-7ca9-43a7-a83c-abcd0c55148c","savedPayload":{"position":{"x":30012.543549092195,"y":29533.717903239143},"targetPosition":{"x":29723.598269035574,"y":29324.737995775577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"07f812fb-602f-4713-871d-648faa64a6ce","savedPayload":{"position":{"x":36797.34931413539,"y":31562.332116174322},"targetPosition":{"x":36675.99676497915,"y":31474.16432833045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"07c87bc6-f04b-4a08-88c3-82df8036a971","savedPayload":{"position":{"x":37685.90004802164,"y":32330.28015614579},"targetPosition":{"x":37239.61133089048,"y":32272.605369961297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9a120c5b-3fda-4ff3-89af-621d53b2e075","savedPayload":{"position":{"x":37239.61133089048,"y":32272.605369961297},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"d054b93f-3378-49e9-9e18-73373b1ec935","savedPayload":{"position":{"x":37617.24666038679,"y":32577.075810707967},"targetPosition":{"x":37205.284637073055,"y":32396.003197242386},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cbc32f34-4189-4526-a323-9291e672495c","savedPayload":{"position":{"x":37205.284637073055,"y":32396.003197242386},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"562f3238-94f0-41af-8d61-f9984bc8bd0b","savedPayload":{"position":{"x":37481.84384655917,"y":32794.53261274478},"targetPosition":{"x":37137.583230159245,"y":32504.73159826079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d5b4549d-92bd-4c3e-af81-884899aae8d9","savedPayload":{"position":{"x":37137.583230159245,"y":32504.73159826079},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"ce7a4a64-743a-443d-a825-b02c25d4b55a","savedPayload":{"position":{"x":37290.661137243536,"y":32965.03350542059},"targetPosition":{"x":37041.99187550143,"y":32589.9820445987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4b992367-9f3a-4ce3-b389-2fc84c8cca16","savedPayload":{"position":{"x":37041.99187550143,"y":32589.9820445987},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"a1c10e9c-19b9-4805-b441-ce3ec64b23a1","savedPayload":{"position":{"x":37059.187018541306,"y":33074.765520418674},"targetPosition":{"x":36926.254816150315,"y":32644.84805209774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f5f2b1bb-f847-4994-a1ab-5252c7c685c6","savedPayload":{"position":{"x":36926.254816150315,"y":32644.84805209774},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Side or 1H Extreme or Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope === \"Side\" || (chart.at04hs.bollingerSubChannel.slope === \"Gentle\" && (chart.at01hs.bollingerSubChannel.slope === \"Extreme\" || chart.at01hs.bollingerSubChannel.slope === \"Side\"))","project":"Superalgos","id":"3d26867a-7ffc-4b17-a226-c2cf2d02a1ae","savedPayload":{"position":{"x":36806.17414692013,"y":33114.8388224853},"targetPosition":{"x":36799.748380339726,"y":32664.88470313105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a96f6aed-5ba0-458e-b073-a14a7030a4ce","savedPayload":{"position":{"x":36799.748380339726,"y":32664.88470313105},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"f674d92e-8b5b-4a88-9c97-c0499fea9f41","savedPayload":{"position":{"x":36552.120120513275,"y":33082.006911012126},"targetPosition":{"x":36672.7213671363,"y":32648.468747394465},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b0663ef7-ad0e-44eb-8448-87c92b066de1","savedPayload":{"position":{"x":36672.7213671363,"y":32648.468747394465},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 3: 02H Down && 4H Side && 1H Medium, Steep or Extreme","code":"chart.at24hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Down\" && chart.at12hs.bollingerChannel.direction === \"Down\" && chart.at04hs.bollingerSubChannel.slope === \"Side\" && (chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\")) {false} else {true}","project":"Superalgos","id":"6337812b-5df1-428e-9d36-f7935dde3ca7","savedPayload":{"position":{"x":36317.60688562277,"y":32978.92963220782},"targetPosition":{"x":36555.46474969105,"y":32596.930107992313},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cda16118-0ec1-4313-bb27-be56055bb89a","savedPayload":{"position":{"x":36555.46474969105,"y":32596.930107992313},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 4: 02H Up && 02H Gentle && 3H Side","code":"chart.at02hs.percentageBandwidth.movingAverage > chart.at24hs.bollingerSubChannel.slope + chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Gentle\" && chart.at03hs.bollingerSubChannel.slope === \"Side\") {false} else {true}","project":"Superalgos","id":"d467380e-37f7-4d69-8384-c766fa7511ef","savedPayload":{"position":{"x":36121.6333098355,"y":32813.957694176934},"targetPosition":{"x":36457.47796179741,"y":32514.44413897687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"90afdd8d-1565-42b1-abbb-e88eb2e359db","savedPayload":{"position":{"x":36457.47796179741,"y":32514.44413897687},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 2: 02H, 03H, 04H, 06H, all Up && 2H Steep && 1H, 6H NOT Gentle","code":"chart.at24hs.bollingerChannel.direction + chart.at24hs.bollingerBand.slope > chart.at01hs.rsi14.value","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerSubChannel.direction === \"Up\" && chart.at03hs.bollingerSubChannel.direction === \"Up\" && chart.at04hs.bollingerSubChannel.direction === \"Up\" && chart.at06hs.bollingerSubChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Steep\" && chart.at01hs.bollingerSubChannel.slope != \"Gentle\" && chart.at06hs.bollingerSubChannel.slope != \"Gentle\") {false} else {true}","project":"Superalgos","id":"051149b3-b815-4eb2-952c-88317a972764","savedPayload":{"position":{"x":35980.076006762036,"y":32600.456142212824},"targetPosition":{"x":36386.69931026068,"y":32407.693362994814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ac3a3676-3fc0-4eed-97c8-51fe93a65256","savedPayload":{"position":{"x":36386.69931026068,"y":32407.693362994814},"targetPosition":{"x":36793.32261375932,"y":32214.930583776804},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3583b309-fa26-4e63-bfb2-055d5bad14b7","savedPayload":{"position":{"x":36793.32261375932,"y":32214.930583776804},"targetPosition":{"x":36722.92710449122,"y":31770.47083050899},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"e86cdca6-99e9-487f-b824-af95cf635d1f","savedPayload":{"position":{"x":36722.92710449122,"y":31770.47083050899},"targetPosition":{"x":36675.99676497915,"y":31474.16432833045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"fa8dc2de-7299-4e00-82a7-deb31393b442","savedPayload":{"position":{"x":36675.99676497915,"y":31474.16432833045},"targetPosition":{"x":36433.291666666664,"y":31297.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"e7d607dd-f2cf-441a-92a3-f4c77906e441","savedPayload":{"position":{"x":27643.327044274374,"y":24775.605276013346},"targetPosition":{"x":27722.516542429614,"y":24982.966151209388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"8b5ce9d5-7f3a-4f8f-b859-dafed2c1ca15","savedPayload":{"position":{"x":27722.516542429614,"y":24982.966151209388},"targetPosition":{"x":27880.810634235364,"y":25396.707565021658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"fdeba1ec-5b1a-4da6-b453-cbab79be9f77","savedPayload":{"position":{"x":28298.175158049642,"y":24879.54947335724},"targetPosition":{"x":28159.224407251917,"y":25052.250254395098},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"id":"5844b9d1-3453-43e1-a6e9-a5693229f091","savedPayload":{"position":{"x":28159.224407251917,"y":25052.250254395098},"targetPosition":{"x":27880.810634235364,"y":25396.707565021658},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd9456f4-3829-4345-9f57-3a24a4713d8c","savedPayload":{"position":{"x":36637.46848880076,"y":31683.515298485083},"targetPosition":{"x":36525.99676497915,"y":31583.145707531254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"a8698e14-e989-4d7f-875a-58a5406336ce","savedPayload":{"position":{"x":28699.231836417894,"y":31524.680651006827},"targetPosition":{"x":28764.288268724085,"y":31218.265475067936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"886857cf-a060-4f90-b596-697e2daf6184","savedPayload":{"position":{"x":28764.288268724085,"y":31218.265475067936},"targetPosition":{"x":28829.21490751321,"y":30912.28680973251},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0928e6d5-5b3c-4a7e-9633-5aa6fb46a459","savedPayload":{"position":{"x":28829.21490751321,"y":30912.28680973251},"targetPosition":{"x":28894.396474199075,"y":30605.92686994784},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"758c7111-856e-459e-bc44-4395e5430752","savedPayload":{"position":{"x":28894.396474199075,"y":30605.92686994784},"targetPosition":{"x":28959.685507391063,"y":30299.032518289794},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4dc48a16-7a46-421f-9583-8573686526ab","savedPayload":{"position":{"x":28959.685507391063,"y":30299.032518289794},"targetPosition":{"x":29024.86616672692,"y":29991.862833375402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"047b28d0-c4d4-4926-954d-af602e9e9915","savedPayload":{"position":{"x":29024.86616672692,"y":29991.862833375402},"targetPosition":{"x":29091.442334319483,"y":29675.738431033547},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"25b80432-bad3-4069-9c87-e550f1480a1f","savedPayload":{"position":{"x":36494.81001135649,"y":31729.867847641326},"targetPosition":{"x":36525.99676497915,"y":31583.145707531254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"d991ee3c-6598-4e8c-9510-78528130856d","savedPayload":{"position":{"x":36525.99676497915,"y":31583.145707531254},"targetPosition":{"x":36433.291666666664,"y":31297.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Controlled Run","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"ca59d229-8ed9-4468-84f2-fa6d2c673209","savedPayload":{"position":{"x":29125.074936806996,"y":30294.05459653031},"targetPosition":{"x":28914.40791215452,"y":30059.701195664486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"98e5e81b-f937-43cc-b7aa-6e85e44f47da","savedPayload":{"position":{"x":29861.169051577643,"y":30862.590202003943},"targetPosition":{"x":29628.278092290093,"y":30652.78939872662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3cd19ef8-b808-45cf-b4a1-441b5995c7b8","savedPayload":{"position":{"x":29628.278092290093,"y":30652.78939872662},"targetPosition":{"x":29395.12779793478,"y":30442.63674335852},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e33ab866-419b-4032-943e-2964584f8655","savedPayload":{"position":{"x":29395.12779793478,"y":30442.63674335852},"targetPosition":{"x":29147.417687690628,"y":30219.19630792363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"fa02c41e-d7f1-4f72-ad59-314b44addb3e","savedPayload":{"position":{"x":28816.632660242103,"y":30359.00543140719},"targetPosition":{"x":28914.40791215452,"y":30059.701195664486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"b9595e4d-8c34-418f-90a7-431394b8edb6","savedPayload":{"position":{"x":28914.37689436275,"y":30059.548499311546},"targetPosition":{"x":28833.300777138433,"y":29675.307889274816},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"6938be43-dc74-4576-8b0a-8b18bd34792e","savedPayload":{"position":{"x":29044.554243179915,"y":30674.489657728147},"targetPosition":{"x":28979.62707723044,"y":30367.6429916529},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"6cefcdbc-918c-4abe-99f9-5a99c391d79b","savedPayload":{"position":{"x":28979.62707723044,"y":30367.6429916529},"targetPosition":{"x":28914.40791215452,"y":30059.701195664486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"901eb16f-14dd-4fd2-81c1-b4713a1b34e0","savedPayload":{"position":{"x":36371.77332197684,"y":31729.867847641326},"targetPosition":{"x":36340.58656835418,"y":31583.145707531254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"0cceca6d-8f5f-4350-8b7f-ec6db32521c2","savedPayload":{"position":{"x":28309.97545882235,"y":30148.90630395778},"targetPosition":{"x":28244.429971352278,"y":29841.53006228115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"1addcc51-a16b-4985-92f6-e76e87b7b318","savedPayload":{"position":{"x":28434.615356149046,"y":30970.42164374047},"targetPosition":{"x":28499.639128957802,"y":30663.219986645076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4e7b259b-db2b-4e52-a9db-c23dedf3f214","savedPayload":{"position":{"x":28499.639128957802,"y":30663.219986645076},"targetPosition":{"x":28564.6670804519,"y":30356.044984479202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"ca0cc08d-9284-42ab-87a7-6d955299c4b9","savedPayload":{"position":{"x":27968.01994480706,"y":30551.19330864895},"targetPosition":{"x":28266.189015572993,"y":30453.603522338046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"90b48244-0763-424b-8bc4-d2a93970e171","savedPayload":{"position":{"x":28266.189015572993,"y":30453.603522338046},"targetPosition":{"x":28564.6670804519,"y":30356.044984479202},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8152e6ad-9c73-48d3-aa81-d2a046876913","savedPayload":{"position":{"x":28564.6670804519,"y":30356.044984479202},"targetPosition":{"x":28787.3703204693,"y":30108.0390676963},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6b25f9d9-b3bb-4426-9f19-460186077662","savedPayload":{"position":{"x":27945.753384660136,"y":29744.461280667543},"targetPosition":{"x":28244.429971352278,"y":29841.53006228115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"2c1f29b4-9e38-4e72-a32a-e1e48cc6af9e","savedPayload":{"position":{"x":28244.429971352278,"y":29841.53006228115},"targetPosition":{"x":28536.07259143591,"y":29578.55699625407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < tradingEngine.current.position.entryTargetRate.value * 0.97) {chart.at01hs.base7EMA.ema7 * 0.97} else {tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"0199babe-dfd7-4f18-b9d7-3b73ade997fd","savedPayload":{"position":{"x":28221.45821724604,"y":30285.286168030354},"targetPosition":{"x":28011.287904495734,"y":30051.72762689482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"89e97633-9b3e-42ba-9cf6-bf29d6383a72","savedPayload":{"position":{"x":19567.6204725044,"y":24847.695610532777},"targetPosition":{"x":19407.989774178284,"y":24489.70243718777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"971da4c6-325b-4c78-a025-95dbd138bbc4","savedPayload":{"position":{"x":19407.989774178284,"y":24489.70243718777},"targetPosition":{"x":19248.044312735103,"y":24131.667973637137},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2af1c651-e988-4ae0-92a3-d0918b8a1cfe","savedPayload":{"position":{"x":19248.044312735103,"y":24131.667973637137},"targetPosition":{"x":19087.864408727095,"y":23773.54986660534},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4e18019c-6173-4b68-b709-174bc220cd55","savedPayload":{"position":{"x":27835.563255439927,"y":30343.463709794632},"targetPosition":{"x":28011.287904495734,"y":30051.72762689482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"a8860a5a-66b5-41f0-8a6c-dac7bf971c9d","savedPayload":{"position":{"x":27252.45433151663,"y":29481.665825133765},"targetPosition":{"x":27553.82291992252,"y":29394.26702916772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"690aeb6d-75ec-45c9-b321-9d943d84df5f","savedPayload":{"position":{"x":27553.82291992252,"y":29394.26702916772},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"d691ad30-4129-48d1-9b75-2b2337e409d2","savedPayload":{"position":{"x":27235.73278924803,"y":29203.46364196003},"targetPosition":{"x":27545.476677575087,"y":29255.023815422166},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"30880b5e-f66a-4d5a-b112-14bcc8bb9ac9","savedPayload":{"position":{"x":27545.476677575087,"y":29255.023815422166},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"8d66b5bd-521c-4d19-9fc0-baa4fb54ad84","savedPayload":{"position":{"x":27341.52934131509,"y":28945.079924225385},"targetPosition":{"x":27598.361055796973,"y":29125.766760485778},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c4298d6d-c635-49fe-a517-0dc19531c919","savedPayload":{"position":{"x":27598.361055796973,"y":29125.766760485778},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"67b51901-a5fe-4fad-aad4-fc4d756b09cc","savedPayload":{"position":{"x":27549.041305104092,"y":28758.247137159495},"targetPosition":{"x":27702.15661606371,"y":29032.31600496351},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b051770c-7c9c-4636-86c8-d3b419f9a8bd","savedPayload":{"position":{"x":27702.15661606371,"y":29032.31600496351},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"8d54874e-6c21-434a-80fa-492bf2a9be2b","savedPayload":{"position":{"x":27817.025207317452,"y":28680.071629637838},"targetPosition":{"x":27836.24604174683,"y":28993.256069589363},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9aa25c88-a620-42f1-b1e8-403c5c8718b1","savedPayload":{"position":{"x":27836.24604174683,"y":28993.256069589363},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Down && NOT Side","code":"chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Down\" && chart.at01hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"e8c97495-8098-4209-a220-6c399baba0f3","savedPayload":{"position":{"x":28091.972378647533,"y":28725.99441771699},"targetPosition":{"x":27973.87809826914,"y":29016.184771982786},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f39ad55a-1988-4ac8-9d5c-99054f951179","savedPayload":{"position":{"x":27973.87809826914,"y":29016.184771982786},"targetPosition":{"x":27855.32495428326,"y":29306.516559064374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"abaf1d9b-b5f9-4f8f-9a59-10936c3ea7b1","savedPayload":{"position":{"x":27855.32495428326,"y":29306.516559064374},"targetPosition":{"x":28078.311898080105,"y":29553.994069220047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f9636b68-93f0-4100-8046-1d62eed73501","savedPayload":{"position":{"x":27800.91381731664,"y":29818.504845018462},"targetPosition":{"x":28011.287904495734,"y":30051.72762689482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"274cc7b8-9ab0-4f9a-9302-3357cfcac9da"}}}],"announcements":[],"id":"b1d129c5-5f5e-4b1a-a2d6-b79561d2a6ce","savedPayload":{"position":{"x":28011.287904495734,"y":30051.72762689482},"targetPosition":{"x":28244.327383233212,"y":29841.624072751772},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"640cd6a8-a447-43ca-84f9-7dc5e6c8c826","savedPayload":{"position":{"x":27748.469185152302,"y":30555.06100729009},"targetPosition":{"x":27764.365157118584,"y":30240.890379724246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"9502bdd5-310a-4048-81ca-1eb0afe3c99d","savedPayload":{"position":{"x":27808.242398882314,"y":31130.462568097108},"targetPosition":{"x":27743.179205897453,"y":30823.551570209915},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cb42b9eb-16cb-4bb4-af70-570fc4d1cd29","savedPayload":{"position":{"x":27743.179205897453,"y":30823.551570209915},"targetPosition":{"x":27678.029738943165,"y":30516.26457651712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"da7a29f2-93be-4ce8-aeb0-f286b5710891","savedPayload":{"position":{"x":27484.120318464677,"y":31113.456151984472},"targetPosition":{"x":27581.01097956444,"y":30815.043508702183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b4748a9d-7f41-4ce0-92ea-267488fd2e02","savedPayload":{"position":{"x":27581.01097956444,"y":30815.043508702183},"targetPosition":{"x":27678.029738943165,"y":30516.26457651712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"792355fa-6601-4a41-b673-b814127b3524","savedPayload":{"position":{"x":27211.56087517546,"y":30936.49664463255},"targetPosition":{"x":27444.66926523191,"y":30726.527901597467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4cd7afea-ce88-4111-b74e-dc48e34bcee5","savedPayload":{"position":{"x":27444.66926523191,"y":30726.527901597467},"targetPosition":{"x":27678.029738943165,"y":30516.26457651712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"835d94b1-7b62-43bc-bbda-34184c5a5410","savedPayload":{"position":{"x":27063.953428851266,"y":30647.04405326244},"targetPosition":{"x":27370.829069176936,"y":30581.74541888829},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"66c6c8dc-f8b2-4534-aeb1-5f7aea412564","savedPayload":{"position":{"x":27370.829069176936,"y":30581.74541888829},"targetPosition":{"x":27678.029738943165,"y":30516.26457651712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Down && NOT Side or Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Down\" && chart.at01hs.bollingerSubChannel.slope != \"Side\" && chart.at01hs.bollingerSubChannel.slope != \"Gentle\"","project":"Superalgos","id":"4734e468-3fd1-4b7e-8361-66dea0f1d3c1","savedPayload":{"position":{"x":27080.788382816998,"y":30323.06530671747},"targetPosition":{"x":27379.233628166847,"y":30419.702945405792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b9f90ab7-e386-4fa3-a326-d99ce319edcd","savedPayload":{"position":{"x":27379.233628166847,"y":30419.702945405792},"targetPosition":{"x":27678.029738943165,"y":30516.26457651712},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"26ef5972-8cc4-4b0d-92a4-b7da565b84b4","savedPayload":{"position":{"x":27678.029738943165,"y":30516.26457651712},"targetPosition":{"x":27925.700392324245,"y":30293.122270601358},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9be98459-d007-4f66-94ac-cc7b6c6ad81c","savedPayload":{"position":{"x":27466.79061071358,"y":30527.208502305875},"targetPosition":{"x":27764.365157118584,"y":30240.890379724246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"274cc7b8-9ab0-4f9a-9302-3357cfcac9da"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","code":"chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"c959c1b6-aec3-4db7-a572-477f1ea2c132","savedPayload":{"position":{"x":26936.133864363976,"y":30368.97493748385},"targetPosition":{"x":27169.729670298097,"y":30159.142927247412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31460537-bb42-499a-9645-fca83618f4a5","savedPayload":{"position":{"x":27169.729670298097,"y":30159.142927247412},"targetPosition":{"x":27403.429033051816,"y":29949.432516611872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"b3e36006-93f4-4852-a7a7-d612a7e7ec27","savedPayload":{"position":{"x":26776.16084342068,"y":29916.812301721642},"targetPosition":{"x":27089.62693965511,"y":29933.086526194355},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b8fe60bd-1dbd-458d-bdfd-1accfdab0b7c","savedPayload":{"position":{"x":27089.62693965511,"y":29933.086526194355},"targetPosition":{"x":27403.429033051816,"y":29949.432516611872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"6b79a9e3-796e-4db6-8a5c-0bc0bd875f45","savedPayload":{"position":{"x":26982.86212750645,"y":29483.463627338722},"targetPosition":{"x":27193.051257696487,"y":29716.357500443293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1d09d25e-54eb-4d39-bea6-44f8492a2d10","savedPayload":{"position":{"x":27193.051257696487,"y":29716.357500443293},"targetPosition":{"x":27403.429033051816,"y":29949.432516611872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f3ce7cba-7352-4634-a05d-07399ba679f2","savedPayload":{"position":{"x":27403.429033051816,"y":29949.432516611872},"targetPosition":{"x":27736.285866076516,"y":29966.90886181387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"23ebc628-449c-43d8-97a2-28c23bb4dda7","savedPayload":{"position":{"x":27450.4184835489,"y":30224.29815990272},"targetPosition":{"x":27764.365157118584,"y":30240.890379724246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"b1d129c5-5f5e-4b1a-a2d6-b79561d2a6ce"}}}],"announcements":[],"id":"0995a46a-7564-4e4a-bdf9-d1dd437c75c6","savedPayload":{"position":{"x":27764.365157118584,"y":30240.890379724246},"targetPosition":{"x":28011.287904495734,"y":30051.72762689482},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"12d58077-9b90-44f6-9d1d-5247aad7b0a4","savedPayload":{"position":{"x":27972.87565844104,"y":30651.315617935412},"targetPosition":{"x":27882.33804635429,"y":30219.949587869894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"af3238a0-9671-4ef7-90d8-802f9255d298","savedPayload":{"position":{"x":18806.25033773091,"y":25867.638087326006},"targetPosition":{"x":18560.668681005598,"y":25561.737307922194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2191cdaf-d396-458b-80e3-d67c69976c29","savedPayload":{"position":{"x":18560.668681005598,"y":25561.737307922194},"targetPosition":{"x":18318.47228588017,"y":25260.27732681641},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"fa54d65e-9ed1-42f1-bcfe-c774607c7ae3","savedPayload":{"position":{"x":18234.06947772808,"y":26041.670334390496},"targetPosition":{"x":18276.295352962195,"y":25651.092176588005},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"de06b55c-392c-4032-b8a9-b1810881be63","savedPayload":{"position":{"x":18276.295352962195,"y":25651.092176588005},"targetPosition":{"x":18318.47228588017,"y":25260.27732681641},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Up || Side, Gentle or Medium","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Up\" || chart.at01hs.bollingerSubChannel.slope === \"Side\" || chart.at01hs.bollingerSubChannel.slope === \"Gentle\" || chart.at01hs.bollingerSubChannel.slope === \"Medium\"","project":"Superalgos","id":"4eca07e4-a6af-46c8-8099-fd4599755539","savedPayload":{"position":{"x":17706.63481557805,"y":25755.437515224272},"targetPosition":{"x":18012.53191626186,"y":25507.948589361826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a6ee99c3-005b-4b96-be05-579230e6af8b","savedPayload":{"position":{"x":18012.53191626186,"y":25507.948589361826},"targetPosition":{"x":18318.47228588017,"y":25260.27732681641},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fb58e58-feea-47c1-b7a6-0da4777ff32f","savedPayload":{"position":{"x":18318.47228588017,"y":25260.27732681641},"targetPosition":{"x":18368.52503271046,"y":24852.84992857802},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"3ca96593-db50-40f0-a191-bfdffe79fdf8","savedPayload":{"position":{"x":27458.218831748916,"y":30309.969729022378},"targetPosition":{"x":27882.33804635429,"y":30219.949587869894},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"b1d129c5-5f5e-4b1a-a2d6-b79561d2a6ce"}}}],"announcements":[],"id":"274cc7b8-9ab0-4f9a-9302-3357cfcac9da","savedPayload":{"position":{"x":27547.00895564981,"y":30432.25616085811},"targetPosition":{"x":27764.365157118584,"y":30240.890379724246},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5969717f-fd1e-4579-a80b-5e66723412a9","savedPayload":{"position":{"x":36229.11484453257,"y":31683.515298485083},"targetPosition":{"x":36340.58656835418,"y":31583.145707531254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"455d4f49-eb65-49f8-a6d5-2bdd44e8bbac","savedPayload":{"position":{"x":36340.58656835418,"y":31583.145707531254},"targetPosition":{"x":36433.291666666664,"y":31297.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"27a608d6-178f-4b7e-adb3-6d516e255821","savedPayload":{"position":{"x":28543.632303935323,"y":26738.584429752416},"targetPosition":{"x":28374.69486560794,"y":26733.35717438071},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8ba5789-fde1-408f-9c16-5220cab0d132","savedPayload":{"position":{"x":28374.69486560794,"y":26733.35717438071},"targetPosition":{"x":27989.274477314983,"y":26722.866038138956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"a84d1dbe-fb5a-4b4d-9135-7182197a7b43","savedPayload":{"position":{"x":28249.369095563787,"y":27201.145988507298},"targetPosition":{"x":28168.945420341995,"y":27053.56969241192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"df57e26e-cfa4-4b93-b2f1-cf099b22b8a8","savedPayload":{"position":{"x":28168.945420341995,"y":27053.56969241192},"targetPosition":{"x":27989.274477314983,"y":26722.866038138956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa5dae3c-efab-4936-bbee-8a07d9593055","savedPayload":{"position":{"x":36129.57607189281,"y":31611.196146976843},"targetPosition":{"x":36190.58656835418,"y":31474.16432833045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"9d763bcb-8be6-41e4-875a-2c7842cc6909","savedPayload":{"position":{"x":27230.84924955325,"y":27930.01390528551},"targetPosition":{"x":27190.27346400518,"y":27737.834373412057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"88b2ba31-76a8-43ee-8c4b-3b6e1e187a82","savedPayload":{"position":{"x":27190.27346400518,"y":27737.834373412057},"targetPosition":{"x":27149.59213286936,"y":27544.980894377055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2b1f9c91-7bb6-40ad-a43a-c52b0287ed9e","savedPayload":{"position":{"x":27149.59213286936,"y":27544.980894377055},"targetPosition":{"x":27100.06371187106,"y":27310.446353856452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a1de1b80-9a70-460b-8d8d-7a3846687b70","savedPayload":{"position":{"x":27116.130453508737,"y":29281.311640744694},"targetPosition":{"x":27427.8035370369,"y":29248.58181443382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ef6e7305-d840-4fa6-8aee-da60b33bef83","savedPayload":{"position":{"x":27427.8035370369,"y":29248.58181443382},"targetPosition":{"x":27739.92700499504,"y":29215.79329224555},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"06078431-e8b2-4116-99fa-7362a18d6ebd","savedPayload":{"position":{"x":27739.92700499504,"y":29215.79329224555},"targetPosition":{"x":28142.542442050708,"y":29173.388420505726},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"29750ebf-e23e-4d96-b8c3-02c5d5f1ade7","savedPayload":{"position":{"x":36041.408284048935,"y":31489.8435978206},"targetPosition":{"x":36190.58656835418,"y":31474.16432833045},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"d40a7e65-760d-4c56-8aac-d17111607cf9","savedPayload":{"position":{"x":36190.58656835418,"y":31474.16432833045},"targetPosition":{"x":36433.291666666664,"y":31297.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a1b63f90-0ec5-4eb4-a51e-88852cc95049","savedPayload":{"position":{"x":36433.291666666664,"y":31297.82875264271},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S4 - 8H Up","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"565db073-2544-4f1e-8ffd-450fb4e10feb","savedPayload":{"position":{"x":37250.92271198077,"y":31523.42269847025},"targetPosition":{"x":37002.211440214254,"y":31691.180569511474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1f26cf4a-76fc-4186-9b3b-9010f9f3da7c","savedPayload":{"position":{"x":37002.211440214254,"y":31691.180569511474},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"f288ec4c-d242-4138-a291-4e97fcec4e8e","savedPayload":{"position":{"x":37335.677604213335,"y":31713.7853031929},"targetPosition":{"x":37044.58888633054,"y":31786.3618718728},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"eb5bf914-8163-453a-afa5-95f22ba39ead","savedPayload":{"position":{"x":37044.58888633054,"y":31786.3618718728},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"0638ff08-302c-488f-8a8b-be0cd0454e49","savedPayload":{"position":{"x":37350.21330566871,"y":31921.655518513293},"targetPosition":{"x":37051.856737058224,"y":31890.296979532995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0c8e03c5-c1b2-4aaf-bddc-874c50cfbbba","savedPayload":{"position":{"x":37051.856737058224,"y":31890.296979532995},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"8H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at08hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"77dbd8ad-81fc-4394-93d4-e84e931970f7","savedPayload":{"position":{"x":37292.776596227246,"y":32121.961128626146},"targetPosition":{"x":37023.13838233749,"y":31990.449784589422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78fae417-cc69-4a59-8edf-5d2e7102b50f","savedPayload":{"position":{"x":37023.13838233749,"y":31990.449784589422},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"12H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at12hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"f513cfb2-d7b3-442b-8d72-8bedb02e7ddf","savedPayload":{"position":{"x":37170.29519072314,"y":32290.54232075589},"targetPosition":{"x":36961.89767958544,"y":32074.740380654293},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4ab49bb6-b9d3-44a1-8fa5-6d5f7b9d3b3f","savedPayload":{"position":{"x":36961.89767958544,"y":32074.740380654293},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"09bdc89a-fa30-46cc-9da0-aa16844e829b","savedPayload":{"position":{"x":36997.54215429322,"y":32407.06571513826},"targetPosition":{"x":36875.52116137048,"y":32133.00207784548},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2aae14ee-14b3-4c94-9394-d64432517632","savedPayload":{"position":{"x":36875.52116137048,"y":32133.00207784548},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H NOT Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope != \"Extreme\"","project":"Superalgos","id":"a2059ed1-a903-483c-a5b1-a44203fb670f","savedPayload":{"position":{"x":36795.354052694216,"y":32457.476870708593},"targetPosition":{"x":36774.42711057098,"y":32158.207655630646},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2ca6efe4-43ac-45a1-ba84-5215d33f32a6","savedPayload":{"position":{"x":36774.42711057098,"y":32158.207655630646},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Deviation > 40","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 25","project":"Superalgos","id":"3b0663ea-9168-4101-bd49-a4fa14473dc7","savedPayload":{"position":{"x":36588.117754957544,"y":32435.695458115686},"targetPosition":{"x":36670.80896170264,"y":32147.316949334192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6f3289e9-c257-4953-ae25-664416db52a7","savedPayload":{"position":{"x":36670.80896170264,"y":32147.316949334192},"targetPosition":{"x":36753.50016844774,"y":31858.938440552698},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"977e6e41-dca1-4b42-9e82-3e2eeae3c220","savedPayload":{"position":{"x":36753.50016844774,"y":31858.938440552698},"targetPosition":{"x":36510.79507013525,"y":31682.602864864955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"260de0f8-58ff-477f-aadb-f61a4043e3a8","savedPayload":{"position":{"x":36510.79507013525,"y":31682.602864864955},"targetPosition":{"x":36268.08997182277,"y":31506.267289177213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"a2b6bf13-42e1-428f-9691-42be919fa8c1","savedPayload":{"position":{"x":28809.37411189384,"y":30633.131574105915},"targetPosition":{"x":28758.09325863394,"y":30302.579666245838},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"05892d30-611b-4f6e-93ae-3f484b208fe5","savedPayload":{"position":{"x":28758.09325863394,"y":30302.579666245838},"targetPosition":{"x":28705.32489354033,"y":29973.082313140767},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f6bb3530-fc04-47bb-b335-1f90463c6a04","savedPayload":{"position":{"x":28705.32489354033,"y":29973.082313140767},"targetPosition":{"x":28647.81960320618,"y":29607.68707189431},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"3046ad00-d3de-4458-80db-287144ff86fa","savedPayload":{"position":{"x":36291.5551415788,"y":31654.420540266485},"targetPosition":{"x":36268.08997182277,"y":31506.267289177213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"3847310d-3d70-43f6-85a1-8a62eec1d4d3","savedPayload":{"position":{"x":28535.442240077766,"y":30421.14510742385},"targetPosition":{"x":28361.88940335974,"y":30134.91487704176},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"680fec1e-3d4c-4b3b-82a6-0f45a34f9776","savedPayload":{"position":{"x":28361.88940335974,"y":30134.91487704176},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"ffbb6568-c112-46de-8097-fbf993a8232f","savedPayload":{"position":{"x":28291.618500304503,"y":30509.579240058054},"targetPosition":{"x":28240.315820176762,"y":30180.237125311513},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f0830878-6dd9-4657-a0b5-906ff9296559","savedPayload":{"position":{"x":28240.315820176762,"y":30180.237125311513},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"d7a8fc7d-57a2-4340-bb12-627c667324e6","savedPayload":{"position":{"x":28030.935794680052,"y":30499.376493431926},"targetPosition":{"x":28110.167854802203,"y":30174.569782806466},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e841acd3-9785-49f5-be08-5aa63d3df039","savedPayload":{"position":{"x":28110.167854802203,"y":30174.569782806466},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"8H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at08hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"60872ff6-a88d-4e3c-9069-4337d9e77653","savedPayload":{"position":{"x":27796.2025117495,"y":30391.20267807148},"targetPosition":{"x":27992.69074200863,"y":30119.74253920332},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"969eebbc-1e68-4dc7-bb42-5fd1e92648b3","savedPayload":{"position":{"x":27992.69074200863,"y":30119.74253920332},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"12H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at12hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e1f6e5b8-70b1-44b9-b127-099a28b39e5f","savedPayload":{"position":{"x":27617.745668180327,"y":30199.394879364663},"targetPosition":{"x":27903.02636055706,"y":30024.164382393945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1d87e62c-73ff-434b-ac60-e7afa7035b78","savedPayload":{"position":{"x":27903.02636055706,"y":30024.164382393945},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"4dbcbf0e-b029-40db-9b3e-422ccb1d1642","savedPayload":{"position":{"x":27527.85954307872,"y":29953.851853944325},"targetPosition":{"x":27857.480803333707,"y":29902.34196364593},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ed71b78d-b409-451d-9e23-72fde4c6ac59","savedPayload":{"position":{"x":27857.480803333707,"y":29902.34196364593},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Deviation > 40","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerBand.deviation > 25","project":"Superalgos","id":"ca95ffdd-a14f-4985-84b7-2a482eb8091d","savedPayload":{"position":{"x":27536.99734099116,"y":29693.89725591531},"targetPosition":{"x":27861.856068712474,"y":29771.757035592964},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"80a35c8a-7650-442f-82de-b9acb0c09988","savedPayload":{"position":{"x":27861.856068712474,"y":29771.757035592964},"targetPosition":{"x":28187.881942973643,"y":29850.24740452339},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"22a72082-528a-440b-8e3f-374d612c4d51","savedPayload":{"position":{"x":28187.881942973643,"y":29850.24740452339},"targetPosition":{"x":28405.55648184158,"y":29549.958349770044},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c9d98dc4-e354-4357-99c8-eaa829f874d7","savedPayload":{"position":{"x":36091.754396135024,"y":31748.972387489695},"targetPosition":{"x":36268.08997182277,"y":31506.267289177213},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"0bf02e1f-d661-437b-85b0-b31e57707199","savedPayload":{"position":{"x":36268.08997182277,"y":31506.267289177213},"targetPosition":{"x":36221.1596323107,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"f8f5fc79-31b1-49c6-bdd9-2d72883b2364","savedPayload":{"position":{"x":28607.927468460777,"y":30172.197864218084},"targetPosition":{"x":28426.297139911647,"y":29891.544811075233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0dc0c256-7b9c-4e5c-bd09-c9d57ad86247","savedPayload":{"position":{"x":28426.297139911647,"y":29891.544811075233},"targetPosition":{"x":28203.466480660125,"y":29547.265437665657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"fc05ff9a-1f89-477c-9b23-5050bb7416b3","savedPayload":{"position":{"x":27865.994960161013,"y":30210.24761358412},"targetPosition":{"x":28017.87608240663,"y":29911.708396199938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"afb3ab65-a8a8-4926-bd7a-a309e73c76b4","savedPayload":{"position":{"x":28017.87608240663,"y":29911.708396199938},"targetPosition":{"x":28203.466480660125,"y":29547.265437665657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"80228bad-3498-456e-bdc6-8f8eb5868134","savedPayload":{"position":{"x":36092.81287582528,"y":31627.05717446837},"targetPosition":{"x":36084.96248238884,"y":31477.262744255182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"251e2560-de9e-4446-a6ad-ecb5545a59ee","savedPayload":{"position":{"x":26224.81369174499,"y":30488.489891126737},"targetPosition":{"x":26505.136475846037,"y":30307.05306825343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f36b38fb-f877-45a3-a632-f20bd3f9c671","savedPayload":{"position":{"x":26505.136475846037,"y":30307.05306825343},"targetPosition":{"x":26785.099778717806,"y":30125.022780267085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"14d0b5a0-d880-4f3a-8eb9-3357b8bfc0b6","savedPayload":{"position":{"x":26785.099778717806,"y":30125.022780267085},"targetPosition":{"x":27065.28934074679,"y":29942.73813534285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4c7accf9-edb5-403b-97cb-0ba11ba6c45c","savedPayload":{"position":{"x":27065.28934074679,"y":29942.73813534285},"targetPosition":{"x":27345.29333814085,"y":29760.58616749486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b44ca915-083c-4363-8172-c21805201845","savedPayload":{"position":{"x":27345.29333814085,"y":29760.58616749486},"targetPosition":{"x":27625.399419388432,"y":29578.6411308756},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"4164d2ed-edce-40e4-b22e-2dd6c5ef036a","savedPayload":{"position":{"x":27625.399419388432,"y":29578.6411308756},"targetPosition":{"x":27906.588855769256,"y":29395.610331584467},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"1670ca81-e7fa-4070-8534-0dd96fccc054","savedPayload":{"position":{"x":35959.161897197024,"y":31558.958599507438},"targetPosition":{"x":36084.96248238884,"y":31477.262744255182},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"1b95c0aa-9a01-4f10-8534-9932d3d95d7c","savedPayload":{"position":{"x":36084.96248238884,"y":31477.262744255182},"targetPosition":{"x":36221.1596323107,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Slow Run","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"5d268024-2d96-4094-b50f-b0a3cbf1b4f0","savedPayload":{"position":{"x":27475.480946995845,"y":29873.278969638945},"targetPosition":{"x":27492.482760731822,"y":29538.74069209266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"2dbdfc22-50a8-4adc-94f0-92cdc036fe2f","savedPayload":{"position":{"x":28089.86793479299,"y":30573.253248944435},"targetPosition":{"x":28081.224403526096,"y":30405.5901733598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7104f775-64e7-4d98-b7d8-39f6ef3d3055","savedPayload":{"position":{"x":28081.224403526096,"y":30405.5901733598},"targetPosition":{"x":28072.16415173052,"y":30228.47365001391},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"93c8c267-8c57-42eb-834c-1e5a22489094","savedPayload":{"position":{"x":28072.16415173052,"y":30228.47365001391},"targetPosition":{"x":28060.972172534286,"y":30011.948521485836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f3c1082e-25bb-4e2e-9db4-7920c77050b6","savedPayload":{"position":{"x":27193.42607846853,"y":29690.00004242394},"targetPosition":{"x":27492.482760731822,"y":29538.74069209266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"968b9847-e19a-4d7a-9744-ccf0f098e40a","savedPayload":{"position":{"x":27492.482760731822,"y":29538.74069209266},"targetPosition":{"x":27712.387671498203,"y":29200.78711753364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"53f5b5c3-ba67-453c-9c9f-4ce573a45cf7","savedPayload":{"position":{"x":27127.912703405476,"y":30100.178271251316},"targetPosition":{"x":27310.022519217717,"y":29819.639671039367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"9f500e15-05a0-49f2-acb6-22dc52e3a776","savedPayload":{"position":{"x":27310.022519217717,"y":29819.639671039367},"targetPosition":{"x":27492.43874968777,"y":29538.806781431063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"48f10387-f326-4021-ae7e-bf0c89f12f0e","savedPayload":{"position":{"x":35872.161819801935,"y":31471.95852211235},"targetPosition":{"x":35953.85767505419,"y":31346.157936920536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"be152b44-4a9c-4b16-9075-c727f4321c38","savedPayload":{"position":{"x":26976.44968098792,"y":29163.647057395647},"targetPosition":{"x":27158.301643132814,"y":28882.934157357806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"ad245a3c-c7dc-490b-8680-1ff6b9ef33c1","savedPayload":{"position":{"x":27074.195835863193,"y":29901.814884894433},"targetPosition":{"x":27214.949316844682,"y":29810.363446661504},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cdfff198-ce34-4a75-b7f9-ed8dee0ccc70","savedPayload":{"position":{"x":27214.949316844682,"y":29810.363446661504},"targetPosition":{"x":27371.48731652443,"y":29713.814685261183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"0633fc97-d2d0-405b-bed4-d390d30bb43c","savedPayload":{"position":{"x":27054.862647818118,"y":29559.844937101625},"targetPosition":{"x":27205.631922364144,"y":29635.463803370352},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8bb34027-c362-4abc-b722-e5b844113302","savedPayload":{"position":{"x":27205.631922364144,"y":29635.463803370352},"targetPosition":{"x":27371.48731652443,"y":29713.814685261183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3ee8f724-793b-444f-a773-de0d2d113be6","savedPayload":{"position":{"x":27371.48731652443,"y":29713.814685261183},"targetPosition":{"x":27587.56132038788,"y":29701.924252494697},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"113a609b-5d12-46d3-a15e-0f23f3d0b70f","savedPayload":{"position":{"x":27006.854172853746,"y":28584.79385705758},"targetPosition":{"x":27158.301643132814,"y":28882.934157357806},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"e256ad15-0e95-442a-8675-b24d7fe36118","savedPayload":{"position":{"x":27158.301643132814,"y":28882.934157357806},"targetPosition":{"x":27561.126870445787,"y":28903.741640753018},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.97} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"d2f712ac-98dc-41dc-b29e-260334b7cd69","savedPayload":{"position":{"x":26806.526165318504,"y":29199.860146358988},"targetPosition":{"x":26824.900950198196,"y":28865.726736929544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"629a5ecb-7ade-4453-89bb-1d1c5d5f96d9","savedPayload":{"position":{"x":15905.559889530748,"y":25200.809149782486},"targetPosition":{"x":15759.31975011624,"y":24889.059024174232},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c9b1b192-1698-44a7-a0f5-20d21088f280","savedPayload":{"position":{"x":15759.31975011624,"y":24889.059024174232},"targetPosition":{"x":15617.175506791995,"y":24570.197450148815},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0402e263-ac5c-4546-be68-8f33fdbf8666","savedPayload":{"position":{"x":15617.175506791995,"y":24570.197450148815},"targetPosition":{"x":15474.373594711426,"y":24247.02970849377},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"1fc1bb7a-a52b-4ce2-b17b-95194de42c8a","savedPayload":{"position":{"x":26467.238478120456,"y":28945.449395091346},"targetPosition":{"x":26824.900950198196,"y":28865.726736929544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"a0b6604b-8744-468d-8eb8-37266a7790bb","savedPayload":{"position":{"x":26701.52667180533,"y":27839.687641126133},"targetPosition":{"x":26981.75779943666,"y":28022.392274623322},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7a6659c-b0db-4966-875f-4f3c22448e5f","savedPayload":{"position":{"x":26981.75779943666,"y":28022.392274623322},"targetPosition":{"x":27262.299140053936,"y":28204.788038165956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"bba2d293-88c4-492f-94af-1b9619f740fd","savedPayload":{"position":{"x":26958.649955826924,"y":27608.094572306873},"targetPosition":{"x":27110.386089353135,"y":27906.47600911284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"20aebaee-eb59-4c3f-8c59-39349e032515","savedPayload":{"position":{"x":27110.386089353135,"y":27906.47600911284},"targetPosition":{"x":27262.299140053936,"y":28204.788038165956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"8419c8f8-b2b3-4d98-99e8-2506e40bdb02","savedPayload":{"position":{"x":27296.65091685469,"y":27536.047758623594},"targetPosition":{"x":27279.429647719586,"y":27870.452853650684},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0d40d31a-b3d2-4213-9ec0-16dfad84800c","savedPayload":{"position":{"x":27279.429647719586,"y":27870.452853650684},"targetPosition":{"x":27262.299140053936,"y":28204.788038165956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"1f20f276-1067-413d-9855-d5a8c3bf4dd5","savedPayload":{"position":{"x":27625.67938426883,"y":27642.833602628983},"targetPosition":{"x":27444.019097607794,"y":27923.85731245124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a699f92-494e-4078-b641-1c9c57ffc366","savedPayload":{"position":{"x":27444.019097607794,"y":27923.85731245124},"targetPosition":{"x":27262.299140053936,"y":28204.788038165956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"8522cf28-0d47-4049-a2d0-f859792cc083","savedPayload":{"position":{"x":27857.00766795425,"y":27899.76282612721},"targetPosition":{"x":27559.759830685027,"y":28052.3766582792},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0c5c7d7b-590f-4902-b44d-8609741d2b0c","savedPayload":{"position":{"x":27559.759830685027,"y":28052.3766582792},"targetPosition":{"x":27262.299140053936,"y":28204.788038165956},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa9bda47-780e-48ec-97bf-52f713be6d1c","savedPayload":{"position":{"x":27262.299140053936,"y":28204.788038165956},"targetPosition":{"x":27244.555251596103,"y":28553.7551017426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"0905efc2-d8c9-4b8b-b09f-de915fca26e4","savedPayload":{"position":{"x":26841.148321913766,"y":28531.446148457064},"targetPosition":{"x":26824.900950198196,"y":28865.726736929544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"dc4b92b2-3855-4cc7-84f5-20cc259c1634"}}}],"announcements":[],"id":"e6304ea5-e683-49c1-8e84-e2bc119565fa","savedPayload":{"position":{"x":26824.900950198196,"y":28865.726736929544},"targetPosition":{"x":27158.525475189537,"y":28882.946295957678},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"73870f3c-4fc8-464c-be6a-f5e397ee044e","savedPayload":{"position":{"x":26248.03233758868,"y":29048.621288451424},"targetPosition":{"x":26496.4968921357,"y":28824.195125046732},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"bc212a30-b2e9-435c-84a8-e505019c0570","savedPayload":{"position":{"x":26028.353993351095,"y":29198.927585204947},"targetPosition":{"x":26208.767372794104,"y":28919.074663244268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"19c71956-4d1e-4355-826e-5bc25d09fdc3","savedPayload":{"position":{"x":26208.767372794104,"y":28919.074663244268},"targetPosition":{"x":26393.104355894535,"y":28638.121604493295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"31e8935e-497f-47eb-9466-900faced609c","savedPayload":{"position":{"x":25796.716773218177,"y":28941.583887464818},"targetPosition":{"x":26092.874603300577,"y":28790.32403178882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"506df2ab-b891-4709-84e6-b773c8743abf","savedPayload":{"position":{"x":26092.874603300577,"y":28790.32403178882},"targetPosition":{"x":26393.104355894535,"y":28638.121604493295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"c1e44382-1537-453b-9f6c-52ef913228aa","savedPayload":{"position":{"x":25724.77479391031,"y":28603.415020562912},"targetPosition":{"x":26056.900961390682,"y":28621.143581060627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"928db494-0024-4ed4-a407-84087efb0704","savedPayload":{"position":{"x":26056.900961390682,"y":28621.143581060627},"targetPosition":{"x":26393.104355894535,"y":28638.121604493295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"8bae0609-ccff-480d-b382-b56f22ec8dc4","savedPayload":{"position":{"x":25831.72975198625,"y":28274.166713508945},"targetPosition":{"x":26110.420005121778,"y":28456.446141295695},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"98ac2a8f-4541-46de-8e01-f9709d6b195f","savedPayload":{"position":{"x":26110.420005121778,"y":28456.446141295695},"targetPosition":{"x":26393.104355894535,"y":28638.121604493295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div previous ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"a5a3a569-6a05-4fd0-8c15-22d5e5d1b148","savedPayload":{"position":{"x":26088.90809861319,"y":28042.503617409915},"targetPosition":{"x":26239.081121089148,"y":28340.563300837835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2adc3c50-f284-4fb1-9f79-b077a54b5046","savedPayload":{"position":{"x":26239.081121089148,"y":28340.563300837835},"targetPosition":{"x":26393.104355894535,"y":28638.121604493295},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c91df057-7904-431b-b997-8fbb2afada1f","savedPayload":{"position":{"x":26393.104355894535,"y":28638.121604493295},"targetPosition":{"x":26742.412820854453,"y":28656.168550955437},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"8196d5fe-af67-4302-84d1-f95279fb2075","savedPayload":{"position":{"x":26069.18570353877,"y":28841.530533700978},"targetPosition":{"x":26496.4968921357,"y":28824.195125046732},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"dc4b92b2-3855-4cc7-84f5-20cc259c1634"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"60d1211f-6279-4c80-abe5-e727a70aea22","savedPayload":{"position":{"x":25807.81630491511,"y":28176.935630633474},"targetPosition":{"x":26124.823384703996,"y":28279.31120861342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6659d86a-2e52-48b2-bcc4-5f5b43b3907e","savedPayload":{"position":{"x":26124.823384703996,"y":28279.31120861342},"targetPosition":{"x":26443.505244366876,"y":28383.333566245587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"5ce2e13e-4b4f-424b-b4ee-1741c013690b","savedPayload":{"position":{"x":26302.94257617406,"y":27729.37589046664},"targetPosition":{"x":26373.78128491369,"y":28056.170727584373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"38aa2600-90dc-4c6b-be17-a08ee9c829b3","savedPayload":{"position":{"x":26373.78128491369,"y":28056.170727584373},"targetPosition":{"x":26443.505244366876,"y":28383.333566245587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fd092801-0b6b-4f09-bbb3-b16fe1144ae3","savedPayload":{"position":{"x":26443.505244366876,"y":28383.333566245587},"targetPosition":{"x":26677.891049279853,"y":28643.904594388354},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"4b4f5de5-723c-4d6e-b26e-50ee87671f48","savedPayload":{"position":{"x":26272.867042315393,"y":28575.16112899709},"targetPosition":{"x":26496.4968921357,"y":28824.195125046732},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"e6304ea5-e683-49c1-8e84-e2bc119565fa"}}}],"announcements":[],"id":"ad2a51aa-b179-457e-9704-5c9b1a8db72e","savedPayload":{"position":{"x":26496.4968921357,"y":28824.195125046732},"targetPosition":{"x":26824.900950198196,"y":28865.726736929544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"d29e9a58-79bb-445f-b51a-e5b86937aa8c","savedPayload":{"position":{"x":26318.095607049818,"y":29177.268994210433},"targetPosition":{"x":26558.044634162423,"y":28806.381178237985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"59efd870-0af2-4d5c-a78c-281b71f00497","savedPayload":{"position":{"x":19463.035973888967,"y":27429.52738207017},"targetPosition":{"x":19296.638884308486,"y":27055.581126703888},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"31c9eb9e-6567-4866-b3de-cf7ac4fa0126","savedPayload":{"position":{"x":19296.638884308486,"y":27055.581126703888},"targetPosition":{"x":19130.136941097997,"y":26681.4253898827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"0dd58774-bae1-48f4-bb2a-ff3af03d885b","savedPayload":{"position":{"x":18649.23745449695,"y":27343.99223901747},"targetPosition":{"x":18889.65788302903,"y":27012.787568933236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8894b26-93ec-450a-9cbf-2462e442a7bc","savedPayload":{"position":{"x":18889.65788302903,"y":27012.787568933236},"targetPosition":{"x":19130.136941097997,"y":26681.4253898827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1141841-95d0-4c98-b77e-16eb893e6b19","savedPayload":{"position":{"x":19130.136941097997,"y":26681.4253898827},"targetPosition":{"x":19172.682421992497,"y":26273.89343075238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5a854197-4f85-4f31-bf5e-c9acff5a60cc","savedPayload":{"position":{"x":26191.609018402596,"y":28569.316216322608},"targetPosition":{"x":26558.044634162423,"y":28806.381178237985},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"e6304ea5-e683-49c1-8e84-e2bc119565fa"}}}],"announcements":[],"id":"dc4b92b2-3855-4cc7-84f5-20cc259c1634","savedPayload":{"position":{"x":26185.755791523698,"y":28798.31681169135},"targetPosition":{"x":26496.4968921357,"y":28824.195125046732},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6b48bcff-79c4-4705-82ac-3666914c8628","savedPayload":{"position":{"x":35804.063244841,"y":31338.307543484094},"targetPosition":{"x":35953.85767505419,"y":31346.157936920536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"657399d3-c55b-46b6-8ef6-bf1ed183c48f","savedPayload":{"position":{"x":35953.85767505419,"y":31346.157936920536},"targetPosition":{"x":36221.1596323107,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"c6b77baa-76fc-47b1-b051-2f3ff3406f57","savedPayload":{"position":{"x":27049.725706437093,"y":29208.31610012851},"targetPosition":{"x":27259.993364448204,"y":28949.199604844944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c377d2d0-923e-48bc-8d52-dabd2aa3cddd","savedPayload":{"position":{"x":27259.993364448204,"y":28949.199604844944},"targetPosition":{"x":27518.84362604557,"y":28631.076500627263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"1a506022-94a8-4002-a4e9-fb5be6bb08f7","savedPayload":{"position":{"x":26784.75060476659,"y":28514.861545888067},"targetPosition":{"x":27115.108440631466,"y":28567.02125805054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a763470c-36d8-4f0a-bf43-d4bf56fdc8f2","savedPayload":{"position":{"x":27115.108440631466,"y":28567.02125805054},"targetPosition":{"x":27518.84362604557,"y":28631.076500627263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"acf03a63-b313-4815-8b9e-f0076133d831","savedPayload":{"position":{"x":35784.816066157575,"y":31216.7856399184},"targetPosition":{"x":35924.85313013216,"y":31163.030447486602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"0dea584c-fc00-490a-9ed3-a9ea73f8fa82","savedPayload":{"position":{"x":28500.84924955325,"y":28087.26390528551},"targetPosition":{"x":28460.27346400518,"y":27895.084373412057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f38d1558-0d76-4dbb-8376-23fad6c5b7b0","savedPayload":{"position":{"x":28460.27346400518,"y":27895.084373412057},"targetPosition":{"x":28419.59213286936,"y":27702.230894377055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c4f496ed-74ae-4538-b71d-062ec523fb02","savedPayload":{"position":{"x":28419.59213286936,"y":27702.230894377055},"targetPosition":{"x":28370.06371187106,"y":27467.696353856452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"1b0a6e1c-0fe1-4852-9830-5827fd04f468","savedPayload":{"position":{"x":26732.903828952658,"y":27625.28744419892},"targetPosition":{"x":26992.81690643062,"y":27835.592763632987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa11a0a2-17b9-43be-a734-a5643da1dbb1","savedPayload":{"position":{"x":26992.81690643062,"y":27835.592763632987},"targetPosition":{"x":27252.13830183545,"y":28045.397716781292},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"8313a81f-a159-437e-b0a6-516dd5cfd3c8","savedPayload":{"position":{"x":27252.13830183545,"y":28045.397716781292},"targetPosition":{"x":27570.16699506435,"y":28302.793921554556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e8a01f89-65e9-4758-a6b4-b5fad0ef7297","savedPayload":{"position":{"x":35808.28123591361,"y":31068.632388829126},"targetPosition":{"x":35924.85313013216,"y":31163.030447486602},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"80f7f0a4-4572-4bea-b440-b5bd1fec32c1","savedPayload":{"position":{"x":35924.85313013216,"y":31163.030447486602},"targetPosition":{"x":36221.1596323107,"y":31209.960786998672},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b27aa9de-ced9-4e53-941c-499bab212f80","savedPayload":{"position":{"x":36221.1596323107,"y":31209.960786998672},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S6 - 2H Up","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"873a72fd-cc23-4965-ae29-5b2b70d85cb9","savedPayload":{"position":{"x":36969.351645590534,"y":32075.37572334243},"targetPosition":{"x":36521.816792674814,"y":32028.337914871987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"087962b5-2546-4472-b71c-b161f0013b1c","savedPayload":{"position":{"x":36521.816792674814,"y":32028.337914871987},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"c72459a6-49d5-4021-b6e3-4a8c374b6b4b","savedPayload":{"position":{"x":36914.50432360657,"y":32303.831260992312},"targetPosition":{"x":36494.39313168283,"y":32142.56568369693},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"48333f2b-d8c7-4a92-bf5d-b8c9a8de4196","savedPayload":{"position":{"x":36494.39313168283,"y":32142.56568369693},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"8488937e-9b92-4562-b89c-a4d6c6dd8ee2","savedPayload":{"position":{"x":36802.397234696546,"y":32510.306833464772},"targetPosition":{"x":36438.33958722782,"y":32245.80346993316},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ec9b3ba8-d6a4-4cb0-8679-a8daa868e549","savedPayload":{"position":{"x":36438.33958722782,"y":32245.80346993316},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"02H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"ade6a251-d161-467d-8e94-45cfdadf536b","savedPayload":{"position":{"x":36640.67029170395,"y":32680.73147171282},"targetPosition":{"x":36357.47611573152,"y":32331.015789057183},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7499f60b-762e-4b37-a66d-2872755620c4","savedPayload":{"position":{"x":36357.47611573152,"y":32331.015789057183},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"04H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"3beea11e-ff4a-4e39-97d0-97563dacfb09","savedPayload":{"position":{"x":36440.34491852732,"y":32803.491018279885},"targetPosition":{"x":36257.31342914321,"y":32392.395562340716},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e0650fa-cd1b-4770-81b2-06d677c73510","savedPayload":{"position":{"x":36257.31342914321,"y":32392.395562340716},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"01H Med, Steep o Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"276b36c3-c0ca-45d6-a659-c40dac406f46","savedPayload":{"position":{"x":36215.072958295306,"y":32870.219612937166},"targetPosition":{"x":36144.6774490272,"y":32425.759859669357},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"904385e8-8b04-4c0c-9961-98b10184e976","savedPayload":{"position":{"x":36144.6774490272,"y":32425.759859669357},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"a49fbb15-05db-4a21-b59b-662a6d84c999","savedPayload":{"position":{"x":35980.20632281821,"y":32876.36981223299},"targetPosition":{"x":36027.24413128865,"y":32428.834959317268},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"89591bf6-dabe-4ba6-b2d8-4580a2c75b0a","savedPayload":{"position":{"x":36027.24413128865,"y":32428.834959317268},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Side or Medium","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\" || chart.at02hs.bollingerSubChannel.slope === \"Medium\"","project":"Superalgos","id":"bb0016e9-0b74-4595-b450-209487362f00","savedPayload":{"position":{"x":35751.75078516832,"y":32821.52249024902},"targetPosition":{"x":35913.016362463706,"y":32401.411298325285},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad9f8e37-16b5-4245-9492-0192ef168849","savedPayload":{"position":{"x":35913.016362463706,"y":32401.411298325285},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"1e3c7245-5582-4af5-9527-5dddf151b976","savedPayload":{"position":{"x":35545.275212695866,"y":32709.415401338996},"targetPosition":{"x":35809.77857622748,"y":32345.35775387027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"440d6ea0-2ee2-408a-a556-18d4c53dda17","savedPayload":{"position":{"x":35809.77857622748,"y":32345.35775387027},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 4: 02H Up && 02H Gentle && 3H Side","code":"chart.at02hs.percentageBandwidth.movingAverage > chart.at24hs.bollingerSubChannel.slope + chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Gentle\" && chart.at03hs.bollingerSubChannel.slope === \"Side\") {false} else {true}","project":"Superalgos","id":"d4189ed6-4d0f-45ea-b1ae-dbdb8f2e0e2c","savedPayload":{"position":{"x":35374.85057444782,"y":32547.688458346398},"targetPosition":{"x":35724.566257103455,"y":32264.49428237397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"01875e5f-f718-4047-baa4-c91930dd6c86","savedPayload":{"position":{"x":35724.566257103455,"y":32264.49428237397},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H NOT Steep","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope != \"Steep\"","project":"Superalgos","id":"350d4a04-700f-4f33-960e-d267e00cec51","savedPayload":{"position":{"x":35252.09102788076,"y":32347.363085169764},"targetPosition":{"x":35663.186483819925,"y":32164.331595785654},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bda747f3-188e-4ed0-82bf-b600a9a9c3f5","savedPayload":{"position":{"x":35663.186483819925,"y":32164.331595785654},"targetPosition":{"x":36074.281939759094,"y":31981.300106401544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7ec2e400-1608-44b5-8ae4-ac4f815e76f5","savedPayload":{"position":{"x":36074.281939759094,"y":31981.300106401544},"targetPosition":{"x":36003.88643049099,"y":31536.84035313373},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"0499e109-2786-4159-b79a-c6c24ebac150","savedPayload":{"position":{"x":36003.88643049099,"y":31536.84035313373},"targetPosition":{"x":35956.95609097892,"y":31240.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"3ed33d07-ff92-4ecc-81cd-8d9318f5a3a2","savedPayload":{"position":{"x":27191.12296133197,"y":29716.243609176352},"targetPosition":{"x":27377.738829669343,"y":29458.71379958673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40eeff59-ef6d-456b-9662-2590ba1f90b8","savedPayload":{"position":{"x":27377.738829669343,"y":29458.71379958673},"targetPosition":{"x":27561.920451623086,"y":29202.46758500435},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"208d89cb-60a9-461f-a8d2-a9d185ca3c5a","savedPayload":{"position":{"x":27561.920451623086,"y":29202.46758500435},"targetPosition":{"x":27773.480418607145,"y":28913.14498634928},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"77ac2dcd-e4a4-4a8f-8c71-d8a30fa7a508","savedPayload":{"position":{"x":35868.78830313505,"y":31361.886400111434},"targetPosition":{"x":35956.95609097892,"y":31240.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"0c4f8301-8084-4276-a901-5e8137867ea0","savedPayload":{"position":{"x":27086.907194471303,"y":29731.848056892108},"targetPosition":{"x":27136.186896957664,"y":29260.61912076745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c407af9c-fe4a-4d5a-9446-25fc7284ee5c","savedPayload":{"position":{"x":27136.186896957664,"y":29260.61912076745},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"6f84e4e1-1174-4eea-b92a-fdb64cdded61","savedPayload":{"position":{"x":26845.918895478728,"y":29674.537247104832},"targetPosition":{"x":27015.630716665,"y":29232.105434877696},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"56b51e70-1cfd-403a-809d-ee19347ca315","savedPayload":{"position":{"x":27015.630716665,"y":29232.105434877696},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"f3b540af-68c9-4345-9826-faf0d9e6e04c","savedPayload":{"position":{"x":26628.62692066829,"y":29555.92262433069},"targetPosition":{"x":26907.1042263863,"y":29172.56413883521},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f4cdcc47-9a5d-4999-9c11-8fd1c19a5424","savedPayload":{"position":{"x":26907.1042263863,"y":29172.56413883521},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"02H Up","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerChannel.direction === \"Up\"","project":"Superalgos","id":"0f3ff1d1-ff82-42da-a526-aff486cbc0bb","savedPayload":{"position":{"x":26449.32682291438,"y":29385.73679848163},"targetPosition":{"x":26817.501574532795,"y":29087.407089369903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0835043e-d8e1-424e-a530-1def860228eb","savedPayload":{"position":{"x":26817.501574532795,"y":29087.407089369903},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"04H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"54f8e8ae-578f-461d-9ed2-9f352395dd19","savedPayload":{"position":{"x":26319.746148423903,"y":29174.751321281765},"targetPosition":{"x":26752.567672130415,"y":28982.055216679604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"feb6ba85-a9c1-40af-9e6b-00bd4ef1480b","savedPayload":{"position":{"x":26752.567672130415,"y":28982.055216679604},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"01H Med, Steep o Extreme","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.slope === \"Medium\" || chart.at01hs.bollingerSubChannel.slope === \"Steep\" || chart.at01hs.bollingerSubChannel.slope === \"Extreme\"","project":"Superalgos","id":"949100cd-882b-4c11-b010-dbbfd5fff6f5","savedPayload":{"position":{"x":26249.186023148588,"y":28937.760308931167},"targetPosition":{"x":26717.284346085053,"y":28863.46020015207},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d3f463af-4e6d-493b-bc8f-e4c66ffc8567","savedPayload":{"position":{"x":26717.284346085053,"y":28863.46020015207},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"b6856a8d-7a24-4a5f-a449-de2d32fe63be","savedPayload":{"position":{"x":26242.81071916784,"y":28690.725431010862},"targetPosition":{"x":26714.317404483096,"y":28740.081788845826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"37a6e660-f28f-4bd2-99ea-3c2f46d2a36c","savedPayload":{"position":{"x":26714.317404483096,"y":28740.081788845826},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Side or Medium","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\" || chart.at02hs.bollingerSubChannel.slope === \"Medium\"","project":"Superalgos","id":"08d54285-d07e-4cec-8f13-a2f268a569a2","savedPayload":{"position":{"x":26300.684954876546,"y":28450.323577901094},"targetPosition":{"x":26743.1035762783,"y":28619.805790008024},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e0208159-e2c5-4fa4-8658-714af9cc91bd","savedPayload":{"position":{"x":26743.1035762783,"y":28619.805790008024},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"36e3a366-1402-4953-8283-9a4131d304b2","savedPayload":{"position":{"x":26418.450565413492,"y":28233.020461592205},"targetPosition":{"x":26802.211538255524,"y":28511.384876368975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d4dc8ef4-ba98-4843-9ef5-16a649541da1","savedPayload":{"position":{"x":26802.211538255524,"y":28511.384876368975},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 4: 02H Up && 02H Gentle && 3H Side","code":"chart.at02hs.percentageBandwidth.movingAverage > chart.at24hs.bollingerSubChannel.slope + chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at02hs.bollingerChannel.direction === \"Up\" && chart.at02hs.bollingerSubChannel.slope === \"Gentle\" && chart.at03hs.bollingerSubChannel.slope === \"Side\") {false} else {true}","project":"Superalgos","id":"f24fcdcf-8844-4f08-a9f2-3b56471a6dde","savedPayload":{"position":{"x":26588.694084927174,"y":28053.188560777176},"targetPosition":{"x":26887.11975734347,"y":28421.247395206883},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2f6a17d7-7a2e-4aa2-b120-d22cb0898194","savedPayload":{"position":{"x":26887.11975734347,"y":28421.247395206883},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H NOT Steep","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope != \"Steep\"","project":"Superalgos","id":"5e74fc74-6684-4675-ba35-4ce3fee27b2a","savedPayload":{"position":{"x":26799.37424013185,"y":27924.023657047102},"targetPosition":{"x":26992.402595936335,"y":28356.65803435196},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"cc3b8326-99cd-431c-8b27-c85322f6413f","savedPayload":{"position":{"x":26992.402595936335,"y":28356.65803435196},"targetPosition":{"x":27185.531679057593,"y":28789.21376031469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e5d2fd0e-f202-44e7-bf4c-32d3a203528e","savedPayload":{"position":{"x":27185.531679057593,"y":28789.21376031469},"targetPosition":{"x":27653.698233435276,"y":28714.73585027655},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"08776dac-4836-413b-ad45-fdfa781b031c","savedPayload":{"position":{"x":35660.64958880038,"y":31287.46419046726},"targetPosition":{"x":35956.95609097892,"y":31240.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"5724bd17-a57c-4ec4-9389-170c4255a2d5","savedPayload":{"position":{"x":35956.95609097892,"y":31240.53385095519},"targetPosition":{"x":36133.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"a71b344d-8e76-4a30-9e8f-bcec9a1dde5f","savedPayload":{"position":{"x":27366.05287739506,"y":29283.577378516522},"targetPosition":{"x":27432.11136876051,"y":28973.676098327298},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bc478bd-5433-458e-aae2-fd9926628d7c","savedPayload":{"position":{"x":27432.11136876051,"y":28973.676098327298},"targetPosition":{"x":27517.379780218238,"y":28575.359040835086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"68e2c2b7-d7e0-45e1-8a3e-a8244aad2661","savedPayload":{"position":{"x":26831.744242266795,"y":28798.204323818994},"targetPosition":{"x":27131.66661288605,"y":28700.697023173343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c49d20d7-1771-4c3e-af23-7a28193d3241","savedPayload":{"position":{"x":27131.66661288605,"y":28700.697023173343},"targetPosition":{"x":27517.379780218238,"y":28575.359040835086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"664dc863-9fc1-48ab-bd68-a34297f47da8","savedPayload":{"position":{"x":35747.605120824286,"y":31202.005574776802},"targetPosition":{"x":35847.974711778115,"y":31090.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"30d7a26c-2936-49a6-b98d-4438ce18bc90","savedPayload":{"position":{"x":25557.833970556716,"y":27881.17700773019},"targetPosition":{"x":25866.60094761101,"y":27946.600509743002},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e991cc1d-9eee-41c5-82e3-4839b8efc76a","savedPayload":{"position":{"x":25866.60094761101,"y":27946.600509743002},"targetPosition":{"x":26175.58920980207,"y":28012.053065601387},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"eb5f0809-efce-4847-9222-338f44ff79f8","savedPayload":{"position":{"x":26175.58920980207,"y":28012.053065601387},"targetPosition":{"x":26484.62772761929,"y":28077.4965385252},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"be27c682-b993-408f-827b-e407c80bb3ef","savedPayload":{"position":{"x":26484.62772761929,"y":28077.4965385252},"targetPosition":{"x":26793.516800737674,"y":28142.881981467945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"17db69f2-c7ad-47ec-ad5e-1fff5d2d431e","savedPayload":{"position":{"x":26793.516800737674,"y":28142.881981467945},"targetPosition":{"x":27102.60601375657,"y":28208.22785389881},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"87120599-bb06-4e3d-879a-bb234393d074","savedPayload":{"position":{"x":27102.60601375657,"y":28208.22785389881},"targetPosition":{"x":27420.189129001606,"y":28275.134309466885},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"7472854b-e09a-414c-b02a-36cf74c318d2","savedPayload":{"position":{"x":35701.25257166805,"y":31059.347097332527},"targetPosition":{"x":35847.974711778115,"y":31090.53385095519},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"bd075559-4607-490b-bcd6-efdc54a5010a","savedPayload":{"position":{"x":35847.974711778115,"y":31090.53385095519},"targetPosition":{"x":36133.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"7fdf974e-fda6-4d8c-89b9-27d07cf1d1dc","savedPayload":{"position":{"x":26799.265743562526,"y":28309.623815175553},"targetPosition":{"x":27034.386276528814,"y":28097.401331862027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"c2a3eae6-8f54-4697-83b5-a4250a61e707","savedPayload":{"position":{"x":26547.086185442487,"y":28892.1580344932},"targetPosition":{"x":26696.624182113846,"y":28843.370582867596},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"008bcd0e-5d78-4d73-846c-404ba758c324","savedPayload":{"position":{"x":26696.624182113846,"y":28843.370582867596},"targetPosition":{"x":26867.047142507075,"y":28787.65886324944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"509f7658-04d9-4bfc-9834-a6a40839c6bb","savedPayload":{"position":{"x":26867.047142507075,"y":28787.65886324944},"targetPosition":{"x":27066.405283349402,"y":28722.511566283458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b6412415-9393-4222-84c0-3010a793e7b3","savedPayload":{"position":{"x":26733.142549575216,"y":27998.621659097662},"targetPosition":{"x":27034.386276528814,"y":28097.401331862027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"1b7b1c18-8632-40da-91c1-ca78dc524027","savedPayload":{"position":{"x":27034.386276528814,"y":28097.401331862027},"targetPosition":{"x":27419.951996781874,"y":28015.86203334524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"a32cdd1e-19ce-4bcc-b7c9-52a9e9466dbf","savedPayload":{"position":{"x":26414.76119920261,"y":28228.780429674436},"targetPosition":{"x":26724.658907174922,"y":28163.136235075326},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"291bbfda-c1d5-49f6-966b-3f7704ffbda8","savedPayload":{"position":{"x":26724.658907174922,"y":28163.136235075326},"targetPosition":{"x":27034.386276528814,"y":28097.401331862027},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bbb0aab4-c6e3-47f8-b737-9e6fcafcfba1","savedPayload":{"position":{"x":35701.25257166805,"y":30936.31040795289},"targetPosition":{"x":35847.974711778115,"y":30905.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"f65bed6b-e9c5-48aa-ae59-a8beb0c8fdcc","savedPayload":{"position":{"x":26952.704147472698,"y":27327.068946922795},"targetPosition":{"x":27254.368114363282,"y":27423.4387791013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"a9133dde-603b-4e92-9278-fd6e3e8e8889","savedPayload":{"position":{"x":26586.412508962363,"y":27681.68879929502},"targetPosition":{"x":26741.1300197691,"y":27714.100794910577},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5d40017f-c899-4a2e-9425-fef134a4f4ca","savedPayload":{"position":{"x":26741.1300197691,"y":27714.100794910577},"targetPosition":{"x":26921.561745283954,"y":27760.13052179364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"b74b392c-ddfc-4021-9dfe-c3d385d4dba6","savedPayload":{"position":{"x":26806.5797480703,"y":27436.524339736898},"targetPosition":{"x":26855.72255347063,"y":27586.848473351987},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"052730c4-33a8-4ee9-80c6-3fb61118d2bf","savedPayload":{"position":{"x":26855.72255347063,"y":27586.848473351987},"targetPosition":{"x":26921.561745283954,"y":27760.13052179364},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d75acbba-54eb-4a90-b76e-8649c08cbec0","savedPayload":{"position":{"x":26921.561745283954,"y":27760.13052179364},"targetPosition":{"x":27077.345235898825,"y":27899.36180329896},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c2f90327-7f61-4d94-84f9-fcd82b5aa44d","savedPayload":{"position":{"x":27189.66866618138,"y":27113.5490051409},"targetPosition":{"x":27254.368114363282,"y":27423.4387791013},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"48071c89-de62-467f-a472-10557ba6277f","savedPayload":{"position":{"x":27254.368114363282,"y":27423.4387791013},"targetPosition":{"x":27518.062020137797,"y":27715.896282526744},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.97} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"34d1cb14-5351-42d4-8827-b2b0aa013b99","savedPayload":{"position":{"x":26807.09674076735,"y":27400.603304659817},"targetPosition":{"x":27042.388961217304,"y":27188.465791753944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"6f6150fc-3a6a-4686-a350-ff141bc83623","savedPayload":{"position":{"x":14784.053958482124,"y":25069.067305926896},"targetPosition":{"x":14637.813819067615,"y":24757.31718031864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3ef9a345-0c46-428c-94f3-80decc872e23","savedPayload":{"position":{"x":14637.813819067615,"y":24757.31718031864},"targetPosition":{"x":14495.66957574337,"y":24438.455606293224},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d34694ed-b6c6-4fca-ae8d-95e3f30a4888","savedPayload":{"position":{"x":14495.66957574337,"y":24438.455606293224},"targetPosition":{"x":14352.8676636628,"y":24115.28786463818},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"0be8dfdf-f4ff-4616-b788-c04b3c64eb1b","savedPayload":{"position":{"x":26901.71990179922,"y":27024.15277115845},"targetPosition":{"x":27042.388961217304,"y":27188.465791753944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"45b5b7a2-8cc1-47f8-99c5-8042c7925a89","savedPayload":{"position":{"x":27658.025002805498,"y":26426.085377108873},"targetPosition":{"x":27723.56989887507,"y":26735.456650919034},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9bb86da8-d8fa-4b5c-b6a5-952327938371","savedPayload":{"position":{"x":27723.56989887507,"y":26735.456650919034},"targetPosition":{"x":27789.15471152965,"y":27045.25274928249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"05f551c5-32a7-4986-8753-5ac0bd0d4acc","savedPayload":{"position":{"x":27984.616542289543,"y":26443.133902054753},"targetPosition":{"x":27886.95621955133,"y":26743.96066903473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9ba9b517-a809-4b01-848f-5bb31ab1f92c","savedPayload":{"position":{"x":27886.95621955133,"y":26743.96066903473},"targetPosition":{"x":27789.15471152965,"y":27045.25274928249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"c7001aa3-f176-40e4-a6d7-2744966363cd","savedPayload":{"position":{"x":28259.227163223004,"y":26621.283089584525},"targetPosition":{"x":28024.291391877065,"y":26833.10787628452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"094200d6-3761-4dd0-8073-083d14bbeb71","savedPayload":{"position":{"x":28024.291391877065,"y":26833.10787628452},"targetPosition":{"x":27789.15471152965,"y":27045.25274928249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"aaee1ab9-d92b-4f01-afc1-654347d9511a","savedPayload":{"position":{"x":28407.924367825308,"y":26912.750504775722},"targetPosition":{"x":28098.696790438462,"y":26978.890307231173},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9143d8e3-b435-49f2-907e-a874e794d32a","savedPayload":{"position":{"x":28098.696790438462,"y":26978.890307231173},"targetPosition":{"x":27789.15471152965,"y":27045.25274928249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"9e27b341-5396-4a81-b483-13c9e497f3c4","savedPayload":{"position":{"x":28390.80364005569,"y":27238.838363839088},"targetPosition":{"x":28090.14902776395,"y":27142.022560978214},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"77518efa-2184-4602-8f5a-f3e106c6845c","savedPayload":{"position":{"x":28090.14902776395,"y":27142.022560978214},"targetPosition":{"x":27789.15471152965,"y":27045.25274928249},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9d8fbd63-29f2-41f9-85f1-92643ff12c6d","savedPayload":{"position":{"x":27789.15471152965,"y":27045.25274928249},"targetPosition":{"x":27540.59184881964,"y":27269.737387375048},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a92424e5-ab90-424c-85cc-b8697bcb6009","savedPayload":{"position":{"x":27277.88526191553,"y":26976.52819796292},"targetPosition":{"x":27042.388961217304,"y":27188.465791753944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"8aff2c3b-ecf9-4df8-84ea-ffd6ba9c9612"}}}],"announcements":[],"id":"58effb7e-0927-4c47-8745-58895dead2ea","savedPayload":{"position":{"x":27042.388961217304,"y":27188.465791753944},"targetPosition":{"x":27254.196720956894,"y":27423.250609095536},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"49b3a850-8a9e-41c7-8b5f-e5f3a21ce83d","savedPayload":{"position":{"x":26497.508319854816,"y":26919.743468851586},"targetPosition":{"x":26813.41806607467,"y":26936.396016420636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"c6bc7845-b742-4bd0-a28e-f76bafd9ae16","savedPayload":{"position":{"x":31453.226323361007,"y":25215.258417524892},"targetPosition":{"x":31462.162939478927,"y":25569.916512643897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0dea846d-7054-4651-9c26-e34941dd4128","savedPayload":{"position":{"x":31462.162939478927,"y":25569.916512643897},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"9ef393ca-8c24-4089-a87e-8ce151f2b828","savedPayload":{"position":{"x":31725.70257649751,"y":25262.06062721915},"targetPosition":{"x":31598.5193552653,"y":25593.24491133385},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6be2982e-d239-488c-aa26-68e9b2a7af09","savedPayload":{"position":{"x":31598.5193552653,"y":25593.24491133385},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"69018aba-59d9-4f07-a2d5-d93c75981c93","savedPayload":{"position":{"x":31959.976711177063,"y":25409.851846470818},"targetPosition":{"x":31715.767373381706,"y":25667.1500898203},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6ce688b0-0234-4ad1-8afa-540325306d5c","savedPayload":{"position":{"x":31715.767373381706,"y":25667.1500898203},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"b882f3e8-28e5-49f8-90a1-c27ac4723c90","savedPayload":{"position":{"x":32119.863560570913,"y":25635.84017379446},"targetPosition":{"x":31795.724431882918,"y":25780.13258139456},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d21fc9d4-bec7-4df6-9083-203e877f30de","savedPayload":{"position":{"x":31795.724431882918,"y":25780.13258139456},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"2d8c394e-6772-4d45-a052-a5c04202637c","savedPayload":{"position":{"x":32180.94951857139,"y":25905.955517029506},"targetPosition":{"x":31826.22036398195,"y":25915.273245835204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"577a9703-74fb-4ea1-9e6d-1a6083c6ac29","savedPayload":{"position":{"x":31826.22036398195,"y":25915.273245835204},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14 > chart.at01hs.base7EMA.previous.previous.ema21 - chart.at01hs.base7EMA.previous.previous.ema14","project":"Superalgos","id":"af2fed7e-8530-49cb-8d8c-818c0dfd3865","savedPayload":{"position":{"x":32134.06519033824,"y":26178.34746016506},"targetPosition":{"x":31802.77317185179,"y":26051.43779053491},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8b902eb1-aaaf-41e5-abab-95f7673e1ff5","savedPayload":{"position":{"x":31802.77317185179,"y":26051.43779053491},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2 previous ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7 > chart.at01hs.base7EMA.previous.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.previous.ema7","project":"Superalgos","id":"2a5efff2-2a04-4585-813e-e3ac2ffb8b95","savedPayload":{"position":{"x":31986.51303887656,"y":26412.48674522622},"targetPosition":{"x":31728.883964673718,"y":26168.510294319094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"081cec88-c2c1-49f8-88c1-760fc50e7f91","savedPayload":{"position":{"x":31728.883964673718,"y":26168.510294319094},"targetPosition":{"x":31471.265604665605,"y":25924.673587525336},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7abbde01-e871-4b28-973e-51ca5f3f1c4d","savedPayload":{"position":{"x":31471.265604665605,"y":25924.673587525336},"targetPosition":{"x":31136.857003796606,"y":26073.74504896134},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"276723b8-0d32-49d8-b9b3-bd29368160f7","savedPayload":{"position":{"x":26681.250386294912,"y":26760.768118645},"targetPosition":{"x":26813.41806607467,"y":26936.396016420636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"8aff2c3b-ecf9-4df8-84ea-ffd6ba9c9612"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"16b5e57d-57f9-401a-9134-4dd112797d48","savedPayload":{"position":{"x":31900.431671067643,"y":26457.001353980566},"targetPosition":{"x":31576.330480092503,"y":26601.042576950604},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f2bb1dbc-702a-413a-9421-9ac5309fe6f0","savedPayload":{"position":{"x":31576.330480092503,"y":26601.042576950604},"targetPosition":{"x":31252.153265805107,"y":26745.17244006823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"f73c271b-afa2-45ee-91d4-6aee3b3a8be9","savedPayload":{"position":{"x":31914.623577701415,"y":26999.186410527094},"targetPosition":{"x":31583.455308704193,"y":26872.189703330594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"feaca6ce-0573-401a-909a-4e25687ce708","savedPayload":{"position":{"x":31583.455308704193,"y":26872.189703330594},"targetPosition":{"x":31252.153265805107,"y":26745.17244006823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2 prev.ema7 div 2 prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7 > chart.at01hs.base7EMA.previous.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.previous.ema7","project":"Superalgos","id":"a9c93bde-d56d-42e9-a447-b29a02885149","savedPayload":{"position":{"x":31541.18395690678,"y":27392.918610118708},"targetPosition":{"x":31396.647076390393,"y":27069.072814541374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"72e2d105-feba-47a0-8eaf-6c83296a3863","savedPayload":{"position":{"x":31396.647076390393,"y":27069.072814541374},"targetPosition":{"x":31252.153265805107,"y":26745.17244006823},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ab94fcaf-55b6-4be2-a44a-b399dda60644","savedPayload":{"position":{"x":31252.153265805107,"y":26745.17244006823},"targetPosition":{"x":30910.1383941139,"y":26614.037899048395},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"07ca2734-a819-49f7-99f7-f19f58e5ffba","savedPayload":{"position":{"x":26830.59932597279,"y":26619.397312943503},"targetPosition":{"x":26813.41806607467,"y":26936.396016420636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"58effb7e-0927-4c47-8745-58895dead2ea"}}}],"announcements":[],"id":"e1d12230-902a-46bf-bb48-1fafbd162e1e","savedPayload":{"position":{"x":26813.41806607467,"y":26936.396016420636},"targetPosition":{"x":27042.388961217304,"y":27188.465791753944},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"b53c2ea8-9341-416a-bef3-0b7fb86530d5","savedPayload":{"position":{"x":26440.394592951645,"y":27097.010344635586},"targetPosition":{"x":26872.911548913045,"y":27006.19736763503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"de39a349-8739-4e13-ba9d-91acedf7c835","savedPayload":{"position":{"x":18341.530042840343,"y":27297.78553821458},"targetPosition":{"x":18175.13295325986,"y":26923.839282848297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b8a44bb5-4965-4d76-8a55-6f0274d84b0c","savedPayload":{"position":{"x":18175.13295325986,"y":26923.839282848297},"targetPosition":{"x":18008.631010049372,"y":26549.68354602711},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"4529e123-22d2-40a3-a751-9069e69fa624","savedPayload":{"position":{"x":17527.731523448325,"y":27212.25039516188},"targetPosition":{"x":17768.151951980406,"y":26881.045725077645},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c94daca3-f53c-42b6-970c-586d9b605b04","savedPayload":{"position":{"x":17768.151951980406,"y":26881.045725077645},"targetPosition":{"x":18008.631010049372,"y":26549.68354602711},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0a283745-7a51-45ab-b781-538c6e1f6a8a","savedPayload":{"position":{"x":18008.631010049372,"y":26549.68354602711},"targetPosition":{"x":18051.17649094387,"y":26142.15158689679},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"be4359e1-bbfa-404c-b1ab-e073d8b4b173","savedPayload":{"position":{"x":26783.493706164132,"y":26582.953049770163},"targetPosition":{"x":26872.911548913045,"y":27006.19736763503},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"58effb7e-0927-4c47-8745-58895dead2ea"}}}],"announcements":[],"id":"8aff2c3b-ecf9-4df8-84ea-ffd6ba9c9612","savedPayload":{"position":{"x":26582.153893650237,"y":26685.615767170835},"targetPosition":{"x":26813.41806607467,"y":26936.396016420636},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c97bbced-498a-49dd-847a-a52170294ea9","savedPayload":{"position":{"x":35747.605120824286,"y":30793.651930508615},"targetPosition":{"x":35847.974711778115,"y":30905.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"f9453ecf-918d-4816-a43e-216a4af33d75","savedPayload":{"position":{"x":35847.974711778115,"y":30905.123654330226},"targetPosition":{"x":36133.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"1e5d1117-4259-439f-aa97-5ad6987f5b35","savedPayload":{"position":{"x":26951.535516064185,"y":27579.53959425909},"targetPosition":{"x":27265.203493407662,"y":27546.9080959875},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"555c2937-bb8c-4e4f-8efb-1f74b41add4d","savedPayload":{"position":{"x":27265.203493407662,"y":27546.9080959875},"targetPosition":{"x":27670.74288855006,"y":27505.099256602218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"d227d443-eed5-4c57-adbf-65a8d31b9c3f","savedPayload":{"position":{"x":27247.220536923047,"y":26921.708114943343},"targetPosition":{"x":27432.517662971164,"y":27177.133609266668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"94937102-d124-4024-af99-1577576890ac","savedPayload":{"position":{"x":27432.517662971164,"y":27177.133609266668},"targetPosition":{"x":27670.74288855006,"y":27505.099256602218},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81cd8c47-9c13-4bdd-ab07-9c1348056ad3","savedPayload":{"position":{"x":35819.92427233253,"y":30694.113157868855},"targetPosition":{"x":35956.95609097892,"y":30755.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"ca77ac04-3397-4da0-9908-21dd15e0d527","savedPayload":{"position":{"x":28753.84924955325,"y":27883.26390528551},"targetPosition":{"x":28713.27346400518,"y":27691.084373412057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b473e40-9a22-4299-943b-19fedb465b85","savedPayload":{"position":{"x":28713.27346400518,"y":27691.084373412057},"targetPosition":{"x":28672.59213286936,"y":27498.230894377055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"234da5ed-12c9-44e8-9e76-8e8e148ef107","savedPayload":{"position":{"x":28672.59213286936,"y":27498.230894377055},"targetPosition":{"x":28623.06371187106,"y":27263.696353856452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c5524985-3594-49e6-8aa6-f9c8d25e9b10","savedPayload":{"position":{"x":27818.15818264909,"y":26287.975093254136},"targetPosition":{"x":27851.07555537851,"y":26602.180464650388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"02335883-dc89-4b10-ada2-1d4a849161b8","savedPayload":{"position":{"x":27851.07555537851,"y":26602.180464650388},"targetPosition":{"x":27883.998432397704,"y":26916.152932168472},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"9da04e66-35a4-4332-96db-d2bfffd18118","savedPayload":{"position":{"x":27883.998432397704,"y":26916.152932168472},"targetPosition":{"x":27926.32435853008,"y":27319.46788953682},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"19cddff0-8db1-42fe-9969-d8262cc85c25","savedPayload":{"position":{"x":35941.27682148878,"y":30605.945370024983},"targetPosition":{"x":35956.95609097892,"y":30755.123654330226},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"e5956042-1714-4ea3-8e87-52b3d0a2d2b8","savedPayload":{"position":{"x":35956.95609097892,"y":30755.123654330226},"targetPosition":{"x":36133.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f1ca0dbb-65e8-4c60-84f0-89596e22e9be","savedPayload":{"position":{"x":36133.291666666664,"y":30997.82875264271},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S7 - 3H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"b7ef7546-2729-499d-88db-7c958392fb0e","savedPayload":{"position":{"x":35907.697720839125,"y":31815.459797956803},"targetPosition":{"x":35739.9398497979,"y":31566.74852619029},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"40201dbd-8fbe-41aa-acd3-c0cea3fff9de","savedPayload":{"position":{"x":35739.9398497979,"y":31566.74852619029},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"6dc11e45-63d6-4246-9a9a-294a45931b14","savedPayload":{"position":{"x":35717.33511611647,"y":31900.214690189376},"targetPosition":{"x":35644.75854743657,"y":31609.125972306578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2dbb8f61-68b4-4835-a6f7-6d7c0c2248ee","savedPayload":{"position":{"x":35644.75854743657,"y":31609.125972306578},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"391ae861-6932-4481-bc4f-15a284dafe80","savedPayload":{"position":{"x":35509.464900796076,"y":31914.750391644742},"targetPosition":{"x":35540.82343977637,"y":31616.39382303426},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"52613d30-4103-4272-b871-e3785881dcd8","savedPayload":{"position":{"x":35540.82343977637,"y":31616.39382303426},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"7bf0cb68-72c5-4df6-891e-ee3b08bdc439","savedPayload":{"position":{"x":35309.15929068323,"y":31857.31368220328},"targetPosition":{"x":35440.67063471995,"y":31587.67546831353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bab5664-c7aa-4e60-aecd-30db721958b0","savedPayload":{"position":{"x":35440.67063471995,"y":31587.67546831353},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"3d771526-7fc9-4c67-b4b4-50e2df038870","savedPayload":{"position":{"x":35140.57809855348,"y":31734.83227669918},"targetPosition":{"x":35356.38003865507,"y":31526.43476556148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1298f042-2f23-4fc7-8359-5bdd3f7e7da1","savedPayload":{"position":{"x":35356.38003865507,"y":31526.43476556148},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Side or Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerSubChannel.slope === \"Side\" || chart.at06hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"9e520195-93e0-4d66-b312-eb2c90921b3c","savedPayload":{"position":{"x":35024.0547041711,"y":31562.079240269257},"targetPosition":{"x":35298.11834146389,"y":31440.05824734652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"16707f87-40dc-44ae-a7f8-2df9dc07d53c","savedPayload":{"position":{"x":35298.11834146389,"y":31440.05824734652},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Side","code":"chart.at02hs.bollingerSubChannel.slope > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","id":"8143bcc8-af0f-45ef-bbde-1f67fa30b819","savedPayload":{"position":{"x":34973.643548600776,"y":31359.891138670257},"targetPosition":{"x":35272.91276367872,"y":31338.96419654702},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0f2efdf7-69dc-4d15-9bf4-6f714894d100","savedPayload":{"position":{"x":35272.91276367872,"y":31338.96419654702},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"10f38b80-2f33-4ad0-b849-019b27b36921","savedPayload":{"position":{"x":34995.424961193676,"y":31152.654840933577},"targetPosition":{"x":35283.80346997517,"y":31235.34604767868},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"080177f0-9708-4e76-b021-f4857ee42930","savedPayload":{"position":{"x":35283.80346997517,"y":31235.34604767868},"targetPosition":{"x":35572.18197875667,"y":31318.03725442378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5dd3ebf8-bbcd-4978-8d28-0f4ecfe80ba4","savedPayload":{"position":{"x":35572.18197875667,"y":31318.03725442378},"targetPosition":{"x":35748.517554444414,"y":31075.332156111297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b4791836-6c85-4279-b75c-ba308154012c","savedPayload":{"position":{"x":35748.517554444414,"y":31075.332156111297},"targetPosition":{"x":35924.85313013216,"y":30832.627057798814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"81a9ee22-bb7d-4a2b-b3ca-7df88b5cfcd1","savedPayload":{"position":{"x":29263.191030219037,"y":25950.325479768275},"targetPosition":{"x":29264.76406063867,"y":26269.61090777797},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"78d25152-3354-4e6c-8118-e621e2eab4e0","savedPayload":{"position":{"x":29264.76406063867,"y":26269.61090777797},"targetPosition":{"x":29277.049263218465,"y":26605.631084912486},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1067e774-8e02-44c0-a86a-43c62a2e1a69","savedPayload":{"position":{"x":29277.049263218465,"y":26605.631084912486},"targetPosition":{"x":29277.335721066844,"y":26964.71444993079},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"26a5deff-364b-4f52-b2f2-24eb39f8a9aa","savedPayload":{"position":{"x":35776.699879042884,"y":30856.092227554847},"targetPosition":{"x":35924.85313013216,"y":30832.627057798814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"7ca3641e-2701-4ae6-aebf-419045fa3ef7","savedPayload":{"position":{"x":34942.020389974154,"y":30815.471648505776},"targetPosition":{"x":35190.73166174067,"y":30647.713777464553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"50506cba-6ce7-47ee-a28f-50cae0a62f61","savedPayload":{"position":{"x":35190.73166174067,"y":30647.713777464553},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"b0bf87ab-9049-4c24-918b-b7bc805db2a8","savedPayload":{"position":{"x":34857.26549774159,"y":30625.109043783126},"targetPosition":{"x":35148.354215624386,"y":30552.532475103228},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"56da2b2c-74c3-4328-b75c-4990aef44ca0","savedPayload":{"position":{"x":35148.354215624386,"y":30552.532475103228},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"0ed3b727-9493-4064-8404-d2d48e9213ad","savedPayload":{"position":{"x":34842.729796286214,"y":30417.238828462734},"targetPosition":{"x":35141.0863648967,"y":30448.59736744303},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f6f8fad9-0588-4d7c-81a8-5738f0d6c7e6","savedPayload":{"position":{"x":35141.0863648967,"y":30448.59736744303},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"5fe7a35e-a56c-4ad4-854d-5b13ca036669","savedPayload":{"position":{"x":34900.16650572768,"y":30216.93321834988},"targetPosition":{"x":35169.80471961743,"y":30348.444562386605},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1b64fa95-a27a-4e68-9ae1-fa8358e23f41","savedPayload":{"position":{"x":35169.80471961743,"y":30348.444562386605},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"23e2569a-2867-4ebe-aa2b-21254ab0c096","savedPayload":{"position":{"x":35022.64791123178,"y":30048.35202622014},"targetPosition":{"x":35231.04542236948,"y":30264.153966321734},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4f6a6ace-3508-4a78-953a-a9944f9b9077","savedPayload":{"position":{"x":35231.04542236948,"y":30264.153966321734},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Side or Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerSubChannel.slope === \"Side\" || chart.at06hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"565a511b-5264-4cfd-ad94-c8b316f5e19c","savedPayload":{"position":{"x":35195.4009476617,"y":29931.82863183777},"targetPosition":{"x":35317.42194058444,"y":30205.89226913055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5e3a86fa-9e96-47ef-b87b-3324c9edf8a3","savedPayload":{"position":{"x":35317.42194058444,"y":30205.89226913055},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2H Side","code":"chart.at02hs.bollingerSubChannel.slope > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","id":"ef7ba943-87cb-4149-8ab2-a562a34fa524","savedPayload":{"position":{"x":35397.58904926071,"y":29881.417476267434},"targetPosition":{"x":35418.515991383945,"y":30180.68669134538},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e624d8a7-586a-4198-a528-b6ee474245dd","savedPayload":{"position":{"x":35418.515991383945,"y":30180.68669134538},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"9992327b-1059-4396-8766-514b6384a81b","savedPayload":{"position":{"x":35604.82534699738,"y":29903.19888886034},"targetPosition":{"x":35522.13414025228,"y":30191.577397641835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0701df03-b97b-4d03-89a7-a9fb764d1d21","savedPayload":{"position":{"x":35522.13414025228,"y":30191.577397641835},"targetPosition":{"x":35439.44293350718,"y":30479.95590642333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b72964a4-f423-4930-a40d-ced67854d28e","savedPayload":{"position":{"x":35439.44293350718,"y":30479.95590642333},"targetPosition":{"x":35682.14803181967,"y":30656.29148211107},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"51e2b55b-66ca-45c9-9cfd-ec82ac5ce3d6","savedPayload":{"position":{"x":35682.14803181967,"y":30656.29148211107},"targetPosition":{"x":35924.85313013216,"y":30832.627057798814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"adc2c73c-702f-46ce-90ad-dbbc7f75ad3d","savedPayload":{"position":{"x":35924.85313013216,"y":30832.627057798814},"targetPosition":{"x":36221.1596323107,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"61dd007d-fb60-4d69-9873-e38ecc1c542b","savedPayload":{"position":{"x":26954.4612342476,"y":27797.465945206037},"targetPosition":{"x":27232.249322005937,"y":27617.145957993904},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2d95e2e3-ccf3-42a4-a5be-38a235d1256b","savedPayload":{"position":{"x":27232.249322005937,"y":27617.145957993904},"targetPosition":{"x":27575.645466755315,"y":27395.124940815433},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"21ee0d72-fc9c-40b9-93fc-3dee8beedc3a","savedPayload":{"position":{"x":26917.385536592123,"y":27059.733301825763},"targetPosition":{"x":27212.229030840383,"y":27209.954665631943},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6c55293c-d34d-4093-b1a2-81e64345c73b","savedPayload":{"position":{"x":27212.229030840383,"y":27209.954665631943},"targetPosition":{"x":27575.645466755315,"y":27395.124940815433},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08a3f81a-a5a3-4a15-ad14-d3d09724eba9","savedPayload":{"position":{"x":35804.063244841,"y":30657.349961801323},"targetPosition":{"x":35953.85767505419,"y":30649.49956836488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"76aeb4a5-1c22-4021-b61f-d1660b598a9a","savedPayload":{"position":{"x":31176.403846796253,"y":25336.269965876054},"targetPosition":{"x":30810.972409175498,"y":25476.467115831903},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13c54ad9-7dac-405f-b5fe-44ba813378d5","savedPayload":{"position":{"x":30810.972409175498,"y":25476.467115831903},"targetPosition":{"x":30445.13293870145,"y":25616.831261436026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34587555-32f1-4241-b607-476f22c689a6","savedPayload":{"position":{"x":30445.13293870145,"y":25616.831261436026},"targetPosition":{"x":30079.319849588763,"y":25757.23287385561},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a658e05d-abc9-4c5b-ad1b-0897f752cae0","savedPayload":{"position":{"x":30079.319849588763,"y":25757.23287385561},"targetPosition":{"x":29708.54861784794,"y":25899.634261963685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"simulatedExchangeEvents":{"type":"Simulated Exchange Events","name":"New Simulated Exchange Events","project":"Superalgos","simulatedPartialFill":{"type":"Simulated Partial Fill","name":"New Simulated Partial Fill","config":"{ \n\"fillProbability\": 1\n}","project":"Superalgos","id":"44d1a29f-42db-4582-93eb-057c5efab1f2","savedPayload":{"position":{"x":30463.036340071973,"y":26071.176046577108},"targetPosition":{"x":30071.239020751127,"y":26061.01028968422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"simulatedActualRate":{"type":"Simulated Actual Rate","name":"New Simulated Actual Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"91ca08cc-ec90-4256-bab1-f6a9b08fc236","savedPayload":{"position":{"x":30787.02617391212,"y":26379.476491639078},"targetPosition":{"x":30429.31543763473,"y":26220.325772993652},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7de9fa13-47c9-475e-9ae1-02c4c4066ab8","savedPayload":{"position":{"x":30429.31543763473,"y":26220.325772993652},"targetPosition":{"x":30071.239020751127,"y":26061.01028968422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"simulatedFeesPaid":{"type":"Simulated Fees Paid","name":"New Simulated Fees Paid","config":"{ \n\n}","project":"Superalgos","id":"9ba0d597-9964-4808-ba4f-c2b9f3ee2fa0","savedPayload":{"position":{"x":30341.01921824852,"y":26345.197047767208},"targetPosition":{"x":30071.239020751127,"y":26061.01028968422},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5079aedd-ae1e-43e7-a7bf-ffda4fc60ac9","savedPayload":{"position":{"x":30071.239020751127,"y":26061.01028968422},"targetPosition":{"x":29708.54861784794,"y":25899.634261963685},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4678c054-97e1-45b2-be5c-1d4015e291a2","savedPayload":{"position":{"x":27363.405615274343,"y":26544.46692868584},"targetPosition":{"x":27544.591636298504,"y":26822.279081712833},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"819609ef-c126-4b0b-a4c2-9daeb4d52216","savedPayload":{"position":{"x":27544.591636298504,"y":26822.279081712833},"targetPosition":{"x":27726.051900550214,"y":27101.386613620416},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"720b7cb2-8cc4-406a-97cd-d800c913643f","savedPayload":{"position":{"x":35872.161819801935,"y":30523.698983173068},"targetPosition":{"x":35953.85767505419,"y":30649.49956836488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"2b443716-eb30-43b5-9457-7263233daaed","savedPayload":{"position":{"x":35953.85767505419,"y":30649.49956836488},"targetPosition":{"x":36221.1596323107,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"New Manage Stage","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"d0a0de89-d79f-4fa5-885c-a680ff10cfeb","savedPayload":{"position":{"x":27250.156837576338,"y":26675.028202881753},"targetPosition":{"x":27581.018312648295,"y":26691.19051769981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"cbda2339-230a-4211-a1c9-29a32fee1181","savedPayload":{"position":{"x":26633.57534691976,"y":26919.098580224883},"targetPosition":{"x":26782.832467801523,"y":26994.935145367635},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bf0650d2-b7a2-4f05-94e3-80ccda90ffc5","savedPayload":{"position":{"x":26782.832467801523,"y":26994.935145367635},"targetPosition":{"x":26940.19858923711,"y":27074.1354035248},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"df3531c9-6540-4671-be17-4ce0cfda2120","savedPayload":{"position":{"x":26940.19858923711,"y":27074.1354035248},"targetPosition":{"x":27132.31933827815,"y":27171.020738102787},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"6de908df-521a-434c-b9e4-e81e0c84181b","savedPayload":{"position":{"x":27431.436315350355,"y":26395.57768259196},"targetPosition":{"x":27581.018312648295,"y":26691.19051769981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"68255a1b-6136-4d16-b89a-40d0bca2587b","savedPayload":{"position":{"x":27581.018312648295,"y":26691.19051769981},"targetPosition":{"x":27917.784749408285,"y":26909.751362006406},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"cf80ef88-969d-40f5-bc36-ccee6f8518bf","savedPayload":{"position":{"x":27025.878195669367,"y":26331.123736315414},"targetPosition":{"x":27303.228972754463,"y":26511.09544029578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"6fac6741-1d2a-4364-ba55-6d0082d4e33b","savedPayload":{"position":{"x":27303.228972754463,"y":26511.09544029578},"targetPosition":{"x":27581.018312648295,"y":26691.19051769981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"995255a7-571c-4219-bb24-a1dda890ba60","savedPayload":{"position":{"x":35959.161897197024,"y":30436.69890577798},"targetPosition":{"x":36084.96248238884,"y":30518.394761030235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"728b5268-b977-412e-a7f9-fdc5eeca238a","savedPayload":{"position":{"x":27954.916477446754,"y":26179.157131716216},"targetPosition":{"x":28232.60297818197,"y":26358.93025412847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"f035c3b1-3b9f-4d14-89a4-7f483fa0ea49","savedPayload":{"position":{"x":27223.260064960938,"y":26275.05746760463},"targetPosition":{"x":27313.961774374322,"y":26414.445652541348},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0b6f406c-022e-46b7-aabd-a99398140b10","savedPayload":{"position":{"x":27313.961774374322,"y":26414.445652541348},"targetPosition":{"x":27410.240062845653,"y":26572.20960652378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"4de45b46-85e5-4755-9caa-360c50ca061d","savedPayload":{"position":{"x":27562.61527506408,"y":26256.803866124683},"targetPosition":{"x":27488.13907856434,"y":26404.827575720745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5a408907-8527-49d0-9172-60c026feb553","savedPayload":{"position":{"x":27488.13907856434,"y":26404.827575720745},"targetPosition":{"x":27410.240062845653,"y":26572.20960652378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"86be8810-719f-4235-b92f-1e3d9a100391","savedPayload":{"position":{"x":27410.240062845653,"y":26572.20960652378},"targetPosition":{"x":27422.10962772474,"y":26786.869432305393},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"1073d54b-c72a-4a7f-9353-1060186d29c2","savedPayload":{"position":{"x":28527.496565370766,"y":26209.121599895494},"targetPosition":{"x":28232.60297818197,"y":26358.93025412847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"91f7e76b-6171-4c75-b70c-bfc33543b9c3","savedPayload":{"position":{"x":28232.60297818197,"y":26358.93025412847},"targetPosition":{"x":28211.941467792476,"y":26759.607395000632},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.97} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"712dcccd-fca1-4d1b-bf00-497375a831ec","savedPayload":{"position":{"x":27919.263647509517,"y":26011.430195370725},"targetPosition":{"x":28249.661342343345,"y":26028.698522912906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"8facdd27-7830-4433-b373-c259545e9d3f","savedPayload":{"position":{"x":14335.802027035403,"y":24696.547745833843},"targetPosition":{"x":14189.561887620894,"y":24384.79762022559},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7b658c8-0903-46b3-867a-c01eaca10bb1","savedPayload":{"position":{"x":14189.561887620894,"y":24384.79762022559},"targetPosition":{"x":14047.417644296649,"y":24065.93604620017},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"97de140f-ae6e-435a-8be7-c4d87e38bd83","savedPayload":{"position":{"x":14047.417644296649,"y":24065.93604620017},"targetPosition":{"x":13904.61573221608,"y":23742.768304545127},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c137f50a-c8a7-4275-8ae4-80fa7fedd38c","savedPayload":{"position":{"x":28167.520160340675,"y":25687.851040623398},"targetPosition":{"x":28249.661342343345,"y":26028.698522912906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"908a2ee2-d913-46d1-80f5-e7109c803e65","savedPayload":{"position":{"x":29265.827138677025,"y":25909.711818415635},"targetPosition":{"x":29085.240980700488,"y":26186.897520645063},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0a9ab42d-9b24-461f-95cd-39ab13a54bc3","savedPayload":{"position":{"x":29085.240980700488,"y":26186.897520645063},"targetPosition":{"x":28904.868379284024,"y":26464.4248405494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"d4179fb4-9949-4d82-ae45-8d8be2001ce8","savedPayload":{"position":{"x":29494.94801371316,"y":26164.093956938777},"targetPosition":{"x":29199.910638476365,"y":26314.15585813381},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"efab2947-1540-4e8f-a1d9-50289a9b3c7f","savedPayload":{"position":{"x":29199.910638476365,"y":26314.15585813381},"targetPosition":{"x":28904.868379284024,"y":26464.4248405494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"8fbb58cd-53d0-4e19-8f50-590090df0f58","savedPayload":{"position":{"x":29566.17544824077,"y":26498.343202607124},"targetPosition":{"x":29235.528265351964,"y":26481.34103467965},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"adec7d7c-258f-4222-a6d6-734f6962d5d9","savedPayload":{"position":{"x":29235.528265351964,"y":26481.34103467965},"targetPosition":{"x":28904.868379284024,"y":26464.4248405494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"b6a70772-8397-41ac-9268-5ad1cd9b0b80","savedPayload":{"position":{"x":29460.428471403306,"y":26823.69435723527},"targetPosition":{"x":29182.62208487584,"y":26644.10918947152},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e1ffbeec-66bc-4d38-984b-2aff6740101f","savedPayload":{"position":{"x":29182.62208487584,"y":26644.10918947152},"targetPosition":{"x":28904.868379284024,"y":26464.4248405494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"ff907f99-713a-41f7-8b23-721699b74966","savedPayload":{"position":{"x":29206.3840864269,"y":27052.499672437778},"targetPosition":{"x":29055.502825945732,"y":26758.53504502566},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"65511340-ee54-484b-8cb6-f2d95dec9bdd","savedPayload":{"position":{"x":29055.502825945732,"y":26758.53504502566},"targetPosition":{"x":28904.868379284024,"y":26464.4248405494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"94b2fbbc-3d32-473c-8008-231664970f09","savedPayload":{"position":{"x":28904.868379284024,"y":26464.4248405494},"targetPosition":{"x":28558.70498062652,"y":26446.680969487046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"02434c11-1d6d-4f15-9577-237b5daba9ea","savedPayload":{"position":{"x":28580.16364861861,"y":26045.61597974188},"targetPosition":{"x":28249.661342343345,"y":26028.698522912906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"cac36b94-3568-446e-a2d2-9d860bd8ad0f"}}}],"announcements":[],"id":"74e77f0f-2945-48ac-ab1f-47a65feb84ec","savedPayload":{"position":{"x":28249.661342343345,"y":26028.698522912906},"targetPosition":{"x":28232.59743399996,"y":26359.016526885047},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"db68ae8b-4414-43f9-b275-c97b3a6a80c6","savedPayload":{"position":{"x":28069.804461278403,"y":25455.98171215319},"targetPosition":{"x":28291.573983589376,"y":25701.60401407811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"2ccb9d00-d677-44b6-8b92-edbcaf349d29","savedPayload":{"position":{"x":27763.91832029156,"y":25161.369084696074},"targetPosition":{"x":28042.579546379246,"y":25344.834482461578},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d5649c96-59d6-4f0e-a259-063e7355eb48","savedPayload":{"position":{"x":28042.579546379246,"y":25344.834482461578},"targetPosition":{"x":28325.848797452072,"y":25518.458718559552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"2689f28d-6ca9-4e82-8327-eae9956a751a","savedPayload":{"position":{"x":28018.988694707994,"y":24932.583172967068},"targetPosition":{"x":28170.373478209913,"y":25230.541641646203},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b19aacc4-d892-41dc-a487-870ca6e13ce2","savedPayload":{"position":{"x":28170.373478209913,"y":25230.541641646203},"targetPosition":{"x":28325.848797452072,"y":25518.458718559552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"9e40ebf6-fd42-43da-b390-30926b085b8f","savedPayload":{"position":{"x":28353.138577836526,"y":24861.17494835073},"targetPosition":{"x":28337.421337090742,"y":25194.709485726096},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2b8766b-b4da-40c7-8d88-76f3969065aa","savedPayload":{"position":{"x":28337.421337090742,"y":25194.709485726096},"targetPosition":{"x":28325.848797452072,"y":25518.458718559552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"cae32279-d999-4c13-8eb6-cad3063c74d4","savedPayload":{"position":{"x":28678.858007776977,"y":24966.863845050902},"targetPosition":{"x":28500.34185901159,"y":25247.551186065546},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"04ac8528-0696-413b-a739-7825670c0234","savedPayload":{"position":{"x":28500.34185901159,"y":25247.551186065546},"targetPosition":{"x":28325.848797452072,"y":25518.458718559552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div previous ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"6a80e7f5-300b-417d-9f9d-49803b8f51f8","savedPayload":{"position":{"x":28908.166061952317,"y":25221.394869921052},"targetPosition":{"x":28615.135400499326,"y":25374.93033378041},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8e23fa3d-13f0-45fe-990f-d268e58ff1cf","savedPayload":{"position":{"x":28615.135400499326,"y":25374.93033378041},"targetPosition":{"x":28325.848797452072,"y":25518.458718559552},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"38fc838f-01a5-4a33-a35f-e185f52c295e","savedPayload":{"position":{"x":28325.848797452072,"y":25518.458718559552},"targetPosition":{"x":28308.243193364393,"y":25864.113391223967},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"0c86ae11-a07f-4c31-a33c-05debf70c23c","savedPayload":{"position":{"x":28275.200122284987,"y":25277.4913185818},"targetPosition":{"x":28291.573983589376,"y":25701.60401407811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"cac36b94-3568-446e-a2d2-9d860bd8ad0f"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"301720b6-e436-4134-be19-0bd0892f624d","savedPayload":{"position":{"x":29295.231758398484,"y":24832.756567961776},"targetPosition":{"x":29194.088482731295,"y":25146.903117774178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2e8c0fcc-d597-40f7-b07f-16214f744b0e","savedPayload":{"position":{"x":29194.088482731295,"y":25146.903117774178},"targetPosition":{"x":29091.952947589234,"y":25461.82780008192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"b7683607-6589-414b-b6de-5aa132d6baef","savedPayload":{"position":{"x":29737.855279705356,"y":25325.099683694498},"targetPosition":{"x":29415.137494992465,"y":25393.441710116167},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e247b889-3abc-469b-b26d-fc11a08bf9c8","savedPayload":{"position":{"x":29415.137494992465,"y":25393.441710116167},"targetPosition":{"x":29091.952947589234,"y":25461.82780008192},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"605adda8-a968-4819-af76-2ee257f07e66","savedPayload":{"position":{"x":29091.952947589234,"y":25461.82780008192},"targetPosition":{"x":28834.23549245255,"y":25693.79855799827},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"cc9492df-3289-4d6a-b152-bad2fc656730","savedPayload":{"position":{"x":28537.79182457756,"y":25480.496507034826},"targetPosition":{"x":28291.573983589376,"y":25701.60401407811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"74e77f0f-2945-48ac-ab1f-47a65feb84ec"}}}],"announcements":[],"id":"7fc97392-92a0-48cc-a5d3-799b1c2b8c35","savedPayload":{"position":{"x":28291.573983589376,"y":25701.60401407811},"targetPosition":{"x":28249.661342343345,"y":26028.698522912906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"895b6803-0996-41a6-9a13-93f488d7aee4","savedPayload":{"position":{"x":27915.36529991382,"y":25553.977687218132},"targetPosition":{"x":28289.410681218473,"y":25797.28204518927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"df898928-7078-4e61-a616-169789552b36","savedPayload":{"position":{"x":28707.540636840233,"y":24562.01448091567},"targetPosition":{"x":28690.366021412166,"y":24890.930074550743},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"c02edb77-0d76-4656-8d2f-068eaddabff7","savedPayload":{"position":{"x":28690.366021412166,"y":24890.930074550743},"targetPosition":{"x":28673.91155447921,"y":25220.433470128417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"3bdea448-de7a-4188-b9ec-350dbf88470a","savedPayload":{"position":{"x":29263.72744993955,"y":24920.458608905938},"targetPosition":{"x":28968.779473067876,"y":25070.33934296266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fbc8a359-f853-44a6-831d-a2078edeebe6","savedPayload":{"position":{"x":28968.779473067876,"y":25070.33934296266},"targetPosition":{"x":28673.91155447921,"y":25220.433470128417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f4664806-47a1-41be-956e-079599c0df49","savedPayload":{"position":{"x":28673.91155447921,"y":25220.433470128417},"targetPosition":{"x":28484.50655210695,"y":25511.164597350114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b75aa4bc-9257-4444-98ca-afe6377b914a","savedPayload":{"position":{"x":28528.263005905388,"y":25428.859670972648},"targetPosition":{"x":28289.410681218473,"y":25797.28204518927},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"74e77f0f-2945-48ac-ab1f-47a65feb84ec"}}}],"announcements":[],"id":"cac36b94-3568-446e-a2d2-9d860bd8ad0f","savedPayload":{"position":{"x":28317.074533717685,"y":25394.720907202704},"targetPosition":{"x":28291.573983589376,"y":25701.60401407811},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7ce8f923-1393-45ac-97d6-742e2cff6627","savedPayload":{"position":{"x":36092.81287582528,"y":30368.600330817048},"targetPosition":{"x":36084.96248238884,"y":30518.394761030235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"0d03ff5b-3162-49a3-ae12-a0e5929de4dd","savedPayload":{"position":{"x":36084.96248238884,"y":30518.394761030235},"targetPosition":{"x":36221.1596323107,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"e4075c8b-e9ed-4efb-95ff-c57a05dde303","savedPayload":{"position":{"x":27906.098284516334,"y":26249.866400783445},"targetPosition":{"x":28162.580646898557,"y":26458.336872407657},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f7a43f11-926e-4a95-8b50-0e6bf1c33fb3","savedPayload":{"position":{"x":28162.580646898557,"y":26458.336872407657},"targetPosition":{"x":28480.5625419607,"y":26716.395559791687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"d0134650-3b3d-4e82-9334-efd985669763","savedPayload":{"position":{"x":28596.175478550562,"y":25986.609911740343},"targetPosition":{"x":28544.54566315259,"y":26313.39653327981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5bfa6266-b3b9-4b3d-9113-5ce83bd5181b","savedPayload":{"position":{"x":28544.54566315259,"y":26313.39653327981},"targetPosition":{"x":28480.5625419607,"y":26716.395559791687},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f94814fd-11e1-49fb-a3d9-f8c9dc7e476b","savedPayload":{"position":{"x":36214.33477939097,"y":30349.353152133623},"targetPosition":{"x":36268.08997182277,"y":30489.390216108204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"c81b34d0-6411-4e30-9a5f-b29938767724","savedPayload":{"position":{"x":29011.84924955325,"y":28098.26390528551},"targetPosition":{"x":28971.27346400518,"y":27906.084373412057},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"30a97f96-5681-426e-84e3-c56d4677b797","savedPayload":{"position":{"x":28971.27346400518,"y":27906.084373412057},"targetPosition":{"x":28930.59213286936,"y":27713.230894377055},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d73f3a51-5c99-453e-81a7-77123488aae8","savedPayload":{"position":{"x":28930.59213286936,"y":27713.230894377055},"targetPosition":{"x":28881.06371187106,"y":27478.696353856452},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"7d7ac782-a44c-4983-a83d-85c3bc7f446e","savedPayload":{"position":{"x":29479.418890495537,"y":25937.57224736933},"targetPosition":{"x":29271.20349227128,"y":26194.66821724797},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a2a2f97-c305-41ad-b66a-5757cb93b188","savedPayload":{"position":{"x":29271.20349227128,"y":26194.66821724797},"targetPosition":{"x":29063.63227598084,"y":26451.045933509115},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"6f41faa3-1005-4c80-b40f-adbb7b65b836","savedPayload":{"position":{"x":29063.63227598084,"y":26451.045933509115},"targetPosition":{"x":28806.596480966924,"y":26768.546161057966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"940b3fe2-8055-4eb5-8a5a-192a319891af","savedPayload":{"position":{"x":36362.48803048024,"y":30372.81832188966},"targetPosition":{"x":36268.08997182277,"y":30489.390216108204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"b72c5b1c-499f-4f2e-9044-aa6caaaef7ee","savedPayload":{"position":{"x":36268.08997182277,"y":30489.390216108204},"targetPosition":{"x":36221.1596323107,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fc6676b7-944d-459c-bc06-592b3ae2fd1b","savedPayload":{"position":{"x":36221.1596323107,"y":30785.696718286745},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S2 - 6H Down","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"301d8e64-bde8-4eee-a0cf-b9c57bcb3050","savedPayload":{"position":{"x":35457.90634568354,"y":31198.77580821771},"targetPosition":{"x":35527.939954840316,"y":30907.064832098407},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a869bb21-75b5-4621-9760-840cf4896844","savedPayload":{"position":{"x":35527.939954840316,"y":30907.064832098407},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"b3c4a94f-4986-4e55-ba28-f6456a67bd64","savedPayload":{"position":{"x":35245.302412621604,"y":31100.76405260407},"targetPosition":{"x":35421.63798830935,"y":30858.058954291588},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7b405bfe-294d-48a8-b1ff-d0c4f4b328d1","savedPayload":{"position":{"x":35421.63798830935,"y":30858.058954291588},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"f4b66e81-3e26-4a04-9687-140ab33bd887","savedPayload":{"position":{"x":35086.38946538464,"y":30928.852994808673},"targetPosition":{"x":35342.18151469086,"y":30772.10342539389},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4d1c7a66-dd4a-45f9-956d-6cb68b64920b","savedPayload":{"position":{"x":35342.18151469086,"y":30772.10342539389},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"975153b0-b609-4975-b5d6-26f7bfe675e8","savedPayload":{"position":{"x":35005.36055964,"y":30709.214535003244},"targetPosition":{"x":35301.667061818545,"y":30662.284195491175},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ecc5139a-825f-4c91-8e92-f3719460c66b","savedPayload":{"position":{"x":35301.667061818545,"y":30662.284195491175},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Steep","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope === \"Steep\"","project":"Superalgos","id":"a838971e-d8bd-4ded-a418-453b8981ff9e","savedPayload":{"position":{"x":35014.55161175848,"y":30475.28663766556},"targetPosition":{"x":35306.26258787778,"y":30545.32024682233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3694b7de-4040-4f51-a025-3d482ad6c127","savedPayload":{"position":{"x":35306.26258787778,"y":30545.32024682233},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H NOT Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"fc7ab7ee-a96c-4d9a-ae8e-618cd3ee0769","savedPayload":{"position":{"x":35112.56336737212,"y":30262.68270460362},"targetPosition":{"x":35355.2684656846,"y":30439.018280291362},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7f681b33-bfa1-46b5-9483-545d3f62791b","savedPayload":{"position":{"x":35355.2684656846,"y":30439.018280291362},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"d6572b86-2aaa-4223-9e6a-0206d8890778","savedPayload":{"position":{"x":35284.474425167515,"y":30103.769757366652},"targetPosition":{"x":35441.2239945823,"y":30359.56180667288},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"08da37fa-d3c5-49d9-8679-5b80bdff68dd","savedPayload":{"position":{"x":35441.2239945823,"y":30359.56180667288},"targetPosition":{"x":35597.97356399709,"y":30615.353855979105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"680af7d1-9436-426c-b371-0c51ca813093","savedPayload":{"position":{"x":35597.97356399709,"y":30615.353855979105},"targetPosition":{"x":35894.280066175634,"y":30568.423516467035},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ab2764bc-e2c0-40d8-930f-bd3047f39596","savedPayload":{"position":{"x":35894.280066175634,"y":30568.423516467035},"targetPosition":{"x":36190.58656835418,"y":30521.493176954966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"29130ffe-4d84-411a-90d4-3ee5a6008c21","savedPayload":{"position":{"x":29929.75814734162,"y":24095.592195707926},"targetPosition":{"x":29824.584661753048,"y":24793.90204810937},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e6a32c76-eda6-4982-8a3e-220c29218ba2","savedPayload":{"position":{"x":29824.584661753048,"y":24793.90204810937},"targetPosition":{"x":29719.49025858462,"y":25492.258102611122},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b31b4647-b5e2-42e5-a1e9-fa0ffafeffc8","savedPayload":{"position":{"x":29719.49025858462,"y":25492.258102611122},"targetPosition":{"x":29614.353374494633,"y":26192.17030634475},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"707c998d-da1c-45c1-84de-75ac9a0898b9","savedPayload":{"position":{"x":35947.88147004169,"y":30345.157601267223},"targetPosition":{"x":36190.58656835418,"y":30521.493176954966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"5840e471-a97e-4662-8938-5f1eb21091f0","savedPayload":{"position":{"x":27717.301622767678,"y":26334.481588004048},"targetPosition":{"x":28025.801735582445,"y":26406.228544483936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"447e0866-7372-4a42-b5b1-cd05e0efe728","savedPayload":{"position":{"x":28025.801735582445,"y":26406.228544483936},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"0a447725-e6ac-45ea-bb2c-5f3b968dfc06","savedPayload":{"position":{"x":27824.39802773934,"y":26107.708373562695},"targetPosition":{"x":28079.7044253936,"y":26294.277653937497},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9540f515-0603-4cda-bbbd-84d7d104a8e1","savedPayload":{"position":{"x":28079.7044253936,"y":26294.277653937497},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"ad089114-2332-4b0b-b079-4070e1baa4c5","savedPayload":{"position":{"x":28001.002320354102,"y":25938.699666684413},"targetPosition":{"x":28166.99017082398,"y":26208.564967348262},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7f2c2ddf-c19f-4f32-bda3-b4a3b7e7fb90","savedPayload":{"position":{"x":28166.99017082398,"y":26208.564967348262},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"48b35276-b129-486a-a517-ca3656ff9a53","savedPayload":{"position":{"x":28234.190614796466,"y":25854.383117039397},"targetPosition":{"x":28283.136917897114,"y":26166.882632248627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"179fce4e-890b-4a07-9289-57620f55da9e","savedPayload":{"position":{"x":28283.136917897114,"y":26166.882632248627},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"4H Steep","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at04hs.bollingerSubChannel.slope === \"Steep\"","project":"Superalgos","id":"45c706e6-6a7c-4b5a-b713-2b87ac0b6550","savedPayload":{"position":{"x":28486.269610739055,"y":25867.380685213313},"targetPosition":{"x":28410.46411174992,"y":26172.536383864397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ad485330-bf10-49e7-beaa-d57e0f8564b3","savedPayload":{"position":{"x":28410.46411174992,"y":26172.536383864397},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"6H NOT Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at06hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"a360bbf1-b177-4298-80a8-06b6062dc779","savedPayload":{"position":{"x":28705.03828798836,"y":25966.144280577828},"targetPosition":{"x":28521.161531812584,"y":26222.50508968378},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8134986-b19a-4715-bb59-dd6bc7c774a8","savedPayload":{"position":{"x":28521.161531812584,"y":26222.50508968378},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"685b785a-4196-4b0a-84c1-0c7ed54e6162","savedPayload":{"position":{"x":28874.103214484825,"y":26146.233900393076},"targetPosition":{"x":28606.38987398745,"y":26313.54340397053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"747a6cc6-2122-4f62-ab40-bdcfbb8ae702","savedPayload":{"position":{"x":28606.38987398745,"y":26313.54340397053},"targetPosition":{"x":28334.846689820693,"y":26479.878264274026},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e9bc25c6-7eca-42cd-a2c2-dbc196d8929a","savedPayload":{"position":{"x":28334.846689820693,"y":26479.878264274026},"targetPosition":{"x":28391.894666650962,"y":26833.86442334945},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"88e734b7-e242-4b34-aeca-bb71905973ab","savedPayload":{"position":{"x":36143.65622884211,"y":30225.186674776425},"targetPosition":{"x":36190.58656835418,"y":30521.493176954966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"73a50844-7c64-4816-a04d-db5da604663b","savedPayload":{"position":{"x":36190.58656835418,"y":30521.493176954966},"targetPosition":{"x":36433.291666666664,"y":30697.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"7d19cadf-d686-403d-b5c5-c4c8600035e4","savedPayload":{"position":{"x":27823.346249651582,"y":26546.680041402084},"targetPosition":{"x":28133.462519398272,"y":26612.770755124962},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"5dc9b14b-e534-4328-9789-22d49b2c6626","savedPayload":{"position":{"x":28133.462519398272,"y":26612.770755124962},"targetPosition":{"x":28531.618501984663,"y":26697.977457836598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"9bc8b451-2bcc-4092-b469-d99fe46040ae","savedPayload":{"position":{"x":28308.375025281763,"y":26011.290909935495},"targetPosition":{"x":28406.42268543775,"y":26312.571797558085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9e557768-9288-4e09-bf67-db8d850df130","savedPayload":{"position":{"x":28406.42268543775,"y":26312.571797558085},"targetPosition":{"x":28531.618501984663,"y":26697.977457836598},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7dadecbd-1931-448f-a23d-9a96140d75ca","savedPayload":{"position":{"x":36211.11484453257,"y":29848.142206800334},"targetPosition":{"x":36322.58656835418,"y":29948.511797754163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"14697473-8454-4fb1-bf28-fa12d6640666","savedPayload":{"position":{"x":29227.77663081793,"y":24735.788690159847},"targetPosition":{"x":29161.91498699858,"y":25045.06043531283},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"98626788-dd20-4fb6-8b43-9b97014a212e","savedPayload":{"position":{"x":29161.91498699858,"y":25045.06043531283},"targetPosition":{"x":29096.007378262333,"y":25354.338048645273},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b4e76cbe-b430-4f1b-86cd-1e8259a48477","savedPayload":{"position":{"x":29096.007378262333,"y":25354.338048645273},"targetPosition":{"x":29030.09520930903,"y":25663.48976025039},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"5fa41d57-267e-451c-b495-4ac721ddfa18","savedPayload":{"position":{"x":29030.09520930903,"y":25663.48976025039},"targetPosition":{"x":28964.783620262904,"y":25972.840524149615},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4c9ad616-de53-4332-8569-ad2d7eb4f941","savedPayload":{"position":{"x":28964.783620262904,"y":25972.840524149615},"targetPosition":{"x":28899.039867310654,"y":26282.577123847972},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"4d3552fa-b634-4bc8-a975-e136b47e44a2","savedPayload":{"position":{"x":28899.039867310654,"y":26282.577123847972},"targetPosition":{"x":28831.913255435786,"y":26600.548271741114},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"ffe64902-21d9-4c5e-b6aa-97ce752cce91","savedPayload":{"position":{"x":36353.77332197684,"y":29801.78965764409},"targetPosition":{"x":36322.58656835418,"y":29948.511797754163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"63eb6592-10e0-4c3c-ac03-8789e6b52068","savedPayload":{"position":{"x":36340.58656835418,"y":30412.511797754163},"targetPosition":{"x":36433.291666666664,"y":30697.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Custom","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Managed Stop Loss","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"c42eec50-421c-4220-942c-4bdd4128e9dd","savedPayload":{"position":{"x":36200.51056858084,"y":29602.679789670663},"targetPosition":{"x":36401.249750488496,"y":29825.62323731388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"a2f4b43b-c498-4687-ab3d-c5c7d7ad4d02","savedPayload":{"position":{"x":28210.45451301232,"y":25747.045656145805},"targetPosition":{"x":28259.58763868236,"y":25898.037881218544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"35795d1b-8c7a-4957-9e22-1400e32d1e14","savedPayload":{"position":{"x":28259.58763868236,"y":25898.037881218544},"targetPosition":{"x":28315.177489351867,"y":26067.455300671194},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8ea589b2-e7e3-4907-90a8-bd4667a70196","savedPayload":{"position":{"x":28315.177489351867,"y":26067.455300671194},"targetPosition":{"x":28380.40171899753,"y":26266.98547659318},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"a68ec84d-450e-42ed-b4c7-28db86f31e57","savedPayload":{"position":{"x":36493.95484880098,"y":29540.306282425336},"targetPosition":{"x":36401.249750488496,"y":29825.62323731388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"bd85fac3-f2ab-47b8-8077-344343ebfc93","savedPayload":{"position":{"x":36401.249750488496,"y":29825.62323731388},"targetPosition":{"x":36463.62325773382,"y":30119.067517534022},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"e9425ea8-46fc-4bbd-96af-107b45fcde20","savedPayload":{"position":{"x":36276.50273599784,"y":29238.7346768736},"targetPosition":{"x":36338.87624324317,"y":29532.17895709374},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"787093b5-b60f-4002-ae4e-7dcf26bc651c","savedPayload":{"position":{"x":36338.87624324317,"y":29532.17895709374},"targetPosition":{"x":36401.249750488496,"y":29825.62323731388},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1a3ca90-96ad-4bc3-84f0-0ead961f4ab3","savedPayload":{"position":{"x":36463.62325773382,"y":30119.067517534022},"targetPosition":{"x":36525.99676497915,"y":30412.511797754163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Managed Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"98c748f4-5126-4a47-a88b-8af381ce5b37","savedPayload":{"position":{"x":36909.51015302027,"y":29717.589153718705},"targetPosition":{"x":36971.883660265594,"y":30011.033433938846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"37f8d23d-8e82-4d78-8799-338d352c0bd7","savedPayload":{"position":{"x":29057.393308629576,"y":25688.71449056764},"targetPosition":{"x":29023.99513574823,"y":25844.81490998611},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7641aab3-419e-431c-b7de-f961309f3d88","savedPayload":{"position":{"x":29023.99513574823,"y":25844.81490998611},"targetPosition":{"x":28978.67173136167,"y":26024.985404561994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"640b3bdc-3649-4846-b67a-1ed5a8ba52d5","savedPayload":{"position":{"x":29303.399548393936,"y":25909.8910131691},"targetPosition":{"x":29152.477566638718,"y":25959.585648886925},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6855f9f0-a1a5-4613-b77a-b9d7226ec1f7","savedPayload":{"position":{"x":29152.477566638718,"y":25959.585648886925},"targetPosition":{"x":28978.67173136167,"y":26024.985404561994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8dc235c5-6c20-4d93-8703-275564f7e648","savedPayload":{"position":{"x":28978.67173136167,"y":26024.985404561994},"targetPosition":{"x":28839.257672444433,"y":26181.18864147793},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"19f17341-ac03-4e07-9f8d-d3e4ef023fc2","savedPayload":{"position":{"x":37257.20061515414,"y":30103.73853225133},"targetPosition":{"x":36971.883660265594,"y":30011.033433938846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"7f92f80d-0924-4d54-ae68-6505d8f0421a","savedPayload":{"position":{"x":36971.883660265594,"y":30011.033433938846},"targetPosition":{"x":36748.94021262237,"y":30211.772615846505},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.97} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"af90c747-4790-43c5-afe1-37a605571cae","savedPayload":{"position":{"x":36994.08792600116,"y":29587.35080438797},"targetPosition":{"x":37194.827107908815,"y":29810.294252031188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"64b16855-36d6-49b4-afde-9bc43b6bdd53","savedPayload":{"position":{"x":15411.427405661598,"y":25474.517861382687},"targetPosition":{"x":15265.187266247089,"y":25162.767735774432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a06e989b-e442-43e3-b915-7aa76348e064","savedPayload":{"position":{"x":15265.187266247089,"y":25162.767735774432},"targetPosition":{"x":15123.043022922844,"y":24843.906161749015},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ac15c2d4-9d65-464a-b3e6-2d28edca7308","savedPayload":{"position":{"x":15123.043022922844,"y":24843.906161749015},"targetPosition":{"x":14980.241110842275,"y":24520.73842009397},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"c81de819-5717-459a-9b89-f046c6768803","savedPayload":{"position":{"x":37417.77055555204,"y":29609.55507012353},"targetPosition":{"x":37194.827107908815,"y":29810.294252031188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"bff4cb02-f3ad-4c61-9f94-cc3e2b43121c","savedPayload":{"position":{"x":30685.397989775593,"y":26838.6180368247},"targetPosition":{"x":30375.32070549611,"y":26904.220305874333},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a9f77d3c-1868-4535-8117-e56d388ba5ad","savedPayload":{"position":{"x":30375.32070549611,"y":26904.220305874333},"targetPosition":{"x":30064.735801886374,"y":26969.86890377776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"42345fb4-0626-4b42-90c1-bb9f214e17d4","savedPayload":{"position":{"x":30668.325798478487,"y":27165.743100789077},"targetPosition":{"x":30366.812428798898,"y":27067.89401138069},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a4bfbfb1-543e-4db0-9f39-dd6631e660eb","savedPayload":{"position":{"x":30366.812428798898,"y":27067.89401138069},"targetPosition":{"x":30064.735801886374,"y":26969.86890377776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"67342cd6-6678-401c-94e1-e0b0eda2263e","savedPayload":{"position":{"x":30489.860141530648,"y":27440.873452312488},"targetPosition":{"x":30277.493555746565,"y":27205.49311599559},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6fcc3279-0e65-424f-81b5-0ed032a461ca","savedPayload":{"position":{"x":30277.493555746565,"y":27205.49311599559},"targetPosition":{"x":30064.735801886374,"y":26969.86890377776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"47ca70bc-782c-445f-834e-921f0840eb7e","savedPayload":{"position":{"x":30197.90828637094,"y":27589.861183220557},"targetPosition":{"x":30131.454060195894,"y":27280.062111101353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"13eaacfa-d129-401a-8648-93d7954f94ac","savedPayload":{"position":{"x":30131.454060195894,"y":27280.062111101353},"targetPosition":{"x":30064.735801886374,"y":26969.86890377776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"6674b07b-d9ed-4a96-88b2-6743cd6e0852","savedPayload":{"position":{"x":29871.361983104893,"y":27572.722325012102},"targetPosition":{"x":29968.080252229825,"y":27271.507707137673},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9163a9de-74b0-42f7-8ee0-85b93dee00fc","savedPayload":{"position":{"x":29968.080252229825,"y":27271.507707137673},"targetPosition":{"x":30064.735801886374,"y":26969.86890377776},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"46f92b3d-10dd-484d-895b-c0d547424c3a","savedPayload":{"position":{"x":30064.735801886374,"y":26969.86890377776},"targetPosition":{"x":29839.833470154765,"y":26721.090544731458},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"571d2fea-5e0b-49f3-877a-5b9b41516bfe","savedPayload":{"position":{"x":37395.566289816474,"y":30033.237699674406},"targetPosition":{"x":37194.827107908815,"y":29810.294252031188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"5639cfff-e0f1-417b-8034-adb661ded0cd"}}}],"announcements":[],"id":"75e54a0b-1af9-49d2-ab9b-461d72a731fe","savedPayload":{"position":{"x":37194.827107908815,"y":29810.294252031188},"targetPosition":{"x":36971.883660265594,"y":30011.033433938846},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"3f9df9ef-2267-4a33-b2b8-fddce1f7f4d7","savedPayload":{"position":{"x":37433.47134242492,"y":29309.96620969716},"targetPosition":{"x":37417.77055555204,"y":29609.55507012353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"bb9431b0-04e2-49ad-8a1e-8336a5a90ba6","savedPayload":{"position":{"x":32023.403963187324,"y":26349.177120855493},"targetPosition":{"x":31907.894390142355,"y":26683.84567234382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"fff74a7d-6205-4d97-b32a-c31c2879e228","savedPayload":{"position":{"x":31907.894390142355,"y":26683.84567234382},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"c2308750-4fa3-45bc-8ce3-b834db3e5a75","savedPayload":{"position":{"x":32262.865163850664,"y":26488.677262211473},"targetPosition":{"x":32027.998581354113,"y":26753.58535817053},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"37f1894e-e911-46df-b97d-92ad8716bbb7","savedPayload":{"position":{"x":32027.998581354113,"y":26753.58535817053},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"c815953e-7501-4c0f-bf44-b2054f27204b","savedPayload":{"position":{"x":32430.066087027975,"y":26709.069781650396},"targetPosition":{"x":32111.666993260842,"y":26863.85372760884},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0abbc8b9-69b3-4051-a077-8cae2eb456e5","savedPayload":{"position":{"x":32111.666993260842,"y":26863.85372760884},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"b1db73ae-ddb7-452c-bc67-aebce55c0071","savedPayload":{"position":{"x":32500.184859498237,"y":26976.573652298997},"targetPosition":{"x":32146.740346535415,"y":26997.668869820714},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1c0d7a06-b7f3-443d-9088-177134b13b83","savedPayload":{"position":{"x":32146.740346535415,"y":26997.668869820714},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"12d82500-383b-445d-995d-7b589c84635a","savedPayload":{"position":{"x":32462.68040868568,"y":27249.86600403618},"targetPosition":{"x":32127.96691871545,"y":27134.37815581975},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ea51ecbf-d848-46a7-a88d-82ec88f8480a","savedPayload":{"position":{"x":32127.96691871545,"y":27134.37815581975},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"previous ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14 > chart.at01hs.base7EMA.previous.previous.ema21 - chart.at01hs.base7EMA.previous.previous.ema14","project":"Superalgos","id":"c48ea949-7b3e-4c17-bff5-19d6e459d626","savedPayload":{"position":{"x":32323.19348627884,"y":27488.724105193913},"targetPosition":{"x":32058.222945332695,"y":27253.72625045506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"7d987b62-66de-4d68-be64-91c124266174","savedPayload":{"position":{"x":32058.222945332695,"y":27253.72625045506},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2 previous ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7 > chart.at01hs.base7EMA.previous.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.previous.ema7","project":"Superalgos","id":"6e81b8d8-148d-4a5a-8307-40c1dbccabb2","savedPayload":{"position":{"x":32103.18929085291,"y":27655.73318119689},"targetPosition":{"x":31948.04782618265,"y":27337.291294678864},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"229f0b94-9e9a-45b5-87fe-8bf1427c1cb6","savedPayload":{"position":{"x":31948.04782618265,"y":27337.291294678864},"targetPosition":{"x":31792.740978340917,"y":27018.886636027608},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0e734dca-7ea8-4eaf-9379-48ccf8dff51e","savedPayload":{"position":{"x":31792.740978340917,"y":27018.886636027608},"targetPosition":{"x":31427.450481887347,"y":27040.96466112342},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"43f6f964-e44c-4b9e-9c6e-f5f10afb891d","savedPayload":{"position":{"x":37640.71400319526,"y":29408.81588821587},"targetPosition":{"x":37417.77055555204,"y":29609.55507012353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"5639cfff-e0f1-417b-8034-adb661ded0cd"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"427ca47c-7233-4e51-8070-0dd82e493d47","savedPayload":{"position":{"x":32301.86335063581,"y":27597.77562278088},"targetPosition":{"x":31948.431795502394,"y":27618.76025620688},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8b99cc7a-c8fd-4e57-9f24-c2576f6bab18","savedPayload":{"position":{"x":31948.431795502394,"y":27618.76025620688},"targetPosition":{"x":31594.691326773514,"y":27639.60908904879},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"2217cfc4-1cdd-43b0-86ef-9957ff84c8f1","savedPayload":{"position":{"x":32124.70934326367,"y":28109.414503776585},"targetPosition":{"x":31859.85776712803,"y":27874.63574979469},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"6918bca4-9fcd-44a4-9ad5-d4718158d064","savedPayload":{"position":{"x":31859.85776712803,"y":27874.63574979469},"targetPosition":{"x":31594.691326773514,"y":27639.60908904879},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"2 prev.ema7 div 2 prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7 > chart.at01hs.base7EMA.previous.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.previous.ema7","project":"Superalgos","id":"9afbcaee-9dcd-4b18-89a9-9124eea8c900","savedPayload":{"position":{"x":31637.556778006554,"y":28346.46566595007},"targetPosition":{"x":31616.172511061377,"y":27993.143095037136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"91b01ae0-97af-48c7-adf3-1bb767e27f36","savedPayload":{"position":{"x":31616.172511061377,"y":27993.143095037136},"targetPosition":{"x":31594.691326773514,"y":27639.60908904879},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8f15adc5-8719-4f96-8560-127f7eaa0a97","savedPayload":{"position":{"x":31594.691326773514,"y":27639.60908904879},"targetPosition":{"x":31320.933543468745,"y":27396.918667465558},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b15ba6fb-7ae0-4c8f-b8ac-b76c5945dcb5","savedPayload":{"position":{"x":37717.35941597841,"y":29625.255856996413},"targetPosition":{"x":37417.77055555204,"y":29609.55507012353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"75e54a0b-1af9-49d2-ab9b-461d72a731fe"}}}],"announcements":[],"id":"eb74a012-ed21-4ce6-8f2e-8f2ebaea9188","savedPayload":{"position":{"x":37417.77055555204,"y":29609.55507012353},"targetPosition":{"x":37194.827107908815,"y":29810.294252031188},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"25d46d39-ae12-4dd8-a136-48f75b7236c1","savedPayload":{"position":{"x":37578.34049594993,"y":29115.37160799573},"targetPosition":{"x":37640.71400319526,"y":29408.81588821587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"f4da55cf-3df3-40ed-8d05-a914a6697fae","savedPayload":{"position":{"x":18968.903490019817,"y":27703.23609367037},"targetPosition":{"x":18802.506400439335,"y":27329.28983830409},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2c64d2c0-288c-45ae-a359-5d3f44bb4c5e","savedPayload":{"position":{"x":18802.506400439335,"y":27329.28983830409},"targetPosition":{"x":18636.004457228846,"y":26955.1341014829},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"b4571357-f64e-432a-8d80-37f1dfd89e82","savedPayload":{"position":{"x":18155.1049706278,"y":27617.70095061767},"targetPosition":{"x":18395.52539915988,"y":27286.496280533436},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"96c5c204-c93f-494c-8691-30566d39db06","savedPayload":{"position":{"x":18395.52539915988,"y":27286.496280533436},"targetPosition":{"x":18636.004457228846,"y":26955.1341014829},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2849e6ed-91c0-4e63-a4a3-2ba4d4517008","savedPayload":{"position":{"x":18636.004457228846,"y":26955.1341014829},"targetPosition":{"x":18678.549938123346,"y":26547.60214235258},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"9c2aa1f4-5ba6-4dc8-9f99-db133558f0e8","savedPayload":{"position":{"x":37934.1582834154,"y":29346.442380970544},"targetPosition":{"x":37640.71400319526,"y":29408.81588821587},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"75e54a0b-1af9-49d2-ab9b-461d72a731fe"}}}],"announcements":[],"id":"5639cfff-e0f1-417b-8034-adb661ded0cd","savedPayload":{"position":{"x":37640.71400319526,"y":29408.81588821587},"targetPosition":{"x":37417.77055555204,"y":29609.55507012353},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6cb50b3d-6bf3-422f-8d2a-d0103ea02607","savedPayload":{"position":{"x":36748.94021262237,"y":30211.772615846505},"targetPosition":{"x":36525.99676497915,"y":30412.511797754163},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"42765ad5-284e-4966-a367-76593b53bcf7","savedPayload":{"position":{"x":36525.99676497915,"y":30412.511797754163},"targetPosition":{"x":36433.291666666664,"y":30697.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"110d0178-0090-4921-92dc-837bb31c3ba1","savedPayload":{"position":{"x":29529.25758251593,"y":26131.051468093545},"targetPosition":{"x":29561.956964512523,"y":26446.343361975574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3a9db813-8c6c-49a1-ae12-8125f8efc292","savedPayload":{"position":{"x":29561.956964512523,"y":26446.343361975574},"targetPosition":{"x":29603.7428723056,"y":26851.473333371112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"379418a8-84aa-481c-8f23-48801ca405d8","savedPayload":{"position":{"x":30188.0147599188,"y":26427.276910181565},"targetPosition":{"x":29931.825113704683,"y":26613.296474974413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ef89e246-f225-4883-ae89-3f61dc1320f1","savedPayload":{"position":{"x":29931.825113704683,"y":26613.296474974413},"targetPosition":{"x":29603.7428723056,"y":26851.473333371112},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5f697ad9-68be-4204-b5ad-67cded03abbb","savedPayload":{"position":{"x":36737.00726144052,"y":30384.461358308574},"targetPosition":{"x":36675.99676497915,"y":30521.493176954966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"4bcae971-5718-4028-a10e-3f170704030b","savedPayload":{"position":{"x":31765.85605573067,"y":26900.757149548626},"targetPosition":{"x":31451.503660135502,"y":26933.51633883763},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"2221a782-74ed-4536-a40c-e54fd95fc345","savedPayload":{"position":{"x":31451.503660135502,"y":26933.51633883763},"targetPosition":{"x":31136.799078531352,"y":26966.605382231006},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e30e9de3-190a-4536-9dcf-0a12e09e0f0e","savedPayload":{"position":{"x":31136.799078531352,"y":26966.605382231006},"targetPosition":{"x":30821.97217929334,"y":26999.42208029286},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"b57f49ac-744d-4af2-9a8f-d92483ed0d0d","savedPayload":{"position":{"x":30821.97217929334,"y":26999.42208029286},"targetPosition":{"x":30507.433204761444,"y":27032.345782833574},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5aff6295-2b72-4e26-9017-741fb9303efb","savedPayload":{"position":{"x":30507.433204761444,"y":27032.345782833574},"targetPosition":{"x":30193.027967400943,"y":27065.269648466136},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"202469d9-139c-431c-98f0-3d5d48ce972b","savedPayload":{"position":{"x":30193.027967400943,"y":27065.269648466136},"targetPosition":{"x":29789.556690432975,"y":27107.564393121887},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2d3db895-56de-4b0d-b252-c70d818787cc","savedPayload":{"position":{"x":36825.17504928439,"y":30505.813907464817},"targetPosition":{"x":36675.99676497915,"y":30521.493176954966},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"71e66e43-11c0-4f53-afc5-3787eafc4744","savedPayload":{"position":{"x":36675.99676497915,"y":30521.493176954966},"targetPosition":{"x":36433.291666666664,"y":30697.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2faf1715-7b6a-4188-ac5e-c67502e18fcc","savedPayload":{"position":{"x":36433.291666666664,"y":30697.82875264271},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Trading Strategy","name":"S5 - 4H Up","project":"Superalgos","triggerStage":{"type":"Trigger Stage","name":"New Trigger Stage","project":"Superalgos","triggerOn":{"type":"Trigger On Event","name":"New Trigger On Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"1bb17736-cc12-4b60-9807-632aeb2d3636","savedPayload":{"position":{"x":35615.66062135256,"y":30472.234806815166},"targetPosition":{"x":35864.371893119074,"y":30304.476935773942},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d2e2487a-d30a-4d70-9d70-f188409059a9","savedPayload":{"position":{"x":35864.371893119074,"y":30304.476935773942},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"21123f61-dc48-4915-b609-c3eab53b8fec","savedPayload":{"position":{"x":35530.90572911999,"y":30281.872202092516},"targetPosition":{"x":35821.99444700279,"y":30209.295633412617},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"daefe7ea-f409-406c-891a-28c3001ab5c0","savedPayload":{"position":{"x":35821.99444700279,"y":30209.295633412617},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"6897670f-f952-4d83-8a95-bc82ad1d07fa","savedPayload":{"position":{"x":35516.37002766462,"y":30074.001986772124},"targetPosition":{"x":35814.726596275104,"y":30105.36052575242},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b6890e81-16b4-4cd2-b1ed-0c02d51dae4b","savedPayload":{"position":{"x":35814.726596275104,"y":30105.36052575242},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"c02c6beb-0de4-4a7c-a768-7332501d45b1","savedPayload":{"position":{"x":35573.80673710608,"y":29873.69637665927},"targetPosition":{"x":35843.444950995836,"y":30005.207720695995},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3e59df4d-42a2-41e9-93ff-6d85b65d9bc2","savedPayload":{"position":{"x":35843.444950995836,"y":30005.207720695995},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"02H Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","id":"3257e894-69d2-4f5f-93eb-13ba4d62c5e0","savedPayload":{"position":{"x":35696.28814261019,"y":29705.115184529528},"targetPosition":{"x":35904.68565374789,"y":29920.917124631123},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"bd3ee521-2846-411f-a740-de3480e90421","savedPayload":{"position":{"x":35904.68565374789,"y":29920.917124631123},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"3cef9be4-e642-4af5-b845-d63592ea22e9","savedPayload":{"position":{"x":35869.041179040105,"y":29588.59179014716},"targetPosition":{"x":35991.06217196285,"y":29862.65542743994},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a23ee119-f4f5-4fe6-9013-27055d634051","savedPayload":{"position":{"x":35991.06217196285,"y":29862.65542743994},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H NOT Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"7fa69f52-edfe-42b6-bda3-40e9ad7af808","savedPayload":{"position":{"x":36071.22928063911,"y":29538.180634576824},"targetPosition":{"x":36092.15622276235,"y":29837.44984965477},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"50495c21-1a7b-4c38-9c6c-4cec9fb5a0f1","savedPayload":{"position":{"x":36092.15622276235,"y":29837.44984965477},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"0770176a-5af8-479d-8a7e-7bafaf04cb05","savedPayload":{"position":{"x":36278.465578375784,"y":29559.96204716973},"targetPosition":{"x":36195.77437163069,"y":29848.340555951225},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0538f837-fbba-4e7c-b1db-8a574559d584","savedPayload":{"position":{"x":36195.77437163069,"y":29848.340555951225},"targetPosition":{"x":36113.08316488559,"y":30136.71906473272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b2dd0458-53e0-4d8c-8f46-bb45946cdb65","savedPayload":{"position":{"x":36113.08316488559,"y":30136.71906473272},"targetPosition":{"x":36355.788263198076,"y":30313.05464042046},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"642f8610-4b1d-4178-8bae-12abf00b7812","savedPayload":{"position":{"x":36355.788263198076,"y":30313.05464042046},"targetPosition":{"x":36598.49336151056,"y":30489.390216108204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"triggerOff":{"type":"Trigger Off Event","name":"New Trigger Off Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close< chart.at01hs.bollingerBand.movingAverage","project":"Superalgos","id":"9d2e77ef-dc06-4357-8739-44065c83f8cb","savedPayload":{"position":{"x":30284.870532822708,"y":24486.693008103277},"targetPosition":{"x":30114.089233097067,"y":25124.002306371178},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"65d4f331-e81f-44d4-834b-9e786d9d2a36","savedPayload":{"position":{"x":30114.089233097067,"y":25124.002306371178},"targetPosition":{"x":29943.226018568057,"y":25761.37960753494},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9753c7d0-7d95-4464-8331-a7d4bac71a9b","savedPayload":{"position":{"x":29943.226018568057,"y":25761.37960753494},"targetPosition":{"x":29771.984403418064,"y":26400.114291021076},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"99db5a57-b7b5-44d2-b046-c5784a51bffc","savedPayload":{"position":{"x":36575.02819175453,"y":30341.236965018932},"targetPosition":{"x":36598.49336151056,"y":30489.390216108204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"takePosition":{"type":"Take Position Event","name":"New Take Position Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"Previous Breakup","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.previous.close > chart.at01hs.bollingerBand.previous.movingAverage + chart.at01hs.bollingerBand.previous.deviation","project":"Superalgos","id":"190f6e85-1f6e-4088-a156-a82e3b0e72cb","savedPayload":{"position":{"x":30090.774546211884,"y":26038.821308519073},"targetPosition":{"x":30147.839593335477,"y":26364.347053817124},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"07da9742-43f4-4bfb-8720-3272474740d1","savedPayload":{"position":{"x":30147.839593335477,"y":26364.347053817124},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Close In","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.bollingerBand.movingAverage + chart.at01hs.bollingerBand.deviation","project":"Superalgos","id":"56b61beb-3df4-4577-b39e-90c3c3fc7075","savedPayload":{"position":{"x":30320.38547922099,"y":26038.581961545453},"targetPosition":{"x":30262.805282806352,"y":26364.226173402785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"34460859-dffb-4fba-93b2-fe143c3a25de","savedPayload":{"position":{"x":30262.805282806352,"y":26364.226173402785},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Current Red Candle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.candle.close < chart.at01hs.candle.open","project":"Superalgos","id":"16a3f794-7209-437c-a272-c1f945374af2","savedPayload":{"position":{"x":30536.515875966965,"y":26117.071519038203},"targetPosition":{"x":30371.005155014456,"y":26403.465122929847},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"28a397a8-b5f1-44fd-afe2-3e366e7e938d","savedPayload":{"position":{"x":30371.005155014456,"y":26403.465122929847},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H Down","code":"chart.at03hs.bollingerChannel.direction * chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerChannel.direction === \"Down\"","project":"Superalgos","id":"e6fa32e6-37a4-40ae-a68d-8d046eed13b6","savedPayload":{"position":{"x":30712.66912636248,"y":26264.89990734899},"targetPosition":{"x":30459.155615858406,"y":26477.432210756844},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ba113199-ed6c-4b10-8312-4d938c7e8c39","savedPayload":{"position":{"x":30459.155615858406,"y":26477.432210756844},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"02H Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at02hs.bollingerSubChannel.slope === \"Side\"","project":"Superalgos","id":"b76599cd-7312-4aac-9dee-8e21dac4b1c6","savedPayload":{"position":{"x":30827.66413046462,"y":26464.09940576245},"targetPosition":{"x":30516.68342829796,"y":26577.08782664367},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"d274dddf-c518-4602-9e20-001b6b348fde","savedPayload":{"position":{"x":30516.68342829796,"y":26577.08782664367},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"3H Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at03hs.bollingerSubChannel.slope === \"Gentle\"","project":"Superalgos","id":"ef31d5cf-d980-494c-a6af-1970b0e5e172","savedPayload":{"position":{"x":30867.553738338807,"y":26690.30765351784},"targetPosition":{"x":30536.615120425296,"y":26690.247056499647},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"1e6adf92-f58a-4ebd-a125-f9b61d51ec59","savedPayload":{"position":{"x":30536.615120425296,"y":26690.247056499647},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"24H NOT Side","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at24hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"d6005505-7c26-4f5c-b94e-3c2a9e812f5c","savedPayload":{"position":{"x":30827.569746538582,"y":26916.60536481462},"targetPosition":{"x":30516.557563281174,"y":26803.48790071808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dac090bd-5be4-4193-b40b-3ce250f62d91","savedPayload":{"position":{"x":30516.557563281174,"y":26803.48790071808},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"Filter 1: 08H Deviation > 200 < 1500","code":"chart.at24hs.bollingerBand.deviation < chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"if (chart.at08hs.bollingerBand.deviation < 200 || chart.at08hs.bollingerBand.deviation > 1500) {false} else {true}","project":"Superalgos","id":"6198450f-adf9-4208-a125-e47b101f9b41","savedPayload":{"position":{"x":30712.457540158517,"y":27115.924174807195},"targetPosition":{"x":30458.916404160118,"y":26903.28840470694},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b1f55195-9a70-49fa-8025-51cdf0acdbeb","savedPayload":{"position":{"x":30458.916404160118,"y":26903.28840470694},"targetPosition":{"x":30205.19288829226,"y":26690.31329078506},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"196d7981-9230-4a94-b8c2-39ff25a22bb9","savedPayload":{"position":{"x":30205.19288829226,"y":26690.31329078506},"targetPosition":{"x":29886.80761807601,"y":26873.952197836297},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"1c30f570-4f8e-47cf-95c1-dd1f4244a77a","savedPayload":{"position":{"x":36774.828937198305,"y":30246.68511779572},"targetPosition":{"x":36598.49336151056,"y":30489.390216108204},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"999bf574-a88b-467f-a107-7e0770e6bd53","savedPayload":{"position":{"x":36598.49336151056,"y":30489.390216108204},"targetPosition":{"x":36645.42370102263,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openStage":{"type":"Open Stage","name":"New Open Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"My Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"8a81a2c0-357d-4c2d-a549-9051d7b2c6d0","savedPayload":{"position":{"x":29310.74429185348,"y":26135.925231485533},"targetPosition":{"x":29490.72213214349,"y":26413.63343525451},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"530d589f-dc6b-42f7-b3b5-6adda880314a","savedPayload":{"position":{"x":29490.72213214349,"y":26413.63343525451},"targetPosition":{"x":29713.25810661907,"y":26757.497431823882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInBaseAsset":{"type":"Target Size In Base Asset","name":"New Target Size In Base Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.episodeBaseAsset.balance.value","project":"Superalgos","id":"9e38415c-2e9d-49a8-aaaa-e76aa0532ed4","savedPayload":{"position":{"x":30048.04546530098,"y":26099.601809184736},"targetPosition":{"x":29898.80713430288,"y":26393.007908437554},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"dcdc1f5f-1691-4432-9e2e-3f8ad4c19314","savedPayload":{"position":{"x":29898.80713430288,"y":26393.007908437554},"targetPosition":{"x":29713.25810661907,"y":26757.497431823882},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7a57f4d9-ac42-4871-85b1-a300b42d7a0c","savedPayload":{"position":{"x":36773.77045750805,"y":30368.600330817048},"targetPosition":{"x":36781.62085094449,"y":30518.394761030235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"openExecution":{"type":"Open Execution","name":"New Open Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[],"marketSellOrders":[{"type":"Market Sell Order","name":"Quick Entry","config":"{\n\"percentageOfAlgorithmSize\": 100\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"aaea728c-75f9-46c1-8b15-99fa2990866a","savedPayload":{"position":{"x":31672.313230303967,"y":25824.146656659716},"targetPosition":{"x":31395.129677715006,"y":26004.146450725842},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"9992f0c6-f7e5-4ff5-bf21-bf809695e653","savedPayload":{"position":{"x":31395.129677715006,"y":26004.146450725842},"targetPosition":{"x":31117.86541023836,"y":26184.472636147766},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bf813257-1aca-4ba8-a5e4-5d372d740caa","savedPayload":{"position":{"x":31117.86541023836,"y":26184.472636147766},"targetPosition":{"x":30840.944486738517,"y":26364.783007690872},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"417a8b49-cb3b-4b7d-b6de-6a382302e09f","savedPayload":{"position":{"x":30840.944486738517,"y":26364.783007690872},"targetPosition":{"x":30563.358313810364,"y":26545.076976885663},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e575de70-9ec4-4936-9265-7cee85ef0b30","savedPayload":{"position":{"x":30563.358313810364,"y":26545.076976885663},"targetPosition":{"x":30285.880868034466,"y":26725.688458404235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Sell Order #1","id":"8e404329-d41f-41e0-ad5a-c84ee1fa2604"}}}],"limitBuyOrders":[],"limitSellOrders":[],"id":"d6c6a08b-6faa-466b-bc6c-b911bf033682","savedPayload":{"position":{"x":30285.880868034466,"y":26725.688458404235},"targetPosition":{"x":30006.985261483213,"y":26907.595409330774},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"8738b563-176d-44fa-acfa-ad74956f3ecf","savedPayload":{"position":{"x":36907.421436136305,"y":30436.69890577798},"targetPosition":{"x":36781.62085094449,"y":30518.394761030235},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"5c1cac76-fb50-4a6c-b6ef-86226587fa0e","savedPayload":{"position":{"x":36781.62085094449,"y":30518.394761030235},"targetPosition":{"x":36645.42370102263,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"manageStage":{"type":"Manage Stage","name":"Controlled Run","project":"Superalgos","managedStopLoss":{"type":"Managed Stop Loss","name":"New Stop","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 1.03","project":"Superalgos","id":"e0d94103-a97c-4960-b1aa-f7e1fcb656ca","savedPayload":{"position":{"x":30435.373187627898,"y":26433.442626884113},"targetPosition":{"x":30418.41142340035,"y":26764.553926388086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","code":"chart.at01hs.candle.previous.close < tradingEngine.current.position.entryTargetRate.value * 0.97","project":"Superalgos","id":"19778aea-457a-4483-8934-4a7e7786a933","savedPayload":{"position":{"x":30192.141148108312,"y":25816.3812063929},"targetPosition":{"x":30116.25156975211,"y":25966.088252169007},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3634294e-b331-44ba-b019-2143f4e7e317","savedPayload":{"position":{"x":30116.25156975211,"y":25966.088252169007},"targetPosition":{"x":30036.62178155317,"y":26122.485076258527},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7975987f-1e42-47e5-b668-8ec6776ec85a","savedPayload":{"position":{"x":30036.62178155317,"y":26122.485076258527},"targetPosition":{"x":29938.985570641154,"y":26314.618145328524},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"918cf3df-b5a6-4fa0-84b0-e2648e8e8ca8","savedPayload":{"position":{"x":30714.62037213189,"y":26614.76387331054},"targetPosition":{"x":30418.41142340035,"y":26764.553926388086},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"dca1bf8c-cda0-42e4-90c2-14448f3cffb2","savedPayload":{"position":{"x":30418.41142340035,"y":26764.553926388086},"targetPosition":{"x":30199.64927921225,"y":27100.670306965054},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage * 1.02 < tradingEngine.current.position.stopLoss.value) {chart.at01hs.bollingerBand.movingAverage * 1.02} else {tradingEngine.current.position.stopLoss.value}","project":"Superalgos","id":"928d3add-1690-4dfd-b2f8-455668fc742c","savedPayload":{"position":{"x":30779.54358001164,"y":26208.830100989988},"targetPosition":{"x":30599.410157852384,"y":26486.00436041432},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[],"announcements":[],"id":"51924a8f-f6b0-41f0-9fb5-8cd97d8d6531","savedPayload":{"position":{"x":30599.410157852384,"y":26486.00436041432},"targetPosition":{"x":30418.501785111286,"y":26764.416499694402},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6ba3063d-c882-44d2-a7c4-9915a220b17e","savedPayload":{"position":{"x":36994.42151353139,"y":30523.698983173068},"targetPosition":{"x":36912.72565827914,"y":30649.49956836488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"managedTakeProfit":{"type":"Managed Take Profit","name":"New Take Profit","project":"Superalgos","phases":[{"type":"Phase","name":"New Phase","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.position.entryTargetRate.value * 0.95","project":"Superalgos","id":"7c916535-3cd3-4b28-b671-06455eccdbc4","savedPayload":{"position":{"x":31110.452898142852,"y":27155.635931631317},"targetPosition":{"x":30816.156970159704,"y":27307.074013652535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"1H EMA7 < entryTargetRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value","project":"Superalgos","id":"452bd440-4b3f-4abc-a8d3-dbac108494ff","savedPayload":{"position":{"x":30832.919346028706,"y":26406.006248490805},"targetPosition":{"x":30693.757977412337,"y":26495.8816439992},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"35ecc05e-c241-4661-aef7-cf9cd3a0718f","savedPayload":{"position":{"x":30693.757977412337,"y":26495.8816439992},"targetPosition":{"x":30536.05771442775,"y":26591.95487646544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"positionPeriods > 2","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"tradingEngine.current.position.positionCounters.periods.value > 2","project":"Superalgos","id":"947fbe1d-2d73-413c-a66a-afc1d9fd5ea8","savedPayload":{"position":{"x":30850.32800473556,"y":26744.761999904855},"targetPosition":{"x":30702.80290933868,"y":26670.283962529254},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"73661d44-6a9d-4841-8f45-7240649a5d6d","savedPayload":{"position":{"x":30702.80290933868,"y":26670.283962529254},"targetPosition":{"x":30536.05771442775,"y":26591.95487646544},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1c59dd62-57a7-4ef6-9197-7b6fd102a06b","savedPayload":{"position":{"x":30536.05771442775,"y":26591.95487646544},"targetPosition":{"x":30321.1446263178,"y":26603.64229688271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"541feb51-68a3-4326-bd16-c7a91ec68cd2","savedPayload":{"position":{"x":31093.151675226647,"y":27488.23306520426},"targetPosition":{"x":30816.156970159704,"y":27307.074013652535},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[],"announcements":[],"id":"ba7462a2-9b77-4628-8be8-0700e49ed2a8","savedPayload":{"position":{"x":30816.156970159704,"y":27307.074013652535},"targetPosition":{"x":30415.258702478946,"y":27286.338727852977},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Manage: 3% Below ema7","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.97 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.97} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"f0ba9068-9fd8-46c1-89c6-c51c2127fad3","savedPayload":{"position":{"x":31163.841965768093,"y":26993.23270304936},"targetPosition":{"x":31146.366116487683,"y":27324.06513727981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"nextPhaseEvent":{"type":"Next Phase Event","name":"New Next Phase Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"3d7e602e-ca81-4d0f-808c-0b6987a224d4","savedPayload":{"position":{"x":20240.240828671245,"y":24894.970963939057},"targetPosition":{"x":20080.61013034513,"y":24536.97779059405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3cf490f8-fb04-4a14-aab8-1215009b40bd","savedPayload":{"position":{"x":20080.61013034513,"y":24536.97779059405},"targetPosition":{"x":19920.664668901947,"y":24178.943327043417},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"399b9981-c283-4140-8600-904bd8fae636","savedPayload":{"position":{"x":19920.664668901947,"y":24178.943327043417},"targetPosition":{"x":19760.48476489394,"y":23820.82522001162},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"19a0d710-315f-43b8-b1f0-8aca0f21d63e","savedPayload":{"position":{"x":31478.37453400236,"y":27441.36631811087},"targetPosition":{"x":31146.366116487683,"y":27324.06513727981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"6407cb18-e862-47c7-8c3d-2ac857597595","savedPayload":{"position":{"x":31226.909930003072,"y":28406.443672684218},"targetPosition":{"x":30936.555608360475,"y":28247.435458324624},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3218784f-7ac6-4f71-89ca-c13de6fb1e08","savedPayload":{"position":{"x":30936.555608360475,"y":28247.435458324624},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"31096ee3-5cb2-437c-911c-b8dac600eeda","savedPayload":{"position":{"x":31031.356076465352,"y":28627.09839294401},"targetPosition":{"x":30838.71675092652,"y":28357.883178535238},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4a59f893-ce98-40a8-a456-14758c0e3b72","savedPayload":{"position":{"x":30838.71675092652,"y":28357.883178535238},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < positionRate","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < tradingEngine.current.position.entryTargetRate.value * 0.99","project":"Superalgos","id":"39e213d0-6871-4fcc-8ba7-6485b15b8010","savedPayload":{"position":{"x":30759.564070389417,"y":28741.012509371096},"targetPosition":{"x":30702.752965354215,"y":28414.877956701952},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"a2c15f0e-3edb-4849-862a-dce24f143be6","savedPayload":{"position":{"x":30702.752965354215,"y":28414.877956701952},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"5d4916ab-3a59-42cd-ad42-2c9be833bb36","savedPayload":{"position":{"x":30465.959939454922,"y":28725.773313486556},"targetPosition":{"x":30555.874885328834,"y":28407.249699258085},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e90a9e18-c05e-4c34-8931-f934311d8be4","savedPayload":{"position":{"x":30555.874885328834,"y":28407.249699258085},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"1578e195-a319-4748-8204-f90d816fc4ae","savedPayload":{"position":{"x":30207.702766443697,"y":28584.46208332645},"targetPosition":{"x":30426.661562725058,"y":28336.528022427614},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"b48541a5-46c2-4e7e-a072-07d94c1b2ac9","savedPayload":{"position":{"x":30426.661562725058,"y":28336.528022427614},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Down && NOT Side","code":"chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Down\" && chart.at01hs.bollingerSubChannel.slope != \"Side\"","project":"Superalgos","id":"fb1f280f-632e-4097-b5da-dfdbacd169c3","savedPayload":{"position":{"x":30036.596332527653,"y":28345.086254141854},"targetPosition":{"x":30341.04138357284,"y":28216.794512212662},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0000df02-7c31-423f-a377-ee7a54e745b1","savedPayload":{"position":{"x":30341.04138357284,"y":28216.794512212662},"targetPosition":{"x":30645.757815348807,"y":28088.24450004683},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a9ea4174-771b-4b50-8376-05494437d912","savedPayload":{"position":{"x":30645.757815348807,"y":28088.24450004683},"targetPosition":{"x":30663.071229504196,"y":27741.673446254666},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"730610f1-2311-4486-8905-37c9c001d766","savedPayload":{"position":{"x":31129.517746292884,"y":27655.067383273177},"targetPosition":{"x":31146.366116487683,"y":27324.06513727981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"1a7c350c-eb3a-4d8a-af57-68aabda6fea7"}}}],"announcements":[],"id":"f631120e-4f0f-41f4-85b3-74778c8060c0","savedPayload":{"position":{"x":31146.366116487683,"y":27324.06513727981},"targetPosition":{"x":30816.165184490193,"y":27307.074492723572},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Close: BB Lower Band","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.deviation < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.bollingerBand.movingAverage - chart.at01hs.bollingerBand.standardDeviation * 2} else \n{tradingEngine.current.position.entryTargetRate.value * 0.97}","project":"Superalgos","id":"e0cee676-0034-4512-9ed3-b4f61df739bf","savedPayload":{"position":{"x":31722.180456538073,"y":27094.50405030886},"targetPosition":{"x":31476.27485905688,"y":27316.42073098317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Move to Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"2cd48b45-e3f4-4a76-8bf7-19470c990e1e","savedPayload":{"position":{"x":32160.954339536656,"y":27396.09762061706},"targetPosition":{"x":31926.962483285257,"y":27629.93166704668},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"17193755-5b37-4ee7-82ca-a14db05dbd30","savedPayload":{"position":{"x":31926.962483285257,"y":27629.93166704668},"targetPosition":{"x":31692.741517544404,"y":27864.123009587405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 div ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema21 - chart.at01hs.base7EMA.ema14 > chart.at01hs.base7EMA.previous.ema21 - chart.at01hs.base7EMA.previous.ema14","project":"Superalgos","id":"b8cb24ca-a2ce-4ae6-b5d9-63471af0095f","savedPayload":{"position":{"x":32332.4083458319,"y":27692.987548804726},"targetPosition":{"x":32012.762928838238,"y":27778.48423873228},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"4facbae1-8244-47d9-bf81-2ebf58477c34","savedPayload":{"position":{"x":32012.762928838238,"y":27778.48423873228},"targetPosition":{"x":31692.741517544404,"y":27864.123009587405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"4e3f128a-a12a-444d-b706-c54a910da68b","savedPayload":{"position":{"x":32332.48179869735,"y":28035.13069726801},"targetPosition":{"x":32012.807700154226,"y":27949.64561731559},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e2460f9b-c5ab-4502-9b39-38159b55534b","savedPayload":{"position":{"x":32012.807700154226,"y":27949.64561731559},"targetPosition":{"x":31692.741517544404,"y":27864.123009587405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema14 < ema21","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 < chart.at01hs.base7EMA.ema21 ","project":"Superalgos","id":"2a370595-33f8-4cf8-af80-e7871edcf8fa","savedPayload":{"position":{"x":32161.285578487958,"y":28331.9706917453},"targetPosition":{"x":31927.169050693803,"y":28098.14142320938},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"133e251e-2ac5-4ebd-8f4c-73eb8c8ba7e1","savedPayload":{"position":{"x":31927.169050693803,"y":28098.14142320938},"targetPosition":{"x":31692.741517544404,"y":27864.123009587405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Down && NOT Side or Gentle","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Down\" && chart.at01hs.bollingerSubChannel.slope != \"Side\" && chart.at01hs.bollingerSubChannel.slope != \"Gentle\"","project":"Superalgos","id":"55435ac8-859e-4665-842c-f6603923589e","savedPayload":{"position":{"x":31864.69748740887,"y":28503.481654427414},"targetPosition":{"x":31778.833314432442,"y":28183.922962779805},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee4dad2e-77dd-4f45-9847-c3c2e563d015","savedPayload":{"position":{"x":31778.833314432442,"y":28183.922962779805},"targetPosition":{"x":31692.741517544404,"y":27864.123009587405},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"42bd767a-7a9e-40dc-9973-ad6e2411e769","savedPayload":{"position":{"x":31692.741517544404,"y":27864.123009587405},"targetPosition":{"x":31356.85335669772,"y":27774.542463166923},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"f9f58805-ee92-40ac-be13-6d242a6a476f","savedPayload":{"position":{"x":31894.924270482217,"y":27286.697977487514},"targetPosition":{"x":31476.27485905688,"y":27316.42073098317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Run","id":"1a7c350c-eb3a-4d8a-af57-68aabda6fea7"}}},{"type":"Move To Phase Event","name":"Cancel Close","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 div ema14","code":"chart.atAnyTimeFrame.externalSignal.timestamp > chart.atAnyTimeFrame.externalSignal.timestamp","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 > chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"32c1fa99-99b6-4bdd-ad3d-fcb3858413fe","savedPayload":{"position":{"x":32003.47029723571,"y":28547.18591236195},"targetPosition":{"x":31683.640947019667,"y":28461.087164626275},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"8f146719-384b-4e16-a0b3-c7501eeca1dd","savedPayload":{"position":{"x":31683.640947019667,"y":28461.087164626275},"targetPosition":{"x":31364.0886272388,"y":28375.221605560444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 div prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 > chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"b1d2c06e-3c41-474c-b241-62639db26336","savedPayload":{"position":{"x":31694.996222339665,"y":28948.65527382773},"targetPosition":{"x":31529.500458955496,"y":28661.925480665785},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"655cd860-35be-4db4-8786-758133ade2f8","savedPayload":{"position":{"x":31529.500458955496,"y":28661.925480665785},"targetPosition":{"x":31364.0886272388,"y":28375.221605560444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"ema7 < ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.ema14","project":"Superalgos","id":"7b14d5ba-d792-4d0e-9c33-aae6abc015dd","savedPayload":{"position":{"x":31193.617501011395,"y":29014.74657093681},"targetPosition":{"x":31278.705259789735,"y":28694.929232194343},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"41486047-0d08-4227-8d03-3e844c75a3ea","savedPayload":{"position":{"x":31278.705259789735,"y":28694.929232194343},"targetPosition":{"x":31364.0886272388,"y":28375.221605560444},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"78031caf-041a-4f69-aea1-f9666aef959d","savedPayload":{"position":{"x":31364.0886272388,"y":28375.221605560444},"targetPosition":{"x":31190.77113086993,"y":28074.5398616331},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"ad7504d5-49ec-4fed-bc74-44f5f398def7","savedPayload":{"position":{"x":31697.852032028648,"y":27563.048140143997},"targetPosition":{"x":31476.27485905688,"y":27316.42073098317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"f631120e-4f0f-41f4-85b3-74778c8060c0"}}}],"announcements":[],"id":"bee5a88b-489f-48ce-be58-4531f815462a","savedPayload":{"position":{"x":31476.27485905688,"y":27316.42073098317},"targetPosition":{"x":31146.366116487683,"y":27324.06513727981},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Phase","name":"Run","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"if (chart.at01hs.base7EMA.ema7 * 0.8 < \ntradingEngine.current.position.entryTargetRate.value * 0.97) \n{chart.at01hs.base7EMA.ema7 * 0.8} else \n{tradingEngine.current.position.takeProfit.value}","project":"Superalgos","id":"6e3648cc-0d59-428a-acc2-afcf2a6e86c4","savedPayload":{"position":{"x":31965.765365082087,"y":27067.683451402198},"targetPosition":{"x":31785.136221255707,"y":27345.321644004936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"moveToPhaseEvents":[{"type":"Move To Phase Event","name":"Cancel Run","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"ema7 conv ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.ema14 - chart.at01hs.base7EMA.ema7 < chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7","project":"Superalgos","id":"d68720e4-049f-46b9-b412-f0378573a413","savedPayload":{"position":{"x":19478.870693897756,"y":25914.913440732285},"targetPosition":{"x":19233.289037172442,"y":25609.012661328474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"609ce0eb-a9ec-495a-9f99-cd5adeaa5824","savedPayload":{"position":{"x":19233.289037172442,"y":25609.012661328474},"targetPosition":{"x":18991.092642047013,"y":25307.55268022269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"prev.ema7 conv prev.ema14","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.base7EMA.previous.ema14 - chart.at01hs.base7EMA.previous.ema7 < chart.at01hs.base7EMA.previous.previous.ema14 - chart.at01hs.base7EMA.previous.previous.ema7","project":"Superalgos","id":"49efa579-e07f-432e-ab03-458909afe80a","savedPayload":{"position":{"x":18906.689833894925,"y":26088.945687796775},"targetPosition":{"x":18948.91570912904,"y":25698.367529994284},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"70e024f2-8dc4-443b-b7d0-8d979bd7879a","savedPayload":{"position":{"x":18948.91570912904,"y":25698.367529994284},"targetPosition":{"x":18991.092642047013,"y":25307.55268022269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Condition","name":"1H Up || Side, Gentle or Medium","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"chart.at01hs.bollingerSubChannel.direction === \"Up\" || chart.at01hs.bollingerSubChannel.slope === \"Side\" || chart.at01hs.bollingerSubChannel.slope === \"Gentle\" || chart.at01hs.bollingerSubChannel.slope === \"Medium\"","project":"Superalgos","id":"199cc33c-0e13-4de9-910a-c9d356e9d0d6","savedPayload":{"position":{"x":18379.255171744895,"y":25802.71286863055},"targetPosition":{"x":18685.152272428706,"y":25555.223942768105},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"3621eed7-d3f5-4350-8e53-6eb76377b10a","savedPayload":{"position":{"x":18685.152272428706,"y":25555.223942768105},"targetPosition":{"x":18991.092642047013,"y":25307.55268022269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dede1ba7-70c6-417a-a54a-14177afbd413","savedPayload":{"position":{"x":18991.092642047013,"y":25307.55268022269},"targetPosition":{"x":19041.145388877303,"y":24900.1252819843},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"76a5126e-7d21-4160-b25a-08631b6d519a","savedPayload":{"position":{"x":32063.065574665678,"y":27525.504609599462},"targetPosition":{"x":31785.136221255707,"y":27345.321644004936},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Phase","name":"Manage: 3% Below ema7","id":"f631120e-4f0f-41f4-85b3-74778c8060c0"}}}],"announcements":[],"id":"1a7c350c-eb3a-4d8a-af57-68aabda6fea7","savedPayload":{"position":{"x":31785.136221255707,"y":27345.321644004936},"targetPosition":{"x":31476.27485905688,"y":27316.42073098317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a3dd2636-1b11-4d0a-8a32-945e790a97e5","savedPayload":{"position":{"x":37062.520088492325,"y":30657.349961801323},"targetPosition":{"x":36912.72565827914,"y":30649.49956836488},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"6af83cfb-a8f9-4313-8013-495ed37ee6f5","savedPayload":{"position":{"x":36912.72565827914,"y":30649.49956836488},"targetPosition":{"x":36645.42370102263,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeStage":{"type":"Close Stage","project":"Superalgos","initialTargets":{"type":"Initial Targets","name":"New Initial Targets","project":"Superalgos","targetRate":{"type":"Target Rate","name":"New Target Rate","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.episode.candle.close.value","project":"Superalgos","id":"39714970-7a27-412a-93ee-86e793262cc2","savedPayload":{"position":{"x":30859.05061931829,"y":27088.766071439997},"targetPosition":{"x":30650.734631299514,"y":27345.16371960425},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"587f4120-6e47-4a59-ae01-edee731eb2fe","savedPayload":{"position":{"x":30650.734631299514,"y":27345.16371960425},"targetPosition":{"x":30392.367040420577,"y":27663.17834875628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"targetSizeInQuotedAsset":{"type":"Target Size In Quoted Asset","name":"New Target Size In Quoted Asset","project":"Superalgos","formula":{"type":"Formula","name":"New Formula","code":"tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value","project":"Superalgos","id":"366084ff-7027-403c-a20a-40d9308cd3ed","savedPayload":{"position":{"x":31122.575818368736,"y":27778.94754607285},"targetPosition":{"x":30795.51316618894,"y":27727.11568542081},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"e9bb0180-bce1-440e-9e5e-5d6ddf63e163","savedPayload":{"position":{"x":30795.51316618894,"y":27727.11568542081},"targetPosition":{"x":30392.367040420577,"y":27663.17834875628},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2fb1e698-028f-43a5-a380-024e4607f5dc","savedPayload":{"position":{"x":37081.767267175754,"y":30778.87186536702},"targetPosition":{"x":36941.73020320117,"y":30832.627057798814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"closeExecution":{"type":"Close Execution","project":"Superalgos","executionAlgorithms":[{"type":"Execution Algorithm","name":"New Execution Algorithm","config":"{\n\"percentageOfStageTargetSize\": 100 \n}","project":"Superalgos","marketBuyOrders":[{"type":"Market Buy Order","name":"Quick Exit","config":"{\n\"percentageOfAlgorithmSize\": 100,\n\"spawnMultipleOrders\": false\n}","project":"Superalgos","createOrderEvent":{"type":"Create Order Event","name":"New Create Order Event","project":"Superalgos","situations":[{"type":"Situation","name":"New Situation","project":"Superalgos","conditions":[{"type":"Condition","name":"New Condition","project":"Superalgos","javascriptCode":{"type":"Javascript Code","name":"New Javascript Code","code":"true","project":"Superalgos","id":"9cf7ec1d-7cec-4b00-8938-2724ab31308f","savedPayload":{"position":{"x":29099.682582886584,"y":28243.411996100782},"targetPosition":{"x":29059.106797338514,"y":28051.23246422733},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"ee800c76-ec26-4156-9e65-c8a8ba09b00a","savedPayload":{"position":{"x":29059.106797338514,"y":28051.23246422733},"targetPosition":{"x":29018.425466202694,"y":27858.37898519233},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d2660921-d3f8-4b4a-b5cd-d982f6863fdf","savedPayload":{"position":{"x":29018.425466202694,"y":27858.37898519233},"targetPosition":{"x":28968.897045204394,"y":27623.844444671726},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"announcements":[],"id":"19b0ab5e-f2ca-47f9-98fe-b43917714700","savedPayload":{"position":{"x":31171.82917240986,"y":28662.58598331229},"targetPosition":{"x":30914.888169734288,"y":28454.56183304584},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"3b0ef4ee-e948-43aa-a2f6-db556880d6df","savedPayload":{"position":{"x":30914.888169734288,"y":28454.56183304584},"targetPosition":{"x":30657.8106193906,"y":28246.444237643365},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market Order","name":"Market Buy Order #1","id":"7d6c3ac9-4869-4ff3-a9f2-2a6f8a31ccf3"}}}],"marketSellOrders":[],"limitBuyOrders":[],"limitSellOrders":[],"id":"490a2173-4a73-4822-a292-c45afc643262","savedPayload":{"position":{"x":30657.8106193906,"y":28246.444237643365},"targetPosition":{"x":30340.456811626922,"y":27989.558152378777},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"525d3607-b2b2-4345-af7c-fdde1b649060","savedPayload":{"position":{"x":37058.30209741972,"y":30927.02511645629},"targetPosition":{"x":36941.73020320117,"y":30832.627057798814},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"announcements":[],"id":"0d1db0bb-2e8d-4289-93cd-b2a5e2d6b77c","savedPayload":{"position":{"x":36941.73020320117,"y":30832.627057798814},"targetPosition":{"x":36645.42370102263,"y":30785.696718286745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f1787887-41aa-41d4-80c5-34db452cd148","savedPayload":{"position":{"x":36645.42370102263,"y":30785.696718286745},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3313017d-fdce-481b-9679-fe8e4f67cd45","savedPayload":{"position":{"x":36433.291666666664,"y":30997.82875264271},"targetPosition":{"x":36433.291666666664,"y":30997.82875264271},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}]} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Weak-Hands-Buster v2.json b/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Weak-Hands-Buster v2.json deleted file mode 100644 index 81db42efb..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Plugins/Workspaces/Weak-Hands-Buster v2.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"Workspace","name":"Weak-hands Buster v2","rootNodes":[{"type":"Network","name":"My Network","project":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","config":"{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"18041\"\n}","project":"Superalgos","dataMining":{"type":"Data Mining","name":"New Data Mining","project":"Superalgos","exchangeDataTasks":[{"type":"Exchange Data Tasks","name":"Binance","project":"Superalgos","marketDataTasks":[{"type":"Market Data Tasks","name":"Binance BTC/USDT","project":"Superalgos","dataMineTasks":[{"type":"Data Mine Tasks","name":"Sparta","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Sparta","project":"Superalgos","tasks":[{"type":"Task","name":"EMA","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"EMA","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","project":"Superalgos","id":"9adffd60-8756-44f0-9290-692711f43349","savedPayload":{"position":{"x":23470.126508730755,"y":29652.495915209296},"targetPosition":{"x":23770.126508730755,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"278c34a7-199d-400e-8a06-087149e3d391"}}},{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Daily","project":"Superalgos","id":"559fc728-018a-4e8e-a5fa-1e37958e4f6c","savedPayload":{"position":{"x":23620.126508730755,"y":29392.688294073963},"targetPosition":{"x":23770.126508730755,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"943ea24f-ee24-4eae-9b4b-e8a73122b1c2"}}}],"id":"82a8c05f-a6f6-4728-8271-7b327c2b72ee","savedPayload":{"position":{"x":23770.126508730755,"y":29652.495915209296},"targetPosition":{"x":24029.934129866087,"y":29802.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8ae4fc50-8c1f-4e45-9ffd-fad368816b9a","savedPayload":{"position":{"x":24029.934129866087,"y":29802.495915209296},"targetPosition":{"x":24289.74175100142,"y":29952.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51b49b9d-cb97-4d98-ad8f-9f691320bac2","savedPayload":{"position":{"x":24289.74175100142,"y":29952.495915209296},"targetPosition":{"x":24549.549372136753,"y":30102.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"63728769-73e4-474e-8aa3-0d82bedca08e","savedPayload":{"position":{"x":24549.549372136753,"y":30102.495915209296},"targetPosition":{"x":24809.356993272086,"y":30252.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"type":"Data Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"Exchange Raw Data","project":"Superalgos","bot":{"type":"Sensor Bot Instance","name":"Exchange Raw Data","config":"{ \n\"startDate\": \"2020-01-01\"\n}","project":"Superalgos","processes":[{"type":"Sensor Process Instance","name":"Exchange Raw Data Historic-OHLCVs","project":"Superalgos","id":"149bc037-9762-4737-b1b8-945b5ccee230","savedPayload":{"position":{"x":24081.241698334637,"y":29123.489188146068},"targetPosition":{"x":24323.94679664712,"y":29299.82476383381},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Historic-OHLCVs","id":"5eb11d6a-022e-4f60-97c4-d6cf90b249dc"}}}],"id":"507bc325-1cbd-40f4-85eb-cfe77b78000e","savedPayload":{"position":{"x":24323.94679664712,"y":29299.82476383381},"targetPosition":{"x":24566.651894959603,"y":29476.160339521553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c28a4a4-86da-43be-9e89-d01b202f27eb","savedPayload":{"position":{"x":24566.651894959603,"y":29476.160339521553},"targetPosition":{"x":24809.356993272086,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Candles Volumes","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Candles Volumes","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Market","project":"Superalgos","id":"ab6608d2-a876-42ca-afee-6ea8e996b720","savedPayload":{"position":{"x":24401.003349003902,"y":28881.122823524547},"targetPosition":{"x":24623.94679664712,"y":29081.862005432205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"9f683143-a33f-42c1-9fa8-c601f01ee4e1"}}},{"type":"Indicator Process Instance","name":"Candles Volumes Multi-Period-Daily","project":"Superalgos","id":"6eebde17-ba9a-4ba6-9ef8-862762a9951a","savedPayload":{"position":{"x":24686.320303892448,"y":28788.417725212064},"targetPosition":{"x":24623.94679664712,"y":29081.862005432205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"980ceb1d-7be6-454f-90d9-01ba1fd4a65d"}}}],"id":"3e3e037f-722b-46ed-b355-09a4116c2959","savedPayload":{"position":{"x":24623.94679664712,"y":29081.862005432205},"targetPosition":{"x":24716.651894959603,"y":29367.17896032075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f351c034-5a40-4831-aaaf-b92b97694e24","savedPayload":{"position":{"x":24716.651894959603,"y":29367.17896032075},"targetPosition":{"x":24809.356993272086,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Bands","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Bands","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Market","project":"Superalgos","id":"9edfd024-2a02-4809-89cf-c79b52a4adf9","savedPayload":{"position":{"x":24932.393682651724,"y":28788.417725212064},"targetPosition":{"x":24994.76718989705,"y":29081.862005432205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"941a0543-0cc0-4a5d-a782-728d2835c100"}}},{"type":"Indicator Process Instance","name":"Bollinger Bands Multi-Period-Daily","project":"Superalgos","id":"bc6520ae-f5e7-4d43-882d-f032dfe725ff","savedPayload":{"position":{"x":25217.71063754027,"y":28881.122823524547},"targetPosition":{"x":24994.76718989705,"y":29081.862005432205},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"e598ee86-1e18-4aa1-95c2-64aaf66776ca"}}}],"id":"f5669135-8f3d-4ada-aef6-a503f831f612","savedPayload":{"position":{"x":24994.76718989705,"y":29081.862005432205},"targetPosition":{"x":24902.06209158457,"y":29367.17896032075},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"db37b827-4200-4cfa-b973-9ad2c5d5c587","savedPayload":{"position":{"x":24902.06209158457,"y":29367.17896032075},"targetPosition":{"x":24809.356993272086,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Task","name":"Bollinger Channels","project":"Superalgos","bot":{"type":"Indicator Bot Instance","name":"Bollinger Channels","config":"{}","project":"Superalgos","processes":[{"type":"Indicator Process Instance","name":"Bollinger Channels Multi-Period-Market","project":"Superalgos","id":"e09e4195-bf40-4b14-b603-51872fdb7156","savedPayload":{"position":{"x":25416.78818281979,"y":29025.76112654103},"targetPosition":{"x":25294.76718989705,"y":29299.82476383381},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Market","id":"28be432d-80ca-46b3-859a-55541e24b2b4"}}},{"type":"Indicator Process Instance","name":"Bollinger Channels Multi-Period-Daily","project":"Superalgos","id":"40de2dfa-6faf-4dc3-b21e-8cf8e4a274f4","savedPayload":{"position":{"x":25593.123758507532,"y":29268.466224853513},"targetPosition":{"x":25294.76718989705,"y":29299.82476383381},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Multi-Period-Daily","id":"bc15b49d-4547-4bac-a28b-193eb0158fe3"}}}],"id":"d890cbea-6399-4b88-ab5c-df5f9704817b","savedPayload":{"position":{"x":25294.76718989705,"y":29299.82476383381},"targetPosition":{"x":25052.06209158457,"y":29476.160339521553},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"039dc305-4627-406e-8f40-ee2527cd4b99","savedPayload":{"position":{"x":25052.06209158457,"y":29476.160339521553},"targetPosition":{"x":24809.356993272086,"y":29652.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbf6546f-5c9f-476d-ae9d-cfdc4a27cd58","savedPayload":{"position":{"x":24809.356993272086,"y":29652.495915209296},"targetPosition":{"x":24809.356993272086,"y":29952.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c43a111f-2783-490f-8570-3fd38f6fa76c","savedPayload":{"position":{"x":24809.356993272086,"y":29952.495915209296},"targetPosition":{"x":24809.356993272086,"y":30252.495915209296},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"e83ad2a7-9bd0-41d1-aa76-4c889e76e482","savedPayload":{"position":{"x":24809.356993272086,"y":30252.495915209296},"targetPosition":{"x":24959.356993272086,"y":30512.30353634463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"af949a76-a6f4-4ec6-869e-f240480eea81","savedPayload":{"position":{"x":24959.356993272086,"y":30512.30353634463},"targetPosition":{"x":25109.356993272086,"y":30772.11115747996},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a","savedPayload":{"position":{"x":25109.356993272086,"y":30772.11115747996},"targetPosition":{"x":25259.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMining":{"type":"Learning Mining","name":"New Learning Mining","project":"Superalgos","exchangeLearningTasks":[],"id":"2cd8cc1a-d9a0-4297-878f-b704894e968a","savedPayload":{"position":{"x":25409.356993272086,"y":30772.11115747996},"targetPosition":{"x":25259.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"testingEnvironment":{"type":"Testing Environment","name":"New Testing Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"WHB v2","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Backtesting Session","name":"WHB v2","config":"{\"folderName\":\"WHB-v2\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"fa7ece1b-0925-444a-808e-0175da02b228","savedPayload":{"position":{"x":28035.291877706186,"y":30552.48478700282},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"00b998af-5c29-48c8-8826-d4e63c18540e","savedPayload":{"position":{"x":28124.55868811598,"y":30523.48024208079},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-01-01\",\n\"finalDatetime\": \"2020-07-01\" \n}","project":"Superalgos","id":"6e3026a7-d451-4231-bb5a-eff95464b280","savedPayload":{"position":{"x":28218.41936714012,"y":30523.48024208079},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"9f69f044-6d39-4c9a-88a3-5dc634e28bca","savedPayload":{"position":{"x":28307.686177549913,"y":30552.48478700282},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.1,\n\"takeProfit\": 0.1\n}","project":"Superalgos","id":"be861734-9d9c-479c-b89d-6f39067b42af","savedPayload":{"position":{"x":28383.621061984013,"y":30607.654709903367},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"2af98d0e-47b3-4714-a24a-8f4b6e856a17","savedPayload":{"position":{"x":28438.79098488456,"y":30683.589594337467},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"227439e1-61ea-48fc-a41c-891af977b8ab","savedPayload":{"position":{"x":28467.79552980659,"y":30772.85640474726},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"2884bf0f-cd27-492f-a014-b41bc6b616e3","savedPayload":{"position":{"x":28467.79552980659,"y":30866.7170837714},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"9fe3c9a4-2961-402a-93d6-9659772d4954","savedPayload":{"position":{"x":28438.79098488456,"y":30955.983894181194},"targetPosition":{"x":28171.48902762805,"y":30819.78674425933},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"caa614ed-c80e-4d7c-82f6-22dd05cc047c","savedPayload":{"position":{"x":28171.48902762805,"y":30819.78674425933},"targetPosition":{"x":27959.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"WHB v2","project":"Superalgos","id":"3843eabf-52dc-4dae-aa28-d9187a009aab","savedPayload":{"position":{"x":28259.356993272086,"y":31031.918778615294},"targetPosition":{"x":27959.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"WHB v2","id":"975c2fc3-a8f5-43e9-900f-4a4f2430d128"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"0c3253e9-355e-47f1-85ae-881bd64ed0d5","savedPayload":{"position":{"x":28171.48902762805,"y":31244.050812971258},"targetPosition":{"x":27959.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"1ff8cd88-dcd9-4528-b406-05647ddd8c9c","savedPayload":{"position":{"x":27959.356993272086,"y":31031.918778615294},"targetPosition":{"x":27659.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cf364276-eeae-4d16-b90c-3da9aecacfa0","savedPayload":{"position":{"x":27659.356993272086,"y":31031.918778615294},"targetPosition":{"x":27359.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"f55d9c28-8196-4b23-a840-769fbec83000","savedPayload":{"position":{"x":27359.356993272086,"y":31031.918778615294},"targetPosition":{"x":27059.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f3dccd9e-6130-40aa-b794-fca344df4a99","savedPayload":{"position":{"x":27059.356993272086,"y":31031.918778615294},"targetPosition":{"x":26759.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true}}}],"id":"c1604baa-e824-4b58-b252-922a9fc879cf","savedPayload":{"position":{"x":26759.356993272086,"y":31031.918778615294},"targetPosition":{"x":26459.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true}}}],"id":"2ef6bd4b-57a2-46d9-be37-5c16e315f4a3","savedPayload":{"position":{"x":26459.356993272086,"y":31031.918778615294},"targetPosition":{"x":26159.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"85153016-33c7-484d-9f10-2fc313f19051","savedPayload":{"position":{"x":26159.356993272086,"y":31031.918778615294},"targetPosition":{"x":25859.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"ba36975c-08d6-458d-b7c0-eb4684a85b5d","savedPayload":{"position":{"x":25859.356993272086,"y":31031.918778615294},"targetPosition":{"x":25559.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"5882d8a8-345b-4188-b1c1-797e9ff805d9","savedPayload":{"position":{"x":25559.356993272086,"y":31031.918778615294},"targetPosition":{"x":25259.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":true}}},"productionEnvironment":{"type":"Production Environment","name":"New Production Environment","project":"Superalgos","exchangeTradingTasks":[{"type":"Exchange Trading Tasks","name":"Binance","project":"Superalgos","marketTradingTasks":[{"type":"Market Trading Tasks","name":"Binance BTC/USDT","project":"Superalgos","tradingMineTasks":[{"type":"Trading Mine Tasks","name":"Masters","project":"Superalgos","taskManagers":[{"type":"Task Manager","name":"Masters","project":"Superalgos","tasks":[{"type":"Task","name":"WHB v2","project":"Superalgos","bot":{"type":"Trading Bot Instance","name":"Low Frequency","config":"{}","project":"Superalgos","processes":[{"type":"Trading Process Instance","name":"Low Frequency Trading","project":"Superalgos","session":{"type":"Live Trading Session","name":"WHB v2","config":"{\"folderName\":\"WHB-v2\"}","project":"Superalgos","tradingParameters":{"type":"Trading Parameters","name":"New Parameters","project":"Superalgos","sessionBaseAsset":{"type":"Session Base Asset","name":"","config":"{\n\"initialBalance\": 1,\n\"minimumBalance\": 0\n}","project":"Superalgos","id":"785c152d-03f4-4c42-8107-2a4481dc1c77","savedPayload":{"position":{"x":27786.93971977504,"y":32274.70211811437},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"sessionQuotedAsset":{"type":"Session Quoted Asset","name":"","config":"{\n\"initialBalance\": 0\n}","project":"Superalgos","id":"b9daac05-6265-40e9-b5e7-eeabbf7f2144","savedPayload":{"position":{"x":27876.206530184834,"y":32303.7066630364},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeRange":{"type":"Time Range","name":"New Time Range","config":"{ \n\"initialDatetime\": \"2020-01-01\",\n\"finalDatetime\": \"2020-07-01\" \n}","project":"Superalgos","id":"b5971ea3-aa3b-4691-8bf1-5c5f6ba3950c","savedPayload":{"position":{"x":27952.141414618935,"y":32358.876585936945},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrame":{"type":"Time Frame","name":"New Time Frame","config":"{ \n\"label\": \"01-hs\"\n}","project":"Superalgos","id":"00a93153-88b7-4c62-82e3-ca96e9e56025","savedPayload":{"position":{"x":28007.31133751948,"y":32434.811470371045},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"slippage":{"type":"Slippage","name":"New Slippage","config":"{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.1,\n\"takeProfit\": 0.1\n}","project":"Superalgos","id":"0047f446-0cfc-42f5-8a57-a7599f97ea1a","savedPayload":{"position":{"x":28036.31588244151,"y":32524.07828078084},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"feeStructure":{"type":"Fee Structure","name":"New Fee Structure","config":"{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}","project":"Superalgos","id":"f137906d-664b-4a00-8814-00dabcc8b386","savedPayload":{"position":{"x":28036.31588244151,"y":32617.93895980498},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"snapshots":{"type":"Snapshots","name":"New Snapshots","config":"{ \n\"strategy\": true,\n\"position\": true\n}","project":"Superalgos","id":"5173568a-1f7f-461e-aa3b-006193997bac","savedPayload":{"position":{"x":28007.31133751948,"y":32707.205770214772},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"heartbeats":{"type":"Heartbeats","name":"New Heartbeats","config":"{ \n\"date\": true,\n\"candleIndex\": false\n}","project":"Superalgos","id":"85f19b17-a752-4f20-a740-14883258f9bc","savedPayload":{"position":{"x":27952.141414618935,"y":32783.14065464887},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"userDefinedParameters":{"type":"User Defined Parameters","name":"New User Defined Parameters","config":"{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}","project":"Superalgos","id":"3c15c609-1a9c-4712-a7eb-1aad80fcd20b","savedPayload":{"position":{"x":27876.206530184834,"y":32838.31057754942},"targetPosition":{"x":27740.00938026297,"y":32571.00862029291},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8bf92d7-9037-4ddd-9a93-0963005465c4","savedPayload":{"position":{"x":27740.00938026297,"y":32571.00862029291},"targetPosition":{"x":27443.70287808443,"y":32617.93895980498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingSystemReference":{"type":"Trading System Reference","name":"WHB v2","project":"Superalgos","id":"52a08de1-1413-4a74-ab6b-5e50dd862b33","savedPayload":{"position":{"x":27686.407976396913,"y":32794.27453549272},"targetPosition":{"x":27443.70287808443,"y":32617.93895980498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading System","name":"WHB v2","id":"975c2fc3-a8f5-43e9-900f-4a4f2430d128"}}},"tradingEngineReference":{"type":"Trading Engine Reference","name":"Low-Frequency","project":"Superalgos","id":"25ecae9f-e4e3-4c35-9a75-ff9e7b5f5b5b","savedPayload":{"position":{"x":27490.6332175965,"y":32914.24546198352},"targetPosition":{"x":27443.70287808443,"y":32617.93895980498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Trading Engine","name":"Low-Frequency","id":"eb20f622-71bf-4479-a574-d2320e1d4bd1"}}},"id":"934095e8-4a1c-4baf-828f-7818f73c4219","savedPayload":{"position":{"x":27443.70287808443,"y":32617.93895980498},"targetPosition":{"x":27200.997779771948,"y":32441.603384117236},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5ce11ebc-6b00-40a7-b78b-650650dc561c","savedPayload":{"position":{"x":27200.997779771948,"y":32441.603384117236},"targetPosition":{"x":26958.292681459465,"y":32265.267808429493},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Process Definition","name":"Trading","id":"a8c8d761-96e5-4a86-9285-6c3881d61442"}}}],"id":"b648768f-57f7-49c9-89a6-c5c6f9d88fc2","savedPayload":{"position":{"x":26958.292681459465,"y":32265.267808429493},"targetPosition":{"x":26715.587583146982,"y":32088.93223274175},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"edfaadd0-892d-49b6-8353-c4864f4446d2","savedPayload":{"position":{"x":26715.587583146982,"y":32088.93223274175},"targetPosition":{"x":26472.8824848345,"y":31912.596657054008},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"18684d79-f3d4-4164-9926-aefa1fb42218","savedPayload":{"position":{"x":26472.8824848345,"y":31912.596657054008},"targetPosition":{"x":26230.177386522017,"y":31736.261081366265},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2e9d816-e6c9-4783-b6dd-42997c660372","savedPayload":{"position":{"x":26230.177386522017,"y":31736.261081366265},"targetPosition":{"x":25987.472288209534,"y":31559.925505678522},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"eaa22575-ca9c-4851-bc7f-3bf05161e58a","savedPayload":{"position":{"x":25987.472288209534,"y":31559.925505678522},"targetPosition":{"x":25744.76718989705,"y":31383.58992999078},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"d539c0ac-aaeb-4c44-9dba-ac26df819a8d","savedPayload":{"position":{"x":25744.76718989705,"y":31383.58992999078},"targetPosition":{"x":25502.06209158457,"y":31207.254354303037},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"65a40d20-837c-4652-8356-f8054b4e1346","savedPayload":{"position":{"x":25409.356993272086,"y":31291.726399750627},"targetPosition":{"x":25259.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"u"}}},"dataStorage":{"type":"Data Storage","name":"New Data Storage","project":"Superalgos","dataMinesData":{"type":"Data Mines Data","name":"New Data Mines Data","project":"Superalgos","exchangeDataProducts":[{"type":"Exchange Data Products","name":"Binance","project":"Superalgos","marketDataProducts":[{"type":"Market Data Products","name":"Binance BTC/USDT","project":"Superalgos","dataProducts":[],"dataMineProducts":[{"type":"Data Mine Products","name":"Sparta","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"EMA","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Popular EMAs","project":"Superalgos","id":"8b3b410e-0728-457a-a2ac-640f8839592c","savedPayload":{"position":{"x":25161.398909450258,"y":31777.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Popular EMAs","id":"d5894707-b065-429b-ba6b-78c71e6529fe"}}},{"type":"Data Product","name":"Base5 EMAs","project":"Superalgos","id":"c0043adc-1516-45f9-8044-71dac10926b4","savedPayload":{"position":{"x":25227.398909450258,"y":31791.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base5 EMAs","id":"9a37881e-7d9a-4279-95b2-8743de82eec5"}}},{"type":"Data Product","name":"Base6 EMAs","project":"Superalgos","id":"6ad6f193-f293-474a-892d-452ee224e923","savedPayload":{"position":{"x":25258.398909450258,"y":31737.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base6 EMAs","id":"e4267570-575b-4e59-9667-cb78aaae052c"}}},{"type":"Data Product","name":"Base7 EMAs","project":"Superalgos","id":"45eea564-7729-421c-b871-acda5a5ae81e","savedPayload":{"position":{"x":25221.398909450258,"y":31741.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base7 EMAs","id":"b42348a4-6a26-4d46-aa2e-cbf5fa0a4984"}}},{"type":"Data Product","name":"Base11 EMAs","project":"Superalgos","id":"fe10ecb5-0593-4c6b-9fd0-1729976ce713","savedPayload":{"position":{"x":25325.398909450258,"y":31871.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base11 EMAs","id":"21df4f44-96eb-453b-8652-4ce2dc03424c"}}},{"type":"Data Product","name":"Base12 EMAs","project":"Superalgos","id":"3457daa7-4c0c-4c71-abe8-176e9fb806ae","savedPayload":{"position":{"x":25220.398909450258,"y":31722.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base12 EMAs","id":"43d6f23d-d206-47e9-95d4-6bef34377014"}}},{"type":"Data Product","name":"Base30 EMAs","project":"Superalgos","id":"4bca4b0e-6942-4322-90a3-3a976614d591","savedPayload":{"position":{"x":25144.398909450258,"y":31759.12429394412},"targetPosition":{"x":25232.398909450258,"y":31807.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Base30 EMAs","id":"4394346c-7c25-478f-9be7-04f071dc673c"}}}],"dataProductFolders":[],"id":"39b86066-ae70-4cde-9fd6-b463addf0e77","savedPayload":{"position":{"x":25755.2507805109,"y":32642.4554694507},"targetPosition":{"x":25554.511598603243,"y":32419.51202180748},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cc85c8b7-657d-4589-8373-ac3ff5cf3c6a","savedPayload":{"position":{"x":25554.511598603243,"y":32419.51202180748},"targetPosition":{"x":25353.772416695585,"y":32196.568574164263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Sparta","id":"9cfffc48-486a-48cb-b641-98c82e314d3a"}}},{"type":"Data Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Exchange Raw Data","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trades","project":"Superalgos","id":"b5217c9e-0fc7-4714-839a-6639437f21ad","savedPayload":{"position":{"x":25312.398909450258,"y":32193.12429394412},"targetPosition":{"x":25377.398909450258,"y":32126.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trades","id":"38dbb942-a15b-450b-a867-02a94030965f"}}},{"type":"Data Product","name":"Candles","project":"Superalgos","id":"18490446-c8fe-4061-8a9e-c4f2b8c67677","savedPayload":{"position":{"x":25399.398909450258,"y":32164.12429394412},"targetPosition":{"x":25377.398909450258,"y":32126.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"2443883b-6959-42a3-ae3b-ef3102ffcdcc"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"475838db-033e-4bf5-9c06-5a649d8b6e4d","savedPayload":{"position":{"x":25304.398909450258,"y":32147.12429394412},"targetPosition":{"x":25377.398909450258,"y":32126.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"3a43c6f3-bac0-404e-865f-822eb48c8660"}}}],"dataProductFolders":[],"id":"f6344699-6b56-4863-97ba-b3ab72e9cdd8","savedPayload":{"position":{"x":25437.402894070845,"y":32724.59062736529},"targetPosition":{"x":25261.067318383102,"y":32481.885529052808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Candles Volumes","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Candles","project":"Superalgos","id":"70d84756-8e7a-4dfc-8aae-abf8affc802f","savedPayload":{"position":{"x":25349.398909450258,"y":32166.12429394412},"targetPosition":{"x":25326.398909450258,"y":32072.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Candles","id":"fe6065ec-4d2d-47a0-bae0-8647f0e195d7"}}},{"type":"Data Product","name":"Volumes","project":"Superalgos","id":"5a47df0f-0524-401a-b5f4-f292eda68238","savedPayload":{"position":{"x":25418.398909450258,"y":32043.12429394412},"targetPosition":{"x":25326.398909450258,"y":32072.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"1a366aef-efef-470e-88e0-2a6fbe4dd91f"}}}],"dataProductFolders":[],"id":"ce53c027-2bdd-48b6-a42c-43bd762d723d","savedPayload":{"position":{"x":25261.067318383102,"y":32781.88552905281},"targetPosition":{"x":25261.067318383102,"y":32481.885529052808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Bands","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Bands","project":"Superalgos","id":"d50dcdf4-6251-4c59-9a04-d5dedadd86f7","savedPayload":{"position":{"x":25213.398909450258,"y":32108.12429394412},"targetPosition":{"x":25259.398909450258,"y":32022.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","project":"Superalgos","id":"1e029c1d-85c8-4d3d-90d8-388bf135d110","savedPayload":{"position":{"x":25217.398909450258,"y":32036.12429394412},"targetPosition":{"x":25259.398909450258,"y":32022.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}}],"dataProductFolders":[],"id":"41f6cc17-d2ef-4a8e-a30b-c0dbcf515d25","savedPayload":{"position":{"x":25084.73174269536,"y":32724.59062736529},"targetPosition":{"x":25261.067318383102,"y":32481.885529052808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Products","name":"Bollinger Channels","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Bollinger Channels Objects","project":"Superalgos","id":"aba646d5-9b32-48d6-abc3-e9fa8405b279","savedPayload":{"position":{"x":25304.398909450258,"y":32189.12429394412},"targetPosition":{"x":25226.398909450258,"y":32100.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Channels","project":"Superalgos","id":"241723cd-ae4d-4990-88f8-29bfad2e14ed","savedPayload":{"position":{"x":25230.398909450258,"y":32178.12429394412},"targetPosition":{"x":25226.398909450258,"y":32100.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels","id":"94bc3958-cc85-43a1-a178-103e84f42910"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","project":"Superalgos","id":"e171424f-d37d-46d5-aada-1d66ccb0961f","savedPayload":{"position":{"x":25237.398909450258,"y":32032.12429394412},"targetPosition":{"x":25226.398909450258,"y":32100.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}},{"type":"Data Product","name":"Bollinger Sub-Channels","project":"Superalgos","id":"f8686b62-8ca9-4b30-9c27-9844c109d987","savedPayload":{"position":{"x":25226.398909450258,"y":32042.12429394412},"targetPosition":{"x":25226.398909450258,"y":32100.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels","id":"79ce9c05-8a4c-4b58-850f-288037acc702"}}}],"dataProductFolders":[],"id":"8c843479-10c3-4ac3-8566-42574738e89c","savedPayload":{"position":{"x":24975.750363494557,"y":32574.59062736529},"targetPosition":{"x":25261.067318383102,"y":32481.885529052808},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f527bdd3-f5bc-4248-a35f-ac7e591c3aec","savedPayload":{"position":{"x":25261.067318383102,"y":32481.885529052808},"targetPosition":{"x":25353.772416695585,"y":32196.568574164263},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Mine","name":"Masters","id":"35be7b1c-a0f7-4b5f-9ee1-8fb51595e959"}}}],"id":"449f1f87-399d-4ec2-9af2-beb92609dc27","savedPayload":{"position":{"x":25353.772416695585,"y":32196.568574164263},"targetPosition":{"x":25291.398909450258,"y":31903.12429394412},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"9bc0aea4-0596-449c-91bd-4fb4cb672aa8","savedPayload":{"position":{"x":25291.398909450258,"y":31903.12429394412},"targetPosition":{"x":25229.02540220493,"y":31609.68001372398},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"32e7c122-fa5a-4d00-9d71-d54e890e32de","savedPayload":{"position":{"x":25229.02540220493,"y":31609.68001372398},"targetPosition":{"x":25166.651894959603,"y":31316.23573350384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"tradingMinesData":{"type":"Trading Mines Data","name":"New Trading Mines Data","project":"Superalgos","exchangeTradingProducts":[{"type":"Exchange Trading Products","name":"Binance","project":"Superalgos","marketTradingProducts":[{"type":"Market Trading Products","name":"Binance BTC/USDT","project":"Superalgos","tradingSessionReferences":[{"type":"Trading Session Reference","name":"WHB v2 Backtesting Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"dd0c8cb9-af86-43fc-a22e-2b1b408787d9","savedPayload":{"position":{"x":24625.764999673167,"y":31670.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"5c98f3e9-72a7-4742-9315-50d6e4aaa452","savedPayload":{"position":{"x":24492.764999673167,"y":31685.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"b626d6f0-f929-457e-910b-dfb83c666deb","savedPayload":{"position":{"x":24585.764999673167,"y":31571.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"3d2dee0f-a7df-463f-befe-5f6231ab7830","savedPayload":{"position":{"x":24554.764999673167,"y":31667.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"5699dc43-eb9a-4e42-aece-e9567924cac2","savedPayload":{"position":{"x":24602.764999673167,"y":31603.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"7647e8ee-0ab7-41af-b153-099a334a362d","savedPayload":{"position":{"x":24479.764999673167,"y":31733.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"00bf7f7c-9002-4923-8010-7125327f9128","savedPayload":{"position":{"x":24624.764999673167,"y":31623.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"54b85d80-295a-4540-b726-f6f7cd17c6c9","savedPayload":{"position":{"x":24614.764999673167,"y":31724.714097319156},"targetPosition":{"x":24536.764999673167,"y":31671.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"135f87c8-2206-4e9f-b93a-d9c764a69f23","savedPayload":{"position":{"x":24536.764999673167,"y":31671.714097319156},"targetPosition":{"x":24483.764999673167,"y":31732.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"68fdae81-0371-428f-8495-a0fe100cbba8","savedPayload":{"position":{"x":24479.764999673167,"y":31715.714097319156},"targetPosition":{"x":24388.764999673167,"y":31633.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"51693a6b-7d84-4f20-bdee-1211f9bae6f9","savedPayload":{"position":{"x":24355.764999673167,"y":31587.714097319156},"targetPosition":{"x":24388.764999673167,"y":31633.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"ffbfa6f7-5ca0-41c2-85e8-e9a3305ce12f","savedPayload":{"position":{"x":24388.764999673167,"y":31633.714097319156},"targetPosition":{"x":24483.764999673167,"y":31732.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"80cb8779-8e2b-4c33-bd43-c696dbc4e5f6","savedPayload":{"position":{"x":24450.764999673167,"y":31699.714097319156},"targetPosition":{"x":24505.764999673167,"y":31770.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"cd54c5f3-13f4-4e71-b233-b649d4878ab6","savedPayload":{"position":{"x":24418.764999673167,"y":31806.714097319156},"targetPosition":{"x":24505.764999673167,"y":31770.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}}],"dataProductFolders":[],"id":"3004c779-23c1-4f87-aedc-744dd6edb204","savedPayload":{"position":{"x":24505.764999673167,"y":31770.714097319156},"targetPosition":{"x":24483.764999673167,"y":31732.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"7466e39e-eced-4ca3-9d56-a0d1548b91c6","savedPayload":{"position":{"x":24514.764999673167,"y":31782.714097319156},"targetPosition":{"x":24547.764999673167,"y":31755.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"bea0a14e-e504-4e9e-a346-439180b6ad31","savedPayload":{"position":{"x":24613.764999673167,"y":31696.714097319156},"targetPosition":{"x":24547.764999673167,"y":31755.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"06ef8c46-5cc3-4890-9a44-8fd57b8e9ca3","savedPayload":{"position":{"x":24572.764999673167,"y":31655.714097319156},"targetPosition":{"x":24547.764999673167,"y":31755.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"9df7d784-5665-4fa1-9d85-ee74845267aa","savedPayload":{"position":{"x":24532.764999673167,"y":31794.714097319156},"targetPosition":{"x":24547.764999673167,"y":31755.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"4767afd5-931b-4604-a5c6-d1f7c306096e","savedPayload":{"position":{"x":24547.764999673167,"y":31755.714097319156},"targetPosition":{"x":24483.764999673167,"y":31732.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"4bc0034d-935a-4193-89cf-b18c65b0905a","savedPayload":{"position":{"x":24496.764999673167,"y":31884.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"ffada7e3-6897-4d94-b119-eef67c178678","savedPayload":{"position":{"x":24450.764999673167,"y":31796.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"e195d10c-7b9f-4428-910e-11be05f66345","savedPayload":{"position":{"x":24512.764999673167,"y":31750.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"c396625e-9a71-4edd-a954-ea2c884538f5","savedPayload":{"position":{"x":24456.764999673167,"y":31737.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"d15cc7d7-3e92-4f92-9bbe-e0a3ba499740","savedPayload":{"position":{"x":24473.764999673167,"y":31736.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"507be75d-cd3c-4767-b159-328469e5c6e8","savedPayload":{"position":{"x":24418.764999673167,"y":31775.714097319156},"targetPosition":{"x":24437.764999673167,"y":31818.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"7ca1fb0a-67c1-41c3-945e-7b343d938c37","savedPayload":{"position":{"x":24437.764999673167,"y":31818.714097319156},"targetPosition":{"x":24483.764999673167,"y":31732.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b702fdec-9278-4b8a-9a5e-2a3fe6bc8d5b","savedPayload":{"position":{"x":24483.764999673167,"y":31732.714097319156},"targetPosition":{"x":24574.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"8cb33c4c-4561-4e2e-a145-19bb87fa9b61","savedPayload":{"position":{"x":24482.764999673167,"y":31709.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"3521e920-c9b3-493b-9690-58101c475dad","savedPayload":{"position":{"x":24533.764999673167,"y":31705.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"084d12bb-30ec-4a0f-a356-a58817d4e266","savedPayload":{"position":{"x":24456.764999673167,"y":31606.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"12e328ff-6658-4ca1-be6d-a93c8fc5c42e","savedPayload":{"position":{"x":24504.764999673167,"y":31681.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"d35b7442-5911-4456-bc9e-c451e21d4a30","savedPayload":{"position":{"x":24540.764999673167,"y":31622.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"65c269c0-2793-483c-ad8e-5c107a56b951","savedPayload":{"position":{"x":24506.764999673167,"y":31546.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"56631448-2669-47f1-bbc9-7dda628f433e","savedPayload":{"position":{"x":24591.764999673167,"y":31610.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"c7c4ece9-6d52-4e9a-800e-11c22955c178","savedPayload":{"position":{"x":24461.764999673167,"y":31619.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"f937c3f3-305c-4abc-aa12-0f2015e8f5fa","savedPayload":{"position":{"x":24481.764999673167,"y":31622.714097319156},"targetPosition":{"x":24511.764999673167,"y":31639.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"922f6ae2-8a20-492c-9c18-811e6a871c6f","savedPayload":{"position":{"x":24511.764999673167,"y":31639.714097319156},"targetPosition":{"x":24574.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"b4881fc1-e88b-4be3-805d-ab98c4ccbb0b","savedPayload":{"position":{"x":24665.764999673167,"y":31854.714097319156},"targetPosition":{"x":24566.764999673167,"y":31764.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"7201adfb-d461-46b7-af3a-a45fabe24835","savedPayload":{"position":{"x":24582.764999673167,"y":31703.714097319156},"targetPosition":{"x":24566.764999673167,"y":31764.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"c92a34c6-c74b-48ad-a57d-9fb78e3e642c","savedPayload":{"position":{"x":24564.764999673167,"y":31810.714097319156},"targetPosition":{"x":24477.764999673167,"y":31834.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"442e4f1d-e420-43cf-94c8-08282408f555","savedPayload":{"position":{"x":24519.764999673167,"y":31839.714097319156},"targetPosition":{"x":24477.764999673167,"y":31834.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"5beb71e3-23fd-4e79-b7fd-46da219b1112","savedPayload":{"position":{"x":24568.764999673167,"y":31785.714097319156},"targetPosition":{"x":24477.764999673167,"y":31834.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"1d6f14f5-c7fe-4b42-8a1b-5859e6e5a592","savedPayload":{"position":{"x":24434.764999673167,"y":31805.714097319156},"targetPosition":{"x":24477.764999673167,"y":31834.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"10897f51-b5dd-4f76-8ab3-ac77df8a6976","savedPayload":{"position":{"x":24477.764999673167,"y":31834.714097319156},"targetPosition":{"x":24566.764999673167,"y":31764.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"7f256746-a20a-4856-af57-18f91e02fdaf","savedPayload":{"position":{"x":24611.764999673167,"y":31745.714097319156},"targetPosition":{"x":24619.764999673167,"y":31741.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"c9b06e1b-2816-4770-b4d2-951b354fa688","savedPayload":{"position":{"x":24665.764999673167,"y":31718.714097319156},"targetPosition":{"x":24619.764999673167,"y":31741.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"59770c0b-e50d-46d3-b62f-7ea080fcbeb2","savedPayload":{"position":{"x":24669.764999673167,"y":31762.714097319156},"targetPosition":{"x":24619.764999673167,"y":31741.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"56915d54-1528-46bf-ad3f-361ca441abc0","savedPayload":{"position":{"x":24613.764999673167,"y":31775.714097319156},"targetPosition":{"x":24619.764999673167,"y":31741.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"768c6ff6-a03d-43d0-9a13-f7037e9352f3","savedPayload":{"position":{"x":24619.764999673167,"y":31741.714097319156},"targetPosition":{"x":24566.764999673167,"y":31764.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"112221cf-8147-484f-a9aa-d86c2402d1b4","savedPayload":{"position":{"x":24690.764999673167,"y":31722.714097319156},"targetPosition":{"x":24617.764999673167,"y":31768.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"b92609ac-310d-482c-a96f-8e90d4c43d72","savedPayload":{"position":{"x":24647.764999673167,"y":31752.714097319156},"targetPosition":{"x":24617.764999673167,"y":31768.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"1e037875-a2ee-44c3-8d8e-861f39f9d8a7","savedPayload":{"position":{"x":24703.764999673167,"y":31795.714097319156},"targetPosition":{"x":24617.764999673167,"y":31768.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"7f2737da-5aef-4dbf-b86c-80132bcb3289","savedPayload":{"position":{"x":24703.764999673167,"y":31693.714097319156},"targetPosition":{"x":24617.764999673167,"y":31768.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"4d5fcd48-f3df-43c9-818e-70057086a961","savedPayload":{"position":{"x":24645.764999673167,"y":31699.714097319156},"targetPosition":{"x":24617.764999673167,"y":31768.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"053b9219-8b8e-4b7e-a7c0-3132f44b2bc9","savedPayload":{"position":{"x":24617.764999673167,"y":31768.714097319156},"targetPosition":{"x":24566.764999673167,"y":31764.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0fac6eab-3a4a-4e40-aa19-ab019941ba92","savedPayload":{"position":{"x":24566.764999673167,"y":31764.714097319156},"targetPosition":{"x":24574.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6f5b7da1-419c-4728-b650-6bcf0abe0381","savedPayload":{"position":{"x":24574.764999673167,"y":31719.714097319156},"targetPosition":{"x":24606.764999673167,"y":31755.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7d983ca2-8566-436b-ab21-445564aba4b3","savedPayload":{"position":{"x":24606.764999673167,"y":31755.714097319156},"targetPosition":{"x":24691.764999673167,"y":31841.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"cfccd77b-3680-4e30-ba08-0bf8c906f739","savedPayload":{"position":{"x":24691.764999673167,"y":31841.714097319156},"targetPosition":{"x":24621.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Backtesting Session","name":"WHB v2","id":"1ff8cd88-dcd9-4528-b406-05647ddd8c9c"}}},{"type":"Trading Session Reference","name":"WHB v2 Live Trading Session","project":"Superalgos","dataProducts":[],"tradingMineProducts":[{"type":"Trading Mine Products","name":"Masters","project":"Superalgos","botProducts":[{"type":"Bot Products","name":"Low Frequency","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Trading Engine","project":"Superalgos","dataProducts":[],"dataProductFolders":[{"type":"Data Product Folder","name":"Episode","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episode Counters","project":"Superalgos","id":"4d1ea2bf-5a1d-4b37-9719-007e28b81184","savedPayload":{"position":{"x":24489.764999673167,"y":31757.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Counters","id":"d81c6019-864e-42f5-94ba-2f249b865f85"}}},{"type":"Data Product","name":"Episode Statistics","project":"Superalgos","id":"2c4ef698-66da-4079-90ec-9fdf5ce41be7","savedPayload":{"position":{"x":24567.764999673167,"y":31886.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Statistics","id":"400c7f49-37da-41fb-b83d-879960aa74ff"}}},{"type":"Data Product","name":"Episode Candle","project":"Superalgos","id":"5ee16bd3-cb60-4b92-ab67-d56dfbdd8671","savedPayload":{"position":{"x":24423.764999673167,"y":31729.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Candle","id":"b9a58113-cf27-4d57-9810-87a2cc158804"}}},{"type":"Data Product","name":"Episode Balances","project":"Superalgos","id":"660caa52-ba9a-4829-9143-3ca16f2590aa","savedPayload":{"position":{"x":24506.764999673167,"y":31873.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Balances","id":"a9a53d82-133b-4417-b639-f9a56d338233"}}},{"type":"Data Product","name":"Distance To Event","project":"Superalgos","id":"382ccb5c-e0c3-4e34-97b9-599cf5d6792d","savedPayload":{"position":{"x":24586.764999673167,"y":31757.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Distance To Event","id":"8ea88d6c-7d7f-4152-b781-ea108df52c63"}}},{"type":"Data Product","name":"Episode Base Asset","project":"Superalgos","id":"42d86745-d971-4328-a908-91bf6d19a019","savedPayload":{"position":{"x":24522.764999673167,"y":31859.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Base Asset","id":"234969ff-eab1-4d59-b6fa-79433c9a20e9"}}},{"type":"Data Product","name":"Episode Quoted Asset","project":"Superalgos","id":"7dbf878d-588f-422e-acd2-03968abaf5f0","savedPayload":{"position":{"x":24493.764999673167,"y":31796.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episode Quoted Asset","id":"ae525e31-d6a8-47d2-9021-3f2ddb9615b0"}}},{"type":"Data Product","name":"Current Episode","project":"Superalgos","id":"d678dfa8-544b-456f-b3f0-715579440aa2","savedPayload":{"position":{"x":24424.764999673167,"y":31797.714097319156},"targetPosition":{"x":24512.764999673167,"y":31797.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Episode","id":"b8da0132-ba28-46ec-aa54-eb9eaac56ce7"}}}],"dataProductFolders":[],"id":"bc8ed9e2-3910-497b-b29e-dc88db8ab671","savedPayload":{"position":{"x":24512.764999673167,"y":31797.714097319156},"targetPosition":{"x":24543.764999673167,"y":31702.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Strategy","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Strategy","project":"Superalgos","id":"07b721a0-55e0-4e7a-b0e2-a91e8c76de4f","savedPayload":{"position":{"x":24581.764999673167,"y":31793.714097319156},"targetPosition":{"x":24550.764999673167,"y":31758.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Strategy","id":"895d8a04-ef45-41a7-909a-ba31013ffb90"}}},{"type":"Data Product","name":"Last Strategy","project":"Superalgos","id":"15f34c1a-b30d-4dd1-96e0-8a2646de3635","savedPayload":{"position":{"x":24452.764999673167,"y":31750.714097319156},"targetPosition":{"x":24550.764999673167,"y":31758.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Strategy","id":"0625f524-2b97-4b4d-8a90-590ffc62ecd3"}}}],"dataProductFolders":[],"id":"3c5ab12d-c6cf-4b36-baec-a83284745381","savedPayload":{"position":{"x":24550.764999673167,"y":31758.714097319156},"targetPosition":{"x":24543.764999673167,"y":31702.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Current Position","project":"Superalgos","id":"ab53428d-89a3-4b1f-84b1-d5bd1d957f02","savedPayload":{"position":{"x":24615.764999673167,"y":31642.714097319156},"targetPosition":{"x":24558.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Current Position","id":"832ecada-8da3-4ba6-b6e9-be34dd5f7ce9"}}},{"type":"Data Product","name":"Last Position","project":"Superalgos","id":"5909ca07-e00c-4669-9cd3-17eb83796f31","savedPayload":{"position":{"x":24584.764999673167,"y":31640.714097319156},"targetPosition":{"x":24558.764999673167,"y":31719.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Position","id":"477cd6d5-862a-44d0-9313-786a4e63a602"}}}],"dataProductFolders":[],"id":"73850961-f70a-4995-a51e-6f35382f1294","savedPayload":{"position":{"x":24558.764999673167,"y":31719.714097319156},"targetPosition":{"x":24543.764999673167,"y":31702.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Open Stage","project":"Superalgos","id":"68803338-3e70-443f-90fd-8b36f5378f31","savedPayload":{"position":{"x":24556.764999673167,"y":31721.714097319156},"targetPosition":{"x":24589.764999673167,"y":31691.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stage","id":"73c3c041-ba2a-4798-a362-a453409b518a"}}},{"type":"Data Product","name":"Close Stage","project":"Superalgos","id":"2d2dd9df-d00a-4d69-9b29-66e19d0238fe","savedPayload":{"position":{"x":24613.764999673167,"y":31786.714097319156},"targetPosition":{"x":24589.764999673167,"y":31691.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stage","id":"2bb9bb41-1ff5-4f83-aa5b-bfc4c9f06a9a"}}},{"type":"Data Product","name":"Trigger Stage","project":"Superalgos","id":"7a71d0ce-5592-4b70-b30c-9676b67feb47","savedPayload":{"position":{"x":24505.764999673167,"y":31770.714097319156},"targetPosition":{"x":24589.764999673167,"y":31691.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stage","id":"b6cff826-9056-4fbd-8eca-cbd6cceec962"}}},{"type":"Data Product","name":"Manage Stage","project":"Superalgos","id":"5b233b81-aa5f-4222-9772-5c8810cb683a","savedPayload":{"position":{"x":24670.764999673167,"y":31739.714097319156},"targetPosition":{"x":24589.764999673167,"y":31691.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stage","id":"bd691611-e7a6-49a8-b07d-c15360b55e40"}}}],"dataProductFolders":[],"id":"f7fff058-7a27-462e-8c28-56c7df8d17db","savedPayload":{"position":{"x":24589.764999673167,"y":31691.714097319156},"targetPosition":{"x":24543.764999673167,"y":31702.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"0487769a-1b78-45ce-8750-6cb55c0785f4","savedPayload":{"position":{"x":24636.764999673167,"y":31795.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"7c769317-2639-4460-8b88-9dc92f7b0585"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"6e666549-9e9f-42d3-b543-fc0ce961cc64","savedPayload":{"position":{"x":24710.764999673167,"y":31864.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"9cc7645a-54fe-40d6-9896-9278167011fb"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"a596b5e6-666d-4da0-bd2f-2b65292b8d87","savedPayload":{"position":{"x":24642.764999673167,"y":31763.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"4c827ee0-a29b-4b65-8438-03e2ea98b410"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"528f2741-eda9-4dd4-b731-8110336c0a34","savedPayload":{"position":{"x":24718.764999673167,"y":31826.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2c753cd8-36d8-466c-bd80-1ebfa8e314dc"}}},{"type":"Data Product","name":"Last Market Order","project":"Superalgos","id":"0d7a0263-dc84-4b4a-a6cc-ad6c3f9824fe","savedPayload":{"position":{"x":24738.764999673167,"y":31851.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Market Order","id":"6df1ac87-92d5-4788-b0bc-f3543b283ef0"}}},{"type":"Data Product","name":"Last Limit Order","project":"Superalgos","id":"51e9b95a-96c1-4cf4-a188-9669c73c7e8e","savedPayload":{"position":{"x":24647.764999673167,"y":31824.714097319156},"targetPosition":{"x":24641.764999673167,"y":31785.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Last Limit Order","id":"c24ec6a1-e937-4d20-93eb-4faf2a0becc3"}}}],"dataProductFolders":[],"id":"0dbd65bc-9ab3-40f3-b972-4b6c6c304d1d","savedPayload":{"position":{"x":24641.764999673167,"y":31785.714097319156},"targetPosition":{"x":24543.764999673167,"y":31702.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"1facfef6-da1b-40a6-ba07-bbec4ef2f246","savedPayload":{"position":{"x":24543.764999673167,"y":31702.714097319156},"targetPosition":{"x":24590.764999673167,"y":31617.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Trading System","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trading System Errors","project":"Superalgos","id":"1c539f66-a512-4cd9-b974-622b95e2cca9","savedPayload":{"position":{"x":24490.764999673167,"y":31599.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Errors","id":"1d9c570d-77c7-40ac-a61e-c5a57a411de8"}}},{"type":"Data Product","name":"Trading System Highlights","project":"Superalgos","id":"409e6575-034e-4d3d-99e5-0495ba229622","savedPayload":{"position":{"x":24552.764999673167,"y":31522.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Highlights","id":"319f660a-78be-4cf4-8052-877837cad806"}}},{"type":"Data Product","name":"Trading System Values","project":"Superalgos","id":"55245047-2d2d-4a04-97f9-d413d82375a9","savedPayload":{"position":{"x":24516.764999673167,"y":31668.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Values","id":"c90c009b-588d-45d4-aff1-05e375181dfa"}}},{"type":"Data Product","name":"Trading System Status","project":"Superalgos","id":"9f9ea8fa-0769-44b9-a4f1-86f2c3a22195","savedPayload":{"position":{"x":24485.764999673167,"y":31687.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Status","id":"eed48c80-35c5-49fa-b12d-18e7280ffb8f"}}},{"type":"Data Product","name":"Trading System Progress","project":"Superalgos","id":"d2e7ed86-a88f-484b-ab5f-d6212cb7045f","savedPayload":{"position":{"x":24550.764999673167,"y":31549.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Progress","id":"04c8606b-5e59-4e7d-b3ac-387bfffcd300"}}},{"type":"Data Product","name":"Trading System Running","project":"Superalgos","id":"0a0b3b0e-cac0-42a3-8825-637b2b78afad","savedPayload":{"position":{"x":24548.764999673167,"y":31673.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Running","id":"17236f59-6ef2-4cc3-913c-1ff6db052236"}}},{"type":"Data Product","name":"Trading System Announcements","project":"Superalgos","id":"b79dfe54-361e-44f2-87ce-5e012bba3bcd","savedPayload":{"position":{"x":24578.764999673167,"y":31641.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Announcements","id":"4a6f828a-9671-431e-8257-fc920943581e"}}},{"type":"Data Product","name":"Trading System Warnings","project":"Superalgos","id":"29681b5e-16e2-4bc0-816e-537b271c0ea5","savedPayload":{"position":{"x":24560.764999673167,"y":31530.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Warnings","id":"34310596-466a-4e9a-a5a2-256b0fe3e339"}}},{"type":"Data Product","name":"Trading System Infos","project":"Superalgos","id":"3da52870-d76c-4e37-9247-9eecfdbb64ec","savedPayload":{"position":{"x":24629.764999673167,"y":31678.714097319156},"targetPosition":{"x":24530.764999673167,"y":31600.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trading System Infos","id":"020ad519-0fc6-4f2f-9f26-b2c7de118fb8"}}}],"dataProductFolders":[],"id":"62beef62-7bc7-4980-b2f5-050542e09597","savedPayload":{"position":{"x":24530.764999673167,"y":31600.714097319156},"targetPosition":{"x":24590.764999673167,"y":31617.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Simulation Objects","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Episodes","project":"Superalgos","id":"802ebea8-becf-45e5-b761-078cad3acd74","savedPayload":{"position":{"x":24594.764999673167,"y":31696.714097319156},"targetPosition":{"x":24671.764999673167,"y":31599.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Episodes","id":"aeec080e-8caf-4976-8187-ba4e725b73b0"}}},{"type":"Data Product","name":"Strategies","project":"Superalgos","id":"601cbf34-9a33-4066-9709-b23c6c34b17d","savedPayload":{"position":{"x":24647.764999673167,"y":31534.714097319156},"targetPosition":{"x":24671.764999673167,"y":31599.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Strategies","id":"21db6fce-8450-4b07-9015-d81a339fd030"}}}],"dataProductFolders":[{"type":"Data Product Folder","name":"Orders","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Market Buy Orders","project":"Superalgos","id":"e1516339-ebcb-4840-a23d-cebd855911b6","savedPayload":{"position":{"x":24566.764999673167,"y":31615.714097319156},"targetPosition":{"x":24637.764999673167,"y":31564.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Buy Orders","id":"db256083-9aa2-48e1-8fd6-3425a5085302"}}},{"type":"Data Product","name":"Market Sell Orders","project":"Superalgos","id":"57a0d52c-d2a3-4fd3-907c-66fd51cecdc6","savedPayload":{"position":{"x":24569.764999673167,"y":31593.714097319156},"targetPosition":{"x":24637.764999673167,"y":31564.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Market Sell Orders","id":"1958f79b-5c6c-4874-9154-98c314822ed7"}}},{"type":"Data Product","name":"Limit Buy Orders","project":"Superalgos","id":"b67b6a65-5bd1-4b58-aa65-a8b840c54d9b","savedPayload":{"position":{"x":24640.764999673167,"y":31587.714097319156},"targetPosition":{"x":24637.764999673167,"y":31564.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Buy Orders","id":"5deceb32-c7ab-4560-818a-0f0b9d6632fb"}}},{"type":"Data Product","name":"Limit Sell Orders","project":"Superalgos","id":"c27b0f50-fdad-4b69-a99e-2708806066aa","savedPayload":{"position":{"x":24566.764999673167,"y":31467.714097319156},"targetPosition":{"x":24637.764999673167,"y":31564.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Limit Sell Orders","id":"2a1d405b-2fbe-4ed4-a76a-d2c7be59d20e"}}}],"dataProductFolders":[],"id":"6b55d39b-b602-4d0f-9d73-253e4fbe60ee","savedPayload":{"position":{"x":24637.764999673167,"y":31564.714097319156},"targetPosition":{"x":24671.764999673167,"y":31599.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Stages","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Trigger Stages","project":"Superalgos","id":"bc3d588e-823d-4461-b550-b8ec912c4c8f","savedPayload":{"position":{"x":24637.764999673167,"y":31555.714097319156},"targetPosition":{"x":24613.764999673167,"y":31631.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Trigger Stages","id":"18cc2e79-7e57-418c-b635-6c68fc11d681"}}},{"type":"Data Product","name":"Open Stages","project":"Superalgos","id":"edb07104-591d-453b-b7fe-bd3854ff8a36","savedPayload":{"position":{"x":24648.764999673167,"y":31561.714097319156},"targetPosition":{"x":24613.764999673167,"y":31631.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Open Stages","id":"d5938c00-0849-466d-ae14-4ea91b571678"}}},{"type":"Data Product","name":"Manage Stages","project":"Superalgos","id":"9b884f77-297b-4618-ac4b-b995570284b6","savedPayload":{"position":{"x":24608.764999673167,"y":31550.714097319156},"targetPosition":{"x":24613.764999673167,"y":31631.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Manage Stages","id":"8fab86b3-db8d-4113-8418-1d256bd98cf2"}}},{"type":"Data Product","name":"Close Stages","project":"Superalgos","id":"c07cc0bb-c49e-42d1-a5ba-f5fa9882fbab","savedPayload":{"position":{"x":24604.764999673167,"y":31605.714097319156},"targetPosition":{"x":24613.764999673167,"y":31631.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Close Stages","id":"ba911e61-f951-48cd-b547-9a70aa211100"}}}],"dataProductFolders":[],"id":"9d38f1ab-49ec-461c-9eb1-7f7bb7529baf","savedPayload":{"position":{"x":24613.764999673167,"y":31631.714097319156},"targetPosition":{"x":24671.764999673167,"y":31599.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Data Product Folder","name":"Position","project":"Superalgos","dataProducts":[{"type":"Data Product","name":"Positions","project":"Superalgos","id":"0e3c5d47-28d9-4cd3-ad72-1bdb054550a8","savedPayload":{"position":{"x":24597.764999673167,"y":31560.714097319156},"targetPosition":{"x":24640.764999673167,"y":31593.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Positions","id":"1eabba24-cbd4-4cbf-95e0-c5135349d41d"}}},{"type":"Data Product","name":"Position Base Asset","project":"Superalgos","id":"47ffaf48-d92f-4da8-afb3-7787c5ba597e","savedPayload":{"position":{"x":24557.764999673167,"y":31660.714097319156},"targetPosition":{"x":24640.764999673167,"y":31593.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Base Asset","id":"b371b039-f6c8-4f60-84cb-52f55c96c84d"}}},{"type":"Data Product","name":"Position Quoted Asset","project":"Superalgos","id":"59eb8fe6-5429-4d2d-8971-47580c5816b8","savedPayload":{"position":{"x":24542.764999673167,"y":31682.714097319156},"targetPosition":{"x":24640.764999673167,"y":31593.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Position Quoted Asset","id":"a376f02b-a5d2-4079-b5cd-ab7dc894b909"}}},{"type":"Data Product","name":"Stop Loss","project":"Superalgos","id":"13a4d476-b8bb-4bb3-9a97-1c2a7b5c6188","savedPayload":{"position":{"x":24736.764999673167,"y":31626.714097319156},"targetPosition":{"x":24640.764999673167,"y":31593.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Stop Loss","id":"c18bdc82-216a-4b1d-8850-5c3c9dc2000b"}}},{"type":"Data Product","name":"Take Profit","project":"Superalgos","id":"1af2f188-5506-47ff-859b-08e8f1c56754","savedPayload":{"position":{"x":24540.764999673167,"y":31498.714097319156},"targetPosition":{"x":24640.764999673167,"y":31593.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Product Definition","name":"Take Profit","id":"2542c7d0-fa26-4b52-a59a-a3630e52eb89"}}}],"dataProductFolders":[],"id":"23dd1804-2a69-4a66-9c55-9b7a5333c263","savedPayload":{"position":{"x":24640.764999673167,"y":31593.714097319156},"targetPosition":{"x":24671.764999673167,"y":31599.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"224dd8a4-9dda-4294-8287-bb108a560eae","savedPayload":{"position":{"x":24671.764999673167,"y":31599.714097319156},"targetPosition":{"x":24590.764999673167,"y":31617.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"893b0c86-043f-404c-b4d7-c77d74c6002c","savedPayload":{"position":{"x":24590.764999673167,"y":31617.714097319156},"targetPosition":{"x":24603.764999673167,"y":31701.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ffdfebe3-50db-41b5-8077-7a7d0d008865","savedPayload":{"position":{"x":24603.764999673167,"y":31701.714097319156},"targetPosition":{"x":24562.764999673167,"y":31792.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Trading Mine","name":"Masters","id":"6a54eece-4582-4cda-a854-1cd805e00fed"}}}],"id":"8e57ee10-b239-4a92-81b4-44315e3cfd03","savedPayload":{"position":{"x":24562.764999673167,"y":31792.714097319156},"targetPosition":{"x":24621.764999673167,"y":31804.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Live Trading Session","name":"WHB v2","id":"934095e8-4a1c-4baf-828f-7818f73c4219"}}}],"id":"d04c2806-8d2d-4de2-8d10-b05a87a91b65","savedPayload":{"position":{"x":24497.82155202995,"y":31918.453279226815},"targetPosition":{"x":24720.764999673167,"y":31717.714097319156},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"9a867bf0-a71d-445c-b99a-75b60bbdce09"}}}],"id":"f601d2a7-fada-477f-9b63-3ef7ed42d44a","savedPayload":{"position":{"x":24720.764999673167,"y":31717.714097319156},"targetPosition":{"x":24943.708447316385,"y":31516.974915411498},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Crypto Exchange","name":"Binance","id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b"}}}],"id":"e4e268f3-a677-4f90-90a1-d87244e647e5","savedPayload":{"position":{"x":24943.708447316385,"y":31516.974915411498},"targetPosition":{"x":25166.651894959603,"y":31316.23573350384},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"learningMinesData":{"type":"Learning Mines Data","name":"New Learning Mines Data","project":"Superalgos","exchangeLearningProducts":[],"id":"6f1d049c-18b7-4c73-9c2e-f65068679719","savedPayload":{"position":{"x":25197.356993272086,"y":31220.726399750627},"targetPosition":{"x":25109.356993272086,"y":31291.726399750627},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e2697759-6038-4943-b90c-5a68651ff9a8","savedPayload":{"position":{"x":25109.356993272086,"y":31291.726399750627},"targetPosition":{"x":25259.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"d"}}},"id":"e452cf65-2b2b-44f2-9e67-bdd9d3c008e4","savedPayload":{"position":{"x":25259.356993272086,"y":31031.918778615294},"targetPosition":{"x":24959.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}}],"id":"3c165071-7558-4708-9999-8ffe71d346b1","savedPayload":{"position":{"x":24959.356993272086,"y":31031.918778615294},"targetPosition":{"x":24959.356993272086,"y":31031.918778615294},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"s"}}},{"type":"Crypto Ecosystem","name":"My Crypto Ecosystem","project":"Superalgos","cryptoExchanges":[{"type":"Crypto Exchanges","name":"Tested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"Binance","config":"{\n \"codeName\": \"binance\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"EUR\"} \n}","project":"Superalgos","assets":[{"type":"Asset","name":"Bitcoin","config":"{ \n\"codeName\": \"BTC\"\n}","project":"Superalgos","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa","savedPayload":{"position":{"x":19794.079365950267,"y":30512.325102172115},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},{"type":"Asset","name":"Tether","config":"{ \n\"codeName\": \"USDT\"\n}","project":"Superalgos","id":"f110bfa0-bd5b-469b-a940-4524c8688136","savedPayload":{"position":{"x":20006.21140030623,"y":30724.45713652808},"targetPosition":{"x":19716.43365241951,"y":30802.102850058836},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"95d2c30f-215b-486e-8119-f4eac0279575","savedPayload":{"position":{"x":19716.43365241951,"y":30802.102850058836},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"E"}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","code":"{ \n\"codeName\": \"Write here the code name of the Market here.\"\n}","project":"Superalgos","markets":[{"type":"Market","name":"BTC/USDT","config":"{ \n\"codeName\": \"BTC/USDT\"\n}","project":"Superalgos","baseAsset":{"type":"Market Base Asset","name":"Bitcoin","project":"Superalgos","id":"1017b30d-de1b-4212-991e-9fd0a5b6c814","savedPayload":{"position":{"x":20394.079365950267,"y":30936.589170884043},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},"quotedAsset":{"type":"Market Quoted Asset","name":"Tether","project":"Superalgos","id":"705c4a67-787a-48cd-a3dc-3a557438bf0b","savedPayload":{"position":{"x":20394.079365950267,"y":31091.880597945557},"targetPosition":{"x":20104.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}},"id":"9a867bf0-a71d-445c-b99a-75b60bbdce09","savedPayload":{"position":{"x":20104.301618063546,"y":31014.2348844148},"targetPosition":{"x":19804.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":3,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2fd80894-900e-44ac-a1a7-56c14124f7a1","savedPayload":{"position":{"x":19804.301618063546,"y":31014.2348844148},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[{"type":"Exchange Account Asset","name":"Bitcoin","project":"Superalgos","id":"ba6f3d5c-b36b-49d9-947f-392068109169","savedPayload":{"position":{"x":20508.121182548915,"y":31438.498953126727},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Bitcoin","id":"5f5e4a94-5090-47d4-8883-cc2325d20bfa"}}},{"type":"Exchange Account Asset","name":"Tether","project":"Superalgos","id":"c90be267-90f9-45ae-b225-0578adb4aad9","savedPayload":{"position":{"x":20430.475469018158,"y":31728.27670101345},"targetPosition":{"x":20218.343434662194,"y":31516.144666657485},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Asset","name":"Tether","id":"f110bfa0-bd5b-469b-a940-4524c8688136"}}}],"id":"8ac5c2a9-a238-48ae-ab43-0a0a95a37464","savedPayload":{"position":{"x":20218.343434662194,"y":31516.144666657485},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"Key for Lighting Strike","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e85bbbd6-aca8-450f-9237-788062de5761","savedPayload":{"position":{"x":20083.857113836988,"y":32018.05444890017},"targetPosition":{"x":20006.21140030623,"y":31728.27670101345},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}}],"id":"48925cc9-f3cd-4499-8466-1338fed28a0d","savedPayload":{"position":{"x":20006.21140030623,"y":31728.27670101345},"targetPosition":{"x":19928.565686775473,"y":31438.498953126727},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"63794496-c94b-42f9-81cc-c588708617a6","savedPayload":{"position":{"x":19928.565686775473,"y":31438.498953126727},"targetPosition":{"x":19716.43365241951,"y":31226.366918770764},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4b0c1ac5-515f-44a9-b9b9-e698a9c51eac","savedPayload":{"position":{"x":19716.43365241951,"y":31226.366918770764},"targetPosition":{"x":19504.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61ef0b8d-de6e-4e76-bdd5-996836760a4b","savedPayload":{"position":{"x":19504.301618063546,"y":31014.2348844148},"targetPosition":{"x":19204.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""},"tutorial":{"status":"Done"}}}],"id":"e3879d63-6f8f-41a3-8ac3-0349c4361722","savedPayload":{"position":{"x":19204.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Untested","project":"Superalgos","exchanges":[{"type":"Crypto Exchange","name":"ACX","config":"{ \n\"codeName\": \"acx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ebcb522b-ae58-46d2-9d82-a9b0beec3976","savedPayload":{"position":{"x":17935.64382962515,"y":31014.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b2649588-27c6-442c-b179-f6d8817188b3","savedPayload":{"position":{"x":17954.64382962515,"y":31004.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b2051d5-7ee7-4e94-8c8d-306674889339","savedPayload":{"position":{"x":17838.64382962515,"y":30896.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1d5461aa-d26c-4df5-b383-8c83e311b8ca","savedPayload":{"position":{"x":17643.64382962515,"y":30952.23747069523},"targetPosition":{"x":17698.64382962515,"y":30973.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c6372400-de52-4b63-97f3-f748aac9c63f","savedPayload":{"position":{"x":17698.64382962515,"y":30973.23747069523},"targetPosition":{"x":17766.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c948314e-2247-4234-b83d-cc2c1b152665","savedPayload":{"position":{"x":17766.64382962515,"y":30905.23747069523},"targetPosition":{"x":17837.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04ccb742-ef1b-4138-b38d-a6b0d92f2f8e","savedPayload":{"position":{"x":17837.64382962515,"y":30978.23747069523},"targetPosition":{"x":17912.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9c21b2d-de21-43b5-8b48-51367a8c981c","savedPayload":{"position":{"x":19313.14497226101,"y":30565.583066825377},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"AOFEX","config":"{ \n\"codeName\": \"aofex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"623ef91b-04c0-4bd5-ac0d-b32c809be3ea","savedPayload":{"position":{"x":17973.64382962515,"y":30923.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"9d0b5855-59a6-4dda-9a4b-33d7a44d582e","savedPayload":{"position":{"x":17901.64382962515,"y":30994.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"e898e569-0dd3-4a22-baa5-caaace66d4ed","savedPayload":{"position":{"x":18062.64382962515,"y":30838.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"64a69d3d-15ff-41c3-a926-5ec93c932ab1","savedPayload":{"position":{"x":17822.64382962515,"y":31052.23747069523},"targetPosition":{"x":17893.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae2785c5-75a1-44fc-a71b-363d88cb5dac","savedPayload":{"position":{"x":17893.64382962515,"y":30981.23747069523},"targetPosition":{"x":17982.64382962515,"y":30899.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07ea69aa-7357-43b1-b548-a4c4fab70c55","savedPayload":{"position":{"x":17982.64382962515,"y":30899.23747069523},"targetPosition":{"x":17971.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2146b410-fc4e-452d-ae57-5d58c9a29706","savedPayload":{"position":{"x":17971.64382962515,"y":30962.23747069523},"targetPosition":{"x":17950.64382962515,"y":30994.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c2e9bb45-97c7-47e8-b13c-56946e673c53","savedPayload":{"position":{"x":19413.67778623216,"y":30647.89853748846},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bequant","config":"{ \n\"codeName\": \"bequant\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"b23c8adf-c880-48fd-b4af-4b4be86cf0e5","savedPayload":{"position":{"x":18059.64382962515,"y":31101.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"523bd94f-68f9-457e-91fd-806c1b95e98d","savedPayload":{"position":{"x":18006.64382962515,"y":31117.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9d914bb1-a68b-41ae-8666-0fcc755358c1","savedPayload":{"position":{"x":17859.64382962515,"y":30964.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15d903b5-113c-465e-8120-7c46a9a85565","savedPayload":{"position":{"x":17976.64382962515,"y":31146.23747069523},"targetPosition":{"x":17943.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2d1c0bc3-abe2-4340-91bf-2eef5b98a2f0","savedPayload":{"position":{"x":17943.64382962515,"y":31134.23747069523},"targetPosition":{"x":17936.64382962515,"y":31059.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a50d459-914c-4bfc-91e8-f15c383280eb","savedPayload":{"position":{"x":17936.64382962515,"y":31059.23747069523},"targetPosition":{"x":17931.64382962515,"y":31071.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b2f2b69f-3bef-4edc-9950-5261d9f36382","savedPayload":{"position":{"x":17931.64382962515,"y":31071.23747069523},"targetPosition":{"x":17960.64382962515,"y":31060.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e928d3e-a2c2-4341-aa2f-b753551c9479","savedPayload":{"position":{"x":19504.72140465123,"y":30740.600980501622},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bibox","config":"{ \n\"codeName\": \"bibox\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"13c1f22c-9a35-4d3f-b000-c96984fd6a2b","savedPayload":{"position":{"x":17995.64382962515,"y":31047.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3c6df49d-70c3-468a-bdd8-6768ce6d3a9d","savedPayload":{"position":{"x":17916.64382962515,"y":31018.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a54ef39-8fba-4a5f-ac24-5f27e763e28f","savedPayload":{"position":{"x":18050.64382962515,"y":31174.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"08df1f45-dab0-463a-8758-359973f2620d","savedPayload":{"position":{"x":17899.64382962515,"y":31242.23747069523},"targetPosition":{"x":17959.64382962515,"y":31180.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"105b52c2-90ad-4fa1-b690-d8fab14209b4","savedPayload":{"position":{"x":17959.64382962515,"y":31180.23747069523},"targetPosition":{"x":17956.64382962515,"y":31128.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"68c1ef42-1b7b-4cc6-981f-80b20dabcd89","savedPayload":{"position":{"x":17956.64382962515,"y":31128.23747069523},"targetPosition":{"x":17907.64382962515,"y":31057.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fc35e5d0-ea61-42b6-979a-859f19c5ac6c","savedPayload":{"position":{"x":17907.64382962515,"y":31057.23747069523},"targetPosition":{"x":17929.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e5f9ee4d-77a3-48ae-b354-b2f6a97d5e47","savedPayload":{"position":{"x":19585.208424334218,"y":30842.603544479174},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BigONE","config":"{ \n\"codeName\": \"bigone\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"3f289513-c1c8-457c-b65a-8cf62b5f5eb5","savedPayload":{"position":{"x":17778.64382962515,"y":31071.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b365e73-1cee-496a-921f-121cb628a130","savedPayload":{"position":{"x":17798.64382962515,"y":31121.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"447a4f6f-cfa0-443e-9339-d7c1153ada31","savedPayload":{"position":{"x":17921.64382962515,"y":31046.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d234c53-c121-471e-bce1-a258c13cd148","savedPayload":{"position":{"x":17848.64382962515,"y":31175.23747069523},"targetPosition":{"x":17944.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"816e1b6a-d790-4abd-9ae1-e203fa737af2","savedPayload":{"position":{"x":17944.64382962515,"y":31086.23747069523},"targetPosition":{"x":17891.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"561a57f7-8c22-4e50-840d-d983ed6bb864","savedPayload":{"position":{"x":17891.64382962515,"y":31102.23747069523},"targetPosition":{"x":17813.64382962515,"y":31064.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e243bd5d-ade7-46c8-876b-6ad8c6eb5e0a","savedPayload":{"position":{"x":17813.64382962515,"y":31064.23747069523},"targetPosition":{"x":17839.64382962515,"y":31063.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fb9ee540-bf12-4dda-bf87-cb6b58fce649","savedPayload":{"position":{"x":19654.195208565325,"y":30952.710342620318},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance Jersey","config":"{ \n\"codeName\": \"binanceje\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0b979ea9-7a2d-4744-9517-2dfa632dfafc","savedPayload":{"position":{"x":17852.64382962515,"y":30989.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b9a4497d-20f1-4c61-9a79-444e0fe0ddf4","savedPayload":{"position":{"x":17924.64382962515,"y":30952.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1b24d8a4-ec70-4501-838c-7633f6f7288e","savedPayload":{"position":{"x":17882.64382962515,"y":31051.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"627472e3-638f-4d68-a917-d0844d6a227b","savedPayload":{"position":{"x":17991.64382962515,"y":31190.23747069523},"targetPosition":{"x":17986.64382962515,"y":31110.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"b8ce75fb-93c9-4ca2-9b2b-9f8ed8af34f3","savedPayload":{"position":{"x":17986.64382962515,"y":31110.23747069523},"targetPosition":{"x":17942.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"08b226e4-14ee-4ad3-8d96-efe77cc38489","savedPayload":{"position":{"x":17942.64382962515,"y":31066.23747069523},"targetPosition":{"x":17949.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2771eb11-bc72-4273-9e1b-9ac5410c6354","savedPayload":{"position":{"x":17949.64382962515,"y":31009.23747069523},"targetPosition":{"x":17933.64382962515,"y":30992.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2782350a-84a2-40ec-87c6-3c8043376a18","savedPayload":{"position":{"x":19710.872950374665,"y":31069.630473388454},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Binance US","config":"{ \n\"codeName\": \"binanceus\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"817ee1cf-b44c-4458-a9c4-a05a17ea0510","savedPayload":{"position":{"x":17943.64382962515,"y":30999.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c6694e9e-74dc-4c2e-9151-90f1d6631b45","savedPayload":{"position":{"x":17937.64382962515,"y":30989.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"00144904-5363-49eb-b445-8c8283d92b0d","savedPayload":{"position":{"x":17838.64382962515,"y":31193.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e71aa3c-03d4-4dbd-bc50-43b30f59e655","savedPayload":{"position":{"x":17783.64382962515,"y":31148.23747069523},"targetPosition":{"x":17703.64382962515,"y":31182.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a4d0df32-c600-4421-b893-2a05f0442ed6","savedPayload":{"position":{"x":17703.64382962515,"y":31182.23747069523},"targetPosition":{"x":17781.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7a39543a-00e1-452b-8aba-36c2b240f9fc","savedPayload":{"position":{"x":17781.64382962515,"y":31156.23747069523},"targetPosition":{"x":17799.64382962515,"y":31119.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2543c4e5-8233-4348-b6dc-e47aed1ff381","savedPayload":{"position":{"x":17799.64382962515,"y":31119.23747069523},"targetPosition":{"x":17898.64382962515,"y":31020.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0b2b67d2-853b-470e-8b13-925956ad5621","savedPayload":{"position":{"x":19754.577155060477,"y":31191.993155151424},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitbank","config":"{ \n\"codeName\": \"bitbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eb6b6842-9bf7-450e-baa3-7a87541a1cf6","savedPayload":{"position":{"x":17955.64382962515,"y":31107.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6353ff56-759f-457d-81f3-fdb8ae5b3e83","savedPayload":{"position":{"x":17942.64382962515,"y":31183.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a2b297c7-f33b-48b9-98fa-d339c7b0ff67","savedPayload":{"position":{"x":17999.64382962515,"y":31016.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce6c354-b294-4062-b763-421e5edb69de","savedPayload":{"position":{"x":17883.64382962515,"y":31186.23747069523},"targetPosition":{"x":17845.64382962515,"y":31202.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"547dbf6c-a292-46c0-a628-62856858121e","savedPayload":{"position":{"x":17845.64382962515,"y":31202.23747069523},"targetPosition":{"x":17945.64382962515,"y":31116.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"097055b3-37e5-4100-a24b-91e404fe49a6","savedPayload":{"position":{"x":17945.64382962515,"y":31116.23747069523},"targetPosition":{"x":17897.64382962515,"y":31142.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51aed4ce-0303-431e-a15f-e6f133f7a2cf","savedPayload":{"position":{"x":17897.64382962515,"y":31142.23747069523},"targetPosition":{"x":17941.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c9a96a7-ed12-4b3e-bb51-306a8da131f5","savedPayload":{"position":{"x":19784.79543078195,"y":31318.363797342816},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitBay","config":"{ \n\"codeName\": \"bitbay\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83b4e523-72a7-41ce-9363-fe0c799dcac1","savedPayload":{"position":{"x":17861.64382962515,"y":30965.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"966698f7-8a28-42d7-bb80-f7cd0601e44f","savedPayload":{"position":{"x":17823.64382962515,"y":31026.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"554829eb-3d40-4b95-a1cd-9de943763e2c","savedPayload":{"position":{"x":17914.64382962515,"y":30924.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2f534989-7ca7-4c3d-b14a-3b1071543c8c","savedPayload":{"position":{"x":17845.64382962515,"y":30853.23747069523},"targetPosition":{"x":17832.64382962515,"y":30821.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2f6b76b4-51d4-434f-8aa1-ed86b0e26bd2","savedPayload":{"position":{"x":17832.64382962515,"y":30821.23747069523},"targetPosition":{"x":17876.64382962515,"y":30921.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cbcc3ab6-9758-4273-99d2-9d05fdd392b5","savedPayload":{"position":{"x":17876.64382962515,"y":30921.23747069523},"targetPosition":{"x":17805.64382962515,"y":31015.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"dada6c12-7c41-4ab8-9922-908233829f58","savedPayload":{"position":{"x":17805.64382962515,"y":31015.23747069523},"targetPosition":{"x":17855.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8778eee5-97a2-4f9d-bd25-cd5a64ec6663","savedPayload":{"position":{"x":19801.173495885087,"y":31447.26081972472},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"33508b53-2769-4f3d-8c98-9fa37e5cbf5b","savedPayload":{"position":{"x":17888.64382962515,"y":31043.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4d4ad5a1-81a7-4f92-83db-99f57ce261bb","savedPayload":{"position":{"x":17975.64382962515,"y":30868.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"29d52baf-645c-4d8f-9631-ebd391b4c815","savedPayload":{"position":{"x":18034.64382962515,"y":31066.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d615c33d-c6cf-4572-ac32-8e9ddeb5bb52","savedPayload":{"position":{"x":18023.64382962515,"y":30916.23747069523},"targetPosition":{"x":18106.64382962515,"y":30982.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"0c189040-6318-483c-b6d7-982370a3298d","savedPayload":{"position":{"x":18106.64382962515,"y":30982.23747069523},"targetPosition":{"x":18037.64382962515,"y":31012.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd60de4a-d17c-4ba7-936a-cbf2305fe3bb","savedPayload":{"position":{"x":18037.64382962515,"y":31012.23747069523},"targetPosition":{"x":18039.64382962515,"y":30964.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d247f4f5-6f16-4a59-a4a5-6d1554b43562","savedPayload":{"position":{"x":18039.64382962515,"y":30964.23747069523},"targetPosition":{"x":17965.64382962515,"y":30956.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6c076027-683d-4778-8a6a-e60984980fdf","savedPayload":{"position":{"x":19803.51933253116,"y":31577.173022561386},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitfinex","config":"{ \n\"codeName\": \"bitfinex2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8fc7f955-5c81-446c-bbeb-205988bf1fc0","savedPayload":{"position":{"x":17830.64382962515,"y":31051.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d5ba38e9-3282-4634-b922-16532c71f426","savedPayload":{"position":{"x":17819.64382962515,"y":31118.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1cebbed5-28f7-4ccd-afce-9e7634d90fb6","savedPayload":{"position":{"x":17892.64382962515,"y":30997.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0d109aa9-c80c-4a64-96f0-1d8fda0a70a4","savedPayload":{"position":{"x":17888.64382962515,"y":30805.23747069523},"targetPosition":{"x":17942.64382962515,"y":30905.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5459ab1e-a1ce-4dae-ae72-61c1f7f37ce0","savedPayload":{"position":{"x":17942.64382962515,"y":30905.23747069523},"targetPosition":{"x":17855.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a4615f7a-000d-4ff9-b5ac-109bc9a3a849","savedPayload":{"position":{"x":17855.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e10d303e-ea21-4625-bae1-c32ad7a44e8a","savedPayload":{"position":{"x":17919.64382962515,"y":31043.23747069523},"targetPosition":{"x":17863.64382962515,"y":31062.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f3114102-a73c-4086-9594-5888ef1ab4ec","savedPayload":{"position":{"x":19791.80543793031,"y":31706.577304054405},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bitforex","config":"{ \n\"codeName\": \"bitforex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"698e5e38-ad73-4cb6-b7f6-2b69913faff9","savedPayload":{"position":{"x":17897.64382962515,"y":30956.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"f0142bd4-1b63-4d12-a4b7-e150d0da197f","savedPayload":{"position":{"x":18020.64382962515,"y":31021.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"7164fb28-405b-461a-a7d4-59d438ecf1ce","savedPayload":{"position":{"x":17821.64382962515,"y":30984.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ce8a00c9-f090-4ec2-84ed-c6661f8bf7b0","savedPayload":{"position":{"x":17825.64382962515,"y":30965.23747069523},"targetPosition":{"x":17818.64382962515,"y":30913.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"579cd74b-98f6-4000-990b-25ae1456c94b","savedPayload":{"position":{"x":17818.64382962515,"y":30913.23747069523},"targetPosition":{"x":17901.64382962515,"y":30907.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"dbac6eef-25d2-4cda-86a6-59ce8a9a26bc","savedPayload":{"position":{"x":17901.64382962515,"y":30907.23747069523},"targetPosition":{"x":17909.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a1da9dd3-22ec-4536-bb5a-4d0bb8a56b81","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17937.64382962515,"y":30945.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"499a5a3b-7871-4c95-9b2e-d58d4d9e2392","savedPayload":{"position":{"x":19766.169146786622,"y":31833.956517318737},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"bitkk","config":"{ \n\"codeName\": \"bitkk\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"efbb916c-780b-447f-a4c2-df68570d4ee1","savedPayload":{"position":{"x":17931.64382962515,"y":30937.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0d829516-81d9-46a5-9861-7d94cc89455d","savedPayload":{"position":{"x":17951.64382962515,"y":30912.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fc174aa3-c485-4b9b-ba19-444b0189ccb1","savedPayload":{"position":{"x":17788.64382962515,"y":30980.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"15921d8a-4b45-481c-9165-79969ed3fd27","savedPayload":{"position":{"x":17796.64382962515,"y":30936.23747069523},"targetPosition":{"x":17891.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"927d5c8a-85df-48bb-b097-c36abb76ca0e","savedPayload":{"position":{"x":17891.64382962515,"y":30922.23747069523},"targetPosition":{"x":17834.64382962515,"y":30983.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"43d218c2-e633-47d5-8dd8-60bc7f7c0b9e","savedPayload":{"position":{"x":17834.64382962515,"y":30983.23747069523},"targetPosition":{"x":17853.64382962515,"y":30925.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"2d310d61-cbc7-4306-af02-be3888939545","savedPayload":{"position":{"x":17853.64382962515,"y":30925.23747069523},"targetPosition":{"x":17951.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ded39740-3c93-4fda-bb9c-6ac75d2109f4","savedPayload":{"position":{"x":19726.911021174266,"y":31957.817257542785},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMart","config":"{ \n\"codeName\": \"bitmart\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"10374855-6b4a-460b-9c95-70072ac00315","savedPayload":{"position":{"x":17907.64382962515,"y":30901.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3aded60c-4061-48ff-ad33-212c965b5c43","savedPayload":{"position":{"x":17829.64382962515,"y":30925.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"1789a3ca-d948-497d-8d1b-1eefd25d16a3","savedPayload":{"position":{"x":17886.64382962515,"y":30937.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"038170bc-0ca7-4a92-8219-61b7bc8431b0","savedPayload":{"position":{"x":17893.64382962515,"y":31034.23747069523},"targetPosition":{"x":17835.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"55f79ede-ef02-405f-92bd-11902ab3cc7a","savedPayload":{"position":{"x":17835.64382962515,"y":30962.23747069523},"targetPosition":{"x":17895.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8185c660-4af3-4a62-bfa9-8922861101b5","savedPayload":{"position":{"x":17895.64382962515,"y":30988.23747069523},"targetPosition":{"x":17819.64382962515,"y":30909.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"546d48c3-df31-495c-b3b4-cb35109c5542","savedPayload":{"position":{"x":17819.64382962515,"y":30909.23747069523},"targetPosition":{"x":17834.64382962515,"y":30915.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c7ed52a7-895b-46f1-a745-35954d8bcfc6","savedPayload":{"position":{"x":19674.491326722004,"y":32076.707370794375},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMax","config":"{ \n\"codeName\": \"bitmax\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"8a042d0d-7a7a-4a76-889e-42d8642404f4","savedPayload":{"position":{"x":17944.64382962515,"y":31046.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0c4fcc48-51e6-4ff2-925f-405cda6d1122","savedPayload":{"position":{"x":17898.64382962515,"y":31024.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ef9d5381-d9e3-47f5-9069-6fc14eda0fa3","savedPayload":{"position":{"x":17879.64382962515,"y":31096.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c66fe606-9705-45b0-a196-7ea3efb0221e","savedPayload":{"position":{"x":17982.64382962515,"y":31053.23747069523},"targetPosition":{"x":17943.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"80a5f68e-776a-44de-8797-d2eb806c306e","savedPayload":{"position":{"x":17943.64382962515,"y":31083.23747069523},"targetPosition":{"x":17977.64382962515,"y":31041.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"011fcf1c-1c94-4c36-a246-d6c400aa39dc","savedPayload":{"position":{"x":17977.64382962515,"y":31041.23747069523},"targetPosition":{"x":17942.64382962515,"y":31103.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4a87b8c5-e009-427f-afb7-21afe5594b59","savedPayload":{"position":{"x":17942.64382962515,"y":31103.23747069523},"targetPosition":{"x":17944.64382962515,"y":31109.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fc6a9048-ab8c-48f9-91ae-6c95c28714b0","savedPayload":{"position":{"x":19609.524636419505,"y":32189.2329791979},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BitMEX","config":"{ \n\"codeName\": \"bitmex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f7636e2b-354a-4217-894b-5e26eddc0c2a","savedPayload":{"position":{"x":17894.64382962515,"y":30934.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"6eb2ddd1-6d06-456c-b4e0-7df56ba182e6","savedPayload":{"position":{"x":17823.64382962515,"y":30834.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4a4b8fe-d923-4eb0-a066-171b83d1540d","savedPayload":{"position":{"x":17902.64382962515,"y":31064.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"918ed585-ce46-4d51-a07a-9beee51f70eb","savedPayload":{"position":{"x":17711.64382962515,"y":31036.23747069523},"targetPosition":{"x":17805.64382962515,"y":31078.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9efef4d8-5be3-4d17-a645-6edffd9535cf","savedPayload":{"position":{"x":17805.64382962515,"y":31078.23747069523},"targetPosition":{"x":17815.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ad31a6e-f27b-45c3-9996-a41fb39aa154","savedPayload":{"position":{"x":17815.64382962515,"y":30988.23747069523},"targetPosition":{"x":17844.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"82887393-cb1c-4b01-8581-4b3dabc86584","savedPayload":{"position":{"x":17844.64382962515,"y":30896.23747069523},"targetPosition":{"x":17910.64382962515,"y":30922.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1e2f1dd0-ebf1-4485-83d8-7723a9e3e714","savedPayload":{"position":{"x":19532.77262531095,"y":32294.07482287797},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bittrex","config":"{ \n\"codeName\": \"bittrex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"88d4ef94-f030-42df-9115-69d9611317b1","savedPayload":{"position":{"x":17839.64382962515,"y":31009.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"7fe8234d-9a39-4b28-bf98-43b4fdb57ee5","savedPayload":{"position":{"x":17878.64382962515,"y":31045.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5ba7fe13-1e0f-403a-8f4b-8e3968d2e5e2","savedPayload":{"position":{"x":17841.64382962515,"y":30890.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e926fbb8-d2ac-4e3d-aa59-a0a828d202fd","savedPayload":{"position":{"x":17707.64382962515,"y":30983.23747069523},"targetPosition":{"x":17782.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"4fbe41e1-cb15-4bc2-a3de-681c5b22cc97","savedPayload":{"position":{"x":17782.64382962515,"y":31052.23747069523},"targetPosition":{"x":17742.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ab9fe180-1c07-44de-a0a1-863761ac52d6","savedPayload":{"position":{"x":17742.64382962515,"y":30961.23747069523},"targetPosition":{"x":17796.64382962515,"y":30903.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"584f29ca-9b3c-4b7f-a2b0-aab4180ecefd","savedPayload":{"position":{"x":17796.64382962515,"y":30903.23747069523},"targetPosition":{"x":17893.64382962515,"y":30968.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f598f002-8fc5-491f-888e-07d017ea83c6","savedPayload":{"position":{"x":19445.135140551556,"y":32390.003727075255},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bit-Z","config":"{ \n\"codeName\": \"bitz\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"0a22e02b-7d2e-4955-9cfc-ed7d95f0c9a0","savedPayload":{"position":{"x":17751.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"298b45af-b73d-4cd5-848a-97de7b857569","savedPayload":{"position":{"x":17944.64382962515,"y":31083.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6ede807b-b1ab-42b5-bfd7-3b12a942447e","savedPayload":{"position":{"x":17871.64382962515,"y":31049.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"dc172858-3241-4487-950a-e5cae03ac376","savedPayload":{"position":{"x":17751.64382962515,"y":31081.23747069523},"targetPosition":{"x":17753.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"19c07cee-1fdf-4e02-ac9f-d110b64ee033","savedPayload":{"position":{"x":17753.64382962515,"y":31028.23747069523},"targetPosition":{"x":17772.64382962515,"y":31098.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4ef5048-ac4c-410e-bd6d-3338e33ab108","savedPayload":{"position":{"x":17772.64382962515,"y":31098.23747069523},"targetPosition":{"x":17788.64382962515,"y":31134.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e7e96c41-c839-4eec-9bcf-1c60d60fa3f5","savedPayload":{"position":{"x":17788.64382962515,"y":31134.23747069523},"targetPosition":{"x":17850.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6cc10926-fe41-43be-887b-fa8aba1c7377","savedPayload":{"position":{"x":19347.639651522415,"y":32475.89501309667},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC-Alpha","config":"{ \n\"codeName\": \"btcalpha\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"263e3b9c-8fdd-4376-b53b-87f32d0f5898","savedPayload":{"position":{"x":17904.64382962515,"y":30922.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"804603e1-3e0f-4219-a9b7-ee27810d4f07","savedPayload":{"position":{"x":17829.64382962515,"y":30977.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"83b25fff-e448-483f-9bee-cb85fa592c6e","savedPayload":{"position":{"x":17734.64382962515,"y":30862.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"efcfa3ca-0f82-4eb7-9b04-ed5eb4e1c3cf","savedPayload":{"position":{"x":17799.64382962515,"y":30864.23747069523},"targetPosition":{"x":17837.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"9ca8d728-ee11-4905-9a3a-5ca4ed50f3df","savedPayload":{"position":{"x":17837.64382962515,"y":30919.23747069523},"targetPosition":{"x":17829.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2cfde277-afa6-4ad3-bb5b-8a32b89e2037","savedPayload":{"position":{"x":17829.64382962515,"y":30960.23747069523},"targetPosition":{"x":17903.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"297a0ea2-f6d7-47fd-9fb7-0d99d00a87d8","savedPayload":{"position":{"x":17903.64382962515,"y":30969.23747069523},"targetPosition":{"x":17883.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"30e5485f-213b-435b-a670-07b76cfe5cae","savedPayload":{"position":{"x":19241.429203691412,"y":32550.741684144767},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BTC Markets","config":"{ \n\"codeName\": \"btcmarkets\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"fcb3b880-0852-4d93-8714-67373f9dca16","savedPayload":{"position":{"x":17911.64382962515,"y":31036.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"953d8eff-0b2e-4b07-8635-393fddae0c9d","savedPayload":{"position":{"x":18025.64382962515,"y":31127.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c08873f6-9120-4764-8b06-c8110468b423","savedPayload":{"position":{"x":17935.64382962515,"y":30927.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"beaa2557-4976-4e53-8a24-7ea00fc3afd5","savedPayload":{"position":{"x":18054.64382962515,"y":30851.23747069523},"targetPosition":{"x":18125.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"445158a2-91b4-4ad8-8380-036cbba6ad7e","savedPayload":{"position":{"x":18125.64382962515,"y":30951.23747069523},"targetPosition":{"x":18027.64382962515,"y":31003.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cd00e08c-a26d-4b11-93a3-b0e8f35bec4b","savedPayload":{"position":{"x":18027.64382962515,"y":31003.23747069523},"targetPosition":{"x":18016.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"35cb55c1-ceb3-4093-98af-8a1c2411fe0f","savedPayload":{"position":{"x":18016.64382962515,"y":31075.23747069523},"targetPosition":{"x":17994.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ac2fda42-95ca-404a-8dd2-72bff0ff5a0f","savedPayload":{"position":{"x":19127.749017450227,"y":32613.66623143447},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Buda","config":"{ \n\"codeName\": \"buda\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"27f3573d-e1f0-473f-9bfd-f9198e7240a0","savedPayload":{"position":{"x":17945.64382962515,"y":30937.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ddc0981-4e45-42f3-ae11-f5b136b2bc3d","savedPayload":{"position":{"x":17783.64382962515,"y":31008.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5a325d59-e6a6-4f76-a311-5e67c5f5a8a2","savedPayload":{"position":{"x":17980.64382962515,"y":30843.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"fb985ab9-7759-4780-a052-8ee9be0b712a","savedPayload":{"position":{"x":17907.64382962515,"y":30968.23747069523},"targetPosition":{"x":17958.64382962515,"y":30884.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fdf7665a-2974-467b-9280-4077a888733f","savedPayload":{"position":{"x":17958.64382962515,"y":30884.23747069523},"targetPosition":{"x":17956.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a3105cfc-f80e-4bcb-b399-6ea9c0f7edf0","savedPayload":{"position":{"x":17956.64382962515,"y":30936.23747069523},"targetPosition":{"x":17872.64382962515,"y":30941.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5d69a76f-e7bc-4538-950e-2e2353eccea3","savedPayload":{"position":{"x":17872.64382962515,"y":30941.23747069523},"targetPosition":{"x":17853.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"90fe3d74-662e-4fac-aff3-f41990b61ccf","savedPayload":{"position":{"x":19007.931889043757,"y":32663.930922181273},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"BW","config":"{ \n\"codeName\": \"bw\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"457616cd-25f9-4ad3-8c18-6331859dd42e","savedPayload":{"position":{"x":17890.64382962515,"y":31014.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8c1f9aa2-4253-4129-a533-e515644ddb38","savedPayload":{"position":{"x":17909.64382962515,"y":30970.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"24314a5b-85ca-4036-adc6-618120496f1d","savedPayload":{"position":{"x":17773.64382962515,"y":30945.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"f7c593f6-bd7a-41f7-a5e7-b2e1ea9a528f","savedPayload":{"position":{"x":17820.64382962515,"y":30885.23747069523},"targetPosition":{"x":17828.64382962515,"y":30802.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"60dfc799-f863-4895-8d17-568aa2303ef5","savedPayload":{"position":{"x":17828.64382962515,"y":30802.23747069523},"targetPosition":{"x":17860.64382962515,"y":30865.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"223e466d-d750-4e38-91ce-8a59c15242ba","savedPayload":{"position":{"x":17860.64382962515,"y":30865.23747069523},"targetPosition":{"x":17818.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cfff1310-5220-4978-9553-8514be141d14","savedPayload":{"position":{"x":17818.64382962515,"y":30919.23747069523},"targetPosition":{"x":17900.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d72db90c-d572-4cbb-8348-e3cc485d8e86","savedPayload":{"position":{"x":18883.38256475272,"y":32700.94644884361},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Bybit","config":"{ \n\"codeName\": \"bybit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"18fdf7c8-03c4-4f81-a88e-de97589765e1","savedPayload":{"position":{"x":17803.64382962515,"y":31059.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a62b2603-ac6f-4b6e-9541-86daf32027b1","savedPayload":{"position":{"x":17847.64382962515,"y":31104.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"66ecff99-7102-4f4a-9ce8-4d55fb22dfbc","savedPayload":{"position":{"x":17851.64382962515,"y":31165.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"625e127c-0ebb-4f57-af9f-9dfb57b262a1","savedPayload":{"position":{"x":18004.64382962515,"y":31091.23747069523},"targetPosition":{"x":18008.64382962515,"y":31027.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"8174bb53-66b8-4575-b206-74f9b6352a80","savedPayload":{"position":{"x":18008.64382962515,"y":31027.23747069523},"targetPosition":{"x":17916.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ee16357e-abde-4800-b089-f43f4b696a35","savedPayload":{"position":{"x":17916.64382962515,"y":31077.23747069523},"targetPosition":{"x":17944.64382962515,"y":31101.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c9e9473b-aff9-43c8-a6be-5cd30330bee2","savedPayload":{"position":{"x":17944.64382962515,"y":31101.23747069523},"targetPosition":{"x":17855.64382962515,"y":31007.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"516c3831-456b-4d17-b0a0-6a363ba2ddb2","savedPayload":{"position":{"x":18755.561271527895,"y":32724.27883821499},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ByteTrade","config":"{ \n\"codeName\": \"bytetrade\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e7a1e531-5a9e-466e-b98d-672de39eed3a","savedPayload":{"position":{"x":18088.64382962515,"y":31024.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"edafaba7-fd82-4d9f-b3f7-5d1c01c56599","savedPayload":{"position":{"x":17941.64382962515,"y":30943.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"50fa78b8-3aea-4e43-adcf-1e31820bf97f","savedPayload":{"position":{"x":17886.64382962515,"y":31008.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"b9c39b04-e86e-4ebb-9aba-39c375f2960c","savedPayload":{"position":{"x":17865.64382962515,"y":30941.23747069523},"targetPosition":{"x":17953.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5965d9cc-1d68-47a7-b838-e6dd81da6ea9","savedPayload":{"position":{"x":17953.64382962515,"y":31023.23747069523},"targetPosition":{"x":17858.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f51a08be-ee3f-4d3b-a75e-d783d63092a7","savedPayload":{"position":{"x":17858.64382962515,"y":30967.23747069523},"targetPosition":{"x":17898.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d395efd0-691b-4a68-a7f1-9bce95b2f687","savedPayload":{"position":{"x":17898.64382962515,"y":30965.23747069523},"targetPosition":{"x":17991.64382962515,"y":30981.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45e2306f-03e8-4d17-a73a-72c11dd14e78","savedPayload":{"position":{"x":18625.966597164217,"y":32733.65453936303},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CEX.IO","config":"{ \n\"codeName\": \"cex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9de19f0a-5824-4e42-af00-484b64421dc3","savedPayload":{"position":{"x":17890.64382962515,"y":31049.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"39db01bc-0cea-422f-b9e9-7d84e3f5446d","savedPayload":{"position":{"x":17918.64382962515,"y":31105.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"93833d3c-42c9-4e4d-bf0f-5b80a90d10c2","savedPayload":{"position":{"x":17978.64382962515,"y":31126.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"42863a52-30f4-4322-9c20-99a45d6dc3d6","savedPayload":{"position":{"x":17884.64382962515,"y":31149.23747069523},"targetPosition":{"x":17895.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fcff471d-29be-4176-8ff8-12088361f9fc","savedPayload":{"position":{"x":17895.64382962515,"y":31148.23747069523},"targetPosition":{"x":17953.64382962515,"y":31167.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"f7975a18-b3ab-49bc-ae45-eb02c99aff8c","savedPayload":{"position":{"x":17953.64382962515,"y":31167.23747069523},"targetPosition":{"x":17881.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ec432123-43fe-4171-8c41-b797d3161edb","savedPayload":{"position":{"x":17881.64382962515,"y":31096.23747069523},"targetPosition":{"x":17896.64382962515,"y":31076.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"346bfc30-e32a-453a-bdc6-0ead48221581","savedPayload":{"position":{"x":18496.117920729066,"y":32728.96363076407},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Prime","config":"{ \n\"codeName\": \"coinbaseprime\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"73cabd8d-9308-49ed-b544-44f785ee7d38","savedPayload":{"position":{"x":17867.64382962515,"y":30962.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"31bd1360-f0c5-4d70-876a-b152f7cedfd7","savedPayload":{"position":{"x":17960.64382962515,"y":30864.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9b75fcfa-fe75-48a8-9d28-2ff19c58c041","savedPayload":{"position":{"x":17792.64382962515,"y":30841.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c900b14a-c728-45af-90f8-29b3e5f29f46","savedPayload":{"position":{"x":17801.64382962515,"y":30986.23747069523},"targetPosition":{"x":17793.64382962515,"y":31006.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"eaf72df3-b66f-4b83-83f9-91e22ec0c300","savedPayload":{"position":{"x":17793.64382962515,"y":31006.23747069523},"targetPosition":{"x":17809.64382962515,"y":30934.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"9da95675-2071-41bf-b5ac-4f2af602994f","savedPayload":{"position":{"x":17809.64382962515,"y":30934.23747069523},"targetPosition":{"x":17862.64382962515,"y":31021.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"4fc49ad4-57cc-43b0-b14b-15f26af994aa","savedPayload":{"position":{"x":17862.64382962515,"y":31021.23747069523},"targetPosition":{"x":17922.64382962515,"y":30960.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5a8281db-6ace-4186-8cfb-cd249c4af48b","savedPayload":{"position":{"x":18367.537599231866,"y":32710.26110903248},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Coinbase Pro","config":"{ \n\"codeName\": \"coinbasepro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a29d6e1a-a94e-4b6b-8741-e9af6e4762f4","savedPayload":{"position":{"x":17788.64382962515,"y":30897.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"10cd9004-0088-4bc0-8fe6-b937f1bb311b","savedPayload":{"position":{"x":17865.64382962515,"y":30918.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"004397e6-ae73-46a6-9ed7-b4ba1930f77b","savedPayload":{"position":{"x":17945.64382962515,"y":30899.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"a81a7021-2228-4386-a773-9ac80c9e723a","savedPayload":{"position":{"x":17738.64382962515,"y":30761.23747069523},"targetPosition":{"x":17792.64382962515,"y":30789.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"482d82f2-364e-483c-b51a-a3fbe8a91577","savedPayload":{"position":{"x":17792.64382962515,"y":30789.23747069523},"targetPosition":{"x":17850.64382962515,"y":30889.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d823ad8e-0452-40f0-bad9-c2cb3ad29a21","savedPayload":{"position":{"x":17850.64382962515,"y":30889.23747069523},"targetPosition":{"x":17772.64382962515,"y":30894.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"0c965322-fdd2-4e67-aaf3-dfc4b9dffc59","savedPayload":{"position":{"x":17772.64382962515,"y":30894.23747069523},"targetPosition":{"x":17841.64382962515,"y":30932.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4242da4b-a67e-44d8-8a19-b1c2f078c94c","savedPayload":{"position":{"x":18241.733119380056,"y":32677.766244135688},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CoinEx","config":"{ \n\"codeName\": \"coinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"af78f796-60e5-4794-87b8-772c7bc74be1","savedPayload":{"position":{"x":18043.64382962515,"y":31069.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d351e6d9-36eb-4d0e-aca5-94429bbb23a3","savedPayload":{"position":{"x":18094.64382962515,"y":31090.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"438f74c6-15e0-4553-af2a-febd5290c269","savedPayload":{"position":{"x":17908.64382962515,"y":31088.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"bfb22430-77c7-41a7-8083-771f7d7f3634","savedPayload":{"position":{"x":17927.64382962515,"y":30953.23747069523},"targetPosition":{"x":17947.64382962515,"y":30990.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"51daaa12-1c60-4cef-96d8-a445b4b32296","savedPayload":{"position":{"x":17947.64382962515,"y":30990.23747069523},"targetPosition":{"x":17986.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"726b8c33-9873-4be1-b9ef-d6b4483f23b1","savedPayload":{"position":{"x":17986.64382962515,"y":31075.23747069523},"targetPosition":{"x":17919.64382962515,"y":31016.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"30469514-b983-4f6f-9d74-6d6ceef25eb6","savedPayload":{"position":{"x":17919.64382962515,"y":31016.23747069523},"targetPosition":{"x":18000.64382962515,"y":31106.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"62ad0961-6bdf-4a4a-a340-610816742d0a","savedPayload":{"position":{"x":18120.179423675774,"y":32631.860008654276},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"COSS","config":"{ \n\"codeName\": \"coss\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e6315232-c6b1-4e25-aade-7bc7ba9ba6ac","savedPayload":{"position":{"x":17787.64382962515,"y":30984.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b1e8451f-09a2-47b0-add3-cf9c35c487bb","savedPayload":{"position":{"x":17829.64382962515,"y":31095.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d1c9b795-0434-4ce1-9cb7-cc61fac7396d","savedPayload":{"position":{"x":17950.64382962515,"y":31149.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"22be64f9-4b08-4ac3-ae89-6726743a7d5a","savedPayload":{"position":{"x":17890.64382962515,"y":31165.23747069523},"targetPosition":{"x":17956.64382962515,"y":31156.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7462500-ba74-4bf3-ad81-35fa232bede3","savedPayload":{"position":{"x":17956.64382962515,"y":31156.23747069523},"targetPosition":{"x":17882.64382962515,"y":31131.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cd41ced-981a-4075-af43-3a0497eb0fcb","savedPayload":{"position":{"x":17882.64382962515,"y":31131.23747069523},"targetPosition":{"x":17856.64382962515,"y":31148.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b5937899-c6ee-4d7a-b259-1ee23d721f60","savedPayload":{"position":{"x":17856.64382962515,"y":31148.23747069523},"targetPosition":{"x":17874.64382962515,"y":31049.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"695029de-7f61-45bb-aa4c-c6d51e6369ed","savedPayload":{"position":{"x":18004.301618063546,"y":32573.08061122679},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"CREX24","config":"{ \n\"codeName\": \"crex24\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c5e12f4a-fb26-40d3-9e70-751b55018e74","savedPayload":{"position":{"x":17910.64382962515,"y":31024.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"00cb629e-bad4-4c6e-8abb-499cad3992f4","savedPayload":{"position":{"x":17938.64382962515,"y":31054.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"4909d182-e0d5-49a9-8ad2-a553c8aaaf88","savedPayload":{"position":{"x":17912.64382962515,"y":31301.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"075eb2a2-299b-4a0f-9f6d-76c385521dc4","savedPayload":{"position":{"x":17800.64382962515,"y":31332.23747069523},"targetPosition":{"x":17883.64382962515,"y":31289.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"e062ef2e-b252-4a66-8f58-d9aa8031f526","savedPayload":{"position":{"x":17883.64382962515,"y":31289.23747069523},"targetPosition":{"x":17920.64382962515,"y":31249.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8e75be98-f874-486d-b749-536e364934dc","savedPayload":{"position":{"x":17920.64382962515,"y":31249.23747069523},"targetPosition":{"x":17845.64382962515,"y":31164.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"052f73cd-7ed7-4537-8b01-840b5b892fea","savedPayload":{"position":{"x":17845.64382962515,"y":31164.23747069523},"targetPosition":{"x":17860.64382962515,"y":31075.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07a7ec7c-273e-4675-8d8d-21ab8514a1f0","savedPayload":{"position":{"x":17895.458263866083,"y":32502.117186545547},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Deribit","config":"{ \n\"codeName\": \"deribit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f0b2354b-89e3-4eca-b051-664a3b8283f6","savedPayload":{"position":{"x":17862.64382962515,"y":30844.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"4ae1f824-82a8-4796-a2d5-3d2358d8089f","savedPayload":{"position":{"x":17912.64382962515,"y":31024.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2013fe7a-d52c-4c9d-ba53-d281d014a8fc","savedPayload":{"position":{"x":17873.64382962515,"y":30926.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706d5778-ed21-49bd-9277-1840ec52708d","savedPayload":{"position":{"x":17729.64382962515,"y":31033.23747069523},"targetPosition":{"x":17813.64382962515,"y":31053.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"2e76bc02-6e10-4f14-9bf1-a11dc4268466","savedPayload":{"position":{"x":17813.64382962515,"y":31053.23747069523},"targetPosition":{"x":17855.64382962515,"y":30967.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"89a3ccc7-20ab-4e2d-929b-52d9286179b7","savedPayload":{"position":{"x":17855.64382962515,"y":30967.23747069523},"targetPosition":{"x":17818.64382962515,"y":30920.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"5c8219e3-4509-4b8b-941b-b88ac2c12237","savedPayload":{"position":{"x":17818.64382962515,"y":30920.23747069523},"targetPosition":{"x":17906.64382962515,"y":30929.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"21971815-4248-45df-8e04-20b9a5a83f06","savedPayload":{"position":{"x":17794.92544989493,"y":32419.801715882462},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DigiFinex","config":"{ \n\"codeName\": \"digifinex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"e583c93e-9a44-4e0d-acb7-56d7e00a555a","savedPayload":{"position":{"x":17954.64382962515,"y":30992.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8917c7c0-b420-4d4f-a35a-c0fc6870f0de","savedPayload":{"position":{"x":18052.64382962515,"y":30972.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a00b5bb0-5ab9-42e2-91fe-b450c7eb66d2","savedPayload":{"position":{"x":18220.64382962515,"y":31090.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2aafc473-339b-4d23-9b74-06fa7574c293","savedPayload":{"position":{"x":18144.64382962515,"y":31123.23747069523},"targetPosition":{"x":18203.64382962515,"y":31084.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"99e9e136-1ac7-4400-a100-0a2d37f0882d","savedPayload":{"position":{"x":18203.64382962515,"y":31084.23747069523},"targetPosition":{"x":18123.64382962515,"y":30998.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7cee21b-ddcb-4fd7-b610-43aabb2d1766","savedPayload":{"position":{"x":18123.64382962515,"y":30998.23747069523},"targetPosition":{"x":18032.64382962515,"y":30976.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e84a25-4368-4ad6-939f-5a16cece62cc","savedPayload":{"position":{"x":18032.64382962515,"y":30976.23747069523},"targetPosition":{"x":17996.64382962515,"y":31033.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b7d56781-0c51-4ec1-95fd-bf4dc8c00352","savedPayload":{"position":{"x":17703.88183147586,"y":32327.0992728693},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"DSX","config":"{ \n\"codeName\": \"dsx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"d672ab56-cd32-4ff5-8fc5-3733262aeccb","savedPayload":{"position":{"x":17916.64382962515,"y":31106.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"3731a7b5-ba9d-483e-bb41-abf3ae0232c6","savedPayload":{"position":{"x":17878.64382962515,"y":30946.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"9ef7e0ac-dc27-4b47-a06e-0cb7e80ee3d7","savedPayload":{"position":{"x":18124.64382962515,"y":31136.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"77491a3c-3db7-446f-aa67-9b5a1a3be7b3","savedPayload":{"position":{"x":18109.64382962515,"y":31081.23747069523},"targetPosition":{"x":18188.64382962515,"y":31137.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"bd1bd0b7-4943-4aeb-bf90-d3192dcabbb1","savedPayload":{"position":{"x":18188.64382962515,"y":31137.23747069523},"targetPosition":{"x":18093.64382962515,"y":31072.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45747fef-f30e-4fae-b02d-5768ae7dbe68","savedPayload":{"position":{"x":18093.64382962515,"y":31072.23747069523},"targetPosition":{"x":18018.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa2e1c9b-428c-4bb0-9e75-ceb8c9043d4b","savedPayload":{"position":{"x":18018.64382962515,"y":31005.23747069523},"targetPosition":{"x":17955.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"4c543abc-7372-4701-bc58-107578d45c25","savedPayload":{"position":{"x":17623.394811792878,"y":32225.09670889175},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoin","config":"{ \n\"codeName\": \"fcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"a97d578c-6d7f-403c-8294-18aacf14abd8","savedPayload":{"position":{"x":17893.64382962515,"y":30953.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"442c3834-482e-4928-9255-8ac859ae012e","savedPayload":{"position":{"x":17905.64382962515,"y":30896.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"79754959-1219-4c4d-be63-22766158beb5","savedPayload":{"position":{"x":18106.64382962515,"y":30976.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"1c3ae096-5024-43c3-abca-24498254e363","savedPayload":{"position":{"x":18112.64382962515,"y":30919.23747069523},"targetPosition":{"x":18126.64382962515,"y":30965.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"59db5bfd-e413-48a7-af63-237ad56adc82","savedPayload":{"position":{"x":18126.64382962515,"y":30965.23747069523},"targetPosition":{"x":18069.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"833c4e54-08f4-48ec-b90a-2767eb55f244","savedPayload":{"position":{"x":18069.64382962515,"y":31056.23747069523},"targetPosition":{"x":17996.64382962515,"y":30970.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a8cf17b3-0ea7-4a14-8c76-f655344b58a3","savedPayload":{"position":{"x":17996.64382962515,"y":30970.23747069523},"targetPosition":{"x":17919.64382962515,"y":30948.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6ddedcbd-07cb-4928-91b3-348f47118391","savedPayload":{"position":{"x":17554.408027561767,"y":32114.989910750606},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FCoinJP","config":"{ \n\"codeName\": \"fcoinjp\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"4a8a9810-6df6-451a-ab26-22bd7e7be85a","savedPayload":{"position":{"x":17930.64382962515,"y":31129.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"138ab40c-18ca-4a11-9709-0baa040873e6","savedPayload":{"position":{"x":18007.64382962515,"y":31122.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"258cdf92-8ed0-4133-ae2a-b9f086f56a13","savedPayload":{"position":{"x":17897.64382962515,"y":30887.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"537e8f0c-05ca-4403-bc96-da6c2f4678ae","savedPayload":{"position":{"x":17825.64382962515,"y":30842.23747069523},"targetPosition":{"x":17836.64382962515,"y":30926.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"62519e63-8f4e-4b72-a341-0a6eea01ac3f","savedPayload":{"position":{"x":17836.64382962515,"y":30926.23747069523},"targetPosition":{"x":17903.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"b4974cc1-f594-436b-8aa4-aff2733b8e3c","savedPayload":{"position":{"x":17903.64382962515,"y":30977.23747069523},"targetPosition":{"x":17873.64382962515,"y":31061.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d84b404f-75e2-4eb5-b34a-b45af8a57ca7","savedPayload":{"position":{"x":17873.64382962515,"y":31061.23747069523},"targetPosition":{"x":17942.64382962515,"y":31052.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"982627ea-df84-4ba9-9219-612fbe1e4276","savedPayload":{"position":{"x":17497.730285752426,"y":31998.069779982467},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"FTX","config":"{ \n\"codeName\": \"ftx\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"20c0a4f5-bdb9-46cc-af7e-2111964551e3","savedPayload":{"position":{"x":17886.64382962515,"y":30940.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"75c99a0b-d3c9-4073-9283-d33e539c36bb","savedPayload":{"position":{"x":17992.64382962515,"y":31061.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2e037470-549e-4aa8-bbe7-95cdeaef88ea","savedPayload":{"position":{"x":17964.64382962515,"y":31027.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3b6f5b7b-9c61-4b71-b29a-ca1bc027e55f","savedPayload":{"position":{"x":17817.64382962515,"y":30943.23747069523},"targetPosition":{"x":17890.64382962515,"y":30978.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"a84010f0-04b5-4eab-a3a6-a5944b80a373","savedPayload":{"position":{"x":17890.64382962515,"y":30978.23747069523},"targetPosition":{"x":17970.64382962515,"y":31008.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5cdc51a3-6136-4e03-9e2c-26a752140d17","savedPayload":{"position":{"x":17970.64382962515,"y":31008.23747069523},"targetPosition":{"x":18010.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55258a2b-3199-4070-beed-d34a8496870c","savedPayload":{"position":{"x":18010.64382962515,"y":30986.23747069523},"targetPosition":{"x":17960.64382962515,"y":31019.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0c0bcf5c-2774-423e-9fcf-c512b38dd06d","savedPayload":{"position":{"x":17454.026081066615,"y":31875.707098219504},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gate.io","config":"{ \n\"codeName\": \"gateio\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"71a15089-9d40-4726-9a41-37d406064164","savedPayload":{"position":{"x":17930.64382962515,"y":30993.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c025e976-c2c6-49de-81ec-48e2f737b412","savedPayload":{"position":{"x":17925.64382962515,"y":31053.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"876f964a-e12d-4438-87fb-a84be22f86d1","savedPayload":{"position":{"x":17914.64382962515,"y":30833.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"0c5d34c4-467f-4e98-bd39-1b2d9afb834e","savedPayload":{"position":{"x":17852.64382962515,"y":30831.23747069523},"targetPosition":{"x":17870.64382962515,"y":30847.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"89316d8c-893a-46ae-b147-948b4b8a5292","savedPayload":{"position":{"x":17870.64382962515,"y":30847.23747069523},"targetPosition":{"x":17827.64382962515,"y":30882.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a2a5de53-bd45-4904-8bae-0cf5ed66d2af","savedPayload":{"position":{"x":17827.64382962515,"y":30882.23747069523},"targetPosition":{"x":17800.64382962515,"y":30936.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"f6f4072d-8cf6-4e47-8b4e-a21cd553348a","savedPayload":{"position":{"x":17800.64382962515,"y":30936.23747069523},"targetPosition":{"x":17880.64382962515,"y":31031.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c4028289-4cdb-4da0-90e6-5f93328b8e03","savedPayload":{"position":{"x":17423.807805345143,"y":31749.336456028108},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Gemini","config":"{ \n\"codeName\": \"gemini\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9eb15872-8d15-4086-9920-46909eb5f9e7","savedPayload":{"position":{"x":17951.64382962515,"y":30901.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"a84dcf06-57c6-47d7-97a0-9f03f3af8b34","savedPayload":{"position":{"x":18045.64382962515,"y":30891.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"5da1ba65-3839-4664-8105-2ccb11652767","savedPayload":{"position":{"x":18028.64382962515,"y":31112.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"337fe5e2-b9fd-40eb-9f42-44fc5057d981","savedPayload":{"position":{"x":17957.64382962515,"y":31129.23747069523},"targetPosition":{"x":17875.64382962515,"y":31086.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"17a3f4a3-8914-4995-afb0-7e8115791b17","savedPayload":{"position":{"x":17875.64382962515,"y":31086.23747069523},"targetPosition":{"x":17941.64382962515,"y":31044.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"32e4a3f1-40d8-421f-9634-7ab339858286","savedPayload":{"position":{"x":17941.64382962515,"y":31044.23747069523},"targetPosition":{"x":17877.64382962515,"y":30977.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"365f6865-e707-415d-a168-b67c66ca9553","savedPayload":{"position":{"x":17877.64382962515,"y":30977.23747069523},"targetPosition":{"x":17971.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"58bf8247-baef-4ea6-a483-7ed8f0ba5043","savedPayload":{"position":{"x":17407.429740242005,"y":31620.439433646203},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1632c520-fa79-442f-b33b-430cb1356de6","savedPayload":{"position":{"x":17809.64382962515,"y":31086.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"576d1666-dbd3-4914-9fe2-fa05bdf72eea","savedPayload":{"position":{"x":17840.64382962515,"y":31148.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"41317aae-08ce-48cf-a47b-c2d2cc3920ec","savedPayload":{"position":{"x":18096.64382962515,"y":30975.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"23d7e4ba-8432-4214-bd94-0db5046e39cd","savedPayload":{"position":{"x":18039.64382962515,"y":31075.23747069523},"targetPosition":{"x":17981.64382962515,"y":31126.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ab200349-5ba5-44d2-ad5c-fa826303cfcd","savedPayload":{"position":{"x":17981.64382962515,"y":31126.23747069523},"targetPosition":{"x":18026.64382962515,"y":31066.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"a5f24785-5b2c-429b-a2e4-07063e2de904","savedPayload":{"position":{"x":18026.64382962515,"y":31066.23747069523},"targetPosition":{"x":17972.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13f275ca-06a6-4a72-8b4d-a9c079b9cef4","savedPayload":{"position":{"x":17972.64382962515,"y":31093.23747069523},"targetPosition":{"x":17880.64382962515,"y":31069.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8384fa0b-854c-4c23-846e-a5da0179a738","savedPayload":{"position":{"x":17405.083903595932,"y":31490.527230809537},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"HitBTC","config":"{ \n\"codeName\": \"hitbtc2\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9a29cb9e-ee8d-4315-8532-eef82224b84a","savedPayload":{"position":{"x":17838.64382962515,"y":30922.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"badd79e7-1e21-4dc3-bfa7-8dfb4a6c6267","savedPayload":{"position":{"x":17920.64382962515,"y":30944.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"ffdda0b7-af50-4010-84da-2bc0d562af2b","savedPayload":{"position":{"x":17887.64382962515,"y":30982.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"24816eed-adf7-453e-9b38-42ea4758dbaa","savedPayload":{"position":{"x":18021.64382962515,"y":30979.23747069523},"targetPosition":{"x":17931.64382962515,"y":30923.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"1dd16858-5641-4454-88a3-e5d7446e12a3","savedPayload":{"position":{"x":17931.64382962515,"y":30923.23747069523},"targetPosition":{"x":17836.64382962515,"y":31023.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457d75ed-ad21-4ee5-b36b-88cdc444008e","savedPayload":{"position":{"x":17836.64382962515,"y":31023.23747069523},"targetPosition":{"x":17808.64382962515,"y":31039.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b29ded7e-e2d5-4c7f-89af-b0816c32c743","savedPayload":{"position":{"x":17808.64382962515,"y":31039.23747069523},"targetPosition":{"x":17829.64382962515,"y":30949.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"09c634c2-5aba-49c5-80bc-4fd4175e7f0c","savedPayload":{"position":{"x":17416.79779819678,"y":31361.12294931652},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Pro","config":"{ \n\"codeName\": \"huobipro\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"86caa38c-5bdf-40e4-b27b-8d8b64319575","savedPayload":{"position":{"x":18071.64382962515,"y":31171.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"001225af-c715-4566-9502-f8f0ac1c4531","savedPayload":{"position":{"x":18040.64382962515,"y":31019.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"b4bf5ccb-b529-4500-a192-d9c3a0613389","savedPayload":{"position":{"x":18129.64382962515,"y":31073.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2e58c6d1-cfa7-4dc7-a322-e9356596ea1e","savedPayload":{"position":{"x":17976.64382962515,"y":31132.23747069523},"targetPosition":{"x":17953.64382962515,"y":31093.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae04ddf4-ae3e-4bdc-9393-41acc38ef818","savedPayload":{"position":{"x":17953.64382962515,"y":31093.23747069523},"targetPosition":{"x":18033.64382962515,"y":31090.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"2428e8ef-6a09-48fa-8ae4-ebfb28420be8","savedPayload":{"position":{"x":18033.64382962515,"y":31090.23747069523},"targetPosition":{"x":18085.64382962515,"y":31157.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"55c71c8b-f21f-4d16-ae93-e29362c39bf5","savedPayload":{"position":{"x":18085.64382962515,"y":31157.23747069523},"targetPosition":{"x":17996.64382962515,"y":31077.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"967c3914-a76d-4389-9c7e-9c258ae683bd","savedPayload":{"position":{"x":17442.43408934047,"y":31233.743736052187},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Huobi Russia","config":"{ \n\"codeName\": \"huobiru\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"9b7b32d6-a42e-44bb-8065-5aa32b1e844b","savedPayload":{"position":{"x":17980.64382962515,"y":31034.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8d74201c-33cd-4e12-8920-b08d0ef97572","savedPayload":{"position":{"x":17992.64382962515,"y":31105.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6e289d7-074b-4837-96e3-687988886fcc","savedPayload":{"position":{"x":18078.64382962515,"y":30954.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d72f81ba-6b41-414d-9cf0-d5f9c0c25403","savedPayload":{"position":{"x":18026.64382962515,"y":31021.23747069523},"targetPosition":{"x":18083.64382962515,"y":31117.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"5354f66c-6e73-4fe5-80ca-2c25b761ef51","savedPayload":{"position":{"x":18083.64382962515,"y":31117.23747069523},"targetPosition":{"x":18008.64382962515,"y":31029.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"81f5adbb-054c-47f2-b019-52585f5d7417","savedPayload":{"position":{"x":18008.64382962515,"y":31029.23747069523},"targetPosition":{"x":18018.64382962515,"y":31009.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ecd8645b-4bb6-4641-a20f-cee51bf33f1a","savedPayload":{"position":{"x":18018.64382962515,"y":31009.23747069523},"targetPosition":{"x":17957.64382962515,"y":31088.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6f97bb5c-8d85-43ee-86a1-33e22cdfbb5e","savedPayload":{"position":{"x":17481.692214952825,"y":31109.882995828142},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KKEX","config":"{ \n\"codeName\": \"kkex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"daa4e07a-1cd8-4d92-8004-2eabfaa62f77","savedPayload":{"position":{"x":17924.64382962515,"y":31038.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"cb64951f-d984-4f51-a751-166a316084f3","savedPayload":{"position":{"x":17945.64382962515,"y":31156.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6915bf12-9271-47e2-8b49-924ae9f5c65f","savedPayload":{"position":{"x":17958.64382962515,"y":31297.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"ff53381f-c6dd-4d17-a477-11396f60663f","savedPayload":{"position":{"x":17805.64382962515,"y":31141.23747069523},"targetPosition":{"x":17861.64382962515,"y":31223.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ae05bfc4-6ac8-408c-a90b-263830b2a71e","savedPayload":{"position":{"x":17861.64382962515,"y":31223.23747069523},"targetPosition":{"x":17875.64382962515,"y":31252.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"61c85f1a-a2a6-45c9-bb1e-3c76110f5d1e","savedPayload":{"position":{"x":17875.64382962515,"y":31252.23747069523},"targetPosition":{"x":17911.64382962515,"y":31154.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9fafb114-37d2-4d04-9c42-83d04ff62fc7","savedPayload":{"position":{"x":17911.64382962515,"y":31154.23747069523},"targetPosition":{"x":17987.64382962515,"y":31073.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"16ae95ce-796f-4f2b-942c-f98dcbf9cf4b","savedPayload":{"position":{"x":17534.11190940509,"y":30990.99288257655},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Kraken","config":"{ \n\"codeName\": \"kraken\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"747af60f-c8b9-4377-aa6c-172d4137ea23","savedPayload":{"position":{"x":17854.64382962515,"y":31008.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c75f7d97-9dc2-4d3e-89eb-f8a3d5f16368","savedPayload":{"position":{"x":17916.64382962515,"y":30872.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0093e946-03f4-4aec-942d-c76aed12ab1a","savedPayload":{"position":{"x":17780.64382962515,"y":31091.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"2a4235ac-e5ea-4484-bccd-f06c8a7275ec","savedPayload":{"position":{"x":17930.64382962515,"y":30869.23747069523},"targetPosition":{"x":17883.64382962515,"y":30953.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"737dec0a-23ab-4044-94ba-95c8bc50c0eb","savedPayload":{"position":{"x":17883.64382962515,"y":30953.23747069523},"targetPosition":{"x":17836.64382962515,"y":31011.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"457b045e-dae5-4f53-a8b7-cab4757e5286","savedPayload":{"position":{"x":17836.64382962515,"y":31011.23747069523},"targetPosition":{"x":17926.64382962515,"y":31005.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6eff12db-8e7c-402a-9e06-ae2618f506a0","savedPayload":{"position":{"x":17926.64382962515,"y":31005.23747069523},"targetPosition":{"x":17946.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"644efe9c-597a-4ddf-9e28-b33fb3b62d3e","savedPayload":{"position":{"x":17599.078599707587,"y":30878.467274173025},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"KuCoin","config":"{ \n\"codeName\": \"kucoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"01ca3037-4ed3-499e-ad6b-e14ca1d4a51f","savedPayload":{"position":{"x":17919.64382962515,"y":30949.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"8b3c4ce0-98b1-4d46-bd02-6cf44c3dd686","savedPayload":{"position":{"x":17998.64382962515,"y":30978.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d6c7c0ef-670d-4ed6-9246-6eb7d6bfc359","savedPayload":{"position":{"x":17927.64382962515,"y":30962.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"e8c2c454-b246-4f63-b51b-74d9cbb01ac2","savedPayload":{"position":{"x":17927.64382962515,"y":30924.23747069523},"targetPosition":{"x":17912.64382962515,"y":30869.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"d2bb2603-3b52-443c-8923-86fefafc0b14","savedPayload":{"position":{"x":17912.64382962515,"y":30869.23747069523},"targetPosition":{"x":17953.64382962515,"y":30954.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fa83b0b9-1039-4406-907c-f809a5af40f5","savedPayload":{"position":{"x":17953.64382962515,"y":30954.23747069523},"targetPosition":{"x":17966.64382962515,"y":30962.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"471161d3-201e-40c6-b433-49643cf7e43b","savedPayload":{"position":{"x":17966.64382962515,"y":30962.23747069523},"targetPosition":{"x":17920.64382962515,"y":30924.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"d79bc720-68e1-4771-a66a-bcffa30639d3","savedPayload":{"position":{"x":17675.830610816145,"y":30773.625430492953},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"LBank","config":"{ \n\"codeName\": \"lbank\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"def3f9d0-f09e-4e09-8b6d-a4c322a4384b","savedPayload":{"position":{"x":17877.64382962515,"y":31024.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"53eac3c1-96d6-4cb1-b54d-f3f174eaf733","savedPayload":{"position":{"x":17764.64382962515,"y":31036.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"c6c00704-1357-4426-910e-8134d6f87017","savedPayload":{"position":{"x":18030.64382962515,"y":31212.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"13990604-2192-4be1-b21b-53cf2bafc002","savedPayload":{"position":{"x":17893.64382962515,"y":31189.23747069523},"targetPosition":{"x":17964.64382962515,"y":31122.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"ed2c483e-d412-406d-b6f3-cfb1112a3a05","savedPayload":{"position":{"x":17964.64382962515,"y":31122.23747069523},"targetPosition":{"x":17951.64382962515,"y":31172.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6033b63c-c7fe-4a5d-8cf6-82128e2cfb41","savedPayload":{"position":{"x":17951.64382962515,"y":31172.23747069523},"targetPosition":{"x":17891.64382962515,"y":31096.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"20ece5c4-dbfa-4f4a-a9ee-8c8d9c38943b","savedPayload":{"position":{"x":17891.64382962515,"y":31096.23747069523},"targetPosition":{"x":17838.64382962515,"y":31032.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"cb2558d6-dab0-4f35-b83f-7cfc161b3d4f","savedPayload":{"position":{"x":17763.468095575536,"y":30677.69652629567},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Mercado Bitcoin","config":"{ \n\"codeName\": \"mercado\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"83ab2c39-e844-496f-bebb-7b8607428902","savedPayload":{"position":{"x":17849.64382962515,"y":31081.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"d69e722e-c71a-462a-8bbd-d3482d0eab21","savedPayload":{"position":{"x":17771.64382962515,"y":30887.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"18438709-83cf-49a3-96b8-888ab5adbcc5","savedPayload":{"position":{"x":17937.64382962515,"y":31080.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"6b9d4ed4-af81-462a-aace-fac0afd4687a","savedPayload":{"position":{"x":17787.64382962515,"y":30841.23747069523},"targetPosition":{"x":17873.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"802a4c53-8617-4257-95a5-45bfaa60ad0e","savedPayload":{"position":{"x":17873.64382962515,"y":30935.23747069523},"targetPosition":{"x":17866.64382962515,"y":31013.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"87936a4a-aac5-4aca-8f3e-2051611932c4","savedPayload":{"position":{"x":17866.64382962515,"y":31013.23747069523},"targetPosition":{"x":17829.64382962515,"y":30919.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"48f3a793-bb97-447b-8f1a-1d6965219747","savedPayload":{"position":{"x":17829.64382962515,"y":30919.23747069523},"targetPosition":{"x":17849.64382962515,"y":30986.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5002072e-145c-4aeb-a611-3e0e4c60ee5d","savedPayload":{"position":{"x":17860.963584604677,"y":30591.805240274254},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKCoin","config":"{ \n\"codeName\": \"okcoin\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"1e4dd5c8-0545-4698-8695-c985880243a3","savedPayload":{"position":{"x":17921.64382962515,"y":31043.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"0e188cae-9764-4963-a78b-e5d7ef272522","savedPayload":{"position":{"x":18005.64382962515,"y":30891.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"6d82bfd7-b4e1-4f93-a0f8-18f62cee944e","savedPayload":{"position":{"x":18047.64382962515,"y":30877.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"d815409c-1dd4-4e89-b844-5b96104509b4","savedPayload":{"position":{"x":17958.64382962515,"y":30988.23747069523},"targetPosition":{"x":17945.64382962515,"y":30961.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"238b9d2c-e2c0-4a77-945e-8e28604c0a2d","savedPayload":{"position":{"x":17945.64382962515,"y":30961.23747069523},"targetPosition":{"x":17963.64382962515,"y":30898.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8416c29a-5d73-4b2a-9463-511f400deafb","savedPayload":{"position":{"x":17963.64382962515,"y":30898.23747069523},"targetPosition":{"x":18047.64382962515,"y":30885.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"04abf32b-084e-4784-aa84-8c5612d3b7b9","savedPayload":{"position":{"x":18047.64382962515,"y":30885.23747069523},"targetPosition":{"x":17967.64382962515,"y":30969.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"1f860b4b-2893-4a51-8649-19c47d494a37","savedPayload":{"position":{"x":17967.17403243568,"y":30516.958569226157},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"OKEX","config":"{ \n\"codeName\": \"okex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"7f618566-3d10-4c3c-90b2-7541a5146eeb","savedPayload":{"position":{"x":17770.64382962515,"y":31094.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"21205576-5d12-452c-814f-eb56182162ae","savedPayload":{"position":{"x":17794.64382962515,"y":31173.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"46456247-ae9c-41ea-8395-a5e4a78007d4","savedPayload":{"position":{"x":17724.64382962515,"y":31147.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"706bf601-eaad-48bd-b0a7-8dad59066171","savedPayload":{"position":{"x":17715.64382962515,"y":31182.23747069523},"targetPosition":{"x":17706.64382962515,"y":31162.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"f9c7071c-2e5b-4c90-b482-dfc7ee001244","savedPayload":{"position":{"x":17706.64382962515,"y":31162.23747069523},"targetPosition":{"x":17795.64382962515,"y":31083.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e87e1e10-3404-48b9-8629-5df92ffa1979","savedPayload":{"position":{"x":17795.64382962515,"y":31083.23747069523},"targetPosition":{"x":17789.64382962515,"y":31181.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"08e8fd6a-6b23-4d65-8b8e-d966f845c07f","savedPayload":{"position":{"x":17789.64382962515,"y":31181.23747069523},"targetPosition":{"x":17847.64382962515,"y":31102.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"aa0edec0-8b27-4f94-abce-1e437ce5aba6","savedPayload":{"position":{"x":18080.854218676865,"y":30454.034021936455},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"RightBTC","config":"{ \n\"codeName\": \"rightbtc\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"ade372e9-5070-4fa9-843e-57732c4106c3","savedPayload":{"position":{"x":17999.64382962515,"y":30964.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"b63d440e-4501-475c-b8a6-2b9a144e32a1","savedPayload":{"position":{"x":17984.64382962515,"y":30901.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"81d77477-4f2e-43c0-b284-dde54f91c37f","savedPayload":{"position":{"x":17864.64382962515,"y":31036.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"9ce3cc34-1ba4-4155-96a5-c946b1bcc5ab","savedPayload":{"position":{"x":17819.64382962515,"y":31127.23747069523},"targetPosition":{"x":17810.64382962515,"y":31080.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"c7df4af7-37c1-403d-ada1-b6a527821bdd","savedPayload":{"position":{"x":17810.64382962515,"y":31080.23747069523},"targetPosition":{"x":17861.64382962515,"y":31043.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6de19501-5ce7-4944-b9dd-25b149acbb38","savedPayload":{"position":{"x":17861.64382962515,"y":31043.23747069523},"targetPosition":{"x":17946.64382962515,"y":30988.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"aa87ace4-a976-401c-93f9-24a498261742","savedPayload":{"position":{"x":17946.64382962515,"y":30988.23747069523},"targetPosition":{"x":17991.64382962515,"y":30935.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"c20cd9e1-52a0-4d17-b90c-e9d5b63315ce","savedPayload":{"position":{"x":18200.67134708334,"y":30403.76933118965},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"STEX","config":"{ \n\"codeName\": \"stex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f1d65161-4922-4a1e-ac98-df1a842347a7","savedPayload":{"position":{"x":17872.64382962515,"y":31001.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"c313b2c6-6154-4a9a-b826-fd99cc500cd9","savedPayload":{"position":{"x":17888.64382962515,"y":31186.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"d0a1259b-1c37-4d39-836e-3c434c3b3687","savedPayload":{"position":{"x":17778.64382962515,"y":31076.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"4a1e5627-459c-4dec-be13-c20d4a9ea58f","savedPayload":{"position":{"x":17841.64382962515,"y":31179.23747069523},"targetPosition":{"x":17795.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"6981eb0d-0f0e-4f8e-9781-4a03e22e93fd","savedPayload":{"position":{"x":17795.64382962515,"y":31105.23747069523},"targetPosition":{"x":17858.64382962515,"y":31091.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7704478a-9717-43a8-bd2e-88daa6f84bd0","savedPayload":{"position":{"x":17858.64382962515,"y":31091.23747069523},"targetPosition":{"x":17941.64382962515,"y":31173.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"262aad86-f430-49ea-a636-e8bd816a9636","savedPayload":{"position":{"x":17941.64382962515,"y":31173.23747069523},"targetPosition":{"x":17892.64382962515,"y":31092.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"0ea23137-3c65-4de1-9772-6ac1b65196e8","savedPayload":{"position":{"x":18325.220671374373,"y":30366.753804527314},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TideBit","config":"{ \n\"codeName\": \"tidebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c92318bd-8b2d-489b-b8e8-cf30fb63286e","savedPayload":{"position":{"x":17981.64382962515,"y":31021.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"83bca3ec-fc1c-435c-b5fe-b1cf92463fd1","savedPayload":{"position":{"x":18051.64382962515,"y":31072.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"2f3ee9b2-cd41-458c-84da-edac3155028a","savedPayload":{"position":{"x":18075.64382962515,"y":31059.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"009ae4b6-adbc-4900-9fc0-f18936eeed9b","savedPayload":{"position":{"x":18030.64382962515,"y":31058.23747069523},"targetPosition":{"x":18009.64382962515,"y":31028.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"3ee88180-fe10-41df-8251-b1ed0a526e7a","savedPayload":{"position":{"x":18009.64382962515,"y":31028.23747069523},"targetPosition":{"x":17987.64382962515,"y":31047.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"bb88e6e8-a99a-4c4e-9ca5-ffed49aa8b54","savedPayload":{"position":{"x":17987.64382962515,"y":31047.23747069523},"targetPosition":{"x":17925.64382962515,"y":31135.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"13a4a95e-4333-4455-9f7c-90bc839d174a","savedPayload":{"position":{"x":17925.64382962515,"y":31135.23747069523},"targetPosition":{"x":17978.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5563c310-701a-4c1e-8155-87c08c927ce3","savedPayload":{"position":{"x":18453.041964599197,"y":30343.421415155935},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TimeX","config":"{ \n\"codeName\": \"timex\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"5c004b5f-eec4-414f-8d01-d9b3fddeee9e","savedPayload":{"position":{"x":17892.64382962515,"y":30973.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"59a33add-d0e9-4ae1-8a01-f1e0ed09cb61","savedPayload":{"position":{"x":17911.64382962515,"y":30878.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"a4189ba1-d1d4-4ff8-91dd-a8696ca493e3","savedPayload":{"position":{"x":17953.64382962515,"y":30880.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"3d34eb9d-e7cb-42fe-8785-c327b2bbc529","savedPayload":{"position":{"x":17839.64382962515,"y":30875.23747069523},"targetPosition":{"x":17930.64382962515,"y":30877.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"773de01f-0999-4a59-91f0-642148cd58d0","savedPayload":{"position":{"x":17930.64382962515,"y":30877.23747069523},"targetPosition":{"x":17924.64382962515,"y":30871.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"fe33a596-4f98-4843-a5b1-26e7e0fcf1c8","savedPayload":{"position":{"x":17924.64382962515,"y":30871.23747069523},"targetPosition":{"x":18018.64382962515,"y":30832.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d078b9a3-cdc6-458e-a511-dc4f5bef38ba","savedPayload":{"position":{"x":18018.64382962515,"y":30832.23747069523},"targetPosition":{"x":17949.64382962515,"y":30914.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"27d69fa7-b561-4986-8c0d-1b374e7e1bf1","savedPayload":{"position":{"x":18582.63663896287,"y":30334.045714007894},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"TOP.Q","config":"{ \n\"codeName\": \"topq\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"eafef6a3-eed2-470e-a15c-aa4c10001cd2","savedPayload":{"position":{"x":17818.64382962515,"y":31115.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"2d5eb813-ceb6-40cd-8682-7205596bb8b5","savedPayload":{"position":{"x":17759.64382962515,"y":31188.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"61f7832c-c1f0-40bc-b1f2-ba947c58309d","savedPayload":{"position":{"x":17741.64382962515,"y":31288.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"63b973da-30a7-467a-b954-c57537aab18d","savedPayload":{"position":{"x":17677.64382962515,"y":31206.23747069523},"targetPosition":{"x":17756.64382962515,"y":31146.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"722dcf44-de3f-4d1a-8655-80561e1e4d55","savedPayload":{"position":{"x":17756.64382962515,"y":31146.23747069523},"targetPosition":{"x":17788.64382962515,"y":31228.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"45d5e04a-4a53-4f32-b4c0-d882456cb263","savedPayload":{"position":{"x":17788.64382962515,"y":31228.23747069523},"targetPosition":{"x":17806.64382962515,"y":31163.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c66e8dfc-4847-4180-b82c-36458f9b405d","savedPayload":{"position":{"x":17806.64382962515,"y":31163.23747069523},"targetPosition":{"x":17847.64382962515,"y":31105.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8fdf13d8-e8d2-4ef4-8b34-f492a25d753a","savedPayload":{"position":{"x":18712.485315398026,"y":30338.736622606855},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"Upbit","config":"{ \n\"codeName\": \"upbit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"f456fec2-cee6-4f0c-b865-1188088879c9","savedPayload":{"position":{"x":17919.64382962515,"y":30973.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"947c1ca0-bff9-4372-b153-40054e29b705","savedPayload":{"position":{"x":17921.64382962515,"y":31014.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"34ffbe12-5a26-446a-8bf6-7395c0370ba2","savedPayload":{"position":{"x":17874.64382962515,"y":30900.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"8f00f19d-74a8-48d8-b951-79f35e87b110","savedPayload":{"position":{"x":17906.64382962515,"y":30902.23747069523},"targetPosition":{"x":17896.64382962515,"y":30896.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"64e1bede-aabf-4831-83a6-fe1cea435613","savedPayload":{"position":{"x":17896.64382962515,"y":30896.23747069523},"targetPosition":{"x":17945.64382962515,"y":30971.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"7c80b956-f2ca-4a6f-a661-f17546288d3e","savedPayload":{"position":{"x":17945.64382962515,"y":30971.23747069523},"targetPosition":{"x":18027.64382962515,"y":31048.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"e3686b02-4ecc-4dcb-a311-b7ef542a3c37","savedPayload":{"position":{"x":18027.64382962515,"y":31048.23747069523},"targetPosition":{"x":17991.64382962515,"y":30980.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"74e57ecd-3394-42b4-b2c4-6f216f7e41db","savedPayload":{"position":{"x":18841.065636895226,"y":30357.439144338445},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"WhiteBit","config":"{ \n\"codeName\": \"whitebit\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"c16eae45-a568-4b2e-b064-4431bdf34c24","savedPayload":{"position":{"x":17767.64382962515,"y":30899.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"dfdf793f-4ba6-4215-a325-323c0f223553","savedPayload":{"position":{"x":17920.64382962515,"y":31004.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"fd749d13-dbac-493f-9af6-c521eddf909f","savedPayload":{"position":{"x":17815.64382962515,"y":30973.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"79f7d2d0-77a5-4f38-ac68-fd11f18e5e6b","savedPayload":{"position":{"x":17761.64382962515,"y":31182.23747069523},"targetPosition":{"x":17680.64382962515,"y":31153.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"fd0506f4-58b7-431e-bc9d-69bce63c3379","savedPayload":{"position":{"x":17680.64382962515,"y":31153.23747069523},"targetPosition":{"x":17720.64382962515,"y":31056.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"47e8a4b1-9a6c-4555-a881-f7524183d72e","savedPayload":{"position":{"x":17720.64382962515,"y":31056.23747069523},"targetPosition":{"x":17817.64382962515,"y":31010.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"7fa08b91-55ab-477d-a097-88ea7f25fb76","savedPayload":{"position":{"x":17817.64382962515,"y":31010.23747069523},"targetPosition":{"x":17834.64382962515,"y":30950.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"467ece1e-d1d0-4a11-ae7a-d0e22cd4eba5","savedPayload":{"position":{"x":18966.87011674703,"y":30389.934009235236},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchange","name":"ZB","config":"{ \n\"codeName\": \"zb\"\n}","project":"Superalgos","exchangeAssets":{"type":"Exchange Assets","name":"New Exchange Assets","config":"{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}","project":"Superalgos","assets":[],"id":"db206cbd-a587-4e8e-acbe-6581ad3b5cc4","savedPayload":{"position":{"x":17855.64382962515,"y":31027.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeMarkets":{"type":"Exchange Markets","name":"New Exchange Markets","project":"Superalgos","markets":[],"id":"1dd658c5-7755-44b7-85f0-9bcd787762a0","savedPayload":{"position":{"x":17789.64382962515,"y":31044.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"exchangeAccounts":{"type":"Exchange Accounts","name":"New Exchange Accounts","project":"Superalgos","userAccounts":[{"type":"User Account","name":"New User Account","project":"Superalgos","userAssets":{"type":"User Assets","name":"New User Assets","project":"Superalgos","assets":[],"id":"0de82bbe-7909-4b65-b304-f59b41f618ae","savedPayload":{"position":{"x":17830.64382962515,"y":30696.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"userKeys":{"type":"User Keys","name":"New User Keys","project":"Superalgos","keys":[{"type":"Exchange Account Key","name":"New Exchange Account Key","config":"{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}","project":"Superalgos","id":"c89819d0-8880-4b36-a9b3-0b284d266e3b","savedPayload":{"position":{"x":17891.64382962515,"y":30748.23747069523},"targetPosition":{"x":17865.64382962515,"y":30772.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{}}}],"id":"7a55f503-17fa-45c4-880b-1a9a11a0a555","savedPayload":{"position":{"x":17865.64382962515,"y":30772.23747069523},"targetPosition":{"x":17846.64382962515,"y":30793.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e640fca2-8bab-45ff-9a47-8e7b9650c277","savedPayload":{"position":{"x":17846.64382962515,"y":30793.23747069523},"targetPosition":{"x":17909.64382962515,"y":30886.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"421a99cd-3d9a-46a5-8654-08d6336e75be","savedPayload":{"position":{"x":17909.64382962515,"y":30886.23747069523},"targetPosition":{"x":17861.64382962515,"y":30951.23747069523},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"07df07e8-39a8-4fbc-a0c8-150f20b6ac59","savedPayload":{"position":{"x":19088.423812451314,"y":30435.840244716648},"targetPosition":{"x":18604.301618063546,"y":31533.850126685462},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"51f64e29-e3ab-4683-a5de-f397fbf94260","savedPayload":{"position":{"x":18604.301618063546,"y":31533.850126685462},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":5,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Crypto Exchanges","name":"Testing Queue","project":"Superalgos","exchanges":[],"id":"895ce4b1-4890-4216-89ba-a012181d2546","savedPayload":{"position":{"x":18754.301618063546,"y":30754.427263279467},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"signalsProviders":[],"id":"7217b56c-e854-4c06-8b8a-d5d3c05a153d","savedPayload":{"position":{"x":18904.301618063546,"y":31014.2348844148},"targetPosition":{"x":18904.301618063546,"y":31014.2348844148},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":""}}},{"type":"Charting Space","name":"New Charting Space","project":"Superalgos","viewport":{"type":"Viewport","name":"New Viewport","config":"{\"zoom\":\"1.40\"}","project":"Superalgos","id":"01713f1d-91b8-44f9-9c5d-a0c12fd09037","savedPayload":{"position":{"x":19200.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"frame":{"position":{"x":0,"y":40}}}},"dashboards":[{"type":"Dashboard","name":"Testing Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"WHB v2 Backtesting Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"fromDate\": \"2020-03-04T12:15:03.517Z\",\n \"toDate\": \"2020-03-16T22:08:40.266Z\"\n}","project":"Superalgos","id":"5192eaa2-8ea0-46b1-870f-b9429a00e993","savedPayload":{"position":{"x":18793.642520037345,"y":25732.78497574544},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": false,\n \"autoMaxScale\": false,\n \"minValue\": 2976.596840823151,\n \"maxValue\": 11824.968140823152\n}","project":"Superalgos","id":"6e48a952-39da-466f-813d-b27da5599ea0","savedPayload":{"position":{"x":18703.412280129083,"y":25784.87942904552},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{\"value\":\"01-hs\"}","project":"Superalgos","id":"b26b5d49-6ee6-46c0-98d3-9940b99d2f40","savedPayload":{"position":{"x":18600.806237131383,"y":25802.971642809745},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"fa813608-2b0a-48b2-910b-7ddaac756e16","savedPayload":{"position":{"x":18701.806237131383,"y":24913.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"dd0c8cb9-af86-43fc-a22e-2b1b408787d9"}}},{"type":"Layer","name":"Episode Statistics","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"b5af64e4-f6b0-43fb-9505-16f90deb554d","savedPayload":{"position":{"x":18633.806237131383,"y":24947.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"5c98f3e9-72a7-4742-9315-50d6e4aaa452"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6266fd8e-a5f5-4cfa-b8ba-ab722fce5235","savedPayload":{"position":{"x":18731.806237131383,"y":25004.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"b626d6f0-f929-457e-910b-dfb83c666deb"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8bf67d64-0c44-4dbe-aa36-54f2cfcac9a7","savedPayload":{"position":{"x":18647.806237131383,"y":25034.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"3d2dee0f-a7df-463f-befe-5f6231ab7830"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"edb413d2-a9d3-4789-84c3-73d931d54a7c","savedPayload":{"position":{"x":18606.806237131383,"y":24984.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"5699dc43-eb9a-4e42-aece-e9567924cac2"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"40eb24d7-de06-40de-a366-b6282ce71c2b","savedPayload":{"position":{"x":18727.806237131383,"y":24939.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"7647e8ee-0ab7-41af-b153-099a334a362d"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"42ff6f2d-3fe6-45eb-9030-4293c24226c4","savedPayload":{"position":{"x":18586.806237131383,"y":24962.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"00bf7f7c-9002-4923-8010-7125327f9128"}}},{"type":"Layer","name":"Current Episode","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"ab1ce152-2274-4b30-8d7d-7a965cafbf31","savedPayload":{"position":{"x":18656.806237131383,"y":24942.35640053908},"targetPosition":{"x":18652.806237131383,"y":24950.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"54b85d80-295a-4540-b726-f6f7cd17c6c9"}}}],"layerFolders":[],"id":"fe0d7201-2146-4833-ae77-cfadb7270673","savedPayload":{"position":{"x":18652.806237131383,"y":24950.35640053908},"targetPosition":{"x":18656.806237131383,"y":25019.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"d169d6ef-5565-426c-b8d7-147ed9c36e6e","savedPayload":{"position":{"x":18731.806237131383,"y":24843.35640053908},"targetPosition":{"x":18712.806237131383,"y":24939.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"68fdae81-0371-428f-8495-a0fe100cbba8"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0afe1dde-aa14-4bd5-aad6-8940d0f368ce","savedPayload":{"position":{"x":18642.806237131383,"y":24892.35640053908},"targetPosition":{"x":18712.806237131383,"y":24939.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"51693a6b-7d84-4f20-bdee-1211f9bae6f9"}}}],"layerFolders":[],"id":"403e5d9f-65ec-40b8-ab0a-b0d63388815a","savedPayload":{"position":{"x":18712.806237131383,"y":24939.35640053908},"targetPosition":{"x":18656.806237131383,"y":25019.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f1ad300d-2644-4c81-936c-fbf395c1a6bb","savedPayload":{"position":{"x":18652.806237131383,"y":25142.35640053908},"targetPosition":{"x":18722.806237131383,"y":25116.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"80cb8779-8e2b-4c33-bd43-c696dbc4e5f6"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"61fe281f-e795-4e5d-bc56-ea4ccfdb0e81","savedPayload":{"position":{"x":18723.806237131383,"y":25165.35640053908},"targetPosition":{"x":18722.806237131383,"y":25116.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"cd54c5f3-13f4-4e71-b233-b649d4878ab6"}}}],"layerFolders":[],"id":"707f45cd-f2fa-4685-ae9a-f247195f1c2b","savedPayload":{"position":{"x":18722.806237131383,"y":25116.35640053908},"targetPosition":{"x":18656.806237131383,"y":25019.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c16346d4-a027-4afd-b3de-d04c98278ce2","savedPayload":{"position":{"x":18644.806237131383,"y":25110.35640053908},"targetPosition":{"x":18714.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"7466e39e-eced-4ca3-9d56-a0d1548b91c6"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"079ed389-1381-4147-8d81-7c51c34bf23b","savedPayload":{"position":{"x":18695.806237131383,"y":24986.35640053908},"targetPosition":{"x":18714.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"bea0a14e-e504-4e9e-a346-439180b6ad31"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"37c1f78a-2773-42b8-a0e5-04e6fa014eda","savedPayload":{"position":{"x":18645.806237131383,"y":25067.35640053908},"targetPosition":{"x":18714.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"06ef8c46-5cc3-4890-9a44-8fd57b8e9ca3"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7ae2aa13-6f81-4be9-b3fa-4bf46194fa91","savedPayload":{"position":{"x":18733.806237131383,"y":25063.35640053908},"targetPosition":{"x":18714.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"9df7d784-5665-4fa1-9d85-ee74845267aa"}}}],"layerFolders":[],"id":"dce48197-8109-41cc-9e8d-43c49ecd8d98","savedPayload":{"position":{"x":18714.806237131383,"y":25042.35640053908},"targetPosition":{"x":18656.806237131383,"y":25019.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fe9cc276-d299-412e-b321-afc86593f929","savedPayload":{"position":{"x":18588.806237131383,"y":24928.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"4bc0034d-935a-4193-89cf-b18c65b0905a"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"82636cd6-117e-4b83-85e7-6ee5ddd0d644","savedPayload":{"position":{"x":18615.806237131383,"y":24928.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"ffada7e3-6897-4d94-b119-eef67c178678"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"0e389a87-dfef-44f9-812d-1dd1f5cfbf43","savedPayload":{"position":{"x":18607.806237131383,"y":24978.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"e195d10c-7b9f-4428-910e-11be05f66345"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"64ba9c66-3f86-4577-ad49-75eaab68c0ba","savedPayload":{"position":{"x":18488.806237131383,"y":24939.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"c396625e-9a71-4edd-a954-ea2c884538f5"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dd350949-fa54-430f-b5b0-2a9167bae8f0","savedPayload":{"position":{"x":18473.806237131383,"y":25048.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"d15cc7d7-3e92-4f92-9bbe-e0a3ba499740"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3157319b-7ae4-4ea6-99fb-e8bc2b7c0b24","savedPayload":{"position":{"x":18508.806237131383,"y":24970.35640053908},"targetPosition":{"x":18568.806237131383,"y":25020.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"507be75d-cd3c-4767-b159-328469e5c6e8"}}}],"layerFolders":[],"id":"4c246238-98c7-414d-b25b-aa82c3cbe143","savedPayload":{"position":{"x":18568.806237131383,"y":25020.35640053908},"targetPosition":{"x":18656.806237131383,"y":25019.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"340fd3f6-a9c9-47b0-b4be-078b7d806800","savedPayload":{"position":{"x":18656.806237131383,"y":25019.35640053908},"targetPosition":{"x":18733.806237131383,"y":24998.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"d4903f86-8eee-42b2-b3db-230029802ccb","savedPayload":{"position":{"x":18733.806237131383,"y":24998.35640053908},"targetPosition":{"x":18811.806237131383,"y":25062.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ced831dc-8bda-42ef-97f1-d6d75cf0e68a","savedPayload":{"position":{"x":18811.806237131383,"y":25062.35640053908},"targetPosition":{"x":18893.806237131383,"y":25028.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7d983ca2-8566-436b-ab21-445564aba4b3"}}},"id":"e771e170-f11f-4f7d-9cb4-112bafb9c1f4","savedPayload":{"position":{"x":18498.200194133682,"y":25784.87942904552},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"30b49f64-f53b-406a-ba61-aad55cd084e3","savedPayload":{"position":{"x":18923.806237131383,"y":25101.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"8cb33c4c-4561-4e2e-a145-19bb87fa9b61"}}},{"type":"Layer","name":"Trading System Highlights","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"37f95213-23f6-473b-ab56-944a60f0d3ee","savedPayload":{"position":{"x":18867.806237131383,"y":25141.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"3521e920-c9b3-493b-9690-58101c475dad"}}},{"type":"Layer","name":"Trading System Values","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"f4119e12-f225-46f4-be06-b56509bbf00f","savedPayload":{"position":{"x":18878.806237131383,"y":25007.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"084d12bb-30ec-4a0f-a356-a58817d4e266"}}},{"type":"Layer","name":"Trading System Status","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"de0d7560-5dc3-4d72-b95f-e26d686ebd64","savedPayload":{"position":{"x":18922.806237131383,"y":25043.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"12e328ff-6658-4ca1-be6d-a93c8fc5c42e"}}},{"type":"Layer","name":"Trading System Progress","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"6e83e3f7-36f3-4d40-a6d9-2800f339aa51","savedPayload":{"position":{"x":19030.806237131383,"y":25074.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"d35b7442-5911-4456-bc9e-c451e21d4a30"}}},{"type":"Layer","name":"Trading System Running","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"7d2b6f17-ecc9-493d-9b0a-41904bb3b852","savedPayload":{"position":{"x":18955.806237131383,"y":25000.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"65c269c0-2793-483c-ad8e-5c107a56b951"}}},{"type":"Layer","name":"Trading System Announcements","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"3568bbb7-41a3-4805-80b3-b344dc8bd80c","savedPayload":{"position":{"x":18889.806237131383,"y":25080.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"56631448-2669-47f1-bbc9-7dda628f433e"}}},{"type":"Layer","name":"Trading System Warnings","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"0a880071-8042-4cef-95fb-47fdd99737ce","savedPayload":{"position":{"x":18868.806237131383,"y":25095.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"c7c4ece9-6d52-4e9a-800e-11c22955c178"}}},{"type":"Layer","name":"Trading System Infos","config":"{\n \"status\": \"off\"\n}","project":"Superalgos","id":"53b788b5-a4b1-4179-9e5c-f43adf1e83d5","savedPayload":{"position":{"x":18980.806237131383,"y":25083.35640053908},"targetPosition":{"x":18942.806237131383,"y":25093.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"f937c3f3-305c-4abc-aa12-0f2015e8f5fa"}}}],"layerFolders":[],"id":"0d7e6572-550e-425e-a408-9cd4a6d2de07","savedPayload":{"position":{"x":18942.806237131383,"y":25093.35640053908},"targetPosition":{"x":18926.806237131383,"y":25190.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"91960320-2dcb-458a-83dd-dce4a019a209","savedPayload":{"position":{"x":18926.806237131383,"y":25190.35640053908},"targetPosition":{"x":18856.806237131383,"y":25099.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"34799cb4-7d89-4f96-8e56-807ff9ed0148","savedPayload":{"position":{"x":18856.806237131383,"y":25099.35640053908},"targetPosition":{"x":18796.806237131383,"y":25002.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7d983ca2-8566-436b-ab21-445564aba4b3"}}},"id":"4c457781-9247-442d-875c-1a476cf66bfe","savedPayload":{"position":{"x":18407.96995422542,"y":25732.78497574544},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"f65f3741-038e-4748-81d9-3bf0f5c92388","savedPayload":{"position":{"x":18579.806237131383,"y":24908.35640053908},"targetPosition":{"x":18608.806237131383,"y":25008.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"b4881fc1-e88b-4be3-805d-ab98c4ccbb0b"}}},{"type":"Layer","name":"Strategies","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"a570f5c9-baf9-4acb-8305-651a78689b92","savedPayload":{"position":{"x":18663.806237131383,"y":25076.35640053908},"targetPosition":{"x":18608.806237131383,"y":25008.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"7201adfb-d461-46b7-af3a-a45fabe24835"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"8ef28bbb-7daf-4e89-996f-8125cf4464f7","savedPayload":{"position":{"x":18499.806237131383,"y":25047.35640053908},"targetPosition":{"x":18559.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"c92a34c6-c74b-48ad-a57d-9fb78e3e642c"}}},{"type":"Layer","name":"Market Sell Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"74ce175e-697a-459b-87c7-1dd7a9773312","savedPayload":{"position":{"x":18495.806237131383,"y":25098.35640053908},"targetPosition":{"x":18559.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"442e4f1d-e420-43cf-94c8-08282408f555"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"e4fac985-c39e-4765-9eb4-f7eac5eb0ad3","savedPayload":{"position":{"x":18501.806237131383,"y":25045.35640053908},"targetPosition":{"x":18559.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"5beb71e3-23fd-4e79-b7fd-46da219b1112"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"0356dd2e-b704-4be0-8794-ca197cc18bd1","savedPayload":{"position":{"x":18466.806237131383,"y":25071.35640053908},"targetPosition":{"x":18559.806237131383,"y":25084.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"1d6f14f5-c7fe-4b42-8a1b-5859e6e5a592"}}}],"layerFolders":[],"id":"2b4a8143-844b-46be-beec-0328c5feeeb0","savedPayload":{"position":{"x":18559.806237131383,"y":25084.35640053908},"targetPosition":{"x":18608.806237131383,"y":25008.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"f3324490-0585-4cc1-8ca6-82cbba329286","savedPayload":{"position":{"x":18458.806237131383,"y":25018.35640053908},"targetPosition":{"x":18531.806237131383,"y":25106.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"7f256746-a20a-4856-af57-18f91e02fdaf"}}},{"type":"Layer","name":"Open Stages","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"68057302-b007-4c11-937c-f3666e549d06","savedPayload":{"position":{"x":18554.806237131383,"y":25007.35640053908},"targetPosition":{"x":18531.806237131383,"y":25106.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"c9b06e1b-2816-4770-b4d2-951b354fa688"}}},{"type":"Layer","name":"Manage Stages","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"ed7d05b5-e17f-4d1b-8877-3771f1ff1f2b","savedPayload":{"position":{"x":18605.806237131383,"y":25063.35640053908},"targetPosition":{"x":18531.806237131383,"y":25106.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"59770c0b-e50d-46d3-b62f-7ea080fcbeb2"}}},{"type":"Layer","name":"Close Stages","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"5f05ebbd-0849-429e-95a0-870672f781ef","savedPayload":{"position":{"x":18436.806237131383,"y":25202.35640053908},"targetPosition":{"x":18531.806237131383,"y":25106.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"56915d54-1528-46bf-ad3f-361ca441abc0"}}}],"layerFolders":[],"id":"272eae40-8975-4ffa-984d-9cb015a86913","savedPayload":{"position":{"x":18531.806237131383,"y":25106.35640053908},"targetPosition":{"x":18608.806237131383,"y":25008.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"3f5758b3-7ae1-49eb-87d9-51965408b246","savedPayload":{"position":{"x":18518.806237131383,"y":25044.35640053908},"targetPosition":{"x":18537.806237131383,"y":25076.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"112221cf-8147-484f-a9aa-d86c2402d1b4"}}},{"type":"Layer","name":"Position Base Asset","config":"{\n \"status\": \"off\",\n \"showPanels\": true\n}","project":"Superalgos","id":"2093a6be-57ea-4aea-b1d8-7a5504acf8d0","savedPayload":{"position":{"x":18620.806237131383,"y":25098.35640053908},"targetPosition":{"x":18537.806237131383,"y":25076.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"b92609ac-310d-482c-a96f-8e90d4c43d72"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"94e1588e-0c27-4ac2-8b25-cbe4c568b94c","savedPayload":{"position":{"x":18523.806237131383,"y":25144.35640053908},"targetPosition":{"x":18537.806237131383,"y":25076.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"1e037875-a2ee-44c3-8d8e-861f39f9d8a7"}}},{"type":"Layer","name":"Stop Loss","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"e8b96393-0706-4444-a88e-189490c8720f","savedPayload":{"position":{"x":18542.806237131383,"y":25004.35640053908},"targetPosition":{"x":18537.806237131383,"y":25076.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"7f2737da-5aef-4dbf-b86c-80132bcb3289"}}},{"type":"Layer","name":"Take Profit","config":"{\n \"status\": \"off\",\n \"showPanels\": false\n}","project":"Superalgos","id":"1b15b0df-dfbd-4701-a4cf-4a0ad7e51847","savedPayload":{"position":{"x":18461.806237131383,"y":25040.35640053908},"targetPosition":{"x":18537.806237131383,"y":25076.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"4d5fcd48-f3df-43c9-818e-70057086a961"}}}],"layerFolders":[],"id":"e2b2ad32-3780-436f-ba33-ec49827eb7c9","savedPayload":{"position":{"x":18537.806237131383,"y":25076.35640053908},"targetPosition":{"x":18608.806237131383,"y":25008.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"6de64ba0-66f9-4268-bcc5-da53f800f9cf","savedPayload":{"position":{"x":18608.806237131383,"y":25008.35640053908},"targetPosition":{"x":18704.806237131383,"y":25083.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b605e608-0de4-4b90-a4c5-6fe037da273d","savedPayload":{"position":{"x":18704.806237131383,"y":25083.35640053908},"targetPosition":{"x":18795.806237131383,"y":25171.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c83690b2-8551-43b6-b0a6-ca9366c441e9","savedPayload":{"position":{"x":18795.806237131383,"y":25171.35640053908},"targetPosition":{"x":18821.806237131383,"y":25072.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"7d983ca2-8566-436b-ab21-445564aba4b3"}}},"id":"45ae1a95-dea4-4d47-a7ce-6c8d8f13dd14","savedPayload":{"position":{"x":18340.99861599605,"y":25652.971642809745},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Sparta","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Sparta","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"EMA","project":"Superalgos","layers":[{"type":"Layer","name":"Popular EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6443b8e7-7124-465e-9ffb-eca387bfc0c5","savedPayload":{"position":{"x":17434.876898635554,"y":25767.986414195097},"targetPosition":{"x":17714.479259420394,"y":25659.255002709986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Popular EMAs","id":"8b3b410e-0728-457a-a2ac-640f8839592c"}}},{"type":"Layer","name":"Base7 EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"1d52126c-9162-4a08-910b-a8648c9c4d30","savedPayload":{"position":{"x":17419.03693351673,"y":25711.349456010066},"targetPosition":{"x":17714.479259420394,"y":25659.255002709986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Base7 EMAs","id":"45eea564-7729-421c-b871-acda5a5ae81e"}}},{"type":"Layer","name":"Base11 EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"03f74f67-0ffa-475c-ad79-f78f25fd8841","savedPayload":{"position":{"x":17414.55065129642,"y":25652.71053719962},"targetPosition":{"x":17714.479259420394,"y":25659.255002709986},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Base11 EMAs","id":"fe10ecb5-0593-4c6b-9fd0-1729976ce713"}}}],"layerFolders":[],"id":"fdc7f2ac-b6e5-4c2a-873e-708794c567d8","savedPayload":{"position":{"x":17714.479259420394,"y":25659.255002709986},"targetPosition":{"x":18009.921585324057,"y":25607.160549409906},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bb26a76c-f706-496d-bbaa-81475ad0aa60","savedPayload":{"position":{"x":18009.921585324057,"y":25607.160549409906},"targetPosition":{"x":18305.36391122772,"y":25555.066096109826},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Sparta","id":"cc85c8b7-657d-4589-8373-ac3ff5cf3c6a"}}},"id":"d449ea7e-cc93-438c-bdc2-84f06c670890","savedPayload":{"position":{"x":18305.36391122772,"y":25555.066096109826},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Exchange Raw Data","project":"Superalgos","layers":[],"layerFolders":[],"id":"e341f133-88b2-4dcc-9a82-addc8d68ea45","savedPayload":{"position":{"x":17794.11964522246,"y":25607.180247347285},"targetPosition":{"x":18009.921585324057,"y":25398.782736209585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": false\n}","project":"Superalgos","id":"22555671-02c7-4be3-bed8-e808e015ddb7","savedPayload":{"position":{"x":17423.752028739,"y":25520.70617932108},"targetPosition":{"x":17712.841164701586,"y":25440.534666497606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"70d84756-8e7a-4dfc-8aae-abf8affc802f"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"88622f71-4be1-425c-ba9d-8ec10bd3fa74","savedPayload":{"position":{"x":17412.852587782334,"y":25443.15262714712},"targetPosition":{"x":17712.841164701586,"y":25440.534666497606},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"5a47df0f-0524-401a-b5f4-f292eda68238"}}}],"layerFolders":[],"id":"40d6fb03-d3b4-4a3e-8293-21d256246e96","savedPayload":{"position":{"x":17712.841164701586,"y":25440.534666497606},"targetPosition":{"x":18009.921585324057,"y":25398.782736209585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c7224f35-eb60-41ba-9cef-14891b7549c1","savedPayload":{"position":{"x":17464.03565069186,"y":25152.879052995977},"targetPosition":{"x":17745.03730746638,"y":25257.94126737382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"d50dcdf4-6251-4c59-9a04-d5dedadd86f7"}}},{"type":"Layer","name":"Percentage Bandwidth","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"3403e533-bccb-4d6a-9c8c-7e7dae15893f","savedPayload":{"position":{"x":17500.802651959486,"y":25083.730380660538},"targetPosition":{"x":17745.03730746638,"y":25257.94126737382},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Percentage Bandwidth","id":"1e029c1d-85c8-4d3d-90d8-388bf135d110"}}}],"layerFolders":[],"id":"b9834ac2-04d9-4978-9f7e-1513df5a91a7","savedPayload":{"position":{"x":17745.03730746638,"y":25257.94126737382},"targetPosition":{"x":18009.921585324057,"y":25398.782736209585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4ed08f32-cb20-433b-b1b4-9506f7f9fa55","savedPayload":{"position":{"x":17687.586775204003,"y":24897.65714730352},"targetPosition":{"x":17878.410241287333,"y":25129.144522319835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels Objects","id":"aba646d5-9b32-48d6-abc3-e9fa8405b279"}}},{"type":"Layer","name":"Bollinger Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b72da299-ad7b-40ef-b28d-5e06b55d38b4","savedPayload":{"position":{"x":17726.14873239912,"y":24870.655774187377},"targetPosition":{"x":17878.410241287333,"y":25129.144522319835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels","id":"241723cd-ae4d-4990-88f8-29bfad2e14ed"}}},{"type":"Layer","name":"Bollinger Sub-Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"43940d4c-5b47-4eed-afb8-c83dea0a2e86","savedPayload":{"position":{"x":17768.459873270043,"y":24850.019251925227},"targetPosition":{"x":17878.410241287333,"y":25129.144522319835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"e171424f-d37d-46d5-aada-1d66ccb0961f"}}},{"type":"Layer","name":"Bollinger Sub-Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"44bfe72d-d563-4d7d-94f6-32b251ea8519","savedPayload":{"position":{"x":17813.4783571059,"y":24836.255720183854},"targetPosition":{"x":17878.410241287333,"y":25129.144522319835},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels","id":"f8686b62-8ca9-4b30-9c27-9844c109d987"}}}],"layerFolders":[],"id":"e9f0e366-b340-487a-b7f9-40f37e7994da","savedPayload":{"position":{"x":17878.410241287333,"y":25129.144522319835},"targetPosition":{"x":18009.921585324057,"y":25398.782736209585},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a2cae263-03ad-4322-b867-14cbb3a3653a","savedPayload":{"position":{"x":18009.921585324057,"y":25398.782736209585},"targetPosition":{"x":18305.36391122772,"y":25450.877189509665},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":600,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"f527bdd3-f5bc-4248-a35f-ac7e591c3aec"}}},"id":"bcdf169d-6297-4f61-b125-2aacefdc4f18","savedPayload":{"position":{"x":18305.36391122772,"y":25450.877189509665},"targetPosition":{"x":18600.806237131383,"y":25502.971642809745},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"c36f98d3-5b61-4f02-bad5-c97fbe968d5c","savedPayload":{"position":{"x":18600.806237131383,"y":25502.971642809745},"targetPosition":{"x":18750.806237131383,"y":25243.164021674413},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":0},"width":240,"height":112.375,"radius":0},"referenceParent":{"type":"Backtesting Session","name":"WHB v2","id":"1ff8cd88-dcd9-4528-b406-05647ddd8c9c"}}}],"id":"97979c42-ea93-4e10-8af1-20a6658b6d57","savedPayload":{"position":{"x":18750.806237131383,"y":25243.164021674413},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Testing Environment","name":"New Testing Environment","id":"5882d8a8-345b-4188-b1c1-797e9ff805d9"}}},{"type":"Dashboard","name":"Production Environment My Computer","project":"Superalgos","timeMachines":[{"type":"Time Machine","name":"WHB v2 Live Trading Session My Computer","config":"{}","project":"Superalgos","timeScale":{"type":"Time Scale","name":"New Time Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"fromDate\": \"2020-01-01T00:00:00.000Z\",\n \"toDate\": \"2020-10-09T23:59:59.999Z\"\n}","project":"Superalgos","id":"9e3b6145-28ed-4709-9e82-9eba74e55c19","savedPayload":{"position":{"x":18305.36391122772,"y":24515.835611568495},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"rateScale":{"type":"Rate Scale","name":"New Rate Scale","config":"{\n \"autoMinScale\": true,\n \"autoMaxScale\": true,\n \"minValue\": 3744.3087,\n \"maxValue\": 12592.68\n}","project":"Superalgos","id":"e2887721-8e49-482a-8bfe-d1c0d84c5b1e","savedPayload":{"position":{"x":18305.36391122772,"y":24411.646704968334},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timeFrameScale":{"type":"Time Frame Scale","name":"New Time Frame Scale","config":"{ \n\"value\": \"24-hs\"\n}","project":"Superalgos","id":"c06978cc-97da-4321-bcec-1be366f04b3e","savedPayload":{"position":{"x":18340.99861599605,"y":24313.741158268414},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"timelineCharts":[{"type":"Timeline Chart","name":"Trading Engine","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading Engine","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Episode","project":"Superalgos","layers":[{"type":"Layer","name":"Episode Counters","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f1f95b78-c2c3-4271-bcb6-91b79825858e","savedPayload":{"position":{"x":18669.806237131383,"y":25026.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Counters","id":"4d1ea2bf-5a1d-4b37-9719-007e28b81184"}}},{"type":"Layer","name":"Episode Statistics","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ae5b3b26-2687-4b2a-828f-e6275553ef2f","savedPayload":{"position":{"x":18667.806237131383,"y":24997.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Statistics","id":"2c4ef698-66da-4079-90ec-9fdf5ce41be7"}}},{"type":"Layer","name":"Episode Candle","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fc1bc47c-3e1a-4b5a-ba84-8882868e400a","savedPayload":{"position":{"x":18711.806237131383,"y":25071.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Candle","id":"5ee16bd3-cb60-4b92-ab67-d56dfbdd8671"}}},{"type":"Layer","name":"Episode Balances","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"caa2849f-552d-4762-97eb-ed66670e71b5","savedPayload":{"position":{"x":18847.806237131383,"y":24978.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Balances","id":"660caa52-ba9a-4829-9143-3ca16f2590aa"}}},{"type":"Layer","name":"Distance To Event","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"57949a00-f277-4a9b-b480-8c4d7749eea6","savedPayload":{"position":{"x":18818.806237131383,"y":25085.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Distance To Event","id":"382ccb5c-e0c3-4e34-97b9-599cf5d6792d"}}},{"type":"Layer","name":"Episode Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"a5dc3f74-ae54-491f-8761-dd1ff593d7e1","savedPayload":{"position":{"x":18858.806237131383,"y":25140.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Base Asset","id":"42d86745-d971-4328-a908-91bf6d19a019"}}},{"type":"Layer","name":"Episode Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e904ccb9-94fe-4d2a-80b9-aef73a46b84a","savedPayload":{"position":{"x":18793.806237131383,"y":25079.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episode Quoted Asset","id":"7dbf878d-588f-422e-acd2-03968abaf5f0"}}},{"type":"Layer","name":"Current Episode","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6fa6eec1-da47-451c-96ff-24de0a07a68f","savedPayload":{"position":{"x":18844.806237131383,"y":25083.35640053908},"targetPosition":{"x":18762.806237131383,"y":25042.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Episode","id":"d678dfa8-544b-456f-b3f0-715579440aa2"}}}],"layerFolders":[],"id":"c37d2dd1-f13a-466a-a217-ec8ae805f8d2","savedPayload":{"position":{"x":18762.806237131383,"y":25042.35640053908},"targetPosition":{"x":18788.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Strategy","project":"Superalgos","layers":[{"type":"Layer","name":"Current Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"938325be-e1cd-42ec-9d48-4b7284833347","savedPayload":{"position":{"x":18835.806237131383,"y":24930.35640053908},"targetPosition":{"x":18880.806237131383,"y":24943.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Strategy","id":"07b721a0-55e0-4e7a-b0e2-a91e8c76de4f"}}},{"type":"Layer","name":"Last Strategy","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b82d691f-9709-42c6-a6f4-c0b7d83a1839","savedPayload":{"position":{"x":18804.806237131383,"y":24843.35640053908},"targetPosition":{"x":18880.806237131383,"y":24943.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Strategy","id":"15f34c1a-b30d-4dd1-96e0-8a2646de3635"}}}],"layerFolders":[],"id":"d27b2ba3-8ab6-45c8-a50d-7bdd2e39a1b2","savedPayload":{"position":{"x":18880.806237131383,"y":24943.35640053908},"targetPosition":{"x":18788.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Current Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"635f4c80-d3ae-4382-a6fa-656e1c25aab6","savedPayload":{"position":{"x":18797.806237131383,"y":25147.35640053908},"targetPosition":{"x":18851.806237131383,"y":25068.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Current Position","id":"ab53428d-89a3-4b1f-84b1-d5bd1d957f02"}}},{"type":"Layer","name":"Last Position","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ee8464c4-513c-4248-aa78-19d91d6e2789","savedPayload":{"position":{"x":18841.806237131383,"y":25009.35640053908},"targetPosition":{"x":18851.806237131383,"y":25068.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Position","id":"5909ca07-e00c-4669-9cd3-17eb83796f31"}}}],"layerFolders":[],"id":"44bb52f1-bcc7-4f05-8c2f-48d675deb366","savedPayload":{"position":{"x":18851.806237131383,"y":25068.35640053908},"targetPosition":{"x":18788.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Open Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c3243adf-912b-47da-9404-39811daf5efa","savedPayload":{"position":{"x":18720.806237131383,"y":24987.35640053908},"targetPosition":{"x":18703.806237131383,"y":25000.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stage","id":"68803338-3e70-443f-90fd-8b36f5378f31"}}},{"type":"Layer","name":"Close Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8e74ff15-a7d9-433c-9252-2b41664138a9","savedPayload":{"position":{"x":18658.806237131383,"y":25047.35640053908},"targetPosition":{"x":18703.806237131383,"y":25000.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stage","id":"2d2dd9df-d00a-4d69-9b29-66e19d0238fe"}}},{"type":"Layer","name":"Trigger Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f093b5a0-e006-4fc8-a1a4-526ddabe03a6","savedPayload":{"position":{"x":18688.806237131383,"y":24936.35640053908},"targetPosition":{"x":18703.806237131383,"y":25000.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stage","id":"7a71d0ce-5592-4b70-b30c-9676b67feb47"}}},{"type":"Layer","name":"Manage Stage","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"417dbc47-0de8-4b43-9807-6321269b1bad","savedPayload":{"position":{"x":18622.806237131383,"y":24922.35640053908},"targetPosition":{"x":18703.806237131383,"y":25000.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stage","id":"5b233b81-aa5f-4222-9772-5c8810cb683a"}}}],"layerFolders":[],"id":"2d472757-6f85-45c7-bf7f-459d3d87bbfa","savedPayload":{"position":{"x":18703.806237131383,"y":25000.35640053908},"targetPosition":{"x":18788.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9b2d6215-dc66-47f1-bafe-233d262f0b26","savedPayload":{"position":{"x":18623.806237131383,"y":25126.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"0487769a-1b78-45ce-8750-6cb55c0785f4"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"185c3169-d930-4413-a912-6e2d20088562","savedPayload":{"position":{"x":18677.806237131383,"y":24952.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"6e666549-9e9f-42d3-b543-fc0ce961cc64"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b6d40f2a-3f43-4aaa-bfc3-0a3e28278961","savedPayload":{"position":{"x":18780.806237131383,"y":25035.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"a596b5e6-666d-4da0-bd2f-2b65292b8d87"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"064d574e-fa92-43d3-a182-3f426dd2c3c1","savedPayload":{"position":{"x":18732.806237131383,"y":24994.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"528f2741-eda9-4dd4-b731-8110336c0a34"}}},{"type":"Layer","name":"Last Market Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"8ba82947-b00d-438a-b384-1786af913e30","savedPayload":{"position":{"x":18763.806237131383,"y":25069.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Market Order","id":"0d7a0263-dc84-4b4a-a6cc-ad6c3f9824fe"}}},{"type":"Layer","name":"Last Limit Order","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"f1ece4d3-1d8c-432c-a5d3-78b0d437ad68","savedPayload":{"position":{"x":18641.806237131383,"y":24984.35640053908},"targetPosition":{"x":18709.806237131383,"y":25029.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Last Limit Order","id":"51e9b95a-96c1-4cf4-a188-9669c73c7e8e"}}}],"layerFolders":[],"id":"2355f3c7-a7a4-44c9-aab7-23c6fa62113e","savedPayload":{"position":{"x":18709.806237131383,"y":25029.35640053908},"targetPosition":{"x":18788.806237131383,"y":24986.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"ec0a181b-98eb-4e8e-8638-e2ab1c0d1d36","savedPayload":{"position":{"x":18788.806237131383,"y":24986.35640053908},"targetPosition":{"x":18787.806237131383,"y":24955.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fe8004ba-62be-44b0-9eb7-b9f1f8563e09","savedPayload":{"position":{"x":18787.806237131383,"y":24955.35640053908},"targetPosition":{"x":18747.806237131383,"y":25054.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"89ae209b-5e81-4414-8754-eb734a59b417","savedPayload":{"position":{"x":18747.806237131383,"y":25054.35640053908},"targetPosition":{"x":18815.806237131383,"y":25073.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":300,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"ffdfebe3-50db-41b5-8077-7a7d0d008865"}}},"id":"3664debe-440e-4226-bb00-d56d2d97daff","savedPayload":{"position":{"x":18407.96995422542,"y":24233.92782533272},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Trading System","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Trading System","project":"Superalgos","layers":[{"type":"Layer","name":"Trading System Errors","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"2a3273c5-d373-480f-8e58-5f0479049a89","savedPayload":{"position":{"x":18848.806237131383,"y":24905.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Errors","id":"1c539f66-a512-4cd9-b974-622b95e2cca9"}}},{"type":"Layer","name":"Trading System Highlights","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"cc124ad2-8e2e-4caa-b324-42f74494c7cf","savedPayload":{"position":{"x":18830.806237131383,"y":24964.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Highlights","id":"409e6575-034e-4d3d-99e5-0495ba229622"}}},{"type":"Layer","name":"Trading System Values","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"7f291996-c831-4fd6-9e32-bd939e6618a2","savedPayload":{"position":{"x":18799.806237131383,"y":24837.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Values","id":"55245047-2d2d-4a04-97f9-d413d82375a9"}}},{"type":"Layer","name":"Trading System Status","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"52322cb7-4fb2-4b11-9372-f834de6e41e7","savedPayload":{"position":{"x":18772.806237131383,"y":24997.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Status","id":"9f9ea8fa-0769-44b9-a4f1-86f2c3a22195"}}},{"type":"Layer","name":"Trading System Progress","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"71473cf3-6f27-498c-bbb6-7dcce412502d","savedPayload":{"position":{"x":18956.806237131383,"y":24938.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Progress","id":"d2e7ed86-a88f-484b-ab5f-d6212cb7045f"}}},{"type":"Layer","name":"Trading System Running","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"032120ab-1bbe-46cf-8986-24b3e2869aa9","savedPayload":{"position":{"x":18820.806237131383,"y":24953.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Running","id":"0a0b3b0e-cac0-42a3-8825-637b2b78afad"}}},{"type":"Layer","name":"Trading System Announcements","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"742f34cd-23ff-4b8d-b070-b28e19f7e821","savedPayload":{"position":{"x":18856.806237131383,"y":24857.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Announcements","id":"b79dfe54-361e-44f2-87ce-5e012bba3bcd"}}},{"type":"Layer","name":"Trading System Warnings","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e575fb48-fd1d-479c-aa3b-baa983463ae5","savedPayload":{"position":{"x":18847.806237131383,"y":24897.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Warnings","id":"29681b5e-16e2-4bc0-816e-537b271c0ea5"}}},{"type":"Layer","name":"Trading System Infos","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"c1132f1c-eb35-4e60-b855-576f9393a008","savedPayload":{"position":{"x":18823.806237131383,"y":24904.35640053908},"targetPosition":{"x":18866.806237131383,"y":24914.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trading System Infos","id":"3da52870-d76c-4e37-9247-9eecfdbb64ec"}}}],"layerFolders":[],"id":"3c36ab4e-20df-4ed1-ba62-3c1af51f24a9","savedPayload":{"position":{"x":18866.806237131383,"y":24914.35640053908},"targetPosition":{"x":18922.806237131383,"y":24892.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"9be3a6b8-f673-4ff7-8978-732494fdd1de","savedPayload":{"position":{"x":18922.806237131383,"y":24892.35640053908},"targetPosition":{"x":18844.806237131383,"y":24921.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"fe7408ef-04ca-4b85-bcde-4bb82f7c974f","savedPayload":{"position":{"x":18844.806237131383,"y":24921.35640053908},"targetPosition":{"x":18865.806237131383,"y":24967.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":450,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"ffdfebe3-50db-41b5-8077-7a7d0d008865"}}},"id":"00ae8c42-9686-470d-8167-178b41cc06ec","savedPayload":{"position":{"x":18498.200194133682,"y":24181.83337203264},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Simulation Objects","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Low Frequency","project":"Superalgos","layers":[],"layerFolders":[{"type":"Layer Folder","name":"Simulation Objects","project":"Superalgos","layers":[{"type":"Layer","name":"Episodes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"66623184-4f58-4be2-ae6a-ab12eddf30a2","savedPayload":{"position":{"x":18878.806237131383,"y":25149.35640053908},"targetPosition":{"x":18816.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Episodes","id":"802ebea8-becf-45e5-b761-078cad3acd74"}}},{"type":"Layer","name":"Strategies","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6bd41ea0-15bb-40d0-a977-f85aebd8f172","savedPayload":{"position":{"x":18887.806237131383,"y":25292.35640053908},"targetPosition":{"x":18816.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Strategies","id":"601cbf34-9a33-4066-9709-b23c6c34b17d"}}}],"layerFolders":[{"type":"Layer Folder","name":"Orders","project":"Superalgos","layers":[{"type":"Layer","name":"Market Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ca0a428f-b7e6-41ab-b4b4-cff6c14e6693","savedPayload":{"position":{"x":18822.806237131383,"y":25105.35640053908},"targetPosition":{"x":18860.806237131383,"y":25166.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Buy Orders","id":"e1516339-ebcb-4840-a23d-cebd855911b6"}}},{"type":"Layer","name":"Market Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e20857f3-6fe7-472f-ac3e-888b7e28fc4d","savedPayload":{"position":{"x":18896.806237131383,"y":25086.35640053908},"targetPosition":{"x":18860.806237131383,"y":25166.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Market Sell Orders","id":"57a0d52c-d2a3-4fd3-907c-66fd51cecdc6"}}},{"type":"Layer","name":"Limit Buy Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"88646088-3689-4547-b974-0d0d0d56b2b6","savedPayload":{"position":{"x":18869.806237131383,"y":25207.35640053908},"targetPosition":{"x":18860.806237131383,"y":25166.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Buy Orders","id":"b67b6a65-5bd1-4b58-aa65-a8b840c54d9b"}}},{"type":"Layer","name":"Limit Sell Orders","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"40bed7b6-261e-4527-8e6a-51f99c69b576","savedPayload":{"position":{"x":18772.806237131383,"y":25066.35640053908},"targetPosition":{"x":18860.806237131383,"y":25166.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Limit Sell Orders","id":"c27b0f50-fdad-4b69-a99e-2708806066aa"}}}],"layerFolders":[],"id":"94d0f42e-b7c8-4831-914b-1fae457e4046","savedPayload":{"position":{"x":18860.806237131383,"y":25166.35640053908},"targetPosition":{"x":18816.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Stages","project":"Superalgos","layers":[{"type":"Layer","name":"Trigger Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"dc2dab26-6c18-4995-b0b4-93b85624ab06","savedPayload":{"position":{"x":18668.806237131383,"y":25101.35640053908},"targetPosition":{"x":18753.806237131383,"y":25139.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Trigger Stages","id":"bc3d588e-823d-4461-b550-b8ec912c4c8f"}}},{"type":"Layer","name":"Open Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"4dfc372b-4de6-4aec-b29f-99e5410d001e","savedPayload":{"position":{"x":18700.806237131383,"y":25053.35640053908},"targetPosition":{"x":18753.806237131383,"y":25139.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Open Stages","id":"edb07104-591d-453b-b7fe-bd3854ff8a36"}}},{"type":"Layer","name":"Manage Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"af792d27-879d-4a3c-a83b-bf2e79376ee3","savedPayload":{"position":{"x":18849.806237131383,"y":25113.35640053908},"targetPosition":{"x":18753.806237131383,"y":25139.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Manage Stages","id":"9b884f77-297b-4618-ac4b-b995570284b6"}}},{"type":"Layer","name":"Close Stages","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"bf4d6a12-d08d-4e8c-9591-31317c974358","savedPayload":{"position":{"x":18710.806237131383,"y":25150.35640053908},"targetPosition":{"x":18753.806237131383,"y":25139.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Close Stages","id":"c07cc0bb-c49e-42d1-a5ba-f5fa9882fbab"}}}],"layerFolders":[],"id":"bf12f50e-de09-4563-8253-01c39ac87962","savedPayload":{"position":{"x":18753.806237131383,"y":25139.35640053908},"targetPosition":{"x":18816.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Layer Folder","name":"Position","project":"Superalgos","layers":[{"type":"Layer","name":"Positions","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"841f1809-e887-47c9-bec3-9e339a8a175d","savedPayload":{"position":{"x":18832.806237131383,"y":25073.35640053908},"targetPosition":{"x":18742.806237131383,"y":25145.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Positions","id":"0e3c5d47-28d9-4cd3-ad72-1bdb054550a8"}}},{"type":"Layer","name":"Position Base Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"50c17ba9-287e-4c3f-9a46-1f7d6ad15633","savedPayload":{"position":{"x":18684.806237131383,"y":25198.35640053908},"targetPosition":{"x":18742.806237131383,"y":25145.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Base Asset","id":"47ffaf48-d92f-4da8-afb3-7787c5ba597e"}}},{"type":"Layer","name":"Position Quoted Asset","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9659c4bd-ce07-469d-9d2d-2675ca6e81b5","savedPayload":{"position":{"x":18693.806237131383,"y":25142.35640053908},"targetPosition":{"x":18742.806237131383,"y":25145.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Position Quoted Asset","id":"59eb8fe6-5429-4d2d-8971-47580c5816b8"}}},{"type":"Layer","name":"Stop Loss","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"9e506a39-2fc1-4ac0-b5d4-7bf76a73d0f9","savedPayload":{"position":{"x":18729.806237131383,"y":25097.35640053908},"targetPosition":{"x":18742.806237131383,"y":25145.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Stop Loss","id":"13a4d476-b8bb-4bb3-9a97-1c2a7b5c6188"}}},{"type":"Layer","name":"Take Profit","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e13f9336-7bdc-4459-aca9-dc5d9747a69c","savedPayload":{"position":{"x":18742.806237131383,"y":25085.35640053908},"targetPosition":{"x":18742.806237131383,"y":25145.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Take Profit","id":"1af2f188-5506-47ff-859b-08e8f1c56754"}}}],"layerFolders":[],"id":"c42efa3e-8cef-458f-82dd-30ddc130a306","savedPayload":{"position":{"x":18742.806237131383,"y":25145.35640053908},"targetPosition":{"x":18816.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b27076de-7c3a-43f6-be80-88d0792c245e","savedPayload":{"position":{"x":18816.806237131383,"y":25193.35640053908},"targetPosition":{"x":18883.806237131383,"y":25193.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"79584687-bd14-42e6-856e-8708b13d1951","savedPayload":{"position":{"x":18883.806237131383,"y":25193.35640053908},"targetPosition":{"x":18845.806237131383,"y":25134.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"a74f69c4-085d-465f-973f-34fbe4da72d4","savedPayload":{"position":{"x":18845.806237131383,"y":25134.35640053908},"targetPosition":{"x":18746.806237131383,"y":25045.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":600,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Trading Mine Products","name":"Masters","id":"ffdfebe3-50db-41b5-8077-7a7d0d008865"}}},"id":"73f3b68a-98c7-4c1b-9ddc-82dccb1e8ab7","savedPayload":{"position":{"x":18600.806237131383,"y":24163.741158268414},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Sparta","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Sparta","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"EMA","project":"Superalgos","layers":[{"type":"Layer","name":"Popular EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"55b6fec0-3624-475f-9e9a-2bcb1e4e8df2","savedPayload":{"position":{"x":18954.261381981458,"y":23321.509346420764},"targetPosition":{"x":18908.624366124484,"y":23618.017799561094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Popular EMAs","id":"8b3b410e-0728-457a-a2ac-640f8839592c"}}},{"type":"Layer","name":"Base7 EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"5336c2ad-aa2d-4a96-a589-b1b4bd1b4ab8","savedPayload":{"position":{"x":19011.230409122185,"y":23336.11001332532},"targetPosition":{"x":18908.624366124484,"y":23618.017799561094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Base7 EMAs","id":"45eea564-7729-421c-b871-acda5a5ae81e"}}},{"type":"Layer","name":"Base11 EMAs","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"b112b862-311b-4638-9c1f-04c014581a54","savedPayload":{"position":{"x":19064.25634357264,"y":23361.54423835921},"targetPosition":{"x":18908.624366124484,"y":23618.017799561094},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Base11 EMAs","id":"fe10ecb5-0593-4c6b-9fd0-1729976ce713"}}}],"layerFolders":[],"id":"612cf965-a657-4def-ada8-89f938d1c00d","savedPayload":{"position":{"x":18908.624366124484,"y":23618.017799561094},"targetPosition":{"x":18806.018323126784,"y":23899.925585796867},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"b57ed65d-02a6-460f-a6df-dd76e41646a8","savedPayload":{"position":{"x":18806.018323126784,"y":23899.925585796867},"targetPosition":{"x":18703.412280129083,"y":24181.83337203264},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Sparta","id":"cc85c8b7-657d-4589-8373-ac3ff5cf3c6a"}}},"id":"61e1c989-2f17-4d3d-9327-232b3a5f3bd8","savedPayload":{"position":{"x":18703.412280129083,"y":24181.83337203264},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Timeline Chart","name":"Masters","project":"Superalgos","layerManager":{"type":"Layer Manager","name":"Masters","config":"{\n \"visibleLayers\": 2,\n \"panelLocation\": {\n \"upOrDown\": \"up\",\n \"leftOrRight\": \"left\"\n }\n}","project":"Superalgos","layers":[],"botLayers":[{"type":"Bot Layers","name":"Exchange Raw Data","project":"Superalgos","layers":[],"layerFolders":[],"id":"bbd0630d-361d-4f6e-ac32-f3797740891a","savedPayload":{"position":{"x":18913.90223426341,"y":23713.02577451423},"targetPosition":{"x":18986.478802943308,"y":24004.114492397028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Candles Volumes","project":"Superalgos","layers":[{"type":"Layer","name":"Candles","config":"{\n \"status\": \"on\",\n \"showPanels\": true\n}","project":"Superalgos","id":"e154fbee-086a-496b-ad92-9b7586c80604","savedPayload":{"position":{"x":19173.974782184414,"y":23435.515043913558},"targetPosition":{"x":19098.86078096808,"y":23725.95933602699},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Candles","id":"70d84756-8e7a-4dfc-8aae-abf8affc802f"}}},{"type":"Layer","name":"Volumes","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"fcab2754-0ea7-4077-a384-f2078642641c","savedPayload":{"position":{"x":19246.58784899912,"y":23464.85262724502},"targetPosition":{"x":19098.86078096808,"y":23725.95933602699},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Volumes","id":"5a47df0f-0524-401a-b5f4-f292eda68238"}}}],"layerFolders":[],"id":"e39078b8-8050-47b3-bed2-3c4002a1032b","savedPayload":{"position":{"x":19098.86078096808,"y":23725.95933602699},"targetPosition":{"x":18986.478802943308,"y":24004.114492397028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Bands","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Bands","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"e0f8dd99-047e-488a-bb10-2781d91aad82","savedPayload":{"position":{"x":19472.380606806553,"y":23654.315247043738},"targetPosition":{"x":19240.893231790236,"y":23845.138713127068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Bands","id":"d50dcdf4-6251-4c59-9a04-d5dedadd86f7"}}},{"type":"Layer","name":"Percentage Bandwidth","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"6b54bcb1-0672-448c-9efa-af5bd47ed9da","savedPayload":{"position":{"x":19513.8816130532,"y":23720.730740330197},"targetPosition":{"x":19240.893231790236,"y":23845.138713127068},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Percentage Bandwidth","id":"1e029c1d-85c8-4d3d-90d8-388bf135d110"}}}],"layerFolders":[],"id":"8f5122b2-7b52-4b7f-9464-9fbd1b8085cc","savedPayload":{"position":{"x":19240.893231790236,"y":23845.138713127068},"targetPosition":{"x":18986.478802943308,"y":24004.114492397028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Bot Layers","name":"Bollinger Channels","project":"Superalgos","layers":[{"type":"Layer","name":"Bollinger Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"000ec7dc-1137-48fe-baa6-bfdc3cc6d1d2","savedPayload":{"position":{"x":19581.633698482423,"y":23975.527152762064},"targetPosition":{"x":19285.748018021255,"y":24025.041434520266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels Objects","id":"aba646d5-9b32-48d6-abc3-e9fa8405b279"}}},{"type":"Layer","name":"Bollinger Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"ae13c978-a98c-45d4-939b-c0302c93b95f","savedPayload":{"position":{"x":19585.736594940507,"y":24022.423473870753},"targetPosition":{"x":19285.748018021255,"y":24025.041434520266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Channels","id":"241723cd-ae4d-4990-88f8-29bfad2e14ed"}}},{"type":"Layer","name":"Bollinger Sub-Channels Objects","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"40bc0669-59ed-47b3-85fa-56ec06d17793","savedPayload":{"position":{"x":19582.45277702983,"y":24069.38425785915},"targetPosition":{"x":19285.748018021255,"y":24025.041434520266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"e171424f-d37d-46d5-aada-1d66ccb0961f"}}},{"type":"Layer","name":"Bollinger Sub-Channels","config":"{ \n\"status\": \"off\"\n}","project":"Superalgos","id":"170ad2e1-ae15-46d1-b630-9c508171f250","savedPayload":{"position":{"x":19571.863103245723,"y":24115.253174371548},"targetPosition":{"x":19285.748018021255,"y":24025.041434520266},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":4,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Data Product","name":"Bollinger Sub-Channels","id":"f8686b62-8ca9-4b30-9c27-9844c109d987"}}}],"layerFolders":[],"id":"ded0c3aa-12ff-4b98-b612-33e8b13ad0b9","savedPayload":{"position":{"x":19285.748018021255,"y":24025.041434520266},"targetPosition":{"x":18986.478802943308,"y":24004.114492397028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"723329d0-b912-46fa-b7d9-60bc634a1b91","savedPayload":{"position":{"x":18986.478802943308,"y":24004.114492397028},"targetPosition":{"x":18793.642520037345,"y":24233.92782533272},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":150,"y":80},"width":150,"height":190,"radius":0},"referenceParent":{"type":"Data Mine Products","name":"Masters","id":"f527bdd3-f5bc-4248-a35f-ac7e591c3aec"}}},"id":"808378d4-842e-48e9-8684-78400dfd8e66","savedPayload":{"position":{"x":18793.642520037345,"y":24233.92782533272},"targetPosition":{"x":18600.806237131383,"y":24463.741158268414},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"09b9e440-eb36-4c7b-90bb-01ff86676d62","savedPayload":{"position":{"x":18600.806237131383,"y":24463.741158268414},"targetPosition":{"x":18750.806237131383,"y":24723.548779403747},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":0,"y":224.75},"width":240,"height":112.375,"radius":0},"referenceParent":{"type":"Live Trading Session","name":"WHB v2","id":"934095e8-4a1c-4baf-828f-7818f73c4219"}}}],"id":"b7e04999-97b0-400a-bd6b-63d9ef43a028","savedPayload":{"position":{"x":18750.806237131383,"y":24723.548779403747},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"referenceParent":{"type":"Production Environment","name":"New Production Environment","id":"65a40d20-837c-4652-8356-f8054b4e1346"}}}],"id":"21d2ec55-9e56-4652-8e96-c7e451262c36","savedPayload":{"position":{"x":18900.806237131383,"y":24983.35640053908},"targetPosition":{"x":18900.806237131383,"y":24983.35640053908},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false,"shortcutKey":"c"}}},{"type":"Plugins","name":"New Plugins","project":"Superalgos","pluginProjects":[{"type":"Plugin Project","name":"Superalgos","config":"{ \n \"codeName\": \"\"\n}","project":"Superalgos","pluginDataMines":{"type":"Plugin Data Mines","name":"New Plugin Data Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"d5234bd2-ef4e-4856-a6a0-ce7659653a48","savedPayload":{"position":{"x":18879.35218735615,"y":18688.55301821844},"targetPosition":{"x":31380.185902390363,"y":18528.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"ecc1a524-de9b-4e73-8874-b99a7ea0402b","savedPayload":{"position":{"x":30804.72973529933,"y":18192.746239098742},"targetPosition":{"x":31027.673182942548,"y":18393.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Plugin File","name":"Sparta","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Sparta","project":"Superalgos","id":"2ccc5e2f-816d-411a-98dd-19f384c4fb56","savedPayload":{"position":{"x":12827.993523525696,"y":18705.802375894946},"targetPosition":{"x":31380.185902390363,"y":18828.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"6cd79166-dec1-46e5-a54d-ce3ee5d877c2","savedPayload":{"position":{"x":31090.046690187875,"y":18100.04114078626},"targetPosition":{"x":31027.673182942548,"y":18393.4854210064},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"cbc3d9be-5e59-45d8-bb0f-4ec82763691d","savedPayload":{"position":{"x":31027.673182942548,"y":18393.4854210064},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingMines":{"type":"Plugin Trading Mines","name":"New Plugin Trading Mines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Masters","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Masters","project":"Superalgos","id":"ad1ce785-858f-4cfc-ba68-108b5e0c54d9","savedPayload":{"position":{"x":24941.217404066585,"y":18714.893045797242},"targetPosition":{"x":31120.37828125503,"y":19198.41761816561},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8a64c00e-4f8c-49bf-b57d-4e2e388bae41","savedPayload":{"position":{"x":31120.37828125503,"y":19198.41761816561},"targetPosition":{"x":30970.37828125503,"y":18938.60999703028},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"8d881813-3ab9-4e8b-ab5a-48dedab2dd19","savedPayload":{"position":{"x":31363.083379567513,"y":18502.466800207203},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingSystems":{"type":"Plugin Trading Systems","name":"New Plugin Trading Systems","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Sparta-WHB-BTC-USDT","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Sparta-WHB-BTC-USDT","project":"Superalgos","id":"0d138b32-51ae-48ab-b92a-6dffaa441290","savedPayload":{"position":{"x":30945.763038984365,"y":30950.85999703028},"targetPosition":{"x":30520.37828125503,"y":19198.41761816561},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"8cc06746-0b0f-4bc0-bd34-22ed46a24a8a","savedPayload":{"position":{"x":31605.788477879996,"y":19031.47352727043},"targetPosition":{"x":31363.083379567513,"y":18855.13795158269},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"3569d452-c593-4e54-a356-7ff8c6b519f3","savedPayload":{"position":{"x":31363.083379567513,"y":18855.13795158269},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"pluginTradingEngines":{"type":"Plugin Trading Engines","name":"New Plugin Trading Engines","project":"Superalgos","pluginFiles":[{"type":"Plugin File","name":"Low-Frequency","project":"Superalgos","pluginFilePosition":{"type":"Plugin File Position","name":"Low-Frequency","project":"Superalgos","id":"e117a2a4-09b3-4181-8455-e680de3bdeb3","savedPayload":{"position":{"x":30923.55093774257,"y":24967.049392142086},"targetPosition":{"x":29820.22642897682,"y":18678.80776835817},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"e9270d67-4630-4ac9-91ca-1dec4fb5aa38","savedPayload":{"position":{"x":29820.22642897682,"y":18678.80776835817},"targetPosition":{"x":30320.32799443869,"y":18678.805890109317},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"87a28762-63d0-45f7-bd39-9dea436d8244","savedPayload":{"position":{"x":31027.673182942548,"y":18964.11933078349},"targetPosition":{"x":31120.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"id":"5436943e-3045-4e0d-807e-1be272afaf7f","savedPayload":{"position":{"x":31120.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}}],"id":"bfb0b514-3b9f-4e9a-85ca-d0ca714b09f6","savedPayload":{"position":{"x":30820.37828125503,"y":18678.802375894946},"targetPosition":{"x":30820.37828125503,"y":18678.802375894946},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Design Space","name":"My Design Space","project":"Superalgos","spaceStyle":{"type":"Space Style","name":"My Space Style","config":" {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"node\": {\n \"fontSize\": 16,\n \"imageSize\": 60,\n \"type\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"name\": {\n \"fontColor\": \"UI_COLOR.WHITE\"\n },\n \"menuItem\": {\n \"backgroundColor\": \"UI_COLOR.BLACK\",\n \"fontColor\": \"UI_COLOR.WHITE\",\n \"fontSize\": 14,\n \"imageSize\": 14\n }\n }\n }","project":"Superalgos","id":"fad0e429-f7a7-4b62-a2a5-2ead29b8f695","savedPayload":{"position":{"x":25236.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"spaceSettings":{"type":"Space Settings","name":"New Space Settings","config":"{\n \"node\": {\n \"distancePercentage\": 60,\n \"radiusPercentage\": 85,\n \"massPercentage\": 100,\n \"menuItem\": {\n \"widthPercentage\": 100,\n \"heightPercentage\": 60,\n \"radiusPercentage\": 90\n }\n },\n \"physics\": false\n}","project":"Superalgos","id":"05c9d6d5-24c4-4eec-9aca-9668d6486fdd","savedPayload":{"position":{"x":24636.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"f8485ce5-67f3-4476-b9e2-80994e49c318","savedPayload":{"position":{"x":24936.875,"y":8701.347826086958},"targetPosition":{"x":24936.875,"y":8701.347826086958},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"frame":{"position":{"x":255,"y":588.3125}}}},{"type":"Superalgos Project","name":"New Superalgos Project","project":"Superalgos","spaces":{"type":"Spaces","name":"New Spaces","project":"Superalgos","id":"da1661f6-808c-402d-aaa1-0aa3b7052979","savedPayload":{"position":{"x":24780.791666666664,"y":25019.594484167515},"targetPosition":{"x":24480.791666666664,"y":25019.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"mines":{"type":"Mines","name":"New Mines","project":"Superalgos","id":"c37ef894-7662-4327-879c-23a7d05c707a","savedPayload":{"position":{"x":24330.791666666664,"y":25279.40210530285},"targetPosition":{"x":24480.791666666664,"y":25019.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"otherHierarchies":{"type":"Other Hierarchies","name":"New Other Hierarchies","project":"Superalgos","id":"90ef906a-a979-4ca3-abad-d6bccaf03dbb","savedPayload":{"position":{"x":24330.791666666664,"y":24759.786863032183},"targetPosition":{"x":24480.791666666664,"y":25019.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"id":"0539e0b4-2d9b-467d-88be-36d45d778823","savedPayload":{"position":{"x":24426.791666666664,"y":24993.594484167515},"targetPosition":{"x":24426.791666666664,"y":24993.594484167515},"floatingObject":{"isPinned":true,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},{"type":"Tutorial","name":"Trading Bot Layers","config":"{\n \"title\": \"Trading Bot Layers\",\n \"summary\": \"Hi! I'm going to show you everything about the layers of the trading bot... the ones featured on charts associated with trading sessions!\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"trading-bot\",\n \"definition\": \"Let's get on with it! The ->Trading Bot-> outputs dozens of products, and they're all featured in three separate layer managers:\",\n \"bulletArray\": [\n [\n \"Trading Engine\",\n \" features layers that turn on and off the reporting of values of nodes in the ->Trading Engine-> hierarchy.\"\n ],\n [\n \"Trading System\",\n \" features layers that turn on and off multiple types of reports at the level of the ->Trading System->.\"\n ],\n [\n \"Simulation Objects\",\n \" features layers that affect the rendering of visual information over the charts.\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[],"tutorialTopics":[{"type":"Tutorial Topic","name":"Getting Ready","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Load a Fresh Workspace","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Load a Fresh Workspace!\",\n \"gif\": \"\",\n \"image\": \"workspace\",\n \"definition\": \"But before we go any further, let's make sure we are starting with a fresh workspace!\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"Workspaces with the prefix Plugin \\u2192 comes with the software. The rest are yours. When you open a plugin workspace a copy of it is made for you. Plugins allways remain unchanged.\",\n \"tip\": \"\",\n \"important\": \"This tutorial requires starting with a fresh Plugin \\u2192 Weak-hands Buster v2 workspace. So, unless you loaded the plugin workspace right before starting, please select it from the workspace panel on the right and come back to me after the workspace loads—just click Resume on my menu!\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true,\n \"workspaces\": \"Open\"\n}","project":"Superalgos","id":"08f9486c-22f5-4b5c-b41f-d8481b9f9d5a","savedPayload":{"position":{"x":19340.95678840193,"y":44290.30382379679},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Workspace","name":"My Default Workspace","id":"1c4772fb-d989-4f06-9335-81e4fc4b8009"}}},{"type":"Tutorial Step","name":"Freeze! Don't Move!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Feeze! Don't Move!\",\n \"gif\": \"\",\n \"image\": \"stop-loss\",\n \"definition\": \"I've got something to tell you before we move on, but I'm struggling to find the right words... I just wouldn't want to come across as a control freak!\",\n \"paragraph1\": \"It's not like you may break something or anything... nothing to fear at all... it's just that... I rely on the fresh state of the workspace to predict what you will see when I take you places. I may comment on what you will experience along the journey, and use my predictions to make the tour juicier and interesting! So...\",\n \"callOut\": \"Don't fool around too much unless I tell you to! I mean, you may look around, but don't make a mess! Fine! Do what you want! If you ever feel I lost you, just start over with a fresh workspace!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\",\n \"workspaces\": \"Close\"\n}","project":"Superalgos","id":"1789569c-20a3-4536-934e-15b6f731b851","savedPayload":{"position":{"x":19445.341111407073,"y":44373.54754360989},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Ready to Mine?","config":"{\n \"subTitle\": \"Ready to Mine?\",\n \"gif\": \"\",\n \"image\": \"data-mining\",\n \"definition\": \"We'll do some ->Data Mining-> so that we may then run a quick ->Backtesting Session-> and explore the resulting simulation...\",\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"The sensor bot will run on the BTC/USDT market (Binance) from January 1st, 2020, along with the indicators required by the Weak-hands Buster ->Trading System->.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"If you have data on this market/exchange but on a different time range, this may affect your data! Read the sensor bot documentation to learn how! If the data you may have is not important, feel free to keep going!\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"https://docs.superalgos.org/suite-hierarchy-network.html#sensor-bot-instance\"\n}","project":"Superalgos","id":"01079470-3a5c-40fe-9695-d6087b0623fe","savedPayload":{"position":{"x":19503.27004032121,"y":44493.838203980624},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}},{"type":"Tutorial Step","name":"Let's Mine Some Data!","config":"{\n \"subTitle\": \"Let's Mine Some Data!\",\n \"gif\": \"\",\n \"image\": \"run\",\n \"definition\": \"Now that you understand the implications of running this data mining operation, let's get on with it!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Select Run All Exchange Data Tasks on the data mining node menu!\",\n \"paragraph2\": \"\",\n \"note\": \"If you are doing this tutorial after doing the Getting Started tutorial, chances are you may already have part of the data required, which may make things faster!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"6b0d345c-5981-4459-9967-7ca89739a5ab","savedPayload":{"position":{"x":19503.27004032121,"y":44627.35076435441},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Data Mining","name":"New Data Mining","id":"4df1cb4e-b9ca-4f62-bb5f-c7e262aaa22a"}}},{"type":"Tutorial Step","name":"Are We Up to Date?","config":"{\n \"subTitle\": \"Are We Up to Date?\",\n \"gif\": \"\",\n \"image\": \"indicator-process-instance\",\n \"definition\": \"Now we have to wait a bit! When all processes reach the 100% mark, we may proceed!\",\n \"paragraph1\": \"As you probably know, the time required to mine data depends on many things. If you already have some of this data from previous activities, it may be faster!\",\n \"callOut\": \"Monitor the processes for all indicators in the Sparta and Masters data mines. When all of them reach 100%, then stop the data mining operation and click Next to continue.\",\n \"paragraph2\": \"\",\n \"tip\": \"Bollinger Channels will likely be last!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"01767aee-8930-4d29-9b55-74d13dd01f2f","savedPayload":{"position":{"x":19445.341111407073,"y":44747.64142472514},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Indicator Process Instance","name":"Exponential Moving Average (EMA) Multi-Period-Market","id":"9adffd60-8756-44f0-9290-692711f43349"}}},{"type":"Tutorial Step","name":"Ready. Set. Go!","config":"{\n \"subTitle\": \"Ready. Set. Go!\",\n \"gif\": \"\",\n \"image\": \"task\",\n \"definition\": \"Let's do some backtesting! This should be rather quick, as we are testing six months' worth of historic data on daily files.\",\n \"paragraph1\": \"Running a trading task is quite similar to running a data mining task. The difference lies in that—after running the task—you also need to run the trading session.\",\n \"callOut\": \"Select Run on the ->Task-> menu and then select Run on the ->Backtesting Session-> menu.\",\n \"paragraph2\": \"\",\n \"note\": \"When the ->Backtesting Session-> informs it has finished, then stop the task and click Next to continue.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\" \n}","project":"Superalgos","id":"2046f4aa-a9b4-419e-9681-107f6b0002c0","savedPayload":{"position":{"x":19340.95678840193,"y":44830.88514453824},"targetPosition":{"x":19210.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Task","name":"WHB v2","id":"f3dccd9e-6130-40aa-b794-fca344df4a99"}}}],"tutorialTopics":[],"id":"45e0a80c-a3ce-4e81-8e5c-3d97b226e9fc","savedPayload":{"position":{"x":19210.791666666664,"y":44560.594484167515},"targetPosition":{"x":18910.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Trading Engine Layers","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Trading Engine Layers\",\n \"gif\": \"\",\n \"image\": \"trading-engine\",\n \"definition\": \"You are familiar with the concept of the ->Trading Engine->, right? I will teach you which layers affect which sections of the hierarchy so that you may access the info!\",\n \"paragraph1\": \"I'm assuming you've done the Welcome tutorial... Remember when you split the screen in half? You slid the mouse pointer over the candles on the chart, and for each candle, you could see the value of certain nodes in the trading engine hierarchy, right?\",\n \"callOut\": \"Well, that's what it's all about! When you turn a certain layer on, you turn on the visualization of values for a certain section of the hierarchy.\",\n \"paragraph2\": \"Let's take a closer look!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"1, 2, 3, Counting!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"1, 2, 3, Counting!\",\n \"gif\": \"\",\n \"image\": \"episode-counters\",\n \"definition\": \"Let's test the first ->Layer-> in the Trading Engine ->Layer Manager->: ->Episode Counters->.\",\n \"paragraph1\": \"\",\n \"callOut\": \"Turn the layer on and slide your mouse pointer over the chart, from the far left to the far right-hand side of your screen!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"See what happens with the various counters on the hierarchy below... that is, ->Periods->, ->Strategies->, ->Positions->, and so on! You should see something similar to what I show in the video on the next step...\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"cb3abe07-2fcf-4708-b585-6c0bc4cefa01","savedPayload":{"position":{"x":19170.599287801997,"y":45010.594484167515},"targetPosition":{"x":18910.791666666664,"y":44860.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Periods","name":"New Periods","id":"6c6579c8-fb13-41f6-a25b-1833d2963640"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"trading-bot-layers-episode-counters-01\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\"\n}","project":"Superalgos","id":"ce4aa155-0772-428c-8ed0-b051275c1ec1","savedPayload":{"position":{"x":19060.791666666664,"y":45120.40210530285},"targetPosition":{"x":18910.791666666664,"y":44860.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"How About the Rest?","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"How About the Rest?\",\n \"gif\": \"\",\n \"image\": \"episode\",\n \"definition\": \"Now, why don't the nodes further to the left show their values too? Say, ->Exit Type->, ->Status->, ->End Rate->, ->Begin Rate->, and so on?\",\n \"paragraph1\": \"Let's change that!\",\n \"callOut\": \"Scroll the Trading Engine layer manager until you find the Current Episode layer. Turn it on!\",\n \"paragraph2\": \"Now slide your mouse pointer again... et voilà!\",\n \"note\": \"\",\n \"tip\": \"By turning layers on and off, you turn on and off system's ability to report the values on different sections of the ->Trading Engine-> hierarchy!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"c47f1a67-50bb-4e4b-8449-112eacdb9b8c","savedPayload":{"position":{"x":18910.791666666664,"y":45160.594484167515},"targetPosition":{"x":18910.791666666664,"y":44860.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Periods","name":"New Periods","id":"6c6579c8-fb13-41f6-a25b-1833d2963640"}}},{"type":"Tutorial Step","name":"Et Voilà","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Et Voilà!\",\n \"gif\": \"\",\n \"image\": \"current\",\n \"definition\": \"So, we turned on the Episode Counters and the Current Episode layers... let's take a look at the hierarchy...\",\n \"paragraph1\": \"\",\n \"callOut\": \"Track your way up the hierarchy to discover what exactly we were looking at all this time...\",\n \"paragraph2\": \"Right! In the beginning ->Periods->, ->Strategies->, and ->Positions-> where showing their values because they are under the ->Episode Counters-> node of the hierachy... the one we turned on first!

If you follow the hierarchy upstream, you will find the ->Episode-> node, and if you keep going further upstream, you'll find the ->Current-> node. Exactly! Current Episode!.\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\",\n \"positionAtReferenceParent\": true\n}","project":"Superalgos","id":"6531b015-26b7-4438-8226-021b5837421a","savedPayload":{"position":{"x":18760.791666666664,"y":45120.40210530285},"targetPosition":{"x":18910.791666666664,"y":44860.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Periods","name":"New Periods","id":"6c6579c8-fb13-41f6-a25b-1833d2963640"}}},{"type":"Tutorial Step","name":"Compartmentalize It!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Compartmentalize It!\",\n \"gif\": \"\",\n \"image\": \"bot-layers\",\n \"definition\": \"The reason why the access to values in the hierarchy is compartmentalized in layers is that layers correspond to data products output by the bot.\",\n \"paragraph1\": \"Compartmentalization of definitions—and information in general—is a theme in and of itself throughout the system, as it is one of the mechanisms by which complexity is successfully administered.\",\n \"callOut\": \"When you need to use this feature to track values on the trading engine hierarchy, you may choose to turn on multiple layers at once... even all of them if you wish! Just keep in mind that the more layers you turn on, the more files de UI reads, thus the more load you put on your hardware!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toTop\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"96a53e4e-812f-4da5-b6de-66b70a1c078c","savedPayload":{"position":{"x":18650.98404553133,"y":45010.594484167515},"targetPosition":{"x":18910.791666666664,"y":44860.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"a9b75728-f884-4ab7-aa1e-d4967d90bd5f","savedPayload":{"position":{"x":18910.791666666664,"y":44860.594484167515},"targetPosition":{"x":18910.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Objects Layers","config":"{\n \"position\": \"Left\",\n \"pressButton\": \"Next\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"The Elefant in the Room","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Elefant? What Elefant?\",\n \"gif\": \"\",\n \"image\": \"strategy\",\n \"definition\": \"Will someone please acknowledge the elefant in the room? Why did those counters point to one or two strategies and one position?\",\n \"paragraph1\": \"\",\n \"callOut\": \"Go to the Simulation Objects layer manager and turn on the ->Strategies-> layer.\",\n \"paragraph2\": \"What's that? It's a strategy! We are in a simulation! The Strategies layer marks the span of time on which a strategy is active. Notice the ->Plotter Panel-> that drifted to the corner when you turned the layer on. Now, point your mouse to the span of time between the strategy brakets and see what happens... \",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"09cf3c10-29bb-4399-99b1-61c996747fa0","savedPayload":{"position":{"x":18510.657246386323,"y":44999.312044649334},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Making Sense of Objects","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Making Sense of Objects\",\n \"gif\": \"\",\n \"image\": \"layer\",\n \"definition\": \"The layers in the Simulation Objects layer manager feature visual representations of the data that makes up simulations.\",\n \"paragraph1\": \"In other words, each of these layers render graphics over the charts that help us visualize—therefore, better understand—what happens during a trading session.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"Each layer may feature plotter panels which usually display the hard data associated with the concept represented by the particular layer.\",\n \"tip\": \"Notice how the data in the panel becomes visible only when the pointer of the mouse lies within the candles engulfed by the object.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Center\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"3eea3278-bcdc-4f1d-a7da-876c5df9a6ac","savedPayload":{"position":{"x":18415.543984063763,"y":44966.0304747236},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"What About the Position?","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"What About the Position?\",\n \"gif\": \"\",\n \"image\": \"position\",\n \"definition\": \"As you very clearly pointed, the episode counters showed a strategy, but also a position... what about that?\",\n \"paragraph1\": \"\",\n \"callOut\": \"Scroll down the Simulation Objects layer manager and turn on the ->Position Base Asset-> layer!\",\n \"paragraph2\": \"Nice! A green triangle means that the position was a hit! It would be red otherwise!\",\n \"note\": \"The horizontal side of the triangle marks the ->Entry Target Rate->. The vertical side marks the datetime the position was closed. The vertex away from the horizontal side is the ->Exit Target Rate->.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"409e67f2-6944-49bd-b858-53aed2adaaff","savedPayload":{"position":{"x":18330.221255830234,"y":44912.41865127813},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"The Beauty of the Triangle","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"The Beauty of the Triangle\",\n \"gif\": \"\",\n \"image\": \"bullet-warning\",\n \"definition\": \"I'm sure you would agree that the triangle is a quick visual clue to grasp how the trade went in a glimpse!\",\n \"paragraph1\": \"That's one of the core ideas behind these visualization features: quick and effective communication. \",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"The second core idea is that—by being able to see what went on with the session—it is easier to spot the weaknesses in your strategies, and how you may be able to improve them!\",\n \"tip\": \"On a side note, notice that the data displayed on panels is the same data available on the ->Trading Engine-> hierarchy.\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"24c76654-4411-4d28-8bde-2c0391f92798","savedPayload":{"position":{"x":18258.96749955605,"y":44841.164895003945},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Why 3 Position Layers?","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Why 3 Position Layers?\",\n \"gif\": \"\",\n \"image\": \"position\",\n \"definition\": \"Did you notice there are three different layers about positions? ->Position->, ->Position Base Asset->, and ->Position Quoted Asset->!\",\n \"paragraph1\": \"I'll give you the short version: \",\n \"callOut\": \"The system keeps the accounts relative to both the base asset and the quoted asset. It also keeps a consolidated account of both assets (hence, position). What set of accounts is relevant to you depends on how the strategy is designed!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"Reading this documentation page is a must to fully understand this concept.\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"https://docs.superalgos.org/suite-trading-engine-base-asset-and-quoted-asset.html\"\n}","project":"Superalgos","id":"649427a8-47a4-4fab-9a31-25fd10916df8","savedPayload":{"position":{"x":18205.355676110576,"y":44755.84216677042},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Remember Flexibility!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Remember Flexibility!\",\n \"gif\": \"\",\n \"image\": \"nodes-highlights\",\n \"definition\": \"A corollary to the previous step is that not everything will make sense to you!\",\n \"bulletListIntro\": \"Superalgos is designed and built with flexibility in mind. Different users, different approaches to trading, different strategies, they all have different needs!\",\n \"paragraph1\": \"\",\n \"callOut\": \"The system doesn't know what your intent is. It provides a set of tools that you need to use wisely for them to make sense!\",\n \"paragraph2\": \"\",\n \"tip\": \"Learn to pay attention to the information that is relevant to you and discard what is not!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Left\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"7bb9d6d3-908b-4857-ab22-6eeeead27a41","savedPayload":{"position":{"x":18172.074106184842,"y":44660.72890444786},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Phased Management","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Phased Management\",\n \"gif\": \"\",\n \"image\": \"phase\",\n \"definition\": \"The ->Manage Stage-> enables the management of your stop loss and take profit targets in phases. Let's see how that looks in simulations...\",\n \"paragraph1\": \"\",\n \"callOut\": \"Find the Stop Loss and the Take Profit layers and turn them on!\",\n \"paragraph2\": \"It's probably self-explanatory, right? The ->Phase-> icon marks the switching of phases, thus, of the ->Formula-> used to determine each target.\",\n \"note\": \"\",\n \"tip\": \"This is a fantastic feature when designing strategies, as you can literally see what the formula does, and how phases change!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"80d0e95d-deef-42fa-917f-d9d60786d9cb","savedPayload":{"position":{"x":18160.791666666664,"y":44560.594484167515},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Orders in Order","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Orders in Order\",\n \"gif\": \"\",\n \"image\": \"bullet-market-sell-order\",\n \"definition\": \"You're familiar with the visualization of limit orders from the Welcome tutorial. It's time for market orders to shine!\",\n \"paragraph1\": \"Weak-hands Buster V.2—born with earlier versions of the system—uses single market orders to get in and out of positions. Let's see how those look over the charts...\",\n \"callOut\": \"Find the Market Buy Orders and Market Sell Orders layers and turn them on!\",\n \"paragraph2\": \"\",\n \"note\": \"Like with limit orders, a red bullet means a sell order, and a green bullet means a buy order. \",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"ab979e22-46f6-438f-bc1c-9fc5667c62b2","savedPayload":{"position":{"x":18172.074106184842,"y":44460.46006388717},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Stages & Time","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Stages & Time\",\n \"gif\": \"\",\n \"image\": \"close-stage-event\",\n \"definition\": \"Layers corresponding to stages, that is, ->Trigger Stage->, ->Open Stage->, ->Close Stage->, and ->Manage Stage-> are markers of spans of time.\",\n \"paragraph1\": \"That is, they signal the span of time on which each stage was open.\",\n \"callOut\": \"Try them out! Find the layers of the different stages and turn them on!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Feel free to turn off a few of the layers you have on at the moment, for clarity!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"822c4fd3-770e-4579-b8d8-5bba5c11f739","savedPayload":{"position":{"x":18205.355676110576,"y":44365.346801564614},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Episode X","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Episode X\",\n \"gif\": \"\",\n \"image\": \"episode\",\n \"definition\": \"There's one layer left... ->Episode->!. It marks the duration of the episode and features several plotter panels...\",\n \"paragraph1\": \"\",\n \"callOut\": \"Turn the Episode layer on!\",\n \"paragraph2\": \"In this case, the episode is six months long, so all you will see is a line at the bottom of the screen, and the episode icon on both sides, signaling the episode is longer than the period represented on screen.\",\n \"note\": \"As usual, the plotter panels feature information that explained on the ->Trading Engine-> section of the documentation.\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"55c98dad-a864-45d4-80d9-5284ca252240","savedPayload":{"position":{"x":18258.96749955605,"y":44280.024073331086},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Understanding Objects Data","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Understanding Objects Data\",\n \"gif\": \"\",\n \"image\": \"bullet-warning\",\n \"definition\": \"The data available in Simulation Objects represent the state of affairs at the moment the object is closed, or at the current time if it hasn't closed yet!\",\n \"paragraph1\": \"In contrast, the layers in the Trading Engine and Trading System layer managers represent the value of nodes at the candle signaled by the mouse pointer.\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"tip\": \"\",\n \"important\": \"This is a fundamental difference that you must understand, as otherwise, you may misinterpret the information presented by Simulation Objects. I will explain the most important implications in the next few steps!\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"8b3db214-d507-46f4-be2e-61e5f9a1272e","savedPayload":{"position":{"x":18330.221255830234,"y":44208.7703170569},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Daily Files vs. Market Files","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Daily Files vs. Market Files\",\n \"gif\": \"\",\n \"image\": \"dataset-definition\",\n \"definition\": \"Superalgos processes time frames below one hour in Daily Files, meaning that the data corresponding to one day is stored in one file.\",\n \"paragraph1\": \"In contrast, data for timeframes of one hour and above are stored in Market Files, meaning that data corresponding to the whole market is stored in one file.\",\n \"callOut\": \"\",\n \"paragraph2\": \"As a result, when working in time frames below one hour, events that span multiple days generate multiple objects: one per day!\",\n \"tip\": \"\",\n \"important\": \"This means that, when working in low time frames, you may run into multiple objects per concept or event, each showing the data corresponding to the close of the day!\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"b246456c-f85a-479b-ac70-e0752e5b5261","savedPayload":{"position":{"x":18415.543984063763,"y":44155.15849361143},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Bring Me Back To Earth!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Bring Me Back To Earth!\",\n \"gif\": \"\",\n \"image\": \"take-position-event\",\n \"definition\": \"I know! This all sounds too abstract! Let me lay out a few examples!\",\n \"bulletListIntro\": \"When working in sub-hour time frames and a concept or event—for example, a position—spans multiple days:\",\n \"bulletArray\": [\n [\n \"You may see multiple triangles!\",\n \"One triangle is drawn at the close of each day, and one last triangle is drawn at the close of the position, or—in case the position hasn't closed yet— at the current datetime.\"\n ],\n [\n \"Statistics and metrics are fragmented too!\",\n \"For example, ROI, Profit Loss, and the evaluation of the position as a hit or a fail are determined daily!\"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"5fc87b22-bd7d-427e-b797-9f0fc1ba274b","savedPayload":{"position":{"x":18510.657246386323,"y":44121.8769236857},"targetPosition":{"x":18610.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":4,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"16b109a8-0005-4d43-8db1-4f0c6312a085","savedPayload":{"position":{"x":18610.791666666664,"y":44560.594484167515},"targetPosition":{"x":18910.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Topic","name":"Trading System Layers","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Trading System Layers\",\n \"gif\": \"\",\n \"image\": \"trading-system\",\n \"definition\": \"The last layer manager is about the ->Trading System-> that features the trading rules for the simulation!\",\n \"paragraph1\": \"These layers work similar to those in the Trading Engine layer manager: they show information on the design space, not on the charts. The difference is that these show stuff on the trading system hierarchy!\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"These layers are particularly useful when designing, testing, and debugging strategies! Just wait and see!\",\n \"tip\": \"Before continuing, turn some Simulation Objects layers off to avoid cluttering up the screen!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toBottom\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","tutorialSteps":[{"type":"Tutorial Step","name":"Trading System Errors!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Trading System Errors!\",\n \"gif\": \"\",\n \"image\": \"bullet-error\",\n \"definition\": \"When writing conditions and formulas, you may make mistakes. Remember conditions must evaluate to true or false and formulas to a number? \",\n \"paragraph1\": \"Well, if they don't, you will get an error! Turning on this layer when you're going back and forth crafting and testing a strategy is a must!\",\n \"callOut\": \"There are no errors in this trading system, but I just planted a fake one so that you may see how they are reported! Look at the ->Formula-> on the left!\",\n \"paragraph2\": \"Now, what if the section of the hierarchy was collapsed? Would you still be able to see error messages?
Let's run a quick test! Collapse the ->Initial Targets-> node!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"setErrorMessageReferenceParent\": \"This is formula has a fake error!\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"99e8ab2e-b689-4187-ab47-6acee91093b2","savedPayload":{"position":{"x":18633.62780691328,"y":44145.78945445799},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Formula","name":"New Formula","id":"492cee3d-1709-41c5-bfd8-e700a3fdf3da"}}},{"type":"Tutorial Step","name":"Trading System Highlights","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Trading System Highlights!\",\n \"gif\": \"\",\n \"image\": \"bullet-info\",\n \"definition\": \"Whenever something relevant happens with any given node in the trading system hierarchy, the node is highlighted!\",\n \"paragraph1\": \"\",\n \"callOut\": \"Turn the Trading System Highlights layer on, slide your mouse over the chart left of the position, and check these conditions and situations! Now place the mouse pointer over the candle where the strategy is triggered... (08 Mar 2020 at 01 hs)...\",\n \"paragraph2\": \"\",\n \"note\": \"Conditions are highlighted when they validate true; situations, when all conditions validate true; stages and phases, when they become active, and so on!\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"8d16861d-5cd6-4f31-97a3-95e152266cd8","savedPayload":{"position":{"x":18698.6596323107,"y":44048.46244981155},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Condition","name":"Slope Not Extreme, or...","id":"da235bf3-976c-4832-a565-98a6bb13236d"}}},{"type":"Tutorial Step","name":"GIF","config":"{\n \"gif\": \"trading-bot-layers-trading-system-highlights\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\"\n}","project":"Superalgos","id":"8e34aa88-c0fc-4268-9638-a72c96104b9a","savedPayload":{"position":{"x":18795.98663695714,"y":43983.430624414126},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Quick Refresher On Stages","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Quick Refresher on Stages!\",\n \"gif\": \"\",\n \"image\": \"trigger-stage\",\n \"definition\": \"Notice that not all nodes are evaluated all the time! Only those in the active stage are!\",\n \"paragraph1\": \"This is a quick refresher on strategy stages! If you haven't read the docs on trading systems and strategies, then find the time and do it!\",\n \"callOut\": \"Notice how these conditions are not highlighted for the candles within the position.\",\n \"paragraph2\": \"This is because you are looking at the ->Trigger Stage-> definitions. These definitions are evaluated until a ->Strategy-> is triggered. Once triggered, the ->Open Stage-> kicks in, and so on!\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"https://docs.superalgos.org/suite-strategies.html\"\n}","project":"Superalgos","id":"89f8b883-47f4-4fc0-828a-d2ffeff56737","savedPayload":{"position":{"x":18910.791666666664,"y":43960.594484167515},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Trading System Values!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Trading System Values!\",\n \"gif\": \"\",\n \"image\": \"formula\",\n \"definition\": \"The Trading System Values layers works like the layers on the Trading Engine layer manager showing the values of nodes...\",\n \"paragraph1\": \"\",\n \"callOut\": \"Turn the Trading System Values layer on, slide your mouse over the chart and check the stop formulas!\",\n \"paragraph2\": \"\",\n \"note\": \"The common theme among these layers is that they provide on-the-fly information about each node, for each candle!\",\n \"tip\": \"Is it fair to say that our ->Trading Bot-> is 100% acccountable?\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"positionAtReferenceParent\": true,\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"a49327ef-0daf-494a-9b76-6d53c914da16","savedPayload":{"position":{"x":19025.596696376193,"y":43983.430624414126},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"},"referenceParent":{"type":"Formula","id":"6f65573a-c2ac-476a-9ca1-738971e3ff78"}}},{"type":"Tutorial Step","name":"The Rest of the Crew","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"The Rest of the Crew!\",\n \"gif\": \"\",\n \"image\": \"bot-layers\",\n \"definition\": \"The rest of the layers are virtually self-explanatory once you understand the standard workings... so, I'll be brief!\",\n \"bulletArray\": [\n [\n \"Status,\",\n \"for nodes which have one! \"\n ],\n [\n \"Progress,\",\n \"for nodes that may feature an indication of progress!\"\n ],\n [\n \"Running,\",\n \"for nodes that are evaluated at certain points in time!\"\n ],\n [\n \"Announcements,\",\n \"for announcements set up at the trading system, currently broadcasted over Telegram!\"\n ],\n [\n \"Warnings,\",\n \"when something unusual happens but is not considered an error!\"\n ],\n [\n \"System Info,\",\n \"may be displayed on many nodes, sort of like a verbose mode. \"\n ]\n ],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"Right\",\n \"slider\": \"toMiddle\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"7aa8f881-788d-423d-9f42-70ace943023a","savedPayload":{"position":{"x":19122.923701022628,"y":44048.46244981155},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}},{"type":"Tutorial Step","name":"Time To Go Out and Play!","config":"{\n \"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"Time To Go Out and Play!\",\n \"gif\": \"\",\n \"image\": \"play\",\n \"definition\": \"That's all folks! We've covered it all! Now it's time to go out and play! Have fun!\",\n \"paragraph1\": \"Take some time to explore these layers, paying special attention to those you feel will be of the most use.\",\n \"callOut\": \"Remember, the Trading Bot Layers are a fundamental tool when designing, testing, and debugging strategies!

See you next time!\",\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"Drop by the documentation for more info!\",\n \"important\": \"\",\n \"warning\": \"\",\n \"position\": \"\",\n \"slider\": \"toMiddle\",\n \"documentationURL\": \"\"\n}","project":"Superalgos","id":"dcf1ae5f-f200-4201-ab28-c921417ab7f2","savedPayload":{"position":{"x":19187.95552642005,"y":44145.78945445799},"targetPosition":{"x":18910.791666666664,"y":44260.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"tutorialTopics":[],"id":"c57458f7-5c9d-41b7-aea1-6c5aff4ef791","savedPayload":{"position":{"x":18910.791666666664,"y":44260.594484167515},"targetPosition":{"x":18910.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Reset"}}}],"id":"f96b383c-4916-4864-868b-b2b5cf9c5033","savedPayload":{"position":{"x":18910.791666666664,"y":44560.594484167515},"targetPosition":{"x":18910.791666666664,"y":44560.594484167515},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false},"tutorial":{"status":"Done"}}}]} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/AppSchema.json b/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/AppSchema.json deleted file mode 100644 index dcda0898d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/AppSchema.json +++ /dev/null @@ -1,17871 +0,0 @@ -[ - { - "type": "Superalgos Project", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Superalgos Project", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isProjectHead": true, - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "isPinned": true, - "positionLocked": true, - "icon": "superalgos", - "properties": [ - { - "name": "spaces", - "type": "node", - "childType": "Spaces", - "autoAdd": true - }, - { - "name": "mines", - "type": "node", - "childType": "Mines", - "autoAdd": true - }, - { - "name": "otherHierarchies", - "type": "node", - "childType": "Other Hierarchies", - "autoAdd": true - } - ] - }, - { - "type": "Spaces", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Charting Space", - "relatedUiObject": "Charting Space", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Design Space", - "relatedUiObject": "Design Space", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "isPinned": false, - "level": 2, - "propertyNameAtParent": "spaces" - }, - { - "type": "Mines", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Mine", - "relatedUiObject": "Data Mine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Trading Mine", - "relatedUiObject": "Trading Mine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Learning Mine", - "relatedUiObject": "Learning Mine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "isPinned": false, - "level": 2, - "propertyNameAtParent": "mines" - }, - { - "type": "Other Hierarchies", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Trading System", - "relatedUiObject": "Trading System", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Network", - "relatedUiObject": "Network", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Super Scripts", - "relatedUiObject": "Super Scripts", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Trading Engine", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Tutorial", - "relatedUiObject": "Tutorial", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "isPinned": false, - "level": 2, - "propertyNameAtParent": "otherHierarchies" - }, - { - "type": "Workspace", - "menuItems": [ - { - "action": "Pin / Unpin", - "currentStatus": true, - "iconPathOn": "unpinned", - "iconPathOff": "pinned", - "actionFunction": "payload.executeAction", - "ring": 1 - }, - { - "iconPathOn": "share", - "iconPathOff": "share", - "actionFunction": "UI.projects.superalgos.spaces.designSpace.workspace.share", - "ring": 1 - }, - { - "iconPathOn": "backup", - "iconPathOff": "backup", - "actionFunction": "UI.projects.superalgos.spaces.designSpace.workspace.backup", - "ring": 1 - }, - { - "action": "Add Missing Workspace Projects", - "label": "Add Missing Projects", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Workspace", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": false, - "isPinned": true, - "positionLocked": true, - "level": 0 - }, - { - "type": "Plotter Module", - "properties": [ - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code" - }, - { - "name": "shapes", - "type": "node", - "childType": "Shapes", - "autoAdd": true - }, - { - "name": "panels", - "type": "array", - "childType": "Plotter Panel", - "autoAdd": true - }, - { - "name": "nodesValues", - "type": "node", - "childType": "Nodes Values", - "autoAdd": false - }, - { - "name": "nodesHighlights", - "type": "node", - "childType": "Nodes Highlights", - "autoAdd": false - }, - { - "name": "nodesErrors", - "type": "node", - "childType": "Nodes Errors", - "autoAdd": false - }, - { - "name": "nodesWarnings", - "type": "node", - "childType": "Nodes Warnings", - "autoAdd": false - }, - { - "name": "nodesInfos", - "type": "node", - "childType": "Nodes Infos", - "autoAdd": false - }, - { - "name": "nodesStatus", - "type": "node", - "childType": "Nodes Status", - "autoAdd": false - }, - { - "name": "nodesProgress", - "type": "node", - "childType": "Nodes Progress", - "autoAdd": false - }, - { - "name": "nodesRunning", - "type": "node", - "childType": "Nodes Running", - "autoAdd": false - }, - { - "name": "nodesAnnouncements", - "type": "node", - "childType": "Nodes Announcements", - "autoAdd": false - }, - { - "name": "recordValues", - "type": "node", - "childType": "Record Values", - "autoAdd": false - } - ], - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "shapes", - "actionFunction": "payload.executeAction", - "label": "Add Shapes", - "relatedUiObject": "Shapes" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "actionFunction": "payload.executeAction", - "label": "Add Javascript Code", - "relatedUiObject": "Javascript Code" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Plotter Panel", - "relatedUiObject": "Plotter Panel" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "initialValues": { - "config": "{ \n \"codeName\": \"Module-Name\", \n \"icon\": \"histogram|band|moving-average|oscillator|trend\"\n}" - }, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Plotter->" - }, - "propertyNameAtParent": "modules" - }, - { - "type": "Nodes Values", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesValues" - }, - { - "type": "Nodes Highlights", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesHighlights" - }, - { - "type": "Nodes Errors", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesErrors" - }, - { - "type": "Nodes Warnings", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesWarnings" - }, - { - "type": "Nodes Infos", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesInfos" - }, - { - "type": "Nodes Status", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesStatus" - }, - { - "type": "Nodes Progress", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesProgress" - }, - { - "type": "Nodes Running", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesRunning" - }, - { - "type": "Nodes Announcements", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "nodesAnnouncements" - }, - { - "type": "Record Values", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "icon": "expand", - "propertyNameAtParent": "recordValues" - }, - { - "type": "Shapes", - "level": 4, - "propertyNameAtParent": "shapes", - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "properties": [ - { - "name": "chartPoints", - "type": "array", - "childType": "Chart Points", - "autoAdd": true - }, - { - "name": "polygons", - "type": "array", - "childType": "Polygon", - "autoAdd": true - }, - { - "name": "images", - "type": "array", - "childType": "Image", - "autoAdd": false - }, - { - "name": "texts", - "type": "array", - "childType": "Text", - "autoAdd": false - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Chart Points", - "relatedUiObject": "Chart Points" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Polygon", - "relatedUiObject": "Polygon" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Image", - "relatedUiObject": "Image" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Text", - "relatedUiObject": "Text" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Plotter Panel", - "level": 4, - "propertyNameAtParent": "panels", - "chainAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "editors": { - "config": true - }, - "properties": [ - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code" - }, - { - "name": "panelData", - "type": "array", - "childType": "Panel Data", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "actionFunction": "payload.executeAction", - "label": "Add Code", - "relatedUiObject": "Javascript Code" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Panel Data", - "relatedUiObject": "Panel Data" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Panel Data", - "level": 4, - "propertyNameAtParent": "panelData", - "editors": { - "config": true - }, - "chainAttachesTo": { - "compatibleTypes": "->Plotter Panel->" - }, - "initialValues": { - "config": "{\n \"valueDecimals\": 2\n}" - }, - "properties": [ - { - "name": "dataFormula", - "type": "node", - "childType": "Data Formula", - "autoAdd": true - }, - { - "name": "textStyle", - "type": "node", - "childType": "Text Style", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "dataFormula", - "actionFunction": "payload.executeAction", - "label": "Add Data Formula", - "relatedUiObject": "Data Formula" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "textStyle", - "actionFunction": "payload.executeAction", - "label": "Add Text Style", - "relatedUiObject": "Text Style" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Data Formula", - "level": 4, - "propertyNameAtParent": "dataFormula", - "editors": { - "formula": true - }, - "initialValues": { - "code": "// Type you code" - }, - "chainAttachesTo": { - "compatibleTypes": "->Panel Data->" - }, - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.formulaEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Javascript Code", - "level": 4, - "propertyNameAtParent": "javascriptCode", - "editors": { - "code": true - }, - "initialValues": { - "code": "// Type you code" - }, - "chainAttachesTo": { - "compatibleTypes": "->Condition->Procedure Initialization->Procedure Loop->Plotter Module->Plotter Panel->Master Script->" - }, - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Chart Points", - "level": 4, - "propertyNameAtParent": "chartPoints", - "chainAttachesTo": { - "compatibleTypes": "->Shapes->" - }, - "properties": [ - { - "name": "points", - "type": "array", - "childType": "Point", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Point", - "relatedUiObject": "Point" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Point", - "level": 4, - "propertyNameAtParent": "points", - "chainAttachesTo": { - "compatibleTypes": "->Chart Points->" - }, - "properties": [ - { - "name": "pointFormula", - "type": "node", - "childType": "Point Formula", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "pointFormula", - "actionFunction": "payload.executeAction", - "label": "Add Point Formula", - "relatedUiObject": "Point Formula" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Point Formula", - "level": 4, - "propertyNameAtParent": "pointFormula", - "chainAttachesTo": { - "compatibleTypes": "->Point->" - }, - "editors": { - "formula": true - }, - "initialValues": { - "code": "x = record.begin\ny = record.property" - }, - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.formulaEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Image", - "level": 3, - "propertyNameAtParent": "images", - "chainAttachesTo": { - "compatibleTypes": "->Shapes->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"codeName\": \"\", \n\"size\": 10\n}" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "imageCondition", - "actionFunction": "payload.executeAction", - "label": "Add Image Condition", - "relatedUiObject": "Image Condition" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "imagePosition", - "actionFunction": "payload.executeAction", - "label": "Add Image Position", - "relatedUiObject": "Image Position" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "properties": [ - { - "name": "imageCondition", - "type": "node", - "childType": "Image Condition", - "autoAdd": true - }, - { - "name": "imagePosition", - "type": "node", - "childType": "Image Position", - "autoAdd": true - } - ], - "addLeftIcons": true - }, - { - "type": "Image Condition", - "level": 4, - "propertyNameAtParent": "imageCondition", - "chainAttachesTo": { - "compatibleTypes": "->Image->" - }, - "editors": { - "code": true - }, - "initialValues": { - "code": "" - }, - "properties": [], - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Image Position", - "level": 4, - "propertyNameAtParent": "imagePosition", - "chainAttachesTo": { - "compatibleTypes": "->Image->" - }, - "properties": [], - "referenceAttachesTo": { - "compatibleTypes": "->Point->" - }, - "editors": { - "config": true - }, - "title": [ - "Use Reference Parent" - ], - "initialValues": { - "config": "{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Text", - "level": 3, - "propertyNameAtParent": "texts", - "chainAttachesTo": { - "compatibleTypes": "->Shapes->" - }, - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "textCondition", - "actionFunction": "payload.executeAction", - "label": "Add Text Condition", - "relatedUiObject": "Text Condition" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "textPosition", - "actionFunction": "payload.executeAction", - "label": "Add Text Position", - "relatedUiObject": "Text Position" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "textFormula", - "actionFunction": "payload.executeAction", - "label": "Add Text Formula", - "relatedUiObject": "Text Formula" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "textStyle", - "actionFunction": "payload.executeAction", - "label": "Add Text Style", - "relatedUiObject": "Text Style" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "properties": [ - { - "name": "textCondition", - "type": "node", - "childType": "Text Condition", - "autoAdd": true - }, - { - "name": "textPosition", - "type": "node", - "childType": "Text Position", - "autoAdd": true - }, - { - "name": "textFormula", - "type": "node", - "childType": "Text Formula", - "autoAdd": true - }, - { - "name": "textStyle", - "type": "node", - "childType": "Text Style", - "autoAdd": true - } - ], - "addLeftIcons": true - }, - { - "type": "Text Style", - "level": 4, - "propertyNameAtParent": "textStyle", - "chainAttachesTo": { - "compatibleTypes": "->Text->Panel Data->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"configuration\": \"Get the appropriate configuration from the documentation\"\n}" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Text Condition", - "level": 4, - "propertyNameAtParent": "textCondition", - "chainAttachesTo": { - "compatibleTypes": "->Text->" - }, - "editors": { - "code": true - }, - "initialValues": { - "code": "" - }, - "properties": [], - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Text Position", - "level": 4, - "propertyNameAtParent": "textPosition", - "chainAttachesTo": { - "compatibleTypes": "->Text->" - }, - "properties": [], - "referenceAttachesTo": { - "compatibleTypes": "->Point->" - }, - "editors": { - "config": true - }, - "title": [ - "Use Reference Parent" - ], - "initialValues": { - "config": "{ \n\"offsetX\": 0,\n \"offsetY\": 0\n }" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Text Formula", - "level": 4, - "propertyNameAtParent": "textFormula", - "chainAttachesTo": { - "compatibleTypes": "->Text->" - }, - "editors": { - "formula": true - }, - "initialValues": { - "code": "record.property" - }, - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.formulaEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Polygon", - "level": 3, - "propertyNameAtParent": "polygons", - "chainAttachesTo": { - "compatibleTypes": "->Shapes->" - }, - "properties": [ - { - "name": "polygonCondition", - "type": "node", - "childType": "Polygon Condition", - "autoAdd": false - }, - { - "name": "polygonBody", - "type": "node", - "childType": "Polygon Body", - "autoAdd": true - }, - { - "name": "polygonBorder", - "type": "node", - "childType": "Polygon Border", - "autoAdd": true - }, - { - "name": "polygonVertexes", - "type": "array", - "childType": "Polygon Vertex", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "polygonCondition", - "actionFunction": "payload.executeAction", - "label": "Add Polygon Condition", - "relatedUiObject": "Polygon Condition" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "polygonBody", - "actionFunction": "payload.executeAction", - "label": "Add Polygon Body", - "relatedUiObject": "Polygon Body" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "polygonBorder", - "actionFunction": "payload.executeAction", - "label": "Add Polygon Border", - "relatedUiObject": "Polygon Border" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Polygon Vertex", - "relatedUiObject": "Polygon Vertex" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Polygon Condition", - "level": 4, - "propertyNameAtParent": "polygonCondition", - "chainAttachesTo": { - "compatibleTypes": "->Polygon->" - }, - "editors": { - "code": true - }, - "initialValues": { - "code": "" - }, - "properties": [], - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Polygon Body", - "level": 4, - "propertyNameAtParent": "polygonBody", - "chainAttachesTo": { - "compatibleTypes": "->Polygon->" - }, - "properties": [ - { - "name": "style", - "type": "node", - "childType": "Style", - "autoAdd": true - }, - { - "name": "styleConditions", - "type": "array", - "childType": "Style Condition" - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "style", - "actionFunction": "payload.executeAction", - "label": "Add Style", - "relatedUiObject": "Style" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Style Condition", - "relatedUiObject": "Style Condition" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Polygon Border", - "level": 4, - "propertyNameAtParent": "polygonBorder", - "chainAttachesTo": { - "compatibleTypes": "->Polygon->" - }, - "properties": [ - { - "name": "style", - "type": "node", - "childType": "Style", - "autoAdd": true - }, - { - "name": "styleConditions", - "type": "array", - "childType": "Style Condition" - } - ], - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "style", - "actionFunction": "payload.executeAction", - "label": "Add Style", - "relatedUiObject": "Style" - }, - { - "action": "Add UI Object", - "actionFunction": "payload.executeAction", - "label": "Add Style Condition", - "relatedUiObject": "Style Condition" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Style Condition", - "level": 4, - "propertyNameAtParent": "styleConditions", - "chainAttachesTo": { - "compatibleTypes": "->Polygon Body->Polygon Border->" - }, - "editors": { - "code": true - }, - "initialValues": { - "code": "" - }, - "properties": [ - { - "name": "style", - "type": "node", - "childType": "Style", - "autoAdd": true - } - ], - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "style", - "actionFunction": "payload.executeAction", - "label": "Add Style", - "relatedUiObject": "Style" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Style", - "level": 4, - "propertyNameAtParent": "style", - "chainAttachesTo": { - "compatibleTypes": "->Style Condition->Polygon Body->Polygon Border->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"configuration\": \"Get the appropriate configuration from the documentation\"\n}" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Polygon Vertex", - "level": 4, - "propertyNameAtParent": "polygonVertexes", - "isReferenceChildren": true, - "referenceAttachesTo": { - "compatibleTypes": "->Point->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Polygon->" - }, - "title": [ - "Use Reference Parent" - ], - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Situation", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Condition", - "relatedUiObject": "Condition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Take Position Event->Trigger On Event->Trigger Off Event->Next Phase Event->Move To Phase Event->Create Order Event->Cancel Order Event->Close Stage Event->" - }, - "properties": [ - { - "name": "conditions", - "type": "array", - "childType": "Condition", - "autoAdd": true - }, - { - "name": "formula", - "type": "node", - "childType": "Formula" - } - ], - "propertyNameAtParent": "situations" - }, - { - "type": "Condition", - "menuItems": [ - { - "action": "Edit", - "actionFunction": "uiObject.conditionEditor.activate", - "label": "Edit", - "relatedUiObject": "Condition" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "label": "Add Code", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Fetch Code to Javascript Code", - "label": "Fetch from Javascript Code", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Push Code to Javascript Code", - "label": "Push to Javascript Code", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "condition": true - }, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Situation->" - }, - "properties": [ - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code", - "autoAdd": true - } - ], - "propertyNameAtParent": "conditions" - }, - { - "type": "Super Scripts", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Scripts Library", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "scriptsLibrary", - "relatedUiObject": "Scripts Library", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "properties": [ - { - "name": "scriptsLibrary", - "type": "node", - "childType": "Scripts Library", - "autoAdd": true - } - ] - }, - { - "type": "Scripts Library", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Master Script", - "relatedUiObject": "Master Script", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "scriptsLibrary", - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Super Scripts->" - }, - "properties": [ - { - "name": "masterScripts", - "type": "array", - "childType": "Master Script", - "autoAdd": true - } - ] - }, - { - "type": "Master Script", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Template Script", - "relatedUiObject": "Template Script", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Javascript Code", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "masterScripts", - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Scripts Library->" - }, - "properties": [ - { - "name": "templateScripts", - "type": "array", - "childType": "Template Script" - }, - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code", - "autoAdd": true - } - ] - }, - { - "type": "Template Script", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Template Structure", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "templateStructure", - "relatedUiObject": "Template Structure", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Template Target", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "templateTarget", - "relatedUiObject": "Template Target", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Javascript Code", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "templateScripts", - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Master Script->" - }, - "properties": [ - { - "name": "templateStructure", - "type": "node", - "childType": "Template Structure", - "autoAdd": true - }, - { - "name": "templateTarget", - "type": "node", - "childType": "Template Target", - "autoAdd": true - }, - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code", - "autoAdd": true - } - ] - }, - { - "type": "Template Structure", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "templateStructure", - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Template Script->" - }, - "properties": [ - { - "name": "taskManagers", - "type": "node", - "childType": "Task Manager" - }, - { - "name": "marketDataProducts", - "type": "node", - "childType": "Market Data Products" - }, - { - "name": "tradingSessionReferences", - "type": "node", - "childType": "Trading Session Reference" - }, - { - "name": "timeMachines", - "type": "node", - "childType": "Time Machine" - } - ] - }, - { - "type": "Template Target", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "templateTarget", - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Template Script->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Dashboard->Data Mines Data->Trading Mines Data->Data Mining->Testing Environment->Production Environment->" - }, - "properties": [] - }, - { - "type": "Super Action", - "menuItems": [ - { - "action": "Run Super Action", - "label": "Run", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Super Action Executed", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "superActions", - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Super Actions->Market->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Master Script->" - }, - "properties": [] - }, - { - "type": "Network", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Network Node", - "relatedUiObject": "Network Node", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "networkNodes", - "type": "array", - "childType": "Network Node" - } - ] - }, - { - "type": "Network Node", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "dataMining", - "label": "Add Data Mining", - "relatedUiObject": "Data Mining", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "learningMining", - "label": "Add Learning Mining", - "relatedUiObject": "Learning Mining", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "testingEnvironment", - "label": "Add Testing Environment", - "relatedUiObject": "Testing Environment", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "productionEnvironment", - "label": "Add Production Environment", - "relatedUiObject": "Production Environment", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "dataStorage", - "label": "Add Data Storage", - "relatedUiObject": "Data Storage", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"host\": \"localhost\", \n\"webPort\": \"34248\", \n\"webSocketsPort\": \"8081\"\n}" - }, - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Network->" - }, - "properties": [ - { - "name": "dataMining", - "type": "node", - "childType": "Data Mining", - "autoAdd": true - }, - { - "name": "learningMining", - "type": "node", - "childType": "Learning Mining", - "autoAdd": true - }, - { - "name": "testingEnvironment", - "type": "node", - "childType": "Testing Environment", - "autoAdd": true - }, - { - "name": "productionEnvironment", - "type": "node", - "childType": "Production Environment", - "autoAdd": true - }, - { - "name": "dataStorage", - "type": "node", - "childType": "Data Storage", - "autoAdd": true - } - ], - "propertyNameAtParent": "networkNodes" - }, - { - "type": "Task Manager", - "menuItems": [ - { - "action": "Run All Tasks", - "label": "Run All Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Tasks", - "label": "Stop All Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Task", - "relatedUiObject": "Task", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine Tasks->Trading Mine Tasks->Learning Mine Tasks->" - }, - "properties": [ - { - "name": "tasks", - "type": "array", - "childType": "Task", - "autoAdd": false, - "monitorChildrenRunning": true - } - ], - "propertyNameAtParent": "taskManagers" - }, - { - "type": "Task", - "menuItems": [ - { - "action": "Run Task", - "label": "Run", - "workingLabel": "Stop", - "workDoneLabel": "Task Running", - "workFailedLabel": "Task Cannot be Run", - "secondaryAction": "Stop Task", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Task Stopped", - "secondaryWorkFailedLabel": "Task Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Debug Task", - "label": "Debug", - "workingLabel": "Debugging", - "workDoneLabel": "Debug Request Sent", - "workFailedLabel": "Task Cannot be Debugged", - "iconPathOn": "status-dependency", - "iconPathOff": "status-dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "bot", - "label": "Add Sensor Bot Instance", - "relatedUiObject": "Sensor Bot Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "bot", - "label": "Add Indicator Bot Instance", - "relatedUiObject": "Indicator Bot Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "bot", - "label": "Add Trading Bot Instance", - "relatedUiObject": "Trading Bot Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "bot", - "label": "Add Learning Bot Instance", - "relatedUiObject": "Learning Bot Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "keyReference", - "label": "Add Key Reference", - "relatedUiObject": "Key Reference", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 0, - "chainAttachesTo": { - "compatibleTypes": "->Task Manager->" - }, - "properties": [ - { - "name": "bot", - "type": "node", - "childType": "Trading Bot Instance" - }, - { - "name": "bot", - "type": "node", - "childType": "Sensor Bot Instance" - }, - { - "name": "bot", - "type": "node", - "childType": "Indicator Bot Instance" - }, - { - "name": "bot", - "type": "node", - "childType": "Learning Bot Instance" - }, - { - "name": "keyReference", - "type": "node", - "childType": "Key Reference" - } - ], - "propertyNameAtParent": "tasks" - }, - { - "type": "Trading Bot Instance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Instance", - "relatedUiObject": "Trading Process Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Task->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Trading Process Instance", - "autoAdd": false - } - ], - "propertyNameAtParent": "bot" - }, - { - "type": "Learning Bot Instance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Instance", - "relatedUiObject": "Learning Process Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Task->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Learning Process Instance", - "autoAdd": false - } - ], - "propertyNameAtParent": "bot" - }, - { - "type": "Sensor Process Instance", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent", - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Sensor Bot Instance->" - }, - "properties": [], - "propertyNameAtParent": "processes" - }, - { - "type": "Indicator Process Instance", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent", - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Indicator Bot Instance->" - }, - "properties": [], - "propertyNameAtParent": "processes" - }, - { - "type": "Trading Process Instance", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "session", - "label": "Add Backtesting Session", - "relatedUiObject": "Backtesting Session", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "session", - "label": "Add Live Trading Session", - "relatedUiObject": "Live Trading Session", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "session", - "label": "Add Forward Testing Session", - "relatedUiObject": "Forward Testing Session", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "session", - "label": "Add Paper Trading Session", - "relatedUiObject": "Paper Trading Session", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "executionStartedEvent", - "label": "Add Execution Started Event", - "relatedUiObject": "Execution Started Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent", - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Bot Instance->" - }, - "properties": [ - { - "name": "session", - "type": "node", - "childType": "Backtesting Session" - }, - { - "name": "session", - "type": "node", - "childType": "Paper Trading Session" - }, - { - "name": "session", - "type": "node", - "childType": "Forward Testing Session" - }, - { - "name": "session", - "type": "node", - "childType": "Live Trading Session" - }, - { - "name": "executionStartedEvent", - "type": "node", - "childType": "Execution Started Event", - "autoAdd": false - } - ], - "propertyNameAtParent": "processes" - }, - { - "type": "Learning Process Instance", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "session", - "label": "Add Learning Session", - "relatedUiObject": "Learning Session", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "executionStartedEvent", - "label": "Add Execution Started Event", - "relatedUiObject": "Execution Started Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent", - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Bot Instance->" - }, - "properties": [ - { - "name": "session", - "type": "node", - "childType": "Learning Session" - }, - { - "name": "executionStartedEvent", - "type": "node", - "childType": "Execution Started Event", - "autoAdd": false - } - ], - "propertyNameAtParent": "processes" - }, - { - "type": "Backtesting Session", - "menuItems": [ - { - "action": "Run Trading Session", - "label": "Run", - "workingLabel": "Run Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Ran", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Trading Session", - "label": "Resume", - "workingLabel": "Resume Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Resumed", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{ \n\"folderName\": \"\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trading Process Instance->" - }, - "properties": [ - { - "name": "tradingParameters", - "type": "node", - "childType": "Trading Parameters", - "autoAdd": true - }, - { - "name": "tradingSystemReference", - "type": "node", - "childType": "Trading System Reference", - "autoAdd": true - }, - { - "name": "tradingEngineReference", - "type": "node", - "childType": "Trading Engine Reference", - "autoAdd": true - }, - { - "name": "socialBots", - "type": "node", - "childType": "Social Bots" - } - ], - "propertyNameAtParent": "session" - }, - { - "type": "Trading Engine", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "current", - "type": "node", - "childType": "Current", - "autoAdd": true - }, - { - "name": "last", - "type": "node", - "childType": "Last", - "autoAdd": true - }, - { - "name": "exchangeOrders", - "type": "node", - "childType": "Exchange Orders", - "autoAdd": true - } - ] - }, - { - "type": "Dynamic Indicators", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Indicator Function", - "relatedUiObject": "Indicator Function", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "propertyNameAtParent": "dynamicIndicators", - "properties": [ - { - "name": "indicatorFunctions", - "type": "array", - "childType": "Indicator Function", - "autoAdd": true - } - ] - }, - { - "type": "Indicator Function", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Dynamic Indicators->" - }, - "propertyNameAtParent": "indicatorFunctions", - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ] - }, - { - "type": "Episode", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->" - }, - "propertyNameAtParent": "episode", - "properties": [ - { - "name": "serialNumber", - "type": "node", - "childType": "Serial Number", - "autoAdd": true - }, - { - "name": "identifier", - "type": "node", - "childType": "Identifier", - "autoAdd": true - }, - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "headOfTheMarket", - "type": "node", - "childType": "Head Of The Market", - "autoAdd": true - }, - { - "name": "processDate", - "type": "node", - "childType": "Process Date", - "autoAdd": true - }, - { - "name": "episodeBaseAsset", - "type": "node", - "childType": "Episode Base Asset", - "autoAdd": true - }, - { - "name": "episodeQuotedAsset", - "type": "node", - "childType": "Episode Quoted Asset", - "autoAdd": true - }, - { - "name": "episodeCounters", - "type": "node", - "childType": "Episode Counters", - "autoAdd": true - }, - { - "name": "episodeStatistics", - "type": "node", - "childType": "Episode Statistics", - "autoAdd": true - }, - { - "name": "distanceToEvent", - "type": "node", - "childType": "Distance To Event", - "autoAdd": true - }, - { - "name": "candle", - "type": "node", - "childType": "Candle", - "autoAdd": true - }, - { - "name": "cycle", - "type": "node", - "childType": "Cycle", - "autoAdd": true - } - ] - }, - { - "type": "Episode Counters", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Counter", - "relatedUiObject": "User Defined Counter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "episodeCounters", - "properties": [ - { - "name": "periods", - "type": "node", - "childType": "Periods", - "autoAdd": true - }, - { - "name": "strategies", - "type": "node", - "childType": "Strategies", - "autoAdd": true - }, - { - "name": "positions", - "type": "node", - "childType": "Positions", - "autoAdd": true - }, - { - "name": "orders", - "type": "node", - "childType": "Orders", - "autoAdd": true - }, - { - "name": "hits", - "type": "node", - "childType": "Hits", - "autoAdd": true - }, - { - "name": "fails", - "type": "node", - "childType": "Fails", - "autoAdd": true - }, - { - "name": "userDefinedCounters", - "type": "array", - "childType": "User Defined Counter", - "autoAdd": false - } - ] - }, - { - "type": "Position Counters", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "periods", - "label": "Add Periods", - "relatedUiObject": "Periods", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Counter", - "relatedUiObject": "User Defined Counter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "positionCounters", - "properties": [ - { - "name": "periods", - "type": "node", - "childType": "Periods", - "autoAdd": true - }, - { - "name": "userDefinedCounters", - "type": "array", - "childType": "User Defined Counter", - "autoAdd": false - } - ] - }, - { - "type": "Strategy Counters", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "periods", - "label": "Add Periods", - "relatedUiObject": "Periods", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Counter", - "relatedUiObject": "User Defined Counter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy->" - }, - "propertyNameAtParent": "strategyCounters", - "properties": [ - { - "name": "periods", - "type": "node", - "childType": "Periods", - "autoAdd": true - }, - { - "name": "userDefinedCounters", - "type": "array", - "childType": "User Defined Counter", - "autoAdd": false - } - ] - }, - { - "type": "Order Counters", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "periods", - "label": "Add Periods", - "relatedUiObject": "Periods", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Counter", - "relatedUiObject": "User Defined Counter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "orderCounters", - "properties": [ - { - "name": "periods", - "type": "node", - "childType": "Periods", - "autoAdd": true - }, - { - "name": "userDefinedCounters", - "type": "array", - "childType": "User Defined Counter", - "autoAdd": false - } - ] - }, - { - "type": "Positions", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->" - }, - "propertyNameAtParent": "positions" - }, - { - "type": "Strategies", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->" - }, - "propertyNameAtParent": "strategies" - }, - { - "type": "Orders", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->" - }, - "propertyNameAtParent": "orders" - }, - { - "type": "Fails", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "fails" - }, - { - "type": "Hits", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "hits" - }, - { - "type": "Periods", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->Position Counters->Strategy Counters->Order Counters->" - }, - "propertyNameAtParent": "periods" - }, - { - "type": "User Defined Counter", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Counters->Position Counters->Strategy Counters->" - }, - "propertyNameAtParent": "userDefinedCounters" - }, - { - "type": "Episode Statistics", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Statistic", - "relatedUiObject": "User Defined Statistic", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "episodeStatistics", - "properties": [ - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - }, - { - "name": "days", - "type": "node", - "childType": "Days", - "autoAdd": true - }, - { - "name": "annualizedRateOfReturn", - "type": "node", - "childType": "Annualized Rate Of Return", - "autoAdd": true - }, - { - "name": "userDefinedStatistics", - "type": "array", - "childType": "User Defined Statistic", - "autoAdd": true - } - ] - }, - { - "type": "Stop Loss", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "stopLoss", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "stopLossPhase", - "type": "node", - "childType": "Stop Loss Phase", - "autoAdd": true - }, - { - "name": "stopLossPosition", - "type": "node", - "childType": "Stop Loss Position", - "autoAdd": true - }, - { - "name": "initialValue", - "type": "node", - "childType": "Initial Value", - "autoAdd": true - }, - { - "name": "finalValue", - "type": "node", - "childType": "Final Value", - "autoAdd": true - } - ] - }, - { - "type": "Take Profit", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "stopLoss", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "takeProfitPhase", - "type": "node", - "childType": "Take Profit Phase", - "autoAdd": true - }, - { - "name": "takeProfitPosition", - "type": "node", - "childType": "Take Profit Position", - "autoAdd": true - }, - { - "name": "initialValue", - "type": "node", - "childType": "Initial Value", - "autoAdd": true - }, - { - "name": "finalValue", - "type": "node", - "childType": "Final Value", - "autoAdd": true - } - ] - }, - { - "type": "Initial Value", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stop Loss->Take Profit->" - }, - "propertyNameAtParent": "initialValue" - }, - { - "type": "Final Value", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stop Loss->Take Profit->" - }, - "propertyNameAtParent": "finalValue" - }, - { - "type": "Stop Loss Phase", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stop Loss->" - }, - "propertyNameAtParent": "stopLossPhase" - }, - { - "type": "Take Profit Phase", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Take Profit->" - }, - "propertyNameAtParent": "takeProfitPhase" - }, - { - "type": "Take Profit Position", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Take Profit->" - }, - "propertyNameAtParent": "takeProfitPosition" - }, - { - "type": "Stop Loss Position", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stop Loss->" - }, - "propertyNameAtParent": "stopLossPosition" - }, - { - "type": "Position Statistics", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add User Defined Statistic", - "relatedUiObject": "User Defined Statistic", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "positionStatistics", - "properties": [ - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - }, - { - "name": "days", - "type": "node", - "childType": "Days", - "autoAdd": true - }, - { - "name": "userDefinedStatistics", - "type": "array", - "childType": "User Defined Statistic", - "autoAdd": true - } - ] - }, - { - "type": "Stage Base Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy Open Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "stageBaseAsset", - "properties": [ - { - "name": "targetSize", - "type": "node", - "childType": "Target Size", - "autoAdd": true - }, - { - "name": "sizePlaced", - "type": "node", - "childType": "Size Placed", - "autoAdd": true - }, - { - "name": "sizeFilled", - "type": "node", - "childType": "Size Filled", - "autoAdd": true - }, - { - "name": "feesPaid", - "type": "node", - "childType": "Fees Paid", - "autoAdd": true - } - ] - }, - { - "type": "Stage Quoted Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy Open Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "stageQuotedAsset", - "properties": [ - { - "name": "targetSize", - "type": "node", - "childType": "Target Size", - "autoAdd": true - }, - { - "name": "sizePlaced", - "type": "node", - "childType": "Size Placed", - "autoAdd": true - }, - { - "name": "sizeFilled", - "type": "node", - "childType": "Size Filled", - "autoAdd": true - }, - { - "name": "feesPaid", - "type": "node", - "childType": "Fees Paid", - "autoAdd": true - } - ] - }, - { - "type": "Episode Base Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "episodeBaseAsset", - "properties": [ - { - "name": "balance", - "type": "node", - "childType": "Balance", - "autoAdd": true - }, - { - "name": "beginBalance", - "type": "node", - "childType": "Begin Balance", - "autoAdd": true - }, - { - "name": "endBalance", - "type": "node", - "childType": "End Balance", - "autoAdd": true - }, - { - "name": "hits", - "type": "node", - "childType": "Hits", - "autoAdd": true - }, - { - "name": "fails", - "type": "node", - "childType": "Fails", - "autoAdd": true - }, - { - "name": "hitRatio", - "type": "node", - "childType": "Hit Ratio", - "autoAdd": true - }, - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "annualizedRateOfReturn", - "type": "node", - "childType": "Annualized Rate Of Return", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - } - ] - }, - { - "type": "Episode Quoted Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "episodeQuotedAsset", - "properties": [ - { - "name": "balance", - "type": "node", - "childType": "Balance", - "autoAdd": true - }, - { - "name": "beginBalance", - "type": "node", - "childType": "Begin Balance", - "autoAdd": true - }, - { - "name": "endBalance", - "type": "node", - "childType": "End Balance", - "autoAdd": true - }, - { - "name": "hits", - "type": "node", - "childType": "Hits", - "autoAdd": true - }, - { - "name": "fails", - "type": "node", - "childType": "Fails", - "autoAdd": true - }, - { - "name": "hitRatio", - "type": "node", - "childType": "Hit Ratio", - "autoAdd": true - }, - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "annualizedRateOfReturn", - "type": "node", - "childType": "Annualized Rate Of Return", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - } - ] - }, - { - "type": "Position Base Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "positionBaseAsset", - "properties": [ - { - "name": "beginBalance", - "type": "node", - "childType": "Begin Balance", - "autoAdd": true - }, - { - "name": "endBalance", - "type": "node", - "childType": "End Balance", - "autoAdd": true - }, - { - "name": "entryTargetSize", - "type": "node", - "childType": "Entry Target Size", - "autoAdd": true - }, - { - "name": "exitTargetSize", - "type": "node", - "childType": "Exit Target Size", - "autoAdd": true - }, - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - } - ] - }, - { - "type": "Position Quoted Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "positionQuotedAsset", - "properties": [ - { - "name": "beginBalance", - "type": "node", - "childType": "Begin Balance", - "autoAdd": true - }, - { - "name": "endBalance", - "type": "node", - "childType": "End Balance", - "autoAdd": true - }, - { - "name": "entryTargetSize", - "type": "node", - "childType": "Entry Target Size", - "autoAdd": true - }, - { - "name": "exitTargetSize", - "type": "node", - "childType": "Exit Target Size", - "autoAdd": true - }, - { - "name": "profitLoss", - "type": "node", - "childType": "Profit Loss", - "autoAdd": true - }, - { - "name": "ROI", - "type": "node", - "childType": "ROI", - "autoAdd": true - }, - { - "name": "hitFail", - "type": "node", - "childType": "Hit Fail", - "autoAdd": true - } - ] - }, - { - "type": "Order Statistics", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add User Defined Statistic", - "relatedUiObject": "User Defined Statistic", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "orderStatistics", - "properties": [ - { - "name": "percentageFilled", - "type": "node", - "childType": "Percentage Filled", - "autoAdd": true - }, - { - "name": "actualRate", - "type": "node", - "childType": "Actual Rate", - "autoAdd": true - }, - { - "name": "days", - "type": "node", - "childType": "Days", - "autoAdd": true - }, - { - "name": "userDefinedStatistics", - "type": "array", - "childType": "User Defined Statistic", - "autoAdd": true - } - ] - }, - { - "type": "Order Base Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "orderBaseAsset", - "properties": [ - { - "name": "actualSize", - "type": "node", - "childType": "Actual Size", - "autoAdd": true - }, - { - "name": "size", - "type": "node", - "childType": "Size", - "autoAdd": true - }, - { - "name": "sizeFilled", - "type": "node", - "childType": "Size Filled", - "autoAdd": true - }, - { - "name": "amountReceived", - "type": "node", - "childType": "Amount Received", - "autoAdd": true - }, - { - "name": "feesPaid", - "type": "node", - "childType": "Fees Paid", - "autoAdd": true - }, - { - "name": "feesToBePaid", - "type": "node", - "childType": "Fees To Be Paid", - "autoAdd": true - } - ] - }, - { - "type": "Order Quoted Asset", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "orderQuotedAsset", - "properties": [ - { - "name": "actualSize", - "type": "node", - "childType": "Actual Size", - "autoAdd": true - }, - { - "name": "size", - "type": "node", - "childType": "Size", - "autoAdd": true - }, - { - "name": "sizeFilled", - "type": "node", - "childType": "Size Filled", - "autoAdd": true - }, - { - "name": "amountReceived", - "type": "node", - "childType": "Amount Received", - "autoAdd": true - }, - { - "name": "feesPaid", - "type": "node", - "childType": "Fees Paid", - "autoAdd": true - }, - { - "name": "feesToBePaid", - "type": "node", - "childType": "Fees To Be Paid", - "autoAdd": true - } - ] - }, - { - "type": "User Defined Statistic", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "This", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Position Statistics->" - }, - "propertyNameAtParent": "userDefinedStatistics", - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ] - }, - { - "type": "Profit Loss", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "profitLoss" - }, - { - "type": "Hit Ratio", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "hitRatio" - }, - { - "type": "Days", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Position Statistics->Order Statistics->" - }, - "propertyNameAtParent": "days" - }, - { - "type": "Size Filled", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->Stage Base Asset->Stage Quoted Asset->" - }, - "propertyNameAtParent": "sizeFilled" - }, - { - "type": "Percentage Filled", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Statistics->" - }, - "propertyNameAtParent": "percentageFilled" - }, - { - "type": "Actual Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Statistics->" - }, - "propertyNameAtParent": "actualRate" - }, - { - "type": "Fees Paid", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->Stage Base Asset->Stage Quoted Asset->" - }, - "propertyNameAtParent": "feesPaid" - }, - { - "type": "ROI", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "ROI" - }, - { - "type": "Annualized Rate Of Return", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "annualizedRateOfReturn" - }, - { - "type": "Hit Fail", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Statistics->Position Statistics->Position Base Asset->Position Quoted Asset->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "hitFail" - }, - { - "type": "Current", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Engine->" - }, - "propertyNameAtParent": "current", - "properties": [ - { - "name": "episode", - "type": "node", - "childType": "Episode", - "autoAdd": true - }, - { - "name": "strategy", - "type": "node", - "childType": "Strategy", - "autoAdd": true - }, - { - "name": "position", - "type": "node", - "childType": "Position", - "autoAdd": true - }, - { - "name": "strategyTriggerStage", - "type": "node", - "childType": "Strategy Trigger Stage", - "autoAdd": true - }, - { - "name": "strategyOpenStage", - "type": "node", - "childType": "Strategy Open Stage", - "autoAdd": true - }, - { - "name": "strategyManageStage", - "type": "node", - "childType": "Strategy Manage Stage", - "autoAdd": true - }, - { - "name": "strategyCloseStage", - "type": "node", - "childType": "Strategy Close Stage", - "autoAdd": true - } - ] - }, - { - "type": "Balance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "balance" - }, - { - "type": "Begin Balance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "beginBalance" - }, - { - "type": "End Balance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode Base Asset->Episode Quoted Asset->" - }, - "propertyNameAtParent": "endBalance" - }, - { - "type": "Distance To Event", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "distanceToEvent", - "properties": [ - { - "name": "triggerOn", - "type": "node", - "childType": "Trigger On", - "autoAdd": true - }, - { - "name": "triggerOff", - "type": "node", - "childType": "Trigger Off", - "autoAdd": true - }, - { - "name": "takePosition", - "type": "node", - "childType": "Take Position", - "autoAdd": true - }, - { - "name": "closePosition", - "type": "node", - "childType": "Close Position", - "autoAdd": true - }, - { - "name": "nextPhase", - "type": "node", - "childType": "Next Phase", - "autoAdd": true - }, - { - "name": "moveToPhase", - "type": "node", - "childType": "Move To Phase", - "autoAdd": true - }, - { - "name": "createOrder", - "type": "node", - "childType": "Create Order", - "autoAdd": true - }, - { - "name": "cancelOrder", - "type": "node", - "childType": "Cancel Order", - "autoAdd": true - }, - { - "name": "closeOrder", - "type": "node", - "childType": "Close Order", - "autoAdd": true - } - ] - }, - { - "type": "Trigger On", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "triggerOn" - }, - { - "type": "Trigger Off", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "triggerOff" - }, - { - "type": "Take Position", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "takePosition" - }, - { - "type": "Close Position", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "closePosition" - }, - { - "type": "Next Phase", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "nextPhase" - }, - { - "type": "Move To Phase", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "moveToPhase" - }, - { - "type": "Create Order", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "createOrder" - }, - { - "type": "Cancel Order", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "cancelOrder" - }, - { - "type": "Close Order", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Distance To Event->" - }, - "propertyNameAtParent": "closeOrder" - }, - { - "type": "Strategy Trigger Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->" - }, - "propertyNameAtParent": "strategyTriggerStage", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - } - ] - }, - { - "type": "Strategy Manage Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->" - }, - "propertyNameAtParent": "strategyManageStage", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - } - ] - }, - { - "type": "Strategy Open Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->" - }, - "propertyNameAtParent": "strategyOpenStage", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - }, - { - "name": "stageDefinedIn", - "type": "node", - "childType": "Stage Defined In", - "autoAdd": true - }, - { - "name": "stageBaseAsset", - "type": "node", - "childType": "Stage Base Asset", - "autoAdd": true - }, - { - "name": "stageQuotedAsset", - "type": "node", - "childType": "Stage Quoted Asset", - "autoAdd": true - } - ] - }, - { - "type": "Strategy Close Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->" - }, - "propertyNameAtParent": "strategyCloseStage", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - }, - { - "name": "stageDefinedIn", - "type": "node", - "childType": "Stage Defined In", - "autoAdd": true - }, - { - "name": "stageBaseAsset", - "type": "node", - "childType": "Stage Base Asset", - "autoAdd": true - }, - { - "name": "stageQuotedAsset", - "type": "node", - "childType": "Stage Quoted Asset", - "autoAdd": true - } - ] - }, - { - "type": "Strategy", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->Last->" - }, - "propertyNameAtParent": "strategy", - "properties": [ - { - "name": "serialNumber", - "type": "node", - "childType": "Serial Number", - "autoAdd": true - }, - { - "name": "identifier", - "type": "node", - "childType": "Identifier", - "autoAdd": true - }, - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "situationName", - "type": "node", - "childType": "Situation Name", - "autoAdd": true - }, - { - "name": "index", - "type": "node", - "childType": "Index", - "autoAdd": true - }, - { - "name": "strategyName", - "type": "node", - "childType": "Strategy Name", - "autoAdd": true - }, - { - "name": "strategyCounters", - "type": "node", - "childType": "Strategy Counters", - "autoAdd": true - } - ] - }, - { - "type": "Strategy Name", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy->" - }, - "propertyNameAtParent": "strategyName" - }, - { - "type": "Index", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy->Candle->" - }, - "propertyNameAtParent": "index" - }, - { - "type": "Status", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"Not Open\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "status" - }, - { - "type": "Situation Name", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy->Position->" - }, - "propertyNameAtParent": "situationName" - }, - { - "type": "Algorithm Name", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "algorithmName" - }, - { - "type": "Order Name", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "orderName" - }, - { - "type": "Serial Number", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->" - }, - "propertyNameAtParent": "serialNumber" - }, - { - "type": "Identifier", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Market Order->Limit Order->" - }, - "propertyNameAtParent": "identifier" - }, - { - "type": "Exchange Id", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "exchangeId" - }, - { - "type": "Lock", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"Open\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "lock" - }, - { - "type": "Begin", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->" - }, - "propertyNameAtParent": "begin" - }, - { - "type": "End", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Candle->Cycle->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->Stop Loss->Take Profit->" - }, - "propertyNameAtParent": "end" - }, - { - "type": "Last Begin", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Cycle->" - }, - "propertyNameAtParent": "lastBegin" - }, - { - "type": "Last End", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Cycle->" - }, - "propertyNameAtParent": "lastEnd" - }, - { - "type": "Open", - "menuItems": [ - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Candle->" - }, - "propertyNameAtParent": "open" - }, - { - "type": "Close", - "menuItems": [ - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Candle->" - }, - "propertyNameAtParent": "close" - }, - { - "type": "Min", - "menuItems": [ - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Candle->" - }, - "propertyNameAtParent": "min" - }, - { - "type": "Max", - "menuItems": [ - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Candle->" - }, - "propertyNameAtParent": "max" - }, - { - "type": "Begin Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "beginRate" - }, - { - "type": "End Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->Position->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "endRate" - }, - { - "type": "Position", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Current->Last->" - }, - "propertyNameAtParent": "position", - "properties": [ - { - "name": "serialNumber", - "type": "node", - "childType": "Serial Number", - "autoAdd": true - }, - { - "name": "identifier", - "type": "node", - "childType": "Identifier", - "autoAdd": true - }, - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "beginRate", - "type": "node", - "childType": "Begin Rate", - "autoAdd": true - }, - { - "name": "endRate", - "type": "node", - "childType": "End Rate", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "situationName", - "type": "node", - "childType": "Situation Name", - "autoAdd": true - }, - { - "name": "entryTargetRate", - "type": "node", - "childType": "Entry Target Rate", - "autoAdd": true - }, - { - "name": "exitTargetRate", - "type": "node", - "childType": "Exit Target Rate", - "autoAdd": true - }, - { - "name": "stopLoss", - "type": "node", - "childType": "Stop Loss", - "autoAdd": true - }, - { - "name": "takeProfit", - "type": "node", - "childType": "Take Profit", - "autoAdd": true - }, - { - "name": "positionCounters", - "type": "node", - "childType": "Position Counters", - "autoAdd": true - }, - { - "name": "positionStatistics", - "type": "node", - "childType": "Position Statistics", - "autoAdd": true - }, - { - "name": "positionBaseAsset", - "type": "node", - "childType": "Position Base Asset", - "autoAdd": true - }, - { - "name": "positionQuotedAsset", - "type": "node", - "childType": "Position Quoted Asset", - "autoAdd": true - } - ] - }, - { - "type": "Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Order->Limit Order->" - }, - "propertyNameAtParent": "rate" - }, - { - "type": "Entry Target Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "entryTargetRate" - }, - { - "type": "Exit Target Rate", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position->" - }, - "propertyNameAtParent": "exitTargetRate" - }, - { - "type": "Stage Defined In", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Strategy Open Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "stageDefinedIn" - }, - { - "type": "Size", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->" - }, - "propertyNameAtParent": "size" - }, - { - "type": "Actual Size", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->" - }, - "propertyNameAtParent": "actualSize" - }, - { - "type": "Amount Received", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->" - }, - "propertyNameAtParent": "amountReceived" - }, - { - "type": "Fees To Be Paid", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Order Base Asset->Order Quoted Asset->" - }, - "propertyNameAtParent": "feesToBePaid" - }, - { - "type": "Entry Target Size", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position Base Asset->Position Quoted Asset->" - }, - "propertyNameAtParent": "entryTargetSize" - }, - { - "type": "Exit Target Size", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Position Base Asset->Position Quoted Asset->" - }, - "propertyNameAtParent": "exitTargetSize" - }, - { - "type": "Size Placed", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stage Base Asset->Stage Quoted Asset->" - }, - "propertyNameAtParent": "sizePlaced" - }, - { - "type": "Target Size", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Stage Base Asset->Stage Quoted Asset->" - }, - "propertyNameAtParent": "targetSize" - }, - { - "type": "Exit Type", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": \"No Exit\"\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->Strategy->->Position->Market Order->Limit Order->Strategy Trigger Stage->Strategy Open Stage->Strategy Manage Stage->Strategy Close Stage->" - }, - "propertyNameAtParent": "exitType" - }, - { - "type": "Process Date", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": 0\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "processDate" - }, - { - "type": "Head Of The Market", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{\n\"initialValue\": false\n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "headOfTheMarket" - }, - { - "type": "Last", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Engine->" - }, - "propertyNameAtParent": "last", - "properties": [ - { - "name": "position", - "type": "node", - "childType": "Position", - "autoAdd": true - }, - { - "name": "strategy", - "type": "node", - "childType": "Strategy", - "autoAdd": true - }, - { - "name": "limitOrders", - "type": "node", - "childType": "Limit Order", - "autoAdd": true - }, - { - "name": "marketOrders", - "type": "node", - "childType": "Market Order", - "autoAdd": true - } - ] - }, - { - "type": "Candle", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "candle", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "open", - "type": "node", - "childType": "Open", - "autoAdd": true - }, - { - "name": "close", - "type": "node", - "childType": "Close", - "autoAdd": true - }, - { - "name": "min", - "type": "node", - "childType": "Min", - "autoAdd": true - }, - { - "name": "max", - "type": "node", - "childType": "Max", - "autoAdd": true - }, - { - "name": "index", - "type": "node", - "childType": "Index", - "autoAdd": true - } - ] - }, - { - "type": "Cycle", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Path", - "label": "Copy Node Path", - "iconPathOn": "copy-path", - "iconPathOff": "copy-path", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Value", - "label": "Copy Node Value", - "iconPathOn": "copy-value", - "iconPathOff": "copy-value", - "actionFunction": "payload.executeAction" - }, - { - "action": "Copy Node Type", - "label": "Copy Node Type", - "iconPathOn": "copy-type", - "iconPathOff": "copy-type", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Episode->" - }, - "propertyNameAtParent": "cycle", - "properties": [ - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "lastBegin", - "type": "node", - "childType": "Last Begin", - "autoAdd": true - }, - { - "name": "lastEnd", - "type": "node", - "childType": "Last End", - "autoAdd": true - } - ] - }, - { - "type": "Exchange Orders", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "marketBuyOrders", - "label": "Add Market Buy Orders", - "relatedUiObject": "Market Buy Orders", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "marketSellOrders", - "label": "Add Market Sell Orders", - "relatedUiObject": "Market Sell Orders", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "limitBuyOrders", - "label": "Add Limit Buy Orders", - "relatedUiObject": "Limit Buy Orders", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "limitSellOrders", - "label": "Add Limit Sell Orders", - "relatedUiObject": "Limit Sell Orders", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Engine->" - }, - "propertyNameAtParent": "exchangeOrders", - "properties": [ - { - "name": "marketBuyOrders", - "type": "node", - "childType": "Market Buy Orders", - "autoAdd": true - }, - { - "name": "marketSellOrders", - "type": "node", - "childType": "Market Sell Orders", - "autoAdd": true - }, - { - "name": "limitBuyOrders", - "type": "node", - "childType": "Limit Buy Orders", - "autoAdd": true - }, - { - "name": "limitSellOrders", - "type": "node", - "childType": "Limit Sell Orders", - "autoAdd": true - } - ] - }, - { - "type": "Market Buy Orders", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market Order", - "relatedUiObject": "Market Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Orders->" - }, - "propertyNameAtParent": "marketBuyOrders", - "properties": [ - { - "name": "marketOrders", - "type": "array", - "childType": "Market Order", - "autoAdd": false - } - ] - }, - { - "type": "Market Order", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Buy Orders->Market Sell Orders->Last->" - }, - "propertyNameAtParent": "marketOrders", - "properties": [ - { - "name": "serialNumber", - "type": "node", - "childType": "Serial Number", - "autoAdd": true - }, - { - "name": "identifier", - "type": "node", - "childType": "Identifier", - "autoAdd": true - }, - { - "name": "exchangeId", - "type": "node", - "childType": "Exchange Id", - "autoAdd": true - }, - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "rate", - "type": "node", - "childType": "Rate", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "orderName", - "type": "node", - "childType": "Order Name", - "autoAdd": true - }, - { - "name": "algorithmName", - "type": "node", - "childType": "Algorithm Name", - "autoAdd": true - }, - { - "name": "situationName", - "type": "node", - "childType": "Situation Name", - "autoAdd": true - }, - { - "name": "orderCounters", - "type": "node", - "childType": "Order Counters", - "autoAdd": true - }, - { - "name": "lock", - "type": "node", - "childType": "Lock", - "autoAdd": true - }, - { - "name": "orderBaseAsset", - "type": "node", - "childType": "Order Base Asset", - "autoAdd": true - }, - { - "name": "orderQuotedAsset", - "type": "node", - "childType": "Order Quoted Asset", - "autoAdd": true - }, - { - "name": "orderStatistics", - "type": "node", - "childType": "Order Statistics", - "autoAdd": true - } - ] - }, - { - "type": "Market Sell Orders", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market Order", - "relatedUiObject": "Market Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Orders->" - }, - "propertyNameAtParent": "marketSellOrders", - "properties": [ - { - "name": "marketOrders", - "type": "array", - "childType": "Market Order", - "autoAdd": false - } - ] - }, - { - "type": "Limit Buy Orders", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Limit Order", - "relatedUiObject": "Limit Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Orders->" - }, - "propertyNameAtParent": "limitBuyOrders", - "properties": [ - { - "name": "limitOrders", - "type": "array", - "childType": "Limit Order", - "autoAdd": false - } - ] - }, - { - "type": "Limit Sell Orders", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Limit Order", - "relatedUiObject": "Limit Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Orders->" - }, - "propertyNameAtParent": "limitSellOrders", - "properties": [ - { - "name": "limitOrders", - "type": "array", - "childType": "Limit Order", - "autoAdd": false - } - ] - }, - { - "type": "Limit Order", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Limit Buy Orders->Limit Sell Orders->Last->" - }, - "propertyNameAtParent": "limitOrders", - "properties": [ - { - "name": "serialNumber", - "type": "node", - "childType": "Serial Number", - "autoAdd": true - }, - { - "name": "identifier", - "type": "node", - "childType": "Identifier", - "autoAdd": true - }, - { - "name": "exchangeId", - "type": "node", - "childType": "Exchange Id", - "autoAdd": true - }, - { - "name": "begin", - "type": "node", - "childType": "Begin", - "autoAdd": true - }, - { - "name": "end", - "type": "node", - "childType": "End", - "autoAdd": true - }, - { - "name": "rate", - "type": "node", - "childType": "Rate", - "autoAdd": true - }, - { - "name": "exitType", - "type": "node", - "childType": "Exit Type", - "autoAdd": true - }, - { - "name": "status", - "type": "node", - "childType": "Status", - "autoAdd": true - }, - { - "name": "orderName", - "type": "node", - "childType": "Order Name", - "autoAdd": true - }, - { - "name": "algorithmName", - "type": "node", - "childType": "Algorithm Name", - "autoAdd": true - }, - { - "name": "situationName", - "type": "node", - "childType": "Situation Name", - "autoAdd": true - }, - { - "name": "orderCounters", - "type": "node", - "childType": "Order Counters", - "autoAdd": true - }, - { - "name": "lock", - "type": "node", - "childType": "Lock", - "autoAdd": true - }, - { - "name": "orderBaseAsset", - "type": "node", - "childType": "Order Base Asset", - "autoAdd": true - }, - { - "name": "orderQuotedAsset", - "type": "node", - "childType": "Order Quoted Asset", - "autoAdd": true - }, - { - "name": "orderStatistics", - "type": "node", - "childType": "Order Statistics", - "autoAdd": true - } - ] - }, - { - "type": "Trading Parameters", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Parameters", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->" - }, - "properties": [ - { - "name": "sessionBaseAsset", - "type": "node", - "childType": "Session Base Asset", - "autoAdd": true - }, - { - "name": "sessionQuotedAsset", - "type": "node", - "childType": "Session Quoted Asset", - "autoAdd": true - }, - { - "name": "timeRange", - "type": "node", - "childType": "Time Range", - "autoAdd": true - }, - { - "name": "timeFrame", - "type": "node", - "childType": "Time Frame", - "autoAdd": true - }, - { - "name": "slippage", - "type": "node", - "childType": "Slippage", - "autoAdd": true - }, - { - "name": "feeStructure", - "type": "node", - "childType": "Fee Structure", - "autoAdd": true - }, - { - "name": "snapshots", - "type": "node", - "childType": "Snapshots", - "autoAdd": true - }, - { - "name": "heartbeats", - "type": "node", - "childType": "Heartbeats", - "autoAdd": true - }, - { - "name": "userDefinedParameters", - "type": "node", - "childType": "User Defined Parameters", - "autoAdd": true - } - ], - "propertyNameAtParent": "tradingParameters" - }, - { - "type": "Learning Parameters", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Parameters", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Learning Session->" - }, - "properties": [ - { - "name": "learningAlgorithm", - "type": "node", - "childType": "Learning Algorithm", - "autoAdd": true - }, - { - "name": "heartbeats", - "type": "node", - "childType": "Heartbeats", - "autoAdd": true - }, - { - "name": "userDefinedParameters", - "type": "node", - "childType": "User Defined Parameters", - "autoAdd": true - } - ], - "propertyNameAtParent": "learningParameters" - }, - { - "type": "Trading System Reference", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "propertyNameAtParent": "tradingSystemReference" - }, - { - "type": "Trading Engine Reference", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Trading Engine->" - }, - "propertyNameAtParent": "tradingEngineReference" - }, - { - "type": "Session Base Asset", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{\n\"initialBalance\": 1,\n\"minimumBalance\": 0.5\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Exchange Account Asset->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "alternativeIcons": "Use Reference Grandparent", - "title": [ - "Use Reference Grandparent" - ], - "propertyNameAtParent": "sessionBaseAsset" - }, - { - "type": "Session Quoted Asset", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{\n\"initialBalance\": 0\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Exchange Account Asset->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "alternativeIcons": "Use Reference Grandparent", - "title": [ - "Use Reference Grandparent" - ], - "propertyNameAtParent": "sessionQuotedAsset" - }, - { - "type": "Market Base Asset", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Asset->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "propertyNameAtParent": "baseAsset" - }, - { - "type": "Market Quoted Asset", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Asset->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "propertyNameAtParent": "quotedAsset" - }, - { - "type": "Time Range", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"initialDatetime\": \"2020-09-01\",\n\"finalDatetime\": \"2020-09-02\" \n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "propertyNameAtParent": "timeRange" - }, - { - "type": "Time Frame", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"label\": \"01-hs\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "propertyNameAtParent": "timeFrame" - }, - { - "type": "Slippage", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"marketOrderRate\": 0.1,\n\"stopLoss\": 0.2,\n\"takeProfit\": 0.3\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "propertyNameAtParent": "slippage" - }, - { - "type": "Fee Structure", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"maker\": 0.1,\n\"taker\": 0.1\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "propertyNameAtParent": "feeStructure" - }, - { - "type": "Snapshots", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"strategy\": true,\n\"position\": true\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->" - }, - "propertyNameAtParent": "snapshots" - }, - { - "type": "Heartbeats", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"date\": true,\n\"candleIndex\": false\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->Learning Parameters->" - }, - "propertyNameAtParent": "heartbeats" - }, - { - "type": "Learning Algorithm", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"codeName\": \"\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Learning Parameters->" - }, - "propertyNameAtParent": "learningAlgorithm" - }, - { - "type": "User Defined Parameters", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"param1Name\": \"A text string value example\",\n\"param2Name\": 0\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Parameters->Learning Parameters->" - }, - "propertyNameAtParent": "userDefinedParameters" - }, - { - "type": "Time Frames Filter", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"dailyTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n\"marketTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\"]\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Indicator Bot Instance->" - }, - "propertyNameAtParent": "timeFramesFilter" - }, - { - "type": "Paper Trading Session", - "menuItems": [ - { - "action": "Run Trading Session", - "label": "Run", - "workingLabel": "Run Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Run", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Trading Session", - "label": "Resume", - "workingLabel": "Resume Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Resumed", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{ \n\"folderName\": \"\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Process Instance->" - }, - "properties": [ - { - "name": "tradingParameters", - "type": "node", - "childType": "Trading Parameters", - "autoAdd": true - }, - { - "name": "tradingSystemReference", - "type": "node", - "childType": "Trading System Reference", - "autoAdd": true - }, - { - "name": "tradingEngineReference", - "type": "node", - "childType": "Trading Engine Reference", - "autoAdd": true - }, - { - "name": "socialBots", - "type": "node", - "childType": "Social Bots" - } - ], - "propertyNameAtParent": "session" - }, - { - "type": "Forward Testing Session", - "menuItems": [ - { - "action": "Run Trading Session", - "label": "Run", - "workingLabel": "Run Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Run", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Trading Session", - "label": "Resume", - "workingLabel": "Resume Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Resumed", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{ \n\"folderName\": \"Type the name of the folder where you wish to store the logs of this session\",\n\"balancePercentage\": \"Type the percentage of the balance to be used in this test\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Process Instance->" - }, - "properties": [ - { - "name": "tradingParameters", - "type": "node", - "childType": "Trading Parameters", - "autoAdd": true - }, - { - "name": "tradingSystemReference", - "type": "node", - "childType": "Trading System Reference", - "autoAdd": true - }, - { - "name": "tradingEngineReference", - "type": "node", - "childType": "Trading Engine Reference", - "autoAdd": true - }, - { - "name": "socialBots", - "type": "node", - "childType": "Social Bots" - } - ], - "propertyNameAtParent": "session" - }, - { - "type": "Key Reference", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Task->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Exchange Account Key->" - }, - "propertyNameAtParent": "keyReference" - }, - { - "type": "Live Trading Session", - "menuItems": [ - { - "action": "Run Trading Session", - "label": "Run", - "workingLabel": "Run Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Run", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Trading Session", - "label": "Resume", - "workingLabel": "Resume Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Resumed", - "secondaryAction": "Stop Trading Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"folderName\": \"Your-Session-Folder-Name\"\n}" - }, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Process Instance->" - }, - "properties": [ - { - "name": "tradingParameters", - "type": "node", - "childType": "Trading Parameters", - "autoAdd": true - }, - { - "name": "tradingSystemReference", - "type": "node", - "childType": "Trading System Reference", - "autoAdd": true - }, - { - "name": "tradingEngineReference", - "type": "node", - "childType": "Trading Engine Reference", - "autoAdd": true - }, - { - "name": "socialBots", - "type": "node", - "childType": "Social Bots" - } - ], - "propertyNameAtParent": "session" - }, - { - "type": "Learning Session", - "menuItems": [ - { - "action": "Run Learning Session", - "label": "Run", - "workingLabel": "Run Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Run", - "secondaryAction": "Stop Learning Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Learning Session", - "label": "Resume", - "workingLabel": "Resume Request Sent", - "workDoneLabel": "Session Running", - "workFailedLabel": "Session Cannot be Resumed", - "secondaryAction": "Stop Learning Session", - "secondaryLabel": "Stop", - "secondaryWorkingLabel": "Stopping...", - "secondaryWorkDoneLabel": "Session Stopped", - "secondaryWorkFailedLabel": "Session Cannot be Stopped", - "secondaryIcon": "stop", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Trading Parameters", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"folderName\": \"Your-Session-Folder-Name\"\n}" - }, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Learning Process Instance->" - }, - "properties": [ - { - "name": "learningParameters", - "type": "node", - "childType": "Learning Parameters", - "autoAdd": true - }, - { - "name": "tradingSystemReference", - "type": "node", - "childType": "Trading System Reference", - "autoAdd": true - }, - { - "name": "tradingEngineReference", - "type": "node", - "childType": "Trading Engine Reference", - "autoAdd": true - }, - { - "name": "socialBots", - "type": "node", - "childType": "Social Bots" - } - ], - "propertyNameAtParent": "session" - }, - { - "type": "Sensor Bot Instance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Instance", - "relatedUiObject": "Sensor Process Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"startDate\": \"2020-01-01\"\n}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Task->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Sensor Process Instance", - "autoAdd": false - } - ], - "propertyNameAtParent": "bot" - }, - { - "type": "Indicator Bot Instance", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "timeFramesFilter", - "label": "Add Time Frames Filter", - "relatedUiObject": "Time Frames Filter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Process Instance", - "relatedUiObject": "Indicator Process Instance", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Task->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Indicator Process Instance", - "autoAdd": false - }, - { - "name": "timeFramesFilter", - "type": "node", - "childType": "Time Frames Filter" - } - ], - "propertyNameAtParent": "bot" - }, - { - "type": "Data Mine", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Sensor Bot", - "relatedUiObject": "Sensor Bot", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Indicator Bot", - "relatedUiObject": "Indicator Bot", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Plotter", - "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "isHierarchyHead": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 0, - "initialValues": { - "config": "{ \n\"codeName\": \"Type a name with no spaces or dashes\"\n}" - }, - "properties": [ - { - "name": "sensorBots", - "type": "array", - "childType": "Sensor Bot" - }, - { - "name": "indicatorBots", - "type": "array", - "childType": "Indicator Bot" - }, - { - "name": "plotters", - "type": "array", - "childType": "Plotter" - } - ] - }, - { - "type": "Trading Mine", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Trading Bot", - "relatedUiObject": "Trading Bot", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Plotter", - "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "isHierarchyHead": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 0, - "initialValues": { - "config": "{ \n\"codeName\": \"Type a name with no spaces or dashes\"\n}" - }, - "properties": [ - { - "name": "tradingBots", - "type": "array", - "childType": "Trading Bot" - }, - { - "name": "plotters", - "type": "array", - "childType": "Plotter" - } - ] - }, - { - "type": "Learning Mine", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Learning Bot", - "relatedUiObject": "Learning Bot", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Plotter", - "relatedUiObject": "Plotter", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "isHierarchyHead": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 0, - "initialValues": { - "config": "{ \n\"codeName\": \"Type a name with no spaces or dashes\"\n}" - }, - "properties": [ - { - "name": "learningBots", - "type": "array", - "childType": "Learning Bot" - }, - { - "name": "plotters", - "type": "array", - "childType": "Plotter" - } - ] - }, - { - "type": "Sensor Bot", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Definition", - "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition", - "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Process Definition", - "autoAdd": true - }, - { - "name": "products", - "type": "array", - "childType": "Product Definition", - "autoAdd": true - } - ], - "propertyNameAtParent": "sensorBots" - }, - { - "type": "Process Definition", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Calculations Procedure", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"Multi-Period-Market|Daily\", \n \"normalWaitTime\": 0, \n \"retryWaitTime\": 10000, \n \"framework\": { \n \"name\": \"Multi-Period-Market|Daily\" \n }\n}" - }, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Sensor Bot->Indicator Bot->Trading Bot->Learning Bot->" - }, - "properties": [ - { - "name": "processOutput", - "type": "node", - "childType": "Process Output", - "autoAdd": true - }, - { - "name": "processDependencies", - "type": "node", - "childType": "Process Dependencies", - "autoAdd": true - }, - { - "name": "statusReport", - "type": "node", - "childType": "Status Report", - "autoAdd": true - }, - { - "name": "executionStartedEvent", - "type": "node", - "childType": "Execution Started Event", - "autoAdd": true - }, - { - "name": "executionFinishedEvent", - "type": "node", - "childType": "Execution Finished Event", - "autoAdd": true - } - ], - "propertyNameAtParent": "processes" - }, - { - "type": "Process Output", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Output Dataset", - "relatedUiObject": "Output Dataset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Output Dataset Folder", - "relatedUiObject": "Output Dataset Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Output Datasets", - "label": "Add All Output Datasets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Output Dataset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "properties": [ - { - "name": "outputDatasets", - "type": "array", - "childType": "Output Dataset", - "autoAdd": false - }, - { - "name": "outputDatasetFolders", - "type": "array", - "childType": "Output Dataset Folder", - "autoAdd": false - } - ], - "propertyNameAtParent": "processOutput" - }, - { - "type": "Process Dependencies", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Status Dependency", - "relatedUiObject": "Status Dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Mine Dependencies", - "relatedUiObject": "Data Mine Data Dependencies", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Mine Dependencies", - "label": "Add All Data Mine Dependencies", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Mine Data Dependencies", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Dependency", - "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "properties": [ - { - "name": "statusDependencies", - "type": "array", - "childType": "Status Dependency", - "autoAdd": true - }, - { - "name": "dataDependencies", - "type": "array", - "childType": "Data Dependency", - "autoAdd": false - }, - { - "name": "dataMineDataDependencies", - "type": "array", - "childType": "Data Mine Data Dependencies", - "autoAdd": false - } - ], - "propertyNameAtParent": "processDependencies" - }, - { - "type": "Status Dependency", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"mainUtility\": \"Self Reference|Market Starting Point|Market Ending Point\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent Parent" - ], - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Status Report->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Process Dependencies->" - }, - "propertyNameAtParent": "statusDependencies" - }, - { - "type": "Status Report", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "propertyNameAtParent": "statusReport" - }, - { - "type": "Execution Started Event", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent Parent" - ], - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Execution Finished Event->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Process Definition->Trading Process Instance->Learning Process Instance->" - }, - "propertyNameAtParent": "executionStartedEvent" - }, - { - "type": "Execution Finished Event", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Process Definition->" - }, - "propertyNameAtParent": "executionFinishedEvent" - }, - { - "type": "Output Dataset Folder", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Output Dataset", - "relatedUiObject": "Output Dataset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Output Dataset Folder", - "relatedUiObject": "Output Dataset Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Process Output->Output Dataset Folder->" - }, - "properties": [ - { - "name": "outputDatasets", - "type": "array", - "childType": "Output Dataset", - "autoAdd": false - }, - { - "name": "outputDatasetFolders", - "type": "array", - "childType": "Output Dataset Folder", - "autoAdd": false - } - ], - "propertyNameAtParent": "outputDatasetFolders" - }, - { - "type": "Product Definition Folder", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Product Definition", - "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition Folder", - "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Bot->Learning Bot->Product Definition Folder->" - }, - "properties": [ - { - "name": "products", - "type": "array", - "childType": "Product Definition", - "autoAdd": false - }, - { - "name": "productDefinitionFolders", - "type": "array", - "childType": "Product Definition Folder", - "autoAdd": false - } - ], - "propertyNameAtParent": "productDefinitionFolders" - }, - { - "type": "Product Definition", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "record", - "label": "Add Record Definition", - "relatedUiObject": "Record Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Dataset Definition", - "relatedUiObject": "Dataset Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Calculations Procedure", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"Product-Name\", \n \"singularVariableName\": \"productName\", \n \"pluralVariableName\": \"productNames\"\n}" - }, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Plotter Module->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Sensor Bot->Indicator Bot->Trading Bot->Learning Bot->Product Definition Folder->" - }, - "properties": [ - { - "name": "datasets", - "type": "array", - "childType": "Dataset Definition", - "autoAdd": true - }, - { - "name": "record", - "type": "node", - "childType": "Record Definition", - "autoAdd": true - }, - { - "name": "calculations", - "type": "node", - "childType": "Calculations Procedure" - }, - { - "name": "dataBuilding", - "type": "node", - "childType": "Data Building Procedure" - } - ], - "propertyNameAtParent": "products" - }, - { - "type": "Dataset Definition", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"configuration\": \"Get the appropriate configuration from the documentation\"\n}" - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Product Definition->" - }, - "propertyNameAtParent": "datasets" - }, - { - "type": "Indicator Bot", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Definition", - "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition", - "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Process Definition", - "autoAdd": true - }, - { - "name": "products", - "type": "array", - "childType": "Product Definition", - "autoAdd": true - } - ], - "propertyNameAtParent": "indicatorBots" - }, - { - "type": "Output Dataset", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent", - "Use Reference Parent Parent" - ], - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Dataset Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Process Output->Output Dataset Folder->" - }, - "propertyNameAtParent": "outputDatasets" - }, - { - "type": "Data Dependency", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent", - "Use Reference Parent" - ], - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Dataset Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Process Dependencies->" - }, - "propertyNameAtParent": "dataDependencies" - }, - { - "type": "Record Definition", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Record Property", - "relatedUiObject": "Record Property", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Product Definition->" - }, - "properties": [ - { - "name": "properties", - "type": "array", - "childType": "Record Property", - "autoAdd": true - } - ], - "propertyNameAtParent": "record" - }, - { - "type": "Record Property", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n \"codeName\": \"\",\n \"isString\": false,\n \"isCalculated\": false\n}" - }, - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Record Definition->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula" - } - ], - "propertyNameAtParent": "properties" - }, - { - "type": "Formula", - "menuItems": [ - { - "action": "Edit", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.formulaEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "formula": true - }, - "initialValues": { - "code": "// Type your formula" - }, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Target Size In Base Asset->Target Size In Quoted Asset->Target Rate->Phase->Record Property->Simulated Actual Rate->Situation->Indicator Function->" - }, - "propertyNameAtParent": "formula" - }, - { - "type": "Announcement Formula", - "menuItems": [ - { - "action": "Edit", - "label": "Edit", - "iconPathOn": "javascript-code", - "iconPathOff": "javascript-code", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.formulaEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "formula": true - }, - "initialValues": { - "code": "// Type your formula" - }, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Announcement->" - }, - "propertyNameAtParent": "announcementFormula" - }, - { - "type": "Calculations Procedure", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "initialization", - "label": "Add Procedure Initialization", - "relatedUiObject": "Procedure Initialization", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "loop", - "label": "Add Procedure Loop", - "relatedUiObject": "Procedure Loop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Product Definition->" - }, - "properties": [ - { - "name": "initialization", - "type": "node", - "childType": "Procedure Initialization", - "autoAdd": true - }, - { - "name": "loop", - "type": "node", - "childType": "Procedure Loop", - "autoAdd": true - } - ], - "propertyNameAtParent": "calculations" - }, - { - "type": "Procedure Initialization", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "label": "Add Code", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Calculations Procedure->Data Building Procedure->" - }, - "properties": [ - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code", - "autoAdd": true - } - ], - "propertyNameAtParent": "initialization" - }, - { - "type": "Procedure Loop", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "javascriptCode", - "label": "Add Code", - "relatedUiObject": "Javascript Code", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Calculations Procedure->Data Building Procedure->" - }, - "properties": [ - { - "name": "javascriptCode", - "type": "node", - "childType": "Javascript Code", - "autoAdd": true - } - ], - "propertyNameAtParent": "loop" - }, - { - "type": "Data Building Procedure", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "initialization", - "label": "Add Procedure Initialization", - "relatedUiObject": "Procedure Initialization", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "loop", - "label": "Add Procedure Loop", - "relatedUiObject": "Procedure Loop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Product Definition->" - }, - "properties": [ - { - "name": "loop", - "type": "node", - "childType": "Procedure Loop", - "autoAdd": true - }, - { - "name": "initialization", - "type": "node", - "childType": "Procedure Initialization", - "autoAdd": true - } - ], - "propertyNameAtParent": "dataBuilding" - }, - { - "type": "Trading Bot", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Definition", - "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition", - "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition Folder", - "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Trading Mine->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Process Definition", - "autoAdd": true - }, - { - "name": "products", - "type": "array", - "childType": "Product Definition", - "autoAdd": true - }, - { - "name": "productDefinitionFolders", - "type": "array", - "childType": "Product Definition Folder", - "autoAdd": true - } - ], - "propertyNameAtParent": "tradingBots" - }, - { - "type": "Learning Bot", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Process Definition", - "relatedUiObject": "Process Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition", - "relatedUiObject": "Product Definition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Product Definition Folder", - "relatedUiObject": "Product Definition Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Learning Mine->" - }, - "properties": [ - { - "name": "processes", - "type": "array", - "childType": "Process Definition", - "autoAdd": true - }, - { - "name": "products", - "type": "array", - "childType": "Product Definition", - "autoAdd": true - }, - { - "name": "productDefinitionFolders", - "type": "array", - "childType": "Product Definition Folder", - "autoAdd": true - } - ], - "propertyNameAtParent": "learningBots" - }, - { - "type": "Plotter", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Plotter Module", - "relatedUiObject": "Plotter Module", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "properties": [ - { - "name": "modules", - "type": "array", - "childType": "Plotter Module", - "autoAdd": true - } - ], - "propertyNameAtParent": "plotters" - }, - { - "type": "Trading System", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Trading Strategy", - "relatedUiObject": "Trading Strategy", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "dynamicIndicators", - "label": "Add Dynamic Indicators", - "relatedUiObject": "Dynamic Indicators", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "properties": [ - { - "name": "tradingStrategies", - "type": "array", - "childType": "Trading Strategy", - "autoAdd": true - }, - { - "name": "dynamicIndicators", - "type": "node", - "childType": "Dynamic Indicators", - "autoAdd": true - } - ], - "propertyNameAtParent": "tradingSystem" - }, - { - "type": "Trading Strategy", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Stages", - "relatedUiObject": "Trading Strategy", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Trading System->" - }, - "properties": [ - { - "name": "triggerStage", - "type": "node", - "childType": "Trigger Stage", - "autoAdd": true - }, - { - "name": "openStage", - "type": "node", - "childType": "Open Stage", - "autoAdd": true - }, - { - "name": "manageStage", - "type": "node", - "childType": "Manage Stage", - "autoAdd": true - }, - { - "name": "closeStage", - "type": "node", - "childType": "Close Stage", - "autoAdd": true - } - ], - "propertyNameAtParent": "tradingStrategies" - }, - { - "type": "Trigger Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Events", - "relatedUiObject": "Trigger Stage", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trading Strategy->" - }, - "properties": [ - { - "name": "triggerOn", - "type": "node", - "childType": "Trigger On Event", - "autoAdd": true - }, - { - "name": "triggerOff", - "type": "node", - "childType": "Trigger Off Event", - "autoAdd": true - }, - { - "name": "takePosition", - "type": "node", - "childType": "Take Position Event", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "triggerStage" - }, - { - "type": "Trigger On Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trigger Stage->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "triggerOn" - }, - { - "type": "Trigger Off Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trigger Stage->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "triggerOff" - }, - { - "type": "Take Position Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trigger Stage->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "takePosition" - }, - { - "type": "Open Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Open Stage", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Trading Strategy->" - }, - "properties": [ - { - "name": "initialTargets", - "type": "node", - "childType": "Initial Targets", - "autoAdd": true - }, - { - "name": "openExecution", - "type": "node", - "childType": "Open Execution", - "autoAdd": true - }, - { - "name": "closeStageEvent", - "type": "node", - "childType": "Close Stage Event", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "openStage" - }, - { - "type": "Close Stage Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Open Stage->Close Stage->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "closeStageEvent" - }, - { - "type": "Initial Targets", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Initial Targets", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Open Stage->Close Stage->" - }, - "properties": [ - { - "name": "targetRate", - "type": "node", - "childType": "Target Rate", - "autoAdd": true - }, - { - "name": "targetSizeInBaseAsset", - "type": "node", - "childType": "Target Size In Base Asset", - "autoAdd": true - }, - { - "name": "targetSizeInQuotedAsset", - "type": "node", - "childType": "Target Size In Quoted Asset", - "autoAdd": true - } - ], - "propertyNameAtParent": "initialTargets" - }, - { - "type": "Managed Stop Loss", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Phase", - "relatedUiObject": "Phase", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Manage Stage->Initial Definition->" - }, - "properties": [ - { - "name": "phases", - "type": "array", - "childType": "Phase", - "autoAdd": true - } - ], - "propertyNameAtParent": "managedStopLoss" - }, - { - "type": "Phase", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "nextPhaseEvent", - "label": "Add Next Phase Event", - "relatedUiObject": "Next Phase Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Move To Phase Event", - "relatedUiObject": "Move To Phase Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainedToSameType": true, - "chainAttachesTo": { - "compatibleTypes": "->Managed Stop->Managed Take Profit->Phase->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - }, - { - "name": "nextPhaseEvent", - "type": "node", - "childType": "Next Phase Event" - }, - { - "name": "moveToPhaseEvents", - "type": "array", - "childType": "Move To Phase Event" - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "phases" - }, - { - "type": "Next Phase Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Phase->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "nextPhaseEvent" - }, - { - "type": "Move To Phase Event", - "docURL": "", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Phase->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Phase->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "moveToPhaseEvents" - }, - { - "type": "Managed Take Profit", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Phase", - "relatedUiObject": "Phase", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Manage Stage->Initial Definition->" - }, - "properties": [ - { - "name": "phases", - "type": "array", - "childType": "Phase", - "autoAdd": true - } - ], - "propertyNameAtParent": "managedTakeProfit" - }, - { - "type": "Target Size In Base Asset", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Initial Targets->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ], - "propertyNameAtParent": "targetSizeInBaseAsset" - }, - { - "type": "Target Size In Quoted Asset", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Initial Targets->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ], - "propertyNameAtParent": "targetSizeInQuotedAsset" - }, - { - "type": "Target Rate", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Initial Targets->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ], - "propertyNameAtParent": "targetRate" - }, - { - "type": "Order Rate", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Limit Buy Order->Limit Sell Order->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ], - "propertyNameAtParent": "orderRate" - }, - { - "type": "Open Execution", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Execution Algorithm", - "relatedUiObject": "Execution Algorithm", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Open Stage->" - }, - "propertyNameAtParent": "openExecution", - "properties": [ - { - "name": "executionAlgorithms", - "type": "array", - "childType": "Execution Algorithm" - } - ] - }, - { - "type": "Execution Algorithm", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Market Buy Order", - "relatedUiObject": "Market Buy Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Market Sell Order", - "relatedUiObject": "Market Sell Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Limit Buy Order", - "relatedUiObject": "Limit Buy Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Limit Sell Order", - "relatedUiObject": "Limit Sell Order", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{\n\"percentageOfStageTargetSize\": 100 \n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Open Execution->Close Execution->" - }, - "propertyNameAtParent": "executionAlgorithms", - "properties": [ - { - "name": "marketBuyOrders", - "type": "array", - "childType": "Market Buy Order" - }, - { - "name": "marketSellOrders", - "type": "array", - "childType": "Market Sell Order" - }, - { - "name": "limitBuyOrders", - "type": "array", - "childType": "Limit Buy Order" - }, - { - "name": "limitSellOrders", - "type": "array", - "childType": "Limit Sell Order" - } - ] - }, - { - "type": "Market Buy Order", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "createOrderEvent", - "label": "Add Create Order Event", - "relatedUiObject": "Create Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedExchangeEvents", - "label": "Add Simulated Events", - "relatedUiObject": "Simulated Exchange Events", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Execution Algorithm->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Market Order->" - }, - "propertyNameAtParent": "marketBuyOrders", - "properties": [ - { - "name": "createOrderEvent", - "type": "node", - "childType": "Create Order Event", - "autoAdd": true - }, - { - "name": "simulatedExchangeEvents", - "type": "node", - "childType": "Simulated Exchange Events", - "autoAdd": true - } - ] - }, - { - "type": "Market Sell Order", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "createOrderEvent", - "label": "Add Create Order Event", - "relatedUiObject": "Create Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedExchangeEvents", - "label": "Add Simulated Events", - "relatedUiObject": "Simulated Exchange Events", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Execution Algorithm->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Market Order->" - }, - "propertyNameAtParent": "marketSellOrders", - "properties": [ - { - "name": "createOrderEvent", - "type": "node", - "childType": "Create Order Event", - "autoAdd": true - }, - { - "name": "simulatedExchangeEvents", - "type": "node", - "childType": "Simulated Exchange Events", - "autoAdd": true - } - ] - }, - { - "type": "Limit Buy Order", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "orderRate", - "label": "Add Order Rate", - "relatedUiObject": "Order Rate", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "createOrderEvent", - "label": "Add Create Order Event", - "relatedUiObject": "Create Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "cancelOrderEvent", - "label": "Add Cancel Order Event", - "relatedUiObject": "Cancel Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedExchangeEvents", - "label": "Add Simulated Events", - "relatedUiObject": "Simulated Exchange Events", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Execution Algorithm->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Limit Order->" - }, - "propertyNameAtParent": "limitBuyOrders", - "properties": [ - { - "name": "orderRate", - "type": "node", - "childType": "Order Rate", - "autoAdd": true - }, - { - "name": "createOrderEvent", - "type": "node", - "childType": "Create Order Event", - "autoAdd": true - }, - { - "name": "cancelOrderEvent", - "type": "node", - "childType": "Cancel Order Event" - }, - { - "name": "simulatedExchangeEvents", - "type": "node", - "childType": "Simulated Exchange Events", - "autoAdd": true - } - ] - }, - { - "type": "Limit Sell Order", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "orderRate", - "label": "Add Order Rate", - "relatedUiObject": "Order Rate", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "createOrderEvent", - "label": "Add Create Order Event", - "relatedUiObject": "Create Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "cancelOrderEvent", - "label": "Add Cancel Order Event", - "relatedUiObject": "Cancel Order Event", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedExchangeEvents", - "label": "Add Simulated Events", - "relatedUiObject": "Simulated Exchange Events", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{\n\"percentageOfAlgorithmSize\": 100, \n\"spawnMultipleOrders\": false \n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Execution Algorithm->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Limit Order->" - }, - "propertyNameAtParent": "limitSellOrders", - "properties": [ - { - "name": "orderRate", - "type": "node", - "childType": "Order Rate", - "autoAdd": true - }, - { - "name": "createOrderEvent", - "type": "node", - "childType": "Create Order Event", - "autoAdd": true - }, - { - "name": "cancelOrderEvent", - "type": "node", - "childType": "Cancel Order Event" - }, - { - "name": "simulatedExchangeEvents", - "type": "node", - "childType": "Simulated Exchange Events", - "autoAdd": true - } - ] - }, - { - "type": "Create Order Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "createOrderEvent" - }, - { - "type": "Cancel Order Event", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Situation", - "relatedUiObject": "Situation", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->" - }, - "properties": [ - { - "name": "situations", - "type": "array", - "childType": "Situation", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "cancelOrderEvent" - }, - { - "type": "Simulated Exchange Events", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Simulated Partial Fill", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedPartialFill", - "relatedUiObject": "Simulated Partial Fill", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Simulated Actual Rate", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedActualRate", - "relatedUiObject": "Simulated Actual Rate", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Simulated Fees Paid", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "simulatedFeesPaid", - "relatedUiObject": "Simulated Fees Paid", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Market Buy Order->Market Sell Order->Limit Buy Order->Limit Sell Order->" - }, - "properties": [ - { - "name": "simulatedPartialFill", - "type": "node", - "childType": "Simulated Partial Fill", - "autoAdd": true - }, - { - "name": "simulatedActualRate", - "type": "node", - "childType": "Simulated Actual Rate", - "autoAdd": true - }, - { - "name": "simulatedFeesPaid", - "type": "node", - "childType": "Simulated Fees Paid", - "autoAdd": true - } - ], - "propertyNameAtParent": "simulatedExchangeEvents" - }, - { - "type": "Simulated Partial Fill", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"fillProbability\": 1\n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Simulated Exchange Events->" - }, - "propertyNameAtParent": "simulatedPartialFill" - }, - { - "type": "Simulated Actual Rate", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "formula", - "label": "Add Formula", - "relatedUiObject": "Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Simulated Exchange Events->" - }, - "properties": [ - { - "name": "formula", - "type": "node", - "childType": "Formula", - "autoAdd": true - } - ], - "propertyNameAtParent": "simulatedActualRate" - }, - { - "type": "Simulated Fees Paid", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"percentage\": 0.1\n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Simulated Exchange Events->" - }, - "propertyNameAtParent": "simulatedFeesPaid" - }, - { - "type": "Manage Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Manage Stage", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Trading Strategy->" - }, - "properties": [ - { - "name": "managedStopLoss", - "type": "node", - "childType": "Managed Stop Loss", - "autoAdd": true - }, - { - "name": "managedTakeProfit", - "type": "node", - "childType": "Managed Take Profit", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "manageStage" - }, - { - "type": "Close Stage", - "menuItems": [ - { - "action": "Add Missing Children", - "label": "Add Missing Items", - "relatedUiObject": "Close Stage", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Announcement", - "relatedUiObject": "Announcement", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Trading Strategy->" - }, - "properties": [ - { - "name": "initialTargets", - "type": "node", - "childType": "Initial Targets", - "autoAdd": true - }, - { - "name": "closeExecution", - "type": "node", - "childType": "Close Execution", - "autoAdd": true - }, - { - "name": "closeStageEvent", - "type": "node", - "childType": "Close Stage Event", - "autoAdd": true - }, - { - "name": "announcements", - "type": "array", - "childType": "Announcement" - } - ], - "propertyNameAtParent": "closeStage" - }, - { - "type": "Close Execution", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Execution Algorithm", - "relatedUiObject": "Execution Algorithm", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Close Stage->" - }, - "propertyNameAtParent": "closeExecution", - "properties": [ - { - "name": "executionAlgorithms", - "type": "array", - "childType": "Execution Algorithm" - } - ] - }, - { - "type": "Social Bots", - "menuItems": [ - { - "action": "Add Telegram Bot", - "label": "Add Telegram Bot", - "relatedUiObject": "Telegram Bot", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Backtesting Session->Live Trading Session->Paper Trading Session->Forward Testing Session->Learning Session->" - }, - "properties": [ - { - "name": "bots", - "type": "array", - "childType": "Telegram Bot", - "autoAdd": true - } - ], - "propertyNameAtParent": "socialBots" - }, - { - "type": "Telegram Bot", - "editors": { - "config": true - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"botToken\": \"Paste the bot token obtained from Telegram Bot Father\",\n\"chatId\": \"Type or paste the chat or group id -a number with no quotes- where announcements are going to be sent to\"\n}" - }, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Social Bots->" - }, - "properties": [], - "propertyNameAtParent": "bots" - }, - { - "type": "Announcement", - "editors": { - "config": true - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "announcementFormula", - "label": "Add Announcement Formula", - "relatedUiObject": "Announcement Formula", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "announcementCondition", - "label": "Add Condition", - "relatedUiObject": "Announcement Condition", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"text\": \"Type the message you wish to announce when there is no formula\"\n}" - }, - "addLeftIcons": true, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->Trigger On Event->Trigger Off Event->Take Position Event->Next Phase Event->Move To Phase Event->Phase->Trigger Stage->Open Stage->Manage Stage->Close Stage->Create Order Event->Cancel Order Event->" - }, - "properties": [ - { - "name": "announcementFormula", - "type": "node", - "childType": "Announcement Formula", - "autoAdd": true - }, - { - "name": "announcementCondition", - "type": "node", - "childType": "Announcement Condition", - "autoAdd": true - } - ], - "propertyNameAtParent": "announcements" - }, - { - "type": "Announcement Condition", - "editors": { - "code": true - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.codeEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "code": "// Type here a condition that needs to be met in order to make the announcement." - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Announcement->" - }, - "propertyNameAtParent": "announcementCondition" - }, - { - "type": "Crypto Ecosystem", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Crypto Exchanges", - "relatedUiObject": "Crypto Exchanges", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Signals Providers", - "relatedUiObject": "Signals Providers", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "cryptoExchanges", - "type": "array", - "childType": "Crypto Exchanges" - }, - { - "name": "signalsProviders", - "type": "array", - "childType": "Signals Providers" - } - ] - }, - { - "type": "Super Actions", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Super Action", - "relatedUiObject": "Super Action", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "propertyNameAtParent": "superActions", - "isTitleAllwaysVisible": false, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Ecosystem->" - }, - "properties": [ - { - "name": "superActions", - "type": "array", - "childType": "Super Action" - } - ] - }, - { - "type": "Signals Providers", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Signals Provider", - "relatedUiObject": "Signals Provider", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Ecosystem->" - }, - "propertyNameAtParent": "signalsProviders", - "properties": [ - { - "name": "signalsProviders", - "type": "array", - "childType": "Signals Provider", - "autoAdd": true - } - ] - }, - { - "type": "Signals Provider", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Send Webhook Test Message", - "label": "Send Test Message", - "workingLabel": "Sending Message", - "workDoneLabel": "Message Sent", - "workFailedLabel": "Message not Delived", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Signals Providers->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"webhookURL\": \"Webhook/New-Message/Trading-View/Binance/BTC-USDT\",\n\"testMessage\": \"\" \n}" - }, - "propertyNameAtParent": "signalsProviders", - "properties": [] - }, - { - "type": "Crypto Exchanges", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Crypto Exchange", - "relatedUiObject": "Crypto Exchange", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Crypto Exchanges", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Crypto Exchange", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 1, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Ecosystem->" - }, - "propertyNameAtParent": "cryptoExchanges", - "properties": [ - { - "name": "exchanges", - "type": "array", - "childType": "Crypto Exchange", - "autoAdd": true - } - ] - }, - { - "type": "Crypto Exchange", - "menuItems": [ - { - "action": "Configure Thise", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "exchangeAssets", - "label": "Add Exchange Assets", - "relatedUiObject": "Exchange Assets", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "exchangeMarkets", - "label": "Add Exchange Markets", - "relatedUiObject": "Exchange Markets", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "exchangeAccounts", - "label": "Add Exchange Accounts", - "relatedUiObject": "Exchange Accounts", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 2, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"codeName\": \"Type the name of the exchange\"\n}" - }, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Exchanges->" - }, - "propertyNameAtParent": "exchanges", - "properties": [ - { - "name": "exchangeAssets", - "type": "node", - "childType": "Exchange Assets", - "autoAdd": true - }, - { - "name": "exchangeMarkets", - "type": "node", - "childType": "Exchange Markets", - "autoAdd": true - }, - { - "name": "exchangeAccounts", - "type": "node", - "childType": "Exchange Accounts", - "autoAdd": true - } - ], - "alternativeIcons": [ - { - "codeName": "bitfinex", - "iconName": "bitfinex" - }, - { - "codeName": "binance", - "iconName": "binance" - }, - { - "codeName": "kucoin", - "iconName": "kucoin" - }, - { - "codeName": "bittrex", - "iconName": "bittrex" - }, - { - "codeName": "kraken", - "iconName": "kraken" - }, - { - "codeName": "poloniex", - "iconName": "poloniex" - }, - { - "codeName": "upbit", - "iconName": "upbit" - }, - { - "codeName": "bitmex", - "iconName": "bitmex" - }, - { - "codeName": "liquid", - "iconName": "liquid" - }, - { - "codeName": "hitbtc", - "iconName": "hitbtc" - } - ] - }, - { - "type": "Exchange Assets", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Asset", - "relatedUiObject": "Asset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Assets", - "label": "Add Missing Assets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Asset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"addMissingAssetsFilter\": { \"quotedAsset\": \"USDT\"} \n}" - }, - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "propertyNameAtParent": "exchangeAssets", - "properties": [ - { - "name": "assets", - "type": "array", - "childType": "Asset" - } - ] - }, - { - "type": "Asset", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 4, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"codeName\": \"Type the code name of the asset\"\n}" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Assets->" - }, - "propertyNameAtParent": "assets", - "alternativeIcons": [ - { - "codeName": "XMR", - "iconName": "monero" - }, - { - "codeName": "USDT", - "iconName": "tether" - }, - { - "codeName": "TRX", - "iconName": "tron" - }, - { - "codeName": "XLM", - "iconName": "stellar" - }, - { - "codeName": "QTUM", - "iconName": "qtum" - }, - { - "codeName": "NEO", - "iconName": "neo" - }, - { - "codeName": "LTC", - "iconName": "litecoin" - }, - { - "codeName": "ETC", - "iconName": "ethereum-classic" - }, - { - "codeName": "ETH", - "iconName": "ethereum" - }, - { - "codeName": "EOS", - "iconName": "eos" - }, - { - "codeName": "DASH", - "iconName": "dash" - }, - { - "codeName": "ADA", - "iconName": "cardano" - }, - { - "codeName": "BCH", - "iconName": "bitcoin-cash" - }, - { - "codeName": "BTC", - "iconName": "bitcoin" - }, - { - "codeName": "BNB", - "iconName": "binance-coin" - }, - { - "codeName": "USD", - "iconName": "us-dollar" - } - ] - }, - { - "type": "Exchange Markets", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market", - "relatedUiObject": "Market", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Markets", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Request Sent", - "relatedUiObject": "Market", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "propertyNameAtParent": "exchangeMarkets", - "properties": [ - { - "name": "markets", - "type": "array", - "childType": "Market" - } - ] - }, - { - "type": "Market", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "baseAsset", - "label": "Add Base Asset", - "relatedUiObject": "Market Base Asset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "quotedAsset", - "label": "Add Quoted Asset", - "relatedUiObject": "Market Quoted Asset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Install Market", - "label": "Install Market", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market", - "actionFunction": "payload.executeAction" - }, - { - "action": "Uninstall Market", - "label": "Uninstall Market", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "properties": [ - { - "name": "baseAsset", - "type": "node", - "childType": "Market Base Asset", - "autoAdd": true - }, - { - "name": "quotedAsset", - "type": "node", - "childType": "Market Quoted Asset", - "autoAdd": true - } - ], - "addLeftIcons": true, - "isTitleAllwaysVisible": true, - "level": 4, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"codeName\": \"Type the name of the market\"\n}" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Markets->" - }, - "propertyNameAtParent": "markets" - }, - { - "type": "Exchange Accounts", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add User Account", - "relatedUiObject": "User Account", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "propertyNameAtParent": "exchangeAccounts", - "properties": [ - { - "name": "userAccounts", - "type": "array", - "childType": "User Account", - "autoAdd": true - } - ], - "isPersonalData": true - }, - { - "type": "User Account", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "userAssets", - "label": "Add User Assets", - "relatedUiObject": "User Assets", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "userKeys", - "label": "Add User Keys", - "relatedUiObject": "User Keys", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Accounts->" - }, - "propertyNameAtParent": "userAccounts", - "properties": [ - { - "name": "userAssets", - "type": "node", - "childType": "User Assets", - "autoAdd": true - }, - { - "name": "userKeys", - "type": "node", - "childType": "User Keys", - "autoAdd": true - } - ], - "isPersonalData": true - }, - { - "type": "User Assets", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Asset", - "relatedUiObject": "Exchange Account Asset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->User Account->" - }, - "propertyNameAtParent": "userAssets", - "properties": [ - { - "name": "assets", - "type": "array", - "childType": "Exchange Account Asset" - } - ], - "isPersonalData": true - }, - { - "type": "User Keys", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Key", - "relatedUiObject": "Exchange Account Key", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->User Account->" - }, - "propertyNameAtParent": "userKeys", - "properties": [ - { - "name": "keys", - "type": "array", - "childType": "Exchange Account Key", - "autoAdd": true - } - ], - "isPersonalData": true - }, - { - "type": "Exchange Account Asset", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 4, - "referenceAttachesTo": { - "compatibleTypes": "->Asset->" - }, - "chainAttachesTo": { - "compatibleTypes": "->User Assets->" - }, - "title": [ - "Use Reference Parent" - ], - "propertyNameAtParent": "assets", - "alternativeIcons": "Use Reference Parent", - "isPersonalData": true - }, - { - "type": "Exchange Account Key", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"codeName\": \"Paste your exchange API name or label\",\n\"secret\": \"Paste your exchange API secret key\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 4, - "chainAttachesTo": { - "compatibleTypes": "->User Keys->" - }, - "propertyNameAtParent": "keys", - "isPersonalData": true - }, - { - "type": "Design Space", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "spaceStyle", - "label": "Add Space Style", - "relatedUiObject": "Space Style", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "spaceSettings", - "label": "Add Space Settings", - "relatedUiObject": "Space Settings", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "spaceStyle", - "type": "node", - "childType": "Space Style", - "autoAdd": true - }, - { - "name": "spaceSettings", - "type": "node", - "childType": "Space Settings", - "autoAdd": true - } - ] - }, - { - "type": "Space Style", - "level": 4, - "propertyNameAtParent": "spaceStyle", - "chainAttachesTo": { - "compatibleTypes": "->Charting Space->Design Space->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"backgroundColor\": \"UI_COLOR.BLACK\"\n}" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Space Settings", - "level": 4, - "propertyNameAtParent": "spaceSettings", - "chainAttachesTo": { - "compatibleTypes": "->Charting Space->Design Space->" - }, - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"distanceBetweenNodes\": 500\n}" - }, - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "addLeftIcons": true - }, - { - "type": "Charting Space", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "viewport", - "label": "Add Viewport", - "relatedUiObject": "Viewport", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "spaceStyle", - "label": "Add Space Style", - "relatedUiObject": "Space Style", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "spaceSettings", - "label": "Add Space Settings", - "relatedUiObject": "Space Settings", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Dashboard", - "relatedUiObject": "Dashboard", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Dashboards", - "label": "Add Missing Dashboards", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Dashboard", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "actionFunction": "payload.executeAction", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "properties": [ - { - "name": "viewport", - "type": "node", - "childType": "Viewport", - "autoAdd": true - }, - { - "name": "spaceStyle", - "type": "node", - "childType": "Space Style", - "autoAdd": true - }, - { - "name": "spaceSettings", - "type": "node", - "childType": "Space Settings", - "autoAdd": true - }, - { - "name": "dashboards", - "type": "array", - "childType": "Dashboard" - } - ] - }, - { - "type": "Dashboard", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Time Machine", - "relatedUiObject": "Time Machine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Time Machines", - "label": "Add Missing Time Machines", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Time Machine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "referenceAttachesTo": { - "compatibleTypes": "->Testing Environment->Production Environment->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Charting Space->" - }, - "propertyNameAtParent": "dashboards", - "properties": [ - { - "name": "timeMachines", - "type": "array", - "childType": "Time Machine" - } - ] - }, - { - "type": "Time Machine", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "timeScale", - "label": "Add Time Scale", - "relatedUiObject": "Time Scale", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "rateScale", - "label": "Add Rate Scale", - "relatedUiObject": "Rate Scale", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "timeFrameScale", - "label": "Add Time Frame Scale", - "relatedUiObject": "Time Frame Scale", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Timeline Chart", - "relatedUiObject": "Timeline Chart", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 1, - "isTitleAllwaysVisible": true, - "referenceAttachesTo": { - "compatibleTypes": "->Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Dashboard->Template Structure->" - }, - "propertyNameAtParent": "timeMachines", - "properties": [ - { - "name": "timeScale", - "type": "node", - "childType": "Time Scale", - "autoAdd": true - }, - { - "name": "rateScale", - "type": "node", - "childType": "Rate Scale", - "autoAdd": true - }, - { - "name": "timeFrameScale", - "type": "node", - "childType": "Time Frame Scale", - "autoAdd": true - }, - { - "name": "timelineCharts", - "type": "array", - "childType": "Timeline Chart", - "autoAdd": false - } - ] - }, - { - "type": "Viewport", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - } - ], - "initialValues": { - "config": "{ \n\"topMargin\": 40,\n\"bottomMargin\": 40\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Charting Space->" - }, - "propertyNameAtParent": "viewport" - }, - { - "type": "Time Scale", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"fromDate\": \"2018-01-01\",\n\"toDate\": \"2020-12-31\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Time Machine->" - }, - "propertyNameAtParent": "timeScale" - }, - { - "type": "Rate Scale", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"minValue\": 0,\n\"maxValue\": 25000\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Time Machine->Timeline Chart->" - }, - "propertyNameAtParent": "rateScale" - }, - { - "type": "Time Frame Scale", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n\"value\": \"24-hs\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Time Machine->Timeline Chart->" - }, - "propertyNameAtParent": "timeFrameScale" - }, - { - "type": "Timeline Chart", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "rateScale", - "label": "Add Rate Scale", - "relatedUiObject": "Rate Scale", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "timeFrameScale", - "label": "Add Time Frame Scale", - "relatedUiObject": "Time Frame Scale", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "layerManager", - "label": "Add Layer Manager", - "relatedUiObject": "Layer Manager", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "isTitleAllwaysVisible": true, - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Time Machine->" - }, - "propertyNameAtParent": "timelineCharts", - "properties": [ - { - "name": "rateScale", - "type": "node", - "childType": "Rate Scale" - }, - { - "name": "timeFrameScale", - "type": "node", - "childType": "Time Frame Scale" - }, - { - "name": "layerManager", - "type": "node", - "childType": "Layer Manager", - "autoAdd": true - } - ] - }, - { - "type": "Layer Manager", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add UI Object", - "label": "Add Layer", - "relatedUiObject": "Layer", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Bot Layers", - "relatedUiObject": "Bot Layers", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Mine Layers", - "label": "Add All Mine Layers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "editors": { - "config": true - }, - "title": [ - "Use Reference Parent" - ], - "initialValues": { - "config": "{ \n\"visibleLayers\": 5\n}" - }, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Timeline Chart->" - }, - "referenceAttachesTo": { - "compatibleTypes": "->Data Mine Products->Trading Mine Products->Learning Mine Products->" - }, - "propertyNameAtParent": "layerManager", - "properties": [ - { - "name": "layers", - "type": "array", - "childType": "Layer", - "autoAdd": false - }, - { - "name": "botLayers", - "type": "array", - "childType": "Bot Layers", - "autoAdd": false - } - ] - }, - { - "type": "Layer", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Layer", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "initialValues": { - "config": "{ \n\"status\": \"off\"\n}" - }, - "addLeftIcons": true, - "editors": { - "config": true - }, - "level": 3, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Data Product->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Layer Manager->Bot Layers->Layer Folder->" - }, - "propertyNameAtParent": "layers", - "properties": [ - { - "name": "layerPanels", - "type": "node", - "childType": "Layer Panels" - }, - { - "name": "layerPolygons", - "type": "node", - "childType": "Layer Polygons" - } - ] - }, - { - "type": "Layer Panels", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Layer Panel", - "relatedUiObject": "Layer Panel", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Layer Panels", - "label": "Add All Layer Panels", - "relatedUiObject": "Layer Panel", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Layer->" - }, - "propertyNameAtParent": "layerPanels", - "properties": [ - { - "name": "layerPanels", - "type": "array", - "childType": "Layer Panel" - } - ], - "icon": "under-construction" - }, - { - "type": "Layer Panel", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "initialValues": { - "config": "{ \n\"status\": \"on\"\n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Plotter Panel->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Layer Panels->" - }, - "propertyNameAtParent": "layerPanels", - "properties": [], - "icon": "under-construction" - }, - { - "type": "Layer Polygons", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Layer Polygon", - "relatedUiObject": "Layer Polygon", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Layer Polygons", - "label": "Add All Layer Polygons", - "relatedUiObject": "Layer Polygon", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Layer->" - }, - "propertyNameAtParent": "layerPolygons", - "properties": [ - { - "name": "layerPolygons", - "type": "array", - "childType": "Layer Polygon" - } - ], - "icon": "under-construction" - }, - { - "type": "Layer Polygon", - "menuItems": [ - { - "action": "Configure", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration", - "dontShowAtFullscreen": true, - "actionFunction": "uiObject.configEditor.activate" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Reference Parent" - ], - "initialValues": { - "config": "{ \n\"status\": \"on\"\n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Polygon->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Layer Polygons->" - }, - "propertyNameAtParent": "layerPolygons", - "properties": [], - "icon": "under-construction" - }, - { - "type": "Bot Layers", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Layer", - "relatedUiObject": "Layer", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Layer Folder", - "relatedUiObject": "Layer Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Layer Manager->" - }, - "propertyNameAtParent": "botLayers", - "properties": [ - { - "name": "layers", - "type": "array", - "childType": "Layer", - "autoAdd": false - }, - { - "name": "layerFolders", - "type": "array", - "childType": "Layer Folder", - "autoAdd": false - } - ] - }, - { - "type": "Layer Folder", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Layer", - "relatedUiObject": "Layer", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Layer Folder", - "relatedUiObject": "Layer Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Layer Folder->Bot Layers->" - }, - "propertyNameAtParent": "layerFolders", - "properties": [ - { - "name": "layers", - "type": "array", - "childType": "Layer", - "autoAdd": false - }, - { - "name": "layerFolders", - "type": "array", - "childType": "Layer Folder", - "autoAdd": false - } - ] - }, - { - "type": "Data Storage", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "dataMinesData", - "label": "Add Data Mines Data", - "relatedUiObject": "Data Mines Data", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "tradingMinesData", - "label": "Add Trading Mines Data", - "relatedUiObject": "Trading Mines Data", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "learningMinesData", - "label": "Add Learning Mines Data", - "relatedUiObject": "Learning Mines Data", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Network Node->" - }, - "propertyNameAtParent": "dataStorage", - "properties": [ - { - "name": "dataMinesData", - "type": "node", - "childType": "Data Mines Data", - "autoAdd": true - }, - { - "name": "tradingMinesData", - "type": "node", - "childType": "Trading Mines Data", - "autoAdd": true - }, - { - "name": "learningMinesData", - "type": "node", - "childType": "Learning Mines Data", - "autoAdd": true - } - ] - }, - { - "type": "Data Mine Tasks", - "menuItems": [ - { - "action": "Run All Task Managers", - "label": "Run All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Task Managers", - "label": "Stop All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Task Manager", - "relatedUiObject": "Task Manager", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Tasks", - "label": "Add All Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Task", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Data Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "dataMineTasks", - "properties": [ - { - "name": "taskManagers", - "type": "array", - "childType": "Task Manager", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Trading Mine Tasks", - "menuItems": [ - { - "action": "Run All Task Managers", - "label": "Run All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Task Managers", - "label": "Stop All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Task Manager", - "relatedUiObject": "Task Manager", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Tasks", - "label": "Add All Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Task", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Trading Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Trading Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "tradingMineTasks", - "properties": [ - { - "name": "taskManagers", - "type": "array", - "childType": "Task Manager", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Learning Mine Tasks", - "menuItems": [ - { - "action": "Run All Task Managers", - "label": "Run All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Task Managers", - "label": "Stop All Task Managers", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Task Manager", - "relatedUiObject": "Task Manager", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Tasks", - "label": "Add All Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Task", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Learning Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Learning Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "learningMineTasks", - "properties": [ - { - "name": "taskManagers", - "type": "array", - "childType": "Task Manager", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Market Data Tasks", - "menuItems": [ - { - "action": "Run All Data Mine Tasks", - "label": "Run All Data Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Data Mine Tasks", - "label": "Stop All Data Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Mine Tasks", - "relatedUiObject": "Data Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Data Mine Tasks", - "label": "Add Missing Data Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Data Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "marketDataTasks", - "properties": [ - { - "name": "dataMineTasks", - "type": "array", - "childType": "Data Mine Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Market Trading Tasks", - "menuItems": [ - { - "action": "Run All Trading Mine Tasks", - "label": "Run All Trading Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Trading Mine Tasks", - "label": "Stop All Trading Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Trading Mine Tasks", - "relatedUiObject": "Trading Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Trading Mine Tasks", - "label": "Add Missing Trading Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Trading Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "marketTradingTasks", - "properties": [ - { - "name": "tradingMineTasks", - "type": "array", - "childType": "Trading Mine Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Market Learning Tasks", - "menuItems": [ - { - "action": "Run All Learning Mine Tasks", - "label": "Run All Learning Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Learning Mine Tasks", - "label": "Stop All Learning Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Learning Mine Tasks", - "relatedUiObject": "Learning Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Learning Mine Tasks", - "label": "Add Missing Learning Mine Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Learning Mine Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Learning Tasks->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "marketLearningTasks", - "properties": [ - { - "name": "learningMineTasks", - "type": "array", - "childType": "Learning Mine Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Exchange Data Tasks", - "menuItems": [ - { - "action": "Run All Market Data Tasks", - "label": "Run All Market Data Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Market Data Tasks", - "label": "Stop All Market Data Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Market Data Tasks", - "relatedUiObject": "Market Data Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Data Tasks", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Data Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Data Mining->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "exchangeDataTasks", - "properties": [ - { - "name": "marketDataTasks", - "type": "array", - "childType": "Market Data Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Exchange Trading Tasks", - "menuItems": [ - { - "action": "Run All Market Trading Tasks", - "label": "Run All Market Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Market Trading Tasks", - "label": "Stop All Market Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Market Trading Tasks", - "relatedUiObject": "Market Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Trading Tasks", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Testing Environment->Production Environment->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "exchangeTradingTasks", - "properties": [ - { - "name": "marketTradingTasks", - "type": "array", - "childType": "Market Trading Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Exchange Learning Tasks", - "menuItems": [ - { - "action": "Run All Market Learning Tasks", - "label": "Run All Market Learning Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Market Learning Tasks", - "label": "Stop All Market Learning Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Market Learning Tasks", - "relatedUiObject": "Market Learning Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Learning Tasks", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Learning Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Learning Mining->" - }, - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "propertyNameAtParent": "exchangeLearningTasks", - "properties": [ - { - "name": "marketLearningTasks", - "type": "array", - "childType": "Market Learning Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Data Mining", - "menuItems": [ - { - "action": "Run All Exchange Data Tasks", - "label": "Run All Exchange Data Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Exchange Data Tasks", - "label": "Stop All Exchange Data Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Exchange Data Tasks", - "relatedUiObject": "Exchange Data Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Data Tasks", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Data Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Network Node->" - }, - "propertyNameAtParent": "dataMining", - "properties": [ - { - "name": "exchangeDataTasks", - "type": "array", - "childType": "Exchange Data Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Learning Mining", - "menuItems": [ - { - "action": "Run All Exchange Learning Tasks", - "label": "Run All Exchange Learning Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Exchange Learning Tasks", - "label": "Stop All Exchange Learning Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Exchange Learning Tasks", - "relatedUiObject": "Exchange Learning Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Learning Tasks", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Learning Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "chainAttachesTo": { - "compatibleTypes": "->Network Node->" - }, - "propertyNameAtParent": "learningMining", - "properties": [ - { - "name": "exchangeLearningTasks", - "type": "array", - "childType": "Exchange Learning Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Testing Environment", - "menuItems": [ - { - "action": "Run All Exchange Trading Tasks", - "label": "Run All Exchange Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Exchange Trading Tasks", - "label": "Stop All Exchange Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Exchange Trading Tasks", - "relatedUiObject": "Exchange Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Trading Tasks", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 0, - "chainAttachesTo": { - "compatibleTypes": "->Network Node->" - }, - "propertyNameAtParent": "testingEnvironment", - "properties": [ - { - "name": "exchangeTradingTasks", - "type": "array", - "childType": "Exchange Trading Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Production Environment", - "menuItems": [ - { - "action": "Run All Exchange Trading Tasks", - "label": "Run All Exchange Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Run", - "workDoneLabel": "Run Request Sent", - "iconPathOn": "run", - "iconPathOff": "run", - "actionFunction": "payload.executeAction" - }, - { - "action": "Stop All Exchange Trading Tasks", - "label": "Stop All Exchange Trading Tasks", - "askConfirmation": true, - "confirmationLabel": "Confirm to Stop", - "workDoneLabel": "Stop Request Sent", - "iconPathOn": "stop", - "iconPathOff": "stop", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Exchange Trading Tasks", - "relatedUiObject": "Exchange Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Trading Tasks", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Trading Tasks", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 0, - "chainAttachesTo": { - "compatibleTypes": "->Network Node->" - }, - "propertyNameAtParent": "productionEnvironment", - "properties": [ - { - "name": "exchangeTradingTasks", - "type": "array", - "childType": "Exchange Trading Tasks", - "monitorChildrenRunning": true - } - ] - }, - { - "type": "Exchange Data Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market Data Products", - "relatedUiObject": "Market Data Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Data Products", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Data Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Data Mines Data->" - }, - "propertyNameAtParent": "exchangeDataProducts", - "properties": [ - { - "name": "marketDataProducts", - "type": "array", - "childType": "Market Data Products" - } - ] - }, - { - "type": "Data Mines Data", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Exchange Data Products", - "relatedUiObject": "Exchange Data Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Data Products", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Data Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Storage->" - }, - "propertyNameAtParent": "dataMinesData", - "properties": [ - { - "name": "exchangeDataProducts", - "type": "array", - "childType": "Exchange Data Products" - } - ] - }, - { - "type": "Exchange Trading Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market Trading Products", - "relatedUiObject": "Market Trading Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Trading Products", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Trading Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Mines Data->" - }, - "propertyNameAtParent": "exchangeTradingProducts", - "properties": [ - { - "name": "marketTradingProducts", - "type": "array", - "childType": "Market Trading Products", - "autoAdd": false - } - ] - }, - { - "type": "Exchange Learning Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Market Learning Products", - "relatedUiObject": "Market Learning Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Market Learning Products", - "label": "Add Missing Markets", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Market Learning Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "alternativeIcons": "Use Reference Parent", - "title": [ - "Use Reference Parent" - ], - "isTitleAllwaysVisible": true, - "addLeftIcons": true, - "level": 3, - "referenceAttachesTo": { - "compatibleTypes": "->Crypto Exchange->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Learning Mines Data->" - }, - "propertyNameAtParent": "exchangeLearningProducts", - "properties": [ - { - "name": "marketLearningProducts", - "type": "array", - "childType": "Market Learning Products", - "autoAdd": false - } - ] - }, - { - "type": "Trading Mines Data", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Exchange Trading Products", - "relatedUiObject": "Exchange Trading Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Trading Products", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Trading Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Storage->" - }, - "propertyNameAtParent": "tradingMinesData", - "properties": [ - { - "name": "exchangeTradingProducts", - "type": "array", - "childType": "Exchange Trading Products" - } - ] - }, - { - "type": "Learning Mines Data", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Exchange Learning Products", - "relatedUiObject": "Exchange Learning Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Exchange Learning Products", - "label": "Add Missing Exchanges", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Exchange Learning Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Storage->" - }, - "propertyNameAtParent": "learningMinesData", - "properties": [ - { - "name": "exchangeLearningProducts", - "type": "array", - "childType": "Exchange Learning Products" - } - ] - }, - { - "type": "Trading Session Reference", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Product", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Trading Mine Products", - "relatedUiObject": "Trading Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Trading Mine Products", - "label": "Add All Trading Mine Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent", - "Use Reference Parent Type", - "Use Child @marketDataProducts" - ], - "addLeftIcons": true, - "level": 3, - "alternativeIcons": "Use Reference Parent", - "referenceAttachesTo": { - "compatibleTypes": "->Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Trading Products->" - }, - "propertyNameAtParent": "tradingSessionReferences", - "properties": [ - { - "name": "dataProducts", - "type": "array", - "childType": "Data Product", - "autoAdd": false - }, - { - "name": "tradingMineProducts", - "type": "array", - "childType": "Trading Mine Products", - "autoAdd": false - } - ] - }, - { - "type": "Learning Session Reference", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Product", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Learning Mine Products", - "relatedUiObject": "Learning Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Learning Mine Products", - "label": "Add All Learning Mine Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Learning Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent", - "Use Reference Parent Type", - "Use Child @marketDataProducts" - ], - "addLeftIcons": true, - "level": 3, - "alternativeIcons": "Use Reference Parent", - "referenceAttachesTo": { - "compatibleTypes": "->Learning Session->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Learning Products->" - }, - "propertyNameAtParent": "learningSessionReferences", - "properties": [ - { - "name": "dataProducts", - "type": "array", - "childType": "Data Product", - "autoAdd": false - }, - { - "name": "learningMineProducts", - "type": "array", - "childType": "Learning Mine Products", - "autoAdd": false - } - ] - }, - { - "type": "Market Data Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Mine Products", - "relatedUiObject": "Data Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Mine Products", - "label": "Add All Data Mine Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Mine Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Product", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Data Products->" - }, - "propertyNameAtParent": "marketDataProducts", - "properties": [ - { - "name": "dataProducts", - "type": "array", - "childType": "Data Product", - "autoAdd": false - }, - { - "name": "dataMineProducts", - "type": "array", - "childType": "Data Mine Products", - "autoAdd": false - } - ] - }, - { - "type": "Market Trading Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Trading Session Reference", - "relatedUiObject": "Trading Session Reference", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Trading Session References", - "label": "Add Missing Sessions", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading Session Reference", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Trading Products->" - }, - "propertyNameAtParent": "marketTradingProducts", - "properties": [ - { - "name": "tradingSessionReferences", - "type": "array", - "childType": "Trading Session Reference" - } - ] - }, - { - "type": "Market Learning Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Learning Session Reference", - "relatedUiObject": "Learning Session Reference", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add Missing Learning Session References", - "label": "Add Missing Sessions", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Learning Session Reference", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent Parent Parent", - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Market->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Exchange Learning Products->" - }, - "propertyNameAtParent": "marketLearningProducts", - "properties": [ - { - "name": "learningSessionReferences", - "type": "array", - "childType": "Learning Session Reference" - } - ] - }, - { - "type": "Data Product", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Product Definition->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Data Products->Data Product Folder->Bot Products->Trading Session Reference->" - }, - "propertyNameAtParent": "dataProducts", - "properties": [] - }, - { - "type": "Data Mine Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Bot Products", - "relatedUiObject": "Bot Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Products", - "label": "Add All Data Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Market Data Products->" - }, - "propertyNameAtParent": "dataMineProducts", - "properties": [ - { - "name": "botProducts", - "type": "array", - "childType": "Bot Products", - "autoAdd": false - } - ] - }, - { - "type": "Trading Mine Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Bot Products", - "relatedUiObject": "Bot Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Products", - "label": "Add All Data Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Trading Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Trading Session Reference->" - }, - "propertyNameAtParent": "tradingMineProducts", - "properties": [ - { - "name": "botProducts", - "type": "array", - "childType": "Bot Products", - "autoAdd": false - } - ] - }, - { - "type": "Learning Mine Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Bot Products", - "relatedUiObject": "Bot Products", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Products", - "label": "Add All Data Products", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Learning Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Learning Session Reference->" - }, - "propertyNameAtParent": "learningMineProducts", - "properties": [ - { - "name": "botProducts", - "type": "array", - "childType": "Bot Products", - "autoAdd": false - } - ] - }, - { - "type": "Bot Products", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Product", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Product Folder", - "relatedUiObject": "Data Product Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine Products->Trading Mine Products->Learning Mine Products->" - }, - "propertyNameAtParent": "botProducts", - "properties": [ - { - "name": "dataProducts", - "type": "array", - "childType": "Data Product", - "autoAdd": false - }, - { - "name": "dataProductFolders", - "type": "array", - "childType": "Data Product Folder", - "autoAdd": false - } - ] - }, - { - "type": "Data Product Folder", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Product", - "relatedUiObject": "Data Product", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Product Folder", - "relatedUiObject": "Data Product Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Product Folder->Bot Products->" - }, - "propertyNameAtParent": "dataProductFolders", - "properties": [ - { - "name": "dataProducts", - "type": "array", - "childType": "Data Product", - "autoAdd": false - }, - { - "name": "dataProductFolders", - "type": "array", - "childType": "Data Product Folder", - "autoAdd": false - } - ] - }, - { - "type": "Plugins", - "menuItems": [ - { - "action": "Add Missing Plugin Projects", - "label": "Add Missing Projects", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Plugin Project", - "actionFunction": "payload.executeAction" - } - ], - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "propertyNameAtParent": "plugins", - "properties": [ - { - "name": "pluginProjects", - "type": "array", - "childType": "Plugin Project", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Project", - "menuItems": [ - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add Missing Children", - "label": "Add Missing Children", - "relatedUiObject": "Plugins", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "initialValues": { - "config": "{ \n \"codeName\": \"\"\n}" - }, - "editors": { - "config": true - }, - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginProjects", - "chainAttachesTo": { - "compatibleTypes": "->Plugins->" - }, - "properties": [ - { - "name": "pluginDataMines", - "type": "node", - "childType": "Plugin Data Mines", - "autoAdd": false - }, - { - "name": "pluginTradingMines", - "type": "node", - "childType": "Plugin Trading Mines", - "autoAdd": false - }, - { - "name": "pluginTradingSystems", - "type": "node", - "childType": "Plugin Trading Systems", - "autoAdd": false - }, - { - "name": "pluginTradingEngines", - "type": "node", - "childType": "Plugin Trading Engines", - "autoAdd": false - }, - { - "name": "pluginSuperScripts", - "type": "node", - "childType": "Plugin Super Scripts", - "autoAdd": false - }, - { - "name": "pluginTutorials", - "type": "node", - "childType": "Plugin Tutorials", - "autoAdd": false - } - ], - "alternativeIcons": [ - { - "codeName": "Superalgos", - "iconName": "superalgos" - }, - { - "codeName": "Ethereum", - "iconName": "ethereum" - } - ] - }, - { - "type": "Plugin Data Mines", - "menuItems": [ - { - "action": "Add Missing Plugin Data Mines", - "label": "Add Missing Data Mines", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Mine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginDataMines", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Trading Mines", - "menuItems": [ - { - "action": "Add Missing Plugin Trading Mines", - "label": "Add Missing Trading Mines", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading Mine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginTradingMines", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Trading Systems", - "menuItems": [ - { - "action": "Add Missing Plugin Trading Systems", - "label": "Add Missing Trading Systems", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading System", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginTradingSystems", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Trading Engines", - "menuItems": [ - { - "action": "Add Missing Plugin Trading Engines", - "label": "Add Missing Trading Engines", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Trading Engine", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginTradingEngines", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Super Scripts", - "menuItems": [ - { - "action": "Add Missing Plugin Super Scripts", - "label": "Add Missing Super Scripts", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Super Scripts", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginSuperScripts", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin Tutorials", - "menuItems": [ - { - "action": "Add Missing Plugin Tutorials", - "label": "Add Missing Tutorials", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Tutorial", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "pluginTutorials", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Project->" - }, - "properties": [ - { - "name": "pluginFiles", - "type": "array", - "childType": "Plugin File", - "autoAdd": false - } - ] - }, - { - "type": "Plugin File", - "menuItems": [ - { - "action": "Add UI Object", - "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "pluginFilePosition", - "actionFunction": "payload.executeAction", - "label": "Add Plugin File Position", - "relatedUiObject": "Plugin File Position" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 2, - "propertyNameAtParent": "pluginFiles", - "chainAttachesTo": { - "compatibleTypes": "->Plugin Tutorials->Plugin Super Scripts->Plugin Trading Engines->Plugin Trading Systems->Plugin Trading Mines->Plugin Data Mines->" - }, - "properties": [ - { - "name": "pluginFilePosition", - "type": "node", - "childType": "Plugin File Position", - "autoAdd": false - } - ] - }, - { - "type": "Plugin File Position", - "menuItems": [ - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "title": [ - "Use Parent" - ], - "addLeftIcons": true, - "level": 3, - "propertyNameAtParent": "pluginFilePosition", - "properties": [] - }, - { - "type": "Tutorial", - "menuItems": [ - { - "action": "Play Tutorial", - "label": "Play", - "iconPathOn": "play", - "iconPathOff": "play", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Tutorial", - "label": "Resume", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Tutorial Step", - "relatedUiObject": "Tutorial Step", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Tutorial Topic", - "relatedUiObject": "Tutorial Topic", - "actionFunction": "payload.executeAction" - }, - { - "action": "Reset Tutorial Progress", - "askConfirmation": true, - "confirmationLabel": "Confirm to Reset", - "label": "Reset Tutorial Progress", - "iconPathOn": "reset", - "iconPathOff": "reset", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"title\": \"\",\n \"summary\": \"\",\n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}" - }, - "isTitleAllwaysVisible": true, - "isHierarchyHead": true, - "addLeftIcons": true, - "level": 0, - "propertyNameAtParent": "tutorials", - "properties": [ - { - "name": "tutorialSteps", - "type": "array", - "childType": "Tutorial Step", - "autoAdd": false - }, - { - "name": "tutorialTopics", - "type": "array", - "childType": "Tutorial Topic", - "autoAdd": false - } - ] - }, - { - "type": "Tutorial Topic", - "menuItems": [ - { - "action": "Play Tutorial Topic", - "label": "Play", - "iconPathOn": "play", - "iconPathOff": "play", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Tutorial Topic", - "label": "Resume", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Add UI Object", - "label": "Add Tutorial Step", - "relatedUiObject": "Tutorial Step", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Tutorial Topic", - "relatedUiObject": "Tutorial Topic", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n\"title\": \"\",\n \"summary\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}" - }, - "referenceAttachesTo": { - "compatibleTypes": "->*Any Node*->", - "incompatibleTypes": "->Tutorial->Tutorial Topic->Tutorial Step->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Tutorial->Tutorial Topic->" - }, - "addLeftIcons": true, - "level": 1, - "propertyNameAtParent": "tutorialTopics", - "properties": [ - { - "name": "tutorialSteps", - "type": "array", - "childType": "Tutorial Step", - "autoAdd": false - }, - { - "name": "tutorialTopics", - "type": "array", - "childType": "Tutorial Topic", - "autoAdd": false - } - ] - }, - { - "type": "Tutorial Step", - "menuItems": [ - { - "action": "Play Tutorial Step", - "label": "Play", - "iconPathOn": "play", - "iconPathOff": "play", - "actionFunction": "payload.executeAction" - }, - { - "action": "Resume Tutorial Step", - "label": "Resume", - "iconPathOn": "resume", - "iconPathOff": "resume", - "actionFunction": "payload.executeAction" - }, - { - "action": "Configure", - "actionFunction": "uiObject.configEditor.activate", - "label": "Configure", - "iconPathOn": "configuration", - "iconPathOff": "configuration" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "editors": { - "config": true - }, - "initialValues": { - "config": "{ \n \"subTitle\": \"\",\n \"gif\": \"\",\n \"image\": \"\",\n \"definition\": \"\",\n \"bulletListIntro\": \"\",\n \"bulletArray\": \n[\n [\"\", \"\"], \n[\"\", \"\"], \n[\"\", \"\"] \n],\n \"paragraph1\": \"\",\n \"callOut\": \"\",\n \"externalLink\": [\"\", \"\"],\n \"paragraph2\": \"\",\n \"note\": \"\",\n \"tip\": \"\",\n \"important\": \"\",\n \"warning\": \"\", \n \"position\": \"\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"documentationURL\": \"\" \n}" - }, - "referenceAttachesTo": { - "compatibleTypes": "->*Any Node*->", - "incompatibleTypes": "->Tutorial Topic->Tutorial Step->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Tutorial->Tutorial Topic->" - }, - "addLeftIcons": true, - "level": 2, - "propertyNameAtParent": "tutorialSteps", - "properties": [] - }, - { - "type": "Data Mine Data Dependencies", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Bot Data Dependencies", - "relatedUiObject": "Bot Data Dependencies", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add All Data Dependencies", - "label": "Add All Data Dependencies", - "askConfirmation": true, - "confirmationLabel": "Confirm to Proceed", - "workDoneLabel": "Done", - "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "isTitleAllwaysVisible": true, - "title": [ - "Use Reference Parent" - ], - "referenceAttachesTo": { - "compatibleTypes": "->Data Mine->" - }, - "chainAttachesTo": { - "compatibleTypes": "->Process Dependencies->" - }, - "propertyNameAtParent": "dataMineDataDependencies", - "properties": [ - { - "name": "botDataDependencies", - "type": "array", - "childType": "Bot Data Dependencies", - "autoAdd": false - } - ] - }, - { - "type": "Bot Data Dependencies", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Dependency", - "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Dependency Product Folder", - "relatedUiObject": "Dependency Product Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Mine Data Dependencies->" - }, - "propertyNameAtParent": "botDataDependencies", - "properties": [ - { - "name": "dataDependencies", - "type": "array", - "childType": "Data Dependency", - "autoAdd": false - }, - { - "name": "dataDependencyFolders", - "type": "array", - "childType": "Data Dependency Folder", - "autoAdd": false - } - ] - }, - { - "type": "Data Dependency Folder", - "menuItems": [ - { - "action": "Add UI Object", - "label": "Add Data Dependency", - "relatedUiObject": "Data Dependency", - "actionFunction": "payload.executeAction" - }, - { - "action": "Add UI Object", - "label": "Add Data Dependency Folder", - "relatedUiObject": "Data Dependency Folder", - "actionFunction": "payload.executeAction" - }, - { - "action": "Delete UI Object", - "askConfirmation": true, - "confirmationLabel": "Confirm to Delete", - "label": "Delete", - "iconPathOn": "delete", - "iconPathOff": "delete", - "actionFunction": "payload.executeAction" - } - ], - "addLeftIcons": true, - "level": 3, - "chainAttachesTo": { - "compatibleTypes": "->Data Dependency Folder->Bot Data Dependencies->" - }, - "propertyNameAtParent": "dataDependencyFolders", - "properties": [ - { - "name": "dataDependencies", - "type": "array", - "childType": "Data Dependency", - "autoAdd": false - }, - { - "name": "dataDependencyFolders", - "type": "array", - "childType": "Data Dependency Folder", - "autoAdd": false - } - ] - } -] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/ConceptSchema.json b/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/ConceptSchema.json deleted file mode 100644 index efeeaa440..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/ConceptSchema.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "type": "Concept 1", - "definition": "This is concept 1 definition" - } -] - - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/DocSchema.json b/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/DocSchema.json deleted file mode 100644 index 6570a0784..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Schemas/DocSchema.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":"Plotter Module","definition":"A plotter module is a device within a plotter that contains the definitions to create the visualization for a product definition.","content":["\r","\r","A single plotter may have several modules. Different modules may be used to plot each product of the bot, or as best suits the expected use-pattern.\r","\r","[![Plotter-Module-01](https://user-images.githubusercontent.com/13994516/71016077-eab41180-20f4-11ea-87e7-7262ff10a1ab.gif)](https://user-images.githubusercontent.com/13994516/71016077-eab41180-20f4-11ea-87e7-7262ff10a1ab.gif)\r","\r","{% include important.html content=\"For a bot to use a plotter, the corresponding product definition must establish a reference with the plotter module built to interpret the dataset.\" %}\r","\r","[![Plotter-Module-02-Product-Link](https://user-images.githubusercontent.com/13994516/71016079-eab41180-20f4-11ea-8afb-96321f9c68d8.gif)](https://user-images.githubusercontent.com/13994516/71016079-eab41180-20f4-11ea-8afb-96321f9c68d8.gif)\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a plotter module, select *Add Plotter Module* on the plotter node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Plotter Module* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"codeName\": \"Module Name\",\r"," \"isLegacy\": true,\r"," \"icon\": \"histogram\"\r","}\r","```\r","\r","* ```codeName``` is the name used in the code to refer to the module.\r","\r","* ```isLegacy``` is ```true``` for plotters modules developed entirely in JavaScript, and is ```false``` or doesn't show in the configuration for plotters built with the tools featured in the data mine hierarchy.\r","\r","* ```icon``` is the name of the image that illustrates the corresponding layer in the Layers Panel. In case the banner is not specified, the *default banner* is used. Current possible values are:\r","\r","\r","| Value | Image|\r","| :---: | :---: |\r","| ```default``` | ![Default-Banner](https://user-images.githubusercontent.com/13994516/70896073-5bbdd100-1ff0-11ea-84e3-5bd90475976f.png) |\r","| ```histogram``` | ![Histogram-Banner](https://user-images.githubusercontent.com/13994516/70896074-5bbdd100-1ff0-11ea-8dad-ccc6cfe64beb.png) |\r","| ```band``` | ![Bands-Banner](https://user-images.githubusercontent.com/13994516/70896072-5bbdd100-1ff0-11ea-8626-61c36bd22a3c.png) |\r","| ```moving-average``` | ![Moving-Average-Banner](https://user-images.githubusercontent.com/13994516/70896075-5bbdd100-1ff0-11ea-9909-dae33e57f65f.png) |\r","| ```oscillator``` | ![Oscillator-Banner](https://user-images.githubusercontent.com/13994516/70896076-5c566780-1ff0-11ea-8a5b-20077257c560.png) |\r","| ```trend``` | ![trends-banner](https://user-images.githubusercontent.com/13994516/70989177-744aeb80-20c3-11ea-88f5-d10473fa79b9.png) |\r","\r","Custom images may be added too. To do that:\r","\r","1. name the image in the following format: ```image-name.png```;\r","\r","1. place images in the ```WebServer\\Images\\Icons``` folder;\r","\r","1. in the configuration of the module, use the name as is (e.g.: ```\"icon\": \"image-name\"```)\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Nodes Values"},{"type":"Nodes Highlights"},{"type":"Nodes Errors"},{"type":"Nodes Warnings"},{"type":"Nodes Infos"},{"type":"Nodes Status"},{"type":"Nodes Progress"},{"type":"Nodes Running"},{"type":"Nodes Announcements"},{"type":"Record Values"},{"type":"Shapes","definition":"The shapes node contains definitions of polygons and styles to be rendered on a per-period basis over the charts.","content":["\r","\r","A plotter recursively renders graphics for each period or candle. This means that a definition of what shapes need to be drawn for a single period is required. The plotter does the same thing for every period or candle that is visible on the screen at any point in time, for any time frame, as long as the corresponding data is available.\r","\r","[![Shapes-01-show-off](https://user-images.githubusercontent.com/13994516/71016080-eab41180-20f4-11ea-84c6-a514b87d568f.gif)](https://user-images.githubusercontent.com/13994516/71016080-eab41180-20f4-11ea-84c6-a514b87d568f.gif)\r","\r","In general terms, the process of defining what is going to be rendered on the screen consist of the following four steps:\r","\r"," 1. Identifying points defined by ```[x,y]``` coordinates\r"," 2. Defining polygons\r"," 3. Defining default styles\r"," 4. Defining conditional styles\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a shapes node, select *Add Shapes* on the plotter module menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Plotter Panel","definition":"A plotter panel usually shows numerical representations of data over the charts on a small window or panel. The plotter panel node features definitions to make that possible.","content":["\r","\r","Beyond the graphic representation of data over the charts, plotters may also feature a *data panel*, that is, a numerical representation of the data showing the exact figures corresponding to the column or period that is in focus (the point of the charts where the mouse pointer is at any point).\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a plotter panel, select *Add Plotter Panel* on the plotter module node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Panel Data","definition":"A panel data node represents a data field to be plotted on the plotter panel.","content":["\r","\r","The system renders a panel featuring a centered, single-column vertical arrangement of data, with a label and a data field right below it. The label of each data field on the panel is given—by default—by the label set for each panel data node.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a panel data node, select *Add Panel Data* on the plotter panel menu.\r","\r"],"configuring":["\r","\r","Select *Configure Panel Data* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"valueDecimals\": 2\r","}\r","```\r","\r","* ```valueDecimals``` sets the number of decimals to be shown on the corresponding data field.\r","\r","To override the default manner in which the data is assembled on the panel, the following properties may be included and defined:\r","\r","```json\r","{\r"," \"labelText\": \"The Label\",\r"," \"labelPosition\": 15,\r"," \"valuePosition\": 20,\r"," \"valueDecimals\": 2\r","}\r","```\r","\r","* ```labelPosition``` and ```valuePosition``` represent the vertical distance of the corresponding fields to the top margin of the panel.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Formula","definition":"A data formula is a device used to assign a value to the panel data, usually in the form of the name of the corresponding record property.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a data formula, select *Add Data Formula* on the plotter panel menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Javascript Code","definition":"The JavaScript code node may hold any snippet of valid JavaScript.","content":["\r","\r","In the case of the master script, the JavaScript Code node features the code required to run each template script and handle the operations beyond the scope of individual template scripts.\r","\r","In the case of a template script, the JavaScript Code node features the code that deals with the specific scope of the template script only.\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a JavaScript code node, select *Add JavaScript Code* on the master script or the template script node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Chart Points","definition":"A chart points groups definitions of coordinate points used to define polygons.","content":["\r","\r","The definition of a point consists of the name of the point and the corresponding values for the ```x``` and ```y``` coordinates. To create such definitions, point and point formulas are used.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a chart points node, select *Add Chart Points* on the shapes menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Point","definition":"A point is a definition of an [x,y] coordinate. The value [x] usually represents a datetime. The value [y] may refer to a price or some other concept.","content":["\r","\r","These coordinate points are used to define polygons. Values for ```[x,y]```coordinates are entered with a point formula.\r","\r","{% include tip.html content=\"Each point should be given a significant name so that it is easier to identify them at the time of establishing references with polygon vertices.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a point, select *Add Point* on the chart points node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Point Formula","definition":"A point formula is a node used to input the [x,y] coordinates of a point.","content":["\r","\r","To represent some form of variation of the price or a price derivative over time, a typical point formula consists of the following two coordinates: ```x = datetime``` and ```y = rate```.\r","\r","For example:\r","\r","**Point *SMA 20 Begin***\r","```js\r","x = record.begin\r","y = record.previous.sma20\r","```\r","\r","The example above shows the definition of the first of two points necessary to draw the segment of the 20-periods SMA curve for any particular period or candle. In this case, ```x = record.begin``` is the starting datetime of the period and ```y = record.previous.sma20``` is the rate of the 20-periods SMA of the previous period.\r","\r","{% include note.html content=\"The above variables are constructed with information originating at the product definition that references the corresponding plotter module.\" %}\r","\r","To complete the line segment corresponding to a single period, the closing datetime of the period and the closing rate for the 20-periods SMA are required:\r","\r","**Point *SMA 20 End***\r","```js\r","x = record.end\r","y = record.sma20\r","```\r","\r","The above system works very well for plotting all sorts of information over the candles, on the charts.\r","\r","An oscillator like RSI too needs the definition of the starting and ending datetime of the period as the value for the *x-axis*. However, the value for *axis y* fits a different scale.\r","\r","Anyway, the points definition is just as straight forward, for example:\r","\r","**Point *RSI Begin***\r","```js\r","x = record.begin\r","y = record.previous.value\r","```\r","\r","**Point *RSI End***\r","```js\r","x = record.end\r","y = record.value\r","```\r","\r","Points do not necessarily need to refer to values on the dataset produced by the corresponding data product. For example, absolute values for the *y-axis* may be used to describe fixed graphical elements, for instance, a horizontal line, or a box.\r","\r","**Point *Begin 20***\r","```js\r","x = record.begin\r","y = 20\r","```\r","\r","**Point *End 20***\r","```js\r","x = record.end\r","y = 20\r","```\r","\r","**Point *Begin 30***\r","```js\r","x = record.begin\r","y = 30\r","```\r","\r","**Point *End 30***\r","```js\r","x = record.end\r","y = 30\r","```\r","\r","The above four points are used to paint the background of the 20 to 30 value range of the RSI chart. The first two points are also used to draw the dotted line signaling the 20-value mark, and the last two are used for the dotted line indicating the 30-value mark.\r","\r","{% include note.html content=\"The reason from separating the definition of points from the definition of polygons is that any point may be used by one or more polygons.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a point formula, select *Add Point Formula* on the point node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Image","definition":"The image node allows overlaying an image over the charts, controlling its position, size, and when it shall be rendered.","content":["\r","\r","The foremost requirement for images is that they are in the ```png``` format, 24 bits, with transparency, a low case extension, and are square.\r","\r","If you envision contributing your indicator so that the community may use it, then please follow the guidelines in the [contribute icons](contributing-icons.html#technical-requirements) page, in particular, the Technical Requirements.\r","\r","Images must the stored in the following path: ```\\BackendServers\\WebServer\\Images\\Icons\\style-01```\r","\r","{% include note.html content=\"See the configuration for further details.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"codeName\": \"imagename\", \r"," \"size\": 15\r","}\r","```\r","\r","* ```codeName``` is the name of the image, without the ```.png``` extension.\r","\r","* ```size``` is the size at which the image shall be rendered, in pixels. \r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Image Condition","definition":"An image condition is a rule that allows establishing when an image shall be rendered and when not.","content":["\r","\r","The node is optional. When the node is not present in the definition of the image or when the condition validates ```true```, the image is rendered on screen. When the condition validates ```false``` the image is not rendered. As such, the node allows dynamically switching the rendering of the corresponding image on and off .\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Image Position","definition":"The image position node is a reference to a point defined in the chart points, and serves to determine the position in which the image shall be placed.","content":["\r","\r","The image position node works similarly to the polygon vertex in the sense that it must establish a reference with a point in the charts point to acquire a defined coordinate that determines where the image shall be placed.\r","\r","{% include note.html content=\"See the configuration for further details.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"offsetX\": 0,\r"," \"offsetY\": 10\r","}\r","```\r","\r","* ```offsetX``` is an offset in the X axis, in pixels, applied to displace the image in relation to the coordinate point defined by the reference of the node. Negative values displace the image to the left and positive values to the right.\r","\r","* ```offsetY``` is an offset in the Y axis. Negative values displace the image downwards and positive values displace the image upwards.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Text","definition":"The text node allows overlaying text on the charts, controlling its position, size, appearance, and when it shall be rendered.","content":["\r","\r","The node's offspring control the different aspects of how, where, and when text shall be rendered over the charts.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Text Style","definition":"The text style is a definition of color, opacity, and font size that determines the appearance of the text to be rendered over the charts.","content":["\r","\r","{% include note.html content=\"See the configuration for further details.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"paletteColor\": \"UI_COLOR.GREY\",\r"," \"opacity\": 0.5,\r"," \"fontSize\": 10\r","}\r","```\r","\r","* ```paletteColor``` is one of the predefined colors available, as described in the configuration of the *Style* node.\r","\r","* ```opacity``` is probably self-explanatory, and may range from 0 for a fully transparent object to 1 for a solid object.\r","\r","* ```fontSize``` is self explanatory too; values above zero produce the expected results.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Text Condition","definition":"A text condition is a rule that allows establishing when text shall be rendered and when not.","content":["\r","\r","The node is optional. When the node is not present in the definition of the text node or when the condition validates ```true```, the text is rendered on screen. When the condition validates ```false```, text is not rendered. As such, the node allows dynamically switching the rendering of the corresponding text on and off .\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Text Position","definition":"The text position node is a reference to a point defined in the chart points, and serves to determine the position in which text shall be rendered.","content":["\r","\r","The text position node works similarly to the image position node in the sense that it must establish a reference with a point in the charts point to acquire a defined coordinate that determines where the text shall be placed.\r","\r","{% include note.html content=\"See the configuration for further details.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"offsetX\": 0,\r"," \"offsetY\": 10\r","}\r","```\r","\r","* ```offsetX``` is an offset in the X axis, in pixels, applied to displace the text in relation to the coordinate point defined by the reference of the node. Negative values displace the text to the left and positive values to the right.\r","\r","* ```offsetY``` is an offset in the Y axis. Negative values displace the text downwards and positive values displace the image upwards.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Text Formula","definition":"The text formula determines the content that shall be rendered over the charts.","content":["\r","\r","The text formula may use any of the variables available to the plotter, and may produce either a numeric or a text string result.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Polygon","definition":"A polygon features definitions that makeup shapes and their styles.","content":["\r","\r","Polygons are defined by two or more vertices, which map points in a charts point. The graphic representation of polygons originates in styles applied to either or both polygon bodies and polygon borders. \r","\r","{% include note.html content=\"The order in which polygons are ordered around the parent shapes node determines the order in which they are drawn on the screen. In cases on which polygons intersect, those drawn last are drawn on top of those drawn first.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a polygon, select *Add Polygon* on the shapes node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Polygon Condition","definition":"A polygon condition is a rule that allows establishing when a polygon shall be rendered and when not.","content":["\r","\r","The node is optional. When the node is not present in the definition of the polygon or when the condition validates ```true```, the polygon is rendered on screen. When the condition validates ```false``` the polygon is not rendered. As such, the node allows dynamically switching the rendering of the corresponding polygon on and off.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a polygon condition, select *Add Polygon Condition* on a polygon node menu.\r","\r"],"configuring":["\r","\r","Select *Edit Condition* on the menu to access the configuration.\r","\r","Polygon conditions work pretty much like conditions used on trading systems. The main difference is that the variables available are solely those provided by the bot product definition that reference the corresponding plotter module.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Polygon Body","definition":"A polygon body is the fill of a shape made out of at least three vertices.","content":["\r","\r","A polygon body needs at least three vertices to be defined. A body serves to create a *fill* for the outlines of any sort of polygon, either closed or open, by giving it a style.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a polygon body, select *Add Polygon Body* on the polygon node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Polygon Border","definition":"A polygon border is a shape defined by at least two vertices used to draw lines or to apply a style to the stroke of a closed shape.","content":["\r","\r","A polygon border needs at least two vertices to be defined. A border serves to create a *stroke* for the outlines of any sort of polygon, either closed or open, by giving it a style.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a polygon border, select *Add Polygon Border* on the polygon node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Style Condition","definition":"A style condition is a rule that allows applying an alternative style in cases where the rule validates true.","content":["\r","\r","Style conditions offer a way to introduce additional intelligence on the visual representation of data by using styles that respond to certain conditions.\r","\r","For example, the *Percentage Bandwidth* plotter module assigns a different color to the Moving Average line when it's going up or down.\r","\r","To do that, a style condition features it's own style so that, when the condition validates true, the new style is applied.\r","\r","Style conditions me be created in a sequence so that the style may continue changing upon the validation of a series of style conditions. The system evaluates all style conditions in a sequential order determined by their position in the rotational symmetry around the parent node. Each condition that is met may modify or add up to the resulting style that is rendered on screen. That is, the final style is the result of the sequential application of the styles defined for each condition that is met, on top of the default style.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a style condition, select *Add Style Condition* on a polygon border or polygon body node menu.\r","\r"],"configuring":["\r","\r","Select *Edit Condition* on the menu to access the configuration.\r","\r","Style conditions work pretty much like conditions used on trading systems. The main difference is that the variables available are solely those provided by the bot product definition that reference the corresponding plotter module.\r","\r","To continue the example of the Percentage Bandwidth plotter, the following is the condition that determines the newly added styles:\r","\r","```js\r","record.previous.movingAverage > record.movingAverage\r","```\r","\r","As hinted earlier, when the condition is met, the default style is modified by a second style that may be created on the menu of the style condition node.\r","\r","The definition of secondary styles is slightly different from that of the default style, as—in such cases—the ```atMousePosition``` property may no longer be defined:\r","\r","```js\r","{\r"," \"opacity\": 0.55,\r"," \"lineWidth\": 1,\r"," \"lineDash\": [0,0],\r"," \"paletteColor\": \"UI_COLOR.RED\"\r","}\r","```\r","\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Style","definition":"A style is a definition of color and opacity in case of a polygon body, and color, opacity and line thickness in case of polygon borders.","content":["\r","\r","A style applied to a polygon body or a polygon border node acts as the default style. Styles including colors, opacity, line width, and more, are defined in the node's configuration.\r","\r","{% include note.html content=\"See the configuration for further details.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a style, select *Add Style* on a polygon border or polygon body node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Style* on the menu to access the configuration.\r","\r","A typical definition for a polygon *body style* looks like this:\r","\r","```json\r","{\r"," \"default\": {\r"," \"opacity\": 0.2,\r"," \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\r"," },\r"," \"atMousePosition\": {\r"," \"opacity\": 0.3,\r"," \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\r"," }\r","}\r","```\r","\r","A typical definition for a polygon *border style* has a couple more properties:\r","\r","```json\r","{\r"," \"default\": {\r"," \"opacity\": 0.2,\r"," \"lineWidth\": 1,\r"," \"lineDash\": [0,0],\r"," \"paletteColor\": \"UI_COLOR.DARK_TURQUOISE\"\r"," },\r"," \"atMousePosition\": {\r"," \"opacity\": 0.3,\r"," \"lineWidth\": 2,\r"," \"lineDash\": [0,0],\r"," \"paletteColor\": \"UI_COLOR.RUSTED_RED\"\r"," }\r","}\r","```\r","\r","The first section of the definition refers, as explicitly stated, to the default state of the style.\r","\r","The second section refers to the style assigned to the column or period on which the mouse pointer is located. This is very useful for highlighting the specific zone of interest as the user browses the charts.\r","\r","* ```opacity``` is probably self-explanatory: it may range from ```0``` for a fully transparent object to ```1``` for a solid object.\r","\r","* ```paletteColor``` sets the color for the *fill* or *stroke* in cases of polygon bodies and polygon borders respectively. Use the variable ```UI_COLOR``` followed by a ```.``` and any of the properties in the following list for a selection of currently available colors:\r","\r","| Variable Value | RGB Value | Color Sample |\r","| :--- | :---: | :------------------- |\r","| ```DARK``` | 48, 48, 54 |   |\r","| ```LIGHT``` | 234, 226, 222 |   |\r","| ```GREY``` | 150, 150, 150 |   |\r","| ```LIGHT_GREY``` | 247, 247, 247 |   |\r","| ```WHITE``` | 255, 255, 255 |   |\r","| ```BLACK``` | 0, 0, 0 |   |\r","| ```GOLDEN_ORANGE``` | 240, 162, 2 |   |\r","| ```RUSTED_RED``` | 204, 88, 53 |   |\r","| ```GREEN``` | 188, 214, 67 |   |\r","| ```RED``` | 223, 70, 60 |   |\r","| ```PATINATED_TURQUOISE``` | 27, 153, 139 |   |\r","| ```TITANIUM_YELLOW``` | 244, 228, 9 |   |\r","| ```MANGANESE_PURPLE``` | 91,80, 122 |   |\r","| ```TURQUOISE``` | 74, 207, 217 |   |\r","| ```DARK_TURQUOISE``` | 2, 149, 170 |   |\r","\r","* ```lineWidth``` is the width of the border line, which should be greater than 0.\r","\r","* ```lineDash``` is used to turn the border into a dashed-line; the first value corresponds to the length of the dash while the second value defines the length of the space.\r","\r","{% include note.html content=\"When using dashed lines, bear in mind that the drawing from one column or period is independent of the next. Big values for dashes and spaces may not work well for lines that span several columns.\" %}\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Polygon Vertex","definition":"A polygon vertex is a reference to a point defined in the chart points, constituting a specific coordinate to be used as a vertex of a shape.","content":["\r","\r","Vertices are the main element defining polygons. Once created, each vertex must establish a reference to the corresponding point in the charts point.\r","\r","[![Vertex-01-add-and-link](https://user-images.githubusercontent.com/13994516/71016081-eb4ca800-20f4-11ea-8fee-4d38ecfb0596.gif)](https://user-images.githubusercontent.com/13994516/71016081-eb4ca800-20f4-11ea-8fee-4d38ecfb0596.gif)\r","\r","Drawing curves requires two vertices. Painting areas, such as the background of a chart, likely requires four vertices. Note that vertices are not capable of featuring a style. Instead, styles are applied to polygon borders and polygon bodies.\r","\r","{% include important.html content=\"Bear in mind that the order in which vertices in a polygon are arranged around the parent polygon node when their *rotational symmetry* property is selected, is the order in which the plotter computes the points. This means that points need to be in the correct order, for example, when drawing a box. Imagine drawing a box on a piece of paper without lifting the pencil... that is how the plotter does it.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a polygon vertex, select *Add Polygon Vertex* on the polygon node menu.\r","\r","{% include tip.html content=\"Remember that a vertex must establish a reference to a point in the charts point to be properly defined\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Workspace"},{"type":"Situation","definition":"A situation refers to a specific state of the market in which a certain event should take place, as defined by any number of conditions.","content":["\r","\r","In other words, you define situations in which you wish a certain event to happen (*i.e.:* trigger on the strategy, take a position, etc.) and each situation is described as a set of conditions that need to be met for the event to be triggered.\r","\r","A situation gets validated when all conditions under it are true. \r","\r","An event may have more than one situation attached to it. In such a case, when any of the situations gets validated, the event gets triggered. That is, events may be triggered in different circumstances, meaning that you are free to define different situations upon which the same event would be triggered. In such a case, when any of the situations evaluate true, then the event is triggered.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a situation, select *Add Situation* on the corresponding event node menu. A situation is added along with a condition and JavaScript code node.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Condition","definition":"Conditions are rules within a situation. When all conditions under a situation validate true, then the situation gets validated as well, and the associated event is triggered.","content":["\r","\r","Therefore, conditions are used to mathematically describe what needs to happen with the market for a certain action to be taken.\r","\r","**For example:**\r","\r","**Situation 1**\r","\r","* Condition A: ```chart.at01hs.candle.close > chart.at01hs.bollingerBand.MovingAverage``` → This means that the latest candle at the 1 hour chart closed above the Bollinger Bands moving average.\r","\r","* Condition B: ```chart.at01hs.candle.previous.max > chart.at01hs.bollingerBand.previous.MovingAverage``` → This means that the maximum value of the candle before the last one, was higher than the Bollinger Bands moving average.\r"," \r","In the example above, conditions A and B are comparison statements that may evaluate either _true_ or _false_. In the case both would evaluate _true_ then Situation 1 would be true as well.\r","\r","{% include note.html content=\"To learn how to write conditions, start with the Syntax Overview.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a condition, select *Add Condition* on the corresponding situation node menu. A condition with its JavaScript code node is added.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Super Scripts","definition":"The super scripts hierarchy holds definitions of scripts used to automate certain aspects of the administration and maintenance of the workspace, such as installing and deleting markets.","content":["\r","\r","The super scripts hierarchy may be used by developers who wish to create their own scripts for automating the deployment or manitenance of all sorts of structures of nodes across any of the hierarchies in the design space.\r","\r","Regular users will find little to do with this hierarchy, even though they may use it indirectly, for instance, when installing or uninstalling markets.\r","\r","{% include important.html content=\"Changes made to super scripts shipping with the system may not be saved at the workspace level. If you wish to modify those hierarchies and use them in such modified versions, you need to clone them and modify the clone instead. To do this successfully, you need to learn more about [backups](suite-backups.html) and [clones](suite-clones.html).\" %}\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a super scripts hierarchy, select *Add Super Scripts* on the workspace node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Super Scripts* on the menu to access the configuration.\r","\r","```\r","{ \r","\"codeName\": \"Masters\"\r","}\r","```\r","\r","* ```codeName``` is the name of the hierarchy as is used in the system's code.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Scripts Library","definition":"A script library is a collection of related scripts.","content":["\r","\r","The script library node plays an organizational role, grouping masters scripts according to the criteria of the developer.\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a scripts library, select *Add Scripts Library* on the super scripts node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Master Script","definition":"A master script contains the definitions of any number of template scripts along with the master JavaScript code providing the logic to implement them.","content":["\r","\r","In general terms, master scripts serve to atomize the complexity of the task at hand by subdividing the task into any number of specific scopes, handled by individual template scripts. The master script controls the execution of template scripts and solves issues beyond their scope.\r","\r","The current implementation of the Masters super scripts hierarchy features two master scripts you may use as examples. The Setup Market master script deals with all the steps required to install a new market, while the Delete Market Dependencies master script deals with uninstalling markets.\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a master script, select *Add Master Script* on the scripts library node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Template Script","definition":"The template script node holds the definitions concerned with the scope of a particular structure of nodes.","content":["\r","\r","As such, a template script features all the components required to deal with such scope only.\r","\r","In the particular Masters super script implementation, each template script in the Setup Markets master script features a structure of nodes to be created in a specific location, and the associated JavaScript code deals with implementing such structure of nodes and establishing the corresponding references.\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a template script, select *Add Template Script* on the scripts master script node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Template Structure","definition":"The template structure holds the structure of nodes with all its configurations and properties, exactly as it should be implemented.","content":["\r","\r","Properties include the physical arrangement of nodes, references and so on. \r","\r","{% include note.html content=\"The actual structure of nodes contained in the template usually originates as a clone of an existing structure of nodes.\" %}\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a tempalte strucutre, select *Add Teemplate Structure* on the template script node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Template Target","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"super_scripts","adding":["\r","\r","To add a template target, select *Add Template Target* on the template script node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Super Action"},{"type":"Network","definition":"The network hierarchy provides the control functions for running data-mining and trading operations. Because operations may be run either on a single machine or distributed over a network of machines, it also contains definitions regarding the physical location in which nodes live or function.","content":["\r","\r","The network hierarchy defines where in the network you run each of the bots you choose to run, and where the data they output is stored. \r","\r","You will use the network hierarchy for the following purposes:\r","\r","* To control your data mining operation—that is, tasks running sensor and indicator bots. Data mining tasks process data that may be consumed by others; for example, so that your trading systems may count with quality information.\r","\r","* To control your testing environment—that is, trading sessions including backtesting and paper trading sessions.\r","\r","* To control your production environment—that is, forward testing, and live trading sessions.\r","\r","* To manage the storage of the data produced by the bots you run as outputs. This includes administering the physical locations on which the data products produced by bots reside.\r","\r","{% include note.html content=\"These processes may run together on a single machine, or may be distributed across a network of machines, or what we call a [trading farm](suite-fundamental-trading-farms-concepts.html). \" %}\r","\r","{% include warning.html content=\"At this stage, the system does not implement any form of security measures, therefore, Superalgos is to be run in the context of a restricted Local Area Network only, unless you implement your own network security.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Network Node","definition":"A network node represents a machine running Superalgos, on which processes run and data is stored.","content":["\r","\r","By default, processes are set up to run locally in a network node representing your local machine. However, the system is prepared to run distributed on a network of nodes, or what we call a trading farm.\r","\r","You may create unlimited network nodes and map them with different machines on a network. Each machine in the network runs an instance of the Superalgos backend, and you may control the whole network operation from a single machine, or—in general—from any machine in the network running the Superalgos frontend. To learn more about distributed setups, check the [trading farms](suite-fundamental-trading-farms-concepts.html) pages.\r","\r","The easiest and fastest way to set up a network node is using the *Install Market* function available on markets defined in the Crypto Ecosystem hierarchy, under the exchange markets node. This function adds data mining tasks for all sensor and indicator bots shipping with the system, backtesting and live trading tasks for trading systems shipping with the system, including the data storage definitions for both, and also creates the corresponding dashboards and charts in the Charting Space hierarchy. You may learn more about this function in the [how to install a new market](suite-how-to-install-a-new-market.html) page.\r","\r","If you need finer control over the operation you wish to deploy on the network, then you may use the individual functions available under each section of the hierarchy under the network node.\r","\r"],"folderName":"network","adding":["\r","\r","To add a network node, select *Add Network Node* on the *Superalgos Network* node menu. A network node is added along with the basic structure of nodes to set up a node.\r","\r"],"configuring":["\r","\r","Select *Configure Network Node* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"host\": \"0.0.0.0\", \r","\"webPort\": \"34247\", \r","\"webSocketsPort\": \"8080\"\r","}\r","```\r","\r","* ```host``` is the machine or hardware represented by the network node, which must be identified by its IP address.\r","\r","* ```webPort``` is the port used by the Web Server, at this stage ```34247```.\r","\r","* ```webSocketsPort``` is the port used by the system to communicate over the local area network, by default set at ```8080```.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Task Manager","definition":"A task manager is a device used to organize and control any number of tasks, which, in turn, control bot instances. You use a task manager to start or stop several tasks at the same time.","content":["\r","\r","Task managers are used both in the context of data mining and trading operations, to facilitate the organization of tasks. \r","\r","For example, you may set up a task manager to handle tasks related to a particular set of indicators used with a certain strategy. Or, for example, to organize multiple backtesting sessions.\r","\r","{% include tip.html content=\"The key aspect of a task manager is that it allows starting and stopping all tasks at once.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a task manager, select *Add Task Manager* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run All Tasks* or *Stop All Tasks* on the menu to start and stop all tasks respectively.\r","\r"]},{"type":"Task","definition":"A task is the device used to control bot instances, that is, to start and stop bots, including sensors, indicators and the trading bot.","content":["\r","\r","Each task controls a single bot. A bot instance running on its own task is independent from other bots at the operating system level, thus, may not be affected by errors ocurring on those other bots.\r","\r"],"folderName":"network","adding":["\r","\r","To add a task, select *Add Task* on the task manager node menu.\r","\r","{% include tip.html content=\"Instead of adding nodes, configuring them, and setting references one by one, you may want to clone an existing, fully functional task with all its offspring.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run* on the menu to start a task. When a task is started, the process instance of the bot instance attached to the task is started. Also, a visual indication that both the task and the process instance are running appear surrounding the corresponding nodes, in the form of a progress ring.\r","\r","To stop a task, select *Stop* on the menu.\r","\r"]},{"type":"Trading Bot Instance","definition":"A trading bot instance is a reference to the trading bot as defined in the Masters data mine. The instance of the bot runs the defined processes and generates the defined data products.","content":["\r","\r","{{site.data.concepts.trading_bot}}\r","\r","The trading bot instance holds no definitions as to what the bot does. Instead, its process instance references the process definition in the Masters data mine. That is how the indicator bot instance obtains the information of what it needs to do once it is run.\r","\r"],"folderName":"network","adding":["\r","\r","To add a trading bot instance, select *Add Trading Bot Instance* on the task node menu. When a trading bot instance is added, it is created with one trading process instance, and a market reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","You do not start or stop a trading bot instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Sensor Process Instance","definition":"A sensor process instance is a reference to the process definition of a sensor bot, as defined in a data mine.","content":["\r","\r","For example, in the case of an instance of the Masters data mine Exchange Raw Data sensor bot, the bot process instance references the *Historic OHLCVs* process definition. Once the reference is established, the sensor process instance adopts the name of the process definition it references.\r","\r"],"folderName":"network","adding":["\r","\r","To add a sensor process instance, select *Add Sensor Process Instance* on the sensor bot instance node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","You do not start or stop a sensor process instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Indicator Process Instance","definition":"An indicator process instance is a reference to the process definition of an indicator bot, as defined in a data mine.","content":["\r","\r","Indicator bot instances usually require two indicator process instances. One of them references the indicator's *multi-period-market* process definition and the second references the *multi-period-daily* process definition.\r","\r","Once the reference is established, the indicator process instance adopts the name of the process definition it references.\r","\r"],"folderName":"network","adding":["\r","\r","To add an indicator process instance, select *Add Indicator Process Instance* on the indicator bot instance node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","You do not start or stop an indicator process instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Trading Process Instance","definition":"A trading process instance is a reference to the process definition of the trading bot, as defined in the Masters data mine.","content":["\r","\r","The trading process instance must reference the *Multi-Period* process definition of the Jason trading bot in the Masters data mine.\r","\r"],"folderName":"network","adding":["\r","\r","To add a trading process instance, select *Add Trading Process Instance* on the trading bot instance node menu. When a trading process instance is added, it is created with a market reference.\r","\r","{% include note.html content=\"After adding a trading process instance node, make sure you establish the reference to the *Multi-Period* process definition of the Jason trading bot in the Masters data mine.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","You do not start or stop a trading process instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Backtesting Session","definition":"A backtesting session is a trading mode by which the trading bot instance reads historic market data in a user-defined datetime range, applies the rules defined in the associated trading system, and generates a trading simulation.","content":["\r","\r","A backtesting session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it.\r","\r"],"folderName":"network","adding":["\r","\r","To add a backtesting session, select *Add Backtesting Session* on the trading process instance node menu. When a session is added, it is created with the full set of parameters.\r","\r","{% include note.html content=\"After adding a session node, make sure you establish a reference to the trading system you want it to work with.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Session* on the menu to access the configuration.\r","\r","```json\r","{\r","\"folderName\": \"Session-Name\"\r","}\r","```\r","\r","* ```folderName``` allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify.\r","\r"],"starting":["\r","\r","Before you start a backtesting session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select *Run* on the menu to start the session.\r","\r","After a few seconds, a literal indication of the progress of the calculations appears below the session node, displaying the date that is currently being processed. Once the calculation is finished, the session stops and the date below the session node dissapears.\r","\r","To stop a backtesting session, select *Stop* on the menu.\r","\r"]},{"type":"Trading Engine","definition":"The trading engine hierarchy is the data structure used by the trading bot to keep runtime information highly accessible and exposed to others.","content":["\r","\r","You will use this hierarchy for two main purposes:\r","\r","* **To let your trading systems access the information processed by the trading bot.** This allows strategies to keep track of and react to current and past events—including those involving the exchange, such as orders placed or filled—as the bot is running.\r","\r","* **To keep track of the actions of the trading bot via the design space visual environment and panels over the charts.** By analyzing runtime information, you may gain a detailed understanding of what happens, when, and why, throughout a trading session.\r","\r","The hierarchy exposes—literally—all the information processed by the trading bot, providing a comprehensive feedback loop to trading systems and analysis capabilities to users.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","{% include tip.html content=\"There may be more than one trading engine in a workspace. Cloning the default trading engine is the best way to start a new one.\" %}\r","\r","To add the {{ title | downcase }} node from scratch, select *Add Trading Engine* on the workspace node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Dynamic Indicators","definition":"","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Indicator Function","definition":"","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Episode","definition":"Episode is the object that handles the information corresponding to the whole run of the trading bot—beginning to end—between the specified initial datetime and final datetime, in the time range parameter of the trading session.","content":["\r","\r","In other words, episode is the context framed between the datetimes that make up the whole trading session, as per the session's configuration. As such, an episode keeps track of—and accumulates—the results of all positions entered throughout a complete run of a trading session.\r","\r","In this section of the hierarchy, you have access to:\r","\r","* **[running balances and overall performance metrics](suite-trading-engine-accounts-and-metrics.html)** denominated in both the base and quoted assets;\r","\r","* **[counters](suite-trading-engine-counters.html)**, such as the number of positions taken, orders placed, hits, fails, and so on;\r","\r","* **[statistics](suite-trading-engine-statistics.html)**, such as performance metrics consolidating both assets, number of days in the episode, or user-defined statistics;\r","\r","* **[the distance to certain events](suite-trading-engine-distance-to-event.html)**, such as the number of candles to the last take position event, or the last create order event;\r","\r","* **[rates describing each candle](suite-trading-engine-candle.html)** in the episode, such as the open, close, min and max rates;\r","\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Episode Counters","definition":"The episode counters node features counters of instances of objects that come to exist during the duration of the episode.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Position Counters","definition":"The position counters node features counters of instances of objects that come to exist during the duration of the position.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Counters","definition":"The strategy counters node features counters of instances of objects that come to exist while the strategy is open.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Counters","definition":"The order counters node features counters of instances of objects that come to exist while the order is open.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Positions","definition":"Positions counts the number of times positions have been opened, in the context of the parent node.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategies","definition":"Strategies counts the number of times strategies have been triggered-on, in the context of the parent node.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Orders","definition":"Orders counts the number of times orders have been placed, in the context of the parent node.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Fails","definition":"Fails counts the number of positions that closed with a negative profit loss, in the context of the parent node.","content":["\r","\r","{% include note.html content=\"The workings of the fail counts are analogous to the workings of the hits counts, reversing the sign. That is, when profit loss is negative, it is counted as a fail. Please refer to the definition of *hits* for the details.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Hits","definition":"Hits counts the number of positions that closed with a positive profit loss, in the context of the parent node.","content":["\r","\r","In the context of the quoted asset or the base asset, *hits* are calculated relative to the asset in question. That is, if the base asset profit loss is positive, then a hit is counted for the base asset.\r","\r","However, when the context of the asset is not specified—such as under the statistics node—then *hits* are calculated in a consolidated manner, converting the respective balances to perform the calculations. \r","\r","{% include note.html content=\"The consolidated calculations are explained thoroughly in the profit loss node.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Periods","definition":"Periods counts the number of candles that have been evaluated, in the context of the parent node.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Defined Counter","definition":"","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Episode Statistics","definition":"Episode statistics keeps track of several metrics in the context of the episode.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stop Loss","definition":"Stop loss is the current stop loss target, as defined in the manage stage of the corresponding strategy.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Take Profit","definition":"Take profit is the current take profit target, as defined in the manage stage of the corresponding strategy.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stop Loss Phase","definition":"Stop loss phase is the numeric value of the phase that is currently open, and thus, defining the value of the stop loss.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Take Profit Phase","definition":"Take profit phase is the numeric value of the phase that is currently open, and thus, defining the value of the take profit.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Take Profit Position","definition":"Take profit position indicates if the take profit target is above or below the position rate.","content":["\r","\r","Possible values are ```Above``` and ```Below```.\r","\r","The implications of setting the take profit target above or below the position rate are explained on the trading system section of the documentation, in particular while describing the [initial target rate definition](suite-strategies-open-targets.html#target-rate).\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stop Loss Position","definition":"Stop Loss position indicates if the stop loss target is above or below the position rate.","content":["\r","\r","Possible values are ```Above``` and ```Below```.\r","\r","The implications of setting the stop loss target above or below the position rate are explained on the trading system section of the documentation, in particular while describing the [initial target rate definition](suite-strategies-open-targets.html#target-rate).\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Position Statistics","definition":"Position statistics keeps track of several metrics in the context of the position.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stage Base Asset","definition":"The stage base asset node keeps track of the evolution of variables related to the base asset throughout the stage.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stage Quoted Asset","definition":"The stage quoted asset node keeps track of the evolution of variables related to the quoted asset throughout the stage.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Episode Base Asset","definition":"The episode base asset node keeps track of the evolution of variables and metrics denominated in the base asset, throughout the episode.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Episode Quoted Asset","definition":"The episode quoted asset node keeps track of the evolution of variables and metrics denominated in the quoted asset, throughout the episode.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Position Base Asset","definition":"The position base asset node keeps track of the evolution of variables related to the base asset throughout the position.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Position Quoted Asset","definition":"The position quoted asset node keeps track of the evolution of variables related to the quoted asset throughout the position.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Statistics","definition":"Order statistics keeps track of several metrics in the context of the order.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Base Asset","definition":"The order base asset node keeps track of the evolution of certain properties of orders, denominated in the base asset.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Quoted Asset","definition":"The order quoted asset node keeps track of the evolution of certain properties of orders, denominated in the quoted asset.","content":["\r","\r","{% include note.html content=\"Learn more about how accounts for the base asset and the quoted asset are kept in the [base asset and quoted asset](suite-trading-engine-base-asset-and-quoted-asset.html) page on the trading engine section of the documentation.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Defined Statistic","definition":"A user defined statistic allows users to create custom metrics by defining the corresponding calculation in a formula, in the context of the parent node.","content":["\r","\r","The current contexts in which custom statistics may be defined are episodes, positions, and orders.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Profit Loss","definition":"Profit loss is the difference between the balance at the end and the balance at the beginning of a certain period, given by the context.","content":["\r","\r","In the context of the base asset or the quoted asset, the calculation is done by subtracting the balances in the corresponding assets, using the variable appropriate to the larger context (i.e.: episode, position, etc.).\r","\r","*In general terms:*\r","\r","* ```base asset profit loss = base asset end balance - base asset begin balance```\r","\r","* ```quoted asset profit loss = quoted asset end balance - quoted asset begin balance```\r","\r","*In the case of the episode base asset and episode quoted asset:*\r","\r","```\r","tradingEngine.current.episode.episodeBaseAsset.profitLoss.value =\r"," tradingEngine.current.episode.episodeBaseAsset.balance.value -\r"," sessionParameters.sessionBaseAsset.config.initialBalance\r"," \r","tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value =\r"," tradingEngine.current.episode.episodeQuotedAsset.balance.value -\r"," sessionParameters.sessionQuotedAsset.config.initialBalance\r","```\r","\r","*In the case of the position base asset and position quoted asset:*\r","\r","```\r","tradingEngine.current.position.positionBaseAsset.profitLoss.value =\r"," tradingEngine.current.episode.episodeBaseAsset.balance.value -\r"," tradingEngine.current.position.positionBaseAsset.beginBalance\r"," \r","tradingEngine.current.position.positionQuotedAsset.profitLoss.value =\r"," tradingEngine.current.episode.episodeQuotedAsset.balance.value -\r"," tradingEngine.current.position.positionQuotedAsset.beginBalance\r","```\r","\r","In the context of the episode statistics or the position statistics, the calculation is done consolidating the profits of both assets. \r","\r","{% include note.html content=\"When the context does not refer to either of the assets in particular, then both assets are taken into account in the calculation.\" %}\r","\r","*In the context of the episode statistics:*\r","\r","```\r","tradingEngine.current.episode.episodeStatistics.profitLoss.value =\r"," tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * \r"," tradingEngine.current.episode.candle.close.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value\r","```\r","\r","*In the context of the position statistics:*\r","\r","```\r","tradingEngine.current.position.positionStatistics.profitLoss.value =\r"," tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * \r"," tradingEngine.current.position.endRate.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value\r","```\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Hit Ratio","definition":"Hit ratio is the percentage of positions that closed with a positive profit loss, in the context of the parent node.","content":["\r","\r","Hit ratio results from multiplying the number of hits by 100 and dividing it by the number of positions: ```hit ratio = hits * 100 / positions```.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Days","definition":"Days counts the number of days through which the trading bot has cycled since the object represented by the parent node was open.","content":["\r","\r","In the context of an episode, it counts the number of days in the episode.\r","\r","In the context of a position, it counts the number of days a position has been open.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Size Filled","definition":"Size filled is the amount of the order that has been filled at the exchange.","content":["\r","\r","In the context of a strategy stage, the size filled refers to the sum of the size filled for all orders placed on the corresponding stage.\r","\r","In the context of an order, it refers to the size filled for the particular order.\r","\r","Upon each execution of the trading bot, the system asks the exchange about the status of the orders placed, and the exchange reports back with the size filled and the actual rate at which orders are filled.\r","\r","In liquid markets, market orders should usually fill immediately. However, limit orders may fill incrementally. Size filled keeps track of how much of the size placed has been filled on every execution.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Percentage Filled","definition":"Percentage filled represents the portion of the order that has been filled, expressed as a percentage.","content":["\r","\r","*The formula:*\r","\r","```percentage filled = size filled * 100 / size```\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Actual Rate","definition":"Actual rate is the number reported by the exchange as the rate at which an order was filled.","content":["\r","\r","When the system consults the status of open orders with the exchange, the exchange responds with the size filled and the actual rate for the particular order. In case an order is filled incrementally, the value is updated accordingly. \r","\r","The system uses the actual rate to update the calculation of balances, which are otherwise calculated with the original rate, by default.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Fees Paid","definition":"Fees paid is the amount paid in fees.","content":["\r","\r","The exchange does not explicitly indicate how much has been paid in fees for a given transaction. Instead, when Superalgos verifies if an order has been filled or not, the exchange reports the size filled and the actual rate only.\r","\r","{% include callout.html type=\"success\" content=\"Exchange fees are *estimated* using the *fee structure* parameter set for the trading session. It is, therefore, important to set the correct values for that parameter.\" %}\r","\r","Exchanges deduct fees from the asset you are receiving. For instance, if you are selling BTC in the BTC-USDT market, then you are receiving USDT, and the exchange will deduct the fees directly from the amount of USDT you are receiving.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"ROI","definition":"ROI is a ratio that compares the profit loss with the cost of the investment, expressed as a percentage."},{"type":"Annualized Rate Of Return","definition":"Annualized rate of return is the equivalent ROI scaled to one year.","content":["\r","\r","In other words, it is the equivalent annual return received over a given period.\r","\r","*The formula:*\r","\r","```annualized rate of return = (((investment + profits) / investments) ^ (365 / days)) - 1```\r","\r","In the context of the episode base asset and episode quoted asset, the calculation is done relative to the corresponding assets, and the overall context.\r","\r","*The formulas:*\r","\r","```\r","tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = \r","((( tradingEngine.current.episode.episodeBaseAsset.beginBalance.value +\r","tradingEngine.current.episode.episodeBaseAsset.profitLoss.value ) / \r","tradingEngine.current.episode.episodeBaseAsset.beginBalance.value) ^\r","(365 / tradingEngine.current.episode.episodeStatistics.days.value)) - 1\r","\r","tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = \r","((( tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +\r","tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) / \r","tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value) ^\r","(365 / tradingEngine.current.episode.episodeStatistics.days.value)) - 1\r","```\r","\r","*The JavaScript code:*\r","\r","```js\r","tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = \r","Math.pow(\r"," ( tradingEngine.current.episode.episodeBaseAsset.beginBalance.value +\r"," tradingEngine.current.episode.episodeBaseAsset.profitLoss.value ) / \r"," tradingEngine.current.episode.episodeBaseAsset.beginBalance.value\r"," , \r"," (365 / tradingEngine.current.episode.episodeStatistics.days.value)\r"," ) - 1\r","\r","tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = \r","Math.pow(\r"," ( tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value ) / \r"," tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value\r"," , \r"," (365 / tradingEngine.current.episode.episodeStatistics.days.value)\r"," ) - 1\r","```\r","\r","In the context of the episode statistics, the calculation is done using the consolidated balance, as explained in the profit loss definition. \r","\r","{% include note.html content=\"When the context does not refer to either of the assets in particular, then both asset balances are consolidated, and denominated in the quoted asset.\" %}\r","\r","*The JavaScript code:*\r","\r","```js\r","tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value =\r","Math.pow(\r"," (\r"," tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * \r"," tradingEngine.current.episode.beginRate.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value +\r"," tradingEngine.current.episode.episodeBaseAsset.profitLoss.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value\r"," ) / \r"," (\r"," tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * \r"," tradingEngine.current.episode.beginRate.value +\r"," tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value \r"," ) \r"," , \r"," (\r"," 365 / tradingEngine.current.episode.episodeStatistics.days.value\r"," ) \r"," ) - 1\r","```\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Hit Fail","definition":"Hit fail states whether a transaction is successful or not, hit meaning it is successful and fail meaning it is not.","content":["\r","\r","Superalgos marks positions and even entire episodes as hits or fails, by evaluating profit loss for the corresponding context. If profit loss is positive, then the position or episode is a hit. If profit loss is negative, it is a fail.\r","\r","{% include note.html content=\"Please refer to the definition of *hits* for the details.\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Current","definition":"The current object refers to the context in which instances of several other objects exist—like episode, strategy, position, strategy stages, and so on—in particular, the instances that are open at the time of evaluation, hence the adjective current.","content":["\r","\r","Conceptually, current is used as an adjective applied to different concepts, such as the current episode, the current strategy, the current position, or the current strategy stage, to indicate the instance that is passing at the moment.\r","\r","The generation of offspring nodes under the current section of the hierarchy keeps track of information within the scope of the embodied concept: episode, strategy, position, and so on. \r","\r","In other words, the episode, strategy and position nodes within the current section of the hierarchy feature information relative to the instances of the episode, strategy, and position that are currently passing, at any point in time.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the current node, select *Add Missing Items* on the trading engine node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Balance","definition":"Balance is the running balance, that is, the amount of the asset that exists at any point in time.","content":["\r","\r","The balance of an asset changes every time an order involving the asset is filled. When the trading bot consults the exchange to find out the status of each order placed, the exchange answers with the size filled and actual rate for the order. That is the information used to calculate balances.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Begin Balance","definition":"Begin balance is the balance at the datetime of the begin property of the parent node or concept.","content":["\r","\r","In the context of an episode, it is the balance at the datetime the episode started.\r","\r","In the context of a position, it is the balance at the datetime the position started.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"End Balance","definition":"End balance is the balance at the datetime of the end property of the parent node or concept.","content":["\r","\r","In the context of an episode, it is the balance at the datetime the episode ended.\r","\r","In the context of a position, it is the balance at the datetime the position was closed.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Distance To Event","definition":"Distance to event features counters indicating how many periods (candles) have passed since the last occurrence of certain events, in the context of the episode.","content":["\r","\r","The information may be used from within strategies, for example, to leave a cool-down period in-between positions, to separate orders in specific intervals, or to achieve any particular logic that may require counting how much time has passed since the last time a specific event was triggered.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trigger On","definition":"Counts the periods since the last time a strategy was triggered on.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trigger Off","definition":"Counts the periods since the last time a strategy was triggered off.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Take Position","definition":"Counts the periods since the last time a position was taken.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close Position","definition":"Counts the periods since the last time a position was closed.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Next Phase","definition":"Counts the periods since the last time a next phase event was triggered.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Move To Phase","definition":"Counts the periods since the last time a move to phase event was triggered.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Create Order","definition":"Counts the periods since the last time an order was created.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Cancel Order","definition":"Counts the periods since the last time an order was canceled.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close Order","definition":"Counts the periods since the last time an order was closed.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Trigger Stage","definition":"Strategy trigger stage is the section of the data structure that keeps track of information specific to the scope of the trigger stage during the period the stage is open.","content":["\r","\r","The trigger stage is active from the instant the trigger-on event is triggered until either the trigger-off event or the take position event gets triggered. Therefore, this section of the data structure features information spaning those periods only.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Manage Stage","definition":"Strategy manage stage is the section of the data structure that keeps track of information specific to the scope of the manage stage during the period the stage is open.","content":["\r","\r","The manage stage is active from the instant the take position event is triggered until the instant either the stop or take profit targets are hit.\r","\r","Therefore, this section of the data structure features information spaning those periods only.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Open Stage","definition":"Strategy open stage is the section of the data structure that keeps track of information specific to the scope of the open stage during the period the stage is open.","content":["\r","\r","The open stage is open from the instant the take position event gets triggered, and starts closing from the instant one of the following things happen:\r","\r","* the target size is filled, \r","\r","* the close stage event is triggered, \r","\r","* the take profit or stop loss targets are hit. \r","\r","Therefore, this section of the data structure features information spaning those periods only.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Close Stage","definition":"Strategy close stage is the section of the data structure that keeps track of information specific to the scope of the close stage during the period the stage is open.","content":["\r","\r","The close stage is active from the instant either the stop loss or take profit targets are hit until the instant the target size is filled or the close stage event is triggered.\r","\r","Therefore, this section of the data structure features information spaning those periods only.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy","definition":"The strategy section of the trading engine keeps track of information relating to the trading strategies that are triggered-on, during the time they remain open.","content":["\r","\r","The strategy node is available both in the current context and the last context, that is, you may retrieve information of the strategy that was last triggered or the one currently open.\r","\r","A strategy is open from the instant it is triggered-on until the instant it is triggered-off. Therefore, this section of the data structure features information spaning those periods only.\r","\r","This section provides all the basic details about the strategy, which is particularly useful when the trading system features multiple strategies. It also provides information about the context, that is, what is going on with the market at the time strategies are triggered-on and off.\r","\r","Most interestingly, the strategy section provides information such as which situation was responsible for triggering the strategy. This may be particularly useful in complex strategies in which the trigger on event may be defined by multiple situations.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Strategy Name","definition":"Strategy name features the name of the strategy that is currently open.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Index","definition":"Index is the position of the parent object in the corresponding data collection, as determined by the context.","content":["\r","\r","In the context of a candle, *index* is the position of the current candle in the array of candles within the larger context, for example, an episode.\r","\r","Trading systems may feature more than one strategy. In the context of a strategy, *index* is the position of the strategy within the trading system. \r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Status","definition":"Status refers to the state of the object represented by the parent node at the moment of evaluation.","content":["\r","\r","There are three possible status:\r","\r","* ```Not Open```: the object is not open at the current candle.\r","\r","* ```Open```: the object is open at the current candle.\r","\r","* ```Closed```: the object closes at the current candle.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Situation Name","definition":"Situation name features the name of the situation that triggered a certain event, which is dependent on the context.","content":["\r","\r","In the context of a strategy, it is the name of the situation that triggered-on the strategy.\r","\r","In the context of a position, it's the name of the situation that triggered the take position event.\r","\r","In the context of an order, it's the situation that triggered the create order event.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Algorithm Name","definition":"Algorithm name is the name of the execution algorithm that opened the order, as specified in the trading system.","content":["\r","\r","Assigning names to execution algorithms in the definition of the trading system makes tracking the execution of orders easier.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Name","definition":"Order name is the name of the order as specified in the trading system.","content":["\r","\r","Assigning names to orders in the definition of the trading system makes tracking the execution of orders easier.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Serial Number","definition":"Serial number is a sequential number assigned to the object represented by the parent node at the moment it is opened.","content":["\r","\r","Serial numbers start at 1 and increment by 1 with each intance of the object that is opened.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Identifier","definition":"Identifier is a unique alphanumeric string by which the object represented by the parent node may be unequivocally identified.","content":["\r","\r","The property is what would be used to access a specific known record.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Id","definition":"Exchange ID is a unique identifier the exchange assigns to the order, so that it may be unequivocally identified.","content":["\r","\r","By default, it is the rate at the close of the last candle at the moment the order is placed. All market orders have the default rate value.\r","\r","In the case of limit orders, it is the rate as specified by the formula under the order rate node. If no such definition exists, then limit orders use the default value as well.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Lock","definition":"Lock is an internal mechanism that blocks the data structure of the order at the trading engine when the definition of the order at the trading system disallows spawning multiple orders.","content":["\r","\r","Possible values for lock are ```open``` and ```closed```.\r","\r","The moment an order is closed, the system checks the ```spawnMultipleOrders``` parameter at the order's configuration in the trading system. If the value is ```false```, the system sets the lock to ```closed``` so that the data structure may not be used again during the same position.\r","\r","At the moment of opening an order, the system checks the ```spawnMultipleOrders``` parameter at the order's configuration in the trading system. If the value is ```false```, the system checks the value of the lock. If the value is ```open```, then it may create the order; if it is ```closed``` then the order may not be created.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Begin","definition":"Begin is the datetime at the moment the object represented by the parent node began to exist.","content":["\r","\r","In the context of a candle, it is the datetime of the open of the candle as provided by the exchange.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"End","definition":"End is the datetime on which the object represented by the parent node ceased to exist. In case the object has not been closed yet, it is the datetime at the moment of evaluation.","content":["\r","\r","In the context of a candle, it is the datetime of the close of the candle as provided by the exchange.\r","\r","In every other context, the datetime is given by the datetime of the moment of evaluation. When evaluating a point in time in which the object remains open, *end* stores the datetime of that moment, because the object existed until that point in time when the value was last being updated. Once the object is closed, the end value is not modified again.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Open","definition":"Open is the rate at the datetime of the begin property, as provided by the exchange. That is, the rate at the open of the candle.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close","definition":"Close is the rate at the datetime of the end property, as provided by the exchange. That is, the rate at the close of the candle.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Min","definition":"Min is the minimum rate registered by the exchange during the period between the datetimes of the begin and end properties, as provided by the exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Max","definition":"Max is the maximum rate registered by the exchange during the period between the datetimes of the begin and end properties, as provided by the exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Begin Rate","definition":"Begin rate is the close rate of the candle corresponding to the datetime of the begin property.","content":["\r","\r","In the context of a strategy, it is the close rate of the last closed candle at the moment the strategy was triggered.\r","\r","In the context of a position, it is the close rate of the last closed candle at the moment the take position event was triggered.\r","\r","In the context of an episode, it is the close rate of the last closed candle at the moment the episode starts.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"End Rate","definition":"End rate is the close rate of the candle corresponding to the datetime of the end property.","content":["\r","\r","In the context of a strategy, it is the close rate of the last closed candle at the moment the strategy is triggered-off.\r","\r","In the context of a position, it is the close rate of the last closed candle at the moment the close stage is closed.\r","\r","In the context of an episode, it is the close rate of the last closed candle at the moment the episode ends.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Position","definition":"Position is the section of the data structure that keeps track of information within the scope of each position, and during the time a position is open.","content":["\r","\r","The position node is available both in the current context and the last context, that is, you may retrieve information of the position that was last opened or the one currently open.\r","\r","A position is open from the instant the take position event is triggered until the instant the close stage is closed. Therefore, this section of the data structure features information spaning those periods only.\r","\r","In this section of the hierarchy, you have access to:\r","\r","* **[balances and position performance metrics](suite-trading-engine-accounts-and-metrics.html)** denominated in both the base and quoted assets;\r","\r","* **[counters](suite-trading-engine-counters.html)**, such as the number of periods the position has been open;\r","\r","* **[statistics](suite-trading-engine-statistics.html)**, such as performance metrics consolidating both assets, or user-defined statistics;\r","\r","* **[the distance to certain events](suite-trading-engine-distance-to-event.html)**, such as the number of candles to the last take position event, or the last create order event;\r","\r","* **[rates describing each candle](suite-trading-engine-candle.html)** in the episode, such as the open, close, min and max rates;\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Rate","definition":"Rate is the rate at which the order is placed.","content":["\r","\r","By default, it is the rate at the close of the last candle at the moment the order is placed. All market orders have the default rate value.\r","\r","In the case of limit orders, it is the rate as specified by the formula under the order rate node. If no such definition exists, then limit orders use the default value as well.\r","\r","The rate is used by the system for all internal calculations affecting the accounts kept in both assets.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Entry Target Rate","definition":"Entry target rate is the target rate set on the initial targets definition, in the open stage of the strategy.","content":["\r","\r","Refresh this concepts by reading about the [initial target definitions](suite-strategies-open-targets.html) at the trading system.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exit Target Rate","definition":"Exit target rate is the target rate set on the initial targets definition, in the close stage of the strategy.","content":["\r","\r","Refresh this concepts by reading about the [initial target definitions](suite-strategies-open-targets.html) at the trading system.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Stage Defined In"},{"type":"Size","definition":"Size is the size set for the order through a combination of formulas and configurations defined in the trading system, and is the value passed on to the exchange as the size of the order.","content":["\r","\r","The system provides a flexible and robust infrastructure to control execution. The size of a single order results from the combination of multiple settings.\r","\r","* **The target size in base asset or target size in quoted asset**: The formulas under these nodes define the absolute maximum size allowed for the position. The implications of using one or the other are explained under the initial targets node in the open stage.\r","\r","* **The configuration of the execution algorithm**: The parameter ```percentageOfStageTargetSize``` determines what fraction of the target size the algorithm will attempt to execute.\r","\r","* **The configuration of the order**: The parameter ```percentageOfAlgorithmSize``` determines what fraction of the size handled by the algorithm the order shall be constrained to.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Entry Target Size","definition":"Entry target size is the target size set on the initial targets definition, in the open stage of the strategy.","content":["\r","\r","Refer to the explanations on the entry target size for some relevant context.\r","\r","Refresh this concepts by reading about the [initial target definitions](suite-strategies-open-targets.html) at the trading system.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exit Target Size","definition":"Exit target size is the target size set on the initial targets definition, in the close stage of the strategy.","content":["\r","\r","Both entry and exit target sizes may be defined either denominated in the base asset or the quoted asset. Nevertheless, the sytem keeps track of target sizes in both assets. If the target is defined denominated in the base asset, then the target for the quoted asset is calculated using the current rate, and viceversa.\r","\r","Refresh this concepts by reading about the [initial target definitions](suite-strategies-open-targets.html) at the trading system.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Size Placed","definition":"Size placed is the size of the order placed at the exchange.","content":["\r","\r","In the context of a strategy stage, the size placed refers to the sum of the sizes placed for all orders placed on the corresponding stage.\r","\r","In the context of an order, it refers to the size placed for the particular order.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Target Size","definition":"Target size is the target set on the initial targets definition which, in the context of a strategy stage, acts as a limit.","content":["\r","\r","Both the close and open stages may have multiple execution algorithms, each with multiple orders defined. In this context, the target size acts as a limit, as it is defined by the user as the maximum size allowed for any given position.\r","\r","Before placing an order, the system makes sure that the size limit embodied in the target size would not be breached by opening a new order.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exit Type","definition":"Exit type refers to the reason why the object is closed.","content":["\r","```No Exit``` is the default value until a new value is assigned before the object is closed. Other possible values vary with the context.\r","\r","In the context of the episode object:\r","\r","* ```Last Candle Reached```: the object was closed because the last candle was reached.\r","\r","In the context of the strategy object:\r","\r","* ```Position Closed```: the position was closed.\r","\r","In the context of the position object:\r","\r","* ```Take Profit```: the take profit target was hit.\r","\r","* ```Stop Loss```: the stop loss target was hit.\r","\r","In the context of an order:\r","\r","* ```Closing Stage```: the current stage started closing because the Close Stage is opening.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Process Date"},{"type":"Head Of The Market"},{"type":"Last","definition":"The last object stores instances of position and strategy objects, in particular the instances that were last open at the time of evaluation, hence the adjective last.","content":["\r","\r","Conceptually, last is used as an adjective applied to these concepts, such as the last position or the last strategy, providing the context on which those concepts exist.\r","\r","The *last* context exists so that you may easily access information about the strategy that was last triggered or the position that was last opened. \r","\r","This is valuable information, both for users and trading systems alike.\r","\r","* As a user, you will value being able to visually follow what happened with the last position after it closed, or the last strategy after it triggered off, and at the same time see what is going on with the current position or the current strategy.\r","\r","* From within a trading system, your strategies may make decisions factoring in what happened with the last position or strategy. For example, you may want to affect the size of the next position depending on the result of the last one.\r","\r","If you can code, you may actually access any object that was open in the past at any point in time, and not just the last one.\r","\r","\r","\r","\r","\r","\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Candle","definition":"The candle structure of nodes stores the properties that make up each candle in the episode, including open and close datetime, and the rates for open, min, max, and close.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Cycle","definition":"The trading bot performs its duties in regards to exchange orders and accounts in two consecutive cycles for each candle.","content":["\r","\r","In the first cycle, it checks the status of orders at the exchange, synchronizes the accounts, and verifies if conditions to place new orders are met.\r","\r","In the second cycle, it creates the orders at the exchange, provided conditions where met on the previous cycle.\r","\r","The two possible values for the cycle node are ```First``` and ```Second```.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Orders","definition":"Exchange orders is the section of the data structure that keeps track of orders of all types.","content":["\r","\r","The function of this section of the trading engine is to provide the data structure to hold the information of orders as they are open and closed. \r","\r","Orders are organized by type, such as market orders and limit orders, and also by the type of transaction, such as buy or sell orders.\r","\r","Each section of the hierarchy must have the definition of as many orders of each type as the trading system is capable of placing concurrently. For example, if the execution algorithm may place up to three limit buy orders to open a position, then three limit orders must exist under the limit buy orders section of the hierarchy. Each order defined in the trading system must reference the data structure of a matching type of order in the trading engine.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Buy Orders","definition":"Market buy orders is the section of the data structure that keeps track of this specific type of order.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Order","definition":"Market order is the section of the data structure that keeps track of the properties of a specific market order, as defined in the trading system.","content":["\r","\r","Each market order defined in the trading system must reference the data structure of a market order in the trading engine.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Sell Orders","definition":"Market sell orders is the section of the data structure that keeps track of this specific type of order.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Limit Buy Orders","definition":"Limit buy orders is the section of the data structure that keeps track of this specific type of order.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Limit Sell Orders","definition":"Limit sell orders is the section of the data structure that keeps track of this specific type of order.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Limit Order","definition":"Limit order is the section of the data structure that keeps track of the properties of a specific limit order, as defined in the trading system.","content":["\r","\r","Each limit order defined in the trading system must reference the data structure of a limit order in the trading engine.\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Parameters","definition":"Parameters are properties of trading sessions, defined by users, to determine their behavior and improve the quality of simulations.","content":["\r","\r","The behavior of parameters may vary depending on the type of session.\r","\r","Each testing session has its own set of parameters. This allows you to configure different trading sessions with different parameters, and go back and forth between them as required. For instance, you may have different backtesting sessions with different date ranges, different exchange fees or different slippage settings to account for different possible scenarios.\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameters node, select *Add Parameters* on the session or the trading system menu, depending on the context. When a parameters node is added, the full set of parameters are created with it.\r","\r","If you already have a parameters node but are missing some of the parameters, then select *Add Missing Params* on the menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading System Reference","definition":"A trading engine reference determines which trading system shall be evaluated by the trading bot to run the trading session.","content":["\r","\r","In other words, the trading system reference lets the process instance know which trading rules to process for the given session.\r","\r"],"folderName":"network","adding":["\r","\r","To add a trading ensystemgine reference, select *Add Missing Children* on the trading session node menu.\r","\r","{% include note.html content=\"After adding a trading system reference node, make sure you establish the reference to the corresponding trading system hierarchy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Engine Reference","definition":"A trading engine reference determines which trading engine the trading bot shall use to structure the data it processes while running the trading session.","content":["\r","\r","In other words, the trading engine reference lets the process instance know which data structure to use to store information related to the trading session. This means that a workspace may have more than one trading engine.\r","\r"],"folderName":"network","adding":["\r","\r","To add a trading engine reference, select *Add Missing Children* on the trading session node menu.\r","\r","{% include note.html content=\"After adding a trading engine reference node, make sure you establish the reference to the corresponding trading engine hierarchy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Session Base Asset","definition":"The base asset is the asset whose price is determined by the market. It is usually the first asset in the pair, as listed by the exchange.","adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r","{% include note.html content=\"After adding a base asset node, make sure you establish a reference to the asset in a specific market of a specific exchange in the Crypto Ecosystem hierarchy.\" %}\r","\r"],"folderName":"network","configuring":["\r","\r","Select *Configure Base Asset* on the menu to access the configuration.\r","\r","```json\r","{\r","\"initialBalance\": 0.001,\r","\"minimumBalance\": 0.0001,\r","\"maximumBalance\": 0.1\r","}\r","```\r","\r","* ```initialBalance``` is the amount of capital you wish to allocate to the trading system.\r","\r","* ```minimumBalance``` is the threshold of accummulated losses that switches off the session; when your overall balance (balanceAssetA + balanceAssetB) drops to this value, all trading stops; think of the ```minimumBalance``` as a general safety switch.\r","\r","* ```maximumBalance``` is a similar concept as with the ```minimumBalance``` but on the high side of the ```initialBalance```.\r","\r","\r"]},{"type":"Session Quoted Asset","definition":"The quoted asset is the asset on which the price of the base asset is denominated in the market. It is usually the second asset in the pair, as listed by the exchange.","content":["\r","\r","The parameter allows defining an initial balance of the corresponding asset, which may be used for trading with the corresponding trading system and trading session. Please see the configuration.\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r","{% include note.html content=\"After adding a quoted asset node, make sure you establish a reference to the second asset in the same market of the same exchange as the reference established with the base asset.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Base Asset","definition":"The market base asset is the asset in the pair used to provide a quote—a price—for the quoted asset, as listed at the exchange.","content":["\r","\r","A market base asset must reference an asset defined under the exchange assets node.\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a market base asset, select *Add Market Base Asset* on the market node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with an asset defined under the exchange assets node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Quoted Asset","definition":"The market quoted asset is the asset in the pair for which a quote is given, denominated in the base asset, as listed at the exchange.","content":["\r","\r","A market quoted asset must reference an asset defined under the exchange assets node.\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a market quoted asset, select *Add Market Quoted Asset* on the market node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with an asset defined under the exchange assets node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Time Range","definition":"The time range parameter determines the period of time on which the trading session is run.","content":["\r","\r","The parameter offers precise control over the duration, starting and ending points of the session. Several options are available, and there are differences in how backtesting and the rest of the types of trading sessions function in this regard. \r","\r","Check the configuration to learn more.\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Time Range* on the menu to access the configuration. The configuration varies slightly depending on the type of session you are running.\r","\r","{{include.configuring}}# On Backtesting Sessions\r","\r","```json\r","{\r","\"initialDatetime\": \"2019-09-01T00:00:00.000Z\",\r","\"finalDatetime\": \"2019-09-25T00:00:00.000Z\"\r","}\r","```\r","\r","* ```initialDatetime``` is the datetime the session starts at.\r","\r","* ```finalDatetime``` is the datetime the session finishes at. If you don't set a *finalDatetime*, the session runs until the date data is available.\r","\r","{{include.configuring}}# On Paper Trading, Forward Testing and Live Trading Sessions\r","\r","```json\r","{\r","\"initialDatetime\": \"2019-09-01T00:00:00.000Z\",\r","\"finalDatetime\": \"2019-09-25T00:00:00.000Z\",\r","\"allowStartingFromThePast\": false\r","}\r","```\r","\r","* ```finalDatetime``` is the datetime the session finishes at. If you don't set a *finalDatetime* at the level of the testing session or the trading system, then the session runs for one year.\r","\r","By default, paper trading, forward testing and live trading sessions start at the datetime the session is run, that is, the present time. Such a behavior is in accordance with the most common use case, by which a user starting a new live trading session usually wishes the session to start at that moment.\r","\r","However, users have requested to be allowed to start live sessions in the past. Such a feature may be useful, for example, to take an opportunity that was just missed for whatever reason, including technical ones.\r","\r","* ```initialDatetime```, in combination with the ```allowStartingFromThePast``` parameter, is a hack to allow a live session to start from a date in the past. If there is a valid ```initialDatetime``` and ```allowStartingFromThePast``` is ```true```, then the live session effectively starts from the specified date in the past. If ```allowStartingFromThePast``` is ```false``` the ```initialDatetime``` is ignored and the session starts from the present time.\r","\r","* ```allowStartingFromThePast``` may be ```true``` or ```false```.\r","\r","{% include warning.html content=\"In the case of forward testing and live trading sessions, starting from the past may involve placing orders at the exchange while evaluating past events. That is, if conditions to take a position and place orders validate true for candles in the past, the position is taken and orders are placed.\" %}\r","\r"]},{"type":"Time Frame","definition":"The time frame determines the collection of candles to be analyzed during a backtesting session, and the frequency with which the trading bot runs on paper trading, forward testing, and live trading sessions.","content":["\r","\r","In the context of backtesting sessions, what time frame you decide to run the session depends on the trading system being tested. If the trading system makes decisions based on the 1-hour candle and above, then ```01-hs``` may be the best choice. However, if decisions are influenced by sub-hour candles then you should match the time frame accordingly.\r","\r","In other words, in backtesting sessions, you should match the time frame to the smallest period on which the trading system makes decisions.\r","\r","In the context of live sessions, that is, paper trading, forward testing, and live trading, you should run the session on the ```01-min``` time frame so that the trading bot reacts fast when the price tags the take profit or stop loss targets. Remember that stop and take profit orders are not placed at the exchange after the take position event, that is, once you enter the position. Instead, the trading bot checks the current price upon each execution cycle and determines whether targets have been hit or not. If targets are hit, only then orders are placed. That is why running live trading sessions at the ```01-min``` time frame is recommended. Learn more about the [management](suite-strategies-manage.html) of take profit and stop loss targets.\r","\r","If for whatever reason you don't need to minimize the potential for slippage when hitting stop or take profit targets, you may choose whatever time frame you like, taking into account the explanations below.\r","\r","{{include.heading}}## Why the Time Frame Matters\r","\r","{% include callout.html type=\"success\" content=\"Running trading sessions of any given trading system on different time frames may produce different results. This is because the behavior of a trading session may vary depending on how well the time frame on which the session is run matches the logic of the strategy.\" %}\r","\r","This is why:\r","\r","The trading bot evaluates closed candles only. At any given point in time, the current candle in each time frame is the candle that closed last.\r","\r","*For example:*\r","\r","Let's say it's ```2020-06-11T11:39:30:00.000Z```, that is, 11 hours, 39 minutes and 30 seconds of June 11th, 2020.\r","\r","* The current 1-minute candle is the one which closed at 11:38:59.999.\r","* The current 5-minute candle is the one which closed at 11:34:59.999.\r","* The current 30-minute candle is the one which closed at 11:29:59.999.\r","* The current 1-hour candle is the one which closed at 10:59:59.999.\r","* The current 2-hour candle is the one which closed at 09:59:59.999.\r","* The current 6-hour candle is the one which closed at 05:59:59.999.\r","* The current 24-hour candle is the one which closed at 23:59:59.999 of June 10th!\r","\r","... and so on.\r","\r","Let's say the trading system implements conditions that evaluate 30-minute and 1-hour candles.\r","\r","If a session is run at the 30-minutes time frame, all 30-minutes candles are evaluated. Also, all 1-hour candles are evaluated twice.\r","\r","However, if the session is run at the 1-hour time frame, only one out of two 30-minute candles are evaluated.\r","\r","And if the session is run at the 2-hour time frame, only one out of four 30-minute candles and one out of two 1-hour candles are evaluated.\r","\r","This means that running the session (for this particular trading system) at the 30-minute time frame has higher probabilities of conditions evaluating 30-minute candles to be ```true``` during the session.\r","\r","{% include callout.html type=\"success\" content=\"In other words, when running the session on time frames higher than the time frame on which decisions are made, chances are the bot will eventually skip candles on which conditions would have evaluated true, potentially skipping trading opportunities.\" %}\r","\r","The above is true for all types of trading sessions.\r","\r","{{include.heading}}## Backtesting Vs. Live Sessions\r","\r","In a backtesting session, the collection of candles evaluated is determined by the time frame selected to better simulate what would happen if the live trading session was run in the same time frame.\r","\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Time Frame* on the menu to access the configuration.\r","\r","```js\r","{\r","\"value\": \"01-min\"\r","}\r","```\r","\r","* ```value``` is the setting for the time frame. You may use any of the values below.\r","\r","Available options at the sub-hour level are:\r","\r","```json\r","01-min\r","02-min\r","03-min\r","04-min\r","05-min\r","10-min\r","15-min\r","20-min\r","30-min\r","45-min\r","```\r","\r","Available options at larger time frames are:\r","\r","```json\r","01-hs\r","02-hs\r","03-hs\r","04-hs\r","06-hs\r","08-hs\r","12-hs\r","24-hs\r","```\r","\r"]},{"type":"Slippage","definition":"The slippage is an assumption on the difference between the simulated rate and the actual fill rate of an order, most relevant in the context of backtesting and paper-trading sessions. The parameter is a tool to make simulations more realistic.","content":["\r","\r","In the context of forward testing and live trading sessions, slippage does not affect the actual transactions. However, the parameter is taken into account when creating simulation layers, which are also available during forward testing and live trading.\r","\r","Slippage is factored both in the session reports and in the graphic representation of each trade provided by the simulation trades product of the trading bot.\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Slippage* on the menu to access the configuration.\r","\r","```json\r","{\r","\"marketOrderRate\": 0.1,\r","\"stopLoss\": 0.2,\r","\"takeProfit\": 0.3\r","}\r","```\r","\r","* ```marketOrderRate``` is the slippage value to be applied to the rate of the take position order, expressed as a percentage (*i.e.:* 0.1 means 0.1%).\r","\r","* ```stopLoss``` is the slippage value to be applied to the rate of the stop order, expressed as a percentage (*i.e.:* 0.2 means 0.2%).\r","\r","* ```takeProfit``` is the slippage value to be applied to the rate of the take profit order, expressed as a percentage (*i.e.:* 0.3 means 0.3%).\r","\r","The number you enter is applied as a percentage of the price of the order and added or subtracted from the price depending on the circumstances, always working against you. For instance, ```\"marketOrderRate\": 0.1``` means the position will be set at a price 0.1% higher or lower depending on which of the assets in the pair is your base asset. \r","\r","{% include note.html content=\"If the slippage parameter is left empty or detached both from your session and your trading system, slippage is not computed during simulations.\"%}\r","\r"]},{"type":"Fee Structure","definition":"The fee structure is a parameter fundamental to the calculation of fees, both in testing and live trading sessions.","content":["\r","\r","Exchange fees are a crucial part of trading. A strategy may work like a charm when you leave fees out of the equation but would lead you to bankruptcy in a live trading situation.\r","\r","Exchanges don't usually report the amount charged in fees on each transaction, thus, the system calculates fees and subtract them from balances. Learn more about the handling of [fees](suite-trading-engine-order-specific.html#fees-paid).\r","\r","{% include important.html content=\"The accuracy of the internal account-keeping depends on this parameter. Make sure you obtain the correct fee structure from the exchange corresponding to the tier of your account.\" %}\r","\r","To illustrate how fees affect your bottom line, take a look at the image below.\r","\r","[![Trading-Simulation-Fees-Fails](https://user-images.githubusercontent.com/13994516/63636432-8d8cdf80-c66f-11e9-86a3-480d157d8126.gif)](https://user-images.githubusercontent.com/13994516/63636432-8d8cdf80-c66f-11e9-86a3-480d157d8126.gif)\r","\r","The trade hits the take profit target above the Position Rate level, however, due to fees, the trade has a negative 0.32% ROI.\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Fee Structure* on the menu to access the configuration.\r","\r","```json\r","{\r","\"maker\": 0.15,\r","\"taker\": 0.25\r","}\r","```\r","\r","* ```maker``` is the setting for the fee the exchange charges when an order adds liquidity to the market, such as with limit orders.\r","\r","* ```taker``` is the setting for the fee the exchange charges when an order takes liquidity from the market, such as with market or instant orders.\r","\r","{% include note.html content=\"Check the fees structure in your exchange, carefully looking into the tier you fall in to feed accurate assumptions to your backtesting and paper trading sessions.\" %}\r","\r","{% include note.html content=\"If the fee structure parameter is left empty or detached both from your session and your trading system, fees are not computed during simulations.\" %}\r","\r","{% include important.html content=\"Remember that, for the time being, and until the new execution engine is released, all orders placed by the trading bot are *market orders*, thus, the *taker* fee applies in all cases.\" %}\r","\r"]},{"type":"Snapshots","definition":"Snapshots are CSV files output by the trading bot listing every trade in a backtesting session. The snapshots parameter determines whether snapshots shall be produced, and how.","content":["\r","\r","Learn more about [snapshots](suite-snapshots.html) and check the configuration file to control if and how snapshots are produced.\r","\r"],"folderName":"network","adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Slippage* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"strategy\": true,\r"," \"position\": true\r","}\r","```\r","\r","* ```strategy``` determines whether to take a snapshot at the trigger on event or not; possible values are ```true``` or ```false```.\r","\r","* ```position``` determines whether to take a snapshot at the take position event or not; possible values are ```true``` or ```false```.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Heartbeats","definition":"During a trading session, the backend communicates with the front end via heartbeats to inform the frontend about the status of the session. The parameter controls what information is made available to the user through the frontend.","content":["\r","\r","This parameter affects how you see the progress of the trading session below the trading bot instance node on the design space.\r","\r"],"folderName":"network","adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Slippage* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"date\": true,\r"," \"candleIndex\": false\r","}\r","```\r","\r","* ```date``` determines whether the date is shown in the progress notice below the trading process instance node; possible values are ```true``` or ```false```.\r","\r","* ```candleIndex``` determines whether the index of the candle is shown in the progress notice below the trading process instance node; possible values are ```true``` or ```false```.\r","\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Defined Parameters","definition":"Users may define parameters to be used within the trading system during the trading session.","content":["\r","\r","Parameters defined in the configuration file of these node become available to trading systems using the following path: ```sessionParameters.userDefinedParameters.config.parameterName```.\r","\r","These parameters may be useful, for example, when you wish to use a *constant* multiple times across several nodes in the definition of a strategy. Instead of feeding a constant value to all formulas involved, you may feed the parameter instead. This gives you the added benefit of being able to change the value of such a constant in a single point.\r","\r"],"folderName":"network","adding":["\r","\r","To add a parameter that may be missing, select *Add Missing Params* on the parameters node menu. \r","\r"],"configuring":["\r","\r","Select *Configure Slippage* on the menu to access the configuration.\r","\r","```json\r","{ \r"," \"param1Name\": \"A text string value example\",\r"," \"param2Name\": 0\r","}\r","```\r","\r","* ```param1Name``` is an example of a name. You may change the names of the parameters as required. Values including text strings go between quotation marks, while numeric values, without. You may define as many parameters as you wish; simply separate them with a comma to keep a valid JSON format for the configuration file.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Time Frames Filter","definition":"The time frame filters node allows control over which time frames are to be calculated by each indicator bot instance running on the data mining operation.","content":["\r","\r","Limiting the number of time frames calculated by any given indicator to the few that may be required by a particular trading system has a significant positive impact on performance: it reduces the load on the CPU, the memory requirements, and the requirements of storage space, in proportion with the time frames you remove.\r","\r","When a time frames filter is set up, a ```Time.Frames.json``` file is created by the indicator process in the corresponding output folder. This file is read by others—such as the charting system—to get the information regarding which time frames are available and which are not, to avoid reporting errors.\r","\r","{% include important.html content=\"Before applying a time frames filter or changing the configuration, that is, changing which time frames are produced and which are not, it is highly recommended to delete the data corresponding to the affected indicator, to avoid inconsistencies in the data that may later cause confusion.\" %}\r","\r","{% include note.html content=\"When no time frames filter is defined, the bot processes all time frames by default.\" %}\r","\r"],"folderName":"network","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"dailyTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\r","\"marketTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\"]\r","}\r","```\r","\r","* ```dailyTimeFrames``` features the time frames corresponding to the *daily files* type of data structure; in practical terms, the time frames below one hour.\r","\r","* ```marketTimeFrames``` features the time frames corresponding to the *market files* type of data structure; in practical terms, the time frames of one hour and above.\r","\r","{% include tip.html content=\"Remove the time frames you are not interested in, making sure the JSON file is still valid.\" %}\r","\r"]},{"type":"Paper Trading Session","definition":"A paper trading session is a trading mode by which the trading bot instance reads a live market data feed, applies the rules defined in the associated trading system, and generates a trading simulation.","content":["\r","\r","A paper trading session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it.\r","\r"],"folderName":"network","adding":["\r","\r","To add a paper trading session, select *Add Paper Trading Session* on the trading process instance node menu. When a session is added, it is created with the full set of parameters.\r","\r","{% include note.html content=\"After adding a session node, make sure you establish a reference to the trading system you want it to work with.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Session* on the menu to access the configuration.\r","\r","```json\r","{\r","\"folderName\": \"Session-Name\"\r","}\r","```\r","\r","* ```folderName``` allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify.\r","\r"],"starting":["\r","\r","Before you start a paper trading session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select *Run* on the menu to start the session.\r","\r","To stop a backtesting session, select *Stop* on the menu.\r","\r"]},{"type":"Forward Testing Session","definition":"A forward testing session is a trading mode by which the trading bot instance performs live trading with a user-defined fraction of the available capital.","content":["\r","\r","A forward testing session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it.\r","\r","{% include important.html content=\"Running a live session requires the setup of a key reference at the market reference. It also requires a live data feed, meaning that the corresponding sensor bot, along with all indicators used by the referenced trading system, must be up and running. Finally, a live session also requires at least 48 hours of historic market data. Bear in mind that the trading system may require even more historic market data to properly analyze the market.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a forward testing session, select *Add Forward Testing Session* on the trading process instance node menu. When a session is added, it is created with the full set of parameters.\r","\r","{% include note.html content=\"After adding a session node, make sure you establish a reference to the trading system you want it to work with.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Session* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"folderName\": \"Session-Name\",\r","\"balancePercentage\": 1\r","}\r","```\r","\r","* ```folderName``` allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify.\r","\r","* ```balancePercentage``` is a number defining the percentage of the initialBalance specified in the base aset configuration that will be used for trading. For instance, ```\"balancePercentage\": 1``` means that 1% of your balance will be made available. Just like the ```initialBalance``` is scaled down, the ```minimumBalance``` and ```maximumBalance``` are also scaled down accordingly (see base asset).\r","\r","Let's draw a quick example:\r","\r","Your base asset is USDT and your initialBalance is USDT 10,000.\r","\r","If you set up your forward-testing session with \"balancePercentage\": \"1\", then USDT 10,000 * 1% = USDT 100. This is the balance that will be available to your forward-testing session.\r","\r","{% include important.html content=\"You need to take this into account at the time of defining your positionSize formula. If the formula is a constant, you may easily run out of balance, as only a fraction of the balance will be available for the strategy to use. It may be a good idea to set up your positionSize as a function of your available balance instead.\" %}\r","\r"],"starting":["\r","\r","Before you start a forward testing session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select *Run* on the menu to start the session.\r","\r","To stop a backtesting session, select *Stop* on the menu.\r","\r"]},{"type":"Key Reference","definition":"The key reference is a reference to an exchange account key as defined in a specific user account, in a specific exchange, on the Crypto Ecosystem hierarchy.","content":["\r","\r","Usually, exchanges require autentication via your exchange account key for monetary transactions only. However, some exchanges may require autentication in other contexts as well, for instance, to retrieve information above a certain quota, or to retrieve raw trades data instead of OHLCV data.\r","\r","For those reasons, exchange key references are available both in the context of data mining and trading operations, and are always attached to the corresponding task.\r","\r","Forward testing and live trading sessions always require setting up key references, as that is the kind of scenario in which the user must validate with the exchange.\r","\r","In all cases, the key reference node must reference a valid exchange account key from an account with the exchange, as defined in the Crypto Ecosystem hierarchy.\r","\r","{% include important.html content=\"Most exchanges do not allow the same exchange account key to be used with multiple processes querying the exchange API. This means that if you are trading with multiple trading systems or multiple sessions on the same exchange, each session requires different exchange account keys.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a key reference, select *Add Key Reference* on the task node menu.\r","\r","{% include note.html content=\"Remember to establish a reference with a valid exchange account key after creating the key reference.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Live Trading Session","definition":"A live trading session is a trading mode by which the trading bot instance reads a live market data feed, applies the rules as defined in the associated trading system, places the corresponding orders at the associated exchange, and stores the defined data products.","content":["\r","\r","A live trading session node must reference a trading system to gain access to the trading logic to be applied during the session. Other considerations framing the session come from the set of parameters attached to it.\r","\r","{% include important.html content=\"Running a live session requires the setup of a key reference at the market reference. It also requires a live data feed, meaning that the corresponding sensor bot, along with all indicators used by the referenced trading system, must be up and running. Finally, a live session also requires at least 48 hours of historic market data. Bear in mind that the trading system may require even more historic market data to properly analyze the market.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a live trading session, select *Add Live Trading Session* on the trading process instance node menu. When a session is added, it is created with the full set of parameters.\r","\r","{% include note.html content=\"After adding a session node, make sure you establish a reference to the trading system you want it to work with.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Session* on the menu to access the configuration.\r","\r","```json\r","{\r","\"folderName\": \"Session-Name\"\r","}\r","```\r","\r","* ```folderName``` allows you to set a significant name to the folder in which the data products—and logs—generated by the session are stored. If left blank, the system names the folders with the session id. This may be handy when you intend to consult the raw data generated by the session, as, otherwise, the folder would be hard to identify.\r","\r"],"starting":["\r","\r","Before you start a live trading session, the corresponding task needs to be running, as it is the task that puts the trading bot instance to run. Once the trading bot instance is running, select *Run* on the menu to start the session.\r","\r","To stop a backtesting session, select *Stop* on the menu.\r","\r"]},{"type":"Sensor Bot Instance","definition":"A sensor bot instance is a reference to a sensor bot as defined in a data mine. The instance of the bot runs the defined processes and generates the defined data products.","content":["\r","\r","{{site.data.concepts.sensor_bot}}\r","\r","The sensor bot instance holds no definitions as to what the bot does. Instead, its process instance references a process definition in the corresponding data mine. That is how the sensor bot instance obtains the information regarding what it needs to do once it is run.\r","\r"],"folderName":"network","adding":["\r","\r","To add a sensor bot instance, select *Add Sensor Bot Instance* on the task node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Sensor Bot Instance* on the menu to access the configuration.\r","\r","```json\r"," {\r"," \"startDate\": \"2020-01-01\"\r"," }\r","```\r","\r","* ```startDate``` is the *desired starting date* of the data product the sensor bot instance builds, in the ```YYYY-MM-DD``` format. The sensor bot instance queries its data source for data starting on the configured ```startDate```.\r","\r"," * The actual date in which the dataset starts depends on external factors: A. The market may start at a later date. B. The exchange may limit how far in the past data may be retrieved. In both cases, the sensor bot automatically discovers the date closest to the *desired starting date* that is possible to start with, and proceeds accordingly.\r","\r"," * In the case the ```startDate``` is changed after the sensor bot has started building a data product, either for an earlier or later date, the sensor re-evaluates the feasibility of starting at the new date. The actual date may or may not change; regardless, the sensor bot discards the existing data product and starts over from the newly discovered date. In other words, if the ```startDate``` is changed, the sensor bot starts over.\r"," \r"," * Notice that the above starts a chain reaction among all indicator bots that have a data dependency with the sensor bot's output dataset. Also, if the actual date ends up changing, all indicators that determine the starting date of the market by looking at the date discovered by the sensor bot have to discard their existing data products and start over from the new date.\r","\r","\r"],"starting":["\r","\r","You do not start or stop a sensor bot instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Indicator Bot Instance","definition":"An indicator bot instance is a reference to an indicator bot as defined in a data mine. The instance of the bot runs the defined processes and generates the defined data products.","content":["\r","\r","{{site.data.concepts.indicator_bot}}\r","\r","The indicator bot instance holds no definitions as to what the bot does. Instead, its processes instances reference the process definitions in the corresponding data mine. That is how the indicator bot instance obtains the information of what it needs to do once it is run.\r","\r"],"folderName":"network","adding":["\r","\r","To add an indicator bot instance, select *Add Indicator Bot Instance* on the task node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","You do not start or stop an indicator bot instance directly. Instead, you start or stop the corresponding task.\r","\r"]},{"type":"Data Mine","definition":"A data mine is a hierarchy that contains definitions of bots, including the trading bot, sensors, indicators, and even plotters. These definitions make up the actual programs of such bots—the source code.","content":["\r","\r","In a way, data mines are catalogs of bots that anyone may create. This hierarchy provides all the tools required to create sensors, indicators, and plotters, with minimal coding required.\r","\r","Because the hierarchy provides definitions, it does not intervene in the execution of bots. Instead, the definitions in data mines are instantiated from the network hierarchy by bot instances. Bot instances and process instances are the ones running the code according to the definitions in the corresponding data mine.\r","\r","{% include important.html content=\"Changes made to data mines shipping with the system may not be saved at the workspace level. If you wish to modify those hierarchies and use them in such modified versions, you need to clone them and modify the clone instead. To do this successfully, you need to learn more about [backups](suite-backups.html) and [clones](suite-clones.html).\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a data mine, select *Add Data Mine* on the workspace node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Data Mine* on the menu to access the configuration.\r","\r","```json\r","{\r","\"codeName\": \"Supermine\"\r","}\r","```\r","\r","* ```codeName``` is the name of the data mine as used within the code of the system.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Mine"},{"type":"Sensor Bot","definition":"A sensor bot is an algorithm that extracts raw data from external sources (i.e.: exchanges, Twitter, etc.) and stores it in a dataset that other bots may consume.","content":["\r","\r","The sensor bot node holds all definitions required for a sensor bot to function. Definitions are split between the definition of processes and products. A sensor's processes is an algorithm that obtains data from a third pary and produces an output for other bots to consume. Part of that output is the data products the bot creates.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a sensor bot, select *Add Sensor Bot* on the data mine node menu. A sensor bot is created along with the basic structure of nodes required to define it.\r","\r"],"configuring":["\r","\r","Select *Configure Bot* on the menu to access the configuration.\r","\r","```json\r","{\r","\"codeName\": \"Super\",\r","\"repo\": \"Super-Sensor-Bot\"\r","}\r","```\r","\r","* ```codeName``` is the name of the bot as used within the code of the system.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Process Definition","definition":"The process definition node groups all definitions required for a process to function. The Multi-Period-Market Process deals with time frames of one hour and above. The Multi-Period-Daily Process deals with time frames of 45 minutes and below.","content":["\r","\r","As hinted above, most bots—in particular indicators—have two different processes. The reason is that different data structures need to be handled in different manners. The Multi-Period-Daily process handles *daily files*, while the Multi-Period-Market process handles *market files*.\r","\r","The Multi-Period-Market process deals with time frames of one hour and above. Because these time frames produce relatively small numbers of records, the process builds one single file per time frame spanning the whole market history—hence the name Multi-Period-*Market*.\r","\r","On the other hand, the Multi-Period-Daily process deals with time frames below one hour. These time frames produce huge numbers of records, therefore, the corresponding data must be fragmented in multiple files. The Multi-Period-Daily process builds one file per day for each time frame—hence the name Multi-Period-*Daily*.\r","\r","{% include note.html content=\"The way in which datasets are structured by each of the processes is determined by the corresponding dataset definitions.\" %}\r","\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a process definition, select *Add Process Definition* on the bot's menu. A process definition node is created along with the basic structure of nodes comprising the definition.\r","\r"],"configuring":["\r","\r","Select *Configure Process* on the menu to access the configuration.\r","\r","**Multi-Period-Market:**\r","\r","```json\r"," {\r"," \"codeName\": \"Multi-Period-Market\",\r"," \"normalWaitTime\": 0,\r"," \"retryWaitTime\": 10000,\r"," \"framework\": {\r"," \"name\": \"Multi-Period-Market\"\r"," }\r"," }\r","```\r","\r","**Multi-Period-Daily:**\r","\r","```json\r"," {\r"," \"codeName\": \"Multi-Period-Daily\",\r"," \"normalWaitTime\": 0,\r"," \"retryWaitTime\": 10000,\r"," \"framework\": {\r"," \"name\": \"Multi-Period-Daily\"\r"," }\r"," }\r","```\r","\r","* ```codeName``` is the name of the process as used within the code of the system.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Process Output","definition":"The process output groups the definitions of which datasets are impacted by the process, that is, which datasets the process builds or takes a part in building.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a process output node, select *Add Missing Items* on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Process Dependencies","definition":"Process dependencies are references to various data structures on which the process depends to function.","content":["\r","\r","While processes run autonomously, most processes participate in a value-adding chain by which a process produces a data product that other processes may consume as an input to be processed further. This means that bots—while autonomous in their particular jobs—do depend both on other bots and on the data other bots produce.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a process dependencies node, select *Add Missing Items* on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Status Dependency","definition":"Status dependencies are references to a status report that define which process the process establishing the reference depends on.","content":["\r","\r","The reference is established to acquire the information relative to what the target process is doing. For example, by reading a status report a process may learn when was the last time the referenced process ran, and what was the last file processed.\r","\r","The status report referenced may belong to the same process— which is called a self-reference. In such a case, the process is learning what it did the last time it ran. Also, the status report referenced may belong to another process—another bot. In that case, the dependency may be of the Market Starting Point or Market Ending Point types.\r","\r","* **Self Reference** is mandatory, as a process needs to read its own status report every time it wakes up.\r","\r","* **Market Starting Point** is a status dependency existing on Multi-Period-Daily processes so that the process establishing the reference learns the datetime of the start of the market. Usually, the reference is established with the sensor's Historic-OHLCVs process status report. Multi-Period-Market processes do not have this type of status dependency as the date of the start of the market is implied in their dataset (a single file with all market data).\r","\r","* **Market Ending Point** is a status dependency existing both in Multi-Period-Market and Multi-Period-Daily processes so that the process establishing the reference knows the datetime of the end of the market.\r","\r","[![Indicators-Process-Dependencies-01](https://user-images.githubusercontent.com/13994516/68991956-dfa36280-0864-11ea-87ec-f0e4e3b7bf0f.gif)](https://user-images.githubusercontent.com/13994516/68991956-dfa36280-0864-11ea-87ec-f0e4e3b7bf0f.gif)\r","\r","The image above shows a case of a self-reference status dependency as well as a market ending point status dependency.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a status dependency, select *Add Status Dependency* on the process dependencies node menu.\r","\r","{% include tip.html content=\"Remember that a status dependency must be configured, and must establish a reference to the appropriate status report.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Status Dependency* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"mainUtility\": \"Self Reference|Market Starting Point|Market Ending Point\"\r","}\r","```\r","\r","* ```mainUtility``` determines the type of status dependency, with possible values being ```Self Reference```, ```Market Starting Point```, or ```Market Ending Point```.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Status Report","definition":"Status reports serve as temporal annotations that bots read every time they run to know what was done in the previous cycle and what the state of affairs is at present. Status reports are dynamic, and they change constantly, with updates after every cycle of the associated process.","content":["\r","\r","Bots do not run continuously. Instead, they run in cycles. A cycle usually lasts until there is no more data to process, and once they finish, they shut down until the next cycle is due. A status report is a file every bot writes at the end of each cycle with information about the last run, including the datetime of the run and the last record processed.\r","\r","A status report may be consumed by the same bot producing it, or by other bots.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a status report, select *Add Missing Items* on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Execution Started Event","definition":"The execution started event is the event that triggers the execution of a process. It usually references the execution finished event of another process on which the process depends on.","content":["\r","\r","These references determine when a process is due for another run. By listening to the execution finished event of the process it depends on, it may wake up just in time to process the new batch of data the dependency has just delivered.\r","\r","Bots form a sort of multi-branched execution sequence with an indeterminate number of dependencies. Every time the bot further down the tree of dependencies finishes a cycle, it triggers the execution of multiple bots listening to its execution finished event.\r","\r","In the context of a trading process instance running a trading session on the network hierarchy, the execution started event may be used to force the trading process to run only after the last indicator bot dependency finishes its job. This guarantees that all dependencies are up to date and that the trading bot will evaluate the information corresponding to the same candles for all indicators used by the trading system.\r","\r","Not setting up this event on a trading session may result in eventual data inconsistencies, as—in theory—the trading bot may run with some indicators up to date and some slightly delayed.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add an execution started event, select *Add Missing Items* on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r","{% include tip.html content=\"Remember that an execution started event must establish a reference to the appropriate execution finished event.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Execution Finished Event","definition":"The execution finished event is the event that processes trigger once they have finished an execution cycle. The event is broadcasted to whoever wants to listen, so that other bots may know when the process has finished its execution cycle.","content":["\r","\r","The execution finished event is responsible for triggering the execution of every process that depends on the data a bot produces. If bot Alice depends on bot Bob, Alice listens to the execution finished event of Bob so that it may start a new execution cycle as soon as Bob finishes its cycle. Alice listens to Bob's execution finished event by establishing a reference from its execution started event.\r","\r","[![Indicators-Process-Execution-Started-Finished-Events-01](https://user-images.githubusercontent.com/13994516/68993254-39605880-0876-11ea-9ee7-9f49976bd2dc.gif)](https://user-images.githubusercontent.com/13994516/68993254-39605880-0876-11ea-9ee7-9f49976bd2dc.gif)\r","\r","The image above shows a reference established from the execution started event of a process to the execution finished event of another process.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add an execution finished event, select *Add Missing Items* on the process definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Output Dataset Folder","definition":"An output dataset folder is an organizational device used to create arrangements of output datasets, particularly useful when the bot has many products.","content":["\r","\r","In cases in which a single bot has many different products, output dataset folders may help organize the outputs referencing each product, making their management easier. Folders may be nested like folders in the file system.\r","\r","The use of output dataset folders is optional, as product definitions may also exist outside of folders.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Product Definition Folder","definition":"A product definition folder is an organizational device used to create arrangements of product definitions, particularly useful when the bot has many products.","content":["\r","\r","In cases in which a single bot has many different products, product definitions folders may help organize those products, making their management easier. Folders may be nested like folders in the file system.\r","\r","The use of product definition folders is optional, as product definitions may also exist outside of folders.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Product Definition","definition":"The product definition node holds all definitions that make up a product, including how the product is calculated and the datasets the product is comprised of.","content":["\r","\r","A bot may feature multiple products, thus, there may be multiple product definitions. Three main aspects need to be defined in terms of products: the characteristics of the dataset, the composition of each record, and the way records are calculated.\r","\r","{% include note.html content=\"A product definition usually references a plotter module, which provides a graphic representation of the underlying dataset\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a product definition, select *Add Product Definition* on the bot's node menu. A product definition is created along with the basic structure of nodes required to make up a product.\r","\r"],"configuring":["\r","\r","Select *Configure Product* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"codeName\": \"Product-Name\",\r"," \"singularVariableName\": \"productName\",\r"," \"pluralVariableName\": \"productNames\"\r","}\r","```\r","\r","* ```codeName``` is the name of the product as it is used within the bot's code.\r","\r","* ```singularVariableName``` is the singular form of the name of the variable representing the product, as is used on strategies (*i.e.:* ```bollingerChannel.direction```, where *bollingerChannel* is the name of the product as defined in its configuration and *direction* is the name of the property.\r","\r","* ```pluralVariableName``` is the plural form of the variable.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Dataset Definition","definition":"A dataset definition contains a configuration file that defines many aspects of the dataset. There are two types of dataset definitions: Multi-Period-Market and Multi-Period-Daily.","content":["\r","\r","A good part of what makes datasets easy to consume by other bots is the fact that they are standardized in terms of their structure. It is that structure that is specified in the dataset definitions.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a dataset definition, select *Add Dataset Definition* on the bot's node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Definition* on the menu to access the configuration.\r","\r","**Multi-Period-Market:**\r","\r","```json\r","{\r"," \"codeName\": \"Multi-Period-Market\",\r"," \"type\": \"Market Files\",\r"," \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\r"," \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period\",\r"," \"fileName\": \"Data.json\",\r"," \"timeFrames\": {\r"," \"filePath\": \"\",\r"," \"fileName\": \"\"\r"," }\r","}\r","```\r","\r","**Multi-Period-Daily:**\r","\r","```json\r","{\r"," \"codeName\": \"Multi-Period-Daily\",\r"," \"type\": \"Daily Files\",\r"," \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\r"," \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset/@Period/@Year/@Month/@Day\",\r"," \"fileName\": \"Data.json\",\r"," \"dataRange\": {\r"," \"filePath\": \"@Exchange/@BaseAsset-@QuotedAsset/@DataMine/@Bot/Output/@Product/@Dataset\",\r"," \"fileName\": \"Data.Range.json\"\r"," },\r"," \"timeFrames\": {\r"," \"filePath\": \"\",\r"," \"fileName\": \"\"\r"," }\r","}\r","```\r","\r","\r","* ```codeName``` is the name of the dataset as used within the code.\r","\r","* ```type``` refers to the type of dataset; possible values are ```Market Files``` and ```Daily Files```.\r","\r","* ```validTimeFrames``` refers to the time frames handled by the dataset.\r","\r","* ```filePath``` sets the path on which files are stored; the proper name of the data mine, the bot and the product need to be entered.\r","\r","* ```fileName``` sets the name of the files that constitute the dataset.\r","\r","* ```timeFrames``` sets the name and path of the file indicating which time frames shall be filtered when the users sets a time frames filter.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Indicator Bot","definition":"An indicator bot is an algorithm that processes information that other bots have generated, and produces elaborate datasets for others to consume.","content":["\r","\r","The indicator bot node holds all definitions required for an indicator bot to function. Definitions are split between the definition of processes and products. Processes are algorithms that go through an input dataset, perform certain calculations, and produce an output. Products are the outcome of the work produced by these algorithms, in the form of ellaborate data sets.\r","\r","Most of the behavior expected from an indicator bot is defined by the structure of nodes in the hierarchy and the references among the nodes within these definitions. As such, you do not need to code any of the functions that make up the infrastructure functionality. Dependencies, outputs, data structures, execution sequences, and several other problems are handled by the definitions embodied in the structure of nodes that make up an indicator, and are configured in the visual environment of the design space. Coding is limited to the actual calculation and data building procedures.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add an indicator bot, select *Add Indicator Bot* on the data mine node menu. An indicator bot is created along with the basic structure of nodes required to define it.\r","\r"],"configuring":["\r","\r","Select *Configure Bot* on the menu to access the configuration.\r","\r","```json\r","{\r","\"codeName\": \"Superbot\"\r","}\r","```\r","\r","* ```codeName``` is the name of the bot as used within the code of the system.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Output Dataset","definition":"The output dataset is a reference to a dataset definition. By establishing such reference, the process acquires the definitions as of how the dataset is to be constructed.","content":["\r","\r","There are other effects of establishing a reference from the output dataset to a product dataset definition. Upon execution, every time a process finishes a processing cycle, it triggers an event that may be consumed by other entities. This event indicates that the datasets impacted by the process have been updated.\r","\r","An example of other entities that may be listening to such events is that of plotters. Plotters read datasets and create graphical representations of this data over the charts. Charts are constantly updating the information in the form of candles and indicators in realtime, synchronized with the data being extracted from the exchange by the sensor bot. That kind of automatism is possible thanks to the events that processes trigger every time an execution cycle is finished, signaling to everyone listening that new data is available on each of the impacted datasets.\r","\r","[![Indicators-Process-Output-01](https://user-images.githubusercontent.com/13994516/68976798-f01cf400-07f6-11ea-9ffb-198b5853a220.gif)](https://user-images.githubusercontent.com/13994516/68976798-f01cf400-07f6-11ea-9ffb-198b5853a220.gif)\r","\r","The image above shows the typical references from output datasets to datasets definitions.\r","\r","{% include note.html content=\"An output dataset must reference a dataset definition.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","Output datasets may be added in bulk, for all defined products, or one by one.\r","\r","To add a single {{ title | downcase }} node, select *Add {{ title }}* on the process output menu. \r","\r","{% include tip.html content=\"Remember that an output dataset must reference a valid dataset definition. Make sure you establish the reference after creating the output dataset.\" %}\r","\r","If you have defined multiple products, each with their dataset definitions, and wish to create all corresponding output datasets in bulk, select *Add All Output Datasets\" on the process output menu. The system maps the product definition folder structure with output dataset folders, creates all required output datasets, and establishes the references with the corresponding dataset definitions, with a single click of the button.\r","\r","{% include note.html content=\"Make sure each product has properly defined dataset definitions before creating output datasets in bulk. You may always delete the output datasets and re-create them at will.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Dependency","definition":"Data dependencies are references established with dataset definitions of other bots, determining which datasets the process establishing the reference uses as input.","content":["\r","\r","Most bots consume data other bots have produced. Because bots need the data as input for their calculations, processes establish a data dependency with the dataset definitions of other bots. The reference provides the process with all the information needed to decode the dataset, enabling it to perform the required calculations.\r","\r","[![Indicators-Process-Dependencies-02](https://user-images.githubusercontent.com/13994516/68993034-7840df00-0873-11ea-804d-d24e88ce25f7.gif)](https://user-images.githubusercontent.com/13994516/68993034-7840df00-0873-11ea-804d-d24e88ce25f7.gif)\r","\r","The image above shows data dependencies in one bot referencing dataset definitions of another bot.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a single data dependency, select *Add Data Dependency* on the process dependencies, bot data dependencies, or data dependency folder node menus.\r","\r","{% include tip.html content=\"Remember that a data dependency must establish a reference to the appropriate dataset definition. When adding data dependencies manually, you also need to manually establish the reference.\" %}\r","\r","In cases in which multiple data dependencies must be established, you may use the option to create data dependencies in bulk:\r","\r","* The *Add All Data Dependencies* option on the data mine data dependencies node menu adds a bot data dependency for each bot in the data mine, and a data dependency for each dataset definition or each product of each bot. You may use this option after manually adding a data mine data dependencies node and manually establishing the reference with the desired data mine, or after adding all data mine data dependencies, by which the references with data mines are established automatically.\r","\r","It is unlikely that a bot requires numerous data dependencies, thus, the most common scenario is setting up individual data dependencies and establishing references manually. However, if your bot requires multiple data dependencies, the bulk features may be quite useful, as you may create all data dependencies for any given data mine, and simply delete those that are not required.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Record Definition","definition":"The record definition is where indicators define how many properties, what properties and in which order those properties will be made available in each record.","content":["\r","\r","Bots store data in the form of arrays of records, in a minimized plain text file and the standard JSON format, although not as objects with named properties, but as arrays.\r","\r","{% include image-ext.html file='https://user-images.githubusercontent.com/13994516/68998023-303eae00-08ad-11ea-9baa-ddea801c7d6d.png' url='yes' max-width='100' caption='Typical dataset file showing records as arrays.' %}\r","\r","The choice of plain text for storage of large volumes of information has benefits in terms of not requiring any sophisticated technology to store and serve the data (*i.e.:* no database is required).\r","\r","Best practice indicates that there needs to be a balance between the amount of data that is stored and calculations that may be performed at runtime.\r","\r","Storing objects with named properties in the JSON format would be inappropriate as labels would repeat over and over, creating a ridiculous amount of unnecessary information. However, storing arrays in the JSON standard facilitates the handling of files in the context of JavaScript and Node.JS.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a record definition node, select *Add Record Definition* on the product definition node menu. A record definition node is created along with the first record property.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Record Property","definition":"A record property is a piece of information that may be stored as part of the dataset or made available as a calculated property.","content":["\r","\r","Records may have as many properties as required. \r","\r","{% include important.html content=\"The order in which record properties are defined around the parent record definition node is the order in which they are stored in the actual record.\" %}\r","\r","{% include tip.html content=\"The first two records are usually the *begin* and *end* records, featuring the corresponding datetimes that indicate when the record starts and ends.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a record property, select *Add Record Property* on the bot's node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Property* on the menu to access the configuration.\r","\r","```js\r","{\r"," \"codeName\": \"record-name\",\r"," \"isString\": false,\r"," \"isCalculated\": true\r","}\r","```\r","\r","* ```codeName``` is the name of the record as it is used in the bot's code. \r","\r","* ```isString``` determines if the field is a text string or if, in turn, is a numeric field. Dates are stored in the *epoch* format, which is numeric. The reason why this configuration is important is that fields that are strings need to be stored between \"double quotes\".\r","\r","* ```isCalculated``` determines if the field is stored in the dataset or if, instead, is calculated at a later stage. A value *true* means that the record is not stored. In the case ```isCaculated``` is not defined in the configuration, it is assumed to be false.\r","\r","[![Indicators-Record-Definitions-01](https://user-images.githubusercontent.com/13994516/69139160-3ce72000-0ac0-11ea-9566-a259c9ea6194.gif)](https://user-images.githubusercontent.com/13994516/69139160-3ce72000-0ac0-11ea-9566-a259c9ea6194.gif)\r","\r","The image above shows a record definition with four record properties.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Formula","definition":"A formula is a mathematical expression intended to determine a numerical value to be applied dynamically to a certain property.","content":["\r","\r","In the context of the trading engine, formulas are used to create user defined statistics.\r","\r","Formulas may use indicators and object properties made available by the trading engine. They must evaluate to a number.\r","\r","{% include note.html content=\"To learn how to write formulas, see [syntax overview](suite-syntax-overview.html).\" %}\r","\r"],"folderName":"trading_engine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Announcement Formula"},{"type":"Calculations Procedure","definition":"The calculations procedure processes information to be fed to calculated properties. Calculated properties are not stored in the data set; instead, they are calculated in real-time as the data is consumed by others.","content":["\r","\r","Bots store data in the minimized array format as a strategy to build the lightest possible datasets. For the same reason, a bot may choose not to store easily calculable information.\r","\r","For example, imagine an indicator that stores buy and sell volumes... does it *need* to store the total volume? Given that it is so easy to calculate, the answer is *probably* not. It is up to the developer to decide, but it is certainly not required.\r","\r","{% include note.html content=\"The calculations procedure is used to calculate properties that the developer chooses not to store in the dataset.\" %}\r","\r","{% include note.html content=\"To fully understand the role of the calculations procedure, please refer to the [data mining workflow](suite-data-mining-workflow.html) page.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a calculations procedure, select *Add Missing Items* on the product definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Procedure Initialization","definition":"The procedure initialization is used to initialize variables used by the procedure loop.","content":["\r","\r","This is an example of a procedure loop code snippet, in particular, the code that initializes the array used in the calculation of the Popular SMAs product of the Simple Moving Average (SMA) indicator.\r","\r","```js\r","/* Initialization Code. */\r","variable.last200 = []\r","```\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a procedure initialization, select *Add Procedure Initialization* on the corresponding procedure node menu. A procedure initialization node is created along with the corresponding JavaScript node.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Procedure Loop","definition":"The procedure loop holds the JavaScript code that reads an input, processes the information, and generates an output recursively.","content":["\r","\r","{% include note.html content=\"Please refer to the [coding references](suite-coding-the-indicator-logic.html) page to learn how to code the indicator's logic.\" %}\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a procedure loop, select *Add Procedure loop* on the corresponding procedure node menu. A procedure loop node is created along with the corresponding JavaScript node.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Building Procedure","definition":"The data building procedure processes information to be fed to properties that are stored in the output dataset.","content":["\r","\r","This procedure holds the core logic of the bot, as it features the code that performs the calculations required to produce the new data set. The code is split between a procedure initialization and a procedure loop.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a data buildings procedure, select *Add Missing Items* on the product definition node menu. Items that may be missing are created along with the basic structure of nodes required to define them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Bot","definition":"Based on datasets exposed as products by other bots (counting sensors, indicators and even other trading bots), a trading bot applies the trading logic defined on a trading system to, on one side, generate a complete trading simulation (outputting datasets that include trades, the action of strategies, validation of conditions, etc.), and on the other side, manage the execution of orders when on a forward testing or live trading session.","content":["\r","\r","Trading bots are complex pieces of software. The system does not yet encourage the creation of further trading bots, as it is not currently possible to create them with minimal coding. However, developers are free to clone the existing trading bot and improve it as they see fit.\r","\r"],"folderName":"data_mine","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Plotter","definition":"A plotter is a device used to produce a graphic representation of datasets generated by bots.","content":["\r","\r","Plotters usually have a one-to-one relationship with bots, as they are often created as a customized solution. However, in practice, there is no constraint to creating any number of plotters for a single bot or a single plotter for multiple bots.\r","\r","The overall workflow of a plotter, while reading a dataset, consists in:\r","\r","* Applying a set of rules to identify certain data points;\r","\r","* Use those points to form lines and polygons;\r","\r","* Apply graphical styles to those lines and polygons.\r","\r","Those actions are performed recursively for each record, and the graphics are plotted on the charts in real-time as data is processed.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a plotter, select *Add Plotter* on the data mine node menu. An indicator bot is created along with the basic structure of nodes required to define it.\r","\r"],"configuring":["\r","\r","Select *Configure Plotter* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"codeName\": \"Plotter-Name\"\r","}\r","```\r","\r","* ```codeName``` is the name of the plotter as it is used within the bot's code.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading System","definition":"A trading system is a framework handling the low-level logic that serves to structure the processes and methods used to implement and deploy trading strategies.","content":["\r","\r","In practical terms, a trading system is a hierarchical arrangement organizing the actionable aspects of your investment plan. The hierarchy contains definitions regarding any number of trading strategies, all operating on the same market and sharing the same initial capital allocation.\r","\r","You use a trading system to define strategies following the Superalgos Protocol, splitting strategies into four stages: trigger, open, manage, and close.\r","\r","The concept of describing strategies in stages is fundamental to the methodical aspect of the trading system, as it provides a framework to run every strategy with the same framework, which contributes to developing scalable trading systems that may grow to any number of strategies.\r","\r","When a trading system features more than one strategy, the first strategy has precedence over the second, the second over the third, and so on. This means that strategies are evaluated in a sequence. When a given strategy is triggered-on, the remaining strategies in the queue are no longer evaluated until the strategy triggers off. In other words, when multiple strategies are deployed within a single trading system, only one strategy may trade at any given moment, and precedence is given by the order around the trading system node.\r","\r","As a corollary to the above, if you wish strategies to operate in different markets, or you wish strategies to be able to take positions simultaneously, then you must set up those strategies in different trading systems.\r","\r","{% include important.html content=\"Changes made to trading systems shipping with Superalgos may not be saved at the workspace level. If you wish to modify those hierarchies and use them in such modified versions, you need to clone them and modify the clone instead.\" %}\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a trading system, select *Add Trading System* on the workspace node menu. \r","\r","{% include tip.html content=\"You may work with as many trading systems as you wish\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Strategy","definition":"A trading strategy is a set of actions occurring in stages, designed to achieve a specific goal within a broader plan, via taking and managing positions.","content":["\r","\r","The definition of a strategy may be analyzed in three sections:\r","\r","{% include callout.html type=\"success\" content=\"A strategy is a set of actions occurring in stages\" %}\r","\r","Strategies are defined in the following stages:\r","\r","* Trigger Stage\r","* Open Stage\r","* Manage Stage\r","* Close Stage\r","\r","These stages are played in a sequence: once a strategy is *triggered* it looks to *open* a position; once a position is open, it is time to *manage* it as the trade develops; and once a stop or take profit target is hit, it is time to *close* the position.\r","\r","While stages are played in a sequence, upon execution there are overlaps. That is, a stage doesn't need to be closed for the next stage to be opened. The framework sets a clear separation of the concepts embodied in each stage to facilitate the process of defining and developing a trading system. But the truth is that, both at the conceptual level and during execution, the lines between stages are rather blurry.\r","\r","{% include callout.html type=\"success\" content=\"designed to achieve a specific goal within a broader plan\" %}\r","\r","Your investment plan or trading career may have any number of goals *(e.g.: accumulating a certain asset, diversifying on a basket of coins, annual profit targets, etc.)*. If you attempt to achieve more than one goal with a single strategy, you will sooner or later run into problems. It may be doable, but the strategy would certainly be more complex than is necessary or desirable. In any case, the logical thing to do is to analyze each goal separately so that you may design (at least) one clear, straightforward strategy for each goal.\r","\r","One of the edges granted by trading automation is the capacity to develop and deploy an unlimited number of strategies. At the same time, Superalgos allows the administration of complexity by breaking down and structuring concepts in small units: a trading system contains strategies, which contain stages, which contain specific definitions. \r","\r","Understanding that keeping things simple is important will help you develop a robust and extensible arsenal of bots. Simplicity is the key to sustainability.\r","\r","In other words, the infrastructure provided by Superalgos enables the hyperspecialization of strategies. Do not aim to trade in all sorts of market situations with the same strategy. Instead, develop a strategy for each market situation you wish to trade.\r","\r","{% include callout.html type=\"success\" content=\"via taking and managing positions\" %}\r","\r","The definition of strategy points to the concept of a *position*. A position is a process that exchanges the base asset for the quoted asset and that—after some time, as the position develops and targets are hit—exchanges back the quoted asset for the base asset. \r","\r","The framework implemented in the Superalgos Protocol is optimized to work with such a concept.\r","\r","However, Superalgos is flexible enough to allow you to override this hard interpretation of the concept of *a position*. For example, you may design market-making strategies, a strategy to balance portfolios, or develop all sorts of ideas that don't necessarily fit in that part of the definition.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a strategy, select *Add Strategy* on the trading system node menu. The strategy node is created along with the rest of the basic structure of nodes required to define each of the strategy stages and their events.\r","\r","{% include tip.html content=\"You may work with as many strategies as you wish. \" %}\r","\r","{% include important.html content=\"Strategies within the same trading system work in the same market, have the same base asset, and —most importantly—share the same capital. This means that only one strategy in the trading system may be triggered at any one point and that no other strategy in the trading system may be triggered until the first one is triggered off. If you wish to have more than one strategy trading at the same time, then those strategies must be put in separate trading systems. \" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trigger Stage","definition":"The trigger stage deals with monitoring the market in search of trading opportunities with the corresponding strategy.","content":["\r","\r","A trading system may have multiple strategies designed for the same market.\r","\r","An important aspect of trading systems is that they are allocated a certain amount of capital (see the base asset parameter of the trading session). As a consequence, strategies within a trading system share a certain capital allocation. \r","\r","The logic behind the concept of the trigger stage assumes that different strategies within a trading system may be specialized for trading in different market situations. The trigger stage in each strategy is, therefore, the mechanism by which any particular strategy within the trading system may be selected to trade, given any particular market situation.\r","\r","The triggering-on of a strategy effectively blocks the selection of any other strategy in the trading system and reserves the whole capital allocation for the one strategy selected, until the strategy is triggered-off.\r","\r","Therefore, if certain strategies are meant to trade under the same market situations and open trades concurrently, then those strategies should be deployed in separate trading systems.\r","\r","Once a strategy is triggered, the strategy may decide—or not—to take a position. If a position is taken, then the rest of the stages eventually become active.\r","\r","However, the strategy may also be triggered off without taking a position. When a strategy is triggered off, the trading system goes back to monitoring the trigger-on definitions for all strategies, and capital is released to be used by whatever strategy is triggered-on next.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a trigger stage node, select *Add Missing Stages* on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events.\r","\r","{% include note.html content=\"Only one trigger stage may exist in each strategy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trigger On Event","definition":"The trigger-on event defines the set of rules that need to be met for the corresponding strategy to be triggered on. A strategy that is triggered may use all the capital available to the trading system, and prevents other strategies in the system from triggering.","content":["\r","\r","In conceptual terms, the trigger-on event is the mechanism you use to define the specific situations in which you would consider trading with the corresponding strategy. Think of the trigger-on event as the definition of the scenario in which the trading idea behind the strategy should be carefully considered.\r","\r","Once a strategy is triggered-on, the system starts evaluating the take position event. In conceptual terms, it means that the system has been alerted that the trading idea behind the corresponding trading strategy has produced a signal and that it should carefully monitor the market for the opportunity to take a position.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a trigger-on event node, select *Add Missing Events* on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trigger Off Event","definition":"The trigger-off event defines the situation in which the corresponding strategy shall be triggered-off. A strategy that is triggered-off releases the capital in reserve and makes it available to other strategies in the trading system.","content":["\r","\r","In conceptual terms, the trigger-off event is the mechanism you use to define the situation in which the corresponding strategy should stop considering the trading opportunity signaled by the trigger-on event. That is, you use the trigger off event to describe the scenario for the invalidation of the trading idea behind the strategy.\r","\r","Once a strategy is triggered-on, only two possible scenarios may follow. Either the take position event is triggered, thus, taking a position, or the trigger-off event is triggered first.\r","\r","In the first scenario, the strategy remains *on* until the position is closed. As the position is closed, the strategy is triggered-off. In the second scenario, the strategy is triggered-off immediately.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a trigger-off event node, select *Add Missing Events* on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Take Position Event","definition":"The take position event defines the situation that needs to be met to take a position.","content":["\r","\r","The trigger-on event merely selects a strategy to be considered for trading under the current market situation. The actual decision to enter a position may require more specific conditions to be met. For that reason, the take position event is a separate entity from the trigger-on event.\r","\r","Therefore, the take position event is defined with its own set of situations and conditions.\r","\r","Once the take position event is triggered, the decision to take a position has been made and there is nothing else to consider in that regard. Therefore, the runtime evaluation of the trading system shifts from the trigger stage to the open stage. \r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a take position event node, select *Add Missing Events* on the trigger stage node menu. All events that may be missing are created along with the rest of the basic structure of nodes required to define each of them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Open Stage","definition":"The open stage deals with the definitions that make up the logic to enter a position, including the target rate and size, and order execution.","content":["\r","\r","The open stage comes into play once the take position event is triggered. \r","Conceptually, the open stage deals with the details concerning how the position shall be opened once the decision to take a position has been made. That is, the open stage does not participate in the process of deciding whether a position should be open or not.\r","\r","To take a position, several definitions are required. In particular, those concerning targets, such as the rate and size of the position, and the logic of the execution strategy, that is, how many of which orders shall be placed at the exchange—and when—to enter the position.\r","\r","The open stage closes as soon as one of the following events happen:\r","\r","* the target size gets filled,\r","\r","* the close stage event is triggered,\r","\r","* the take profit or stop loss targets are hit.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add an open stage node, select *Add Missing Stages* on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events.\r","\r","{% include note.html content=\"Only one open stage may exist in each strategy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close Stage Event","definition":"The close stage event defines the set of rules that need to be met for the corresponding stage to be closed.","content":["\r","\r","Both the open and close stages are closed once the target size is filled. \r","\r","However, Superalgos allows an extra level of control so that the user may choose to close either stage given specific market situations. Such is the intent of the close stage event.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Initial Targets","definition":"The initial targets node holds the most basic definitions about the position to be taken: the target rate and the target size.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Managed Stop Loss","definition":"The managed stop loss node features the definition of the phases that make up the management of the stop loss target as the position develops.","content":["\r","\r","A stop loss target is a crucial element of a trading strategy, as it is the device in charge of preserving capital. Used wisely, the management of the stop loss may also play the role of protecting unrealized profits. \r","\r","The system for managing the stop loss provided by Superalgos is highly flexible. It may start as simple as a constant value at a certain rate, but may switch to a trailing stop as soon as the price moves away from the target rate by a certain percentage, or when a certain market situation arises.\r","\r","In fact, the formula may change as many times as required, as you may set up unlimited phases, and switch back and forth as required using predefined events to make the switch.\r","\r","{% include note.html content=\"The above example of a constant stop loss followed by a trailing stop is merely an example of a typical setup. The formulas you use to determine the rate of the target on each phase may be anything you choose, thus, you may achieve whatever behavior you imagine and can describe mathematically.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a stop node, select *Add Missing Items* on the manage stage node menu. All items that may be missing are created along with the rest of the basic structure of nodes required to define each of them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Phase","definition":"The management of take profit and stop loss targets is done in phases. Phase 1 sets the initial targets, either for the managed stop loss or the managed take profit, and becomes active as soon as the first order is placed. Subsequent phases allows switching to different formulas given certain market situations.","content":["\r","\r","The default management of phases is sequential, meaning that phase 2 comes after phase 1, phase 3 comes after phase 2, and so on. \r","\r","To switch from one phase to the next phase in the sequence, the next phase event is used. When the situation described in the next phase event validates ```true```, the switch occurs and the next phase becomes the active phase.\r","\r","However, management does not need to happen sequentially. By using the move to phase event instead of the next phase event, the system may activate any other phase and not just the one next in the sequence.\r","\r","Both events may be used at the same time, and whichever event is triggered first takes precedence.\r","\r","{% include note.html content=\"Notice that stop loss and take profit phases are independent and defined separately from each other, each below the corresponding managed stop loss and managed take profit nodes.\" %}\r","\r","{% include note.html content=\"The value of the target set for a phase is expressed by a formula. Learn more about [formulas](suite-situations-conditions-formulas.html) and how to write them.\" %}\r","\r","{% include tip.html content=\"This explanation about phase 1 may be extended to any other phase, as they all work similarly, and it applies both for managed stop loss phases and managed take profit phases.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a new phase, select *Add Phase* on the stop or take-profit node menu. A new phase is added along with the basic structure of nodes required to define each of them and their events.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Next Phase Event","definition":"The next phase event determines when there should be a switch of phases to the next phase in a predefined sequence.","content":["\r","\r","The management of a position is —by default—done in sequential phases, each phase with its formula. To move from one phase to the next, a situation you define must be validated. \r","\r","When that happens, the next phase event is triggered, the current phase is abandoned, and the next phase is activated. From that instant on, the system evaluates the formula corresponding to the next phase.\r","\r","The sequence of phases may be as long as the number of phases you choose to add and define. There may be unlimited numbers of phases.\r","\r","{% include note.html content=\"Events are triggered by situations, which are defined by conditions. Both are explained in the situations, conditions, and formulas page.\" %}\r","\r","{% include tip.html content=\"To set up a next phase event, add the node and define the situation that should trigger the event.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a next phase event, select *Add Next Phase Event* on the corresponding phase node menu. The event is added along with the basic structure of nodes to define it.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Move To Phase Event","definition":"The move to phase event determines when there should be a switch of phases from the current phase to an arbitrary phase determined by a reference.","content":["\r","\r","While phases are defined in a sequence and you may choose to manage the position by shifting from one phase to the next in the sequence, the move to phase event offers an alternative.\r","\r","With the move to phase event, you may arbitrarily decide which will be the next phase. To do that, you must establish a reference from the move to phase event, to the phase that should be activated once the event is triggered.\r","\r","Any number of move-to-phase events may be set up for each and every phase, allowing complete flexibility on how the position is managed. This feature allows setting up versatile position-management algorithms that may switch to different formulas back and forth, or in any configuration imaginable.\r","\r","{% include note.html content=\"A move-to-phase event must reference a phase node. When the situation in the move-to-phase event evaluates ```true``` the management shifts to the referenced phase.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a move-to-phase event, select *Add Move to Phase Event* on the corresponding phase node menu. The event is added along with the basic structure of nodes to define it.\r","\r","{% include note.html content=\"Remember to establish a reference with the phase you wish to activate once the situation associated with the event validates true.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Managed Take Profit","definition":"The managed take profit node features the definition of the phases that make up the management of the take profit target as the position develops.","content":["\r","\r","A take profit target bears an important role in your strategy, as it plays a crucial role in determining the risk/reward ratio of the trading opportunity that materialized, and upon which your strategy acted to take a position.\r","\r","The foremost goal of trading is to increase your capital, and how you set your initial take profit target and manage it afterward determines how much you may increase your capital given a favorable price action.\r","\r","{% include note.html content=\"The system provides the same functionality for managing the take profit target as explained for the managed stop loss target, so please make sure you go through that section too. \" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a take profit node, select *Add Missing Items* on the manage stage node menu. All items that may be missing are created along with the rest of the basic structure of nodes required to define each of them.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Target Size In Base Asset","definition":"Target size in base asset is used to define the size of the position, denominating it in the base asset.","content":["\r","\r","The system supports defining the size of the position in either asset involved in the market: the base asset, or the quoted asset, as per the exchange listing of the market. \r","\r","The target size may be defined in one of the two assets only, to avoid inconsistencies. \r","\r","The target size is the maximum size the position may achieve. That is, the definition of the target size is used as a cap for the total size of orders that may be placed during the open stage.\r","\r","If you prefer to define the size of the position denominated in the base asset, then use this node and delete the target size in quoted asset node.\r","\r","{% include important.html content=\"Only one target size definition may exist at a time.\" %}\r","\r","Even though the definition of the target size is denominated in one of the two assets in the market, the system keeps track of accounts for both assets. That is, performance metrics such as profit loss, ROI, hit ratio, or the annualized rate of return are calculated both based on the base asset and the quoted asset. In fact, metrics are also calculated in a consolidated manner, taking into account both assets at the same time. \r","\r","All of this information is made available for multiple contexts, for instance, for each position or the whole episode, through the data structure of the trading engine.\r","\r","When tracking the results of your trading operation, make sure you refer to the set of accounts that make sense for your trading system. This will all become clearer once you read about the trading engine and the layer managers available on the charts.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Target Size In Quoted Asset","definition":"Target size in quoted asset is used to define the size of the position, denominating it in the quoted asset.","content":["\r","\r","If you prefer to define the size of the position denominated in the quoted asset, then use this node and delete the target size in base asset node.\r","\r","{% include important.html content=\"Make sure you read the definition of the target size in base asset node to get the proper context for this definition.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Target Rate","definition":"The target rate is a reference rate that, in combination with the placement of managed stop loss and managed take profit targets, is used to determine whether the targets have been hit.","content":["\r","\r","The system needs to determine when the managed stop loss and managed take profit targets have been hit. To do this, the system observes how the user places the targets in relation to the target rate.\r","\r","*For example:*\r","\r","If the phase 1 managed stop loss target is placed below the target rate and the phase 1 managed take profit target above it, the system assumes that:\r","\r","* the stop loss target is hit when the current rate is equal to or smaller than the managed stop loss value;\r","\r","* the stop loss target is hit when the current rate is equal to or greater than the managed take profit value;\r","\r","The reversed example is true, as well.\r","\r","This is how the system uses the target rate internally.\r","\r","Additionally, defining a target rate at the level of the stage may be of use so that you may retrieve the value from formulas while setting the rate of limit orders.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Order Rate","definition":"The order rate node defines the rate of limit orders.","content":["\r","\r","Because the purpose of limit orders is to have control over the rate at which the order is executed, the definition of the order rate is required for all limit orders.\r","\r","{% include note.html content=\"Please, read about [limit orders](suite-strategies-open-execution.html#limit-buy-order) to complement the information in this definition.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Open Execution","definition":"The open execution node groups all execution algorithms involved in the process of opening a position.","content":["\r","\r","One of the crucial elements that make up trading intelligence is the capacity to control every aspect of order execution, as the execution itself entails strategic elements that directly affect performance. \r","\r","Superalgos' trading engine is designed as a generic infrastructure that allows building execution logic from the ground up, with as much simplicity or complexity as may be required.\r","\r","The trading system splits the definitions of the execution logic by trading strategy. That is, each strategy in a trading system may have its execution logic. \r","\r","The next layer of control comes in the form of execution algorithms. Each strategy may have as many algorithms as required, and each algorithm may have as many instructions as required.\r","\r","This model allows the granular control of orders with which you may build algorithms that may interact with other algorithms, and so on.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Execution Algorithm","definition":"An execution algorithm is a set of instructions used to place and manage orders at the exchange.","content":["\r","\r","Any given strategy may have simple or very complex execution requirements. To deal with complexity, Superalgos allows users to set up as many execution algorithms as required.\r","\r","Then, the logic in each algorithm may remain simple, while the combined work of multiple algorithms may deal with the required complexity.\r","\r","Each algorithm may be assigned a fraction of the target size (see the configuration section), thus, the extent of each algorithm's involvement in the execution is defined by this parameter.\r","\r","An execution algorithm is a set of instructions in the sense that the orders defined in each algorithm are themselves the instructions. That is, an execution algorithm is a set of predefined orders which may be created or canceled given specific market situations.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{\r"," \"percentageOfStageTargetSize\": 100 \r","}\r","```\r","\r","* ```percentageOfStageTargetSize``` is the definition of how much of the target size of the whole stage will be handled by the one specific execution algorithm, expressed as a percentage of the total target size. Posible values are real numbers between ```0``` and ```100```, including the extremes. If you set the value to ```0```, the algorithm will not be executed.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Buy Order","definition":"A market buy order is an instruction sent to the exchange to buy the base asset, for immediate execution at current market prices.","content":["\r","\r","Traders usually use market orders when the priority is the certainty of execution over the rate of execution. Depending on the size of the order and the liquidity of the particular market/exchange, market orders may experience more or less slippage.\r","\r","###### Market Orders' Rate\r","\r","Users have no control over the rate at which a market order is filled. The exchange fills the order with available bids/asks at the time of execution.\r","\r","{% include tip.html content=\"The information below this banner is valid for all types of orders.\" %}\r","\r","###### Order Size\r","\r","As explained in the definition of the execution algorithm, each algorithm is allocated a percentage of the target size defined under the initial targets node.\r","\r","*The simplified logic for non-coders:*\r","\r","```algorithmSize = targetSize * percentageOfStageTargetSize / 100```\r","\r","*The actual code:*\r","\r","```js\r","let algorithmSizeInBaseAsset = tradingEngineStage.stageBaseAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100\r","\r","let algorithmSizeInQuotedAsset = tradingEngineStage.stageQuotedAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100\r","```\r","\r","Similarly, the size of an order is defined as a percentage of the size that the particular algorithm is allowed to execute *(see the configuration)*. \r","\r","*The simplified logic for non-coders:*\r","\r","```orderSize = algorithmSize * percentageOfAlgorithmSize / 100```\r","\r","*The actual code:*\r","\r","```js\r","tradingEngineOrder.orderBaseAsset.size.value = algorithmSizeInBaseAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100\r","```\r","\r","Because each execution algorithm may define multiple orders, the typical scenario is that all orders defined within an algorithm add up to 100% of the size allocated to the algorithm. \r","\r","However, it is up to the user how to manage this setting, as different hacks may be found to achieve different behaviors.\r","\r","{% include callout.html type=\"success\" content=\"If orders defined add up to more than 100% of the size allocated to the algorithm, the trading engine does not enforce a cap.\" %}\r","\r","Pretty much like the user may decide to define the size of orders within an algorithm above or below the 100% mark, the same is true when defining multiple algorithms. In other words, the user may choose to set up algorithms whose combined sizes amount to more or less than 100%.\r","\r","In cases in which the combined sizes amount to less than 100%, the target size would be partially filled at best. On the other hand, in cases in which the combined sizes amount to more than 100%, then the orders and/or algorithms would compete with each other.\r","\r","{% include callout.html type=\"success\" content=\"The one validation the trading engine does is to enforce the target size defined under the initial targets node. The target size is treated as a hard cap, so that no position may ever be sized larger than the target.\" %}\r","\r","If the order size as defined would cause the target size to be breached, then the order size is lowered to match the hard cap.\r","\r","*The simplified logic for non-coders:*\r","\r","```js\r","if ( targetSize + sizePlaced > targetSize )\r"," { orderSize = targetSize - sizePlaced }\r","```\r","\r","*The actual code:*\r","\r","```js\r","if (\r"," tradingEngineOrder.orderBaseAsset.size.value + tradingEngineStage.stageBaseAsset.sizePlaced.value >\r"," tradingEngineStage.stageBaseAsset.targetSize.value\r"," ) {\r"," tradingEngineOrder.orderBaseAsset.size.value = tradingEngineStage.stageBaseAsset.targetSize.value - tradingEngineStage.stageBaseAsset.sizePlaced.value\r"," }\r","```\r","\r","{% include note.html content=\"See the order's configuration to learn how to set up the order size.\" %}\r","\r","###### Placing and Filling of Orders\r","\r","The trading engine keeps track of the amounts placed and the amounts filled based on the feedback obtained from the exchange, and makes the information available in the size placed and size filled nodes. The nodes are present in multiple contexts, such as the particular stage (open and close) or the particular order type, and are denominated both in the base asset and quoted asset. You may learn more about how to track the size placed and size filled on the trading engine pages.\r","\r","###### Closing of Orders\r","\r","Orders may be closed upon the occurrence of the following two events:\r","\r","* The exchange reports the order was filled. In such a case, the trading engine closes the order.\r","\r","* The cancel order event is triggered. This is an event the user may configure with the typical set up of situations and conditions.\r","\r","###### Spawning Multiple Orders\r","\r","All of the available types of orders may be configured so that multiple orders may be spawned, one after the other, through the same order definition.\r","\r","This allows, for example, setting an order for 1% of the size allocated to the algorithm, and have the trading engine spawn one order per execution cycle until the 100% mark is reached. Such a feature may allow many more hacks and is yet another tool that—combined with the rest—enables a great deal of control over orders execution.\r","\r","A new instance of an order may be spawned only under the following context:\r","\r","* The previous instance of the order is closed. That is, two instances of the same order may not exist at the same time.\r","\r","* The size filled at the level of the execution algorithm is within the limit established in the algorithm's configuration.\r","\r","* The size filled at the level of the stage must be within the target size defined under the initial targets node.\r","\r","{% include note.html content=\"See the order's configuration to learn how to configure the parameter affecting this behavior.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{\r"," \"percentageOfAlgorithmSize\": 100, \r"," \"spawnMultipleOrders\": false \r","}\r","```\r","\r","* ```percentageOfAlgorithmSize``` is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between ```0``` and ```100```, including the extremes. If you set the value to ```0```, the order will not be executed.\r","\r","* ```spawnMultipleOrders``` is the parameter that indicates whether additional spawned orders are allowed (```true```) or not (```false```).\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Sell Order","definition":"A market sell order is an instruction sent to the exchange to sell the base asset, for immediate execution at current market prices.","content":["\r","\r","{% include tip.html content=\"Please read the definition of [market buy order](suite-strategies-open.html#market-buy-order) for relevant information about how orders in general—and market orders in particular—work. \" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{\r"," \"percentageOfAlgorithmSize\": 100, \r"," \"spawnMultipleOrders\": false \r","}\r","```\r","\r","* ```percentageOfAlgorithmSize``` is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between ```0``` and ```100```, including the extremes. If you set the value to ```0```, the order will not be executed.\r","\r","* ```spawnMultipleOrders``` is the parameter that indicates whether additional spawned orders are allowed (```true```) or not (```false```).\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Limit Buy Order","definition":"A limit buy order is an instruction sent to the exchange to buy the base asset, for execution at a specific rate or better.","content":["\r","\r","Traders usually use limit orders when the priority is the rate of execution over the certainty of execution. Limit orders are much more efficient than market orders in terms of rate, particularly for larger sizes which—when executed as market orders—may suffer considerable slippage filled as fast as possible with the order book of the particular instant.\r","\r","Also, many exchanges regard limit orders as market makers, that is, orders that bring liquidity to the market, and, therefore, may charge relatively better fees.\r","\r","###### Limit Orders' Rate\r","\r","Superalgos users must define the rate at wish they wish the order to be filled. The exchange is responsible for not filling the order unless it can match it with bids/asks at the rate set by the user, or at a better rate.\r","\r","Small discrepancies between the actual rate and the order rate are to be expected, as not all exchanges handle decimals and other conversions involving, for example, fees, in the same manner.\r","\r","{% include note.html content=\"Limit orders must define a rate using the appropriate child node, otherwise, the target rate defined as an initial target is used. If no rate is defined at all, the system stops with an error upon execution. The configuration of the order deals with the size. \" %}\r","\r","{% include tip.html content=\"Please read the definition of [market buy order](suite-strategies-open.html#market-buy-order) for relevant information about how orders in general work, in particular, the section about Order Size, Filling of Orders, Closing of Orders, and Spawning Multiple Orders. \" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{\r"," \"percentageOfAlgorithmSize\": 100, \r"," \"spawnMultipleOrders\": false \r","}\r","```\r","\r","* ```percentageOfAlgorithmSize``` is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between ```0``` and ```100```, including the extremes. If you set the value to ```0```, the order will not be executed.\r","\r","* ```spawnMultipleOrders``` is the parameter that indicates whether additional spawned orders are allowed (```true```) or not (```false```).\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Limit Sell Order","definition":"A limit sell order is an instruction sent to the exchange to sell the base asset, for execution at a specific rate or better.","content":["\r","\r","{% include tip.html content=\"Please read the definition of [limit buy order](suite-strategies-open.html#limit-buy-order) for relevant information about how limit orders work. Also, please read the definition of [market buy order](suite-strategies-open.html#market-buy-order) for relevant information about how orders in general work, in particular, the section about Order Size, Filling of Orders, Closing of Orders, and Spawning Multiple Orders. \" %}\r","\r","\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{\r"," \"percentageOfAlgorithmSize\": 100, \r"," \"spawnMultipleOrders\": false \r","}\r","```\r","\r","* ```percentageOfAlgorithmSize``` is the definition of how much of the size handled by the algorithm shall be allocated to this particular order. Posible values are real numbers between ```0``` and ```100```, including the extremes. If you set the value to ```0```, the order will not be executed.\r","\r","* ```spawnMultipleOrders``` is the parameter that indicates whether additional spawned orders are allowed (```true```) or not (```false```).\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Create Order Event","definition":"The create order event controls the placement of orders.","content":["\r","\r","Even though the decision to take a position may have been made, the user may still decide to exert additional control over the placement of orders. Such is the intent of the create order event.\r","\r","An order defined in an execution algorithm will be executed only if the event evaluates ```true```.\r","\r","If you wish orders to be placed as defined immediately after the take position event has been triggered, the use the statement ```true``` your only create order event condition.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Cancel Order Event","definition":"The cancel order event makes cancelling limit orders possible.","content":["\r","\r","The cancel order event defines the market situations in which a limit order shall be canceled. When the event is triggered, the order is closed, even when the order may have been partially filled. In such a case, the size filled remains as is, and all accounts are computed accordingly, with the partial fill.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Simulated Exchange Events","definition":"The simulated exchange event node allows to override the parameters set at the level of the trading session on a per order basis to determine how each order shall be simulated.","content":["\r","\r","The offspring nodes under simulated exchange events allow setting order-specific parameters for the size filled, actual rate, and fees paid, so that each order may be simulated in a specific manner.\r","\r","If either of the offspring nodes is not present or is undefined, then the parameters configured at the level of the trading session are factored in by default.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Simulated Partial Fill","definition":"The simulated partial fill parameter allows simulating the partial fill of orders.","content":["\r","\r","Upon each execution, the simulation verifies if the current candle intersects the rate set for the order. If it does, it uses the value in this parameter as a factor to determine and keep track of what percentage of the order is filled.\r","\r","The same process repeats for each subsequent candle, until the order is filled.\r","\r","When the parameter is not present or undefined, the simulation assumes the order is filled as soon as the rate is hit.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{ \r"," \"fillProbability\": 1\r","}\r","```\r","\r","* ```fillProbability``` indicates the probability of an order getting filled upon each tag of the price. Values may range from ```0``` to ```1```. The value ```0``` indicates that there are 0% chances of the order getting filled. With such a setting, the order will never get filled in the simulation. The value ```1``` indicates that there is a 100% probability of the order getting filled. With such a setting, the order is filled upon the first tag of the price. A value of ```0.5``` indicates a 50% probability, thus, it takes two tags of the price for the order to fill completely with such a setting.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Simulated Actual Rate","definition":"The simulated actual rate node allows setting a specific rate value for the simulation of each order, overriding the slippage parameter of the trading session.","content":["\r","\r","The slippage parameter of the trading session allows setting a blanket slippage for all orders in the trading system. The simulated actual rate node allows control on a per-order basis, so each order may be simulated with a specific rate. \r","\r","{% include note.html content=\"If the node is not present or the parameter is undefined, the slippage parameter set up for the trading session is used.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Simulated Fees Paid","definition":"The simulated fees paid node allows setting a specific fee for the simulation of each order, overriding the fee structure parameter of the trading session.","content":["\r","\r","The fee structure parameter of the trading session allows setting a blanket fee structure (maker and taker) for all orders in the trading system. The simulated fees paid node allows control on a per-order basis, so each order may be simulated with a specific fee. \r","\r","{% include note.html content=\"If the node is not present or the parameter is undefined, the fee structure parameter set up for the trading session is used.\" %}\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add Missing Items* on the parent node menu. \r","\r"],"configuring":["\r","\r","To configure the {{ title | downcase }} node, select *Configure* on the menu. \r","\r","```json\r","{ \r","\"percentage\": 0.1\r","}\r","```\r","\r","* ```percentage``` is the percentage to be applied to calculate the fees for the specific order.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Manage Stage","definition":"The manage stage deals with the setting and management of stop loss and take profit targets, both to protect your capital and to increase the efficiency of your trading system.","content":["\r","\r","The first and foremost rule of trading is to preserve capital and its main goal is to increase it.\r","\r","Conceptually, a position is not an instantaneous event, but an event which has an opening, a period of maturation, and a closing. The management of the position happens throughout the process.\r","\r","The concept of managing the position refers to the fact that the formulas that determine the take profit and stop loss targets may change as the position develops. A typical situation in which you may want to change your original take profit and stop loss formulas is when the position seems to be developing well in your favor.\r","\r","It may be in your best interest to manage the stop loss, moving the target in the direction that would help protect unrealized profits. It may also be in your interest to move the take profit target to extract a larger profit than originally expected. Or you may wish to set up a mechanism that closes the trade as soon as a certain market situation materializes.\r","\r","The management of take profit and stop loss is done independently of each other, in phases. Therefore, each concept has its own set of management phases.\r","\r","Each phase has its formula to describe the corresponding target. Users may define situations in which the current phase shall be abandoned and a different phase—with its formula—shall be implemented. \r","\r","Keep in mind that the position is in constant development, so there may be as many phases as you deem appropriate for your particular strategy.\r","\r","The idea of managing targets in phases derives from the notion that big market moves tend to provide clues as to what may come up next. For instance, rallies may accelerate as more traders join the move. Recognizable patterns may emerge. Signs of exhaustion may be identified.\r","\r","All of these considerations may feed the dynamic analysis performed in each phase as the position develops.\r","\r","Upon execution, the system verifies if the current candle has tagged either of the targets. If—or when—it does, the close stage kicks in and closing execution begins.\r","\r","{% include callout.html type=\"success\" content=\"It is crucial to understand that Superalgos does not place orders to close a position until the stop loss or take profit targets are hit. That is, stop loss and take profit are not orders sitting at the exchange waiting to be filled at a certain rate. Instead, Superalgos keeps track of targets internally, and places the orders at the exchange during the execution cycle in which it detects either of the targets has been hit.\" %}\r","\r","This behavior has advantages and disadvantages, but it was designed as is because the former outweigh the latter.\r","\r","By not placing stop or take profit orders at the exchange, Superalgos keeps your targets—and the underlying strategy—secret. This guarantees that such a crucial piece of information may not be used against you by the exchange itself or any third party that may have access to privileged information.\r","\r","On the other hand, not placing a stop order in advance may occasionally cause relatively more slippage, for instance, in cases of massive flash market moves. \r","\r","That said, the default behavior of the system may be hacked to avoid the eventual risk of excessive slippage: set your stop loss and take profit targets tighter than intended.\r","\r"],"folderName":"trading_system","starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"adding":["\r","\r","To add a manage stage node, select *Add Missing Stages* on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events.\r","\r","{% include note.html content=\"Only one manage stage may exist in each strategy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close Stage","definition":"The close stage deals with the definitions that make up the logic to close a position, including the target rate and size, and order execution.","content":["\r","\r","The close stage is opened when either the stop loss or take profit targets are hit. \r","\r","In a way, the close stage is virtually a mirror of the open stage, as the same definitions are required to close a position. There are a few logical differences, though.\r","\r","For example, in the open stage, you probably defined the target size as a function of the capital allocated to the trading system. In the close stage, you will likely want to define the target size as a function of the size filled, that is, the amount of the orders placed that was filled during the open stage.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a close stage node, select *Add Missing Stages* on the strategy node menu. All stages that may be missing are created along with the rest of the basic structure of nodes required to define each of them and their events.\r","\r","{% include note.html content=\"Only one close stage may exist in each strategy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Close Execution","definition":"The close execution node groups all execution algorithms involved in the process of closing a position.","content":["\r","\r","The close execution section of the close stage works similarly to the open execution in the open stage. Please refer to the explanations of the open stage for the details.\r","\r"],"folderName":"trading_system","adding":["\r","\r","To add a close execution node, select *Add Close Execution* on the open stage node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Social Bots"},{"type":"Telegram Bot"},{"type":"Announcement"},{"type":"Announcement Condition"},{"type":"Crypto Ecosystem","definition":"The crypto ecosystem is a hierarchy that contains definitions about third-parties, including exchanges and their markets, as well as accounts of users with those third parties.","content":["\r","\r","There is only one crypto ecosystem hierarchy. You will use it to define which exchanges and which markets you wish to work with, as well as the details of your accounts with those exchanges. \r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Super Actions"},{"type":"Signals Providers"},{"type":"Signals Provider"},{"type":"Crypto Exchanges","definition":"The crypto exchanges node groups definitions of the different exchanges the user may interact with.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a crypto exchanges node, select *Add Crypto Exchanges* on the crypto ecosystem node menu. \r","\r","{% include note.html content=\"Only one crypto exchanges node may exist on the hierarchy.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Crypto Exchange","definition":"A crypto exchange node holds the definitions of assets and markets in a specific exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a crypto exchange, select *Add Crypto Exchange* on the crypto exchanges node menu. The crypto exchange node is created along with the rest of the basic structure of nodes required to define assets, markets and user accounts.\r","\r"],"configuring":["\r","\r","Select *Configure Crypto Exchange* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"codeName\": \"binance\",\r"," \"API\": [\r"," {\r"," \"method\": \"fetchTrades\",\r"," \"fetchType\": \"by Id\",\r"," \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\r"," \"firstId\": \"f\"\r"," }\r"," ]\r","}\r","```\r","\r","* ```codeName``` is the name of the exchange as handled in the code of the system. \r","\r","* ```API``` holds a series of definitions used only in the case in which the sensor bot fetches trades (using the Historic-Trades process) instead of the OHLCV process that fetches one-minute candles and is the current default. In such a case, finding the right set of parameters to work with a specific exchange may be challenging, nd involves understanding how the exchanges API and the CCXT Library API work. In other words, there is no hard rule as of what each of the values should be. Determining each of this values requires exploring the exchange's API documentation, as well as the documentation of the CCXT Library.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Assets","definition":"The exchange assets node groups the definitions of assets.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an exchange assets node, select *Add Exchange Assets* on the crypto exchanges node menu. The exchange assets node is created along with a first asset.\r","\r","{% include note.html content=\"Only one exchange assets node may exist on each exchange.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Exchange Assets* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"addMissingAssets\": { \"quotedAsset\": \"BTC\"} \r","}\r","```\r","\r","* ```addMissingAssets``` acts as a filter to determine which assets of a (potentially long) list of assets listed at the exchange will be added when the *Add Missing Assets* option in the menu is used. Because many exchanges do not offer a list of assets, the system fetches assets from actual markets (pairs) listed at the exchange. You may add missing assets filtered by the ```quotedAsset``` or by the ```baseAsset```. For example, the above configuration would add all assets listed in markets in which BTC is the quoted asset.\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Asset","definition":"An asset node is the definition of an asset listed at the corresponding exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an asset, select *Add Asset* on the exchange assets node menu. \r","\r","To add assets in bulk, select *Add Missing Assets* on the exchange assets node menu. Beware that the exchange may handle hundreds of assets. Before using this option you may want to implement a filter using the exchange assets configuration.\r","\r","{% include /crypto_ecosystem/exchange-assets.md heading=\"\" icon=\"no\" adding=\"\" configuring=\"#####\" starting=\"\" content=\"no\" definition=\"no\" table=\"\" more=\"yes\"%}\r","\r"],"configuring":["\r","\r","Select *Configure Asset* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"codeName\": \"BTC\"\r","}\r","```\r","\r","* ```codeName``` is the ticker of the asset as listed by the exchange (*i.e.:* BTC, BTH, ETH, LTC, BNB, USDT, USD, etc.)\r","\r","{% include note.html content=\"When a configured asset is within the system's icon catalog, the standard asset icon is replaced with the logotype of the corresponding asset.\" %}\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Markets","definition":"The exchange markets node groups the definitions of markets.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an exchange markets node, select *Add Exchange Markets* on the crypto exchange node menu. The exchange markets node is created along with the basic structure of nodes to define the first market.\r","\r","{% include note.html content=\"Only one exchange assets node may exist on each exchange.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market","definition":"A market is the definition of a pair of assets (i.e.: BTC-USDT) listed as a market in the corresponding exchange.","content":["\r","\r","{% include important.html content=\"Only markets that are effectively listed on the exchange may be configured and used with the system. Check with the exchange and make sure you understand what tickers they are using, which is the base asset and which the quoted asset on the listed markets.\" %}\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a market, select *Add Market* on the exchange markets node menu. The market node is created along with the basic structure of nodes used to define the market. This option does not generate the super actions required to install and uninstall markets.\r","\r","To add markets in bulk, select *Add Missing Markets* on the exchange markets node menu. This option adds all markets listed at the exchange that may result from the combination of assets listed under the exchange assets node, along with the required super actions to intall those markets.\r","\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Accounts","definition":"The exchange accounts node groups the different accounts the user may have with the corresponding exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an exchange accounts node, select *Add Exchange Account* on the crypto exchange node menu. The exchange account node is created along with the basic structure of nodes used to define keys and user assets with the exchange.\r","\r","{% include note.html content=\"Only one exchange accounts node may exist on each exchange.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Account","definition":"A user account represents a single account with the corresponding exchange, holding the definitions of user assets, including keys and balances.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add a user account, select *Add User Account* on the exchange accounts node menu. The user account node is created along with the basic structure of nodes used to define keys and user assets with the exchange.\r","\r","{% include tip.html content=\"You may add and administer as many user accounts as you wish.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Assets","definition":"The user assets node groups the assets the user has at the exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add user assets node, select *Add User Assets* on the user account node menu. The user assets node is created along with the first exchange account asset.\r","\r","{% include note.html content=\"Only one user assets node may exist under a user account.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"User Keys","definition":"The user keys node groups the various exchange account keys the user may have under the corresponding account with the exchange.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add user keys node, select *Add User Keys* on the user account node menu. The user keys node is created along with the first exchange account key.\r","\r","{% include note.html content=\"Only one user keys node may exist under a user account.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Account Asset","definition":"The exchange account asset represents a single asset the user has at the exchange.","content":["\r","\r","The exchange account asset is a reference to an asset defined under the exchange assets node.\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an exchange account asset node, select *Add Asset* on the user assets node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with an asset defined under the exchange assets node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Account Key","definition":"The exchange account key holds the definition of the key name and secret provided by the corresponding exchange to access the user account via the exchange API.","content":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"folderName":"crypto_ecosystem","adding":["\r","\r","To add an exchange account key, select *Add Key* on the user keys node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Key* on the menu to access the configuration.\r","\r","```json\r","{ \r","\"codeName\": \"Paste your exchange API name or label here\",\r","\"secret\": \"Paste your exchange API secret key here.\"\r","}\r","```\r","\r","* ```codeName``` is the name or label of your key, as supplied by the exchange.\r","\r","* ```secret``` is the *secret key* as supplied by the exchange.\r","\r","{% include warning.html content=\"To keep your exchange keys safe, never share data structures you may download from the system, as downloads contain all information in the data structure, including personal information such as exchange keys. Use the share option on the menu instead. The share option strips sensitive information and outputs a file that is safe for sharing.\" %}\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Charting Space","definition":"The charting space is the hierarchy that governs the configuration of the charts, and the bidimensional space on which charts are drawn.","content":["\r","\r","Think of the charting space as a huge drawing board. You may have lots of information plotted on different parts of the space and use a viewport to look into that space.\r","\r","There is only one charting space hierarchy, thus all charts are configured here. As is common throughout the system, different concepts and elements of the charts such as scales, data layers and so on, are represented by nodes in the hierarchy. The system allows great flexibility on how to visualize information over the charts by adding, configuring, and arranging these nodes.\r","\r"],"folderName":"charting_space","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Dashboard","definition":"A dashboard is a collection of time machines, each containing any number of charts.","content":["\r","\r","The concept of the dashboard allows having multiple charts configured all at once, so that you may consult different exchanges, different markets, different time frames, or different technical studies on demand, simply by moving around and zooming in or out. You may put charts side by side, or even superimpose them to study market flows, search for arbitrage opportunities, or simply keep them in sight when you analyze particular market situations.\r","\r","At the moment, the functionality of a dashboard is trivial: grouping time machines. However, in the future, it will offer various features to enhance the user experience.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a dashboard, select *Add Dashboard* on the Charting Space node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Time Machine","definition":"A time machine synchronizes multiple timeline charts over the same timeline. Timeline charts within a time machine may have different rate scales or time frame scales, but their time scale will always match.","content":["\r","\r","Think of a time machine as an aide that helps you keep any number of pieces of information synchronized on the same time scale. Every data structure that you set up within the same time machine, will always be synchronized in time. Put in other words, the open and closing datetime of each dataset will always be aligned on the vertical axis.\r","\r","On the other hand, when you arrange charts on different time machines, they are completely independent of one another.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a time machine, select *Add Time Machine* on the Dashboard node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Viewport","definition":"The viewport is a window through which you may look into the charting space.","content":["\r","\r","The viewport offers an opening into the visual environment in which you may see, analyze and go over every piece of data involved in the process of trading cryptocurrencies:\r","\r","* Live and historic market data;\r","* Data crunched in the form of indicators;\r","* The specific effects of the rules you will program into your strategies, and how strategies behave during testing and live trading sessions.\r","\r","At this point, the system supports one viewport only. In the future, different viewports may give you direct access to different parts of the charting space.\r","\r","{% include note.html content=\"The information that is out of focus, that is, out of the viewport, is not read nor rendered graphically, thus, does not consume resources.\" %}\r","\r"],"folderName":"charting_space","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Time Scale","definition":"The time scale controls the scale of the horizontal axis, that is, the timeline of the corresponding time machine, and of all of the timeline charts within it.","content":["\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Minimum and Maximum Values\r","\r","A time scale has a minimum and a maximum value. The minimum value is the value at the left border of the chart. The maximum, is the value at the right border of the chart.\r","\r","In technical terms, the minimum and maximum scale values are constantly changing as, whenever you pan across the charts, you are directly affecting the minimum and maximum scale values. That said, the actual scale doesn't change when panning across a chart.\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Automatic Scale\r","\r","The system features an automatic adjustment of the scale, which is turned on by default in our shared workspaces. The scale may be automatic in its minimum value, in its maximum value, or both. \r","\r","When the scale is automatic in the minimum value, the scale is adjusted so that the chart shows all data from the beginning of the market. Panning the charts under such setting has the effect of compressing and decompressing the data against the left border of the chart.\r","\r","When the scale is automatic in the maximum value, the scale is adjusted so that the chart shows all data until the end of the market. In such case, panning the charts has the effect of compressing and decompressing the data against the right border of the chart.\r","\r","When the scale is automatic in both the minimum and maximum value, the scale is adjusted so that the chart shows the whole market. In such case, when you click and drag to pan the charts, the settings turns back to manual on both ends of the chart.\r","\r","{% include note.html content=\"Having the time scale set to automatic by default helps finding the data as soon as it starts being processed the first time you run the Masters bot instances.\" %}\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Manual Scale\r","\r","The scale features a manual mode. When in manual mode the scale does not change, even if the minimum and maximum values change while panning through a chart. This is the natural state of the time scale. \r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a time scale, select *Add Time Scale* on the time machine node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Rate Scale* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"fromDate\": \"2019-05-02T20:07:50.872Z\",\r"," \"toDate\": \"2019-05-22T20:28:21.515Z\",\r"," \"autoMinScale\": false,\r"," \"autoMaxScale\": false\r","}\r","```\r","\r","* ```minValue``` is a date in the Epoch time format that represents the value of the scale at the left border of the chart.\r","\r","* ```maxValue``` is a date in the Epoch time format that represents the value of the scale at the right border of the chart.\r","\r","* ```autoMinScale``` sets the mode of the scale for the minimum value; ```true``` sets the value to automatic, ```false``` sets the value to manual. \r","\r","* ```autoMaxScale``` sets the mode of the scale for the maximum value; ```true``` sets the value to automatic, ```false``` sets the value to manual. \r","\r","{% include note.html content=\"The ```minValue``` and ```maxValue``` may be entered via the design space and the charts. Both input methods are synchronized and the resulting values are stored in the node.\" %}\r","\r"],"charts":["\r","\r","{{include.charts}}# Automatic Scale\r","\r","**1. To change the automatic scale settings**, place the mouse pointer over the corresponding time box, press the Shift key and slowly scroll the wheel of the mouse. The action cycles through different possible scale automation settings. Notice a tiny green triangle to the sides of the time scale icon. \r","\r","* A triangle pointing right means that the maximum value of the scale is automatic. \r","\r","* A triangle pointing left means that the minimum value of the scale is automatic.\r","\r","* Both triangles present at the same time means that both minimum and maximum values are automatic.\r","\r","* No triangle means that both minimum and maximum values are in manual mode.\r","\r","{% include image.html file='interface/time-scale-00.gif' url='yes' max-width='100' caption='Pay attention to the effects of the different setting for the automatic and manual time scales.' %}\r","\r","{{include.charts}}# Manual Scale\r","\r","**2. To adjust the scale**, make sure either or both minimum and maximum values are in manual mode. Place the mouse pointer over the time box and scroll the wheel of the mouse. The scale will increase or decrease accordingly, depending on which values are set to manual.\r","\r","{% include image.html file='interface/time-scale-01.gif' url='yes' max-width='100' caption='When the scale is set to manual, scrolling the mouse wheel on top of the time scale box changes the scale.' %}\r","\r","Notice that, while changing the scale, a number is displayed replacing the actual datetime. This is a reference value of the scale, that may serve for comparison purposes, with scales in other charts.\r","\r","{% include note.html content=\"This action has no effect when both minimum and maximum values are set to automatic mode.\" %}\r","\r"]},{"type":"Rate Scale","definition":"The rate scale controls the scale of the vertical axis, that is, the scale of the quoted asset, either of the time machine or of the timeline chart, depending on where the node is located.","content":["\r","\r","Rate scales may exist both at the level of a time machine and at the level of a timeline chart, each affecting the corresponding concept.\r","\r","When set at the level of the time machine, the scale settings affect all charts within the time machine. When set at the level of the timeline chart, the settings override the rate scale at the time machine level. This allows having multiple charts on the same time machine, each with a different rate scale.\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Minimum and Maximum Values\r","\r","A rate scale has a minimum and a maximum value. The minimum value is the value at bottom of the chart. The maximum, is the value at the top of the chart.\r","\r","In technical terms, the minimum and maximum scale values are constantly changing as, whenever you pan across the charts, you are directly affecting the minimum and maximum scale values. That said, the actual scale may change dynamically or not, depending on the scale-automation settings.\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Automatic Scale\r","\r","The system features an automatic adjustment of the scale, which is turned on by default in our shared workspaces. The scale may be automatic in its minimum value, in its maximum value, or both. \r","\r","When the scale is automatic in the minimum value, the scale is adjusted so that no piece of information in the span of the chart ever remains below the bottom of the chart. As a result, the lowest data point aligns with the bottom of the chart.\r","\r","When the scale is automatic in the maximum value, the scale is adjusted so that no piece of information in the span of the chart ever remains above the top of the chart. As a result, the highest data point aligns with the top of the chart.\r","\r","The scale may be automated on either, or both minimum and maximum values at the same time. In the later case, no data point in the span of the chart ever remains out of the visible area of the chart, as the lowest data point aligns with the bottom of the chart and the highest aligns with the top.\r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Manual Scale\r","\r","The system also features a manual mode. When in manual mode the scale does not change, even if the minimum and maximum values change while panning across a chart. This design feature allows comparing different periods using the same scale, which may be valuable in many cases. \r","\r","{% if include.heading == \"more\" %}##{% else %}{{include.heading}}{% endif %}### Scale Offset\r","\r","The offset is a feature of the rate scale by which the scale may be shifted upwards or downwards. As a result, charts aligned on the vertical axis—synchronized in datetime by a shared time machine—may be put one above the other. In technical terms, what happens is that the scale is shifted upwards or downwards.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a rate scale, select *Add Rate Scale* on the time machine or the timeline chart node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Rate Scale* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"minValue\": 388.60416666666424,\r"," \"maxValue\": 9715.104166666664,\r"," \"autoMinScale\": true,\r"," \"autoMaxScale\": true\r","}\r","```\r","\r","* ```minValue``` is a numerical value that represents the value of the scale at the bottom of the chart.\r","\r","* ```maxValue``` is a numerical value that represents the value of the scale at the top of the chart.\r","\r","* ```autoMinScale``` sets the mode of the scale for the minimum value; ```true``` sets the value to automatic, ```false``` sets the value to manual. \r","\r","* ```autoMaxScale``` sets the mode of the scale for the maximum value; ```true``` sets the value to automatic, ```false``` sets the value to manual. \r","\r","{% include note.html content=\"The ```minValue``` and ```maxValue``` may be entered via the design space and the charts. Both input methods are synchronized and the resulting values are stored in the node.\" %}\r","\r"],"charts":["\r","\r","{{include.charts}}# Automatic Scale\r","\r","**1. To change the automatic scale settings**, place the mouse pointer over the corresponding time machine or timeline chart rate box, press the Shift key and slowly scroll the wheel of the mouse. The action cycles through different possible scale automation settings. Notice a tiny green triangle below and/or above the rate scale icon. \r","\r","* A triangle pointing up means that the maximum value of the scale is automatic. \r","\r","* A triangle pointing down means that the minimum value of the scale is automatic.\r","\r","* Both triangles present at the same time means that both minimum and maximum values are automatic.\r","\r","* No triangle means that both minimum and maximum values are in manual mode.\r","\r","{% include image.html file='interface/rate-scale-00.gif' url='yes' max-width='100' caption='Pay attention to the effects of the different setting for the automatic and manual time scales.' %}\r","\r","{{include.charts}}# Manual Scale\r","\r","**2. To adjust the scale**, make sure either or both minimum and maximum values are in manual mode. Place the mouse pointer over the corresponding time machine or timeline chart rate box and scroll the wheel of the mouse. The scale will increase or decrease accordingly, depending on which values are set to manual.\r","\r","{% include image.html file='interface/rate-scale-01.gif' url='yes' max-width='100' caption='When the scale is set to manual, scrolling the mouse wheel on top of the rate scale box changes the scale.' %}\r","\r","Notice that, while changing the scale, a number is displayed replacing the actual rate. This is a reference value of the scale, that may serve for comparison purposes, with scales in other charts.\r","\r","{% include note.html content=\"This action has no effect when both minimum and maximum values are set to automatic mode.\" %}\r","\r","{{include.charts}}# Scale Offset\r","\r","**3. To shift or offset a timeline chart on the vertical axis**, place the mouse pointer on the rate box, left-click and drag upwards or downwards, as desired. The timeline chart will shift in the specified direction while the remaining charts stay in the same position.\r","\r","{% include image.html file='interface/rate-scale-02.gif' url='yes' max-width='100' caption='To control the offset between timeline charts, right-click on the rate box and drag upwards or downwards.' %}\r","\r","{% include note.html content=\"Setting an offset in a timeline chart only makes sense in the context of a time machine with multiple charts. That is, if you are browsing a single chart, an offset behaves the same as moving the single chart up or down.\" %}\r","\r","\r"]},{"type":"Time Frame Scale","definition":"The time frame scale controls the time frame setting, that is, the period represented by each candle, either of the time machine or of the timeline chart, depending on where the node is located.","content":["\r","\r","When the time frame scale is set at the level of the time machine, the scale setting affects all charts within the time machine. When set at the level of the timeline chart, the setting overrides the time frame scale at the time machine level. This allows comparing charts in different time frames, but still synchronized at the datetime level.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a time frame scale, select *Add Time Frame Scale* on the time machine or the timeline chart node menu.\r","\r"],"configuring":["\r","\r","Select *Configure Frame Scale* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"value\":\"06-hs\"\r","}\r","```\r","\r","* ```value``` can be any of the time frames supported by the system:\r","\r"," * ```01-min```, ```02-min```, ```03-min```, ```04-min```, ```05-min```, ```10-min```, ```15-min```, ```20-min```, ```30-min```, ```40-min```, and ```45-min```.\r","\r"," * ```01-hs```, ```02-hs```, ```03-hs```, ```04-hs```, ```06-hs```, ```08-hs```, ```12-hs```, and ```24-hs```.\r","\r"," {% include note.html content=\"The values entered via the design space and the charts are synchronized and stored in the node.\" %}\r","\r"],"charts":["\r","\r","**1. To set a time frame value**, place the mouse pointer over the corresponding time machine or timeline chart time frame box and scroll the mouse wheel.\r","\r","{% include image.html file='interface/time-frame-scale-00.gif' url='yes' max-width='100' caption='To set a time frame, scroll the wheel of the mouse over the time frame scale box.' %}\r","\r"]},{"type":"Timeline Chart","definition":"The timeline chart represents a chart within a time machine, which may have independent rate and time frame scales, as well as particular layers.","content":["\r","\r","In other words, a timeline chart—often referred simply as *chart*—is a set of information to be displayed over a timeline. The information may include candles—the main and foremost resource—as well as any other indicator, study or—in general—data products that may be available.\r","\r","You may add as many charts as you wish. Charts within the same time machine are synchronized in the y-axis, that is, in the datetime dimension. Charts in different time machines are independent of each other concerning the datetime. In either case, you may also add rate scales and time frame scales at the timeline charts level.\r","\r","The information that each timeline chart makes available on the screen is given by the layers set up in the corresponding layer manager.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a timeline chart, select *Add Timeline Chart* on the preferred time machine node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Layer Manager","definition":"The layer manager determines which layers will be visible on the corresponding timeline chart.","content":["\r","\r","In other words, you use the layer manager node to configure which data products you wish to be made available for visualization purposes on the charts, in particular, on a specific timeline chart to which the layer manager node is attached to.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a layer manager, select *Add Layer Manager* on the preferred timeline chart node menu.\r","\r"],"configuring":["\r","Select *Configure Layer Manager* in the menu to access the configuration.\r","\r","```json\r","{\r"," \"visibleLayers\": 3,\r"," \"panelLocation\": {\r"," \"upOrDown\": \"up\",\r"," \"leftOrRight\": \"left\"\r"," },\r"," \"label2FontSize\": 12\r","}\r","```\r","\r","* ```visibleLayers``` keeps track of how many layers the managers is rolled to, that is, how many layers it is displaying.\r","\r","* ```panelLocation``` keeps track of the position of the panel relative to the four screen corners.\r","\r","* ```label2FontSize``` allows adjusting the font size of the second-order label of each layer, displaying the name of the exchange and market.\r","\r"],"charts":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Layer","definition":"A layer represents a reference to a data product in the data storage node of the network hierarchy. Conceptually, it means that a certain data product, which exists in a certain location on the network, holds the data to be rendered on the charts.","content":["\r","\r","To set up a layer, you need to establish a reference with the data product of your choice.\r","\r"],"folderName":"charting_space","adding":["\r","\r","To add a layer, select *Add Layer* on the layer manager node menu. \r","\r","{% include note.html content=\"After adding a layer node, make sure you establish a reference to the corresponding data product in the data storage node of the network hierarchy.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure Layer* on the menu to access the configuration.\r","\r","```json\r","{\r"," \"status\":\"on\", \r"," \"showPanels\":true\r","}\r","```\r","\r","* ```status``` may be *on* or *off* and refers to the layer being visible or not on the charts.\r","\r","* ```showPanels``` may be *true* or *false*; *true* shows the plotter panel that may be associated with the data product as per the plotter module definitions; *false* makes panels invisible.\r","\r"],"charts":["\r","\r","To turn layers on and off, simply click on the layer in the corresponding products panel.\r","\r","To turn on and off a layer panel, click the panel button on the bottom-left corner of the layer.\r","\r"]},{"type":"Bot Layers"},{"type":"Layer Folder"},{"type":"Data Storage","definition":"The data storage node holds the definitions as to what data is stored in the corresponding network node.","content":["\r","\r","Bot instances running on the data mining and trading sections of a network node produce data products that need to be stored somewhere, specifically. The data storage node and its chain of offspring determine which data is to be stored where; that is, in what network node.\r","\r","Like with the data mining section and the sections referring to trading operations (testing and production environments), the data storage section is too organized by exchange, market, and data or trading mines. See the [sorting of tasks](suite-sorting-of-tasks.html) page for the details.\r","\r","The storage of data is split between [data mines data](suite-data-mines-data.html) and [trading mines data](suite-trading-mines-data.html). This is to facilitate the management of data storage definitions in [trading farms](suite-fundamental-trading-farms-concepts.html), on which data mining operations may be separate from trading operations.\r","\r","The data stored on each node of the network may be accessed by others, including the charting system, to visualize information via plotters defined in data mines, by trading systems to make trading decisions, and even by third-party systems. The information regarding trading mine data is explained in length in the [trading engine](suite-trading-engine.html) section of the documentation.\r","\r","The setup of data storage definitions is done automatically when the [install market](suite-how-to-install-a-new-market.html) function under the exchange markets node of the Crypto Ecosystem hierarchy is used. However, when data mining or trading tasks are created manually, the data storage definitions must be created manually as well, using the tools available in each of the data structures below this node.\r","\r","{% include node-deletion-warning.html %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a data storage, select *Add Data Storage* on the network node menu. \r","\r","{% include note.html content=\"Only one data storage node may exist on each network node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Mine Tasks","definition":"The data mine tasks node is an organizational device that groups tasks corresponding to the referenced data mine.","content":["\r","\r","The data mine tasks node must reference the definition of a data mine. The node may spawn tasks for each bot in the data mine.\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. This action adds the node but does not establish a reference with any data mine.\r","\r","The smarter use of the node involves using the *Add Missing Data Mine Tasks* option on the parent node menu. This action creates a data mine tasks node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up tasks for each bot in a given data mine.\r","\r","{% include note.html content=\"See the task node definition and the *Adding a Task Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","Select *Run All Task Managers* or *Stop All Task Managers* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Trading Mine Tasks","definition":"The trading mine tasks node is an organizational device that groups tasks corresponding to the referenced trading mine.","content":["\r","\r","The market trading tasks node must reference the definition of a data mine. The node may spawn tasks for each bot in the data mine.\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. This action adds the node but does not establish a reference with any data mine.\r","\r","The smarter use of the node involves using the *Add Missing market trading tasks* option on the parent node menu. This action creates a market trading tasks node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up tasks for each bot in a given data mine.\r","\r","{% include note.html content=\"See the task node definition and the *Adding a Task Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","Select *Run All Task Managers* or *Stop All Task Managers* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Market Data Tasks","definition":"A market data tasks node groups data mining tasks operating in a specific market.","content":["\r","\r","The market data tasks node must reference a market defined in the Crypto Ecosystem hierarchy.\r","\r","This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details.\r","\r"],"folderName":"network","adding":["\r","\r","To add a market data tasks node, select *Add Market Data* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with a market defined in the Crypto Ecosystem hierarchy after adding the node.\" %}\r","\r","You may also add market data tasks nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Markets* on the parent node menu. A market data tasks node is created for each defined market, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run All Data Mine Tasks* or *Stop All Data Mine Tasks* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Market Trading Tasks","definition":"A market trading tasks node groups trading tasks operating in a specific market.","content":["\r","\r","The market trading tasks node must reference a market defined in the Crypto Ecosystem hierarchy.\r","\r","This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details.\r","\r"],"folderName":"network","adding":["\r","\r","To add a market trading tasks node, select *Add Market Data* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with a market defined in the Crypto Ecosystem hierarchy after adding the node.\" %}\r","\r","You may also add market trading tasks nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Markets* on the parent node menu. A market trading tasks node is created for each defined market, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run All Trading Mine Tasks* or *Stop All Trading Mine Tasks* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Exchange Data Tasks","definition":"The exchange data tasks node organizes data mining tasks by exchange. That is, each exchange installed in the system has an exchange data tasks node grouping all market data tasks corresponding to the said exchange.","content":["\r","\r","The exchange data tasks node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange.\r","\r","When representing an exchange featured in the system's icons library, the standard exchange data tasks icon is replaced by the exchange's logo.\r","\r"],"folderName":"network","adding":["\r","\r","To add a specific {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy.\" %}\r","\r","You may also add exchange data tasks node in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Exchanges* on the parent node menu. An exchange data tasks node is created for each defined exchange, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run All Market Data Tasks* or *Stop All Market Data Tasks* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Exchange Trading Tasks","definition":"The exchange trading tasks node organizes trading tasks by exchange. That is, each exchange installed in the system has an exchange trading tasks node grouping all market trading tasks corresponding to the said exchange.","content":["\r","\r","The exchange trading tasks node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange.\r","\r","When representing an exchange featured in the system's icons library, the standard exchange trading tasks icon is replaced by the exchange's logo.\r","\r"],"folderName":"network","adding":["\r","\r","To add a specific {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy.\" %}\r","\r","You may also add exchange trading tasks node in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Exchanges* on the parent node menu. An exchange trading tasks node is created for each defined exchange, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","Select *Run All Market Trading Tasks* or *Stop All Market Trading Tasks* on the menu to start and stop all tasks under this node.\r","\r"]},{"type":"Data Mining","definition":"Data mining is the activity of processing data. You need to process data to feed charts, and so that your trading systems may make decisions based on quality information.","content":["\r","\r","Having access to quality information is a crucial element of trading. For that reason, Superalgos strives to give users full control over how, where, and when data is processed. You will use this section of the network hierarchy to exert that control.\r","\r","Data mining is done through tasks running instances of sensor and indicator bots. The data structure under this node allows organizing the data mining operation by exchange, market, and data mine.\r","\r","The setup of the data mining operation may be done using the *Install Market* function of the market you wish to install as defined in the Crypto Ecosystem hierarchy under the exchange markets node. Learn more about this function on the [how to install a new market](suite-how-to-install-a-new-market.html) page.\r","\r","You may also set up data mining tasks by using the different functions in this section of the hierarchy, starting with the options in the menu of this node. This route offers finer control over what tasks you set up, and how. \r","\r","{% include node-deletion-warning.html %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Testing Environment","definition":"The testing environment node organizes trading sessions involving testing of trading systems.","content":["\r","\r","Thorough and comprehensive testing of strategies is at the core of successful trading. Superalgos strives to put you in control of the testing process providing you with flexible tools to fit your criteria.\r","\r","Depending on how you use the system, how many markets and exchanges you work with, the number of trading systems you use, or the way you choose to test your strategies, you may find yourself with a large number of testing sessions. As explained in the [sorting of tasks](suite-sorting-of-tasks.html) page, the testing environment helps you organize large numbers of tasks sorting them by exchange, market, and trading mine.\r","\r","Superalgos handles two types of simulated tests: backtesting and paper trading. Backtesting involves testing over historic data, while paper trading is about testing on a live data stream, but without placing orders at the exchange.\r","\r","Trading sessions are controlled by a number of parameters that determine how the session is run. The built-in parameters provide great control and flexibility as to how to handle data sets and how to produce the resulting simulations.\r","\r","{% include note.html content=\"Please, read on and study the workings of the chain of nodes under the testing environment node. The investment of time is well worth it, as you will learn how to make the most out of the strategy-testing features built-in Superalgos.\" %}\r","\r","{% include node-deletion-warning.html %}\r","\r"],"folderName":"network","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Production Environment","definition":"The production environment node organizes trading sessions involving live trading.","content":["\r","\r","Superalgos aims to provide a flexible and robust trading bots deployment toolbox.\r","\r","With Superalgos, you may deploy as many trading bots as you wish and have them running on a single computer or in as many machines as you wish, in a [trading farm](suite-fundamental-trading-farms-concepts.html) type of setup. To help with the management of large numbers of live trading sessions, the system helps you with [sorting tasks](suite-sorting-of-tasks.html) by exchange, market, and trading mine.\r","\r","The production environment works pretty much in the same way as the testing environment, save for two important differences:\r","\r","* The production environment runs forward testing and live trading sessions, instead of backtesting and paper trading sessions.\r","\r","* These two types of sessions involve monetary transactions at the exchange, thus require the set up of a key reference to authenticate your account with the exchange.\r","\r","{% include note.html content=\"If you are familiar with the testing environment, there isn't much more to learn to understand the production environment. If you are not familiar with either, please refer to the [tesing environment](suite-testing-evironment.html) page for the details.\" %}\r","\r","{% include node-deletion-warning.html %}\r","\r"],"folderName":"network","adding":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Data Products","definition":"The exchange data products node organizes data mines data by exchange. That is, each exchange installed in the system has an exchange data products node grouping all market data products nodes corresponding to the said exchange.","content":["\r","\r","The exchange data products node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange.\r","\r","When representing an exchange featured in the system's icons library, the standard exchange data tasks icon is replaced by the exchange's logo.\r","\r"],"folderName":"network","adding":["\r","\r","To add a specific {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy.\" %}\r","\r","You may also add exchange data products nodes in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Exchanges* on the parent node menu. An exchange data products node is created for each defined exchange, each with the corresponding reference.\r","\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Mines Data","definition":"Session independent data refers to data generated by sensors and indicators, not related to trading sessions.","content":["\r","\r","As explained in the [sorting of tasks](suite-sorting-of-tasks.html) page, data mines data is sorted by exchange, market, and the corresponding data mine, sensor or indicator bot, and bot product. That is, most of the nodes in this section of the hierarchy play an organizational role.\r","\r","Many of them require references to the nodes that delimit the context for which the data is applicable. For example, the market data products node must reference one of the installed markets, in particular, the market on which the data mining operation is run. These references help other entities understand the context to which the data belongs to.\r","\r","Whenever you create data mining tasks manually from within the Network hierarchy (as opposed to using the [install market](suite-how-to-install-a-new-market.html) function under the exchange markets node of the Crypto Ecosystem hierarchy), you need to create the proper definitions for the storage of data mines data.\r","\r"],"folderName":"network","adding":["\r","\r","To add a session-independent data node, select *Add Session-independent Data* on the network node menu. \r","\r","{% include note.html content=\"Only one session-independent data node may exist on each data storage node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Exchange Trading Products","definition":"The exchange trading products node organizes trading mines data by exchange. That is, each exchange installed in the system has an exchange trading products node grouping all session references corresponding to the said exchange.","content":["\r","\r","The exchange trading products node must reference the exchange of choice. This reference constraints the rest of the definitions to the context of the said exchange.\r","\r","When representing an exchange featured in the system's icons library, the standard exchange trading products icon is replaced by the exchange's logo.\r","\r"],"folderName":"network","adding":["\r","\r","To add a specific {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference to the desired exchange in the Crypto Ecosystem hierarchy.\" %}\r","\r","You may also add exchange trading products nodes in bulk for all exchanges that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Exchanges* on the trading mines data node menu. An exchange trading products node is created for each defined exchange, each with the corresponding reference.\r","\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Mines Data","definition":"Session-based data refers to data that is generated as a consequence of running a trading session, that is, data the trading bot instance generates while running backtesting, paper trading, forward testing, or live trading sessions.","content":["\r","\r","As explained in the [sorting of tasks](suite-sorting-of-tasks.html) page, trading mines data is sorted by exchange, market, the corresponding trading session, and the corresponding trading mine, trading bot, and bot product. That is, most of the nodes in this section of the hierarchy play an organizational role.\r","\r","Many of them require references to the nodes that delimit the context for which the data is applicable. For example, the exchange trading products node must reference one of the installed exchanges, in particular, the exchange on which the trading operation is run. These references help other entities understand the context to which the data belongs to.\r","\r","Whenever you create trading tasks manually from within the Network hierarchy (as opposed to using the [install market](suite-how-to-install-a-new-market.html) function under the exchange markets node of the Crypto Ecosystem hierarchy), you need to create the proper definitions for the storage of trading mines data.\r","\r"],"folderName":"network","adding":["\r","\r","To add a session-based data node, select *Add Session-based Data* on the network node menu. \r","\r","{% include note.html content=\"Only one session-based data node may exist on each data storage node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Session Reference","definition":"A session reference establishes which session is the one which shall store data in the current location.","content":["\r","\r","A such, the session reference node must establish a reference with a trading session. Also, its offspring nodes determine precisely which data products are stored.\r","\r"],"folderName":"network","adding":["\r","\r","To add a session reference node, select *Add Trading Session Reference* on the network node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with a trading session after adding the node.\" %}\r","\r","You may also add session reference nodes in bulk for all sessions defined in the same network that are not yet defined. To do that, select *Add Missing Sessions* on the exchange trading products node menu. A session reference node is created for each defined trading session in the node, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Data Products","definition":"A market data products node represents the group of data products generated in a specific market.","content":["\r","\r","The market data products node must reference a market defined in the Crypto Ecosystem hierarchy.\r","\r","This node may spawn individual data products or may deploy data products in bulk organized by data mine and by bots. See the data products node for the details.\r","\r"],"folderName":"network","adding":["\r","\r","To add a market data products node, select *Add Market Data* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with a market defined in the Crypto Ecosystem hierarchy after adding the node.\" %}\r","\r","You may also add market data products nodes in bulk for all markets that may have been previously defined in the Crypto Ecosystem hierarchy. To do that, select *Add Missing Markets* on the parent node menu. A market data products node is created for each defined market, each with the corresponding reference.\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Market Trading Products","definition":"A market trading products node features the group of data products generated by the referenced session in a specific market.","content":["\r","\r","The market trading products node must reference a market defined in the Crypto Ecosystem hierarchy.\r","\r","This node may spawn individual data products or may deploy data products in bulk organized by trading mine and by trading bots. See the data products node for the details.\r","\r"],"folderName":"network","adding":["\r","\r","To add a market trading products node, select *Add Market Trading Data* on the parent node menu. \r","\r","{% include note.html content=\"Remember to establish a reference with a market defined in the Crypto Ecosystem hierarchy after adding the node.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Product","definition":"A data product represents the collection of datasets generated by the instance of a bot as defined in the corresponding data mine or trading mine.","content":["\r","\r","Data products exist in the context of trading mines data and data mines data nodes. In the first case, a data product is the collection of datasets generated by an instance of a trading bot as defined in a trading mine, running a trading session. In the latter case, it is the collection of datasets generated by either a sensor bot or an indicator bot instance, as defined in a data mine, and running a data mining task.\r","\r","A data product node must reference a product definition in the corresponding bot.\r","\r","{% include important.html content=\"Data products may only be stored on the same network node on which the task—data mining or trading—runs.\" %}\r","\r"],"folderName":"network","adding":["\r","\r","To add a single data product, select *Add Data Product* on the market trading products, market data products, bot products, or data products folder node menus. \r","\r","{% include note.html content=\"Remember to establish a reference with a product definition of the corresponding bot in the corresponding data or trading mine.\" %}\r","\r","In cases in which multiple data products must be added, you may use the option to create data products in bulk.\r","\r","Select the *Add All Data Products* option on the data or trading mine products node menu. This adds a bot products node for each bot in the data or trading mine, and a data product for each product definition of each bot. \r","\r","You may use this option after manually adding a data or trading mine products node and manually establishing the reference with the desired data mine, or after adding all data or trading mine data products, by which the references with data or trading mines are established automatically.\r","\r","{% include tip.html content=\"If adding data products in bulk results in adding data products that are not required, you may easily delete those.\" %}\r","\r"],"configuring":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Mine Products","definition":"Data mine products are references established with data mines to facilitate establishing data product references with multiple products in the given data mine.","content":["\r","\r","The node may be used as an organizational device, simply to arrange bot products. However, the smart use of the node involves automating the deployment of multiple data products.\r","\r","The use of the {{ title | downcase }} node is optional, as data products may also exist outside of {{ title | downcase }} nodes.\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. This action adds the node but does not establish a reference with any data mine. \r","\r","The smarter use of the node involves using the *Add All Data Mine Products* option on the parent node menu. This action creates a data mine products node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up multiple data products when needed.\r","\r","{% include note.html content=\"See the data product node definition and the *Adding a Data Product Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Trading Mine Products","definition":"Trading mine products are references established with trading mines to facilitate establishing data product references with multiple products in the given mine.","content":["\r","\r","At this point, Superalgos ships with a single trading mine, featuring a single *low frequency* trading bot. However, developers may create their own trading bots or fork the existing one. \r","\r","The node may be used as an organizational device, simply to arrange bot products. However, the smart use of the node involves automating the deployment of multiple data products.\r","\r","The use of the {{ title | downcase }} node is optional, as data products may also exist outside of {{ title | downcase }} nodes.\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. This action adds the node but does not establish a reference with any trading mine. \r","\r","The smarter use of the node involves using the *Add All Trading Mine Products* option on the parent node menu. This action creates a trading mine products node for each trading mine in the workspace, establishing a reference with the corresponding trading mines. This is the first step in the direction of quickly setting up multiple data products when needed.\r","\r","{% include note.html content=\"See the data product node definition and the *Adding a Data Product Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Bot Products","definition":"A bot products node is an organizational device used to arrange data products corresponding to a specific bot.","content":["\r","\r","The device exists as an offspring of a data or trading mine products node, and does not require a reference to a bot in the given data or trading mine. \r","\r","The use of the {{ title | downcase }} node is optional, as data products may also exist outside of {{ title | downcase }}.\r","\r"],"folderName":"network","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu.\r","\r","The bot products node may also be created automatically. When created using the *Add All Data Products* option on the data mine products node, the node inherits the label of the corresponding bot in the corresponding data mine. \r","\r","{% include note.html content=\"See the data product node definition and the *Adding a Data Product Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Product Folder","definition":"A data product folder node is an organizational device used to map the arrangement of product definition folders as may exist in the bot definition of the corresponding data or trading mine.","content":["\r","\r","The use of the {{ title | downcase }} node is optional, as data products may also exist outside of {{ title | downcase }}s.\r","\r"],"folderName":"network","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. \r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Tutorial"},{"type":"Tutorial Topic"},{"type":"Tutorial Step"},{"type":"Data Mine Data Dependencies","definition":"Data mine data dependencies are references established with entire data mines to facilitate establishing data dependencies with multiple datasets in the given data mine.","content":["\r","\r","The node may be used as an organizational device, simply to arrange bot data dependencies. However, the smart use of the node involves automating the deployment of multiple data dependencies and their references.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add a {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. This action adds the node but does not establish a reference with any data mine. \r","\r","The smarter use of the node involves using the *Add All Data Mine Dependencies* option on the parent node menu. This action creates a data mine data dependencies node for each data mine in the workspace, establishing a reference with the corresponding data mines. This is the first step in the direction of quickly setting up multiple data dependencies when needed.\r","\r","{% include note.html content=\"See the data dependency node definition and the *Adding a Data Dependecy Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Bot Data Dependencies","definition":"A bot data dependencies node is an organizational device used to arrange data dependencies corresponding to a specific bot.","content":["\r","\r","The device exists as an offspring of a data mine data dependencies node, and does not require a reference to a bot in the given data mine. \r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu. When adding a bot data dependency in this manner, the node does not inherit any particular label. In fact, it may even host data dependencies pointing to other data mines.\r","\r","The bot data dependencies node may also be created automatically. When created using the *Add All Data Dependencies* option on the data mine data dependencies node, the node inherits the label of the corresponding bot in the corresponding data mine. \r","\r","{% include note.html content=\"See the data dependency node definition and the *Adding a Data Dependecy Node* section for all the details.\" %}\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]},{"type":"Data Dependency Folder","definition":"A data dependency folder node is an organizational device used to map the arrangement of product definition folders of a given bot.","content":["\r","\r","The use of product data dependency folders is optional, as data dependencies may also exist outside of folders.\r","\r"],"folderName":"data_mine","adding":["\r","\r","To add the {{ title | downcase }} node, select *Add {{ title }}* on the parent node menu.\r","\r","The {{ title | downcase }} node may be added automatically when using the *Add All Data Dependencies* option on the data mine data dependencies node menu.\r","\r"],"configuring":["\r","\r","Select *Configure* on the menu to access the configuration.\r","\r","```json\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","```\r","\r"],"starting":["\r","\r","XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r","\r"]}] \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartUtilities.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartUtilities.js deleted file mode 100644 index ca778df72..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartUtilities.js +++ /dev/null @@ -1,139 +0,0 @@ - -function getSideDays(timeFrame) { - let daysOnSides - - if (timeFrame < _1_HOUR_IN_MILISECONDS) { - daysOnSides = 1 - } - - if (timeFrame === _1_HOUR_IN_MILISECONDS) { - daysOnSides = 9 - } - - if (timeFrame === _2_HOURS_IN_MILISECONDS) { - daysOnSides = 10 - } - - if (timeFrame === _3_HOURS_IN_MILISECONDS) { - daysOnSides = 12 - } - - if (timeFrame === _4_HOURS_IN_MILISECONDS) { - daysOnSides = 20 - } - - if (timeFrame === _6_HOURS_IN_MILISECONDS) { - daysOnSides = 35 - } - - if (timeFrame === _8_HOURS_IN_MILISECONDS) { - daysOnSides = 44 - } - - if (timeFrame === _12_HOURS_IN_MILISECONDS) { - daysOnSides = 56 - } - - if (timeFrame === ONE_DAY_IN_MILISECONDS) { - daysOnSides = 154 - } - - return daysOnSides -} - -function getCondenseFactor(timeFrame) { - switch (timeFrame) { - case _1_MINUTE_IN_MILISECONDS: return 1 - case _5_MINUTES_IN_MILISECONDS: return 5 - case _10_MINUTES_IN_MILISECONDS: return 10 - case _30_MINUTES_IN_MILISECONDS: return 50 - case _1_HOUR_IN_MILISECONDS: return 100 - } -} - -function getTransparenceFactor(timeFrame) { - switch (timeFrame) { - case _1_MINUTE_IN_MILISECONDS: return '0.12' - case _5_MINUTES_IN_MILISECONDS: return '0.10' - case _10_MINUTES_IN_MILISECONDS: return '0.08' - case _30_MINUTES_IN_MILISECONDS: return '0.06' - case _1_HOUR_IN_MILISECONDS: return '0.04' - } -} - -function recalculatePeriod(zoomLevel) { - // console.log('NEW ZOOM LEVEL', zoomLevel) - if (zoomLevel > 400) { - return _1_MINUTE_IN_MILISECONDS - } - - if (zoomLevel > 360) { - return _2_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 330) { - return _3_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 300) { - return _4_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 270) { - return _5_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 250) { - return _10_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 230) { - return _15_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 210) { - return _20_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 190) { - return _30_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 170) { - return _40_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 150) { - return _45_MINUTES_IN_MILISECONDS - } - - if (zoomLevel > 130) { - return _1_HOUR_IN_MILISECONDS - } - - if (zoomLevel > 110) { - return _2_HOURS_IN_MILISECONDS - } - - if (zoomLevel > 80) { - return _3_HOURS_IN_MILISECONDS - } - - if (zoomLevel > 50) { - return _4_HOURS_IN_MILISECONDS - } - - if (zoomLevel > 35) { - return _6_HOURS_IN_MILISECONDS - } - - if (zoomLevel > 20) { - return _8_HOURS_IN_MILISECONDS - } - - if (zoomLevel > 10) { - return _12_HOURS_IN_MILISECONDS - } - - return ONE_DAY_IN_MILISECONDS -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartingSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartingSpace.js deleted file mode 100644 index 5beccc07d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/ChartingSpace.js +++ /dev/null @@ -1,462 +0,0 @@ -/* - -The chart space is where all the charts live. What this space contains is a type of object we call Time Machine. A Time Machine is a cointainer of -charts objects. The idea is simple, all the chart objects are ploted according to the time of the Time Machine object. When the time of the Time Machine -changes, then all charts in it are replotted with the corresponging data. - -*/ - -function newSuperalgosChartingSpace() { - const MODULE_NAME = 'Charting Space' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - visible: false, - container: undefined, - inViewport: undefined, - timeMachines: undefined, - viewport: undefined, - payload: undefined, - findTimeMachine: findTimeMachine, - onKeyPressed: onKeyPressed, - reset: reset, - oneScreenUp: oneScreenUp, - oneScreenDown: oneScreenDown, - oneScreenLeft: oneScreenLeft, - oneScreenRight: oneScreenRight, - fitFunction: fitFunction, - isThisPointVisible: isThisPointVisible, - physics: physics, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - let canvasBrowserResizedEventSubscriptionId - let timeMachinesMap - let syncWithDesignerLoop - - const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 25 - - initialSetup() - - let isInitialized = false - - return thisObject - - function reset() { - finalize() - initialSetup() - isInitialized = false - initialize() - } - - function initialSetup() { - thisObject.timeMachines = [] - thisObject.visible = true - timeMachinesMap = new Map() - syncWithDesignerLoop = 0 - thisObject.inViewport = new Map() - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = false - } - - function finalize() { - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[i] - timeMachine.finalize() - } - - thisObject.inViewport = undefined - thisObject.timeMachines = undefined - timeMachinesMap = undefined - - thisObject.container.eventHandler.stopListening(canvasBrowserResizedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - - if (thisObject.viewport !== undefined) { - thisObject.viewport.finalize() - thisObject.viewport = undefined - } - - thisObject.payload = undefined - } - - function initialize() { - if (isInitialized === true) { return } - if (UI.projects.superalgos.spaces.designSpace === undefined) { return } - if (UI.projects.superalgos.spaces.designSpace.workspace === undefined) { return } - - let rootNodes = UI.projects.superalgos.spaces.designSpace.workspace.workspaceNode.rootNodes - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - if (rootNode !== null) { - if (rootNode.type === 'Charting Space') { - thisObject.payload = rootNode.payload - } - } - } - - if (thisObject.payload === undefined) { - // if (ERROR_LOG === true) { logger.write('[WARN] initialize -> There must exist a Charting Space at the Design Space in order to enable Charts. PLease create one and refreash your browser. ') } - return - } - - thisObject.viewport = newViewport() - if (thisObject.payload.node.viewport === undefined) { - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> There must exist a Viewport node attached to the Charting Space node in order for the Viewport save its properties. ') } - return - } else { - thisObject.viewport.payload = thisObject.payload.node.viewport.payload - } - - thisObject.viewport.initialize() - - canvasBrowserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - - isInitialized = true - } - - function getContainer(point, purpose) { - if (thisObject.visible !== true) { return } - if (thisObject.viewport === undefined) { return } - if (thisObject.viewport.isThisPointInViewport(point) === false) { return } - - let container - - /* This first step is not actually to get the container but to allow things to be turned off in case there is a switch of focus from one time machine to another */ - for (let i = 0; i < thisObject.timeMachines.length; i++) { - container = thisObject.timeMachines[i].container - if (purpose === GET_CONTAINER_PURPOSE.MOUSE_OVER) { - container.eventHandler.raiseEvent('onMouseNotOver') - } - } - - /* - Now we see which is the inner most container that has it. - In this case we will ask all the time machines even if one of them already returned a matching container. - This will help the others know they are not on ofcus - */ - let containerFound - for (let i = 0; i < thisObject.timeMachines.length; i++) { - container = thisObject.timeMachines[i].getContainer(point, purpose) - if (container !== undefined) { - if (purpose !== undefined) { - if (containerFound === undefined) { - containerFound = container - } - } else { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - if (containerFound === undefined) { - containerFound = container - } - } - } - } - } - if (containerFound !== undefined) { - containerFound.space = 'Charting Space' - if (purpose === GET_CONTAINER_PURPOSE.MOUSE_WHEEL && containerFound.isWheelable !== true) { - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - return - } - return containerFound - } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - thisObject.container.space = 'Charting Space' - if (purpose === GET_CONTAINER_PURPOSE.MOUSE_WHEEL && thisObject.container.isWheelable !== true) { - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - return - } - return thisObject.container - } else { - return undefined - } - } - - function resize() { - thisObject.viewport.resize() - thisObject.container.frame.width = browserCanvas.width - thisObject.container.frame.height = COCKPIT_SPACE_POSITION - } - - function oneScreenUp() { - if (thisObject.visible === false) { return } - let displaceVector = { - x: 0, - y: browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 - } - - UI.projects.superalgos.spaces.chartingSpace.viewport.displace(displaceVector) - } - - function oneScreenDown() { - if (thisObject.visible === false) { return } - let displaceVector = { - x: 0, - y: -browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 - } - - UI.projects.superalgos.spaces.chartingSpace.viewport.displace(displaceVector) - } - - function oneScreenLeft() { - if (thisObject.visible === false) { return } - let displaceVector = { - x: browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, - y: 0 - } - - UI.projects.superalgos.spaces.chartingSpace.viewport.displace(displaceVector, true) - } - - function oneScreenRight() { - if (thisObject.visible === false) { return } - let displaceVector = { - x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, - y: 0 - } - - UI.projects.superalgos.spaces.chartingSpace.viewport.displace(displaceVector, true) - } - - function fitFunction(point, fullVisible) { - /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ - - let returnPoint = { - x: point.x, - y: point.y - } - - if (point.x > browserCanvas.width) { - returnPoint.x = browserCanvas.width - } - - if (point.x < 0) { - returnPoint.x = 0 - } - - if (fullVisible === true) { - if (point.y > COCKPIT_SPACE_POSITION) { - returnPoint.y = COCKPIT_SPACE_POSITION - } - } else { - if (point.y > COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT / 2) { - returnPoint.y = COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT / 2 - } - } - - if (point.y < TOP_SPACE_HEIGHT) { - returnPoint.y = TOP_SPACE_HEIGHT - } - - return returnPoint - } - - function isThisPointVisible(point) { - if (point.x > browserCanvas.width) { - return false - } - - if (point.x < 0) { - return false - } - - if (point.y > COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT / 2) { - return false - } - - if (point.y < 0) { - return false - } - - return true - } - - function physics() { - initialize() - thisObjectPhysics() - if (thisObject.visible !== true) { return } - if (thisObject.viewport !== undefined) { - thisObject.viewport.physics() - } - childrenPhysics() - syncWithDesigner() - } - - function onKeyPressed(event) { - if (thisObject.visible !== true) { return } - for (let j = 0; j < thisObject.timeMachines.length; j++) { - let timeMachine = thisObject.timeMachines[j] - if (timeMachine.onFocus === true) { - timeMachine.onKeyPressed(event) - } - } - } - - function findTimeMachine(node) { - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[i] - if (timeMachine.payload.node.id === node.id) { - return timeMachine - } - } - } - - function syncWithDesigner() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - syncWithDesignerLoop = syncWithDesignerLoop + 0.00000000001 - - if (thisObject.payload.node.dashboards !== undefined) { - for (let i = 0; i < thisObject.payload.node.dashboards.length; i++) { - let dashboard = thisObject.payload.node.dashboards[i] - if (dashboard.timeMachines !== undefined) { - for (let j = 0; j < dashboard.timeMachines.length; j++) { - let node = dashboard.timeMachines[j] - let timeMachine = timeMachinesMap.get(node.id) - if (timeMachine === undefined) { - /* The time machine node is new, thus we need to initialize a new timeMachine */ - initializeTimeMachine(node, syncWithDesignerLoop) - } else { - /* The time machine already exists, we tag it as existing at the current loop. */ - timeMachine.syncWithDesignerLoop = syncWithDesignerLoop - } - } - } - } - } - - /* We check all the timeMachines we have to see if we need to remove any of them */ - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[i] - if (timeMachine.syncWithDesignerLoop < syncWithDesignerLoop) { - /* Must be removed */ - timeMachine.finalize() - timeMachinesMap.delete(timeMachine.nodeId) - thisObject.timeMachines.splice(i, 1) - /* We remove one at the time */ - return - } - } - - function initializeTimeMachine(node, syncWithDesignerLoop) { - if (node.payload === undefined) { return } // not ready to consider this Time Machine - if (node.payload.uiObject === undefined) { return } - - let timeMachine = newTimeMachine() - timeMachine.syncWithDesignerLoop = syncWithDesignerLoop - timeMachine.payload = node.payload - timeMachine.nodeId = node.id - - timeMachinesMap.set(node.id, timeMachine) - timeMachine.payload.uiObject.setValue('Loading...') - - /* Setting up the new time machine. */ - timeMachine.initialize(onTimeMachineInitialized) - - function onTimeMachineInitialized() { - thisObject.timeMachines.push(timeMachine) - timeMachine.payload.uiObject.setValue('') - if (UI.projects.superalgos.spaces.chartingSpace.viewport !== undefined) { - UI.projects.superalgos.spaces.chartingSpace.viewport.raiseEvents() // These events will impacts on objects just initialized. - } - } - } - } - - function thisObjectPhysics() { - thisObject.container.frame.height = COCKPIT_SPACE_POSITION - - if (thisObject.container.frame.height <= TOP_SPACE_HEIGHT) { - thisObject.visible = false - if (thisObject.viewport !== undefined) { - thisObject.viewport.visible = false - } - } else { - thisObject.visible = true - if (thisObject.viewport !== undefined) { - thisObject.viewport.visible = true - } - } - - if (UI.projects.superalgos.spaces.chartingSpace.viewport !== undefined) { - UI.projects.superalgos.spaces.chartingSpace.viewport.resize() - } - } - - function childrenPhysics() { - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[i] - if (timeMachine.payload.node === undefined) { - continue - } - - if (timeMachine.container.frame.isInViewPort()) { - thisObject.inViewport.set(timeMachine.payload.node.id, timeMachine) - } else { - thisObject.inViewport.delete(timeMachine.payload.node.id) - } - timeMachine.physics() - } - } - - function drawBackground() { - if (thisObject.visible === false) { return } - drawSpaceBackground() - - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[thisObject.timeMachines.length - i - 1] - timeMachine.drawBackground() - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (thisObject.visible === false) { return } - drawBackground() - - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[thisObject.timeMachines.length - i - 1] - timeMachine.draw() - } - - drawForeground() - } - - function drawForeground() { - for (let i = 0; i < thisObject.timeMachines.length; i++) { - let timeMachine = thisObject.timeMachines[thisObject.timeMachines.length - i - 1] - timeMachine.drawForeground() - } - } - - function drawSpaceBackground() { - let opacity = '1' - let fromPoint = { - x: 0, - y: 0 - } - - let toPoint = { - x: browserCanvas.width, - y: COCKPIT_SPACE_POSITION - } - - browserCanvasContext.beginPath() - browserCanvasContext.rect(fromPoint.x, fromPoint.y, toPoint.x - fromPoint.x, toPoint.y - fromPoint.y) - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')' - browserCanvasContext.closePath() - browserCanvasContext.fill() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/CoordinateSystem.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/CoordinateSystem.js deleted file mode 100644 index 1e5271bd4..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/CoordinateSystem.js +++ /dev/null @@ -1,375 +0,0 @@ -/* - -This Object object is responsible for defining the coordinate system in a TimeLine. - -The scale on the X axis depends on the time. -The scale on the Y axis depends on the data that wants to be plotted. Usually we need the Max amount on that data to generate a proper scale. - -*/ - -function newCoordinateSystem() { - let thisObject = { - min: undefined, - max: undefined, - parentMin: undefined, - parentMax: undefined, - childrenMin: undefined, - childrenMax: undefined, - maxHeight: undefined, - maxWidth: undefined, - scale: undefined, - eventHandler: undefined, - autoMinXScale: true, - autoMaxXScale: true, - autoMinYScale: true, - autoMaxYScale: true, - HORIZONTAL_MARGIN_FACTOR: 1, - VERTICAL_MARGIN_FACTOR: 1, - HORIZONTAL_MARGIN_INVERSE_FACTOR: 0, - VERTICAL_MARGIN_INVERSE_FACTOR: 0, - physics: physics, - reportParentXValue: reportParentXValue, - reportParentYValue: reportParentYValue, - reportXValue: reportXValue, - reportYValue: reportYValue, - zoomX: zoomX, - zoomY: zoomY, - recalculateScale: recalculateScale, - transformThisPoint: transformThisPoint, - transformThisPoint2: transformThisPoint2, - unInverseTransform: unInverseTransform, - inverseTransformUncappedY: inverseTransformUncappedY, - initializeX: initializeX, - initializeY: initializeY, - initialize: initialize, - finalize: finalize - } - - thisObject.min = { - x: 0, - y: 0 - } - thisObject.max = { - x: 0, - y: 0 - } - thisObject.parentMin = { - x: 0, - y: 0 - } - thisObject.parentMax = { - x: 0, - y: 0 - } - thisObject.childrenMin = { - x: 0, - y: 0 - } - thisObject.childrenMax = { - x: 0, - y: 0 - } - - thisObject.scale = { - x: 0, - y: 0 - } - - thisObject.eventHandler = newEventHandler() - thisObject.eventHandler.name = 'Coordinate System' - - let newXMax = -VERY_LARGE_NUMBER - let newXMin = VERY_LARGE_NUMBER - - let newYMax = -VERY_LARGE_NUMBER - let newYMin = VERY_LARGE_NUMBER - - let parentMinChanged = false - let parentMaxChanged = false - - return thisObject - - function finalize() { - thisObject.eventHandler.finalize() - thisObject.eventHandler = undefined - } - - function initialize(minValue, maxValue, maxWidth, maxHeight) { - /* Defines the min and max value of rate that we are going to transport to the available screen at the center position. */ - thisObject.min.x = minValue.x - thisObject.max.x = maxValue.x - - thisObject.min.y = minValue.y - thisObject.max.y = maxValue.y - - thisObject.maxWidth = maxWidth - thisObject.maxHeight = maxHeight - - recalculateScale() - } - - function reportXValue(value) { - if (thisObject.autoMinXScale === true) { - if (value < newXMin && value !== 0) { - newXMin = value - } - } - if (thisObject.autoMaxXScale === true) { - if (value > newXMax && value !== 0) { - newXMax = value - } - } - } - - function reportYValue(value) { - /* We will try to create a margin on the y axis so that in auto mode the charts dont get into the scales */ - const TOP_MARGIN_FACTOR = 1.01 - const BOTTOM_MARGIN_FACTOR = 0.99 - - if (thisObject.autoMinYScale === true) { - if (value * BOTTOM_MARGIN_FACTOR < newYMin) { - newYMin = value * BOTTOM_MARGIN_FACTOR - } - } - if (thisObject.autoMaxYScale === true) { - if (value * TOP_MARGIN_FACTOR> newYMax) { - newYMax = value * TOP_MARGIN_FACTOR - } - } - } - - function reportParentXValue(min, max) { - if (thisObject.autoMinXScale === true) { - if (thisObject.parentMin.x !== min) { - thisObject.parentMin.x = min - } - } - if (thisObject.autoMaxXScale === true) { - if (thisObject.parentMax.x !== max) { - thisObject.parentMax.x = max - } - } - } - - function reportParentYValue(min, max) { - if (thisObject.autoMinYScale === true) { - if (thisObject.parentMin.y !== min) { - thisObject.parentMin.y = min - } - } - if (thisObject.autoMaxYScale === true) { - if (thisObject.parentMax.y !== max) { - thisObject.parentMax.y = max - } - } - } - - function physics() { - let mustRecalculate = false - - if ((thisObject.autoMinXScale === true || thisObject.autoMaxXScale === true)) { - if (thisObject.autoMaxXScale === true && thisObject.childrenMax.x !== newXMax && newXMax !== -VERY_LARGE_NUMBER) { - thisObject.childrenMax.x = newXMax - } - - if (thisObject.autoMaxXScale === true) { - newXMax = -VERY_LARGE_NUMBER - } - - if (thisObject.autoMinXScale === true && thisObject.childrenMin.x !== newXMin && newXMin !== VERY_LARGE_NUMBER) { - thisObject.childrenMin.x = newXMin - newXMin = VERY_LARGE_NUMBER - } - - if (thisObject.autoMinXScale === true) { - newXMin = VERY_LARGE_NUMBER - } - } - - if ((thisObject.autoMinYScale === true || thisObject.autoMaxYScale === true)) { - if (thisObject.autoMaxYScale === true && thisObject.childrenMax.y !== newYMax && newYMax !== -VERY_LARGE_NUMBER) { - thisObject.childrenMax.y = newYMax - } - - if (thisObject.autoMaxYScale === true) { - newYMax = -VERY_LARGE_NUMBER - } - - if (thisObject.autoMinYScale === true && thisObject.childrenMin.y !== newYMin && newYMin !== VERY_LARGE_NUMBER) { - thisObject.childrenMin.y = newYMin - newYMin = VERY_LARGE_NUMBER - } - - if (thisObject.autoMinYScale === true) { - newYMin = VERY_LARGE_NUMBER - } - } - - /* Here we will see if any of the children or parent values modify the current status quo */ - /* Min */ - let minX = Math.min(thisObject.childrenMin.x, thisObject.parentMin.x) - let minY = Math.min(thisObject.childrenMin.y, thisObject.parentMin.y) - let maxX = Math.max(thisObject.childrenMax.x, thisObject.parentMax.x) - let maxY = Math.max(thisObject.childrenMax.y, thisObject.parentMax.y) - - if (thisObject.parentMin.x === 0) { - minX = thisObject.childrenMin.x - } - - if (thisObject.parentMin.y === 0) { - minY = thisObject.childrenMin.y - } - - if (thisObject.parentMax.x === 0) { - maxX = thisObject.childrenMax.x - } - - if (thisObject.parentMax.y === 0) { - maxY = thisObject.childrenMax.y - } - - if (minX !== 0 && thisObject.min.x !== minX && thisObject.autoMinXScale === true) { - thisObject.min.x = minX - mustRecalculate = true - } - - if (minY !== 0 && thisObject.min.y !== minY && thisObject.autoMinYScale === true) { - thisObject.min.y = minY - mustRecalculate = true - } - - if (maxX !== 0 && thisObject.max.x !== maxX && thisObject.autoMaxXScale === true) { - thisObject.max.x = maxX - mustRecalculate = true - } - - if (maxY !== 0 && thisObject.max.y !== maxY && thisObject.autoMaxYScale === true) { - thisObject.max.y = maxY - mustRecalculate = true - } - - if (mustRecalculate === true) { - recalculateScale() - } - } - - function recalculateScale(event) { - thisObject.scale.x = thisObject.maxWidth * thisObject.HORIZONTAL_MARGIN_FACTOR / (thisObject.max.x - thisObject.min.x) - thisObject.scale.y = thisObject.maxHeight * thisObject.VERTICAL_MARGIN_FACTOR / (thisObject.max.y - thisObject.min.y) - - thisObject.eventHandler.raiseEvent('Scale Changed', event) - } - - function zoomX(factor, mousePosition, container) { - let mouseAtCointainer = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(mousePosition, container) - let leftDistance = mouseAtCointainer.x - let rightDistance = container.frame.width - mouseAtCointainer.x - let diff = thisObject.max.x - thisObject.min.x - let min = thisObject.min.x + diff * factor * leftDistance / (container.frame.width / 2) - let max = thisObject.max.x - diff * factor * rightDistance / (container.frame.width / 2) - - if (min < max) { - let mustRecalculate = false - if (thisObject.autoMinXScale === false) { - thisObject.min.x = min - mustRecalculate = true - } - if (thisObject.autoMaxXScale === false) { - thisObject.max.x = max - mustRecalculate = true - } - if (mustRecalculate === true) { - thisObject.recalculateScale() - } - } - } - - function zoomY(factor, mousePosition, container) { - let mouseAtCointainer = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(mousePosition, container) - let topDistance = mouseAtCointainer.y - let bottomDistance = container.frame.height - mouseAtCointainer.y - let diff = thisObject.max.y - thisObject.min.y - let min = thisObject.min.y + diff * factor * bottomDistance / (container.frame.height / 2) - let max = thisObject.max.y - diff * factor * topDistance / (container.frame.height / 2) - - if (min < max) { - let mustRecalculate = false - if (thisObject.autoMinYScale === false) { - thisObject.min.y = min - mustRecalculate = true - } - if (thisObject.autoMaxYScale === false) { - thisObject.max.y = max - mustRecalculate = true - } - if (mustRecalculate === true) { - thisObject.recalculateScale() - } - } - } - - function initializeX(minValue, maxValue, maxWidth) { - thisObject.min.x = minValue.x // * 0.999; // 0.1% less - thisObject.max.x = maxValue.x // * 1.001; // 0.1% more - - thisObject.scale.x = thisObject.maxWidth / (thisObject.max.x - thisObject.min.x) - } - - function initializeY(minValue, maxValue, pMaxHeight) { - thisObject.min.y = minValue.y // * 0.999; // 0.1% less - thisObject.max.y = maxValue.y // * 1.001; // 0.1% more - - thisObject.scale.y = pMaxHeight / (thisObject.max.y - thisObject.min.y) - - thisObject.maxHeight = pMaxHeight - } - - function transformThisPoint(point) { - /* - - This is the straigh fordward transformation this object provides. The input is a point on the data set that wants to be plotted in a timeline. - The x value of the point must be a datetime.valueOf() and is going to be transformed into an x value on the coordinate system of the timeline. - The y value should be a value in the dataset at that moment in time. Depending on how this coordinate system was initialized then are the - possible values y can have. For sure it must be in the range between the min and max y declared at initialization. The y value has a special - treatment since the browser canvas object used, has a zero y value at the top, while the timeline we use has a zero y value at the botton, - for that reason y is flipped. - - Besides this, what we do is to multiply by the scale, which in turn is calculated at initialization time depending on the values provided. - - */ - - point = { - x: (point.x - thisObject.min.x) * thisObject.scale.x + thisObject.maxWidth * thisObject.HORIZONTAL_MARGIN_INVERSE_FACTOR / 2, - y: thisObject.maxHeight - (point.y - thisObject.min.y) * thisObject.scale.y - thisObject.maxHeight * thisObject.VERTICAL_MARGIN_INVERSE_FACTOR / 2 - } - - return point - } - - function transformThisPoint2(point) { - point = { - x: (point.x - thisObject.min.x) * thisObject.scale.x + thisObject.maxWidth * thisObject.HORIZONTAL_MARGIN_INVERSE_FACTOR / 2, - y: (thisObject.maxHeight - point.y - thisObject.min.y) * thisObject.scale.y - thisObject.maxHeight * thisObject.VERTICAL_MARGIN_INVERSE_FACTOR / 2 - } - - return point - } - - function unInverseTransform(point, inverseY) { - point = { - x: ((point.x - thisObject.maxWidth * thisObject.HORIZONTAL_MARGIN_INVERSE_FACTOR / 2) / thisObject.scale.x) + thisObject.min.x, - y: (inverseY * thisObject.VERTICAL_MARGIN_FACTOR - point.y + thisObject.maxHeight * thisObject.VERTICAL_MARGIN_INVERSE_FACTOR / 2) / thisObject.scale.y + thisObject.min.y - } - - return point - } - - function inverseTransformUncappedY(point, inverseY) { - point = { - x: (point.x - thisObject.min.x) * thisObject.scale.x + thisObject.maxWidth * thisObject.HORIZONTAL_MARGIN_INVERSE_FACTOR / 2, - y: (inverseY * thisObject.VERTICAL_MARGIN_FACTOR - point.y) * thisObject.scale.y - thisObject.maxHeight * thisObject.VERTICAL_MARGIN_INVERSE_FACTOR / 2 - } - - return point - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/EdgeEditor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/EdgeEditor.js deleted file mode 100644 index 4324f5933..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/EdgeEditor.js +++ /dev/null @@ -1,729 +0,0 @@ -function newEdgeEditor() { - const MODULE_NAME = 'Edge Editor' - - let thisObject = { - container: undefined, - fitFunction: undefined, - isVisible: true, - isMouseOver: undefined, - resetAspectRatio: resetAspectRatio, - onKeyPressed: onKeyPressed, - physics: physics, - drawForeground: drawForeground, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - const EDGE_SIZE = 6 - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = true - thisObject.container.isClickeable = false - thisObject.container.isWheelable = false - thisObject.container.detectMouseOver = true - - let whatHappened - let whereIsMouseOver = 'outside' - - let coordinateSystem - let coordinateSystemWhenDragStarted - - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - let onDragStartedEventSubscriptionId - - let mouse = { - position: { - x: 0, - y: 0 - } - } - - mouseWhenDragStarted = { - position: { - x: 0, - y: 0 - } - } - - parentFrameWhenDragStarted = { - position: { - x: 0, - y: 0 - }, - width: 0, - height: 0 - } - - let doubleClickCounter = 0 - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onDragStartedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - mouse = undefined - mouseWhenDragStarted = undefined - parentFrameWhenDragStarted = undefined - - coordinateSystem = undefined - - if (coordinateSystemWhenDragStarted !== undefined) { - coordinateSystemWhenDragStarted.finalize() - } - - coordinateSystemWhenDragStarted = undefined - } - - function initialize(pCoordinateSystem) { - coordinateSystem = pCoordinateSystem - - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - onDragStartedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDragStarted', onDragStarted) - } - - function onMouseOver(event) { - thisObject.isMouseOver = true - mouse = { - position: { - x: event.x, - y: event.y - } - } - } - - function onMouseNotOver() { - thisObject.isMouseOver = false - } - - function resetAspectRatio() { - /* Resize the Time Machine to match the current screen aspect ration */ - - thisObject.container.parentContainer.frame.width = browserCanvas.width / TIME_MACHINE_WIDTH - thisObject.container.parentContainer.frame.height = (COCKPIT_SPACE_POSITION - TOP_SPACE_HEIGHT) / TIME_MACHINE_HEIGHT - coordinateSystem.maxHeight = thisObject.container.parentContainer.frame.height - coordinateSystem.maxWidth = thisObject.container.parentContainer.frame.width - coordinateSystem.recalculateScale() - thisObject.container.parentContainer.eventHandler.raiseEvent('Dimmensions Changed', event) - } - - function onDoubleClick(event) { - doubleClickCounter = 0 - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomLevel === UI.projects.superalgos.globals.zoom.DOUBLE_CLICK_ZOOM_OUT_LEVEL) { - UI.projects.superalgos.spaces.chartingSpace.viewport.displaceToContainer(thisObject.container.parentContainer) - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomAtCenter(UI.projects.superalgos.globals.zoom.DOUBLE_CLICK_ZOOM_IN_LEVEL) - return - } - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomLevel === UI.projects.superalgos.globals.zoom.DOUBLE_CLICK_ZOOM_IN_LEVEL) { - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomAtCenter(UI.projects.superalgos.globals.zoom.DOUBLE_CLICK_ZOOM_IN_IN_LEVEL) - return - } - } - - function onDragStarted(event) { - if (event.buttons === 1) { - if (doubleClickCounter > 0) { - onDoubleClick(event) - return - } else { - doubleClickCounter = 50 - } - } - - mouseWhenDragStarted = { - position: { - x: event.x, - y: event.y - } - } - - parentFrameWhenDragStarted = { - position: { - x: thisObject.container.parentContainer.frame.position.x, - y: thisObject.container.parentContainer.frame.position.y - }, - width: thisObject.container.parentContainer.frame.width, - height: thisObject.container.parentContainer.frame.height - } - - coordinateSystemWhenDragStarted = newCoordinateSystem() - - let minValue = { - x: coordinateSystem.min.x, - y: coordinateSystem.min.y - } - - let maxValue = { - x: coordinateSystem.max.x, - y: coordinateSystem.max.y - } - - coordinateSystemWhenDragStarted.initialize(minValue, maxValue, coordinateSystem.maxWidth, coordinateSystem.maxHeight) - - switch (event.buttons) { - case 1: { - whatHappened = 'left mouse button' - if (event.shiftKey === true) { - whatHappened = 'left mouse button + SHIFT' - } - break - } - case 2: { - whatHappened = 'right mouse button' // this will never happen as of today - break - } - } - } - - function onKeyPressed(event, forceExecution) { - if (forceExecution !== true) { - if (whereIsMouseOver !== 'center' ) {return} - } - - const STEP = 10 - - if (event.shiftKey === false && event.ctrlKey === false && event.code === 'ArrowLeft') { - onDragStarted(event) - thisObject.container.frame.position.x = thisObject.container.frame.position.x + STEP - whatHappened = 'left or right arrow key pressed' - return - } - - if (event.shiftKey === false && event.ctrlKey === false && event.code === 'ArrowRight') { - if (ARE_WE_RECORDING_A_MARKET_PANORAMA === true) { - if (PANORAMA_WAS_PANNED === false) { - PANORAMA_WAS_PANNED = true - onDragStarted(event) - thisObject.container.frame.position.x = thisObject.container.frame.position.x - STEP * 2 - whatHappened = 'left or right arrow key pressed' - } - } else { - onDragStarted(event) - thisObject.container.frame.position.x = thisObject.container.frame.position.x - STEP - whatHappened = 'left or right arrow key pressed' - } - return - } - - if (event.shiftKey === false && event.ctrlKey === false && event.code === 'ArrowUp') { - onDragStarted(event) - thisObject.container.frame.position.y = thisObject.container.frame.position.y + STEP - whatHappened = 'up or down arrow key pressed' - return - } - - if (event.shiftKey === false && event.ctrlKey === false && event.code === 'ArrowDown') { - onDragStarted(event) - thisObject.container.frame.position.y = thisObject.container.frame.position.y - STEP - whatHappened = 'up or down arrow key pressed' - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && (event.key === 'A' || event.key === 'a')) { - resetAspectRatio() - return - } - } - - function getContainer(event, purpose) { - if (thisObject.container.frame.isThisPointHere(event, undefined, undefined, -EDGE_SIZE) === true && event.buttons !== 2) { - let point = { - x: event.x, - y: event.y - } - point = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(point, thisObject.container) - - if (point.x <= 0) { - whereIsMouseOver = 'left' - return thisObject.container - } - - if (point.x >= thisObject.container.frame.width) { - whereIsMouseOver = 'right' - return thisObject.container - } - - if (point.y <= 0) { - whereIsMouseOver = 'top' - return thisObject.container - } - - if (point.y >= thisObject.container.frame.height) { - whereIsMouseOver = 'bottom' - return thisObject.container - } - - whereIsMouseOver = 'center' - switch (purpose) { - case GET_CONTAINER_PURPOSE.MOUSE_OVER: - return // We will let the Time Machine to handle this situation. - break - case GET_CONTAINER_PURPOSE.DRAGGING: - return thisObject.container - break - } - } - } - - function physics() { - draggingPhysics() - doubleClickPhysics() - } - - function doubleClickPhysics() { - doubleClickCounter-- - if (doubleClickCounter < 0) { - doubleClickCounter = 0 - } - } - - function draggingPhysics() { - if (coordinateSystemWhenDragStarted === undefined) { return } - if (thisObject.container.frame.position.x === 0 && thisObject.container.frame.position.y === 0) { return } - - let mouseNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(mouse.position) - let mouseWhenDragStartedNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(mouseWhenDragStarted.position) - - let dragVectorWhenDragStarted = { - x: mouseNoZoom.x - mouseWhenDragStartedNoZoom.x, - y: mouseNoZoom.y - mouseWhenDragStartedNoZoom.y - } - - let dragVector = { - x: thisObject.container.frame.position.x, - y: thisObject.container.frame.position.y - } - - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - const MIN_WIDTH = 200 - const MIN_HEIGHT = 100 - - switch (whereIsMouseOver) { - case 'center': { - switch (whatHappened) { - case 'left mouse button + SHIFT': { - /* This is equivalent to drag the whole Time Machine, so we will apply the translation received onto the Time Machine container. */ - thisObject.container.parentContainer.frame.position.x = parentFrameWhenDragStarted.position.x + dragVectorWhenDragStarted.x - thisObject.container.parentContainer.frame.position.y = parentFrameWhenDragStarted.position.y + dragVectorWhenDragStarted.y - snapPointToGrid(thisObject.container.parentContainer.frame.position) - thisObject.container.parentContainer.eventHandler.raiseEvent('onDisplace') - break - } - case 'left mouse button': { - let point = { - x: (-dragVectorWhenDragStarted.x), - y: (-dragVectorWhenDragStarted.y) - } - - let newMinDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtContainer(point, thisObject.container.parentContainer, coordinateSystemWhenDragStarted) - let newMaxRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, thisObject.container.parentContainer, coordinateSystemWhenDragStarted) - - let xDifferenceMaxMin = coordinateSystemWhenDragStarted.max.x - coordinateSystemWhenDragStarted.min.x - let yDifferenceMaxMin = coordinateSystemWhenDragStarted.max.y - coordinateSystemWhenDragStarted.min.y - coordinateSystem.min.x = newMinDate.valueOf() - coordinateSystem.max.x = newMinDate.valueOf() + xDifferenceMaxMin - coordinateSystem.min.y = newMaxRate - yDifferenceMaxMin - coordinateSystem.max.y = newMaxRate - let event = { - type: 'center dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale(event) - } - break - case 'left or right arrow key pressed': { - let point = { - x: -dragVector.x + thisObject.container.frame.width * coordinateSystem.HORIZONTAL_MARGIN_INVERSE_FACTOR / 2, - y: 0 - } - - let newMinDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtContainer(point, thisObject.container.parentContainer, coordinateSystem) - let xDifferenceMaxMin = coordinateSystem.max.x - coordinateSystem.min.x - coordinateSystem.min.x = newMinDate.valueOf() - coordinateSystem.max.x = newMinDate.valueOf() + xDifferenceMaxMin - let event = { - type: 'center dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale(event) - } - break - case 'up or down arrow key pressed': { - let point = { - x: 0, - y: -dragVector.y + thisObject.container.frame.height * coordinateSystem.VERTICAL_MARGIN_INVERSE_FACTOR / 2 - } - - let newMaxRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, thisObject.container.parentContainer, coordinateSystem) - let yDifferenceMaxMin = coordinateSystem.max.y - coordinateSystem.min.y - coordinateSystem.min.y = newMaxRate - yDifferenceMaxMin - coordinateSystem.max.y = newMaxRate - let event = { - type: 'center dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale(event) - } - break - } - thisObject.container.parentContainer.eventHandler.raiseEvent('onMouseOver', mouse.position) - break - } - case 'top': { - dragVectorWhenDragStarted.x = 0 - - let newHight = parentFrameWhenDragStarted.height - dragVectorWhenDragStarted.y - if (newHight < MIN_HEIGHT && dragVectorWhenDragStarted.y > 0) { - dragVectorWhenDragStarted.y = parentFrameWhenDragStarted.height - MIN_HEIGHT - } - - thisObject.container.parentContainer.frame.position.y = parentFrameWhenDragStarted.position.y + dragVectorWhenDragStarted.y - snapPointToGrid(thisObject.container.parentContainer.frame.position) - thisObject.container.parentContainer.frame.height = parentFrameWhenDragStarted.height + (parentFrameWhenDragStarted.position.y - thisObject.container.parentContainer.frame.position.y) - - let point = { - x: 0, - y: (thisObject.container.parentContainer.frame.position.y - parentFrameWhenDragStarted.position.y) - } - - /* This is equivalent to UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer, but as we do not have a container anymore because we already change it, we do it like this. */ - point = coordinateSystemWhenDragStarted.unInverseTransform(point, parentFrameWhenDragStarted.height) - let newMaxRate = point.y - - switch (whatHappened) { - case 'left mouse button': { - coordinateSystem.max.y = newMaxRate - coordinateSystem.maxHeight = thisObject.container.parentContainer.frame.height - let event = { - type: 'top dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale(event) - break - } - case 'left mouse button + SHIFT': { - coordinateSystem.maxHeight = thisObject.container.parentContainer.frame.height - coordinateSystem.recalculateScale() - break - } - } - thisObject.container.parentContainer.eventHandler.raiseEvent('Dimmensions Changed', event) - break - } - case 'bottom': { - dragVectorWhenDragStarted.x = 0 - - let newHight = dragVectorWhenDragStarted.y + parentFrameWhenDragStarted.height - if (newHight < MIN_HEIGHT && dragVectorWhenDragStarted.y < 0) { - dragVectorWhenDragStarted.y = MIN_HEIGHT - parentFrameWhenDragStarted.height - } - - let point = { - x: 0, - y: dragVectorWhenDragStarted.y + parentFrameWhenDragStarted.height + parentFrameWhenDragStarted.position.y - } - snapPointToGrid(point) - point.y = point.y - parentFrameWhenDragStarted.position.y - - thisObject.container.parentContainer.frame.height = point.y - - /* This is equivalent to UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer, but as we do not have a container anymore because we already change it, we do it like this. */ - point = coordinateSystemWhenDragStarted.unInverseTransform(point, parentFrameWhenDragStarted.height) - let newMinRate = point.y - - switch (whatHappened) { - case 'left mouse button': { - coordinateSystem.min.y = newMinRate - coordinateSystem.maxHeight = thisObject.container.parentContainer.frame.height - let event = { - type: 'bottom dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale(event) - break - } - case 'left mouse button + SHIFT': { - coordinateSystem.maxHeight = thisObject.container.parentContainer.frame.height - coordinateSystem.recalculateScale() - break - } - } - thisObject.container.parentContainer.eventHandler.raiseEvent('Dimmensions Changed', event) - break - } - case 'left': { - dragVectorWhenDragStarted.y = 0 - - let newWidth = parentFrameWhenDragStarted.width - dragVectorWhenDragStarted.x - if (newWidth < MIN_WIDTH && dragVectorWhenDragStarted.x > 0) { - dragVectorWhenDragStarted.x = parentFrameWhenDragStarted.width - MIN_WIDTH - } - - thisObject.container.parentContainer.frame.position.x = parentFrameWhenDragStarted.position.x + dragVectorWhenDragStarted.x - snapPointToGrid(thisObject.container.parentContainer.frame.position) - thisObject.container.parentContainer.frame.width = parentFrameWhenDragStarted.width + (parentFrameWhenDragStarted.position.x - thisObject.container.parentContainer.frame.position.x) - - let point = { - x: (thisObject.container.parentContainer.frame.position.x - parentFrameWhenDragStarted.position.x), - y: 0 - } - - /* This is equivalent to UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtContainer, but as we do not have a container anymore because we already change it, we do it like this. */ - point = coordinateSystemWhenDragStarted.unInverseTransform(point, parentFrameWhenDragStarted.width) - let newMinDate = point.x - - switch (whatHappened) { - case 'left mouse button': { - coordinateSystem.min.x = newMinDate.valueOf() - coordinateSystem.maxWidth = thisObject.container.parentContainer.frame.width - coordinateSystem.recalculateScale() - break - } - case 'left mouse button + SHIFT': { - coordinateSystem.maxWidth = thisObject.container.parentContainer.frame.width - coordinateSystem.recalculateScale() - break - } - } - thisObject.container.parentContainer.eventHandler.raiseEvent('Dimmensions Changed', event) - break - } - case 'right': { - dragVectorWhenDragStarted.y = 0 - - let newWidth = dragVectorWhenDragStarted.x + parentFrameWhenDragStarted.width - if (newWidth < MIN_WIDTH && dragVectorWhenDragStarted.x < 0) { - dragVectorWhenDragStarted.x = MIN_WIDTH - parentFrameWhenDragStarted.width - } - - let point = { - x: dragVectorWhenDragStarted.x + parentFrameWhenDragStarted.width + parentFrameWhenDragStarted.position.x, - y: 0 - } - snapPointToGrid(point) - point.x = point.x - parentFrameWhenDragStarted.position.x - - thisObject.container.parentContainer.frame.width = point.x - - /* This is equivalent to UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer, but as we do not have a container anymore because we already change it, we do it like this. */ - point = coordinateSystemWhenDragStarted.unInverseTransform(point, parentFrameWhenDragStarted.width) - let newMaxDate = point.x - - switch (whatHappened) { - case 'left mouse button': { - coordinateSystem.max.x = newMaxDate.valueOf() - coordinateSystem.maxWidth = thisObject.container.parentContainer.frame.width - coordinateSystem.recalculateScale() - break - } - case 'left mouse button + SHIFT': { - coordinateSystem.maxWidth = thisObject.container.parentContainer.frame.width - coordinateSystem.recalculateScale() - break - } - } - thisObject.container.parentContainer.eventHandler.raiseEvent('Dimmensions Changed', event) - break - } - } - - function snapPointToGrid(point) { - point.x = snapScalarToGrid(point.x) - point.y = snapScalarToGrid(point.y) - } - - function snapScalarToGrid(scalar) { - let sign - if (scalar < 0) { - sign = -1 - } else { - sign = 1 - } - const GRID_SIZE = 10 - return Math.trunc(scalar / GRID_SIZE) * GRID_SIZE + GRID_SIZE / 2 * sign - } - } - - function drawForeground() { - let MARGIN = 1 - let edgeSize - let lineWidth - - if (whereIsMouseOver === 'outside' || thisObject.isMouseOver === false) { - edgeSize = 2 - lineWidth = 0.1 - } else { - edgeSize = EDGE_SIZE - lineWidth = 0.5 - } - - const OPACITY = 1 - - pointA1 = { - x: 0, - y: 0 - } - - pointA2 = { - x: thisObject.container.frame.width, - y: 0 - } - - pointA3 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - pointA4 = { - x: 0, - y: thisObject.container.frame.height - } - - pointB1 = { - x: 0, - y: 0 - } - - pointB2 = { - x: thisObject.container.frame.width, - y: 0 - } - - pointB3 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - pointB4 = { - x: 0, - y: thisObject.container.frame.height - } - - pointA1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointA1, thisObject.container) - pointA2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointA2, thisObject.container) - pointA3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointA3, thisObject.container) - pointA4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointA4, thisObject.container) - - pointB1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointB1, thisObject.container) - pointB2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointB2, thisObject.container) - pointB3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointB3, thisObject.container) - pointB4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pointB4, thisObject.container) - - pointA1 = { - x: pointA1.x - MARGIN, - y: pointA1.y - MARGIN - } - - pointA2 = { - x: pointA2.x + MARGIN, - y: pointA2.y - MARGIN - } - - pointA3 = { - x: pointA3.x + MARGIN, - y: pointA3.y + MARGIN - } - - pointA4 = { - x: pointA4.x - MARGIN, - y: pointA4.y + MARGIN - } - - pointB1 = { - x: pointB1.x - edgeSize, - y: pointB1.y - edgeSize - } - - pointB2 = { - x: pointB2.x + edgeSize, - y: pointB2.y - edgeSize - } - - pointB3 = { - x: pointB3.x + edgeSize, - y: pointB3.y + edgeSize - } - - pointB4 = { - x: pointB4.x - edgeSize, - y: pointB4.y + edgeSize - } - - pointA1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointA1) - pointA2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointA2) - pointA3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointA3) - pointA4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointA4) - - pointB1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointB1) - pointB2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointB2) - pointB3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointB3) - pointB4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoViewport(pointB4) - - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(pointA1.x, pointA1.y) - browserCanvasContext.lineTo(pointA2.x, pointA2.y) - browserCanvasContext.lineTo(pointB2.x, pointB2.y) - browserCanvasContext.lineTo(pointB1.x, pointB1.y) - browserCanvasContext.lineTo(pointA1.x, pointA1.y) - browserCanvasContext.closePath() - - drawEdge('top') - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(pointA2.x, pointA2.y) - browserCanvasContext.lineTo(pointA3.x, pointA3.y) - browserCanvasContext.lineTo(pointB3.x, pointB3.y) - browserCanvasContext.lineTo(pointB2.x, pointB2.y) - browserCanvasContext.lineTo(pointA2.x, pointA2.y) - browserCanvasContext.closePath() - - drawEdge('right') - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(pointA3.x, pointA3.y) - browserCanvasContext.lineTo(pointA4.x, pointA4.y) - browserCanvasContext.lineTo(pointB4.x, pointB4.y) - browserCanvasContext.lineTo(pointB3.x, pointB3.y) - browserCanvasContext.lineTo(pointA3.x, pointA3.y) - browserCanvasContext.closePath() - - drawEdge('bottom') - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(pointA4.x, pointA4.y) - browserCanvasContext.lineTo(pointA1.x, pointA1.y) - browserCanvasContext.lineTo(pointB1.x, pointB1.y) - browserCanvasContext.lineTo(pointB4.x, pointB4.y) - browserCanvasContext.lineTo(pointA4.x, pointA4.y) - browserCanvasContext.closePath() - - drawEdge('left') - - function drawEdge(edgeType) { - if (whereIsMouseOver === edgeType && thisObject.isMouseOver === true) { - browserCanvasContext.lineWidth = lineWidth - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')' - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - } else { - browserCanvasContext.lineWidth = lineWidth - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')' - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - } - browserCanvasContext.fill() - browserCanvasContext.stroke() - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js deleted file mode 100644 index 6f86fe4e1..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/PlottersManager.js +++ /dev/null @@ -1,503 +0,0 @@ -function newPlottersManager() { - const MODULE_NAME = 'Plotters Manager' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let timeFrame = INITIAL_TIME_PERIOD - let datetime = NEW_SESSION_INITIAL_DATE - - let thisObject = { - fitFunction: undefined, - container: undefined, - payload: undefined, - connectors: [], - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - setCoordinateSystem: setCoordinateSystem, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.connectors = [] - - let initializationReady = false - let layersPanel - let onLayerStatusChangedEventSuscriptionId - let coordinateSystem - - setupContainer() - return thisObject - - function setupContainer() { - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - } - - function finalize() { - layersPanel.container.eventHandler.stopListening(onLayerStatusChangedEventSuscriptionId) - layersPanel = undefined - - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - /* Then the panels. */ - for (let j = 0; j < connector.panels.length; j++) { - UI.projects.superalgos.spaces.panelSpace.destroyPanel(connector.panels[j]) - connector.panels[j] = undefined - } - connector.panels = undefined - - /* Finalize the plotters */ - if (connector.plotter.finalize !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.plotter.onRecordChangeEventsSubscriptionId) - connector.plotter.finalize() - } - connector.plotter = undefined - - /* Finally the Storage Objects */ - finalizeStorage(connector.storage) - connector.storage = undefined - - connector = undefined - } - thisObject.connectors = [] - coordinateSystem = undefined - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - } - - function finalizeStorage(storage) { - storage.eventHandler.stopListening(storage.onMarketFileLoadedLayerEventsSubscriptionId) - storage.eventHandler.stopListening(storage.onDailyFileLoadedLayerEventsSubscriptionId) - storage.eventHandler.stopListening(storage.onSingleFileLoadedLayerEventsSubscriptionId) - storage.eventHandler.stopListening(storage.onFileSequenceLoadedLayerEventsSubscriptionId) - storage.eventHandler.stopListening(storage.onDailyFileLoadedPlotterEventsSubscriptionId) - storage.finalize() - } - - function initialize(pLayersPanel) { - /* Remember this */ - layersPanel = pLayersPanel - - /* Listen to the event of change of status */ - onLayerStatusChangedEventSuscriptionId = layersPanel.container.eventHandler.listenToEvent('Layer Status Changed', onLayerStatusChanged) - } - - function initializePlotter(layer) { - try { - /* Before Initializing a Plotter, we need the Storage it will use, loaded with the files it will initially need. */ - let storage = newProductStorage(layer.payload.node.id) - - /* - Before Initializing the Storage, we will put the Layer to listen to the events the storage will raise every time a file is loaded, - so that the UI can somehow show this. There are different types of events. - */ - for (let i = 0; i < layer.definition.referenceParent.referenceParent.datasets.length; i++) { - let dataset = layer.definition.referenceParent.referenceParent.datasets[i] - - switch (dataset.config.type) { - case 'Market Files': { - storage.onMarketFileLoadedLayerEventsSubscriptionId = storage.eventHandler.listenToEvent('Market File Loaded', layer.onMarketFileLoaded) - } - break - case 'Daily Files': { - storage.onDailyFileLoadedLayerEventsSubscriptionId = storage.eventHandler.listenToEvent('Daily File Loaded', layer.onDailyFileLoaded) - } - break - case 'Single File': { - storage.onSingleFileLoadedLayerEventsSubscriptionId = storage.eventHandler.listenToEvent('Single File Loaded', layer.onSingleFileLoaded) - } - break - case 'File Sequence': { - storage.onFileSequenceLoadedLayerEventsSubscriptionId = storage.eventHandler.listenToEvent('File Sequence Loaded', layer.onFileSequenceLoaded) - } - break - default: { - if (ERROR_LOG === true) { - logger.write('[ERROR] initializePlotter -> Dataset Type Incorrect or Undefined -> dataset.type = ' + dataset.type) - } - return - } - } - } - - let baseAsset = layer.baseAsset.config.codeName - let quotedAsset = layer.quotedAsset.config.codeName - let market = { - baseAsset: baseAsset, - quotedAsset: quotedAsset - } - let productDefinition = layer.productDefinition - let bot = layer.bot - let mine = layer.mine - let exchange = layer.exchange - let plotterModule = layer.plotterModule - let session - let tradingSystem - let tradingEngine - - /* - A layer can be referencing a Data Product in 3 different branches of the Network hiriatchy. - Two of those branches have sessions. - */ - let sessionReference = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Trading Session Reference', undefined, false, true, true, true) - if (sessionReference === undefined) { - sessionReference = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(layer.definition, 'Learning Session Reference', undefined, false, true, true, true) - } - - if (sessionReference !== undefined) { - session = sessionReference.referenceParent - if (session === undefined) { - logger.write('[ERROR] initializePlotter -> Session Reference without a Reference Parent -> Plotter will not be loaded. ') - return - } - /* From the session we might be able to reach the Trading System or the Trading Engine */ - if (session.tradingSystemReference !== undefined) { - tradingSystem = session.tradingSystemReference.referenceParent - } - if (session.tradingEngineReference !== undefined) { - tradingEngine = session.tradingEngineReference.referenceParent - } - } - - let host = layer.networkNode.config.host - let webPort = layer.networkNode.config.webPort - if (host === undefined) { host = window.location.hostname } - if (webPort === undefined) { webPort = window.location.port } - - let eventsServerClient = UI.projects.superalgos.spaces.designSpace.workspace.eventsServerClients.get(layer.networkNode.id) - - storage.initialize( - mine, - bot, - session, - productDefinition, - exchange, - market, - datetime, - timeFrame, - host, - webPort, - eventsServerClient, - onProductStorageInitialized - ) - - function onProductStorageInitialized(err) { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - /* Now we have all the initial data loaded and ready to be delivered to the new instance of the plotter. */ - let plotter - - if (plotterModule.config.isLegacy !== true) { - plotter = newPlotter() - } else { - plotter = getNewPlotter(mine.config.codeName, plotterModule.parentNode.config.codeName, plotterModule.config.codeName) - } - - plotter.container.connectToParent(thisObject.container, true, true, false, true, true, true, false, false, true) - plotter.container.frame.position.x = thisObject.container.frame.width / 2 - plotter.container.frame.width / 2 - plotter.container.frame.position.y = thisObject.container.frame.height / 2 - plotter.container.frame.height / 2 - plotter.fitFunction = thisObject.fitFunction - plotter.initialize(storage, datetime, timeFrame, coordinateSystem, onPlotterInizialized, productDefinition) - - function onPlotterInizialized() { - let connector = { - layer: layer, - plotter: plotter, - storage: storage - } - /* Let the Plotter listen to the event of Cursor Files loaded, so that it can react recalculating if needed. */ - plotter.onDailyFileLoadedPlotterEventsSubscriptionId = storage.eventHandler.listenToEvent('Daily File Loaded', plotter.onDailyFileLoaded) - /* Lets load now this plotter panels. */ - connector.panels = [] - - if (productDefinition !== undefined) { - /* Here we setup the panels associated with this plotter */ - for (let i = 0; i < plotterModule.panels.length; i++) { - let panel = plotterModule.panels[i] - - let parameters = { - mine: mine.config.codeName, - plotterCodeName: plotterModule.parentNode.config.codeName, - moduleCodeName: plotterModule.config.codeName, - panelNode: panel - } - - let owner = thisObject.payload.node.payload.parentNode.id // Panels are owned by the time machine. - let plotterPanelHandle = UI.projects.superalgos.spaces.panelSpace.createNewPanel('Plotter Panel', parameters, owner, layer.session) - let plotterPanel = UI.projects.superalgos.spaces.panelSpace.getPanel(plotterPanelHandle) - - /* Connect Panel to the Plotter via an Event. */ - connector.plotter.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', plotterPanel.onRecordChange) - connector.panels.push(plotterPanelHandle) - } - connector.layer.panels = connector.panels - - /* - Next we will check the different types of Plotting related to connecting to an existing node branch. - */ - if (plotterModule.nodesHighlights !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesHighlights = newNodesHighlights() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesHighlights.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesHighlights.initialize(tradingEngine) - break - } - connector.nodesHighlights.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesHighlights.onRecordChange) - } - if (plotterModule.nodesValues !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesValues = newNodesValues() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesValues.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesValues.initialize(tradingEngine) - break - } - connector.nodesValues.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesValues.onRecordChange) - } - if (plotterModule.nodesErrors !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesErrors = newNodesErrors() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesErrors.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesErrors.initialize(tradingEngine) - break - } - connector.nodesErrors.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesErrors.onRecordChange) - } - if (plotterModule.nodesWarnings !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesWarnings = newNodesWarnings() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesWarnings.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesWarnings.initialize(tradingEngine) - break - } - connector.nodesWarnings.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesWarnings.onRecordChange) - } - if (plotterModule.nodesInfos !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesInfos = newNodesInfos() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesInfos.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesInfos.initialize(tradingEngine) - break - } - connector.nodesInfos.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesInfos.onRecordChange) - } - if (plotterModule.nodesRunning !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesRunning = newNodesRunning() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesRunning.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesRunning.initialize(tradingEngine) - break - } - connector.nodesRunning.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesRunning.onRecordChange) - } - if (plotterModule.nodesStatus !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesStatus = newNodesStatus() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesStatus.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesStatus.initialize(tradingEngine) - break - } - connector.nodesStatus.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesStatus.onRecordChange) - } - if (plotterModule.nodesProgress !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesProgress = newNodesProgress() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesProgress.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesProgress.initialize(tradingEngine) - break - } - connector.nodesProgress.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesProgress.onRecordChange) - } - if (plotterModule.nodesAnnouncements !== undefined && plotterModule.config.connectTo !== undefined) { - connector.nodesAnnounements = newNodesAnnouncements() - switch (plotterModule.config.connectTo) { - case 'Trading System': - connector.nodesAnnounements.initialize(tradingSystem) - break - case 'Trading Engine': - connector.nodesAnnounements.initialize(tradingEngine) - break - } - connector.nodesAnnounements.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.nodesAnnounements.onRecordChange) - } - /* - Another type of plotting is with Record Values. This method uses the record definition to find the target node - and from there is looks into its children all based on the Record Definition configuration. - */ - if (plotterModule.recordValues !== undefined) { - connector.recordValues = newRecordValues() - connector.recordValues.initialize(tradingSystem, tradingEngine, productDefinition) - connector.recordValues.onRecordChangeEventsSubscriptionId = connector.plotter.container.eventHandler.listenToEvent('Current Record Changed', connector.recordValues.onRecordChange) - } - } - thisObject.connectors.push(connector) - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initializePlotter -> err = ' + err.stack) } - } - } - - function onLayerStatusChanged(layer) { - if (layer.status === LAYER_STATUS.LOADING) { - /* Lets see if we can find the Plotter of this card on our Active Plotters list, other wise we will initialize it */ - let found = false - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - if (connector.layer.payload.node.id === layer.payload.node.id) { - found = true - } - } - if (found === false) { - initializePlotter(layer) - } - } - if (layer.status === LAYER_STATUS.OFF) { - /* If the plotter of this card is not on our Active Plotters list, then we remove it. */ - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - if (connector.layer.payload.node.id === layer.payload.node.id) { - /* Then the panels. */ - for (let j = 0; j < connector.panels.length; j++) { - UI.projects.superalgos.spaces.panelSpace.destroyPanel(connector.panels[j]) - } - /* Finally the Storage Objects */ - finalizeNodesPlotting(connector) - if (connector.plotter.finalize !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.plotter.onRecordChangeEventsSubscriptionId) - connector.plotter.container.finalize() - connector.plotter.finalize() - } - finalizeStorage(connector.storage) - thisObject.connectors.splice(i, 1) // Delete item from array. - return // We already found the product woth changes and processed it. - } - } - } - } - - function finalizeNodesPlotting(connector) { - if (connector.nodesHighlights !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesHighlights.onRecordChangeEventsSubscriptionId) - connector.nodesHighlights.finalize() - } - if (connector.nodesValues !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesValues.onRecordChangeEventsSubscriptionId) - connector.nodesValues.finalize() - } - if (connector.nodesErrors !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesErrors.onRecordChangeEventsSubscriptionId) - connector.nodesErrors.finalize() - } - if (connector.nodesWarnings !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesWarnings.onRecordChangeEventsSubscriptionId) - connector.nodesWarnings.finalize() - } - if (connector.nodesInfos !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesInfos.onRecordChangeEventsSubscriptionId) - connector.nodesInfos.finalize() - } - if (connector.nodesStatus !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesStatus.onRecordChangeEventsSubscriptionId) - connector.nodesStatus.finalize() - } - if (connector.nodesProgress !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.Progress.onRecordChangeEventsSubscriptionId) - connector.Progress.finalize() - } - if (connector.nodesRunning !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.nodesRunning.onRecordChangeEventsSubscriptionId) - connector.nodesRunning.finalize() - } - if (connector.recordValues !== undefined) { - connector.plotter.container.eventHandler.stopListening(connector.recordValues.onRecordChangeEventsSubscriptionId) - connector.recordValues.finalize() - } - } - - function setTimeFrame(pTimeFrame) { - timeFrame = pTimeFrame - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - connector.layer.setTimeFrame(timeFrame) - connector.storage.setTimeFrame(timeFrame) - connector.plotter.setTimeFrame(timeFrame) - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - connector.layer.setDatetime(pDatetime) - connector.storage.setDatetime(pDatetime) - connector.plotter.setDatetime(pDatetime) - } - } - - function setCoordinateSystem(pCoordinateSystem) { - coordinateSystem = pCoordinateSystem - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[i] - connector.plotter.setCoordinateSystem(coordinateSystem) - } - } - - function getContainer(point) { - } - - function draw() { - if (thisObject.connectors === undefined) { return } // We need to wait - /* First the Product Plotters. */ - let maxElementsPlotted = 0 - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[thisObject.connectors.length - i - 1] - let elementsPlotted = connector.plotter.draw() - if (elementsPlotted !== undefined) { - if (elementsPlotted > maxElementsPlotted) { - maxElementsPlotted = elementsPlotted - } - } - } - return maxElementsPlotted - } - - function physics() { - if (thisObject.connectors === undefined) { return } // We need to wait - for (let i = 0; i < thisObject.connectors.length; i++) { - let connector = thisObject.connectors[thisObject.connectors.length - i - 1] - if (connector.plotter.physics !== undefined) { - connector.plotter.physics() - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesAnnouncements.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesAnnouncements.js deleted file mode 100644 index b248a90da..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesAnnouncements.js +++ /dev/null @@ -1,46 +0,0 @@ -function newNodesAnnouncements() { - const MODULE_NAME = 'Nodes Announcements' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.announcements - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.setValue(value, 20) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesErrors.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesErrors.js deleted file mode 100644 index 098a26d00..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesErrors.js +++ /dev/null @@ -1,46 +0,0 @@ -function newNodesErrors() { - const MODULE_NAME = 'Nodes Errors' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function finalize() { - - } - - function initialize(pRootNode) { - - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.errors - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - async function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeById(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === '') { - node.payload.uiObject.resetErrorMessage() - } else { - node.payload.uiObject.setErrorMessage(value, 3) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesHighlights.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesHighlights.js deleted file mode 100644 index c0af60ae9..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesHighlights.js +++ /dev/null @@ -1,42 +0,0 @@ -function newNodesHighlights() { - const MODULE_NAME = 'Nodes Highlights' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.highlights - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let nodeId = array[i] - highlight(nodeId) - } - } - - function highlight(nodeId) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - node.payload.uiObject.highlight(10) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesInfos.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesInfos.js deleted file mode 100644 index 10311af4e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesInfos.js +++ /dev/null @@ -1,46 +0,0 @@ -function newNodesInfos() { - const MODULE_NAME = 'Nodes Infos' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function finalize() { - - } - - function initialize(pRootNode) { - - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.infos - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - async function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeById(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === '') { - node.payload.uiObject.resetInfoMessage() - } else { - node.payload.uiObject.setInfoMessage(value, 3) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesProgress.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesProgress.js deleted file mode 100644 index dc9b28ccd..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesProgress.js +++ /dev/null @@ -1,47 +0,0 @@ -function newNodesProgress() { - const MODULE_NAME = 'Nodes Progress' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.progress - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.setPercentage(value, 30) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesRunning.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesRunning.js deleted file mode 100644 index 421129566..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesRunning.js +++ /dev/null @@ -1,47 +0,0 @@ -function newNodesRunning() { - const MODULE_NAME = 'Nodes Running' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.running - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.runningAtBackend() - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesStatus.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesStatus.js deleted file mode 100644 index 8cb51b1b2..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesStatus.js +++ /dev/null @@ -1,47 +0,0 @@ -function newNodesStatus() { - const MODULE_NAME = 'Nodes Status' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.status - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.setStatus(value, 30) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesValues.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesValues.js deleted file mode 100644 index 8ff0910b3..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesValues.js +++ /dev/null @@ -1,48 +0,0 @@ -function newNodesValues() { - const MODULE_NAME = 'Nodes Values' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let hiriarchyMap - return thisObject - - function finalize() { - hiriarchyMap = undefined - } - - function initialize(pRootNode) { - let rootNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pRootNode.id) - hiriarchyMap = UI.projects.superalgos.utilities.hierarchy.getHiriarchyMap(rootNode) - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.values - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - - function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = hiriarchyMap.get(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.valueAtAngle = false - node.payload.uiObject.setValue(value, 1, 10) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesWarnings.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesWarnings.js deleted file mode 100644 index 56d09904f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/NodesWarnings.js +++ /dev/null @@ -1,56 +0,0 @@ -function newNodesWarnings() { - const MODULE_NAME = 'Nodes Warnings' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function finalize() { - - } - - function initialize() { - - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - let array = currentRecord.warnings - if (array === undefined) { return } - for (let i = 0; i < array.length; i++) { - let arrayItem = array[i] - let nodeIdArray = arrayItem[0] - /* We migth receive here and array of node Ids. If we dont, we receive at least one node id*/ - if (Array.isArray(nodeIdArray) === true) { - for (let j = 0; j < nodeIdArray.length; j++) { - let nodeId = nodeIdArray[j] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } else { - let nodeId = arrayItem[0] - let value = arrayItem[1] - applyValue(nodeId, value) - } - } - } - - async function applyValue(nodeId, value) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - let node = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeById(nodeId) - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === '') { - node.payload.uiObject.resetWarningMessage() - } else { - node.payload.uiObject.setWarningMessage(value, 3) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/Plotter.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/Plotter.js deleted file mode 100644 index 7b2690b6e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/Plotter.js +++ /dev/null @@ -1,953 +0,0 @@ -function newPlotter() { - const MODULE_NAME = 'Plotter' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - currentRecord: undefined, - container: undefined, - fitFunction: undefined, - onDailyFileLoaded: onDailyFileLoaded, - initialize: initialize, - finalize: finalize, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - physics: physics, - draw: draw - } - - let container = newContainer() - container.initialize() - thisObject.container = container - - let coordinateSystem - let slotHeight = (UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y) / 10 // This is the amount of slots available - let mustRecalculateDataPoints = false - let atMousePositionFillStyles = new Map() - let atMousePositionStrokeStyles = new Map() - - let timeFrame // This will hold the current Time Frame the user is at. - let datetime // This will hold the current Datetime the user is at. - - let marketFile // This is the current Market File being plotted. - let fileCursor // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles // This object will provide the different Market Files at different Time Periods. - let dailyFiles // This object will provide the different File Cursors at different Time Periods. - - let productDefinition // Here we store a snapshot of the product definition which references this plotter. - - let records = [] // We will have the information to be plotted here. - let userPositionDate - let minUserPositionRate - let maxUserPositionRate - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let onDisplaceEventSubscriptionId - let scaleChangedEventSubscriptionId - - let logged = false - return thisObject - - function finalize() { - try { - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId) - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId) - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId) - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onDisplaceEventSubscriptionId) - thisObject.fitFunction = undefined - - /* Clear References */ - marketFiles = undefined - dailyFiles = undefined - - datetime = undefined - timeFrame = undefined - - marketFile = undefined - fileCursor = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - slotHeight = undefined - mustRecalculateDataPoints = undefined - atMousePositionFillStyles = undefined - atMousePositionStrokeStyles = undefined - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack.stack) } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction, pProductDefinition) { - try { - - /* Store the information received. */ - marketFiles = pStorage.marketFiles[0] - dailyFiles = pStorage.dailyFiles[0] - - datetime = pDatetime - timeFrame = pTimeFrame - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - productDefinition = pProductDefinition - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS) // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - marketFile = marketFiles.getFile(pTimeFrame) - fileCursor = dailyFiles.getFileCursor(pTimeFrame) - - /* Listen to the necesary events. */ - zoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged) - offsetChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent('Position Changed', onViewportPositionChanged) - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent('Drag Finished', onDragFinished) - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent('Files Updated', onMarketFilesUpdated) - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent('Files Updated', onDailyFilesUpdated) - onDisplaceEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDisplace', onDisplace) - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - recalculate() - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate() - }) - - callBackFunction() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - mustRecalculateDataPoints = true - recalculate() - } - - function onMouseOver(event) { - let userPosition = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - - let minPositionPoint = { - x: event.x, - y: event.y + 10 - } - minUserPositionRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtBrowserCanvas(minPositionPoint, thisObject.container, coordinateSystem) - - let maxPositionPoint = { - x: event.x, - y: event.y - 10 - } - maxUserPositionRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtBrowserCanvas(maxPositionPoint, thisObject.container, coordinateSystem) - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame) - if (newMarketFile !== undefined) { - marketFile = newMarketFile - mustRecalculateDataPoints = true - recalculate() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMarketFilesUpdated -> err = ' + err.stack.stack) } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame) - if (newFileCursor !== undefined) { - fileCursor = newFileCursor - mustRecalculateDataPoints = true - recalculate() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDailyFilesUpdated -> err = ' + err.stack.stack) } - } - } - - function getContainer(point) { - try { - let container - /* First we check if this point is inside this space. */ - if (thisObject.container.frame.isThisPointHere(point) === true) { - return thisObject.container - } else { - /* This point does not belong to this space. */ - return undefined - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getContainer -> err = ' + err.stack) } - } - } - - function setTimeFrame(pTimeFrame) { - try { - if (timeFrame !== pTimeFrame) { - timeFrame = pTimeFrame - mustRecalculateDataPoints = true - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - marketFile = marketFiles.getFile(pTimeFrame) - } else { - fileCursor = dailyFiles.getFileCursor(pTimeFrame) - } - recalculate() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setTimeFrame -> err = ' + err.stack) } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - try { - if (event.currentValue === event.totalValue) { - /* This happens only when all of the files in the cursor have been loaded. */ - recalculate() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDailyFileLoaded -> err = ' + err.stack) } - } - } - - function draw() { - - thisObject.container.frame.draw() - plot() - - } - - function physics() { - for (let i = 0; i < records.length; i++) { - let record = records[i] - - if (checkOutOfScreen(i, record) !== true) { continue } - - if (productDefinition.referenceParent.shapes === undefined) { continue } - if (productDefinition.referenceParent.shapes.chartPoints === undefined) { continue } - - dataPointsCalculation(record) - } - } - - function recalculate() { - try { - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - recalculateUsingMarketFiles() - } else { - recalculateUsingDailyFiles() - } - thisObject.container.eventHandler.raiseEvent('CandleStairs Changed', records) // --> Check This - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] recalculate -> err = ' + err.stack) } - } - } - - function jsonifyDataFile(dataFile, recordDefinition, farLeftDate, farRightDate) { - /* - This function has as an input the raw data on files and creates with it an array of JSON objects - with not calculated properties for later being consumed by Formulas - */ - - let jsonifiedArray = [] - let previous - - for (let i = 0; i < dataFile.length; i++) { - let record = {} - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated !== true) { - record[property.config.codeName] = dataFile[i][j] - } - } - - if (productDefinition.config.nodePathType === 'array') { - /* - When we have an array configuration, we know that the last field of the record - contains the array index, which is needed to correctly plot this data. Since - this index is not part of the product definition, we will restore its value in - this way: - */ - record.index = dataFile[i][recordDefinition.properties.length] - } - - if (record.begin === undefined || record.end === undefined) { - console.log('Could not find the property begin or end which are needed for the plotter to work. productDefinition.config.codeName = ' + productDefinition.config.codeName) - continue - } - - if (record.end <= farLeftDate.valueOf()) { continue } - if (record.begin >= farRightDate.valueOf()) { continue } - - if (record.end < coordinateSystem.min.x) { continue } - if (record.begin > coordinateSystem.max.x) { continue } - - record.previous = previous - jsonifiedArray.push(record) - previous = record - } - - return jsonifiedArray - } - - function calculationsProcedure(jsonArray, recordDefinition, calculationsProcedure, timeFrame) { - /* - This function has as an input an array of JSON objects, and it adds calculated properties to - complete the set of properties that will be available. - */ - - let system = { // These are the available system variables to be used in User Code and Formulas - timeFrame: timeFrame, - ONE_DAY_IN_MILISECONDS: ONE_DAY_IN_MILISECONDS - } - let variable = {} // This is the structure where the user will define its own variables that will be shared across different config blocks and formulas. - let results = [] - - /* This is Initialization Code */ - if (calculationsProcedure.initialization !== undefined) { - if (calculationsProcedure.initialization.javascriptCode !== undefined) { - try { - eval(calculationsProcedure.initialization.javascriptCode.code) - } catch (err) { - logger.write('[ERROR] calculationsProcedure -> initialization -> Error executing User Code. Error = ' + err.stack.stack) - logger.write('[ERROR] calculationsProcedure -> initialization -> Error executing User Code. Code = ' + calculationsProcedure.initialization.javascriptCode.code) - throw ('Error Executing User Code.') - } - } - } - - /* This is Initialization Code */ - if (calculationsProcedure.loop !== undefined) { - if (calculationsProcedure.loop.javascriptCode !== undefined) { - for (let index = 0; index < jsonArray.length; index++) { - let product = jsonArray[index] - - /* This is Loop Code */ - try { - eval(calculationsProcedure.loop.javascriptCode.code) - } catch (err) { - logger.write('[ERROR] calculationsProcedure -> loop -> Error executing User Code. Error = ' + err.stack.stack) - logger.write('[ERROR] calculationsProcedure -> loop -> Error executing User Code. product = ' + JSON.stringify(product)) - logger.write('[ERROR] calculationsProcedure -> loop -> Error executing User Code. Code = ' + calculationsProcedure.loop.javascriptCode.code) - throw ('Error Executing User Code.') - } - - /* For each calculated property we apply its formula */ - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated === true) { - if (property.formula !== undefined) { - if (property.formula.code !== undefined) { - try { - let newValue = eval(property.formula.code) - let currentRecord = product - currentRecord[property.config.codeName] = newValue - } catch (err) { - logger.write('[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. Error = ' + err.stack.stack) - logger.write('[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. product = ' + JSON.stringify(product)) - logger.write('[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. Code = ' + property.formula.code) - throw ('Error Executing User Code.') - } - } - } - } - } - - /* Adding the new element to the resulting array */ - results.push(product) - } - } - } - return results - } - - function recalculateUsingDailyFiles() { - try { - if (fileCursor === undefined) { - records = [] - return - } // We need to wait until there is a fileCursor available or maybe this indicator does not produce data for the current Time Frame - if (fileCursor.files.size === 0) { return } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame) - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem) - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem) - - let dateDiff = rightDate.valueOf() - leftDate.valueOf() - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5) - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5) - - let currentDate = new Date(farLeftDate.valueOf()) - - records = [] - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - let stringDate = currentDate.getUTCFullYear() + '-' + pad(currentDate.getUTCMonth() + 1, 2) + '-' + pad(currentDate.getUTCDate(), 2) - - let dailyFile = fileCursor.files.get(stringDate) - - if (dailyFile !== undefined) { - /* Transform the current file content into an array of JSON objects */ - let jsonData = jsonifyDataFile(dailyFile, productDefinition.record, farLeftDate, farRightDate) - - /* Add the calculated properties */ - if (productDefinition.calculations !== undefined) { - let calculationsResult = calculationsProcedure(jsonData, productDefinition.record, productDefinition.calculations, timeFrame) - records.push(...calculationsResult) // This adds records to the current array. - } else { - records.push(...jsonData)// This adds records to the current array. - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS) - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] recalculateUsingDailyFiles -> err = ' + err.stack) } - } - } - - function recalculateUsingMarketFiles() { - try { - if (marketFile === undefined) { - records = [] - return - } // Initialization not complete yet or this indicator does not produce data for the current time frame - - let daysOnSides = getSideDays(timeFrame) - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem) - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem) - - let dateDiff = rightDate.valueOf() - leftDate.valueOf() - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5) - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5) - - for (let i = 0; i < records.length; i++) { - let record = records[i] - record.fillStyle = undefined - record.strokeStyle = undefined - record.dataPoints = undefined - record.previous = undefined - records[i] = {} - } - records = [] - - /* Transform the current file content into an array of JSON objects */ - let jsonData = jsonifyDataFile(marketFile, productDefinition.record, leftDate, rightDate) - - /* Add the calculated properties */ - if (productDefinition.calculations !== undefined) { - let calculationsResult = calculationsProcedure(jsonData, productDefinition.record, productDefinition.calculations, timeFrame) - records.push(...calculationsResult) // This adds records to the current array. - } else { - records.push(...jsonData)// This adds records to the current array. - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] recalculateUsingMarketFiles -> err = ' + err.stack) } - } - } - - function plot() { - try { - /* Clean the pannel at places where there is no record. */ - thisObject.container.eventHandler.raiseEvent('Current Record Changed', undefined) - - for (let i = 0; i < records.length; i++) { - let record = records[i] - - if (checkOutOfScreen(i, record) !== true) { continue } - - let atMousePosition = false - checkAtMousePosition() - - /* If there is code we execute it now. */ - if (productDefinition.referenceParent.javascriptCode !== undefined) { - eval(productDefinition.referenceParent.javascriptCode.code) - } - - if (productDefinition.referenceParent.shapes === undefined) { continue } - if (productDefinition.referenceParent.shapes.chartPoints === undefined) { continue } - - plotPolygons() - plotImages() - plotTexts() - - function checkAtMousePosition() { - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - if (productDefinition.referenceParent.config.useRateAtMousePosition === true) { - let ratePropertyName = "rate" - if (productDefinition.referenceParent.config.ratePropertyName !== undefined) { - ratePropertyName = productDefinition.referenceParent.config.ratePropertyName - } - if (record[ratePropertyName] === undefined) { - currentRecordChanged() - } else { - /* Current Record depends also on rate */ - if (record[ratePropertyName] >= minUserPositionRate && record[ratePropertyName] <= maxUserPositionRate) { - currentRecordChanged() - } - } - } else { - /* Current Record depends only on begin and end. */ - currentRecordChanged() - } - - function currentRecordChanged() { - atMousePosition = true - thisObject.container.eventHandler.raiseEvent('Current Record Changed', record) - } - } - } - - function plotPolygons() { - /* Here we are going to plot all the polygons. */ - for (let j = 0; j < productDefinition.referenceParent.shapes.polygons.length; j++) { - let polygon = productDefinition.referenceParent.shapes.polygons[j] - /* We will check if we need to plot this Polygon or not. */ - if (polygon.polygonCondition !== undefined) { - let mustPlot = eval(polygon.polygonCondition.code) - if (mustPlot !== true) { continue } - } - - let calculatedStyle - - /* Finding out the fill style */ - let fillStyle = { // default values - opacity: 1, - paletteColor: UI_COLOR.BLACK - } - if (polygon.polygonBody !== undefined) { - if (record.fillStyle === undefined) { - record.fillStyle = new Map() - } - calculatedStyle = record.fillStyle.get(polygon.id) - if (calculatedStyle !== undefined) { - /* We use the already calculated style */ - fillStyle = calculatedStyle - } else { - /* Get the default style if exists */ - if (polygon.polygonBody.style !== undefined) { - if (polygon.polygonBody.style.config !== undefined) { - if (polygon.polygonBody.style.config.default !== undefined) { - let bodyStyle = polygon.polygonBody.style.config.default - if (bodyStyle.opacity !== undefined) { fillStyle.opacity = bodyStyle.opacity } - if (bodyStyle.paletteColor !== undefined) { fillStyle.paletteColor = eval(bodyStyle.paletteColor) } - } - } - } - /* Apply conditional styles */ - if (polygon.polygonBody.styleConditions !== undefined) { - for (let k = 0; k < polygon.polygonBody.styleConditions.length; k++) { - let condition = polygon.polygonBody.styleConditions[k] - let value = eval(condition.code) - if (value === true) { - if (condition.style !== undefined) { - let bodyStyle = condition.style.config - if (bodyStyle.opacity !== undefined) { fillStyle.opacity = bodyStyle.opacity } - if (bodyStyle.paletteColor !== undefined) { fillStyle.paletteColor = eval(bodyStyle.paletteColor) } - } - } - } - } - /* Get the atMousePosition style if exists */ - if (polygon.polygonBody.style !== undefined) { - if (polygon.polygonBody.style.config.atMousePosition !== undefined) { - let atMousePositionStyleDefinition = polygon.polygonBody.style.config.atMousePosition - let atMousePositionStyle = {} - if (atMousePositionStyleDefinition.opacity !== undefined) { atMousePositionStyle.opacity = atMousePositionStyleDefinition.opacity } - if (atMousePositionStyleDefinition.paletteColor !== undefined) { atMousePositionStyle.paletteColor = eval(atMousePositionStyleDefinition.paletteColor) } - atMousePositionFillStyles.set(polygon.id, atMousePositionStyle) - } - } - - record.fillStyle.set(polygon.id, fillStyle) - } - } - - /* Finding out the stroke style */ - let strokeStyle = { // default values - opacity: 1, - paletteColor: UI_COLOR.BLACK, - lineWidth: 1, - lineDash: [0, 0] - } - if (polygon.polygonBorder !== undefined) { - if (record.strokeStyle === undefined) { - record.strokeStyle = new Map() - } - calculatedStyle = record.strokeStyle.get(polygon.id) - if (calculatedStyle !== undefined) { - /* We use the already calculated style */ - strokeStyle = calculatedStyle - } else { - /* Get the default style if exists */ - if (polygon.polygonBorder.style !== undefined) { - if (polygon.polygonBorder.style.config !== undefined) { - if (polygon.polygonBorder.style.config.default !== undefined) { - let borderStyle = polygon.polygonBorder.style.config.default - if (borderStyle.opacity !== undefined) { strokeStyle.opacity = borderStyle.opacity } - if (borderStyle.paletteColor !== undefined) { strokeStyle.paletteColor = eval(borderStyle.paletteColor) } - if (borderStyle.lineWidth !== undefined) { strokeStyle.lineWidth = borderStyle.lineWidth } - if (borderStyle.lineDash !== undefined) { strokeStyle.lineDash = borderStyle.lineDash } - } - } - } - /* Apply conditional styles */ - if (polygon.polygonBorder.styleConditions !== undefined) { - for (let k = 0; k < polygon.polygonBorder.styleConditions.length; k++) { - let condition = polygon.polygonBorder.styleConditions[k] - let value = eval(condition.code) - if (value === true) { - if (condition.style !== undefined) { - let borderStyle = condition.style.config - if (borderStyle.opacity !== undefined) { strokeStyle.opacity = borderStyle.opacity } - if (borderStyle.paletteColor !== undefined) { strokeStyle.paletteColor = eval(borderStyle.paletteColor) } - if (borderStyle.lineWidth !== undefined) { strokeStyle.lineWidth = borderStyle.lineWidth } - if (borderStyle.lineDash !== undefined) { strokeStyle.lineDash = borderStyle.lineDash } - } - } - } - } - /* Get the atMousePosition style if exists */ - if (polygon.polygonBorder.style !== undefined) { - if (polygon.polygonBorder.style.config.atMousePosition !== undefined) { - let atMousePositionStyleDefinition = polygon.polygonBorder.style.config.atMousePosition - let atMousePositionStyle = {} - if (atMousePositionStyleDefinition.opacity !== undefined) { atMousePositionStyle.opacity = atMousePositionStyleDefinition.opacity } - if (atMousePositionStyleDefinition.paletteColor !== undefined) { atMousePositionStyle.paletteColor = eval(atMousePositionStyleDefinition.paletteColor) } - if (atMousePositionStyleDefinition.lineWidth !== undefined) { atMousePositionStyle.lineWidth = atMousePositionStyleDefinition.lineWidth } - if (atMousePositionStyleDefinition.lineDash !== undefined) { atMousePositionStyle.lineDash = atMousePositionStyleDefinition.lineDash } - atMousePositionStrokeStyles.set(polygon.id, atMousePositionStyle) - } - } - - record.strokeStyle.set(polygon.id, strokeStyle) - } - } - - /* Draw the Polygon */ - browserCanvasContext.beginPath() - for (let k = 0; k < polygon.polygonVertexes.length; k++) { - let polygonVertex = polygon.polygonVertexes[k] - if (polygonVertex.referenceParent !== undefined) { - let dataPointObject = record.dataPoints.get(polygonVertex.referenceParent.id) - if (dataPointObject === undefined) { - polygonVertex.payload.uiObject.setErrorMessage('Vertex not referencing any Point') - console.log('[WARN] You have a Polygon Vertex not referencing any Point.') - continue - } - - let dataPoint = { - x: dataPointObject.x, - y: dataPointObject.y - } - /* We make sure the points do not fall outside the viewport visible area. This step allways need to be done. */ - dataPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(dataPoint) - dataPoint = thisObject.fitFunction(dataPoint) - - if (k === 0) { - browserCanvasContext.moveTo(dataPoint.x, dataPoint.y) - } else { - browserCanvasContext.lineTo(dataPoint.x, dataPoint.y) - } - } - } - browserCanvasContext.closePath() - - /* Apply the fill style to the canvas object */ - if (polygon.polygonBody !== undefined) { - /* Replace the fill style if we are at mouse position */ - if (atMousePosition === true) { - let atMousePositionFillStyle = atMousePositionFillStyles.get(polygon.id) - if (atMousePositionFillStyle !== undefined) { - fillStyle = atMousePositionFillStyle - } - } - - browserCanvasContext.fillStyle = 'rgba(' + fillStyle.paletteColor + ', ' + fillStyle.opacity + ')' - browserCanvasContext.fill() - } - - /* Apply the stroke style to the canvas object */ - if (polygon.polygonBorder !== undefined) { - /* Replace the stroke style if we are at mouse position */ - if (atMousePosition === true) { - let atMousePositionStrokeStyle = atMousePositionStrokeStyles.get(polygon.id) - if (atMousePositionStrokeStyle !== undefined) { - strokeStyle = atMousePositionStrokeStyle - } - } - - browserCanvasContext.lineWidth = strokeStyle.lineWidth - browserCanvasContext.setLineDash(strokeStyle.lineDash) - browserCanvasContext.strokeStyle = 'rgba(' + strokeStyle.paletteColor + ', ' + strokeStyle.opacity + ')' - browserCanvasContext.stroke() - } - } - } - - function plotImages() { - /* Here we are going to plot images. */ - for (let j = 0; j < productDefinition.referenceParent.shapes.images.length; j++) { - let image = productDefinition.referenceParent.shapes.images[j] - if (image.imagePosition === undefined) { continue } - if (image.imagePosition.referenceParent === undefined) { continue } - if (image.imageCondition !== undefined) { - let mustPlot = eval(image.imageCondition.code) - if (mustPlot !== true) { continue } - } - let imageName = '' - let imageSize = 0 - let offsetX = 0 - let offsetY = 0 - let imagePosition = { x: 0, y: 0 } - if (image.config.codeName !== undefined) { imageName = image.config.codeName } - if (image.config.size !== undefined) { imageSize = image.config.size } - if (image.imagePosition.config.offsetX !== undefined) { offsetX = image.imagePosition.config.offsetX } - if (image.imagePosition.config.offsetY !== undefined) { offsetY = image.imagePosition.config.offsetY } - let dataPointObject = record.dataPoints.get(image.imagePosition.referenceParent.id) - if (dataPointObject === undefined) { continue } - let dataPoint = { - x: dataPointObject.x, - y: dataPointObject.y - } - dataPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(dataPoint) - dataPoint = thisObject.fitFunction(dataPoint) - - imagePosition.x = dataPoint.x - imagePosition.y = dataPoint.y - let imageToDraw = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', imageName) - if (imageToDraw !== undefined) { - if (imageToDraw.canDrawIcon === true) { - browserCanvasContext.drawImage(imageToDraw, imagePosition.x - imageSize / 2 + offsetX, imagePosition.y - imageSize / 2 - offsetY, imageSize, imageSize) - } - } else { - console.log('Can not plot image named ' + imageName + ' of product ' + productDefinition.name + ' because it does not exist.') - } - } - } - - function plotTexts() { - /* Here we are going to plot texts. */ - for (let j = 0; j < productDefinition.referenceParent.shapes.texts.length; j++) { - let text = productDefinition.referenceParent.shapes.texts[j] - if (text.textPosition === undefined) { continue } - if (text.textPosition.referenceParent === undefined) { continue } - if (text.textCondition !== undefined) { - let mustPlot = eval(text.textCondition.code) - if (mustPlot !== true) { continue } - } - if (text.textFormula === undefined) { continue } - if (text.textStyle === undefined) { continue } - let value = eval(text.textFormula.code) - let fontSize = 0 - let opacity = 0 - let paletteColor = UI_COLOR.GREY - let offsetX = 0 - let offsetY = 0 - let textPosition = { x: 0, y: 0 } - if (text.textStyle.config.fontSize !== undefined) { fontSize = text.textStyle.config.fontSize } - if (text.textStyle.config.opacity !== undefined) { opacity = text.textStyle.config.opacity } - if (text.textStyle.config.paletteColor !== undefined) { paletteColor = eval(text.textStyle.config.paletteColor) } - if (text.textPosition.config.offsetX !== undefined) { offsetX = text.textPosition.config.offsetX } - if (text.textPosition.config.offsetY !== undefined) { offsetY = text.textPosition.config.offsetY } - let dataPointObject = record.dataPoints.get(text.textPosition.referenceParent.id) - if (dataPointObject === undefined) { continue } - let dataPoint = { - x: dataPointObject.x, - y: dataPointObject.y - } - dataPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(dataPoint) - dataPoint = thisObject.fitFunction(dataPoint) - - textPosition.x = dataPoint.x - textPosition.y = dataPoint.y - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + paletteColor + ', ' + opacity + ')' - browserCanvasContext.fillText(value, textPosition.x + offsetX, textPosition.y - offsetY) - } - } - } - - logged = false - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] plot -> err = ' + err.stack) } - } - } - - function checkOutOfScreen(i, record) { - /* - In the formulas to create plotters, we allos users to reference the previous record. - To enable that we need to link all records to the previous one in this way. - */ - if (i == 0) { - record.previous = {} // this way it wont be undefined - } else { - record.previous = records[i - 1] - } - - let beginPoint = { - x: record.begin, - y: 0 - } - - let endPoint = { - x: record.end, - y: 0 - } - - beginPoint = coordinateSystem.transformThisPoint(beginPoint) - endPoint = coordinateSystem.transformThisPoint(endPoint) - - beginPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(beginPoint, thisObject.container) - endPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(endPoint, thisObject.container) - - beginPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(beginPoint) - endPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(endPoint) - - beginPoint = thisObject.fitFunction(beginPoint) - endPoint = thisObject.fitFunction(endPoint) - - if (endPoint.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x || beginPoint.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x) { - return false - } else { - return true - } - } - - function dataPointsCalculation(record) { - if (record.dataPoints !== undefined && mustRecalculateDataPoints === false) { - /* We use the datapoints already calculated. */ - dataPoints = record.dataPoints - } else { - if (logged === false) { - logged = true - } - let dataPoints = new Map() - /* It seems we need to calculate the data points this time. */ - for (let k = 0; k < productDefinition.referenceParent.shapes.chartPoints.length; k++) { - let chartPoints = productDefinition.referenceParent.shapes.chartPoints[k] - for (let j = 0; j < chartPoints.points.length; j++) { - let point = chartPoints.points[j] - if (point.pointFormula !== undefined) { - let x = 0 - let y = 0 - eval(point.pointFormula.code) - let rawPoint = { - x: x, - y: y - } - - /* - The information we store in files is independent from the charing system and its coordinate systems. - That means that the first thing we allways need to do is to trasform these points to the coordinate system of the timeline. - */ - let dataPoint - dataPoint = coordinateSystem.transformThisPoint(rawPoint) - dataPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(dataPoint, thisObject.container) - let testPoint = { - x: dataPoint.x, - y: dataPoint.y - } - dataPoint = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(dataPoint) - dataPoint = thisObject.fitFunction(dataPoint) - - if (testPoint.x === dataPoint.x) { - /* - Contributing to Auto-Scale: A point will contribute to the y coordinate only if the x coordinate is plotted in the screen. - It can happen that objects that span through a long period of time could have its begin point inside the visible - viewport but not its end point. In those cases, the end point should not be reported. - */ - - if (rawPoint.y > 0 && rawPoint.y !== undefined && isNaN(rawPoint.y) === false) { - coordinateSystem.reportYValue(rawPoint.y) - } - } - /* Store the data point at the local map */ - dataPoint.rawPoint = rawPoint - dataPoints.set(point.id, dataPoint) - } - } - } - - /* Remember this datapoints, so that we do not need to calculate them again. */ - record.dataPoints = dataPoints - } - } - - function onViewportZoomChanged(event) { - try { - mustRecalculateDataPoints = true - recalculate() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onViewportZoomChanged -> err = ' + err.stack) } - } - } - - function onDragFinished() { - if (UI.projects.superalgos.spaces.chartingSpace.visible === true) { - recalculate() - } - } - - function onDisplace(event) { - recalculateAll(event) - } - - function onViewportPositionChanged(event) { - recalculateAll(event) - } - - function recalculateAll(event) { - mustRecalculateDataPoints = true - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/RecordValues.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/RecordValues.js deleted file mode 100644 index 7633119b7..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Plotting/RecordValues.js +++ /dev/null @@ -1,124 +0,0 @@ -function newRecordValues() { - const MODULE_NAME = 'Record Values' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - onRecordChange: onRecordChange, - initialize: initialize, - finalize: finalize - } - - let tradingSystem - let tradingEngine - let productDefinition - let propertyTargetNodeMap = new Map() - return thisObject - - function finalize() { - tradingSystem = undefined - tradingEngine = undefined - productDefinition = undefined - propertyTargetNodeMap = undefined - } - - function initialize(pTradingSystem, pTradingEngine, pProductDefinition) { - tradingSystem = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingSystem.id) - tradingEngine = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsById(pTradingEngine.id) - productDefinition = pProductDefinition - - /* - The product root can be a node or a node property of type array. - */ - let productRoot = eval(productDefinition.config.nodePath) - - if (productDefinition.config.nodePathType === 'array') { - /* - This means that the configured nodePath is not pointing to a node, but to a node property that is an array. - For that reason we will assume that each element of the array is a record to be outputed - */ - for (let index = 0; index < productRoot.length; index++) { - /* - The Product Root Node is the root of the node hiriarchy from where we are going to extract the record values. - */ - let productRootNode = productRoot[index] - scanProperties(productDefinition, productRootNode, index) - } - } else { - /* - This means that the configured nodePath points to a single node, which is the one whose children constitutes - the record to be saved at the output file. - */ - /* - The Product Root Node is the root of the node hiriarchy from where we are going to extract the record values. - */ - let productRootNode = productRoot - scanProperties(productDefinition, productRootNode) - } - - function scanProperties(productDefinition, productRootNode, index) { - for (let i = 0; i < productDefinition.record.properties.length; i++) { - let property = productDefinition.record.properties[i] - let key = property.id - if (index !== undefined) { - key = property.id + '-' + index - } - if (property.config.nodePath !== undefined) { - let propertyRoot - try { - propertyRoot = eval(property.config.nodePath) - } catch(err) { - console.log('Definition Error at Product ' + productDefinition.name) - console.log('productDefinition.config = ' + JSON.stringify(productDefinition.config)) - console.log('Definition Error at Property ' + property.name) - console.log('property.config = ' + JSON.stringify(property.config)) - console.log('property.config.nodePath = ' + property.config.nodePath) - return - } - propertyTargetNodeMap.set(key, propertyRoot) - } else { - propertyTargetNodeMap.set(key, productRootNode) - } - } - } - } - - function onRecordChange(currentRecord) { - if (currentRecord === undefined) { return } - for (let i = 0; i < productDefinition.record.properties.length; i++) { - let property = productDefinition.record.properties[i] - let value = currentRecord[property.config.codeName] - let key = property.id - if (productDefinition.config.nodePathType === 'array') { - /* - When we have an array configuration, in this case we will use the index - property that was injected into the record in order to build the key to - get the node where we have to send the value. - */ - key = property.id + '-' + currentRecord.index - } - let targetNode = propertyTargetNodeMap.get(key) - /* - If the codeName of the Record Property can not match the name of the property at - the target node, the user can explicitly specify the property name at the configuration, - and in those cases we need to use that. This happens when there are many Record Properties - pointing to the same property at the Target Node. - */ - if (property.config.childProperty !== undefined) { - applyValue(targetNode[property.config.childProperty], value, property.config.decimals) - } else { - applyValue(targetNode[property.config.codeName], value, property.config.decimals) - } - } - } - - function applyValue(node, value, minDecimals) { - if (UI.projects.superalgos.spaces.chartingSpace.visible !== true) { return } - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.uiObject === undefined) { return } - if (value === true) { value = 'true' } - if (value === false) { value = 'false' } - node.payload.uiObject.setValue(value, 1, minDecimals) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/AutoScaleButton.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/AutoScaleButton.js deleted file mode 100644 index 9dc11eda2..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/AutoScaleButton.js +++ /dev/null @@ -1,205 +0,0 @@ -function newAutoScaleButton() { - let thisObject = { - container: undefined, - fitFunction: undefined, - parentContainer: undefined, - autoMinScale: undefined, - autoMaxScale: undefined, - setStatus: setStatus, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - /* Cointainer stuff */ - thisObject.container = newContainer() - thisObject.container.name = 'Auto Scale Button' - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.frame.containerName = 'Auto Scale Button' - - const ICON_SIZE = 36 - let onMouseWheelEventSubscriptionId - let coordinateSystem - let axis - let currentStatus - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.parentContainer = undefined - thisObject.panels = undefined - - coordinateSystem = undefined - axis = undefined - } - - function initialize(pAxis, pCoordinateSystem) { - axis = pAxis - coordinateSystem = pCoordinateSystem - thisObject.autoMinScale = coordinateSystem.autoMinYScale - thisObject.autoMaxScale = coordinateSystem.autoMaxYScale - - switch (axis) { - case 'X': { - thisObject.container.frame.width = ICON_SIZE - thisObject.container.frame.height = ICON_SIZE - - let position = { - x: thisObject.container.parentContainer.frame.width * 7 / 8, - y: thisObject.container.parentContainer.frame.height / 2 - } - - thisObject.container.frame.position = position - break - } - case 'Y': { - thisObject.container.frame.width = ICON_SIZE - thisObject.container.frame.height = ICON_SIZE - - let position = { - x: thisObject.container.parentContainer.frame.width * 7 / 8, - y: thisObject.container.parentContainer.frame.height / 2 - } - - thisObject.container.frame.position = position - break - } - } - onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - } - - function setStatus(autoMinScale, autoMaxScale) { - thisObject.autoMinScale = autoMinScale - thisObject.autoMaxScale = autoMaxScale - - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) { - currentStatus = 1 - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) { - currentStatus = 2 - } - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) { - currentStatus = 4 - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) { - currentStatus = 6 - } - } - function onMouseWheel(event) { - let delta = event.wheelDelta - if (delta < 0) { - delta = -1 - } else { - delta = 1 - } - currentStatus = currentStatus + delta - if (currentStatus === 7) { currentStatus = 1 } - if (currentStatus === 0) { currentStatus = 6 } - - switch (currentStatus) { - case 1: { - thisObject.autoMinScale = false - thisObject.autoMaxScale = false - update() - return - } - case 2: { - thisObject.autoMinScale = true - thisObject.autoMaxScale = false - update() - return - } - case 3: { - thisObject.autoMinScale = false - thisObject.autoMaxScale = false - update() - return - } - case 4: { - thisObject.autoMinScale = false - thisObject.autoMaxScale = true - update() - return - } - case 5: { - thisObject.autoMinScale = false - thisObject.autoMaxScale = false - update() - return - } - case 6: { - thisObject.autoMinScale = true - thisObject.autoMaxScale = true - update() - return - } - } - - function update() { - switch (axis) { - case 'X': { - coordinateSystem.autoMinXScale = thisObject.autoMinScale - coordinateSystem.autoMaxXScale = thisObject.autoMaxScale - break - } - case 'Y': { - coordinateSystem.autoMinYScale = thisObject.autoMinScale - coordinateSystem.autoMaxYScale = thisObject.autoMaxScale - break - } - } - - coordinateSystem.recalculateScale() - } - } - - function getContainer(point, purpose) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function draw() { - let icon - switch (axis) { - case 'X': { - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-time-scale-manual') - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-time-scale-auto-min') - } - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-time-scale-auto-max') - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-time-scale-auto-min-max') - } - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container) - break - } - case 'Y': { - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-scale-manual') - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-scale-auto-min') - } - if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-scale-auto-max') - } - if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-auto-scale-auto-min-max') - } - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container) - break - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/Commons.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/Commons.js deleted file mode 100644 index 22644f0e3..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/Commons.js +++ /dev/null @@ -1,45 +0,0 @@ - -function drawScaleDisplay(label1, label2, label3, xExtraOffSet1, xExtraOffSet2, xExtraOffSet3, icon1, icon2, container, backgroundColor) { - const RED_LINE_HIGHT = 4 - const OPACITY = 1 - - let params = { - cornerRadius: 5, - lineWidth: 1, - container: container, - borderColor: UI_COLOR.RUSTED_RED, - castShadow: false, - backgroundColor: backgroundColor, - opacity: OPACITY - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - /* Place the Text */ - - label1 = label1.substring(0, 18) - label2 = label2.substring(0, 20) - label3 = label3.substring(0, 20) - - UI.projects.superalgos.utilities.drawPrint.drawLabel(label1, 1 / 2, 92 / 100, 0, 0, 9, container) - UI.projects.superalgos.utilities.drawPrint.drawLabel(label2, 1 / 2, 42 / 100, 0, 0, 17, container) - UI.projects.superalgos.utilities.drawPrint.drawLabel(label3, 1 / 2, 67 / 100, 0, 0, 9, container) - - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon1, 1 / 8, 1 / 2, 0, 0, 28, container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon2, 7 / 8, 1 / 2, 0, 0, 28, container) -} - -function drawScaleDisplayCover(container) { - let params = { - cornerRadius: 5, - lineWidth: 1, - container: container, - borderColor: UI_COLOR.WHITE, - castShadow: false, - backgroundColor: UI_COLOR.WHITE, - opacity: '0.25' - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/RateScale.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/RateScale.js deleted file mode 100644 index 8daa71e8c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/RateScale.js +++ /dev/null @@ -1,578 +0,0 @@ -function newRateScale() { - const MODULE_NAME = 'Right Scale' - - let thisObject = { - container: undefined, - rate: undefined, - fitFunction: undefined, - payload: undefined, - minValue: undefined, - maxValue: undefined, - isVisible: true, - layersOn: undefined, - onUpstreamScaleChanged: onUpstreamScaleChanged, - onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer, - physics: physics, - draw: draw, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isClickeable = false - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = 40 - - let draggeableContainer = newContainer() - draggeableContainer.initialize(MODULE_NAME + ' Draggeable') - draggeableContainer.isDraggeable = true - - let visible = true - let isMouseOver - - let onMouseWheelEventSubscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - let onScaleChangedEventSubscriptionId - let onDragStartedEventSubscriptionId - - let coordinateSystem - let coordinateSystemWhenDragStarted - - let limitingContainer - let rateCalculationsContainer - - mouseWhenDragStarted = { - position: { - x: 0, - y: 0 - } - } - - parentFrameWhenDragStarted = { - position: { - x: 0, - y: 0 - }, - width: 0, - height: 0 - } - - let scaleDisplayTimer = 0 - let autoScaleButton - - let wheelDeltaDirection - let wheelDeltaCounter = 0 - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - coordinateSystem.eventHandler.stopListening(onScaleChangedEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onDragStartedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.payload = undefined - - if (coordinateSystemWhenDragStarted !== undefined) { - coordinateSystemWhenDragStarted.finalize() - } - - coordinateSystemWhenDragStarted = undefined - - coordinateSystem = undefined - limitingContainer = undefined - rateCalculationsContainer = undefined - - mouseWhenDragStarted = undefined - parentFrameWhenDragStarted = undefined - - autoScaleButton.finalize() - autoScaleButton = undefined - } - - function initialize(pCoordinateSystem, pLimitingContainer, pRateCalculationsContainer) { - coordinateSystem = pCoordinateSystem - limitingContainer = pLimitingContainer - rateCalculationsContainer = pRateCalculationsContainer - - thisObject.minValue = coordinateSystem.min.y - thisObject.maxValue = coordinateSystem.max.y - - onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - onScaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - onDragStartedEventSubscriptionId = draggeableContainer.eventHandler.listenToEvent('onDragStarted', onDragStarted) - - autoScaleButton = newAutoScaleButton() - autoScaleButton.container.connectToParent(thisObject.container) - autoScaleButton.initialize('Y', coordinateSystem) - - readObjectState() - } - - function onMouseOverSomeTimeMachineContainer(event) { - if (event.containerId === undefined) { - /* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */ - visible = true - } else { - if (event.containerId === thisObject.container.id) { - visible = true - } else { - visible = false - turnOnCounter = 0 - } - } - } - - function onScaleChanged() { - saveObjectState() - } - - function onMouseOver(event) { - isMouseOver = true - event.containerId = thisObject.container.id - thisObject.container.eventHandler.raiseEvent('onMouseOverScale', event) - } - - function onMouseNotOver() { - isMouseOver = false - scaleDisplayTimer = 0 - } - - function onMouseWheel(event) { - if (IS_MAC) { - let sensitivity - if (event.wheelDelta < 0) { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === -1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = -1 - return - } - } else { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === 1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = 1 - return - } - } - } - - if (event.shiftKey === true) { - autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event) - return - } - - let factor - let morePower = 10 - if (event.buttons === 4) { morePower = 1 } // Mouse wheel pressed. - - let delta = event.wheelDelta - if (delta < 0) { - factor = -0.01 * morePower - } else { - factor = 0.01 * morePower - } - - coordinateSystem.zoomY(factor, event, limitingContainer) - scaleDisplayTimer = 100 - } - - function onDragStarted(event) { - mouseWhenDragStarted = { - position: { - x: event.x, - y: event.y - } - } - - parentFrameWhenDragStarted = { - position: { - x: limitingContainer.frame.position.x, - y: limitingContainer.frame.position.y - }, - width: limitingContainer.frame.width, - height: limitingContainer.frame.height - } - - coordinateSystemWhenDragStarted = newCoordinateSystem() - - let minValue = { - x: coordinateSystem.min.x, - y: coordinateSystem.min.y - } - - let maxValue = { - x: coordinateSystem.max.x, - y: coordinateSystem.max.y - } - - coordinateSystemWhenDragStarted.initialize(minValue, maxValue, coordinateSystem.maxWidth, coordinateSystem.maxHeight) - } - - function getContainer(point, purpose) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - if (purpose === GET_CONTAINER_PURPOSE.DRAGGING) { - return draggeableContainer - } - - return thisObject.container - } - } - - function saveObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - config.minValue = coordinateSystem.min.y - config.maxValue = coordinateSystem.max.y - config.autoMinScale = coordinateSystem.autoMinYScale - config.autoMaxScale = coordinateSystem.autoMaxYScale - thisObject.payload.node.config = JSON.stringify(config, null, 4) - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function readObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - - if ( - (isNaN(config.minValue) || config.minValue === null || config.minValue === undefined) || - (isNaN(config.maxValue) || config.maxValue === null || config.maxValue === undefined) - ) { - // not using this value - } else { - if ( - thisObject.minValue !== config.minValue || - thisObject.maxValue !== config.maxValue || - coordinateSystem.autoMinYScale !== config.autoMinScale || - coordinateSystem.autoMaxYScale !== config.autoMaxScale - ) { - thisObject.minValue = config.minValue - thisObject.maxValue = config.maxValue - coordinateSystem.min.y = thisObject.minValue - coordinateSystem.max.y = thisObject.maxValue - - if (config.autoMinScale !== undefined && (config.autoMinScale === true || config.autoMinScale === false) && config.autoMaxScale !== undefined && (config.autoMaxScale === true || config.autoMaxScale === false)) { - coordinateSystem.autoMinYScale = config.autoMinScale - coordinateSystem.autoMaxYScale = config.autoMaxScale - autoScaleButton.setStatus(config.autoMinScale, config.autoMaxScale) - } - - coordinateSystem.recalculateScale() - } - } - saveObjectState() // this overrides any invalid value at the config. - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function physics() { - scaleDisplayTimer-- - readObjectState() - positioningPhysics() - draggingPhysics() - } - - function draggingPhysics() { - if (coordinateSystemWhenDragStarted === undefined) { return } - if (draggeableContainer.frame.position.y === 0) { return } - - let mouseNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(canvas.mouse.position) - let mouseWhenDragStartedNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(mouseWhenDragStarted.position) - - let dragVectorWhenDragStarted = { - x: 0, - y: mouseNoZoom.y - mouseWhenDragStartedNoZoom.y - } - - let dragVector = { - x: 0, - y: draggeableContainer.frame.position.y - } - - draggeableContainer.frame.position.y = 0 - - let point = { - x: 0, - y: (-dragVectorWhenDragStarted.y) - } - - let newMaxRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, limitingContainer, coordinateSystemWhenDragStarted) - let yDifferenceMaxMin = coordinateSystemWhenDragStarted.max.y - coordinateSystemWhenDragStarted.min.y - - coordinateSystem.min.y = newMaxRate - yDifferenceMaxMin - coordinateSystem.max.y = newMaxRate - let event = { - type: 'center dragged', - dragVector: dragVector - } - coordinateSystem.recalculateScale() - } - - function onUpstreamScaleChanged(event) { - if (event === undefined) { return } - if (event.dragVector.y === 0) { return } - if (event.type === 'center dragged') { - let point = { - x: event.dragVector.x, - y: -event.dragVector.y - } - let newMaxRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, rateCalculationsContainer, coordinateSystem) - let yDifferenceMaxMin = coordinateSystem.max.y - coordinateSystem.min.y - coordinateSystem.min.y = newMaxRate - yDifferenceMaxMin - coordinateSystem.max.y = newMaxRate - - coordinateSystem.recalculateScale() - } - if (event.type === 'top dragged') { - let point = { - x: event.dragVector.x, - y: event.dragVector.y - } - let newMaxRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, rateCalculationsContainer, coordinateSystem) - - coordinateSystem.max.y = newMaxRate - coordinateSystem.maxHeight = rateCalculationsContainer.frame.height - coordinateSystem.recalculateScale() - } - if (event.type === 'bottom dragged') { - let point = { - x: event.dragVector.x, - y: event.dragVector.y + rateCalculationsContainer.frame.height - } - let newMinRate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtContainer(point, rateCalculationsContainer, coordinateSystem) - - coordinateSystem.min.y = newMinRate - coordinateSystem.maxHeight = rateCalculationsContainer.frame.height - coordinateSystem.recalculateScale() - } - } - - function positioningPhysics() { - /* Container Limits */ - - let upCorner = { - x: 0, - y: 0 - } - - let bottonCorner = { - x: limitingContainer.frame.width, - y: limitingContainer.frame.height - } - - upCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(upCorner, limitingContainer) - bottonCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bottonCorner, limitingContainer) - - upCorner = limitingContainer.fitFunction(upCorner, true) - bottonCorner = limitingContainer.fitFunction(bottonCorner, true) - - /* We will check if we need to change the bottom because of being one of many scales of the same type */ - let displaceFactor = 0 - if (thisObject.payload.parentNode === undefined) { return } // This happens when in the process of deleting the scale, timeline chart or time machine. - if (thisObject.payload.parentNode.type === 'Timeline Chart') { - if (thisObject.payload.parentNode.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload.parentNode.rateScale !== undefined) { - if (thisObject.payload.parentNode.payload.parentNode.rateScale.payload.isVisible === true) { - displaceFactor++ - } - } - for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { - let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] - if (timelineChart.rateScale !== undefined) { - if (thisObject.payload.node.id !== timelineChart.rateScale.id) { - if (timelineChart.rateScale.payload.isVisible === true) { - displaceFactor++ - } - } else { - break - } - } - } - } - } - bottonCorner.x = bottonCorner.x - thisObject.container.frame.width * displaceFactor - - /* Mouse Position Rate Calculation */ - let ratePoint = { - x: 0, - y: canvas.mouse.position.y - } - - thisObject.rate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtBrowserCanvas(ratePoint, rateCalculationsContainer, coordinateSystem) - - /* rateScale Positioning */ - ratePoint = { - x: limitingContainer.frame.width, - y: 0 - } - - ratePoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(ratePoint, limitingContainer.frame.container) - ratePoint.y = canvas.mouse.position.y - thisObject.container.frame.height / 2 + thisObject.container.frame.height - - /* Checking against the container limits. */ - if (ratePoint.x < upCorner.x) { ratePoint.x = upCorner.x } - if (ratePoint.x + thisObject.container.frame.width > bottonCorner.x) { ratePoint.x = bottonCorner.x } - if (ratePoint.y < upCorner.y + thisObject.container.frame.height) { ratePoint.y = upCorner.y + thisObject.container.frame.height } - if (ratePoint.y > bottonCorner.y) { ratePoint.y = bottonCorner.y } - - thisObject.container.frame.position.y = ratePoint.y - thisObject.container.frame.height - thisObject.container.frame.position.x = ratePoint.x - thisObject.container.frame.width - - thisObject.isVisible = true - thisObject.payload.isVisible = true - if (thisObject.container.frame.position.y + thisObject.container.frame.height * 2 > bottonCorner.y || - thisObject.container.frame.position.y - thisObject.container.frame.height * 1 < upCorner.y || - thisObject.container.frame.position.x < upCorner.x - ) { - thisObject.isVisible = false - thisObject.payload.isVisible = false - } - if (thisObject.layersOn === 0) { - thisObject.isVisible = false - thisObject.payload.isVisible = false - } - - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_SCALES) { - thisObject.isVisible = false - } - } - - function draw() { - drawScaleBox() - autoScaleButton.draw() - if (visible === false) { - drawScaleDisplayCover(thisObject.container) - } - } - - function drawForeground() { - if (isMouseOver === true) { - drawScaleBox() - autoScaleButton.draw() - } - } - - function drawBackground() { - drawScale() - } - - function drawScale() { - const SEPARATION = 50 - const NUMBER_OF_LABELS = Math.trunc(UI.projects.superalgos.spaces.chartingSpace.viewport.height / SEPARATION) - const FONT_SIZE = 15 - - for (let i = 0; i <= NUMBER_OF_LABELS; i++) { - let ratePoint1 = { - x: 0, - y: TOP_SPACE_HEIGHT + SEPARATION * (i + 1) - } - let ratePoint2 = { - x: 0, - y: TOP_SPACE_HEIGHT + SEPARATION * (i + 0) - } - - let rate = UI.projects.superalgos.utilities.dateRateTransformations.getRateFromPointAtBrowserCanvas(ratePoint1, rateCalculationsContainer, coordinateSystem) - let labels = scaleLabels(rate, false) - let decimalsDisplace = labels[1].length * FONT_SIZE * FONT_ASPECT_RATIO - - let fitPoint1 = thisObject.fitFunction(ratePoint1) - let fitPoint2 = thisObject.fitFunction(ratePoint2) - - if (fitPoint1.y === ratePoint1.y && fitPoint2.y === ratePoint2.y) { - UI.projects.superalgos.utilities.drawPrint.drawLabel(labels[1], 1 / 2, 0, 0, 0, FONT_SIZE, thisObject.container, UI_COLOR.GREY, undefined, ratePoint1.y) - UI.projects.superalgos.utilities.drawPrint.drawLabel(labels[2], 1 / 2, 0, decimalsDisplace, -5, 9, thisObject.container, UI_COLOR.GREY, undefined, ratePoint1.y) - } - } - } - - function drawScaleBox() { - if (thisObject.rate === undefined) { return } - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - - let icon1 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.payload.parentNode.project, thisObject.payload.node.payload.parentNode.type) - let icon2 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - - let backgroundColor = UI_COLOR.BLACK - let labels = scaleLabels(thisObject.rate, true) - - drawScaleDisplay(labels[0], labels[1], labels[2], 0, 0, 0, icon1, icon2, thisObject.container, backgroundColor) - } - - function scaleLabels(rate, fixDecimals) { - if (rate < coordinateSystem.min.y) { - rate = coordinateSystem.min.y - } - if (rate > coordinateSystem.max.y) { - rate = coordinateSystem.max.y - } - - let label - - if (fixDecimals === true) { - label = rate.toFixed(10) - } else { - label = dynamicDecimals(rate) - } - - let labelArray = label.split('.') - let label1 = thisObject.payload.node.payload.parentNode.name - let label2 = (Math.trunc(rate)).toLocaleString() - let label3 = labelArray[1] - if (label3 === undefined) { label3 = '00' } - - if (rate < 1) { - label2 = label - label3 = '' - } - - if (scaleDisplayTimer > 0) { - label2 = (coordinateSystem.scale.y * 10000).toFixed(2) - label3 = 'SCALE' - } - - return [label1, label2, label3] - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeFrameScale.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeFrameScale.js deleted file mode 100644 index 9230541c5..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeFrameScale.js +++ /dev/null @@ -1,393 +0,0 @@ -function newTimeFrameScale() { - const MODULE_NAME = 'Time Frame Scale' - - let thisObject = { - timeFrame: undefined, - container: undefined, - fitFunction: undefined, - payload: undefined, - isVisible: true, - layersOn: undefined, - adjustTimeFrame: adjustTimeFrame, - onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer, - draw: draw, - drawForeground: drawForeground, - physics: physics, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - const FILES_PERIOD_DEFAULT_VALUE = 0 - const TIME_PERIOD_DEFAULT_VALUE = 0 - - let displayingRealTimeFrame = true - let greyOutCoverLayer = false - let isMouseOver - - let filePeriodIndex = FILES_PERIOD_DEFAULT_VALUE - let timeFrameIndex = TIME_PERIOD_DEFAULT_VALUE - let timeFramesMasterArray = [marketFilesPeriods, dailyFilePeriods] - let timeFrameLabel = '24-hs' - - let onMouseWheelEventSubscriptionId - let onViewportZoomChangedEventSubscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - - let limitingContainer - - setupContainer() - - let wheelDeltaDirection - let wheelDeltaCounter = 0 - - return thisObject - - function setupContainer() { - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isClickeable = false - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = 40 - } - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(onViewportZoomChangedEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.payload = undefined - - limitingContainer = undefined - } - - function initialize(pLimitingContainer) { - limitingContainer = pLimitingContainer - - readObjectState() - newTimeFrame() - - onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - onViewportZoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged) - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - } - - function onMouseOverSomeTimeMachineContainer(event) { - if (event.containerId === undefined) { - /* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */ - greyOutCoverLayer = false - } else { - if (event.containerId === thisObject.container.id) { - greyOutCoverLayer = false - } else { - greyOutCoverLayer = true - turnOnCounter = 0 - } - } - } - - function onMouseOver(event) { - isMouseOver = true - event.containerId = thisObject.container.id - thisObject.container.eventHandler.raiseEvent('onMouseOverScale', event) - } - - function onMouseNotOver() { - isMouseOver = false - } - - function physics() { - readObjectState() - positioningPhysics() - } - - function adjustTimeFrame(elementsPlotted) { - const ELEMENTS_PLOTTED_THREASHOLD = 500 - if ( - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel >= UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME && - displayingRealTimeFrame === false - ) { - let event = {} - event.timeFrame = thisObject.timeFrame - thisObject.container.eventHandler.raiseEvent('Time Frame Value Changed', event) - displayingRealTimeFrame = true - } - if ( - elementsPlotted > ELEMENTS_PLOTTED_THREASHOLD && - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME && - displayingRealTimeFrame === true - ) { - let event = {} - event.timeFrame = ONE_DAY_IN_MILISECONDS - thisObject.container.eventHandler.raiseEvent('Time Frame Value Changed', event) - displayingRealTimeFrame = false - } - } - - function positioningPhysics() { - /* Container Limits */ - - let upCorner = { - x: 0, - y: 0 - } - - let bottonCorner = { - x: limitingContainer.frame.width, - y: limitingContainer.frame.height - } - - upCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(upCorner, limitingContainer) - bottonCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bottonCorner, limitingContainer) - - upCorner = limitingContainer.fitFunction(upCorner, true) - bottonCorner = limitingContainer.fitFunction(bottonCorner, true) - - /* We will check if we need to change the bottom because of being one of many scales of the same type */ - let displaceFactor = 0 - if (thisObject.payload.parentNode === undefined) { return } // This happens when in the process of deleting the scale, timeline chart or time machine. - if (thisObject.payload.parentNode.type === 'Timeline Chart') { - if (thisObject.payload.parentNode.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload.parentNode.timeFrameScale !== undefined) { - if (thisObject.payload.parentNode.payload.parentNode.timeFrameScale.payload.isVisible === true) { - displaceFactor++ - } - } - for (let i = 0; i < thisObject.payload.parentNode.payload.parentNode.timelineCharts.length; i++) { - let timelineChart = thisObject.payload.parentNode.payload.parentNode.timelineCharts[i] - if (timelineChart.timeFrameScale !== undefined) { - if (thisObject.payload.node.id !== timelineChart.timeFrameScale.id) { - if (timelineChart.timeFrameScale.payload.isVisible === true) { - displaceFactor++ - } - } else { - break - } - } - } - } - } - bottonCorner.y = bottonCorner.y - thisObject.container.frame.height * displaceFactor - - /* Positioning */ - timePoint = { - x: 0, - y: limitingContainer.frame.height - } - - timePoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(timePoint, limitingContainer.frame.container) - timePoint.x = canvas.mouse.position.x - thisObject.container.frame.width / 2 - - /* Checking against the container limits. */ - if (timePoint.x < upCorner.x) { timePoint.x = upCorner.x } - if (timePoint.x + thisObject.container.frame.width > bottonCorner.x) { timePoint.x = bottonCorner.x - thisObject.container.frame.width } - if (timePoint.y < upCorner.y + thisObject.container.frame.height) { timePoint.y = upCorner.y + thisObject.container.frame.height } - if (timePoint.y > bottonCorner.y) { timePoint.y = bottonCorner.y } - - thisObject.container.frame.position.x = timePoint.x - thisObject.container.frame.position.y = timePoint.y - thisObject.container.frame.height - - thisObject.isVisible = true - thisObject.payload.isVisible = true - if (thisObject.container.frame.position.y + thisObject.container.frame.height > bottonCorner.y || - thisObject.container.frame.position.y - thisObject.container.frame.height * 3 < upCorner.y || - thisObject.container.frame.position.x < upCorner.x) { - thisObject.isVisible = false - thisObject.payload.isVisible = false - } - if (thisObject.layersOn === 0) { - thisObject.isVisible = false - thisObject.payload.isVisible = false - } - - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_SCALES) { - thisObject.isVisible = false - } - } - - function onViewportZoomChanged(event) { - if (event !== undefined) { // it is undefined when the level is just being animated. - if (event.shiftKey === false || event.shiftKey === undefined) { return } // with no shft key pressed, no automatic change in scale - let currentTimeFrame = thisObject.timeFrame - let timeFrame = recalculatePeriod(event.newLevel) - if (timeFrame !== currentTimeFrame) { - for (let i = 0; i < timeFramesMasterArray.length; i++) { - let timeFrameArray = timeFramesMasterArray[i] - for (let j = 0; j < timeFrameArray.length; j++) { - let record = timeFrameArray[j] - if (timeFrame === record[0]) { - filePeriodIndex = i - timeFrameIndex = j - } - } - } - newTimeFrame() - saveObjectState() - } - } - } - - function onMouseWheel(event) { - if (IS_MAC) { - let sensitivity - if (event.wheelDelta < 0) { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === -1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = -1 - return - } - } else { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === 1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = 1 - return - } - } - } - - let delta = event.wheelDelta - if (delta < 0) { - timeFrameIndex-- - if (timeFrameIndex < 0) { - filePeriodIndex-- - if (filePeriodIndex < 0) { - filePeriodIndex = 0 - timeFrameIndex = 0 - } else { - timeFrameIndex = timeFramesMasterArray[filePeriodIndex].length - 1 - } - } - } else { - timeFrameIndex++ - if (timeFrameIndex > timeFramesMasterArray[filePeriodIndex].length - 1) { - filePeriodIndex++ - if (filePeriodIndex > timeFramesMasterArray.length - 1) { - filePeriodIndex = timeFramesMasterArray.length - 1 - timeFrameIndex = timeFramesMasterArray[filePeriodIndex].length - 1 - } else { - timeFrameIndex = 0 - } - } - } - - newTimeFrame() - saveObjectState() - } - - function getContainer(point) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function saveObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - config.value = timeFrameLabel - thisObject.payload.node.config = JSON.stringify(config) - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function readObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - if (config.value !== timeFrameLabel) { - let found = false - for (let i = 0; i < timeFramesMasterArray.length; i++) { - let timeFrameArray = timeFramesMasterArray[i] - for (let j = 0; j < timeFrameArray.length; j++) { - let record = timeFrameArray[j] - if (config.value === record[1]) { - filePeriodIndex = i - timeFrameIndex = j - found = true - } - } - } - if (found === true) { - newTimeFrame() - } else { - saveObjectState() - } - } - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function newTimeFrame() { - let timeFrameArray = timeFramesMasterArray[filePeriodIndex] - thisObject.timeFrame = timeFrameArray[timeFrameIndex][0] - timeFrameLabel = timeFrameArray[timeFrameIndex][1] - // console.log('NEW TIME FRAME LABEL', timeFrameLabel) - let event = {} - event.timeFrame = thisObject.timeFrame - thisObject.container.eventHandler.raiseEvent('Time Frame Value Changed', event) - } - - function draw() { - drawScaleBox() - if (greyOutCoverLayer === true) { - drawScaleDisplayCover(thisObject.container) - } - } - - function drawForeground() { - if (isMouseOver === true) { - drawScaleBox() - } - } - - function drawScaleBox() { - if (timeFrameLabel === undefined) { return } - - let label = timeFrameLabel.split('-') - let label1 = thisObject.payload.node.payload.parentNode.name - let label2 = label[0] - let label3 = label[1].toUpperCase() - - let icon1 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.payload.parentNode.project, thisObject.payload.node.payload.parentNode.type) - let icon2 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - - let backgroundColor = UI_COLOR.BLACK - - drawScaleDisplay(label1, label2, label3, 0, 0, 0, icon1, icon2, thisObject.container, backgroundColor) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeScale.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeScale.js deleted file mode 100644 index 267470e55..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Scales/TimeScale.js +++ /dev/null @@ -1,364 +0,0 @@ -function newTimeScale() { - const MODULE_NAME = 'Time Scale' - - let thisObject = { - container: undefined, - date: undefined, - fitFunction: undefined, - payload: undefined, - isVisible: true, - fromDate: undefined, - toDate: undefined, - onMouseOverSomeTimeMachineContainer: onMouseOverSomeTimeMachineContainer, - physics: physics, - draw: draw, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isClickeable = false - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = 40 - - let visible = true - let autoScaleButton - let isMouseOver - - let onMouseWheelEventSubscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - let onScaleChangedEventSubscriptionId - - let coordinateSystem - let limitingContainer - - let wheelDeltaDirection - let wheelDeltaCounter = 0 - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - coordinateSystem.eventHandler.stopListening(onScaleChangedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.payload = undefined - - coordinateSystem = undefined - limitingContainer = undefined - - autoScaleButton.finalize() - autoScaleButton = undefined - } - - function initialize(pCoordinateSystem, pLimitingContainer) { - coordinateSystem = pCoordinateSystem - limitingContainer = pLimitingContainer - - onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - onScaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - - autoScaleButton = newAutoScaleButton() - autoScaleButton.container.connectToParent(thisObject.container) - autoScaleButton.initialize('X', coordinateSystem) - - readObjectState() - } - - function onMouseOverSomeTimeMachineContainer(event) { - if (event.containerId === undefined) { - /* This happens when the mouse over was not at the instance of a certain scale, but anywhere else. */ - visible = true - } else { - if (event.containerId === thisObject.container.id) { - visible = true - } else { - visible = false - turnOnCounter = 0 - } - } - } - - function onMouseOver(event) { - isMouseOver = true - event.containerId = thisObject.container.id - thisObject.container.eventHandler.raiseEvent('onMouseOverScale', event) - } - - function onMouseNotOver() { - isMouseOver = false - } - - function onMouseWheel(event) { - if (IS_MAC) { - let sensitivity - if (event.wheelDelta < 0) { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === -1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = -1 - return - } - } else { - if (event.shiftKey === true) { - sensitivity = 20 - } else { - sensitivity = 5 - } - if (wheelDeltaDirection === 1) { - wheelDeltaCounter++ - if (wheelDeltaCounter < sensitivity) { - return - } else { - wheelDeltaCounter = 0 - } - } else { - wheelDeltaCounter = 0 - wheelDeltaDirection = 1 - return - } - } - } - - if (event.shiftKey === true) { - autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event) - return - } - let factor - let morePower = 10 - if (event.buttons === 4) { morePower = 1 } // Mouse wheel pressed. - - let delta = event.wheelDelta - if (delta < 0) { - factor = -0.01 * morePower - } else { - factor = 0.01 * morePower - } - - coordinateSystem.zoomX(factor, event, limitingContainer, MODULE_NAME) - } - - function onScaleChanged() { - saveObjectState() - } - - function getContainer(point, purpose) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function saveObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - config.fromDate = (new Date(coordinateSystem.min.x)).toISOString() - config.toDate = (new Date(coordinateSystem.max.x)).toISOString() - config.autoMinScale = coordinateSystem.autoMinXScale - config.autoMaxScale = coordinateSystem.autoMaxXScale - thisObject.payload.node.config = JSON.stringify(config, null, 4) - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function readObjectState() { - try { - let config = JSON.parse(thisObject.payload.node.config) - - if ( - (isNaN(Date.parse(config.fromDate)) || config.fromDate === null || config.fromDate === undefined) || - (isNaN(Date.parse(config.toDate)) || config.toDate === null || config.toDate === undefined) - ) { - // not using this value - } else { - if (thisObject.fromDate !== Date.parse(config.fromDate) || thisObject.toDate !== Date.parse(config.toDate)) { - thisObject.fromDate = Date.parse(config.fromDate) - thisObject.toDate = Date.parse(config.toDate) - coordinateSystem.min.x = thisObject.fromDate - coordinateSystem.max.x = thisObject.toDate - - if (config.autoMinScale !== undefined && (config.autoMinScale === true || config.autoMinScale === false) && config.autoMaxScale !== undefined && (config.autoMaxScale === true || config.autoMaxScale === false)) { - coordinateSystem.autoMinXScale = config.autoMinScale - coordinateSystem.autoMaxXScale = config.autoMaxScale - autoScaleButton.setStatus(config.autoMinScale, config.autoMaxScale) - } - coordinateSystem.recalculateScale() - } - } - saveObjectState() // this overrides any invalid value at the config. - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function physics() { - readObjectState() - positioningPhysics() - } - - function positioningPhysics() { - /* Container Limits */ - - let upCorner = { - x: 0, - y: 0 - } - - let bottonCorner = { - x: limitingContainer.frame.width, - y: limitingContainer.frame.height - } - - upCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(upCorner, limitingContainer) - bottonCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bottonCorner, limitingContainer) - - upCorner = limitingContainer.fitFunction(upCorner, true) - bottonCorner = limitingContainer.fitFunction(bottonCorner, true) - - /* Mouse Position Date Calculation */ - let timePoint = { - x: canvas.mouse.position.x, - y: 0 - } - - let mouseDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(timePoint, limitingContainer, coordinateSystem) - - thisObject.date = new Date(mouseDate) - - /* timeScale Positioning */ - timePoint = { - x: 0, - y: 0 - } - - timePoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(timePoint, limitingContainer.frame.container) - timePoint.x = canvas.mouse.position.x - thisObject.container.frame.width / 2 - - /* Checking against the container limits. */ - if (timePoint.x < upCorner.x) { timePoint.x = upCorner.x } - if (timePoint.x + thisObject.container.frame.width > bottonCorner.x) { timePoint.x = bottonCorner.x - thisObject.container.frame.width } - if (timePoint.y < upCorner.y) { timePoint.y = upCorner.y } - if (timePoint.y + thisObject.container.frame.height > bottonCorner.y) { timePoint.y = bottonCorner.y - thisObject.container.frame.height } - - thisObject.container.frame.position.x = timePoint.x - thisObject.container.frame.position.y = timePoint.y - - thisObject.isVisible = true - if (thisObject.container.frame.position.y + thisObject.container.frame.height * 4 > bottonCorner.y || - thisObject.container.frame.position.y < upCorner.y || - thisObject.container.frame.position.x < upCorner.x) { - thisObject.isVisible = false - } - - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_SCALES) { - thisObject.isVisible = false - } - } - - function drawBackground() { - drawScale() - } - - function drawScale() { - const SEPARATION = 150 - const NUMBER_OF_LABELS = Math.trunc(UI.projects.superalgos.spaces.chartingSpace.viewport.width / SEPARATION) - const FONT_SIZE = 15 - - for (let i = 0; i <= NUMBER_OF_LABELS; i++) { - let timePoint = { - x: SEPARATION * (i + 1), - y: 0 - } - - let time = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(timePoint, limitingContainer, coordinateSystem) - let labels = scaleLabels(time, true) - let labelDisplace = labels[1].length * FONT_SIZE * FONT_ASPECT_RATIO - - let timePoint1 = { - x: SEPARATION * (i + 1) - labelDisplace, - y: 0 - } - let timePoint2 = { - x: SEPARATION * (i + 1) + labelDisplace, - y: 0 - } - - let fitPoint1 = thisObject.fitFunction(timePoint1) - let fitPoint2 = thisObject.fitFunction(timePoint2) - - if (fitPoint1.x === timePoint1.x && fitPoint2.x === timePoint2.x) { - UI.projects.superalgos.utilities.drawPrint.drawLabel(labels[1], 1 / 2, 0, 18, 17, FONT_SIZE, thisObject.container, UI_COLOR.GREY, timePoint1.x, undefined) - UI.projects.superalgos.utilities.drawPrint.drawLabel(labels[2], 1 / 2, 0, 18, 30, 12, thisObject.container, UI_COLOR.GREY, timePoint1.x, undefined) - } - } - } - - function draw() { - drawScaleBox() - autoScaleButton.draw() - if (visible === false) { - drawScaleDisplayCover(thisObject.container) - } - } - - function drawForeground() { - if (isMouseOver === true) { - drawScaleBox() - autoScaleButton.draw() - } - } - - function drawScaleBox() { - if (thisObject.date === undefined) { return } - - let icon1 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.payload.parentNode.project, thisObject.payload.node.payload.parentNode.type) - let icon2 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - - let backgroundColor = UI_COLOR.BLACK - let labels = scaleLabels(thisObject.date) - - drawScaleDisplay(labels[0], labels[1], labels[2], 0, 0, 0, icon1, icon2, thisObject.container, backgroundColor) - } - - function scaleLabels(date, excludeYear) { - let label = date.toUTCString() - let labelArray = label.split(' ') - let label1 = thisObject.payload.node.payload.parentNode.name - let label2 = labelArray[1] + ' ' + labelArray[2] + ' ' + labelArray[3] - let label3 = labelArray[4] - - if (excludeYear === true) { - label2 = labelArray[1] + ' ' + labelArray[2] - } - - return [label1, label2, label3] - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimeMachine.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimeMachine.js deleted file mode 100644 index d3bd505de..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimeMachine.js +++ /dev/null @@ -1,835 +0,0 @@ -/* - -Markets are a function of time. When watching them, end users must be positioned at one particular point in time. The system currently allows users -to position themselves at any time they like. - -In the future, it will be usefull to explore markets and compare them at different times simultaneously. Anticipating that future this module exists. -All the timelineCharts that depand on a datetime are children of this object Time Machine. In the future we will allow users to have more than one Time Machine, -each one with it own timelineCharts, and each one positioned at an especific point in titme. - -*/ - -function newTimeMachine() { - const MODULE_NAME = 'Time Machine' - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let timeFrame = INITIAL_TIME_PERIOD - - let thisObject = { - container: undefined, - timeScale: undefined, - rateScale: undefined, - payload: undefined, - edgeEditor: undefined, - onFocus: undefined, - onKeyPressed: onKeyPressed, - timelineCharts: [], - fitFunction: fitFunction, - physics: physics, - draw: draw, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - let timeMachineCoordinateSystem = newCoordinateSystem() - timeMachineCoordinateSystem.name = 'TIME MACHINE' - - let mouse = { - position: { - x: 0, - y: 0 - } - } - - let tabAnimation = 0 - let tabAnimationStatus = 'Close' - let tabAnimationCounter = 0 - let wasOnFocus = false - let drawScales = false - let syncWithDesignerLoop = 0 - let timelineChartsMap = new Map() - - let onMouseOverEventSuscriptionId - let onMouseNotOverEventSuscriptionId - let timeScaleMouseOverEventSuscriptionId - let rateScaleMouseOverEventSuscriptionId - let timeFrameScaleEventSuscriptionId - let timeFrameScaleMouseOverEventSuscriptionId - let onScaleChangedEventSubscriptionId - - setupContainer() - return thisObject - - function setupContainer() { - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.fitFunction = thisObject.fitFunction - thisObject.container.isDraggeable = false - thisObject.container.insideViewport = true - thisObject.container.detectMouseOver = true - - thisObject.container.frame.width = browserCanvas.width / TIME_MACHINE_WIDTH - thisObject.container.frame.height = (browserCanvas.height - TOP_SPACE_HEIGHT - COCKPIT_SPACE_HEIGHT) / TIME_MACHINE_HEIGHT - } - - function finalize() { - timeMachineCoordinateSystem.eventHandler.stopListening(onScaleChangedEventSubscriptionId) - - if (thisObject.timeScale !== undefined) { - finalizeTimeScale() - } - - if (thisObject.rateScale !== undefined) { - finalizeRateScale() - } - - if (thisObject.timeFrameScale !== undefined) { - finalizeTimeFrameScale() - } - - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSuscriptionId) - - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[i] - timelineChart.container.eventHandler.stopListening(timelineChart.onChildrenMouseOverEventSuscriptionId) - timelineChart.finalize() - } - - thisObject.timelineCharts = undefined - thisObject.fitFunction = undefined - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.edgeEditor = undefined - - mouse = undefined - timelineChartsMap = undefined - - timeMachineCoordinateSystem.finalize() - timeMachineCoordinateSystem = undefined - } - - function finalizeTimeScale() { - if (thisObject.timeScale === undefined) { return } - - thisObject.timeScale.container.eventHandler.stopListening(timeScaleMouseOverEventSuscriptionId) - thisObject.timeScale.finalize() - thisObject.timeScale = undefined - } - - function finalizeRateScale() { - if (thisObject.rateScale === undefined) { return } - - thisObject.rateScale.container.eventHandler.stopListening(rateScaleMouseOverEventSuscriptionId) - thisObject.rateScale.finalize() - thisObject.rateScale = undefined - } - - function finalizeTimeFrameScale() { - if (thisObject.timeFrameScale === undefined) { return } - - thisObject.timeFrameScale.container.eventHandler.stopListening(timeFrameScaleEventSuscriptionId) - thisObject.timeFrameScale.container.eventHandler.stopListening(timeFrameScaleMouseOverEventSuscriptionId) - thisObject.timeFrameScale.finalize() - thisObject.timeFrameScale = undefined - } - - function initialize(callBackFunction) { - timeFrame = INITIAL_TIME_PERIOD - UI.projects.superalgos.utilities.loadSaveFrame.loadFrame(thisObject.payload, thisObject.container.frame) - setInitialPosition() - UI.projects.superalgos.utilities.loadSaveFrame.saveFrame(thisObject.payload, thisObject.container.frame) - - recalculateCoordinateSystem() - recalculateCurrentDatetime() - - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - onScaleChangedEventSubscriptionId = timeMachineCoordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - - thisObject.edgeEditor = newEdgeEditor() - thisObject.edgeEditor.initialize(timeMachineCoordinateSystem) - thisObject.edgeEditor.container.connectToParent(thisObject.container, true, true, false, true, true, true) - - callBackFunction() - } - - function setInitialPosition() { - - if (thisObject.container.frame.position.x === 0 && thisObject.container.frame.position.y === 0) { - let timeMachineIndex = UI.projects.superalgos.utilities.children.findChildIndexAtParentNode(thisObject.payload.node) - let dashboardIndex = UI.projects.superalgos.utilities.children.findChildIndexAtParentNode(thisObject.payload.parentNode) - - thisObject.container.frame.position.x = thisObject.container.frame.width * timeMachineIndex * 2 - thisObject.container.frame.position.y = thisObject.container.frame.height * dashboardIndex * 2 - } - } - - function onKeyPressed(event) { - thisObject.edgeEditor.onKeyPressed(event) - } - - function onMouseOver(event) { - drawScales = true - - mouse.position.x = event.x - mouse.position.y = event.y - - if (thisObject.timeScale !== undefined) { - thisObject.timeScale.onMouseOverSomeTimeMachineContainer(event) - } - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.onMouseOverSomeTimeMachineContainer(event) - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.onMouseOverSomeTimeMachineContainer(event) - } - } - - function onMouseNotOver(event) { - drawScales = false - - if (thisObject.timeScale !== undefined) { - thisObject.timeScale.visible = false - } - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.visible = false - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.visible = false - } - } - - function initializeTimeScale() { - thisObject.timeScale = newTimeScale() - thisObject.timeScale.fitFunction = thisObject.fitFunction - thisObject.timeScale.payload = thisObject.payload.node.timeScale.payload - - timeScaleMouseOverEventSuscriptionId = thisObject.timeScale.container.eventHandler.listenToEvent('onMouseOverScale', timeScaleMouseOver) - thisObject.timeScale.initialize(timeMachineCoordinateSystem, thisObject.container) - - function timeScaleMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onMouseOver', event) - } - } - - function initializeRateScale() { - thisObject.rateScale = newRateScale() - thisObject.rateScale.fitFunction = thisObject.fitFunction - thisObject.rateScale.payload = thisObject.payload.node.rateScale.payload - - rateScaleMouseOverEventSuscriptionId = thisObject.rateScale.container.eventHandler.listenToEvent('onMouseOverScale', rateScaleMouseOver) - thisObject.rateScale.initialize(timeMachineCoordinateSystem, thisObject.container, thisObject.container) - - function rateScaleMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onMouseOver', event) - } - } - - function initializeTimeFrameScale() { - thisObject.timeFrameScale = newTimeFrameScale() - thisObject.timeFrameScale.fitFunction = thisObject.fitFunction - thisObject.timeFrameScale.payload = thisObject.payload.node.timeFrameScale.payload - - timeFrameScaleEventSuscriptionId = thisObject.timeFrameScale.container.eventHandler.listenToEvent('Time Frame Value Changed', timeFrameScaleValueChanged) - timeFrameScaleMouseOverEventSuscriptionId = thisObject.timeFrameScale.container.eventHandler.listenToEvent('onMouseOverScale', timeFrameScaleMouseOver) - thisObject.timeFrameScale.initialize(thisObject.container) - - function timeFrameScaleValueChanged(event) { - let currentTimeFrame = timeFrame - timeFrame = event.timeFrame - if (timeFrame !== currentTimeFrame) { - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[i] - timelineChart.upstreamTimeFrame = timeFrame - if (timelineChart.timeFrameScale === undefined) { - timelineChart.setTimeFrame(timeFrame) - } - } - } - } - function timeFrameScaleMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onMouseOver', event) - } - } - - function getContainer(point, purpose) { - let container - - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { - container = thisObject.rateScale.getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - return container - } else { - if (purpose === GET_CONTAINER_PURPOSE.DRAGGING && container.isClickeable === true) { - return container - } - } - } - } - - if (thisObject.timeScale !== undefined && thisObject.timeScale.isVisible === true) { - container = thisObject.timeScale.getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - return container - } else { - if (purpose === GET_CONTAINER_PURPOSE.DRAGGING && container.isClickeable === true) { - return container - } - } - } - } - - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { - container = thisObject.timeFrameScale.getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - return container - } - } - } - - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - container = thisObject.timelineCharts[i].getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - if (thisObject.container.frame.isThisPointHere(point) === true) { - return container - } - } else { - if (purpose === GET_CONTAINER_PURPOSE.DRAGGING && container.isClickeable === true) { - if (thisObject.container.frame.isThisPointHere(point) === true) { - return container - } - } - } - } - } - - container = thisObject.edgeEditor.getContainer(point, purpose) - if (container !== undefined) { - return container - } else { - if (thisObject.container.isForThisPurpose(purpose)) { - if (thisObject.container.frame.isThisPointHere(point) === true) { - return thisObject.container - } - } - } - } - - function onScaleChanged() { - recalculateCurrentDatetime() - } - - function recalculateCurrentDatetime() { - let center = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height / 2 - } - - datetime = new Date(UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtContainer(center, thisObject.container, timeMachineCoordinateSystem)) - - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[i] - timelineChart.setDatetime(datetime) - } - } - - function fitFunction(point, fullVisible, margin, topMargin, bottomMargin) { - /* We prevent a point to be out of the container AND out of the Charting Space in general */ - - let returnPoint = { - x: point.x, - y: point.y - } - - let upCorner = { - x: 0, - y: 0 - } - - let bottonCorner = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - upCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(upCorner, thisObject.container) - bottonCorner = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bottonCorner, thisObject.container) - - /* Checking against the container limits. */ - if (margin === undefined) { margin = 0 } - if (topMargin === undefined) { topMargin = 0 } - if (bottomMargin === undefined) { bottomMargin = 0 } - - if (returnPoint.x - margin < upCorner.x) { returnPoint.x = upCorner.x + margin } - if (returnPoint.x + margin > bottonCorner.x) { returnPoint.x = bottonCorner.x - margin } - if (returnPoint.y - margin - topMargin < upCorner.y) { returnPoint.y = upCorner.y + margin + topMargin } - if (returnPoint.y + margin + bottomMargin > bottonCorner.y) { returnPoint.y = bottonCorner.y - margin - bottomMargin } - - returnPoint = UI.projects.superalgos.spaces.chartingSpace.fitFunction(returnPoint, fullVisible) - - return returnPoint - } - - function physics() { - thisObject.edgeEditor.physics() - timeMachineCoordinateSystem.physics() - - UI.projects.superalgos.utilities.loadSaveFrame.saveFrame(thisObject.payload, thisObject.container.frame) - if (thisObject.container.frame.isInViewPort()) { - childrenPhysics() - syncWithDesigner() - } - panelPhysics() - onFocusPhysics() - tabAnimationPhysics() - } - - function tabAnimationPhysics() { - const MAX_COUNTER_VALUE = 40 - const STEP = 10 - - if (wasOnFocus === true && thisObject.onFocus === false) { - tabAnimationStatus = 'Closing' - } - if (wasOnFocus === false && thisObject.onFocus === true) { - tabAnimationStatus = 'Opening' - } - - if (tabAnimationStatus === 'Closing') { - tabAnimationCounter = tabAnimationCounter - STEP - if (tabAnimationCounter <= 0) { - tabAnimationCounter = 0 - tabAnimationStatus = 'Closed' - } - } - if (tabAnimationStatus === 'Opening') { - tabAnimationCounter = tabAnimationCounter + STEP - if (tabAnimationCounter >= MAX_COUNTER_VALUE) { - tabAnimationCounter = MAX_COUNTER_VALUE - tabAnimationStatus = 'Open' - } - } - } - - function onFocusPhysics() { - wasOnFocus = thisObject.onFocus - if (thisObject.edgeEditor.isMouseOver === true) { - thisObject.onFocus = true - } else { - thisObject.onFocus = false - } - } - - function panelPhysics() { - if ( - thisObject.container.frame.isInViewPort() && - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomLevel >= UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_NOT_HIDDING_PANELS) { - UI.projects.superalgos.spaces.panelSpace.unHide(thisObject.payload.node.id, 'Layers Panel') - UI.projects.superalgos.spaces.panelSpace.unHide(thisObject.payload.node.id, 'Plotter Panel') - return - } - - if ( - thisObject.container.frame.isCenterInViewPort() && - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomLevel >= UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_HIDDING_PANELS - ) { - UI.projects.superalgos.spaces.panelSpace.unHide(thisObject.payload.node.id, 'Layers Panel') - UI.projects.superalgos.spaces.panelSpace.unHide(thisObject.payload.node.id, 'Plotter Panel') - } else { - UI.projects.superalgos.spaces.panelSpace.hide(thisObject.payload.node.id, 'Layers Panel') - UI.projects.superalgos.spaces.panelSpace.hide(thisObject.payload.node.id, 'Plotter Panel') - } - } - - function syncWithDesigner() { - syncWithDesignerTimelineCharts() - syncWithDesignerScales() - } - - function syncWithDesignerScales() { - if (thisObject.payload.node === undefined) { - finalizeTimeScale() - finalizeRateScale() - finalizeTimeFrameScale() - return - } - if (thisObject.payload.node.timeScale === undefined && thisObject.timeScale !== undefined) { - finalizeTimeScale() - } - if (thisObject.payload.node.timeScale !== undefined && thisObject.timeScale === undefined) { - initializeTimeScale() - } - if (thisObject.payload.node.rateScale === undefined && thisObject.rateScale !== undefined) { - finalizeRateScale() - } - if (thisObject.payload.node.rateScale !== undefined && thisObject.rateScale === undefined) { - initializeRateScale() - } - if (thisObject.payload.node.timeFrameScale === undefined && thisObject.timeFrameScale !== undefined) { - finalizeTimeFrameScale() - } - if (thisObject.payload.node.timeFrameScale !== undefined && thisObject.timeFrameScale === undefined) { - initializeTimeFrameScale() - } - } - - function syncWithDesignerTimelineCharts() { - syncWithDesignerLoop = syncWithDesignerLoop + 0.00000000001 - - for (let j = 0; j < thisObject.payload.node.timelineCharts.length; j++) { - let node = thisObject.payload.node.timelineCharts[j] - let timelineChart = timelineChartsMap.get(node.id) - if (timelineChart === undefined) { - /* The timeline timelineChart node is new, thus we need to initialize a new timelineChart */ - initializeTimelineChart(node, syncWithDesignerLoop) - } else { - /* The time machine already exists, we tag it as existing at the current loop. */ - timelineChart.syncWithDesignerLoop = syncWithDesignerLoop - } - } - - /* We check all the timeMachines we have to see if we need to remove any of them */ - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[i] - if (timelineChart.syncWithDesignerLoop < syncWithDesignerLoop) { - /* Must be removed */ - timelineChart.container.eventHandler.stopListening(timelineChart.onChildrenMouseOverEventSuscriptionId) - timelineChart.finalize() - timelineChartsMap.delete(timelineChart.nodeId) - thisObject.timelineCharts.splice(i, 1) - /* We remove one at the time */ - return - } - } - - function initializeTimelineChart(node, syncWithDesignerLoop) { - let timelineChart = newTimelineChart() - timelineChart.syncWithDesignerLoop = syncWithDesignerLoop - timelineChart.payload = node.payload - timelineChart.nodeId = node.id - timelineChartsMap.set(node.id, timelineChart) - timelineChart.payload.uiObject.setValue('Loading...') - - /* Setting up the new timeline timelineChart. */ - timelineChart.container.connectToParent(thisObject.container, true, true, false, true, true, true, false, false, true) - timelineChart.container.fitFunction = thisObject.container.fitFunction - timelineChart.fitFunction = thisObject.fitFunction - timelineChart.container.frame.width = thisObject.container.frame.width - timelineChart.container.frame.height = thisObject.container.frame.height - timelineChart.container.frame.position.x = 0 - timelineChart.container.frame.position.y = 0 - timelineChart.initialize(timeMachineCoordinateSystem, timeFrame) - - /* we will store the event suscription id as a property of the timelineChart, to avoid keeping it an a separate array */ - timelineChart.onChildrenMouseOverEventSuscriptionId = timelineChart.container.eventHandler.listenToEvent('onChildrenMouseOver', onChildrenMouseOver) - - thisObject.timelineCharts.push(timelineChart) - timelineChart.payload.uiObject.setValue('') - - function onChildrenMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onMouseOver', event) - } - } - } - - function childrenPhysics() { - if (thisObject.timeScale !== undefined) { - thisObject.timeScale.physics() - } - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.physics() - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.physics() - } - - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[i] - timelineChart.physics() - } - } - - function drawBackground() { - drawChartsBackground() - if (thisObject.container.frame.isInViewPort()) { - if (drawScales === true) { - if (thisObject.timeScale !== undefined && thisObject.timeScale.isVisible === true) { thisObject.timeScale.drawBackground() } - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.drawBackground() } - } - - let maxElementsPlotted = 0 - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[thisObject.timelineCharts.length - i - 1] - let elementsPlotted = timelineChart.drawBackground() - if (elementsPlotted !== undefined) { - if (elementsPlotted > maxElementsPlotted) { - maxElementsPlotted = elementsPlotted - } - } - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.adjustTimeFrame(maxElementsPlotted) - } - } - } - - function drawChartsBackground() { - UI.projects.superalgos.utilities.drawPrint.drawContainerBackground(thisObject.container, UI_COLOR.WHITE, 0.5, thisObject.fitFunction) - } - - function draw() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - if (thisObject.container.frame.isInViewPort()) { - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[thisObject.timelineCharts.length - i - 1] - timelineChart.draw() - } - - if (drawScales === true) { - if (thisObject.timeScale !== undefined && thisObject.timeScale.isVisible === true) { thisObject.timeScale.draw() } - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { thisObject.timeFrameScale.draw() } - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.draw() } - } - } else { - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_TIME_MACHINES_ICONIZED) { - let icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - let imageSize = 40 - let imagePosition = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height / 2 - } - - imagePosition = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(imagePosition, thisObject.container) - imagePosition = thisObject.fitFunction(imagePosition, true) - - browserCanvasContext.drawImage( - icon, - imagePosition.x - imageSize / 2, - imagePosition.y - imageSize / 2, - imageSize, - imageSize) - } - } - } - } - } - - function drawForeground() { - if (thisObject.container.frame.isInViewPort()) { - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelineChart = thisObject.timelineCharts[thisObject.timelineCharts.length - i - 1] - timelineChart.drawForeground() - } - - if (drawScales === true) { - if (thisObject.timeScale !== undefined && thisObject.timeScale.isVisible === true) { thisObject.timeScale.drawForeground() } - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { thisObject.timeFrameScale.drawForeground() } - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.drawForeground() } - } - - drawLabel() - thisObject.edgeEditor.drawForeground() - } - } - - function drawLabel() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - /* Draw Title Above the Container */ - let position = { - x: 0, - y: 0 - } - let imageSize = 12 - let fontSize = 12 - let opacity = 1 - let icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - - position = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(position, thisObject.container) - - let label = thisObject.payload.node.name - let description = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'description') - - if (description !== undefined) { - label = description - } - UI.projects.superalgos.utilities.drawPrint.printLabel(label, position.x + 20, undefined, undefined, position.y - 10, opacity, fontSize, undefined, 'Left') - - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - browserCanvasContext.drawImage( - icon, position.x + 5, - position.y - 18, - imageSize, - imageSize) - } - } - - imageSize = 13 - fontSize = 15 - let exchangeMarkets = new Map() - - for (let i = 0; i < thisObject.timelineCharts.length; i++) { - let timelinechart = thisObject.timelineCharts[i] - if (timelinechart.layerManager !== undefined) { - let layers = timelinechart.layerManager.layers - for (let j = 0; j < layers.length; j++) { - let layer = layers[j] - - let exchangeMarket = { - exchangeName: layer.exchange.name, - marketName: layer.market, - exchangeIcon: layer.exchangeIcon, - baseAssetIcon: layer.baseAssetIcon, - quotedAssetIcon: layer.quotedAssetIcon - } - exchangeMarkets.set(exchangeMarket.exchangeName + '-' + exchangeMarket.marketName, exchangeMarket) - } - } - } - - drawTab(0, 0, exchangeMarkets.size * tabAnimationCounter, 90, thisObject.container) - - const INTER_EXCHANGE_SPACE = 60 - const INTER_MARKET_SPACE = -100 - - if (tabAnimationStatus === 'Open') { - drawMarketNames() - } - - function drawMarketNames() { - exchangeMarkets.forEach((exchangeMarket, i) => { - browserCanvasContext.save() - browserCanvasContext.translate(position.x, position.y) - browserCanvasContext.rotate(-Math.PI / 2) - - let xOffSet = -80 - - icon = exchangeMarket.exchangeIcon - - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - browserCanvasContext.drawImage( - icon, - -20 + xOffSet, - -43, - imageSize, - imageSize) - } - } - - UI.projects.superalgos.utilities.drawPrint.printLabel(exchangeMarket.exchangeName, -5 + xOffSet, undefined, undefined, -30, opacity, fontSize, UI_COLOR.GREY, 'Left') - - position.x = position.x + INTER_EXCHANGE_SPACE - - icon = exchangeMarket.baseAssetIcon - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - browserCanvasContext.drawImage( - icon, - -20 + xOffSet, - -22, - imageSize, - imageSize) - } - } - - UI.projects.superalgos.utilities.drawPrint.printLabel(exchangeMarket.marketName, -5 + xOffSet, undefined, undefined, -10, opacity, fontSize, UI_COLOR.GREY, 'Left') - - icon = exchangeMarket.quotedAssetIcon - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - browserCanvasContext.drawImage( - icon, - +50 + xOffSet, - -22, - imageSize, - imageSize) - } - } - - position.x = position.x + INTER_MARKET_SPACE - - browserCanvasContext.restore() - }) - } - - function drawTab(x, y, width, height, container) { - const GRADIENT = 0 - const X_OFFSET = -3 - const Y_OFFSET = 13 - const TAB_CORNERS_RADIUS = 5 - - let point = { - x: x, - y: y - } - point = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point, container) - - let point1 = { - x: point.x + X_OFFSET, - y: point.y + Y_OFFSET - } - - let point2 = { - x: point.x + X_OFFSET, - y: point.y + height + Y_OFFSET - } - - let point3 = { - x: point.x - width + X_OFFSET, - y: point.y + height - GRADIENT + Y_OFFSET - } - - let point4 = { - x: point.x - width + X_OFFSET, - y: point.y + GRADIENT + Y_OFFSET - } - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.arc(point3.x, point3.y - TAB_CORNERS_RADIUS, TAB_CORNERS_RADIUS, 0.5 * Math.PI, 1.0 * Math.PI) - // browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.arc(point4.x, point4.y + TAB_CORNERS_RADIUS, TAB_CORNERS_RADIUS, 1.0 * Math.PI, 1.5 * Math.PI) - browserCanvasContext.closePath() - browserCanvasContext.lineWidth = 1 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + '' - browserCanvasContext.stroke() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + '' - browserCanvasContext.fill() - } - } - - function recalculateCoordinateSystem() { - let minValue = { - x: MIN_PLOTABLE_DATE.valueOf(), - y: 0 - } - - let maxValue = { - x: MAX_PLOTABLE_DATE.valueOf(), - y: nextPorwerOf10(MAX_DEFAULT_RATE_SCALE_VALUE) / 4 - } - - timeMachineCoordinateSystem.initialize( - minValue, - maxValue, - thisObject.container.frame.width, - thisObject.container.frame.height - ) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimelineChart.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimelineChart.js deleted file mode 100644 index 6ad4163c0..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/TimelineChart.js +++ /dev/null @@ -1,429 +0,0 @@ -function newTimelineChart() { - const MODULE_NAME = 'Timeline Chart' - - let logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let timeFrame = INITIAL_TIME_PERIOD - let datetime = NEW_SESSION_INITIAL_DATE - - let thisObject = { - container: undefined, - fitFunction: undefined, - rateScale: undefined, - timeFrameScale: undefined, - payload: undefined, - layerManager: undefined, - plotterManager: undefined, - upstreamTimeFrame: undefined, - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - physics: physics, - draw: draw, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - let timeMachineCoordinateSystem - let timelineChartCoordinateSystem = newCoordinateSystem() - timelineChartCoordinateSystem.name = 'TIMELINE CHART' - - let coordinateSystem - - let layersPanel - let layersPanelHandle - - let onMouseOverEventSuscriptionId - let onMouseNotOverEventSuscriptionId - let rateScaleUpstreamEventSuscriptionId - let rateScaleMouseOverEventSuscriptionId - let timeFrameScaleEventSuscriptionId - let timeFrameScaleMouseOverEventSuscriptionId - let scaleChangedEventSubscriptionId - - let drawScales = false - let mouse = { - position: { - x: 0, - y: 0 - } - } - - setupContainer() - return thisObject - - function setupContainer() { - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.detectMouseOver = true - } - - function finalize() { - timeMachineCoordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - - if (thisObject.layerManager !== undefined) { - finalizeLayerManager() - } - - if (thisObject.rateScale !== undefined) { - finalizeRateScale() - } - - if (thisObject.timeFrameScale !== undefined) { - finalizeTimeFrameScale() - } - - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSuscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - - mouse = undefined - logger = undefined - - timeMachineCoordinateSystem = undefined - timelineChartCoordinateSystem.finalize() - timelineChartCoordinateSystem = undefined - coordinateSystem = undefined - layersPanel = undefined - layersPanelHandle = undefined - } - - function finalizeLayerManager() { - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.finalize() - } - thisObject.plotterManager = undefined - thisObject.layerManager = undefined - - UI.projects.superalgos.spaces.panelSpace.destroyPanel(layersPanelHandle) - } - - function finalizeTimeFrameScale() { - if (thisObject.timeFrameScale === undefined) { return } - - thisObject.timeFrameScale.container.eventHandler.stopListening(timeFrameScaleEventSuscriptionId) - thisObject.timeFrameScale.container.eventHandler.stopListening(timeFrameScaleMouseOverEventSuscriptionId) - thisObject.timeFrameScale.finalize() - thisObject.timeFrameScale = undefined - if (thisObject.upstreamTimeFrame !== undefined) { - timeFrame = thisObject.upstreamTimeFrame - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setTimeFrame(timeFrame) - } - } - } - - function finalizeRateScale() { - if (thisObject.rateScale === undefined) { return } - - thisObject.rateScale.container.eventHandler.stopListening(rateScaleMouseOverEventSuscriptionId) - thisObject.container.parentContainer.eventHandler.stopListening(rateScaleUpstreamEventSuscriptionId) - thisObject.rateScale.finalize() - thisObject.rateScale = undefined - - /* Resets the local container with the dimessions of its parent, the Time Machine */ - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - thisObject.container.frame.height = thisObject.container.parentContainer.frame.height - thisObject.container.frame.width = thisObject.container.parentContainer.frame.width - } - - function initialize(pTimeMachineCoordinateSystem, pTimeFrame) { - /* We load the logow we will need for the background. */ - - timeMachineCoordinateSystem = pTimeMachineCoordinateSystem - coordinateSystem = timeMachineCoordinateSystem - initializeCoordinateSystem() - - timeFrame = pTimeFrame - - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - scaleChangedEventSubscriptionId = timeMachineCoordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function initializeCoordinateSystem() { - let minValue = { - x: timeMachineCoordinateSystem.min.x, - y: 0 - } - - let maxValue = { - x: timeMachineCoordinateSystem.max.x, - y: nextPorwerOf10(MAX_DEFAULT_RATE_SCALE_VALUE) / 4 - } - - if (thisObject.rateScale !== undefined) { - minValue.y = thisObject.rateScale.minValue - maxValue.y = thisObject.rateScale.maxValue - } - - timelineChartCoordinateSystem.initialize( - minValue, - maxValue, - thisObject.container.frame.width, - thisObject.container.frame.heigh - ) - } - - function initializeLayerManager() { - let owner = thisObject.payload.node.payload.parentNode.id // The real owner is the Time Machine - layersPanelHandle = UI.projects.superalgos.spaces.panelSpace.createNewPanel('Layers Panel', undefined, owner) - thisObject.layerManager = UI.projects.superalgos.spaces.panelSpace.getPanel(layersPanelHandle) - thisObject.layerManager.payload = thisObject.payload.node.layerManager.payload - thisObject.layerManager.initialize() - - /* Initialize the Plotter Manager */ - thisObject.plotterManager = newPlottersManager() - - thisObject.plotterManager.container.connectToParent(thisObject.container, true, true, false, true, true, true, false, false, true) - - thisObject.plotterManager.container.frame.position.x = 0 - thisObject.plotterManager.container.frame.position.y = 0 - - thisObject.plotterManager.fitFunction = thisObject.fitFunction - thisObject.plotterManager.payload = thisObject.payload - thisObject.plotterManager.initialize(thisObject.layerManager) - thisObject.plotterManager.setTimeFrame(timeFrame) - thisObject.plotterManager.setDatetime(datetime) - thisObject.plotterManager.setCoordinateSystem(coordinateSystem) - } - - function initializeRateScale() { - thisObject.rateScale = newRateScale() - thisObject.rateScale.fitFunction = thisObject.fitFunction - thisObject.rateScale.payload = thisObject.payload.node.rateScale.payload - - rateScaleMouseOverEventSuscriptionId = thisObject.rateScale.container.eventHandler.listenToEvent('onMouseOverScale', rateScaleMouseOver) - thisObject.rateScale.initialize(timelineChartCoordinateSystem, thisObject.container.parentContainer, thisObject.container) - - function rateScaleMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onChildrenMouseOver', event) - } - } - - function initializeTimeFrameScale() { - thisObject.timeFrameScale = newTimeFrameScale() - thisObject.timeFrameScale.fitFunction = thisObject.fitFunction - thisObject.timeFrameScale.payload = thisObject.payload.node.timeFrameScale.payload - - timeFrameScaleEventSuscriptionId = thisObject.timeFrameScale.container.eventHandler.listenToEvent('Time Frame Value Changed', timeFrameScaleValueChanged) - timeFrameScaleMouseOverEventSuscriptionId = thisObject.timeFrameScale.container.eventHandler.listenToEvent('onMouseOverScale', timeFrameScaleMouseOver) - thisObject.timeFrameScale.initialize(thisObject.container.parentContainer) - - function timeFrameScaleValueChanged(event) { - let currentTimeFrame = timeFrame - timeFrame = event.timeFrame - if (timeFrame !== currentTimeFrame) { - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setTimeFrame(timeFrame) - } - } - } - - function timeFrameScaleMouseOver(event) { - thisObject.container.eventHandler.raiseEvent('onChildrenMouseOver', event) - } - } - - function onScaleChanged(event) { - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.onUpstreamScaleChanged(event) - } - timelineChartCoordinateSystem.min.x = timeMachineCoordinateSystem.min.x - timelineChartCoordinateSystem.max.x = timeMachineCoordinateSystem.max.x - timelineChartCoordinateSystem.maxHeight = timeMachineCoordinateSystem.maxHeight - timelineChartCoordinateSystem.maxWidth = timeMachineCoordinateSystem.maxWidth - timelineChartCoordinateSystem.autoMinXScale = timeMachineCoordinateSystem.autoMinXScale - timelineChartCoordinateSystem.autoMaxXScale = timeMachineCoordinateSystem.autoMaxXScale - timelineChartCoordinateSystem.recalculateScale() - } - - function setTimeFrame(pTimeFrame) { - timeFrame = pTimeFrame - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setTimeFrame(timeFrame) - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setDatetime(datetime) - } - } - - function onMouseOver(event) { - /* This event gets to the timelinechart container because it inherits it from the time machine container, which is the one raising Mouse Over and Mouse not Over Events to its children. */ - drawScales = true - - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.onMouseOverSomeTimeMachineContainer(event) - } - - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.onMouseOverSomeTimeMachineContainer(event) - } - - mouse.position.x = event.x - mouse.position.y = event.y - } - - function onMouseNotOver(event) { - /* This event is inherited from the Time Machine */ - drawScales = false - - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.visible = false - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.visible = false - } - } - - function getContainer(point, purpose) { - let container - - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { - container = thisObject.rateScale.getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - return container - } - } - } - - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { - container = thisObject.timeFrameScale.getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - return container - } - } - } - - return container - } - - function physics() { - plotterManagerPhysics() - thisObjectPhysics() - childrenPhysics() - syncWithDesignerScales() - syncWithDesignerLayerManager() - } - - function plotterManagerPhysics() { - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.physics() - } - } - - function thisObjectPhysics() { - /* Only if the plotter manager has some layer turned on, we will pass the min and max upstream. */ - if (thisObject.plotterManager !== undefined && thisObject.plotterManager.connectors.length > 0) { - timelineChartCoordinateSystem.reportParentXValue(timeMachineCoordinateSystem.min.x, timeMachineCoordinateSystem.max.x) - timelineChartCoordinateSystem.physics() - - timeMachineCoordinateSystem.reportXValue(timelineChartCoordinateSystem.childrenMin.x) - timeMachineCoordinateSystem.reportXValue(timelineChartCoordinateSystem.childrenMax.x) - } - } - - function syncWithDesignerLayerManager() { - if (thisObject.payload.node === undefined) { - finalizeLayerManager() - return - } - - if (thisObject.payload.node.layerManager === undefined && thisObject.layerManager !== undefined) { - finalizeLayerManager() - } - if (thisObject.payload.node.layerManager !== undefined && thisObject.layerManager === undefined) { - initializeLayerManager() - } - } - - function syncWithDesignerScales() { - if (thisObject.payload.node === undefined) { - finalizeRateScale() - finalizeTimeFrameScale() - return - } - if (thisObject.payload.node.rateScale === undefined && thisObject.rateScale !== undefined) { - finalizeRateScale() - coordinateSystem = timeMachineCoordinateSystem - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setCoordinateSystem(coordinateSystem) - } - } - if (thisObject.payload.node.rateScale !== undefined && thisObject.rateScale === undefined) { - initializeRateScale() - coordinateSystem = timelineChartCoordinateSystem - if (thisObject.plotterManager !== undefined) { - thisObject.plotterManager.setCoordinateSystem(coordinateSystem) - } - } - if (thisObject.payload.node.timeFrameScale === undefined && thisObject.timeFrameScale !== undefined) { - finalizeTimeFrameScale() - } - if (thisObject.payload.node.timeFrameScale !== undefined && thisObject.timeFrameScale === undefined) { - initializeTimeFrameScale() - } - } - - function childrenPhysics() { - if (thisObject.rateScale !== undefined) { - thisObject.rateScale.layersOn = thisObject.plotterManager.connectors.length - thisObject.rateScale.physics() - } - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.layersOn = thisObject.plotterManager.connectors.length - thisObject.timeFrameScale.physics() - } - } - - function drawBackground() { - if (thisObject.container.frame.isInViewPort()) { - if (drawScales === true) { - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.drawBackground() } - } - drawChartsBackground() - if (thisObject.plotterManager !== undefined) { - let elementsPlotted = thisObject.plotterManager.draw() - if (thisObject.timeFrameScale !== undefined) { - thisObject.timeFrameScale.adjustTimeFrame(elementsPlotted) - } else { - return elementsPlotted - } - } - } - } - - function draw() { - if (thisObject.container.frame.isInViewPort()) { - if (drawScales === true) { - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { thisObject.timeFrameScale.draw() } - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.draw() } - } - } - } - - function drawForeground() { - if (thisObject.container.frame.isInViewPort()) { - if (drawScales === true) { - if (thisObject.timeFrameScale !== undefined && thisObject.timeFrameScale.isVisible === true) { thisObject.timeFrameScale.drawForeground() } - if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.drawForeground() } - } - } - } - - function drawChartsBackground() { - UI.projects.superalgos.utilities.drawPrint.drawContainerBackground(thisObject.container, UI_COLOR.WHITE, 0, thisObject.fitFunction) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Viewport.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Viewport.js deleted file mode 100644 index 9aaff8ef6..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Charting-Space/Viewport.js +++ /dev/null @@ -1,423 +0,0 @@ - -function newViewport() { - const MODULE_NAME = 'Viewport' - - const MIN_ZOOM_LEVEL = 0 - const MAX_ZOOM_LEVEL = 500 - - let ANIMATION_INCREMENT = 0.25 - let ANIMATION_STEPS = 5 - let MARGIN_AMOUNT = 40 - - let TOP_MARGIN = TOP_SPACE_HEIGHT - let BOTTOM_MARGIN = COCKPIT_SPACE_HEIGHT + MARGIN_AMOUNT - let LEFT_MARGIN = 0 - let RIGHT_MARGIN = 0 - let MARGINS = { - TOP: TOP_MARGIN, - BOTTOM: BOTTOM_MARGIN, - LEFT: LEFT_MARGIN, - RIGHT: RIGHT_MARGIN - } - - let thisObject = { - visible: false, - visibleArea: undefined, - width: undefined, - height: undefined, - eventHandler: undefined, - zoomTargetLevel: undefined, - zoomLevel: undefined, - mousePosition: undefined, - marginAmount: MARGIN_AMOUNT, - margins: MARGINS, - payload: undefined, - zoomAtCenter: zoomAtCenter, - changeZoom: changeZoom, - onMouseWheel: onMouseWheel, - transformThisPoint: transformThisPoint, - unTransformThisPoint: unTransformThisPoint, - isThisPointVisible: isThisPointVisible, - isThisPointInViewport: isThisPointInViewport, - fitIntoVisibleArea: fitIntoVisibleArea, - fitIntoViewport: fitIntoViewport, - displace: displace, - displaceToContainer: displaceToContainer, - physics: physics, - raiseEvents: raiseEvents, - resize: resize, - initialize: initialize, - finalize: finalize - } - - let position = { - x: 0, - y: 0 - } - - thisObject.mousePosition = { - x: 0, - y: 0 - } - thisObject.eventHandler = newEventHandler() - - /* Initial default value */ - thisObject.zoomLevel = MIN_ZOOM_LEVEL - thisObject.zoomTargetLevel = Math.round(MIN_ZOOM_LEVEL) - INITIAL_TIME_PERIOD = recalculatePeriod(thisObject.zoomLevel) - - let overrideMousePositionCounter = 0 - - return thisObject - - function finalize() { - thisObject.eventHandler.finalize() - thisObject.payload = undefined - thisObject = undefined - } - - function initialize() { - if (thisObject.payload !== undefined) { - /* Read the position from the frame structure */ - - let frame = { - position: { - x: 0, - y: 0 - } - } - UI.projects.superalgos.utilities.loadSaveFrame.loadFrame(thisObject.payload, frame) - if (!isNaN(frame.position.x)) { - position.x = frame.position.x - } - if (!isNaN(frame.position.y)) { - position.y = frame.position.y - } - } - - resize() - readObjectState() - } - - function resize() { - TOP_MARGIN = TOP_SPACE_HEIGHT + MARGIN_AMOUNT - BOTTOM_MARGIN = browserCanvas.height - COCKPIT_SPACE_POSITION + MARGIN_AMOUNT - LEFT_MARGIN = 0 - RIGHT_MARGIN = 0 - MARGINS = { - TOP: TOP_MARGIN, - BOTTOM: BOTTOM_MARGIN, - LEFT: LEFT_MARGIN, - RIGHT: RIGHT_MARGIN - } - - thisObject.visibleArea = { - topLeft: { x: LEFT_MARGIN, y: TOP_MARGIN }, - topRight: { x: browserCanvas.width - RIGHT_MARGIN, y: TOP_MARGIN }, - bottomRight: { x: browserCanvas.width - RIGHT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN }, - bottomLeft: { x: LEFT_MARGIN, y: browserCanvas.height - BOTTOM_MARGIN } - } - - thisObject.width = thisObject.visibleArea.topRight.x - thisObject.visibleArea.topLeft.x - thisObject.height = thisObject.visibleArea.bottomRight.y - thisObject.visibleArea.topLeft.y - - thisObject.center = { - x: LEFT_MARGIN + thisObject.width / 2, - y: TOP_MARGIN + thisObject.height / 2 - } - } - - function raiseEvents() { - if (thisObject.visible === false) { return } - let event = { - newPosition: position - } - - thisObject.eventHandler.raiseEvent('Position Changed', event) - } - - function displaceToContainer(container) { - let targetPoint = { - x: -container.frame.position.x - container.frame.width / 2, - y: -container.frame.position.y - container.frame.height / 2 - } - position.x = targetPoint.x + browserCanvas.width / 2 - position.y = targetPoint.y + (COCKPIT_SPACE_POSITION - TOP_SPACE_HEIGHT) / 2 + TOP_SPACE_HEIGHT - } - - function zoomAtCenter(level) { - thisObject.zoomTargetLevel = Math.round(level) - overrideMousePositionCounter = 50 - ANIMATION_INCREMENT = 0.5 - } - - function mousePositionPhysics() { - if (overrideMousePositionCounter > 0) { - thisObject.mousePosition.x = browserCanvas.width / 2 - thisObject.mousePosition.y = (COCKPIT_SPACE_POSITION - TOP_SPACE_HEIGHT) / 2 + TOP_SPACE_HEIGHT - - overrideMousePositionCounter-- - if (overrideMousePositionCounter < 0) { - overrideMousePositionCounter = 0 - } - } - } - - function physics() { - if (thisObject.visible === false) { return } - mousePositionPhysics() - animationPhysics() - positioningPhysics() - readObjectState() - } - - function positioningPhysics() { - if (thisObject.visible === false) { return } - if (thisObject.payload === undefined) { return } - /* Save the position at the frame lavel */ - let frame = {} - frame.position = position - UI.projects.superalgos.utilities.loadSaveFrame.saveFrame(thisObject.payload, frame) - } - - function animationPhysics() { - if (thisObject.zoomLevel < thisObject.zoomTargetLevel) { - if (thisObject.zoomTargetLevel - thisObject.zoomLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.round(Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel) * 100) / 100 - } - thisObject.zoomLevel = Math.round((thisObject.zoomLevel + ANIMATION_INCREMENT) * 100) / 100 - changeZoom(thisObject.zoomLevel - ANIMATION_INCREMENT, thisObject.zoomLevel) - } - - if (thisObject.zoomLevel > thisObject.zoomTargetLevel) { - if (thisObject.zoomLevel - thisObject.zoomTargetLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.round(Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel) * 100) / 100 - } - thisObject.zoomLevel = Math.round((thisObject.zoomLevel - ANIMATION_INCREMENT) * 100) / 100 - changeZoom(thisObject.zoomLevel + ANIMATION_INCREMENT, thisObject.zoomLevel) - } - } - - function onMouseWheel(event) { - if (thisObject.visible === false) { return } - if ((event.ctrlKey === true || event.metaKey === true)) { return } - let morePower = 1 - - if (IS_MAC) { - event.delta = event.delta * MAC_AMOUNT_FACTOR - } - - let amount = event.delta - - if (event.buttons === 4) { morePower = 2 } // Mouse wheel pressed. - /* We adjust the sensitivity for Mac Users */ - - if (thisObject.zoomTargetLevel > 10) { - amount = amount * 2 - } - if (thisObject.zoomTargetLevel > 25) { - amount = amount * 3 - } - if (thisObject.zoomTargetLevel > 50) { - amount = amount * 3.5 - } - - if (thisObject.zoomTargetLevel + amount * morePower > MAX_ZOOM_LEVEL) { - return false - } - if (thisObject.zoomTargetLevel + amount * morePower < MIN_ZOOM_LEVEL) { - return false - } - thisObject.zoomTargetLevel = Math.round(thisObject.zoomTargetLevel + amount * morePower) - - ANIMATION_INCREMENT = Math.round(Math.abs(thisObject.zoomTargetLevel - thisObject.zoomLevel) / ANIMATION_STEPS * 100) / 100 - - let newEvent = { - newLevel: thisObject.zoomTargetLevel, - newPosition: position, - type: undefined, - shiftKey: event.shiftKey - } - - if (amount > 0) { - newEvent.type = 'Zoom In' - } else { - newEvent.type = 'Zoom Out' - } - - thisObject.eventHandler.raiseEvent('Zoom Changed', newEvent) - return true - } - - function fitIntoVisibleArea(point) { - let pointCopy = { - x: point.x, - y: point.y - } - - /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ - if (pointCopy.x > thisObject.visibleArea.bottomRight.x + 1) { - pointCopy.x = thisObject.visibleArea.bottomRight.x + 1 - } - - if (pointCopy.x < thisObject.visibleArea.topLeft.x - 1) { - pointCopy.x = thisObject.visibleArea.topLeft.x - 1 - } - - if (pointCopy.y > thisObject.visibleArea.bottomRight.y + 1) { - pointCopy.y = thisObject.visibleArea.bottomRight.y + 1 - } - - if (pointCopy.y < thisObject.visibleArea.topLeft.y - 1) { - pointCopy.y = thisObject.visibleArea.topLeft.y - 1 - } - - return pointCopy - } - - function fitIntoViewport(point) { - let pointCopy = { - x: point.x, - y: point.y - } - if (pointCopy.y > COCKPIT_SPACE_POSITION) { - pointCopy.y = COCKPIT_SPACE_POSITION - } - return pointCopy - } - - function displace(displaceVector, recalculate) { - if (thisObject.visible === false) { return } - position.x = position.x + displaceVector.x - position.y = position.y + displaceVector.y - - saveObjectState() - - let event = { - newPosition: position, - recalculate: recalculate - } - - thisObject.eventHandler.raiseEvent('Position Changed', event) - } - - function changeZoom(oldLevel, newLevel) { - if (thisObject.visible === false) { return } - let oldMouse = unTransformThisPoint(thisObject.mousePosition, oldLevel) - let newMouse = transformThisPoint(oldMouse, newLevel) - - position.x = position.x - newMouse.x + thisObject.mousePosition.x - position.y = position.y - newMouse.y + thisObject.mousePosition.y - - saveObjectState() - - thisObject.eventHandler.raiseEvent('Zoom Changed') - } - - function transformThisPoint(point, level) { - if (thisObject.visible === false) { return } - let transformedPoint = { - x: 0, - y: 0 - } - - if (level === undefined) { - transformedPoint.x = point.x * (1 + thisObject.zoomLevel) + position.x - transformedPoint.y = point.y * (1 + thisObject.zoomLevel) + position.y - } else { - transformedPoint.x = point.x * (1 + level) + position.x - transformedPoint.y = point.y * (1 + level) + position.y - } - - return transformedPoint - } - - function unTransformThisPoint(point, level) { - let pointWithoutZoom = { - x: 0, - y: 0 - } - if (level === undefined) { - pointWithoutZoom.x = (point.x - position.x) / (1 + thisObject.zoomLevel) - pointWithoutZoom.y = (point.y - position.y) / (1 + thisObject.zoomLevel) - } else { - pointWithoutZoom.x = (point.x - position.x) / (1 + level) - pointWithoutZoom.y = (point.y - position.y) / (1 + level) - } - - return pointWithoutZoom - } - - function isThisPointVisible(point) { - if (thisObject.visible === false) { return } - if (point.x < thisObject.visibleArea.topLeft.x || point.x > thisObject.visibleArea.bottomRight.x || point.y < thisObject.visibleArea.topLeft.y || point.y > thisObject.visibleArea.bottomRight.y) { - return false - } else { - return true - } - } - - function isThisPointInViewport(point) { - if (thisObject.visible === false) { return } - if (point.y > COCKPIT_SPACE_POSITION) { - return false - } else { - return true - } - } - - function saveObjectState() { - if (thisObject.payload === undefined) { return } - - /* Save the zoom at the node config, so that the user can change it if he wishes to. */ - try { - let config = JSON.parse(thisObject.payload.node.config) - config.zoom = (thisObject.zoomTargetLevel - MIN_ZOOM_LEVEL) / (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL) * 100 - config.zoom = config.zoom.toFixed(2) - thisObject.payload.node.config = JSON.stringify(config) - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function readObjectState() { - if (thisObject.payload === undefined) { return } - - /* Read the zoom level from the node config */ - try { - let config = JSON.parse(thisObject.payload.node.config) - - if (isNaN(config.zoom) || config.zoom === null || config.zoom === undefined) { - saveObjectState() - return - } - config.zoom = config.zoom / 100 * (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL) + MIN_ZOOM_LEVEL - if (config.zoom < MIN_ZOOM_LEVEL) { config.zoom = MIN_ZOOM_LEVEL } - if (config.zoom > MAX_ZOOM_LEVEL) { config.zoom = MAX_ZOOM_LEVEL } - - if (config.zoom.toFixed(2) !== thisObject.zoomTargetLevel.toFixed(2)) { - newZoomLevel(config.zoom) - } else { - saveObjectState() - } - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - - function newZoomLevel(level) { - thisObject.zoomLevel = Math.round(level) - thisObject.zoomTargetLevel = Math.round(level) - INITIAL_TIME_PERIOD = recalculatePeriod(level) - saveObjectState() - ANIMATION_INCREMENT = 0 - - let event = { - newLevel: thisObject.zoomTargetLevel, - newPosition: position, - type: undefined - } - thisObject.eventHandler.raiseEvent('Zoom Changed', event) - return true - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Chat-Space/ChatSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Chat-Space/ChatSpace.js deleted file mode 100644 index 972578094..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Chat-Space/ChatSpace.js +++ /dev/null @@ -1,199 +0,0 @@ -function newSuperalgosChatSpace() { - const MODULE_NAME = 'Chat Space' - let thisObject = { - sidePanelTab: undefined, - container: undefined, - navigateTo: navigateTo, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = true - thisObject.container.status = 'hidden' - - resize() - - let browserResizedEventSubscriptionId - let openingEventSubscriptionId - let closingEventSubscriptionId - - const DEFAULT_URL = 'https://web.telegram.org/#/im?p=@superalgoscommunity' - return thisObject - - function initialize() { - - thisObject.sidePanelTab = newSidePanelTab() - thisObject.sidePanelTab.container.connectToParent(thisObject.container, false, false) - thisObject.sidePanelTab.initialize('right', 1) - openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', onOpening) - closingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closing', onClosing) - - browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - - isInitialized = true - } - - function finalize() { - canvas.eventHandler.stopListening(browserResizedEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(openingEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(closingEventSubscriptionId) - } - - function onOpening() { - let docIFrame = document.getElementById('docIFrame') - if (docIFrame.src === "") { - docIFrame.src = DEFAULT_URL - } - } - - function onClosing() { - - } - - function navigateTo(url) { - let docIFrame = document.getElementById('docIFrame') - docIFrame.src = url - thisObject.sidePanelTab.open() - } - - function resize() { - thisObject.container.frame.width = 1200 - thisObject.container.frame.height = browserCanvas.height // - TOP_SPACE_HEIGHT - thisObject.container.frame.position.x = browserCanvas.width - thisObject.container.frame.position.y = 0 // TOP_SPACE_HEIGHT - - if (thisObject.sidePanelTab !== undefined) { - thisObject.sidePanelTab.resize() - } - } - - function getContainer(point, purpose) { - let container - - container = thisObject.sidePanelTab.getContainer(point, purpose) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - if (container.isWheelable === true) { - return thisObject.container - } else { - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - return - } - } else { - return - } - } - - function physics() { - thisObject.sidePanelTab.physics() - chatAppDivPhysics() - iFramePhysics() - - function chatAppDivPhysics() { - let chatAppDiv = document.getElementById('chatApp') - chatAppDivPosition = { - x: 0, - y: 0 - } - chatAppDivPosition = thisObject.container.frame.frameThisPoint(chatAppDivPosition) - chatAppDiv.style = ' ' + - 'position:fixed; top:' + chatAppDivPosition.y + 'px; ' + - 'left:' + chatAppDivPosition.x + 'px; z-index:1; ' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - } - - function iFramePhysics() { - let docIFrame = document.getElementById('chatIFrame') - docIFrame.style = ' ' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (isInitialized === false) { return } - borders() - thisObject.sidePanelTab.draw() - } - - function borders() { - let point1 - let point2 - let point3 - let point4 - - point1 = { - x: 0, - y: 0 - } - - point2 = { - x: thisObject.container.frame.width, - y: 0 - } - - point3 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - point4 = { - x: 0, - y: thisObject.container.frame.height - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - point4 = thisObject.container.frame.frameThisPoint(point4) - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - let opacity = 1 - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + opacity + '' - browserCanvasContext.fill() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + opacity + '' - browserCanvasContext.lineWidth = 0.3 - browserCanvasContext.stroke() - - /* Shadow */ - - if (thisObject.container.status !== 'hidden') { - for (let i = 0; i <= 30; i++) { - opacity = 1 - (i / 300) - 0.95 - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point2.x + i, point2.y) - browserCanvasContext.lineTo(point3.x + i, point3.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + opacity + '' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/AssetBalances.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/AssetBalances.js deleted file mode 100644 index afcb65668..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/AssetBalances.js +++ /dev/null @@ -1,123 +0,0 @@ - -function newAssetalances() { - const MODULE_NAME = 'Asset Balances' - - let thisObject = { - visible: true, - container: undefined, - paramsArray: undefined, - setParamsArray: setParamsArray, - physics: physics, - draw: draw, - speedometers: [], - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = false - - return thisObject - - function finalize() { - for (let i = 0; i < thisObject.speedometers.length; i++) { - let speedometer = thisObject.speedometers[i] - speedometer.finalize() - } - thisObject.container.finalize() - thisObject.container = undefined - thisObject.paramsArray = undefined - } - - function initialize() { - for (let i = 0; i < 2; i++) { - let speedometer = newSpeedometer() - - speedometer.initialize() - speedometer.container.connectToParent(thisObject.container) - speedometer.container.frame.position.x = thisObject.container.frame.width / 2 - speedometer.container.frame.position.y = thisObject.container.frame.height * (2 + i * 2) / 5 - thisObject.speedometers.push(speedometer) - } - } - - function getContainer(point, purpose) { - if (thisObject.visible !== true) { return } - - let container - for (let i = 0; i < thisObject.speedometers.length; i++) { - container = thisObject.speedometers[i].getContainer(point, purpose) - if (container !== undefined) { - if (container.isForThisPurpose(purpose)) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return container - } - } - } - } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function setParamsArray(paramsArray) { - thisObject.paramsArray = paramsArray - for (let i = 0; i < thisObject.speedometers.length; i++) { - let speedometer = thisObject.speedometers[i] - speedometer.params = paramsArray[i] - } - } - - function physics() { - - } - - function draw() { - if (thisObject.visible !== true) { return } - - for (let i = 0; i < thisObject.speedometers.length; i++) { - let speedometer = thisObject.speedometers[i] - speedometer.draw() - } - - drawQuotedAssetalances() - } - - function drawQuotedAssetalances() { - if (thisObject.paramsArray === undefined) { return } - - let fontSize - let label - let xOffset - let yOffset - - const OPACITY = 1 - - /* We put the params.VALUE in the middle */ - - fontSize = 15 - - browserCanvasContext.font = 'bold ' + fontSize + 'px ' + UI_FONT.PRIMARY - - label = 'ASSET BALANCES' - - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO - yOffset = -45 + 9 - - labelPoint = { - x: 0 - xOffset + (thisObject.paramsArray[1].LEFT_OFFSET - thisObject.paramsArray[0].LEFT_OFFSET) / 2 + thisObject.paramsArray[0].LEFT_OFFSET - 20, - y: COCKPIT_SPACE_POSITION - COCKPIT_SPACE_HEIGHT / 2 - yOffset - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/CockpitSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/CockpitSpace.js deleted file mode 100644 index 293ebc942..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/CockpitSpace.js +++ /dev/null @@ -1,366 +0,0 @@ - -function newSuperalgosCockpitSpace() { - const MODULE_NAME = 'CockpitSpace' - const STATUS_TYPES = { - ALL_GOOD: 1, - WARNING: 2 - } - let thisObject = { - container: undefined, - status: 'BOTTOM', - fullscreen: undefined, - statusTypes: STATUS_TYPES, - setStatus: setStatus, - toTop: toTop, - toBottom: toBottom, - toMiddle: toMiddle, - moveUp: moveUp, - moveDown: moveDown, - draw: draw, - physics: physics, - getContainer: getContainer, - finalize: finalize, - initialize: initialize, - initializePosition: initializePosition - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.detectMouseOver = true - thisObject.container.isDraggeable = true - thisObject.container.notDraggingOnX = true - - controlsMap = new Map() - resize() - - let selfMouseClickEventSubscriptionId - let canvasBrowserResizedEventSubscriptionId - - let statusCounter = 0 - let statusText - let statusType - let isInitilized = false - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfMouseClickEventSubscriptionId) - thisObject.container.eventHandler.stopListening(canvasBrowserResizedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fullscreen = undefined - } - - function initialize() { - canvasBrowserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - - thisObject.fullscreen = newFullScreen() - thisObject.fullscreen.container.connectToParent(thisObject.container) - thisObject.fullscreen.initialize() - } - - function initializePosition() { - thisObject.container.frame.position.x = 0 - - let INITIAL_POSITION - if (UI.projects.superalgos.spaces.designSpace.workspace.enabled === true) { - let localStorage = window.localStorage.getItem(MODULE_NAME) - if (localStorage !== null) { - storage = JSON.parse(localStorage) - thisObject.container.frame.position.y = storage.spacePosition - } else { - INITIAL_POSITION = browserCanvas.height - 55 - thisObject.container.frame.position.y = browserCanvas.height * INITIAL_POSITION / 100 - COCKPIT_SPACE_HEIGHT - } - } else { - INITIAL_POSITION = 100 - thisObject.container.frame.position.y = browserCanvas.height * INITIAL_POSITION / 100 - COCKPIT_SPACE_HEIGHT - } - isInitilized = true - } - - function onMouseClick(event) { - - } - - function setStatus(text, counter, type) { - statusCounter = counter - statusText = text - statusType = type - } - - function resize() { - thisObject.container.frame.width = browserCanvas.width - thisObject.container.frame.height = COCKPIT_SPACE_HEIGHT - - switch (thisObject.status) { - case 'BOTTOM': { - thisObject.container.frame.position.y = browserCanvas.height - COCKPIT_SPACE_HEIGHT - break - } - case 'TOP': { - thisObject.container.frame.position.y = TOP_SPACE_HEIGHT - break - } - } - } - - function toTop() { - thisObject.container.frame.position.y = TOP_SPACE_HEIGHT - } - - function toBottom() { - thisObject.container.frame.position.y = browserCanvas.height - COCKPIT_SPACE_HEIGHT - } - - function toMiddle() { - thisObject.container.frame.position.y = browserCanvas.height / 2 - COCKPIT_SPACE_HEIGHT - } - - function moveUp() { - thisObject.container.frame.position.y = thisObject.container.frame.position.y - COCKPIT_SPACE_HEIGHT * 2 - if (thisObject.container.frame.position.y < 0) { - thisObject.container.frame.position.y = 0 - } - } - - function moveDown() { - thisObject.container.frame.position.y = thisObject.container.frame.position.y + COCKPIT_SPACE_HEIGHT * 2 - if (thisObject.container.frame.position.y > browserCanvas.height - COCKPIT_SPACE_HEIGHT) { - thisObject.container.frame.position.y = browserCanvas.height - COCKPIT_SPACE_HEIGHT - } - } - - function statusPhysics() { - statusCounter-- - if (statusCounter < 0) { - statusCounter = 0 - statusText = undefined, - statusType = undefined - } - } - - function physics() { - thisObjectPhysics() - childrenPhysics() - statusPhysics() - } - - function childrenPhysics() { - thisObject.fullscreen.physics() - } - function thisObjectPhysics() { - if (isInitilized === false) { return } - /* Check the limits */ - - thisObject.status = 'MIDDLE' - - if (UI.projects.superalgos.spaces.designSpace.workspace.enabled === true) { - thisObject.container.isDraggeable = true - } else { - thisObject.container.isDraggeable = false - } - - if (thisObject.container.frame.position.y > browserCanvas.height * 99.5 / 100 - COCKPIT_SPACE_HEIGHT) { - thisObject.container.frame.position.y = browserCanvas.height - COCKPIT_SPACE_HEIGHT - thisObject.status = 'BOTTOM' - UI.projects.superalgos.spaces.designSpace.makeInvisible() - UI.projects.superalgos.spaces.floatingSpace.makeInvisible() - } else { - UI.projects.superalgos.spaces.designSpace.makeVisible() - UI.projects.superalgos.spaces.floatingSpace.makeVisible() - } - - if (thisObject.container.frame.position.y < browserCanvas.height * 0.5 / 100 + TOP_SPACE_HEIGHT) { - thisObject.container.frame.position.y = TOP_SPACE_HEIGHT - thisObject.status = 'TOP' - UI.projects.superalgos.spaces.panelSpace.visible = false - } else { - UI.projects.superalgos.spaces.panelSpace.visible = true - } - - COCKPIT_SPACE_POSITION = thisObject.container.frame.position.y - let storage = { - spacePosition: COCKPIT_SPACE_POSITION - } - window.localStorage.setItem(MODULE_NAME, JSON.stringify(storage)) - if (UI.projects.superalgos.spaces.chartingSpace.viewport !== undefined) { - UI.projects.superalgos.spaces.chartingSpace.viewport.resize() - } - } - - function getContainer(point) { - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - thisObject.container.space = 'Cockpit Space' - return thisObject.container - } else { - return undefined - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - thisObject.container.frame.draw(false, false) - - drawBackground() - - // thisObject.fullscreen.draw() - } - - function drawBackground() { - let opacity = 1 - - let zeroPoint = { - x: 0, - y: 0 - } - - const RED_LINE_HIGHT = 2 - - zeroPoint = thisObject.container.frame.frameThisPoint(zeroPoint) - - let barColor = UI_COLOR.DARK_TURQUOISE // default - let textColor - - if (statusType !== undefined) { - switch (statusType) { - case STATUS_TYPES.ALL_GOOD: - { - barColor = UI_COLOR.PATINATED_TURQUOISE - textColor = UI_COLOR.WHITE - break - } - case STATUS_TYPES.WARNING: - { - barColor = UI_COLOR.RED - textColor = UI_COLOR.TITANIUM_YELLOW - break - } - } - } - - browserCanvasContext.beginPath() - browserCanvasContext.rect(zeroPoint.x, zeroPoint.y, thisObject.container.frame.width, thisObject.container.frame.height) - browserCanvasContext.fillStyle = 'rgba(' + barColor + ', ' + opacity + ')' - browserCanvasContext.closePath() - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.rect(zeroPoint.x, zeroPoint.y, thisObject.container.frame.width, RED_LINE_HIGHT) - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' - browserCanvasContext.closePath() - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.rect(zeroPoint.x, zeroPoint.y - RED_LINE_HIGHT + thisObject.container.frame.height, thisObject.container.frame.width, RED_LINE_HIGHT) - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' - browserCanvasContext.closePath() - browserCanvasContext.fill() - - if (statusText !== undefined) { - let position = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height / 2 + 5 - } - UI.projects.superalgos.utilities.drawPrint.printLabel(statusText, undefined, position.x, undefined, position.y, 1, 15, textColor, 'Center', thisObject.container) - } - - if (UI.projects.superalgos.spaces.designSpace !== undefined) { - if (UI.projects.superalgos.spaces.designSpace.workspace.enabled === true && statusText === undefined) { - arrow() - } - } - } - - function arrow() { - const X_OFFSET = thisObject.container.frame.width / 2 - const Y_OFFSET = thisObject.container.frame.height / 2 - const HEIGHT = 6 - const WIDTH = 18 - const LINE_WIDTH = 3 - const OPACITY = 1 - let DISTANCE_BETWEEN_ARROWS = 0 - let ARROW_1_DIRECTION = 0 - let ARROW_2_DIRECTION = 0 - - switch (thisObject.status) { - - case ('TOP'): { - ARROW_1_DIRECTION = -1 - ARROW_2_DIRECTION = -1 - DISTANCE_BETWEEN_ARROWS = 6 - break - } - case ('MIDDLE'): { - ARROW_1_DIRECTION = 1 - ARROW_2_DIRECTION = -1 - DISTANCE_BETWEEN_ARROWS = 9 - break - } - case ('BOTTOM'): { - ARROW_1_DIRECTION = 1 - ARROW_2_DIRECTION = 1 - DISTANCE_BETWEEN_ARROWS = 6 - break - } - } - - point1 = { - x: X_OFFSET - WIDTH / 2, - y: Y_OFFSET + HEIGHT / 2 * ARROW_1_DIRECTION - DISTANCE_BETWEEN_ARROWS / 2 - } - - point2 = { - x: X_OFFSET, - y: Y_OFFSET - HEIGHT / 2 * ARROW_1_DIRECTION - DISTANCE_BETWEEN_ARROWS / 2 - } - - point3 = { - x: X_OFFSET + WIDTH / 2, - y: Y_OFFSET + HEIGHT / 2 * ARROW_1_DIRECTION - DISTANCE_BETWEEN_ARROWS / 2 - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - - point4 = { - x: X_OFFSET - WIDTH / 2, - y: Y_OFFSET + HEIGHT / 2 * ARROW_2_DIRECTION + DISTANCE_BETWEEN_ARROWS / 2 - } - - point5 = { - x: X_OFFSET, - y: Y_OFFSET - HEIGHT / 2 * ARROW_2_DIRECTION + DISTANCE_BETWEEN_ARROWS / 2 - } - - point6 = { - x: X_OFFSET + WIDTH / 2, - y: Y_OFFSET + HEIGHT / 2 * ARROW_2_DIRECTION + DISTANCE_BETWEEN_ARROWS / 2 - } - - point4 = thisObject.container.frame.frameThisPoint(point4) - point5 = thisObject.container.frame.frameThisPoint(point5) - point6 = thisObject.container.frame.frameThisPoint(point6) - - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - - browserCanvasContext.moveTo(point4.x, point4.y) - browserCanvasContext.lineTo(point5.x, point5.y) - browserCanvasContext.lineTo(point6.x, point6.y) - - browserCanvasContext.lineWidth = LINE_WIDTH - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.stroke() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/FullScreen.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/FullScreen.js deleted file mode 100644 index a5b2c759b..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/FullScreen.js +++ /dev/null @@ -1,169 +0,0 @@ - -function newFullScreen() { - const MODULE_NAME = 'Fullscreen' - - let thisObject = { - visible: true, - container: undefined, - status: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = false - thisObject.container.isClickeable = true - thisObject.container.detectMouseOver = true - - let selfMouseOverEventSubscriptionId - let selfMouseClickEventSubscriptionId - let selfMouseNotOverEventSubscriptionId - - let isMouseOver = false - let counterTillNextState = 0 - - let layersToTurnOn = [] - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseClickEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseNotOverEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - } - - function initialize() { - thisObject.container.frame.width = 50 - thisObject.container.frame.height = COCKPIT_SPACE_HEIGHT - 12 - - selfMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - selfMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - - thisObject.status = 'Ready' - } - - function getContainer(point, purpose) { - if (thisObject.visible !== true) { return } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function onMouseOver(point) { - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - isMouseOver = true - } else { - isMouseOver = false - } - } - - function onMouseNotOver(point) { - isMouseOver = false - } - - function onMouseClick(event) { - if (thisObject.status !== 'On') { - thisObject.status = 'On' - goFullscreen() - CURRENT_TOP_MARGIN = 0 - AT_FULL_SCREEN_MODE = true - } else { - thisObject.status = 'Off' - goOutFullscreen() - CURRENT_TOP_MARGIN = TOP_MARGIN - AT_FULL_SCREEN_MODE = false - } - } - - function goFullscreen() { - if (browserCanvas.requestFullscreen) { - browserCanvas.requestFullscreen() - } else if (browserCanvas.mozRequestFullScreen) { - browserCanvas.mozRequestFullScreen() - } else if (browserCanvas.webkitRequestFullscreen) { - browserCanvas.webkitRequestFullscreen() - } else if (browserCanvas.msRequestFullscreen) { browserCanvas.msRequestFullscreen() } - } - - function goOutFullscreen() { - if (document.exitFullscreen) { - document.exitFullscreen() - } else if (document.mozCancelFullScreen) { - document.mozCancelFullScreen() - } else if (document.webkitExitFullscreen) { - document.webkitExitFullscreen() - } else if (document.msExitFullscreen) { document.msExitFullscreen() } - } - - function physics() { - positionPhysics() - } - - function positionPhysics() { - thisObject.container.frame.position.x = thisObject.container.parentContainer.frame.width - thisObject.container.frame.width - thisObject.container.frame.position.y = 6 - } - - function draw() { - if (thisObject.visible !== true) { return } - drawBackground() - drawText() - } - - function drawBackground() { - let params = { - cornerRadius: 3, - lineWidth: 0.01, - container: thisObject.container, - borderColor: UI_COLOR.DARK, - castShadow: false, - opacity: 1 - } - - if (isMouseOver === true) { - params.backgroundColor = UI_COLOR.TURQUOISE - } else { - params.backgroundColor = UI_COLOR.DARK_TURQUOISE - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - } - - function drawText() { - let fontSize - let label - let xOffset - let yOffset - - const OPACITY = 1 - - /* We put the params.VALUE in the middle */ - - fontSize = 15 - - browserCanvasContext.font = 'bold ' + fontSize + 'px ' + UI_FONT.PRIMARY - label = 'FS' - - let labelPoint = { - x: thisObject.container.frame.width / 2 - label.length / 2 * fontSize * FONT_ASPECT_RATIO, - y: thisObject.container.frame.height - 9 - } - labelPoint = thisObject.container.frame.frameThisPoint(labelPoint) - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/Speedometer.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/Speedometer.js deleted file mode 100644 index 7d64af030..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Cockpit-Space/Speedometer.js +++ /dev/null @@ -1,265 +0,0 @@ - -function newSpeedometer() { - const MODULE_NAME = 'Speedometer' - - let thisObject = { - visible: true, - container: undefined, - params: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = false - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.params = undefined - } - - function initialize() { - - } - - function getContainer(point, purpose) { - if (thisObject.visible !== true) { return } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - - } - - function draw() { - if (thisObject.params === undefined) { return } - drawAssetCircle() - } - - function drawAssetCircle() { - const RED_LINE_HIGHT = 2 - const RADIUS = 50 - const OPACITY = 1 - - let centerPoint = { - x: 0, - y: 0 - } - - centerPoint = thisObject.container.frame.frameThisPoint(centerPoint) - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, RADIUS + RED_LINE_HIGHT, 0 * Math.PI, 2.0 * Math.PI) - browserCanvasContext.closePath() - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')' - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, RADIUS, 0.0 * Math.PI, 2.0 * Math.PI) - browserCanvasContext.closePath() - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.fill() - - /* We draw the circle bar */ - - const DEFAULT_THICKNESS = 2 - const VALUE_THICKNESS = 8 - const VALUE_BG_THICKNESS = 1 - const BAR_RADIUS = RADIUS * 0.85 - - let BAR_START_ANGLE = 0.85 * Math.PI - let BAR_END_ANGLE = 2.15 * Math.PI - let CURRENT_VALUE_ANGLE = thisObject.params.VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / thisObject.params.MAX_VALUE + BAR_START_ANGLE - let MIN_VALUE_ANGLE = thisObject.params.MIN_VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / thisObject.params.MAX_VALUE + BAR_START_ANGLE - let INIT_VALUE_ANGLE = thisObject.params.INIT_VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / thisObject.params.MAX_VALUE + BAR_START_ANGLE - let PROFIT_VALUE_ANGLE = CURRENT_VALUE_ANGLE - - if (CURRENT_VALUE_ANGLE > INIT_VALUE_ANGLE) { CURRENT_VALUE_ANGLE = INIT_VALUE_ANGLE } - if (CURRENT_VALUE_ANGLE < MIN_VALUE_ANGLE) { CURRENT_VALUE_ANGLE = MIN_VALUE_ANGLE } - if (PROFIT_VALUE_ANGLE > BAR_END_ANGLE) { PROFIT_VALUE_ANGLE = BAR_END_ANGLE } - - if ( - thisObject.params.VALUE > 0 && - thisObject.params.ASSET_NAME === thisObject.params.BASE_ASSET && - thisObject.params.POSITION_TAKEN === false - ) { - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, BAR_START_ANGLE, MIN_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_BG_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, MIN_VALUE_ANGLE, CURRENT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_BG_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, CURRENT_VALUE_ANGLE, INIT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_BG_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - if (PROFIT_VALUE_ANGLE > INIT_VALUE_ANGLE) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, INIT_VALUE_ANGLE, PROFIT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_BG_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - } - - browserCanvasContext.setLineDash([2, 3]) - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, BAR_START_ANGLE, MIN_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, MIN_VALUE_ANGLE, CURRENT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, CURRENT_VALUE_ANGLE, INIT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - - if (PROFIT_VALUE_ANGLE > INIT_VALUE_ANGLE) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIUS, INIT_VALUE_ANGLE, PROFIT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = VALUE_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath() - } - } - - /* Common Variables */ - - let fontSize - let label - let xOffset - let yOffset - - /* We put the thisObject.params.VALUE in the middle */ - - label = thisObject.params.VALUE - - if (isNaN(label) === false) { - label = Number(label) - - label = dynamicDecimals(label, 2) - if (label === 0) { label = label.toFixed(2) } - } - - fontSize = 22 - if (label.length > 8) { - fontSize = 18 - } - if (label.length > 10) { - fontSize = 14 - } - if (label.length > 12) { - fontSize = 10 - } - if (label.length > 14) { - fontSize = 8 - } - - browserCanvasContext.font = 'bold ' + fontSize + 'px ' + UI_FONT.PRIMARY - - // label = label.substring(0, 6) - - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 7 - - labelPoint = { - x: centerPoint.x - xOffset, - y: centerPoint.y - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - - /* We put the top label */ - - fontSize = 12 - - browserCanvasContext.font = 'bold ' + fontSize + 'px ' + UI_FONT.PRIMARY - - label = thisObject.params.ASSET_LABEL - - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 3 - yOffset = 22 - - labelPoint = { - x: centerPoint.x - xOffset, - y: centerPoint.y - yOffset - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - - /* We put the bottom label */ - - fontSize = 12 - - browserCanvasContext.font = 'bold ' + fontSize + 'px ' + UI_FONT.PRIMARY - - label = thisObject.params.ASSET_NAME + ' ' - - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 3 - yOffset = -15 - - labelPoint = { - x: centerPoint.x - xOffset, - y: centerPoint.y - yOffset - } - - if (thisObject.params.ASSET_NAME === thisObject.params.BASE_ASSET) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - } - - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/DesignSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/DesignSpace.js deleted file mode 100644 index 51267a439..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/DesignSpace.js +++ /dev/null @@ -1,131 +0,0 @@ - -function newSuperalgosDesignSpace() { - const MODULE_NAME = 'Designe Space' - let thisObject = { - container: undefined, - iconsByProjectAndName: undefined, - iconsByProjectAndType: undefined, - workspace: undefined, - getIconByProjectAndName: getIconByProjectAndName, - getIconByProjectAndType: getIconByProjectAndType, - physics: physics, - draw: draw, - getContainer: getContainer, - makeVisible: makeVisible, - makeInvisible: makeInvisible, - initialize: initialize - } - - let container = newContainer() - container.initialize() - thisObject.container = container - - container.isDraggeable = false - - thisObject.iconsByProjectAndName = new Map() - thisObject.iconsByProjectAndType = new Map() - - return thisObject - - function initialize() { - loadIconCollection(onIconsReady) - - function onIconsReady() { - buildIconByProjectAndTypeMap() - thisObject.workspace = newWorkspace() - thisObject.workspace.initialize() - } - - function buildIconByProjectAndTypeMap() { - /* Take types-icons relationships defined at the schema */ - for (let i = 0; i < PROJECTS_ARRAY.length; i++) { - let project = PROJECTS_ARRAY[i] - let appSchema = SCHEMAS_BY_PROJECT.get(project).array.appSchema - for (let j = 0; j < appSchema.length; j++) { - let nodeDefinition = appSchema[j] - let iconName = nodeDefinition.icon - if (iconName === undefined) { - iconName = nodeDefinition.type.toLowerCase() - iconName = iconName.split(" ").join("-") - } - let icon = thisObject.getIconByProjectAndName(project, iconName) - if (icon !== undefined) { - let key = project + '-' + nodeDefinition.type - thisObject.iconsByProjectAndType.set(key, icon) - } - } - } - } - } - - function loadIconCollection(callBack) { - - callWebServer(undefined, 'IconNames', onResponse) - - function onResponse(err, data) { - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - console.log('Failed to Fetch Image Names from the Backend') - return - } - - let iconsArray = JSON.parse(data) - let imageLoadedCounter = 0 - - for (let i = 0; i < iconsArray.length; i++) { - let project = iconsArray[i][0] - let name = iconsArray[i][1] - loadImage(project, name) - } - - function loadImage(project, name) { - imageLoadedCounter++ - const PATH = 'Icons/' + project + '/' - let image = new Image() - image.onload = onImageLoad - image.fileName = name - - function onImageLoad() { - image.canDrawIcon = true - } - image.src = PATH + name - let key = project + '-' + name.substring(0, name.length - 4) - thisObject.iconsByProjectAndName.set(key, image) - - if (imageLoadedCounter === iconsArray.length) { - callBack() - } - } - } - } - - function getIconByProjectAndName(project, name) { - return thisObject.iconsByProjectAndName.get(project + '-' + name) - } - - function getIconByProjectAndType(project, type) { - return thisObject.iconsByProjectAndType.get(project + '-' + type) - } - - function physics() { - if (thisObject.workspace === undefined) { return } - thisObject.workspace.physics() - } - - function makeVisible() { - visible = true - } - - function makeInvisible() { - visible = false - } - - function getContainer(point) { - - } - - function draw() { - if (thisObject.workspace === undefined) { return } - if (CAN_SPACES_DRAW === false) { return } - thisObject.workspace.draw() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/Workspace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/Workspace.js deleted file mode 100644 index e064db9eb..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Design-Space/Workspace.js +++ /dev/null @@ -1,519 +0,0 @@ - -function newWorkspace() { - const MODULE_NAME = 'Workspace' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - workspaceNode: undefined, - container: undefined, - enabled: false, - nodeChildren: undefined, - eventsServerClients: new Map(), - replaceWorkspaceByLoadingOne: replaceWorkspaceByLoadingOne, - save: saveWorkspace, - backup: backupWorkspace, - share: shareWorkspace, - getProjectsHeads: getProjectsHeads, - getHierarchyHeads: getHierarchyHeads, - getHierarchyHeadsById: getHierarchyHeadsById, - getHierarchyHeadsByType: getHierarchyHeadsByType, - getNodeThatIsOnFocus: getNodeThatIsOnFocus, - getNodeByShortcutKey: getNodeByShortcutKey, - getNodeById: getNodeById, - stopAllRunningTasks: stopAllRunningTasks, - executeAction: executeAction, - physics: physics, - draw: draw, - spawn: spawn, - initialize: initialize, - finalize: finalize - } - - spawnPosition = { - x: UI.projects.superalgos.spaces.floatingSpace.container.frame.width / 2, - y: UI.projects.superalgos.spaces.floatingSpace.container.frame.height / 2 - } - - thisObject.workspaceNode = {} - thisObject.workspaceNode.rootNodes = [] - - thisObject.nodeChildren = newNodeChildren() - - let savingWorkspaceIntervalId - let isInitialized = false - let workingAtTask = 0 - let circularProgressBar = newBusyProgressBar() - circularProgressBar.fitFunction = UI.projects.superalgos.spaces.floatingSpace.fitIntoVisibleArea - let loadedWorkspaceNode - let sessionTimestamp = (new Date()).valueOf() - window.localStorage.setItem('Session Timestamp', sessionTimestamp) - - let actionSwitchesByProject = new Map() - - return thisObject - - function finalize() { - thisObject.definition = undefined - thisObject.workspaceNode = undefined - circularProgressBar.finalize() - circularProgressBar = undefined - actionSwitchesByProject = undefined - } - - function initialize() { - try { - /* Set up the action switches map */ - for (let i = 0; i < PROJECTS_ARRAY.length; i++) { - let project = PROJECTS_ARRAY[i] - let actionSwitch = eval('new' + project + 'ActionSwitch()') - actionSwitchesByProject.set(project, actionSwitch) - } - - /* Check which was the last workspace. */ - let lastUsedWorkspace = window.localStorage.getItem('Last Used Workspace') - - if (lastUsedWorkspace !== 'undefined' && lastUsedWorkspace !== null && lastUsedWorkspace !== undefined) { - callWebServer(undefined, 'LoadMyWorkspace' + '/' + lastUsedWorkspace, onFileReceived) - function onFileReceived(err, text, response) { - if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus('Could not load the last Workspace used, called "' + lastUsedWorkspace + '". Will switch to the default Workspace instead.', 500, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - thisObject.workspaceNode = getWorkspace() // This is the default workspace that comes with the system. - thisObject.workspaceNode.project = 'Superalgos' - recreateWorkspace() - return - } - thisObject.workspaceNode = JSON.parse(text) - thisObject.workspaceNode.project = 'Superalgos' - recreateWorkspace() - } - } else { - thisObject.workspaceNode = getWorkspace() // This is the default workspace that comes with the system. - thisObject.workspaceNode.project = 'Superalgos' - recreateWorkspace() - } - - function recreateWorkspace() { - executeAction({ node: thisObject.workspaceNode, name: 'Recreate Workspace', project: 'Superalgos', callBackFunction: finishInitialization }) - } - - function finishInitialization() { - setupEventsServerClients() - runTasksAndSessions() - thisObject.enabled = true - UI.projects.superalgos.spaces.cockpitSpace.initializePosition() - CAN_SPACES_DRAW = true - savingWorkspaceIntervalId = setInterval(saveWorkspace, 60000) - isInitialized = true - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - } - } - - function runTasksAndSessions() { - executeAction({ name: 'Syncronize Tasks', project: 'Superalgos' }) - executeAction({ name: 'Syncronize Trading Sessions', project: 'Superalgos' }) - executeAction({ name: 'Syncronize Learning Sessions', project: 'Superalgos' }) - executeAction({ name: 'Play Tutorials', project: 'Superalgos' }) - } - - function setupEventsServerClients() { - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - - if (rootNode.type === 'Network') { - if (rootNode.networkNodes === undefined) { continue } - for (let j = 0; j < rootNode.networkNodes.length; j++) { - let networkNode = rootNode.networkNodes[j] - - let eventsServerClient = newEventsServerClient(networkNode) - eventsServerClient.initialize() - - thisObject.eventsServerClients.set(networkNode.id, eventsServerClient) - } - } - } - } - - async function saveWorkspace() { - let workspace = UI.projects.superalgos.spaces.designSpace.workspace.workspaceNode - - /* Validation if it is too early to save. */ - if (isInitialized === false) { return } - - /* Validation of 2 sessions opened at the same time. */ - let savedSessionTimestamp = window.localStorage.getItem('Session Timestamp') - if (Number(savedSessionTimestamp) !== sessionTimestamp) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - 'Could not save the Workspace. You have more that one instance of the Superlagos User Interface open at the same time. Plese close this instance as it is older than the others.' - , 150, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - return - } - - /* Validation that there is something to save */ - let textToSave = await stringifyWorkspace() - if (textToSave === undefined) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - 'Could not save the Workspace. Something is preventing the System to do it at this time.' - , 150, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - return - } - - window.localStorage.setItem('Session Timestamp', sessionTimestamp) - - /* Validation Workspace has a name */ - if (workspace.name === undefined) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus( - 'Could not save the Workspace. You need to specify a name for it.' - , 150, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - return - } - - let url = 'SaveWorkspace/' + workspace.name - callWebServer(textToSave, url, onResponse) - return true - - function onResponse(err) { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - window.localStorage.setItem('Last Used Workspace', workspace.name) - window.localStorage.setItem('Session Timestamp', sessionTimestamp) - if (ARE_WE_RECORDING_A_MARKET_PANORAMA === false) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus(workspace.name + ' Saved.', 50, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.ALL_GOOD) - } - } else { - UI.projects.superalgos.spaces.cockpitSpace.setStatus('Could not save the Workspace at the Backend. Please check the Backend Console for more information.', 150, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - } - } - } - - async function backupWorkspace(action) { - let text = await stringifyWorkspace(false) - let fileName = 'Backup - ' + action.node.type + ' - ' + action.node.name + '.json' - if (text !== undefined) { - UI.projects.superalgos.utilities.download.downloadText(fileName, text) - } - } - - async function shareWorkspace(action) { - let text = await stringifyWorkspace(true) - let fileName = 'Share - ' + action.node.type + ' - ' + action.node.name + '.json' - if (text !== undefined) { - UI.projects.superalgos.utilities.download.downloadText(fileName, text) - } - } - - async function getNodeById(nodeId) { - return await executeAction({ name: 'Get Node By Id', project: 'Superalgos', relatedNodeId: nodeId }) - } - - function physics() { - eventsServerClientsPhysics() - replacingWorkspacePhysics() - } - - function eventsServerClientsPhysics() { - thisObject.eventsServerClients.forEach(applyPhysics) - - function applyPhysics(eventServerClient) { - eventServerClient.physics() - } - } - - function finalizeEventsServerClients() { - thisObject.eventsServerClients.forEach(finalize) - - function finalize(eventServerClient) { - eventServerClient.finalize() - } - } - - async function replacingWorkspacePhysics() { - if (thisObject.enabled !== true) { return } - - if (workingAtTask > 0) { - circularProgressBar.physics() - - switch (workingAtTask) { - case 1: - isInitialized = false - console.log('[INFO] Replacing Workspace Procedure Started') - console.log('[INFO] Deleting Workspace ' + thisObject.workspaceNode.name + '. This might take a few minutes depending on the size of the workspace.') - UI.projects.superalgos.spaces.tutorialSpace.stop() - let result = await executeAction({ node: thisObject.workspaceNode, name: 'Delete Workspace', project: 'Superalgos' }) - if (result === false) { - console.log('[ERROR] Could not replace the current workspace because there was a problem removing one node from memory.') - console.log('[ERROR] The system is at an inconsistent state and your workspace is partially deleted. Saving has been disabled to prevent data loss.') - console.log('[ERROR] The only thing you can do now is to fix the APP SCHEMA and refresh the page to reaload the previously saved workspace again.') - circularProgressBar.visible = false - workingAtTask = 0 - return - } - workingAtTask++ - break - case 2: - console.log('[INFO] Closing Events Server') - finalizeEventsServerClients() - thisObject.eventsServerClients = new Map() - workingAtTask++ - break - case 3: - console.log('[INFO] Stopping Automatic Saving') - clearInterval(savingWorkspaceIntervalId) - workingAtTask++ - break - case 4: - console.log('[INFO] Loading new Workspace ' + loadedWorkspaceNode.name + '.') - thisObject.workspaceNode = loadedWorkspaceNode - thisObject.workspaceNode.project = 'Superalgos' - loadedWorkspaceNode = undefined - workingAtTask++ - break - case 5: - console.log('[INFO] Setting up Workspace') - executeAction({ node: thisObject.workspaceNode, name: 'Recreate Workspace', project: 'Superalgos', callBackFunction: finishInitialization }) - function finishInitialization() { - setupEventsServerClients() - runTasksAndSessions() - } - workingAtTask++ - break - case 6: - console.log('[INFO] Resetting Spaces') - UI.projects.superalgos.spaces.chartingSpace.reset() - workingAtTask++ - break - case 7: - console.log('[INFO] Replacing Workspace Procedure Finished') - workingAtTask = 0 - circularProgressBar.visible = false - isInitialized = true - break - } - } - } - - function draw() { - if (circularProgressBar !== undefined) { - circularProgressBar.draw() - } - } - - async function stringifyWorkspace(removePersonalData) { - let stringifyReadyNodes = [] - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - - if (rootNode.isPlugin !== true) { - let node = await executeAction({ node: rootNode, name: 'Get Node Data Structure', project: 'Superalgos', extraParameter: removePersonalData }) - stringifyReadyNodes.push(node) - } - } - let workspace = { - type: 'Workspace', - name: thisObject.workspaceNode.name, - rootNodes: stringifyReadyNodes - } - - /* - Sometimes it happens that there are no rootNodes. - In those situations the workspace can not be stringified, - to prevent later saving it corrupting the original file. - */ - if (stringifyReadyNodes.length > 0) { - return JSON.stringify(workspace) - } else { - return - } - } - - function stopAllRunningTasks() { - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - if (rootNode.type === 'Network') { - if (rootNode.networkNodes !== undefined) { - for (let j = 0; j < rootNode.networkNodes.length; j++) { - let networkNode = rootNode.networkNodes[j] - if (networkNode.dataMining !== undefined && networkNode.dataMining.payload !== undefined) { - networkNode.dataMining.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks') - networkNode.dataMining.payload.uiObject.menu.internalClick('Stop All Exchange Data Tasks') - } - if (networkNode.learningMining !== undefined && networkNode.learningMining.payload !== undefined) { - networkNode.learningMining.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks') - networkNode.learningMining.payload.uiObject.menu.internalClick('Stop All Exchange Learning Tasks') - } - if (networkNode.testingEnvironment !== undefined && networkNode.testingEnvironment.payload !== undefined) { - networkNode.testingEnvironment.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') - networkNode.testingEnvironment.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') - } - if (networkNode.productionEnvironment !== undefined && networkNode.productionEnvironment.payload !== undefined) { - networkNode.productionEnvironment.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') - networkNode.productionEnvironment.payload.uiObject.menu.internalClick('Stop All Exchange Trading Tasks') - } - } - } - } - } - } - - async function getNodeByShortcutKey(searchingKey) { - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - let node = await executeAction({ node: rootNode, name: 'Get Node By Shortcut Key', project: 'Superalgos', extraParameter: searchingKey }) - if (node !== undefined) { return node } - } - } - - async function getNodeThatIsOnFocus() { - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - let node = await executeAction({ node: rootNode, name: 'Get Node On Focus', project: 'Superalgos' }) - if (node !== undefined) { return node } - } - } - - function getHierarchyHeads() { - let nodes = [] - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - let nodeDefinition = getNodeDefinition(rootNode) - if (nodeDefinition !== undefined) { - if (nodeDefinition.isHierarchyHead === true) { - nodes.push(rootNode) - } - } - } - return nodes - } - - function getProjectsHeads() { - let nodes = [] - for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { - let rootNode = thisObject.workspaceNode.rootNodes[i] - let nodeDefinition = getNodeDefinition(rootNode) - if (nodeDefinition !== undefined) { - if (nodeDefinition.isProjectHead === true) { - nodes.push(rootNode) - } - } - } - return nodes - } - - function getHierarchyHeadsById(nodeId) { - let hiriatchyHeads = getHierarchyHeads() - for (let i = 0; i < hiriatchyHeads.length; i++) { - let hiriatchyHead = hiriatchyHeads[i] - if (hiriatchyHead.id === nodeId) { - return hiriatchyHead - } - } - } - - function getHierarchyHeadsByType(nodeType) { - let hiriatchyHeads = getHierarchyHeads() - for (let i = 0; i < hiriatchyHeads.length; i++) { - let hiriatchyHead = hiriatchyHeads[i] - if (hiriatchyHead.type === nodeType) { - return hiriatchyHead - } - } - } - - function replaceWorkspaceByLoadingOne(project, name) { - - let webCommand - if (project !== "") { - name = name.replace('Plugin \u2192 ', '') - webCommand = 'LoadPlugin' + '/' + project + '/' + 'Workspaces' + '/' + name + '.json' - } else { - webCommand = 'LoadMyWorkspace' + '/' + name - } - - callWebServer(undefined, webCommand, onFileReceived) - function onFileReceived(err, text, response) { - if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - UI.projects.superalgos.spaces.cockpitSpace.setStatus('Could not load the Workspace called "' + name + '". ', 500, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.WARNING) - return - } - - loadedWorkspaceNode = JSON.parse(text) - saveWorkspace() - UI.projects.superalgos.spaces.cockpitSpace.toTop() - - let position = { - x: browserCanvas.width / 2, - y: browserCanvas.height / 2 - } - - UI.projects.superalgos.spaces.floatingSpace.container.frame.position.x = browserCanvas.width / 2 - UI.projects.superalgos.spaces.floatingSpace.container.frame.width / 2 - UI.projects.superalgos.spaces.floatingSpace.container.frame.position.y = browserCanvas.height / 2 - UI.projects.superalgos.spaces.floatingSpace.container.frame.height / 2 - - circularProgressBar.initialize(position) - circularProgressBar.visible = true - workingAtTask = 1 - } - } - - function spawn(nodeText, mousePointer) { - try { - let point = { - x: mousePointer.x, - y: mousePointer.y - } - point = UI.projects.superalgos.spaces.floatingSpace.container.frame.unframeThisPoint(point) - spawnPosition.x = point.x - spawnPosition.y = point.y - - let droppedNode = JSON.parse(nodeText) - - if (droppedNode.type === 'Workspace') { - loadedWorkspaceNode = droppedNode - circularProgressBar.initialize(mousePointer) - circularProgressBar.visible = true - workingAtTask = 1 - return - } - - /* It does not exist, so we recreeate it respecting the inner state of each object. */ - let positionOffset = { - x: spawnPosition.x, - y: spawnPosition.y - } - - if (droppedNode.savedPayload !== undefined) { - positionOffset.x = positionOffset.x - droppedNode.savedPayload.position.x - positionOffset.y = positionOffset.y - droppedNode.savedPayload.position.y - } - - thisObject.workspaceNode.rootNodes.push(droppedNode) - executeAction({ node: droppedNode, name: 'Create UI Object', project: 'Superalgos', extraParameter: positionOffset }) - executeAction({ name: 'Connect Children to Reference Parents', project: 'Superalgos' }) - - droppedNode = undefined - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] spawn -> err = ' + err.stack) } - } - } - - async function executeAction(action) { - /* - Supported parameters as part of the action object: - - action.node : It is the node at which the action was taken. If not specific node is involved then it should be the workspace node. - action.relatedNode : It is a secondary node involved with the action. For example the node to which the main node is being attached to. - action.relatedNodeId : It is the id of a node related to the action. - action.relatedNodeType : It is the type of the node related to the action. - action.callBackFunction : A callback function to call when the action is complete. - action.extraParameter : A parameter to send unusual info to the fnction processing the action. - - We add rootNodes property here. - */ - action.rootNodes = thisObject.workspaceNode.rootNodes - - let actionSwitch = actionSwitchesByProject.get(action.project) - return actionSwitch.executeAction(action) - - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Doc-Space/DocSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Doc-Space/DocSpace.js deleted file mode 100644 index 2ac097b16..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Doc-Space/DocSpace.js +++ /dev/null @@ -1,192 +0,0 @@ -function newSuperalgosDocSpace() { - const MODULE_NAME = 'Doc Space' - let thisObject = { - sidePanelTab: undefined, - container: undefined, - navigateTo: navigateTo, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = true - thisObject.container.status = 'hidden' - - resize() - - let browserResizedEventSubscriptionId - let openingEventSubscriptionId - let closingEventSubscriptionId - - return thisObject - - function initialize() { - thisObject.sidePanelTab = newSidePanelTab() - thisObject.sidePanelTab.container.connectToParent(thisObject.container, false, false) - thisObject.sidePanelTab.initialize('right') - openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', onOpening) - closingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closing', onClosing) - - browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - - isInitialized = true - } - - function finalize() { - canvas.eventHandler.stopListening(browserResizedEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(openingEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(closingEventSubscriptionId) - } - - function onOpening() { - let docIFrame = document.getElementById('docIFrame') - if (docIFrame.src === "") { - docIFrame.src = UI.projects.superalgos.globals.docs.DOCUMENTATION_URL_DEFAULT - } - } - - function onClosing() { - - } - - function navigateTo(url) { - let docIFrame = document.getElementById('docIFrame') - docIFrame.src = url - thisObject.sidePanelTab.open() - } - - function resize() { - thisObject.container.frame.width = 1200 - thisObject.container.frame.height = browserCanvas.height // - TOP_SPACE_HEIGHT - thisObject.container.frame.position.x = browserCanvas.width - thisObject.container.frame.position.y = 0 // TOP_SPACE_HEIGHT - - if (thisObject.sidePanelTab !== undefined) { - thisObject.sidePanelTab.resize() - } - } - - function getContainer(point, purpose) { - let container - - container = thisObject.sidePanelTab.getContainer(point, purpose) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - thisObject.sidePanelTab.physics() - docAppDivPhysics() - iFramePhysics() - - function docAppDivPhysics() { - let docAppDiv = document.getElementById('docApp') - docAppDivPosition = { - x: 0, - y: 0 - } - docAppDivPosition = thisObject.container.frame.frameThisPoint(docAppDivPosition) - docAppDiv.style = ' ' + - 'position:fixed; top:' + docAppDivPosition.y + 'px; ' + - 'left:' + docAppDivPosition.x + 'px; z-index:1; ' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - } - - function iFramePhysics() { - let docIFrame = document.getElementById('docIFrame') - docIFrame.style = ' ' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (isInitialized === false) { return } - borders() - thisObject.sidePanelTab.draw() - } - - function borders() { - let point1 - let point2 - let point3 - let point4 - - point1 = { - x: 0, - y: 0 - } - - point2 = { - x: thisObject.container.frame.width, - y: 0 - } - - point3 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - point4 = { - x: 0, - y: thisObject.container.frame.height - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - point4 = thisObject.container.frame.frameThisPoint(point4) - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - let opacity = 1 - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + opacity + '' - browserCanvasContext.fill() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + opacity + '' - browserCanvasContext.lineWidth = 0.3 - browserCanvasContext.stroke() - - /* Shadow */ - - if (thisObject.container.status !== 'hidden') { - for (let i = 0; i <= 30; i++) { - opacity = 1 - (i / 300) - 0.95 - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point2.x + i, point2.y) - browserCanvasContext.lineTo(point3.x + i, point3.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + opacity + '' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/BusyProgressBar.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/BusyProgressBar.js deleted file mode 100644 index 4b325000a..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/BusyProgressBar.js +++ /dev/null @@ -1,72 +0,0 @@ - -function newBusyProgressBar() { - const MODULE_NAME = 'Circular Progress Bar' - - let thisObject = { - container: undefined, - isDeployed: undefined, - visible: undefined, - physics: physics, - draw: draw, - finalize: finalize, - initialize: initialize - } - - let position - let addRadius - - let eventSubscriptionHeartbeat - - return thisObject - - function finalize() { - thisObject.payload = undefined - thisObject.fitFunction = undefined - } - - function initialize(pPosition) { - position = pPosition - - addRadius = 0 - } - - function physics() { - addRadius = addRadius + 20 - } - - function draw() { - if (thisObject.visible !== true) { return } - - let visiblePosition = { - x: position.x, - y: position.y - } - - visiblePosition = thisObject.fitFunction(visiblePosition) - - const RADIUS = 10 + addRadius - let OPACITY = 1 - - let initialAngle = 0 - let finalAngle = Math.PI * 2 - - browserCanvasContext.beginPath() - - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, RADIUS, initialAngle, finalAngle, false) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)' - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + OPACITY * 2 + ')' - browserCanvasContext.lineWidth = 15 - browserCanvasContext.setLineDash([3, 4]) - - browserCanvasContext.stroke() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([3, 4]) - browserCanvasContext.stroke() - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenu.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenu.js deleted file mode 100644 index c099d9690..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenu.js +++ /dev/null @@ -1,225 +0,0 @@ - -function newCircularMenu() { - const MODULE_NAME = 'Circular Menu' - - let thisObject = { - container: undefined, - isDeployed: undefined, - internalClick: internalClick, - physics: physics, - invisiblePhysics: invisiblePhysics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME, 'Circle') - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let menuItems = [] - - let selfFocusEventSubscriptionId - let selfNotFocuskEventSubscriptionId - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfFocusEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfNotFocuskEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - menuItem.finalize() - } - - menuItems = undefined - } - - function initialize(menuItemsInitialValues, payload) { - /* Create the array of Menu Items */ - - let iconAndTextArray = [] - let iconOnlyArray - let ringsArray = [[], [], [], []] - - for (let i = 0; i < menuItemsInitialValues.length; i++) { - let menuItem = newCircularMenuItem() - let menuItemInitialValue = menuItemsInitialValues[i] - - menuItem.action = menuItemInitialValue.action - menuItem.actionProject = menuItemInitialValue.actionProject - menuItem.actionFunction = menuItemInitialValue.actionFunction - menuItem.actionStatus = menuItemInitialValue.actionStatus - menuItem.label = menuItemInitialValue.label - menuItem.workingLabel = menuItemInitialValue.workingLabel - menuItem.workDoneLabel = menuItemInitialValue.workDoneLabel - menuItem.workFailedLabel = menuItemInitialValue.workFailedLabel - menuItem.secondaryAction = menuItemInitialValue.secondaryAction - menuItem.secondaryLabel = menuItemInitialValue.secondaryLabel - menuItem.secondaryWorkingLabel = menuItemInitialValue.secondaryWorkingLabel - menuItem.secondaryWorkDoneLabel = menuItemInitialValue.secondaryWorkDoneLabel - menuItem.secondaryWorkFailedLabel = menuItemInitialValue.secondaryWorkFailedLabel - menuItem.secondaryIcon = menuItemInitialValue.secondaryIcon - menuItem.visible = menuItemInitialValue.visible - menuItem.iconPathOn = menuItemInitialValue.iconPathOn - menuItem.iconPathOff = menuItemInitialValue.iconPathOff - menuItem.rawRadius = menuItemInitialValue.rawRadius - menuItem.targetRadius = menuItemInitialValue.label - menuItem.currentRadius = menuItemInitialValue.currentRadius - menuItem.angle = menuItemInitialValue.angle - menuItem.currentStatus = menuItemInitialValue.currentStatus - menuItem.relatedUiObject = menuItemInitialValue.relatedUiObject - menuItem.dontShowAtFullscreen = menuItemInitialValue.dontShowAtFullscreen - menuItem.askConfirmation = menuItemInitialValue.askConfirmation - menuItem.confirmationLabel = menuItemInitialValue.confirmationLabel - menuItem.disableIfPropertyIsDefined = menuItemInitialValue.disableIfPropertyIsDefined - menuItem.propertyToCheckFor = menuItemInitialValue.propertyToCheckFor - menuItem.ring = menuItemInitialValue.ring - menuItem.icons = menuItemInitialValue.icons - - if (menuItem.label === undefined) { - menuItem.type = 'Icon Only' - - if (menuItem.ring === undefined) { - menutItem.ring = 1 - } - iconOnlyArray = ringsArray[menuItem.ring - 1] - iconOnlyArray.push(menuItem) - } else { - menuItem.type = 'Icon & Text' - iconAndTextArray.push(menuItem) - } - - menuItem.initialize(payload) - menuItem.container.connectToParent(thisObject.container, false, false, true, true, false, false, true, true) - menuItems.push(menuItem) - } - - /* There are 4 possible rings of icons, we will go through each of them here. */ - let amplitudeArray = [80, 50, 40, 80] - let initialAngleArray = [220, 205, 200, 180] - for (let j = 1; j < ringsArray.length + 1; j++) { - let iconOnlyArray = ringsArray[j - 1] - /* Here we calculate the angles for each menu item, and then apply it if it was not previously defined. */ - let amplitude = amplitudeArray[j - 1] - let initialAngle = initialAngleArray[j - 1] - let step = amplitude / (iconOnlyArray.length - 1) - if (iconOnlyArray.length === 1) { - step = 0 - } - - for (let i = 0; i < iconOnlyArray.length; i++) { - let menuItem = iconOnlyArray[i] - let angle = initialAngle - step * i - if (menuItem.angle === undefined) { - menuItem.angle = angle - } - } - } - /* Text and Icon */ - let amplitude = 140 - let initialAngle = -70 - step = amplitude / 7 - let currentItem = (7 - iconAndTextArray.length) / 2 + 1 - for (let i = 0; i < iconAndTextArray.length; i++) { - let menuItem = iconAndTextArray[i] - let angle = initialAngle + step * (currentItem - 0.5) - currentItem++ - if (menuItem.angle === undefined) { - menuItem.angle = angle - } - } - - iconOnlyArray = undefined - iconAndTextArray = undefined - - /* Listen to events */ - selfFocusEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onFocus', onFocus) - selfNotFocuskEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onNotFocus', onNotFocus) - } - - function getContainer(point) { - let container - - if (thisObject.isDeployed === true) { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - if (menuItem.visible === true) { - container = menuItem.getContainer(point) - } - if (container !== undefined) { return container } - } - } - } - - function internalClick(action) { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - if (menuItem.visible === true) { - if (menuItem.nextAction === action) { - menuItem.internalClick() - } - } - } - } - - function invisiblePhysics() { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - menuItem.invisiblePhysics() - } - } - - function physics() { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - menuItem.physics() - } - } - - function onFocus() { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - menuItem.targetRadius = Math.trunc(menuItem.rawRadius * 1.5) - menuItem.isDeployed = true - } - thisObject.isDeployed = true - } - - function onNotFocus() { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - menuItem.targetRadius = menuItem.rawRadius * 0 - i * 1.5 - menuItem.isDeployed = false - } - thisObject.isDeployed = false - } - - function drawBackground(pFloatingObject) { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - if (menuItem.visible === true) { - menuItem.drawBackground() - } - } - } - - function drawForeground(pFloatingObject) { - for (let i = 0; i < menuItems.length; i++) { - let menuItem = menuItems[i] - if (menuItem.visible === true) { - menuItem.drawForeground() - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenuItem.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenuItem.js deleted file mode 100644 index 4c87f78e6..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularMenuItem.js +++ /dev/null @@ -1,492 +0,0 @@ - -function newCircularMenuItem() { - const MODULE_NAME = 'Circular Menu Iem' - - let thisObject = { - type: undefined, - isDeployed: undefined, - askConfirmation: undefined, - confirmationLabel: undefined, - iconOn: undefined, - iconOff: undefined, - icons: undefined, - currentIcon: undefined, - disableIfPropertyIsDefined: undefined, - propertyToCheckFor: undefined, - action: undefined, - actionProject: undefined, - actionFunction: undefined, - actionStatus: undefined, - label: undefined, - workingLabel: undefined, - workDoneLabel: undefined, - workFailedLabel: undefined, - secondaryAction: undefined, - secondaryLabel: undefined, - secondaryWorkingLabel: undefined, - secondaryWorkDoneLabel: undefined, - secondaryWorkFailedLabel: undefined, - secondaryIcon: undefined, - nextAction: undefined, - visible: false, - iconPathOn: undefined, - iconPathOff: undefined, - rawRadius: undefined, - targetRadius: undefined, - currentRadius: undefined, - angle: undefined, - container: undefined, - payload: undefined, - relatedUiObject: undefined, - dontShowAtFullscreen: undefined, - isEnabled: true, - shorcutNumber: undefined, - internalClick: internalClick, - physics: physics, - invisiblePhysics: invisiblePhysics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = true - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - thisObject.container.frame.width = 0 - thisObject.container.frame.height = 0 - - let isMouseOver = false - - let selfMouseOverEventSubscriptionId - let selfMouseClickEventSubscriptionId - let selfMouseNotOverEventSubscriptionId - - let labelToPrint = '' - let defaultBackgroudColor = UI_COLOR.BLACK - let backgroundColorToUse = UI_COLOR.RED - let temporaryStatus = 0 - let temporaryStatusCounter = 0 - - const STATUS_NO_ACTION_TAKEN_YET = 0 - const STATUS_PRIMARY_ACTION_WORKING = -1 - const STATUS_SECONDARY_ACTION_WORKING = -2 - const STATUS_PRIMARY_WORK_DONE = -3 - const STATUS_PRIMARY_WORK_FAILED = -4 - const STATUS_WAITING_CONFIRMATION = -5 - const STATUS_SECONDARY_WORK_DONE = -6 - const STATUS_SECONDARY_WORK_FAILED = -7 - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseClickEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseNotOverEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.iconOn = undefined - thisObject.iconOff = undefined - thisObject.icons = undefined - thisObject.currentIcon = undefined - thisObject.payload = undefined - thisObject.actionFunction = undefined - thisObject.actionStatus = undefined - thisObject.disableIfPropertyIsDefined = undefined - thisObject.propertyToCheckFor = undefined - } - - function initialize(pPayload) { - thisObject.payload = pPayload - - iconPhysics() - - selfMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - selfMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - - containerPhysics() - - thisObject.nextAction = thisObject.action - } - - function getContainer(point) { - if (thisObject.dontShowAtFullscreen === true && AT_FULL_SCREEN_MODE === true) { return } - - let container - if (thisObject.isDeployed === true) { - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - return thisObject.container - } else { - return undefined - } - } - } - - function invisiblePhysics() { - temporaryStatusPhysics() - } - - function temporaryStatusPhysics() { - /* Temporary Status impacts on the label to use and the background of that label */ - if (temporaryStatusCounter > 0) { - temporaryStatusCounter-- - } - - if (temporaryStatusCounter === 0) { - temporaryStatus = STATUS_NO_ACTION_TAKEN_YET - labelToPrint = thisObject.label - backgroundColorToUse = defaultBackgroudColor - thisObject.nextAction = thisObject.action - } - } - - function physics() { - if (thisObject.dontShowAtFullscreen === true && AT_FULL_SCREEN_MODE === true) { return } - positionPhysics() - temporaryStatusPhysics() - disablePhysics() - iconPhysics() - backgroundColorPhysics() - containerPhysics() - } - - function positionPhysics() { - let INCREASE_STEP = 2 - - if (Math.abs(thisObject.currentRadius - thisObject.targetRadius) >= INCREASE_STEP) { - if (thisObject.currentRadius < thisObject.targetRadius) { - thisObject.currentRadius = thisObject.currentRadius + INCREASE_STEP - } else { - thisObject.currentRadius = thisObject.currentRadius - INCREASE_STEP - } - } - - let radiusGrowthFactor - if (thisObject.type === 'Icon Only') { - switch (thisObject.ring) { - case 1: { - radiusGrowthFactor = 5.5 - break - } - case 2: { - radiusGrowthFactor = 4.0 - break - } - case 3: { - radiusGrowthFactor = 3.0 - break - } - case 4: { - radiusGrowthFactor = 2.0 - break - } - } - } else { - radiusGrowthFactor = 3.2 - } - radiusGrowthFactor = radiusGrowthFactor * UI.projects.superalgos.spaces.floatingSpace.settings.node.menuItem.radiusPercentage / 100 - - thisObject.container.frame.position.x = - thisObject.payload.floatingObject.targetRadius * - radiusGrowthFactor / 7 - * Math.cos(toRadians(thisObject.angle)) - - thisObject.currentRadius * 1.5 - - thisObject.container.frame.position.y = - thisObject.payload.floatingObject.targetRadius * - radiusGrowthFactor / 7 - * Math.sin(toRadians(thisObject.angle)) - - thisObject.container.frame.height / 2 - } - - function disablePhysics() { - /* Here we will check if we need to monitor a property that influences the status of the Menu Item. */ - if (thisObject.disableIfPropertyIsDefined === true) { - if (thisObject.payload.node[thisObject.propertyToCheckFor] === undefined) { - /* This menu item is enabled. */ - thisObject.isEnabled = true - } else { - /* This menu item is disabled. */ - thisObject.isEnabled = false - } - } - } - - function containerPhysics() { - if (thisObject.type === 'Icon & Text') { - thisObject.container.frame.width = 220 * UI.projects.superalgos.spaces.floatingSpace.settings.node.menuItem.widthPercentage / 100 - } else { - thisObject.container.frame.width = 50 * UI.projects.superalgos.spaces.floatingSpace.settings.node.menuItem.widthPercentage / 100 - } - - thisObject.container.frame.height = 40 * UI.projects.superalgos.spaces.floatingSpace.settings.node.menuItem.heightPercentage / 100 - } - - function backgroundColorPhysics() { - defaultBackgroudColor = UI.projects.superalgos.spaces.floatingSpace.style.node.menuItem.backgroundColor - } - - function iconPhysics() { - if ( - ( - temporaryStatus === STATUS_PRIMARY_WORK_DONE || - temporaryStatus === STATUS_SECONDARY_ACTION_WORKING || - temporaryStatus === STATUS_SECONDARY_WORK_DONE || - temporaryStatus === STATUS_SECONDARY_WORK_FAILED - ) && thisObject.secondaryAction !== undefined - ) { - thisObject.iconOn = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.secondaryIcon) - thisObject.iconOff = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.secondaryIcon) - } else { - if (thisObject.relatedUiObject !== undefined) { - thisObject.iconOn = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) - thisObject.iconOff = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.relatedUiObject) - } else { - if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined) { - thisObject.iconOn = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.iconPathOn) - thisObject.iconOff = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.iconPathOff) - } else { - thisObject.iconOn = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.icons[thisObject.actionStatus()]) - thisObject.iconOff = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.icons[thisObject.actionStatus()]) - } - } - } - - /* Current Status might be linked to some other object status */ - - if (thisObject.actionStatus !== undefined) { - thisObject.currentStatus = thisObject.actionStatus() - } - - /* Current Status sets the icon to be used */ - - if (thisObject.currentStatus === true) { - thisObject.icon = thisObject.iconOn - } else { - thisObject.icon = thisObject.iconOff - } - } - - function onMouseOver(point) { - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - isMouseOver = true - } else { - isMouseOver = false - } - MENU_ITEM_ON_FOCUS = thisObject - } - - function onMouseNotOver(point) { - isMouseOver = false - MENU_ITEM_ON_FOCUS = undefined - } - - function internalClick() { - if (thisObject.shorcutNumber !== undefined) { - let label = thisObject.payload.node.name + ' ' + labelToPrint - UI.projects.superalgos.spaces.cockpitSpace.setStatus(label, 4, UI.projects.superalgos.spaces.cockpitSpace.statusTypes.ALL_GOOD) - } - - onMouseClick() - } - - function onMouseClick() { - if (thisObject.isEnabled === false) { return } - - if (thisObject.label === undefined) { - /* This is what we have in the case of menu items that are only Icons. In this situation there is no complex logic, just execute the specified action. */ - thisObject.actionFunction({ node: thisObject.payload.node, name: thisObject.action, project: thisObject.actionProject, relatedNodeType: thisObject.relatedUiObject }) - return - } - - if (thisObject.askConfirmation !== true) { /* No confirmation is needed */ - if (temporaryStatus === STATUS_NO_ACTION_TAKEN_YET || temporaryStatus === STATUS_PRIMARY_WORK_DONE) { - executeAction() - } // Any click out of those states is ignored - } else { - /* Confirmation is needed */ - - /* The first click ask for confirmation. */ - if (temporaryStatus === STATUS_NO_ACTION_TAKEN_YET) { - setStatus(thisObject.confirmationLabel, UI_COLOR.GOLDEN_ORANGE, 100, STATUS_WAITING_CONFIRMATION) - return - } - /* A Click during confirmation executes the pre-defined action. */ - if (temporaryStatus === STATUS_WAITING_CONFIRMATION || temporaryStatus === STATUS_PRIMARY_WORK_DONE) { - executeAction() - if (thisObject.workDoneLabel !== undefined) { - setStatus(thisObject.workDoneLabel, UI_COLOR.PATINATED_TURQUOISE, 5, STATUS_SECONDARY_WORK_DONE) - } else { - setStatus('Done', UI_COLOR.PATINATED_TURQUOISE, 5, STATUS_SECONDARY_WORK_DONE) - } - return - } - } - - function executeAction() { - if (temporaryStatus === STATUS_NO_ACTION_TAKEN_YET || temporaryStatus === STATUS_WAITING_CONFIRMATION) { - /* We need to execute the main Action */ - /* If there is a working label defined, we use it here. */ - if (thisObject.workingLabel !== undefined) { - setStatus(thisObject.workingLabel, UI_COLOR.GREY, undefined, STATUS_PRIMARY_ACTION_WORKING) // Status will not expire, will only change with a callback. Mouse Clicks will be ignored. - } - - /* Execute the action and wait for callbacks to update our statuus. */ - thisObject.actionFunction({ node: thisObject.payload.node, name: thisObject.action, project: thisObject.actionProject, relatedNodeType: thisObject.relatedUiObject, callBackFunction: onPrimaryCallBack }) - return - } - if (temporaryStatus === STATUS_PRIMARY_WORK_DONE && thisObject.secondaryAction !== undefined) { - /* We need to execute the secondary action. */ - if (thisObject.secondaryWorkingLabel !== undefined) { - setStatus(thisObject.secondaryWorkingLabel, UI_COLOR.GREY, undefined, STATUS_SECONDARY_ACTION_WORKING) // Status will not expire, will only change with a callback. Mouse Clicks will be ignored. - } - - /* Execute the action and wait for callbacks to update our statuus. */ - thisObject.actionFunction({ node: thisObject.payload.node, name: thisObject.secondaryAction, project: thisObject.actionProject, relatedNodeType: thisObject.relatedUiObject, callBackFunction: onSecondaryCallBack }) - return - } - - function onPrimaryCallBack(err, event) { - /* While the primary action is being executed some event might have happen. Following we process the ones we can */ - - if (event !== undefined) { - if (event.type === 'Secondary Action Already Executed') { - setStatus(thisObject.secondaryWorkDoneLabel, UI_COLOR.PATINATED_TURQUOISE, 5, STATUS_SECONDARY_WORK_DONE) - return - } - } - - /* If there is a secondary action we will act different that if there is not */ - if (thisObject.secondaryAction === undefined) { // This means there are no more possible actions. - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - if (thisObject.workDoneLabel !== undefined) { - setStatus(thisObject.workDoneLabel, UI_COLOR.PATINATED_TURQUOISE, 5, STATUS_PRIMARY_WORK_DONE) - } - } else { - if (thisObject.workFailedLabel != undefined) { - setStatus(thisObject.workFailedLabel, UI_COLOR.TITANIUM_YELLOW, 5, STATUS_PRIMARY_WORK_FAILED) - } - } - } else { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - if (thisObject.workDoneLabel !== undefined) { - thisObject.nextAction = thisObject.secondaryAction - setStatus(thisObject.secondaryLabel, defaultBackgroudColor, undefined, STATUS_PRIMARY_WORK_DONE) - } - } else { - if (thisObject.workFailedLabel != undefined) { - setStatus(thisObject.workFailedLabel, UI_COLOR.TITANIUM_YELLOW, 5, STATUS_PRIMARY_WORK_FAILED) - } - } - } - } - function onSecondaryCallBack(err) { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - if (thisObject.secondaryWorkDoneLabel !== undefined) { - setStatus(thisObject.secondaryWorkDoneLabel, UI_COLOR.PATINATED_TURQUOISE, 5, STATUS_SECONDARY_WORK_DONE) - } - } else { - if (thisObject.secondaryWorkFailedLabel != undefined) { - setStatus(thisObject.secondaryWorkFailedLabel, UI_COLOR.TITANIUM_YELLOW, 5, STATUS_SECONDARY_WORK_FAILED) - } - } - } - } - } - - function setStatus(text, backgroundColor, waitingCycles, newStatus) { - labelToPrint = text - backgroundColorToUse = backgroundColor - temporaryStatus = newStatus - temporaryStatusCounter = newStatus // This will often put this into negatives numbers, which will disable the counting back and automatic reseting. - if (waitingCycles !== undefined) { // This will override the often negative value with a positive one that will tend to zero onto the default state. - temporaryStatusCounter = waitingCycles - } - } - - function drawBackground() { - if (thisObject.dontShowAtFullscreen === true && AT_FULL_SCREEN_MODE === true) { return } - - if (thisObject.container.frame.position.x > 0 && thisObject.isDeployed === true && thisObject.currentRadius >= thisObject.targetRadius) { - if (thisObject.type === 'Icon & Text') { - let backgroundColor = backgroundColorToUse - if (thisObject.isEnabled === false) { - backgroundColor = UI_COLOR.GREY - } - let params = { - cornerRadius: 5, - lineWidth: 0.1, - container: thisObject.container, - borderColor: backgroundColor, - backgroundColor: backgroundColor, - castShadow: false, - xOffset: 60 - } - - if (isMouseOver === true) { - params.opacity = 1 - } else { - params.opacity = 0.8 - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - } - } - } - - function drawForeground() { - if (thisObject.dontShowAtFullscreen === true && AT_FULL_SCREEN_MODE === true) { return } - - let menuPosition = { - x: thisObject.currentRadius * 1.5, - y: thisObject.container.frame.height / 2 - } - - menuPosition = thisObject.container.frame.frameThisPoint(menuPosition) - - /* Menu Item */ - let iconSize - if (isMouseOver === true) { - iconSize = UI.projects.superalgos.spaces.floatingSpace.style.node.menuItem.imageSize * 150 / 100 - } else { - iconSize = UI.projects.superalgos.spaces.floatingSpace.style.node.menuItem.imageSize - } - - if (thisObject.icon === undefined) { return } - if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) { - browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2) - - /* Menu Label */ - if (thisObject.type === 'Icon & Text') { - label = labelToPrint - if (thisObject.shorcutNumber !== undefined) { - label = '' + thisObject.shorcutNumber + '- ' + labelToPrint - } - - let labelPoint - let fontSize = UI.projects.superalgos.spaces.floatingSpace.style.node.menuItem.fontSize - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: menuPosition.x + thisObject.currentRadius + 25, - y: menuPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.superalgos.spaces.floatingSpace.style.node.menuItem.fontColor + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularProgressBar.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularProgressBar.js deleted file mode 100644 index 883f72f9d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CircularProgressBar.js +++ /dev/null @@ -1,147 +0,0 @@ - -function newCircularProgressBar() { - const MODULE_NAME = 'Circular Progress Bar' - - let thisObject = { - container: undefined, - isDeployed: undefined, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME, 'Circle') - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let opacityCounters = [] - let eventSubscriptionIdHeartbeat - let needToDrawRing = true - let eventsServerClient - - return thisObject - - function finalize() { - finalizeEventsServerClient() - - thisObject.container = undefined - thisObject.payload = undefined - thisObject.fitFunction = undefined - } - - function finalizeEventsServerClient() { - if (eventsServerClient !== undefined) { - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - if (eventSubscriptionIdHeartbeat !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdHeartbeat) - } - } - } - - function initialize(payload, pEventsServerClient) { - thisObject.payload = payload - - finalizeEventsServerClient() - eventsServerClient = pEventsServerClient - - for (let i = 0; i < 60; i++) { - opacityCounters.push(0) - } - - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Heartbeat', undefined, key, onResponse, onHeartBeat) - - function onResponse(message) { - eventSubscriptionIdHeartbeat = message.eventSubscriptionId - } - } - - function onHeartBeat(message) { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - opacityCounters[message.event.seconds] = 2000 - if (message.event.processingDate !== undefined) { - thisObject.payload.uiObject.valueAtAngle = false - thisObject.payload.uiObject.setValue(message.event.processingDate, 2000) - } - if (message.event.percentage !== undefined) { - thisObject.payload.uiObject.setPercentage(message.event.percentage, 2000) - } - if (message.event.status !== undefined) { - needToDrawRing = false - thisObject.payload.uiObject.setStatus(message.event.status, 200000) - } - - thisObject.payload.uiObject.heartBeat() - } - - function getContainer(point) { - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - let container - - for (let i = 0; i < menuItems.length; i++) { - let menutItem = menuItems[i] - container = menutItem.getContainer(point) - if (container !== undefined) { return container } - } - } - - function physics() { - for (let i = 0; i < 60; i++) { - opacityCounters[i] = opacityCounters[i] - 2 - - if (opacityCounters[i] < 0) { - opacityCounters[i] = 0 - } - } - } - - function drawForeground(pFloatingObject) { - - } - - function drawBackground(pFloatingObject) { - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - if (needToDrawRing !== true) { return } - - const VISIBLE_RADIUS = thisObject.container.frame.radius - - let visiblePosition = { - x: thisObject.container.frame.position.x, - y: thisObject.container.frame.position.y - } - - visiblePosition = thisObject.container.frame.frameThisPoint(visiblePosition) - visiblePosition = thisObject.fitFunction(visiblePosition) - - for (let i = 0; i < 60; i++) { - let OPACITY = opacityCounters[i] / 4000 - - if (OPACITY === 0) { continue } - - let initialAngle = Math.PI * 2 / 60 * i - Math.PI / 2 - let finalAngle = Math.PI * 2 / 60 * (i + 1) - Math.PI / 2 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, initialAngle, finalAngle, false) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + OPACITY * 2 + ')' - browserCanvasContext.lineWidth = 6 + opacityCounters[i] / 100 / 4 - browserCanvasContext.setLineDash([1, 10]) - browserCanvasContext.stroke() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 0 + opacityCounters[i] / 100 / 4 - browserCanvasContext.setLineDash([2, 10]) - browserCanvasContext.stroke() - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CodeEditor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CodeEditor.js deleted file mode 100644 index 0c21305ea..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/CodeEditor.js +++ /dev/null @@ -1,200 +0,0 @@ - -function newCodeEditor() { - const MODULE_NAME = 'Code Editor' - - let thisObject = { - isVisibleFunction: undefined, - visible: false, - imagePathOK: undefined, - imagePathNOT_OK: undefined, - rawRadius: undefined, - targetRadius: undefined, - currentRadius: undefined, - container: undefined, - payload: undefined, - deactivate: deactivate, - activate: activate, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let isMouseOver = false - let SIZE_FACTOR = 1.0 - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.isVisibleFunction = undefined - } - - function initialize() { - - } - - function deactivate() { - if (thisObject.visible === true) { - thisObject.visible = false - let textArea = document.getElementById('textArea') - textArea.style.display = 'none' - thisObject.payload.node.code = textArea.value - } - EDITOR_ON_FOCUS = false - } - - function activate(action) { - thisObject.visible = true - thisObject.payload = action.node.payload - thisObject.rawRadius = 8 - thisObject.targetRadius = thisObject.container.frame.radius - thisObject.currentRadius = 0 - thisObject.payload.uiObject.resetErrorMessage() - - let textArea = document.getElementById('textArea') - textArea.value = thisObject.payload.node.code - textArea.style = 'resize: none;' + - ' border: none;' + - ' outline: none;' + - 'box-shadow: none;' + - 'overflow:hidden;' + - 'font-family: ' + UI_FONT.PRIMARY + ';' + - 'font-size: 14px;' + - 'background-color: rgb(' + UI_COLOR.RUSTED_RED + ');' + - 'color:rgb(255, 255, 255);' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - textArea.style.display = 'block' - textArea.focus() - EDITOR_ON_FOCUS = true - } - - function getContainer(point) { - let container - if (thisObject.visible === true) { - if (point.x === VERY_LARGE_NUMBER) { - /* The the mouse leaves the canvas, and event of mouse over with a ridiculous coordinate is triggered so that - anyone can react. In our case, the code editor has a text area that is not part of the canvas, so the event is - triggered. We compensate recognizing this coordinate and returning our container. */ - return thisObject.container - } - - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - return thisObject.container - } else { - return undefined - } - } - } - - function physics() { - if (Math.abs(thisObject.currentRadius - thisObject.targetRadius) >= 0.5) { - if (thisObject.currentRadius < thisObject.targetRadius) { - thisObject.currentRadius = thisObject.currentRadius + 0.5 - } else { - thisObject.currentRadius = thisObject.currentRadius - 0.5 - } - } - - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - thisObject.container.frame.width = thisObject.container.frame.radius * 1 * SIZE_FACTOR - thisObject.container.frame.height = thisObject.container.frame.radius * 1 * SIZE_FACTOR - - let textAreaPosition = { - x: 0 - thisObject.container.frame.width / 2, - y: 0 - thisObject.container.frame.height * 3 / 7 + CURRENT_TOP_MARGIN - } - - textAreaPosition = thisObject.container.frame.frameThisPoint(textAreaPosition) - if (thisObject.visible === true) { - let checkPosition = { - x: textAreaPosition.x, - y: textAreaPosition.y - CURRENT_TOP_MARGIN - } - if (thisObject.isVisibleFunction(checkPosition) === false) { - deactivate() - } - } - if (thisObject.visible === true) { - let textAreaDiv = document.getElementById('textAreaDiv') - textAreaDiv.style = 'position:fixed; top:' + textAreaPosition.y + 'px; left:' + textAreaPosition.x + 'px; z-index:1; ' - } - } - - function drawBackground() { - if (thisObject.visible === true) { - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - let radius = thisObject.container.frame.radius * SIZE_FACTOR - - if (radius > 0.5) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius + 3, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')' - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius , 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + 1 + ')' - browserCanvasContext.fill() - } - } - } - - function drawForeground() { - let iconPosition = { - x: 0, - y: thisObject.currentRadius * 1.5 - } - - iconPosition = thisObject.container.frame.frameThisPoint(iconPosition) - - /* Menu Item */ - - if (thisObject.canDrawIcon === true && thisObject.currentRadius > 1) { - browserCanvasContext.drawImage(thisObject.icon, iconPosition.x - thisObject.currentRadius, iconPosition.y - thisObject.currentRadius, thisObject.currentRadius * 2, thisObject.currentRadius * 2) - - /* Menu Label */ - - let label = 'Code looks good!' - let labelPoint - let fontSize = 10 - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: iconPosition.x + thisObject.currentRadius + 10, - y: iconPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConditionEditor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConditionEditor.js deleted file mode 100644 index 1d8446f3e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConditionEditor.js +++ /dev/null @@ -1,1198 +0,0 @@ - -function newConditionEditor() { - const MODULE_NAME = 'Condition Editor' - - let thisObject = { - isVisibleFunction: undefined, - visible: false, - imagePathOK: undefined, - imagePathNOT_OK: undefined, - container: undefined, - payload: undefined, - deactivate: deactivate, - activate: activate, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME, 'Circle') - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = false - thisObject.container.frame.radius = 750 - thisObject.container.frame.width = thisObject.container.frame.radius * 2 - thisObject.container.frame.height = thisObject.container.frame.radius * 2 - thisObject.container.frame.containerName = MODULE_NAME - - let isMouseOver = false - let conditionStructure - let scanResult - - let timeFrameIcon - let dataMineIcon - let botIcon - let whenIcon - let productIcon - let propertyIcon - let operationIcon - let valueIcon - - const PICKER_WIDTH = 150 - const PICKER_HEIGHT = 60 - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.isVisibleFunction = undefined - - conditionStructure = undefined - scanResult = undefined - - timeFrameIcon = undefined - dataMineIcon = undefined - whenIcon = undefined - botIcon = undefined - productIcon = undefined - operationIcon = undefined - propertyIcon = undefined - valueIcon = undefined - } - - function initialize() { - timeFrameIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'time-frame') - dataMineIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'data-mine') - botIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'indicator-bot') - whenIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'trigger-on') - productIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'product-definition') - propertyIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'record-property') - operationIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'space-settings') - valueIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'trading-strategy') - } - - function activate(action) { - thisObject.visible = true - thisObject.payload = action.node.payload - thisObject.payload.uiObject.resetErrorMessage() - - conditionStructure = { - code: '', - logicOperands: [] - } - - scanDataMines() - loadFromCode() - EDITOR_ON_FOCUS = true - } - - function deactivate() { - convertToCode() - finalizePickers() - - conditionStructure = undefined - - if (thisObject.visible === true) { - thisObject.visible = false - } - EDITOR_ON_FOCUS = false - } - - function loadFromCode() { - if (thisObject.payload.node.code === undefined) { thisObject.payload.node.code = '' } - conditionStructure.code = thisObject.payload.node.code.replace(/ /g, '') - - /* LOGICAL ORs */ - let orArray = conditionStructure.code.split('||') - for (let j = 0; j < 3; j++) { - let logicOperand = { - code: orArray[j], - index: j, - comparison: {}, - visible: false - } - - if (logicOperand.code !== undefined) { - logicOperand.visible = true - if (orArray[j + 1] !== undefined) { - logicOperand.operator = '||' - } - } else { - logicOperand.code = '' - } - - checkComparison(logicOperand, j) - conditionStructure.logicOperands.push(logicOperand) - } - - function checkComparison(logicOperand) { - /* We are going to decompose the code into 2 comparison operators */ - logicOperand.comparison.operandA = { - index: 0, - code: '' - } - logicOperand.comparison.operandB = { - index: 1, - code: '' - } - - if (logicOperand.code.indexOf('>') > 0) { - let codeArray = logicOperand.code.split('>') - logicOperand.comparison.operandA.code = codeArray[0] - logicOperand.comparison.operandB.code = codeArray[1] - logicOperand.comparison.operator = '>' - logicOperand.comparison.operatorIndex = 0 - } - - if (logicOperand.code.indexOf('<') > 0) { - let codeArray = logicOperand.code.split('<') - logicOperand.comparison.operandA.code = codeArray[0] - logicOperand.comparison.operandB.code = codeArray[1] - logicOperand.comparison.operator = '<' - logicOperand.comparison.operatorIndex = 1 - } - - if (logicOperand.code.indexOf('>=') > 0) { - let codeArray = logicOperand.code.split('>=') - logicOperand.comparison.operandA.code = codeArray[0] - logicOperand.comparison.operandB.code = codeArray[1] - logicOperand.comparison.operator = '>=' - logicOperand.comparison.operatorIndex = 2 - } - - if (logicOperand.code.indexOf('<=') > 0) { - let codeArray = logicOperand.code.split('<=') - logicOperand.comparison.operandA.code = codeArray[0] - logicOperand.comparison.operandB.code = codeArray[1] - logicOperand.comparison.operator = '<=' - logicOperand.comparison.operatorIndex = 3 - } - - if (logicOperand.code.indexOf('===') > 0) { - let codeArray = logicOperand.code.split('===') - logicOperand.comparison.operandA.code = codeArray[0] - logicOperand.comparison.operandB.code = codeArray[1] - logicOperand.comparison.operator = '===' - logicOperand.comparison.operatorIndex = 4 - } - - /* Each comparison code may have one or more algebra operators */ - checkAlgebra(logicOperand, logicOperand.comparison.operandA) - checkAlgebra(logicOperand, logicOperand.comparison.operandB) - } - - function checkAlgebra(logicOperand, comparisonOperand) { - comparisonOperand.algebra = { - operandA: { index: 0 }, - operandB: { index: 1 } - } - - /* The default situation is that there is no algebra operation, meaning we will setup a algebra operation only with operandA */ - comparisonOperand.algebra.operandA.code = comparisonOperand.code - comparisonOperand.algebra.operandB.code = '' - comparisonOperand.algebra.operator = '...' - comparisonOperand.algebra.operatorIndex = 0 - - if (comparisonOperand.code.indexOf('+') > 0) { - let codeArray = comparisonOperand.code.split('+') - comparisonOperand.algebra.operandA.code = codeArray[0] - comparisonOperand.algebra.operandB.code = codeArray[1] - comparisonOperand.algebra.operator = '+' - comparisonOperand.algebra.operatorIndex = 1 - } - - if (comparisonOperand.code.indexOf('-') > 0) { - let codeArray = comparisonOperand.code.split('-') - comparisonOperand.algebra.operandA.code = codeArray[0] - comparisonOperand.algebra.operandB.code = codeArray[1] - comparisonOperand.algebra.operator = '-' - comparisonOperand.algebra.operatorIndex = 2 - } - - if (comparisonOperand.code.indexOf('*') > 0) { - let codeArray = comparisonOperand.code.split('*') - comparisonOperand.algebra.operandA.code = codeArray[0] - comparisonOperand.algebra.operandB.code = codeArray[1] - comparisonOperand.algebra.operator = '*' - comparisonOperand.algebra.operatorIndex = 3 - } - - if (comparisonOperand.code.indexOf('/') > 0) { - let codeArray = comparisonOperand.code.split('/') - comparisonOperand.algebra.operandA.code = codeArray[0] - comparisonOperand.algebra.operandB.code = codeArray[1] - comparisonOperand.algebra.operator = '/' - comparisonOperand.algebra.operatorIndex = 4 - } - - initializePickersSet(logicOperand, comparisonOperand, comparisonOperand.algebra.operandA) - initializePickersSet(logicOperand, comparisonOperand, comparisonOperand.algebra.operandB) - updatePickers(logicOperand, comparisonOperand, comparisonOperand.algebra.operandA) - updatePickers(logicOperand, comparisonOperand, comparisonOperand.algebra.operandB) - } - - function initializePickersSet(logicOperand, comparisonOperand, algebraOperand) { - const ALGEBRA_SEPARATION = PICKER_HEIGHT - const COMPARISON_SEPARATION = ALGEBRA_SEPARATION * 2 - const LOGIC_SEPARATION = COMPARISON_SEPARATION * 2 - - let properties - let parent - let current - let yOffset = (logicOperand.index - 1) * LOGIC_SEPARATION + (comparisonOperand.index - 0.5) * COMPARISON_SEPARATION + (algebraOperand.index - 0.5) * ALGEBRA_SEPARATION - - if (algebraOperand.index === 0) { - comparisonOperand.algebra.picker = newPicker() - let picker = comparisonOperand.algebra.picker - picker.name = 'Algebra' - picker.container.connectToParent(thisObject.container) - picker.container.frame.position.x = 0 - picker.container.frame.width / 2 + picker.container.frame.width * 2.5 - picker.container.frame.position.y = 0 - picker.container.frame.height / 2 + yOffset - current = ['...', 'Plus', 'Minus', 'Times', 'Divided by'] - picker.initialize(current, current) - switch (comparisonOperand.algebra.operator) { - case '+': { - picker.setSelected(undefined, undefined, undefined, 1) - break - } - case '-': { - picker.setSelected(undefined, undefined, undefined, 2) - break - } - case '*': { - picker.setSelected(undefined, undefined, undefined, 3) - break - } - case '/': { - picker.setSelected(undefined, undefined, undefined, 4) - break - } - } - picker.visible = true - let structureBranch = { - logicOperand: logicOperand, - comparisonOperand: comparisonOperand, - algebraOperand: algebraOperand, - pickerName: 'Algebra' - } - picker.eventSuscriptionId = picker.container.eventHandler.listenToEvent('onParentChanged', onParentChanged, structureBranch) - } - - if (comparisonOperand.index === 0 && algebraOperand.index === 1) { - logicOperand.comparison.picker = newPicker() - let picker = logicOperand.comparison.picker - picker.name = 'Comparison' - picker.container.connectToParent(thisObject.container) - picker.container.frame.position.x = 0 - picker.container.frame.width / 2 + picker.container.frame.width * 2.5 - picker.container.frame.position.y = 0 - picker.container.frame.height / 2 + yOffset - let optionsList = ['Greater Than', 'Less Than', 'Greater or Equal Than', 'Less or Equal Than', 'Equal To'] - picker.initialize(optionsList) - switch (logicOperand.comparison.operator) { - case '>': { - picker.setSelected(undefined, undefined, undefined, 0) - break - } - case '<': { - picker.setSelected(undefined, undefined, undefined, 1) - break - } - case '>=': { - picker.setSelected(undefined, undefined, undefined, 2) - break - } - case '<=': { - picker.setSelected(undefined, undefined, undefined, 3) - break - } - case '===': { - picker.setSelected(undefined, undefined, undefined, 4) - break - } - } - picker.visible = true - let structureBranch = { - logicOperand: logicOperand, - comparisonOperand: comparisonOperand, - algebraOperand: algebraOperand, - pickerName: 'Comparison' - } - picker.eventSuscriptionId = picker.container.eventHandler.listenToEvent('onParentChanged', onParentChanged, structureBranch) - } - - if (comparisonOperand.index === 1 && algebraOperand.index === 1 && logicOperand.index <= 1) { - logicOperand.picker = newPicker() - let picker = logicOperand.picker - picker.name = 'Logic' - picker.container.connectToParent(thisObject.container) - picker.container.frame.position.x = 0 - picker.container.frame.width / 2 + picker.container.frame.width * 2.5 - picker.container.frame.position.y = 0 - picker.container.frame.height / 2 + yOffset - let optionsList = ['...', 'OR'] - picker.initialize(optionsList) - if (logicOperand.operator === '||') { - picker.setSelected(undefined, undefined, undefined, 1) - } - picker.visible = true - let structureBranch = { - logicOperand: logicOperand, - comparisonOperand: comparisonOperand, - algebraOperand: algebraOperand, - pickerName: 'Logic' - } - picker.eventSuscriptionId = picker.container.eventHandler.listenToEvent('onParentChanged', onParentChanged, structureBranch) - } - - let visible = true - if (algebraOperand.index === 1 && comparisonOperand.algebra.picker.getSelected() === '...') { visible = false } - if (logicOperand.comparison.picker !== undefined && comparisonOperand.index === 1 && logicOperand.comparison.picker.getSelected() === 'Equal To') { visible = false } - - algebraOperand.whenPicker = newPicker() - algebraOperand.whenPicker.name = 'When' - algebraOperand.whenPicker.container.connectToParent(thisObject.container) - algebraOperand.whenPicker.container.frame.position.x = 0 - algebraOperand.whenPicker.container.frame.width / 2 - algebraOperand.whenPicker.container.frame.width * 0.5 - algebraOperand.whenPicker.container.frame.position.y = 0 - algebraOperand.whenPicker.container.frame.height / 2 + yOffset - current = ['Current', '1 Previous', '2 Previous', '3 Previous', '4 Previous', '5 Previous'] - algebraOperand.whenPicker.initialize(current, current) - algebraOperand.whenPicker.visible = visible - - algebraOperand.dataMinePicker = newPicker() - algebraOperand.dataMinePicker.name = 'Data Mine' - algebraOperand.dataMinePicker.container.connectToParent(thisObject.container) - algebraOperand.dataMinePicker.container.frame.position.x = 0 - algebraOperand.dataMinePicker.container.frame.width / 2 - algebraOperand.dataMinePicker.container.frame.width * 2.5 - algebraOperand.dataMinePicker.container.frame.position.y = 0 - algebraOperand.dataMinePicker.container.frame.height / 2 + yOffset - current = scanResult - properties = Object.keys(current) - algebraOperand.dataMinePicker.initialize(properties, current) - parent = current - algebraOperand.dataMinePicker.visible = visible - - algebraOperand.botPicker = newPicker() - algebraOperand.botPicker.name = 'Bot' - algebraOperand.botPicker.container.connectToParent(thisObject.container) - algebraOperand.botPicker.container.frame.position.x = 0 - algebraOperand.botPicker.container.frame.width / 2 - algebraOperand.botPicker.container.frame.width * 1.5 - algebraOperand.botPicker.container.frame.position.y = 0 - algebraOperand.botPicker.container.frame.height / 2 + yOffset - current = parent[properties[0]] - properties = Object.keys(current) - algebraOperand.botPicker.initialize(properties, current, parent) - parent = current - algebraOperand.botPicker.visible = visible - - algebraOperand.productPicker = newPicker() - algebraOperand.productPicker.name = 'Product' - algebraOperand.productPicker.container.connectToParent(thisObject.container) - algebraOperand.productPicker.container.frame.position.x = 0 - algebraOperand.productPicker.container.frame.width / 2 + algebraOperand.productPicker.container.frame.width * 0.5 - algebraOperand.productPicker.container.frame.position.y = 0 - algebraOperand.productPicker.container.frame.height / 2 + yOffset - current = parent[properties[0]] - properties = Object.keys(current) - algebraOperand.productPicker.initialize(properties, current, parent) - parent = current - algebraOperand.productPicker.visible = visible - - let productParent = parent - let productProperties = properties - - algebraOperand.propertyPicker = newPicker() - algebraOperand.propertyPicker.name = 'Property' - algebraOperand.propertyPicker.container.connectToParent(thisObject.container) - algebraOperand.propertyPicker.container.frame.position.x = 0 - algebraOperand.propertyPicker.container.frame.width / 2 + algebraOperand.propertyPicker.container.frame.width * 1.5 - algebraOperand.propertyPicker.container.frame.position.y = 0 - algebraOperand.propertyPicker.container.frame.height / 2 + yOffset - current = productParent[productProperties[0]] - current = current.properties - properties = Object.keys(current) - algebraOperand.propertyPicker.initialize(properties, current, productParent, 'properties') - parent = current - algebraOperand.propertyPicker.visible = visible - - algebraOperand.valuePicker = newPicker() - algebraOperand.valuePicker.name = 'Value' - algebraOperand.valuePicker.container.connectToParent(thisObject.container) - algebraOperand.valuePicker.container.frame.position.x = 0 - algebraOperand.valuePicker.container.frame.width / 2 + algebraOperand.valuePicker.container.frame.width * 3.5 - algebraOperand.valuePicker.container.frame.position.y = 0 - algebraOperand.valuePicker.container.frame.height / 2 + yOffset + ALGEBRA_SEPARATION - current = parent[properties[0]] - properties = current.possibleValues - algebraOperand.valuePicker.initialize(properties, current, parent, 'possibleValues') - parent = current - algebraOperand.valuePicker.visible = false - if (logicOperand.comparison.picker !== undefined && logicOperand.comparison.picker.getSelected() === 'Equal To') { - comparisonOperand.algebra.operandA.valuePicker.visible = true - } - - algebraOperand.timeFramePicker = newPicker() - algebraOperand.timeFramePicker.name = 'Time Frame' - algebraOperand.timeFramePicker.container.connectToParent(thisObject.container) - algebraOperand.timeFramePicker.container.frame.position.x = 0 - algebraOperand.timeFramePicker.container.frame.width / 2 - algebraOperand.timeFramePicker.container.frame.width * 3.0 - algebraOperand.timeFramePicker.container.frame.position.y = 0 - algebraOperand.timeFramePicker.container.frame.height / 2 + yOffset - algebraOperand.timeFramePicker.container.frame.width = algebraOperand.timeFramePicker.container.frame.width / 2 - current = productParent[productProperties[0]] - properties = current.validTimeFrames - algebraOperand.timeFramePicker.initialize(properties, current, productParent, 'validTimeFrames') - parent = current - algebraOperand.timeFramePicker.visible = visible - - algebraOperand.botPicker.eventSuscriptionId = algebraOperand.dataMinePicker.container.eventHandler.listenToEvent('onParentChanged', algebraOperand.botPicker.onParentChanged) - algebraOperand.productPicker.eventSuscriptionId = algebraOperand.botPicker.container.eventHandler.listenToEvent('onParentChanged', algebraOperand.productPicker.onParentChanged) - algebraOperand.propertyPicker.eventSuscriptionId = algebraOperand.productPicker.container.eventHandler.listenToEvent('onParentChanged', algebraOperand.propertyPicker.onParentChanged) - algebraOperand.valuePicker.eventSuscriptionId = algebraOperand.propertyPicker.container.eventHandler.listenToEvent('onParentChanged', algebraOperand.valuePicker.onParentChanged) - algebraOperand.timeFramePicker.eventSuscriptionId = algebraOperand.productPicker.container.eventHandler.listenToEvent('onParentChanged', algebraOperand.timeFramePicker.onParentChanged) - } - - function updatePickers(logicOperand, comparisonOperand, algebraOperand) { - let codeArray = algebraOperand.code.split('.') - - let codeTimeFrame - if (codeArray[1] !== undefined) { - codeTimeFrame = codeArray[1].substring(2, 4) + '-' + codeArray[1].substring(4, 7) - } - - let codeProduct - if (codeArray[2] !== undefined) { - codeProduct = codeArray[2] - } - - /* Parse When */ - let propertyDisplacement = 0 - let codeWhen = 'Current' - if (codeArray[3] === 'previous') { - propertyDisplacement++ - codeWhen = '1 Previous' - } - if (codeArray[4] === 'previous') { - propertyDisplacement++ - codeWhen = '2 Previous' - } - if (codeArray[5] === 'previous') { - propertyDisplacement++ - codeWhen = '3 Previous' - } - if (codeArray[6] === 'previous') { - propertyDisplacement++ - codeWhen = '4 Previous' - } - if (codeArray[7] === 'previous') { - propertyDisplacement++ - codeWhen = '5 Previous' - } - algebraOperand.whenPicker.setSelected(undefined, undefined, undefined, propertyDisplacement) - - let codeProperty - if (codeArray[3 + propertyDisplacement] !== undefined) { - codeProperty = codeArray[3 + propertyDisplacement] - } - - let codeValue = logicOperand.comparison.operandB.code.replace('"', '').replace('"', '') - - let dataMines = Object.keys(scanResult) - for (let i = 0; i < dataMines.length; i++) { - let dataMine = dataMines[i] - let dataMineObject = scanResult[dataMine] - let bots = Object.keys(dataMineObject) - for (let j = 0; j < bots.length; j++) { - let bot = bots[j] - let botObject = dataMineObject[bot] - let products = Object.keys(botObject) - for (let k = 0; k < products.length; k++) { - let product = products[k] - let productObject = botObject[product] - if (codeProduct === product) { - algebraOperand.dataMinePicker.setSelected(dataMines, scanResult, undefined, i) - algebraOperand.botPicker.setSelected(bots, dataMineObject, scanResult, j) - algebraOperand.productPicker.setSelected(products, botObject, dataMineObject, k) - let properties = Object.keys(productObject.properties) - for (let m = 0; m < properties.length; m++) { - let property = properties[m] - let propertyObject = productObject.properties[property] - if (codeProperty === property) { - algebraOperand.propertyPicker.setSelected(properties, productObject.properties, botObject, m) - let values = propertyObject.possibleValues - for (let n = 0; n < values.length; n++) { - let value = values[n] - let valueObject = propertyObject[value] - if (codeValue === value) { - algebraOperand.valuePicker.setSelected(values, propertyObject, productObject, n) - } - } - } - } - let timeFrames = productObject.validTimeFrames - for (let m = 0; m < timeFrames.length; m++) { - let timeFrame = timeFrames[m] - let timeFrameObject = productObject.validTimeFrames[timeFrame] - if (codeTimeFrame === timeFrame) { - algebraOperand.timeFramePicker.setSelected(timeFrames, productObject, botObject, m) - } - } - } - } - } - } - } - } - - function scanDataMines() { - let selector = {} - - let workspace = UI.projects.superalgos.spaces.designSpace.workspace.workspaceNode - - for (let i = 0; i < workspace.rootNodes.length; i++) { - let rootNode = workspace.rootNodes[i] - if (rootNode.type !== 'Data Mine') { continue } - let dataMine = rootNode - let dataMineName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(dataMine.payload, 'codeName') - selector[dataMineName] = {} - let bots = dataMine.sensorBots.concat(dataMine.indicatorBots) - for (let j = 0; j < bots.length; j++) { - let bot = bots[j] - let botName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(bot.payload, 'codeName') - let selectorDataMine = selector[dataMineName] - selectorDataMine[botName] = {} - for (let k = 0; k < bot.products.length; k++) { - let product = bot.products[k] - let productName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(product.payload, 'singularVariableName') - if (productName === undefined) { continue } - let selectorProduct = selectorDataMine[botName] - selectorProduct[productName] = { - properties: {} - } - if (product.record === undefined) { continue } - for (let m = 0; m < product.record.properties.length; m++) { - let property = product.record.properties[m] - let propertyName = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(property.payload, 'codeName') - let selectorProperty = selectorProduct[productName] - selectorProperty = selectorProperty.properties - selectorProperty[propertyName] = {} - let possibleValues = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(property.payload, 'possibleValues') - if (possibleValues === undefined) { possibleValues = [] } - let selectorPossibleValue = selectorProperty[propertyName] - selectorPossibleValue.possibleValues = possibleValues - } - let allPossibleTimeFrames = [] - for (let m = 0; m < product.datasets.length; m++) { - let dataset = product.datasets[m] - let validTimeFrames = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(dataset.payload, 'validTimeFrames') - if (validTimeFrames !== undefined) { - allPossibleTimeFrames = allPossibleTimeFrames.concat(validTimeFrames) - } - } - let selectorValidTimeFrames = selectorProduct[productName] - selectorValidTimeFrames.validTimeFrames = allPossibleTimeFrames - - let productKeys = Object.keys(selectorProduct[productName]) - if (productKeys.length === 0) { - selectorProduct[productName] = undefined - } - } - let botKeys = Object.keys(selectorDataMine[botName]) - if (botKeys.length === 0) { - selectorDataMine[botName] = undefined - } - } - let dataMineKeys = Object.keys(selector[dataMineName]) - if (dataMineKeys.length === 0) { - selector[dataMineName] = undefined - } - } - scanResult = JSON.parse(JSON.stringify(selector)) - } - - function convertToCode() { - if (conditionStructure === undefined) { return } - - // chart.at01hs.bollingerSubChannel.previous.previous.slope=== "Extreme" - - let code = '' - - for (let i = 0; i < conditionStructure.logicOperands.length; i++) { - let logicOperand = conditionStructure.logicOperands[i] - logicOperandToCode(logicOperand) - if (logicOperand.picker.getSelected() !== 'OR') { - break - } else { - code = code + ' || ' - } - } - - thisObject.payload.node.code = code - - function logicOperandToCode(logicOperand) { - algebraOperandToCode(logicOperand.comparison.operandA.algebra.operandA) - if (logicOperand.comparison.operandA.algebra.picker.getSelected() !== '...') { - insertAlgebraOperator(logicOperand.comparison.operandA.algebra) - algebraOperandToCode(logicOperand.comparison.operandA.algebra.operandB) - } - - switch (logicOperand.comparison.picker.getSelected()) { - case 'Greater Than': { - code = code + ' > ' - break - } - case 'Less Than': { - code = code + ' < ' - break - } - case 'Greater or Equal Than': { - code = code + ' >= ' - break - } - case 'Less or Equal Than': { - code = code + ' <= ' - break - } - case 'Equal To': { - code = code + ' === ' - break - } - } - - if (logicOperand.comparison.picker.getSelected() === 'Equal To') { - code = code + '"' + logicOperand.comparison.operandA.algebra.operandA.valuePicker.getSelected() + '"' - } else { - algebraOperandToCode(logicOperand.comparison.operandB.algebra.operandA) - if (logicOperand.comparison.operandB.algebra.picker.getSelected() !== '...') { - insertAlgebraOperator(logicOperand.comparison.operandB.algebra) - algebraOperandToCode(logicOperand.comparison.operandB.algebra.operandB) - } - } - - function algebraOperandToCode(algebraOperand) { - if (algebraOperand.timeFramePicker.getSelected() === 'Any Time Frame') { - code = code + 'chart.atAnyTimeFrame' - } else { - code = code + 'chart.at' + algebraOperand.timeFramePicker.getSelected().replace('-', '') - } - - code = code + '.' + algebraOperand.productPicker.getSelected() - insertWhen(algebraOperand) - code = code + '.' + algebraOperand.propertyPicker.getSelected() - } - - function insertAlgebraOperator(algebra) { - switch (algebra.picker.getSelected()) { - case '...': { - return - } - case 'Plus': { - code = code + ' + ' - return - } - case 'Minus': { - code = code + ' - ' - return - } - case 'Times': { - code = code + ' * ' - return - } - case 'Divided by': { - code = code + ' / ' - return - } - } - } - function insertWhen(algebraOperand) { - switch (algebraOperand.whenPicker.getSelected()) { - case 'Current': { - return - } - case '1 Previous': { - code = code + '.previous' - return - } - case '2 Previous': { - code = code + '.previous.previous' - return - } - case '3 Previous': { - code = code + '.previous.previous.previous' - return - } - case '4 Previous': { - code = code + '.previous.previous.previous.previous' - return - } - case '5 Previous': { - code = code + '.previous.previous.previous.previous.previous' - return - } - } - } - } - } - - function finalizePickers() { - if (conditionStructure === undefined) { return } - for (let i = 0; i < conditionStructure.logicOperands.length; i++) { - let logicOperand = conditionStructure.logicOperands[i] - finalizeOperator(logicOperand.comparison.operandA.algebra.operandA) - finalizeOperator(logicOperand.comparison.operandA.algebra.operandB) - finalizeOperator(logicOperand.comparison.operandB.algebra.operandA) - finalizeOperator(logicOperand.comparison.operandB.algebra.operandB) - - if (logicOperand.comparison.operandA.algebra.picker !== undefined) { - logicOperand.comparison.operandA.algebra.picker.container.eventHandler.stopListening(logicOperand.comparison.operandA.algebra.picker.eventSuscriptionId) - logicOperand.comparison.operandA.algebra.picker.finalize() - } - - if (logicOperand.comparison.operandB.algebra.picker !== undefined) { - logicOperand.comparison.operandB.algebra.picker.container.eventHandler.stopListening(logicOperand.comparison.operandB.algebra.picker.eventSuscriptionId) - logicOperand.comparison.operandB.algebra.picker.finalize() - } - - if (logicOperand.comparison.picker !== undefined) { - logicOperand.comparison.picker.container.eventHandler.stopListening(logicOperand.comparison.picker.eventSuscriptionId) - logicOperand.comparison.picker.finalize() - } - - if (logicOperand.picker !== undefined) { - logicOperand.picker.container.eventHandler.stopListening(logicOperand.picker.eventSuscriptionId) - logicOperand.picker.finalize() - } - } - } - - function finalizeOperator(operand) { - if (operand === undefined) { return } - - if (operand.whenPicker !== undefined) { - operand.whenPicker.finalize() - operand.whenPicker = undefined - } - - if (operand.dataMinePicker !== undefined) { - operand.dataMinePicker.container.eventHandler.stopListening(operand.botPicker.eventSuscriptionId) - operand.dataMinePicker.finalize() - operand.dataMinePicker = undefined - } - - if (operand.botPicker !== undefined) { - operand.botPicker.container.eventHandler.stopListening(operand.productPicker.eventSuscriptionId) - operand.botPicker.finalize() - operand.botPicker = undefined - } - - if (operand.productPicker !== undefined) { - operand.productPicker.container.eventHandler.stopListening(operand.propertyPicker.eventSuscriptionId) - operand.productPicker.container.eventHandler.stopListening(operand.timeFramePicker.eventSuscriptionId) - operand.productPicker.finalize() - operand.productPicker = undefined - } - - if (operand.propertyPicker !== undefined) { - operand.propertyPicker.container.eventHandler.stopListening(operand.valuePicker.eventSuscriptionId) - operand.propertyPicker.finalize() - operand.propertyPicker = undefined - } - - if (operand.valuePicker !== undefined) { - operand.valuePicker.finalize() - operand.valuePicker = undefined - } - - if (operand.timeFramePicker !== undefined) { - operand.timeFramePicker.finalize() - operand.timeFramePicker = undefined - } - } - - function onParentChanged(event, structureBranch) { - let logicOperand = structureBranch.logicOperand - - if (structureBranch.pickerName === 'Logic') { - if (event.selected === 0) { - if (logicOperand.index === 0) { - conditionStructure.logicOperands[1].visible = false - conditionStructure.logicOperands[2].visible = false - } - if (logicOperand.index === 1) { - conditionStructure.logicOperands[2].visible = false - } - } else { - if (logicOperand.index === 0) { - conditionStructure.logicOperands[1].visible = true - - if (conditionStructure.logicOperands[1].picker.getSelected() !== '...') { - conditionStructure.logicOperands[2].visible = true - } - } - if (logicOperand.index === 1) { - conditionStructure.logicOperands[2].visible = true - } - } - } - - if (structureBranch.pickerName === 'Algebra') { - if (event.selected === 0) { - setVisibility(structureBranch.comparisonOperand.algebra.operandB, false) - } else { - setVisibility(structureBranch.comparisonOperand.algebra.operandB, true) - } - } - - if (structureBranch.pickerName === 'Comparison') { - if (event.selected === 4) { - // this means Equal To - - logicOperand.comparison.operandA.algebra.operandA.valuePicker.visible = true - logicOperand.comparison.operandA.algebra.picker.visible = false - logicOperand.comparison.operandB.algebra.picker.visible = false - setVisibility(logicOperand.comparison.operandA.algebra.operandB, false) - setVisibility(logicOperand.comparison.operandB.algebra.operandA, false) - setVisibility(logicOperand.comparison.operandB.algebra.operandB, false) - } else { - logicOperand.comparison.operandA.algebra.operandA.valuePicker.visible = false - logicOperand.comparison.operandA.algebra.picker.visible = true - logicOperand.comparison.operandB.algebra.picker.visible = true - if (logicOperand.comparison.operandA.algebra.picker.getSelected() !== '...') { - setVisibility(logicOperand.comparison.operandA.algebra.operandB, true) - } - - if (logicOperand.comparison.picker.getSelected() !== 'Equal To') { - setVisibility(logicOperand.comparison.operandB.algebra.operandA, true) - } - - if (logicOperand.comparison.operandB.algebra.picker.getSelected() !== '...') { - setVisibility(logicOperand.comparison.operandB.algebra.operandB, true) - } - } - } - - function setLogicOperanVisibility(logicOperand, isVisible) { - - } - - function setVisibility(algebraOperand, isVisible) { - algebraOperand.whenPicker.visible = isVisible - algebraOperand.dataMinePicker.visible = isVisible - algebraOperand.botPicker.visible = isVisible - algebraOperand.productPicker.visible = isVisible - algebraOperand.propertyPicker.visible = isVisible - algebraOperand.timeFramePicker.visible = isVisible - } - } - - function getContainer(point) { - let container - if (thisObject.visible === true) { - if (conditionStructure === undefined) { return } - - for (let i = 0; i < conditionStructure.logicOperands.length; i++) { - let logicOperand = conditionStructure.logicOperands[i] - if (logicOperand.visible !== true) { continue } - - container = operandGetContainer(point, logicOperand.comparison.operandA.algebra.operandA) - if (container !== undefined) { return container } - container = operandGetContainer(point, logicOperand.comparison.operandA.algebra.operandB) - if (container !== undefined) { return container } - container = operandGetContainer(point, logicOperand.comparison.operandB.algebra.operandA) - if (container !== undefined) { return container } - container = operandGetContainer(point, logicOperand.comparison.operandB.algebra.operandB) - if (container !== undefined) { return container } - - if (container = logicOperand.comparison.operandA.algebra.picker !== undefined) { - if (container = logicOperand.comparison.operandA.algebra.picker.visible === true) { - container = logicOperand.comparison.operandA.algebra.picker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (logicOperand.comparison.operandB.algebra.picker !== undefined) { - if (container = logicOperand.comparison.operandB.algebra.picker.visible === true) { - container = logicOperand.comparison.operandB.algebra.picker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (container = logicOperand.comparison.picker !== undefined) { - if (container = logicOperand.comparison.picker.visible === true) { - container = logicOperand.comparison.picker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (container = logicOperand.picker !== undefined) { - if (container = logicOperand.picker.visible === true) { - container = logicOperand.picker.getContainer(point) - if (container !== undefined) { return container } - } - } - } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - } - - function operandGetContainer(point, operand) { - let container - if (operand.whenPicker !== undefined) { - if (operand.whenPicker.visible === true) { - container = operand.whenPicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.dataMinePicker !== undefined) { - if (operand.dataMinePicker.visible === true) { - container = operand.dataMinePicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.botPicker !== undefined) { - if (operand.botPicker.visible === true) { - container = operand.botPicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.productPicker !== undefined) { - if (operand.productPicker.visible === true) { - container = operand.productPicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.propertyPicker !== undefined) { - if (operand.propertyPicker.visible === true) { - container = operand.propertyPicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.valuePicker !== undefined) { - if (operand.valuePicker.visible === true) { - container = operand.valuePicker.getContainer(point) - if (container !== undefined) { return container } - } - } - - if (operand.timeFramePicker !== undefined) { - if (operand.timeFramePicker.visible === true) { - container = operand.timeFramePicker.getContainer(point) - if (container !== undefined) { return container } - } - } - } - - function physics() { - - } - - function drawBackground() { - thisObjectDrawBackground() - childrenDrawBackground() - } - - function childrenDrawBackground() { - if (conditionStructure === undefined) { return } - - for (let i = 0; i < conditionStructure.logicOperands.length; i++) { - let logicOperand = conditionStructure.logicOperands[i] - if (logicOperand.visible !== true) { continue } - - operandDrawBackground(logicOperand.comparison.operandA.algebra.operandA) - operandDrawBackground(logicOperand.comparison.operandA.algebra.operandB) - operandDrawBackground(logicOperand.comparison.operandB.algebra.operandA) - operandDrawBackground(logicOperand.comparison.operandB.algebra.operandB) - - if (logicOperand.comparison.operandA.algebra.picker !== undefined) { - if (logicOperand.comparison.operandA.algebra.picker.visible === true) { - logicOperand.comparison.operandA.algebra.picker.drawBackground() - } - } - if (logicOperand.comparison.operandB.algebra.picker !== undefined) { - if (logicOperand.comparison.operandB.algebra.picker.visible === true) { - logicOperand.comparison.operandB.algebra.picker.drawBackground() - } - } - if (logicOperand.comparison.picker !== undefined) { - if (logicOperand.comparison.picker.visible === true) { - logicOperand.comparison.picker.drawBackground() - } - } - if (logicOperand.picker !== undefined) { - if (logicOperand.picker.visible === true) { - logicOperand.picker.drawBackground() - } - } - } - } - - function operandDrawBackground(operand) { - if (operand === undefined) { return } - - if (operand.whenPicker !== undefined) { - if (operand.whenPicker.visible === true) { - operand.whenPicker.drawBackground() - } - } - - if (operand.dataMinePicker !== undefined) { - if (operand.dataMinePicker.visible === true) { - operand.dataMinePicker.drawBackground() - } - } - - if (operand.botPicker !== undefined) { - if (operand.botPicker.visible === true) { - operand.botPicker.drawBackground() - } - } - - if (operand.productPicker !== undefined) { - if (operand.productPicker.visible === true) { - operand.productPicker.drawBackground() - } - } - - if (operand.propertyPicker !== undefined) { - if (operand.propertyPicker.visible === true) { - operand.propertyPicker.drawBackground() - } - } - - if (operand.valuePicker !== undefined) { - if (operand.valuePicker.visible === true) { - operand.valuePicker.drawBackground() - } - } - - if (operand.timeFramePicker !== undefined) { - if (operand.timeFramePicker.visible === true) { - operand.timeFramePicker.drawBackground() - } - } - } - - function thisObjectDrawBackground() { - if (thisObject.visible === true) { - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - let radius = thisObject.container.frame.radius - - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius + 3, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')' - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREY + ', ' + 1 + ')' - browserCanvasContext.fill() - } - } - - function drawForeground() { - thisObjectDrawForeground() - childrenDrawForeground() - } - - function childrenDrawForeground() { - if (conditionStructure === undefined) { return } - - for (let i = 0; i < conditionStructure.logicOperands.length; i++) { - let logicOperand = conditionStructure.logicOperands[i] - if (logicOperand.visible !== true) { continue } - - operandDrawForeground(logicOperand.comparison.operandA.algebra.operandA) - operandDrawForeground(logicOperand.comparison.operandA.algebra.operandB) - operandDrawForeground(logicOperand.comparison.operandB.algebra.operandA) - operandDrawForeground(logicOperand.comparison.operandB.algebra.operandB) - - if (logicOperand.comparison.operandA.algebra.picker !== undefined) { - if (logicOperand.comparison.operandA.algebra.picker.visible === true) { - logicOperand.comparison.operandA.algebra.picker.drawForeground() - } - } - if (logicOperand.comparison.operandB.algebra.picker !== undefined) { - if (logicOperand.comparison.operandB.algebra.picker.visible === true) { - logicOperand.comparison.operandB.algebra.picker.drawForeground() - } - } - if (logicOperand.comparison.picker !== undefined) { - if (logicOperand.comparison.picker.visible === true) { - logicOperand.comparison.picker.drawForeground() - } - } - if (logicOperand.picker !== undefined) { - if (logicOperand.picker.visible === true) { - logicOperand.picker.drawForeground() - } - } - } - } - - function operandDrawForeground(operand) { - if (operand === undefined) { return } - - if (operand.whenPicker !== undefined) { - if (operand.whenPicker.visible === true) { - operand.whenPicker.drawForeground() - } - } - - if (operand.dataMinePicker !== undefined) { - if (operand.dataMinePicker.visible === true) { - operand.dataMinePicker.drawForeground() - } - } - - if (operand.botPicker !== undefined) { - if (operand.botPicker.visible === true) { - operand.botPicker.drawForeground() - } - } - - if (operand.productPicker !== undefined) { - if (operand.productPicker.visible === true) { - operand.productPicker.drawForeground() - } - } - - if (operand.propertyPicker !== undefined) { - if (operand.propertyPicker.visible === true) { - operand.propertyPicker.drawForeground() - } - } - - if (operand.valuePicker !== undefined) { - if (operand.valuePicker.visible === true) { - operand.valuePicker.drawForeground() - } - } - - if (operand.timeFramePicker !== undefined) { - if (operand.timeFramePicker.visible === true) { - operand.timeFramePicker.drawForeground() - } - } - } - - function thisObjectDrawForeground() { - if (thisObject.visible === true) { - const SIZE = 36 - UI.projects.superalgos.utilities.drawPrint.drawIcon(timeFrameIcon, 0, 0, -PICKER_WIDTH * 3.25, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(dataMineIcon, 0, 0, -PICKER_WIDTH * 2.5, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(botIcon, 0, 0, -PICKER_WIDTH * 1.5, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(whenIcon, 0, 0, -PICKER_WIDTH * 0.5, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(productIcon, 0, 0, PICKER_WIDTH * 0.5, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(propertyIcon, 0, 0, PICKER_WIDTH * 1.45, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(operationIcon, 0, 0, PICKER_WIDTH * 2.45, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(valueIcon, 0, 0, PICKER_WIDTH * 3.45, -PICKER_HEIGHT * 7, SIZE, thisObject.container) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConfigEditor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConfigEditor.js deleted file mode 100644 index 94eb25c9a..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/ConfigEditor.js +++ /dev/null @@ -1,205 +0,0 @@ - -function newConfigEditor() { - const MODULE_NAME = 'Config Editor' - - let thisObject = { - isVisibleFunction: undefined, - visible: false, - imagePathOK: undefined, - imagePathNOT_OK: undefined, - rawRadius: undefined, - targetRadius: undefined, - currentRadius: undefined, - container: undefined, - payload: undefined, - deactivate: deactivate, - activate: activate, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let isMouseOver = false - let SIZE_FACTOR = 1 - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.isVisibleFunction = undefined - } - - function initialize() { - - } - - function deactivate() { - if (thisObject.visible === true) { - thisObject.visible = false - let textArea = document.getElementById('textArea') - textArea.style.display = 'none' - thisObject.payload.node.config = textArea.value - - try { - let config = JSON.parse(thisObject.payload.node.config) - } catch (err) { - thisObject.payload.uiObject.setErrorMessage(err.message, 10) - } - } - EDITOR_ON_FOCUS = false - } - - function activate(action) { - thisObject.visible = true - thisObject.payload = action.node.payload - thisObject.rawRadius = 8 - thisObject.targetRadius = thisObject.container.frame.radius - thisObject.currentRadius = 0 - thisObject.payload.uiObject.resetErrorMessage() - - let textArea = document.getElementById('textArea') - textArea.value = thisObject.payload.node.config - textArea.style = 'resize: none;' + - ' border: none;' + - ' outline: none;' + - 'box-shadow: none;' + - 'overflow:hidden;' + - 'font-family: ' + UI_FONT.PRIMARY + ';' + - 'font-size: 14px;' + - 'background-color: rgb(' + UI_COLOR.DARK_TURQUOISE + ');' + - 'color:rgb(255, 255, 255);' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - textArea.style.display = 'block' - textArea.focus() - EDITOR_ON_FOCUS = true - } - - function getContainer(point) { - let container - if (thisObject.visible === true) { - if (point.x === VERY_LARGE_NUMBER) { - /* The the mouse leaves the canvas, and event of mouse over with a ridiculous coordinate is triggered so that - anyone can react. In our case, the config editor has a text area that is not part of the canvas, so the event is - triggered. We compensate recognizing this coordinate and returning our container. */ - return thisObject.container - } - - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - return thisObject.container - } else { - return undefined - } - } - } - - function physics() { - if (Math.abs(thisObject.currentRadius - thisObject.targetRadius) >= 0.5) { - if (thisObject.currentRadius < thisObject.targetRadius) { - thisObject.currentRadius = thisObject.currentRadius + 0.5 - } else { - thisObject.currentRadius = thisObject.currentRadius - 0.5 - } - } - - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - thisObject.container.frame.width = thisObject.container.frame.radius * 1 * SIZE_FACTOR - thisObject.container.frame.height = thisObject.container.frame.radius * 1 * SIZE_FACTOR - - let textAreaPosition = { - x: 0 - thisObject.container.frame.width / 2, - y: 0 - thisObject.container.frame.height * 3 / 7 + CURRENT_TOP_MARGIN - } - - textAreaPosition = thisObject.container.frame.frameThisPoint(textAreaPosition) - if (thisObject.visible === true) { - let checkPosition = { - x: textAreaPosition.x, - y: textAreaPosition.y - CURRENT_TOP_MARGIN - } - if (thisObject.isVisibleFunction(checkPosition) === false) { - deactivate() - } - } - if (thisObject.visible === true) { - let textAreaDiv = document.getElementById('textAreaDiv') - textAreaDiv.style = 'position:fixed; top:' + textAreaPosition.y + 'px; left:' + textAreaPosition.x + 'px; z-index:1; ' - } - } - - function drawBackground() { - if (thisObject.visible === true) { - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - let radius = thisObject.container.frame.radius * SIZE_FACTOR - - if (radius > 0.5) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius + 3, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')' - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius , 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + 1 + ')' - browserCanvasContext.fill() - } - } - } - function drawForeground() { - let iconPosition = { - x: 0, - y: thisObject.currentRadius * 1.5 - } - - iconPosition = thisObject.container.frame.frameThisPoint(iconPosition) - - /* Menu Item */ - - if (thisObject.canDrawIcon === true && thisObject.currentRadius > 1) { - browserCanvasContext.drawImage(thisObject.icon, iconPosition.x - thisObject.currentRadius, iconPosition.y - thisObject.currentRadius, thisObject.currentRadius * 2, thisObject.currentRadius * 2) - - /* Menu Label */ - - let label = 'Code looks good!' - let labelPoint - let fontSize = 10 - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: iconPosition.x + thisObject.currentRadius + 10, - y: iconPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingLayer.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingLayer.js deleted file mode 100644 index d35a23697..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingLayer.js +++ /dev/null @@ -1,752 +0,0 @@ -/* - This module represent one layer of many possible layers that could be at the Floating Space. Objects in the same layer are subject to - the same physics, and by being at the same level, they interact with each other. For example, they can bounce when one hit the other. - This module posesses its own physics engine. There are different types of floating objects, but this layer takes care of each of them. - - Floating Objects Types: - - 1. Profile Balls: These are small balls with a profile picture, and two levels, one above and one below the ball. They are usually used - to specify the location of a bot instance. - - 2. Notes: Notes are a rectangular area where some text is posted. It has a subject and a body. - - 3. UI Objects: These are small balls that represent parts of an strategy. - */ - -function newFloatingLayer() { - const MODULE_NAME = 'Floating Layer' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - addFloatingObject: addFloatingObject, - removeFloatingObject: removeFloatingObject, - getFloatingObject: getFloatingObject, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - /* - When objects are added to this layer they are added to the invisibleFloatingObjects array and they stay there because they are invisible. - Visibility of objects is not decided at this layer, but outside. The ones who decides which object is visible or not are plotters, because - they know the position of objects and the coordinate system which these positions belong to. - - To save resources, the physics engine only apply its calculations to visible floating objects. - */ - - let invisibleFloatingObjects = [] - - /* - Floating objects are accesible to plotters because they carry a "payload" object that was creted by them. This object includes the position - and visible property. When visible turns to true, this layer module will move the reference of the floating object from the invisible array - to the visibleFloatingObjects array. If the plotter decides that the object is to far from the what the user is seeing, it can eventually - turn the visible property off again, forcing the layer to remove the object from the visibleFloatingObjects and place it again at the invisible - array. - */ - - let visibleFloatingObjects = [] - - let maxTargetRepulsionForce = 0.001 - let currentHandle = 0 - let invisiblePhysicsIntervalId - - return thisObject - - function finalize() { - clearInterval(invisiblePhysicsIntervalId) - invisibleFloatingObjects = [] - visibleFloatingObjects = [] - } - - function initialize() { - invisiblePhysicsIntervalId = setInterval(invisiblePhysics, 10000) - } - - function getContainer(point) { - let container - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - container = floatingObject.getContainer(point) - if (container !== undefined) { return container } - } - - return container - } - - function addFloatingObject(pFloatingObject) { - currentHandle++ - pFloatingObject.handle = currentHandle // Math.floor((Math.random() * 10000000) + 1); - visibleFloatingObjects.push(pFloatingObject) - } - - function removeFloatingObject(pFloatingObjectHandle) { - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - - if (floatingObject.handle === pFloatingObjectHandle) { - invisibleFloatingObjects.splice(i, 1) // Delete item from array. - return - } - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - - if (floatingObject.handle === pFloatingObjectHandle) { - visibleFloatingObjects.splice(i, 1) // Delete item from array. - return - } - } - } - - function getFloatingObject(pFloatingObjectHandle, pFloatingObjectIndex) { - /* - There are two ways to look for a floating object: by handle or by index. The search by handle is done on the visible and invisible array. - The search by index is done only on the visible ones. The search by index is usually needed when mouse events occurs. In those cases - only objects visible to the end usser matters. - */ - - try { - if (pFloatingObjectHandle !== undefined) { - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - - if (floatingObject.handle === pFloatingObjectHandle) { - return floatingObject - } - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - - if (floatingObject.handle === pFloatingObjectHandle) { - return floatingObject - } - } - } - - if (pFloatingObjectIndex !== undefined) { - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - - if (i === pFloatingObjectIndex) { - return floatingObject - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] getFloatingObject -> err= ' + err.stack) } - } - } - - function draw() { - drawInvisibleObjects() - drawVisibleObjects() - } - - function drawInvisibleObjects() { - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - floatingObject.drawBackground() - } - - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - floatingObject.drawMiddleground() - } - - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[invisibleFloatingObjects.length - i - 1] - floatingObject.drawForeground() - } - } - - function drawVisibleObjects() { - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - floatingObject.drawBackground() - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - floatingObject.drawMiddleground() - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[visibleFloatingObjects.length - i - 1] - floatingObject.drawForeground() - } - - /* Invisible objects on focus (freezed) should still have some priority */ - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - floatingObject.drawOnFocus() - } - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - floatingObject.drawOnFocus() - } - } - - function collapsePhysics(thisObject) { - let parent = thisObject.payload.chainParent - if (parent === undefined) { return } - if (parent.payload === undefined) { return } - if (parent.payload.floatingObject === undefined) { return } - - thisObject.isParentCollapsed = parent.payload.floatingObject.isCollapsed - if (thisObject.collapsedManually === false) { - thisObject.isCollapsed = parent.payload.floatingObject.isCollapsed - } - } - - function makeVisible() { - let newInvisibleArray = [] - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - - collapsePhysics(floatingObject) - - if (floatingObject.isParentCollapsed === false) { - visibleFloatingObjects.push(floatingObject) - } else { - newInvisibleArray.push(floatingObject) - } - } - invisibleFloatingObjects = newInvisibleArray - } - - function makeInvisible() { - let newVisibleArray = [] - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - - collapsePhysics(floatingObject) - - if (floatingObject.isParentCollapsed === true) { - invisibleFloatingObjects.push(floatingObject) - } else { - newVisibleArray.push(floatingObject) - } - } - visibleFloatingObjects = newVisibleArray - } - - /******************************************/ - /* */ - /* Physics Engine Follows */ - /* */ - /******************************************/ - - function invisiblePhysics() { - /* - Note that the Physics for invisible objects is called with a fixed time interval, - since it does not need the high intensity physics called during the animation. - */ - for (let i = 0; i < invisibleFloatingObjects.length; i++) { - let floatingObject = invisibleFloatingObjects[i] - floatingObject.invisiblePhysics() - } - } - - function physics() { - /* - The Physics engine is hooked at the animation loop, so it executes very very often. According to this Physics engine, each - floating object has a position and a speed. In fact, each floating object has two positions at the same time: - - 1. The current position: is the position of the ball, floating around. - 2. The anchor position: is the position of where the ball is achored on the plot. This one is inside the payload object controlled by the - plotter. - - The anchor position influences the current position, since the Physics engine will apply a gravity force to the ball's position in order - to make it gravitate towards the anchor position. At the same time there will be a repulsion force that will prevent the ball reaching - the anchor position, so that the anchor point keeps visible to the user. - - */ - - try { - makeVisible() - makeInvisible() - visiblePhysics() - enginePhysics() - proximityPhysics() - - function visiblePhysics() { - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - floatingObject.physics() - } - } - - function proximityPhysics(){ - for (let i = 0; i < visibleFloatingObjects.length; i++) { - proximityBetweenFloatingObjects(i) - } - } - - function enginePhysics() { - /* This function makes all the calculations to apply phisycs on all visible floatingObjects in this layer. */ - - try { - DEBUG.variable1 = 'Invisible Floating Objets: ' + invisibleFloatingObjects.length - DEBUG.variable2 = 'Visible Floating Objets: ' + visibleFloatingObjects.length - - if (UI.projects.superalgos.spaces.floatingSpace.settings.physics !== true) {return} - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - let floatingObject = visibleFloatingObjects[i] - if (floatingObject.isFrozen === true) { continue } - - /* From here on, only if they are not too far. */ - if (UI.projects.superalgos.spaces.floatingSpace.isItFar(floatingObject.payload)) { continue } - - if (floatingObject.positionLocked === false) { - floatingObject.container.frame.position.x = floatingObject.container.frame.position.x + floatingObject.currentSpeed.x - floatingObject.container.frame.position.y = floatingObject.container.frame.position.y + floatingObject.currentSpeed.y - } - - if (floatingObject.friction < floatingObject.targetFriction) { - floatingObject.friction = floatingObject.friction + 0.00001 - } else { - floatingObject.friction = floatingObject.friction - 0.00001 - } - - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x * floatingObject.friction // Desaceleration factor. - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y * floatingObject.friction // Desaceleration factor. - - let payload = { - position: undefined, - visible: false - } - - switch (floatingObject.type) { - case 'UI Object': { - payload.targetPosition = floatingObject.payload.targetPosition - payload.visible = floatingObject.payload.visible - break - } - default: { - break - } - } - - if (floatingObject.container.frame.position.x < payload.targetPosition.x) { - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + 0.005 - } else { - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x - 0.005 - } - - if (floatingObject.container.frame.position.y < payload.targetPosition.y) { - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + 0.005 - } else { - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y - 0.005 - } - - const MAX_SPEED = 10 - - if (floatingObject.currentSpeed.x > MAX_SPEED) { - floatingObject.currentSpeed.x = MAX_SPEED - } - - if (floatingObject.currentSpeed.y > MAX_SPEED) { - floatingObject.currentSpeed.y = MAX_SPEED - } - - if (floatingObject.currentSpeed.x < -MAX_SPEED) { - floatingObject.currentSpeed.x = -MAX_SPEED - } - - if (floatingObject.currentSpeed.y < -MAX_SPEED) { - floatingObject.currentSpeed.y = -MAX_SPEED - } - - // We let the Floating Object animate the physics loops by itself. - checkBoundaries(floatingObject) - - /* Collision Control */ - - for (let k = i + 1; k < visibleFloatingObjects.length; k++) { - if (colliding(visibleFloatingObjects[i], visibleFloatingObjects[k])) { - resolveCollision(visibleFloatingObjects[k], visibleFloatingObjects[i]) - } - } - - /* Calculate repulsion force produced by all other floatingObjects */ - - repulsionForceBetweenFloatingObjects(i) - - targetRepulsionForce(i) - - gravityForce(floatingObject, payload) - - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] physics -> applyPhysics -> err= ' + err.stack) } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] physics -> err= ' + err.stack) } - } - } - - function checkBoundaries(floatingObject) { - if (floatingObject.container.frame.position.x - floatingObject.container.frame.radius < 0) { - floatingObject.container.frame.position.x = floatingObject.container.frame.radius - floatingObject.currentSpeed.x = -floatingObject.currentSpeed.x - } - - if (floatingObject.container.frame.position.x + floatingObject.container.frame.radius > UI.projects.superalgos.spaces.floatingSpace.container.frame.width) { - floatingObject.container.frame.position.x = UI.projects.superalgos.spaces.floatingSpace.container.frame.width - floatingObject.container.frame.radius - floatingObject.currentSpeed.x = -floatingObject.currentSpeed.x - } - - if (floatingObject.container.frame.position.y - floatingObject.container.frame.radius < 0) { - floatingObject.container.frame.position.y = floatingObject.container.frame.radius - floatingObject.currentSpeed.y = -floatingObject.currentSpeed.y - } - - if (floatingObject.container.frame.position.y + floatingObject.container.frame.radius > UI.projects.superalgos.spaces.floatingSpace.container.frame.height) { - floatingObject.container.frame.position.y = UI.projects.superalgos.spaces.floatingSpace.container.frame.height - floatingObject.container.frame.radius - floatingObject.currentSpeed.y = -floatingObject.currentSpeed.y - } - } - - function gravityForce(floatingObject, payload) { - try { - /* We simulate a kind of gravity towards the target point of each floatingObject. This force will make the floatingObject to keep pushing to reach that point. */ - - const coulomb = 0.00001 - const minForce = 0.01 - - let d = Math.sqrt(Math.pow(payload.targetPosition.x - floatingObject.container.frame.position.x, 2) + Math.pow(payload.targetPosition.y - floatingObject.container.frame.position.y, 2)) // ... we calculate the distance ... - - let force = coulomb * d * d / floatingObject.currentMass // In this case the mass of the floatingObject affects the gravity force that it receives, that gives priority to target position to bigger floatingObjects. - - if (force < minForce) { // We need this attraction force to overcome the friction we imposed to the system. - force = minForce - } - - let pos1 = { - x: floatingObject.container.frame.position.x, - y: floatingObject.container.frame.position.y - } - - let pos2 = { - x: payload.targetPosition.x, - y: payload.targetPosition.y - } - - let posDiff = { // Next we need the vector resulting from the 2 positions. - x: pos2.x - pos1.x, - y: pos2.y - pos1.y - } - - if (d !== 0) { - let unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. - x: posDiff.x / d, - y: posDiff.y / d - } - - let forceVector = { - x: unitVector.x * force, - y: unitVector.y * force - } - - /* We add the force vector to the speed vector */ - if (isNaN(forceVector.x) === false && isNaN(forceVector.y) === false) { - floatingObject.currentSpeed.x = floatingObject.currentSpeed.x + forceVector.x - floatingObject.currentSpeed.y = floatingObject.currentSpeed.y + forceVector.y - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] gravityForce -> err= ' + err.stack) } - } - } - - function repulsionForceBetweenFloatingObjects(currentFloatingObject) { - try { - /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ - - const coulomb = 2 - - let floatingObject1 = visibleFloatingObjects[currentFloatingObject] - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - // The force to be applied is considering all other floatingObjects... - - if (i !== currentFloatingObject) { - // ... except for the current one. - - let floatingObject2 = visibleFloatingObjects[i] // So, for each floatingObject... - - let d = Math.sqrt(Math.pow(floatingObject2.container.frame.position.x - floatingObject1.container.frame.position.x, 2) + Math.pow(floatingObject2.container.frame.position.y - floatingObject1.container.frame.position.y, 2)) // ... we calculate the distance ... - - let force = coulomb * floatingObject2.currentMass / (d * d) // ... and with it the repulsion force. - - /* We need to put a hard limit to this force, in order to to eject very little floatingObjects to the infinite and beyond. */ - - if (force > 1) { - force = 1 - } - - let pos1 = { - x: floatingObject1.container.frame.position.x, - y: floatingObject1.container.frame.position.y - } - - let pos2 = { - x: floatingObject2.container.frame.position.x, - y: floatingObject2.container.frame.position.y - } - - let posDiff = { // Next we need the vector resulting from the 2 positions. - x: pos2.x - pos1.x, - y: pos2.y - pos1.y - } - - let unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. - x: posDiff.x / d, - y: posDiff.y / d - } - - let forceVector = { - x: unitVector.x * force, - y: unitVector.y * force - } - - /* We substract the force vector to the speed vector of the current floatingObject */ - if (isNaN(forceVector.x) === false && isNaN(forceVector.y) === false) { - floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x - floatingObject1.currentSpeed.y = floatingObject1.currentSpeed.y - forceVector.y - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] repulsionForceBetweenFloatingObjects -> err= ' + err.stack) } - } - } - - function proximityBetweenFloatingObjects(currentFloatingObject) { - try { - let floatingObject1 = visibleFloatingObjects[currentFloatingObject] - floatingObject1.nearbyFloatingObjects = [] - for (let i = 0; i < visibleFloatingObjects.length; i++) { - if (i !== currentFloatingObject) { - let floatingObject2 = visibleFloatingObjects[i] // So, for each floatingObject... - - let d = Math.sqrt(Math.pow(floatingObject2.container.frame.position.x - floatingObject1.container.frame.position.x, 2) + Math.pow(floatingObject2.container.frame.position.y - floatingObject1.container.frame.position.y, 2)) // ... we calculate the distance ... - - if (floatingObject1.nearbyFloatingObjects.length === 0) { - floatingObject1.nearbyFloatingObjects.push([d, floatingObject2]) - } else { - let recordAdded = false - for (let j = 0; j < floatingObject1.nearbyFloatingObjects.length; j++) { - let recordedDistance = floatingObject1.nearbyFloatingObjects[j][0] - if (d < recordedDistance) { - floatingObject1.nearbyFloatingObjects.splice(j, 0, [d, floatingObject2]) - recordAdded = true - break - } - } - if (recordAdded === false) { - floatingObject1.nearbyFloatingObjects.push([d, floatingObject2]) - } - } - floatingObject1.nearbyFloatingObjects.splice(10, floatingObject1.nearbyFloatingObjects.length) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] proximityBetweenFloatingObjects -> err= ' + err.stack) } - } - } - - function targetRepulsionForce(currentFloatingObject) { - try { - /* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */ - - const coulomb = 2 - - let floatingObject1 = visibleFloatingObjects[currentFloatingObject] - - for (let i = 0; i < visibleFloatingObjects.length; i++) { - // The force to be applied is considering all other floatingObjects... - - let floatingObject2 = visibleFloatingObjects[i] // So, for each floatingObject... - - let payload = { - position: undefined - } - - switch (floatingObject2.type) { - case 'UI Object': { - payload.targetPosition = floatingObject2.payload.targetPosition - break - } - default: { - break - } - } - - let d = Math.sqrt(Math.pow(payload.targetPosition.x - floatingObject1.container.frame.position.x, 2) + Math.pow(payload.targetPosition.y - floatingObject1.container.frame.position.y, 2)) // ... we calculate the distance ... - - let force = coulomb * floatingObject2.currentMass / (d * d) // ... and with it the repulsion force. - - /* We need to put a hard limit to this force, in order to to eject very little floatingObjects to the infinite and beyond. */ - - if (force > maxTargetRepulsionForce) { - force = maxTargetRepulsionForce - } - - let pos1 = { - x: floatingObject1.container.frame.position.x, - y: floatingObject1.container.frame.position.y - } - - let pos2 = { - x: payload.targetPosition.x, - y: payload.targetPosition.y - } - - let posDiff = { // Next we need the vector resulting from the 2 positions. - x: pos2.x - pos1.x, - y: pos2.y - pos1.y - } - - if (d !== 0) { - let unitVector = { // To find the unit vector, we divide each component by the magnitude of the vector. - x: posDiff.x / d, - y: posDiff.y / d - } - - let forceVector = { - x: unitVector.x * force, - y: unitVector.y * force - } - - /* We substract the force vector to the speed vector of the current floatingObject */ - - if (isNaN(forceVector.x) === false && isNaN(forceVector.y) === false) { - floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x - floatingObject1.currentSpeed.y = floatingObject1.currentSpeed.y - forceVector.y - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] targetRepulsionForce -> err= ' + err.stack) } - } - } - - function colliding(floatingObject1, floatingObject2) { - try { - /* This function detects weather 2 floatingObjects collide with each other. */ - - let r1 = floatingObject1.container.frame.radius - let r2 = floatingObject2.container.frame.radius - - let distance = Math.sqrt(Math.pow(floatingObject2.container.frame.position.x - floatingObject1.container.frame.position.x, 2) + Math.pow(floatingObject2.container.frame.position.y - floatingObject1.container.frame.position.y, 2)) - - if (distance > (r1 + r2)) { - // No solutions, the circles are too far apart. - return false - } else if (distance <= r1 + r2) { - // One circle contains the other. - return true - } else if ((distance === 0) && (r1 === r2)) { - // the circles coincide. - return true - } else return true - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] colliding -> err= ' + err.stack) } - } - } - - function distance(x1, y1, x2, y2) { - return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)) - } - - function resolveCollision(floatingObject1, floatingObject2) { - try { - /* This function changes speed and position of floatingObjects that are in collision */ - - let collisionision_angle = Math.atan2((floatingObject2.container.frame.position.y - floatingObject1.container.frame.position.y), (floatingObject2.container.frame.position.x - floatingObject1.container.frame.position.x)) - - let speed1 = Math.sqrt(floatingObject1.currentSpeed.x * floatingObject1.currentSpeed.x + floatingObject1.currentSpeed.y * floatingObject1.currentSpeed.y) // Magnitude of Speed Vector for floatingObject 1 - let speed2 = Math.sqrt(floatingObject2.currentSpeed.x * floatingObject2.currentSpeed.x + floatingObject2.currentSpeed.y * floatingObject2.currentSpeed.y) // Magnitude of Speed Vector for floatingObject 2 - - let direction_1 = Math.atan2(floatingObject1.currentSpeed.y, floatingObject1.currentSpeed.x) - let direction_2 = Math.atan2(floatingObject2.currentSpeed.y, floatingObject2.currentSpeed.x) - - let new_xspeed_1 = speed1 * Math.cos(direction_1 - collisionision_angle) - let new_yspeed_1 = speed1 * Math.sin(direction_1 - collisionision_angle) - let new_xspeed_2 = speed2 * Math.cos(direction_2 - collisionision_angle) - let new_yspeed_2 = speed2 * Math.sin(direction_2 - collisionision_angle) - - let final_xspeed_1 = ((floatingObject1.currentMass - floatingObject2.currentMass) * new_xspeed_1 + (floatingObject2.currentMass + floatingObject2.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass) - let final_xspeed_2 = ((floatingObject1.currentMass + floatingObject1.currentMass) * new_xspeed_1 + (floatingObject2.currentMass - floatingObject1.currentMass) * new_xspeed_2) / (floatingObject1.currentMass + floatingObject2.currentMass) - let final_yspeed_1 = new_yspeed_1 - let final_yspeed_2 = new_yspeed_2 - - let cosAngle = Math.cos(collisionision_angle) - let sinAngle = Math.sin(collisionision_angle) - - floatingObject1.currentSpeed.x = cosAngle * final_xspeed_1 - sinAngle * final_yspeed_1 - floatingObject1.currentSpeed.y = sinAngle * final_xspeed_1 + cosAngle * final_yspeed_1 - - floatingObject2.currentSpeed.x = cosAngle * final_xspeed_2 - sinAngle * final_yspeed_2 - floatingObject2.currentSpeed.y = sinAngle * final_xspeed_2 + cosAngle * final_yspeed_2 - - let pos1 = { - x: floatingObject1.container.frame.position.x, - y: floatingObject1.container.frame.position.y - } - - let pos2 = { - x: floatingObject2.container.frame.position.x, - y: floatingObject2.container.frame.position.y - } - - // get the mtd - let posDiff = { - x: pos1.x - pos2.x, - y: pos1.y - pos2.y - } - - let d = Math.sqrt(Math.pow(floatingObject2.container.frame.position.x - floatingObject1.container.frame.position.x, 2) + Math.pow(floatingObject2.container.frame.position.y - floatingObject1.container.frame.position.y, 2)) - - // minimum translation distance to push floatingObjects apart after intersecting - let scalar = (((floatingObject1.container.frame.radius + floatingObject2.container.frame.radius) - d) / d) - - let minTD = { - x: posDiff.x * scalar, - y: posDiff.y * scalar - } - - // resolve intersection -- - // computing inverse mass quantities - let im1 = 1 / floatingObject1.currentMass - let im2 = 1 / floatingObject2.currentMass - - // push-pull them apart based off their mass - - pos1.x = pos1.x + minTD.x * (im1 / (im1 + im2)) - pos1.y = pos1.y + minTD.y * (im1 / (im1 + im2)) - pos2.x = pos2.x - minTD.x * (im2 / (im1 + im2)) - pos2.y = pos2.y - minTD.y * (im2 / (im1 + im2)) - - if (floatingObject1.positionLocked === false && isNaN(pos1.x) === false && isNaN(pos1.y) === false) { - floatingObject1.container.frame.position = pos1 - } - if (floatingObject2.positionLocked === false && isNaN(pos2.x) === false && isNaN(pos2.y) === false) { - floatingObject2.container.frame.position = pos2 - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] resolveCollision -> err= ' + err.stack) } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingObject.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingObject.js deleted file mode 100644 index 6ec2ca682..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingObject.js +++ /dev/null @@ -1,829 +0,0 @@ - -function newFloatingObject() { - const MODULE_NAME = 'Floating Object' - const ERROR_LOG = true - - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - fitFunction: undefined, - container: undefined, - positionLocked: false, - isOnFocus: false, - payload: undefined, // This is a reference to an object controlled by a Plotter. The plotter can change its internal value and we will see them from here. - type: undefined, // Currently there are two types of Floating Objects: Profile Balls, and Notes. - currentSpeed: 0, // This is the current speed of the floating object. - currentMass: 0, // This is the current mass of the floating object, including its zoom applied. - friction: 0, // This is a factor that will ultimatelly desacelerate the floating object. - targetFriction: 0, - rawMass: 0, // This is the mass value without zoom. - rawRadius: 0, // This is the radius of this floating object without zoom. - targetRadius: 0, // This is the target radius of the floating object with zoom applied. It should be animated until reaching this value. - isPinned: false, - isFrozen: false, - angleToParent: undefined, - distanceToParent: undefined, - arrangementStyle: ARRANGEMENT_STYLE.CONCAVE, - isCollapsed: false, - isParentCollapsed: false, - frozenManually: false, - collapsedManually: false, - typeStrokeStyle: undefined, - nameStrokeStyle: undefined, - forceFocus: forceFocus, - removeForceFocus: removeForceFocus, - setFocus: setFocus, - removeFocus: removeFocus, - unCollapseParent: unCollapseParent, - getPinStatus: getPinStatus, - getFreezeStatus: getFreezeStatus, - getCollapseStatus: getCollapseStatus, - getAngleToParent: getAngleToParent, - getDistanceToParent: getDistanceToParent, - getArrangementStyle: getArrangementStyle, - nearbyFloatingObjects: [], - setPosition: setPosition, - pinToggle: pinToggle, - freezeToggle: freezeToggle, - collapseToggle: collapseToggle, - angleToParentToggle: angleToParentToggle, - distanceToParentToggle: distanceToParentToggle, - arrangementStyleToggle: arrangementStyleToggle, - physics: physics, - invisiblePhysics: invisiblePhysics, - initializeMass: initializeMass, - initializeRadius: initializeRadius, - initializeImageSize: initializeImageSize, - initializeFontSize: initializeFontSize, - initializeCurrentPosition: initializeCurrentPosition, - radomizeCurrentSpeed: radomizeCurrentSpeed, - drawBackground: drawBackground, - drawMiddleground: drawMiddleground, - drawForeground: drawForeground, - drawOnFocus: drawOnFocus, - updateMass: updateMass, // Function to update the mass when the zoom level changed. - updateRadius: updateRadius, // Function to update the radius when the zoom level changed. - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME, 'Circle') - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = true - thisObject.container.detectMouseOver = true - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - thisObject.typeStrokeStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - thisObject.nameStrokeStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - - let selfMouseOverEventSubscriptionId - let selfMouseClickEventSubscriptionId - let spaceMouseOverEventSubscriptionId - let spaceFocusAquiredEventSubscriptionId - let lastParentAngle - let forcedFocusCounter = 0 - - const ON_FOCUS_RADIUS_FACTOR = 6 - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseClickEventSubscriptionId) - UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.stopListening(spaceMouseOverEventSubscriptionId) - UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.stopListening(spaceFocusAquiredEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.fitFunction = undefined - thisObject.nearbyFloatingObjects = undefined - } - - function initialize(type, payload) { - thisObject.payload = payload - thisObject.type = type - - selfMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - - /* To consider that this object lost the focus, we monitor the space for 2 key events */ - spaceMouseOverEventSubscriptionId = UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.listenToEvent('onMouseOver', mouseOverFlotingSpace) - spaceFocusAquiredEventSubscriptionId = UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.listenToEvent('onFocusAquired', someoneAquiredFocus) - - /* Assign a position and speed */ - - thisObject.initializeCurrentPosition(thisObject.payload.targetPosition) - thisObject.radomizeCurrentSpeed() - } - - function getContainer(point) { - - - if (thisObject.payload === undefined) { return } - if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) { return } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - - let container - - container = thisObject.payload.uiObject.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisScreenPointHere(point) === true) { - return thisObject.container - } else { - return undefined - } - } - - function getPinStatus() { - return thisObject.isPinned - } - - function pinToggle() { - if (thisObject.isPinned !== true) { - thisObject.isPinned = true - thisObject.positionLocked = true - } else { - thisObject.isPinned = false - } - return thisObject.isPinned - } - - function getFreezeStatus() { - return thisObject.isFrozen - } - - function getCollapseStatus() { - return thisObject.isCollapsed - } - - function unCollapseParent() { - if (thisObject.payload !== undefined) { - if (thisObject.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject.isCollapsed === true) { - thisObject.payload.parentNode.payload.floatingObject.isCollapsed = false - thisObject.payload.parentNode.payload.floatingObject.collapsedManually = false - thisObject.payload.parentNode.payload.floatingObject.unCollapseParent() - } - } - } - } - } - } - - function getAngleToParent() { - return thisObject.angleToParent - } - - function getDistanceToParent() { - return thisObject.distanceToParent - } - - function getArrangementStyle() { - return thisObject.arrangementStyle - } - - function freezeToggle() { - if (thisObject.isFrozen !== true) { - thisObject.isFrozen = true - thisObject.frozenManually = true - } else { - thisObject.isFrozen = false - thisObject.frozenManually = false - } - return thisObject.isFrozen - } - - function collapseToggle() { - if (thisObject.isCollapsed !== true) { - thisObject.isCollapsed = true - thisObject.collapsedManually = true - } else { - thisObject.isCollapsed = false - thisObject.collapsedManually = false - } - return thisObject.isCollapsed - } - - function angleToParentToggle() { - switch (thisObject.angleToParent) { - case ANGLE_TO_PARENT.NOT_FIXED: - thisObject.angleToParent = ANGLE_TO_PARENT.RANGE_360 - break - case ANGLE_TO_PARENT.RANGE_360: - thisObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 - break - case ANGLE_TO_PARENT.RANGE_180: - thisObject.angleToParent = ANGLE_TO_PARENT.RANGE_90 - break - case ANGLE_TO_PARENT.RANGE_90: - thisObject.angleToParent = ANGLE_TO_PARENT.RANGE_45 - break - case ANGLE_TO_PARENT.RANGE_45: - thisObject.angleToParent = ANGLE_TO_PARENT.NOT_FIXED - break - } - - return thisObject.angleToParent - } - - function distanceToParentToggle() { - switch (thisObject.distanceToParent) { - case DISTANCE_TO_PARENT.NOT_FIXED: - thisObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_025X - break - case DISTANCE_TO_PARENT.PARENT_025X: - thisObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_050X - break - case DISTANCE_TO_PARENT.PARENT_050X: - thisObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - break - case DISTANCE_TO_PARENT.PARENT_100X: - thisObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_150X - break - case DISTANCE_TO_PARENT.PARENT_150X: - thisObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_200X - break - case DISTANCE_TO_PARENT.PARENT_200X: - thisObject.distanceToParent = DISTANCE_TO_PARENT.NOT_FIXED - break - } - - return thisObject.distanceToParent - } - - function arrangementStyleToggle() { - switch (thisObject.arrangementStyle) { - case ARRANGEMENT_STYLE.CONCAVE: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.CONVEX - break - case ARRANGEMENT_STYLE.CONVEX: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.VERTICAL_RIGHT - break - case ARRANGEMENT_STYLE.VERTICAL_RIGHT: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.VERTICAL_LEFT - break - case ARRANGEMENT_STYLE.VERTICAL_LEFT: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.HORIZONTAL_BOTTOM - break - case ARRANGEMENT_STYLE.HORIZONTAL_BOTTOM: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.HORIZONTAL_TOP - break - case ARRANGEMENT_STYLE.HORIZONTAL_TOP: - thisObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - break - } - - return thisObject.arrangementStyle - } - - function invisiblePhysics() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - - if (thisObject.payload.uiObject !== undefined) { - thisObject.payload.uiObject.invisiblePhysics() - } - } - - function physics() { - frozenPhysics() - /* From here on, only if they are not too far. */ - if (UI.projects.superalgos.spaces.floatingSpace.isItFar(thisObject.payload)) { return } - thisObjectPhysics() - if (thisObject.payload.uiObject !== undefined) { - thisObject.payload.uiObject.physics() - } - positionContraintsPhysics() - focusPhysics() - syncStylePhysics() - } - - function syncStylePhysics() { - if (thisObject.rawFontSize !== UI.projects.superalgos.spaces.floatingSpace.style.node.fontSize) { - thisObject.rawFontSize = UI.projects.superalgos.spaces.floatingSpace.style.node.fontSize - thisObject.targetFontSize = thisObject.rawFontSize * 1 - } - if (thisObject.rawImageSize !== UI.projects.superalgos.spaces.floatingSpace.style.node.imageSize) { - thisObject.rawImageSize = UI.projects.superalgos.spaces.floatingSpace.style.node.imageSize - thisObject.targetImageSize = thisObject.rawImageSize * 1 - } - thisObject.typeStrokeStyle = 'rgba(' + UI.projects.superalgos.spaces.floatingSpace.style.node.type.fontColor + ', 1)' - thisObject.nameStrokeStyle = 'rgba(' + UI.projects.superalgos.spaces.floatingSpace.style.node.name.fontColor + ', 1)' - } - - function focusPhysics() { - forcedFocusCounter-- - if (forcedFocusCounter < 0) { - forcedFocusCounter = 0 - } - } - - function frozenPhysics() { - if (thisObject.frozenManually !== false) { return } - if (thisObject.payload === undefined) { return } - let parent = thisObject.payload.chainParent - if (parent !== undefined) { - if (parent.payload !== undefined) { - if (parent.payload.floatingObject !== undefined) { - thisObject.isFrozen = parent.payload.floatingObject.isFrozen - } - } - } - } - - function positionContraintsPhysics() { - const MAX_DISTANCE_TO_PARENT = 5000 - const MIN_DISTANCE_TO_PARENT = 100 - const DEFAULT_NODE_TO_NODE_DISTANCE = 500 * UI.projects.superalgos.spaces.floatingSpace.settings.node.distancePercentage / 100 - - if (thisObject.angleToParent !== ANGLE_TO_PARENT.NOT_FIXED && thisObject.isOnFocus !== true) { - let parent = thisObject.payload.chainParent - let distanceToParent - let parentChildren - let parentDistanceToGarndParent - if (parent === undefined) { - parentDistanceToGarndParent = DEFAULT_NODE_TO_NODE_DISTANCE - distanceToParent = DEFAULT_NODE_TO_NODE_DISTANCE - parentChildren = 1 - } else { - if (parent.payload === undefined) { return } - if (parent.payload.position === undefined) { return } - distanceToParent = Math.sqrt(Math.pow(parent.payload.position.x - thisObject.container.frame.position.x, 2) + Math.pow(parent.payload.position.y - thisObject.container.frame.position.y, 2)) // ... we calculate the distance ... - parentChildren = UI.projects.superalgos.spaces.designSpace.workspace.nodeChildren.childrenCount(parent, thisObject.payload.node) - parentDistanceToGarndParent = parent.payload.distance - } - - let axisCount = parentChildren.childrenCount - let axisIndex = parentChildren.childIndex - let baseAngle = 0 - let angleToParentAngle - - if (parentDistanceToGarndParent !== undefined) { - switch (thisObject.distanceToParent) { - case DISTANCE_TO_PARENT.PARENT_025X: - distanceToParent = parentDistanceToGarndParent / 4 - break - case DISTANCE_TO_PARENT.PARENT_050X: - distanceToParent = parentDistanceToGarndParent / 2 - break - case DISTANCE_TO_PARENT.PARENT_100X: - distanceToParent = parentDistanceToGarndParent - break - case DISTANCE_TO_PARENT.PARENT_150X: - distanceToParent = parentDistanceToGarndParent * 1.5 - break - case DISTANCE_TO_PARENT.PARENT_200X: - distanceToParent = parentDistanceToGarndParent * 2 - break - } - } - - if (distanceToParent > MAX_DISTANCE_TO_PARENT) { - distanceToParent = MAX_DISTANCE_TO_PARENT - } - - if (distanceToParent < MIN_DISTANCE_TO_PARENT) { - distanceToParent = MIN_DISTANCE_TO_PARENT - } - - switch (thisObject.angleToParent) { - case ANGLE_TO_PARENT.RANGE_360: - angleToParentAngle = 360 - break - case ANGLE_TO_PARENT.RANGE_180: - angleToParentAngle = 180 - break - case ANGLE_TO_PARENT.RANGE_90: - angleToParentAngle = 90 - break - case ANGLE_TO_PARENT.RANGE_45: - angleToParentAngle = 45 - break - } - - if (axisIndex === undefined) { - axisCount = 1 - axisIndex = axisCount - } - - if (parent !== undefined) { - if (parent.payload.chainParent !== undefined && parent.payload.angle !== undefined) { - axisCount++ - axisIndex++ - baseAngle = parent.payload.angle + 180 - lastParentAngle = parent.payload.angle - } else { - if (lastParentAngle !== undefined) { - axisCount++ - axisIndex++ - baseAngle = lastParentAngle + 180 - } - } - } - - let separatorAngle = (360 - angleToParentAngle) / 2 - let angleStep = angleToParentAngle / axisCount - - thisObject.payload.angle = baseAngle + separatorAngle + (axisIndex - 1) * angleStep - if (thisObject.payload.angle >= 360) { - thisObject.payload.angle = thisObject.payload.angle - 360 - } - - thisObject.payload.distance = distanceToParent - - if (thisObject.isPinned === true) { - /* When an object is pinned, its angle to its parent needs to be calculated since it depends on where the user places the node. */ - /* - if (thisObject.payload.chainParent !== undefined) { - let x = thisObject.container.frame.position.x - thisObject.payload.chainParent.payload.floatingObject.container.frame.position.x - let y = thisObject.container.frame.position.y - thisObject.payload.chainParent.payload.floatingObject.container.frame.position.y - - thisObject.payload.angle = Math.atan(y / x) - } - */ - return - } - - let newPosition - if (parent !== undefined) { - newPosition = { - x: parent.payload.position.x, - y: parent.payload.position.y - } - } else { - return - } - - let displacement - - switch (thisObject.arrangementStyle) { - case ARRANGEMENT_STYLE.CONCAVE: { - displacement = { - x: distanceToParent * Math.cos(toRadians(thisObject.payload.angle)), - y: distanceToParent * Math.sin(toRadians(thisObject.payload.angle)) - } - - break - } - case ARRANGEMENT_STYLE.CONVEX: { - displacement = { - x: 2 * distanceToParent * Math.cos(toRadians(lastParentAngle)) + distanceToParent * Math.cos(toRadians(thisObject.payload.angle + 180)), - y: 2 * distanceToParent * Math.sin(toRadians(lastParentAngle)) + distanceToParent * Math.sin(toRadians(thisObject.payload.angle + 180)) - } - break - } - case ARRANGEMENT_STYLE.HORIZONTAL_BOTTOM: { - displacement = { - x: distanceToParent * Math.tan(toRadians(thisObject.payload.angle)), - y: distanceToParent - } - break - } - case ARRANGEMENT_STYLE.HORIZONTAL_TOP: { - displacement = { - x: -distanceToParent * Math.tan(toRadians(thisObject.payload.angle)), - y: -distanceToParent - } - break - } - case ARRANGEMENT_STYLE.VERTICAL_RIGHT: { - displacement = { - x: distanceToParent, - y: distanceToParent * Math.tan(toRadians(thisObject.payload.angle)) - } - break - } - case ARRANGEMENT_STYLE.VERTICAL_LEFT: { - displacement = { - x: -distanceToParent, - y: -distanceToParent * Math.tan(toRadians(thisObject.payload.angle)) - } - break - } - } - - if (displacement.x > MAX_DISTANCE_TO_PARENT) { - displacement.x = MAX_DISTANCE_TO_PARENT - } - if (displacement.y > MAX_DISTANCE_TO_PARENT) { - displacement.y = MAX_DISTANCE_TO_PARENT - } - - newPosition.x = newPosition.x + displacement.x - newPosition.y = newPosition.y + displacement.y - - if (isNaN(newPosition.x) === false) { - thisObject.container.frame.position.x = newPosition.x - } - if (isNaN(newPosition.y) === false) { - thisObject.container.frame.position.y = newPosition.y - } - } - } - - function thisObjectPhysics() { - - const ANIMATION_STEPS = UI.projects.superalgos.spaces.floatingSpace.settings.node.animationSteps - - imageSizePhysics() - fontSizePhysics() - radiusPhysics() - - /* Floating object position in screen coordinates */ - thisObject.payload.position.x = thisObject.container.frame.position.x - thisObject.payload.position.y = thisObject.container.frame.position.y - - function imageSizePhysics() { - // The imageSize also have a target. - let imageSizeStep = (thisObject.targetImageSize - thisObject.currentImageSize) / ANIMATION_STEPS - thisObject.currentImageSize = thisObject.currentImageSize + imageSizeStep - if (thisObject.isOnFocus === true) { - if (thisObject.currentImageSize > thisObject.targetImageSize) { - thisObject.currentImageSize = thisObject.targetImageSize - } - } else { - if (thisObject.currentImageSize < thisObject.targetImageSize) { - thisObject.currentImageSize = thisObject.targetImageSize - } - } - } - - function fontSizePhysics() { - // The fontSize also have a target. - let fontSizeStep = (thisObject.targetFontSize - thisObject.currentFontSize) / ANIMATION_STEPS - thisObject.currentFontSize = thisObject.currentFontSize + fontSizeStep - if (thisObject.isOnFocus === true) { - if (thisObject.currentFontSize > thisObject.targetFontSize) { - thisObject.currentFontSize = thisObject.targetFontSize - } - } else { - if (thisObject.currentFontSize < thisObject.targetFontSize) { - thisObject.currentFontSize = thisObject.targetFontSize - } - } - } - - function radiusPhysics() { - let animationStepSize - - if (thisObject.isOnFocus === true) { - animationStepSize = (targetRadiusWithFocus() - targetRadiusWithoutFocus()) / ANIMATION_STEPS - if (thisObject.container.frame.radius >= targetRadiusWithFocus()) { return } - thisObject.container.frame.radius = thisObject.container.frame.radius + animationStepSize - if (thisObject.container.frame.radius >= targetRadiusWithFocus()) { - thisObject.container.frame.radius = targetRadiusWithFocus() - } - thisObject.container.eventHandler.raiseEvent('Dimmensions Changed', event) - } else { - animationStepSize = (targetRadiusWithoutFocus() - targetRadiusWithFocus()) / ANIMATION_STEPS - if (thisObject.container.frame.radius <= targetRadiusWithoutFocus()) { return } - thisObject.container.frame.radius = thisObject.container.frame.radius + animationStepSize - if (thisObject.container.frame.radius <= targetRadiusWithoutFocus()) { - thisObject.container.frame.radius = targetRadiusWithoutFocus() - } - thisObject.container.eventHandler.raiseEvent('Dimmensions Changed', event) - } - - } - } - - function onMouseOver(point) { - if (thisObject.isOnFocus === false) { - setFocus(point) - } - } - - function mouseOverFlotingSpace(point) { - removeFocus() - } - - function someoneAquiredFocus(floatingObject) { - if (floatingObject === undefined || floatingObject.container === undefined) { - return - } - if (thisObject.container === undefined) { - return - } - if (floatingObject.container.id !== thisObject.container.id) { - removeFocus() - } - } - - function forceFocus() { - forcedFocusCounter = 10 - setFocus() - } - - function removeForceFocus() { - forcedFocusCounter = 0 - removeFocus() - } - - function targetRadiusWithFocus() { - return thisObject.rawRadius * ON_FOCUS_RADIUS_FACTOR * UI.projects.superalgos.spaces.floatingSpace.settings.node.radiusPercentage / 100 - } - - function targetRadiusWithoutFocus() { - return thisObject.rawRadius * 1 * UI.projects.superalgos.spaces.floatingSpace.settings.node.radiusPercentage / 100 - } - - function setFocus(point) { - thisObject.targetRadius = targetRadiusWithFocus() - thisObject.currentMass = thisObject.rawMass * UI.projects.superalgos.spaces.floatingSpace.settings.node.massPercentage / 100 - thisObject.targetImageSize = thisObject.rawImageSize * 2.0 - thisObject.targetFontSize = thisObject.rawFontSize * 2.0 - - thisObject.payload.uiObject.container.eventHandler.raiseEvent('onFocus', point) - - thisObject.positionLocked = true - - UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.raiseEvent('onFocusAquired', thisObject) - thisObject.isOnFocus = true - } - - function removeFocus() { - if (forcedFocusCounter > 0) { - return - } - if (thisObject.payload === undefined) { return } - if (thisObject.isOnFocus === true) { - thisObject.targetRadius = targetRadiusWithoutFocus() - thisObject.currentMass = thisObject.rawMass * UI.projects.superalgos.spaces.floatingSpace.settings.node.massPercentage / 100 - thisObject.targetImageSize = thisObject.rawImageSize * 1 - thisObject.targetFontSize = thisObject.rawFontSize * 1 - - thisObject.payload.uiObject.container.eventHandler.raiseEvent('onNotFocus', thisObject.container) - - if (thisObject.isPinned !== true) { - thisObject.positionLocked = false - } - thisObject.isOnFocus = false - } - } - - function onMouseClick(pPoint) { - let event = { - point: pPoint, - parent: thisObject - } - thisObject.payload.uiObject.container.eventHandler.raiseEvent('onMouseClick', event) - } - - function drawBackground() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - - if (UI.projects.superalgos.spaces.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return } - if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) { - if (thisObject.payload.uiObject.isShowing !== true) { - return - } - } - thisObject.payload.uiObject.drawBackground() - } - - function drawMiddleground() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - - if (UI.projects.superalgos.spaces.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return } - if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) { - if (thisObject.payload.uiObject.isShowing !== true) { - return - } - } - thisObject.payload.uiObject.drawMiddleground() - } - - function drawForeground() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - - if (UI.projects.superalgos.spaces.floatingSpace.isItFar(thisObject.payload) && thisObject.payload.uiObject.isShowing === false) { return } - if ((thisObject.isCollapsed === true && thisObject.collapsedManually === false) || thisObject.isParentCollapsed === true) { - if (thisObject.payload.uiObject.isShowing !== true) { - return - } - } - thisObject.payload.uiObject.drawForeground() - } - - function drawOnFocus() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.uiObject === undefined) { return } - - thisObject.payload.uiObject.drawOnFocus() - } - - function initializeMass(suggestedValue) { - let mass = suggestedValue - if (mass < 0.1) { - mass = 0.1 - } - - thisObject.rawMass = mass - thisObject.currentMass = mass - } - - function initializeRadius(suggestedValue) { - let radius = suggestedValue - if (radius < 2) { - radius = 2 - } - - thisObject.rawRadius = radius - thisObject.targetRadius = radius * UI.projects.superalgos.spaces.floatingSpace.settings.node.radiusPercentage / 100 - thisObject.container.frame.radius = radius - - thisObject.container.eventHandler.raiseEvent('Dimmensions Changed', event) - } - - function initializeImageSize(suggestedValue) { - let size = suggestedValue - if (size < 2) { - size = 2 - } - - thisObject.rawImageSize = size - thisObject.targetImageSize = size - thisObject.currentImageSize = size / 3 - } - - function initializeFontSize(suggestedValue) { - let size = suggestedValue - if (size < 3) { - size = 3 - } - - thisObject.rawFontSize = size - thisObject.targetFontSize = size - thisObject.currentFontSize = size / 3 - } - - function initializeCurrentPosition(arroundPoint) { - let position = {} - - if (thisObject.payload.position === undefined) { - position = { - x: Math.floor((Math.random() * (200) - 100)) + arroundPoint.x, - y: Math.floor((Math.random() * (200) - 100)) + arroundPoint.y - } - } else { - position = { - x: thisObject.payload.position.x, - y: thisObject.payload.position.y - } - } - - setPosition(position) - } - - function setPosition(position) { - thisObject.container.frame.position.x = position.x - thisObject.container.frame.position.y = position.y - - thisObject.payload.position = {} - thisObject.payload.position.x = position.x - thisObject.payload.position.y = position.y - } - - function radomizeCurrentSpeed() { - var initialXDirection - var randomX = Math.floor((Math.random() * 10) + 1) - if (randomX > 5) { - initialXDirection = 1 - } else { - initialXDirection = -1 - } - - var initialYDirection - var randomY = Math.floor((Math.random() * 10) + 1) - if (randomY > 5) { - initialYDirection = 1 - } else { - initialYDirection = -1 - } - - var velocity = { - x: initialXDirection * Math.floor((Math.random() * 300) + 1) / 100, - y: initialYDirection * Math.floor((Math.random() * 300) + 1) / 100 - } - - thisObject.currentSpeed = velocity - } - - function updateMass() { - - } - - function updateRadius() { - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingSpace.js deleted file mode 100644 index d6dd7e284..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FloatingSpace.js +++ /dev/null @@ -1,574 +0,0 @@ - -function newSuperalgosFloatingSpace() { - const MODULE_NAME = 'Floating Space' - const ERROR_LOG = true - /* - The Floating Space is the place where floating elements like floatingObjects, live and are rendered. - This space has its own physics which helps with the animation of these objects and also preventing them to overlap. - */ - - let thisObject = { - floatingLayer: undefined, // This is the array of floatingObjects being displayed - uiObjectConstructor: undefined, - container: undefined, - inMapMode: false, - drawReferenceLines: false, - drawChainLines: true, - style: undefined, - settings: undefined, - toggleDrawChainLines: toggleDrawChainLines, - toggleDrawReferenceLines: toggleDrawReferenceLines, - toggleMapMode: toggleMapMode, - enterMapMode: enterMapMode, - exitMapMode: exitMapMode, - transformPointToMap: transformPointToMap, - transformRadiusToMap: transformRadiusToMap, - transformImagesizeToMap: transformImagesizeToMap, - oneScreenUp: oneScreenUp, - oneScreenDown: oneScreenDown, - oneScreenLeft: oneScreenLeft, - oneScreenRight: oneScreenRight, - positionAtNode: positionAtNode, - fitIntoVisibleArea: fitIntoVisibleArea, - isThisPointVisible: isThisPointVisible, - isItFar: isItFar, - makeVisible: makeVisible, - makeInvisible: makeInvisible, - draw: draw, - physics: physics, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = true - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - thisObject.container.isClickeable = false - thisObject.container.frame.radius = 0 - - let devicePixelRatio = window.devicePixelRatio - const SPACE_SIZE = 50000 - - thisObject.container.frame.width = SPACE_SIZE - thisObject.container.frame.height = SPACE_SIZE - thisObject.container.frame.position.x = browserCanvas.width / 2 - thisObject.container.frame.width / 2 - thisObject.container.frame.position.y = browserCanvas.height / 2 - thisObject.container.frame.height / 2 - - let visible = false - let floatingObjetOnFocus - - const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 25 - let onDragStartedEventSubscriptionId - let spaceFocusAquiredEventSubscriptionId - - /* Default Style */ - thisObject.style = { - backgroundColor: UI_COLOR.BLACK, - node: { - imageSize: 96, - fontSize: 18, - type: { - fontColor: UI_COLOR.WHITE - }, - name: { - fontColor: UI_COLOR.WHITE - }, - menuItem: { - backgroundColor: UI_COLOR.BLACK, - fontColor: UI_COLOR.WHITE, - fontSize: 15, - imageSize: 50 - } - } - } - - /* Default Settings */ - thisObject.settings = { - node: { - distancePercentage: 100, - radiusPercentage: 100, - massPercentage: 100, - animationSteps: 2, - menuItem: { - widthPercentage: 100, - heightPercentage: 100, - radiusPercentage: 100 - } - }, - physics: true, - } - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onDragStartedEventSubscriptionId) - UI.projects.superalgos.spaces.floatingSpace.container.eventHandler.stopListening(spaceFocusAquiredEventSubscriptionId) - - thisObject.floatingLayer.finalize() - thisObject.uiObjectConstructor.finalize() - thisObject.container.finalize() - - thisObject.floatingLayer = undefined - thisObject.uiObjectConstructor = undefined - thisObject.container = undefined - - floatingObjetOnFocus = undefined - } - - function initialize(callBackFunction) { - thisObject.floatingLayer = newFloatingLayer() - thisObject.floatingLayer.initialize() - - thisObject.uiObjectConstructor = newUiObjectConstructor() - thisObject.uiObjectConstructor.initialize(thisObject.floatingLayer) - - onDragStartedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDragStarted', onDragStarted) - spaceFocusAquiredEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onFocusAquired', someoneAquiredFocus) - } - - function someoneAquiredFocus(floatingObject) { - if (floatingObject === undefined || floatingObject.container === undefined) { - return - } - floatingObjetOnFocus = floatingObject - } - - function toggleDrawReferenceLines() { - if (thisObject.drawReferenceLines === true) { - thisObject.drawReferenceLines = false - } else { - thisObject.drawReferenceLines = true - } - } - - function toggleDrawChainLines() { - if (thisObject.drawChainLines === true) { - thisObject.drawChainLines = false - } else { - thisObject.drawChainLines = true - } - } - - function transformPointToMap(point) { - let returnPoint = { - x: point.x - thisObject.container.frame.position.x, - y: point.y - thisObject.container.frame.position.y - } - returnPoint.x = returnPoint.x / SPACE_SIZE * browserCanvas.width - returnPoint.y = returnPoint.y / SPACE_SIZE * browserCanvas.height - return returnPoint - } - - function transformRadiusToMap(radius) { - const RADIUS_REDUCTION_FACTOR = 2 - return radius / RADIUS_REDUCTION_FACTOR - } - - function transformImagesizeToMap(imageSize) { - const IMAGE_REDUCTION_FACTOR = 3 - return imageSize / IMAGE_REDUCTION_FACTOR - } - - function enterMapMode() { - thisObject.inMapMode = true - } - - function exitMapMode() { - thisObject.inMapMode = false - } - - function toggleMapMode() { - if (thisObject.inMapMode === false) { - enterMapMode() - } else { - exitMapMode() - } - } - - function onDragStarted(event) { - if (thisObject.inMapMode === false) { - if (event.buttons !== 2) { return } - event.candelDragging = true - enterMapMode() - } else { - if (event.buttons !== 1) { - event.candelDragging = true - return - } - - let mousePosition = { - x: event.x, - y: event.y - } - - let mouseAtSpace = { - x: mousePosition.x / browserCanvas.width * SPACE_SIZE, - y: mousePosition.y / browserCanvas.height * SPACE_SIZE - } - /* Let's see if we can snap to some of the root nodes that are Hierarchy Head and Project Heads */ - let snapCandidateNodes = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeads() - snapCandidateNodes = snapCandidateNodes.concat(UI.projects.superalgos.spaces.designSpace.workspace.getProjectsHeads()) - - for (let i = 0; i < snapCandidateNodes.length; i++) { - let node = snapCandidateNodes[i] - let nodePosition = { - x: node.payload.floatingObject.container.frame.position.x, - y: node.payload.floatingObject.container.frame.position.y - } - // nodePosition = node.payload.floatingObject.container.frame.frameThisPoint(nodePosition) - - let distance = Math.sqrt(Math.pow(mouseAtSpace.x - nodePosition.x, 2) + Math.pow(mouseAtSpace.y - nodePosition.y, 2)) - const SNAP_THREASHOLD = 1000 - if (distance < SNAP_THREASHOLD) { - mousePosition.x = nodePosition.x / SPACE_SIZE * browserCanvas.width - mousePosition.y = nodePosition.y / SPACE_SIZE * browserCanvas.height - } - } - - /* Movign the Floating Space to where the mouse is. */ - thisObject.container.frame.position.x = -mousePosition.x / browserCanvas.width * SPACE_SIZE + browserCanvas.width / 2 - thisObject.container.frame.position.y = -mousePosition.y / browserCanvas.height * SPACE_SIZE + browserCanvas.height / 2 - - exitMapMode() - } - } - - function isItFar(payload, dontCheckParent) { - /* If for any reason the paylaod is undefined we return false */ - if (payload === undefined) { return false } - if (thisObject.inMapMode === true) { return false } - - let radarFactor = 2 // How big is the margin - - /* If the chain parent is not far, they we dont consither this far. */ - if (dontCheckParent !== true) { - if (payload.chainParent !== undefined) { - if (isItFar(payload.chainParent.payload, true) === false) { return false } - } - } - - /* Exceptions that are never considered far. */ - if ( - payload.node.type === 'Trading System' || - payload.node.type === 'Network' || - payload.node.type === 'Crypto Ecosystem' || - payload.node.type === 'Charting Space' || - payload.node.type === 'Data Mine' || - payload.node.type === 'Super Scripts' - ) { - return false - } - - /* Another exception are the ones who have reference parents */ - if (payload.referenceParent !== undefined) { return false } - - /* Here we will check the position of a floatingobject to see if it is outside the screen, with a margin of one screen around. */ - let point = thisObject.container.frame.frameThisPoint(payload.position) - - if (point.x > browserCanvas.width + browserCanvas.width * radarFactor) { - return true - } - - if (point.x < 0 - browserCanvas.width * radarFactor) { - return true - } - - let bottom = COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT - let heightDiff = browserCanvas.height - bottom - if (point.y < bottom - heightDiff * radarFactor) { - return true - } - - if (point.y > browserCanvas.height + heightDiff * radarFactor) { - return true - } - return false - } - - function fitIntoVisibleArea(point) { - /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ - - let returnPoint = { - x: point.x, - y: point.y - } - - if (point.x > browserCanvas.width) { - returnPoint.x = browserCanvas.width - } - - if (point.x < 0) { - returnPoint.x = 0 - } - - if (point.y < COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT) { - returnPoint.y = COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT - } - - if (point.y > browserCanvas.height) { - returnPoint.y = browserCanvas.height - } - - return returnPoint - } - - function oneScreenUp() { - if (visible === false) { return } - let displaceVector = { - x: 0, - y: browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 - } - - thisObject.container.displace(displaceVector) - return displaceVector - } - - function oneScreenDown() { - if (visible === false) { return } - let displaceVector = { - x: 0, - y: -browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 - } - - thisObject.container.displace(displaceVector) - return displaceVector - } - - function oneScreenLeft() { - if (visible === false) { return } - let displaceVector = { - x: browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, - y: 0 - } - - thisObject.container.displace(displaceVector) - return displaceVector - } - - function oneScreenRight() { - if (visible === false) { return } - let displaceVector = { - x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, - y: 0 - } - - thisObject.container.displace(displaceVector) - return displaceVector - } - - function positionAtNode(node) { - let position = thisObject.container.frame.frameThisPoint(node.payload.position) - - let displaceVector = { - x: browserCanvas.width / 2 - position.x, - y: (COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT) + (browserCanvas.height - (COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT)) / 2 - position.y - } - - thisObject.container.displace(displaceVector) - } - - function isThisPointVisible(point) { - if (point.x > browserCanvas.width) { - return false - } - - if (point.x < 0) { - return false - } - - if (point.y < COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT) { - return false - } - - if (point.y > browserCanvas.height) { - return false - } - - return true - } - - function makeVisible() { - visible = true - } - - function makeInvisible() { - visible = false - } - - function getContainer(point) { - if (visible === false) { return } - - let container - - if (floatingObjetOnFocus !== undefined) { - container = floatingObjetOnFocus.getContainer(point) - if (container !== undefined) { - container.space = 'Floating Space' - return container - } - } - - container = thisObject.floatingLayer.getContainer(point) - if (container !== undefined) { - container.space = 'Floating Space' - return container - } - - if (visible === true) { - thisObject.container.space = 'Floating Space' - return thisObject.container - } - } - - function physics() { - if (visible === false) { return } - syncStylePhysics() - syncSettingsPhysics() - browserZoomPhysics() - positionContraintsPhysics() - thisObject.floatingLayer.physics() - } - - function syncStylePhysics() { - if (UI.projects.superalgos.spaces.designSpace === undefined) { return } - if (UI.projects.superalgos.spaces.designSpace.workspace === undefined) { return } - let designSpaceNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsByType('Design Space') - if (designSpaceNode === undefined) { return } - if (designSpaceNode.spaceStyle === undefined) { return } - let configStyle - try { - configStyle = JSON.parse(designSpaceNode.spaceStyle.config) - } catch (err) { - if (thisObject.payload !== undefined) { - thisObject.payload.uiObject.setErrorMessage(err.message) - } - return - } - if (configStyle.backgroundColor !== undefined) { - thisObject.style.backgroundColor = eval(configStyle.backgroundColor) - } - if (configStyle.node !== undefined) { - if (configStyle.node.fontSize !== undefined) { - thisObject.style.node.fontSize = configStyle.node.fontSize - } - if (configStyle.node.imageSize !== undefined) { - thisObject.style.node.imageSize = configStyle.node.imageSize - } - if (configStyle.node.name !== undefined) { - if (configStyle.node.name.fontColor !== undefined) { - thisObject.style.node.name.fontColor = eval(configStyle.node.name.fontColor) - } - } - if (configStyle.node.type !== undefined) { - if (configStyle.node.type.fontColor !== undefined) { - thisObject.style.node.type.fontColor = eval(configStyle.node.type.fontColor) - } - } - if (configStyle.node.menuItem !== undefined) { - if (configStyle.node.menuItem.fontColor !== undefined) { - thisObject.style.node.menuItem.fontColor = eval(configStyle.node.menuItem.fontColor) - } - if (configStyle.node.menuItem.backgroundColor !== undefined) { - thisObject.style.node.menuItem.backgroundColor = eval(configStyle.node.menuItem.backgroundColor) - } - if (configStyle.node.menuItem.fontSize !== undefined) { - thisObject.style.node.menuItem.fontSize = configStyle.node.menuItem.fontSize - } - if (configStyle.node.menuItem.imageSize !== undefined) { - thisObject.style.node.menuItem.imageSize = configStyle.node.menuItem.imageSize - } - } - } - } - - function syncSettingsPhysics() { - if (UI.projects.superalgos.spaces.designSpace === undefined) { return } - if (UI.projects.superalgos.spaces.designSpace.workspace === undefined) { return } - let designSpaceNode = UI.projects.superalgos.spaces.designSpace.workspace.getHierarchyHeadsByType('Design Space') - if (designSpaceNode === undefined) { return } - if (designSpaceNode.spaceSettings === undefined) { return } - let configSettings - try { - configSettings = JSON.parse(designSpaceNode.spaceSettings.config) - } catch (err) { - if (thisObject.payload !== undefined) { - thisObject.payload.uiObject.setErrorMessage(err.message) - } - return - } - if (configSettings.node !== undefined) { - if (configSettings.node.distancePercentage !== undefined) { - thisObject.settings.node.distancePercentage = configSettings.node.distancePercentage - } - if (configSettings.node.radiusPercentage !== undefined) { - thisObject.settings.node.radiusPercentage = configSettings.node.radiusPercentage - } - if (configSettings.node.massPercentage !== undefined) { - thisObject.settings.node.massPercentage = configSettings.node.massPercentage - } - if (configSettings.node.animationSteps !== undefined) { - thisObject.settings.node.animationSteps = configSettings.node.animationSteps - } - if (configSettings.node.menuItem !== undefined) { - if (configSettings.node.menuItem.widthPercentage !== undefined) { - thisObject.settings.node.menuItem.widthPercentage = configSettings.node.menuItem.widthPercentage - } - if (configSettings.node.menuItem.heightPercentage !== undefined) { - thisObject.settings.node.menuItem.heightPercentage = configSettings.node.menuItem.heightPercentage - } - if (configSettings.node.menuItem.radiusPercentage !== undefined) { - thisObject.settings.node.menuItem.radiusPercentage = configSettings.node.menuItem.radiusPercentage - } - } - } - - if (configSettings.physics !== undefined) { - thisObject.settings.physics = configSettings.physics - } - } - - function positionContraintsPhysics() { - if (thisObject.container.frame.position.x > 0) { - thisObject.container.frame.position.x = 0 - } - if (thisObject.container.frame.position.y > 0) { - thisObject.container.frame.position.y = 0 - } - if (thisObject.container.frame.position.x + thisObject.container.frame.width < browserCanvas.width) { - thisObject.container.frame.position.x = browserCanvas.width - thisObject.container.frame.width - } - if (thisObject.container.frame.position.y + thisObject.container.frame.height < browserCanvas.height) { - thisObject.container.frame.position.y = browserCanvas.height - thisObject.container.frame.height - } - } - - function browserZoomPhysics() { - if (devicePixelRatio !== window.devicePixelRatio) { - devicePixelRatio = window.devicePixelRatio - - thisObject.container.frame.position.x = browserCanvas.width / 2 - thisObject.container.frame.width / 2 - thisObject.container.frame.position.y = browserCanvas.height / 2 - thisObject.container.frame.height / 2 - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (visible === false) { return } - drawBackground() - thisObject.floatingLayer.draw() - } - - function drawBackground() { - browserCanvasContext.beginPath() - - browserCanvasContext.rect(thisObject.container.frame.position.x, thisObject.container.frame.position.y, thisObject.container.frame.width, thisObject.container.frame.height) - browserCanvasContext.fillStyle = 'rgba(' + thisObject.style.backgroundColor + ', 1)' - - browserCanvasContext.closePath() - browserCanvasContext.fill() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FormulaEditor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FormulaEditor.js deleted file mode 100644 index 9d8d1c031..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/FormulaEditor.js +++ /dev/null @@ -1,199 +0,0 @@ - -function newFormulaEditor() { - const MODULE_NAME = 'Formula Editor' - - let thisObject = { - isVisibleFunction: undefined, - visible: false, - imagePathOK: undefined, - imagePathNOT_OK: undefined, - rawRadius: undefined, - targetRadius: undefined, - currentRadius: undefined, - container: undefined, - payload: undefined, - deactivate: deactivate, - activate: activate, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let isMouseOver = false - let SIZE_FACTOR = 1.0 - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.isVisibleFunction = undefined - } - - function initialize() { - - } - - function deactivate() { - if (thisObject.visible === true) { - thisObject.visible = false - let textArea = document.getElementById('textArea') - textArea.style.display = 'none' - thisObject.payload.node.code = textArea.value - } - EDITOR_ON_FOCUS = false - } - - function activate(action) { - thisObject.visible = true - thisObject.payload = action.node.payload - thisObject.rawRadius = 8 - thisObject.targetRadius = thisObject.container.frame.radius - thisObject.currentRadius = 0 - thisObject.payload.uiObject.resetErrorMessage() - - let textArea = document.getElementById('textArea') - textArea.value = thisObject.payload.node.code - textArea.style = 'resize: none;' + - ' border: none;' + - ' outline: none;' + - 'box-shadow: none;' + - 'overflow:hidden;' + - 'font-family: ' + UI_FONT.PRIMARY + ';' + - 'font-size: 14px;' + - 'background-color: rgb(' + UI_COLOR.MANGANESE_PURPLE + ');' + - 'color:rgb(255, 255, 255);' + - 'width: ' + thisObject.container.frame.width + 'px;' + - 'height: ' + thisObject.container.frame.height + 'px' - textArea.style.display = 'block' - textArea.focus() - EDITOR_ON_FOCUS = true - } - - function getContainer(point) { - let container - if (thisObject.visible === true) { - if (point.x === VERY_LARGE_NUMBER) { - /* The the mouse leaves the canvas, and event of mouse over with a ridiculous coordinate is triggered so that - anyone can react. In our case, the code editor has a text area that is not part of the canvas, so the event is - triggered. We compensate recognizing this coordinate and returning our container. */ - return thisObject.container - } - - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - return thisObject.container - } else { - return undefined - } - } - } - - function physics() { - if (Math.abs(thisObject.currentRadius - thisObject.targetRadius) >= 0.5) { - if (thisObject.currentRadius < thisObject.targetRadius) { - thisObject.currentRadius = thisObject.currentRadius + 0.5 - } else { - thisObject.currentRadius = thisObject.currentRadius - 0.5 - } - } - - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - thisObject.container.frame.width = thisObject.container.frame.radius * 1 * SIZE_FACTOR - thisObject.container.frame.height = thisObject.container.frame.radius * 1 * SIZE_FACTOR - - let textAreaPosition = { - x: 0 - thisObject.container.frame.width / 2, - y: 0 - thisObject.container.frame.height * 3 / 7 + CURRENT_TOP_MARGIN - } - - textAreaPosition = thisObject.container.frame.frameThisPoint(textAreaPosition) - if (thisObject.visible === true) { - let checkPosition = { - x: textAreaPosition.x, - y: textAreaPosition.y - CURRENT_TOP_MARGIN - } - if (thisObject.isVisibleFunction(checkPosition) === false) { - deactivate() - } - } - if (thisObject.visible === true) { - let textAreaDiv = document.getElementById('textAreaDiv') - textAreaDiv.style = 'position:fixed; top:' + textAreaPosition.y + 'px; left:' + textAreaPosition.x + 'px; z-index:1; ' - } - } - - function drawBackground() { - if (thisObject.visible === true) { - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - let radius = thisObject.container.frame.radius * SIZE_FACTOR - - if (radius > 0.5) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius + 3, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')' - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(position.x, position.y, radius , 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', ' + 1 + ')' - browserCanvasContext.fill() - } - } - } - function drawForeground() { - let iconPosition = { - x: 0, - y: thisObject.currentRadius * 1.5 - } - - iconPosition = thisObject.container.frame.frameThisPoint(iconPosition) - - /* Menu Item */ - - if (thisObject.canDrawIcon === true && thisObject.currentRadius > 1) { - browserCanvasContext.drawImage(thisObject.icon, iconPosition.x - thisObject.currentRadius, iconPosition.y - thisObject.currentRadius, thisObject.currentRadius * 2, thisObject.currentRadius * 2) - - /* Menu Label */ - - let label = 'Code looks good!' - let labelPoint - let fontSize = 10 - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (thisObject.currentRadius >= thisObject.targetRadius) { - labelPoint = { - x: iconPosition.x + thisObject.currentRadius + 10, - y: iconPosition.y + fontSize * FONT_ASPECT_RATIO - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/Picker.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/Picker.js deleted file mode 100644 index 594696d90..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/Picker.js +++ /dev/null @@ -1,216 +0,0 @@ - -function newPicker() { - const MODULE_NAME = 'Picker' - - let thisObject = { - container: undefined, - selectedItem: 0, - onParentChanged: onParentChanged, - getSelected: getSelected, - setSelected: setSelected, - physics: physics, - drawBackground: drawBackground, - drawForeground: drawForeground, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - thisObject.container.frame.width = 150 - thisObject.container.frame.height = 60 - - let isMouseOver - let optionsList - let parent - let current - let parentSelected = 0 - let propertyName - let selected = 0 - let lastSelected = 0 - let onMouseWheelEventSubscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - optionsList = undefined - parent = undefined - current = undefined - } - - function initialize(pOptionsList, pCurrent, pParent, pPropertyName) { - optionsList = pOptionsList - current = pCurrent - parent = pParent - propertyName = pPropertyName - onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - } - - function onMouseOver(event) { - isMouseOver = true - } - - function onMouseNotOver() { - isMouseOver = false - } - - function setSelected(pOptionsList, pCurrent, pParent, pSelected) { - if (pOptionsList !== undefined) { - optionsList = pOptionsList - } - if (pCurrent !== undefined) { - current = pCurrent - } - if (pParent !== undefined) { - parent = pParent - } - if (pSelected !== undefined) { - selected = pSelected - } - raiseEventParentChanged() - } - - function onParentChanged(event) { - if (event.parent !== undefined) { - parent = event.parent - } - parentSelected = event.selected - - selected = 0 - let parentKeys - - parentKeys = Object.keys(parent) - checkPropertyName() - - function checkPropertyName() { - if (propertyName === undefined) { - current = parent[parentKeys[parentSelected]] - checkArray() - } else { - current = parent[parentKeys[parentSelected]] - current = current[propertyName] - checkArray() - } - } - - function checkArray() { - if (Array.isArray(current) === false) { - optionsList = Object.keys(current) - } else { - optionsList = current - } - } - - raiseEventParentChanged() - } - - function getContainer(point) { - let container - - if (thisObject.container.frame.isThisPointHere(point, true, false) === true) { - return thisObject.container - } - } - - function getSelected() { - return optionsList[selected] - } - - function onMouseWheel() { - delta = event.wheelDelta - if (delta > 0) { - delta = -1 - } else { - delta = 1 - } - - selected = selected + delta - if (selected < 0) { selected = 0 } - if (selected > optionsList.length - 1) { - selected = optionsList.length - 1 - } - - if (selected !== lastSelected) { - lastSelected = selected - raiseEventParentChanged() - } - } - - function raiseEventParentChanged() { - let event = { - selected: selected, - parent: current, - propertyName: propertyName - } - thisObject.container.eventHandler.raiseEvent('onParentChanged', event) - } - - function physics() { - - } - - function drawBackground() { - - } - - function drawForeground() { - const FONT_SIZE = 15 - const VISIBLE_LABELS = 5 - let fontSize - let fontColor - let opacity - - for (let i = 0; i < VISIBLE_LABELS; i++) { - let index = i - 2 + selected - let label = '' - if (index >= 0 && index < optionsList.length) { - label = optionsList[index] - } - fontColor = UI_COLOR.LIGHT_GREY - switch (i) { - case 0: - fontSize = FONT_SIZE - 5 - opacity = 0.4 - break - case 1: - fontSize = FONT_SIZE - 3 - opacity = 0.5 - break - case 2: - fontSize = FONT_SIZE - 0 - fontColor = UI_COLOR.BLACK - opacity = 1 - break - case 3: - fontSize = FONT_SIZE - 3 - opacity = 0.5 - break - case 4: - fontSize = FONT_SIZE - 5 - opacity = 0.4 - break - } - - if (i === 2 || isMouseOver === true) { - UI.projects.superalgos.utilities.drawPrint.drawLabel(label, 1 / 2, i / VISIBLE_LABELS, 0, 0, fontSize, thisObject.container, fontColor, undefined, undefined, opacity) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObject.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObject.js deleted file mode 100644 index b11f6b41c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObject.js +++ /dev/null @@ -1,2333 +0,0 @@ - -function newUiObject() { - const MODULE_NAME = 'UI Object' - const ERROR_LOG = true - - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - fitFunction: undefined, - isVisibleFunction: undefined, - type: undefined, - menu: undefined, - isOnFocus: false, - container: undefined, - payload: undefined, - codeEditor: undefined, - configEditor: undefined, - conditionEditor: undefined, - formulaEditor: undefined, - uiObjectTitle: undefined, - circularProgressBar: undefined, - isRunning: undefined, - isPlaying: undefined, - shortcutKey: undefined, - isShowing: undefined, - hasError: undefined, - hasWarning: undefined, - hasInfo: undefined, - valueAtAngle: true, - run: run, - stop: stop, - heartBeat: heartBeat, - getReadyToChainAttach: getReadyToChainAttach, - showAvailabilityToChainAttach: showAvailabilityToChainAttach, - getReadyToReferenceAttach: getReadyToReferenceAttach, - showAvailabilityToReferenceAttach: showAvailabilityToReferenceAttach, - highlight: highlight, - runningAtBackend: runningAtBackend, - reset: reset, - setErrorMessage: setErrorMessage, - resetErrorMessage: resetErrorMessage, - setWarningMessage: setWarningMessage, - resetWarningMessage: resetWarningMessage, - setInfoMessage: setInfoMessage, - resetInfoMessage: resetInfoMessage, - getValue: getValue, - setValue: setValue, - resetValue: resetValue, - setPercentage: setPercentage, - resetPercentage: resetPercentage, - setStatus: setStatus, - resetStatus: resetStatus, - physics: physics, - invisiblePhysics: invisiblePhysics, - drawBackground: drawBackground, - drawMiddleground: drawMiddleground, - drawForeground: drawForeground, - drawOnFocus: drawOnFocus, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME, 'Circle') - thisObject.container.isClickeable = false - thisObject.container.isDraggeable = false - thisObject.container.frame.radius = 0 - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - let icon - let executingIcon - - let selfFocusEventSubscriptionId - let selfNotFocusEventSubscriptionId - let selfDisplaceEventSubscriptionId - let selfDragStartedEventSubscriptionId - let selfDragFinishedEventSubscriptionId - - let isHighlighted - let highlightCounter = 0 - - let isRunningAtBackend - let runningAtBackendCounter = 0 - - let errorMessageCounter = 0 - let warningMessageCounter = 0 - let infoMessageCounter = 0 - - let hasValue - let valueCounter = 0 - - let hasPercentage - let percentageCounter = 0 - - let hasStatus - let statusCounter = 0 - - let previousDistanceToChainParent - let readyToChainAttachDisplayCounter = 5 - let readyToChainAttachDisplayIncrement = 0.1 - let readyToChainAttachCounter = 0 - let isReadyToChainAttach - let availableToChainAttachCounter = 0 - let isAvailableToChainAttach - let isChainAttaching = false - let chainAttachToNode - - let previousDistanceToReferenceParent - let readyToReferenceAttachDisplayCounter = 5 - let readyToReferenceAttachDisplayIncrement = 0.1 - let readyToReferenceAttachCounter = 0 - let isReadyToReferenceAttach - let availableToReferenceAttachCounter = 0 - let isAvailableToReferenceAttach - let isReferenceAttaching = false - let referenceAttachToNode - - let isDragging = false - - let errorMessage = '' - let warningMessage = '' - let infoMessage = '' - - let currentValue = 0 - let valueMinDecimals = undefined - let currentPercentage = '' - let currentStatus = '' - let rightDragging = false - - let eventSubscriptionIdOnError - let eventSubscriptionIdOnWarning - let eventSubscriptionIdOnInfo - let eventSubscriptionIdOnRunning - let eventSubscriptionIdOnStopped - - let lastHeartBeat - let onRunningCallBackFunction - let onRunningCallBackFunctionWasCalled = false - - let newUiObjectCounter = 25 - let referenceLineCounter = 0 - let chainLineCounter = 0 - - let eventsServerClient - - let errorRingAnimation = 0 - let warningRingAnimation = 0 - let infoRingAnimation = 0 - let errorRingDirectionAnimation = 1 - let warningRingDirectionAnimation = 1 - let infoRingDirectionAnimation = 1 - - return thisObject - - function finalize() { - finalizeEventsServerClient() - - thisObject.container.eventHandler.stopListening(selfFocusEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfNotFocusEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfDisplaceEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfDragStartedEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfDragFinishedEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.menu.finalize() - thisObject.menu = undefined - thisObject.uiObjectTitle.finalize() - thisObject.uiObjectTitle = undefined - thisObject.fitFunction = undefined - thisObject.isVisibleFunction = undefined - - if (thisObject.codeEditor !== undefined) { - thisObject.codeEditor.finalize() - thisObject.codeEditor = undefined - } - - if (thisObject.configEditor !== undefined) { - thisObject.configEditor.finalize() - thisObject.configEditor = undefined - } - - if (thisObject.conditionEditor !== undefined) { - thisObject.conditionEditor.finalize() - thisObject.conditionEditor = undefined - } - - if (thisObject.formulaEditor !== undefined) { - thisObject.formulaEditor.finalize() - thisObject.formulaEditor = undefined - } - - icon = undefined - chainAttachToNode = undefined - referenceAttachToNode = undefined - lastHeartBeat = undefined - - onRunningCallBackFunction = undefined - } - - function finalizeEventsServerClient() { - if (eventsServerClient !== undefined) { - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - - if (eventSubscriptionIdOnRunning !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnRunning, 'UiObject') - } - if (eventSubscriptionIdOnStopped !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnStopped, 'UiObject') - } - if (eventSubscriptionIdOnError !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnError, 'UiObject') - } - if (eventSubscriptionIdOnWarning !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnWarning, 'UiObject') - } - if (eventSubscriptionIdOnInfo !== undefined) { - eventsServerClient.stopListening(key, eventSubscriptionIdOnInfo, 'UiObject') - } - } - } - - function initialize(payload, menuItemsInitialValues) { - thisObject.payload = payload - - /* Initialize the Menu */ - - thisObject.menu = newCircularMenu() - thisObject.menu.initialize(menuItemsInitialValues, thisObject.payload) - thisObject.menu.container.connectToParent(thisObject.container, false, false, true, true, false, false, true, true) - - /* Initialize UI Object Title */ - - thisObject.uiObjectTitle = newUiObjectTitle() - thisObject.uiObjectTitle.isVisibleFunction = thisObject.isVisibleFunction - thisObject.uiObjectTitle.container.connectToParent(thisObject.container, false, false, true, true, false, false, true, true) - thisObject.uiObjectTitle.fitFunction = thisObject.fitFunction - thisObject.uiObjectTitle.initialize(thisObject.payload) - - /* Load UI Object Image */ - - iconPhysics() - - selfFocusEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onFocus', onFocus) - selfNotFocusEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onNotFocus', onNotFocus) - selfDisplaceEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDisplace', onDisplace) - selfDragStartedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDragStarted', onDragStarted) - selfDragFinishedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onDragFinished', onDragFinished) - } - - function getContainer(point) { - - let container - - if (isDragging === false && thisObject.isOnFocus === true) { - if (thisObject.codeEditor !== undefined) { - container = thisObject.codeEditor.getContainer(point) - if (container !== undefined) { return container } - } - - if (thisObject.configEditor !== undefined) { - container = thisObject.configEditor.getContainer(point) - if (container !== undefined) { return container } - } - - if (thisObject.conditionEditor !== undefined) { - container = thisObject.conditionEditor.getContainer(point) - if (container !== undefined) { return container } - } - - if (thisObject.formulaEditor !== undefined) { - container = thisObject.formulaEditor.getContainer(point) - if (container !== undefined) { return container } - } - - let getitle = true - - if (thisObject.codeEditor !== undefined) { - if (thisObject.codeEditor.visible === true) { - getitle = false - } - } - if (thisObject.configEditor !== undefined) { - if (thisObject.configEditor.visible === true) { - getitle = false - } - } - if (thisObject.conditionEditor !== undefined) { - if (thisObject.conditionEditor.visible === true) { - getitle = false - } - } - if (thisObject.formulaEditor !== undefined) { - if (thisObject.formulaEditor.visible === true) { - getitle = false - } - } - - if (getitle === true) { - container = thisObject.uiObjectTitle.getContainer(point) - if (container !== undefined) { return container } - } - - container = thisObject.menu.getContainer(point) - if (container !== undefined) { return container } - } - - if (thisObject.container.frame.isThisPointHere(point, true, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function invisiblePhysics() { - thisObject.menu.invisiblePhysics() - childrenRunningPhysics() - thisObject.uiObjectTitle.physics() - } - - function physics() { - thisObject.menu.physics() - thisObject.uiObjectTitle.physics() - - if (thisObject.codeEditor !== undefined) { - thisObject.codeEditor.physics() - } - - if (thisObject.configEditor !== undefined) { - thisObject.configEditor.physics() - } - - if (thisObject.conditionEditor !== undefined) { - thisObject.conditionEditor.physics() - } - - if (thisObject.formulaEditor !== undefined) { - thisObject.formulaEditor.physics() - } - - if (thisObject.payload.chainParent === undefined || thisObject.payload.chainParent.payload === undefined) { - thisObject.payload.targetPosition.x = thisObject.payload.position.x, - thisObject.payload.targetPosition.y = thisObject.payload.position.y - } else { - if (thisObject.payload.chainParent.payload.position !== undefined) { - thisObject.payload.targetPosition.x = thisObject.payload.chainParent.payload.position.x - thisObject.payload.targetPosition.y = thisObject.payload.chainParent.payload.position.y - } - } - - if (thisObject.circularProgressBar !== undefined) { - thisObject.circularProgressBar.physics() - } - - iconPhysics() - highlightPhisycs() - runningAtBackendPhisycs() - errorMessagePhisycs() - warningMessagePhisycs() - infoMessagePhisycs() - valuePhisycs() - percentagePhisycs() - statusPhisycs() - chainDetachingPhysics() - chainAttachingPhysics() - referenceDetachingPhysics() - referenceAttachingPhysics() - childrenRunningPhysics() - newObjectPhysics() - referenceLinePhysics() - chainLinePhysics() - ringsAnimationPhysics() - - function ringsAnimationPhysics() { - errorRingAnimation = errorRingAnimation + errorRingDirectionAnimation - warningRingAnimation = warningRingAnimation + warningRingDirectionAnimation - infoRingAnimation = infoRingAnimation + infoRingDirectionAnimation - - if (errorRingAnimation === 10) { errorRingDirectionAnimation = -1 } - if (warningRingAnimation === 10) { warningRingDirectionAnimation = -1 } - if (infoRingAnimation === 10) { infoRingDirectionAnimation = -1 } - - if (errorRingAnimation === 0) { errorRingDirectionAnimation = 1 } - if (warningRingAnimation === 0) { warningRingDirectionAnimation = 1 } - if (infoRingAnimation === 0) { infoRingDirectionAnimation = 1 } - } - - function referenceLinePhysics() { - referenceLineCounter = referenceLineCounter + 2 - if (referenceLineCounter > 500) { - referenceLineCounter = 0 - } - } - - function chainLinePhysics() { - chainLineCounter = chainLineCounter - 5 - if (chainLineCounter < 0) { - chainLineCounter = 500 - } - } - - function newObjectPhysics() { - newUiObjectCounter-- - if (newUiObjectCounter < 0) { - newUiObjectCounter = 0 - } - } - - function chainAttachingPhysics() { - chainAttacchingCounters() - - if (thisObject.isOnFocus !== true) { return } - if (isDragging !== true) { return } - if (rightDragging !== true) { return } - if (thisObject.payload.chainParent !== undefined) { return } - - let nearbyFloatingObjects = thisObject.payload.floatingObject.nearbyFloatingObjects - let compatibleTypes - - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.chainAttachesTo !== undefined) { - compatibleTypes = nodeDefinition.chainAttachesTo.compatibleTypes - } else { - return - } - } else { - return - } - - let foundCompatible = false - chainAttachToNode = undefined - isChainAttaching = false - - for (let i = 0; i < nearbyFloatingObjects.length; i++) { - let nearby = nearbyFloatingObjects[i] - let distance = nearby[0] - let floatingObject = nearby[1] - let nearbyNode = floatingObject.payload.node - if (compatibleTypes.indexOf('->' + nearbyNode.type + '->') >= 0) { - /* Discard App Schema defined objects with busy coonection ports */ - nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - let mustContinue = false - let parentNodeDefinition = getNodeDefinition(nearbyNode) - if (parentNodeDefinition !== undefined) { - if (parentNodeDefinition.properties !== undefined) { - for (let j = 0; j < parentNodeDefinition.properties.length; j++) { - let property = parentNodeDefinition.properties[j] - if (nodeDefinition.propertyNameAtParent === property.name) { - switch (property.type) { - case 'node': { - if (nearbyNode[property.name] !== undefined) { - mustContinue = true - } - } - break - case 'array': { - /* Nothing to worry about since an array can take more than one element. */ - } - break - } - } - } - } - } - if (mustContinue === true) { continue } - } - - /* Discard Phases without partent */ - if (thisObject.payload.node.type === 'Phase' && nearbyNode.type === 'Phase' && nearbyNode.payload.parentNode === undefined) { continue } - /* Control maxPhases */ - if (thisObject.payload.node.type === 'Phase') { - if (nearbyNode.maxPhases !== undefined) { - if (nearbyNode.phases.length >= nearbyNode.maxPhases) { - continue - } - } - } - if (thisObject.payload.node.type === 'Phase' && nearbyNode.type === 'Phase') { - if (nearbyNode.payload.parentNode.maxPhases !== undefined) { - if (nearbyNode.payload.parentNode.phases.length >= nearbyNode.payload.parentNode.maxPhases) { - continue - } - } - } - if (foundCompatible === false) { - if (distance < thisObject.payload.floatingObject.container.frame.radius * 1.5 + floatingObject.container.frame.radius * 1.5) { - nearbyNode.payload.uiObject.getReadyToChainAttach() - isChainAttaching = true - chainAttachToNode = nearbyNode - foundCompatible = true - } - } - nearbyNode.payload.uiObject.showAvailabilityToChainAttach() - } - } - - function chainAttacchingCounters() { - if (readyToChainAttachDisplayCounter > 15) { - readyToChainAttachDisplayIncrement = -0.25 - } - - if (readyToChainAttachDisplayCounter < 5) { - readyToChainAttachDisplayIncrement = 0.25 - } - - readyToChainAttachDisplayCounter = readyToChainAttachDisplayCounter + readyToChainAttachDisplayIncrement - - readyToChainAttachCounter-- - if (readyToChainAttachCounter <= 0) { - readyToChainAttachCounter = 0 - isReadyToChainAttach = false - } else { - isReadyToChainAttach = true - } - - availableToChainAttachCounter-- - if (availableToChainAttachCounter <= 0) { - availableToChainAttachCounter = 0 - isAvailableToChainAttach = false - } else { - isAvailableToChainAttach = true - } - } - } - - function chainDetachingPhysics() { - if (isDragging !== true) { return } - if (rightDragging === false) { return } - - let distanceToChainParent = Math.sqrt(Math.pow(thisObject.payload.position.x - thisObject.payload.targetPosition.x, 2) + Math.pow(thisObject.payload.position.y - thisObject.payload.targetPosition.y, 2)) - let ratio = distanceToChainParent / previousDistanceToChainParent - if (previousDistanceToChainParent === 0) { - previousDistanceToChainParent = distanceToChainParent - return - } - previousDistanceToChainParent = distanceToChainParent - - if (thisObject.isOnFocus !== true) { return } - if (thisObject.payload.chainParent === undefined) { return } - if (thisObject.payload.parentNode === undefined) { return } - - let THRESHOLD = 1.15 - - if (ratio > THRESHOLD) { - UI.projects.superalgos.spaces.designSpace.workspace.executeAction({ node: thisObject.payload.node, name: 'Parent Detach', project: 'Superalgos' }) - } - } - - function referenceAttachingPhysics() { - referenceAttacchingCounters() - - if (thisObject.isOnFocus !== true) { return } - if (isDragging !== true) { return } - if (rightDragging !== true) { return } - if (thisObject.payload.referenceParent !== undefined) { return } - - let nearbyFloatingObjects = thisObject.payload.floatingObject.nearbyFloatingObjects - let compatibleTypes - - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.referenceAttachesTo !== undefined) { - compatibleTypes = nodeDefinition.referenceAttachesTo.compatibleTypes - } else { - return - } - } else { - return - } - - let foundCompatible = false - referenceAttachToNode = undefined - isReferenceAttaching = false - - for (let i = 0; i < nearbyFloatingObjects.length; i++) { - let nearby = nearbyFloatingObjects[i] - let distance = nearby[0] - let floatingObject = nearby[1] - let nearbyNode = floatingObject.payload.node - if (compatibleTypes.indexOf('->' + nearbyNode.type + '->') >= 0 || compatibleTypes === "->*Any Node*->") { - if (nodeDefinition.referenceAttachesTo.incompatibleTypes !== undefined) { - if (nodeDefinition.referenceAttachesTo.incompatibleTypes.indexOf('->' + nearbyNode.type + '->') >= 0) { - continue - } - } - if (foundCompatible === false) { - if (distance < thisObject.payload.floatingObject.container.frame.radius * 1.5 + floatingObject.container.frame.radius * 1.5) { - nearbyNode.payload.uiObject.getReadyToReferenceAttach() - isReferenceAttaching = true - referenceAttachToNode = nearbyNode - foundCompatible = true - } - } - nearbyNode.payload.uiObject.showAvailabilityToReferenceAttach() - } - } - - function referenceAttacchingCounters() { - if (readyToReferenceAttachDisplayCounter > 15) { - readyToReferenceAttachDisplayIncrement = -0.25 - } - - if (readyToReferenceAttachDisplayCounter < 5) { - readyToReferenceAttachDisplayIncrement = 0.25 - } - - readyToReferenceAttachDisplayCounter = readyToReferenceAttachDisplayCounter + readyToReferenceAttachDisplayIncrement - - readyToReferenceAttachCounter-- - if (readyToReferenceAttachCounter <= 0) { - readyToReferenceAttachCounter = 0 - isReadyToReferenceAttach = false - } else { - isReadyToReferenceAttach = true - } - - availableToReferenceAttachCounter-- - if (availableToReferenceAttachCounter <= 0) { - availableToReferenceAttachCounter = 0 - isAvailableToReferenceAttach = false - } else { - isAvailableToReferenceAttach = true - } - } - } - - function referenceDetachingPhysics() { - if (isDragging !== true) { return } - if (thisObject.payload === undefined) { return } - if (thisObject.payload.floatingObject.isFrozen === true) { return } - if (rightDragging === false) { return } - - if (thisObject.payload.referenceParent === undefined) { return } - - let distanceToReferenceParent = Math.sqrt(Math.pow(thisObject.payload.position.x - thisObject.payload.referenceParent.payload.position.x, 2) + Math.pow(thisObject.payload.position.y - thisObject.payload.referenceParent.payload.position.y, 2)) - let ratio = distanceToReferenceParent / previousDistanceToReferenceParent - if (previousDistanceToReferenceParent === 0) { - previousDistanceToReferenceParent = distanceToReferenceParent - return - } - previousDistanceToReferenceParent = distanceToReferenceParent - - if (thisObject.isOnFocus !== true) { return } - - let THRESHOLD = 1.15 - - if (ratio > THRESHOLD) { - UI.projects.superalgos.spaces.designSpace.workspace.executeAction({ node: thisObject.payload.node, name: 'Reference Detach', project: 'Superalgos' }) - } - } - - function highlightPhisycs() { - highlightCounter-- - if (highlightCounter < 0) { - highlightCounter = 0 - isHighlighted = false - } - } - - function runningAtBackendPhisycs() { - runningAtBackendCounter-- - if (runningAtBackendCounter < 0) { - runningAtBackendCounter = 0 - isRunningAtBackend = false - } - } - - function errorMessagePhisycs() { - errorMessageCounter-- - if (errorMessageCounter < 0) { - errorMessageCounter = 0 - thisObject.hasError = false - } - } - - function warningMessagePhisycs() { - warningMessageCounter-- - if (warningMessageCounter < 0) { - warningMessageCounter = 0 - thisObject.hasWarning = false - } - } - - function infoMessagePhisycs() { - infoMessageCounter-- - if (infoMessageCounter < 0) { - infoMessageCounter = 0 - thisObject.hasInfo = false - } - } - - function valuePhisycs() { - valueCounter-- - if (valueCounter < 0) { - valueCounter = 0 - hasValue = false - } - } - - function percentagePhisycs() { - percentageCounter-- - if (percentageCounter < 0) { - percentageCounter = 0 - hasPercentage = false - } - } - - function statusPhisycs() { - statusCounter-- - if (statusCounter < 0) { - statusCounter = 0 - hasStatus = false - } - } - } - - function heartBeatPhysics() { - if (lastHeartBeat !== undefined) { - const ONE_MIN = 60000 - nowTimestamp = (new Date()).valueOf() - if (nowTimestamp - lastHeartBeat.valueOf() > ONE_MIN) { - lastHeartBeat = undefined - thisObject.isRunning = false - valueCounter = 0 - } - } else { - thisObject.isRunning = false - } - } - - function childrenRunningPhysics() { - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition.properties === undefined) { return } - let monitorChildrenRunning = false - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - if (property.monitorChildrenRunning === true) { - let children = thisObject.payload.node[property.name] - if (children === undefined) { continue } - let totalRunning = 0 - for (let j = 0; j < children.length; j++) { - let child = children[j] - if (child.payload !== undefined) { - if (child.payload.uiObject.isRunning === true) { - totalRunning++ - } - } - } - if (totalRunning > 0) { - setStatus(totalRunning + ' / ' + children.length + ' Running') - thisObject.isRunning = true - } else { - thisObject.isRunning = false - valueCounter = 0 - } - monitorChildrenRunning = true - return - } - } - if (monitorChildrenRunning === false) { - heartBeatPhysics() - } - } - - function getReadyToChainAttach() { - readyToChainAttachCounter = 10 - } - - function showAvailabilityToChainAttach() { - availableToChainAttachCounter = 10 - } - - function getReadyToReferenceAttach() { - readyToReferenceAttachCounter = 10 - } - - function showAvailabilityToReferenceAttach() { - availableToReferenceAttachCounter = 10 - } - - function highlight(counter) { - isHighlighted = true - if (counter !== undefined) { - highlightCounter = counter - } else { - highlightCounter = 30 - } - } - - function runningAtBackend() { - isRunningAtBackend = true - runningAtBackendCounter = 5 - } - - function setErrorMessage(message, duration) { - if (message !== undefined) { - errorMessage = message - thisObject.hasError = true - if (duration === undefined) { duration = 2 } - errorMessageCounter = 100 * duration - - /* - Next, we are going to try to inform the parent that this - node has an error, as a way to show the end user where the - node with error is. This is useful to detect errors in nodes - that are located at braches that are collapsed. - */ - - if (thisObject.payload !== undefined) { - if (thisObject.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject !== undefined) { - if (thisObject.payload.floatingObject.isCollapsed === true || thisObject.payload.floatingObject.isParentCollapsed === true) { - if (thisObject.payload.parentNode.payload.uiObject.hasError !== true) { - thisObject.payload.parentNode.payload.uiObject.setErrorMessage('Error Inside this Branch') - } - } - } - } - } - } - } - } - - function resetErrorMessage() { - errorMessage = undefined - thisObject.hasError = false - } - - function setWarningMessage(message, duration) { - if (message !== undefined) { - warningMessage = message - thisObject.hasWarning = true - if (duration === undefined) { duration = 1 } - warningMessageCounter = 100 * duration - - /* - Next, we are going to try to inform the parent that this - node has an warning, as a way to show the end user where the - node with warning is. This is useful to detect warnings in nodes - that are located at braches that are collapsed. - */ - - if (thisObject.payload !== undefined) { - if (thisObject.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject.isCollapsed === true || thisObject.payload.parentNode.payload.floatingObject.isParentCollapsed === true) { - if (thisObject.payload.parentNode.payload.uiObject !== true) { - thisObject.payload.parentNode.payload.uiObject.setWarningMessage('Warning Inside this Branch') - } - } - } - } - } - } - } - } - - function resetWarningMessage() { - warningMessage = undefined - thisObject.hasWarning = false - } - - function setInfoMessage(message, duration) { - if (message !== undefined) { - infoMessage = message - thisObject.hasInfo = true - if (duration === undefined) { duration = 1 } - infoMessageCounter = 100 * duration - - /* - Next, we are going to try to inform the parent that this - node has an info, as a way to show the end user where the - node with info is. This is useful to detect infos in nodes - that are located at braches that are collapsed. - */ - - if (thisObject.payload !== undefined) { - if (thisObject.payload.parentNode !== undefined) { - if (thisObject.payload.parentNode.payload !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject !== undefined) { - if (thisObject.payload.parentNode.payload.floatingObject.isCollapsed === true || thisObject.payload.parentNode.payload.floatingObject.isParentCollapsed === true) { - if (thisObject.payload.parentNode.payload.uiObject !== true) { - thisObject.payload.parentNode.payload.uiObject.setInfoMessage('Info Inside this Branch') - } - } - } - } - } - } - } - } - - function resetInfoMessage() { - infoMessage = undefined - thisObject.hasInfo = false - } - - function getValue() { - return currentValue - } - - function setValue(value, counter, minDecimals) { - if (value !== undefined) { - currentValue = value - hasValue = true - valueMinDecimals = minDecimals - if (counter !== undefined) { - valueCounter = counter - } else { - valueCounter = 100 - } - } - } - - function resetValue() { - currentValue = undefined - hasValue = false - valueCounter = 0 - } - - function setPercentage(percentage, counter) { - if (percentage !== undefined) { - currentPercentage = percentage - hasPercentage = true - if (counter !== undefined) { - percentageCounter = counter - } else { - percentageCounter = 100 - } - } - } - - function resetPercentage() { - currentPercentage = undefined - hasPercentage = false - percentageCounter = 0 - } - - function setStatus(status, counter) { - if (status !== undefined) { - currentStatus = status - hasStatus = true - if (counter !== undefined) { - statusCounter = counter - } else { - statusCounter = 100 - } - } - } - - function resetStatus() { - currentStatus = undefined - hasStatus = false - statusCounter = 0 - } - - function heartBeat() { - lastHeartBeat = new Date() - thisObject.isRunning = true - - if (onRunningCallBackFunctionWasCalled === false) { - onRunningCallBackFunctionWasCalled = true - if (onRunningCallBackFunction !== undefined) { - onRunningCallBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } - } - } - - function reset() { - resetErrorMessage() - resetWarningMessage() - resetInfoMessage() - resetPercentage() - resetValue() - resetStatus() - } - - function run(pEventsServerClient, callBackFunction) { - finalizeEventsServerClient() - reset() - eventsServerClient = pEventsServerClient - - /* We setup the circular progress bar. */ - if (thisObject.circularProgressBar !== undefined) { - thisObject.circularProgressBar.finalize() - } - - thisObject.circularProgressBar = newCircularProgressBar() - thisObject.circularProgressBar.initialize(thisObject.payload, eventsServerClient) - thisObject.circularProgressBar.fitFunction = thisObject.fitFunction - thisObject.circularProgressBar.container = thisObject.container - - setupRunningEventListener(callBackFunction) - setupErrorEventListener(callBackFunction) - setupWarningEventListener() - setupInfoEventListener() - - function setupRunningEventListener(callBackFunction) { - /* We will wait to hear the Running event in order to confirm the execution was really started */ - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Running', undefined, 'UiObject', onResponse, onRunning) - - onRunningCallBackFunction = callBackFunction - - function onResponse(message) { - eventSubscriptionIdOnRunning = message.eventSubscriptionId - } - - function onRunning() { - - if (thisObject.payload === undefined) { return } - - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.stopListening(key, eventSubscriptionIdOnRunning, 'UiObject') - - thisObject.isRunning = true - - if (callBackFunction !== undefined) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - onRunningCallBackFunctionWasCalled = true - } - } - - /* - While it is running, it can happen that it naturally stops or is stopped not from the UI but from other means. - In those cases, the stop function would never be called (from the UI). So what we will do is to call it from - here with and event, and passing our own callBackFunction. In case there is an external source stopping this, - this will produce an execution of the callback with our event, which will produce that the menu item is restored - to its default value. - - If on the other side, it is executed from the UI, then we will be processing the Stopped event twice, which in - both cases will reset the menu item to its default state. - */ - - let event = { - type: 'Secondary Action Already Executed' - } - stop(callBackFunction, event) - } - - function setupErrorEventListener(callBackFunction) { - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Error', undefined, key, onResponse, onError) - - function onResponse(message) { - eventSubscriptionIdOnError = message.eventSubscriptionId - } - - async function onError(message) { - - let uiObject = await getTargetUiObject(message) - uiObject.setErrorMessage(message.event.errorMessage, 10) - - let event = { - type: 'Secondary Action Already Executed' - } - completeStop(callBackFunction, event) - } - } - - function setupWarningEventListener() { - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Warning', undefined, key, onResponse, onWarning) - - function onResponse(message) { - eventSubscriptionIdOnWarning = message.eventSubscriptionId - } - - async function onWarning(message) { - let uiObject = await getTargetUiObject(message) - uiObject.setWarningMessage(message.event.warningMessage, 10) - } - } - - function setupInfoEventListener() { - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Info', undefined, key, onResponse, onInfo) - - function onResponse(message) { - eventSubscriptionIdOnInfo = message.eventSubscriptionId - } - - async function onInfo(message) { - let uiObject = await getTargetUiObject(message) - uiObject.setInfoMessage(message.event.infoMessage, 10) - } - } - } - - async function getTargetUiObject(message) { - let uiObject = thisObject - if (message.event.nodeId !== undefined) { - let targetNode = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeById(message.event.nodeId) - if (targetNode !== undefined) { - if (targetNode.payload !== undefined) { - if (targetNode.payload.uiObject !== undefined) { - uiObject = targetNode.payload.uiObject - } - } - } - } - return uiObject - } - - function stop(callBackFunction, event, requestFromUI) { - let wasStopped = false - /* We will wait for the event that the execution was terminated in order to call back the menu item */ - let key = thisObject.payload.node.name + '-' + thisObject.payload.node.type + '-' + thisObject.payload.node.id - eventsServerClient.listenToEvent(key, 'Stopped', undefined, 'UiObject', onResponse, onStopped) - - function onResponse(message) { - eventSubscriptionIdOnStopped = message.eventSubscriptionId - } - - function onStopped() { - completeStop(callBackFunction, event) - wasStopped = true - } - - /* - When the request comes from the UI, we need to consider the possibility that the backend is down or it - was restarted while this node was running. - */ - if (requestFromUI === true) { - /* - It can happen that the backend is down, the task is down, session is down of for whatever reason there is no - answer to the command to stop. In those cases, we will stop execute the onStopped funcion anyways so as to - return the UI to its default state. - */ - setTimeout(returnToDefaultState, 90000) - function returnToDefaultState() { - if (wasStopped === false) { - completeStop(callBackFunction, event) - } - } - } - } - - function completeStop(callBackFunction, event) { - if (thisObject.payload === undefined) { return } - if (callBackFunction !== undefined) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, event) - } - - if (thisObject.circularProgressBar !== undefined) { - thisObject.circularProgressBar.finalize() - thisObject.circularProgressBar = undefined - } - thisObject.isRunning = false - hasValue = false - hasPercentage = false - hasStatus = false - lastHeartBeat = undefined - - finalizeEventsServerClient() - } - - function iconPhysics() { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.project, thisObject.payload.node.type) - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition.alternativeIcons !== undefined) { - let nodeToUse = thisObject.payload.node - if (nodeDefinition.alternativeIcons === 'Use Reference Parent') { - if (thisObject.payload.node.payload.referenceParent !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent - } - } - if (nodeDefinition.alternativeIcons === 'Use Reference Grandparent') { - if (thisObject.payload.node.payload.referenceParent !== undefined) { - if (thisObject.payload.node.payload.referenceParent.payload !== undefined) { - if (thisObject.payload.node.payload.referenceParent.payload.referenceParent !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent.payload.referenceParent - } - } - } - } - nodeDefinition = getNodeDefinition(nodeToUse) - let config = nodeToUse.config - try { - config = JSON.parse(config) - let alternativeIcon - let iconName - for (let i = 0; i < nodeDefinition.alternativeIcons.length; i++) { - alternativeIcon = nodeDefinition.alternativeIcons[i] - if (alternativeIcon.codeName === config.codeName) { - iconName = alternativeIcon.iconName - } - } - let newIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', iconName) - if (newIcon !== undefined) { - icon = newIcon - } - } catch (err) { - // Nothing to do if JSON is baddly formated. - } - } - - executingIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', 'bitcoin') - } - - function onFocus() { - thisObject.isOnFocus = true - - if (thisObject.payload !== undefined && thisObject.isOnFocus === true && thisObject.payload.referenceParent !== undefined) { - if (thisObject.payload.referenceParent.payload !== undefined) { - if (thisObject.payload.referenceParent.payload.uiObject !== undefined) { - thisObject.payload.referenceParent.payload.uiObject.isShowing = true - } - } - } - } - - function onNotFocus() { - thisObject.isOnFocus = false - if (thisObject.codeEditor !== undefined) { - thisObject.codeEditor.deactivate() - } - if (thisObject.configEditor !== undefined) { - thisObject.configEditor.deactivate() - } - if (thisObject.conditionEditor !== undefined) { - thisObject.conditionEditor.deactivate() - } - if (thisObject.formulaEditor !== undefined) { - thisObject.formulaEditor.deactivate() - } - - if (thisObject.payload !== undefined && - thisObject.isOnFocus === false && - thisObject.payload.referenceParent !== undefined && - thisObject.payload.referenceParent.payload !== undefined && - thisObject.payload.referenceParent.payload.uiObject !== undefined) { - thisObject.payload.referenceParent.payload.uiObject.isShowing = false - } - } - - function onDisplace(event) { - thisObject.uiObjectTitle.exitEditMode() - } - - function onDragStarted(event) { - thisObject.uiObjectTitle.exitEditMode() - if (thisObject.codeEditor !== undefined) { - thisObject.codeEditor.deactivate() - } - if (thisObject.configEditor !== undefined) { - thisObject.configEditor.deactivate() - } - if (thisObject.conditionEditor !== undefined) { - thisObject.conditionEditor.deactivate() - } - if (thisObject.formulaEditor !== undefined) { - thisObject.formulaEditor.deactivate() - } - isDragging = true - if (event.button === 2) { - rightDragging = true - } else { - rightDragging = false - } - - previousDistanceToReferenceParent = undefined - previousDistanceToChainParent = undefined - } - - function onDragFinished(event) { - if (isChainAttaching === true) { - UI.projects.superalgos.spaces.designSpace.workspace.executeAction({ node: thisObject.payload.node, name: 'Parent Attach', project: 'Superalgos', relatedNode: chainAttachToNode }) - chainAttachToNode = undefined - isChainAttaching = false - } - if (isReferenceAttaching === true) { - UI.projects.superalgos.spaces.designSpace.workspace.executeAction({ node: thisObject.payload.node, name: 'Reference Attach', project: 'Superalgos', relatedNode: referenceAttachToNode }) - referenceAttachToNode = undefined - isReferenceAttaching = false - } - isDragging = false - } - - function drawBackground() { - if (thisObject.isOnFocus === false) { - drawReferenceLine() - drawChainLine() - - if (isDragging === false && thisObject.isOnFocus === true) { - thisObject.menu.drawBackground() - } - } - - if (thisObject.circularProgressBar !== undefined) { - thisObject.circularProgressBar.drawBackground() - } - } - - function drawMiddleground() { - if (thisObject.isOnFocus === false) { - drawErrorMessage() - drawWarningMessage() - drawInfoMessage() - drawValue() - drawPercentage() - drawStatus() - thisObject.uiObjectTitle.draw() - drawNodeType() - } - } - - function drawForeground() { - if (thisObject.isOnFocus === false) { - drawBodyAndPicture() - if (isDragging === false) { - thisObject.menu.drawForeground() - } - } - - if (thisObject.circularProgressBar !== undefined) { - thisObject.circularProgressBar.drawForeground() - } - } - - function drawOnFocus() { - if (thisObject.isOnFocus === true) { - drawReferenceLine() - drawChainLine() - - if (thisObject.codeEditor !== undefined) { - thisObject.codeEditor.drawBackground() - thisObject.codeEditor.drawForeground() - } - if (thisObject.configEditor !== undefined) { - thisObject.configEditor.drawBackground() - thisObject.configEditor.drawForeground() - } - if (thisObject.conditionEditor !== undefined) { - thisObject.conditionEditor.drawBackground() - thisObject.conditionEditor.drawForeground() - } - if (thisObject.formulaEditor !== undefined) { - thisObject.formulaEditor.drawBackground() - thisObject.formulaEditor.drawForeground() - } - - let drawMenu = true - let drawTitle = true - - if (thisObject.codeEditor !== undefined) { - if (thisObject.codeEditor.visible === true) { - drawMenu = false - drawTitle = false - } - } - if (thisObject.configEditor !== undefined) { - if (thisObject.configEditor.visible === true) { - drawMenu = false - drawTitle = false - } - } - if (thisObject.conditionEditor !== undefined) { - if (thisObject.conditionEditor.visible === true) { - drawMenu = false - drawTitle = false - } - } - if (thisObject.formulaEditor !== undefined) { - if (thisObject.formulaEditor.visible === true) { - drawMenu = false - drawTitle = false - } - } - - if (drawMenu === true) { - drawBodyAndPicture() - if (isDragging === false) { - thisObject.menu.drawBackground() - thisObject.menu.drawForeground() - } - } - - drawErrorMessage() - drawWarningMessage() - drawInfoMessage() - drawValue() - drawPercentage() - drawStatus() - drawNodeType() - - if (drawTitle === true) { - thisObject.uiObjectTitle.draw() - } - } - } - - function drawChainLine() { - if (UI.projects.superalgos.spaces.floatingSpace.drawChainLines === false) { return } - if (thisObject.payload.chainParent === undefined) { return } - if (thisObject.payload.chainParent.payload === undefined) { return } - - let targetPoint = { - x: thisObject.payload.chainParent.payload.floatingObject.container.frame.position.x, - y: thisObject.payload.chainParent.payload.floatingObject.container.frame.position.y - } - - let position = { - x: 0, - y: 0 - } - - targetPoint = UI.projects.superalgos.spaces.floatingSpace.container.frame.frameThisPoint(targetPoint) - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - targetPoint = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(targetPoint) - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - if (thisObject.payload.floatingObject.container.frame.radius > 1) { - let LINE_STYLE = UI_COLOR.TITANIUM_YELLOW - if (thisObject.payload.floatingObject.angleToParent !== ANGLE_TO_PARENT.NOT_FIXED) { - LINE_STYLE = UI_COLOR.GOLDEN_ORANGE - } - if (thisObject.payload.floatingObject.isFrozen === true) { - LINE_STYLE = UI_COLOR.TURQUOISE - } - if (newUiObjectCounter > 0) { - LINE_STYLE = UI_COLOR.GREY - } - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(position.x, position.y) - browserCanvasContext.lineTo(targetPoint.x, targetPoint.y) - browserCanvasContext.strokeStyle = 'rgba(' + LINE_STYLE + ', 1)' - browserCanvasContext.setLineDash([0, chainLineCounter, 2, 3, 0, 500 - chainLineCounter]) - browserCanvasContext.lineWidth = 2 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(position.x, position.y) - browserCanvasContext.lineTo(targetPoint.x, targetPoint.y) - browserCanvasContext.strokeStyle = 'rgba(' + LINE_STYLE + ', 1)' - browserCanvasContext.setLineDash([3, 47]) - browserCanvasContext.lineWidth = 3 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(position.x, position.y) - browserCanvasContext.lineTo(targetPoint.x, targetPoint.y) - browserCanvasContext.strokeStyle = 'rgba(' + LINE_STYLE + ', 1)' - browserCanvasContext.setLineDash([1, 9]) - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - } - - if (thisObject.payload.floatingObject.container.frame.radius > 0.5) { - let radius = 1 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(targetPoint.x, targetPoint.y, radius, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fill() - } - } - - function drawReferenceLine() { - if (UI.projects.superalgos.spaces.floatingSpace.drawReferenceLines === false && thisObject.isOnFocus === false) { return } - if (thisObject.payload.referenceParent === undefined) { return } - if (thisObject.payload.referenceParent.payload === undefined) { return } - if (thisObject.payload.referenceParent.payload.floatingObject === undefined) { return } - if (thisObject.payload.referenceParent.payload.floatingObject.isParentCollapsed === true && thisObject.isOnFocus === false) { return } - - let targetPoint = { - x: thisObject.payload.referenceParent.payload.position.x, - y: thisObject.payload.referenceParent.payload.position.y - } - - let position = { - x: 0, - y: 0 - } - - targetPoint = UI.projects.superalgos.spaces.floatingSpace.container.frame.frameThisPoint(targetPoint) - position = thisObject.container.frame.frameThisPoint(position) - - if (thisObject.isOnFocus === true) { - targetPoint = thisObject.fitFunction(targetPoint) - } - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - targetPoint = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(targetPoint) - } - - let LINE_STYLE = UI_COLOR.GREY - - if (thisObject.payload.floatingObject.container.frame.radius > 1) { - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(position.x, position.y) - browserCanvasContext.lineTo(targetPoint.x, targetPoint.y) - browserCanvasContext.strokeStyle = 'rgba(' + LINE_STYLE + ', 1)' - browserCanvasContext.setLineDash([1, 9]) - browserCanvasContext.lineWidth = 0.75 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(position.x, position.y) - browserCanvasContext.lineTo(targetPoint.x, targetPoint.y) - browserCanvasContext.strokeStyle = 'rgba(' + LINE_STYLE + ', 1)' - browserCanvasContext.setLineDash([0, referenceLineCounter, 1, 9, 2, 8, 3, 7, 4, 6, 0, 500 - referenceLineCounter]) - browserCanvasContext.lineWidth = 4 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - } - - if (thisObject.payload.floatingObject.container.frame.radius > 0.5) { - let radius = 1 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(targetPoint.x, targetPoint.y, radius, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fill() - } - } - - function isEditorVisible() { - if (thisObject.codeEditor !== undefined) { - if (thisObject.codeEditor.visible === true) { return true } - } - - if (thisObject.configEditor !== undefined) { - if (thisObject.configEditor.visible === true) { return true } - } - - if (thisObject.conditionEditor !== undefined) { - if (thisObject.conditionEditor.visible === true) { return true } - } - - if (thisObject.formulaEditor !== undefined) { - if (thisObject.formulaEditor.visible === true) { return true } - } - } - - function drawNodeType() { - if (isEditorVisible() === true) { return } - /* Text Follows */ - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - /* Label Text */ - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6) { - const MAX_LABEL_LENGTH = 30 - - label = thisObject.payload.subTitle - label = addIndexNumber(label) - - if (label !== undefined) { - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.isHierarchyHead !== true && nodeDefinition.isProjectHead !== true) { - return - } - } - if (label.length > MAX_LABEL_LENGTH) { - label = label.substring(0, MAX_LABEL_LENGTH) + '...' - } - } - - - - if (thisObject.isOnFocus === true) { - if (label.length > MAX_LABEL_LENGTH) { - label = label.substring(0, MAX_LABEL_LENGTH) + '...' - } - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + radius * 2 / 3 + lineSeparator * 1 + 30 - } - } else { - /* Split the line into Phrases */ - let phrases = splitTextIntoPhrases(label, 2) - - for (let i = 0; i < phrases.length; i++) { - let phrase = phrases[i] - labelPoint = { - x: position.x - getTextWidth(phrase) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * (1 + i) - } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === false) { - printMessage(phrase) - } - } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === false) { - return - } - } - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - labelPoint.x = position.x - getTextWidth(label) / 2, - labelPoint.y = position.y + 50 / 2 + lineSeparator * 2 - } - printMessage(label) - - function printMessage(text) { - browserCanvasContext.fillStyle = thisObject.payload.floatingObject.nameStrokeStyle - browserCanvasContext.fillText(text, labelPoint.x, labelPoint.y) - } - } - } - } - - function drawErrorMessage() { - if (thisObject.hasError === false) { return } - drawMessage(errorMessage, UI_COLOR.RUSTED_RED) - } - - function drawWarningMessage() { - if (thisObject.hasError === true) { return } - if (thisObject.hasWarning !== true) { return } - drawMessage(warningMessage, UI_COLOR.TITANIUM_YELLOW) - } - - function drawInfoMessage() { - if (thisObject.hasError === true) { return } - if (thisObject.hasWarning === true) { return } - if (thisObject.hasInfo !== true) { return } - drawMessage(infoMessage, UI_COLOR.TURQUOISE) - } - - function drawMessage(message, textColor) { - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - return - } - if (thisObject.codeEditor !== undefined && thisObject.codeEditor.visible === true) { return } - if (thisObject.formulaEditor !== undefined && thisObject.formulaEditor.visible === true) { return } - if (thisObject.confitionEditor !== undefined && thisObject.confitionEditor.visible === true) { return } - if (thisObject.configEditor !== undefined && thisObject.configEditor.visible === true) { return } - - /* Text Follows */ - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - /* Label Text */ - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize * 3 / 4 - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6) { - const IDEAL_LABEL_LENGTH = 80 - - label = message - - if (label !== undefined && label !== null) { - if (label.length > IDEAL_LABEL_LENGTH) { - if (label.length > IDEAL_LABEL_LENGTH * 3) { - label = label.substring(0, IDEAL_LABEL_LENGTH * 3) + '...' - } - fontSize = thisObject.payload.floatingObject.currentFontSize * 2 / 4 - } - - if (thisObject.isOnFocus === true) { - /* Split the line into Phrases */ - let phrases = splitTextIntoPhrases(label, 5) - - for (let i = 0; i < phrases.length; i++) { - let phrase = phrases[i] - labelPoint = { - x: position.x - getTextWidth(phrase) / 2, - y: position.y + lineSeparator * (6 - phrases.length + 1 + i) + 30 - } - printMessage(phrase) - } - } else { - if (label.length < 50) { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 6 - } - printMessage(label) - } - } - - function printMessage(text) { - browserCanvasContext.fillStyle = 'rgba(' + textColor + ', 1)' - browserCanvasContext.fillText(text, labelPoint.x, labelPoint.y) - } - } - } - } - - function drawValue() { - if (currentValue === null) { return } - if (hasValue === false) { return } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - if (thisObject.payload === undefined) { return } - if ((thisObject.payload.floatingObject.isCollapsed === true && thisObject.payload.floatingObject.collapsedManually === false) || thisObject.payload.floatingObject.isParentCollapsed === true) { return } - - // if (currentValue === undefined || currentValue === '') { return } - - /* Text Follows */ - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - /* Label Text */ - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6) { - const MAX_LABEL_LENGTH = 65 - - label = currentValue - if (!isNaN(currentValue)) { - if (currentValue.toFixed !== undefined) { - label = dynamicDecimals(currentValue, valueMinDecimals) - } - } - - if (label !== undefined) { - if (label.length > MAX_LABEL_LENGTH) { - label = label.substring(0, MAX_LABEL_LENGTH) + '...' - } - - if (label.length > 30) { - fontSize = fontSize * 2 / 3 - } - - if (thisObject.valueAtAngle === true && thisObject.payload.angle !== undefined) { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y - } - labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle)) - labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle)) - } else { - if (thisObject.isOnFocus === true) { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + radius * 2 / 3 + lineSeparator * 4 + 30 - } - } else { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 4 - } - } - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } - - function drawPercentage() { - if (hasPercentage === false) { return } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - if (thisObject.payload === undefined) { return } - if ((thisObject.payload.floatingObject.isCollapsed === true && thisObject.payload.floatingObject.collapsedManually === false) || thisObject.payload.floatingObject.isParentCollapsed === true) { return } - - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - /* Label Text */ - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6) { - const MAX_LABEL_LENGTH = 65 - - label = Number(currentPercentage).toFixed(0) + '%' - - if (label.length > MAX_LABEL_LENGTH) { - label = label.substring(0, MAX_LABEL_LENGTH) + '...' - } - - if (thisObject.isOnFocus === true) { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + radius * 2 / 3 + lineSeparator * 5 + 30 - } - } else { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 5 - } - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - - } - } - - function drawStatus() { - if (hasStatus === false) { return } - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { return } - - let position = { - x: 0, - y: 0 - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - /* Label Text */ - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize * 6 / 4 / 2 - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6) { - const MAX_LABEL_LENGTH = 100 - - label = currentStatus - - if (label !== undefined) { - if (label.length > MAX_LABEL_LENGTH) { - label = label.substring(0, MAX_LABEL_LENGTH) + '...' - } - - if (thisObject.isOnFocus === true) { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + radius * 2 / 3 + lineSeparator * 3 + 30 - } - } else { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 3 - } - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } - } - - function addIndexNumber(label) { - switch (thisObject.payload.node.type) { - case 'Phase': { - let parent = thisObject.payload.parentNode - if (parent !== undefined) { - let granParent = parent.payload.parentNode - if (granParent !== undefined) { - if (granParent.type === 'Initial Definition') { - return label + ' #' + 0 - } - } - for (let i = 0; i < parent.phases.length; i++) { - let phase = parent.phases[i] - if (phase.id === thisObject.payload.node.id) { - label = label + ' #' + (i + 1) - return label - } - } - } else { - return label - } - - break - } - case 'Situation': { - let parent = thisObject.payload.parentNode - if (parent !== undefined) { - for (let i = 0; i < parent.situations.length; i++) { - let situation = parent.situations[i] - if (situation.id === thisObject.payload.node.id) { - label = label + ' #' + (i + 1) - return label - } - } - } else { - return label - } - - break - } - case 'Condition': { - let parent = thisObject.payload.parentNode - if (parent !== undefined) { - for (let i = 0; i < parent.conditions.length; i++) { - let condition = parent.conditions[i] - if (condition.id === thisObject.payload.node.id) { - label = label + ' #' + (i + 1) - return label - } - } - } else { - return label - } - - break - } - default: { - return label - } - } - } - - function drawBodyAndPicture() { - let position = { - x: thisObject.container.frame.position.x, - y: thisObject.container.frame.position.y - } - - position = thisObject.container.frame.frameThisPoint(position) - - if (thisObject.isShowing === true) { - position = thisObject.fitFunction(position) - } - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - position = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(position) - } - - let radius = thisObject.payload.floatingObject.container.frame.radius - - if (radius > 0.5) { - let VISIBLE_RADIUS = 5 - - let visiblePosition = { - x: thisObject.container.frame.position.x, - y: thisObject.container.frame.position.y - } - - visiblePosition = thisObject.container.frame.frameThisPoint(visiblePosition) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - visiblePosition = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(visiblePosition) - radius = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(radius) - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } else { - visiblePosition = thisObject.fitFunction(visiblePosition) - } - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - - browserCanvasContext.fillStyle = thisObject.payload.floatingObject.fillStyle - - browserCanvasContext.fill() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS - 2, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.superalgos.spaces.floatingSpace.style.backgroundColor + ', 1)' - - browserCanvasContext.fill() - - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition === undefined) { - console.log('Node ' + thisObject.payload.node + ' without Node Definition at APP SCHEMA.') - return - } - - if (thisObject.isOnFocus === true) { - /* Black Translucent Background when node is in focus */ - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI.projects.superalgos.spaces.floatingSpace.style.backgroundColor + ', 0.70)' - browserCanvasContext.fill() - /* Border when node is in focus */ - if ( - thisObject.hasError !== true && - thisObject.WarningError !== true && - thisObject.hasInfo !== true && - nodeDefinition.isHierarchyHead !== true && - thisObject.circularProgressBar === undefined - ) { - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')' - browserCanvasContext.lineWidth = 3 - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS - 1, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + 1 + ')' - browserCanvasContext.lineWidth = 2 - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke() - - } - } - - /* Hierarchy Head Ring */ - if (nodeDefinition.isHierarchyHead === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } - let OPACITY = 0.5 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([1, 10]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 1 - if (thisObject.payload.node.isPlugin === true) { - browserCanvasContext.setLineDash([0, 0]) - } else { - browserCanvasContext.setLineDash([10, 20]) - } - browserCanvasContext.stroke() - } - - /* Project Head Ring */ - if (nodeDefinition.isProjectHead === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } - let OPACITY = 0.5 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - - if (thisObject.payload.floatingObject.isOnFocus === true) { - browserCanvasContext.lineWidth = 30 - browserCanvasContext.setLineDash([0, 0]) - } else { - browserCanvasContext.lineWidth = 30 - browserCanvasContext.setLineDash([1, 3]) - - } - browserCanvasContext.stroke() - } - - /* Info Ring */ - if (thisObject.hasInfo === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } - let OPACITY = infoMessageCounter / 30 - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK_TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([2 + infoRingAnimation, 14 - infoRingAnimation]) - browserCanvasContext.stroke() - } - - /* Warning Ring */ - if (thisObject.hasWarning === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } - let OPACITY = warningMessageCounter / 30 - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([2 + warningRingAnimation, 14 - warningRingAnimation]) - browserCanvasContext.stroke() - } - - /* Error Ring */ - if (thisObject.hasError === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - VISIBLE_RADIUS = UI.projects.superalgos.spaces.floatingSpace.transformRadiusToMap(VISIBLE_RADIUS) - } - let OPACITY = errorMessageCounter / 30 - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([2 + errorRingAnimation, 14 - errorRingAnimation]) - browserCanvasContext.stroke() - } - - if (isHighlighted === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius - let OPACITY = highlightCounter / 10 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([4, 20]) - browserCanvasContext.stroke() - } - - if (isReadyToChainAttach === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius * 2.5 + readyToChainAttachDisplayCounter - readyToChainAttachDisplayCounter / 2 - let OPACITY = readyToChainAttachCounter / 10 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([10, 90]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([5, 45]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.setLineDash([2, 8]) - browserCanvasContext.stroke() - } - - if (isAvailableToChainAttach === true && isReadyToChainAttach === false) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius * 2.5 - let OPACITY = availableToChainAttachCounter / 10 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([8, 32]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 2 - browserCanvasContext.setLineDash([3, 5]) - browserCanvasContext.stroke() - } - - if (isReadyToReferenceAttach === true) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius * 2.5 + readyToReferenceAttachDisplayCounter - readyToReferenceAttachDisplayCounter / 2 - let OPACITY = readyToReferenceAttachCounter / 10 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([10, 90]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([5, 45]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.setLineDash([2, 8]) - browserCanvasContext.stroke() - } - - if (isAvailableToReferenceAttach === true && isReadyToReferenceAttach === false) { - VISIBLE_RADIUS = thisObject.payload.floatingObject.container.frame.radius * 2.5 - let OPACITY = availableToReferenceAttachCounter / 10 - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([8, 32]) - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 2 - browserCanvasContext.setLineDash([3, 5]) - browserCanvasContext.stroke() - } - } - - /* Image */ - - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - let additionalImageSize = 0 - if (isRunningAtBackend === true || isReadyToReferenceAttach === true || isReadyToChainAttach === true) { additionalImageSize = 20 } - let totalImageSize = additionalImageSize + thisObject.payload.floatingObject.currentImageSize - - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition === undefined) { return } - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - if (nodeDefinition.isHierarchyHead === true || nodeDefinition.isProjectHead === true) { - totalImageSize = 50 - } else { - totalImageSize = 25 - totalImageSize = UI.projects.superalgos.spaces.floatingSpace.transformImagesizeToMap(totalImageSize) - } - } - - if (thisObject.isShowing === true) { - totalImageSize = 50 - } - - browserCanvasContext.drawImage( - icon, position.x - totalImageSize / 2, - position.y - totalImageSize / 2, - totalImageSize, - totalImageSize) - } - } - - if (executingIcon !== undefined) { - if (executingIcon.canDrawIcon === true) { - if (isRunningAtBackend === true) { - const DISTANCE_FROM_CENTER = thisObject.payload.floatingObject.container.frame.radius / 3 + 50 - const EXECUTING_ICON_SIZE = 20 + thisObject.payload.floatingObject.container.frame.radius / 6 - - browserCanvasContext.drawImage( - executingIcon, position.x - EXECUTING_ICON_SIZE / 2, - position.y - EXECUTING_ICON_SIZE / 2 - DISTANCE_FROM_CENTER, - EXECUTING_ICON_SIZE, - EXECUTING_ICON_SIZE) - } - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectConstructor.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectConstructor.js deleted file mode 100644 index 914e93cce..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectConstructor.js +++ /dev/null @@ -1,642 +0,0 @@ - -function newUiObjectConstructor() { - const MODULE_NAME = 'UI Object Constructor' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - createUiObject: createUiObject, - destroyUiObject: destroyUiObject, - initialize: initialize, - finalize: finalize - } - - let floatingLayer - - return thisObject - - function finalize() { - floatingLayer = undefined - } - - function initialize(pFloatingLayer) { - floatingLayer = pFloatingLayer - } - - function createUiObject(userAddingNew, payload) { - let floatingObject = newFloatingObject() - floatingObject.fitFunction = UI.projects.superalgos.spaces.floatingSpace.fitIntoVisibleArea - floatingObject.container.connectToParent(UI.projects.superalgos.spaces.floatingSpace.container, false, false, false, false, false, false, false, false) - floatingObject.initialize('UI Object', payload) - payload.floatingObject = floatingObject - - /* - When this object is created based on a backup, share or clone, we will have a savedPayload that we will use to set the initial properties. - If it is a new object being created out of the user interface, we jusst continue with the construction process. - */ - if (userAddingNew === false && payload.node.type !== 'Workspace') { - let position = { - x: 0, - y: 0 - } - - position = { - x: payload.node.savedPayload.position.x, - y: payload.node.savedPayload.position.y - } - - floatingObject.setPosition(position) - payload.node.savedPayload.position = undefined - if (payload.node.savedPayload.floatingObject.isPinned === true) { - floatingObject.pinToggle() - } - if (payload.node.savedPayload.floatingObject.isFrozen === true) { - floatingObject.freezeToggle() - } - if (payload.node.savedPayload.floatingObject.isCollapsed === true) { - floatingObject.collapseToggle() - } - if (payload.node.savedPayload.floatingObject.angleToParent !== undefined) { - floatingObject.angleToParent = payload.node.savedPayload.floatingObject.angleToParent - } - if (payload.node.savedPayload.floatingObject.distanceToParent !== undefined) { - floatingObject.distanceToParent = payload.node.savedPayload.floatingObject.distanceToParent - } - if (payload.node.savedPayload.floatingObject.arrangementStyle !== undefined) { - floatingObject.arrangementStyle = payload.node.savedPayload.floatingObject.arrangementStyle - } - } - - /* - For brand new objects being created directly by the user, we will make them inherit some properties - from their closest siblings, and if they don't have, from their parents. - */ - - if (userAddingNew === true) { - let definition = getNodeDefinition(payload.parentNode) - if (definition.properties !== undefined) { - for (let i = 0; i < definition.properties.length; i++) { - let property = definition.properties[i] - if (property.childType === payload.node.type) { - if (property.type === 'array') { - let parentNode = payload.parentNode - let parentNodeArray = parentNode[property.name] - if (parentNodeArray.length > 1) { // the new node was already added - let closestSibling = parentNodeArray[parentNodeArray.length - 2] - if (closestSibling !== undefined) { - floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent - floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = closestSibling.payload.floatingObject.arrangementStyle - break - } - } - } - if (floatingObject.angleToParent === undefined) { - for (let j = i - 1; j >= 0; j--) { - let siblingProperty = definition.properties[j] - let parentNode = payload.parentNode - let parentNodeProperty = parentNode[siblingProperty.name] - if (parentNodeProperty !== undefined) { - if (siblingProperty.type === 'array') { - if (parentNodeProperty.length > 0) { - let closestSibling = parentNodeProperty[parentNodeProperty.length - 1] - if (closestSibling !== undefined) { - floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent - floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = closestSibling.payload.floatingObject.arrangementStyle - break - } - } - } else { - let closestSibling = parentNodeProperty - if (closestSibling !== undefined) { - floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent - floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = closestSibling.payload.floatingObject.arrangementStyle - break - } - } - } - } - for (let j = i + 1; j < definition.properties.length; j++) { - let siblingProperty = definition.properties[j] - let parentNode = payload.parentNode - let parentNodeProperty = parentNode[siblingProperty.name] - if (parentNodeProperty !== undefined) { - if (siblingProperty.type === 'array') { - if (parentNodeProperty.length > 0) { - let closestSibling = parentNodeProperty[parentNodeProperty.length - 1] - if (closestSibling !== undefined) { - floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent - floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = closestSibling.payload.floatingObject.arrangementStyle - break - } - } - } else { - let closestSibling = parentNodeProperty - if (closestSibling !== undefined) { - floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent - floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = closestSibling.payload.floatingObject.arrangementStyle - break - } - } - } - } - } - } - } - } - - if (floatingObject.angleToParent === undefined) { - floatingObject.angleToParent = payload.parentNode.payload.floatingObject.angleToParent - floatingObject.distanceToParent = payload.parentNode.payload.floatingObject.distanceToParent - floatingObject.arrangementStyle = payload.parentNode.payload.floatingObject.arrangementStyle - } - } - - /* Default Values in case there was no way to set a value previous to this. */ - if (floatingObject.angleToParent === undefined) { - floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_360 - } - if (floatingObject.distanceToParent === undefined) { - floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X - } - if (floatingObject.arrangementStyle === undefined) { - floatingObject.arrangementStyle = ARRANGEMENT_STYLE.CONCAVE - } - - let uiObject = newUiObject() - payload.uiObject = uiObject - uiObject.fitFunction = UI.projects.superalgos.spaces.floatingSpace.fitIntoVisibleArea - uiObject.isVisibleFunction = UI.projects.superalgos.spaces.floatingSpace.isThisPointVisible - let menuItemsInitialValues = getMenuItemsInitialValues(uiObject, floatingObject, payload) - - let schemaNode = getNodeDefinition(payload.node) - if (schemaNode === undefined) { - console.log(payload.node.type + ' node found at App Schema. This node will not be created. ') - return - } - let menuItems = schemaNode.menuItems - for (let j = 0; j < menuItems.length; j++) { - let item = menuItems[j] - item.angle = undefined - if (item.action !== undefined) { - if (item.action.indexOf('Add Missing Children') >= 0) { - item.action = 'Add Missing Children' - } - } - if (item.actionFunction === undefined) { - // item.actionFunction = 'payload.executeAction' - } - } - - uiObject.initialize(payload, menuItemsInitialValues) - uiObject.container.connectToParent(floatingObject.container, false, false, true, true, false, false, true, true, true, true, true) - - setFloatingObjectBasicProperties(floatingObject, payload) - - if (payload.node.savedPayload !== undefined) { - if (payload.node.savedPayload.uiObject !== undefined) { - payload.uiObject.shortcutKey = payload.node.savedPayload.uiObject.shortcutKey - } - } - - floatingLayer.addFloatingObject(floatingObject) - - return - } - - function addLeftIcons(menuItemsInitialValues, floatingObject, isPersonalData) { - menuItemsInitialValues.push( - { - action: 'Pin / Unpin', - actionFunction: floatingObject.pinToggle, - actionStatus: floatingObject.getPinStatus, - currentStatus: false, - label: undefined, - visible: true, - iconPathOn: 'pinned', - iconPathOff: 'unpinned', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Change Tension Level', - actionFunction: floatingObject.angleToParentToggle, - actionStatus: floatingObject.getAngleToParent, - currentStatus: true, - label: undefined, - visible: true, - icons: ['angle-to-parent-000', 'angle-to-parent-360', 'angle-to-parent-180', 'angle-to-parent-090', 'angle-to-parent-045'], - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Change Distance to Paarent', - actionFunction: floatingObject.distanceToParentToggle, - actionStatus: floatingObject.getDistanceToParent, - currentStatus: true, - label: undefined, - visible: true, - icons: ['distance-to-parent-000', 'distance-to-parent-025', 'distance-to-parent-050', 'distance-to-parent-100', 'distance-to-parent-150', 'distance-to-parent-200'], - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Change Arrangement Style', - actionFunction: floatingObject.arrangementStyleToggle, - actionStatus: floatingObject.getArrangementStyle, - currentStatus: true, - label: undefined, - visible: true, - icons: ['arrangement-concave', 'arrangement-convex', 'arrangement-vertical-right', 'arrangement-vertical-left', 'arrangement-horizontal-bottom', 'arrangement-horizontal-top'], - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Freeze / Unfreeze', - actionFunction: floatingObject.freezeToggle, - actionStatus: floatingObject.getFreezeStatus, - currentStatus: true, - label: undefined, - visible: true, - iconPathOn: 'unfreeze', - iconPathOff: 'freeze', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Collapse / Uncollapse', - actionFunction: floatingObject.collapseToggle, - actionStatus: floatingObject.getCollapseStatus, - currentStatus: false, - label: undefined, - visible: true, - iconPathOn: 'expand', - iconPathOff: 'collapse', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 1 - } - ) - menuItemsInitialValues.push( - { - action: 'Backup', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'backup', - iconPathOff: 'backup', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 2 - } - ) - menuItemsInitialValues.push( - { - action: 'Clone', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'clone', - iconPathOff: 'clone', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 2 - } - ) - if (isPersonalData !== true) { - menuItemsInitialValues.push( - { - action: 'Share', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'share', - iconPathOff: 'share', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 2 - } - ) - } - menuItemsInitialValues.push( - { - action: 'Parent Detach', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'detach', - iconPathOff: 'detach', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 3 - } - ) - menuItemsInitialValues.push( - { - action: 'Reference Detach', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'delink', - iconPathOff: 'delink', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 3 - } - ) - - menuItemsInitialValues.push( - { - action: 'Open Documentation', - actionFunction: floatingObject.payload.executeAction, - actionProject: 'Superalgos', - label: undefined, - visible: true, - iconPathOn: 'help', - iconPathOff: 'help', - rawRadius: 12, - targetRadius: 0, - currentRadius: 0, - ring: 4 - } - ) - } - - function getMenuItemsInitialValues(uiObject, floatingObject, payload) { - let menuItemsInitialValues = [] - - let nodeDefinition = getNodeDefinition(payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.editors !== undefined) { - if (nodeDefinition.editors.config === true) { - uiObject.configEditor = newConfigEditor() - uiObject.configEditor.isVisibleFunction = uiObject.isVisibleFunction - uiObject.configEditor.container.connectToParent(uiObject.container, false, false, true, true, false, false, false, false) - uiObject.configEditor.initialize() - } - if (nodeDefinition.editors.code === true) { - uiObject.codeEditor = newCodeEditor() - uiObject.codeEditor.isVisibleFunction = uiObject.isVisibleFunction - uiObject.codeEditor.container.connectToParent(uiObject.container, false, false, true, true, false, false, false, false) - uiObject.codeEditor.initialize() - } - if (nodeDefinition.editors.formula === true) { - uiObject.formulaEditor = newFormulaEditor() - uiObject.formulaEditor.isVisibleFunction = uiObject.isVisibleFunction - uiObject.formulaEditor.container.connectToParent(uiObject.container, false, false, true, true, false, false, false, false) - uiObject.formulaEditor.initialize() - } - if (nodeDefinition.editors.condition === true) { - uiObject.conditionEditor = newConditionEditor() - uiObject.conditionEditor.isVisibleFunction = uiObject.isVisibleFunction - uiObject.conditionEditor.container.connectToParent(uiObject.container, false, false, false, true, false, false, false, false) - uiObject.conditionEditor.initialize() - } - } - if (nodeDefinition.addLeftIcons === true) { - addLeftIcons(menuItemsInitialValues, floatingObject, nodeDefinition.isPersonalData) - } - if (nodeDefinition.isPinned === true) { - floatingObject.isPinned = true - } - if (nodeDefinition.positionLocked === true) { - floatingObject.positionLocked = true - } - - for (let i = 0; i < nodeDefinition.menuItems.length; i++) { - let menutItemDefinition = nodeDefinition.menuItems[i] - let newMenuItem = JSON.parse(JSON.stringify(menutItemDefinition)) - - /* We need to reference the real function based on its name */ - if (menutItemDefinition.actionFunction !== undefined) { - try { - newMenuItem.actionFunction = eval(menutItemDefinition.actionFunction) - } catch (err) { - console.log('Error at Menu Item Action Function: ' + menutItemDefinition.actionFunction + ' ' + err.stack) - continue - } - } - - /* Adding default values */ - if (newMenuItem.visible === undefined) { - newMenuItem.visible = true - } - - if (newMenuItem.rawRadius === undefined) { - newMenuItem.rawRadius = 12 - } - - if (newMenuItem.targetRadius === undefined) { - newMenuItem.targetRadius = 0 - } - - if (newMenuItem.currentRadius === undefined) { - newMenuItem.currentRadius = 0 - } - - if (newMenuItem.actionProject === undefined) { - newMenuItem.actionProject = 'Superalgos' - } - - menuItemsInitialValues.push(newMenuItem) - } - } else { - if (ERROR_LOG === true) { logger.write('[ERROR] getMenuItemsInitialValues -> UI Object Type not Recognized -> type = ' + payload.node.type) } - } - - return menuItemsInitialValues - } - - function setFloatingObjectBasicProperties(floatingObject, payload) { - const FRICTION = 0.95 - const INITIAL_FRICTION = 0.97 - const INITIAL_FONT_SIZE = 12 * 1.5 - const INITIAL_RADIOUS = 70 - const INITIAL_IMAGE_SIZE = 80 * 1.2 - - let nodeDefinition = getNodeDefinition(payload.node) - if (nodeDefinition === undefined) { - console.log('[WARN] Set up of the object ' + payload.node.name + ' of type ' + payload.node.type + ' can not be completed becasue its definition can not be found at the APP SCHEMA.') - return - } - - if (nodeDefinition.isProjectHead === true) { - level_0() - floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_360 - return - } - - switch (nodeDefinition.level) { - case 0: { - level_0() - break - } - case 1: { - level_1() - break - } - case 2: { - level_2() - break - } - case 3: { - level_3() - break - } - case 4: { - level_4() - break - } - case 5: { - level_5() - break - } - } - - function level_0() { - floatingObject.targetFriction = 0.93 - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(500) - floatingObject.initializeRadius(INITIAL_RADIOUS) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - } - function level_1() { - floatingObject.targetFriction = 0.94 - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(600) - floatingObject.initializeRadius(INITIAL_RADIOUS) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - - if (payload.node.savedPayload === undefined) { - // floatingObject.angleToParentToggle() - } - } - function level_2() { - floatingObject.targetFriction = FRICTION - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(300) - floatingObject.initializeRadius(INITIAL_RADIOUS - 1) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE - 10) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', 1)' - - if (payload.node.savedPayload === undefined) { - // floatingObject.angleToParentToggle() - } - } - function level_3() { - floatingObject.targetFriction = FRICTION - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(150) - floatingObject.initializeRadius(INITIAL_RADIOUS - 2) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE - 20) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 1)' - - if (payload.node.savedPayload === undefined) { - // floatingObject.angleToParentToggle() - } - } - function level_4() { - floatingObject.targetFriction = FRICTION - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(75) - floatingObject.initializeRadius(INITIAL_RADIOUS - 3) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE - 30) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)' - - if (payload.node.savedPayload === undefined) { - // floatingObject.angleToParentToggle() - } - } - function level_5() { - floatingObject.targetFriction = FRICTION - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(50) - floatingObject.initializeRadius(INITIAL_RADIOUS - 4) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE - 40) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.RED + ', 1)' - } - function level_6() { - floatingObject.targetFriction = FRICTION - floatingObject.friction = INITIAL_FRICTION - - floatingObject.initializeMass(25) - floatingObject.initializeRadius(INITIAL_RADIOUS - 5) - floatingObject.initializeImageSize(INITIAL_IMAGE_SIZE - 50) - floatingObject.initializeFontSize(INITIAL_FONT_SIZE) - - floatingObject.fillStyle = 'rgba(' + UI_COLOR.RED + ', 1)' - } - } - - function destroyUiObject(payload) { - if (payload === undefined) { return } - floatingLayer.removeFloatingObject(payload.floatingObject.handle) - - payload.floatingObject.finalize() - payload.floatingObject = undefined - - payload.uiObject.finalize() - payload.uiObject = undefined - - payload.referenceParent = undefined - payload.parent = undefined - payload.chainParent = undefined - payload.node.savedPayload = undefined - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectTitle.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectTitle.js deleted file mode 100644 index 31ddad641..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Floating-Space/UiObjectTitle.js +++ /dev/null @@ -1,397 +0,0 @@ - -function newUiObjectTitle() { - const MODULE_NAME = 'UI Object Title' - const ERROR_LOG = true - - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - fitFunction: undefined, - isVisibleFunction: undefined, - allwaysVisible: undefined, - editMode: undefined, - container: undefined, - payload: undefined, - isDefault: undefined, - enterEditMode: enterEditMode, - exitEditMode: exitEditMode, - physics: physics, - draw: draw, - getContainer: getContainer, - finalize: finalize, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.frame.radius = 0 - - let selfFocusEventSubscriptionId - let selfNotFocuskEventSubscriptionId - let selfMouseClickEventSubscriptionId - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(selfFocusEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfNotFocuskEventSubscriptionId) - thisObject.container.eventHandler.stopListening(selfMouseClickEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.payload = undefined - thisObject.isVisibleFunction = undefined - thisObject.fitFunction = undefined - } - - function initialize(payload) { - thisObject.payload = payload - - thisObject.allwaysVisible = false // Default value - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.isTitleAllwaysVisible === true) { - thisObject.allwaysVisible = true - } - } - - selfFocusEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onFocus', onFocus) - selfNotFocuskEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onNotFocus', onNotFocus) - selfMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - } - - function getContainer(point) { - if (AT_FULL_SCREEN_MODE === true) { return } // Fullscreen mode does not allow INPUT elements - - let container - - if (thisObject.editMode === true) { - if (point.x === VERY_LARGE_NUMBER) { - /* The the mouse leaves the canvas, and event of mouse over with a ridiculous coordinate is triggered so that - anyone can react. In our case, this object has an html input element that is not part of the canvas, so the event is - triggered. We compensate recognizing this coordinate and returning our container. */ - return thisObject.container - } - } - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - inheritancePhysics() - defaultPhysics() - } - - function defaultPhysics() { - if (thisObject.payload.title !== 'New ' + thisObject.payload.node.type && thisObject.payload.title !== 'My ' + thisObject.payload.node.type) { - thisObject.isDefault = false - } else { - thisObject.isDefault = true - } - } - - function inheritancePhysics() { - if (thisObject.payload.title === undefined) { return } - - /* It is possible to override the default title by setting the APP SCHEMA property 'title' */ - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition.title !== undefined) { - thisObject.payload.title = '' - thisObject.payload.node.name = '' - let separator = '' - for (let i = 0; i < nodeDefinition.title.length; i++) { - let titleReference = nodeDefinition.title[i] - switch (titleReference) { - case 'Use Parent': { - let nodeToUse = thisObject.payload.parentNode - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name - } - break - } - case 'Use Reference Parent': { - let nodeToUse = thisObject.payload.node.payload.referenceParent - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name - } - break - } - case 'Use Reference Parent Type': { - let nodeToUse = thisObject.payload.node.payload.referenceParent - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.type - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.type - } - break - } - case 'Use Reference Grandparent': { - let nodeToUse = thisObject.payload.node.payload.referenceParent - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent.payload.referenceParent - if (nodeToUse !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name - } - } - break - } - case 'Use Reference Parent Parent': { - let nodeToUse = thisObject.payload.node.payload.referenceParent - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent.payload.parentNode - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name - } - } - break - } - case 'Use Reference Parent Parent Parent': { - let nodeToUse = thisObject.payload.node.payload.referenceParent - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent.payload.parentNode - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - nodeToUse = thisObject.payload.node.payload.referenceParent.payload.parentNode.payload.parentNode - if (nodeToUse !== undefined && nodeToUse.payload !== undefined) { - thisObject.payload.title = thisObject.payload.title + separator + nodeToUse.payload.title - thisObject.payload.node.name = thisObject.payload.node.name + separator + nodeToUse.payload.node.name - } - } - } - break - } - default: { - if (titleReference.indexOf('Use Child @') === 0) { - let propertyName = titleReference.substring(titleReference.indexOf('@') + 1, titleReference.length) - let childNode = thisObject.payload.node[propertyName] - if (childNode === undefined) { break } - thisObject.payload.title = thisObject.payload.title + separator + childNode.name - thisObject.payload.node.name = thisObject.payload.node.name + separator + childNode.name - } - } - } - separator = ' ' - } - } - - /* The name becomes the title. */ - if (thisObject.payload.node.name !== undefined) { - thisObject.payload.title = thisObject.payload.node.name - } - - let title = trimTitle(thisObject.payload.title) - - /* Here we set the dimensions and position of this object */ - const FRAME_HEIGHT = 25 - const Y_OFFSET = -20 - const FRAME_WIDTH = (title.length + 2) / 2 * thisObject.payload.floatingObject.currentFontSize * FONT_ASPECT_RATIO * 1.2 * 2 - - if (thisObject.isOnFocus === true) { - thisObject.container.frame.position.x = 0 - FRAME_WIDTH / 2 - thisObject.container.frame.position.y = 0 - thisObject.container.frame.radius * 1 / 2 - thisObject.payload.floatingObject.currentFontSize * FONT_ASPECT_RATIO + Y_OFFSET - FRAME_HEIGHT - } else { - thisObject.container.frame.position.x = 0 - FRAME_WIDTH / 2 - thisObject.container.frame.position.y = 0 - thisObject.payload.floatingObject.currentImageSize / 2 - FRAME_HEIGHT - } - - thisObject.container.frame.width = FRAME_WIDTH - thisObject.container.frame.height = FRAME_HEIGHT - - if (thisObject.editMode === true) { - let inputPosition = { - x: 0, - y: 0 + CURRENT_TOP_MARGIN + Y_OFFSET - } - - inputPosition = thisObject.container.frame.frameThisPoint(inputPosition) - - if (inputPosition.y < CURRENT_TOP_MARGIN) { exitEditMode() } - - let inputDiv = document.getElementById('inputDiv') - inputDiv.style = 'position:absolute; top:' + inputPosition.y + 'px; left:' + inputPosition.x + 'px; z-index:1; ' - } - } - - function onFocus() { - thisObject.isOnFocus = true - } - - function onNotFocus() { - thisObject.isOnFocus = false - exitEditMode() - } - - function onMouseClick(event) { - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition.title !== undefined) { return } - - let checkPoint = { - x: 0, - y: 0 - } - checkPoint = thisObject.container.frame.frameThisPoint(checkPoint) - - if (thisObject.isVisibleFunction(checkPoint) === true) { - enterEditMode() - } - } - - function exitEditMode() { - if (thisObject.editMode === true) { - thisObject.editMode = false - let input = document.getElementById('input') - input.style.display = 'none' - if (input.value.length > 2) { - thisObject.payload.title = input.value - thisObject.payload.node.name = input.value - } - } - let inputDiv = document.getElementById('inputDiv') - inputDiv.style = 'position:absolute; top:' + '-100' + 'px; left:' + '-100' + 'px; z-index:1; ' - } - - function enterEditMode() { - const WIDTH = thisObject.container.frame.width - const HEIGHT = thisObject.container.frame.height - let fontSize = thisObject.payload.floatingObject.currentFontSize - - thisObject.editMode = true - let input = document.getElementById('input') - input.value = thisObject.payload.title - - let backgroundColor = '0, 0, 0' - if (thisObject.payload.uiObject.codeEditor !== undefined) { - if (thisObject.payload.uiObject.codeEditor.visible === true) { - backgroundColor = '204, 88, 53' - } - } - - input.style = 'resize: none; border: none; outline: none; box-shadow: none; overflow:hidden; font-family: Saira Condensed; font-size: ' + fontSize + 'px; background-color: rgb(' + backgroundColor + ');color:rgb(255, 255, 255); width: ' + WIDTH + 'px; height: ' + HEIGHT + 'px' - input.style.display = 'block' - input.focus() - } - - function draw() { - if (thisObject.isOnFocus === true || thisObject.allwaysVisible === true || thisObject.isDefault === false) { - if (thisObject.payload.uiObject.codeEditor !== undefined) { - if (thisObject.payload.uiObject.codeEditor.visible !== true) { - drawTitleBackground() - } - } else { - drawTitleBackground() - } - - drawText() - } - } - - function drawTitleBackground() { - if (thisObject.editMode !== true) { - let params = { - cornerRadius: 3, - lineWidth: 0.1, - container: thisObject.container, - borderColor: UI.projects.superalgos.spaces.floatingSpace.style.backgroundColor, - backgroundColor: UI.projects.superalgos.spaces.floatingSpace.style.backgroundColor, - castShadow: false, - opacity: 0.25 - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - } - } - - function drawText() { - if (thisObject.editMode !== true) { - let radius = thisObject.container.frame.radius - let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize - let label - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (radius > 6 && (thisObject.isOnFocus === true || thisObject.allwaysVisible === true || thisObject.isDefault === false)) { - browserCanvasContext.strokeStyle = thisObject.payload.floatingObject.typeStrokeStyle - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - label = thisObject.payload.title - - if (label !== undefined) { - label = trimTitle(label) - - labelPoint = { - x: 0, - y: thisObject.container.frame.height * 0.8 - } - - labelPoint = thisObject.container.frame.frameThisPoint(labelPoint) - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - labelPoint = UI.projects.superalgos.spaces.floatingSpace.transformPointToMap(labelPoint) - labelPoint.x = labelPoint.x - getTextWidth(label) / 2, - labelPoint.y = labelPoint.y - 35 - - let nodeDefinition = getNodeDefinition(thisObject.payload.node) - if (nodeDefinition !== undefined) { - if (nodeDefinition.isHierarchyHead !== true && nodeDefinition.isProjectHead !== true) { - return - } - } - - printMessage(label, labelPoint) - return - } - - if (thisObject.payload.uiObject.isOnFocus === true) { - printMessage(label, labelPoint) - return - } - - /* Split the line into Phrases */ - const FRAME_WIDTH = (label.length + 2) / 2 * thisObject.payload.floatingObject.currentFontSize * FONT_ASPECT_RATIO * 1.2 * 2 - label = thisObject.payload.title - let phrases = splitTextIntoPhrases(label, 2) - let lineSeparator = thisObject.payload.floatingObject.currentFontSize * 1.2 - - if (phrases.length > 3) { - let a = 1 - } - for (let i = 0; i < phrases.length; i++) { - let phrase = phrases[i] - let point = { - x: labelPoint.x - getTextWidth(phrase) / 2 + FRAME_WIDTH / 2, - y: labelPoint.y - lineSeparator * (phrases.length - 1 - i) - } - - if (UI.projects.superalgos.spaces.floatingSpace.inMapMode === false) { - printMessage(phrase, point) - } - } - function printMessage(text, position) { - browserCanvasContext.fillStyle = thisObject.payload.floatingObject.nameStrokeStyle - browserCanvasContext.fillText(text, position.x, position.y) - } - } - } - } - } - - function trimTitle(title) { - if (title === undefined) { return } - const MAX_LABEL_LENGTH = 35 - if (title.length > MAX_LABEL_LENGTH) { - title = title.substring(0, MAX_LABEL_LENGTH) + '...' - } - return title - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/Layer.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/Layer.js deleted file mode 100644 index 594a5f6a9..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/Layer.js +++ /dev/null @@ -1,712 +0,0 @@ -function newLayer() { - const MODULE_NAME = 'Layer' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - container: undefined, - status: LAYER_STATUS.OFF, - fitFunction: undefined, - payload: undefined, - definition: undefined, - panels: undefined, - baseAsset: undefined, - quotedAsset: undefined, - market: undefined, - exchange: undefined, - bot: undefined, - productDefinition: undefined, - mine: undefined, - plotterModule: undefined, - exchangeIcon: undefined, - plotterTypeIcon: undefined, - baseAssetIcon: undefined, - quotedAssetIcon: undefined, - networkNode: undefined, - checkStatusAtShutDown: checkStatusAtShutDown, - physics: physics, - draw: draw, - turnOff: turnOff, - turnOn: turnOn, - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - onMarketFileLoaded: onMarketFileLoaded, - onDailyFileLoaded: onDailyFileLoaded, - onSingleFileLoaded: onSingleFileLoaded, - onFileSequenceLoaded: onFileSequenceLoaded, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - let LOADING_FILL_STYLE = 'rgba(234, 143, 23, @Opacity)' - let LOADED_FILL_STYLE = 'rgba(45, 232, 28, @Opacity)' - let UNLOADED_FILL_STYLE = 'rgba(226, 226, 226, @Opacity)' - - let LOADING_STROKE_STYLE = 'rgba(234, 143, 23, @Opacity)' - let LOADED_STROKE_STYLE = 'rgba(45, 232, 28, @Opacity)' - let UNLOADED_STROKE_STYLE = 'rgba(226, 226, 226, @Opacity)' - - let marketFileProgressBar = { - value: 0, - animatedValue: 0, - fillStyle: UNLOADED_FILL_STYLE, - strokeStyle: UNLOADED_STROKE_STYLE, - opacity: 0.00 - } - - let dailyFileProgressBar = { - value: 0, - animatedValue: 0, - fillStyle: UNLOADED_FILL_STYLE, - strokeStyle: UNLOADED_STROKE_STYLE, - opacity: 0.00 - } - - let singleFileProgressBar = { - value: 0, - animatedValue: 0, - fillStyle: UNLOADED_FILL_STYLE, - strokeStyle: UNLOADED_STROKE_STYLE, - opacity: 0.00 - } - - let fileSequenceProgressBar = { - value: 0, - animatedValue: 0, - fillStyle: UNLOADED_FILL_STYLE, - strokeStyle: UNLOADED_STROKE_STYLE, - opacity: 0.00 - } - - let timeFrame = INITIAL_TIME_PERIOD - let datetime = NEW_SESSION_INITIAL_DATE - - /* Add an Event Handler */ - - thisObject.eventHandler = newEventHandler() - let imagesLoaded = 0 - let onMouseClickEventSuscriptionId - let panelsVisibleButton - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseClickEventSuscriptionId) - - thisObject.container.finalize() - thisObject.eventHandler.finalize() - thisObject.container = undefined - thisObject.eventHandler = undefined - thisObject.status = undefined - thisObject.fitFunction = undefined - thisObject.payload = undefined - thisObject.definition = undefined - thisObject.panels = undefined - - timeFrame = undefined - datetime = undefined - - LOADING_FILL_STYLE = undefined - LOADED_FILL_STYLE = undefined - UNLOADED_FILL_STYLE = undefined - - LOADING_STROKE_STYLE = undefined - LOADED_STROKE_STYLE = undefined - UNLOADED_STROKE_STYLE = undefined - - marketFileProgressBar = undefined - dailyFileProgressBar = undefined - singleFileProgressBar = undefined - fileSequenceProgressBar = undefined - - panelsVisibleButton = undefined - - thisObject.baseAsset = undefined - thisObject.quotedAsset = undefined - thisObject.market = undefined - thisObject.exchange = undefined - thisObject.plotterModule = undefined - thisObject.exchangeIcon = undefined - thisObject.plotterTypeIcon = undefined - thisObject.baseAssetIcon = undefined - thisObject.quotedAssetIcon = undefined - thisObject.networkNode = undefined - thisObject.bot = undefined - thisObject.productDefinition = undefined - thisObject.mine = undefined - } - - function initialize(callBackFunction) { - /* Create this objects continer */ - try { - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME + ' ' + thisObject.payload.node.id) - thisObject.container.isDraggeable = false - thisObject.container.isClickeable = true - - /* Lets set the basic dimensions of this thisObject. */ - let position = { - x: 0, - y: 0 - } - - thisObject.container.frame.position = position - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = 70 - - let functionLibraryProtocolNode = newProtocolNode() - let lightingPath = - '->Layer->' + - 'Data Product->' + - 'Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->Data Product Folder->' + - 'Bot Products->Data Mine Products->Trading Mine Products->Learning Mine Products->' + - 'Market Data Products->Exchange Data Products->' + - 'Trading Session Reference->Learning Session Reference->' + - 'Market Trading Products->Exchange Trading Products->' + - 'Market Learning Products->Exchange Learning Products->' + - 'Data Mines Data->Trading Mines Data->Learning Mines Data->Data Storage->Network Node->' + - 'Data Storage->Network Node->' + - 'Backtesting Session->Paper Trading Session->Forward Testing Session->Live Trading Session->' + - 'Learning Session->' + - 'Trading System Reference->Trading Engine Reference->Trading System->Trading Engine->' + - 'Market->Market Base Asset->Asset->' + - 'Market Quoted Asset->Asset->' + - 'Exchange Markets->Crypto Exchange->' + - 'Product Definition->' + - 'Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->Product Definition Folder->' + - 'Sensor Bot->Indicator Bot->Trading Bot->Learning Bot->' + - 'Data Mine->Trading Mine->Learning Mine->' + - 'Dataset Definition->' + - 'Record Definition->Record Property->Formula->' + - 'Data Building Procedure->Procedure Loop->Javascript Code->Procedure Initialization->Javascript Code->' + - 'Calculations Procedure->Procedure Loop->Javascript Code->Procedure Initialization->Javascript Code->' + - 'Plotter Module->Plotter->' + - 'Shapes->' + - 'Chart Points->Point->Point Formula->' + - 'Polygon->Polygon Condition->Polygon Body->Style->Style Condition->Style->' + - 'Polygon Border->Style->Style Condition->Style->' + - 'Polygon Vertex->Point->' + - 'Image->Image Condition->Image Position->Point->' + - 'Text->Text Condition->Text Position->Point->Text Formula->Text Style->' + - 'Plotter Panel->Javascript Code->Panel Data->Data Formula->Text Style->' + - 'Nodes Highlights->Nodes Values->Nodes Errors->Nodes Warnings->Nodes Infos->Nodes Status->Nodes Progress->Nodes Running->Nodes Announcements->Record Values->' - thisObject.definition = functionLibraryProtocolNode.getProtocolNode(thisObject.payload.node, false, true, true, false, false, lightingPath) - - /* Without this I can not continue, because I can not even show error. */ - if (thisObject.payload === undefined) { - console.log(MODULE_NAME + ' ' + 'thisObject.payload === undefined') - return - } - if (thisObject.payload.uiObject === undefined) { - console.log(MODULE_NAME + ' ' + 'thisObject.payload.uiObject === undefined') - return - } - if (thisObject.payload.node === undefined) { - console.log(MODULE_NAME + ' ' + 'thisObject.payload.node === undefined') - return - } - - /* Here we validate that we have all the needed information */ - if (UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Data Product', undefined, false, true, true, true) === undefined) { - thisObject.payload.uiObject.setErrorMessage('Data Product not Found') - return - } - if (UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Market', undefined, false, true, true, true) === undefined) { - thisObject.payload.uiObject.setErrorMessage('Market not Found') - return - } - - thisObject.productDefinition = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Product Definition', undefined, false, true, true, true) - if (thisObject.productDefinition === undefined) { - thisObject.payload.uiObject.setErrorMessage('Product Definition not Found') - return - } - - thisObject.bot = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Sensor Bot', undefined, false, true, true, true) - if (thisObject.bot === undefined) { - thisObject.bot = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Indicator Bot', undefined, false, true, true, true) - } - if (thisObject.bot === undefined) { - thisObject.bot = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Trading Bot', undefined, false, true, true, true) - } - if (thisObject.bot === undefined) { - thisObject.bot = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Learning Bot', undefined, false, true, true, true) - } - if (thisObject.bot === undefined) { - thisObject.payload.uiObject.setErrorMessage('Bot not Found') - return - } - - thisObject.mine = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Data Mine', undefined, false, true, true, true) - if (thisObject.mine === undefined) { - thisObject.mine = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Trading Mine', undefined, false, true, true, true) - if (thisObject.mine === undefined) { - thisObject.mine = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Learning Mine', undefined, false, true, true, true) - if (thisObject.mine === undefined) { - thisObject.payload.uiObject.setErrorMessage('Data Mine or Trading Mine or Learning Mine not Found') - return - } - } - } - - thisObject.exchange = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Crypto Exchange', undefined, false, true, true, true) - if (thisObject.exchange === undefined) { - thisObject.payload.uiObject.setErrorMessage('Crypto Exchange not Found') - return - } - - thisObject.baseAsset = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Market Base Asset', undefined, false, true, true, true) - if (thisObject.baseAsset !== undefined) { - thisObject.baseAsset = thisObject.baseAsset.referenceParent - } - if (thisObject.baseAsset === undefined) { - thisObject.payload.uiObject.setErrorMessage('Market Base Asset not Found') - return - } - - thisObject.quotedAsset = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Market Quoted Asset', undefined, false, true, true, true) - if (thisObject.quotedAsset !== undefined) { - thisObject.quotedAsset = thisObject.quotedAsset.referenceParent - } - if (thisObject.quotedAsset === undefined) { - thisObject.payload.uiObject.setErrorMessage('Market Quoted Asset not Found') - return - } - - thisObject.plotterModule = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Plotter Module', undefined, false, false, false, true) - if (thisObject.plotterModule === undefined) { - thisObject.payload.uiObject.setErrorMessage('Plotter Module not Found') - return - } - - thisObject.networkNode = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(thisObject.definition, 'Network Node', undefined, false, true, true, true) - if (thisObject.networkNode === undefined) { - thisObject.payload.uiObject.setErrorMessage('Network Node not Found') - return - } - - /* Lets listen to our own events to react when we have a Mouse Click */ - onMouseClickEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - - /* Get ready to draw this layer */ - thisObject.market = thisObject.baseAsset.config.codeName + '/' + thisObject.quotedAsset.config.codeName - - thisObject.exchangeIcon = getIcon(thisObject.exchange) - - if (thisObject.plotterModule.config.icon !== undefined) { - thisObject.plotterTypeIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', thisObject.plotterModule.config.icon) - } - - thisObject.baseAssetIcon = getIcon(thisObject.baseAsset) - thisObject.quotedAssetIcon = getIcon(thisObject.quotedAsset) - - function getIcon(node) { - let nodeDefinition = getNodeDefinition(node) - let iconName - let icon - if (nodeDefinition.alternativeIcons !== undefined) { - for (let i = 0; i < nodeDefinition.alternativeIcons.length; i++) { - let alternativeIcon = nodeDefinition.alternativeIcons[i] - if (alternativeIcon.codeName === node.config.codeName) { - iconName = alternativeIcon.iconName - } - } - } - if (iconName !== undefined) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', iconName) - } else { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName('Superalgos', nodeDefinition.icon) - } - return icon - } - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - } - } - - function checkStatusAtShutDown() { - /* Mechanism to recover a layer that was left loading the last time the browser was shut dowm. */ - let storedValue = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'status') - if (storedValue !== undefined) { - if (storedValue === LAYER_STATUS.LOADING) { - resetProgressBars() - changeStatusTo(LAYER_STATUS.LOADING) - } - } - } - - function getContainer(point) { - if (panelsVisibleButton !== undefined) { - let container = panelsVisibleButton.getContainer(point) - if (container !== undefined) { - return container - } - } - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function setDatetime(pDatetime) { - /* - When the datetime changes from one day to another, this forces cursors to potentially load more files, thus we reset this counter and - get ready to receive events on files loaded. - */ - let currentDate = Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS) - let newDate = Math.trunc(pDatetime.valueOf() / ONE_DAY_IN_MILISECONDS) - - datetime = pDatetime - - if (currentDate !== newDate) { - if (timeFrame <= _1_HOUR_IN_MILISECONDS) { - dailyFileProgressBar.animatedValue = 0 - } - } - } - - function setTimeFrame(pTimeFrame) { - /* - When the time period below or equal to 1 hour changes, this forces cursors to potentially load more files, thus we reset this counter and - get ready to receive events on files loaded. - */ - if (timeFrame !== pTimeFrame) { - timeFrame = pTimeFrame - - if (timeFrame <= _1_HOUR_IN_MILISECONDS) { - dailyFileProgressBar.animatedValue = 0 - } - } - } - - function onMarketFileLoaded(event) { - if (event.totalValue === 0) { - marketFileProgressBar.value = 100 - return - } - marketFileProgressBar.value = Math.trunc((event.currentValue + event.filesNotLoaded) * 100 / event.totalValue) - marketFileProgressBar.fillStyle = LOADING_FILL_STYLE - marketFileProgressBar.strokeStyle = LOADING_STROKE_STYLE - - if (marketFileProgressBar.value > 100) { marketFileProgressBar.value = 100 } - } - - function onDailyFileLoaded(event) { - if (event.totalValue === 0) { - dailyFileProgressBar.value = 100 - return - } - dailyFileProgressBar.value = Math.trunc(event.currentValue * 100 / event.totalValue) - dailyFileProgressBar.fillStyle = LOADING_FILL_STYLE - dailyFileProgressBar.strokeStyle = LOADING_STROKE_STYLE - - if (dailyFileProgressBar.value > 100) { dailyFileProgressBar.value = 100 } - } - - function onSingleFileLoaded(event) { - if (event.totalValue === 0) { - singleFileProgressBar.value = 100 - return - } - singleFileProgressBar.value = Math.trunc(event.currentValue * 100 / event.totalValue) - singleFileProgressBar.fillStyle = LOADING_FILL_STYLE - singleFileProgressBar.strokeStyle = LOADING_STROKE_STYLE - - if (singleFileProgressBar.value > 100) { singleFileProgressBar.value = 100 } - } - - function onFileSequenceLoaded(event) { - if (event.totalValue === 0) { - fileSequenceProgressBar.value = 100 - return - } - fileSequenceProgressBar.value = Math.trunc(event.currentValue * 100 / event.totalValue) - fileSequenceProgressBar.fillStyle = LOADING_FILL_STYLE - fileSequenceProgressBar.strokeStyle = LOADING_STROKE_STYLE - - if (fileSequenceProgressBar.value > 100) { fileSequenceProgressBar.value = 100 } - } - - function turnOff() { - if (thisObject.status !== LAYER_STATUS.OFF) { - resetProgressBars() - changeStatusTo(LAYER_STATUS.OFF) - } - } - - function turnOn() { - if (thisObject.status === LAYER_STATUS.OFF) { - resetProgressBars() - changeStatusTo(LAYER_STATUS.LOADING) - } - } - - function onMouseClick(event) { - switch (thisObject.status) { - case LAYER_STATUS.ON: - resetProgressBars() - changeStatusTo(LAYER_STATUS.OFF) - break - case LAYER_STATUS.OFF: - resetProgressBars() - changeStatusTo(LAYER_STATUS.LOADING) - break - case LAYER_STATUS.LOADING: - changeStatusTo(LAYER_STATUS.OFF) - break - } - } - - function resetProgressBars() { - marketFileProgressBar.animatedValue = 0 - marketFileProgressBar.value = 0 - marketFileProgressBar.fillStyle = UNLOADED_FILL_STYLE - marketFileProgressBar.strokeStyle = UNLOADED_STROKE_STYLE - - dailyFileProgressBar.animatedValue = 0 - dailyFileProgressBar.value = 0 - dailyFileProgressBar.fillStyle = UNLOADED_FILL_STYLE - dailyFileProgressBar.strokeStyle = UNLOADED_STROKE_STYLE - - singleFileProgressBar.animatedValue = 0 - singleFileProgressBar.value = 0 - singleFileProgressBar.fillStyle = UNLOADED_FILL_STYLE - singleFileProgressBar.strokeStyle = UNLOADED_STROKE_STYLE - - fileSequenceProgressBar.animatedValue = 0 - fileSequenceProgressBar.value = 0 - fileSequenceProgressBar.fillStyle = UNLOADED_FILL_STYLE - fileSequenceProgressBar.strokeStyle = UNLOADED_STROKE_STYLE - } - - function physics() { - statusPhysics() - childrenPhysics() - } - - function childrenPhysics() { - /* Panels Visible Button Setup */ - if (thisObject.status === LAYER_STATUS.ON) { - if (panelsVisibleButton === undefined) { - if (thisObject.panels !== undefined) { - if (thisObject.panels.length > 0) { - panelsVisibleButton = newPanelsVisibleButton() - - let storedValue = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'showPanels') - if (storedValue !== undefined) { - if (storedValue === true || storedValue === false) { - panelsVisibleButton.showPanels = storedValue - } - } - - panelsVisibleButton.initialize(thisObject.panels) - panelsVisibleButton.container.connectToParent(thisObject.container) - } - } - } else { - UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(thisObject.payload, 'showPanels', panelsVisibleButton.showPanels) - } - } - } - - function statusPhysics() { - /* We retrieve the stored status at the config. */ - try { - let storedValue = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'status') - - if (storedValue !== undefined) { - if (storedValue !== thisObject.status) { - if (storedValue === LAYER_STATUS.ON && thisObject.status === LAYER_STATUS.OFF) { - resetProgressBars() - changeStatusTo(LAYER_STATUS.LOADING) - } - if (storedValue === LAYER_STATUS.OFF) { - resetProgressBars() - changeStatusTo(LAYER_STATUS.OFF) - } - } - } else { - resetProgressBars() - changeStatusTo(LAYER_STATUS.OFF) - } - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - - if ( - thisObject.status === LAYER_STATUS.LOADING && - marketFileProgressBar.value === 100 && - dailyFileProgressBar.value === 100 - ) { - changeStatusTo(LAYER_STATUS.ON) - } - } - - function changeStatusTo(newStatus) { - if (thisObject.status !== newStatus) { - thisObject.status = newStatus - - if (thisObject.status === LAYER_STATUS.OFF) { - if (panelsVisibleButton !== undefined) { - panelsVisibleButton.finalize() - panelsVisibleButton = undefined - } - } - - UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(thisObject.payload, 'status', thisObject.status) - let eventData = thisObject - thisObject.container.eventHandler.raiseEvent('Status Changed', eventData) - } - } - - function draw() { - drawLayer() - if (panelsVisibleButton !== undefined) { - panelsVisibleButton.draw() - } - } - - function drawLayer() { - drawLayerDisplay() - } - - function drawProgressBar(progressBar, lineWidth, offsetY) { - const ANIMATED_INCREMENT = 5 - const OPACITY_INCREMENT = 0.01 - const OPACITY_MIN = 1 - - let point1 - let point2 - let horizontalMargin = 12 - - if (progressBar.value === 0) { - return - } - - /* Animate */ - if (progressBar.animatedValue < progressBar.value) { - progressBar.animatedValue = progressBar.animatedValue + ANIMATED_INCREMENT - progressBar.opacity = progressBar.opacity + OPACITY_INCREMENT - } - - if (progressBar.animatedValue >= 100) { - progressBar.animatedValue = 100 - - progressBar.opacity = progressBar.opacity - OPACITY_INCREMENT - if (progressBar.opacity < OPACITY_MIN) { progressBar.opacity = OPACITY_MIN } - - progressBar.strokeStyle = LOADED_STROKE_STYLE.replace('@Opacity', progressBar.opacity.toString()) - } - - point1 = { - x: 0 + horizontalMargin, - y: thisObject.container.frame.height + offsetY - } - - point2 = { - x: (thisObject.container.frame.width - horizontalMargin * 2) * progressBar.animatedValue / 100 + horizontalMargin, - y: thisObject.container.frame.height + offsetY - } - - /* Now the transformations. */ - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - - point1 = thisObject.fitFunction(point1) - point2 = thisObject.fitFunction(point2) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = progressBar.strokeStyle.replace('@Opacity', progressBar.opacity.toString()) - - browserCanvasContext.setLineDash([2, 4]) - browserCanvasContext.lineWidth = lineWidth - browserCanvasContext.stroke() - } - - function drawLayerDisplay() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - - let label1 = thisObject.payload.node.name - let label2 = thisObject.exchange.name.substring(0, 15) + ' - ' + thisObject.market - let label3 = thisObject.status.toUpperCase() - - if (label1 !== undefined) { - label1 = label1.substring(0, 30) - } - - let backgroundColor = UI_COLOR.BLACK - - const RED_LINE_HIGHT = 4 - const OPACITY = 0.75 - - let params = { - cornerRadius: 0, - lineWidth: 1, - container: thisObject.container, - borderColor: UI_COLOR.RUSTED_RED, - castShadow: false, - backgroundColor: backgroundColor, - opacity: OPACITY - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - let parentLabel1FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload.parentNode.payload, 'label1FontSize') - let parentLabel2FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload.parentNode.payload, 'label2FontSize') - let parentLabel3FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload.parentNode.payload, 'label3FontSize') - - let label1FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'label1FontSize') - let label2FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'label2FontSize') - let label3FontSize = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'label3FontSize') - - if (parentLabel1FontSize !== undefined) { - label1FontSize = parentLabel1FontSize - } - if (parentLabel2FontSize !== undefined) { - label2FontSize = parentLabel2FontSize - } - if (parentLabel3FontSize !== undefined) { - label3FontSize = parentLabel3FontSize - } - - if (label1FontSize === undefined) { - if (label1.length > 20) { - label1FontSize = 12 - } else { - label1FontSize = 15 - } - } - - if (label2FontSize === undefined) { - label2FontSize = 10 - } - - if (label3FontSize === undefined) { - label3FontSize = 9 - } - - UI.projects.superalgos.utilities.drawPrint.drawLabel(label1, 1 / 2, 5.2 / 10, -5, 0, label1FontSize, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawLabel(label2, 1 / 2, 8.2 / 10, -5, 0, label2FontSize, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawLabel(label3, 1 / 2, 9.5 / 10, -5, 0, label3FontSize, thisObject.container) - - drawProgressBar(marketFileProgressBar, 2, -45 + 18) - drawProgressBar(dailyFileProgressBar, 2, -46 + 18) - drawProgressBar(singleFileProgressBar, 2, -47 + 18) - drawProgressBar(fileSequenceProgressBar, 2, -48 + 18) - - UI.projects.superalgos.utilities.drawPrint.drawIcon(thisObject.exchangeIcon, 1 / 8, 2 / 10, 0, 0, 14, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(thisObject.plotterTypeIcon, 7 / 8, 2 / 10, 0, 0, 14, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(thisObject.baseAssetIcon, 3.4 / 8, 2 / 10, 0, 0, 14, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(thisObject.quotedAssetIcon, 4.6 / 8, 2 / 10, 0, 0, 14, thisObject.container) - } -} - diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LayersPanel.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LayersPanel.js deleted file mode 100644 index 050fa9946..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LayersPanel.js +++ /dev/null @@ -1,522 +0,0 @@ -function newLayersPanel() { - let thisObject = { - name: 'Layers Panel', - fitFunction: undefined, - container: undefined, - layers: [], - payload: undefined, - isVisible: true, - upDownButton: undefined, - leftRightButton: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize() - thisObject.container.isDraggeable = true - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - - let isInitialized = false - let mouseOverCounter = 0 - - let layersMap = new Map() - let visibleLayers = [] - let firstVisibleLayer = 1 - - const LAYER_SEPARATION = 0 - - let headerHeight = 40 - let footerHeight = 10 - let layerHeight = 70 - let desiredVisibleLayers = 5 - let posibleVisibleLayers = 5 - let desiredPanelHeight = (layerHeight + LAYER_SEPARATION) * desiredVisibleLayers + headerHeight + footerHeight - let posiblePanelHeight = (layerHeight + LAYER_SEPARATION) * posibleVisibleLayers + headerHeight + footerHeight - - let onMouseWheelEventSuscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - - let isMouseOver - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSuscriptionId) - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - - thisObject.upDownButton.finalize() - thisObject.upDownButton = undefined - - thisObject.leftRightButton.finalize() - thisObject.leftRightButton = undefined - - layersMap = undefined - visibleLayers = undefined - - thisObject.container.finalize() - thisObject.container = undefined - - thisObject.payload = undefined - thisObject = undefined - } - - function initialize() { - thisObject.container.name = thisObject.payload.node.name - thisObject.container.frame.containerName = thisObject.container.name - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = headerHeight - - let position = { // Default position - x: UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.x, - y: UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - } - - thisObject.container.frame.position = position - UI.projects.superalgos.utilities.loadSaveFrame.loadFrame(thisObject.payload, thisObject.container.frame) - - thisObject.upDownButton = newUpDownButton() - thisObject.upDownButton.parentContainer = thisObject.container - thisObject.upDownButton.container.frame.parentFrame = thisObject.container.frame - thisObject.upDownButton.fitFunction = thisObject.fitFunction - thisObject.upDownButton.initialize() - - thisObject.leftRightButton = newLeftRightButton() - thisObject.leftRightButton.parentContainer = thisObject.container - thisObject.leftRightButton.container.frame.parentFrame = thisObject.container.frame - thisObject.leftRightButton.fitFunction = thisObject.fitFunction - thisObject.leftRightButton.initialize() - - onMouseWheelEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - - readObjectState() - - isInitialized = true - } - - function onMouseOver(event) { - isMouseOver = true - } - - function onMouseNotOver() { - isMouseOver = false - } - - function saveObjectStateVisibleLayers() { - UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(thisObject.payload, 'visibleLayers', desiredVisibleLayers) - } - - function saveObjectStatePanelLocation() { - let panelLocation = { - upOrDown: thisObject.upDownButton.status, - leftOrRight: thisObject.leftRightButton.status - } - UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(thisObject.payload, 'panelLocation', panelLocation) - } - - function readObjectState() { - let storedValue - - storedValue = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'visibleLayers') - - if (isNaN(storedValue) || storedValue === null || storedValue === undefined) { - // not using this value - saveObjectStateVisibleLayers() // this overrides any invalid value at the config. - return - } else { - if (storedValue < 0) { storedValue = 0 } - if (storedValue > thisObject.layers.length) { - storedValue = thisObject.layers.length - } - - if (storedValue !== desiredVisibleLayers) { - desiredVisibleLayers = storedValue - desiredPanelHeight = (layerHeight + LAYER_SEPARATION) * desiredVisibleLayers + headerHeight + footerHeight - calculateVisbleLayers() - } - } - - storedValue = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(thisObject.payload, 'panelLocation') - - if (storedValue === null || storedValue === undefined) { - // not using this value - saveObjectStatePanelLocation() // this overrides any invalid value at the config. - return - } else { - if (storedValue.upOrDown !== 'up' && storedValue.upOrDown !== 'down') { - saveObjectStatePanelLocation() // this overrides any invalid value at the config. - return - } - if (storedValue.leftOrRight !== 'left' && storedValue.leftOrRight !== 'right') { - saveObjectStatePanelLocation() // this overrides any invalid value at the config. - return - } - thisObject.upDownButton.setStatus(storedValue.upOrDown) - thisObject.leftRightButton.setStatus(storedValue.leftOrRight) - saveObjectStatePanelLocation() - } - } - - function removeLayer(id) { - let layer = layersMap.get(id) - layersMap.delete(id) - layer.turnOff() - layer.container.eventHandler.stopListening(layer.onLayerStatusChangedEventSuscriptionId) - layer.container.eventHandler.stopListening(layer.onMouseWheelEventSuscriptionId) - layer.finalize() - } - - function addLayer(layerNode) { - /* Now we create Product objects */ - let layer = newLayer() - layer.payload = layerNode.payload - layer.nodeId = layerNode.payload.node.id - layer.fitFunction = thisObject.fitFunction - - /* Initialize it */ - layer.initialize(onInitialized) - - function onInitialized(err) { - if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) { - layersMap.set(layerNode.id, layer) - - /* Container Stuff */ - layer.container.frame.parentFrame = thisObject.container.frame - layer.container.parentContainer = thisObject.container - layer.container.isWheelable = true - - /* Add to the Product Array */ - thisObject.layers.push(layer) - - /* Listen to Status Changes Events */ - layer.onLayerStatusChangedEventSuscriptionId = layer.container.eventHandler.listenToEvent('Status Changed', onLayerStatusChanged) - layer.onMouseWheelEventSuscriptionId = layer.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - - layer.checkStatusAtShutDown() - - return - } - } - } - - function onMouseWheel(event) { - delta = event.wheelDelta - if (delta > 0) { - delta = -1 - } else { - delta = 1 - } - - if (event.y - thisObject.container.frame.position.y - CURRENT_TOP_MARGIN < headerHeight) { // Mouse wheel over the header, not a layer - desiredVisibleLayers = desiredVisibleLayers + delta - if (desiredVisibleLayers < 0) { desiredVisibleLayers = 0 } - if (desiredVisibleLayers > thisObject.layers.length) { desiredVisibleLayers = thisObject.layers.length } - } else { - firstVisibleLayer = firstVisibleLayer + delta - } - desiredPanelHeight = (layerHeight + LAYER_SEPARATION) * desiredVisibleLayers + headerHeight + footerHeight - calculateVisbleLayers() - saveObjectStateVisibleLayers() - } - - function panelSizePhysics() { - if (isInitialized === false || thisObject.isHidden === true) { return } - - let viewPortHeight = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - - if (viewPortHeight < headerHeight) { - thisObject.visible = false - } else { - thisObject.visible = true - } - - if (thisObject.visible === false) { return } - - if (desiredPanelHeight > viewPortHeight) { - posibleVisibleLayers = Math.trunc((viewPortHeight - headerHeight - footerHeight) / (layerHeight + LAYER_SEPARATION)) - } else { - posibleVisibleLayers = desiredVisibleLayers - } - if (thisObject.layers.length < posibleVisibleLayers) { posibleVisibleLayers = thisObject.layers.length } - - if (posibleVisibleLayers === 0) { - posiblePanelHeight = (layerHeight + LAYER_SEPARATION) * posibleVisibleLayers + headerHeight - } else { - posiblePanelHeight = (layerHeight + LAYER_SEPARATION) * posibleVisibleLayers + headerHeight + footerHeight - } - - thisObject.container.frame.height = posiblePanelHeight - } - - function calculateVisbleLayers() { - panelSizePhysics() - let availableSlots = posibleVisibleLayers - - if (firstVisibleLayer < 1) { firstVisibleLayer = 1 } - if (firstVisibleLayer > (thisObject.layers.length - availableSlots + 1)) { firstVisibleLayer = thisObject.layers.length - availableSlots + 1 } - - visibleLayers = [] - - for (let i = 0; i < thisObject.layers.length; i++) { - if (i + 1 >= firstVisibleLayer && i + 1 < firstVisibleLayer + availableSlots) { - let layer = thisObject.layers[i] - - layer.container.frame.position.x = 0 - layer.container.frame.position.y = (layerHeight + LAYER_SEPARATION) * visibleLayers.length + headerHeight - - /* Add to Visible Product Array */ - visibleLayers.push(layer) - } - } - } - - function onLayerStatusChanged(layer) { - thisObject.container.eventHandler.raiseEvent('Layer Status Changed', layer) - } - - function getContainer(point, purpose) { - if (isInitialized === false || thisObject.visible === false || thisObject.isHidden === true) { return } - let container - - if (isMouseOver === true && purpose !== GET_CONTAINER_PURPOSE.MOUSE_OVER) { - container = thisObject.upDownButton.getContainer(point) - if (container !== undefined) { return container } - - container = thisObject.leftRightButton.getContainer(point) - if (container !== undefined) { return container } - } - - /* First we check if thisObject point is inside thisObject space. */ - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - /* Now we see which is the inner most container that has it */ - for (let i = 0; i < visibleLayers.length; i++) { - container = visibleLayers[i].getContainer(point) - - if (container !== undefined) { - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - if (purpose !== GET_CONTAINER_PURPOSE.MOUSE_OVER) { - return container - } - } - } - } - - /* The point does not belong to any inner container, so we return the current container. */ - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container - } - } - } - - function childrenPhysics() { - for (let i = 0; i < thisObject.layers.length; i++) { - let layer = thisObject.layers[i] - layer.physics() - } - } - - function syncWithConfigPhysics() { - readObjectState() - } - - function physics() { - if (isInitialized === false) { return } - if (thisObject.payload.node === undefined) { return } - - thisObject.upDownButton.physics() - thisObject.leftRightButton.physics() - UI.projects.superalgos.utilities.loadSaveFrame.saveFrame(thisObject.payload, thisObject.container.frame) - syncWithConfigPhysics() - - /* - The overall idea here is that we need to keep syncronized the panel with the layers that are - defined at the Designer. Users can connect or disconnect any objext resulting in changes in which - are valid layers and which not at any point in time. So what we do here is trying to keep the panel - only with the layers that are connected to the Charting Space hiriarcy. - - To achieve this, first we are going to move all session related cards to a local array. Then we are - going to check for layers at the designer, and will move back the cards which still have layers well - defined to where they were. - - If we find new layers we will add them at that point. Finally, the cards that still remain at the - local array after all the layers at the designer have been processed, are turned off and discarded. - */ - childrenPhysics() - - let localLayers = [] - moveToLocalLayers() - syncWithDesignerLayers() - - /* At this poins all the cards still at the local array need to be removed from the panel. */ - turnOffUnusedLayers() - calculateVisbleLayers() - - function syncWithDesignerLayers() { - if (thisObject.payload.node === undefined) { return } - let layerManager = thisObject.payload.node - let layers = UI.projects.superalgos.utilities.branches.nodeBranchToArray(layerManager, 'Layer') - for (let p = 0; p < layers.length; p++) { - let layerNode = layers[p] - - let found = removeFromLocalLayers(layerNode.id) - if (found !== true) { - let layer = addLayer(layerNode) - if (layer !== undefined) { - onLayerStatusChanged(layer) - } - } - } - } - - function moveToLocalLayers() { - removeNext() - - function removeNext() { - for (let i = 0; i < thisObject.layers.length; i++) { - let layer = thisObject.layers[i] - - thisObject.layers.splice(i, 1) - localLayers.push(layer) - removeNext() - } - } - } - - function removeFromLocalLayers(id) { - for (let i = 0; i < localLayers.length; i++) { - let layer = localLayers[i] - if (layer.payload === undefined) { continue } - if (layer.payload.node === undefined) { continue } - if (layer.payload.node.id === id) { - thisObject.layers.push(layer) - localLayers.splice(i, 1) - return true - } - } - } - - function turnOffUnusedLayers() { - for (let i = 0; i < localLayers.length; i++) { - let layer = localLayers[i] - removeLayer(layer.nodeId) - } - } - } - - function draw() { - if (isInitialized === false || thisObject.visible === false || thisObject.isHidden === true) { return } - - // thisObject.container.frame.draw(false, false, false, thisObject.fitFunction) - - drawHeader() - for (let i = 0; i < visibleLayers.length; i++) { - visibleLayers[i].draw() - } - drawScrollBar() - if (isMouseOver === true) { - thisObject.upDownButton.draw() - thisObject.leftRightButton.draw() - } - } - - function drawHeader() { - if (thisObject.payload === undefined) { return } - if (thisObject.payload.node === undefined) { return } - if (thisObject.payload.node.payload.parentNode === undefined) { return } - if (thisObject.payload.node.payload.parentNode.payload.parentNode === undefined) { return } - - let label1 = thisObject.payload.node.payload.parentNode.payload.parentNode.name.substring(0, 18) - let label2 = thisObject.payload.node.payload.parentNode.name.substring(0, 18) - let label3 = '' - - let icon1 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.payload.parentNode.payload.parentNode.project, thisObject.payload.node.payload.parentNode.payload.parentNode.type) - let icon2 = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType(thisObject.payload.node.payload.parentNode.project, thisObject.payload.node.payload.parentNode.type) - - let backgroundColor = UI_COLOR.BLACK - - let params = { - cornerRadius: 5, - lineWidth: 1, - container: thisObject.container, - borderColor: UI_COLOR.RUSTED_RED, - castShadow: false, - backgroundColor: backgroundColor, - opacity: 1 - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - UI.projects.superalgos.utilities.drawPrint.drawLabel(label1, 1 / 2, 0, 0, 15, 9, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawLabel(label2, 1 / 2, 0, 0, 30, 9, thisObject.container) - - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon1, 1 / 8, 0, 0, 20, 28, thisObject.container) - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon2, 7 / 8, 0, 0, 20, 28, thisObject.container) - } - - function drawScrollBar() { - if (thisObject.layers.length > posibleVisibleLayers && posibleVisibleLayers > 0) { - let xOffset = 4 - let barTopPoint = { - x: thisObject.container.frame.width - xOffset, - y: headerHeight - } - let barBottomPoint = { - x: thisObject.container.frame.width - xOffset, - y: thisObject.container.frame.height - footerHeight - } - let ratio = posibleVisibleLayers / thisObject.layers.length - let handleHeight = (posibleVisibleLayers * (layerHeight + LAYER_SEPARATION)) * ratio - let handleTopPoint = { - x: thisObject.container.frame.width - xOffset, - y: headerHeight + (layerHeight + LAYER_SEPARATION) * ratio * (firstVisibleLayer - 1) - } - let handleBottomPoint = { - x: thisObject.container.frame.width - xOffset, - y: handleTopPoint.y + handleHeight - } - barTopPoint = thisObject.container.frame.frameThisPoint(barTopPoint) - barBottomPoint = thisObject.container.frame.frameThisPoint(barBottomPoint) - handleTopPoint = thisObject.container.frame.frameThisPoint(handleTopPoint) - handleBottomPoint = thisObject.container.frame.frameThisPoint(handleBottomPoint) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(barTopPoint.x, barTopPoint.y) - browserCanvasContext.lineTo(barBottomPoint.x, barBottomPoint.y) - browserCanvasContext.closePath() - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 1 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + 1 + ')' - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(handleTopPoint.x, handleTopPoint.y) - browserCanvasContext.lineTo(handleBottomPoint.x, handleBottomPoint.y) - browserCanvasContext.closePath() - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 4 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + 1 + ')' - browserCanvasContext.stroke() - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LeftRightButton.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LeftRightButton.js deleted file mode 100644 index f64b7349e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/LeftRightButton.js +++ /dev/null @@ -1,243 +0,0 @@ -function newLeftRightButton() { - let thisObject = { - container: undefined, - fitFunction: undefined, - parentContainer: undefined, - status: undefined, - setStatus: setStatus, - physics: physics, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - /* Cointainer stuff */ - - thisObject.container = newContainer() - thisObject.container.name = 'Left Right Button' - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.frame.containerName = 'Left Right Button' - - thisObject.status = 'left' - let leftPosition = {} - let rightPosition = {} - let transitionPosition = {} - - let onMouseClickEventSuscriptionId - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseClickEventSuscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.parentContainer = undefined - - thisObject.status = undefined - leftPosition = undefined - rightPosition = undefined - transitionPosition = undefined - } - - function initialize() { - thisObject.container.frame.width = 12 - thisObject.container.frame.height = 12 - - let position = { - x: thisObject.container.frame.parentFrame.width * 2.25 / 8 - thisObject.container.frame.width / 2, - y: 40 * 4 / 8 - thisObject.container.frame.height / 2 - } - - thisObject.container.frame.position = position - - leftPosition.x = thisObject.parentContainer.frame.position.x - leftPosition.y = thisObject.parentContainer.frame.position.y - - rightPosition.x = thisObject.parentContainer.frame.position.x - rightPosition.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - - transitionPosition.x = leftPosition.x - transitionPosition.y = leftPosition.y - - /* Lets listen to our own events to react when we have a Mouse Click */ - onMouseClickEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - - isInitialized = true - } - - function setStatus(value) { - if (value === 'left' && thisObject.status === 'right') { - thisObject.status = 'going left' - } - if (value === 'right' && thisObject.status === 'left') { - thisObject.status = 'going right' - } - } - - function onMouseClick(event) { - if (thisObject.status === 'left') { - transitionPosition.x = leftPosition.x - transitionPosition.y = leftPosition.y - - thisObject.status = 'going right' - } else { - transitionPosition.x = rightPosition.x - transitionPosition.y = rightPosition.y - - thisObject.status = 'going left' - } - } - - function physics() { - if (isInitialized === false) { return } - - leftPosition.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.x - leftPosition.y = thisObject.parentContainer.frame.position.y - - rightPosition.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x - rightPosition.y = thisObject.parentContainer.frame.position.y - - if (thisObject.status === 'going right') { - if (transitionPosition.x < rightPosition.x) { - transitionPosition.x = transitionPosition.x + 50 - thisObject.parentContainer.frame.position.x = transitionPosition.x - } else { - thisObject.parentContainer.frame.position.x = rightPosition.x - thisObject.status = 'right' - } - } - if (thisObject.status === 'going left') { - if (transitionPosition.x > leftPosition.x) { - transitionPosition.x = transitionPosition.x - 50 - thisObject.parentContainer.frame.position.x = transitionPosition.x - } else { - thisObject.parentContainer.frame.position.x = leftPosition.x - thisObject.status = 'left' - } - } - } - - function draw() { - if (isInitialized === false) { return } - - drawButton() - } - - function getContainer(point, purpose) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function drawButton() { - let point1 - let point2 - let point3 - - switch (thisObject.status) { - case 'left': { - point1 = { - x: 3, - y: 3 - } - - point2 = { - x: 3, - y: thisObject.container.frame.height - 3 - } - - point3 = { - x: thisObject.container.frame.width - 3, - y: thisObject.container.frame.height / 2 - } - break - } - - case 'going right': { - point1 = { - x: 4, - y: 4 - } - - point2 = { - x: 4, - y: thisObject.container.frame.height - 4 - } - - point3 = { - x: thisObject.container.frame.width - 4, - y: thisObject.container.frame.height / 2 - } - break - } - - case 'going left': { - point1 = { - x: thisObject.container.frame.width - 4, - y: 4 - } - - point2 = { - x: thisObject.container.frame.width - 4, - y: thisObject.container.frame.height - 4 - } - - point3 = { - x: 4, - y: thisObject.container.frame.height / 2 - } - break - } - - case 'right': { - point1 = { - x: thisObject.container.frame.width - 3, - y: 3 - } - - point2 = { - x: thisObject.container.frame.width - 3, - y: thisObject.container.frame.height - 3 - } - - point3 = { - x: 3, - y: thisObject.container.frame.height / 2 - } - break - } - } - - /* Now the transformations. */ - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - - if (thisObject.fitFunction !== undefined) { - point1 = thisObject.fitFunction(point1) - point2 = thisObject.fitFunction(point2) - point3 = thisObject.fitFunction(point3) - } - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(250, 250, 250, 1)' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - - browserCanvasContext.fillStyle = 'rgba(250, 250, 250, 1)' - browserCanvasContext.fill() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelSpace.js deleted file mode 100644 index c8b2ee86f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelSpace.js +++ /dev/null @@ -1,379 +0,0 @@ -/* - -The Panel Space y the place wehre all panels live, no matter who create them. - -*/ -function newSuperalgosPanelSpace() { - let thisObject = { - visible: true, - container: undefined, - unHide: unHide, - hide: hide, - createNewPanel: createNewPanel, - destroyPanel: destroyPanel, - getPanel: getPanel, - physics: physics, - draw: draw, - panels: [], - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize - } - - let container = newContainer() - container.initialize() - thisObject.container = container - thisObject.container.isDraggeable = false - - container.frame.containerName = 'Panels Space' - - return thisObject - - function initialize() { - - /* The space does not create any Panels for itself, it just sits and waits others need panels. */ - - } - - function createNewPanel(pType, pParameters, pOwner, pSession) { - let panel - - switch (pType) { - - case 'Layers Panel': - { - panel = newLayersPanel() - panel.fitFunction = UI.projects.superalgos.spaces.chartingSpace.fitFunction - panel.container.isVisibleFunction = UI.projects.superalgos.spaces.chartingSpace.isThisPointVisible - panel.type = 'Layers Panel' - break - } - case 'Plotter Panel': - { - if (pParameters.panelNode.config.isLegacy !== true) { - panel = newPlotterPanel() - panel.fitFunction = UI.projects.superalgos.spaces.chartingSpace.fitFunction - panel.container.isVisibleFunction = UI.projects.superalgos.spaces.chartingSpace.isThisPointVisible - panel.session = pSession - panel.initialize(pParameters.panelNode) - } else { - panel = getNewPlotterPanel(pParameters.mine, pParameters.plotterCodeName, pParameters.moduleCodeName, pParameters.panelNode.config.codeName) - panel.fitFunction = UI.projects.superalgos.spaces.chartingSpace.fitFunction - panel.container.isVisibleFunction = UI.projects.superalgos.spaces.chartingSpace.isThisPointVisible - panel.session = pSession - panel.initialize() - } - panel.type = 'Plotter Panel' - break - } - } - - panel.owner = pOwner - thisObject.panels.push(panel) - - panel.handle = newUniqueId() - - return panel.handle - } - - function unHide(owner, type) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - if (panel.owner === owner && panel.type === type) { - panel.isHidden = false - } - } - } - - function hide(owner, type) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - if (panel.owner === owner && panel.type === type) { - panel.isHidden = true - } - } - } - - function destroyPanel(pPanelHandle) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - - if (panel.handle === pPanelHandle) { - if (panel.finalize !== undefined) { - panel.finalize() - } - - thisObject.panels.splice(i, 1) // Delete item from array. - return - } - } - } - - function getPanel(pPanelHandle) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - - if (panel.handle === pPanelHandle) { - return panel - } - } - } - - function physics() { - if (thisObject.visible !== true) { return } - - childrenPhysics() - positioningPhysics() - } - - function childrenPhysics() { - if (thisObject.panels !== undefined) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - let owner = UI.projects.superalgos.spaces.chartingSpace.inViewport.get(panel.owner) - if (owner !== undefined) { - if (panel.physics !== undefined) { - panel.physics() - } - } - } - } - } - - function positioningPhysics() { - if (thisObject.panels !== undefined) { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - if (panel.isVisible === false || panel.isHidden === true) { continue } - /* setting the speed of the panel */ - if (panel.container.speed === undefined) { - panel.container.speed = { - x: 2, - y: 2 - } - } - - /* Trying to move the panel and see if it is possible */ - let centerPoint = { - x: panel.container.frame.position.x, - y: panel.container.frame.position.y - } - centerPoint.x = centerPoint.x + panel.container.frame.width / 2 - centerPoint.y = centerPoint.y + panel.container.frame.height / 2 - - /* Lets see which quadrant the panel is at */ - let verticalLine = (UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.x) / 2 + UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.x - let horizontalLine = (UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.y) / 2 + UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.y - - if (panel.upDownButton !== undefined) { - if (panel.upDownButton.status === 'up') { - if (panel.leftRightButton !== undefined) { - if (panel.leftRightButton.status === 'left') { - panel.gravitatesTowards = 'topLeft' - } else { - panel.gravitatesTowards = 'topRight' - } - } else { - if (centerPoint.x < verticalLine) { - panel.gravitatesTowards = 'topLeft' - } else { - panel.gravitatesTowards = 'topRight' - } - } - } else { - if (panel.leftRightButton !== undefined) { - if (panel.leftRightButton.status === 'left') { - panel.gravitatesTowards = 'bottomLeft' - } else { - panel.gravitatesTowards = 'bottomRight' - } - } else { - if (centerPoint.x < verticalLine) { - panel.gravitatesTowards = 'bottomLeft' - } else { - panel.gravitatesTowards = 'bottomRight' - } - } - } - } else { - if (centerPoint.x < verticalLine && centerPoint.y < horizontalLine) { - panel.gravitatesTowards = 'topLeft' - } - if (centerPoint.x >= verticalLine && centerPoint.y < horizontalLine) { - panel.gravitatesTowards = 'topRight' - } - if (centerPoint.x < verticalLine && centerPoint.y >= horizontalLine) { - panel.gravitatesTowards = 'bottomLeft' - } - if (centerPoint.x >= verticalLine && centerPoint.y >= horizontalLine) { - panel.gravitatesTowards = 'bottomRight' - } - } - - /* According to the quadrant we push the panels to the sides */ - if (panel.gravitatesTowards === 'topLeft' || panel.gravitatesTowards === 'bottomLeft') { - panel.container.frame.position.x = panel.container.frame.position.x - panel.container.speed.x - if (panel.leftRightButton !== undefined) { - if (panel.leftRightButton.status === 'left' || panel.leftRightButton.status === 'right') { // we avoid pushing other panels while in transition - } - } - isOverlapping(i, panel.container) - if (panel.container.frame.position.x < 0) { - panel.container.frame.position.x = 0 - } - } else { - panel.container.frame.position.x = panel.container.frame.position.x + panel.container.speed.x - isOverlapping(i, panel.container) - if (panel.container.frame.position.x + panel.container.frame.width > browserCanvas.width) { - panel.container.frame.position.x = browserCanvas.width - panel.container.frame.width - } - } - if (panel.container.frame.height <= UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.y) { - if (panel.gravitatesTowards === 'topLeft' || panel.gravitatesTowards === 'topRight') { - panel.container.frame.position.y = panel.container.frame.position.y - panel.container.speed.y - isOverlapping(i, panel.container) - if (panel.container.frame.position.y < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y) { - panel.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - } - } else { - panel.container.frame.position.y = panel.container.frame.position.y + panel.container.speed.y - isOverlapping(i, panel.container) - if (panel.container.frame.position.y + panel.container.frame.height > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y) { - panel.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - panel.container.frame.height - } - } - } - } - } - - function isOverlapping(currentIndex, currentContainer) { - let corner1 = { - x: currentContainer.frame.position.x, - y: currentContainer.frame.position.y - } - let corner2 = { - x: currentContainer.frame.position.x + currentContainer.frame.width, - y: currentContainer.frame.position.y - } - let corner3 = { - x: currentContainer.frame.position.x + currentContainer.frame.width, - y: currentContainer.frame.position.y + currentContainer.frame.height - } - let corner4 = { - x: currentContainer.frame.position.x, - y: currentContainer.frame.position.y + currentContainer.frame.height - } - - for (let i = 0; i < currentIndex; i++) { - let panel = thisObject.panels[i] - if (panel.leftRightButton !== undefined) { - if (panel.leftRightButton.status !== 'left' && panel.leftRightButton.status !== 'right') { // we avoid pushing other panels while in transition - continue - } - } - if (panel.isVisible === true && panel.isHidden === false) { - if (isThisPointInsideThisFrame(corner1, panel.container.frame) === true) { - pushOut(currentContainer, panel.container, panel.gravitatesTowards) - } - if (isThisPointInsideThisFrame(corner2, panel.container.frame) === true) { - pushOut(currentContainer, panel.container, panel.gravitatesTowards) - } - if (isThisPointInsideThisFrame(corner3, panel.container.frame) === true) { - pushOut(currentContainer, panel.container, panel.gravitatesTowards) - } - if (isThisPointInsideThisFrame(corner4, panel.container.frame) === true) { - pushOut(currentContainer, panel.container, panel.gravitatesTowards) - } - } - } - - function pushOut(currentContainer, controlContainer, corner) { - switch (corner) { - case 'topLeft': { - currentContainer.frame.position.x = controlContainer.frame.position.x + controlContainer.frame.width - break - } - case 'topRight': { - currentContainer.frame.position.x = controlContainer.frame.position.x - currentContainer.frame.width - break - } - case 'bottomLeft': { - currentContainer.frame.position.x = controlContainer.frame.position.x + controlContainer.frame.width - break - } - case 'bottomRight': { - currentContainer.frame.position.x = controlContainer.frame.position.x - currentContainer.frame.width - break - } - } - } - - function isThisPointInsideThisFrame(point, frame) { - let corner1 = { - x: frame.position.x, - y: frame.position.y - } - let corner2 = { - x: frame.position.x + frame.width, - y: frame.position.y - } - let corner3 = { - x: frame.position.x + frame.width, - y: frame.position.y + frame.height - } - let corner4 = { - x: frame.position.x, - y: frame.position.y + frame.height - } - if (point.x >= corner1.x && point.y >= corner1.y && point.x <= corner3.x && point.y <= corner3.y) { - return true - } else { - return false - } - } - return false - } - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (thisObject.visible !== true) { return } - - thisObject.container.frame.draw(false, false) - - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = thisObject.panels[i] - let owner = UI.projects.superalgos.spaces.chartingSpace.inViewport.get(panel.owner) - if (owner !== undefined) { - if (panel.isVisible === true && panel.isHidden === false) { - panel.draw() - } - } - } - } - - function getContainer(point, purpose) { - if (thisObject.visible !== true) { return } - if (purpose === GET_CONTAINER_PURPOSE.DRAGGING && point.shiftKey !== false) {return} - - let container - /* - We search for the container of panels in the oposite direction than we do it for drawing them, - so panels overlapping others are picked firt although they are drawn last. - */ - for (let i = thisObject.panels.length - 1; i >= 0; i--) { - let panel = thisObject.panels[i] - let owner = UI.projects.superalgos.spaces.chartingSpace.inViewport.get(panel.owner) - if (owner !== undefined) { - if (panel.isVisible === true && panel.isHidden === false) { - container = panel.getContainer(point, purpose) - } - } - if (container !== undefined) { - container.space = 'Panels Space' - return container - } - } - // thisObject.container.space = 'Panels Space' - // return thisObject.container - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelsVisibleButton.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelsVisibleButton.js deleted file mode 100644 index 2b4b093dc..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PanelsVisibleButton.js +++ /dev/null @@ -1,84 +0,0 @@ -function newPanelsVisibleButton() { - let thisObject = { - container: undefined, - fitFunction: undefined, - parentContainer: undefined, - panels: undefined, - showPanels: true, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - /* Cointainer stuff */ - thisObject.container = newContainer() - thisObject.container.name = 'Panels Visible Button' - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.frame.containerName = 'Panels Visible Button' - - let onMouseClickEventSuscriptionId - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseClickEventSuscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.parentContainer = undefined - thisObject.panels = undefined - } - - function initialize(panels) { - thisObject.panels = panels - setPanelVisibility() - - thisObject.container.frame.width = 25 - thisObject.container.frame.height = 25 - - let position = { - x: thisObject.container.frame.width * 1 / 8, - y: 45 - } - - thisObject.container.frame.position = position - - /* Lets listen to our own events to react when we have a Mouse Click */ - onMouseClickEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - } - - function onMouseClick(event) { - if (thisObject.showPanels === false) { - thisObject.showPanels = true - } else { - thisObject.showPanels = false - } - setPanelVisibility() - } - - function setPanelVisibility() { - for (let i = 0; i < thisObject.panels.length; i++) { - let panel = UI.projects.superalgos.spaces.panelSpace.getPanel(thisObject.panels[i]) - panel.isVisible = thisObject.showPanels - } - } - - function getContainer(point) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function draw() { - let icon - if (thisObject.showPanels === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'plotter-panel') - } else { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'toggle-panel-off') - } - - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon, 1 / 2, 1 / 2, 0, 0, 14, thisObject.container) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PlotterPanel.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PlotterPanel.js deleted file mode 100644 index 5cfe5b9be..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/PlotterPanel.js +++ /dev/null @@ -1,213 +0,0 @@ - -function newPlotterPanel() { - const MODULE_NAME = 'Plotter Panel' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - fitFunction: undefined, - container: undefined, - isVisible: true, - onRecordChange: onRecordChange, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize('Plotter Panel') - - let heightFactor = 1 - let currentRecord - let upDownButton - let panelNode - - return thisObject - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.isVisible = undefined - - heightFactor = undefined - currentRecord = undefined - upDownButton.finalize() - upDownButton = undefined - panelNode = undefined - } - - function initialize(pPanelNode) { - panelNode = pPanelNode - thisObject.container.frame.containerName = panelNode.name - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL - - thisObject.container.frame.position.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width - thisObject.container.frame.width * Math.random() * 8 - thisObject.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height - thisObject.container.frame.height * Math.random() * 1.5 - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container - } - } - } - - function onRecordChange(pCurrentRecord) { - currentRecord = pCurrentRecord - } - - function draw() { - if (thisObject.isVisible !== true) { return } - - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction) - plotCurrentRecordData() - upDownButton.draw() - } - - function plotCurrentRecordData() { - const frameBodyHeight = thisObject.container.frame.getBodyHeight() - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight - - const X_AXIS_A = thisObject.container.frame.width * 1 / 8 - const X_AXIS_B = thisObject.container.frame.width * 7 / 8 - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2 - - const PANEL_HEIGHT = UI_PANEL.HEIGHT.NORMAL - - if (currentRecord === undefined) { return } - let record = currentRecord - - /* First we execute code if provided. */ - if (panelNode.javascriptCode !== undefined) { - try { - eval(panelNode.javascriptCode.code) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] plotCurrentRecordData -> err = ' + err.stack) } - if (ERROR_LOG === true) { logger.write('[ERROR] plotCurrentRecordData -> javascriptCode.code = ' + panelNode.javascriptCode.code) } - } - } - - /* Second we go through the panel data. */ - if (panelNode.panelData === undefined) { return } - for (let i = 0; i < panelNode.panelData.length; i++) { - let panelData = panelNode.panelData[i] - - let labelText = panelData.name - let labelPosition = i * 10 + 12 - let valuePosition = i * 10 + 17 - let value = 'No value defined.' - - if (valuePosition > 100) { - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 1.25 - } - - if (valuePosition > 125) { - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 1.50 - } - - if (valuePosition > 150) { - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 1.75 - } - - if (valuePosition > 175) { - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 2.00 - } - - if (panelData.dataFormula !== undefined) { - try { - value = eval(panelData.dataFormula.code) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] plotCurrentRecordData -> err = ' + err.stack) } - if (ERROR_LOG === true) { logger.write('[ERROR] plotCurrentRecordData -> dataFormula.code = ' + panelData.dataFormula.code) } - } - } - - if (panelData.config.valueDecimals !== undefined) { - if (value !== undefined) { - if (isNaN(value) === false) { - value = dynamicDecimals(value, panelData.config.valueDecimals) - } - } - } - - if (panelData.config.labelText !== undefined) { - labelText = panelData.config.labelText - } - - if (panelData.config.labelPosition !== undefined) { - labelPosition = panelData.config.labelPosition - } - - if (panelData.config.valuePosition !== undefined) { - valuePosition = panelData.config.valuePosition - } - - let opacity = '1.00' - let fontSize = 14 - let paletteColor - - if (panelData.textStyle !== undefined) { - if (panelData.textStyle.config.fontSize !== undefined) { fontSize = panelData.textStyle.config.fontSize } - if (panelData.textStyle.config.opacity !== undefined) { opacity = panelData.textStyle.config.opacity } - if (panelData.textStyle.config.paletteColor !== undefined) { paletteColor = eval(panelData.textStyle.config.paletteColor) } - } - - UI.projects.superalgos.utilities.drawPrint.printLabel( - labelText, - X_AXIS_A, - undefined, - undefined, - UI_PANEL.HEIGHT.NORMAL * labelPosition / 100 / heightFactor, - '0.60', - undefined, - undefined, - 'Left', - thisObject.container, - thisObject.fitFunction - ) - - UI.projects.superalgos.utilities.drawPrint.printLabel( - value, - X_AXIS_A, - X_AXIS_B, - undefined, - UI_PANEL.HEIGHT.NORMAL * valuePosition / 100 / heightFactor, - opacity, - fontSize, - paletteColor, - 'Left Numbers at Right', - thisObject.container, - thisObject.fitFunction, - false, - true, - undefined, - true - ) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/UpDownButton.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/UpDownButton.js deleted file mode 100644 index d4104e3a5..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Panel-Space/UpDownButton.js +++ /dev/null @@ -1,244 +0,0 @@ -function newUpDownButton() { - let thisObject = { - container: undefined, - fitFunction: undefined, - parentContainer: undefined, - status: undefined, - setStatus: setStatus, - physics: physics, - draw: draw, - getContainer: getContainer, // returns the inner most container that holds the point received by parameter. - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - /* Cointainer stuff */ - - thisObject.container = newContainer() - thisObject.container.name = 'Up Down Button' - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.frame.containerName = 'Up Down Button' - - thisObject.status = 'up' - let upPosition = {} - let downPosition = {} - let transitionPosition = {} - - let onMouseClickEventSuscriptionId - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseClickEventSuscriptionId) - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.parentContainer = undefined - - thisObject.status = undefined - upPosition = undefined - downPosition = undefined - transitionPosition = undefined - } - - function initialize() { - thisObject.container.frame.width = 12 - thisObject.container.frame.height = 12 - - let position = { - x: thisObject.container.frame.parentFrame.width * 5.75 / 8 - thisObject.container.frame.width / 2, - y: 40 * 4 / 8 - thisObject.container.frame.height / 2 - } - - thisObject.container.frame.position = position - - upPosition.x = thisObject.parentContainer.frame.position.x - upPosition.y = thisObject.parentContainer.frame.position.y - - downPosition.x = thisObject.parentContainer.frame.position.x - downPosition.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - - transitionPosition.x = upPosition.x - transitionPosition.y = upPosition.y - - /* Lets listen to our own events to react when we have a Mouse Click */ - onMouseClickEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - - isInitialized = true - } - - function setStatus(value) { - if (value === 'up' && thisObject.status === 'down') { - thisObject.status = 'going up' - } - if (value === 'down' && thisObject.status === 'up') { - thisObject.status = 'going down' - } - } - - function onMouseClick(event) { - if (thisObject.status === 'up') { - transitionPosition.x = upPosition.x - transitionPosition.y = upPosition.y - - thisObject.status = 'going down' - } else { - transitionPosition.x = downPosition.x - transitionPosition.y = downPosition.y - - thisObject.status = 'going up' - } - } - - function physics() { - if (isInitialized === false) { return } - - upPosition.x = thisObject.parentContainer.frame.position.x - upPosition.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.y - - downPosition.x = thisObject.parentContainer.frame.position.x - downPosition.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - - if (thisObject.status === 'going down') { - if (transitionPosition.y < downPosition.y) { - transitionPosition.y = transitionPosition.y + 50 - thisObject.parentContainer.frame.position.y = transitionPosition.y - } else { - thisObject.parentContainer.frame.position.y = downPosition.y - thisObject.status = 'down' - } - } - if (thisObject.status === 'going up') { - if (transitionPosition.y > upPosition.y) { - transitionPosition.y = transitionPosition.y - 50 - thisObject.parentContainer.frame.position.y = transitionPosition.y - } else { - thisObject.parentContainer.frame.position.y = upPosition.y - thisObject.status = 'up' - } - } - } - - function draw() { - if (isInitialized === false) { return } - - drawButton() - } - - function getContainer(point, purpose) { - let container - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function drawButton() { - let point1 - let point2 - let point3 - - switch (thisObject.status) { - case 'up': { - point1 = { - x: 3, - y: 3 - } - - point2 = { - x: thisObject.container.frame.width - 3, - y: 3 - } - - point3 = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height - 3 - } - break - } - - case 'going down': { - point1 = { - x: 4, - y: 4 - } - - point2 = { - x: thisObject.container.frame.width - 4, - y: 4 - } - - point3 = { - x: thisObject.container.frame.width / 2, - y: thisObject.container.frame.height - 4 - } - break - } - - case 'going up': { - point1 = { - x: 4, - y: thisObject.container.frame.height - 4 - } - - point2 = { - x: thisObject.container.frame.width - 4, - y: thisObject.container.frame.height - 4 - } - - point3 = { - x: thisObject.container.frame.width / 2, - y: 4 - } - break - } - - case 'down': { - point1 = { - x: 3, - y: thisObject.container.frame.height - 3 - } - - point2 = { - x: thisObject.container.frame.width - 3, - y: thisObject.container.frame.height - 3 - } - - point3 = { - x: thisObject.container.frame.width / 2, - y: 3 - } - break - } - } - - /* Now the transformations. */ - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - - if (thisObject.fitFunction !== undefined) { - point1 = thisObject.fitFunction(point1) - point2 = thisObject.fitFunction(point2) - point3 = thisObject.fitFunction(point3) - } - - /* Lets start the drawing. */ - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(250, 250, 250, 1)' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - - browserCanvasContext.fillStyle = 'rgba(250, 250, 250, 1)' - browserCanvasContext.fill() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListItem.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListItem.js deleted file mode 100644 index a79306b39..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListItem.js +++ /dev/null @@ -1,109 +0,0 @@ -function newListItem() { - const MODULE_NAME = 'List Item' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - container: undefined, - fitFunction: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize() - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = false - thisObject.container.detectMouseOver = true - thisObject.container.isClickeable = true - thisObject.container.frame.width = SIDE_PANEL_WIDTH * 0.75 - thisObject.container.frame.height = SIDE_PANEL_WIDTH * 0.75 - - let name - let project - let type - - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - let onMouseClickEventSubscriptionId - - let isMouseOver = false - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - thisObject.container.eventHandler.stopListening(onMouseClickEventSubscriptionId) - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - } - - function initialize(pName, pProject, pType) { - name = pName - project = pProject - type = pType - - onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - onMouseClickEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - } - - function getContainer(point) { - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } - } - - function onMouseOver(event) { - isMouseOver = true - } - - function onMouseNotOver() { - isMouseOver = false - } - - function onMouseClick(event) { - UI.projects.superalgos.spaces.designSpace.workspace.replaceWorkspaceByLoadingOne(project, name) - } - - function physics() { - - } - - function draw() { - let icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndType('Superalgos', type) - let backgroundColor = UI_COLOR.BLACK - let labelColor - - const RED_LINE_HIGHT = 4 - const OPACITY = 1 - - let params = { - cornerRadius: 0, - lineWidth: 1, - container: thisObject.container, - borderColor: UI_COLOR.RUSTED_RED, - castShadow: false, - backgroundColor: backgroundColor, - opacity: OPACITY - } - - if (isMouseOver === false) { - labelColor = UI_COLOR.WHITE - } else { - labelColor = UI_COLOR.TITANIUM_YELLOW - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - UI.projects.superalgos.utilities.drawPrint.drawLabel(name, 1 / 2, 3.0 / 10, -5, 0, 15, thisObject.container, labelColor) - UI.projects.superalgos.utilities.drawPrint.drawLabel(type, 1 / 2, 7.2 / 10, -5, 0, 15, thisObject.container, labelColor) - UI.projects.superalgos.utilities.drawPrint.drawIcon(icon, 1 / 2, 1 / 2, 0, 0, 80, thisObject.container) - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListView.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListView.js deleted file mode 100644 index 653fe2c2f..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/ListView.js +++ /dev/null @@ -1,270 +0,0 @@ -function newListView() { - const MODULE_NAME = 'List View' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - fitFunction: undefined, - container: undefined, - listItems: [], - payload: undefined, - isVisible: false, - resize: resize, - turnOn: turnOn, - turnOff: turnOff, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - thisObject.container = newContainer() - thisObject.container.initialize() - thisObject.container.isDraggeable = false - thisObject.container.isWheelable = true - thisObject.container.detectMouseOver = true - - let isInitialized = false - - let listItemsMap = new Map() - let visibleListItems = [] - let firstVisibleListItem - - let headerHeight = 40 - let footerHeight = 30 - let listItemHeight = SIDE_PANEL_WIDTH * 0.75 - - let posibleVisibleListItems - - let itemSeparation - - let onMouseWheelEventSuscriptionId - - return thisObject - - function finalize() { - thisObject.container.eventHandler.stopListening(onMouseWheelEventSuscriptionId) - - listItemsMap = undefined - visibleListItems = undefined - - thisObject.container.finalize() - thisObject.container = undefined - - thisObject.payload = undefined - thisObject = undefined - } - - function initialize() { - thisObject.container.name = MODULE_NAME - thisObject.container.frame.containerName = thisObject.container.name - thisObject.container.frame.width = SIDE_PANEL_WIDTH * 0.75 - - let position = { // Default position - x: SIDE_PANEL_WIDTH * 0.25 / 2, - y: 20 - } - - thisObject.container.frame.position = position - - onMouseWheelEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel) - - resize() - turnOn() - } - - function resize() { - thisObject.container.frame.height = browserCanvas.height - thisObject.container.frame.position.y * 2 - - let spaceForListItems = (thisObject.container.frame.height - headerHeight - footerHeight) - posibleVisibleListItems = Math.trunc(spaceForListItems / (listItemHeight)) - if ((posibleVisibleListItems - 1) !== 0) { - itemSeparation = (spaceForListItems - listItemHeight * posibleVisibleListItems) / (posibleVisibleListItems - 1) - } else { - itemSeparation = 0 - } - } - - function turnOn() { - firstVisibleListItem = 1 - - callWebServer(undefined, 'ListWorkspaces', onResponse) - - function onResponse(err, text) { - if (err && err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> Could not load the list of your workspaces from the backend. ') } - return - } - - let workspacelist = JSON.parse(text) - thisObject.listItems = [] - for (let i = 0; i < workspacelist.length; i++) { - let project = workspacelist[i][0] - let workspace = workspacelist[i][1].replace('.json', '') - let listItem = newListItem() - listItem.initialize(workspace, project, 'Workspace') - listItem.container.connectToParent(thisObject.container, false, false) - - thisObject.listItems.push(listItem) - } - calculateVisbleListItems() - isInitialized = true - thisObject.isVisible = true - } - } - - function turnOff() { - thisObject.isVisible = false - } - - function onMouseWheel(event) { - delta = event.wheelDelta - if (delta > 0) { - delta = -1 - } else { - delta = 1 - } - - firstVisibleListItem = firstVisibleListItem + delta - - calculateVisbleListItems() - } - - function calculateVisbleListItems() { - let availableSlots = Math.trunc(posibleVisibleListItems) - - if (firstVisibleListItem < 1) { firstVisibleListItem = 1 } - if (firstVisibleListItem > (thisObject.listItems.length - availableSlots + 1)) { firstVisibleListItem = thisObject.listItems.length - availableSlots + 1 } - - visibleListItems = [] - - for (let i = 0; i < thisObject.listItems.length; i++) { - if (i + 1 >= firstVisibleListItem && i + 1 < firstVisibleListItem + availableSlots) { - let listItem = thisObject.listItems[i] - - listItem.container.frame.position.x = 0 - listItem.container.frame.position.y = (listItemHeight + itemSeparation) * visibleListItems.length + headerHeight - - /* Add to Visible Product Array */ - visibleListItems.push(listItem) - } - } - } - - function getContainer(point, purpose) { - if (isInitialized === false || thisObject.isVisible === false) { return } - let container - - /* First we check if thisObject point is inside thisObject space. */ - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - /* Now we see which is the inner most container that has it */ - for (let i = 0; i < visibleListItems.length; i++) { - container = visibleListItems[i].getContainer(point) - - if (container !== undefined) { - if (container.isForThisPurpose(purpose) === true) { - return container - } - } - } - - return thisObject.container - } - } - - function childrenPhysics() { - for (let i = 0; i < thisObject.listItems.length; i++) { - let listItem = thisObject.listItems[i] - listItem.physics() - } - } - - function physics() { - if (isInitialized === false || thisObject.isVisible === false) { return } - childrenPhysics() - } - - function draw() { - if (isInitialized === false || thisObject.isVisible === false) { return } - - drawBackground() - drawChildren() - drawScrollBar() - } - - function drawChildren() { - for (let i = 0; i < visibleListItems.length; i++) { - let listItem = visibleListItems[i] - if (listItem !== undefined) { - listItem.draw() - } - } - } - - function drawBackground() { - let label = 'Available Workspaces' - - let backgroundColor = UI_COLOR.WHITE - let params = { - cornerRadius: 5, - lineWidth: 1, - container: thisObject.container, - borderColor: UI_COLOR.RUSTED_RED, - castShadow: false, - backgroundColor: backgroundColor, - opacity: 1 - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - UI.projects.superalgos.utilities.drawPrint.drawLabel(label, 1 / 2, 0, 0, 25, 15, thisObject.container, UI_COLOR.BLACK) - } - - function drawScrollBar() { - if (thisObject.listItems.length > posibleVisibleListItems && posibleVisibleListItems > 0) { - let xOffset = 4 - let barTopPoint = { - x: thisObject.container.frame.width - xOffset, - y: headerHeight - } - let barBottomPoint = { - x: thisObject.container.frame.width - xOffset, - y: thisObject.container.frame.height - footerHeight - } - let ratio = (posibleVisibleListItems * listItemHeight + (posibleVisibleListItems - 1) * itemSeparation) / (thisObject.listItems.length * listItemHeight + (thisObject.listItems.length - 1) * itemSeparation) - let handleHeight = posibleVisibleListItems * (listItemHeight * ratio) + (posibleVisibleListItems - 1) * itemSeparation * ratio - let handleTopPoint = { - x: thisObject.container.frame.width - xOffset, - y: headerHeight + (listItemHeight * ratio * (firstVisibleListItem - 1) + itemSeparation * ratio * (firstVisibleListItem - 1)) - } - let handleBottomPoint = { - x: thisObject.container.frame.width - xOffset, - y: handleTopPoint.y + handleHeight - } - barTopPoint = thisObject.container.frame.frameThisPoint(barTopPoint) - barBottomPoint = thisObject.container.frame.frameThisPoint(barBottomPoint) - handleTopPoint = thisObject.container.frame.frameThisPoint(handleTopPoint) - handleBottomPoint = thisObject.container.frame.frameThisPoint(handleBottomPoint) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(barTopPoint.x, barTopPoint.y) - browserCanvasContext.lineTo(barBottomPoint.x, barBottomPoint.y) - browserCanvasContext.closePath() - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 1 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + 1 + ')' - browserCanvasContext.stroke() - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(handleTopPoint.x, handleTopPoint.y) - browserCanvasContext.lineTo(handleBottomPoint.x, handleBottomPoint.y) - browserCanvasContext.closePath() - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 4 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + 1 + ')' - browserCanvasContext.stroke() - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SidePanelTab.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SidePanelTab.js deleted file mode 100644 index 3b86f7c2d..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SidePanelTab.js +++ /dev/null @@ -1,336 +0,0 @@ -function newSidePanelTab() { - const MODULE_NAME = 'Side Panel Tab' - let thisObject = { - screenside: undefined, - pointerDirection: undefined, - container: undefined, - index: 0, - open: open, - close: close, - resize: resize, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize - } - - const TAB_WIDTH = 25 - const TAB_HEIGHT = TOP_SPACE_HEIGHT * 2 - const ANIMATION_STEP = 100 - - let isInitialized = false - let animation = 'none' - let ORIGINAL_PARENT_POSITON - let xOffset = 0 - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - - return thisObject - - function initialize(screenside, index) { - thisObject.screenside = screenside - if (index !== undefined) { - thisObject.index = index - } - - switch (thisObject.screenside) { - case 'left': { - thisObject.pointerDirection = 'left' - break - } - case 'right': { - thisObject.pointerDirection = 'right' - break - } - } - thisObject.container.frame.width = TAB_WIDTH - thisObject.container.frame.height = TAB_HEIGHT - - thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick) - resize() - isInitialized = true - } - - function resize() { - switch (thisObject.screenside) { - case 'left': { - thisObject.container.frame.position.x = 0 + thisObject.container.parentContainer.frame.width - break - } - case 'right': { - thisObject.container.frame.position.x = 0 - TAB_WIDTH - break - } - } - - ORIGINAL_PARENT_POSITON = thisObject.container.parentContainer.frame.position.x - setClosed() - } - - function open() { - animation = 'opening' - thisObject.container.eventHandler.raiseEvent('opening') - } - - function close() { - animation = 'closing' - thisObject.container.eventHandler.raiseEvent('closing') - } - - function onMouseClick(event) { - switch (thisObject.screenside) { - case 'left': { - if (thisObject.pointerDirection === 'left') { - animation = 'opening' - thisObject.container.eventHandler.raiseEvent('opening') - } else { - animation = 'closing' - thisObject.container.eventHandler.raiseEvent('closing') - } - break - } - case 'right': { - if (thisObject.pointerDirection === 'left') { - animation = 'closing' - thisObject.container.eventHandler.raiseEvent('closing') - } else { - animation = 'opening' - thisObject.container.eventHandler.raiseEvent('opening') - } - break - } - } - } - - function getContainer(point) { - let container - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - if (isInitialized === false) { return } - positionPhysics() - animate() - } - - function positionPhysics() { - if (UI.projects.superalgos.spaces.chartingSpace.viewport !== undefined) { - thisObject.container.frame.position.y = browserCanvas.height / 2 - TAB_HEIGHT / 2 // TOP_SPACE_HEIGHT + UI.projects.superalgos.spaces.chartingSpace.viewport.marginAmount + TAB_HEIGHT * thisObject.index - } - } - - function draw() { - if (isInitialized === false) { return } - borders() - arrow() - } - - function animate() { - - if (animation === 'opening') { - xOffset = xOffset + ANIMATION_STEP - switch (thisObject.screenside) { - case 'left': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON + xOffset - break - } - case 'right': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON - xOffset - break - } - } - - if (xOffset >= thisObject.container.parentContainer.frame.width) { - setOpened() - thisObject.container.eventHandler.raiseEvent('opened') - } - } - - if (animation === 'closing') { - xOffset = xOffset - ANIMATION_STEP - switch (thisObject.screenside) { - case 'left': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON + xOffset - break - } - case 'right': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON - xOffset - break - } - } - - if (xOffset <= 0) { - setClosed() - thisObject.container.eventHandler.raiseEvent('closed') - } - } - } - - function setOpened() { - animation = 'none' - xOffset = thisObject.container.parentContainer.frame.width - thisObject.container.parentContainer.status = 'visible' - switch (thisObject.screenside) { - case 'left': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON + xOffset - thisObject.pointerDirection = 'right' - break - } - case 'right': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON - xOffset - thisObject.pointerDirection = 'left' - break - } - } - } - function setClosed() { - animation = 'none' - xOffset = 0 - thisObject.container.parentContainer.status = 'hidden' - switch (thisObject.screenside) { - case 'left': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON - thisObject.pointerDirection = 'left' - break - } - case 'right': { - thisObject.container.parentContainer.frame.position.x = ORIGINAL_PARENT_POSITON - thisObject.pointerDirection = 'right' - break - } - } - } - - function arrow() { - let point1 - let point2 - let point3 - - if (thisObject.pointerDirection === 'left') { - point1 = { - x: TAB_WIDTH * 3.5 / 10, - y: TAB_HEIGHT * 12.5 / 30 - } - - point2 = { - x: TAB_WIDTH * 6.5 / 10, - y: TAB_HEIGHT * 15 / 30 - } - - point3 = { - x: TAB_WIDTH * 3.5 / 10, - y: TAB_HEIGHT * 17.5 / 30 - } - } else { - point1 = { - x: TAB_WIDTH * 6.5 / 10, - y: TAB_HEIGHT * 12.5 / 30 - } - - point2 = { - x: TAB_WIDTH * 3.5 / 10, - y: TAB_HEIGHT * 15 / 30 - } - - point3 = { - x: TAB_WIDTH * 6.5 / 10, - y: TAB_HEIGHT * 17.5 / 30 - } - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.closePath() - - let opacity = 1 - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREY + ', ' + opacity + '' - browserCanvasContext.fill() - } - - function borders() { - let point1 - let point2 - let point3 - let point4 - - point1 = { - x: 0, - y: 0 - } - - point2 = { - x: TAB_WIDTH, - y: 0 - } - - point3 = { - x: TAB_WIDTH, - y: TAB_HEIGHT - } - - point4 = { - x: 0, - y: TAB_HEIGHT - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - point4 = thisObject.container.frame.frameThisPoint(point4) - - let opacity - - /* Shadow */ - - for (let i = 0; i <= 5; i++) { - opacity = 1 - (i / 100) - 0.93 - - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x + i, point1.y + i) - browserCanvasContext.lineTo(point2.x + i, point2.y + i) - browserCanvasContext.lineTo(point3.x + i, point3.y + i) - browserCanvasContext.lineTo(point4.x + i, point4.y + i) - browserCanvasContext.lineTo(point1.x + i, point1.y + i) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + opacity + '' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - } - - /* Background and Border */ - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - opacity = 1 - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + '' - browserCanvasContext.fill() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + opacity + '' - browserCanvasContext.lineWidth = 0.3 - browserCanvasContext.stroke() - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SideSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SideSpace.js deleted file mode 100644 index deba8d0f4..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Side-Space/SideSpace.js +++ /dev/null @@ -1,168 +0,0 @@ -function newSuperalgosSideSpace() { - const MODULE_NAME = 'Side Space' - let thisObject = { - sidePanelTab: undefined, - container: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = true - thisObject.container.status = 'hidden' - - let listView - - resize() - - let openingEventSubscriptionId - let closedEventSubscriptionId - let browserResizedEventSubscriptionId - return thisObject - - function initialize() { - thisObject.sidePanelTab = newSidePanelTab() - thisObject.sidePanelTab.container.connectToParent(thisObject.container, false, false) - thisObject.sidePanelTab.initialize('left') - - browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - - initializeListView() - isInitialized = true - } - - function finalize() { - canvas.eventHandler.stopListening(browserResizedEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(openingEventSubscriptionId) - thisObject.sidePanelTab.container.eventHandler.stopListening(closedEventSubscriptionId) - } - - function initializeListView() { - listView = newListView() - listView.initialize() - listView.container.connectToParent(thisObject.container, false, false) - openingEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('opening', listView.turnOn) - closedEventSubscriptionId = thisObject.sidePanelTab.container.eventHandler.listenToEvent('closed', listView.turnOff) - } - - function resize() { - thisObject.container.frame.width = SIDE_PANEL_WIDTH - thisObject.container.frame.height = browserCanvas.height // - TOP_SPACE_HEIGHT - thisObject.container.frame.position.x = -SIDE_PANEL_WIDTH - thisObject.container.frame.position.y = 0 // TOP_SPACE_HEIGHT - - if (listView !== undefined) { - listView.resize() - } - - if (thisObject.sidePanelTab !== undefined) { - thisObject.sidePanelTab.resize() - } - } - - function getContainer(point, purpose) { - let container - - container = thisObject.sidePanelTab.getContainer(point, purpose) - if (container !== undefined) { return container } - - container = listView.getContainer(point, purpose) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - thisObject.sidePanelTab.physics() - listView.physics() - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - if (isInitialized === false) { return } - borders() - thisObject.sidePanelTab.draw() - listView.draw() - } - - function borders() { - let point1 - let point2 - let point3 - let point4 - - point1 = { - x: 0, - y: 0 - } - - point2 = { - x: thisObject.container.frame.width, - y: 0 - } - - point3 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - } - - point4 = { - x: 0, - y: thisObject.container.frame.height - } - - point1 = thisObject.container.frame.frameThisPoint(point1) - point2 = thisObject.container.frame.frameThisPoint(point2) - point3 = thisObject.container.frame.frameThisPoint(point3) - point4 = thisObject.container.frame.frameThisPoint(point4) - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - let opacity = 1 - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + opacity + '' - browserCanvasContext.fill() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREY + ', ' + opacity + '' - browserCanvasContext.lineWidth = 0.3 - browserCanvasContext.stroke() - - /* Shadow */ - - if (thisObject.container.status !== 'hidden') { - for (let i = 0; i <= 30; i++) { - opacity = 1 - (i / 300) - 0.95 - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point2.x + i, point2.y) - browserCanvasContext.lineTo(point3.x + i, point3.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + opacity + '' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Top-Space/TopSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Top-Space/TopSpace.js deleted file mode 100644 index aaa676871..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Top-Space/TopSpace.js +++ /dev/null @@ -1,109 +0,0 @@ - -function newSuperalgosTopSpace() { - let thisObject = { - container: undefined, - draw: draw, - getContainer: getContainer, - initialize: initialize - } - - thisObject.container = newContainer() - thisObject.container.initialize() - - resize() - - thisObject.container.isDraggeable = false - let backgroundImage - let logoImage - return thisObject - - function initialize() { - canvas.eventHandler.listenToEvent('Browser Resized', resize) - - backgroundImage = new Image() - logoImage = new Image() - - loadImage('superalgos-header-background', backgroundImage) - loadImage('superalgos-logo-for-color-background', logoImage) - - function loadImage(name, image) { - const PATH = 'Images/' - - image.onload = onImageLoad - image.fileName = name - - function onImageLoad() { - image.canDraw = true - } - image.src = PATH + name + '.png' - } - } - - function resize() { - thisObject.container.frame.width = browserCanvas.width - thisObject.container.frame.height = TOP_SPACE_HEIGHT - - thisObject.container.frame.position.x = 0 - try { - thisObject.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - } catch (e) { } - } - - function getContainer(point) { - - } - - function draw() { - if (CAN_SPACES_DRAW === false) { return } - thisObject.container.frame.draw(false, false) - - drawBackground() - return - } - - function drawBackground() { - /* Solid Color */ - let opacity = 1 - browserCanvasContext.beginPath() - browserCanvasContext.rect(0, 0, thisObject.container.frame.width, thisObject.container.frame.height) - if (ARE_WE_RECORDING_A_VIDEO === true) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')' - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')' - } - browserCanvasContext.closePath() - browserCanvasContext.fill() - - /* Background Image */ - if (backgroundImage !== undefined) { - if (backgroundImage.canDraw === true) { - let imagePosition = { - x: 0, - y: 0 - } - - browserCanvasContext.drawImage( - backgroundImage, imagePosition.x, - imagePosition.y, - browserCanvas.width, - TOP_SPACE_HEIGHT - 2) - } - } - - /* Logo Image */ - if (logoImage !== undefined) { - if (logoImage.canDraw === true) { - let imagePosition = { - x: 10, - y: 0 - } - - browserCanvasContext.drawImage( - logoImage, imagePosition.x, - imagePosition.y, - 215, - TOP_SPACE_HEIGHT - 2) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Tutorial-Space/TutorialSpace.js b/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Tutorial-Space/TutorialSpace.js deleted file mode 100644 index 0091438f8..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Spaces/Tutorial-Space/TutorialSpace.js +++ /dev/null @@ -1,1229 +0,0 @@ -function newSuperalgosTutorialSpace() { - const MODULE_NAME = 'Tutorial Space' - let thisObject = { - stop: stop, - skip: skip, - previous: previous, - next: next, - playTutorial: playTutorial, - resumeTutorial: resumeTutorial, - playTutorialTopic: playTutorialTopic, - resumeTutorialTopic: resumeTutorialTopic, - playTutorialStep: playTutorialStep, - resumeTutorialStep: resumeTutorialStep, - resetTutorialProgress: resetTutorialProgress, - container: undefined, - physics: physics, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - } - - let isInitialized = false - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - thisObject.container.isClickeable = true - thisObject.container.isDraggeable = false - thisObject.container.detectMouseOver = true - thisObject.container.status = 'hidden' - - resize() - - let browserResizedEventSubscriptionId - - let tutorialRootNode - let currentNode - let currentStatus = 'Stopped' - let navigationStack - - let tutorialDiv = document.getElementById('tutorialDiv') - let tutorialFormDiv = document.getElementById('tutorialFormDiv') - let htmlGif = document.createElement("IMG") - let currentGifName = 'Never Set' - let newGifName = 'Never Set' - let htmlImage = document.createElement("IMG") - let currentImageName = 'Never Set' - let newImageName = 'Never Set' - let currentConfig - let newConfig - let currentDocumentationURL - let resumeModeActivated // In this mode, we skip all the node which status is 'Done' - let lastExecutedAction = '' - let actionCounter = 0 - let forcingFocus = false - let currentZoomStep = 0 - let viewportCentered = false - let repositionAtTimeMachineCounter = 0 - let positionAtNodeCounter = 0 - let timeMachineKeyPressedCounter = 0 - let keyPressedCounter = 0 - let sliderCounter = 0 - let changeNodeConfigCounter = 0 - let changeNodeConfigCounterWithEval = 0 - let documentationCounter = 0 - let batchConfigChangesCounter = 0 - let workspacesCounter = 0 - - return thisObject - - function initialize() { - browserResizedEventSubscriptionId = canvas.eventHandler.listenToEvent('Browser Resized', resize) - isInitialized = true - } - - function finalize() { - canvas.eventHandler.stopListening(browserResizedEventSubscriptionId) - - tutorialRootNode = undefined - currentNode = undefined - navigationStack = undefined - - tutorialDiv = undefined - tutorialFormDiv = undefined - image = undefined - gif = undefined - } - - function resize() { - thisObject.container.frame.width = 0 - thisObject.container.frame.height = 0 - } - - function getContainer(point, purpose) { - let container - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - return thisObject.container - } else { - return undefined - } - } - - function physics() { - if (currentNode === undefined) { return } - - switch (currentStatus) { - case 'Stopped': { - makeInvisible() - currentNode = undefined - break - } - case 'Playing Tutorial': { - makeVsible() - break - } - case 'Playing Topic': { - makeVsible() - break - } - case 'Playing Step': { - makeVsible() - break - } - } - - keyPressed() - checkPressButton() - checkGif() - checkImage() - checkDocumentation() - checkWorkspaces() - checkSlider() - checkReference() - checkViewportZoom() - checkViewportZoomAtCenter() - return - - function keyPressed() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - if ( - config.keyPressed !== undefined - ) { - keyPressedCounter++ - if (keyPressedCounter === 10) { - let event = { - metaKey: config.keyPressed.metaKey, - shiftKey: config.keyPressed.shiftKey, - ctrlKey: config.keyPressed.ctrlKey, - code: config.keyPressed.code, - key: config.keyPressed.key - } - canvas.onKeyDown(event, true) - } - } - } - - function checkViewportZoom() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - if (config.viewportZoom !== undefined) { - let totalZoomSteps = config.viewportZoom - let delta - if (totalZoomSteps > 0) { - delta = 1 - } else { - delta = -1 - } - currentZoomStep = currentZoomStep + delta - let event = { - delta: delta - } - if (totalZoomSteps > 0) { - if (currentZoomStep < totalZoomSteps) { - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - } - } else { - if (currentZoomStep > totalZoomSteps) { - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - } - } - } - } - - function checkViewportZoomAtCenter() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - if (config.viewportZoomAtCenter !== undefined) { - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomAtCenter(config.viewportZoomAtCenter) - } - } - - function checkPressButton() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - if (config.pressButton === undefined || config.pressButton === "") { - return - } - /* Remove this item from the navigation stack. */ - navigationStack.splice(navigationStack.length - 1) - switch (config.pressButton) { - case "Stop": { - stop() - return - } - case "Skip": { - skip() - return - } - case "Previous": { - previous() - return - } - case "Next": { - next() - return - } - } - } - - function checkGif() { - let tutorialGifDiv = document.getElementById('tutorialGifDiv') - if (tutorialGifDiv !== null && tutorialGifDiv !== undefined) { - tutorialGifDiv.appendChild(htmlGif) - } - - if (currentGifName === newGifName) { return } - currentGifName = newGifName - htmlGif.src = 'Images/Tutorial/Gifs/' + currentGifName + '.gif' - htmlGif.width = "400" - htmlGif.height = "580" - } - - function checkImage() { - let tutorialImageDiv = document.getElementById('tutorialImageDiv') - if (tutorialImageDiv !== null && tutorialImageDiv !== undefined) { - tutorialImageDiv.appendChild(htmlImage) - } - - if (currentImageName === newImageName) { return } - currentImageName = newImageName - let webParam - if (currentImageName.indexOf('/') >= 0) { - webParam = 'Icons/' + currentImageName + '.png' - } else { - webParam = 'Icons/' + 'Superalgos' + '/' + currentImageName + '.png' - } - htmlImage.src = webParam - htmlImage.width = "100" - htmlImage.height = "100" - } - - function checkDocumentation() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - let newDocumentationURL = config.documentationURL - documentationCounter++ - if (documentationCounter === 10) { - if (newDocumentationURL === undefined) { - /* - The doc panel will remain as it is, and the user will be free to open or close it at will. - */ - return - } - if (newDocumentationURL === "") { - /* - This forces the tutorial to close the documentation panel and to keep it closed. - */ - UI.projects.superalgos.spaces.docSpace.sidePanelTab.close() - return - } - UI.projects.superalgos.spaces.docSpace.sidePanelTab.open() - if (newDocumentationURL === currentDocumentationURL) { return } - - currentDocumentationURL = newDocumentationURL - UI.projects.superalgos.spaces.docSpace.navigateTo(currentDocumentationURL) - } - } - - function checkWorkspaces() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - workspacesCounter++ - if (config.workspaces === undefined) { - /* - The worspaces panel will remain as it is, and the user will be free to open or close it at will. - */ - return - } - if (config.workspaces === "" || config.workspaces === "Close") { - /* - This forces the tutorial to close the workspaces panel and to keep it closed. - */ - if (workspacesCounter === 5) { - UI.projects.superalgos.spaces.sideSpace.sidePanelTab.close() - } - return - } - if (config.workspaces === "Open") { - /* - This forces the tutorial to open the workspaces panel and to keep it closed. - */ - if (workspacesCounter === 5) { - UI.projects.superalgos.spaces.sideSpace.sidePanelTab.open() - } - return - } - } - - function checkSlider() { - if (currentNode === undefined) { return } - let config = JSON.parse(currentNode.config) - if (config.slider === undefined) { - /* - The cockpit space will remain where it is. The user is free to move it. - */ - return - } - sliderCounter++ - if (sliderCounter === 10 || sliderCounter === 100) { - - switch (config.slider) { - case "toTop": { - /* - This forces the tutorial to close the charting space and to keep it closed. - */ - UI.projects.superalgos.spaces.cockpitSpace.toTop() - return - } - case "toMiddle": { - /* - This forces the tutorial to share the screen half with the designer and half - with the charting space and force it in that way. - */ - UI.projects.superalgos.spaces.cockpitSpace.toMiddle() - return - } - case "toBottom": { - /* - This forces the tutorial to fully open the charting space and to keep it open. - */ - UI.projects.superalgos.spaces.cockpitSpace.toBottom() - return - } - } - } - } - - function checkReference() { - /* - If there is a reference parent defined, we will highlight it - and move the designer so that that node be at the center of the screen. - */ - if (currentNode !== undefined) { - if (currentNode.payload !== undefined) { - if (currentNode.payload.referenceParent !== undefined) { - if (currentNode.payload.referenceParent.payload !== undefined) { - if (currentNode.payload.referenceParent.payload.uiObject !== undefined) { - let config = JSON.parse(currentNode.config) - if ( - config.positionAtReferenceParent === true - ) { - /* - This moves the Designs Space so that the referenced node is at the center of the screen. - */ - positionAtNodeCounter++ - if (positionAtNodeCounter === 1) { - currentNode.payload.referenceParent.payload.floatingObject.unCollapseParent() - } - if (positionAtNodeCounter < 100) { - UI.projects.superalgos.spaces.floatingSpace.positionAtNode(currentNode.payload.referenceParent) - } - } - if ( - config.highlightReferenceParent === true - ) { - currentNode.payload.referenceParent.payload.uiObject.highlight() - } - if ( - config.highlightReferenceParent === true - ) { - currentNode.payload.referenceParent.payload.uiObject.highlight() - } - if ( - config.setErrorMessageReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setErrorMessage(config.setErrorMessageReferenceParent) - } - if ( - config.setWarningMessageReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setWarningMessage(config.setWarningMessageReferenceParent) - } - if ( - config.setInfoMessageReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setInfoMessage(config.setInfoMessageReferenceParent) - } - if ( - config.setValueReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setValue(config.setValueReferenceParent) - } - if ( - config.setPercentageReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setPercentage(config.setPercentageReferenceParent) - } - if ( - config.setStatusReferenceParent !== undefined - ) { - currentNode.payload.referenceParent.payload.uiObject.setStatus(config.setStatusReferenceParent) - } - if ( - config.setFocusReferenceParent === true - ) { - currentNode.payload.referenceParent.payload.floatingObject.forceFocus() - forcingFocus = true - } - if ( - config.batchConfigChangesReferenceParent !== undefined - ) { - batchConfigChangesCounter++ - if (batchConfigChangesCounter === 5 || batchConfigChangesCounter === 10) { - /* - Here we are going to process an array of different changes to descendents - of the reference parent. The end user needs to specify a nodePath to the - descendent and an object with the properties and new values that want to - change at each descendent. The nodePath route starts at the object - referenceParent. - */ - let referenceParent = currentNode.payload.referenceParent - for (let i = 0; i < config.batchConfigChangesReferenceParent.length; i++) { - let arrayItem = config.batchConfigChangesReferenceParent[i] - let nodePath = arrayItem.nodePath - let properties = arrayItem.properties - - let childNode - try { - childNode = eval(nodePath) - } catch (err) { - console.log(MODULE_NAME + ' -> The nodePath provided is not good. -> nodePath = ' + nodePath) - let splittedPath = nodePath.split('.') - let partialPath = '' - let separator = '' - for (let j = 0; j < splittedPath.length; j++) { - let part = splittedPath[j] - let partialNode - let splittedParts = part.split('[') - if (splittedParts.length > 1) { - partialNode = eval(partialPath + separator + splittedParts[0]) - if (partialNode === undefined) { - console.log(MODULE_NAME + ' -> This part can not be undefined -> part = ' + splittedParts[0]) - currentNode.payload.uiObject.setErrorMessage('Node Path is incorrect. See console log for details.') - break - } - } - partialPath = partialPath + separator + part - separator = '.' - - partialNode = eval(partialPath) - if (partialNode === undefined) { - console.log(MODULE_NAME + ' -> This part can not be undefined -> part = ' + part) - currentNode.payload.uiObject.setErrorMessage('Node Path is incorrect. See console log for details.') - break - } - } - continue - } - let nodeConfig = JSON.parse(childNode.config) - for (const property in properties) { - nodeConfig[property] = properties[property] - } - childNode.config = JSON.stringify(nodeConfig, undefined, 5) - } - } - } - if ( - config.changeNodeConfigReferenceParent !== undefined - ) { - changeNodeConfigCounter++ - if (changeNodeConfigCounter === 5) { - let nodeConfig = JSON.parse(currentNode.payload.referenceParent.config) - for (const property in config.changeNodeConfigReferenceParent) { - nodeConfig[property] = config.changeNodeConfigReferenceParent[property] - } - currentNode.payload.referenceParent.config = JSON.stringify(nodeConfig) - } - } - if ( - config.changeNodeConfigWithEvalReferenceParent !== undefined - ) { - changeNodeConfigCounterWithEval++ - if (changeNodeConfigCounterWithEval === 5 || changeNodeConfigCounterWithEval === 10) { - let nodeConfig = JSON.parse(currentNode.payload.referenceParent.config) - for (const property in config.changeNodeConfigWithEvalReferenceParent) { - nodeConfig[property] = eval(config.changeNodeConfigWithEvalReferenceParent[property]) - } - currentNode.payload.referenceParent.config = JSON.stringify(nodeConfig) - } - } - if ( - config.menuActionReferenceParent !== undefined - ) { - /* - Some actions needs a little delay because they depend on animations to happen. - For that reason, we will count until 10 before executing actions from tutorial. - */ - actionCounter++ - if (actionCounter > 10) { - if (config.menuActionReferenceParent + currentNode.id !== lastExecutedAction) { - currentNode.payload.referenceParent.payload.uiObject.menu.internalClick(config.menuActionReferenceParent) - lastExecutedAction = config.menuActionReferenceParent + currentNode.id - } - } - } else { - lastExecutedAction = "" - } - if ( - config.keyPressedTimeMachineReferenceParent !== undefined - ) { - if (currentNode.payload.referenceParent.type === 'Time Machine') { - let timeMachine = UI.projects.superalgos.spaces.chartingSpace.findTimeMachine(currentNode.payload.referenceParent) - if (timeMachine !== undefined) { - timeMachineKeyPressedCounter++ - if (timeMachineKeyPressedCounter === 10) { - let event = { - metaKey: config.keyPressedTimeMachineReferenceParent.metaKey, - shiftKey: config.keyPressedTimeMachineReferenceParent.shiftKey, - ctrlKey: config.keyPressedTimeMachineReferenceParent.ctrlKey, - code: config.keyPressedTimeMachineReferenceParent.code, - key: config.keyPressedTimeMachineReferenceParent.key - } - timeMachine.edgeEditor.onKeyPressed(event, true) - } - } - } - } - if ( - config.viewportCenterReferenceParent === true - ) { - if (currentNode.payload.referenceParent.type === 'Time Machine') { - let timeMachine = UI.projects.superalgos.spaces.chartingSpace.findTimeMachine(currentNode.payload.referenceParent) - if (timeMachine !== undefined && viewportCentered === false) { - UI.projects.superalgos.spaces.chartingSpace.viewport.displaceToContainer(timeMachine.container) - viewportCentered = true - } - } - } - if ( - config.repositionAtTimeMachineReferenceParent === true - ) { - if (currentNode.payload.referenceParent.type === 'Time Machine') { - let timeMachine = UI.projects.superalgos.spaces.chartingSpace.findTimeMachine(currentNode.payload.referenceParent) - if (timeMachine !== undefined) { - repositionAtTimeMachineCounter++ - switch (true) { - case (repositionAtTimeMachineCounter > 0 && repositionAtTimeMachineCounter < 20): { - let event = { - delta: -1 - } - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - break - } - case (repositionAtTimeMachineCounter === 30): { - UI.projects.superalgos.spaces.chartingSpace.viewport.displaceToContainer(timeMachine.container) - break - } - case (repositionAtTimeMachineCounter === 60): { - let event = { - metaKey: true, - shiftKey: true, - ctrlKey: true, - code: undefined, - key: 'A' - } - timeMachine.edgeEditor.onKeyPressed(event, true) - break - } - case (repositionAtTimeMachineCounter === 90): { - UI.projects.superalgos.spaces.chartingSpace.viewport.displaceToContainer(timeMachine.container) - break - } - case (repositionAtTimeMachineCounter === 120): { - UI.projects.superalgos.spaces.chartingSpace.viewport.zoomAtCenter(8) - break - } - } - } - } - } - if ( - config.repositionAtTimeMachineNoZoomReferenceParent === true - ) { - if (currentNode.payload.referenceParent.type === 'Time Machine') { - let timeMachine = UI.projects.superalgos.spaces.chartingSpace.findTimeMachine(currentNode.payload.referenceParent) - if (timeMachine !== undefined) { - repositionAtTimeMachineCounter++ - switch (true) { - case (repositionAtTimeMachineCounter > 10 && repositionAtTimeMachineCounter < 20): { - let event = { - delta: -1 - } - UI.projects.superalgos.spaces.chartingSpace.viewport.onMouseWheel(event) - break - } - case (repositionAtTimeMachineCounter === 30): { - UI.projects.superalgos.spaces.chartingSpace.viewport.displaceToContainer(timeMachine.container) - break - } - } - } - } - } - } - } - } - } - } - } - - function makeInvisible() { - const HEIGHT = 0 - const WIDTH = 0 - const FORM_HEIGHT = 0 - - tutorialPosition = { - x: 100000, - y: 100000 - } - - tutorialDiv.style = ' ' + - 'position:fixed; top:' + tutorialPosition.y + 'px; ' + - 'left:' + tutorialPosition.x + 'px; ' + - 'width: ' + WIDTH + 'px;' + - 'height: ' + HEIGHT + 'px;' + - 'z-index:1;' - - tutorialFormDiv.style = ' ' + - 'position:fixed; top:' + (tutorialPosition.y) + 'px; ' + - 'left:' + tutorialPosition.x + 'px; ' + - 'width: ' + WIDTH + 'px;' + - 'height: ' + FORM_HEIGHT + 'px;' + - 'z-index:1;' - } - - function makeVsible() { - const HEIGHT = 650 - const WIDTH = 400 - const MARGIN = 100 - const FORM_HEIGHT = 40 - - let nodeConfig - try { - nodeConfig = JSON.parse(currentNode.config) - } catch (err) { - return - } - - switch (nodeConfig.position) { - case 'Left': { - tutorialPosition = { - x: MARGIN, - y: (browserCanvas.height - HEIGHT) / 2 - } - break - } - case 'Center': { - tutorialPosition = { - x: browserCanvas.width / 2 - WIDTH / 2, - y: (browserCanvas.height - HEIGHT) / 2 - } - break - } - case 'Right': { - tutorialPosition = { - x: browserCanvas.width - WIDTH - MARGIN, - y: (browserCanvas.height - HEIGHT) / 2 - } - break - } - default: { - tutorialPosition = { - x: browserCanvas.width / 2 - WIDTH / 2, - y: (browserCanvas.height - HEIGHT) / 2 - } - break - } - } - tutorialDiv.style = ' ' + - 'position:fixed; top:' + tutorialPosition.y + 'px; ' + - 'left:' + tutorialPosition.x + 'px; ' + - 'width: ' + WIDTH + 'px;' + - 'height: ' + HEIGHT + 'px;' + - 'z-index:1;' - - buildHTML() - - tutorialFormDiv.style = ' ' + - 'position:fixed; top:' + (tutorialPosition.y + HEIGHT - 30) + 'px; ' + - 'left:' + tutorialPosition.x + 'px; ' + - 'width: ' + (WIDTH + 20) + 'px;' + - 'height: ' + FORM_HEIGHT + 'px;' + - 'z-index:1;' - } - } - - function stop() { - resetAfterButtonPressed() - checkForceFocus() - if (tutorialRootNode !== undefined) { - tutorialRootNode.payload.uiObject.isPlaying = false - tutorialRootNode = undefined - } - currentStatus = 'Stopped' - } - - function skip() { - resetAfterButtonPressed() - checkForceFocus() - let tutorial = { - status: 'Skipped' - } - UI.projects.superalgos.utilities.tutorial.saveTutorial(currentNode.payload, tutorial) - advance(true) - } - - function previous() { - resetAfterButtonPressed() - checkForceFocus() - if (navigationStack.length > 1) { - let previousNode = navigationStack[navigationStack.length - 2] - switch (previousNode.type) { - case 'Tutorial': { - currentNode = previousNode - findTutorialNode(currentNode) - currentStatus = 'Playing Tutorial' - navigationStack.splice(navigationStack.length - 1) - break - } - case 'Tutorial Topic': { - currentNode = previousNode - findTutorialNode(currentNode) - currentStatus = 'Playing Topic' - navigationStack.splice(navigationStack.length - 1) - break - } - case 'Tutorial Step': { - currentNode = previousNode - findTutorialNode(currentNode) - currentStatus = 'Playing Step' - navigationStack.splice(navigationStack.length - 1) - break - } - } - } - } - - function next() { - resetAfterButtonPressed() - checkForceFocus() - if (ckeckGoingToAnotherTutorial() === true) { return } - let tutorial = { - status: 'Done' - } - UI.projects.superalgos.utilities.tutorial.saveTutorial(currentNode.payload, tutorial) - advance() - } - - function resetAfterButtonPressed() { - resetViewport() - resetActions() - resetWorkspaces() - resetDocumentation() - resetRepositionAtTimeMachine() - resetPositionAtNode() - resetTimeMachineKeyPressed() - resetKeyPressed() - resetSlider() - changeNodeConfig() - batchConfigChanges() - - function resetActions() { - lastExecutedAction = "" - actionCounter = 0 - } - - function resetViewport() { - currentZoomStep = 0 - viewportCentered = false - } - - function resetWorkspaces() { - workspacesCounter = 0 - } - - function resetDocumentation() { - currentDocumentationURL = '' - documentationCounter = 0 - } - - function resetRepositionAtTimeMachine() { - repositionAtTimeMachineCounter = 0 - } - - function resetPositionAtNode() { - positionAtNodeCounter = 0 - } - - function resetTimeMachineKeyPressed() { - timeMachineKeyPressedCounter = 0 - } - - function resetKeyPressed() { - keyPressedCounter = 0 - } - - function resetSlider() { - sliderCounter = 0 - } - - function changeNodeConfig() { - changeNodeConfigCounter = 0 - changeNodeConfigCounterWithEval = 0 - } - - function batchConfigChanges() { - batchConfigChangesCounter = 0 - } - } - - function checkForceFocus() { - if (forcingFocus === true) { - currentNode.payload.referenceParent.payload.floatingObject.removeForceFocus() - forcingFocus = false - } - } - - function ckeckGoingToAnotherTutorial() { - if (currentNode.payload !== undefined) { - if (currentNode.payload.referenceParent !== undefined) { - let config = JSON.parse(currentNode.config) - if (config.startTutorialReferenceParent === true) { - if (currentNode.payload.referenceParent.type === 'Tutorial') { - tutorialRootNode = currentNode.payload.referenceParent - currentNode = currentNode.payload.referenceParent - currentStatus = 'Playing Tutorial' - resumeModeActivated = false - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return true - } - } - } - } - } - - function playTutorial(node) { - navigationStack = [] - node.payload.uiObject.isPlaying = true - tutorialRootNode = node - currentNode = node - currentStatus = 'Playing Tutorial' - resumeModeActivated = false - navigationStack.push(currentNode) - } - - function resumeTutorial(node) { - navigationStack = [] - node.payload.uiObject.isPlaying = true - tutorialRootNode = node - currentNode = node - currentStatus = 'Playing Tutorial' - resumeModeActivated = true - navigationStack.push(currentNode) - advance() - } - - function playTutorialTopic(node) { - navigationStack = [] - currentTopicNode = node - currentNode = node - currentStatus = 'Playing Topic' - resumeModeActivated = false - navigationStack.push(currentNode) - findTutorialNode(node) - } - - function resumeTutorialTopic(node) { - navigationStack = [] - currentTopicNode = node - currentNode = node - currentStatus = 'Playing Topic' - resumeModeActivated = true - navigationStack.push(currentNode) - findTutorialNode(node) - } - - function playTutorialStep(node) { - navigationStack = [] - currentStepNode = node - currentNode = node - currentStatus = 'Playing Step' - resumeModeActivated = false - navigationStack.push(currentNode) - findTutorialNode(node) - } - - function resumeTutorialStep(node) { - navigationStack = [] - currentStepNode = node - currentNode = node - currentStatus = 'Playing Step' - resumeModeActivated = true - navigationStack.push(currentNode) - findTutorialNode(node) - } - - function resetTutorialProgress(node) { - resetNextNode(node) - - function resetNextNode(node) { - - for (let i = 0; i < node.tutorialSteps.length; i++) { - let tutorialStep = node.tutorialSteps[i] - let tutorial = { - status: 'Reset' - } - UI.projects.superalgos.utilities.tutorial.saveTutorial(tutorialStep.payload, tutorial) - } - - for (let i = 0; i < node.tutorialTopics.length; i++) { - let tutorialTopic = node.tutorialTopics[i] - let tutorial = { - status: 'Reset' - } - UI.projects.superalgos.utilities.tutorial.saveTutorial(tutorialTopic.payload, tutorial) - resetNextNode(tutorialTopic) - } - } - } - - function findTutorialNode(node) { - /* - We will consider the tutorialRootNode the head of the hirierchy - */ - tutorialRootNode = node - - if (node.payload !== undefined) { - if (node.payload.parentNode !== undefined) { - findTutorialNode(node.payload.parentNode) - } - } - } - - function advance(isSkipping) { - let found - let advanced - - switch (currentStatus) { - case 'Playing Tutorial': { - found = true - findNextNode(tutorialRootNode) - break - } - case 'Playing Topic': { - found = false - if (isSkipping === true) { - findNextTopic(tutorialRootNode) - } else { - findNextNode(tutorialRootNode) - } - break - } - case 'Playing Step': { - found = false - findNextNode(tutorialRootNode) - break - } - } - - /* - If we can not find a next node, then we stop the tutorial. - */ - if (advanced === undefined) { - stop() - return - } - - - function findNextNode(node) { - if (node.tutorialSteps !== undefined) { - for (let i = 0; i < node.tutorialSteps.length; i++) { - - let tutorialStep = node.tutorialSteps[i] - if (found === true) { - if (resumeModeActivated !== true) { - currentNode = tutorialStep - currentStatus = 'Playing Step' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } else { - let tutorial = { - status: undefined - } - UI.projects.superalgos.utilities.tutorial.loadTutorial(tutorialStep.payload, tutorial) - if (tutorial.status !== 'Done') { - currentNode = tutorialStep - currentStatus = 'Playing Step' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } - } - } - if (tutorialStep.id === currentNode.id) { - found = true - } - } - } - - for (let i = 0; i < node.tutorialTopics.length; i++) { - - if (advanced === true) { - return - } - - let tutorialTopic = node.tutorialTopics[i] - if (found === true) { - if (resumeModeActivated !== true) { - currentNode = tutorialTopic - currentStatus = 'Playing Topic' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } else { - let tutorial = { - status: undefined - } - UI.projects.superalgos.utilities.tutorial.loadTutorial(tutorialTopic.payload, tutorial) - if (tutorial.status !== 'Done') { - currentNode = tutorialTopic - currentStatus = 'Playing Topic' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } - } - } - if (tutorialTopic.id === currentNode.id) { - found = true - } - - findNextNode(tutorialTopic, found) - } - } - - function findNextTopic(node) { - for (let i = 0; i < node.tutorialTopics.length; i++) { - - if (advanced === true) { - return - } - - let tutorialTopic = node.tutorialTopics[i] - if (found === true) { - if (resumeModeActivated !== true) { - currentNode = tutorialTopic - currentStatus = 'Playing Topic' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } else { - let tutorial = { - status: undefined - } - UI.projects.superalgos.utilities.tutorial.loadTutorial(tutorialTopic.payload, tutorial) - if (tutorial.status !== 'Done') { - currentNode = tutorialTopic - currentStatus = 'Playing Topic' - advanced = true - navigationStack.push(currentNode) - findTutorialNode(currentNode) - return - } - } - } - if (tutorialTopic.id === currentNode.id) { - found = true - } else { - findNextTopic(tutorialTopic, found) - } - } - } - } - - function buildHTML() { - - newConfig = currentNode.config - if (newConfig === currentConfig) { return } - currentConfig = newConfig - - let nodeConfig = JSON.parse(currentNode.config) - let html = '' - if (nodeConfig.title !== undefined && nodeConfig.title !== '') { - html = html + '

' + nodeConfig.title + '

' - } - html = html + '
' - if (nodeConfig.summary !== undefined && nodeConfig.summary !== '') { - html = html + '
' + addToolTips(nodeConfig.summary) + '
' - } - if (nodeConfig.subTitle !== undefined && nodeConfig.subTitle !== '') { - html = html + '

' + nodeConfig.subTitle + '

' - } - if (nodeConfig.gif !== undefined && nodeConfig.gif !== '') { - html = html + '
' - newGifName = nodeConfig.gif - } - - if (nodeConfig.definition !== undefined && nodeConfig.definition !== '') { - html = html + '' - html = html + '' - html = html + '' - html = html + '' - html = html + '' - html = html + '
' - if (nodeConfig.image !== undefined && nodeConfig.image !== '') { - html = html + '
' - newImageName = nodeConfig.image - } - html = html + '
' - html = html + '' + addToolTips(nodeConfig.definition) + '' - html = html + '
' - } - if (nodeConfig.bulletListIntro !== undefined && nodeConfig.bulletListIntro !== '') { - html = html + '
' + addToolTips(nodeConfig.bulletListIntro) + '
' - } - if (nodeConfig.bulletArray !== undefined) { - html = html + '
    ' - for (let i = 0; i < nodeConfig.bulletArray.length; i++) { - let bullet = nodeConfig.bulletArray[i] - html = html + '
  • ' - html = html + '
    ' + addToolTips(bullet[0]) + ' ' + addToolTips(bullet[1]) + '
    ' - html = html + '
  • ' - } - html = html + '
' - } - if (nodeConfig.paragraph1 !== undefined && nodeConfig.paragraph1 !== '') { - html = html + '
' + addToolTips(nodeConfig.paragraph1) + '
' - } - if (nodeConfig.callOut !== undefined && nodeConfig.callOut !== '') { - html = html + '
' + addToolTips(nodeConfig.callOut) + '' - if (nodeConfig.externalLink !== undefined) { - html = html + '' + nodeConfig.externalLink[0] + '' - } - html = html + '
' - } - if (nodeConfig.paragraph2 !== undefined && nodeConfig.paragraph2 !== '') { - html = html + '
' + addToolTips(nodeConfig.paragraph2) + '
' - } - if (nodeConfig.note !== undefined && nodeConfig.note !== '') { - html = html + '' - } - if (nodeConfig.tip !== undefined && nodeConfig.tip !== '') { - html = html + '' - } - if (nodeConfig.important !== undefined && nodeConfig.important !== '') { - html = html + '' - } - if (nodeConfig.warning !== undefined && nodeConfig.warning !== '') { - html = html + '' - } - html = html + '
' - - tutorialDiv.innerHTML = html - - function addToolTips(text) { - const TOOL_TIP_HTML = '
NODE_TYPENODE_DEFINITION
' - let resultingText = '' - let splittedText = text.split('->') - - for (let i = 0; i < splittedText.length; i = i + 2) { - let firstPart = splittedText[i] - let nodeType = splittedText[i + 1] - if (nodeType === undefined) { - return resultingText + firstPart - } - let splittedNodeType = nodeType.split('/') - let project - let type - if (splittedNodeType.length > 1) { - project = splittedNodeType[0] - type = splittedNodeType[1] - } else { - project = 'Superalgos' - type = splittedNodeType[0] - } - let definitionNode = SCHEMAS_BY_PROJECT.get(project).map.docSchema.get(type) - if (definitionNode === undefined) { - definitionNode = SCHEMAS_BY_PROJECT.get(project).map.conceptSchema.get(type) - if (definitionNode === undefined) { - currentNode.payload.uiObject.setErrorMessage(type + ' not found at Doc Schema or Concept Schema.') - return - } - } - let definition = definitionNode.definition - if (definition === undefined || definition === "") { - resultingText = resultingText + firstPart + type - } else { - let tooltip = TOOL_TIP_HTML.replace('NODE_TYPE', type).replace('NODE_DEFINITION', definition) - resultingText = resultingText + firstPart + tooltip - } - } - return resultingText - } - } - - function draw() { - if (isInitialized === false) { return } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Branches.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Branches.js deleted file mode 100644 index 1ea5e4251..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Branches.js +++ /dev/null @@ -1,66 +0,0 @@ -function newSuperalgosUtilitiesBranches() { - thisObject = { - nodeBranchToArray: nodeBranchToArray, - findInBranch: findInBranch - } - - return thisObject - - function nodeBranchToArray(node, nodeType) { - /* - This function scans a node branch for a certain node type and - return an array of with all the nodes of that type found. - */ - if (node === undefined) { return } - if (nodeType === undefined) { return } - let resultArray = [] - scanNodeBranch(node, nodeType) - return resultArray - - function scanNodeBranch(startingNode) { - if (startingNode === undefined) { return } - - let nodeDefinition = getNodeDefinition(startingNode) - if (nodeDefinition === undefined) { return } - - if (startingNode.type === nodeType) { - resultArray.push(startingNode) - return - } - - if (nodeDefinition.properties === undefined) { return } - let lastNodePropertyName - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - if (lastNodePropertyName === property.name) { continue } // Some nodes have a single property por multiple child node types. We need to check repeated properties only once so as no to duplicate results. - switch (property.type) { - case 'node': { - scanNodeBranch(startingNode[property.name]) - lastNodePropertyName = property.name - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - for (let m = 0; m < startingNodePropertyArray.length; m++) { - scanNodeBranch(startingNodePropertyArray[m]) - } - break - } - } - } - } - } - - function findInBranch(startingNode, nodeType, errorNode, connectedViaPayload) { - /* - This function finds a node in a brach and reports an error if it could not be found. - */ - let nodeFound = UI.projects.superalgos.utilities.meshes.findNodeInNodeMesh(startingNode, nodeType, undefined, connectedViaPayload, true, false, false) - if (nodeFound === undefined) { - errorNode.payload.uiObject.setErrorMessage('Could not find ' + nodeType + ' at ' + startingNode.type + ' ' + startingNode.name) - return - } else { - return nodeFound - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Clipboard.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Clipboard.js deleted file mode 100644 index 877358cf3..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Clipboard.js +++ /dev/null @@ -1,44 +0,0 @@ -function newSuperalgosUtilitiesClipboard() { - thisObject = { - fallbackCopyTextToClipboard: fallbackCopyTextToClipboard, - copyTextToClipboard: copyTextToClipboard - } - - return thisObject - - function fallbackCopyTextToClipboard(text) { - var textArea = document.createElement("textarea"); - textArea.value = text; - - // Avoid scrolling to bottom - textArea.style.top = "0"; - textArea.style.left = "0"; - textArea.style.position = "fixed"; - - document.body.appendChild(textArea); - textArea.focus(); - textArea.select(); - - try { - var successful = document.execCommand('copy'); - var msg = successful ? 'successful' : 'unsuccessful'; - //console.log('Fallback: Copying text command was ' + msg); - } catch (err) { - console.error('Fallback: Oops, unable to copy', err); - } - - document.body.removeChild(textArea); - } - - function copyTextToClipboard(text) { - if (!navigator.clipboard) { - fallbackCopyTextToClipboard(text); - return; - } - navigator.clipboard.writeText(text).then(function () { - //console.log('Async: Copying to clipboard was successful!'); - }, function (err) { - console.error('Async: Could not copy text: ', err); - }); - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/CoordinateTransformations.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/CoordinateTransformations.js deleted file mode 100644 index 00922e6fc..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/CoordinateTransformations.js +++ /dev/null @@ -1,26 +0,0 @@ -function newSuperalgosUtilitiesCoordinateTransformations() { - thisObject = { - transformThisPoint: transformThisPoint, - unTransformThisPoint: unTransformThisPoint - } - - return thisObject - - function transformThisPoint(point, container) { - /* We make the point relative to the current frame */ - - point = container.frame.frameThisPoint(point) - - /* We pass this point through the UI.projects.superalgos.spaces.chartingSpace.viewport lends, meaning we apply the UI.projects.superalgos.spaces.chartingSpace.viewport zoom and displacement. */ - - point = UI.projects.superalgos.spaces.chartingSpace.viewport.transformThisPoint(point) - return point - } - - function unTransformThisPoint(point, container) { - point = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(point) - - point = container.frame.unframeThisPoint(point) - return point - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DateRateTransformations.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DateRateTransformations.js deleted file mode 100644 index 1f17fef42..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DateRateTransformations.js +++ /dev/null @@ -1,66 +0,0 @@ -function newSuperalgosUtilitiesDateRateTransformations() { - thisObject = { - getDateFromPointAtBrowserCanvas: getDateFromPointAtBrowserCanvas, - getDateFromPointAtChartsSpace: getDateFromPointAtChartsSpace, - getDateFromPointAtContainer: getDateFromPointAtContainer, - getRateFromPointAtBrowserCanvas: getRateFromPointAtBrowserCanvas, - getRateFromPointAtChartingSpace: getRateFromPointAtChartingSpace, - getRateFromPointAtContainer: getRateFromPointAtContainer, - getMilisecondsFromPoint: getMilisecondsFromPoint - } - - return thisObject - - function getDateFromPointAtBrowserCanvas(point, container, coordinateSystem) { - point = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(point, container) - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - let date = new Date(point.x) - - return date - } - - function getDateFromPointAtChartsSpace(point, container, coordinateSystem) { - point = container.frame.unframeThisPoint(point) - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - let date = new Date(point.x) - - return date - } - - function getDateFromPointAtContainer(point, container, coordinateSystem) { - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - let date = new Date(point.x) - - return date - } - - function getRateFromPointAtBrowserCanvas(point, container, coordinateSystem) { - point = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(point, container) - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - return point.y - } - - function getRateFromPointAtChartingSpace(point, container, coordinateSystem) { - point = container.frame.unframeThisPoint(point) - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - return point.y - } - - function getRateFromPointAtContainer(point, container, coordinateSystem) { - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - return point.y - } - - function getMilisecondsFromPoint(point, container, coordinateSystem) { - point = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(point, container) - point = coordinateSystem.unInverseTransform(point, container.frame.height) - - return point.x - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Dates.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Dates.js deleted file mode 100644 index 44dad69c4..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Dates.js +++ /dev/null @@ -1,21 +0,0 @@ -function newSuperalgosUtilitiesDates() { - thisObject = { - formatDate: formatDate - } - - return thisObject - - function formatDate(date) { - var d = new Date(date), - month = '' + (d.getUTCMonth() + 1), - day = '' + d.getUTCDate(), - year = d.getUTCFullYear(); - - if (month.length < 2) - month = '0' + month; - if (day.length < 2) - day = '0' + day; - - return [year, month, day].join('-'); - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Download.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Download.js deleted file mode 100644 index 85be8aa43..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Download.js +++ /dev/null @@ -1,69 +0,0 @@ -function newSuperalgosUtilitiesDownload() { - thisObject = { - downloadText: downloadText, - downloadCanvas: downloadCanvas, - downloadPanorama: downloadPanorama, - addToMarketPanorama: addToMarketPanorama - } - - return thisObject - - function downloadText(filename, text) { - let element = document.createElement('a') - element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)) - element.setAttribute('download', filename) - element.style.display = 'none' - document.body.appendChild(element) - element.click() - document.body.removeChild(element) - } - - function downloadCanvas(filename, canvasToUse) { - let data = canvasToUse.toDataURL('image/png', 1) - /* Change MIME type to trick the browser to downlaod the file instead of displaying it */ - data = data.replace(/^data:image\/[^;]*/, 'data:application/octet-stream') - - /* In addition to 's "download" attribute, you can define HTTP-style headers */ - data = data.replace(/^data:application\/octet-stream/, 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + filename + '.png') - - let element = document.createElement('a') - element.setAttribute('href', data) - element.setAttribute('download', filename + '.PNG') - element.style.display = 'none' - document.body.appendChild(element) - element.click() - document.body.removeChild(element) - } - - function downloadPanorama(filename) { - let INITIAL_WIDTH = 800 - let FINAL_WIDTH = browserCanvas.width - INITIAL_WIDTH - - if (ARE_WE_RECORDING_A_MARKET_PANORAMA === false) { - /* We start recording the panorame. */ - ARE_WE_RECORDING_A_MARKET_PANORAMA = true - marketPanoramaCanvas = document.createElement('canvas') - marketPanoramaCanvas.width = INITIAL_WIDTH * 50 - marketPanoramaCanvas.height = browserCanvas.height - marketPanoramaCanvas.getContext('2d').drawImage(browserCanvas, 0, 0, INITIAL_WIDTH, browserCanvas.height, 0, 0, INITIAL_WIDTH, browserCanvas.height) - CURRENT_PANORAMA_POSITION = INITIAL_WIDTH - } else { - /* We stop recording and download the resulting image. */ - ARE_WE_RECORDING_A_MARKET_PANORAMA = false - marketPanoramaCanvas.getContext('2d').drawImage(browserCanvas, browserCanvas.width - FINAL_WIDTH, 0, FINAL_WIDTH, browserCanvas.height, CURRENT_PANORAMA_POSITION, 0, FINAL_WIDTH, browserCanvas.height) - let finalResultCanvas = document.createElement('canvas') - finalResultCanvas.width = CURRENT_PANORAMA_POSITION + FINAL_WIDTH - finalResultCanvas.height = browserCanvas.height - finalResultCanvas.getContext('2d').drawImage(marketPanoramaCanvas, 0, 0, finalResultCanvas.width, browserCanvas.height, 0, 0, finalResultCanvas.width, browserCanvas.height) - downloadCanvas(filename, finalResultCanvas) - marketPanoramaCanvas = undefined - } - } - - function addToMarketPanorama() { - let SECTION_WIDTH = 80 * 2 - let INITIAL_POSITION = 800 - SECTION_WIDTH - marketPanoramaCanvas.getContext('2d').drawImage(browserCanvas, INITIAL_POSITION, 0, SECTION_WIDTH, browserCanvas.height, CURRENT_PANORAMA_POSITION, 0, SECTION_WIDTH, browserCanvas.height) - CURRENT_PANORAMA_POSITION = CURRENT_PANORAMA_POSITION + SECTION_WIDTH - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DrawPrint.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DrawPrint.js deleted file mode 100644 index e1e20c1a1..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/DrawPrint.js +++ /dev/null @@ -1,359 +0,0 @@ -function newSuperalgosUtilitiesDrawPrint() { - thisObject = { - roundedCornersBackground: roundedCornersBackground, - drawLabel: drawLabel, - drawIcon: drawIcon, - drawContainerBackground: drawContainerBackground, - printLabel: printLabel - } - - return thisObject - - function roundedCornersBackground(params) { - if (params.xOffset === undefined) { params.xOffset = 0 } - borderPoint1 = { - x: params.cornerRadius + params.xOffset, - y: params.cornerRadius - } - - borderPoint2 = { - x: params.container.frame.width - params.cornerRadius, - y: params.cornerRadius - } - - borderPoint3 = { - x: params.container.frame.width - params.cornerRadius, - y: params.container.frame.height - params.cornerRadius - } - - borderPoint4 = { - x: params.cornerRadius + params.xOffset, - y: params.container.frame.height - params.cornerRadius - } - - /* Now the transformations. */ - - if (params.coordinateSystem !== undefined) { // For instance Candles would use this - borderPoint1 = params.coordinateSystem.transformThisPoint(borderPoint1) - borderPoint2 = params.coordinateSystem.transformThisPoint(borderPoint2) - borderPoint3 = params.coordinateSystem.transformThisPoint(borderPoint3) - borderPoint4 = params.coordinateSystem.transformThisPoint(borderPoint4) - } else { - if (params.outsideViewPort === true) { // If the element is not affected by zoom - borderPoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(borderPoint1, params.container) - borderPoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(borderPoint2, params.container) - borderPoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(borderPoint3, params.container) - borderPoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(borderPoint4, params.container) - } else { // For instance Panels use this - borderPoint1 = params.container.frame.frameThisPoint(borderPoint1) - borderPoint2 = params.container.frame.frameThisPoint(borderPoint2) - borderPoint3 = params.container.frame.frameThisPoint(borderPoint3) - borderPoint4 = params.container.frame.frameThisPoint(borderPoint4) - } - } - - if (params.fitFunction !== undefined) { - borderPoint1 = params.fitFunction(borderPoint1) - borderPoint2 = params.fitFunction(borderPoint2) - borderPoint3 = params.fitFunction(borderPoint3) - borderPoint4 = params.fitFunction(borderPoint4) - } - - browserCanvasContext.setLineDash([0, 0]) - - /* Shadow */ - - if (params.castShadow === true) { - let SHADOW_OFFSET = 2 - - browserCanvasContext.beginPath() - - browserCanvasContext.arc(borderPoint1.x + SHADOW_OFFSET, borderPoint1.y + SHADOW_OFFSET, params.cornerRadius, 1.0 * Math.PI, 1.5 * Math.PI) - browserCanvasContext.lineTo(borderPoint2.x + SHADOW_OFFSET, borderPoint2.y - params.cornerRadius + SHADOW_OFFSET) - browserCanvasContext.arc(borderPoint2.x + SHADOW_OFFSET, borderPoint2.y + SHADOW_OFFSET, params.cornerRadius, 1.5 * Math.PI, 2.0 * Math.PI) - browserCanvasContext.lineTo(borderPoint3.x + params.cornerRadius + SHADOW_OFFSET, borderPoint3.y + SHADOW_OFFSET) - browserCanvasContext.arc(borderPoint3.x + SHADOW_OFFSET, borderPoint3.y + SHADOW_OFFSET, params.cornerRadius, 0 * Math.PI, 0.5 * Math.PI) - browserCanvasContext.lineTo(borderPoint4.x + SHADOW_OFFSET, borderPoint4.y + params.cornerRadius + SHADOW_OFFSET) - browserCanvasContext.arc(borderPoint4.x + SHADOW_OFFSET, borderPoint4.y + SHADOW_OFFSET, params.cornerRadius, 0.5 * Math.PI, 1.0 * Math.PI) - browserCanvasContext.lineTo(borderPoint1.x - params.cornerRadius + SHADOW_OFFSET, borderPoint1.y + SHADOW_OFFSET) - - browserCanvasContext.closePath() - - browserCanvasContext.lineWidth = 10 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + 0.01 + ')' - browserCanvasContext.stroke() - - browserCanvasContext.lineWidth = 5 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + 0.01 + ')' - browserCanvasContext.stroke() - - browserCanvasContext.lineWidth = 1 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', ' + 0.15 + ')' - browserCanvasContext.stroke() - } - - /* Background */ - - browserCanvasContext.beginPath() - - browserCanvasContext.arc(borderPoint1.x, borderPoint1.y, params.cornerRadius, 1.0 * Math.PI, 1.5 * Math.PI) - browserCanvasContext.lineTo(borderPoint2.x, borderPoint2.y - params.cornerRadius) - browserCanvasContext.arc(borderPoint2.x, borderPoint2.y, params.cornerRadius, 1.5 * Math.PI, 2.0 * Math.PI) - browserCanvasContext.lineTo(borderPoint3.x + params.cornerRadius, borderPoint3.y) - browserCanvasContext.arc(borderPoint3.x, borderPoint3.y, params.cornerRadius, 0 * Math.PI, 0.5 * Math.PI) - browserCanvasContext.lineTo(borderPoint4.x, borderPoint4.y + params.cornerRadius) - browserCanvasContext.arc(borderPoint4.x, borderPoint4.y, params.cornerRadius, 0.5 * Math.PI, 1.0 * Math.PI) - browserCanvasContext.lineTo(borderPoint1.x - params.cornerRadius, borderPoint1.y) - - browserCanvasContext.closePath() - - browserCanvasContext.fillStyle = 'rgba(' + params.backgroundColor + ', ' + params.opacity + ')' - - browserCanvasContext.fill() - - browserCanvasContext.lineWidth = params.lineWidth - browserCanvasContext.strokeStyle = 'rgba(' + params.borderColor + ', ' + params.opacity + ')' - browserCanvasContext.stroke() - } - - function drawLabel(label, xFactor, yFactor, xOffset, yOffset, fontSize, container, fontColor, noFrameX, noFrameY, opacity) { - if (label === undefined) { return } - if (fontColor === undefined) { fontColor = UI_COLOR.WHITE } - let fontOffset = label.length * fontSize * FONT_ASPECT_RATIO + 10 - if (opacity === undefined) { opacity = 1 } - - let labelPoint = { - x: container.frame.width * xFactor + xOffset - fontOffset / 2, - y: container.frame.height * yFactor + yOffset - } - - labelPoint = container.frame.frameThisPoint(labelPoint) - - if (noFrameX !== undefined) { - labelPoint.x = noFrameX + xOffset - } - - if (noFrameY !== undefined) { - labelPoint.y = noFrameY + yOffset - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + fontColor + ', ' + opacity + ')' - - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - - function drawIcon(icon, xFactor, yFactor, xOffset, yOffset, imageSize, container) { - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - let imagePosition = { - x: container.frame.width * xFactor + xOffset - imageSize / 2, - y: container.frame.height * yFactor + yOffset - imageSize / 2 - } - - imagePosition = container.frame.frameThisPoint(imagePosition) - - browserCanvasContext.drawImage( - icon, imagePosition.x, - imagePosition.y, - imageSize, - imageSize) - } - } - } - - function drawContainerBackground(container, color, opacity, fitFunction) { - let fromPoint = { - x: 0, - y: 0 - } - - let toPoint = { - x: container.frame.width, - y: container.frame.height - } - - fromPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(fromPoint, container) - toPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(toPoint, container) - - fromPoint = fitFunction(fromPoint) - toPoint = fitFunction(toPoint) - - browserCanvasContext.beginPath() - browserCanvasContext.rect(fromPoint.x, fromPoint.y, toPoint.x - fromPoint.x, toPoint.y - fromPoint.y) - browserCanvasContext.fillStyle = 'rgba(' + color + ', ' + opacity + ')' - browserCanvasContext.closePath() - browserCanvasContext.fill() - } - - function printLabel( - labelToPrint, - xLeft, - xRight, - xCenter, - y, - opacity, - fontSize, - color, - align, - container, - fitFunction, - noDecimals, - fixedDecimals, - minDecimals, - simulateMonospace - ) { - - let isItANumber - let labelPoint - let label = labelToPrint - - if (labelToPrint === undefined) { return } - if (color === undefined) { color = UI_COLOR.DARK } - if (fontSize === undefined) { fontSize = 10 } - if (isNaN(label) === false && label !== '') { isItANumber = true } - - if (isItANumber === true && Number(label) > 1000000000000) { - label = "Very Large Number" - isItANumber = false - } - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - if (isItANumber === true) { - if (fixedDecimals !== true) { - label = dynamicDecimals(labelToPrint, minDecimals) - } - label = label.toLocaleString() - if (noDecimals === true) { - label = Math.trunc(label) - } - } - - switch (align) { - case 'Center': { - labelPoint = { - x: xCenter - getTextWidth(label) / 2, - y: y - } - break - } - case 'Left': { - labelPoint = { - x: xLeft, - y: y - } - break - } - case 'Right': { - labelPoint = { - x: xRight - getTextWidth(label), - y: y - } - break - } - case 'Left Numbers at Right': { - if (isItANumber === true) { - labelPoint = { - x: xRight - getTextWidth(label), - y: y - } - } else { - labelPoint = { - x: xLeft, - y: y - } - } - break - } - default: { - labelPoint = { - x: xCenter - getTextWidth(label) / 2, - y: y - } - } - } - if (isItANumber === true && simulateMonospace === true) { - labelPoint = { - x: xRight, - y: y - } - } - - if (container !== undefined) { - labelPoint = container.frame.frameThisPoint(labelPoint) - } - - if (fitFunction !== undefined) { - labelPoint = fitFunction(labelPoint) - } - - if (isItANumber === true && simulateMonospace === true) { - let isDecimal = false - let hasDecimals - let decimalCounter = 0 - let integerCounter = 0 - let characterOpacity = opacity - let characterFontSize = fontSize - let insignificantZeroPossible = true - let insignificantPointPossible = false - - if (label.indexOf('.') >= 0) { - hasDecimals = true - isDecimal = true - } - - for (let i = 0; i < label.length; i++) { - characterOpacity = opacity - - let character = label[label.length - 1 - i] - - if (hasDecimals === true && character === '.') { - isDecimal = false - characterFontSize = fontSize * 2 - } else { - characterFontSize = fontSize - } - - if (character === '.') { - if (insignificantPointPossible === true) { - characterOpacity = opacity / 4 - } - } - - if (hasDecimals === true && character === '0' && insignificantZeroPossible === true) { - characterOpacity = opacity / 4 - insignificantPointPossible = true - } else { - insignificantZeroPossible = false - insignificantPointPossible = false - } - - labelPoint.x = labelPoint.x - fontSize * FONT_ASPECT_RATIO * 1.5 - - browserCanvasContext.font = characterFontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = 'rgba(' + color + ', ' + characterOpacity + ')' - browserCanvasContext.fillText(character, labelPoint.x, labelPoint.y) - - if (isDecimal === true) { - decimalCounter++ - if (decimalCounter === 5) { - labelPoint.x = labelPoint.x - fontSize * FONT_ASPECT_RATIO * 1.5 / 2 - } - } - - if (isDecimal === false && character !== '.') { - integerCounter++ - if (integerCounter === 3) { - labelPoint.x = labelPoint.x - fontSize * FONT_ASPECT_RATIO * 1.5 / 2 - integerCounter = 0 - } - } - } - } - else { - browserCanvasContext.fillStyle = 'rgba(' + color + ', ' + opacity + ')' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Folders.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Folders.js deleted file mode 100644 index 4f50fc0ce..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Folders.js +++ /dev/null @@ -1,99 +0,0 @@ -function newSuperalgosUtilitiesFolders() { - thisObject = { - asymetricalFolderStructureCloning: asymetricalFolderStructureCloning - } - - return thisObject - - function asymetricalFolderStructureCloning( - originNode, - destinationNode, - originObjectsArrayPropertyName, - originFoldersArrayPropertyName, - destinationFoldersArrayPropertyName, - clonedObjectType, - destinationFolderType, - originObjectArrayPropertyName, - functionLibraryUiObjectsFromNodes - ) { - /* - This function will scan one branch of the workspace, and recreate - a similar structure in some other place, based on the parameters - sent to the function is what types of nodes are going to be mapped - into which other types. - */ - if (originNode === undefined) { return } - if (destinationNode === undefined) { return } - - /* Now we go down through all the children of the origin node, recreating at the destination node the same children structure*/ - let nodeDefinition = getNodeDefinition(originNode) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.name) { - case originObjectsArrayPropertyName: { - let originNodePropertyArray = originNode[property.name] - for (let m = 0; m < originNodePropertyArray.length; m++) { - let originObject = originNodePropertyArray[m] - if (originObjectArrayPropertyName === undefined) { - /* - In this first Use Case, we are going to connect each orgin object clone - to its origin object counter part. - */ - let clonedObject = functionLibraryUiObjectsFromNodes.addUIObject(destinationNode, clonedObjectType) - clonedObject.payload.referenceParent = originObject - } else { - /* - In this second Use Case, we are going to connect an inner object that is - inside the origin object at an array. We recognize we have to do this - because we did receive this array proeprty name. - */ - let originObjectArray = originObject[originObjectArrayPropertyName] - for (let n = 0; n < originObjectArray.length; n++) { - let originObjectArrayItem = originObjectArray[n] - let clonedObject = functionLibraryUiObjectsFromNodes.addUIObject(destinationNode, clonedObjectType) - clonedObject.payload.referenceParent = originObjectArrayItem - } - } - } - break - } - case originFoldersArrayPropertyName: { - let originNodePropertyArray = originNode[property.name] - let destinationNodePropertyArray = destinationNode[destinationFoldersArrayPropertyName] - for (let m = 0; m < originNodePropertyArray.length; m++) { - let originFolder = originNodePropertyArray[m] - let found = false - let destinationFolder - for (let n = 0; n < destinationNodePropertyArray.length; n++) { - destinationFolder = destinationNodePropertyArray[n] - if (originFolder.name === destinationFolder.name) { - found = true - } - } - if (found === false) { - destinationFolder = functionLibraryUiObjectsFromNodes.addUIObject(destinationNode, destinationFolderType) - destinationFolder.name = originFolder.name - } - asymetricalFolderStructureCloning( - originFolder, - destinationFolder, - originObjectsArrayPropertyName, - originFoldersArrayPropertyName, - destinationFoldersArrayPropertyName, - clonedObjectType, - destinationFolderType, - originObjectArrayPropertyName, - functionLibraryUiObjectsFromNodes - ) - } - break - } - } - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Hierarchy.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Hierarchy.js deleted file mode 100644 index d5a2de5a3..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Hierarchy.js +++ /dev/null @@ -1,71 +0,0 @@ -function newSuperalgosUtilitiesHierarchy() { - thisObject = { - getHiriarchyMap: getHiriarchyMap, - getHiriarchyHead: getHiriarchyHead - } - - return thisObject - - function getHiriarchyMap(rootNode) { - /* - This function scans a node hiriatchy recursively and creates a Map by Id of all the nodes of it. - */ - let hiriatchyMap = new Map() - evalNode(rootNode) - return hiriatchyMap - - function evalNode(node) { - if (node === undefined) { return } - - hiriatchyMap.set(node.id, node) - - /* Now we go down through all this node children */ - let nodeDefinition = getNodeDefinition(node) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - evalNode(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - evalNode(nodePropertyArray[m]) - } - } - break - } - } - } - } - } - } - - function getHiriarchyHead(initialNode) { - let headNode - stepBackwards(initialNode) - return headNode - - function stepBackwards(node) { - if (node === undefined) { return } - if (node.payload === undefined) { return } - if (node.payload.parentNode === undefined) { - headNode = node - } else { - stepBackwards(node.payload.parentNode) - } - } - } -} diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/LoadSaveFrame.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/LoadSaveFrame.js deleted file mode 100644 index 6ee69da82..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/LoadSaveFrame.js +++ /dev/null @@ -1,33 +0,0 @@ -function newSuperalgosUtilitiesLoadSaveFrame() { - thisObject = { - saveFrame: saveFrame, - loadFrame: loadFrame - } - - return thisObject - - function saveFrame(payload, frame) { - payload.frame = { - position: { - x: frame.position.x, - y: frame.position.y - }, - width: frame.width, - height: frame.height, - radius: frame.radius - } - } - - function loadFrame(payload, frame) { - if (payload.node.savedPayload !== undefined) { - if (payload.node.savedPayload.frame !== undefined) { - frame.position.x = payload.node.savedPayload.frame.position.x - frame.position.y = payload.node.savedPayload.frame.position.y - frame.width = payload.node.savedPayload.frame.width - frame.height = payload.node.savedPayload.frame.height - frame.radius = payload.node.savedPayload.frame.radius - payload.node.savedPayload.frame = undefined - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Menu.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Menu.js deleted file mode 100644 index 74297e468..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Menu.js +++ /dev/null @@ -1,23 +0,0 @@ -function newSuperalgosUtilitiesMenu() { - thisObject = { - menuClickOfNodeArray: menuClickOfNodeArray, - menuClick: menuClick - } - - return thisObject - - function menuClickOfNodeArray(nodeArray, action, confirm) { - for (let j = 0; j < nodeArray.length; j++) { - let node = nodeArray[j] - menuClick(node, action, confirm) - } - } - - function menuClick(node, action, confirm) { - let menu = node.payload.uiObject.menu - menu.internalClick(action) - if (confirm === true) { - menu.internalClick(action) - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Meshes.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Meshes.js deleted file mode 100644 index c466e892c..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Meshes.js +++ /dev/null @@ -1,96 +0,0 @@ -function newSuperalgosUtilitiesMeshes() { - thisObject = { - findNodeInNodeMesh: findNodeInNodeMesh - } - - return thisObject - - function findNodeInNodeMesh(node, nodeType, nodeName, connectedViaPayload, findInChildren, findInParents, findInReferenceParents) { - /* - This function scans a node mesh for a certain node type and - returns the first instance found. Please specify either nodeType - or nodeName. - */ - const MAX_DEPTH = 100 - let nodeFound - scanNodeMesh(node, 0) - return nodeFound - - function scanNodeMesh(startingNode, depth) { - if (startingNode === undefined) { return } - if (connectedViaPayload === true) { - if (startingNode.payload === undefined) { return } - } - if (nodeFound !== undefined) { return } - if (depth >= MAX_DEPTH) { return } - - let nodeDefinition = getNodeDefinition(startingNode) - if (nodeDefinition === undefined) { return } - - if (nodeType !== undefined) { - if (startingNode.type === nodeType) { - nodeFound = startingNode - return - } - } - - if (nodeName !== undefined) { - if (startingNode.name === nodeName) { - nodeFound = startingNode - return - } - } - - /* We scan through this node children */ - if (findInChildren === true) { - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - scanNodeMesh(startingNode[property.name], depth + 1) - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - scanNodeMesh(startingNodePropertyArray[m], depth + 1) - } - } - break - } - } - } - } - } - - /* We scan parents nodes. */ - if (findInParents === true) { - if (connectedViaPayload === true) { - if (startingNode.payload.parentNode !== undefined) { - scanNodeMesh(startingNode.payload.parentNode, depth + 1) - } - } else { - if (startingNode.parentNode !== undefined) { - scanNodeMesh(startingNode.parentNode, depth + 1) - } - } - } - - /* We scan reference parents too. */ - if (findInReferenceParents === true) { - if (connectedViaPayload === true) { - if (startingNode.payload.referenceParent !== undefined) { - scanNodeMesh(startingNode.payload.referenceParent, depth + 1) - } - } else { - if (startingNode.referenceParent !== undefined) { - scanNodeMesh(startingNode.referenceParent, depth + 1) - } - } - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeChildren.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeChildren.js deleted file mode 100644 index 913cdb8de..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeChildren.js +++ /dev/null @@ -1,243 +0,0 @@ -function newSuperalgosUtilitiesNodeChildren() { - thisObject = { - isMissingChildren: isMissingChildren, - findChildReferencingThisNode: findChildReferencingThisNode, - findOrCreateChildWithReference: findOrCreateChildWithReference, - findAndRecreateChildWithReference: findAndRecreateChildWithReference, - findChildIndexAtParentNode: findChildIndexAtParentNode, - isMissingChildrenByName: isMissingChildrenByName - } - - return thisObject - - function isMissingChildren(startingNode, checkNode, checkReferenceParent) { - /* - This functioin scan all the children of a node and returns true or false - depending if the checkNode is a missing children. - */ - if (startingNode === undefined) { return } - if (checkNode === undefined) { return } - - let nodeDefinition = getNodeDefinition(startingNode) - if (nodeDefinition === undefined) { return } - - /* We scan through this node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - let child = startingNode[property.name] - if (child === undefined) { continue } - if (checkReferenceParent !== true) { - if (child.id === checkNode.id) { - return false - } - } else { - if (child.payload !== undefined) { - if (child.payload.referenceParent !== undefined) { - if (child.payload.referenceParent.id === checkNode.id) { - return false - } - } - } - } - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - let arrayItem = startingNodePropertyArray[m] - if (checkReferenceParent !== true) { - if (arrayItem.id === checkNode.id) { - return false - } - } else { - if (arrayItem.payload !== undefined) { - if (arrayItem.payload.referenceParent !== undefined) { - if (arrayItem.payload.referenceParent.id === checkNode.id) { - return false - } - } - } - } - } - } - break - } - } - } - return true - } - } - - function findChildReferencingThisNode(startingNode, checkNode) { - /* - This functioin scan all the children of a node and returns the child - that is referencing the checkNode. - */ - if (startingNode === undefined) { return } - if (checkNode === undefined) { return } - - let nodeDefinition = getNodeDefinition(startingNode) - if (nodeDefinition === undefined) { return } - - /* We scan through this node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - let child = startingNode[property.name] - if (child === undefined) { continue } - if (child.payload !== undefined) { - if (child.payload.referenceParent !== undefined) { - if (child.payload.referenceParent.id === checkNode.id) { - return child - } - } - } - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - let arrayItem = startingNodePropertyArray[m] - - if (arrayItem.payload !== undefined) { - if (arrayItem.payload.referenceParent !== undefined) { - if (arrayItem.payload.referenceParent.id === checkNode.id) { - return arrayItem - } - } - } - } - } - break - } - } - } - } - } - - function findOrCreateChildWithReference(startingNode, childType, referencedNode, functionLibraryUiObjectsFromNodes) { - /* - This function find the child node of starting node that references - refereced node. If there is none, then it creates a child and stablish - the referecen. - */ - let child - if (isMissingChildren(startingNode, referencedNode, true) === true) { - child = functionLibraryUiObjectsFromNodes.addUIObject(startingNode, childType) - child.payload.referenceParent = referencedNode - } else { - child = findChildReferencingThisNode(startingNode, referencedNode) - } - return child - } - - function findAndRecreateChildWithReference(startingNode, childType, referencedNode, rootNodes, functionLibraryUiObjectsFromNodes, functionLibraryNodeDeleter) { - /* - This function finds the child of the starting node that references - the reference node and if found it deletes it. Existing or not - it creates it again with the child type specified. - */ - let child - child = findChildReferencingThisNode(startingNode, referencedNode) - if (child !== undefined) { - functionLibraryNodeDeleter.deleteUIObject(child, rootNodes) - } - child = functionLibraryUiObjectsFromNodes.addUIObject(startingNode, childType) - child.payload.referenceParent = referencedNode - return child - } - - function findChildIndexAtParentNode(startingNode) { - /* - This functioin scan all the children of a node's parent and returns the child - index at the node property array that contains it. - */ - if (startingNode === undefined) { return } - if (startingNode.payload === undefined) { return } - if (startingNode.payload.parentNode === undefined) { return } - - let parentNode = startingNode.payload.parentNode - - let nodeDefinition = getNodeDefinition(parentNode) - if (nodeDefinition === undefined) { return } - - /* We scan through this parent node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - /* We ignore these types of children. */ - } - break - case 'array': { - let startingNodePropertyArray = parentNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - let arrayItem = startingNodePropertyArray[m] - - if (arrayItem.id === startingNode.id) { - return m - } - } - } - break - } - } - } - } - } - - function isMissingChildrenByName(startingNode, nodeName) { - /* - This functioin scan all the children of a node and returns true or false - depending if the node has a children with a certain name. - */ - if (startingNode === undefined) { return } - - let nodeDefinition = getNodeDefinition(startingNode) - if (nodeDefinition === undefined) { return } - - /* We scan through this node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - let child = startingNode[property.name] - if (child !== undefined) { - if (child.name === nodeName) { - return false - } - } - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - let arrayItem = startingNodePropertyArray[m] - if (arrayItem.name === nodeName) { - return false - } - } - } - break - } - } - } - return true - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeConfig.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeConfig.js deleted file mode 100644 index 866a99a8e..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/NodeConfig.js +++ /dev/null @@ -1,27 +0,0 @@ -function newSuperalgosUtilitiesNodeConfig() { - thisObject = { - savePropertyAtNodeConfig: savePropertyAtNodeConfig, - loadPropertyFromNodeConfig: loadPropertyFromNodeConfig - } - - return thisObject - - function savePropertyAtNodeConfig(payload, propertyName, value) { - try { - let config = JSON.parse(payload.node.config) - config[propertyName] = value - payload.node.config = JSON.stringify(config, null, 4) - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } - - function loadPropertyFromNodeConfig(payload, propertyName) { - try { - let config = JSON.parse(payload.node.config) - return config[propertyName] - } catch (err) { - // we ignore errors here since most likely they will be parsing errors. - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Tutorial.js b/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Tutorial.js deleted file mode 100644 index a9571eeb4..000000000 --- a/Deprecated-Code/Integrations/Projects/Superalgos/Utilities/Tutorial.js +++ /dev/null @@ -1,27 +0,0 @@ -function newSuperalgosUtilitiesTutorial() { - thisObject = { - saveTutorial: saveTutorial, - loadTutorial: loadTutorial - } - - return thisObject - - function saveTutorial(payload, tutorial) { - payload.tutorial = { - status: tutorial.status - } - } - - function loadTutorial(payload, tutorial) { - if (payload.tutorial !== undefined) { - tutorial.status = payload.tutorial.status - return - } - if (payload.node.savedPayload !== undefined) { - if (payload.node.savedPayload.tutorial !== undefined) { - tutorial.status = payload.node.savedPayload.tutorial.status - payload.node.savedPayload.tutorial = undefined - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/Integrations/README.md b/Deprecated-Code/Integrations/README.md deleted file mode 100644 index 2c783ddcc..000000000 --- a/Deprecated-Code/Integrations/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Integrations - -This repo is one of the repositories built into Superalgos. For more information [read the docs](https://docs.superalgos.org/) or check the [Readme](https://github.com/Superalgos/Superalgos/) at the main repository of the project. - -## Copyright and License Notice - -© Copyright 2020 Superalgos. Please see the [License](/LICENSE) for information on how you can use this software. - -## Disclaimer - -THE SOFTWARE AND ITS ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL SUPERALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SOFTWARE, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -# Maintainer - -[![Luis-Fernando-Molina](https://avatars1.githubusercontent.com/u/9479367?s=130&v=4)](https://github.com/Luis-Fernando-Molina) | ----| -[Luis-Fernando-Molina](https://github.com/Luis-Fernando-Molina) | diff --git a/Deprecated-Code/IntelliToken/.gitignore b/Deprecated-Code/IntelliToken/.gitignore deleted file mode 100644 index a1c7c5444..000000000 --- a/Deprecated-Code/IntelliToken/.gitignore +++ /dev/null @@ -1,332 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ -**/Properties/launchSettings.json - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# SmartContracts -!**/SmartContracts/src/bin diff --git a/Deprecated-Code/IntelliToken/CODE_OF_CONDUCT.md b/Deprecated-Code/IntelliToken/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/IntelliToken/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/IntelliToken/CONTRIBUTING.md b/Deprecated-Code/IntelliToken/CONTRIBUTING.md deleted file mode 100644 index c67e8d115..000000000 --- a/Deprecated-Code/IntelliToken/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/LICENSE b/Deprecated-Code/IntelliToken/LICENSE deleted file mode 100644 index 2fe09f449..000000000 --- a/Deprecated-Code/IntelliToken/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -COPYRIGHT NOTICE - -© Copyright 2018 Superalgos.org - - -LICENSE NOTICE - -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitely agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/README.md b/Deprecated-Code/IntelliToken/README.md deleted file mode 100644 index f173dfdc9..000000000 --- a/Deprecated-Code/IntelliToken/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# ALGOToken -Responsible for the issuing of ALGO tokens - -Plese see the documentation at https://smartcontracts.superalgos.org/ . diff --git a/Deprecated-Code/IntelliToken/labs/AdvancedAlgos.AlgoToken.sln b/Deprecated-Code/IntelliToken/labs/AdvancedAlgos.AlgoToken.sln deleted file mode 100644 index 4ea6266e7..000000000 --- a/Deprecated-Code/IntelliToken/labs/AdvancedAlgos.AlgoToken.sln +++ /dev/null @@ -1,75 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2048 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.AlgoErc20Token", "algo-erc20-token\src\AdvancedAlgos.AlgoToken.AlgoErc20Token\AdvancedAlgos.AlgoToken.AlgoErc20Token.csproj", "{96BC465D-507E-43BC-A71E-1B4F7799AB19}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests", "algo-erc20-token\test\AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests\AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests.csproj", "{B569A2AD-A0E7-4623-AB3A-9BB49938CBE6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "algo-erc20-token", "algo-erc20-token", "{921A277C-0B10-4186-A814-786F903B4E2C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "algo-token-distribution", "algo-token-distribution", "{4EDC9FAE-176A-4995-B977-F6D2B735F616}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{9A083680-1F9C-4A8C-8FB2-A623DD333AEE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.AlgoTokenDistribution", "algo-token-distribution\src\AdvancedAlgos.AlgoToken.AlgoTokenDistribution\AdvancedAlgos.AlgoToken.AlgoTokenDistribution.csproj", "{6D1C63E9-A2F1-4084-B8E4-499B41341023}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests", "algo-token-distribution\test\AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests\AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests.csproj", "{CF2E35E6-EFC5-445F-AB17-BEC7E3039C41}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest", "framework\src\AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest\AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest.csproj", "{127474F7-81E8-4153-AEE0-A2049D75F77D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdvancedAlgos.AlgoToken.Framework.Ethereum", "framework\src\AdvancedAlgos.AlgoToken.Framework.Ethereum\AdvancedAlgos.AlgoToken.Framework.Ethereum.csproj", "{B05DC461-E82E-430B-A66D-9C0C9C9F9C9E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvancedAlgos.AlgoToken.AlgoTokenPlayground", "algo-token-playground\src\AdvancedAlgos.AlgoToken.AlgoTokenPlayground\AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj", "{42569CB0-DA27-4BAE-A657-3617D1644AD5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {96BC465D-507E-43BC-A71E-1B4F7799AB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96BC465D-507E-43BC-A71E-1B4F7799AB19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96BC465D-507E-43BC-A71E-1B4F7799AB19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96BC465D-507E-43BC-A71E-1B4F7799AB19}.Release|Any CPU.Build.0 = Release|Any CPU - {B569A2AD-A0E7-4623-AB3A-9BB49938CBE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B569A2AD-A0E7-4623-AB3A-9BB49938CBE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B569A2AD-A0E7-4623-AB3A-9BB49938CBE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B569A2AD-A0E7-4623-AB3A-9BB49938CBE6}.Release|Any CPU.Build.0 = Release|Any CPU - {6D1C63E9-A2F1-4084-B8E4-499B41341023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D1C63E9-A2F1-4084-B8E4-499B41341023}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D1C63E9-A2F1-4084-B8E4-499B41341023}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D1C63E9-A2F1-4084-B8E4-499B41341023}.Release|Any CPU.Build.0 = Release|Any CPU - {CF2E35E6-EFC5-445F-AB17-BEC7E3039C41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF2E35E6-EFC5-445F-AB17-BEC7E3039C41}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF2E35E6-EFC5-445F-AB17-BEC7E3039C41}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF2E35E6-EFC5-445F-AB17-BEC7E3039C41}.Release|Any CPU.Build.0 = Release|Any CPU - {127474F7-81E8-4153-AEE0-A2049D75F77D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {127474F7-81E8-4153-AEE0-A2049D75F77D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {127474F7-81E8-4153-AEE0-A2049D75F77D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {127474F7-81E8-4153-AEE0-A2049D75F77D}.Release|Any CPU.Build.0 = Release|Any CPU - {B05DC461-E82E-430B-A66D-9C0C9C9F9C9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B05DC461-E82E-430B-A66D-9C0C9C9F9C9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B05DC461-E82E-430B-A66D-9C0C9C9F9C9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B05DC461-E82E-430B-A66D-9C0C9C9F9C9E}.Release|Any CPU.Build.0 = Release|Any CPU - {42569CB0-DA27-4BAE-A657-3617D1644AD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42569CB0-DA27-4BAE-A657-3617D1644AD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42569CB0-DA27-4BAE-A657-3617D1644AD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42569CB0-DA27-4BAE-A657-3617D1644AD5}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {96BC465D-507E-43BC-A71E-1B4F7799AB19} = {921A277C-0B10-4186-A814-786F903B4E2C} - {B569A2AD-A0E7-4623-AB3A-9BB49938CBE6} = {921A277C-0B10-4186-A814-786F903B4E2C} - {6D1C63E9-A2F1-4084-B8E4-499B41341023} = {4EDC9FAE-176A-4995-B977-F6D2B735F616} - {CF2E35E6-EFC5-445F-AB17-BEC7E3039C41} = {4EDC9FAE-176A-4995-B977-F6D2B735F616} - {127474F7-81E8-4153-AEE0-A2049D75F77D} = {9A083680-1F9C-4A8C-8FB2-A623DD333AEE} - {B05DC461-E82E-430B-A66D-9C0C9C9F9C9E} = {9A083680-1F9C-4A8C-8FB2-A623DD333AEE} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {79FFEB06-291F-417C-9AC3-2AA0D31CC7D4} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AdvancedAlgos.AlgoToken.AlgoErc20Token.csproj b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AdvancedAlgos.AlgoToken.AlgoErc20Token.csproj deleted file mode 100644 index aee19e22d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AdvancedAlgos.AlgoToken.AlgoErc20Token.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - netcoreapp2.1 - true - latest - - - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoIntegralConverterExtensions.cs b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoIntegralConverterExtensions.cs deleted file mode 100644 index 94458234c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoIntegralConverterExtensions.cs +++ /dev/null @@ -1,35 +0,0 @@ -#pragma warning disable EPS02 // Non-readonly struct used as in-parameter - -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; - -namespace AdvancedAlgos.AlgoToken.AlgoErc20Token -{ - public static class AlgoIntegralConverterExtensions - { - public const byte TOKEN_DECIMALS = 18; - public const long MEGA_FACTOR = 1000000; - - public static readonly BigInteger TokenFactor = BigInteger.Pow(10, TOKEN_DECIMALS); - - public static BigInteger Algo(this in byte value) => value * TokenFactor; - public static BigInteger Algo(this in sbyte value) => value * TokenFactor; - public static BigInteger Algo(this in short value) => value * TokenFactor; - public static BigInteger Algo(this in ushort value) => value * TokenFactor; - public static BigInteger Algo(this in int value) => value * TokenFactor; - public static BigInteger Algo(this in uint value) => value * TokenFactor; - public static BigInteger Algo(this in long value) => value * TokenFactor; - public static BigInteger Algo(this in ulong value) => value * TokenFactor; - - public static BigInteger MAlgo(this in byte value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in sbyte value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in short value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in ushort value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in int value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in uint value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in long value) => value * TokenFactor * MEGA_FACTOR; - public static BigInteger MAlgo(this in ulong value) => value * TokenFactor * MEGA_FACTOR; - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoTokenV1.cs b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoTokenV1.cs deleted file mode 100644 index d61d8fc78..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/AlgoTokenV1.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Contracts; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoErc20Token -{ - public class AlgoTokenV1 : Erc20Token - { - public AlgoTokenV1(Web3 web3, IGasPriceProvider gasPriceProvider) : base(web3, gasPriceProvider) { } - public AlgoTokenV1(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) : base(contractAddress, web3, gasPriceProvider) { } - - protected override string AbiResourceName => $"SmartContracts.src.bin.{nameof(AlgoTokenV1)}.abi"; - protected override string BinResourceName => $"SmartContracts.src.bin.{nameof(AlgoTokenV1)}.bin"; - protected override BigInteger DeploymentGasUnits => 1200000; - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/Erc20Token.cs b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/Erc20Token.cs deleted file mode 100644 index 9b4bf2dc4..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/Erc20Token.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Contracts; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoErc20Token -{ - public abstract class Erc20Token : SmartContract - where TContract : SmartContract - { - private Function _transfer; - private Function _balanceOf; - private Function _pause; - private Function _unpause; - - public Erc20Token(Web3 web3, IGasPriceProvider gasPriceProvider) : base(web3, gasPriceProvider) { } - public Erc20Token(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) : base(contractAddress, web3, gasPriceProvider) { } - - public Task DeployAsync() - => base.DeployAsync(); - - protected override void Initialize(Contract contractDescriptor) - { - _transfer = contractDescriptor.GetFunction("transfer"); - _balanceOf = contractDescriptor.GetFunction("balanceOf"); - _pause = contractDescriptor.GetFunction("pause"); - _unpause = contractDescriptor.GetFunction("unpause"); - } - - public Task TransferAsync(string to, BigInteger value) => - InvokeAsync(_transfer, 900000, to, value); - - public Task BalanceOfAsync(string owner) => - _balanceOf.CallAsync(owner); - - public Task PauseAsync() => - InvokeAsync(_pause, 900000); - - public Task UnpauseAsync() => - InvokeAsync(_unpause, 900000); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/.vscode/settings.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/.vscode/settings.json deleted file mode 100644 index 9dea7e6ca..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "solidity.soliumRules": { - "indentation": "off", - "operator-whitespace": "off", - "error-reason": "off", - "linebreak-style": "off" - }, - "solidity.packageDefaultDependenciesContractsDirectory": "" -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol deleted file mode 100644 index c670b8d33..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol"; - -contract AlgoTokenV1 is ERC20, ERC20Detailed, ERC20Pausable { - - uint256 public constant INITIAL_SUPPLY = 1000000000 * (10 ** uint256(18)); - - constructor() - ERC20Pausable() - ERC20Detailed("Algos", "ALGO", 18) - public - { - _mint(msg.sender, INITIAL_SUPPLY); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner-sol-output.json deleted file mode 100644 index b86d5efa9..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner-sol-output.json +++ /dev/null @@ -1,13793 +0,0 @@ -{ - "contracts": { - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol": { - "AlgoCoreTeamRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoMiner.sol": { - "AlgoMiner": { - "abi": [ - { - "constant": false, - "inputs": [], - "name": "pauseMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "startMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newMinerAddress", - "type": "address" - } - ], - "name": "migrateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopAndRemoveOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "resumeMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deactivateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwnerAddress", - "type": "address" - } - ], - "name": "resetMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "activateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DAYS_PER_YEAR", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "minerType", - "type": "uint16" - }, - { - "name": "category", - "type": "uint8" - }, - { - "name": "ownerAddress", - "type": "address" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50604051608080610ea08339810160409081528151602083015191830151606090930151909290610049336401000000006100c3810204565b61005b336401000000006100de810204565b6002805461ffff191661ffff959095169490941762ff000019166201000060ff949094169390930292909217630100000060b860020a0319166301000000600160a060020a03928316021790925560038054600160a060020a03191691909216179055610184565b6100db600082640100000000610c476100f682021704565b50565b6100db600182640100000000610c476100f682021704565b600160a060020a038116151561010b57600080fd5b61011e828264010000000061014d810204565b1561012857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561016457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610d0d806101936000396000f3006080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663162f986d811461010b5780631777fb4b1461012257806321b79d981461014b578063231d4e2a1461016057806329d10b6e146101815780632e6b6849146101a2578063363aa6c7146101c3578063427534a4146101d8578063608d3d3d146101ed57806380258e471461020e57806381a244591461023957806399f4b2511461025a5780639e614ca01461026f578063ada436e914610284578063b2a32cd5146102a5578063be952494146102ba578063c6846ef8146102cf578063d43acc79146102f6578063da4086791461030b575b600080fd5b34801561011757600080fd5b50610120610320565b005b34801561012e57600080fd5b50610137610386565b604080519115158252519081900360200190f35b34801561015757600080fd5b5061012061038b565b34801561016c57600080fd5b50610120600160a060020a036004351661042f565b34801561018d57600080fd5b50610120600160a060020a036004351661051b565b3480156101ae57600080fd5b50610120600160a060020a0360043516610538565b3480156101cf57600080fd5b50610120610555565b3480156101e457600080fd5b506101206105fd565b3480156101f957600080fd5b50610137600160a060020a0360043516610660565b34801561021a57600080fd5b50610223610678565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b50610137600160a060020a0360043516610687565b34801561026657600080fd5b5061012061069a565b34801561027b57600080fd5b5061012061086c565b34801561029057600080fd5b50610120600160a060020a03600435166108c6565b3480156102b157600080fd5b5061012061095b565b3480156102c657600080fd5b50610120610a6d565b3480156102db57600080fd5b506102e4610a78565b60408051918252519081900360200190f35b34801561030257600080fd5b50610120610a7e565b34801561031757600080fd5b50610120610a87565b61032933610687565b151561033457600080fd5b60016003805460a060020a900460ff169081111561034e57fe5b1461035857600080fd5b600380546002919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550565b600190565b60025463010000009004600160a060020a031633146103a957600080fd5b60016003805460a060020a900460ff16908111156103c357fe5b146103cd57600080fd5b6003547501000000000000000000000000000000000000000000900460ff16156103f657600080fd5b6003805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055565b61043833610660565b151561044357600080fd5b60006003805460a060020a900460ff169081111561045d57fe5b1461046757600080fd5b600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610518928492600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b1580156104d357600080fd5b505af11580156104e7573d6000803e3d6000fd5b505050506040513d60208110156104fd57600080fd5b5051600354600160a060020a0316919063ffffffff610b1416565b50565b61052433610687565b151561052f57600080fd5b61051881610bcc565b61054133610660565b151561054c57600080fd5b61051881610bdd565b61055e33610687565b151561056957600080fd5b600380805460a060020a900460ff169081111561058257fe5b141561058d57600080fd5b6003805474ff00000000000000000000000000000000000000001916740300000000000000000000000000000000000000001775ff000000000000000000000000000000000000000000191690556002805476ffffffffffffffffffffffffffffffffffffffff00000019169055565b61060633610687565b151561061157600080fd5b60026003805460a060020a900460ff169081111561062b57fe5b1461063557600080fd5b600380546001919074ff0000000000000000000000000000000000000000191660a060020a8361037f565b6000610672818363ffffffff610bee16565b92915050565b60025462010000900460ff1690565b600061067260018363ffffffff610bee16565b60006106a533610660565b15156106b057600080fd5b60016003805460a060020a900460ff16908111156106ca57fe5b146106d457600080fd5b6003547501000000000000000000000000000000000000000000900460ff1615156106fe57600080fd5b60035460b860020a900461ffff161515610774576003805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a17905561083c565b60038054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e141561083c576003805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600454600290046004555b5060045460025460035461016d9092049161051891600160a060020a039182169163010000009091041683610b14565b61087533610660565b151561088057600080fd5b60006003805460a060020a900460ff169081111561089a57fe5b14156108a557600080fd5b6003805475ffff000000000000000000000000000000000000000019169055565b6108cf33610687565b15156108da57600080fd5b600380805460a060020a900460ff16908111156108f357fe5b146108fd57600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a17905560028054600160a060020a039290921663010000000276ffffffffffffffffffffffffffffffffffffffff00000019909216919091179055565b600061096633610660565b151561097157600080fd5b60006003805460a060020a900460ff169081111561098b57fe5b1461099557600080fd5b6004541515610a4657600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b505050506040513d6020811015610a2e57600080fd5b50519050801515610a3e57600080fd5b600281046004555b506003805474ff0000000000000000000000000000000000000000191660a060020a179055565b610a7633610c25565b565b61016d81565b610a7633610c36565b60025463010000009004600160a060020a03163314610aa557600080fd5b60016003805460a060020a900460ff1690811115610abf57fe5b14610ac957600080fd5b6003547501000000000000000000000000000000000000000000900460ff161515610af357600080fd5b6003805475ff00000000000000000000000000000000000000000019169055565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d6020811015610bba57600080fd5b50511515610bc757600080fd5b505050565b61051860018263ffffffff610c4716565b61051860008263ffffffff610c4716565b6000600160a060020a0382161515610c0557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61051860018263ffffffff610c9516565b61051860008263ffffffff610c9516565b600160a060020a0381161515610c5c57600080fd5b610c668282610bee565b15610c7057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610caa57600080fd5b610cb48282610bee565b1515610cbf57600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a723058207b121e87532d8c1f7a6b96bd6424aeda0c92676f8aeca5bd4496952ce22529cc0029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x80 DUP1 PUSH2 0xEA0 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH2 0x49 CALLER PUSH5 0x100000000 PUSH2 0xC3 DUP2 MUL DIV JUMP JUMPDEST PUSH2 0x5B CALLER PUSH5 0x100000000 PUSH2 0xDE DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH2 0xFFFF NOT AND PUSH2 0xFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR PUSH3 0xFF0000 NOT AND PUSH3 0x10000 PUSH1 0xFF SWAP5 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 MUL SWAP3 SWAP1 SWAP3 OR PUSH4 0x1000000 PUSH1 0xB8 PUSH1 0x2 EXP SUB NOT AND PUSH4 0x1000000 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 DUP4 AND MUL OR SWAP1 SWAP3 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH2 0x184 JUMP JUMPDEST PUSH2 0xDB PUSH1 0x0 DUP3 PUSH5 0x100000000 PUSH2 0xC47 PUSH2 0xF6 DUP3 MUL OR DIV JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xDB PUSH1 0x1 DUP3 PUSH5 0x100000000 PUSH2 0xC47 PUSH2 0xF6 DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11E DUP3 DUP3 PUSH5 0x100000000 PUSH2 0x14D DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH2 0x128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xD0D DUP1 PUSH2 0x193 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x106 JUMPI PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x162F986D DUP2 EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0x1777FB4B EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x21B79D98 EQ PUSH2 0x14B JUMPI DUP1 PUSH4 0x231D4E2A EQ PUSH2 0x160 JUMPI DUP1 PUSH4 0x29D10B6E EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x2E6B6849 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x363AA6C7 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x427534A4 EQ PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x608D3D3D EQ PUSH2 0x1ED JUMPI DUP1 PUSH4 0x80258E47 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x81A24459 EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0x99F4B251 EQ PUSH2 0x25A JUMPI DUP1 PUSH4 0x9E614CA0 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xADA436E9 EQ PUSH2 0x284 JUMPI DUP1 PUSH4 0xB2A32CD5 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xBE952494 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0xC6846EF8 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xD43ACC79 EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0xDA408679 EQ PUSH2 0x30B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x320 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x137 PUSH2 0x386 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x157 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x38B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x42F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x51B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x538 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x555 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x5FD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x137 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x660 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x223 PUSH2 0x678 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x137 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x687 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x69A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x86C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x8C6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0x95B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0xA6D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2E4 PUSH2 0xA78 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0xA7E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x120 PUSH2 0xA87 JUMP JUMPDEST PUSH2 0x329 CALLER PUSH2 0x687 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x34E JUMPI INVALID JUMPDEST EQ PUSH2 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH1 0xA0 PUSH1 0x2 EXP DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ PUSH2 0x3A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x3C3 JUMPI INVALID JUMPDEST EQ PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x3F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH22 0xFF000000000000000000000000000000000000000000 NOT AND PUSH22 0x1000000000000000000000000000000000000000000 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x438 CALLER PUSH2 0x660 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x443 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x45D JUMPI INVALID JUMPDEST EQ PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x518 SWAP3 DUP5 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4E7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xB14 AND JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x524 CALLER PUSH2 0x687 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x518 DUP2 PUSH2 0xBCC JUMP JUMPDEST PUSH2 0x541 CALLER PUSH2 0x660 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x518 DUP2 PUSH2 0xBDD JUMP JUMPDEST PUSH2 0x55E CALLER PUSH2 0x687 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x569 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x582 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x58D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH21 0x30000000000000000000000000000000000000000 OR PUSH22 0xFF000000000000000000000000000000000000000000 NOT AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH23 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x606 CALLER PUSH2 0x687 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x611 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x62B JUMPI INVALID JUMPDEST EQ PUSH2 0x635 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH1 0xA0 PUSH1 0x2 EXP DUP4 PUSH2 0x37F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x672 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xBEE AND JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x672 PUSH1 0x1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xBEE AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A5 CALLER PUSH2 0x660 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x6CA JUMPI INVALID JUMPDEST EQ PUSH2 0x6D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x6FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xB8 PUSH1 0x2 EXP SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO PUSH2 0x774 JUMPI PUSH1 0x3 DUP1 SLOAD PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT PUSH23 0xFF00000000000000000000000000000000000000000000 NOT SWAP1 SWAP2 AND PUSH23 0x100000000000000000000000000000000000000000000 OR AND PUSH1 0xB8 PUSH1 0x2 EXP OR SWAP1 SSTORE PUSH2 0x83C JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH2 0xFFFF PUSH1 0xB8 PUSH1 0x2 EXP DUP1 DUP5 DIV DUP3 AND SWAP3 SWAP1 SWAP3 ADD DUP2 AND DUP3 MUL PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE SWAP1 SWAP2 DIV AND PUSH2 0x16E EQ ISZERO PUSH2 0x83C JUMPI PUSH1 0x3 DUP1 SLOAD PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT PUSH1 0x1 PUSH1 0xFF PUSH23 0x100000000000000000000000000000000000000000000 DUP1 DUP6 DIV DUP3 AND SWAP3 SWAP1 SWAP3 ADD AND MUL PUSH23 0xFF00000000000000000000000000000000000000000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR AND PUSH1 0xB8 PUSH1 0x2 EXP OR SWAP1 SSTORE PUSH1 0x4 SLOAD PUSH1 0x2 SWAP1 DIV PUSH1 0x4 SSTORE JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD PUSH2 0x16D SWAP1 SWAP3 DIV SWAP2 PUSH2 0x518 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 PUSH4 0x1000000 SWAP1 SWAP2 DIV AND DUP4 PUSH2 0xB14 JUMP JUMPDEST PUSH2 0x875 CALLER PUSH2 0x660 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x89A JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x8A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH22 0xFFFF0000000000000000000000000000000000000000 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x8CF CALLER PUSH2 0x687 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x8F3 JUMPI INVALID JUMPDEST EQ PUSH2 0x8FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH1 0xA0 PUSH1 0x2 EXP OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND PUSH4 0x1000000 MUL PUSH23 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x966 CALLER PUSH2 0x660 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0x98B JUMPI INVALID JUMPDEST EQ PUSH2 0x995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD ISZERO ISZERO PUSH2 0xA46 JUMPI PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA2E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 ISZERO ISZERO PUSH2 0xA3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 DIV PUSH1 0x4 SSTORE JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH1 0xA0 PUSH1 0x2 EXP OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xA76 CALLER PUSH2 0xC25 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16D DUP2 JUMP JUMPDEST PUSH2 0xA76 CALLER PUSH2 0xC36 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH4 0x1000000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ PUSH2 0xAA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP2 GT ISZERO PUSH2 0xABF JUMPI INVALID JUMPDEST EQ PUSH2 0xAC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xAF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH22 0xFF000000000000000000000000000000000000000000 NOT AND SWAP1 SSTORE JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBA4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0xBC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x518 PUSH1 0x1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xC47 AND JUMP JUMPDEST PUSH2 0x518 PUSH1 0x0 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xC47 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0xC05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x518 PUSH1 0x1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xC95 AND JUMP JUMPDEST PUSH2 0x518 PUSH1 0x0 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xC95 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xC5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC66 DUP3 DUP3 PUSH2 0xBEE JUMP JUMPDEST ISZERO PUSH2 0xC70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xCAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCB4 DUP3 DUP3 PUSH2 0xBEE JUMP JUMPDEST ISZERO ISZERO PUSH2 0xCBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH28 0x121E87532D8C1F7A6B96BD6424AEDA0C92676F8AECA5BD4496952CE2 0x25 0x29 0xcc STOP 0x29 ", - "sourceMap": "490:3617:1:-;;;1055:310;8:9:-1;5:2;;;30:1;27;20:12;5:2;1055:310:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;350:24:0;363:10;350:12;;;;:24;:::i;:::-;348:26:2;363:10;348:14;;;;:26;:::i;:::-;1232:10:1;:22;;-1:-1:-1;;1232:22:1;;;;;;;;;;-1:-1:-1;;1265:20:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1296:21:1;;-1:-1:-1;;;;;1296:21:1;;;;;;;;:6;1328:29;;-1:-1:-1;;;;;;1328:29:1;;;;;;;;490:3617;;806:96:0;865:29;:16;886:7;865:20;;;;;;:29;:::i;:::-;806:96;:::o;818:94:2:-;879:25;:12;896:7;879:16;;;;;;:25;:::i;244:167:4:-;-1:-1:-1;;;;;316:21:4;;;;308:30;;;;;;353:18;357:4;363:7;353:3;;;;:18;:::i;:::-;352:19;344:28;;;;;;-1:-1:-1;;;;;379:20:4;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;379:27:4;402:4;379:27;;;244:167::o;725:166::-;809:4;-1:-1:-1;;;;;831:21:4;;;;823:30;;;;;;-1:-1:-1;;;;;;866:20:4;:11;:20;;;;;;;;;;;;;;;725:166::o;490:3617:1:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "668200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "DAYS_PER_YEAR()": "536", - "activateMiner()": "infinite", - "addCoreTeam(address)": "infinite", - "addSupervisor(address)": "infinite", - "deactivateMiner()": "infinite", - "getCategory()": "608", - "isAlgoMiner()": "212", - "isCoreTeam(address)": "infinite", - "isSupervisor(address)": "infinite", - "migrateMiner(address)": "infinite", - "mine()": "infinite", - "pauseMining()": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSupervisor()": "infinite", - "resetMiner(address)": "infinite", - "resumeMining()": "infinite", - "startMining()": "21275", - "stopAndRemoveOwnership()": "infinite", - "stopMining()": "21624" - } - }, - "methodIdentifiers": { - "DAYS_PER_YEAR()": "c6846ef8", - "activateMiner()": "b2a32cd5", - "addCoreTeam(address)": "2e6b6849", - "addSupervisor(address)": "29d10b6e", - "deactivateMiner()": "9e614ca0", - "getCategory()": "80258e47", - "isAlgoMiner()": "1777fb4b", - "isCoreTeam(address)": "608d3d3d", - "isSupervisor(address)": "81a24459", - "migrateMiner(address)": "231d4e2a", - "mine()": "99f4b251", - "pauseMining()": "162f986d", - "renounceCoreTeam()": "d43acc79", - "renounceSupervisor()": "be952494", - "resetMiner(address)": "ada436e9", - "resumeMining()": "427534a4", - "startMining()": "21b79d98", - "stopAndRemoveOwnership()": "363aa6c7", - "stopMining()": "da408679" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"pauseMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAlgoMiner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMinerAddress\",\"type\":\"address\"}],\"name\":\"migrateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addSupervisor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopAndRemoveOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"resumeMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isCoreTeam\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCategory\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSupervisor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mine\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deactivateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwnerAddress\",\"type\":\"address\"}],\"name\":\"resetMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"activateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceSupervisor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DAYS_PER_YEAR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"minerType\",\"type\":\"uint16\"},{\"name\":\"category\",\"type\":\"uint8\"},{\"name\":\"ownerAddress\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoMiner.sol\":\"AlgoMiner\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol\":{\"keccak256\":\"0x98513c8bd78301543260967ae791ebb2a652f73fef585417f72a3097f4e1ae21\",\"urls\":[\"bzzr://a9cfa1df913c0a9ad0937d821ead954e31f7da6a462933bcfa20abe2b44ec984\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoMiner.sol\":{\"keccak256\":\"0xbcbc30316cb27f341b793f19490a9d68bab1a270dbd9c67681a1bf410a6944b5\",\"urls\":[\"bzzr://3e80f70b75884a37ba48ec93966687fb024e9c012eb297e98191245728cf882c\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoSupervisorRole.sol\":{\"keccak256\":\"0x626852f0a9f4d4f9380980d0e1149ddbd366f191fd0ccccdd05bddad48b6edb9\",\"urls\":[\"bzzr://b3e1ed4ffdbe656126a72382de3f2ecacb7005937172513a47019dbaaace7e5a\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol\":{\"keccak256\":\"0xb457e39e512b5475c3e70193ab0a751f6626a50417954247f0cf47c7ca15eff7\",\"urls\":[\"bzzr://3b585a4055121fee393f2b691538036c87f56556f43f0b6e851a88de7b8275e6\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0xa6e47d62e68903c8fff23500d80e7cc8085b9127995803478d9982cd8a6d49e4\",\"urls\":[\"bzzr://7c87eb3c145fe7592c97baa287501faff7e81c1965333c9b042ffb6b387e94a1\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc8a7f15fa44eb10057f8bcb58418d3aed6f5267d211d18f93f3d4e0293e3da44\",\"urls\":[\"bzzr://8825e2508348b01a091ff47b8525e583b6e5604f6679684f805d67a9a6a2a7e9\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x0a172a0ef8681d4a7d8034d003670a9b1968d914b0bfa64e13ddca289a85d24a\",\"urls\":[\"bzzr://733b6203c967b44d6de90b5c6b144e58a380a3f29befb2dc70e765dae2f1ca18\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoSupervisorRole.sol": { - "AlgoSupervisorRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addSupervisor(address)": "29d10b6e", - "isSupervisor(address)": "81a24459", - "renounceSupervisor()": "be952494" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol": { - "IAlgoMiner": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getCategory()": "80258e47", - "isAlgoMiner()": "1777fb4b" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820bfa74e3170abc2ace25475dc7dfb71c6416c34449905f1f30a00ec4431d9206c0029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xbf 0xa7 0x4e BALANCE PUSH17 0xABC2ACE25475DC7DFB71C6416C34449905 CALL RETURN EXP STOP 0xec DIFFICULTY BALANCE 0xd9 KECCAK256 PUSH13 0x290000000000000000000000 ", - "sourceMap": "109:784:4:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0xa6e47d62e68903c8fff23500d80e7cc8085b9127995803478d9982cd8a6d49e4\",\"urls\":[\"bzzr://7c87eb3c145fe7592c97baa287501faff7e81c1965333c9b042ffb6b387e94a1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058204094b52d7c5ef1d5aa4907b2604c65a23d27d58f9b4359f5187db6598b2799300029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 BLOCKHASH SWAP5 0xb5 0x2d PUSH29 0x5EF1D5AA4907B2604C65A23D27D58F9B4359F5187DB6598B2799300029 ", - "sourceMap": "117:1531:5:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "SafeERC20" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058207a38fb4cb6c1c093de86b1ba91e5add211165e6c76b8cc0d294ecbd35bbbeb2c0029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH27 0x38FB4CB6C1C093DE86B1BA91E5ADD211165E6C76B8CC0D294ECBD3 JUMPDEST 0xbb 0xeb 0x2c STOP 0x29 ", - "sourceMap": "353:1296:7:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc8a7f15fa44eb10057f8bcb58418d3aed6f5267d211d18f93f3d4e0293e3da44\",\"urls\":[\"bzzr://8825e2508348b01a091ff47b8525e583b6e5604f6679684f805d67a9a6a2a7e9\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x0a172a0ef8681d4a7d8034d003670a9b1968d914b0bfa64e13ddca289a85d24a\",\"urls\":[\"bzzr://733b6203c967b44d6de90b5c6b144e58a380a3f29befb2dc70e765dae2f1ca18\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol", - "exportedSymbols": { - "AlgoCoreTeamRole": [ - 86 - ] - }, - "id": 87, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:0" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 87, - "sourceUnit": 677, - "src": "28:171:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 86, - "linearizedBaseContracts": [ - 86 - ], - "name": "AlgoCoreTeamRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 5, - "libraryName": { - "contractScope": null, - "id": 3, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 676, - "src": "242:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$676", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "236:27:0", - "typeName": { - "contractScope": null, - "id": 4, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "252:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 7, - "name": "_coreTeamMembers", - "nodeType": "VariableDeclaration", - "scope": 86, - "src": "271:35:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 6, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "271:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 15, - "nodeType": "Block", - "src": "339:43:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 11, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "363:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "363:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "350:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "350:24:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14, - "nodeType": "ExpressionStatement", - "src": "350:24:0" - } - ] - }, - "documentation": null, - "id": 16, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8, - "nodeType": "ParameterList", - "parameters": [], - "src": "327:2:0" - }, - "payable": false, - "returnParameters": { - "id": 9, - "nodeType": "ParameterList", - "parameters": [], - "src": "339:0:0" - }, - "scope": 86, - "src": "315:67:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 26, - "nodeType": "Block", - "src": "414:62:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 20, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "444:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 21, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "444:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 19, - "name": "isCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "433:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 22, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "433:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 18, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "425:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 23, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "425:31:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 24, - "nodeType": "ExpressionStatement", - "src": "425:31:0" - }, - { - "id": 25, - "nodeType": "PlaceholderStatement", - "src": "467:1:0" - } - ] - }, - "documentation": null, - "id": 27, - "name": "onlyCoreTeam", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17, - "nodeType": "ParameterList", - "parameters": [], - "src": "411:2:0" - }, - "src": "390:86:0", - "visibility": "internal" - }, - { - "body": { - "id": 39, - "nodeType": "Block", - "src": "548:55:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 36, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 29, - "src": "587:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 34, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "566:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 35, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 675, - "src": "566:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 37, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "566:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 33, - "id": 38, - "nodeType": "Return", - "src": "559:36:0" - } - ] - }, - "documentation": null, - "id": 40, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 30, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 29, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "504:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 28, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "504:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "503:17:0" - }, - "payable": false, - "returnParameters": { - "id": 33, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 32, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "542:4:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 31, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "542:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "541:6:0" - }, - "scope": 86, - "src": "484:119:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 51, - "nodeType": "Block", - "src": "669:40:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 48, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "693:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 47, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "680:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 49, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "680:21:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 50, - "nodeType": "ExpressionStatement", - "src": "680:21:0" - } - ] - }, - "documentation": null, - "id": 52, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 45, - "modifierName": { - "argumentTypes": null, - "id": 44, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "656:12:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "656:12:0" - } - ], - "name": "addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 43, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 52, - "src": "632:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 41, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "631:17:0" - }, - "payable": false, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [], - "src": "669:0:0" - }, - "scope": 86, - "src": "611:98:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 60, - "nodeType": "Block", - "src": "752:46:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 56, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "779:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "779:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 55, - "name": "_removeCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "763:15:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 58, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "763:27:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59, - "nodeType": "ExpressionStatement", - "src": "763:27:0" - } - ] - }, - "documentation": null, - "id": 61, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "renounceCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 53, - "nodeType": "ParameterList", - "parameters": [], - "src": "742:2:0" - }, - "payable": false, - "returnParameters": { - "id": 54, - "nodeType": "ParameterList", - "parameters": [], - "src": "752:0:0" - }, - "scope": 86, - "src": "717:81:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 72, - "nodeType": "Block", - "src": "854:48:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 69, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 63, - "src": "886:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 66, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "865:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 68, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 621, - "src": "865:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 70, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "865:29:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 71, - "nodeType": "ExpressionStatement", - "src": "865:29:0" - } - ] - }, - "documentation": null, - "id": 73, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 63, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 73, - "src": "828:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 62, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "828:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "827:17:0" - }, - "payable": false, - "returnParameters": { - "id": 65, - "nodeType": "ParameterList", - "parameters": [], - "src": "854:0:0" - }, - "scope": 86, - "src": "806:96:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 84, - "nodeType": "Block", - "src": "961:51:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 81, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "996:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 78, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "972:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 80, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 652, - "src": "972:23:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 82, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "972:32:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 83, - "nodeType": "ExpressionStatement", - "src": "972:32:0" - } - ] - }, - "documentation": null, - "id": 85, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_removeCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 76, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 75, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 85, - "src": "935:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 74, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "935:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "934:17:0" - }, - "payable": false, - "returnParameters": { - "id": 77, - "nodeType": "ParameterList", - "parameters": [], - "src": "961:0:0" - }, - "scope": 86, - "src": "910:102:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 87, - "src": "203:812:0" - } - ], - "src": "0:1017:0" - }, - "id": 0 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoMiner.sol", - "exportedSymbols": { - "AlgoMiner": [ - 482 - ] - }, - "id": 483, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 88, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:1" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 89, - "nodeType": "ImportDirective", - "scope": 483, - "sourceUnit": 874, - "src": "27:177:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 90, - "nodeType": "ImportDirective", - "scope": 483, - "sourceUnit": 1018, - "src": "206:180:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol", - "file": "./IAlgoMiner.sol", - "id": 91, - "nodeType": "ImportDirective", - "scope": 483, - "sourceUnit": 583, - "src": "390:26:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol", - "file": "./AlgoCoreTeamRole.sol", - "id": 92, - "nodeType": "ImportDirective", - "scope": 483, - "sourceUnit": 87, - "src": "418:32:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoSupervisorRole.sol", - "file": "./AlgoSupervisorRole.sol", - "id": 93, - "nodeType": "ImportDirective", - "scope": 483, - "sourceUnit": 570, - "src": "452:34:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 94, - "name": "AlgoCoreTeamRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 86, - "src": "512:16:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCoreTeamRole_$86", - "typeString": "contract AlgoCoreTeamRole" - } - }, - "id": 95, - "nodeType": "InheritanceSpecifier", - "src": "512:16:1" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 96, - "name": "AlgoSupervisorRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 569, - "src": "530:18:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoSupervisorRole_$569", - "typeString": "contract AlgoSupervisorRole" - } - }, - "id": 97, - "nodeType": "InheritanceSpecifier", - "src": "530:18:1" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 98, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 582, - "src": "550:10:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$582", - "typeString": "contract IAlgoMiner" - } - }, - "id": 99, - "nodeType": "InheritanceSpecifier", - "src": "550:10:1" - } - ], - "contractDependencies": [ - 86, - 569, - 582 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 482, - "linearizedBaseContracts": [ - 482, - 582, - 569, - 86 - ], - "name": "AlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 102, - "libraryName": { - "contractScope": null, - "id": 100, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1017, - "src": "574:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1017", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "568:27:1", - "typeName": { - "contractScope": null, - "id": 101, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "588:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - } - }, - { - "constant": true, - "id": 105, - "name": "DAYS_PER_YEAR", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "603:43:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 103, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "603:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "333635", - "id": 104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "643:3:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_365_by_1", - "typeString": "int_const 365" - }, - "value": "365" - }, - "visibility": "public" - }, - { - "canonicalName": "AlgoMiner.MinerState", - "id": 110, - "members": [ - { - "id": 106, - "name": "Deactivated", - "nodeType": "EnumValue", - "src": "682:11:1" - }, - { - "id": 107, - "name": "Activated", - "nodeType": "EnumValue", - "src": "704:9:1" - }, - { - "id": 108, - "name": "Suspended", - "nodeType": "EnumValue", - "src": "724:9:1" - }, - { - "id": 109, - "name": "Stopped", - "nodeType": "EnumValue", - "src": "744:7:1" - } - ], - "name": "MinerState", - "nodeType": "EnumDefinition", - "src": "655:103:1" - }, - { - "constant": false, - "id": 112, - "name": "_minerType", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "766:25:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 111, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "766:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 114, - "name": "_category", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "798:23:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 113, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "798:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 116, - "name": "_miner", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "828:22:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 115, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "828:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 118, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "857:21:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 117, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "857:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 120, - "name": "_state", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "887:25:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "typeName": { - "contractScope": null, - "id": 119, - "name": "MinerState", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 110, - "src": "887:10:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 122, - "name": "_mining", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "919:20:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 121, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "919:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 124, - "name": "_currentYear", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "946:26:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 123, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "946:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 126, - "name": "_currentDay", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "979:26:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 125, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "979:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 128, - "name": "_currentYearSupply", - "nodeType": "VariableDeclaration", - "scope": 482, - "src": "1012:34:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 127, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1012:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 161, - "nodeType": "Block", - "src": "1219:146:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 145, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 143, - "name": "_minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "1232:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 144, - "name": "minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "1245:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "1232:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 146, - "nodeType": "ExpressionStatement", - "src": "1232:22:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 147, - "name": "_category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "1265:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 148, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 132, - "src": "1277:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "1265:20:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 150, - "nodeType": "ExpressionStatement", - "src": "1265:20:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 151, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "1296:6:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 152, - "name": "ownerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 134, - "src": "1305:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1296:21:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 154, - "nodeType": "ExpressionStatement", - "src": "1296:21:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 155, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "1328:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 157, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 136, - "src": "1344:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 156, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 873, - "src": "1337:6:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$873_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1337:20:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "src": "1328:29:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 160, - "nodeType": "ExpressionStatement", - "src": "1328:29:1" - } - ] - }, - "documentation": null, - "id": 162, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 139, - "modifierName": { - "argumentTypes": null, - "id": 138, - "name": "AlgoCoreTeamRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 86, - "src": "1154:16:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoCoreTeamRole_$86_$", - "typeString": "type(contract AlgoCoreTeamRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1154:18:1" - }, - { - "arguments": [], - "id": 141, - "modifierName": { - "argumentTypes": null, - "id": 140, - "name": "AlgoSupervisorRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 569, - "src": "1182:18:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoSupervisorRole_$569_$", - "typeString": "type(contract AlgoSupervisorRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1182:20:1" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "minerType", - "nodeType": "VariableDeclaration", - "scope": 162, - "src": "1067:16:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 129, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1067:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 132, - "name": "category", - "nodeType": "VariableDeclaration", - "scope": 162, - "src": "1085:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 131, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1085:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 134, - "name": "ownerAddress", - "nodeType": "VariableDeclaration", - "scope": 162, - "src": "1101:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1101:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 136, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 162, - "src": "1123:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 135, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1123:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1066:78:1" - }, - "payable": false, - "returnParameters": { - "id": 142, - "nodeType": "ParameterList", - "parameters": [], - "src": "1219:0:1" - }, - "scope": 482, - "src": "1055:310:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 172, - "nodeType": "Block", - "src": "1394:60:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 165, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "1413:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1413:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 167, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "1427:6:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1413:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 164, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1405:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1405:29:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 170, - "nodeType": "ExpressionStatement", - "src": "1405:29:1" - }, - { - "id": 171, - "nodeType": "PlaceholderStatement", - "src": "1445:1:1" - } - ] - }, - "documentation": null, - "id": 173, - "name": "onlyMiner", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "1391:2:1" - }, - "src": "1373:81:1", - "visibility": "internal" - }, - { - "body": { - "id": 216, - "nodeType": "Block", - "src": "1511:326:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 179, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "1530:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 180, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "1540:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 181, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1540:22:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "1530:32:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 178, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1522:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 183, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1522:41:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 184, - "nodeType": "ExpressionStatement", - "src": "1522:41:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 185, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "1579:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 186, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1601:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1579:23:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 210, - "nodeType": "IfStatement", - "src": "1576:212:1", - "trueBody": { - "id": 209, - "nodeType": "Block", - "src": "1604:184:1", - "statements": [ - { - "assignments": [ - 189 - ], - "declarations": [ - { - "constant": false, - "id": 189, - "name": "currentBalance", - "nodeType": "VariableDeclaration", - "scope": 217, - "src": "1619:22:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 188, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1619:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 196, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 193, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1059, - "src": "1669:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoMiner_$482", - "typeString": "contract AlgoMiner" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AlgoMiner_$482", - "typeString": "contract AlgoMiner" - } - ], - "id": 192, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1661:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1661:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 190, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "1644:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 818, - "src": "1644:16:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1644:31:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1619:56:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 198, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 189, - "src": "1700:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1718:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1700:19:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 197, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1692:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 201, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1692:28:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 202, - "nodeType": "ExpressionStatement", - "src": "1692:28:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 203, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "1737:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 204, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 189, - "src": "1758:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 205, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1775:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "1758:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1737:39:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 208, - "nodeType": "ExpressionStatement", - "src": "1737:39:1" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 211, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "1800:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 212, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "1809:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 213, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1809:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "1800:29:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 215, - "nodeType": "ExpressionStatement", - "src": "1800:29:1" - } - ] - }, - "documentation": null, - "id": 217, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 176, - "modifierName": { - "argumentTypes": null, - "id": 175, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "1498:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1498:12:1" - } - ], - "name": "activateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 174, - "nodeType": "ParameterList", - "parameters": [], - "src": "1488:2:1" - }, - "payable": false, - "returnParameters": { - "id": 177, - "nodeType": "ParameterList", - "parameters": [], - "src": "1511:0:1" - }, - "scope": 482, - "src": "1466:371:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 238, - "nodeType": "Block", - "src": "1892:138:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 223, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "1911:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 224, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "1921:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 225, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1921:22:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "1911:32:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 222, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1903:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1903:41:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 228, - "nodeType": "ExpressionStatement", - "src": "1903:41:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 229, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "1965:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 230, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "1974:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1974:22:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "1965:31:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 233, - "nodeType": "ExpressionStatement", - "src": "1965:31:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 234, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "2007:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 235, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2017:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2007:15:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 237, - "nodeType": "ExpressionStatement", - "src": "2007:15:1" - } - ] - }, - "documentation": null, - "id": 239, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 220, - "modifierName": { - "argumentTypes": null, - "id": 219, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "1879:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1879:12:1" - } - ], - "name": "deactivateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 218, - "nodeType": "ParameterList", - "parameters": [], - "src": "1869:2:1" - }, - "payable": false, - "returnParameters": { - "id": 221, - "nodeType": "ParameterList", - "parameters": [], - "src": "1892:0:1" - }, - "scope": 482, - "src": "1845:185:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 265, - "nodeType": "Block", - "src": "2105:142:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 247, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2124:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 248, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2134:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 249, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2134:22:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2124:32:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 246, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "2116:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2116:41:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 252, - "nodeType": "ExpressionStatement", - "src": "2116:41:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 256, - "name": "newMinerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 241, - "src": "2190:15:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 260, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1059, - "src": "2232:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoMiner_$482", - "typeString": "contract AlgoMiner" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AlgoMiner_$482", - "typeString": "contract AlgoMiner" - } - ], - "id": 259, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2224:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2224:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 257, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "2207:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 818, - "src": "2207:16:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2207:31:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 253, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "2170:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 898, - "src": "2170:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$873_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$873_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2170:69:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 264, - "nodeType": "ExpressionStatement", - "src": "2170:69:1" - } - ] - }, - "documentation": null, - "id": 266, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 244, - "modifierName": { - "argumentTypes": null, - "id": 243, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "2092:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2092:12:1" - } - ], - "name": "migrateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 241, - "name": "newMinerAddress", - "nodeType": "VariableDeclaration", - "scope": 266, - "src": "2060:23:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2060:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2059:25:1" - }, - "payable": false, - "returnParameters": { - "id": 245, - "nodeType": "ParameterList", - "parameters": [], - "src": "2105:0:1" - }, - "scope": 482, - "src": "2038:209:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 283, - "nodeType": "Block", - "src": "2300:108:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 275, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 272, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2319:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 273, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2329:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 274, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2329:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2319:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 271, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "2311:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2311:39:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 277, - "nodeType": "ExpressionStatement", - "src": "2311:39:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 278, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2371:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 279, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2380:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Suspended", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2380:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2371:29:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 282, - "nodeType": "ExpressionStatement", - "src": "2371:29:1" - } - ] - }, - "documentation": null, - "id": 284, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 269, - "modifierName": { - "argumentTypes": null, - "id": 268, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2285:14:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2285:14:1" - } - ], - "name": "pauseMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 267, - "nodeType": "ParameterList", - "parameters": [], - "src": "2275:2:1" - }, - "payable": false, - "returnParameters": { - "id": 270, - "nodeType": "ParameterList", - "parameters": [], - "src": "2300:0:1" - }, - "scope": 482, - "src": "2255:153:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 301, - "nodeType": "Block", - "src": "2462:100:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 290, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2481:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 291, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2491:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 292, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Suspended", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2491:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2481:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 289, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "2473:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2473:39:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 295, - "nodeType": "ExpressionStatement", - "src": "2473:39:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 296, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2525:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 297, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2534:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 298, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2534:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2525:29:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 300, - "nodeType": "ExpressionStatement", - "src": "2525:29:1" - } - ] - }, - "documentation": null, - "id": 302, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 287, - "modifierName": { - "argumentTypes": null, - "id": 286, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2447:14:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2447:14:1" - } - ], - "name": "resumeMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 285, - "nodeType": "ParameterList", - "parameters": [], - "src": "2437:2:1" - }, - "payable": false, - "returnParameters": { - "id": 288, - "nodeType": "ParameterList", - "parameters": [], - "src": "2462:0:1" - }, - "scope": 482, - "src": "2416:146:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 329, - "nodeType": "Block", - "src": "2626:160:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 311, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 308, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2645:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 309, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2655:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 310, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2655:18:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2645:28:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 307, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "2637:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2637:37:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 313, - "nodeType": "ExpressionStatement", - "src": "2637:37:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 314, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2695:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 315, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2704:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 316, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2704:18:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2695:27:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 318, - "nodeType": "ExpressionStatement", - "src": "2695:27:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 319, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "2733:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 320, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2743:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2733:15:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 322, - "nodeType": "ExpressionStatement", - "src": "2733:15:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 323, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "2759:6:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 325, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2776:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 324, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2768:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 326, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2768:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2759:19:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 328, - "nodeType": "ExpressionStatement", - "src": "2759:19:1" - } - ] - }, - "documentation": null, - "id": 330, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 305, - "modifierName": { - "argumentTypes": null, - "id": 304, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2611:14:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2611:14:1" - } - ], - "name": "stopAndRemoveOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 303, - "nodeType": "ParameterList", - "parameters": [], - "src": "2601:2:1" - }, - "payable": false, - "returnParameters": { - "id": 306, - "nodeType": "ParameterList", - "parameters": [], - "src": "2626:0:1" - }, - "scope": 482, - "src": "2570:216:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 353, - "nodeType": "Block", - "src": "2861:133:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 338, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2880:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 339, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2890:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 340, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2890:18:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2880:28:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 337, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "2872:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2872:37:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 343, - "nodeType": "ExpressionStatement", - "src": "2872:37:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 344, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "2922:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 345, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "2931:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 346, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2931:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2922:29:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 348, - "nodeType": "ExpressionStatement", - "src": "2922:29:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 349, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "2962:6:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 350, - "name": "newOwnerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "2971:15:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2962:24:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 352, - "nodeType": "ExpressionStatement", - "src": "2962:24:1" - } - ] - }, - "documentation": null, - "id": 354, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 335, - "modifierName": { - "argumentTypes": null, - "id": 334, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "2846:14:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2846:14:1" - } - ], - "name": "resetMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 333, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 332, - "name": "newOwnerAddress", - "nodeType": "VariableDeclaration", - "scope": 354, - "src": "2814:23:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 331, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2814:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2813:25:1" - }, - "payable": false, - "returnParameters": { - "id": 336, - "nodeType": "ParameterList", - "parameters": [], - "src": "2861:0:1" - }, - "scope": 482, - "src": "2794:200:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 375, - "nodeType": "Block", - "src": "3042:121:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 360, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "3061:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 361, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "3071:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 362, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3071:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3061:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 359, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3053:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3053:39:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 365, - "nodeType": "ExpressionStatement", - "src": "3053:39:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3111:8:1", - "subExpression": { - "argumentTypes": null, - "id": 367, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "3112:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 366, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3103:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3103:17:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 370, - "nodeType": "ExpressionStatement", - "src": "3103:17:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 371, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "3141:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 372, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3151:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "3141:14:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 374, - "nodeType": "ExpressionStatement", - "src": "3141:14:1" - } - ] - }, - "documentation": null, - "id": 376, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 357, - "modifierName": { - "argumentTypes": null, - "id": 356, - "name": "onlyMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 173, - "src": "3032:9:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3032:9:1" - } - ], - "name": "startMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 355, - "nodeType": "ParameterList", - "parameters": [], - "src": "3022:2:1" - }, - "payable": false, - "returnParameters": { - "id": 358, - "nodeType": "ParameterList", - "parameters": [], - "src": "3042:0:1" - }, - "scope": 482, - "src": "3002:161:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 396, - "nodeType": "Block", - "src": "3210:121:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 382, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "3229:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 383, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "3239:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3239:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3229:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 381, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3221:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3221:39:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 387, - "nodeType": "ExpressionStatement", - "src": "3221:39:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 389, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "3279:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 388, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3271:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 390, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3271:16:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 391, - "nodeType": "ExpressionStatement", - "src": "3271:16:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 392, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "3308:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 393, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3318:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "3308:15:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 395, - "nodeType": "ExpressionStatement", - "src": "3308:15:1" - } - ] - }, - "documentation": null, - "id": 397, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 379, - "modifierName": { - "argumentTypes": null, - "id": 378, - "name": "onlyMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 173, - "src": "3200:9:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3200:9:1" - } - ], - "name": "stopMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 377, - "nodeType": "ParameterList", - "parameters": [], - "src": "3190:2:1" - }, - "payable": false, - "returnParameters": { - "id": 380, - "nodeType": "ParameterList", - "parameters": [], - "src": "3210:0:1" - }, - "scope": 482, - "src": "3171:160:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 464, - "nodeType": "Block", - "src": "3375:547:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 403, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 120, - "src": "3394:6:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 404, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "3404:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$110_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 405, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3404:20:1", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$110", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3394:30:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 402, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3386:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 407, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3386:39:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 408, - "nodeType": "ExpressionStatement", - "src": "3386:39:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 410, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 122, - "src": "3444:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 409, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "3436:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3436:16:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 412, - "nodeType": "ExpressionStatement", - "src": "3436:16:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "id": 415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 413, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 126, - "src": "3468:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 414, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3483:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3468:16:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 449, - "nodeType": "Block", - "src": "3565:238:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3580:13:1", - "subExpression": { - "argumentTypes": null, - "id": 425, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 126, - "src": "3580:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 427, - "nodeType": "ExpressionStatement", - "src": "3580:13:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 428, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 126, - "src": "3611:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 429, - "name": "DAYS_PER_YEAR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "3627:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3643:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3627:17:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 432, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3626:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3611:34:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 448, - "nodeType": "IfStatement", - "src": "3608:184:1", - "trueBody": { - "id": 447, - "nodeType": "Block", - "src": "3647:145:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3666:14:1", - "subExpression": { - "argumentTypes": null, - "id": 434, - "name": "_currentYear", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "3666:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 436, - "nodeType": "ExpressionStatement", - "src": "3666:14:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 437, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 126, - "src": "3699:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 438, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3713:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3699:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 440, - "nodeType": "ExpressionStatement", - "src": "3699:15:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 441, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "3733:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 442, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "3754:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 443, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3775:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "3754:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3733:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 446, - "nodeType": "ExpressionStatement", - "src": "3733:43:1" - } - ] - } - } - ] - }, - "id": 450, - "nodeType": "IfStatement", - "src": "3465:338:1", - "trueBody": { - "id": 424, - "nodeType": "Block", - "src": "3486:73:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 416, - "name": "_currentYear", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "3501:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 417, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3516:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3501:16:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 419, - "nodeType": "ExpressionStatement", - "src": "3501:16:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 420, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 126, - "src": "3532:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3546:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3532:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 423, - "nodeType": "ExpressionStatement", - "src": "3532:15:1" - } - ] - } - }, - { - "assignments": [ - 452 - ], - "declarations": [ - { - "constant": false, - "id": 452, - "name": "tokens", - "nodeType": "VariableDeclaration", - "scope": 465, - "src": "3815:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 451, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3815:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 456, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 453, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "3832:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 454, - "name": "DAYS_PER_YEAR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "3853:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3832:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3815:51:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 460, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "3899:6:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 461, - "name": "tokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 452, - "src": "3907:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 457, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "3879:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 898, - "src": "3879:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$873_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$873_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3879:35:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 463, - "nodeType": "ExpressionStatement", - "src": "3879:35:1" - } - ] - }, - "documentation": null, - "id": 465, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 400, - "modifierName": { - "argumentTypes": null, - "id": 399, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "3362:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3362:12:1" - } - ], - "name": "mine", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 398, - "nodeType": "ParameterList", - "parameters": [], - "src": "3352:2:1" - }, - "payable": false, - "returnParameters": { - "id": 401, - "nodeType": "ParameterList", - "parameters": [], - "src": "3375:0:1" - }, - "scope": 482, - "src": "3339:583:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 472, - "nodeType": "Block", - "src": "3980:30:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3998:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 469, - "id": 471, - "nodeType": "Return", - "src": "3991:11:1" - } - ] - }, - "documentation": null, - "id": 473, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 466, - "nodeType": "ParameterList", - "parameters": [], - "src": "3950:2:1" - }, - "payable": false, - "returnParameters": { - "id": 469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 468, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 473, - "src": "3974:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 467, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3974:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3973:6:1" - }, - "scope": 482, - "src": "3930:80:1", - "stateMutability": "pure", - "superFunction": 576, - "visibility": "public" - }, - { - "body": { - "id": 480, - "nodeType": "Block", - "src": "4069:35:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 478, - "name": "_category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "4087:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 477, - "id": 479, - "nodeType": "Return", - "src": "4080:16:1" - } - ] - }, - "documentation": null, - "id": 481, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 474, - "nodeType": "ParameterList", - "parameters": [], - "src": "4038:2:1" - }, - "payable": false, - "returnParameters": { - "id": 477, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 476, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 481, - "src": "4062:5:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 475, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4062:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4061:7:1" - }, - "scope": 482, - "src": "4018:86:1", - "stateMutability": "view", - "superFunction": 581, - "visibility": "public" - } - ], - "scope": 483, - "src": "490:3617:1" - } - ], - "src": "0:4109:1" - }, - "id": 1 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoSupervisorRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoSupervisorRole.sol", - "exportedSymbols": { - "AlgoSupervisorRole": [ - 569 - ] - }, - "id": 570, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 484, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:2" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 485, - "nodeType": "ImportDirective", - "scope": 570, - "sourceUnit": 677, - "src": "28:171:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 569, - "linearizedBaseContracts": [ - 569 - ], - "name": "AlgoSupervisorRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 488, - "libraryName": { - "contractScope": null, - "id": 486, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 676, - "src": "244:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$676", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "238:27:2", - "typeName": { - "contractScope": null, - "id": 487, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "254:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 490, - "name": "_supervisors", - "nodeType": "VariableDeclaration", - "scope": 569, - "src": "273:31:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 489, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "273:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 498, - "nodeType": "Block", - "src": "337:45:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 494, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "363:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "363:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 493, - "name": "_addSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 556, - "src": "348:14:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "348:26:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 497, - "nodeType": "ExpressionStatement", - "src": "348:26:2" - } - ] - }, - "documentation": null, - "id": 499, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 491, - "nodeType": "ParameterList", - "parameters": [], - "src": "325:2:2" - }, - "payable": false, - "returnParameters": { - "id": 492, - "nodeType": "ParameterList", - "parameters": [], - "src": "337:0:2" - }, - "scope": 569, - "src": "313:69:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 509, - "nodeType": "Block", - "src": "416:64:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 503, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "448:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "448:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 502, - "name": "isSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "435:12:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "435:24:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 501, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "427:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "427:33:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 507, - "nodeType": "ExpressionStatement", - "src": "427:33:2" - }, - { - "id": 508, - "nodeType": "PlaceholderStatement", - "src": "471:1:2" - } - ] - }, - "documentation": null, - "id": 510, - "name": "onlySupervisor", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 500, - "nodeType": "ParameterList", - "parameters": [], - "src": "413:2:2" - }, - "src": "390:90:2", - "visibility": "internal" - }, - { - "body": { - "id": 522, - "nodeType": "Block", - "src": "554:51:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 519, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 512, - "src": "589:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 517, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 490, - "src": "572:12:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 518, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 675, - "src": "572:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "572:25:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 516, - "id": 521, - "nodeType": "Return", - "src": "565:32:2" - } - ] - }, - "documentation": null, - "id": 523, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 513, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 512, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 523, - "src": "510:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 511, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "510:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "509:17:2" - }, - "payable": false, - "returnParameters": { - "id": 516, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 515, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 523, - "src": "548:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 514, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "548:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "547:6:2" - }, - "scope": 569, - "src": "488:117:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 534, - "nodeType": "Block", - "src": "675:42:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 531, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 525, - "src": "701:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 530, - "name": "_addSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 556, - "src": "686:14:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "686:23:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 533, - "nodeType": "ExpressionStatement", - "src": "686:23:2" - } - ] - }, - "documentation": null, - "id": 535, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 528, - "modifierName": { - "argumentTypes": null, - "id": 527, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "660:14:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "660:14:2" - } - ], - "name": "addSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 526, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 525, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 535, - "src": "636:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 524, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "636:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "635:17:2" - }, - "payable": false, - "returnParameters": { - "id": 529, - "nodeType": "ParameterList", - "parameters": [], - "src": "675:0:2" - }, - "scope": 569, - "src": "613:104:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 543, - "nodeType": "Block", - "src": "762:48:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 539, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "791:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "791:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 538, - "name": "_removeSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 568, - "src": "773:17:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "773:29:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 542, - "nodeType": "ExpressionStatement", - "src": "773:29:2" - } - ] - }, - "documentation": null, - "id": 544, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "renounceSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 536, - "nodeType": "ParameterList", - "parameters": [], - "src": "752:2:2" - }, - "payable": false, - "returnParameters": { - "id": 537, - "nodeType": "ParameterList", - "parameters": [], - "src": "762:0:2" - }, - "scope": 569, - "src": "725:85:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 555, - "nodeType": "Block", - "src": "868:44:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 552, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 546, - "src": "896:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 549, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 490, - "src": "879:12:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 551, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 621, - "src": "879:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "879:25:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 554, - "nodeType": "ExpressionStatement", - "src": "879:25:2" - } - ] - }, - "documentation": null, - "id": 556, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_addSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 547, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 546, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 556, - "src": "842:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 545, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "842:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "841:17:2" - }, - "payable": false, - "returnParameters": { - "id": 548, - "nodeType": "ParameterList", - "parameters": [], - "src": "868:0:2" - }, - "scope": 569, - "src": "818:94:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 567, - "nodeType": "Block", - "src": "973:47:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 564, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 558, - "src": "1004:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 561, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 490, - "src": "984:12:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 563, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 652, - "src": "984:19:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$589_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "984:28:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 566, - "nodeType": "ExpressionStatement", - "src": "984:28:2" - } - ] - }, - "documentation": null, - "id": 568, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_removeSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 559, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 558, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 568, - "src": "947:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 557, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "947:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "946:17:2" - }, - "payable": false, - "returnParameters": { - "id": 560, - "nodeType": "ParameterList", - "parameters": [], - "src": "973:0:2" - }, - "scope": 569, - "src": "920:100:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 570, - "src": "203:820:2" - } - ], - "src": "0:1025:2" - }, - "id": 2 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol", - "exportedSymbols": { - "IAlgoMiner": [ - 582 - ] - }, - "id": 583, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 571, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:3" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": false, - "id": 582, - "linearizedBaseContracts": [ - 582 - ], - "name": "IAlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 576, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 572, - "nodeType": "ParameterList", - "parameters": [], - "src": "74:2:3" - }, - "payable": false, - "returnParameters": { - "id": 575, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 574, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 576, - "src": "98:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 573, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "98:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "97:6:3" - }, - "scope": 582, - "src": "54:50:3", - "stateMutability": "pure", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 581, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 577, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:2:3" - }, - "payable": false, - "returnParameters": { - "id": 580, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 579, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 581, - "src": "154:5:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 578, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "154:5:3", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "153:7:3" - }, - "scope": 582, - "src": "110:51:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 583, - "src": "27:137:3" - } - ], - "src": "0:164:3" - }, - "id": 3 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 676 - ] - }, - "id": 677, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 584, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 676, - "linearizedBaseContracts": [ - 676 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 589, - "members": [ - { - "constant": false, - "id": 588, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 589, - "src": "145:32:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 587, - "keyType": { - "id": 585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "154:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "145:25:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 586, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "165:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 676, - "src": "127:55:4", - "visibility": "public" - }, - { - "body": { - "id": 620, - "nodeType": "Block", - "src": "302:109:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 601, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 597, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 593, - "src": "316:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "327:7:4", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 600, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "316:21:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 596, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "308:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 602, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "308:30:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 603, - "nodeType": "ExpressionStatement", - "src": "308:30:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "352:19:4", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 606, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 591, - "src": "357:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 607, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 593, - "src": "363:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 605, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 675, - "src": "353:3:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "353:18:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 604, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "344:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "344:28:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 611, - "nodeType": "ExpressionStatement", - "src": "344:28:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 612, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 591, - "src": "379:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 615, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 588, - "src": "379:11:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 616, - "indexExpression": { - "argumentTypes": null, - "id": 614, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 593, - "src": "391:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "379:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 617, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "402:4:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "379:27:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 619, - "nodeType": "ExpressionStatement", - "src": "379:27:4" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 621, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 594, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 591, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 621, - "src": "257:17:4", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 590, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "257:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 593, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 621, - "src": "276:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 592, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "276:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "256:36:4" - }, - "payable": false, - "returnParameters": { - "id": 595, - "nodeType": "ParameterList", - "parameters": [], - "src": "302:0:4" - }, - "scope": 676, - "src": "244:167:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 651, - "nodeType": "Block", - "src": "538:109:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 629, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 625, - "src": "552:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "571:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "563:7:4", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "563:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "552:21:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 628, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "544:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "544:30:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 635, - "nodeType": "ExpressionStatement", - "src": "544:30:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 638, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 623, - "src": "592:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 639, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 625, - "src": "598:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 637, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 675, - "src": "588:3:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$589_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "588:18:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 636, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "580:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "580:27:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 642, - "nodeType": "ExpressionStatement", - "src": "580:27:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 643, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 623, - "src": "614:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 646, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 588, - "src": "614:11:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 647, - "indexExpression": { - "argumentTypes": null, - "id": 645, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 625, - "src": "626:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "614:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 648, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "637:5:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "614:28:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 650, - "nodeType": "ExpressionStatement", - "src": "614:28:4" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 652, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 626, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 623, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 652, - "src": "493:17:4", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 622, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "493:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 625, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 652, - "src": "512:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 624, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "512:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "492:36:4" - }, - "payable": false, - "returnParameters": { - "id": 627, - "nodeType": "ParameterList", - "parameters": [], - "src": "538:0:4" - }, - "scope": 676, - "src": "477:170:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 674, - "nodeType": "Block", - "src": "817:74:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 666, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 662, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 656, - "src": "831:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "850:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 663, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "842:7:4", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 665, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "842:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "831:21:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 661, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "823:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "823:30:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 668, - "nodeType": "ExpressionStatement", - "src": "823:30:4" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 669, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 654, - "src": "866:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 670, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 588, - "src": "866:11:4", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 672, - "indexExpression": { - "argumentTypes": null, - "id": 671, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 656, - "src": "878:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "866:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 660, - "id": 673, - "nodeType": "Return", - "src": "859:27:4" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 675, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 654, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 675, - "src": "738:17:4", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 653, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 589, - "src": "738:4:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$589_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 656, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 675, - "src": "757:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 655, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "757:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "737:36:4" - }, - "payable": false, - "returnParameters": { - "id": 660, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 659, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 675, - "src": "809:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 658, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "809:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "808:6:4" - }, - "scope": 676, - "src": "725:166:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 677, - "src": "109:784:4" - } - ], - "src": "0:894:4" - }, - "id": 4 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 804 - ] - }, - "id": 805, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 678, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:5" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 804, - "linearizedBaseContracts": [ - 804 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 710, - "nodeType": "Block", - "src": "271:314:5", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 687, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 680, - "src": "486:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 688, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "491:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "486:6:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 693, - "nodeType": "IfStatement", - "src": "482:35:5", - "trueBody": { - "id": 692, - "nodeType": "Block", - "src": "494:23:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 690, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "509:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 686, - "id": 691, - "nodeType": "Return", - "src": "502:8:5" - } - ] - } - }, - { - "assignments": [ - 695 - ], - "declarations": [ - { - "constant": false, - "id": 695, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 711, - "src": "523:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 694, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "523:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 699, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 696, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 680, - "src": "535:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 697, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 682, - "src": "539:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "535:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "523:17:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 701, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 695, - "src": "554:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 702, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 680, - "src": "558:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 704, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 682, - "src": "563:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:10:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 700, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "546:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "546:19:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 707, - "nodeType": "ExpressionStatement", - "src": "546:19:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 708, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 695, - "src": "579:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 686, - "id": 709, - "nodeType": "Return", - "src": "572:8:5" - } - ] - }, - "documentation": "@dev Multiplies two numbers, reverts on overflow.", - "id": 711, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 680, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 711, - "src": "217:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 679, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "217:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 682, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 711, - "src": "228:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 681, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "228:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "216:22:5" - }, - "payable": false, - "returnParameters": { - "id": 686, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 685, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 711, - "src": "262:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 684, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "262:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "261:9:5" - }, - "scope": 804, - "src": "204:381:5", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 734, - "nodeType": "Block", - "src": "762:203:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 721, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "776:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 722, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "780:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "776:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 720, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "768:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "768:14:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 725, - "nodeType": "ExpressionStatement", - "src": "768:14:5" - }, - { - "assignments": [ - 727 - ], - "declarations": [ - { - "constant": false, - "id": 727, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 735, - "src": "846:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 726, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "846:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 731, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 728, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 713, - "src": "858:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 729, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 715, - "src": "862:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "858:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "846:17:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 732, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 727, - "src": "959:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 719, - "id": 733, - "nodeType": "Return", - "src": "952:8:5" - } - ] - }, - "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.", - "id": 735, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 716, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 713, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 735, - "src": "708:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 712, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 715, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 735, - "src": "719:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 714, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "719:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "707:22:5" - }, - "payable": false, - "returnParameters": { - "id": 719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 718, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 735, - "src": "753:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 717, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "753:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "752:9:5" - }, - "scope": 804, - "src": "695:270:5", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 758, - "nodeType": "Block", - "src": "1145:64:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 745, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 739, - "src": "1159:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 746, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "1164:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1159:6:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 744, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1151:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 748, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1151:15:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 749, - "nodeType": "ExpressionStatement", - "src": "1151:15:5" - }, - { - "assignments": [ - 751 - ], - "declarations": [ - { - "constant": false, - "id": 751, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "1172:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1172:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 755, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 754, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 752, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "1184:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 753, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 739, - "src": "1188:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1184:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1172:17:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 756, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 751, - "src": "1203:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 743, - "id": 757, - "nodeType": "Return", - "src": "1196:8:5" - } - ] - }, - "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 759, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 740, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 737, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "1091:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 736, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1091:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 739, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "1102:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 738, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1102:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1090:22:5" - }, - "payable": false, - "returnParameters": { - "id": 743, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 742, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "1136:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 741, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1136:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1135:9:5" - }, - "scope": 804, - "src": "1078:131:5", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 782, - "nodeType": "Block", - "src": "1339:64:5", - "statements": [ - { - "assignments": [ - 769 - ], - "declarations": [ - { - "constant": false, - "id": 769, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 783, - "src": "1345:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 768, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1345:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 773, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 770, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 761, - "src": "1357:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 771, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 763, - "src": "1361:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1357:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1345:17:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 777, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 775, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 769, - "src": "1376:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 776, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 761, - "src": "1381:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1376:6:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 774, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1368:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1368:15:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 779, - "nodeType": "ExpressionStatement", - "src": "1368:15:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 780, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 769, - "src": "1397:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 767, - "id": 781, - "nodeType": "Return", - "src": "1390:8:5" - } - ] - }, - "documentation": "@dev Adds two numbers, reverts on overflow.", - "id": 783, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 764, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 761, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 783, - "src": "1285:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 760, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1285:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 763, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 783, - "src": "1296:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 762, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1296:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1284:22:5" - }, - "payable": false, - "returnParameters": { - "id": 767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 766, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 783, - "src": "1330:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 765, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1330:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1329:9:5" - }, - "scope": 804, - "src": "1272:131:5", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 802, - "nodeType": "Block", - "src": "1602:44:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 793, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 787, - "src": "1616:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 794, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1621:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1616:6:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 792, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1608:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1608:15:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 797, - "nodeType": "ExpressionStatement", - "src": "1608:15:5" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 800, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 798, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 785, - "src": "1636:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 799, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 787, - "src": "1640:1:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1636:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 791, - "id": 801, - "nodeType": "Return", - "src": "1629:12:5" - } - ] - }, - "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 803, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 788, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 785, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 803, - "src": "1548:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 784, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1548:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 787, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 803, - "src": "1559:9:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 786, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1559:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1547:22:5" - }, - "payable": false, - "returnParameters": { - "id": 791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 790, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 803, - "src": "1593:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 789, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1593:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:9:5" - }, - "scope": 804, - "src": "1535:111:5", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 805, - "src": "117:1531:5" - } - ], - "src": "0:1649:5" - }, - "id": 5 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 873 - ] - }, - "id": 874, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 806, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:6" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 873, - "linearizedBaseContracts": [ - 873 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 811, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 807, - "nodeType": "ParameterList", - "parameters": [], - "src": "156:2:6" - }, - "payable": false, - "returnParameters": { - "id": 810, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 809, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 811, - "src": "182:7:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 808, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "182:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "181:9:6" - }, - "scope": 873, - "src": "136:55:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 818, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 814, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 813, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 818, - "src": "214:11:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 812, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "214:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "213:13:6" - }, - "payable": false, - "returnParameters": { - "id": 817, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 816, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 818, - "src": "250:7:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 815, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "250:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "249:9:6" - }, - "scope": 873, - "src": "195:64:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 827, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 823, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 820, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 827, - "src": "282:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "282:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 822, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 827, - "src": "297:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 821, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "297:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "281:32:6" - }, - "payable": false, - "returnParameters": { - "id": 826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 825, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 827, - "src": "341:7:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 824, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "341:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "340:9:6" - }, - "scope": 873, - "src": "263:87:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 836, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 832, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 829, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 836, - "src": "372:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 828, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "372:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 831, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 836, - "src": "384:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 830, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "384:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:27:6" - }, - "payable": false, - "returnParameters": { - "id": 835, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 834, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 836, - "src": "417:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 833, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "417:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "416:6:6" - }, - "scope": 873, - "src": "354:69:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 845, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 841, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 838, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 845, - "src": "444:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 837, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "444:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 840, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 845, - "src": "461:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 839, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "461:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:32:6" - }, - "payable": false, - "returnParameters": { - "id": 844, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 843, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 845, - "src": "498:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 842, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "498:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "497:6:6" - }, - "scope": 873, - "src": "427:77:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 856, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 852, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 847, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 856, - "src": "530:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 846, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 849, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 856, - "src": "544:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "544:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 851, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 856, - "src": "556:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 850, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "556:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:41:6" - }, - "payable": false, - "returnParameters": { - "id": 855, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 854, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 856, - "src": "593:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 853, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "593:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "592:6:6" - }, - "scope": 873, - "src": "508:91:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 864, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 863, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 858, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 864, - "src": "623:20:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 857, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 860, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 864, - "src": "649:18:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 859, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 862, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 864, - "src": "673:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 861, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "673:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "617:73:6" - }, - "src": "603:88:6" - }, - { - "anonymous": false, - "documentation": null, - "id": 872, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 866, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 872, - "src": "715:21:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 865, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "715:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 868, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 872, - "src": "742:23:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 867, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "742:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 870, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 872, - "src": "771:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 869, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "771:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "709:79:6" - }, - "src": "695:94:6" - } - ], - "scope": 874, - "src": "115:676:6" - } - ], - "src": "0:792:6" - }, - "id": 6 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "exportedSymbols": { - "SafeERC20": [ - 1017 - ] - }, - "id": 1018, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 875, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:7" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 876, - "nodeType": "ImportDirective", - "scope": 1018, - "sourceUnit": 874, - "src": "26:22:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 877, - "nodeType": "ImportDirective", - "scope": 1018, - "sourceUnit": 805, - "src": "49:33:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeERC20\n@dev Wrappers around ERC20 operations that throw on failure.\nTo use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "fullyImplemented": true, - "id": 1017, - "linearizedBaseContracts": [ - 1017 - ], - "name": "SafeERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 880, - "libraryName": { - "contractScope": null, - "id": 878, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 804, - "src": "382:8:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$804", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "376:27:7", - "typeName": { - "id": 879, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "395:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 897, - "nodeType": "Block", - "src": "501:45:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 892, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 884, - "src": "530:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 893, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 886, - "src": "534:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 890, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 882, - "src": "515:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 836, - "src": "515:14:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 894, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "515:25:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 889, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "507:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "507:34:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 896, - "nodeType": "ExpressionStatement", - "src": "507:34:7" - } - ] - }, - "documentation": null, - "id": 898, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 887, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 882, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "434:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 881, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "434:6:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 884, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "452:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 883, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "452:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 886, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "468:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 885, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "468:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "428:57:7" - }, - "payable": false, - "returnParameters": { - "id": 888, - "nodeType": "ParameterList", - "parameters": [], - "src": "501:0:7" - }, - "scope": 1017, - "src": "407:139:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 918, - "nodeType": "Block", - "src": "666:55:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 912, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 902, - "src": "699:4:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 913, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 904, - "src": "705:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 914, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 906, - "src": "709:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 910, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 900, - "src": "680:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 856, - "src": "680:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "680:35:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 909, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "672:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "672:44:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 917, - "nodeType": "ExpressionStatement", - "src": "672:44:7" - } - ] - }, - "documentation": null, - "id": 919, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 907, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 900, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 919, - "src": "581:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 899, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "581:6:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 902, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 919, - "src": "599:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 901, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "599:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 904, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 919, - "src": "617:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 903, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "617:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 906, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 919, - "src": "633:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 905, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "633:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "575:75:7" - }, - "payable": false, - "returnParameters": { - "id": 908, - "nodeType": "ParameterList", - "parameters": [], - "src": "666:0:7" - }, - "scope": 1017, - "src": "550:171:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 953, - "nodeType": "Block", - "src": "823:330:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 929, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 925, - "src": "1045:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 930, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1054:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1045:10:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 932, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1044:12:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 935, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1032, - "src": "1077:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1077:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 937, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 923, - "src": "1089:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 933, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 921, - "src": "1061:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 934, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 827, - "src": "1061:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 938, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1061:36:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 939, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1101:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1061:41:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 941, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1060:43:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1044:59:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 928, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1036:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 943, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1036:68:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 944, - "nodeType": "ExpressionStatement", - "src": "1036:68:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 948, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 923, - "src": "1132:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 949, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 925, - "src": "1141:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 946, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 921, - "src": "1118:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 845, - "src": "1118:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1118:29:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 945, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1110:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1110:38:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 952, - "nodeType": "ExpressionStatement", - "src": "1110:38:7" - } - ] - }, - "documentation": null, - "id": 954, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 926, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 921, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 954, - "src": "751:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 920, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "751:6:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 923, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 954, - "src": "769:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 922, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "769:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 925, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 954, - "src": "790:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 924, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "790:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "745:62:7" - }, - "payable": false, - "returnParameters": { - "id": 927, - "nodeType": "ParameterList", - "parameters": [], - "src": "823:0:7" - }, - "scope": 1017, - "src": "725:428:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 984, - "nodeType": "Block", - "src": "1265:135:7", - "statements": [ - { - "assignments": [ - 964 - ], - "declarations": [ - { - "constant": false, - "id": 964, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 985, - "src": "1271:20:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 963, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1271:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 975, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 973, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 960, - "src": "1338:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 968, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1053, - "src": "1318:4:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1017", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1017", - "typeString": "library SafeERC20" - } - ], - "id": 967, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1310:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1310:13:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 970, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 958, - "src": "1325:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 965, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "1294:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 827, - "src": "1294:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1294:39:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 783, - "src": "1294:43:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 974, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1294:50:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1271:73:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 979, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 958, - "src": "1372:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 980, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 964, - "src": "1381:12:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 977, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "1358:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 978, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 845, - "src": "1358:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1358:36:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 976, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1350:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1350:45:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 983, - "nodeType": "ExpressionStatement", - "src": "1350:45:7" - } - ] - }, - "documentation": null, - "id": 985, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeIncreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 956, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 985, - "src": "1193:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 955, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "1193:6:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 958, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 985, - "src": "1211:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1211:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 960, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 985, - "src": "1232:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 959, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1232:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1187:62:7" - }, - "payable": false, - "returnParameters": { - "id": 962, - "nodeType": "ParameterList", - "parameters": [], - "src": "1265:0:7" - }, - "scope": 1017, - "src": "1157:243:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1015, - "nodeType": "Block", - "src": "1512:135:7", - "statements": [ - { - "assignments": [ - 995 - ], - "declarations": [ - { - "constant": false, - "id": 995, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 1016, - "src": "1518:20:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 994, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1518:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1006, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1004, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "1585:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 999, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1053, - "src": "1565:4:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1017", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1017", - "typeString": "library SafeERC20" - } - ], - "id": 998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1557:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1000, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1557:13:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1001, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 989, - "src": "1572:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 996, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 987, - "src": "1541:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 827, - "src": "1541:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1541:39:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1003, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 759, - "src": "1541:43:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1541:50:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1518:73:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1010, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 989, - "src": "1619:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1011, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 995, - "src": "1628:12:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1008, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 987, - "src": "1605:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "id": 1009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 845, - "src": "1605:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1605:36:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1007, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1035, - 1036 - ], - "referencedDeclaration": 1035, - "src": "1597:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1013, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1597:45:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1014, - "nodeType": "ExpressionStatement", - "src": "1597:45:7" - } - ] - }, - "documentation": null, - "id": 1016, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeDecreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 992, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 987, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1016, - "src": "1440:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 986, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 873, - "src": "1440:6:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$873", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 989, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1016, - "src": "1458:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 988, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1458:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 991, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1016, - "src": "1479:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 990, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1479:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1434:62:7" - }, - "payable": false, - "returnParameters": { - "id": 993, - "nodeType": "ParameterList", - "parameters": [], - "src": "1512:0:7" - }, - "scope": 1017, - "src": "1404:243:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1018, - "src": "353:1296:7" - } - ], - "src": "0:1650:7" - }, - "id": 7 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.abi b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.abi deleted file mode 100644 index ce944c245..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[],"name":"pauseMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isAlgoMiner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"startMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinerAddress","type":"address"}],"name":"migrateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addSupervisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"stopAndRemoveOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"resumeMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCoreTeam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCategory","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isSupervisor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"mine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deactivateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwnerAddress","type":"address"}],"name":"resetMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceSupervisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DAYS_PER_YEAR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"stopMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"minerType","type":"uint16"},{"name":"category","type":"uint8"},{"name":"ownerAddress","type":"address"},{"name":"tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.bin b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.bin deleted file mode 100644 index b27ef5f2c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b50604051608080610ea08339810160409081528151602083015191830151606090930151909290610049336401000000006100c3810204565b61005b336401000000006100de810204565b6002805461ffff191661ffff959095169490941762ff000019166201000060ff949094169390930292909217630100000060b860020a0319166301000000600160a060020a03928316021790925560038054600160a060020a03191691909216179055610184565b6100db600082640100000000610c476100f682021704565b50565b6100db600182640100000000610c476100f682021704565b600160a060020a038116151561010b57600080fd5b61011e828264010000000061014d810204565b1561012857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561016457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610d0d806101936000396000f3006080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663162f986d811461010b5780631777fb4b1461012257806321b79d981461014b578063231d4e2a1461016057806329d10b6e146101815780632e6b6849146101a2578063363aa6c7146101c3578063427534a4146101d8578063608d3d3d146101ed57806380258e471461020e57806381a244591461023957806399f4b2511461025a5780639e614ca01461026f578063ada436e914610284578063b2a32cd5146102a5578063be952494146102ba578063c6846ef8146102cf578063d43acc79146102f6578063da4086791461030b575b600080fd5b34801561011757600080fd5b50610120610320565b005b34801561012e57600080fd5b50610137610386565b604080519115158252519081900360200190f35b34801561015757600080fd5b5061012061038b565b34801561016c57600080fd5b50610120600160a060020a036004351661042f565b34801561018d57600080fd5b50610120600160a060020a036004351661051b565b3480156101ae57600080fd5b50610120600160a060020a0360043516610538565b3480156101cf57600080fd5b50610120610555565b3480156101e457600080fd5b506101206105fd565b3480156101f957600080fd5b50610137600160a060020a0360043516610660565b34801561021a57600080fd5b50610223610678565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b50610137600160a060020a0360043516610687565b34801561026657600080fd5b5061012061069a565b34801561027b57600080fd5b5061012061086c565b34801561029057600080fd5b50610120600160a060020a03600435166108c6565b3480156102b157600080fd5b5061012061095b565b3480156102c657600080fd5b50610120610a6d565b3480156102db57600080fd5b506102e4610a78565b60408051918252519081900360200190f35b34801561030257600080fd5b50610120610a7e565b34801561031757600080fd5b50610120610a87565b61032933610687565b151561033457600080fd5b60016003805460a060020a900460ff169081111561034e57fe5b1461035857600080fd5b600380546002919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550565b600190565b60025463010000009004600160a060020a031633146103a957600080fd5b60016003805460a060020a900460ff16908111156103c357fe5b146103cd57600080fd5b6003547501000000000000000000000000000000000000000000900460ff16156103f657600080fd5b6003805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055565b61043833610660565b151561044357600080fd5b60006003805460a060020a900460ff169081111561045d57fe5b1461046757600080fd5b600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610518928492600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b1580156104d357600080fd5b505af11580156104e7573d6000803e3d6000fd5b505050506040513d60208110156104fd57600080fd5b5051600354600160a060020a0316919063ffffffff610b1416565b50565b61052433610687565b151561052f57600080fd5b61051881610bcc565b61054133610660565b151561054c57600080fd5b61051881610bdd565b61055e33610687565b151561056957600080fd5b600380805460a060020a900460ff169081111561058257fe5b141561058d57600080fd5b6003805474ff00000000000000000000000000000000000000001916740300000000000000000000000000000000000000001775ff000000000000000000000000000000000000000000191690556002805476ffffffffffffffffffffffffffffffffffffffff00000019169055565b61060633610687565b151561061157600080fd5b60026003805460a060020a900460ff169081111561062b57fe5b1461063557600080fd5b600380546001919074ff0000000000000000000000000000000000000000191660a060020a8361037f565b6000610672818363ffffffff610bee16565b92915050565b60025462010000900460ff1690565b600061067260018363ffffffff610bee16565b60006106a533610660565b15156106b057600080fd5b60016003805460a060020a900460ff16908111156106ca57fe5b146106d457600080fd5b6003547501000000000000000000000000000000000000000000900460ff1615156106fe57600080fd5b60035460b860020a900461ffff161515610774576003805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a17905561083c565b60038054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e141561083c576003805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600454600290046004555b5060045460025460035461016d9092049161051891600160a060020a039182169163010000009091041683610b14565b61087533610660565b151561088057600080fd5b60006003805460a060020a900460ff169081111561089a57fe5b14156108a557600080fd5b6003805475ffff000000000000000000000000000000000000000019169055565b6108cf33610687565b15156108da57600080fd5b600380805460a060020a900460ff16908111156108f357fe5b146108fd57600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a17905560028054600160a060020a039290921663010000000276ffffffffffffffffffffffffffffffffffffffff00000019909216919091179055565b600061096633610660565b151561097157600080fd5b60006003805460a060020a900460ff169081111561098b57fe5b1461099557600080fd5b6004541515610a4657600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b505050506040513d6020811015610a2e57600080fd5b50519050801515610a3e57600080fd5b600281046004555b506003805474ff0000000000000000000000000000000000000000191660a060020a179055565b610a7633610c25565b565b61016d81565b610a7633610c36565b60025463010000009004600160a060020a03163314610aa557600080fd5b60016003805460a060020a900460ff1690811115610abf57fe5b14610ac957600080fd5b6003547501000000000000000000000000000000000000000000900460ff161515610af357600080fd5b6003805475ff00000000000000000000000000000000000000000019169055565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d6020811015610bba57600080fd5b50511515610bc757600080fd5b505050565b61051860018263ffffffff610c4716565b61051860008263ffffffff610c4716565b6000600160a060020a0382161515610c0557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61051860018263ffffffff610c9516565b61051860008263ffffffff610c9516565b600160a060020a0381161515610c5c57600080fd5b610c668282610bee565b15610c7057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610caa57600080fd5b610cb48282610bee565b1515610cbf57600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a723058207b121e87532d8c1f7a6b96bd6424aeda0c92676f8aeca5bd4496952ce22529cc0029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.json deleted file mode 100644 index 33bd2c2b7..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoMiner.json +++ /dev/null @@ -1,303 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [], - "name": "pauseMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "startMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newMinerAddress", - "type": "address" - } - ], - "name": "migrateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopAndRemoveOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "resumeMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deactivateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwnerAddress", - "type": "address" - } - ], - "name": "resetMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "activateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DAYS_PER_YEAR", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "minerType", - "type": "uint16" - }, - { - "name": "category", - "type": "uint8" - }, - { - "name": "ownerAddress", - "type": "address" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "608060405234801561001057600080fd5b50604051608080610ea08339810160409081528151602083015191830151606090930151909290610049336401000000006100c3810204565b61005b336401000000006100de810204565b6002805461ffff191661ffff959095169490941762ff000019166201000060ff949094169390930292909217630100000060b860020a0319166301000000600160a060020a03928316021790925560038054600160a060020a03191691909216179055610184565b6100db600082640100000000610c476100f682021704565b50565b6100db600182640100000000610c476100f682021704565b600160a060020a038116151561010b57600080fd5b61011e828264010000000061014d810204565b1561012857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561016457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610d0d806101936000396000f3006080604052600436106101065763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663162f986d811461010b5780631777fb4b1461012257806321b79d981461014b578063231d4e2a1461016057806329d10b6e146101815780632e6b6849146101a2578063363aa6c7146101c3578063427534a4146101d8578063608d3d3d146101ed57806380258e471461020e57806381a244591461023957806399f4b2511461025a5780639e614ca01461026f578063ada436e914610284578063b2a32cd5146102a5578063be952494146102ba578063c6846ef8146102cf578063d43acc79146102f6578063da4086791461030b575b600080fd5b34801561011757600080fd5b50610120610320565b005b34801561012e57600080fd5b50610137610386565b604080519115158252519081900360200190f35b34801561015757600080fd5b5061012061038b565b34801561016c57600080fd5b50610120600160a060020a036004351661042f565b34801561018d57600080fd5b50610120600160a060020a036004351661051b565b3480156101ae57600080fd5b50610120600160a060020a0360043516610538565b3480156101cf57600080fd5b50610120610555565b3480156101e457600080fd5b506101206105fd565b3480156101f957600080fd5b50610137600160a060020a0360043516610660565b34801561021a57600080fd5b50610223610678565b6040805160ff9092168252519081900360200190f35b34801561024557600080fd5b50610137600160a060020a0360043516610687565b34801561026657600080fd5b5061012061069a565b34801561027b57600080fd5b5061012061086c565b34801561029057600080fd5b50610120600160a060020a03600435166108c6565b3480156102b157600080fd5b5061012061095b565b3480156102c657600080fd5b50610120610a6d565b3480156102db57600080fd5b506102e4610a78565b60408051918252519081900360200190f35b34801561030257600080fd5b50610120610a7e565b34801561031757600080fd5b50610120610a87565b61032933610687565b151561033457600080fd5b60016003805460a060020a900460ff169081111561034e57fe5b1461035857600080fd5b600380546002919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550565b600190565b60025463010000009004600160a060020a031633146103a957600080fd5b60016003805460a060020a900460ff16908111156103c357fe5b146103cd57600080fd5b6003547501000000000000000000000000000000000000000000900460ff16156103f657600080fd5b6003805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179055565b61043833610660565b151561044357600080fd5b60006003805460a060020a900460ff169081111561045d57fe5b1461046757600080fd5b600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610518928492600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b1580156104d357600080fd5b505af11580156104e7573d6000803e3d6000fd5b505050506040513d60208110156104fd57600080fd5b5051600354600160a060020a0316919063ffffffff610b1416565b50565b61052433610687565b151561052f57600080fd5b61051881610bcc565b61054133610660565b151561054c57600080fd5b61051881610bdd565b61055e33610687565b151561056957600080fd5b600380805460a060020a900460ff169081111561058257fe5b141561058d57600080fd5b6003805474ff00000000000000000000000000000000000000001916740300000000000000000000000000000000000000001775ff000000000000000000000000000000000000000000191690556002805476ffffffffffffffffffffffffffffffffffffffff00000019169055565b61060633610687565b151561061157600080fd5b60026003805460a060020a900460ff169081111561062b57fe5b1461063557600080fd5b600380546001919074ff0000000000000000000000000000000000000000191660a060020a8361037f565b6000610672818363ffffffff610bee16565b92915050565b60025462010000900460ff1690565b600061067260018363ffffffff610bee16565b60006106a533610660565b15156106b057600080fd5b60016003805460a060020a900460ff16908111156106ca57fe5b146106d457600080fd5b6003547501000000000000000000000000000000000000000000900460ff1615156106fe57600080fd5b60035460b860020a900461ffff161515610774576003805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a17905561083c565b60038054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e141561083c576003805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600454600290046004555b5060045460025460035461016d9092049161051891600160a060020a039182169163010000009091041683610b14565b61087533610660565b151561088057600080fd5b60006003805460a060020a900460ff169081111561089a57fe5b14156108a557600080fd5b6003805475ffff000000000000000000000000000000000000000019169055565b6108cf33610687565b15156108da57600080fd5b600380805460a060020a900460ff16908111156108f357fe5b146108fd57600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a17905560028054600160a060020a039290921663010000000276ffffffffffffffffffffffffffffffffffffffff00000019909216919091179055565b600061096633610660565b151561097157600080fd5b60006003805460a060020a900460ff169081111561098b57fe5b1461099557600080fd5b6004541515610a4657600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b505050506040513d6020811015610a2e57600080fd5b50519050801515610a3e57600080fd5b600281046004555b506003805474ff0000000000000000000000000000000000000000191660a060020a179055565b610a7633610c25565b565b61016d81565b610a7633610c36565b60025463010000009004600160a060020a03163314610aa557600080fd5b60016003805460a060020a900460ff1690811115610abf57fe5b14610ac957600080fd5b6003547501000000000000000000000000000000000000000000900460ff161515610af357600080fd5b6003805475ff00000000000000000000000000000000000000000019169055565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b505050506040513d6020811015610bba57600080fd5b50511515610bc757600080fd5b505050565b61051860018263ffffffff610c4716565b61051860008263ffffffff610c4716565b6000600160a060020a0382161515610c0557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61051860018263ffffffff610c9516565b61051860008263ffffffff610c9516565b600160a060020a0381161515610c5c57600080fd5b610c668282610bee565b15610c7057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610caa57600080fd5b610cb48282610bee565b1515610cbf57600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a723058207b121e87532d8c1f7a6b96bd6424aeda0c92676f8aeca5bd4496952ce22529cc0029", - "functionHashes": { - "DAYS_PER_YEAR()": "c6846ef8", - "activateMiner()": "b2a32cd5", - "addCoreTeam(address)": "2e6b6849", - "addSupervisor(address)": "29d10b6e", - "deactivateMiner()": "9e614ca0", - "getCategory()": "80258e47", - "isAlgoMiner()": "1777fb4b", - "isCoreTeam(address)": "608d3d3d", - "isSupervisor(address)": "81a24459", - "migrateMiner(address)": "231d4e2a", - "mine()": "99f4b251", - "pauseMining()": "162f986d", - "renounceCoreTeam()": "d43acc79", - "renounceSupervisor()": "be952494", - "resetMiner(address)": "ada436e9", - "resumeMining()": "427534a4", - "startMining()": "21b79d98", - "stopAndRemoveOwnership()": "363aa6c7", - "stopMining()": "da408679" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "668200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "DAYS_PER_YEAR()": "536", - "activateMiner()": "infinite", - "addCoreTeam(address)": "infinite", - "addSupervisor(address)": "infinite", - "deactivateMiner()": "infinite", - "getCategory()": "608", - "isAlgoMiner()": "212", - "isCoreTeam(address)": "infinite", - "isSupervisor(address)": "infinite", - "migrateMiner(address)": "infinite", - "mine()": "infinite", - "pauseMining()": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSupervisor()": "infinite", - "resetMiner(address)": "infinite", - "resumeMining()": "infinite", - "startMining()": "21275", - "stopAndRemoveOwnership()": "infinite", - "stopMining()": "21624" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool-sol-output.json deleted file mode 100644 index f92d8fff4..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool-sol-output.json +++ /dev/null @@ -1,10176 +0,0 @@ -{ - "contracts": { - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol": { - "AlgoCoreTeamRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoPool.sol": { - "AlgoPool": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "trasferToMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "TOKEN_FACTOR", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_4_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_1_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_3_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_0_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_5_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_2_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "poolType", - "type": "uint16" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060405160408061076083398101604052805160209091015161003b33640100000000610077810204565b60018054600160a060020a0390921662010000026201000060b060020a031961ffff90941661ffff199093169290921792909216179055610120565b61008f60008264010000000061056b61009282021704565b50565b600160a060020a03811615156100a757600080fd5b6100ba82826401000000006100e9810204565b156100c457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561010057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6106318061012f6000396000f3006080604052600436106100955763ffffffff60e060020a6000350416632296f4c7811461009a57806325109e8b146100bd5780632e6b6849146100e4578063455acbcd14610105578063492fba841461011a57806349dc9ed01461012f578063608d3d3d146101445780639fc3c98314610179578063a89febb21461018e578063aed6183f146101a3578063d43acc79146101b8575b600080fd5b3480156100a657600080fd5b506100bb600160a060020a03600435166101cd565b005b3480156100c957600080fd5b506100d26103cc565b60408051918252519081900360200190f35b3480156100f057600080fd5b506100bb600160a060020a03600435166103d8565b34801561011157600080fd5b506100d26103f8565b34801561012657600080fd5b506100d2610407565b34801561013b57600080fd5b506100d2610415565b34801561015057600080fd5b50610165600160a060020a0360043516610424565b604080519115158252519081900360200190f35b34801561018557600080fd5b506100d261043c565b34801561019a57600080fd5b506100d261044a565b3480156101af57600080fd5b506100d2610459565b3480156101c457600080fd5b506100bb610468565b60008060006101db33610424565b15156101e657600080fd5b83925082600160a060020a0316631777fb4b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050506040513d602081101561025157600080fd5b5051151561025e57600080fd5b82600160a060020a03166380258e476040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561029c57600080fd5b505af11580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b50519150600060ff8316108015906102e2575060058260ff1611155b15156102ed57600080fd5b50600060ff8216151561030b575069152d02c7e14af680000061039c565b8160ff1660011415610328575069d3c21bcecceda100000061039c565b8160ff166002141561034657506a01a784379d99db4200000061039c565b8160ff166003141561036457506a027b46536c66c8e300000061039c565b8160ff166004141561038257506a034f086f3b33b68400000061039c565b8160ff166005141561039c57506a0422ca8b0a00a4250000005b600081116103a957600080fd5b6001546103c690620100009004600160a060020a03168583610473565b50505050565b670de0b6b3a764000081565b6103e133610424565b15156103ec57600080fd5b6103f581610512565b50565b6a034f086f3b33b68400000081565b69d3c21bcecceda100000081565b6a027b46536c66c8e300000081565b6000610436818363ffffffff61052316565b92915050565b69152d02c7e14af680000081565b6a0422ca8b0a00a42500000081565b6a01a784379d99db4200000081565b6104713361055a565b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156104d657600080fd5b505af11580156104ea573d6000803e3d6000fd5b505050506040513d602081101561050057600080fd5b5051151561050d57600080fd5b505050565b6103f560008263ffffffff61056b16565b6000600160a060020a038216151561053a57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6103f560008263ffffffff6105b916565b600160a060020a038116151561058057600080fd5b61058a8282610523565b1561059457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a03811615156105ce57600080fd5b6105d88282610523565b15156105e357600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a72305820f296b4ffb64dca2d6eb3a2164312cba487eba728c8b0729ef90193efdf3b0b3d0029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x40 DUP1 PUSH2 0x760 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH2 0x3B CALLER PUSH5 0x100000000 PUSH2 0x77 DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH3 0x10000 MUL PUSH3 0x10000 PUSH1 0xB0 PUSH1 0x2 EXP SUB NOT PUSH2 0xFFFF SWAP1 SWAP5 AND PUSH2 0xFFFF NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP3 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH2 0x120 JUMP JUMPDEST PUSH2 0x8F PUSH1 0x0 DUP3 PUSH5 0x100000000 PUSH2 0x56B PUSH2 0x92 DUP3 MUL OR DIV JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBA DUP3 DUP3 PUSH5 0x100000000 PUSH2 0xE9 DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH2 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x631 DUP1 PUSH2 0x12F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH4 0xFFFFFFFF PUSH1 0xE0 PUSH1 0x2 EXP PUSH1 0x0 CALLDATALOAD DIV AND PUSH4 0x2296F4C7 DUP2 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x25109E8B EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x2E6B6849 EQ PUSH2 0xE4 JUMPI DUP1 PUSH4 0x455ACBCD EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x492FBA84 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x49DC9ED0 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x608D3D3D EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0x9FC3C983 EQ PUSH2 0x179 JUMPI DUP1 PUSH4 0xA89FEBB2 EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0xAED6183F EQ PUSH2 0x1A3 JUMPI DUP1 PUSH4 0xD43ACC79 EQ PUSH2 0x1B8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x1CD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x3CC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x3D8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x3F8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x407 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x415 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x165 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB PUSH1 0x4 CALLDATALOAD AND PUSH2 0x424 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x43C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x44A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x459 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH2 0x468 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1DB CALLER PUSH2 0x424 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 SWAP3 POP DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x1777FB4B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x23B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x80258E47 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 POP PUSH1 0x0 PUSH1 0xFF DUP4 AND LT DUP1 ISZERO SWAP1 PUSH2 0x2E2 JUMPI POP PUSH1 0x5 DUP3 PUSH1 0xFF AND GT ISZERO JUMPDEST ISZERO ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0xFF DUP3 AND ISZERO ISZERO PUSH2 0x30B JUMPI POP PUSH10 0x152D02C7E14AF6800000 PUSH2 0x39C JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x328 JUMPI POP PUSH10 0xD3C21BCECCEDA1000000 PUSH2 0x39C JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x346 JUMPI POP PUSH11 0x1A784379D99DB42000000 PUSH2 0x39C JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x3 EQ ISZERO PUSH2 0x364 JUMPI POP PUSH11 0x27B46536C66C8E3000000 PUSH2 0x39C JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x4 EQ ISZERO PUSH2 0x382 JUMPI POP PUSH11 0x34F086F3B33B684000000 PUSH2 0x39C JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x5 EQ ISZERO PUSH2 0x39C JUMPI POP PUSH11 0x422CA8B0A00A425000000 JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x3A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x3C6 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP6 DUP4 PUSH2 0x473 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH2 0x3E1 CALLER PUSH2 0x424 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F5 DUP2 PUSH2 0x512 JUMP JUMPDEST POP JUMP JUMPDEST PUSH11 0x34F086F3B33B684000000 DUP2 JUMP JUMPDEST PUSH10 0xD3C21BCECCEDA1000000 DUP2 JUMP JUMPDEST PUSH11 0x27B46536C66C8E3000000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x436 DUP2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x523 AND JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH10 0x152D02C7E14AF6800000 DUP2 JUMP JUMPDEST PUSH11 0x422CA8B0A00A425000000 DUP2 JUMP JUMPDEST PUSH11 0x1A784379D99DB42000000 DUP2 JUMP JUMPDEST PUSH2 0x471 CALLER PUSH2 0x55A JUMP JUMPDEST JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x50D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x3F5 PUSH1 0x0 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x56B AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3F5 PUSH1 0x0 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x5B9 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x580 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x58A DUP3 DUP3 PUSH2 0x523 JUMP JUMPDEST ISZERO PUSH2 0x594 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x5CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D8 DUP3 DUP3 PUSH2 0x523 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 CALLCODE SWAP7 0xb4 SELFDESTRUCT 0xb6 0x4d 0xca 0x2d PUSH15 0xB3A2164312CBA487EBA728C8B0729E 0xf9 ADD SWAP4 0xef 0xdf EXTCODESIZE SIGNEXTEND RETURNDATASIZE STOP 0x29 ", - "sourceMap": "454:1691:1:-;;;1077:174;8:9:-1;5:2;;;30:1;27;20:12;5:2;1077:174:1;;;;;;;;;;;;;;;;;;;350:24:0;363:10;350:12;;;;:24;:::i;:::-;1183:9:1;:20;;-1:-1:-1;;;;;1214:29:1;;;;;-1:-1:-1;;;;;;1183:20:1;;;;-1:-1:-1;;1183:20:1;;;;;;;1214:29;;;;;;;454:1691;;806:96:0;865:29;:16;886:7;865:20;;;;;;:29;:::i;:::-;806:96;:::o;244:167:3:-;-1:-1:-1;;;;;316:21:3;;;;308:30;;;;;;353:18;357:4;363:7;353:3;;;;:18;:::i;:::-;352:19;344:28;;;;;;-1:-1:-1;;;;;379:20:3;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;379:27:3;402:4;379:27;;;244:167::o;725:166::-;809:4;-1:-1:-1;;;;;831:21:3;;;;823:30;;;;;;-1:-1:-1;;;;;;866:20:3;:11;:20;;;;;;;;;;;;;;;725:166::o;454:1691:1:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "317000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "CAT_0_VALUE()": "401", - "CAT_1_VALUE()": "335", - "CAT_2_VALUE()": "445", - "CAT_3_VALUE()": "357", - "CAT_4_VALUE()": "313", - "CAT_5_VALUE()": "423", - "TOKEN_FACTOR()": "269", - "addCoreTeam(address)": "infinite", - "isCoreTeam(address)": "infinite", - "renounceCoreTeam()": "infinite", - "trasferToMiner(address)": "infinite" - } - }, - "methodIdentifiers": { - "CAT_0_VALUE()": "9fc3c983", - "CAT_1_VALUE()": "492fba84", - "CAT_2_VALUE()": "aed6183f", - "CAT_3_VALUE()": "49dc9ed0", - "CAT_4_VALUE()": "455acbcd", - "CAT_5_VALUE()": "a89febb2", - "TOKEN_FACTOR()": "25109e8b", - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79", - "trasferToMiner(address)": "2296f4c7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"minerAddress\",\"type\":\"address\"}],\"name\":\"trasferToMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKEN_FACTOR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_4_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_1_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_3_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isCoreTeam\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_0_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_5_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_2_VALUE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"poolType\",\"type\":\"uint16\"},{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoPool.sol\":\"AlgoPool\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol\":{\"keccak256\":\"0x98513c8bd78301543260967ae791ebb2a652f73fef585417f72a3097f4e1ae21\",\"urls\":[\"bzzr://a9cfa1df913c0a9ad0937d821ead954e31f7da6a462933bcfa20abe2b44ec984\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoPool.sol\":{\"keccak256\":\"0xe9776836589d57d2294c261fbeefaac9b146ad2ea4c06995ce258abc1cd44bee\",\"urls\":[\"bzzr://d8fc6e549c0eb65e15d6f14cf317dbd8a736804709bd1e443922c1c97b873aa0\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol\":{\"keccak256\":\"0xb457e39e512b5475c3e70193ab0a751f6626a50417954247f0cf47c7ca15eff7\",\"urls\":[\"bzzr://3b585a4055121fee393f2b691538036c87f56556f43f0b6e851a88de7b8275e6\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0xa6e47d62e68903c8fff23500d80e7cc8085b9127995803478d9982cd8a6d49e4\",\"urls\":[\"bzzr://7c87eb3c145fe7592c97baa287501faff7e81c1965333c9b042ffb6b387e94a1\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc8a7f15fa44eb10057f8bcb58418d3aed6f5267d211d18f93f3d4e0293e3da44\",\"urls\":[\"bzzr://8825e2508348b01a091ff47b8525e583b6e5604f6679684f805d67a9a6a2a7e9\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x0a172a0ef8681d4a7d8034d003670a9b1968d914b0bfa64e13ddca289a85d24a\",\"urls\":[\"bzzr://733b6203c967b44d6de90b5c6b144e58a380a3f29befb2dc70e765dae2f1ca18\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol": { - "IAlgoMiner": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getCategory()": "80258e47", - "isAlgoMiner()": "1777fb4b" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820bfa74e3170abc2ace25475dc7dfb71c6416c34449905f1f30a00ec4431d9206c0029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0xbf 0xa7 0x4e BALANCE PUSH17 0xABC2ACE25475DC7DFB71C6416C34449905 CALL RETURN EXP STOP 0xec DIFFICULTY BALANCE 0xd9 KECCAK256 PUSH13 0x290000000000000000000000 ", - "sourceMap": "109:784:3:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0xa6e47d62e68903c8fff23500d80e7cc8085b9127995803478d9982cd8a6d49e4\",\"urls\":[\"bzzr://7c87eb3c145fe7592c97baa287501faff7e81c1965333c9b042ffb6b387e94a1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058204094b52d7c5ef1d5aa4907b2604c65a23d27d58f9b4359f5187db6598b2799300029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 BLOCKHASH SWAP5 0xb5 0x2d PUSH29 0x5EF1D5AA4907B2604C65A23D27D58F9B4359F5187DB6598B2799300029 ", - "sourceMap": "117:1531:4:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "methods": {}, - "title": "SafeERC20" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a723058207a38fb4cb6c1c093de86b1ba91e5add211165e6c76b8cc0d294ecbd35bbbeb2c0029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN STOP PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH27 0x38FB4CB6C1C093DE86B1BA91E5ADD211165E6C76B8CC0D294ECBD3 JUMPDEST 0xbb 0xeb 0x2c STOP 0x29 ", - "sourceMap": "353:1296:6:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.4.24+commit.e67f0147\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xdd18f05c74536a06166c90a17ec3c6932853764f292bed314ceb23e730ff83af\",\"urls\":[\"bzzr://1d8a608339978ac18782f7051816cf23b4072d8814979e3ef74788cc6025cca0\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc8a7f15fa44eb10057f8bcb58418d3aed6f5267d211d18f93f3d4e0293e3da44\",\"urls\":[\"bzzr://8825e2508348b01a091ff47b8525e583b6e5604f6679684f805d67a9a6a2a7e9\"]},\"d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x0a172a0ef8681d4a7d8034d003670a9b1968d914b0bfa64e13ddca289a85d24a\",\"urls\":[\"bzzr://733b6203c967b44d6de90b5c6b144e58a380a3f29befb2dc70e765dae2f1ca18\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol", - "exportedSymbols": { - "AlgoCoreTeamRole": [ - 86 - ] - }, - "id": 87, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:0" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 87, - "sourceUnit": 382, - "src": "28:171:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 86, - "linearizedBaseContracts": [ - 86 - ], - "name": "AlgoCoreTeamRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 5, - "libraryName": { - "contractScope": null, - "id": 3, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 381, - "src": "242:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$381", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "236:27:0", - "typeName": { - "contractScope": null, - "id": 4, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "252:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 7, - "name": "_coreTeamMembers", - "nodeType": "VariableDeclaration", - "scope": 86, - "src": "271:35:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 6, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "271:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 15, - "nodeType": "Block", - "src": "339:43:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 11, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "363:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "363:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "350:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "350:24:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14, - "nodeType": "ExpressionStatement", - "src": "350:24:0" - } - ] - }, - "documentation": null, - "id": 16, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8, - "nodeType": "ParameterList", - "parameters": [], - "src": "327:2:0" - }, - "payable": false, - "returnParameters": { - "id": 9, - "nodeType": "ParameterList", - "parameters": [], - "src": "339:0:0" - }, - "scope": 86, - "src": "315:67:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 26, - "nodeType": "Block", - "src": "414:62:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 20, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "444:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 21, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "444:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 19, - "name": "isCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "433:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 22, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "433:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 18, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "425:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 23, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "425:31:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 24, - "nodeType": "ExpressionStatement", - "src": "425:31:0" - }, - { - "id": 25, - "nodeType": "PlaceholderStatement", - "src": "467:1:0" - } - ] - }, - "documentation": null, - "id": 27, - "name": "onlyCoreTeam", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17, - "nodeType": "ParameterList", - "parameters": [], - "src": "411:2:0" - }, - "src": "390:86:0", - "visibility": "internal" - }, - { - "body": { - "id": 39, - "nodeType": "Block", - "src": "548:55:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 36, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 29, - "src": "587:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 34, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "566:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 35, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 380, - "src": "566:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$294_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$294_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 37, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "566:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 33, - "id": 38, - "nodeType": "Return", - "src": "559:36:0" - } - ] - }, - "documentation": null, - "id": 40, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 30, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 29, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "504:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 28, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "504:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "503:17:0" - }, - "payable": false, - "returnParameters": { - "id": 33, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 32, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "542:4:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 31, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "542:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "541:6:0" - }, - "scope": 86, - "src": "484:119:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 51, - "nodeType": "Block", - "src": "669:40:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 48, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "693:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 47, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "680:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 49, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "680:21:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 50, - "nodeType": "ExpressionStatement", - "src": "680:21:0" - } - ] - }, - "documentation": null, - "id": 52, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 45, - "modifierName": { - "argumentTypes": null, - "id": 44, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "656:12:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "656:12:0" - } - ], - "name": "addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 43, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 52, - "src": "632:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 41, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "631:17:0" - }, - "payable": false, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [], - "src": "669:0:0" - }, - "scope": 86, - "src": "611:98:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 60, - "nodeType": "Block", - "src": "752:46:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 56, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "779:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "779:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 55, - "name": "_removeCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "763:15:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 58, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "763:27:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59, - "nodeType": "ExpressionStatement", - "src": "763:27:0" - } - ] - }, - "documentation": null, - "id": 61, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "renounceCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 53, - "nodeType": "ParameterList", - "parameters": [], - "src": "742:2:0" - }, - "payable": false, - "returnParameters": { - "id": 54, - "nodeType": "ParameterList", - "parameters": [], - "src": "752:0:0" - }, - "scope": 86, - "src": "717:81:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 72, - "nodeType": "Block", - "src": "854:48:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 69, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 63, - "src": "886:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 66, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "865:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 68, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 326, - "src": "865:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$294_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$294_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 70, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "865:29:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 71, - "nodeType": "ExpressionStatement", - "src": "865:29:0" - } - ] - }, - "documentation": null, - "id": 73, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 63, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 73, - "src": "828:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 62, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "828:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "827:17:0" - }, - "payable": false, - "returnParameters": { - "id": 65, - "nodeType": "ParameterList", - "parameters": [], - "src": "854:0:0" - }, - "scope": 86, - "src": "806:96:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 84, - "nodeType": "Block", - "src": "961:51:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 81, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "996:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 78, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "972:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 80, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 357, - "src": "972:23:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$294_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$294_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 82, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "972:32:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 83, - "nodeType": "ExpressionStatement", - "src": "972:32:0" - } - ] - }, - "documentation": null, - "id": 85, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "_removeCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 76, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 75, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 85, - "src": "935:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 74, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "935:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "934:17:0" - }, - "payable": false, - "returnParameters": { - "id": 77, - "nodeType": "ParameterList", - "parameters": [], - "src": "961:0:0" - }, - "scope": 86, - "src": "910:102:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 87, - "src": "203:812:0" - } - ], - "src": "0:1017:0" - }, - "id": 0 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoPool.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoPool.sol", - "exportedSymbols": { - "AlgoPool": [ - 274 - ] - }, - "id": 275, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 88, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:1" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 89, - "nodeType": "ImportDirective", - "scope": 275, - "sourceUnit": 579, - "src": "27:177:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 90, - "nodeType": "ImportDirective", - "scope": 275, - "sourceUnit": 723, - "src": "206:180:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol", - "file": "./IAlgoMiner.sol", - "id": 91, - "nodeType": "ImportDirective", - "scope": 275, - "sourceUnit": 288, - "src": "390:26:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/AlgoCoreTeamRole.sol", - "file": "./AlgoCoreTeamRole.sol", - "id": 92, - "nodeType": "ImportDirective", - "scope": 275, - "sourceUnit": 87, - "src": "418:32:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 93, - "name": "AlgoCoreTeamRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 86, - "src": "475:16:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCoreTeamRole_$86", - "typeString": "contract AlgoCoreTeamRole" - } - }, - "id": 94, - "nodeType": "InheritanceSpecifier", - "src": "475:16:1" - } - ], - "contractDependencies": [ - 86 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 274, - "linearizedBaseContracts": [ - 274, - 86 - ], - "name": "AlgoPool", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 97, - "libraryName": { - "contractScope": null, - "id": 95, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 722, - "src": "505:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$722", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "499:27:1", - "typeName": { - "contractScope": null, - "id": 96, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "519:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - } - }, - { - "constant": true, - "id": 104, - "name": "TOKEN_FACTOR", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "534:56:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 98, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "534:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 99, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "573:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3138", - "id": 101, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "587:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - } - ], - "id": 100, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "579:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 102, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "579:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "573:17:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 109, - "name": "CAT_0_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "597:59:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 105, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "597:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 108, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "313030303030", - "id": 106, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "635:6:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100000_by_1", - "typeString": "int_const 100000" - }, - "value": "100000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 107, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "644:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "635:21:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 114, - "name": "CAT_1_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "663:60:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 110, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "663:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 113, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 111, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "701:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 112, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "711:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "701:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 121, - "name": "CAT_2_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "730:64:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 115, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "730:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - }, - "id": 118, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 116, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "768:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 117, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "772:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "768:11:1", - "typeDescriptions": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 119, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "782:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "768:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 128, - "name": "CAT_3_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "801:64:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 122, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "801:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 127, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - }, - "id": 125, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "839:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 124, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "843:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "839:11:1", - "typeDescriptions": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 126, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "853:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "839:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 135, - "name": "CAT_4_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "872:64:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 129, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "872:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 134, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - }, - "id": 132, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 130, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "910:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 131, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "914:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "910:11:1", - "typeDescriptions": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 133, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "924:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "910:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "id": 142, - "name": "CAT_5_VALUE", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "943:64:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 136, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "943:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 141, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - }, - "id": 139, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 137, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "981:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 138, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "985:7:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "981:11:1", - "typeDescriptions": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 140, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 104, - "src": "995:12:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "981:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "id": 144, - "name": "_poolType", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "1016:24:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 143, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1016:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 146, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 274, - "src": "1047:21:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 145, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "1047:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 165, - "nodeType": "Block", - "src": "1172:79:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 157, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 155, - "name": "_poolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 144, - "src": "1183:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 156, - "name": "poolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 148, - "src": "1195:8:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "1183:20:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 158, - "nodeType": "ExpressionStatement", - "src": "1183:20:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 159, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 146, - "src": "1214:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 161, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 150, - "src": "1230:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 160, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 578, - "src": "1223:6:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$578_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1223:20:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "src": "1214:29:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 164, - "nodeType": "ExpressionStatement", - "src": "1214:29:1" - } - ] - }, - "documentation": null, - "id": 166, - "implemented": true, - "isConstructor": true, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": [], - "id": 153, - "modifierName": { - "argumentTypes": null, - "id": 152, - "name": "AlgoCoreTeamRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 86, - "src": "1137:16:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoCoreTeamRole_$86_$", - "typeString": "type(contract AlgoCoreTeamRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1137:18:1" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 148, - "name": "poolType", - "nodeType": "VariableDeclaration", - "scope": 166, - "src": "1089:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 147, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1089:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 150, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 166, - "src": "1106:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1106:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1088:39:1" - }, - "payable": false, - "returnParameters": { - "id": 154, - "nodeType": "ParameterList", - "parameters": [], - "src": "1172:0:1" - }, - "scope": 274, - "src": "1077:174:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 272, - "nodeType": "Block", - "src": "1325:817:1", - "statements": [ - { - "assignments": [ - 174 - ], - "declarations": [ - { - "constant": false, - "id": 174, - "name": "algoMiner", - "nodeType": "VariableDeclaration", - "scope": 273, - "src": "1336:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$287", - "typeString": "contract IAlgoMiner" - }, - "typeName": { - "contractScope": null, - "id": 173, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 287, - "src": "1336:10:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$287", - "typeString": "contract IAlgoMiner" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 178, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 176, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 168, - "src": "1370:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 175, - "name": "IAlgoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 287, - "src": "1359:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAlgoMiner_$287_$", - "typeString": "type(contract IAlgoMiner)" - } - }, - "id": 177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1359:24:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$287", - "typeString": "contract IAlgoMiner" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1336:47:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 180, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 174, - "src": "1412:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$287", - "typeString": "contract IAlgoMiner" - } - }, - "id": 181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "isAlgoMiner", - "nodeType": "MemberAccess", - "referencedDeclaration": 281, - "src": "1412:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_pure$__$returns$_t_bool_$", - "typeString": "function () pure external returns (bool)" - } - }, - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1412:23:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 179, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1404:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 183, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1404:32:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 184, - "nodeType": "ExpressionStatement", - "src": "1404:32:1" - }, - { - "assignments": [ - 186 - ], - "declarations": [ - { - "constant": false, - "id": 186, - "name": "minerCategory", - "nodeType": "VariableDeclaration", - "scope": 273, - "src": "1457:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 185, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1457:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 190, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 187, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 174, - "src": "1479:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$287", - "typeString": "contract IAlgoMiner" - } - }, - "id": 188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getCategory", - "nodeType": "MemberAccess", - "referencedDeclaration": 286, - "src": "1479:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1479:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1457:45:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 192, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1523:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1540:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1523:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 195, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1545:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1562:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "1545:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1523:40:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 191, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1515:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1515:49:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 200, - "nodeType": "ExpressionStatement", - "src": "1515:49:1" - }, - { - "assignments": [ - 202 - ], - "declarations": [ - { - "constant": false, - "id": 202, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 273, - "src": "1577:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 201, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1577:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 204, - "initialValue": { - "argumentTypes": null, - "hexValue": "30", - "id": 203, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1593:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1577:17:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 205, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1610:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1627:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1610:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 213, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1685:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 214, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1702:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1685:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 221, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1760:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1777:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "1760:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 229, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1835:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1852:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "1835:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 237, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1910:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 238, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1927:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "1910:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 245, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1985:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2002:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "1985:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 253, - "nodeType": "IfStatement", - "src": "1982:69:1", - "trueBody": { - "id": 252, - "nodeType": "Block", - "src": "2005:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 248, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "2020:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 249, - "name": "CAT_5_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 142, - "src": "2028:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2020:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 251, - "nodeType": "ExpressionStatement", - "src": "2020:19:1" - } - ] - } - }, - "id": 254, - "nodeType": "IfStatement", - "src": "1907:144:1", - "trueBody": { - "id": 244, - "nodeType": "Block", - "src": "1930:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 240, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1945:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 241, - "name": "CAT_4_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 135, - "src": "1953:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1945:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 243, - "nodeType": "ExpressionStatement", - "src": "1945:19:1" - } - ] - } - }, - "id": 255, - "nodeType": "IfStatement", - "src": "1832:219:1", - "trueBody": { - "id": 236, - "nodeType": "Block", - "src": "1855:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 232, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1870:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 233, - "name": "CAT_3_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "1878:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1870:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 235, - "nodeType": "ExpressionStatement", - "src": "1870:19:1" - } - ] - } - }, - "id": 256, - "nodeType": "IfStatement", - "src": "1757:294:1", - "trueBody": { - "id": 228, - "nodeType": "Block", - "src": "1780:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 224, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1795:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 225, - "name": "CAT_2_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 121, - "src": "1803:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1795:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 227, - "nodeType": "ExpressionStatement", - "src": "1795:19:1" - } - ] - } - }, - "id": 257, - "nodeType": "IfStatement", - "src": "1682:369:1", - "trueBody": { - "id": 220, - "nodeType": "Block", - "src": "1705:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 218, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 216, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1720:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 217, - "name": "CAT_1_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "1728:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1720:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 219, - "nodeType": "ExpressionStatement", - "src": "1720:19:1" - } - ] - } - }, - "id": 258, - "nodeType": "IfStatement", - "src": "1607:444:1", - "trueBody": { - "id": 212, - "nodeType": "Block", - "src": "1630:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 208, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1645:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 209, - "name": "CAT_0_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 109, - "src": "1653:11:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1645:19:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 211, - "nodeType": "ExpressionStatement", - "src": "1645:19:1" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 260, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "2071:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 261, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2079:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2071:9:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 259, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "2063:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2063:18:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 264, - "nodeType": "ExpressionStatement", - "src": "2063:18:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 268, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 168, - "src": "2114:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 269, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "2128:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 265, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 146, - "src": "2094:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 603, - "src": "2094:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$578_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$578_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2094:40:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 271, - "nodeType": "ExpressionStatement", - "src": "2094:40:1" - } - ] - }, - "documentation": null, - "id": 273, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [ - { - "arguments": null, - "id": 171, - "modifierName": { - "argumentTypes": null, - "id": 170, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "1312:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1312:12:1" - } - ], - "name": "trasferToMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 168, - "name": "minerAddress", - "nodeType": "VariableDeclaration", - "scope": 273, - "src": "1283:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 167, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1283:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1282:22:1" - }, - "payable": false, - "returnParameters": { - "id": 172, - "nodeType": "ParameterList", - "parameters": [], - "src": "1325:0:1" - }, - "scope": 274, - "src": "1259:883:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 275, - "src": "454:1691:1" - } - ], - "src": "0:2147:1" - }, - "id": 1 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/IAlgoMiner.sol", - "exportedSymbols": { - "IAlgoMiner": [ - 287 - ] - }, - "id": 288, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 276, - "literals": [ - "solidity", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:23:2" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": false, - "id": 287, - "linearizedBaseContracts": [ - 287 - ], - "name": "IAlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 281, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 277, - "nodeType": "ParameterList", - "parameters": [], - "src": "74:2:2" - }, - "payable": false, - "returnParameters": { - "id": 280, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 279, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 281, - "src": "98:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 278, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "98:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "97:6:2" - }, - "scope": 287, - "src": "54:50:2", - "stateMutability": "pure", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 286, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 282, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:2:2" - }, - "payable": false, - "returnParameters": { - "id": 285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 284, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 286, - "src": "154:5:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 283, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "154:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "153:7:2" - }, - "scope": 287, - "src": "110:51:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 288, - "src": "27:137:2" - } - ], - "src": "0:164:2" - }, - "id": 2 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 381 - ] - }, - "id": 382, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 289, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:3" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 381, - "linearizedBaseContracts": [ - 381 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 294, - "members": [ - { - "constant": false, - "id": 293, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 294, - "src": "145:32:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 292, - "keyType": { - "id": 290, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "154:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "145:25:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 291, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "165:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 381, - "src": "127:55:3", - "visibility": "public" - }, - { - "body": { - "id": 325, - "nodeType": "Block", - "src": "302:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 302, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "316:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 304, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 303, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "327:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 305, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "316:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 301, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "308:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "308:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 308, - "nodeType": "ExpressionStatement", - "src": "308:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "352:19:3", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 311, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 296, - "src": "357:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 312, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "363:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 310, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 380, - "src": "353:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$294_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "353:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 309, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "344:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "344:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 316, - "nodeType": "ExpressionStatement", - "src": "344:28:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 317, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 296, - "src": "379:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 320, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "379:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 321, - "indexExpression": { - "argumentTypes": null, - "id": 319, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 298, - "src": "391:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "379:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 322, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "402:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "379:27:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 324, - "nodeType": "ExpressionStatement", - "src": "379:27:3" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 326, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 299, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 296, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "257:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 295, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "257:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 298, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 326, - "src": "276:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 297, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "276:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "256:36:3" - }, - "payable": false, - "returnParameters": { - "id": 300, - "nodeType": "ParameterList", - "parameters": [], - "src": "302:0:3" - }, - "scope": 381, - "src": "244:167:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 356, - "nodeType": "Block", - "src": "538:109:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 334, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "552:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 336, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "571:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "563:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "563:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "552:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 333, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "544:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "544:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 340, - "nodeType": "ExpressionStatement", - "src": "544:30:3" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 343, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 328, - "src": "592:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 344, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "598:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 342, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 380, - "src": "588:3:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$294_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "588:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 341, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "580:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "580:27:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 347, - "nodeType": "ExpressionStatement", - "src": "580:27:3" - }, - { - "expression": { - "argumentTypes": null, - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 348, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 328, - "src": "614:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 351, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "614:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 352, - "indexExpression": { - "argumentTypes": null, - "id": 350, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "626:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "614:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 353, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "637:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "614:28:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 355, - "nodeType": "ExpressionStatement", - "src": "614:28:3" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 357, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 328, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "493:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 327, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "493:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 330, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "512:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 329, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "512:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "492:36:3" - }, - "payable": false, - "returnParameters": { - "id": 332, - "nodeType": "ParameterList", - "parameters": [], - "src": "538:0:3" - }, - "scope": 381, - "src": "477:170:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 379, - "nodeType": "Block", - "src": "817:74:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 367, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "831:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 369, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "850:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 368, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "842:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 370, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "842:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "831:21:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 366, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "823:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "823:30:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 373, - "nodeType": "ExpressionStatement", - "src": "823:30:3" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 374, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 359, - "src": "866:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 375, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 293, - "src": "866:11:3", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 377, - "indexExpression": { - "argumentTypes": null, - "id": 376, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 361, - "src": "878:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "866:20:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 365, - "id": 378, - "nodeType": "Return", - "src": "859:27:3" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 380, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 362, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 359, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 380, - "src": "738:17:3", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 358, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 294, - "src": "738:4:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$294_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 361, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 380, - "src": "757:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "757:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "737:36:3" - }, - "payable": false, - "returnParameters": { - "id": 365, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 364, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 380, - "src": "809:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 363, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "809:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "808:6:3" - }, - "scope": 381, - "src": "725:166:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 382, - "src": "109:784:3" - } - ], - "src": "0:894:3" - }, - "id": 3 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 509 - ] - }, - "id": 510, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 383, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 509, - "linearizedBaseContracts": [ - 509 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 415, - "nodeType": "Block", - "src": "271:314:4", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 392, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "486:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 393, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "491:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "486:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 398, - "nodeType": "IfStatement", - "src": "482:35:4", - "trueBody": { - "id": 397, - "nodeType": "Block", - "src": "494:23:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "509:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 391, - "id": 396, - "nodeType": "Return", - "src": "502:8:4" - } - ] - } - }, - { - "assignments": [ - 400 - ], - "declarations": [ - { - "constant": false, - "id": 400, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 416, - "src": "523:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 399, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "523:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 404, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 401, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "535:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 402, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 387, - "src": "539:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "535:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "523:17:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 406, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 400, - "src": "554:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 407, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 385, - "src": "558:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 409, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 387, - "src": "563:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "554:10:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 405, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "546:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "546:19:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 412, - "nodeType": "ExpressionStatement", - "src": "546:19:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 413, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 400, - "src": "579:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 391, - "id": 414, - "nodeType": "Return", - "src": "572:8:4" - } - ] - }, - "documentation": "@dev Multiplies two numbers, reverts on overflow.", - "id": 416, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 385, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 416, - "src": "217:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "217:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 387, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 416, - "src": "228:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "228:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "216:22:4" - }, - "payable": false, - "returnParameters": { - "id": 391, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 390, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 416, - "src": "262:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 389, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "262:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "261:9:4" - }, - "scope": 509, - "src": "204:381:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 439, - "nodeType": "Block", - "src": "762:203:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 428, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 426, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "776:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 427, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "780:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "776:5:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 425, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "768:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "768:14:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 430, - "nodeType": "ExpressionStatement", - "src": "768:14:4" - }, - { - "assignments": [ - 432 - ], - "declarations": [ - { - "constant": false, - "id": 432, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 440, - "src": "846:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 431, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "846:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 436, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 433, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 418, - "src": "858:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 434, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "862:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "858:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "846:17:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 437, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 432, - "src": "959:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 424, - "id": 438, - "nodeType": "Return", - "src": "952:8:4" - } - ] - }, - "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.", - "id": 440, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 421, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 418, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 440, - "src": "708:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 417, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 420, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 440, - "src": "719:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 419, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "719:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "707:22:4" - }, - "payable": false, - "returnParameters": { - "id": 424, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 423, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 440, - "src": "753:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 422, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "753:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "752:9:4" - }, - "scope": 509, - "src": "695:270:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 463, - "nodeType": "Block", - "src": "1145:64:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 450, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 444, - "src": "1159:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 451, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 442, - "src": "1164:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1159:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 449, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1151:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1151:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 454, - "nodeType": "ExpressionStatement", - "src": "1151:15:4" - }, - { - "assignments": [ - 456 - ], - "declarations": [ - { - "constant": false, - "id": 456, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 464, - "src": "1172:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 455, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1172:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 460, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 457, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 442, - "src": "1184:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 458, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 444, - "src": "1188:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1184:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1172:17:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 461, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 456, - "src": "1203:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 448, - "id": 462, - "nodeType": "Return", - "src": "1196:8:4" - } - ] - }, - "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 464, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 445, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 442, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 464, - "src": "1091:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 441, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1091:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 444, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 464, - "src": "1102:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 443, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1102:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1090:22:4" - }, - "payable": false, - "returnParameters": { - "id": 448, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 447, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 464, - "src": "1136:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 446, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1136:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1135:9:4" - }, - "scope": 509, - "src": "1078:131:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 487, - "nodeType": "Block", - "src": "1339:64:4", - "statements": [ - { - "assignments": [ - 474 - ], - "declarations": [ - { - "constant": false, - "id": 474, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "1345:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 473, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1345:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 478, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 475, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "1357:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 476, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 468, - "src": "1361:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1357:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1345:17:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 480, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 474, - "src": "1376:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 481, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "1381:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1376:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 479, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1368:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1368:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 484, - "nodeType": "ExpressionStatement", - "src": "1368:15:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 485, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 474, - "src": "1397:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 472, - "id": 486, - "nodeType": "Return", - "src": "1390:8:4" - } - ] - }, - "documentation": "@dev Adds two numbers, reverts on overflow.", - "id": 488, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 466, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "1285:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 465, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1285:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 468, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "1296:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 467, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1296:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1284:22:4" - }, - "payable": false, - "returnParameters": { - "id": 472, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 471, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "1330:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1330:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1329:9:4" - }, - "scope": 509, - "src": "1272:131:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 507, - "nodeType": "Block", - "src": "1602:44:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 498, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 492, - "src": "1616:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 499, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1621:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1616:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 497, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1608:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1608:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 502, - "nodeType": "ExpressionStatement", - "src": "1608:15:4" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 503, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 490, - "src": "1636:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 504, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 492, - "src": "1640:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1636:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 496, - "id": 506, - "nodeType": "Return", - "src": "1629:12:4" - } - ] - }, - "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 508, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 493, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 490, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1548:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 489, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1548:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 492, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1559:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 491, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1559:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1547:22:4" - }, - "payable": false, - "returnParameters": { - "id": 496, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 495, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1593:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 494, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1593:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1592:9:4" - }, - "scope": 509, - "src": "1535:111:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 510, - "src": "117:1531:4" - } - ], - "src": "0:1649:4" - }, - "id": 4 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 578 - ] - }, - "id": 579, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 511, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:5" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 578, - "linearizedBaseContracts": [ - 578 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 516, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 512, - "nodeType": "ParameterList", - "parameters": [], - "src": "156:2:5" - }, - "payable": false, - "returnParameters": { - "id": 515, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 514, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 516, - "src": "182:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 513, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "182:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "181:9:5" - }, - "scope": 578, - "src": "136:55:5", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 523, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 518, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 523, - "src": "214:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 517, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "214:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "213:13:5" - }, - "payable": false, - "returnParameters": { - "id": 522, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 521, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 523, - "src": "250:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 520, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "250:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "249:9:5" - }, - "scope": 578, - "src": "195:64:5", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 532, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": true, - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 528, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 525, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 532, - "src": "282:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 524, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "282:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 527, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 532, - "src": "297:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 526, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "297:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "281:32:5" - }, - "payable": false, - "returnParameters": { - "id": 531, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 530, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 532, - "src": "341:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 529, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "341:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "340:9:5" - }, - "scope": 578, - "src": "263:87:5", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 541, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 537, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 534, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 541, - "src": "372:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 533, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "372:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 536, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 541, - "src": "384:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 535, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "384:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:27:5" - }, - "payable": false, - "returnParameters": { - "id": 540, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 539, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 541, - "src": "417:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 538, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "417:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "416:6:5" - }, - "scope": 578, - "src": "354:69:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 550, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 543, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "444:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 542, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "444:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 545, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "461:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 544, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "461:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "443:32:5" - }, - "payable": false, - "returnParameters": { - "id": 549, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 548, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "498:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 547, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "498:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "497:6:5" - }, - "scope": 578, - "src": "427:77:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 561, - "implemented": false, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 557, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 552, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 561, - "src": "530:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 551, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 554, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 561, - "src": "544:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 553, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "544:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 556, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 561, - "src": "556:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 555, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "556:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:41:5" - }, - "payable": false, - "returnParameters": { - "id": 560, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 559, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 561, - "src": "593:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 558, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "593:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "592:6:5" - }, - "scope": 578, - "src": "508:91:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 569, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 568, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 563, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 569, - "src": "623:20:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 562, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 565, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 569, - "src": "649:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 564, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 567, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 569, - "src": "673:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 566, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "673:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "617:73:5" - }, - "src": "603:88:5" - }, - { - "anonymous": false, - "documentation": null, - "id": 577, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 571, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 577, - "src": "715:21:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 570, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "715:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 573, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 577, - "src": "742:23:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "742:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 575, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 577, - "src": "771:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 574, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "771:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "709:79:5" - }, - "src": "695:94:5" - } - ], - "scope": 579, - "src": "115:676:5" - } - ], - "src": "0:792:5" - }, - "id": 5 - }, - "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "exportedSymbols": { - "SafeERC20": [ - 722 - ] - }, - "id": 723, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 580, - "literals": [ - "solidity", - "^", - "0.4", - ".24" - ], - "nodeType": "PragmaDirective", - "src": "0:24:6" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 581, - "nodeType": "ImportDirective", - "scope": 723, - "sourceUnit": 579, - "src": "26:22:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/Sabra/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 582, - "nodeType": "ImportDirective", - "scope": 723, - "sourceUnit": 510, - "src": "49:33:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeERC20\n@dev Wrappers around ERC20 operations that throw on failure.\nTo use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "fullyImplemented": true, - "id": 722, - "linearizedBaseContracts": [ - 722 - ], - "name": "SafeERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 585, - "libraryName": { - "contractScope": null, - "id": 583, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 509, - "src": "382:8:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$509", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "376:27:6", - "typeName": { - "id": 584, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "395:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 602, - "nodeType": "Block", - "src": "501:45:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 597, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 589, - "src": "530:2:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 598, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 591, - "src": "534:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 595, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 587, - "src": "515:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 541, - "src": "515:14:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "515:25:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 594, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "507:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "507:34:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 601, - "nodeType": "ExpressionStatement", - "src": "507:34:6" - } - ] - }, - "documentation": null, - "id": 603, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 592, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 587, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "434:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 586, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "434:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 589, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "452:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 588, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "452:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 591, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "468:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 590, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "468:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "428:57:6" - }, - "payable": false, - "returnParameters": { - "id": 593, - "nodeType": "ParameterList", - "parameters": [], - "src": "501:0:6" - }, - "scope": 722, - "src": "407:139:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 623, - "nodeType": "Block", - "src": "666:55:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 617, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 607, - "src": "699:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 618, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "705:2:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 619, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 611, - "src": "709:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 615, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 605, - "src": "680:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 561, - "src": "680:18:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "680:35:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 614, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "672:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "672:44:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 622, - "nodeType": "ExpressionStatement", - "src": "672:44:6" - } - ] - }, - "documentation": null, - "id": 624, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 612, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 605, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 624, - "src": "581:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 604, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "581:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 607, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 624, - "src": "599:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 606, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "599:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 609, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 624, - "src": "617:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 608, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "617:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 611, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 624, - "src": "633:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 610, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "633:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "575:75:6" - }, - "payable": false, - "returnParameters": { - "id": 613, - "nodeType": "ParameterList", - "parameters": [], - "src": "666:0:6" - }, - "scope": 722, - "src": "550:171:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 658, - "nodeType": "Block", - "src": "823:330:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 634, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 630, - "src": "1045:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 635, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1054:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1045:10:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 637, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1044:12:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 640, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 737, - "src": "1077:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1077:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 642, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 628, - "src": "1089:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 638, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 626, - "src": "1061:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 532, - "src": "1061:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1061:36:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 644, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1101:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1061:41:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 646, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1060:43:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1044:59:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 633, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1036:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 648, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1036:68:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 649, - "nodeType": "ExpressionStatement", - "src": "1036:68:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 653, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 628, - "src": "1132:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 654, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 630, - "src": "1141:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 651, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 626, - "src": "1118:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 550, - "src": "1118:13:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1118:29:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 650, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1110:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1110:38:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 657, - "nodeType": "ExpressionStatement", - "src": "1110:38:6" - } - ] - }, - "documentation": null, - "id": 659, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 631, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 626, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "751:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 625, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "751:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 628, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "769:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "769:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 630, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "790:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 629, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "790:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "745:62:6" - }, - "payable": false, - "returnParameters": { - "id": 632, - "nodeType": "ParameterList", - "parameters": [], - "src": "823:0:6" - }, - "scope": 722, - "src": "725:428:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 689, - "nodeType": "Block", - "src": "1265:135:6", - "statements": [ - { - "assignments": [ - 669 - ], - "declarations": [ - { - "constant": false, - "id": 669, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 690, - "src": "1271:20:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 668, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1271:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 680, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 678, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 665, - "src": "1338:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 673, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 758, - "src": "1318:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$722", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$722", - "typeString": "library SafeERC20" - } - ], - "id": 672, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1310:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1310:13:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 675, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "1325:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 670, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 661, - "src": "1294:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 532, - "src": "1294:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1294:39:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 488, - "src": "1294:43:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 679, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1294:50:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1271:73:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 684, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 663, - "src": "1372:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 685, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 669, - "src": "1381:12:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 682, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 661, - "src": "1358:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 550, - "src": "1358:13:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1358:36:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 681, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1350:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1350:45:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 688, - "nodeType": "ExpressionStatement", - "src": "1350:45:6" - } - ] - }, - "documentation": null, - "id": 690, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeIncreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 666, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 661, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 690, - "src": "1193:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 660, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "1193:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 663, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 690, - "src": "1211:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 662, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1211:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 665, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 690, - "src": "1232:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 664, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1232:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1187:62:6" - }, - "payable": false, - "returnParameters": { - "id": 667, - "nodeType": "ParameterList", - "parameters": [], - "src": "1265:0:6" - }, - "scope": 722, - "src": "1157:243:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 720, - "nodeType": "Block", - "src": "1512:135:6", - "statements": [ - { - "assignments": [ - 700 - ], - "declarations": [ - { - "constant": false, - "id": 700, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 721, - "src": "1518:20:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 699, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1518:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 711, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 709, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 696, - "src": "1585:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 704, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 758, - "src": "1565:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$722", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$722", - "typeString": "library SafeERC20" - } - ], - "id": 703, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1557:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1557:13:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 706, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 694, - "src": "1572:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 701, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 692, - "src": "1541:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 702, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 532, - "src": "1541:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1541:39:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 708, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 464, - "src": "1541:43:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 710, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1541:50:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1518:73:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 715, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 694, - "src": "1619:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 716, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 700, - "src": "1628:12:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 713, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 692, - "src": "1605:5:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "id": 714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 550, - "src": "1605:13:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1605:36:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 712, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 740, - 741 - ], - "referencedDeclaration": 740, - "src": "1597:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1597:45:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 719, - "nodeType": "ExpressionStatement", - "src": "1597:45:6" - } - ] - }, - "documentation": null, - "id": 721, - "implemented": true, - "isConstructor": false, - "isDeclaredConst": false, - "modifiers": [], - "name": "safeDecreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 692, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 721, - "src": "1440:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 691, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 578, - "src": "1440:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$578", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 694, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 721, - "src": "1458:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 693, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1458:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 696, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 721, - "src": "1479:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 695, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1479:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1434:62:6" - }, - "payable": false, - "returnParameters": { - "id": 698, - "nodeType": "ParameterList", - "parameters": [], - "src": "1512:0:6" - }, - "scope": 722, - "src": "1404:243:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 723, - "src": "353:1296:6" - } - ], - "src": "0:1650:6" - }, - "id": 6 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.abi b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.abi deleted file mode 100644 index 38dd233d4..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[{"name":"minerAddress","type":"address"}],"name":"trasferToMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_FACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CAT_4_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CAT_1_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CAT_3_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCoreTeam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CAT_0_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CAT_5_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CAT_2_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"poolType","type":"uint16"},{"name":"tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.bin b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.bin deleted file mode 100644 index 4bb8a74af..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b5060405160408061076083398101604052805160209091015161003b33640100000000610077810204565b60018054600160a060020a0390921662010000026201000060b060020a031961ffff90941661ffff199093169290921792909216179055610120565b61008f60008264010000000061056b61009282021704565b50565b600160a060020a03811615156100a757600080fd5b6100ba82826401000000006100e9810204565b156100c457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561010057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6106318061012f6000396000f3006080604052600436106100955763ffffffff60e060020a6000350416632296f4c7811461009a57806325109e8b146100bd5780632e6b6849146100e4578063455acbcd14610105578063492fba841461011a57806349dc9ed01461012f578063608d3d3d146101445780639fc3c98314610179578063a89febb21461018e578063aed6183f146101a3578063d43acc79146101b8575b600080fd5b3480156100a657600080fd5b506100bb600160a060020a03600435166101cd565b005b3480156100c957600080fd5b506100d26103cc565b60408051918252519081900360200190f35b3480156100f057600080fd5b506100bb600160a060020a03600435166103d8565b34801561011157600080fd5b506100d26103f8565b34801561012657600080fd5b506100d2610407565b34801561013b57600080fd5b506100d2610415565b34801561015057600080fd5b50610165600160a060020a0360043516610424565b604080519115158252519081900360200190f35b34801561018557600080fd5b506100d261043c565b34801561019a57600080fd5b506100d261044a565b3480156101af57600080fd5b506100d2610459565b3480156101c457600080fd5b506100bb610468565b60008060006101db33610424565b15156101e657600080fd5b83925082600160a060020a0316631777fb4b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050506040513d602081101561025157600080fd5b5051151561025e57600080fd5b82600160a060020a03166380258e476040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561029c57600080fd5b505af11580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b50519150600060ff8316108015906102e2575060058260ff1611155b15156102ed57600080fd5b50600060ff8216151561030b575069152d02c7e14af680000061039c565b8160ff1660011415610328575069d3c21bcecceda100000061039c565b8160ff166002141561034657506a01a784379d99db4200000061039c565b8160ff166003141561036457506a027b46536c66c8e300000061039c565b8160ff166004141561038257506a034f086f3b33b68400000061039c565b8160ff166005141561039c57506a0422ca8b0a00a4250000005b600081116103a957600080fd5b6001546103c690620100009004600160a060020a03168583610473565b50505050565b670de0b6b3a764000081565b6103e133610424565b15156103ec57600080fd5b6103f581610512565b50565b6a034f086f3b33b68400000081565b69d3c21bcecceda100000081565b6a027b46536c66c8e300000081565b6000610436818363ffffffff61052316565b92915050565b69152d02c7e14af680000081565b6a0422ca8b0a00a42500000081565b6a01a784379d99db4200000081565b6104713361055a565b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156104d657600080fd5b505af11580156104ea573d6000803e3d6000fd5b505050506040513d602081101561050057600080fd5b5051151561050d57600080fd5b505050565b6103f560008263ffffffff61056b16565b6000600160a060020a038216151561053a57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6103f560008263ffffffff6105b916565b600160a060020a038116151561058057600080fd5b61058a8282610523565b1561059457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a03811615156105ce57600080fd5b6105d88282610523565b15156105e357600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a72305820f296b4ffb64dca2d6eb3a2164312cba487eba728c8b0729ef90193efdf3b0b3d0029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.json deleted file mode 100644 index 39b79f14d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoPool.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "trasferToMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "TOKEN_FACTOR", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_4_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_1_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_3_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_0_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_5_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "CAT_2_VALUE", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "poolType", - "type": "uint16" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "608060405234801561001057600080fd5b5060405160408061076083398101604052805160209091015161003b33640100000000610077810204565b60018054600160a060020a0390921662010000026201000060b060020a031961ffff90941661ffff199093169290921792909216179055610120565b61008f60008264010000000061056b61009282021704565b50565b600160a060020a03811615156100a757600080fd5b6100ba82826401000000006100e9810204565b156100c457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561010057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6106318061012f6000396000f3006080604052600436106100955763ffffffff60e060020a6000350416632296f4c7811461009a57806325109e8b146100bd5780632e6b6849146100e4578063455acbcd14610105578063492fba841461011a57806349dc9ed01461012f578063608d3d3d146101445780639fc3c98314610179578063a89febb21461018e578063aed6183f146101a3578063d43acc79146101b8575b600080fd5b3480156100a657600080fd5b506100bb600160a060020a03600435166101cd565b005b3480156100c957600080fd5b506100d26103cc565b60408051918252519081900360200190f35b3480156100f057600080fd5b506100bb600160a060020a03600435166103d8565b34801561011157600080fd5b506100d26103f8565b34801561012657600080fd5b506100d2610407565b34801561013b57600080fd5b506100d2610415565b34801561015057600080fd5b50610165600160a060020a0360043516610424565b604080519115158252519081900360200190f35b34801561018557600080fd5b506100d261043c565b34801561019a57600080fd5b506100d261044a565b3480156101af57600080fd5b506100d2610459565b3480156101c457600080fd5b506100bb610468565b60008060006101db33610424565b15156101e657600080fd5b83925082600160a060020a0316631777fb4b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561022757600080fd5b505af115801561023b573d6000803e3d6000fd5b505050506040513d602081101561025157600080fd5b5051151561025e57600080fd5b82600160a060020a03166380258e476040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561029c57600080fd5b505af11580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b50519150600060ff8316108015906102e2575060058260ff1611155b15156102ed57600080fd5b50600060ff8216151561030b575069152d02c7e14af680000061039c565b8160ff1660011415610328575069d3c21bcecceda100000061039c565b8160ff166002141561034657506a01a784379d99db4200000061039c565b8160ff166003141561036457506a027b46536c66c8e300000061039c565b8160ff166004141561038257506a034f086f3b33b68400000061039c565b8160ff166005141561039c57506a0422ca8b0a00a4250000005b600081116103a957600080fd5b6001546103c690620100009004600160a060020a03168583610473565b50505050565b670de0b6b3a764000081565b6103e133610424565b15156103ec57600080fd5b6103f581610512565b50565b6a034f086f3b33b68400000081565b69d3c21bcecceda100000081565b6a027b46536c66c8e300000081565b6000610436818363ffffffff61052316565b92915050565b69152d02c7e14af680000081565b6a0422ca8b0a00a42500000081565b6a01a784379d99db4200000081565b6104713361055a565b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156104d657600080fd5b505af11580156104ea573d6000803e3d6000fd5b505050506040513d602081101561050057600080fd5b5051151561050d57600080fd5b505050565b6103f560008263ffffffff61056b16565b6000600160a060020a038216151561053a57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6103f560008263ffffffff6105b916565b600160a060020a038116151561058057600080fd5b61058a8282610523565b1561059457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a03811615156105ce57600080fd5b6105d88282610523565b15156105e357600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a72305820f296b4ffb64dca2d6eb3a2164312cba487eba728c8b0729ef90193efdf3b0b3d0029", - "functionHashes": { - "CAT_0_VALUE()": "9fc3c983", - "CAT_1_VALUE()": "492fba84", - "CAT_2_VALUE()": "aed6183f", - "CAT_3_VALUE()": "49dc9ed0", - "CAT_4_VALUE()": "455acbcd", - "CAT_5_VALUE()": "a89febb2", - "TOKEN_FACTOR()": "25109e8b", - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79", - "trasferToMiner(address)": "2296f4c7" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "317000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "CAT_0_VALUE()": "401", - "CAT_1_VALUE()": "335", - "CAT_2_VALUE()": "445", - "CAT_3_VALUE()": "357", - "CAT_4_VALUE()": "313", - "CAT_5_VALUE()": "423", - "TOKEN_FACTOR()": "269", - "addCoreTeam(address)": "infinite", - "isCoreTeam(address)": "infinite", - "renounceCoreTeam()": "infinite", - "trasferToMiner(address)": "infinite" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1-sol-output.json deleted file mode 100644 index 0daf3eb06..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1-sol-output.json +++ /dev/null @@ -1,16216 +0,0 @@ -{ - "contracts": { - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol": { - "AlgoTokenV1": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "INITIAL_SUPPLY", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "unpause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "paused", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renouncePauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "methods": { - "allowance(address,address)": { - "details": "Function to check the amount of tokens that an owner allowed to a spender.", - "params": { - "owner": "address The address which owns the funds.", - "spender": "address The address which will spend the funds." - }, - "return": "A uint256 specifying the amount of tokens still available for the spender." - }, - "balanceOf(address)": { - "details": "Gets the balance of the specified address.", - "params": { - "owner": "The address to query the balance of." - }, - "return": "An uint256 representing the amount owned by the passed address." - }, - "decimals()": { - "return": "the number of decimals of the token." - }, - "name()": { - "return": "the name of the token." - }, - "pause()": { - "details": "called by the owner to pause, triggers stopped state" - }, - "paused()": { - "return": "true if the contract is paused, false otherwise." - }, - "symbol()": { - "return": "the symbol of the token." - }, - "totalSupply()": { - "details": "Total number of tokens in existence" - }, - "unpause()": { - "details": "called by the owner to unpause, returns to normal state" - } - } - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b50604080518082018252600581527f416c676f7300000000000000000000000000000000000000000000000000000060208083019182528351808501909452600484527f414c474f00000000000000000000000000000000000000000000000000000000908401528151919291601291620000909160039190620002c1565b508151620000a6906004906020850190620002c1565b506005805460ff191660ff9290921691909117905550620000d290503364010000000062000103810204565b6007805460ff19169055620000fd336b033b2e3c9fd0803ce800000064010000000062000155810204565b62000366565b6200011e60068264010000000062000b2c6200021482021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a03821615156200016b57600080fd5b60025462000188908264010000000062000ace6200026f82021704565b600255600160a060020a038216600090815260208190526040902054620001be908264010000000062000ace6200026f82021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03811615156200022a57600080fd5b6200023f828264010000000062000289810204565b156200024a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000828201838110156200028257600080fd5b9392505050565b6000600160a060020a0382161515620002a157600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030457805160ff191683800117855562000334565b8280016001018555821562000334579182015b828111156200033457825182559160200191906001019062000317565b506200034292915062000346565b5090565b6200036391905b808211156200034257600081556001016200034d565b90565b610ba680620003766000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635c975abb116100bf5780638456cb591161008e5780638456cb591461032357806395d89b411461032b578063a457c2d714610333578063a9059cbb1461035f578063dd62ed3e1461038b57610133565b80635c975abb146102c75780636ef8d66d146102cf57806370a08231146102d757806382dc1ec4146102fd57610133565b80632ff2e9dc116101065780632ff2e9dc14610245578063313ce5671461024d578063395093511461026b5780633f4ba83a1461029757806346fbf68e146102a157610133565b806306fdde0314610138578063095ea7b3146101b557806318160ddd146101f557806323b872dd1461020f575b600080fd5b6101406103b9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e1600480360360408110156101cb57600080fd5b50600160a060020a03813516906020013561044f565b604080519115158252519081900360200190f35b6101fd610473565b60408051918252519081900360200190f35b6101e16004803603606081101561022557600080fd5b50600160a060020a03813581169160208101359091169060400135610479565b6101fd61049f565b6102556104af565b6040805160ff9092168252519081900360200190f35b6101e16004803603604081101561028157600080fd5b50600160a060020a0381351690602001356104b8565b61029f6104d5565b005b6101e1600480360360208110156102b757600080fd5b5035600160a060020a0316610539565b6101e1610552565b61029f61055b565b6101fd600480360360208110156102ed57600080fd5b5035600160a060020a0316610566565b61029f6004803603602081101561031357600080fd5b5035600160a060020a0316610581565b61029f6105a1565b610140610607565b6101e16004803603604081101561034957600080fd5b50600160a060020a038135169060200135610668565b6101e16004803603604081101561037557600080fd5b50600160a060020a038135169060200135610685565b6101fd600480360360408110156103a157600080fd5b50600160a060020a03813581169160200135166106a2565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b820191906000526020600020905b81548152906001019060200180831161042857829003601f168201915b5050505050905090565b60075460009060ff161561046257600080fd5b61046c83836106cd565b9392505050565b60025490565b60075460009060ff161561048c57600080fd5b61049784848461074b565b949350505050565b6b033b2e3c9fd0803ce800000081565b60055460ff1690565b60075460009060ff16156104cb57600080fd5b61046c8383610814565b6104de33610539565b15156104e957600080fd5b60075460ff1615156104fa57600080fd5b6007805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600061054c60068363ffffffff6108c416565b92915050565b60075460ff1690565b610564336108fb565b565b600160a060020a031660009081526020819052604090205490565b61058a33610539565b151561059557600080fd5b61059e81610943565b50565b6105aa33610539565b15156105b557600080fd5b60075460ff16156105c557600080fd5b6007805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b60075460009060ff161561067b57600080fd5b61046c838361098b565b60075460009060ff161561069857600080fd5b61046c83836109d6565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156106e457600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205461077f908363ffffffff6109ec16565b600160a060020a03851660009081526001602090815260408083203384529091529020556107ae848484610a01565b600160a060020a0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561082b57600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff610ace16565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6000600160a060020a03821615156108db57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61090c60068263ffffffff610ae016565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61095460068263ffffffff610b2c16565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000600160a060020a03831615156109a257600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff6109ec16565b60006109e3338484610a01565b50600192915050565b6000828211156109fb57600080fd5b50900390565b600160a060020a0382161515610a1657600080fd5b600160a060020a038316600090815260208190526040902054610a3f908263ffffffff6109ec16565b600160a060020a038085166000908152602081905260408082209390935590841681522054610a74908263ffffffff610ace16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561046c57600080fd5b600160a060020a0381161515610af557600080fd5b610aff82826108c4565b1515610b0a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0381161515610b4157600080fd5b610b4b82826108c4565b15610b5557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916600117905556fea165627a7a72305820a8673657c914c80ad8879e073b63b3c05fd0190188d56a14948896f8205677a60029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH32 0x416C676F73000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE PUSH1 0x4 DUP5 MSTORE PUSH32 0x414C474F00000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH1 0x12 SWAP2 PUSH3 0x90 SWAP2 PUSH1 0x3 SWAP2 SWAP1 PUSH3 0x2C1 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0xA6 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2C1 JUMP JUMPDEST POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0xD2 SWAP1 POP CALLER PUSH5 0x100000000 PUSH3 0x103 DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH3 0xFD CALLER PUSH12 0x33B2E3C9FD0803CE8000000 PUSH5 0x100000000 PUSH3 0x155 DUP2 MUL DIV JUMP JUMPDEST PUSH3 0x366 JUMP JUMPDEST PUSH3 0x11E PUSH1 0x6 DUP3 PUSH5 0x100000000 PUSH3 0xB2C PUSH3 0x214 DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0x6719D08C1888103BEA251A4ED56406BD0C3E69723C8A1686E017E7BBE159B6F8 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH3 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH3 0x188 SWAP1 DUP3 PUSH5 0x100000000 PUSH3 0xACE PUSH3 0x26F DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x1BE SWAP1 DUP3 PUSH5 0x100000000 PUSH3 0xACE PUSH3 0x26F DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x23F DUP3 DUP3 PUSH5 0x100000000 PUSH3 0x289 DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH3 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH3 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH3 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x304 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x334 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x334 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x334 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x317 JUMP JUMPDEST POP PUSH3 0x342 SWAP3 SWAP2 POP PUSH3 0x346 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x363 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x342 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x34D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xBA6 DUP1 PUSH3 0x376 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x133 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x5C975ABB GT PUSH2 0xBF JUMPI DUP1 PUSH4 0x8456CB59 GT PUSH2 0x8E JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x323 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x35F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x38B JUMPI PUSH2 0x133 JUMP JUMPDEST DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x6EF8D66D EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0x82DC1EC4 EQ PUSH2 0x2FD JUMPI PUSH2 0x133 JUMP JUMPDEST DUP1 PUSH4 0x2FF2E9DC GT PUSH2 0x106 JUMPI DUP1 PUSH4 0x2FF2E9DC EQ PUSH2 0x245 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x46FBF68E EQ PUSH2 0x2A1 JUMPI PUSH2 0x133 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x20F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x140 PUSH2 0x3B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x162 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1FD PUSH2 0x473 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x479 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x49F JUMP JUMPDEST PUSH2 0x255 PUSH2 0x4AF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4D5 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x539 JUMP JUMPDEST PUSH2 0x1E1 PUSH2 0x552 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x55B JUMP JUMPDEST PUSH2 0x1FD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x566 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x313 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x581 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x5A1 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x607 JUMP JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x349 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x668 JUMP JUMPDEST PUSH2 0x1E1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x685 JUMP JUMPDEST PUSH2 0x1FD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6A2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x445 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x41A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x445 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x428 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46C DUP4 DUP4 PUSH2 0x6CD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x48C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x497 DUP5 DUP5 DUP5 PUSH2 0x74B JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH12 0x33B2E3C9FD0803CE8000000 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46C DUP4 DUP4 PUSH2 0x814 JUMP JUMPDEST PUSH2 0x4DE CALLER PUSH2 0x539 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x4FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54C PUSH1 0x6 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8C4 AND JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x564 CALLER PUSH2 0x8FB JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x58A CALLER PUSH2 0x539 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x595 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59E DUP2 PUSH2 0x943 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x5AA CALLER PUSH2 0x539 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x445 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x41A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x445 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x67B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46C DUP4 DUP4 PUSH2 0x98B JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x698 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x46C DUP4 DUP4 PUSH2 0x9D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x6E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH2 0x77F SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x9EC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE PUSH2 0x7AE DUP5 DUP5 DUP5 PUSH2 0xA01 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x82B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x85F SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xACE AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD SWAP5 DUP6 MSTORE MLOAD SWAP2 SWAP4 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x8DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x90C PUSH1 0x6 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xAE0 AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0xCD265EBAF09DF2871CC7BD4133404A235BA12EFF2041BB89D9C714A2621C7C7E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x954 PUSH1 0x6 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xB2C AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0x6719D08C1888103BEA251A4ED56406BD0C3E69723C8A1686E017E7BBE159B6F8 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x9A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x85F SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x9EC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9E3 CALLER DUP5 DUP5 PUSH2 0xA01 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x9FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0xA16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA3F SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x9EC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA74 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xACE AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xAF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAFF DUP3 DUP3 PUSH2 0x8C4 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4B DUP3 DUP3 PUSH2 0x8C4 JUMP JUMPDEST ISZERO PUSH2 0xB55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xa8 PUSH8 0x3657C914C80AD887 SWAP15 SMOD EXTCODESIZE PUSH4 0xB3C05FD0 NOT ADD DUP9 0xd5 PUSH11 0x14948896F8205677A60029 ", - "sourceMap": "408:310:0:-;;;559:156;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;405:163:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;493:12;;405:163;;;638:2:0;;493:12:6;;:5;;405:163;493:12;:::i;:::-;-1:-1:-1;515:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;541:9:6;:20;;-1:-1:-1;;541:20:6;;;;;;;;;;;;-1:-1:-1;275:22:2;;-1:-1:-1;286:10:2;275;;;;:22;:::i;:::-;352:7:3;:15;;-1:-1:-1;;352:15:3;;;674:33:0;680:10;518:32;674:5;;;;:33;:::i;:::-;408:310;;685:119:2;741:21;:8;754:7;741:12;;;;;;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:2;;;;;;;;685:119;:::o;6198:263:5:-;-1:-1:-1;;;;;6272:21:5;;;;6264:30;;;;;;6320:12;;:23;;6337:5;6320:16;;;;;;:23;:::i;:::-;6305:12;:38;-1:-1:-1;;;;;6374:18:5;;:9;:18;;;;;;;;;;;:29;;6397:5;6374:22;;;;;;:29;:::i;:::-;-1:-1:-1;;;;;6353:18:5;;:9;:18;;;;;;;;;;;:50;;;;6418:36;;;;;;;6353:18;;:9;;6418:36;;;;;;;;;;6198:263;;:::o;259:181:1:-;-1:-1:-1;;;;;335:21:1;;;;327:30;;;;;;376:18;380:4;386:7;376:3;;;;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:1;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:1;429:4;406:27;;;259:181::o;1431:145:4:-;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;;1568:1;1431:145;-1:-1:-1;;;1431:145:4:o;786:162:1:-;858:4;-1:-1:-1;;;;;882:21:1;;;;874:30;;;;;;-1:-1:-1;;;;;;921:20:1;:11;:20;;;;;;;;;;;;;;;786:162::o;408:310:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;408:310:0;;;-1:-1:-1;408:310:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "596400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "INITIAL_SUPPLY()": "226", - "addPauser(address)": "infinite", - "allowance(address,address)": "879", - "approve(address,uint256)": "22820", - "balanceOf(address)": "731", - "decimals()": "463", - "decreaseAllowance(address,uint256)": "infinite", - "increaseAllowance(address,uint256)": "infinite", - "isPauser(address)": "infinite", - "name()": "infinite", - "pause()": "infinite", - "paused()": "438", - "renouncePauser()": "infinite", - "symbol()": "infinite", - "totalSupply()": "471", - "transfer(address,uint256)": "infinite", - "transferFrom(address,address,uint256)": "infinite", - "unpause()": "infinite" - } - }, - "methodIdentifiers": { - "INITIAL_SUPPLY()": "2ff2e9dc", - "addPauser(address)": "82dc1ec4", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "isPauser(address)": "46fbf68e", - "name()": "06fdde03", - "pause()": "8456cb59", - "paused()": "5c975abb", - "renouncePauser()": "6ef8d66d", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"INITIAL_SUPPLY\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender.\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"return\":\"A uint256 specifying the amount of tokens still available for the spender.\"},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address.\",\"params\":{\"owner\":\"The address to query the balance of.\"},\"return\":\"An uint256 representing the amount owned by the passed address.\"},\"decimals()\":{\"return\":\"the number of decimals of the token.\"},\"name()\":{\"return\":\"the name of the token.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"symbol()\":{\"return\":\"the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence\"},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol\":\"AlgoTokenV1\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol\":{\"keccak256\":\"0xdcc3037af0c6df03d255c9499734f93c105ed0243f985fa6a75b52d96e2b5f9d\",\"urls\":[\"bzzr://2be58cc40034bf60a6bb2ef81726c354a2e8cbd63751809a8349697ba26d509d\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzzr://357744ad2278716087860855e31728d9f99493bb4a3567a2e39a910cb219601a\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzzr://64665e3aefdb15dd5d2ebe3cba5103a150199e27219fc16e9d71815328e6f64f\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzzr://80cd02a56e6e33504318124d0d645c82e615cc8a4b5829cc9d82d17635c644c8\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xe195405e9993d575173cdb5dd408db7459a026b9a98085c1a3b676f020f46584\",\"urls\":[\"bzzr://4463a0d4f49767f59c02f2a987b90d48e0d31b3ed3424f3e743496f102f96044\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzzr://81265bcdcca15f8a460cef608b40ca729559f2afbd6e6e7124b542d28da1c890\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "details": "Library for managing addresses assigned to a Role.", - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a723058205d69966d67651bfd2b7c5e5caddd667e55aa5b27b0278c4a8cb13c82ef1921600029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0x5d PUSH10 0x966D67651BFD2B7C5E5C 0xad 0xdd PUSH7 0x7E55AA5B27B027 DUP13 0x4a DUP13 0xb1 EXTCODECOPY DUP3 0xef NOT 0x21 PUSH1 0x0 0x29 ", - "sourceMap": "108:842:1:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing addresses assigned to a Role.\",\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol": { - "PauserRole": { - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renouncePauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserRemoved", - "type": "event" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addPauser(address)": "82dc1ec4", - "isPauser(address)": "46fbf68e", - "renouncePauser()": "6ef8d66d" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol": { - "Pausable": { - "abi": [ - { - "constant": false, - "inputs": [], - "name": "unpause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "paused", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renouncePauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserRemoved", - "type": "event" - } - ], - "devdoc": { - "details": "Base contract which allows children to implement an emergency stop mechanism.", - "methods": { - "pause()": { - "details": "called by the owner to pause, triggers stopped state" - }, - "paused()": { - "return": "true if the contract is paused, false otherwise." - }, - "unpause()": { - "details": "called by the owner to unpause, returns to normal state" - } - }, - "title": "Pausable" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addPauser(address)": "82dc1ec4", - "isPauser(address)": "46fbf68e", - "pause()": "8456cb59", - "paused()": "5c975abb", - "renouncePauser()": "6ef8d66d", - "unpause()": "3f4ba83a" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "details": "Unsigned math operations with safety checks that revert on error", - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820009f8e16279448e3368b519ea60818fa88fd7d5cf7185ad39cac36325f88401d0029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 STOP SWAP16 DUP15 AND 0x27 SWAP5 0x48 0xe3 CALLDATASIZE DUP12 MLOAD SWAP15 0xa6 ADDMOD XOR STATICCALL DUP9 REVERT PUSH30 0x5CF7185AD39CAC36325F88401D0029000000000000000000000000000000 ", - "sourceMap": "125:1726:4:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": { - "ERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "Implementation of the basic standard token. https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md Originally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for all accounts just by listening to said events. Note that this isn't required by the specification, and other compliant implementations may not do it.", - "methods": { - "allowance(address,address)": { - "details": "Function to check the amount of tokens that an owner allowed to a spender.", - "params": { - "owner": "address The address which owns the funds.", - "spender": "address The address which will spend the funds." - }, - "return": "A uint256 specifying the amount of tokens still available for the spender." - }, - "approve(address,uint256)": { - "details": "Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729", - "params": { - "spender": "The address which will spend the funds.", - "value": "The amount of tokens to be spent." - } - }, - "balanceOf(address)": { - "details": "Gets the balance of the specified address.", - "params": { - "owner": "The address to query the balance of." - }, - "return": "An uint256 representing the amount owned by the passed address." - }, - "decreaseAllowance(address,uint256)": { - "details": "Decrease the amount of tokens that an owner allowed to a spender. approve should be called when allowed_[_spender] == 0. To decrement allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) From MonolithDAO Token.sol Emits an Approval event.", - "params": { - "spender": "The address which will spend the funds.", - "subtractedValue": "The amount of tokens to decrease the allowance by." - } - }, - "increaseAllowance(address,uint256)": { - "details": "Increase the amount of tokens that an owner allowed to a spender. approve should be called when allowed_[_spender] == 0. To increment allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) From MonolithDAO Token.sol Emits an Approval event.", - "params": { - "addedValue": "The amount of tokens to increase the allowance by.", - "spender": "The address which will spend the funds." - } - }, - "totalSupply()": { - "details": "Total number of tokens in existence" - }, - "transfer(address,uint256)": { - "details": "Transfer token for a specified address", - "params": { - "to": "The address to transfer to.", - "value": "The amount to be transferred." - } - }, - "transferFrom(address,address,uint256)": { - "details": "Transfer tokens from one address to another. Note that while this function emits an Approval event, this is not required as per the specification, and other compliant implementations may not emit the event.", - "params": { - "from": "address The address which you want to send tokens from", - "to": "address The address which you want to transfer to", - "value": "uint256 the amount of tokens to be transferred" - } - } - }, - "title": "Standard ERC20 token" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506105dd806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806370a082311161007857806370a0823114610166578063a457c2d71461018c578063a9059cbb146101b8578063dd62ed3e146101e4576100a5565b8063095ea7b3146100aa57806318160ddd146100ea57806323b872dd14610104578063395093511461013a575b600080fd5b6100d6600480360360408110156100c057600080fd5b50600160a060020a038135169060200135610212565b604080519115158252519081900360200190f35b6100f2610290565b60408051918252519081900360200190f35b6100d66004803603606081101561011a57600080fd5b50600160a060020a03813581169160208101359091169060400135610296565b6100d66004803603604081101561015057600080fd5b50600160a060020a03813516906020013561035f565b6100f26004803603602081101561017c57600080fd5b5035600160a060020a031661040f565b6100d6600480360360408110156101a257600080fd5b50600160a060020a03813516906020013561042a565b6100d6600480360360408110156101ce57600080fd5b50600160a060020a038135169060200135610475565b6100f2600480360360408110156101fa57600080fd5b50600160a060020a038135811691602001351661048b565b6000600160a060020a038316151561022957600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526001602090815260408083203384529091528120546102ca908363ffffffff6104b616565b600160a060020a03851660009081526001602090815260408083203384529091529020556102f98484846104cb565b600160a060020a0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561037657600080fd5b336000908152600160209081526040808320600160a060020a03871684529091529020546103aa908363ffffffff61059816565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a031660009081526020819052604090205490565b6000600160a060020a038316151561044157600080fd5b336000908152600160209081526040808320600160a060020a03871684529091529020546103aa908363ffffffff6104b616565b60006104823384846104cb565b50600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000828211156104c557600080fd5b50900390565b600160a060020a03821615156104e057600080fd5b600160a060020a038316600090815260208190526040902054610509908263ffffffff6104b616565b600160a060020a03808516600090815260208190526040808220939093559084168152205461053e908263ffffffff61059816565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828201838110156105aa57600080fd5b939250505056fea165627a7a72305820e36c0e5397edd1025b92feed31da1b82b50b4a5f0b779dcf48bc94596302fe170029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5DD DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x70A08231 GT PUSH2 0x78 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x166 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1E4 JUMPI PUSH2 0xA5 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x13A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x212 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xF2 PUSH2 0x290 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xD6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x296 JUMP JUMPDEST PUSH2 0xD6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x150 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x35F JUMP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x40F JUMP JUMPDEST PUSH2 0xD6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x42A JUMP JUMPDEST PUSH2 0xD6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x475 JUMP JUMPDEST PUSH2 0xF2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x48B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH2 0x2CA SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4B6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE PUSH2 0x2F9 DUP5 DUP5 DUP5 PUSH2 0x4CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AA SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x598 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD SWAP5 DUP6 MSTORE MLOAD SWAP2 SWAP4 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x3AA SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4B6 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x482 CALLER DUP5 DUP5 PUSH2 0x4CB JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x4C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x509 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x4B6 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x53E SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x598 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xe3 PUSH13 0xE5397EDD1025B92FEED31DA1B DUP3 0xb5 SIGNEXTEND 0x4a 0x5f SIGNEXTEND PUSH24 0x9DCF48BC94596302FE170029000000000000000000000000 ", - "sourceMap": "649:6947:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;649:6947:5;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "300200", - "executionCost": "337", - "totalCost": "300537" - }, - "external": { - "allowance(address,address)": "835", - "approve(address,uint256)": "22501", - "balanceOf(address)": "664", - "decreaseAllowance(address,uint256)": "infinite", - "increaseAllowance(address,uint256)": "infinite", - "totalSupply()": "426", - "transfer(address,uint256)": "infinite", - "transferFrom(address,address,uint256)": "infinite" - }, - "internal": { - "_burn(address,uint256)": "infinite", - "_burnFrom(address,uint256)": "infinite", - "_mint(address,uint256)": "infinite", - "_transfer(address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard token. https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md Originally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for all accounts just by listening to said events. Note that this isn't required by the specification, and other compliant implementations may not do it.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender.\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"return\":\"A uint256 specifying the amount of tokens still available for the spender.\"},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address.\",\"params\":{\"owner\":\"The address to query the balance of.\"},\"return\":\"An uint256 representing the amount owned by the passed address.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Decrease the amount of tokens that an owner allowed to a spender. approve should be called when allowed_[_spender] == 0. To decrement allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) From MonolithDAO Token.sol Emits an Approval event.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"subtractedValue\":\"The amount of tokens to decrease the allowance by.\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Increase the amount of tokens that an owner allowed to a spender. approve should be called when allowed_[_spender] == 0. To increment allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) From MonolithDAO Token.sol Emits an Approval event.\",\"params\":{\"addedValue\":\"The amount of tokens to increase the allowance by.\",\"spender\":\"The address which will spend the funds.\"}},\"totalSupply()\":{\"details\":\"Total number of tokens in existence\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another. Note that while this function emits an Approval event, this is not required as per the specification, and other compliant implementations may not emit the event.\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"}}},\"title\":\"Standard ERC20 token\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzzr://80cd02a56e6e33504318124d0d645c82e615cc8a4b5829cc9d82d17635c644c8\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol": { - "ERC20Detailed": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "name": "name", - "type": "string" - }, - { - "name": "symbol", - "type": "string" - }, - { - "name": "decimals", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "The decimals are only for visualization purposes. All the operations are done using the smallest and indivisible token unit, just as on Ethereum all the operations are done in wei.", - "methods": { - "decimals()": { - "return": "the number of decimals of the token." - }, - "name()": { - "return": "the name of the token." - }, - "symbol()": { - "return": "the symbol of the token." - } - }, - "title": "ERC20Detailed token" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol": { - "ERC20Pausable": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "unpause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "paused", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renouncePauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "ERC20 modified with pausable transfers.*", - "methods": { - "allowance(address,address)": { - "details": "Function to check the amount of tokens that an owner allowed to a spender.", - "params": { - "owner": "address The address which owns the funds.", - "spender": "address The address which will spend the funds." - }, - "return": "A uint256 specifying the amount of tokens still available for the spender." - }, - "balanceOf(address)": { - "details": "Gets the balance of the specified address.", - "params": { - "owner": "The address to query the balance of." - }, - "return": "An uint256 representing the amount owned by the passed address." - }, - "pause()": { - "details": "called by the owner to pause, triggers stopped state" - }, - "paused()": { - "return": "true if the contract is paused, false otherwise." - }, - "totalSupply()": { - "details": "Total number of tokens in existence" - }, - "unpause()": { - "details": "called by the owner to unpause, returns to normal state" - } - }, - "title": "Pausable token" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405261001633640100000000610025810204565b6004805460ff19169055610102565b61003d60038264010000000061094561007482021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a038116151561008957600080fd5b61009c82826401000000006100cb810204565b156100a657600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156100e257600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6109bf806101116000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c0100000000000000000000000000000000000000000000000000000000900480636ef8d66d116100a95780638456cb59116100835780638456cb5914610254578063a457c2d71461025c578063a9059cbb14610288578063dd62ed3e146102b457610107565b80636ef8d66d1461020057806370a082311461020857806382dc1ec41461022e57610107565b806339509351116100e5578063395093511461019c5780633f4ba83a146101c857806346fbf68e146101d25780635c975abb146101f857610107565b8063095ea7b31461010c57806318160ddd1461014c57806323b872dd14610166575b600080fd5b6101386004803603604081101561012257600080fd5b50600160a060020a0381351690602001356102e2565b604080519115158252519081900360200190f35b610154610306565b60408051918252519081900360200190f35b6101386004803603606081101561017c57600080fd5b50600160a060020a0381358116916020810135909116906040013561030c565b610138600480360360408110156101b257600080fd5b50600160a060020a038135169060200135610332565b6101d061034f565b005b610138600480360360208110156101e857600080fd5b5035600160a060020a03166103b3565b6101386103cc565b6101d06103d5565b6101546004803603602081101561021e57600080fd5b5035600160a060020a03166103e0565b6101d06004803603602081101561024457600080fd5b5035600160a060020a03166103fb565b6101d061041b565b6101386004803603604081101561027257600080fd5b50600160a060020a038135169060200135610481565b6101386004803603604081101561029e57600080fd5b50600160a060020a03813516906020013561049e565b610154600480360360408110156102ca57600080fd5b50600160a060020a03813581169160200135166104bb565b60045460009060ff16156102f557600080fd5b6102ff83836104e6565b9392505050565b60025490565b60045460009060ff161561031f57600080fd5b61032a848484610564565b949350505050565b60045460009060ff161561034557600080fd5b6102ff838361062d565b610358336103b3565b151561036357600080fd5b60045460ff16151561037457600080fd5b6004805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b60006103c660038363ffffffff6106dd16565b92915050565b60045460ff1690565b6103de33610714565b565b600160a060020a031660009081526020819052604090205490565b610404336103b3565b151561040f57600080fd5b6104188161075c565b50565b610424336103b3565b151561042f57600080fd5b60045460ff161561043f57600080fd5b6004805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60045460009060ff161561049457600080fd5b6102ff83836107a4565b60045460009060ff16156104b157600080fd5b6102ff83836107ef565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156104fd57600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600160a060020a0383166000908152600160209081526040808320338452909152812054610598908363ffffffff61080516565b600160a060020a03851660009081526001602090815260408083203384529091529020556105c784848461081a565b600160a060020a0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561064457600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610678908363ffffffff6108e716565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6000600160a060020a03821615156106f457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61072560038263ffffffff6108f916565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61076d60038263ffffffff61094516565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000600160a060020a03831615156107bb57600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610678908363ffffffff61080516565b60006107fc33848461081a565b50600192915050565b60008282111561081457600080fd5b50900390565b600160a060020a038216151561082f57600080fd5b600160a060020a038316600090815260208190526040902054610858908263ffffffff61080516565b600160a060020a03808516600090815260208190526040808220939093559084168152205461088d908263ffffffff6108e716565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828201838110156102ff57600080fd5b600160a060020a038116151561090e57600080fd5b61091882826106dd565b151561092357600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a038116151561095a57600080fd5b61096482826106dd565b1561096e57600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916600117905556fea165627a7a723058209b9f6d57f3339392d2370056a1b0d3f8b34a52c54183a75740f4e2c02a5001f60029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x16 CALLER PUSH5 0x100000000 PUSH2 0x25 DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH2 0x102 JUMP JUMPDEST PUSH2 0x3D PUSH1 0x3 DUP3 PUSH5 0x100000000 PUSH2 0x945 PUSH2 0x74 DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0x6719D08C1888103BEA251A4ED56406BD0C3E69723C8A1686E017E7BBE159B6F8 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C DUP3 DUP3 PUSH5 0x100000000 PUSH2 0xCB DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0xE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x9BF DUP1 PUSH2 0x111 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x107 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x6EF8D66D GT PUSH2 0xA9 JUMPI DUP1 PUSH4 0x8456CB59 GT PUSH2 0x83 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x254 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2B4 JUMPI PUSH2 0x107 JUMP JUMPDEST DUP1 PUSH4 0x6EF8D66D EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0x82DC1EC4 EQ PUSH2 0x22E JUMPI PUSH2 0x107 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0xE5 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x46FBF68E EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x1F8 JUMPI PUSH2 0x107 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x166 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2E2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x154 PUSH2 0x306 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x30C JUMP JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x332 JUMP JUMPDEST PUSH2 0x1D0 PUSH2 0x34F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x138 PUSH2 0x3CC JUMP JUMPDEST PUSH2 0x1D0 PUSH2 0x3D5 JUMP JUMPDEST PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x1D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x3FB JUMP JUMPDEST PUSH2 0x1D0 PUSH2 0x41B JUMP JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x481 JUMP JUMPDEST PUSH2 0x138 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x49E JUMP JUMPDEST PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF DUP4 DUP4 PUSH2 0x4E6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x32A DUP5 DUP5 DUP5 PUSH2 0x564 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x345 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF DUP4 DUP4 PUSH2 0x62D JUMP JUMPDEST PUSH2 0x358 CALLER PUSH2 0x3B3 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C6 PUSH1 0x3 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x6DD AND JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3DE CALLER PUSH2 0x714 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x404 CALLER PUSH2 0x3B3 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x40F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x418 DUP2 PUSH2 0x75C JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x424 CALLER PUSH2 0x3B3 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x42F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x43F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE SWAP1 MLOAD PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x494 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF DUP4 DUP4 PUSH2 0x7A4 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x4B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FF DUP4 DUP4 PUSH2 0x7EF JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP9 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD PUSH2 0x598 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x805 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SSTORE PUSH2 0x5C7 DUP5 DUP5 DUP5 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 SLOAD DUP2 MLOAD SWAP1 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x678 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x8E7 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP1 MLOAD SWAP5 DUP6 MSTORE MLOAD SWAP2 SWAP4 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x6F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x725 PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8F9 AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0xCD265EBAF09DF2871CC7BD4133404A235BA12EFF2041BB89D9C714A2621C7C7E SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x76D PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x945 AND JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND SWAP1 PUSH32 0x6719D08C1888103BEA251A4ED56406BD0C3E69723C8A1686E017E7BBE159B6F8 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH2 0x7BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x678 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x805 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7FC CALLER DUP5 DUP5 PUSH2 0x81A JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x82F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x858 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x805 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x88D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x8E7 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x2FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x90E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x918 DUP3 DUP3 PUSH2 0x6DD JUMP JUMPDEST ISZERO ISZERO PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x95A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x964 DUP3 DUP3 PUSH2 0x6DD JUMP JUMPDEST ISZERO PUSH2 0x96E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 SWAP12 SWAP16 PUSH14 0x57F3339392D2370056A1B0D3F8B3 0x4a MSTORE 0xc5 COINBASE DUP4 0xa7 JUMPI BLOCKHASH DELEGATECALL 0xe2 0xc0 0x2a POP ADD 0xf6 STOP 0x29 ", - "sourceMap": "169:856:7:-;;;275:22:2;286:10;275;;;;:22;:::i;:::-;352:7:3;:15;;-1:-1:-1;;352:15:3;;;169:856:7;;685:119:2;741:21;:8;754:7;741:12;;;;;;:21;:::i;:::-;777:20;;-1:-1:-1;;;;;777:20:2;;;;;;;;685:119;:::o;259:181:1:-;-1:-1:-1;;;;;335:21:1;;;;327:30;;;;;;376:18;380:4;386:7;376:3;;;;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:1;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:1;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:1;;;;874:30;;;;;;-1:-1:-1;;;;;;921:20:1;:11;:20;;;;;;;;;;;;;;;786:162::o;169:856:7:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "499000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addPauser(address)": "infinite", - "allowance(address,address)": "857", - "approve(address,uint256)": "22798", - "balanceOf(address)": "709", - "decreaseAllowance(address,uint256)": "infinite", - "increaseAllowance(address,uint256)": "infinite", - "isPauser(address)": "infinite", - "pause()": "infinite", - "paused()": "504", - "renouncePauser()": "infinite", - "totalSupply()": "449", - "transfer(address,uint256)": "infinite", - "transferFrom(address,address,uint256)": "infinite", - "unpause()": "infinite" - } - }, - "methodIdentifiers": { - "addPauser(address)": "82dc1ec4", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "isPauser(address)": "46fbf68e", - "pause()": "8456cb59", - "paused()": "5c975abb", - "renouncePauser()": "6ef8d66d", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"ERC20 modified with pausable transfers.*\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender.\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"return\":\"A uint256 specifying the amount of tokens still available for the spender.\"},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address.\",\"params\":{\"owner\":\"The address to query the balance of.\"},\"return\":\"An uint256 representing the amount owned by the passed address.\"},\"pause()\":{\"details\":\"called by the owner to pause, triggers stopped state\"},\"paused()\":{\"return\":\"true if the contract is paused, false otherwise.\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence\"},\"unpause()\":{\"details\":\"called by the owner to unpause, returns to normal state\"}},\"title\":\"Pausable token\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":\"ERC20Pausable\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzzr://357744ad2278716087860855e31728d9f99493bb4a3567a2e39a910cb219601a\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzzr://64665e3aefdb15dd5d2ebe3cba5103a150199e27219fc16e9d71815328e6f64f\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzzr://80cd02a56e6e33504318124d0d645c82e615cc8a4b5829cc9d82d17635c644c8\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzzr://81265bcdcca15f8a460cef608b40ca729559f2afbd6e6e7124b542d28da1c890\"]},\"d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "see https://github.com/ethereum/EIPs/issues/20", - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/AlgoTokenV1.sol", - "exportedSymbols": { - "AlgoTokenV1": [ - 37 - ] - }, - "id": 38, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:0" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 38, - "sourceUnit": 936, - "src": "26:188:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol", - "id": 3, - "nodeType": "ImportDirective", - "scope": 38, - "sourceUnit": 1038, - "src": "216:188:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 4, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 877, - "src": "432:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$877", - "typeString": "contract ERC20" - } - }, - "id": 5, - "nodeType": "InheritanceSpecifier", - "src": "432:5:0" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 6, - "name": "ERC20Detailed", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 935, - "src": "439:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Detailed_$935", - "typeString": "contract ERC20Detailed" - } - }, - "id": 7, - "nodeType": "InheritanceSpecifier", - "src": "439:13:0" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 8, - "name": "ERC20Pausable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1037, - "src": "454:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Pausable_$1037", - "typeString": "contract ERC20Pausable" - } - }, - "id": 9, - "nodeType": "InheritanceSpecifier", - "src": "454:13:0" - } - ], - "contractDependencies": [ - 234, - 317, - 877, - 935, - 1037, - 1106 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 37, - "linearizedBaseContracts": [ - 37, - 1037, - 317, - 234, - 935, - 877, - 1106 - ], - "name": "AlgoTokenV1", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 19, - "name": "INITIAL_SUPPLY", - "nodeType": "VariableDeclaration", - "scope": 37, - "src": "477:73:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "477:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030303030", - "id": 11, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "518:10:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000_by_1", - "typeString": "int_const 1000000000" - }, - "value": "1000000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "532:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3138", - "id": 14, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "546:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - } - ], - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "538:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 15, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "538:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "532:17:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 17, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "531:19:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "518:32:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 35, - "nodeType": "Block", - "src": "663:52:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 30, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "680:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 31, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "680:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 32, - "name": "INITIAL_SUPPLY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19, - "src": "692:14:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 29, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 792, - "src": "674:5:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 33, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "674:33:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 34, - "nodeType": "ExpressionStatement", - "src": "674:33:0" - } - ] - }, - "documentation": null, - "id": 36, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [], - "id": 22, - "modifierName": { - "argumentTypes": null, - "id": 21, - "name": "ERC20Pausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "582:13:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20Pausable_$1037_$", - "typeString": "type(contract ERC20Pausable)" - } - }, - "nodeType": "ModifierInvocation", - "src": "582:15:0" - }, - { - "arguments": [ - { - "argumentTypes": null, - "hexValue": "416c676f73", - "id": 24, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "621:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f431b25e990e179f4656b6db11d387ab1d3ba961e80647281b655f4c6f523207", - "typeString": "literal_string \"Algos\"" - }, - "value": "Algos" - }, - { - "argumentTypes": null, - "hexValue": "414c474f", - "id": 25, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "630:6:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fef8132823c3ac25abf2126d6030ba0dd95564834b498fa7005f7c43e8b10551", - "typeString": "literal_string \"ALGO\"" - }, - "value": "ALGO" - }, - { - "argumentTypes": null, - "hexValue": "3138", - "id": 26, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "638:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - } - ], - "id": 27, - "modifierName": { - "argumentTypes": null, - "id": 23, - "name": "ERC20Detailed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 935, - "src": "607:13:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20Detailed_$935_$", - "typeString": "type(contract ERC20Detailed)" - } - }, - "nodeType": "ModifierInvocation", - "src": "607:34:0" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20, - "nodeType": "ParameterList", - "parameters": [], - "src": "570:2:0" - }, - "returnParameters": { - "id": 28, - "nodeType": "ParameterList", - "parameters": [], - "src": "663:0:0" - }, - "scope": 37, - "src": "559:156:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 38, - "src": "408:310:0" - } - ], - "src": "0:720:0" - }, - "id": 0 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 131 - ] - }, - "id": 132, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 39, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:1" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 131, - "linearizedBaseContracts": [ - 131 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 44, - "members": [ - { - "constant": false, - "id": 43, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 44, - "src": "150:32:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 42, - "keyType": { - "id": 40, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "159:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "150:25:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 41, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "170:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 131, - "src": "128:61:1", - "visibility": "public" - }, - { - "body": { - "id": 75, - "nodeType": "Block", - "src": "317:123:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 56, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 52, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "335:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 54, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "354:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 53, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "346:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 55, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "346:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "335:21:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 51, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "327:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:30:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 58, - "nodeType": "ExpressionStatement", - "src": "327:30:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 64, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "375:19:1", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 61, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46, - "src": "380:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 62, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "386:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "376:3:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$44_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 63, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "376:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 59, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "367:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 65, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "367:28:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 66, - "nodeType": "ExpressionStatement", - "src": "367:28:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 73, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 67, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46, - "src": "406:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 70, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 43, - "src": "406:11:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 71, - "indexExpression": { - "argumentTypes": null, - "id": 69, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "418:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "406:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "429:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "406:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 74, - "nodeType": "ExpressionStatement", - "src": "406:27:1" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 76, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 49, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 46, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 76, - "src": "272:17:1", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 45, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 44, - "src": "272:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 48, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 76, - "src": "291:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 47, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "291:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "271:36:1" - }, - "returnParameters": { - "id": 50, - "nodeType": "ParameterList", - "parameters": [], - "src": "317:0:1" - }, - "scope": 131, - "src": "259:181:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 106, - "nodeType": "Block", - "src": "575:123:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 88, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 84, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 80, - "src": "593:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 86, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "612:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 85, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "604:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 87, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "604:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "593:21:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 83, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "585:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 89, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "585:30:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 90, - "nodeType": "ExpressionStatement", - "src": "585:30:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 93, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 78, - "src": "637:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 94, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 80, - "src": "643:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 92, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "633:3:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$44_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 95, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "633:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 91, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "625:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 96, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "625:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 97, - "nodeType": "ExpressionStatement", - "src": "625:27:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 98, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 78, - "src": "663:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 101, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 43, - "src": "663:11:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 102, - "indexExpression": { - "argumentTypes": null, - "id": 100, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 80, - "src": "675:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "663:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "686:5:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "663:28:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 105, - "nodeType": "ExpressionStatement", - "src": "663:28:1" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 107, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 81, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 78, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 107, - "src": "530:17:1", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 77, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 44, - "src": "530:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 80, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 107, - "src": "549:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 79, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:36:1" - }, - "returnParameters": { - "id": 82, - "nodeType": "ParameterList", - "parameters": [], - "src": "575:0:1" - }, - "scope": 131, - "src": "514:184:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 129, - "nodeType": "Block", - "src": "864:84:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 117, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 111, - "src": "882:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 119, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "901:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 118, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "893:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "893:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "882:21:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 116, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "874:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "874:30:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 123, - "nodeType": "ExpressionStatement", - "src": "874:30:1" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 124, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 109, - "src": "921:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 125, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 43, - "src": "921:11:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 127, - "indexExpression": { - "argumentTypes": null, - "id": 126, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 111, - "src": "933:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "921:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 115, - "id": 128, - "nodeType": "Return", - "src": "914:27:1" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 130, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 109, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 130, - "src": "799:17:1", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 108, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 44, - "src": "799:4:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 111, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 130, - "src": "818:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 110, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "798:36:1" - }, - "returnParameters": { - "id": 115, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 114, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 130, - "src": "858:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 113, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "858:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "857:6:1" - }, - "scope": 131, - "src": "786:162:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 132, - "src": "108:842:1" - } - ], - "src": "0:951:1" - }, - "id": 1 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol", - "exportedSymbols": { - "PauserRole": [ - 234 - ] - }, - "id": 235, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 133, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:2" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "../Roles.sol", - "id": 134, - "nodeType": "ImportDirective", - "scope": 235, - "sourceUnit": 132, - "src": "25:22:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 234, - "linearizedBaseContracts": [ - 234 - ], - "name": "PauserRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 137, - "libraryName": { - "contractScope": null, - "id": 135, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 131, - "src": "81:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$131", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "75:27:2", - "typeName": { - "contractScope": null, - "id": 136, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 44, - "src": "91:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "anonymous": false, - "documentation": null, - "id": 141, - "name": "PauserAdded", - "nodeType": "EventDefinition", - "parameters": { - "id": 140, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 139, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 141, - "src": "126:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 138, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "126:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "125:25:2" - }, - "src": "108:43:2" - }, - { - "anonymous": false, - "documentation": null, - "id": 145, - "name": "PauserRemoved", - "nodeType": "EventDefinition", - "parameters": { - "id": 144, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 143, - "indexed": true, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 145, - "src": "176:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 142, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "176:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "175:25:2" - }, - "src": "156:45:2" - }, - { - "constant": false, - "id": 147, - "name": "_pausers", - "nodeType": "VariableDeclaration", - "scope": 234, - "src": "207:27:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 146, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 44, - "src": "207:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 155, - "nodeType": "Block", - "src": "265:39:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 151, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "286:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "286:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 150, - "name": "_addPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 217, - "src": "275:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "275:22:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 154, - "nodeType": "ExpressionStatement", - "src": "275:22:2" - } - ] - }, - "documentation": null, - "id": 156, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 148, - "nodeType": "ParameterList", - "parameters": [], - "src": "253:2:2" - }, - "returnParameters": { - "id": 149, - "nodeType": "ParameterList", - "parameters": [], - "src": "265:0:2" - }, - "scope": 234, - "src": "241:63:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 166, - "nodeType": "Block", - "src": "332:57:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 160, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "359:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "359:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 159, - "name": "isPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 180, - "src": "350:8:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "350:20:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 158, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "342:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "342:29:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 164, - "nodeType": "ExpressionStatement", - "src": "342:29:2" - }, - { - "id": 165, - "nodeType": "PlaceholderStatement", - "src": "381:1:2" - } - ] - }, - "documentation": null, - "id": 167, - "name": "onlyPauser", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 157, - "nodeType": "ParameterList", - "parameters": [], - "src": "329:2:2" - }, - "src": "310:79:2", - "visibility": "internal" - }, - { - "body": { - "id": 179, - "nodeType": "Block", - "src": "457:45:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 176, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 169, - "src": "487:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 174, - "name": "_pausers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 147, - "src": "474:8:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 175, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 130, - "src": "474:12:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$44_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$44_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "474:21:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 173, - "id": 178, - "nodeType": "Return", - "src": "467:28:2" - } - ] - }, - "documentation": null, - "id": 180, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isPauser", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 170, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 169, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 180, - "src": "413:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "413:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "412:17:2" - }, - "returnParameters": { - "id": 173, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 172, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 180, - "src": "451:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 171, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "451:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "450:6:2" - }, - "scope": 234, - "src": "395:107:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 191, - "nodeType": "Block", - "src": "562:36:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 188, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 182, - "src": "583:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 187, - "name": "_addPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 217, - "src": "572:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "572:19:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 190, - "nodeType": "ExpressionStatement", - "src": "572:19:2" - } - ] - }, - "documentation": null, - "id": 192, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 185, - "modifierName": { - "argumentTypes": null, - "id": 184, - "name": "onlyPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 167, - "src": "551:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "551:10:2" - } - ], - "name": "addPauser", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 183, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 182, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 192, - "src": "527:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 181, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "527:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "526:17:2" - }, - "returnParameters": { - "id": 186, - "nodeType": "ParameterList", - "parameters": [], - "src": "562:0:2" - }, - "scope": 234, - "src": "508:90:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 200, - "nodeType": "Block", - "src": "637:42:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 196, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "661:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "661:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 195, - "name": "_removePauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 233, - "src": "647:13:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "647:25:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 199, - "nodeType": "ExpressionStatement", - "src": "647:25:2" - } - ] - }, - "documentation": null, - "id": 201, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renouncePauser", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 193, - "nodeType": "ParameterList", - "parameters": [], - "src": "627:2:2" - }, - "returnParameters": { - "id": 194, - "nodeType": "ParameterList", - "parameters": [], - "src": "637:0:2" - }, - "scope": 234, - "src": "604:75:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 216, - "nodeType": "Block", - "src": "731:73:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 209, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 203, - "src": "754:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 206, - "name": "_pausers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 147, - "src": "741:8:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 208, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 76, - "src": "741:12:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$44_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$44_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "741:21:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 211, - "nodeType": "ExpressionStatement", - "src": "741:21:2" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 213, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 203, - "src": "789:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 212, - "name": "PauserAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 141, - "src": "777:11:2", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "777:20:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 215, - "nodeType": "EmitStatement", - "src": "772:25:2" - } - ] - }, - "documentation": null, - "id": 217, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addPauser", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 203, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 217, - "src": "705:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 202, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "705:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "704:17:2" - }, - "returnParameters": { - "id": 205, - "nodeType": "ParameterList", - "parameters": [], - "src": "731:0:2" - }, - "scope": 234, - "src": "685:119:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 232, - "nodeType": "Block", - "src": "859:78:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 225, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 219, - "src": "885:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 222, - "name": "_pausers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 147, - "src": "869:8:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$44_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 224, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 107, - "src": "869:15:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$44_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$44_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "869:24:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 227, - "nodeType": "ExpressionStatement", - "src": "869:24:2" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 229, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 219, - "src": "922:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 228, - "name": "PauserRemoved", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 145, - "src": "908:13:2", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "908:22:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 231, - "nodeType": "EmitStatement", - "src": "903:27:2" - } - ] - }, - "documentation": null, - "id": 233, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removePauser", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 220, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 219, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 233, - "src": "833:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 218, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "833:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "832:17:2" - }, - "returnParameters": { - "id": 221, - "nodeType": "ParameterList", - "parameters": [], - "src": "859:0:2" - }, - "scope": 234, - "src": "810:127:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 235, - "src": "49:890:2" - } - ], - "src": "0:940:2" - }, - "id": 2 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol", - "exportedSymbols": { - "Pausable": [ - 317 - ] - }, - "id": 318, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 236, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:3" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/roles/PauserRole.sol", - "file": "../access/roles/PauserRole.sol", - "id": 237, - "nodeType": "ImportDirective", - "scope": 318, - "sourceUnit": 235, - "src": "25:40:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 238, - "name": "PauserRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 234, - "src": "201:10:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PauserRole_$234", - "typeString": "contract PauserRole" - } - }, - "id": 239, - "nodeType": "InheritanceSpecifier", - "src": "201:10:3" - } - ], - "contractDependencies": [ - 234 - ], - "contractKind": "contract", - "documentation": "@title Pausable\n@dev Base contract which allows children to implement an emergency stop mechanism.", - "fullyImplemented": true, - "id": 317, - "linearizedBaseContracts": [ - 317, - 234 - ], - "name": "Pausable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": null, - "id": 243, - "name": "Paused", - "nodeType": "EventDefinition", - "parameters": { - "id": 242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 241, - "indexed": false, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 243, - "src": "231:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "231:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "230:17:3" - }, - "src": "218:30:3" - }, - { - "anonymous": false, - "documentation": null, - "id": 247, - "name": "Unpaused", - "nodeType": "EventDefinition", - "parameters": { - "id": 246, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 245, - "indexed": false, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 247, - "src": "268:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 244, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "268:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "267:17:3" - }, - "src": "253:32:3" - }, - { - "constant": false, - "id": 249, - "name": "_paused", - "nodeType": "VariableDeclaration", - "scope": 317, - "src": "291:20:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 248, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "291:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 256, - "nodeType": "Block", - "src": "342:32:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 252, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "352:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 253, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "362:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "352:15:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 255, - "nodeType": "ExpressionStatement", - "src": "352:15:3" - } - ] - }, - "documentation": null, - "id": 257, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 250, - "nodeType": "ParameterList", - "parameters": [], - "src": "330:2:3" - }, - "returnParameters": { - "id": 251, - "nodeType": "ParameterList", - "parameters": [], - "src": "342:0:3" - }, - "scope": 317, - "src": "318:56:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 264, - "nodeType": "Block", - "src": "505:31:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 262, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "522:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 261, - "id": 263, - "nodeType": "Return", - "src": "515:14:3" - } - ] - }, - "documentation": "@return true if the contract is paused, false otherwise.", - "id": 265, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "paused", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 258, - "nodeType": "ParameterList", - "parameters": [], - "src": "475:2:3" - }, - "returnParameters": { - "id": 261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 260, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 265, - "src": "499:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 259, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "499:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "498:6:3" - }, - "scope": 317, - "src": "460:76:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 273, - "nodeType": "Block", - "src": "670:45:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "688:8:3", - "subExpression": { - "argumentTypes": null, - "id": 268, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "689:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 267, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "680:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "680:17:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 271, - "nodeType": "ExpressionStatement", - "src": "680:17:3" - }, - { - "id": 272, - "nodeType": "PlaceholderStatement", - "src": "707:1:3" - } - ] - }, - "documentation": "@dev Modifier to make a function callable only when the contract is not paused.", - "id": 274, - "name": "whenNotPaused", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 266, - "nodeType": "ParameterList", - "parameters": [], - "src": "667:2:3" - }, - "src": "645:70:3", - "visibility": "internal" - }, - { - "body": { - "id": 281, - "nodeType": "Block", - "src": "842:44:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 277, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "860:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 276, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "852:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "852:16:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 279, - "nodeType": "ExpressionStatement", - "src": "852:16:3" - }, - { - "id": 280, - "nodeType": "PlaceholderStatement", - "src": "878:1:3" - } - ] - }, - "documentation": "@dev Modifier to make a function callable only when the contract is paused.", - "id": 282, - "name": "whenPaused", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 275, - "nodeType": "ParameterList", - "parameters": [], - "src": "839:2:3" - }, - "src": "820:66:3", - "visibility": "internal" - }, - { - "body": { - "id": 298, - "nodeType": "Block", - "src": "1022:64:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 289, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "1032:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 290, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1042:4:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "1032:14:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 292, - "nodeType": "ExpressionStatement", - "src": "1032:14:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 294, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "1068:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1068:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 293, - "name": "Paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 243, - "src": "1061:6:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1061:18:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 297, - "nodeType": "EmitStatement", - "src": "1056:23:3" - } - ] - }, - "documentation": "@dev called by the owner to pause, triggers stopped state", - "id": 299, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 285, - "modifierName": { - "argumentTypes": null, - "id": 284, - "name": "onlyPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 167, - "src": "997:10:3", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "997:10:3" - }, - { - "arguments": null, - "id": 287, - "modifierName": { - "argumentTypes": null, - "id": 286, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "1008:13:3", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1008:13:3" - } - ], - "name": "pause", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 283, - "nodeType": "ParameterList", - "parameters": [], - "src": "987:2:3" - }, - "returnParameters": { - "id": 288, - "nodeType": "ParameterList", - "parameters": [], - "src": "1022:0:3" - }, - "scope": 317, - "src": "973:113:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 315, - "nodeType": "Block", - "src": "1224:67:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 308, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 306, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 249, - "src": "1234:7:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 307, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1244:5:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "1234:15:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 309, - "nodeType": "ExpressionStatement", - "src": "1234:15:3" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 311, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "1273:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1273:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 310, - "name": "Unpaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 247, - "src": "1264:8:3", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1264:20:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 314, - "nodeType": "EmitStatement", - "src": "1259:25:3" - } - ] - }, - "documentation": "@dev called by the owner to unpause, returns to normal state", - "id": 316, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 302, - "modifierName": { - "argumentTypes": null, - "id": 301, - "name": "onlyPauser", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 167, - "src": "1202:10:3", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1202:10:3" - }, - { - "arguments": null, - "id": 304, - "modifierName": { - "argumentTypes": null, - "id": 303, - "name": "whenPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 282, - "src": "1213:10:3", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1213:10:3" - } - ], - "name": "unpause", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 300, - "nodeType": "ParameterList", - "parameters": [], - "src": "1192:2:3" - }, - "returnParameters": { - "id": 305, - "nodeType": "ParameterList", - "parameters": [], - "src": "1224:0:3" - }, - "scope": 317, - "src": "1176:115:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 318, - "src": "180:1113:3" - } - ], - "src": "0:1294:3" - }, - "id": 3 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 445 - ] - }, - "id": 446, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 319, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Unsigned math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 445, - "linearizedBaseContracts": [ - 445 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 351, - "nodeType": "Block", - "src": "296:354:4", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 328, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 321, - "src": "527:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 329, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "532:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "527:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 334, - "nodeType": "IfStatement", - "src": "523:45:4", - "trueBody": { - "id": 333, - "nodeType": "Block", - "src": "535:33:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 331, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "556:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 327, - "id": 332, - "nodeType": "Return", - "src": "549:8:4" - } - ] - } - }, - { - "assignments": [ - 336 - ], - "declarations": [ - { - "constant": false, - "id": 336, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 351, - "src": "578:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 335, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "578:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 340, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 337, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 321, - "src": "590:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 338, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "594:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "590:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "578:17:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 342, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 336, - "src": "613:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 343, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 321, - "src": "617:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 345, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "622:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:10:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 341, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "605:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "605:19:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 348, - "nodeType": "ExpressionStatement", - "src": "605:19:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 349, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 336, - "src": "642:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 327, - "id": 350, - "nodeType": "Return", - "src": "635:8:4" - } - ] - }, - "documentation": "@dev Multiplies two unsigned integers, reverts on overflow.", - "id": 352, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 324, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 321, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 352, - "src": "242:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 320, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "242:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 323, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 352, - "src": "253:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 322, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "253:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "241:22:4" - }, - "returnParameters": { - "id": 327, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 326, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 352, - "src": "287:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 325, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "287:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "286:9:4" - }, - "scope": 445, - "src": "229:421:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 375, - "nodeType": "Block", - "src": "845:229:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 362, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 356, - "src": "929:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 363, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "933:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "929:5:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 361, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "921:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 365, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "921:14:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 366, - "nodeType": "ExpressionStatement", - "src": "921:14:4" - }, - { - "assignments": [ - 368 - ], - "declarations": [ - { - "constant": false, - "id": 368, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "945:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 367, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "945:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 372, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 369, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 354, - "src": "957:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 370, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 356, - "src": "961:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "957:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "945:17:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 373, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 368, - "src": "1066:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 360, - "id": 374, - "nodeType": "Return", - "src": "1059:8:4" - } - ] - }, - "documentation": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.", - "id": 376, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 357, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 354, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 376, - "src": "791:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 353, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "791:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 356, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 376, - "src": "802:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 355, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "802:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "790:22:4" - }, - "returnParameters": { - "id": 360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 359, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 376, - "src": "836:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 358, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "835:9:4" - }, - "scope": 445, - "src": "778:296:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 399, - "nodeType": "Block", - "src": "1272:78:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 386, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 380, - "src": "1290:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 387, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 378, - "src": "1295:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1290:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 385, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "1282:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 389, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1282:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 390, - "nodeType": "ExpressionStatement", - "src": "1282:15:4" - }, - { - "assignments": [ - 392 - ], - "declarations": [ - { - "constant": false, - "id": 392, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 399, - "src": "1307:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 391, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1307:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 396, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 393, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 378, - "src": "1319:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 394, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 380, - "src": "1323:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1319:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1307:17:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 397, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 392, - "src": "1342:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 384, - "id": 398, - "nodeType": "Return", - "src": "1335:8:4" - } - ] - }, - "documentation": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 400, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 381, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 378, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 400, - "src": "1218:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 377, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1218:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 380, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 400, - "src": "1229:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 379, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1229:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1217:22:4" - }, - "returnParameters": { - "id": 384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 383, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 400, - "src": "1263:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 382, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1263:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1262:9:4" - }, - "scope": 445, - "src": "1205:145:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 423, - "nodeType": "Block", - "src": "1498:78:4", - "statements": [ - { - "assignments": [ - 410 - ], - "declarations": [ - { - "constant": false, - "id": 410, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1508:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 409, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1508:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 414, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 411, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 402, - "src": "1520:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 412, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 404, - "src": "1524:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1520:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1508:17:4" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 416, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "1543:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 417, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 402, - "src": "1548:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1543:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 415, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "1535:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1535:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 420, - "nodeType": "ExpressionStatement", - "src": "1535:15:4" - }, - { - "expression": { - "argumentTypes": null, - "id": 421, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "1568:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 408, - "id": 422, - "nodeType": "Return", - "src": "1561:8:4" - } - ] - }, - "documentation": "@dev Adds two unsigned integers, reverts on overflow.", - "id": 424, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 405, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 402, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 424, - "src": "1444:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 401, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1444:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 404, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 424, - "src": "1455:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 403, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1455:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1443:22:4" - }, - "returnParameters": { - "id": 408, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 407, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 424, - "src": "1489:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 406, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1489:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1488:9:4" - }, - "scope": 445, - "src": "1431:145:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 443, - "nodeType": "Block", - "src": "1795:54:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 434, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 428, - "src": "1813:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1818:1:4", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1813:6:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 433, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "1805:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1805:15:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 438, - "nodeType": "ExpressionStatement", - "src": "1805:15:4" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 439, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 426, - "src": "1837:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 440, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 428, - "src": "1841:1:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1837:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 432, - "id": 442, - "nodeType": "Return", - "src": "1830:12:4" - } - ] - }, - "documentation": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 444, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 426, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 444, - "src": "1741:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 425, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 428, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 444, - "src": "1752:9:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 427, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1752:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1740:22:4" - }, - "returnParameters": { - "id": 432, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 431, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 444, - "src": "1786:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 430, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1786:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1785:9:4" - }, - "scope": 445, - "src": "1728:121:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 446, - "src": "125:1726:4" - } - ], - "src": "0:1852:4" - }, - "id": 4 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "exportedSymbols": { - "ERC20": [ - 877 - ] - }, - "id": 878, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 447, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:5" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 448, - "nodeType": "ImportDirective", - "scope": 878, - "sourceUnit": 1107, - "src": "25:22:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 449, - "nodeType": "ImportDirective", - "scope": 878, - "sourceUnit": 446, - "src": "48:33:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 450, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1106, - "src": "667:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1106", - "typeString": "contract IERC20" - } - }, - "id": 451, - "nodeType": "InheritanceSpecifier", - "src": "667:6:5" - } - ], - "contractDependencies": [ - 1106 - ], - "contractKind": "contract", - "documentation": "@title Standard ERC20 token\n * @dev Implementation of the basic standard token.\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\nOriginally based on code by FirstBlood:\nhttps://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for\nall accounts just by listening to said events. Note that this isn't required by the specification, and other\ncompliant implementations may not do it.", - "fullyImplemented": true, - "id": 877, - "linearizedBaseContracts": [ - 877, - 1106 - ], - "name": "ERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 454, - "libraryName": { - "contractScope": null, - "id": 452, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "686:8:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$445", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "680:27:5", - "typeName": { - "id": 453, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "699:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "id": 458, - "name": "_balances", - "nodeType": "VariableDeclaration", - "scope": 877, - "src": "713:46:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 457, - "keyType": { - "id": 455, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "722:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "713:28:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 456, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "733:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 464, - "name": "_allowed", - "nodeType": "VariableDeclaration", - "scope": 877, - "src": "766:66:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 463, - "keyType": { - "id": 459, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "775:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "766:49:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 462, - "keyType": { - "id": 460, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "795:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "786:28:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 461, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "806:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 466, - "name": "_totalSupply", - "nodeType": "VariableDeclaration", - "scope": 877, - "src": "839:28:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 465, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "839:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 473, - "nodeType": "Block", - "src": "989:36:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 471, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "1006:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 470, - "id": 472, - "nodeType": "Return", - "src": "999:19:5" - } - ] - }, - "documentation": "@dev Total number of tokens in existence", - "id": 474, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 467, - "nodeType": "ParameterList", - "parameters": [], - "src": "956:2:5" - }, - "returnParameters": { - "id": 470, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 469, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 474, - "src": "980:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 468, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "980:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "979:9:5" - }, - "scope": 877, - "src": "936:89:5", - "stateMutability": "view", - "superFunction": 1073, - "visibility": "public" - }, - { - "body": { - "id": 485, - "nodeType": "Block", - "src": "1298:40:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 481, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "1315:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 483, - "indexExpression": { - "argumentTypes": null, - "id": 482, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 476, - "src": "1325:5:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1315:16:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 480, - "id": 484, - "nodeType": "Return", - "src": "1308:23:5" - } - ] - }, - "documentation": "@dev Gets the balance of the specified address.\n@param owner The address to query the balance of.\n@return An uint256 representing the amount owned by the passed address.", - "id": 486, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 477, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 476, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 486, - "src": "1253:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 475, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1253:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1252:15:5" - }, - "returnParameters": { - "id": 480, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 479, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 486, - "src": "1289:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 478, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1289:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1288:9:5" - }, - "scope": 877, - "src": "1234:104:5", - "stateMutability": "view", - "superFunction": 1080, - "visibility": "public" - }, - { - "body": { - "id": 501, - "nodeType": "Block", - "src": "1750:48:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 495, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "1767:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 497, - "indexExpression": { - "argumentTypes": null, - "id": 496, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 488, - "src": "1776:5:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1767:15:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 499, - "indexExpression": { - "argumentTypes": null, - "id": 498, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 490, - "src": "1783:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1767:24:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 494, - "id": 500, - "nodeType": "Return", - "src": "1760:31:5" - } - ] - }, - "documentation": "@dev Function to check the amount of tokens that an owner allowed to a spender.\n@param owner address The address which owns the funds.\n@param spender address The address which will spend the funds.\n@return A uint256 specifying the amount of tokens still available for the spender.", - "id": 502, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 491, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 488, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "1688:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 487, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1688:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 490, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "1703:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 489, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1703:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1687:32:5" - }, - "returnParameters": { - "id": 494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 493, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "1741:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 492, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1740:9:5" - }, - "scope": 877, - "src": "1669:129:5", - "stateMutability": "view", - "superFunction": 1089, - "visibility": "public" - }, - { - "body": { - "id": 520, - "nodeType": "Block", - "src": "2029:70:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 512, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "2049:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2049:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 514, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 504, - "src": "2061:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 515, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 506, - "src": "2065:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 511, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "2039:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2039:32:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 517, - "nodeType": "ExpressionStatement", - "src": "2039:32:5" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2088:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 510, - "id": 519, - "nodeType": "Return", - "src": "2081:11:5" - } - ] - }, - "documentation": "@dev Transfer token for a specified address\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 521, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 504, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 521, - "src": "1980:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1980:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 506, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 521, - "src": "1992:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 505, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1992:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1979:27:5" - }, - "returnParameters": { - "id": 510, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 509, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 521, - "src": "2023:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 508, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2023:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2022:6:5" - }, - "scope": 877, - "src": "1962:137:5", - "stateMutability": "nonpayable", - "superFunction": 1048, - "visibility": "public" - }, - { - "body": { - "id": 556, - "nodeType": "Block", - "src": "2806:167:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 531, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "2824:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 533, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2843:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 532, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2835:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 534, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2835:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2824:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 530, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "2816:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2816:30:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 537, - "nodeType": "ExpressionStatement", - "src": "2816:30:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 538, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "2857:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 542, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 539, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "2866:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2866:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2857:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 543, - "indexExpression": { - "argumentTypes": null, - "id": 541, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "2878:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2857:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 544, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 525, - "src": "2889:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2857:37:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 546, - "nodeType": "ExpressionStatement", - "src": "2857:37:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 548, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "2918:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2918:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 550, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "2930:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 551, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 525, - "src": "2939:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 547, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "2909:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2909:36:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 553, - "nodeType": "EmitStatement", - "src": "2904:41:5" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 554, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2962:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 529, - "id": 555, - "nodeType": "Return", - "src": "2955:11:5" - } - ] - }, - "documentation": "@dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\nBeware that changing an allowance with this method brings the risk that someone may use both the old\nand the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\nrace condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n@param spender The address which will spend the funds.\n@param value The amount of tokens to be spent.", - "id": 557, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 526, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 523, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 557, - "src": "2752:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 522, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2752:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 525, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 557, - "src": "2769:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 524, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2769:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2751:32:5" - }, - "returnParameters": { - "id": 529, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 528, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 557, - "src": "2800:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 527, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2800:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2799:6:5" - }, - "scope": 877, - "src": "2735:238:5", - "stateMutability": "nonpayable", - "superFunction": 1057, - "visibility": "public" - }, - { - "body": { - "id": 605, - "nodeType": "Block", - "src": "3521:209:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 568, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "3531:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 572, - "indexExpression": { - "argumentTypes": null, - "id": 569, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 559, - "src": "3540:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3531:14:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 573, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 570, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "3546:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3546:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3531:26:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 581, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 563, - "src": "3591:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 574, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "3560:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 576, - "indexExpression": { - "argumentTypes": null, - "id": 575, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 559, - "src": "3569:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3560:14:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 579, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 577, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "3575:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3575:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3560:26:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "3560:30:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3560:37:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3531:66:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 584, - "nodeType": "ExpressionStatement", - "src": "3531:66:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 586, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 559, - "src": "3617:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 587, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 561, - "src": "3623:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 588, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 563, - "src": "3627:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 585, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "3607:9:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3607:26:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 590, - "nodeType": "ExpressionStatement", - "src": "3607:26:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 592, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 559, - "src": "3657:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 593, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "3663:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3663:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 595, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "3675:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 597, - "indexExpression": { - "argumentTypes": null, - "id": 596, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 559, - "src": "3684:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3675:14:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 600, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 598, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "3690:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3690:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3675:26:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 591, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "3648:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 601, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3648:54:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 602, - "nodeType": "EmitStatement", - "src": "3643:59:5" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3719:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 567, - "id": 604, - "nodeType": "Return", - "src": "3712:11:5" - } - ] - }, - "documentation": "@dev Transfer tokens from one address to another.\nNote that while this function emits an Approval event, this is not required as per the specification,\nand other compliant implementations may not emit the event.\n@param from address The address which you want to send tokens from\n@param to address The address which you want to transfer to\n@param value uint256 the amount of tokens to be transferred", - "id": 606, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 564, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 559, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 606, - "src": "3458:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 558, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3458:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 561, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 606, - "src": "3472:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 560, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3472:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 563, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 606, - "src": "3484:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 562, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3484:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3457:41:5" - }, - "returnParameters": { - "id": 567, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 566, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 606, - "src": "3515:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 565, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3515:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3514:6:5" - }, - "scope": 877, - "src": "3436:294:5", - "stateMutability": "nonpayable", - "superFunction": 1068, - "visibility": "public" - }, - { - "body": { - "id": 654, - "nodeType": "Block", - "src": "4319:231:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 616, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 608, - "src": "4337:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4356:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 617, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4348:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4348:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "4337:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 615, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "4329:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4329:30:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 622, - "nodeType": "ExpressionStatement", - "src": "4329:30:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 638, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 623, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "4370:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 627, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 624, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "4379:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4379:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4370:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 628, - "indexExpression": { - "argumentTypes": null, - "id": 626, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 608, - "src": "4391:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4370:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 636, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 610, - "src": "4436:10:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 629, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "4402:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 632, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 630, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "4411:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4411:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4402:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 634, - "indexExpression": { - "argumentTypes": null, - "id": 633, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 608, - "src": "4423:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4402:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 424, - "src": "4402:33:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4402:45:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4370:77:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 639, - "nodeType": "ExpressionStatement", - "src": "4370:77:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 641, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "4471:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4471:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 643, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 608, - "src": "4483:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 644, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "4492:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 647, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 645, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "4501:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4501:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4492:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 649, - "indexExpression": { - "argumentTypes": null, - "id": 648, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 608, - "src": "4513:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4492:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 640, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "4462:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4462:60:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 651, - "nodeType": "EmitStatement", - "src": "4457:65:5" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 652, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4539:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 614, - "id": 653, - "nodeType": "Return", - "src": "4532:11:5" - } - ] - }, - "documentation": "@dev Increase the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To increment\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\nEmits an Approval event.\n@param spender The address which will spend the funds.\n@param addedValue The amount of tokens to increase the allowance by.", - "id": 655, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "increaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 611, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 608, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 655, - "src": "4260:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 607, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4260:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 610, - "name": "addedValue", - "nodeType": "VariableDeclaration", - "scope": 655, - "src": "4277:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 609, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4277:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4259:37:5" - }, - "returnParameters": { - "id": 614, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 613, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 655, - "src": "4313:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 612, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4313:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "4312:6:5" - }, - "scope": 877, - "src": "4233:317:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 703, - "nodeType": "Block", - "src": "5149:236:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 665, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "5167:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 667, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5186:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5178:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5178:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "5167:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 664, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "5159:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5159:30:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 671, - "nodeType": "ExpressionStatement", - "src": "5159:30:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 672, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "5200:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 676, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 673, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "5209:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5209:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5200:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 677, - "indexExpression": { - "argumentTypes": null, - "id": 675, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "5221:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5200:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 685, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 659, - "src": "5266:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 678, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "5232:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 681, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 679, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "5241:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5241:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5232:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 683, - "indexExpression": { - "argumentTypes": null, - "id": 682, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "5253:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5232:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 684, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "5232:33:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5232:50:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5200:82:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 688, - "nodeType": "ExpressionStatement", - "src": "5200:82:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 690, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "5306:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5306:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 692, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "5318:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 693, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "5327:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 696, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 694, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "5336:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5336:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5327:20:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 698, - "indexExpression": { - "argumentTypes": null, - "id": 697, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 657, - "src": "5348:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5327:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 689, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "5297:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5297:60:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 700, - "nodeType": "EmitStatement", - "src": "5292:65:5" - }, - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 701, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5374:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 663, - "id": 702, - "nodeType": "Return", - "src": "5367:11:5" - } - ] - }, - "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To decrement\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\nEmits an Approval event.\n@param spender The address which will spend the funds.\n@param subtractedValue The amount of tokens to decrease the allowance by.", - "id": 704, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 660, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 657, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "5085:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 656, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5085:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 659, - "name": "subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "5102:23:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 658, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5102:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5084:42:5" - }, - "returnParameters": { - "id": 663, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 662, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "5143:4:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 661, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5143:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5142:6:5" - }, - "scope": 877, - "src": "5058:327:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 749, - "nodeType": "Block", - "src": "5668:187:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 714, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "5686:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 716, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5700:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 715, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5692:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5692:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "5686:16:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 713, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "5678:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5678:25:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 720, - "nodeType": "ExpressionStatement", - "src": "5678:25:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 721, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "5714:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 723, - "indexExpression": { - "argumentTypes": null, - "id": 722, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 706, - "src": "5724:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5714:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 728, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "5752:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 724, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "5732:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 726, - "indexExpression": { - "argumentTypes": null, - "id": 725, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 706, - "src": "5742:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5732:15:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "5732:19:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 729, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5732:26:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5714:44:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 731, - "nodeType": "ExpressionStatement", - "src": "5714:44:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 732, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "5768:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 734, - "indexExpression": { - "argumentTypes": null, - "id": 733, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "5778:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5768:13:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 739, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "5802:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 735, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "5784:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 737, - "indexExpression": { - "argumentTypes": null, - "id": 736, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "5794:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5784:13:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 424, - "src": "5784:17:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5784:24:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5768:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 742, - "nodeType": "ExpressionStatement", - "src": "5768:40:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 744, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 706, - "src": "5832:4:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 745, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "5838:2:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 746, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 710, - "src": "5842:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 743, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1097, - "src": "5823:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5823:25:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 748, - "nodeType": "EmitStatement", - "src": "5818:30:5" - } - ] - }, - "documentation": "@dev Transfer token for a specified addresses\n@param from The address to transfer from.\n@param to The address to transfer to.\n@param value The amount to be transferred.", - "id": 750, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 706, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 750, - "src": "5618:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 705, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5618:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 708, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 750, - "src": "5632:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 707, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5632:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 710, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 750, - "src": "5644:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 709, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5644:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5617:41:5" - }, - "returnParameters": { - "id": 712, - "nodeType": "ParameterList", - "parameters": [], - "src": "5668:0:5" - }, - "scope": 877, - "src": "5599:256:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 791, - "nodeType": "Block", - "src": "6254:207:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 758, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 752, - "src": "6272:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 760, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6291:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 759, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6283:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 761, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6283:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "6272:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 757, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "6264:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6264:30:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 764, - "nodeType": "ExpressionStatement", - "src": "6264:30:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 765, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "6305:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 768, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "6337:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 766, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "6320:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 424, - "src": "6320:16:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6320:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6305:38:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 771, - "nodeType": "ExpressionStatement", - "src": "6305:38:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 781, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 772, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "6353:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 774, - "indexExpression": { - "argumentTypes": null, - "id": 773, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 752, - "src": "6363:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6353:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 779, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "6397:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 775, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "6374:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 777, - "indexExpression": { - "argumentTypes": null, - "id": 776, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 752, - "src": "6384:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6374:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 424, - "src": "6374:22:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6374:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6353:50:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 782, - "nodeType": "ExpressionStatement", - "src": "6353:50:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 785, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6435:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 784, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6427:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 786, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6427:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 787, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 752, - "src": "6439:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 788, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "6448:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 783, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1097, - "src": "6418:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6418:36:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 790, - "nodeType": "EmitStatement", - "src": "6413:41:5" - } - ] - }, - "documentation": "@dev Internal function that mints an amount of the token and assigns it to\nan account. This encapsulates the modification of balances such that the\nproper events are emitted.\n@param account The account that will receive the created tokens.\n@param value The amount that will be created.", - "id": 792, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mint", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 755, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 752, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 792, - "src": "6213:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 751, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6213:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 754, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 792, - "src": "6230:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 753, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6230:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6212:32:5" - }, - "returnParameters": { - "id": 756, - "nodeType": "ParameterList", - "parameters": [], - "src": "6254:0:5" - }, - "scope": 877, - "src": "6198:263:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 833, - "nodeType": "Block", - "src": "6743:207:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 800, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 794, - "src": "6761:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6780:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 801, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6772:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 803, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6772:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "6761:21:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 799, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1124, - 1125 - ], - "referencedDeclaration": 1124, - "src": "6753:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6753:30:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 806, - "nodeType": "ExpressionStatement", - "src": "6753:30:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 812, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 807, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "6794:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 810, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "6826:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 808, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 466, - "src": "6809:12:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "6809:16:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 811, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6809:23:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6794:38:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 813, - "nodeType": "ExpressionStatement", - "src": "6794:38:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 814, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "6842:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 816, - "indexExpression": { - "argumentTypes": null, - "id": 815, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 794, - "src": "6852:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6842:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 821, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "6886:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 817, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 458, - "src": "6863:9:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 819, - "indexExpression": { - "argumentTypes": null, - "id": 818, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 794, - "src": "6873:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6863:18:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "6863:22:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6863:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6842:50:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 824, - "nodeType": "ExpressionStatement", - "src": "6842:50:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 826, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 794, - "src": "6916:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 828, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6933:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 827, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6925:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 829, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6925:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "id": 830, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "6937:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 825, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1097, - "src": "6907:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 831, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "6907:36:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 832, - "nodeType": "EmitStatement", - "src": "6902:41:5" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 834, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burn", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 797, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 794, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 834, - "src": "6702:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 793, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6702:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 796, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 834, - "src": "6719:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 795, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6719:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6701:32:5" - }, - "returnParameters": { - "id": 798, - "nodeType": "ParameterList", - "parameters": [], - "src": "6743:0:5" - }, - "scope": 877, - "src": "6687:263:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 875, - "nodeType": "Block", - "src": "7399:195:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 841, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "7409:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 845, - "indexExpression": { - "argumentTypes": null, - "id": 842, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "7418:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7409:17:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 846, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 843, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "7427:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7427:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7409:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 854, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 838, - "src": "7475:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 847, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "7441:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 849, - "indexExpression": { - "argumentTypes": null, - "id": 848, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "7450:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7441:17:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 852, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 850, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "7459:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7459:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7441:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 400, - "src": "7441:33:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7441:40:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7409:72:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 857, - "nodeType": "ExpressionStatement", - "src": "7409:72:5" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 859, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "7497:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 860, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 838, - "src": "7506:5:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 858, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 834, - "src": "7491:5:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7491:21:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 862, - "nodeType": "ExpressionStatement", - "src": "7491:21:5" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 864, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "7536:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 865, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "7545:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7545:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 867, - "name": "_allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 464, - "src": "7557:8:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 869, - "indexExpression": { - "argumentTypes": null, - "id": 868, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "7566:7:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7557:17:5", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 872, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 870, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1121, - "src": "7575:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 871, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7575:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7557:29:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 863, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "7527:8:5", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7527:60:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 874, - "nodeType": "EmitStatement", - "src": "7522:65:5" - } - ] - }, - "documentation": "@dev Internal function that burns an amount of the token of a given\naccount, deducting from the sender's allowance for said account. Uses the\ninternal burn function.\nEmits an Approval event (reflecting the reduced allowance).\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.", - "id": 876, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burnFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 839, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 836, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 876, - "src": "7358:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 835, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7358:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 838, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 876, - "src": "7375:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 837, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7375:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "7357:32:5" - }, - "returnParameters": { - "id": 840, - "nodeType": "ParameterList", - "parameters": [], - "src": "7399:0:5" - }, - "scope": 877, - "src": "7339:255:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 878, - "src": "649:6947:5" - } - ], - "src": "0:7597:5" - }, - "id": 5 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol", - "exportedSymbols": { - "ERC20Detailed": [ - 935 - ] - }, - "id": 936, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 879, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:6" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 880, - "nodeType": "ImportDirective", - "scope": 936, - "sourceUnit": 1107, - "src": "25:22:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 881, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1106, - "src": "308:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1106", - "typeString": "contract IERC20" - } - }, - "id": 882, - "nodeType": "InheritanceSpecifier", - "src": "308:6:6" - } - ], - "contractDependencies": [ - 1106 - ], - "contractKind": "contract", - "documentation": "@title ERC20Detailed token\n@dev The decimals are only for visualization purposes.\nAll the operations are done using the smallest and indivisible token unit,\njust as on Ethereum all the operations are done in wei.", - "fullyImplemented": false, - "id": 935, - "linearizedBaseContracts": [ - 935, - 1106 - ], - "name": "ERC20Detailed", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 884, - "name": "_name", - "nodeType": "VariableDeclaration", - "scope": 935, - "src": "321:20:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 883, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "321:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 886, - "name": "_symbol", - "nodeType": "VariableDeclaration", - "scope": 935, - "src": "347:22:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 885, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "347:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 888, - "name": "_decimals", - "nodeType": "VariableDeclaration", - "scope": 935, - "src": "375:23:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 887, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "375:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 909, - "nodeType": "Block", - "src": "483:85:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 897, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 884, - "src": "493:5:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 898, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 890, - "src": "501:4:6", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "493:12:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 900, - "nodeType": "ExpressionStatement", - "src": "493:12:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 901, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 886, - "src": "515:7:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 902, - "name": "symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 892, - "src": "525:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "515:16:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 904, - "nodeType": "ExpressionStatement", - "src": "515:16:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 905, - "name": "_decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 888, - "src": "541:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 906, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 894, - "src": "553:8:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "541:20:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 908, - "nodeType": "ExpressionStatement", - "src": "541:20:6" - } - ] - }, - "documentation": null, - "id": 910, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 895, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 890, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 910, - "src": "418:18:6", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 889, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "418:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 892, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 910, - "src": "438:20:6", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 891, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "438:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 894, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 910, - "src": "460:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 893, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "460:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "417:58:6" - }, - "returnParameters": { - "id": 896, - "nodeType": "ParameterList", - "parameters": [], - "src": "483:0:6" - }, - "scope": 935, - "src": "405:163:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 917, - "nodeType": "Block", - "src": "680:29:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 915, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 884, - "src": "697:5:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 914, - "id": 916, - "nodeType": "Return", - "src": "690:12:6" - } - ] - }, - "documentation": "@return the name of the token.", - "id": 918, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "name", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 911, - "nodeType": "ParameterList", - "parameters": [], - "src": "641:2:6" - }, - "returnParameters": { - "id": 914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 913, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 918, - "src": "665:13:6", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 912, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "665:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "664:15:6" - }, - "scope": 935, - "src": "628:81:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 925, - "nodeType": "Block", - "src": "825:31:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 923, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 886, - "src": "842:7:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 922, - "id": 924, - "nodeType": "Return", - "src": "835:14:6" - } - ] - }, - "documentation": "@return the symbol of the token.", - "id": 926, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 919, - "nodeType": "ParameterList", - "parameters": [], - "src": "786:2:6" - }, - "returnParameters": { - "id": 922, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 921, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 926, - "src": "810:13:6", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 920, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "810:6:6", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "809:15:6" - }, - "scope": 935, - "src": "771:85:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 933, - "nodeType": "Block", - "src": "978:33:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 931, - "name": "_decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 888, - "src": "995:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 930, - "id": 932, - "nodeType": "Return", - "src": "988:16:6" - } - ] - }, - "documentation": "@return the number of decimals of the token.", - "id": 934, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 927, - "nodeType": "ParameterList", - "parameters": [], - "src": "947:2:6" - }, - "returnParameters": { - "id": 930, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 929, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 934, - "src": "971:5:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 928, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "971:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "970:7:6" - }, - "scope": 935, - "src": "930:81:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 936, - "src": "282:731:6" - } - ], - "src": "0:1014:6" - }, - "id": 6 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol", - "exportedSymbols": { - "ERC20Pausable": [ - 1037 - ] - }, - "id": 1038, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 937, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:7" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", - "file": "./ERC20.sol", - "id": 938, - "nodeType": "ImportDirective", - "scope": 1038, - "sourceUnit": 878, - "src": "25:21:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/lifecycle/Pausable.sol", - "file": "../../lifecycle/Pausable.sol", - "id": 939, - "nodeType": "ImportDirective", - "scope": 1038, - "sourceUnit": 318, - "src": "47:38:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 940, - "name": "ERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 877, - "src": "195:5:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$877", - "typeString": "contract ERC20" - } - }, - "id": 941, - "nodeType": "InheritanceSpecifier", - "src": "195:5:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 942, - "name": "Pausable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 317, - "src": "202:8:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Pausable_$317", - "typeString": "contract Pausable" - } - }, - "id": 943, - "nodeType": "InheritanceSpecifier", - "src": "202:8:7" - } - ], - "contractDependencies": [ - 234, - 317, - 877, - 1106 - ], - "contractKind": "contract", - "documentation": "@title Pausable token\n@dev ERC20 modified with pausable transfers.*", - "fullyImplemented": true, - "id": 1037, - "linearizedBaseContracts": [ - 1037, - 317, - 234, - 877, - 1106 - ], - "name": "ERC20Pausable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 960, - "nodeType": "Block", - "src": "298:49:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 956, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 945, - "src": "330:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 957, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 947, - "src": "334:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 954, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1150, - "src": "315:5:7", - "typeDescriptions": { - "typeIdentifier": "t_super$_ERC20Pausable_$1037", - "typeString": "contract super ERC20Pausable" - } - }, - "id": 955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 521, - "src": "315:14:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "315:25:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 953, - "id": 959, - "nodeType": "Return", - "src": "308:32:7" - } - ] - }, - "documentation": null, - "id": 961, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 950, - "modifierName": { - "argumentTypes": null, - "id": 949, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "269:13:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "269:13:7" - } - ], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 948, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 945, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 961, - "src": "235:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 944, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "235:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 947, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 961, - "src": "247:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 946, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "247:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "234:27:7" - }, - "returnParameters": { - "id": 953, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 952, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 961, - "src": "292:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 951, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "292:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "291:6:7" - }, - "scope": 1037, - "src": "217:130:7", - "stateMutability": "nonpayable", - "superFunction": 521, - "visibility": "public" - }, - { - "body": { - "id": 981, - "nodeType": "Block", - "src": "452:59:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 976, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 963, - "src": "488:4:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 977, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 965, - "src": "494:2:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 978, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 967, - "src": "498:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 974, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1150, - "src": "469:5:7", - "typeDescriptions": { - "typeIdentifier": "t_super$_ERC20Pausable_$1037", - "typeString": "contract super ERC20Pausable" - } - }, - "id": 975, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 606, - "src": "469:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) returns (bool)" - } - }, - "id": 979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "469:35:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 973, - "id": 980, - "nodeType": "Return", - "src": "462:42:7" - } - ] - }, - "documentation": null, - "id": 982, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 970, - "modifierName": { - "argumentTypes": null, - "id": 969, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "423:13:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "423:13:7" - } - ], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 968, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 963, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "375:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 962, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "375:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 965, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "389:10:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 964, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "389:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 967, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "401:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 966, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "401:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "374:41:7" - }, - "returnParameters": { - "id": 973, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 972, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "446:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 971, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "446:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "445:6:7" - }, - "scope": 1037, - "src": "353:158:7", - "stateMutability": "nonpayable", - "superFunction": 606, - "visibility": "public" - }, - { - "body": { - "id": 999, - "nodeType": "Block", - "src": "602:53:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 995, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 984, - "src": "633:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 996, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 986, - "src": "642:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 993, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1150, - "src": "619:5:7", - "typeDescriptions": { - "typeIdentifier": "t_super$_ERC20Pausable_$1037", - "typeString": "contract super ERC20Pausable" - } - }, - "id": 994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 557, - "src": "619:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "619:29:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 992, - "id": 998, - "nodeType": "Return", - "src": "612:36:7" - } - ] - }, - "documentation": null, - "id": 1000, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 989, - "modifierName": { - "argumentTypes": null, - "id": 988, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "573:13:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "573:13:7" - } - ], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 987, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 984, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1000, - "src": "534:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 983, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "534:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 986, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1000, - "src": "551:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 985, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "551:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "533:32:7" - }, - "returnParameters": { - "id": 992, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 991, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1000, - "src": "596:4:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 990, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "596:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "595:6:7" - }, - "scope": 1037, - "src": "517:138:7", - "stateMutability": "nonpayable", - "superFunction": 557, - "visibility": "public" - }, - { - "body": { - "id": 1017, - "nodeType": "Block", - "src": "766:68:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1013, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1002, - "src": "807:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1014, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1004, - "src": "816:10:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1011, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1150, - "src": "783:5:7", - "typeDescriptions": { - "typeIdentifier": "t_super$_ERC20Pausable_$1037", - "typeString": "contract super ERC20Pausable" - } - }, - "id": 1012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "increaseAllowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 655, - "src": "783:23:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 1015, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "783:44:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1010, - "id": 1016, - "nodeType": "Return", - "src": "776:51:7" - } - ] - }, - "documentation": null, - "id": 1018, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 1007, - "modifierName": { - "argumentTypes": null, - "id": 1006, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "729:13:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "729:13:7" - } - ], - "name": "increaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1005, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1002, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1018, - "src": "688:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1001, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "688:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1004, - "name": "addedValue", - "nodeType": "VariableDeclaration", - "scope": 1018, - "src": "705:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1003, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "705:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "687:34:7" - }, - "returnParameters": { - "id": 1010, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1009, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 1018, - "src": "752:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1008, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "752:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "751:14:7" - }, - "scope": 1037, - "src": "661:173:7", - "stateMutability": "nonpayable", - "superFunction": 655, - "visibility": "public" - }, - { - "body": { - "id": 1035, - "nodeType": "Block", - "src": "950:73:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1031, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1020, - "src": "991:7:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1032, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1022, - "src": "1000:15:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1029, - "name": "super", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1150, - "src": "967:5:7", - "typeDescriptions": { - "typeIdentifier": "t_super$_ERC20Pausable_$1037", - "typeString": "contract super ERC20Pausable" - } - }, - "id": 1030, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "decreaseAllowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 704, - "src": "967:23:7", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) returns (bool)" - } - }, - "id": 1033, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "967:49:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1028, - "id": 1034, - "nodeType": "Return", - "src": "960:56:7" - } - ] - }, - "documentation": null, - "id": 1036, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 1025, - "modifierName": { - "argumentTypes": null, - "id": 1024, - "name": "whenNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 274, - "src": "913:13:7", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "913:13:7" - } - ], - "name": "decreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1023, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1020, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1036, - "src": "867:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1019, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "867:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1022, - "name": "subtractedValue", - "nodeType": "VariableDeclaration", - "scope": 1036, - "src": "884:20:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1021, - "name": "uint", - "nodeType": "ElementaryTypeName", - "src": "884:4:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "866:39:7" - }, - "returnParameters": { - "id": 1028, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1027, - "name": "success", - "nodeType": "VariableDeclaration", - "scope": 1036, - "src": "936:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1026, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "936:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "935:14:7" - }, - "scope": 1037, - "src": "840:183:7", - "stateMutability": "nonpayable", - "superFunction": 704, - "visibility": "public" - } - ], - "scope": 1038, - "src": "169:856:7" - } - ], - "src": "0:1026:7" - }, - "id": 7 - }, - "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 1106 - ] - }, - "id": 1107, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1039, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:8" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 1106, - "linearizedBaseContracts": [ - 1106 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1048, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1041, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1048, - "src": "155:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1040, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "155:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1043, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1048, - "src": "167:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1042, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "167:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "154:27:8" - }, - "returnParameters": { - "id": 1047, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1046, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1048, - "src": "200:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1045, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "200:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "199:6:8" - }, - "scope": 1106, - "src": "137:69:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1057, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1053, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1050, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1057, - "src": "229:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1049, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "229:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1052, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1057, - "src": "246:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1051, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "246:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "228:32:8" - }, - "returnParameters": { - "id": 1056, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1055, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1057, - "src": "279:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1054, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "279:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "278:6:8" - }, - "scope": 1106, - "src": "212:73:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1068, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1064, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1059, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1068, - "src": "313:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1058, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "313:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1061, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1068, - "src": "327:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1060, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "327:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1063, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1068, - "src": "339:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1062, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "339:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "312:41:8" - }, - "returnParameters": { - "id": 1067, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1066, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1068, - "src": "372:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1065, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "372:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:6:8" - }, - "scope": 1106, - "src": "291:87:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1073, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1069, - "nodeType": "ParameterList", - "parameters": [], - "src": "404:2:8" - }, - "returnParameters": { - "id": 1072, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1071, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1073, - "src": "430:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1070, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "430:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:9:8" - }, - "scope": 1106, - "src": "384:55:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1080, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1076, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1075, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 1080, - "src": "464:11:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1074, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "464:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "463:13:8" - }, - "returnParameters": { - "id": 1079, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1078, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1080, - "src": "500:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1077, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "500:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "499:9:8" - }, - "scope": 1106, - "src": "445:64:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1089, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1085, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1082, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1089, - "src": "534:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1081, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "534:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1084, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1089, - "src": "549:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1083, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "533:32:8" - }, - "returnParameters": { - "id": 1088, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1087, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1089, - "src": "589:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1086, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "589:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "588:9:8" - }, - "scope": 1106, - "src": "515:83:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 1097, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 1096, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1091, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1097, - "src": "619:20:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1090, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1093, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1097, - "src": "641:18:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1092, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "641:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1095, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1097, - "src": "661:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1094, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "661:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "618:57:8" - }, - "src": "604:72:8" - }, - { - "anonymous": false, - "documentation": null, - "id": 1105, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 1104, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1099, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1105, - "src": "697:21:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "697:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1101, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1105, - "src": "720:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1100, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "720:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1103, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1105, - "src": "745:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1102, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "745:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "696:63:8" - }, - "src": "682:78:8" - } - ], - "scope": 1107, - "src": "114:648:8" - } - ], - "src": "0:763:8" - }, - "id": 8 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.abi b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.abi deleted file mode 100644 index 2b88afa15..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.bin b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.bin deleted file mode 100644 index 0bcdf427e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.bin +++ /dev/null @@ -1 +0,0 @@ -60806040523480156200001157600080fd5b50604080518082018252600581527f416c676f7300000000000000000000000000000000000000000000000000000060208083019182528351808501909452600484527f414c474f00000000000000000000000000000000000000000000000000000000908401528151919291601291620000909160039190620002c1565b508151620000a6906004906020850190620002c1565b506005805460ff191660ff9290921691909117905550620000d290503364010000000062000103810204565b6007805460ff19169055620000fd336b033b2e3c9fd0803ce800000064010000000062000155810204565b62000366565b6200011e60068264010000000062000b2c6200021482021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a03821615156200016b57600080fd5b60025462000188908264010000000062000ace6200026f82021704565b600255600160a060020a038216600090815260208190526040902054620001be908264010000000062000ace6200026f82021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03811615156200022a57600080fd5b6200023f828264010000000062000289810204565b156200024a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000828201838110156200028257600080fd5b9392505050565b6000600160a060020a0382161515620002a157600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030457805160ff191683800117855562000334565b8280016001018555821562000334579182015b828111156200033457825182559160200191906001019062000317565b506200034292915062000346565b5090565b6200036391905b808211156200034257600081556001016200034d565b90565b610ba680620003766000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635c975abb116100bf5780638456cb591161008e5780638456cb591461032357806395d89b411461032b578063a457c2d714610333578063a9059cbb1461035f578063dd62ed3e1461038b57610133565b80635c975abb146102c75780636ef8d66d146102cf57806370a08231146102d757806382dc1ec4146102fd57610133565b80632ff2e9dc116101065780632ff2e9dc14610245578063313ce5671461024d578063395093511461026b5780633f4ba83a1461029757806346fbf68e146102a157610133565b806306fdde0314610138578063095ea7b3146101b557806318160ddd146101f557806323b872dd1461020f575b600080fd5b6101406103b9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e1600480360360408110156101cb57600080fd5b50600160a060020a03813516906020013561044f565b604080519115158252519081900360200190f35b6101fd610473565b60408051918252519081900360200190f35b6101e16004803603606081101561022557600080fd5b50600160a060020a03813581169160208101359091169060400135610479565b6101fd61049f565b6102556104af565b6040805160ff9092168252519081900360200190f35b6101e16004803603604081101561028157600080fd5b50600160a060020a0381351690602001356104b8565b61029f6104d5565b005b6101e1600480360360208110156102b757600080fd5b5035600160a060020a0316610539565b6101e1610552565b61029f61055b565b6101fd600480360360208110156102ed57600080fd5b5035600160a060020a0316610566565b61029f6004803603602081101561031357600080fd5b5035600160a060020a0316610581565b61029f6105a1565b610140610607565b6101e16004803603604081101561034957600080fd5b50600160a060020a038135169060200135610668565b6101e16004803603604081101561037557600080fd5b50600160a060020a038135169060200135610685565b6101fd600480360360408110156103a157600080fd5b50600160a060020a03813581169160200135166106a2565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b820191906000526020600020905b81548152906001019060200180831161042857829003601f168201915b5050505050905090565b60075460009060ff161561046257600080fd5b61046c83836106cd565b9392505050565b60025490565b60075460009060ff161561048c57600080fd5b61049784848461074b565b949350505050565b6b033b2e3c9fd0803ce800000081565b60055460ff1690565b60075460009060ff16156104cb57600080fd5b61046c8383610814565b6104de33610539565b15156104e957600080fd5b60075460ff1615156104fa57600080fd5b6007805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600061054c60068363ffffffff6108c416565b92915050565b60075460ff1690565b610564336108fb565b565b600160a060020a031660009081526020819052604090205490565b61058a33610539565b151561059557600080fd5b61059e81610943565b50565b6105aa33610539565b15156105b557600080fd5b60075460ff16156105c557600080fd5b6007805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b60075460009060ff161561067b57600080fd5b61046c838361098b565b60075460009060ff161561069857600080fd5b61046c83836109d6565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156106e457600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205461077f908363ffffffff6109ec16565b600160a060020a03851660009081526001602090815260408083203384529091529020556107ae848484610a01565b600160a060020a0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561082b57600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff610ace16565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6000600160a060020a03821615156108db57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61090c60068263ffffffff610ae016565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61095460068263ffffffff610b2c16565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000600160a060020a03831615156109a257600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff6109ec16565b60006109e3338484610a01565b50600192915050565b6000828211156109fb57600080fd5b50900390565b600160a060020a0382161515610a1657600080fd5b600160a060020a038316600090815260208190526040902054610a3f908263ffffffff6109ec16565b600160a060020a038085166000908152602081905260408082209390935590841681522054610a74908263ffffffff610ace16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561046c57600080fd5b600160a060020a0381161515610af557600080fd5b610aff82826108c4565b1515610b0a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0381161515610b4157600080fd5b610b4b82826108c4565b15610b5557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916600117905556fea165627a7a72305820a8673657c914c80ad8879e073b63b3c05fd0190188d56a14948896f8205677a60029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.json deleted file mode 100644 index 7ffc522e5..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/bin/AlgoTokenV1.json +++ /dev/null @@ -1,455 +0,0 @@ -{ - "abi": [ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "INITIAL_SUPPLY", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "unpause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "paused", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renouncePauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pause", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "account", - "type": "address" - } - ], - "name": "PauserRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "bytecode": "60806040523480156200001157600080fd5b50604080518082018252600581527f416c676f7300000000000000000000000000000000000000000000000000000060208083019182528351808501909452600484527f414c474f00000000000000000000000000000000000000000000000000000000908401528151919291601291620000909160039190620002c1565b508151620000a6906004906020850190620002c1565b506005805460ff191660ff9290921691909117905550620000d290503364010000000062000103810204565b6007805460ff19169055620000fd336b033b2e3c9fd0803ce800000064010000000062000155810204565b62000366565b6200011e60068264010000000062000b2c6200021482021704565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b600160a060020a03821615156200016b57600080fd5b60025462000188908264010000000062000ace6200026f82021704565b600255600160a060020a038216600090815260208190526040902054620001be908264010000000062000ace6200026f82021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03811615156200022a57600080fd5b6200023f828264010000000062000289810204565b156200024a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000828201838110156200028257600080fd5b9392505050565b6000600160a060020a0382161515620002a157600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200030457805160ff191683800117855562000334565b8280016001018555821562000334579182015b828111156200033457825182559160200191906001019062000317565b506200034292915062000346565b5090565b6200036391905b808211156200034257600081556001016200034d565b90565b610ba680620003766000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c0100000000000000000000000000000000000000000000000000000000900480635c975abb116100bf5780638456cb591161008e5780638456cb591461032357806395d89b411461032b578063a457c2d714610333578063a9059cbb1461035f578063dd62ed3e1461038b57610133565b80635c975abb146102c75780636ef8d66d146102cf57806370a08231146102d757806382dc1ec4146102fd57610133565b80632ff2e9dc116101065780632ff2e9dc14610245578063313ce5671461024d578063395093511461026b5780633f4ba83a1461029757806346fbf68e146102a157610133565b806306fdde0314610138578063095ea7b3146101b557806318160ddd146101f557806323b872dd1461020f575b600080fd5b6101406103b9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017a578181015183820152602001610162565b50505050905090810190601f1680156101a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e1600480360360408110156101cb57600080fd5b50600160a060020a03813516906020013561044f565b604080519115158252519081900360200190f35b6101fd610473565b60408051918252519081900360200190f35b6101e16004803603606081101561022557600080fd5b50600160a060020a03813581169160208101359091169060400135610479565b6101fd61049f565b6102556104af565b6040805160ff9092168252519081900360200190f35b6101e16004803603604081101561028157600080fd5b50600160a060020a0381351690602001356104b8565b61029f6104d5565b005b6101e1600480360360208110156102b757600080fd5b5035600160a060020a0316610539565b6101e1610552565b61029f61055b565b6101fd600480360360208110156102ed57600080fd5b5035600160a060020a0316610566565b61029f6004803603602081101561031357600080fd5b5035600160a060020a0316610581565b61029f6105a1565b610140610607565b6101e16004803603604081101561034957600080fd5b50600160a060020a038135169060200135610668565b6101e16004803603604081101561037557600080fd5b50600160a060020a038135169060200135610685565b6101fd600480360360408110156103a157600080fd5b50600160a060020a03813581169160200135166106a2565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b820191906000526020600020905b81548152906001019060200180831161042857829003601f168201915b5050505050905090565b60075460009060ff161561046257600080fd5b61046c83836106cd565b9392505050565b60025490565b60075460009060ff161561048c57600080fd5b61049784848461074b565b949350505050565b6b033b2e3c9fd0803ce800000081565b60055460ff1690565b60075460009060ff16156104cb57600080fd5b61046c8383610814565b6104de33610539565b15156104e957600080fd5b60075460ff1615156104fa57600080fd5b6007805460ff191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b600061054c60068363ffffffff6108c416565b92915050565b60075460ff1690565b610564336108fb565b565b600160a060020a031660009081526020819052604090205490565b61058a33610539565b151561059557600080fd5b61059e81610943565b50565b6105aa33610539565b15156105b557600080fd5b60075460ff16156105c557600080fd5b6007805460ff191660011790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104455780601f1061041a57610100808354040283529160200191610445565b60075460009060ff161561067b57600080fd5b61046c838361098b565b60075460009060ff161561069857600080fd5b61046c83836109d6565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156106e457600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205461077f908363ffffffff6109ec16565b600160a060020a03851660009081526001602090815260408083203384529091529020556107ae848484610a01565b600160a060020a0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561082b57600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff610ace16565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6000600160a060020a03821615156108db57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61090c60068263ffffffff610ae016565b604051600160a060020a038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b61095460068263ffffffff610b2c16565b604051600160a060020a038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6000600160a060020a03831615156109a257600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461085f908363ffffffff6109ec16565b60006109e3338484610a01565b50600192915050565b6000828211156109fb57600080fd5b50900390565b600160a060020a0382161515610a1657600080fd5b600160a060020a038316600090815260208190526040902054610a3f908263ffffffff6109ec16565b600160a060020a038085166000908152602081905260408082209390935590841681522054610a74908263ffffffff610ace16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561046c57600080fd5b600160a060020a0381161515610af557600080fd5b610aff82826108c4565b1515610b0a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0381161515610b4157600080fd5b610b4b82826108c4565b15610b5557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916600117905556fea165627a7a72305820a8673657c914c80ad8879e073b63b3c05fd0190188d56a14948896f8205677a60029", - "functionHashes": { - "INITIAL_SUPPLY()": "2ff2e9dc", - "addPauser(address)": "82dc1ec4", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "isPauser(address)": "46fbf68e", - "name()": "06fdde03", - "pause()": "8456cb59", - "paused()": "5c975abb", - "renouncePauser()": "6ef8d66d", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "unpause()": "3f4ba83a" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "596400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "INITIAL_SUPPLY()": "226", - "addPauser(address)": "infinite", - "allowance(address,address)": "879", - "approve(address,uint256)": "22820", - "balanceOf(address)": "731", - "decimals()": "463", - "decreaseAllowance(address,uint256)": "infinite", - "increaseAllowance(address,uint256)": "infinite", - "isPauser(address)": "infinite", - "name()": "infinite", - "pause()": "infinite", - "paused()": "438", - "renouncePauser()": "infinite", - "symbol()": "infinite", - "totalSupply()": "471", - "transfer(address,uint256)": "infinite", - "transferFrom(address,address,uint256)": "infinite", - "unpause()": "infinite" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package-lock.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package-lock.json deleted file mode 100644 index 58a232dee..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package-lock.json +++ /dev/null @@ -1,555 +0,0 @@ -{ - "name": "algo-erc20-token", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "command-exists": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", - "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "openzeppelin-solidity": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-2.1.3.tgz", - "integrity": "sha512-Zz595xw6w4ZrNU3JJJTlPd8bHFbHv5OkJlkqsM2i+NBs6CzImoHI3dZ+nmhkfR+p52cGXKmayAGbnfdCum1SMg==" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "solc": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.4.tgz", - "integrity": "sha512-Jz3yz2mct0AYzR83/jBgxDqrLXTHhYUg2G2PVJbMMt5Vu+8e3Of1Mn3nvjPw5mh46jrzt8l4fBN7vHqG5ZF0cw==", - "requires": { - "command-exists": "^1.2.8", - "fs-extra": "^0.30.0", - "keccak": "^1.0.2", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33", - "yargs": "^11.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "requires": { - "camelcase": "^4.1.0" - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package.json b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package.json deleted file mode 100644 index 4233f45c1..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/src/AdvancedAlgos.AlgoToken.AlgoErc20Token/SmartContracts/src/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "algo-erc20-token", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "openzeppelin-solidity": "^2.1.3", - "solc": "^0.5.4" - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests.csproj b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests.csproj deleted file mode 100644 index 923b75de0..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - netcoreapp2.1 - true - latest - false - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AlgoTokenV1Tests.cs b/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AlgoTokenV1Tests.cs deleted file mode 100644 index 78e097536..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-erc20-token/test/AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests/AlgoTokenV1Tests.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest; -using Nethereum.Web3; -using Nethereum.Web3.Accounts; -using Xunit; - -namespace AdvancedAlgos.AlgoToken.AlgoErc20Token.IntegrationTests -{ - public class AlgoTokenV1Tests - { - private const long INITIAL_SUPPLY = 1000000000; - - [Fact] - public async Task DeployContractAndTransferTokensTest() - { - EthNetwork.UseDefaultTestNet(); - - var account1 = new Account(EthNetwork.Instance.PrefundedPrivateKey); - var account2 = EthAccountFactory.Create(); - - // Create the ERC20 token... - var contract = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(account1), EthNetwork.Instance.GasPriceProvider); - await contract.DeployAsync(); - - // Ensure that the initial supply is allocated to the owner... - Assert.Equal(INITIAL_SUPPLY.Algo(), await contract.BalanceOfAsync(account1.Address)); - - // Perform a transfer... - await contract.TransferAsync(account2.Address, 2.Algo()); - - // Ensure the receiver got the tokens... - Assert.Equal(2.Algo(), await contract.BalanceOfAsync(account2.Address)); - } - - [Fact] - public async Task PausableFeatureTest() - { - EthNetwork.UseDefaultTestNet(); - - var account1 = new Account(EthNetwork.Instance.PrefundedPrivateKey); - var account2 = EthAccountFactory.Create(); - - // Create the ERC20 token... - var contract = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(account1), EthNetwork.Instance.GasPriceProvider); - await contract.DeployAsync(); - - // Perform a transfer and check the result... - await contract.TransferAsync(account2.Address, 2.Algo()); - Assert.Equal(2.Algo(), await contract.BalanceOfAsync(account2.Address)); - - // Pause the contract... - await contract.PauseAsync(); - - // Ensure the contract cannot be used while is in paused state... - await Assert.ThrowsAsync( - () => contract.TransferAsync(account2.Address, 2.Algo())); - - // Ensure the balance was not modified... - Assert.Equal(2.Algo(), await contract.BalanceOfAsync(account2.Address)); - - // Unpause the contract... - await contract.UnpauseAsync(); - - // Try a new transfer and ensure it succeeded... - await contract.TransferAsync(account2.Address, 2.Algo()); - Assert.Equal(4.Algo(), await contract.BalanceOfAsync(account2.Address)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.csproj b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.csproj deleted file mode 100644 index e4165875b..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - netcoreapp2.1 - true - latest - - - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoFees.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoFees.cs deleted file mode 100644 index 55797e885..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoFees.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Contracts; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution -{ - public class AlgoFees : SmartContract - { - private Function _registerMiner; - private Function _unregisterMiner; - private Function _mine; - private Function _terminate; - - private Function _addSystem; - private Function _addCoreTeam; - - private Function _getMinerCount; - private Function _getMinerByIndex; - - public AlgoFees(Web3 web3, IGasPriceProvider gasPriceProvider) : base(web3, gasPriceProvider) { } - public AlgoFees(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) : base(contractAddress, web3, gasPriceProvider) { } - - protected override string AbiResourceName => $"SmartContracts.src.bin.{nameof(AlgoFees)}.abi"; - protected override string BinResourceName => $"SmartContracts.src.bin.{nameof(AlgoFees)}.bin"; - protected override BigInteger DeploymentGasUnits => 1400000; - - public Task DeployAsync(string tokenAddress) - => base.DeployAsync(tokenAddress); - - protected override void Initialize(Contract contractDescriptor) - { - _registerMiner = contractDescriptor.GetFunction("registerMiner"); - _unregisterMiner = contractDescriptor.GetFunction("unregisterMiner"); - _mine = contractDescriptor.GetFunction("mine"); - _terminate = contractDescriptor.GetFunction("terminate"); - - _addSystem = contractDescriptor.GetFunction("addSystem"); - _addCoreTeam = contractDescriptor.GetFunction("addCoreTeam"); - - _getMinerCount = contractDescriptor.GetFunction("getMinerCount"); - _getMinerByIndex = contractDescriptor.GetFunction("getMinerByIndex"); - } - - public Task RegisterMinerAsync(string minerAddress) => - InvokeAsync(_registerMiner, 900000, minerAddress); - - public Task UnregisterMinerAsync(string minerAddress) => - InvokeAsync(_unregisterMiner, 900000, minerAddress); - - public Task MineAsync() => - InvokeAsync(_mine, 1500000); - - public Task TerminateAsync() => - InvokeAsync(_terminate, 900000); - - public Task AddSystemAsync(string account) => - InvokeAsync(_addSystem, 900000, account); - - public Task AddCoreTeamAsync(string account) => - InvokeAsync(_addCoreTeam, 900000, account); - - public Task GetMinerCountAsync() => - _getMinerCount.CallAsync(); - - public Task GetMinerByIndexAsync(BigInteger index) => - _getMinerByIndex.CallAsync(index); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoMiner.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoMiner.cs deleted file mode 100644 index 6aa9675a5..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoMiner.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Contracts; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution -{ - public class AlgoMiner : SmartContract - { - private Function _activateMiner; - private Function _deactivateMiner; - private Function _migrateMiner; - private Function _pauseMining; - private Function _resumeMining; - private Function _stopAndRemoveOwnership; - private Function _resetMiner; - private Function _startMining; - private Function _stopMining; - private Function _mine; - private Function _terminate; - - private Function _addSystem; - private Function _addCoreTeam; - private Function _addSupervisor; - - public AlgoMiner(Web3 web3, IGasPriceProvider gasPriceProvider) : base(web3, gasPriceProvider) { } - public AlgoMiner(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) : base(contractAddress, web3, gasPriceProvider) { } - - protected override string AbiResourceName => $"SmartContracts.src.bin.{nameof(AlgoMiner)}.abi"; - protected override string BinResourceName => $"SmartContracts.src.bin.{nameof(AlgoMiner)}.bin"; - protected override BigInteger DeploymentGasUnits => 1600000; - - public Task DeployAsync(byte minerType, byte category, string minerAccountAddress, string referralAccountAddress, string tokenAddress) - => base.DeployAsync(minerType, category, minerAccountAddress, referralAccountAddress, tokenAddress); - - protected override void Initialize(Contract contractDescriptor) - { - _activateMiner = contractDescriptor.GetFunction("activateMiner"); - _deactivateMiner = contractDescriptor.GetFunction("deactivateMiner"); - _migrateMiner = contractDescriptor.GetFunction("migrateMiner"); - _pauseMining = contractDescriptor.GetFunction("pauseMining"); - _resumeMining = contractDescriptor.GetFunction("resumeMining"); - _stopAndRemoveOwnership = contractDescriptor.GetFunction("stopAndRemoveOwnership"); - _resetMiner = contractDescriptor.GetFunction("resetMiner"); - _startMining = contractDescriptor.GetFunction("startMining"); - _stopMining = contractDescriptor.GetFunction("stopMining"); - _mine = contractDescriptor.GetFunction("mine"); - _terminate = contractDescriptor.GetFunction("terminate"); - - _addSystem = contractDescriptor.GetFunction("addSystem"); - _addCoreTeam = contractDescriptor.GetFunction("addCoreTeam"); - _addSupervisor = contractDescriptor.GetFunction("addSupervisor"); - } - - public Task ActivateMinerAsync() => - InvokeAsync(_activateMiner, 900000); - - public Task DeactivateMinerAsync() => - InvokeAsync(_deactivateMiner, 900000); - - public Task MigrateMinerAsync(string newMinerAddress) => - InvokeAsync(_migrateMiner, 900000, newMinerAddress); - - public Task PauseMiningAsync() => - InvokeAsync(_pauseMining, 900000); - - public Task ResumeMiningAsync() => - InvokeAsync(_resumeMining, 900000); - - public Task StopAndRemoveOwnershipAsync() => - InvokeAsync(_stopAndRemoveOwnership, 900000); - - public Task ResetMinerAsync(string newOwnerAddress, string newReferralAddress) => - InvokeAsync(_resetMiner, 900000, newOwnerAddress, newReferralAddress); - - public Task StartMiningAsync() => - InvokeAsync(_startMining, 900000); - - public Task StopMiningAsync() => - InvokeAsync(_stopMining, 900000); - - public Task MineAsync() => - InvokeAsync(_mine, 900000); - - public Task TerminateAsync() => - InvokeAsync(_terminate, 900000); - - public Task AddSystemAsync(string account) => - InvokeAsync(_addSystem, 900000, account); - - public Task AddCoreTeamAsync(string account) => - InvokeAsync(_addCoreTeam, 900000, account); - - public Task AddSupervisorAsync(string account) => - InvokeAsync(_addSupervisor, 900000, account); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoPool.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoPool.cs deleted file mode 100644 index 1446d9f58..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/AlgoPool.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Contracts; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution -{ - public class AlgoPool : SmartContract - { - private Function _transferToMiner; - private Function _terminate; - - public AlgoPool(Web3 web3, IGasPriceProvider gasPriceProvider) : base(web3, gasPriceProvider) { } - public AlgoPool(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) : base(contractAddress, web3, gasPriceProvider) { } - - protected override string AbiResourceName => $"SmartContracts.src.bin.{nameof(AlgoPool)}.abi"; - protected override string BinResourceName => $"SmartContracts.src.bin.{nameof(AlgoPool)}.bin"; - protected override BigInteger DeploymentGasUnits => 1200000; - - public Task DeployAsync(byte poolType, string tokenAddress) - => base.DeployAsync(poolType, tokenAddress); - - protected override void Initialize(Contract contractDescriptor) - { - _transferToMiner = contractDescriptor.GetFunction("transferToMiner"); - _terminate = contractDescriptor.GetFunction("terminate"); - } - - public Task TransferToMinerAsync(string minerAddress) => - InvokeAsync(_transferToMiner, 900000, minerAddress); - - public Task TerminateAsync() => - InvokeAsync(_terminate, 900000); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/Algorithms/FeesDistributionAlgorithm.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/Algorithms/FeesDistributionAlgorithm.cs deleted file mode 100644 index 6fc608b5c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/Algorithms/FeesDistributionAlgorithm.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution.Algorithms -{ - public static class FeesDistributionAlgorithm - { - private static decimal[] _categoryProportions = new decimal[] - { - 1, - 10, - 20, - 30, - 40, - 50 - }; - - public static decimal[] Distribute(decimal totalAmount, long[] miners) - { - decimal totalProportion = 0; - - for (int i = 0; i < 6; i++) - { - totalProportion += _categoryProportions[i] * miners[i]; - } - - var allocationPercentage = new decimal[6]; - - for (int i = 0; i < 6; i++) - { - if (miners[i] > 0) allocationPercentage[i] = _categoryProportions[i] / totalProportion; - } - - var feePerMiner = new decimal[6]; - - for (int i = 0; i < 6; i++) - { - if (miners[i] > 0) feePerMiner[i] = Math.Round(totalAmount * allocationPercentage[i]); - } - - return feePerMiner; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/.vscode/settings.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/.vscode/settings.json deleted file mode 100644 index 9dea7e6ca..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "solidity.soliumRules": { - "indentation": "off", - "operator-whitespace": "off", - "error-reason": "off", - "linebreak-style": "off" - }, - "solidity.packageDefaultDependenciesContractsDirectory": "" -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol deleted file mode 100644 index 8345392c8..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol +++ /dev/null @@ -1,28 +0,0 @@ -pragma solidity 0.5.4; - -contract AlgoCommon { - - uint256 internal constant TOKEN_FACTOR = 10 ** uint256(18); - uint256 internal constant CAT_0_VALUE = 100000 * TOKEN_FACTOR; - uint256 internal constant CAT_1_VALUE = 1000000 * TOKEN_FACTOR; - uint256 internal constant CAT_2_VALUE = 2 * 1000000 * TOKEN_FACTOR; - uint256 internal constant CAT_3_VALUE = 3 * 1000000 * TOKEN_FACTOR; - uint256 internal constant CAT_4_VALUE = 4 * 1000000 * TOKEN_FACTOR; - uint256 internal constant CAT_5_VALUE = 5 * 1000000 * TOKEN_FACTOR; - - function getCapacityByCategory(uint8 category) internal pure returns (uint256) { - if(category == 0) { - return CAT_0_VALUE; - } else if(category == 1) { - return CAT_1_VALUE; - } else if(category == 2) { - return CAT_2_VALUE; - } else if(category == 3) { - return CAT_3_VALUE; - } else if(category == 4) { - return CAT_4_VALUE; - } else if(category == 5) { - return CAT_5_VALUE; - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol deleted file mode 100644 index 1fdc24fa8..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol +++ /dev/null @@ -1,38 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/access/Roles.sol"; - -contract AlgoCoreTeamRole { - using Roles for Roles.Role; - - Roles.Role private _coreTeamMembers; - - constructor () internal { - _addCoreTeam(msg.sender); - } - - modifier onlyCoreTeam() { - require(isCoreTeam(msg.sender)); - _; - } - - function isCoreTeam(address account) public view returns (bool) { - return _coreTeamMembers.has(account); - } - - function addCoreTeam(address account) public onlyCoreTeam { - _addCoreTeam(account); - } - - function renounceCoreTeam() public { - _removeCoreTeam(msg.sender); - } - - function _addCoreTeam(address account) internal { - _coreTeamMembers.add(account); - } - - function _removeCoreTeam(address account) internal { - _coreTeamMembers.remove(account); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol deleted file mode 100644 index 893907ca8..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol +++ /dev/null @@ -1,142 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol"; - -import "./IAlgoMiner.sol"; -import "./ERC20TokenHolder.sol"; -import "./AlgoSystemRole.sol"; -import "./AlgoCoreTeamRole.sol"; - -contract AlgoFees is ERC20TokenHolder, AlgoSystemRole, AlgoCoreTeamRole { - using SafeERC20 for IERC20; - - uint256 private constant CAT_0_VALUE_PROPORTION = 1; - uint256 private constant CAT_1_VALUE_PROPORTION = 10; - uint256 private constant CAT_2_VALUE_PROPORTION = 20; - uint256 private constant CAT_3_VALUE_PROPORTION = 30; - uint256 private constant CAT_4_VALUE_PROPORTION = 40; - uint256 private constant CAT_5_VALUE_PROPORTION = 50; - - address[] private _miners; - mapping(address => uint256) private _minersByAddress; - - constructor(address tokenAddress) - ERC20TokenHolder(tokenAddress) - AlgoSystemRole() - AlgoCoreTeamRole() - public { - _miners.push(address(0)); // Reserved as a marker for unregistered miner. - } - - function registerMiner(address minerAddress) public notTerminated onlyCoreTeam { - require(_miners.length < 1000); - require(_minersByAddress[minerAddress] == 0); - - IAlgoMiner algoMiner = IAlgoMiner(minerAddress); - - require(algoMiner.isAlgoMiner()); - - uint8 minerCategory = algoMiner.getCategory(); - - require(minerCategory <= 5); - - _minersByAddress[minerAddress] = _miners.length; - _miners.push(minerAddress); - } - - function unregisterMiner(address minerAddress) public notTerminated onlyCoreTeam { - require(_miners.length > 1); - - if(_miners.length == 2) { - - // Just remove the only registered miner... - _miners.pop(); - delete _minersByAddress[minerAddress]; - - } else { - - if(_minersByAddress[minerAddress] != _miners.length) { - // Move the latest miner to the gap... - _miners[_minersByAddress[minerAddress]] = _miners[_miners.length - 1]; - } - - _miners.pop(); - delete _minersByAddress[minerAddress]; - } - } - - function mine() public notTerminated onlySystem { - require(_miners.length > 1); - - uint256 currentFeesBalance = _token.balanceOf(address(this)); - - require(currentFeesBalance > 0); - - // Count how many ENABLED miners we have for each category... - uint256[6] memory miners; - uint256 minerCount = _miners.length; - - for(uint256 i = 1; i < minerCount; i++) { - IAlgoMiner algoMiner = IAlgoMiner(_miners[i]); - - if(!algoMiner.isMining()) continue; - - uint8 minerCategory = algoMiner.getCategory(); - - if(minerCategory == 0) { - miners[0]++; - } else if(minerCategory == 1) { - miners[1]++; - } else if(minerCategory == 2) { - miners[2]++; - } else if(minerCategory == 3) { - miners[3]++; - } else if(minerCategory == 4) { - miners[4]++; - } else if(minerCategory == 5) { - miners[5]++; - } - } - - // Calculate the fee to pay per miner according to its category... - uint256 totalProportion = CAT_0_VALUE_PROPORTION * miners[0] + - CAT_1_VALUE_PROPORTION * miners[1] + - CAT_2_VALUE_PROPORTION * miners[2] + - CAT_3_VALUE_PROPORTION * miners[3] + - CAT_4_VALUE_PROPORTION * miners[4] + - CAT_5_VALUE_PROPORTION * miners[5]; - - uint256[6] memory feePerMiner; - - feePerMiner[0] = currentFeesBalance * CAT_0_VALUE_PROPORTION / totalProportion; - feePerMiner[1] = currentFeesBalance * CAT_1_VALUE_PROPORTION / totalProportion; - feePerMiner[2] = currentFeesBalance * CAT_2_VALUE_PROPORTION / totalProportion; - feePerMiner[3] = currentFeesBalance * CAT_3_VALUE_PROPORTION / totalProportion; - feePerMiner[4] = currentFeesBalance * CAT_4_VALUE_PROPORTION / totalProportion; - feePerMiner[5] = currentFeesBalance * CAT_5_VALUE_PROPORTION / totalProportion; - - // Transfer the fees to ENABLED miners... - for(uint256 i = 1; i < minerCount; i++) { - IAlgoMiner algoMiner = IAlgoMiner(_miners[i]); - - if(!algoMiner.isMining()) continue; - - uint8 minerCategory = algoMiner.getCategory(); - - _token.safeTransfer(algoMiner.getMiner(), feePerMiner[minerCategory]); - } - } - - function terminate() public onlyCoreTeam { - _terminate(); - } - - function getMinerCount() public view returns (uint256) { - return _miners.length - 1; - } - - function getMinerByIndex(uint256 index) public view returns (address) { - return _miners[index + 1]; - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol deleted file mode 100644 index ad0f595d7..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol +++ /dev/null @@ -1,206 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol"; - -import "./IAlgoMiner.sol"; -import "./AlgoCommon.sol"; -import "./ERC20TokenHolder.sol"; -import "./AlgoSystemRole.sol"; -import "./AlgoCoreTeamRole.sol"; -import "./AlgoSupervisorRole.sol"; - -contract AlgoMiner is AlgoCommon, ERC20TokenHolder, AlgoSystemRole, AlgoCoreTeamRole, AlgoSupervisorRole, IAlgoMiner { - using SafeERC20 for IERC20; - - uint256 private constant DAYS_PER_YEAR = 365; - - enum MinerType { - PoolBased, - NonPoolBased - } - - enum MinerState { - Deactivated, - Activated, - Suspended, - Stopped - } - - MinerType private _minerType; - uint8 private _category; - address private _miner; - address private _referral; - - MinerState private _state; - bool private _mining; - uint8 private _currentYear; - uint16 private _currentDay; - uint256 private _currentYearSupply; - - constructor(MinerType minerType, uint8 category, address minerAccountAddress, address referralAccountAddress, address tokenAddress) - ERC20TokenHolder(tokenAddress) - AlgoSystemRole() - AlgoCoreTeamRole() - AlgoSupervisorRole() - public { - - require(category <= 5); - require(minerAccountAddress != address(0)); - - if(minerType == MinerType.PoolBased) { - require(referralAccountAddress != address(0)); - } - - _minerType = minerType; - _category = category; - _miner = minerAccountAddress; - _referral = referralAccountAddress; - } - - modifier onlyMiner() { - require(msg.sender == _miner); - _; - } - - function activateMiner() public notTerminated onlyCoreTeam { - require(_state == MinerState.Deactivated); - - if(_minerType == MinerType.PoolBased && _currentYearSupply == 0) { - - uint256 capacity = getCapacityByCategory(_category); - uint256 expectedBalance = capacity + capacity * 10 / 100; - - uint256 currentBalance = _token.balanceOf(address(this)); - - require(currentBalance == expectedBalance); - - _currentYearSupply = capacity / 2; - } - - _state = MinerState.Activated; - } - - function deactivateMiner() public notTerminated onlyCoreTeam { - require(_state != MinerState.Deactivated); - - _state = MinerState.Deactivated; - _mining = false; - } - - function migrateMiner(address newMinerAddress) public onlyCoreTeam { - require(_state == MinerState.Deactivated); - - _token.safeTransfer(newMinerAddress, _token.balanceOf(address(this))); - } - - function pauseMining() public notTerminated onlySupervisor { - require(_state == MinerState.Activated); - - _state = MinerState.Suspended; - } - - function resumeMining() public notTerminated onlySupervisor { - require(_state == MinerState.Suspended); - - _state = MinerState.Activated; - } - - function stopAndRemoveOwnership() public notTerminated onlySupervisor { - require(_state != MinerState.Stopped); - - _state = MinerState.Stopped; - _mining = false; - _miner = address(0); - _referral = address(0); - } - - function resetMiner(address newOwnerAddress, address newReferralAddress) public notTerminated onlySupervisor { - require(_state == MinerState.Stopped); - - _state = MinerState.Activated; - _miner = newOwnerAddress; - _referral = newReferralAddress; - } - - function startMining() public notTerminated onlyMiner { - require(_state == MinerState.Activated); - require(!_mining); - - _mining = true; - } - - function stopMining() public notTerminated onlyMiner { - require(_state == MinerState.Activated); - require(_mining); - - _mining = false; - } - - function mine() public notTerminated onlySystem { - require(_minerType == MinerType.PoolBased); - require(_state == MinerState.Activated); - require(_mining); - - if(_currentDay == 0) { - _currentYear = 1; - _currentDay = 1; - } else { - _currentDay++; - if(_currentDay == (DAYS_PER_YEAR + 1)) { - _currentYear++; - _currentDay = 1; - _currentYearSupply = _currentYearSupply / 2; - } - } - - uint256 minerTokens = _currentYearSupply / DAYS_PER_YEAR; - uint256 referralTokens = minerTokens * 10 / 100; - - require(minerTokens > 0); - require(referralTokens > 0); - - _token.safeTransfer(_miner, minerTokens); - _token.safeTransfer(_referral, referralTokens); - } - - function terminate() public onlyCoreTeam { - _terminate(); - } - - function isAlgoMiner() public pure returns (bool) { - return true; - } - - function getMinerType() public view returns (uint8) { - return uint8(_minerType); - } - - function getCategory() public view returns (uint8) { - return _category; - } - - function getMiner() public view returns (address) { - return _miner; - } - - function getReferral() public view returns (address) { - return _referral; - } - - function isMining() public view returns (bool) { - return _state == MinerState.Activated && _mining; - } - - function getCurrentYear() public view returns (uint8) { - return _currentYear; - } - - function getCurrentDay() public view returns (uint16) { - return _currentDay; - } - - function getCurrentYearSupply() public view returns (uint256) { - return _currentYearSupply; - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol deleted file mode 100644 index 7902be9ce..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol +++ /dev/null @@ -1,54 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol"; - -import "./IAlgoMiner.sol"; -import "./AlgoCommon.sol"; -import "./ERC20TokenHolder.sol"; -import "./AlgoCoreTeamRole.sol"; - -contract AlgoPool is AlgoCommon, ERC20TokenHolder, AlgoCoreTeamRole { - using SafeERC20 for IERC20; - - enum PoolType { - MinerPool, - ReferralPool - } - - PoolType private _poolType; - mapping(address => bool) private _fundedMiners; - - constructor(PoolType poolType, address tokenAddress) - ERC20TokenHolder(tokenAddress) - AlgoCoreTeamRole() - public { - _poolType = poolType; - } - - function transferToMiner(address minerAddress) public notTerminated onlyCoreTeam { - require(!_fundedMiners[minerAddress]); - - IAlgoMiner algoMiner = IAlgoMiner(minerAddress); - - require(algoMiner.isAlgoMiner()); - - uint8 minerCategory = algoMiner.getCategory(); - - require(minerCategory <= 5); - - uint256 value = getCapacityByCategory(minerCategory); - - // For referral pools only transfer the 10% of the category capacity. - if(_poolType == PoolType.ReferralPool) { - value = value * 10 / 100; - } - - _fundedMiners[minerAddress] = true; - _token.safeTransfer(minerAddress, value); - } - - function terminate() public onlyCoreTeam { - _terminate(); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol deleted file mode 100644 index 53a60e63b..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol +++ /dev/null @@ -1,38 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/access/Roles.sol"; - -contract AlgoSupervisorRole { - using Roles for Roles.Role; - - Roles.Role private _supervisors; - - constructor () internal { - _addSupervisor(msg.sender); - } - - modifier onlySupervisor() { - require(isSupervisor(msg.sender)); - _; - } - - function isSupervisor(address account) public view returns (bool) { - return _supervisors.has(account); - } - - function addSupervisor(address account) public onlySupervisor { - _addSupervisor(account); - } - - function renounceSupervisor() public { - _removeSupervisor(msg.sender); - } - - function _addSupervisor(address account) internal { - _supervisors.add(account); - } - - function _removeSupervisor(address account) internal { - _supervisors.remove(account); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol deleted file mode 100644 index 95cdc21e8..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol +++ /dev/null @@ -1,38 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/access/Roles.sol"; - -contract AlgoSystemRole { - using Roles for Roles.Role; - - Roles.Role private _systemMembers; - - constructor () internal { - _addSystem(msg.sender); - } - - modifier onlySystem() { - require(isSystem(msg.sender)); - _; - } - - function isSystem(address account) public view returns (bool) { - return _systemMembers.has(account); - } - - function addSystem(address account) public onlySystem { - _addSystem(account); - } - - function renounceSystem() public { - _removeSystem(msg.sender); - } - - function _addSystem(address account) internal { - _systemMembers.add(account); - } - - function _removeSystem(address account) internal { - _systemMembers.remove(account); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol deleted file mode 100644 index c24ee8c2e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol +++ /dev/null @@ -1,24 +0,0 @@ -pragma solidity 0.5.4; - -import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol"; -import "openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol"; - -import "./Terminable.sol"; - -contract ERC20TokenHolder is Terminable { - using SafeERC20 for IERC20; - - IERC20 internal _token; - - constructor(address tokenAddress) Terminable() internal { - _token = IERC20(tokenAddress); - } - - function _terminate() internal { - uint256 currentBalance = _token.balanceOf(address(this)); - if(currentBalance > 0) { - _token.safeTransfer(_creator, currentBalance); - } - Terminable._terminate(); - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol deleted file mode 100644 index 3129f26d6..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity 0.5.4; - -contract IAlgoMiner { - function isAlgoMiner() public pure returns (bool); - function getMinerType() public view returns (uint8); - function getCategory() public view returns (uint8); - function getMiner() public view returns (address); - function getReferral() public view returns (address); - function isMining() public view returns (bool); -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol deleted file mode 100644 index 30bfa1e64..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol +++ /dev/null @@ -1,21 +0,0 @@ -pragma solidity 0.5.4; - -contract Terminable { - - address internal _creator; - bool internal _terminated; - - constructor() internal { - _creator = msg.sender; - _terminated = false; - } - - modifier notTerminated() { - require(!_terminated); - _; - } - - function _terminate() internal { - _terminated = true; - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees-sol-output.json deleted file mode 100644 index f23b82c36..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees-sol-output.json +++ /dev/null @@ -1,16807 +0,0 @@ -{ - "contracts": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "AlgoCoreTeamRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol": { - "AlgoFees": { - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "registerMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "index", - "type": "uint256" - } - ], - "name": "getMinerByIndex", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "unregisterMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405160208062001070833981018060405260208110156200003357600080fd5b50516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a0384161790556200007d90640100000000620000d8810204565b6200009133640100000000620000f6810204565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054600160a060020a0319169055620001a4565b620000f360028264010000000062000dd76200011182021704565b50565b620000f360038264010000000062000dd76200011182021704565b600160a060020a03811615156200012757600080fd5b6200013c82826401000000006200016c810204565b156200014757600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200018457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610ebc80620001b46000396000f3fe608060405234801561001057600080fd5b50600436106100b85760003560e060020a9004806374be75921161007557806374be7592146101ac57806381f909f3146101d257806399f4b251146101f8578063bb52c13714610200578063d43acc791461021a578063e9d6185914610222576100b8565b80630c08bf88146100bd5780632e6b6849146100c7578063341ccfcb146100ed57806334cdcf26146101135780633d19ab131461014d578063608d3d3d14610186575b600080fd5b6100c561022a565b005b6100c5600480360360208110156100dd57600080fd5b5035600160a060020a0316610248565b6100c56004803603602081101561010357600080fd5b5035600160a060020a0316610268565b6101396004803603602081101561012957600080fd5b5035600160a060020a031661043c565b604080519115158252519081900360200190f35b61016a6004803603602081101561016357600080fd5b5035610455565b60408051600160a060020a039092168252519081900360200190f35b6101396004803603602081101561019c57600080fd5b5035600160a060020a0316610484565b6100c5600480360360208110156101c257600080fd5b5035600160a060020a0316610497565b6100c5600480360360208110156101e857600080fd5b5035600160a060020a03166104b4565b6100c5610656565b610208610ba4565b60408051918252519081900360200190f35b6100c5610bae565b6100c5610bb7565b61023333610484565b151561023e57600080fd5b610246610bc0565b565b61025133610484565b151561025c57600080fd5b61026581610c86565b50565b60005474010000000000000000000000000000000000000000900460ff161561029057600080fd5b61029933610484565b15156102a457600080fd5b6004546103e8116102b457600080fd5b600160a060020a038116600090815260056020526040902054156102d757600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561031857600080fd5b505afa15801561032c573d6000803e3d6000fd5b505050506040513d602081101561034257600080fd5b5051151561034f57600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561038d57600080fd5b505afa1580156103a1573d6000803e3d6000fd5b505050506040513d60208110156103b757600080fd5b50519050600560ff821611156103cc57600080fd5b505060048054600160a060020a039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b600061044f60028363ffffffff610c9716565b92915050565b600060048260010181548110151561046957fe5b600091825260209091200154600160a060020a031692915050565b600061044f60038363ffffffff610c9716565b6104a03361043c565b15156104ab57600080fd5b61026581610cce565b60005474010000000000000000000000000000000000000000900460ff16156104dc57600080fd5b6104e533610484565b15156104f057600080fd5b6004546001106104ff57600080fd5b60045460021415610564576004805480151561051757fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a0383168252600590526040812055610265565b600454600160a060020a038216600090815260056020526040902054146105fe5760048054600019810190811061059757fe5b6000918252602080832090910154600160a060020a03848116845260059092526040909220546004805492909316929181106105cf57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6004805480151561060b57fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a038316825260059052604081205550565b60005474010000000000000000000000000000000000000000900460ff161561067e57600080fd5b6106873361043c565b151561069257600080fd5b6004546001106106a157600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d602081101561072f57600080fd5b505190506000811161074057600080fd5b610748610e71565b60045460015b8181101561090157600060048281548110151561076757fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b1580156107cc57600080fd5b505afa1580156107e0573d6000803e3d6000fd5b505050506040513d60208110156107f657600080fd5b5051151561080457506108f9565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d602081101561086c57600080fd5b5051905060ff8116151561088e578460005b60200201805160010190526108f6565b8060ff16600114156108a25784600161087e565b8060ff16600214156108b65784600261087e565b8060ff16600314156108ca5784600361087e565b8060ff16600414156108de5784600461087e565b8060ff16600514156108f65760a08501805160010190525b50505b60010161074e565b5060a082015160808301516060840151604085015160208601518651600a90910201601490910201601e90910201602890910201603290910201610943610e71565b818581151561094e57fe5b04815281600a860281151561095f57fe5b046020820152816014860281151561097357fe5b04604082015281601e860281151561098757fe5b046060820152816028860281151561099b57fe5b04608082015281603286028115156109af57fe5b0460a082015260015b83811015610b9c5760006004828154811015156109d157fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b158015610a3657600080fd5b505afa158015610a4a573d6000803e3d6000fd5b505050506040513d6020811015610a6057600080fd5b50511515610a6e5750610b94565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610aac57600080fd5b505afa158015610ac0573d6000803e3d6000fd5b505050506040513d6020811015610ad657600080fd5b5051604080517f302c11ca0000000000000000000000000000000000000000000000000000000081529051919250610b9191600160a060020a0385169163302c11ca916004808301926020929190829003018186803b158015610b3857600080fd5b505afa158015610b4c573d6000803e3d6000fd5b505050506040513d6020811015610b6257600080fd5b50518560ff841660068110610b7357fe5b6020020151600154600160a060020a0316919063ffffffff610cdf16565b50505b6001016109b8565b505050505050565b6004546000190190565b61024633610d7e565b61024633610d8f565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610c2457600080fd5b505afa158015610c38573d6000803e3d6000fd5b505050506040513d6020811015610c4e57600080fd5b505190506000811115610c7e57600054600154610c7e91600160a060020a0391821691168363ffffffff610cdf16565b610265610da0565b61026560038263ffffffff610dd716565b6000600160a060020a0382161515610cae57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61026560028263ffffffff610dd716565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50511515610d7957600080fd5b505050565b61026560038263ffffffff610e2516565b61026560028263ffffffff610e2516565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a0381161515610dec57600080fd5b610df68282610c97565b15610e0057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610e3a57600080fd5b610e448282610c97565b1515610e4f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60c060405190810160405280600690602082028038833950919291505056fea165627a7a72305820d93c57fe9a496ba0db433cb631bbbbe57a53bb63720b63023ea0e465cf5c1d200029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP1 PUSH3 0x1070 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND DUP2 OR PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND SWAP1 SWAP3 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND OR SWAP1 SSTORE PUSH3 0x7D SWAP1 PUSH5 0x100000000 PUSH3 0xD8 DUP2 MUL DIV JUMP JUMPDEST PUSH3 0x91 CALLER PUSH5 0x100000000 PUSH3 0xF6 DUP2 MUL DIV JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND SWAP1 SSTORE PUSH3 0x1A4 JUMP JUMPDEST PUSH3 0xF3 PUSH1 0x2 DUP3 PUSH5 0x100000000 PUSH3 0xDD7 PUSH3 0x111 DUP3 MUL OR DIV JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0xF3 PUSH1 0x3 DUP3 PUSH5 0x100000000 PUSH3 0xDD7 PUSH3 0x111 DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x127 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x13C DUP3 DUP3 PUSH5 0x100000000 PUSH3 0x16C DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH3 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH3 0x184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0xEBC DUP1 PUSH3 0x1B4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 PUSH1 0x2 EXP SWAP1 DIV DUP1 PUSH4 0x74BE7592 GT PUSH2 0x75 JUMPI DUP1 PUSH4 0x74BE7592 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x81F909F3 EQ PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x99F4B251 EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xBB52C137 EQ PUSH2 0x200 JUMPI DUP1 PUSH4 0xD43ACC79 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xE9D61859 EQ PUSH2 0x222 JUMPI PUSH2 0xB8 JUMP JUMPDEST DUP1 PUSH4 0xC08BF88 EQ PUSH2 0xBD JUMPI DUP1 PUSH4 0x2E6B6849 EQ PUSH2 0xC7 JUMPI DUP1 PUSH4 0x341CCFCB EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x34CDCF26 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0x3D19AB13 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x608D3D3D EQ PUSH2 0x186 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC5 PUSH2 0x22A JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x248 JUMP JUMPDEST PUSH2 0xC5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x268 JUMP JUMPDEST PUSH2 0x139 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x43C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x16A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x455 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x484 JUMP JUMPDEST PUSH2 0xC5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x497 JUMP JUMPDEST PUSH2 0xC5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x4B4 JUMP JUMPDEST PUSH2 0xC5 PUSH2 0x656 JUMP JUMPDEST PUSH2 0x208 PUSH2 0xBA4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC5 PUSH2 0xBAE JUMP JUMPDEST PUSH2 0xC5 PUSH2 0xBB7 JUMP JUMPDEST PUSH2 0x233 CALLER PUSH2 0x484 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x23E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x246 PUSH2 0xBC0 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x251 CALLER PUSH2 0x484 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x265 DUP2 PUSH2 0xC86 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x299 CALLER PUSH2 0x484 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x3E8 GT PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x2D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x1777FB4B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x342 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x80258E47 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x38D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x5 PUSH1 0xFF DUP3 AND GT ISZERO PUSH2 0x3CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 SWAP1 SSTORE PUSH1 0x1 DUP5 ADD DUP4 SSTORE SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 SWAP2 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44F PUSH1 0x2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xC97 AND JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP3 PUSH1 0x1 ADD DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x469 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44F PUSH1 0x3 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xC97 AND JUMP JUMPDEST PUSH2 0x4A0 CALLER PUSH2 0x43C JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x265 DUP2 PUSH2 0xCCE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x4DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E5 CALLER PUSH2 0x484 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 LT PUSH2 0x4FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x2 EQ ISZERO PUSH2 0x564 JUMPI PUSH1 0x4 DUP1 SLOAD DUP1 ISZERO ISZERO PUSH2 0x517 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x265 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ PUSH2 0x5FE JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0x597 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 DUP2 AND DUP5 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SLOAD PUSH1 0x4 DUP1 SLOAD SWAP3 SWAP1 SWAP4 AND SWAP3 SWAP2 DUP2 LT PUSH2 0x5CF JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND MUL OR SWAP1 SSTORE POP JUMPDEST PUSH1 0x4 DUP1 SLOAD DUP1 ISZERO ISZERO PUSH2 0x60B JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x687 CALLER PUSH2 0x43C JUMP JUMPDEST ISZERO ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 LT PUSH2 0x6A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x705 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x719 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x740 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x748 PUSH2 0xE71 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x901 JUMPI PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x767 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x19A74AB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP4 POP DUP4 SWAP3 PUSH4 0x19A74AB3 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x804 JUMPI POP PUSH2 0x8F9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x80258E47 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x856 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x86C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0xFF DUP2 AND ISZERO ISZERO PUSH2 0x88E JUMPI DUP5 PUSH1 0x0 JUMPDEST PUSH1 0x20 MUL ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x8F6 JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x8A2 JUMPI DUP5 PUSH1 0x1 PUSH2 0x87E JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x8B6 JUMPI DUP5 PUSH1 0x2 PUSH2 0x87E JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x3 EQ ISZERO PUSH2 0x8CA JUMPI DUP5 PUSH1 0x3 PUSH2 0x87E JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x4 EQ ISZERO PUSH2 0x8DE JUMPI DUP5 PUSH1 0x4 PUSH2 0x87E JUMP JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x5 EQ ISZERO PUSH2 0x8F6 JUMPI PUSH1 0xA0 DUP6 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x74E JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD DUP7 MLOAD PUSH1 0xA SWAP1 SWAP2 MUL ADD PUSH1 0x14 SWAP1 SWAP2 MUL ADD PUSH1 0x1E SWAP1 SWAP2 MUL ADD PUSH1 0x28 SWAP1 SWAP2 MUL ADD PUSH1 0x32 SWAP1 SWAP2 MUL ADD PUSH2 0x943 PUSH2 0xE71 JUMP JUMPDEST DUP2 DUP6 DUP2 ISZERO ISZERO PUSH2 0x94E JUMPI INVALID JUMPDEST DIV DUP2 MSTORE DUP2 PUSH1 0xA DUP7 MUL DUP2 ISZERO ISZERO PUSH2 0x95F JUMPI INVALID JUMPDEST DIV PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH1 0x14 DUP7 MUL DUP2 ISZERO ISZERO PUSH2 0x973 JUMPI INVALID JUMPDEST DIV PUSH1 0x40 DUP3 ADD MSTORE DUP2 PUSH1 0x1E DUP7 MUL DUP2 ISZERO ISZERO PUSH2 0x987 JUMPI INVALID JUMPDEST DIV PUSH1 0x60 DUP3 ADD MSTORE DUP2 PUSH1 0x28 DUP7 MUL DUP2 ISZERO ISZERO PUSH2 0x99B JUMPI INVALID JUMPDEST DIV PUSH1 0x80 DUP3 ADD MSTORE DUP2 PUSH1 0x32 DUP7 MUL DUP2 ISZERO ISZERO PUSH2 0x9AF JUMPI INVALID JUMPDEST DIV PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x1 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB9C JUMPI PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT ISZERO ISZERO PUSH2 0x9D1 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x19A74AB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND SWAP4 POP DUP4 SWAP3 PUSH4 0x19A74AB3 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA4A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0xA6E JUMPI POP PUSH2 0xB94 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x80258E47 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAC0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x302C11CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH2 0xB91 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP6 AND SWAP2 PUSH4 0x302C11CA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP6 PUSH1 0xFF DUP5 AND PUSH1 0x6 DUP2 LT PUSH2 0xB73 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL ADD MLOAD PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xCDF AND JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x9B8 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x0 NOT ADD SWAP1 JUMP JUMPDEST PUSH2 0x246 CALLER PUSH2 0xD7E JUMP JUMPDEST PUSH2 0x246 CALLER PUSH2 0xD8F JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC38 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0xC7E JUMPI PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH2 0xC7E SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH4 0xFFFFFFFF PUSH2 0xCDF AND JUMP JUMPDEST PUSH2 0x265 PUSH2 0xDA0 JUMP JUMPDEST PUSH2 0x265 PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xDD7 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0xCAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x265 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xDD7 AND JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0xD79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x265 PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xE25 AND JUMP JUMPDEST PUSH2 0x265 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0xE25 AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH21 0x10000000000000000000000000000000000000000 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xDEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDF6 DUP3 DUP3 PUSH2 0xC97 JUMP JUMPDEST ISZERO PUSH2 0xE00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xE3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE44 DUP3 DUP3 PUSH2 0xC97 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xE4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CODESIZE DUP4 CODECOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xd9 EXTCODECOPY JUMPI INVALID SWAP11 0x49 PUSH12 0xA0DB433CB631BBBBE57A53BB PUSH4 0x720B6302 RETURNDATACOPY LOG0 0xe4 PUSH6 0xCF5C1D200029 ", - "sourceMap": "555:4724:1:-;;;1117:235;8:9:-1;5:2;;;30:1;27;20:12;5:2;1117:235:1;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1117:235:1;155:8:5;:21;;166:10;-1:-1:-1;;;;;;155:21:5;;;;;-1:-1:-1;;;;;;187:19:5;;;;-1:-1:-1;635:29:3;;;;;-1:-1:-1;;;;;635:29:3;;;;;362:22:2;;:10;;;;:22;:::i;:::-;366:24:0;379:10;366:12;;;;:24;:::i;:::-;-1:-1:-1;1272:7:1;27:10:-1;;39:1;23:18;;45:23;;1293:1:1;1272:24;;;;;;;;-1:-1:-1;;;;;;1272:24:1;;;555:4724;;798:92:2;855:27;:14;874:7;855:18;;;;;;:27;:::i;:::-;798:92;:::o;822:96:0:-;881:29;:16;902:7;881:20;;;;;;:29;:::i;259:181:6:-;-1:-1:-1;;;;;335:21:6;;;;327:30;;;;;;376:18;380:4;386:7;376:3;;;;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:6;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:6;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:6;;;;874:30;;;;;;-1:-1:-1;;;;;;921:20:6;:11;:20;;;;;;;;;;;;;;;786:162::o;555:4724:1:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "754400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addCoreTeam(address)": "infinite", - "addSystem(address)": "infinite", - "getMinerByIndex(uint256)": "1058", - "getMinerCount()": "541", - "isCoreTeam(address)": "infinite", - "isSystem(address)": "infinite", - "mine()": "infinite", - "registerMiner(address)": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSystem()": "infinite", - "terminate()": "infinite", - "unregisterMiner(address)": "infinite" - } - }, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "addSystem(address)": "74be7592", - "getMinerByIndex(uint256)": "3d19ab13", - "getMinerCount()": "bb52c137", - "isCoreTeam(address)": "608d3d3d", - "isSystem(address)": "34cdcf26", - "mine()": "99f4b251", - "registerMiner(address)": "341ccfcb", - "renounceCoreTeam()": "d43acc79", - "renounceSystem()": "e9d61859", - "terminate()": "0c08bf88", - "unregisterMiner(address)": "81f909f3" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"terminate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"minerAddress\",\"type\":\"address\"}],\"name\":\"registerMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSystem\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getMinerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isCoreTeam\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addSystem\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"minerAddress\",\"type\":\"address\"}],\"name\":\"unregisterMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mine\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMinerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceSystem\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol\":\"AlgoFees\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol\":{\"keccak256\":\"0x8252ea038586ac8cf89aea6810c1a75d84c2eba48d6b0ecc5f1783929de398a3\",\"urls\":[\"bzzr://3bd6a88368eeb6abb70573d16d481bc20bc22b6c0d3e60702c59c9fab4202528\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol\":{\"keccak256\":\"0xada03dabc0c81fb1b879cfda742a7fe400938abe063e428159942358791bfa57\",\"urls\":[\"bzzr://6f74f234fe2c3b555ad1d8e34e7f2205b388aa3c2b353f2f429322879d0ed21a\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol\":{\"keccak256\":\"0x79678e2992aafe0c33260767eba0b3c95474a2f0902154841f4ac62012528e67\",\"urls\":[\"bzzr://a4efbd6113fb5941933b0e94b0135d2ea7150a538ec80b9b5288a85506337f94\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol\":{\"keccak256\":\"0x2c964fd13fcc46f0326055bd50569f2bfb32ea7963780763d77b85ed51320205\",\"urls\":[\"bzzr://3fd83f4de7769670f420f04909921357a8ace3b9e0eb08b7c9df0ee57741d347\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol\":{\"keccak256\":\"0x861339f0f02c28b332f5d8dc165127fa1a402bbbfd7c3923acca26a6139e4f2b\",\"urls\":[\"bzzr://87e5728ff1289cbcc9669fae3a5b994b3a4e0788a2673595adcac700eea8c411\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol\":{\"keccak256\":\"0x8704856f4ea109e3df4805b3b3dd7d9b9026e94f80c42c6d750356d46036a530\",\"urls\":[\"bzzr://18db91d498a487cbc7085490ff2bf017849f88bb4032ea7d840bab3561c45cf4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol": { - "AlgoSystemRole": { - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addSystem(address)": "74be7592", - "isSystem(address)": "34cdcf26", - "renounceSystem()": "e9d61859" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ERC20TokenHolder": { - "abi": [ - { - "inputs": [ - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "IAlgoMiner": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isMining", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMiner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReferral", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerType", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getCategory()": "80258e47", - "getMiner()": "302c11ca", - "getMinerType()": "4969ae70", - "getReferral()": "329b1c92", - "isAlgoMiner()": "1777fb4b", - "isMining()": "19a74ab3" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "Terminable": { - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "details": "Library for managing addresses assigned to a Role.", - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a7230582072caac54fe9b00b8b816307b2a5ded8de356c5be6012002ca36f81b18422d8260029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH19 0xCAAC54FE9B00B8B816307B2A5DED8DE356C5BE PUSH1 0x12 STOP 0x2c LOG3 PUSH16 0x81B18422D82600290000000000000000 ", - "sourceMap": "108:842:6:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing addresses assigned to a Role.\",\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "details": "Unsigned math operations with safety checks that revert on error", - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820c8fdc9a15986ffb647c7551d6f3c5b251c8209308e82491b559a3ee6cc289f670029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc8 REVERT 0xc9 LOG1 MSIZE DUP7 SELFDESTRUCT 0xb6 0x47 0xc7 SSTORE SAR PUSH16 0x3C5B251C8209308E82491B559A3EE6CC 0x28 SWAP16 PUSH8 0x29000000000000 ", - "sourceMap": "125:1726:7:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "see https://github.com/ethereum/EIPs/issues/20", - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "details": "Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "methods": {}, - "title": "SafeERC20" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820f19c7b62e065f91bc3f26e33372ab3fae2852e0b472cd6bb775c347272d9d5120029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 CALL SWAP13 PUSH28 0x62E065F91BC3F26E33372AB3FAE2852E0B472CD6BB775C347272D9D5 SLT STOP 0x29 ", - "sourceMap": "352:1248:9:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "exportedSymbols": { - "AlgoCoreTeamRole": [ - 86 - ] - }, - "id": 87, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:0" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 87, - "sourceUnit": 900, - "src": "26:189:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 86, - "linearizedBaseContracts": [ - 86 - ], - "name": "AlgoCoreTeamRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 5, - "libraryName": { - "contractScope": null, - "id": 3, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 899, - "src": "258:5:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$899", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "252:27:0", - "typeName": { - "contractScope": null, - "id": 4, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "268:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 7, - "name": "_coreTeamMembers", - "nodeType": "VariableDeclaration", - "scope": 86, - "src": "287:35:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 6, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "287:10:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 15, - "nodeType": "Block", - "src": "355:43:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 11, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "379:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "379:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 10, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "366:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 13, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "366:24:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14, - "nodeType": "ExpressionStatement", - "src": "366:24:0" - } - ] - }, - "documentation": null, - "id": 16, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8, - "nodeType": "ParameterList", - "parameters": [], - "src": "343:2:0" - }, - "returnParameters": { - "id": 9, - "nodeType": "ParameterList", - "parameters": [], - "src": "355:0:0" - }, - "scope": 86, - "src": "331:67:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 26, - "nodeType": "Block", - "src": "430:62:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 20, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "460:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 21, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "460:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 19, - "name": "isCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "449:10:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 22, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "449:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 18, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "441:7:0", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 23, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "441:31:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 24, - "nodeType": "ExpressionStatement", - "src": "441:31:0" - }, - { - "id": 25, - "nodeType": "PlaceholderStatement", - "src": "483:1:0" - } - ] - }, - "documentation": null, - "id": 27, - "name": "onlyCoreTeam", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17, - "nodeType": "ParameterList", - "parameters": [], - "src": "427:2:0" - }, - "src": "406:86:0", - "visibility": "internal" - }, - { - "body": { - "id": 39, - "nodeType": "Block", - "src": "564:55:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 36, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 29, - "src": "603:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 34, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "582:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 35, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 898, - "src": "582:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 37, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "582:29:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 33, - "id": 38, - "nodeType": "Return", - "src": "575:36:0" - } - ] - }, - "documentation": null, - "id": 40, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 30, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 29, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "520:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 28, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "520:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "519:17:0" - }, - "returnParameters": { - "id": 33, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 32, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "558:4:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 31, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "558:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "557:6:0" - }, - "scope": 86, - "src": "500:119:0", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 51, - "nodeType": "Block", - "src": "685:40:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 48, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 42, - "src": "709:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 47, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "696:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 49, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "696:21:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 50, - "nodeType": "ExpressionStatement", - "src": "696:21:0" - } - ] - }, - "documentation": null, - "id": 52, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 45, - "modifierName": { - "argumentTypes": null, - "id": 44, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "672:12:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "672:12:0" - } - ], - "name": "addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 43, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 42, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 52, - "src": "648:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 41, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "648:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "647:17:0" - }, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [], - "src": "685:0:0" - }, - "scope": 86, - "src": "627:98:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 60, - "nodeType": "Block", - "src": "768:46:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 56, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "795:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "795:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 55, - "name": "_removeCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "779:15:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 58, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "779:27:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 59, - "nodeType": "ExpressionStatement", - "src": "779:27:0" - } - ] - }, - "documentation": null, - "id": 61, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 53, - "nodeType": "ParameterList", - "parameters": [], - "src": "758:2:0" - }, - "returnParameters": { - "id": 54, - "nodeType": "ParameterList", - "parameters": [], - "src": "768:0:0" - }, - "scope": 86, - "src": "733:81:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 72, - "nodeType": "Block", - "src": "870:48:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 69, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 63, - "src": "902:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 66, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "881:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 68, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 844, - "src": "881:20:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 70, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "881:29:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 71, - "nodeType": "ExpressionStatement", - "src": "881:29:0" - } - ] - }, - "documentation": null, - "id": 73, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 63, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 73, - "src": "844:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 62, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "844:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "843:17:0" - }, - "returnParameters": { - "id": 65, - "nodeType": "ParameterList", - "parameters": [], - "src": "870:0:0" - }, - "scope": 86, - "src": "822:96:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 84, - "nodeType": "Block", - "src": "977:51:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 81, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "1012:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 78, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7, - "src": "988:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 80, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 875, - "src": "988:23:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 82, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "988:32:0", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 83, - "nodeType": "ExpressionStatement", - "src": "988:32:0" - } - ] - }, - "documentation": null, - "id": 85, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 76, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 75, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 85, - "src": "951:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 74, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "951:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "950:17:0" - }, - "returnParameters": { - "id": 77, - "nodeType": "ParameterList", - "parameters": [], - "src": "977:0:0" - }, - "scope": 86, - "src": "926:102:0", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 87, - "src": "219:812:0" - } - ], - "src": "0:1033:0" - }, - "id": 0 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoFees.sol", - "exportedSymbols": { - "AlgoFees": [ - 591 - ] - }, - "id": 592, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 88, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:1" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 89, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 1097, - "src": "26:195:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 90, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 1242, - "src": "223:198:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "file": "./IAlgoMiner.sol", - "id": 91, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 769, - "src": "425:26:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "file": "./ERC20TokenHolder.sol", - "id": 92, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 736, - "src": "453:32:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol", - "file": "./AlgoSystemRole.sol", - "id": 93, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 679, - "src": "487:30:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "file": "./AlgoCoreTeamRole.sol", - "id": 94, - "nodeType": "ImportDirective", - "scope": 592, - "sourceUnit": 87, - "src": "519:32:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 95, - "name": "ERC20TokenHolder", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 735, - "src": "576:16:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$735", - "typeString": "contract ERC20TokenHolder" - } - }, - "id": 96, - "nodeType": "InheritanceSpecifier", - "src": "576:16:1" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 97, - "name": "AlgoSystemRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 678, - "src": "594:14:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoSystemRole_$678", - "typeString": "contract AlgoSystemRole" - } - }, - "id": 98, - "nodeType": "InheritanceSpecifier", - "src": "594:14:1" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 99, - "name": "AlgoCoreTeamRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 86, - "src": "610:16:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCoreTeamRole_$86", - "typeString": "contract AlgoCoreTeamRole" - } - }, - "id": 100, - "nodeType": "InheritanceSpecifier", - "src": "610:16:1" - } - ], - "contractDependencies": [ - 735, - 805, - 678, - 86 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 591, - "linearizedBaseContracts": [ - 591, - 86, - 678, - 735, - 805 - ], - "name": "AlgoFees", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 103, - "libraryName": { - "contractScope": null, - "id": 101, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1241, - "src": "640:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "634:27:1", - "typeName": { - "contractScope": null, - "id": 102, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "654:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - } - }, - { - "constant": true, - "id": 106, - "name": "CAT_0_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "669:51:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 104, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "669:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "31", - "id": 105, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "719:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 109, - "name": "CAT_1_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "727:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 107, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "727:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3130", - "id": 108, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "777:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 112, - "name": "CAT_2_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "786:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 110, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "786:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3230", - "id": 111, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "836:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_20_by_1", - "typeString": "int_const 20" - }, - "value": "20" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 115, - "name": "CAT_3_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "845:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 113, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "845:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3330", - "id": 114, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "895:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_30_by_1", - "typeString": "int_const 30" - }, - "value": "30" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 118, - "name": "CAT_4_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "904:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 116, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "904:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3430", - "id": 117, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "954:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_40_by_1", - "typeString": "int_const 40" - }, - "value": "40" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 121, - "name": "CAT_5_VALUE_PROPORTION", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "963:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 119, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "963:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "3530", - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1013:2:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_50_by_1", - "typeString": "int_const 50" - }, - "value": "50" - }, - "visibility": "private" - }, - { - "constant": false, - "id": 124, - "name": "_miners", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "1024:25:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 122, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1024:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 123, - "length": null, - "nodeType": "ArrayTypeName", - "src": "1024:9:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 128, - "name": "_minersByAddress", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "1056:52:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 127, - "keyType": { - "id": 125, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1064:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1056:27:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 126, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1075:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 148, - "nodeType": "Block", - "src": "1261:91:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 144, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1293:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 143, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1285:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 145, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1285:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "expression": { - "argumentTypes": null, - "id": 140, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "1272:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1272:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) returns (uint256)" - } - }, - "id": 146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1272:24:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 147, - "nodeType": "ExpressionStatement", - "src": "1272:24:1" - } - ] - }, - "documentation": null, - "id": 149, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 133, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 130, - "src": "1177:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 134, - "modifierName": { - "argumentTypes": null, - "id": 132, - "name": "ERC20TokenHolder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 735, - "src": "1160:16:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20TokenHolder_$735_$", - "typeString": "type(contract ERC20TokenHolder)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1160:30:1" - }, - { - "arguments": [], - "id": 136, - "modifierName": { - "argumentTypes": null, - "id": 135, - "name": "AlgoSystemRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 678, - "src": "1200:14:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoSystemRole_$678_$", - "typeString": "type(contract AlgoSystemRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1200:16:1" - }, - { - "arguments": [], - "id": 138, - "modifierName": { - "argumentTypes": null, - "id": 137, - "name": "AlgoCoreTeamRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 86, - "src": "1226:16:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoCoreTeamRole_$86_$", - "typeString": "type(contract AlgoCoreTeamRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1226:18:1" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 149, - "src": "1129:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 129, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1129:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1128:22:1" - }, - "returnParameters": { - "id": 139, - "nodeType": "ParameterList", - "parameters": [], - "src": "1261:0:1" - }, - "scope": 591, - "src": "1117:235:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 210, - "nodeType": "Block", - "src": "1439:420:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 159, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "1458:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 160, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1458:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030", - "id": 161, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1475:4:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000_by_1", - "typeString": "int_const 1000" - }, - "value": "1000" - }, - "src": "1458:21:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 158, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1450:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1450:30:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 164, - "nodeType": "ExpressionStatement", - "src": "1450:30:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 166, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "1499:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 168, - "indexExpression": { - "argumentTypes": null, - "id": 167, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 151, - "src": "1516:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1499:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 169, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1533:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1499:35:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 165, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1491:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1491:44:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 172, - "nodeType": "ExpressionStatement", - "src": "1491:44:1" - }, - { - "assignments": [ - 174 - ], - "declarations": [ - { - "constant": false, - "id": 174, - "name": "algoMiner", - "nodeType": "VariableDeclaration", - "scope": 210, - "src": "1548:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - }, - "typeName": { - "contractScope": null, - "id": 173, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 768, - "src": "1548:10:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 178, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 176, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 151, - "src": "1582:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 175, - "name": "IAlgoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 768, - "src": "1571:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAlgoMiner_$768_$", - "typeString": "type(contract IAlgoMiner)" - } - }, - "id": 177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1571:24:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1548:47:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 180, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 174, - "src": "1624:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "isAlgoMiner", - "nodeType": "MemberAccess", - "referencedDeclaration": 742, - "src": "1624:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_pure$__$returns$_t_bool_$", - "typeString": "function () pure external returns (bool)" - } - }, - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1624:23:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 179, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1616:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 183, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1616:32:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 184, - "nodeType": "ExpressionStatement", - "src": "1616:32:1" - }, - { - "assignments": [ - 186 - ], - "declarations": [ - { - "constant": false, - "id": 186, - "name": "minerCategory", - "nodeType": "VariableDeclaration", - "scope": 210, - "src": "1669:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 185, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1669:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 190, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 187, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 174, - "src": "1691:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getCategory", - "nodeType": "MemberAccess", - "referencedDeclaration": 752, - "src": "1691:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1691:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1669:45:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 192, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 186, - "src": "1735:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1752:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "1735:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 191, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1727:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1727:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 196, - "nodeType": "ExpressionStatement", - "src": "1727:27:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 197, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "1767:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 199, - "indexExpression": { - "argumentTypes": null, - "id": 198, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 151, - "src": "1784:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1767:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 200, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "1800:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 201, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1800:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1767:47:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 203, - "nodeType": "ExpressionStatement", - "src": "1767:47:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 207, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 151, - "src": "1838:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 204, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "1825:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "push", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1825:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) returns (uint256)" - } - }, - "id": 208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1825:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 209, - "nodeType": "ExpressionStatement", - "src": "1825:26:1" - } - ] - }, - "documentation": null, - "id": 211, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 154, - "modifierName": { - "argumentTypes": null, - "id": 153, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "1412:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1412:13:1" - }, - { - "arguments": null, - "id": 156, - "modifierName": { - "argumentTypes": null, - "id": 155, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "1426:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1426:12:1" - } - ], - "name": "registerMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 152, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 151, - "name": "minerAddress", - "nodeType": "VariableDeclaration", - "scope": 211, - "src": "1383:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 150, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1383:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1382:22:1" - }, - "returnParameters": { - "id": 157, - "nodeType": "ParameterList", - "parameters": [], - "src": "1439:0:1" - }, - "scope": 591, - "src": "1360:499:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 275, - "nodeType": "Block", - "src": "1948:593:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 221, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "1967:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 222, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1967:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1984:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1967:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 220, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1959:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1959:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 226, - "nodeType": "ExpressionStatement", - "src": "1959:27:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 227, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2002:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 228, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2002:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2020:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "2002:19:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 273, - "nodeType": "Block", - "src": "2198:336:1", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 242, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "2230:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 244, - "indexExpression": { - "argumentTypes": null, - "id": 243, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "2247:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2230:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 245, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2264:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 246, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2264:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2230:48:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 262, - "nodeType": "IfStatement", - "src": "2227:214:1", - "trueBody": { - "id": 261, - "nodeType": "Block", - "src": "2280:161:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 248, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2356:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 252, - "indexExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 249, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "2364:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 251, - "indexExpression": { - "argumentTypes": null, - "id": 250, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "2381:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2364:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2356:39:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 253, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2398:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 258, - "indexExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 254, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2406:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 255, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2406:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 256, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2423:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2406:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2398:27:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2356:69:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 260, - "nodeType": "ExpressionStatement", - "src": "2356:69:1" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 263, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2457:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "pop", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2457:11:1", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2457:13:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 267, - "nodeType": "ExpressionStatement", - "src": "2457:13:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 271, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "2485:37:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 268, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "2492:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 270, - "indexExpression": { - "argumentTypes": null, - "id": 269, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "2509:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2492:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 272, - "nodeType": "ExpressionStatement", - "src": "2485:37:1" - } - ] - }, - "id": 274, - "nodeType": "IfStatement", - "src": "1999:535:1", - "trueBody": { - "id": 241, - "nodeType": "Block", - "src": "2023:169:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 231, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2105:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "pop", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2105:11:1", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypop_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2105:13:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 235, - "nodeType": "ExpressionStatement", - "src": "2105:13:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "2133:37:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 236, - "name": "_minersByAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 128, - "src": "2140:16:1", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 238, - "indexExpression": { - "argumentTypes": null, - "id": 237, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "2157:12:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2140:30:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 240, - "nodeType": "ExpressionStatement", - "src": "2133:37:1" - } - ] - } - } - ] - }, - "documentation": null, - "id": 276, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 216, - "modifierName": { - "argumentTypes": null, - "id": 215, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "1921:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1921:13:1" - }, - { - "arguments": null, - "id": 218, - "modifierName": { - "argumentTypes": null, - "id": 217, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "1935:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1935:12:1" - } - ], - "name": "unregisterMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 214, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 213, - "name": "minerAddress", - "nodeType": "VariableDeclaration", - "scope": 276, - "src": "1892:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 212, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1892:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1891:22:1" - }, - "returnParameters": { - "id": 219, - "nodeType": "ParameterList", - "parameters": [], - "src": "1948:0:1" - }, - "scope": 591, - "src": "1867:674:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 555, - "nodeType": "Block", - "src": "2597:2370:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 284, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2616:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 285, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2616:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 286, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2633:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2616:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 283, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "2608:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2608:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 289, - "nodeType": "ExpressionStatement", - "src": "2608:27:1" - }, - { - "assignments": [ - 291 - ], - "declarations": [ - { - "constant": false, - "id": 291, - "name": "currentFeesBalance", - "nodeType": "VariableDeclaration", - "scope": 555, - "src": "2648:26:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 290, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2648:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 298, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 295, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1288, - "src": "2702:4:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoFees_$591", - "typeString": "contract AlgoFees" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AlgoFees_$591", - "typeString": "contract AlgoFees" - } - ], - "id": 294, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2694:7:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2694:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 292, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 690, - "src": "2677:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1070, - "src": "2677:16:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2677:31:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2648:60:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 300, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "2723:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 301, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2744:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2723:22:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 299, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "2715:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 303, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2715:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 304, - "nodeType": "ExpressionStatement", - "src": "2715:31:1" - }, - { - "assignments": [ - 309 - ], - "declarations": [ - { - "constant": false, - "id": 309, - "name": "miners", - "nodeType": "VariableDeclaration", - "scope": 555, - "src": "2830:24:1", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6]" - }, - "typeName": { - "baseType": { - "id": 307, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2830:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 308, - "length": { - "argumentTypes": null, - "hexValue": "36", - "id": 306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2838:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - }, - "value": "6" - }, - "nodeType": "ArrayTypeName", - "src": "2830:10:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_storage_ptr", - "typeString": "uint256[6]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 310, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "2830:24:1" - }, - { - "assignments": [ - 312 - ], - "declarations": [ - { - "constant": false, - "id": 312, - "name": "minerCount", - "nodeType": "VariableDeclaration", - "scope": 555, - "src": "2865:18:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 311, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2865:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 315, - "initialValue": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 313, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "2886:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 314, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2886:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2865:35:1" - }, - { - "body": { - "id": 406, - "nodeType": "Block", - "src": "2953:657:1", - "statements": [ - { - "assignments": [ - 327 - ], - "declarations": [ - { - "constant": false, - "id": 327, - "name": "algoMiner", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "2968:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - }, - "typeName": { - "contractScope": null, - "id": 326, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 768, - "src": "2968:10:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 333, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 329, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "3002:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 331, - "indexExpression": { - "argumentTypes": null, - "id": 330, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 317, - "src": "3010:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3002:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 328, - "name": "IAlgoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 768, - "src": "2991:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAlgoMiner_$768_$", - "typeString": "type(contract IAlgoMiner)" - } - }, - "id": 332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2991:22:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2968:45:1" - }, - { - "condition": { - "argumentTypes": null, - "id": 337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3033:21:1", - "subExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 334, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 327, - "src": "3034:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "isMining", - "nodeType": "MemberAccess", - "referencedDeclaration": 767, - "src": "3034:18:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", - "typeString": "function () view external returns (bool)" - } - }, - "id": 336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3034:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 339, - "nodeType": "IfStatement", - "src": "3030:34:1", - "trueBody": { - "id": 338, - "nodeType": "Continue", - "src": "3056:8:1" - } - }, - { - "assignments": [ - 341 - ], - "declarations": [ - { - "constant": false, - "id": 341, - "name": "minerCategory", - "nodeType": "VariableDeclaration", - "scope": 406, - "src": "3081:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 340, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3081:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 345, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 342, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 327, - "src": "3103:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getCategory", - "nodeType": "MemberAccess", - "referencedDeclaration": 752, - "src": "3103:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3103:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3081:45:1" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 346, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3146:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3163:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3146:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 355, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3221:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 356, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3238:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3221:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 364, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3296:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 365, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3313:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "3296:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 373, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3371:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 374, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3388:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "3371:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 382, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3446:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 383, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3463:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "3446:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 391, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "3521:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 392, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3538:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "3521:18:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 400, - "nodeType": "IfStatement", - "src": "3518:69:1", - "trueBody": { - "id": 399, - "nodeType": "Block", - "src": "3541:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3560:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 394, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3560:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 396, - "indexExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3567:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3560:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 398, - "nodeType": "ExpressionStatement", - "src": "3560:11:1" - } - ] - } - }, - "id": 401, - "nodeType": "IfStatement", - "src": "3443:144:1", - "trueBody": { - "id": 390, - "nodeType": "Block", - "src": "3466:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3485:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 385, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3485:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 387, - "indexExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 386, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3492:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3485:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 389, - "nodeType": "ExpressionStatement", - "src": "3485:11:1" - } - ] - } - }, - "id": 402, - "nodeType": "IfStatement", - "src": "3368:219:1", - "trueBody": { - "id": 381, - "nodeType": "Block", - "src": "3391:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3410:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 376, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3410:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 378, - "indexExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 377, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3417:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3410:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 380, - "nodeType": "ExpressionStatement", - "src": "3410:11:1" - } - ] - } - }, - "id": 403, - "nodeType": "IfStatement", - "src": "3293:294:1", - "trueBody": { - "id": 372, - "nodeType": "Block", - "src": "3316:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3335:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 367, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3335:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 369, - "indexExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 368, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3342:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3335:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 371, - "nodeType": "ExpressionStatement", - "src": "3335:11:1" - } - ] - } - }, - "id": 404, - "nodeType": "IfStatement", - "src": "3218:369:1", - "trueBody": { - "id": 363, - "nodeType": "Block", - "src": "3241:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3260:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 358, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3260:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 360, - "indexExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 359, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3267:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3260:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 362, - "nodeType": "ExpressionStatement", - "src": "3260:11:1" - } - ] - } - }, - "id": 405, - "nodeType": "IfStatement", - "src": "3143:444:1", - "trueBody": { - "id": 354, - "nodeType": "Block", - "src": "3166:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "3185:11:1", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 349, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3185:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 351, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 350, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3192:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3185:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 353, - "nodeType": "ExpressionStatement", - "src": "3185:11:1" - } - ] - } - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 320, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 317, - "src": "2932:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 321, - "name": "minerCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 312, - "src": "2936:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2932:14:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 407, - "initializationExpression": { - "assignments": [ - 317 - ], - "declarations": [ - { - "constant": false, - "id": 317, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 407, - "src": "2917:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 316, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2917:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 319, - "initialValue": { - "argumentTypes": null, - "hexValue": "31", - "id": 318, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2929:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "VariableDeclarationStatement", - "src": "2917:13:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "2948:3:1", - "subExpression": { - "argumentTypes": null, - "id": 323, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 317, - "src": "2948:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 325, - "nodeType": "ExpressionStatement", - "src": "2948:3:1" - }, - "nodeType": "ForStatement", - "src": "2913:697:1" - }, - { - "assignments": [ - 409 - ], - "declarations": [ - { - "constant": false, - "id": 409, - "name": "totalProportion", - "nodeType": "VariableDeclaration", - "scope": 555, - "src": "3698:23:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 408, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3698:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 445, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 410, - "name": "CAT_0_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 106, - "src": "3724:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 411, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3749:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 413, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 412, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3756:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3749:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 415, - "name": "CAT_1_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 109, - "src": "3774:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 416, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3799:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 418, - "indexExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 417, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3806:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3799:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3774:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:84:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 421, - "name": "CAT_2_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "3824:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 422, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3849:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 424, - "indexExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3856:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3849:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3824:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:134:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 427, - "name": "CAT_3_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 115, - "src": "3874:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 428, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3899:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 430, - "indexExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 429, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3906:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3899:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3874:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:184:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 433, - "name": "CAT_4_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "3924:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 434, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3949:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 436, - "indexExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 435, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3956:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3949:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3924:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:234:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 439, - "name": "CAT_5_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 121, - "src": "3974:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 440, - "name": "miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 309, - "src": "3999:6:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 442, - "indexExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 441, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4006:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3999:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3974:34:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3724:284:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3698:310:1" - }, - { - "assignments": [ - 450 - ], - "declarations": [ - { - "constant": false, - "id": 450, - "name": "feePerMiner", - "nodeType": "VariableDeclaration", - "scope": 555, - "src": "4029:29:1", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6]" - }, - "typeName": { - "baseType": { - "id": 448, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4029:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 449, - "length": { - "argumentTypes": null, - "hexValue": "36", - "id": 447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4037:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - }, - "value": "6" - }, - "nodeType": "ArrayTypeName", - "src": "4029:10:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_storage_ptr", - "typeString": "uint256[6]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 451, - "initialValue": null, - "nodeType": "VariableDeclarationStatement", - "src": "4029:29:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 452, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4071:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 454, - "indexExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 453, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4083:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4071:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 455, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4088:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 456, - "name": "CAT_0_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 106, - "src": "4109:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4088:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 458, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4134:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4088:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4071:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 461, - "nodeType": "ExpressionStatement", - "src": "4071:78:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 462, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4160:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 464, - "indexExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 463, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4172:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4160:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 469, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 465, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4177:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 466, - "name": "CAT_1_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 109, - "src": "4198:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4177:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 468, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4223:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4177:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4160:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 471, - "nodeType": "ExpressionStatement", - "src": "4160:78:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 472, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4249:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 474, - "indexExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4261:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4249:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 475, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4266:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 476, - "name": "CAT_2_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "4287:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4266:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 478, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4312:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4266:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4249:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 481, - "nodeType": "ExpressionStatement", - "src": "4249:78:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 482, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4338:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 484, - "indexExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 483, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4350:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4338:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 485, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4355:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 486, - "name": "CAT_3_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 115, - "src": "4376:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4355:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 488, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4401:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4355:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4338:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 491, - "nodeType": "ExpressionStatement", - "src": "4338:78:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 492, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4427:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 494, - "indexExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4439:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4427:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 495, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4444:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 496, - "name": "CAT_4_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 118, - "src": "4465:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4444:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 498, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4490:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4444:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4427:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 501, - "nodeType": "ExpressionStatement", - "src": "4427:78:1" - }, - { - "expression": { - "argumentTypes": null, - "id": 510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 502, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4516:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 504, - "indexExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 503, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4528:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4516:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 505, - "name": "currentFeesBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 291, - "src": "4533:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 506, - "name": "CAT_5_VALUE_PROPORTION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 121, - "src": "4554:22:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4533:43:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 508, - "name": "totalProportion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "4579:15:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4533:61:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4516:78:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 511, - "nodeType": "ExpressionStatement", - "src": "4516:78:1" - }, - { - "body": { - "id": 553, - "nodeType": "Block", - "src": "4698:262:1", - "statements": [ - { - "assignments": [ - 523 - ], - "declarations": [ - { - "constant": false, - "id": 523, - "name": "algoMiner", - "nodeType": "VariableDeclaration", - "scope": 553, - "src": "4713:20:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - }, - "typeName": { - "contractScope": null, - "id": 522, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 768, - "src": "4713:10:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 529, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 525, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "4747:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 527, - "indexExpression": { - "argumentTypes": null, - "id": 526, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 513, - "src": "4755:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4747:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 524, - "name": "IAlgoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 768, - "src": "4736:10:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAlgoMiner_$768_$", - "typeString": "type(contract IAlgoMiner)" - } - }, - "id": 528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4736:22:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4713:45:1" - }, - { - "condition": { - "argumentTypes": null, - "id": 533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4778:21:1", - "subExpression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 530, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "4779:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "isMining", - "nodeType": "MemberAccess", - "referencedDeclaration": 767, - "src": "4779:18:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", - "typeString": "function () view external returns (bool)" - } - }, - "id": 532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4779:20:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 535, - "nodeType": "IfStatement", - "src": "4775:34:1", - "trueBody": { - "id": 534, - "nodeType": "Continue", - "src": "4801:8:1" - } - }, - { - "assignments": [ - 537 - ], - "declarations": [ - { - "constant": false, - "id": 537, - "name": "minerCategory", - "nodeType": "VariableDeclaration", - "scope": 553, - "src": "4826:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 536, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4826:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 541, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 538, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "4848:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getCategory", - "nodeType": "MemberAccess", - "referencedDeclaration": 752, - "src": "4848:21:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4848:23:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4826:45:1" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 545, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 523, - "src": "4899:9:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$768", - "typeString": "contract IAlgoMiner" - } - }, - "id": 546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getMiner", - "nodeType": "MemberAccess", - "referencedDeclaration": 757, - "src": "4899:18:1", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4899:20:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 548, - "name": "feePerMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 450, - "src": "4921:11:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$6_memory_ptr", - "typeString": "uint256[6] memory" - } - }, - "id": 550, - "indexExpression": { - "argumentTypes": null, - "id": 549, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 537, - "src": "4933:13:1", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4921:26:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 542, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 690, - "src": "4879:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1121, - "src": "4879:19:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1096_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1096_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4879:69:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 552, - "nodeType": "ExpressionStatement", - "src": "4879:69:1" - } - ] - }, - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 516, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 513, - "src": "4677:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "argumentTypes": null, - "id": 517, - "name": "minerCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 312, - "src": "4681:10:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4677:14:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 554, - "initializationExpression": { - "assignments": [ - 513 - ], - "declarations": [ - { - "constant": false, - "id": 513, - "name": "i", - "nodeType": "VariableDeclaration", - "scope": 554, - "src": "4662:9:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 512, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4662:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 515, - "initialValue": { - "argumentTypes": null, - "hexValue": "31", - "id": 514, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4674:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "VariableDeclarationStatement", - "src": "4662:13:1" - }, - "loopExpression": { - "expression": { - "argumentTypes": null, - "id": 520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "4693:3:1", - "subExpression": { - "argumentTypes": null, - "id": 519, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 513, - "src": "4693:1:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 521, - "nodeType": "ExpressionStatement", - "src": "4693:3:1" - }, - "nodeType": "ForStatement", - "src": "4658:302:1" - } - ] - }, - "documentation": null, - "id": 556, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 279, - "modifierName": { - "argumentTypes": null, - "id": 278, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "2572:13:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2572:13:1" - }, - { - "arguments": null, - "id": 281, - "modifierName": { - "argumentTypes": null, - "id": 280, - "name": "onlySystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 619, - "src": "2586:10:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2586:10:1" - } - ], - "name": "mine", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 277, - "nodeType": "ParameterList", - "parameters": [], - "src": "2562:2:1" - }, - "returnParameters": { - "id": 282, - "nodeType": "ParameterList", - "parameters": [], - "src": "2597:0:1" - }, - "scope": 591, - "src": "2549:2418:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 564, - "nodeType": "Block", - "src": "5016:31:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 561, - "name": "_terminate", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 734 - ], - "referencedDeclaration": 734, - "src": "5027:10:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5027:12:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 563, - "nodeType": "ExpressionStatement", - "src": "5027:12:1" - } - ] - }, - "documentation": null, - "id": 565, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 559, - "modifierName": { - "argumentTypes": null, - "id": 558, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 27, - "src": "5003:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "5003:12:1" - } - ], - "name": "terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 557, - "nodeType": "ParameterList", - "parameters": [], - "src": "4993:2:1" - }, - "returnParameters": { - "id": 560, - "nodeType": "ParameterList", - "parameters": [], - "src": "5016:0:1" - }, - "scope": 591, - "src": "4975:72:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 575, - "nodeType": "Block", - "src": "5110:44:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 573, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 570, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "5128:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 571, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5128:14:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 572, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5145:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5128:18:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 569, - "id": 574, - "nodeType": "Return", - "src": "5121:25:1" - } - ] - }, - "documentation": null, - "id": 576, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getMinerCount", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 566, - "nodeType": "ParameterList", - "parameters": [], - "src": "5077:2:1" - }, - "returnParameters": { - "id": 569, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 568, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 576, - "src": "5101:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 567, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5101:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5100:9:1" - }, - "scope": 591, - "src": "5055:99:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 589, - "nodeType": "Block", - "src": "5232:44:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 583, - "name": "_miners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 124, - "src": "5250:7:1", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 587, - "indexExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 584, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 578, - "src": "5258:5:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5266:1:1", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5258:9:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5250:18:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 582, - "id": 588, - "nodeType": "Return", - "src": "5243:25:1" - } - ] - }, - "documentation": null, - "id": 590, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getMinerByIndex", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 579, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 578, - "name": "index", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "5187:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 577, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5187:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5186:15:1" - }, - "returnParameters": { - "id": 582, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 581, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "5223:7:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 580, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5223:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5222:9:1" - }, - "scope": 591, - "src": "5162:114:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 592, - "src": "555:4724:1" - } - ], - "src": "0:5279:1" - }, - "id": 1 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol", - "exportedSymbols": { - "AlgoSystemRole": [ - 678 - ] - }, - "id": 679, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 593, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:2" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 594, - "nodeType": "ImportDirective", - "scope": 679, - "sourceUnit": 900, - "src": "26:189:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 678, - "linearizedBaseContracts": [ - 678 - ], - "name": "AlgoSystemRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 597, - "libraryName": { - "contractScope": null, - "id": 595, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 899, - "src": "256:5:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$899", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "250:27:2", - "typeName": { - "contractScope": null, - "id": 596, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "266:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 599, - "name": "_systemMembers", - "nodeType": "VariableDeclaration", - "scope": 678, - "src": "285:33:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 598, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "285:10:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 607, - "nodeType": "Block", - "src": "351:41:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 603, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "373:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "373:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 602, - "name": "_addSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 665, - "src": "362:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "362:22:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 606, - "nodeType": "ExpressionStatement", - "src": "362:22:2" - } - ] - }, - "documentation": null, - "id": 608, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 600, - "nodeType": "ParameterList", - "parameters": [], - "src": "339:2:2" - }, - "returnParameters": { - "id": 601, - "nodeType": "ParameterList", - "parameters": [], - "src": "351:0:2" - }, - "scope": 678, - "src": "327:65:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 618, - "nodeType": "Block", - "src": "422:60:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 612, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "450:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "450:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 611, - "name": "isSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 632, - "src": "441:8:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "441:20:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 610, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "433:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "433:29:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 616, - "nodeType": "ExpressionStatement", - "src": "433:29:2" - }, - { - "id": 617, - "nodeType": "PlaceholderStatement", - "src": "473:1:2" - } - ] - }, - "documentation": null, - "id": 619, - "name": "onlySystem", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 609, - "nodeType": "ParameterList", - "parameters": [], - "src": "419:2:2" - }, - "src": "400:82:2", - "visibility": "internal" - }, - { - "body": { - "id": 631, - "nodeType": "Block", - "src": "552:53:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 628, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 621, - "src": "589:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 626, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 599, - "src": "570:14:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 627, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 898, - "src": "570:18:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 629, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "570:27:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 625, - "id": 630, - "nodeType": "Return", - "src": "563:34:2" - } - ] - }, - "documentation": null, - "id": 632, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 622, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 621, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 632, - "src": "508:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 620, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "508:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "507:17:2" - }, - "returnParameters": { - "id": 625, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 624, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 632, - "src": "546:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 623, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "546:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "545:6:2" - }, - "scope": 678, - "src": "490:115:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 643, - "nodeType": "Block", - "src": "667:38:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 640, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 634, - "src": "689:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 639, - "name": "_addSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 665, - "src": "678:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "678:19:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 642, - "nodeType": "ExpressionStatement", - "src": "678:19:2" - } - ] - }, - "documentation": null, - "id": 644, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 637, - "modifierName": { - "argumentTypes": null, - "id": 636, - "name": "onlySystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 619, - "src": "656:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "656:10:2" - } - ], - "name": "addSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 635, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 634, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 644, - "src": "632:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 633, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "631:17:2" - }, - "returnParameters": { - "id": 638, - "nodeType": "ParameterList", - "parameters": [], - "src": "667:0:2" - }, - "scope": 678, - "src": "613:92:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 652, - "nodeType": "Block", - "src": "746:44:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 648, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "771:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "771:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 647, - "name": "_removeSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 677, - "src": "757:13:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "757:25:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 651, - "nodeType": "ExpressionStatement", - "src": "757:25:2" - } - ] - }, - "documentation": null, - "id": 653, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 645, - "nodeType": "ParameterList", - "parameters": [], - "src": "736:2:2" - }, - "returnParameters": { - "id": 646, - "nodeType": "ParameterList", - "parameters": [], - "src": "746:0:2" - }, - "scope": 678, - "src": "713:77:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 664, - "nodeType": "Block", - "src": "844:46:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 661, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 655, - "src": "874:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 658, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 599, - "src": "855:14:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 660, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 844, - "src": "855:18:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 662, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "855:27:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 663, - "nodeType": "ExpressionStatement", - "src": "855:27:2" - } - ] - }, - "documentation": null, - "id": 665, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 655, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 665, - "src": "818:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 654, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "817:17:2" - }, - "returnParameters": { - "id": 657, - "nodeType": "ParameterList", - "parameters": [], - "src": "844:0:2" - }, - "scope": 678, - "src": "798:92:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 676, - "nodeType": "Block", - "src": "947:49:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 673, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 667, - "src": "980:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 670, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 599, - "src": "958:14:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 672, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 875, - "src": "958:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$812_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "958:30:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 675, - "nodeType": "ExpressionStatement", - "src": "958:30:2" - } - ] - }, - "documentation": null, - "id": 677, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 668, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 667, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 677, - "src": "921:15:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 666, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "921:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "920:17:2" - }, - "returnParameters": { - "id": 669, - "nodeType": "ParameterList", - "parameters": [], - "src": "947:0:2" - }, - "scope": 678, - "src": "898:98:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 679, - "src": "219:780:2" - } - ], - "src": "0:1001:2" - }, - "id": 2 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "exportedSymbols": { - "ERC20TokenHolder": [ - 735 - ] - }, - "id": 736, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 680, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:3" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 681, - "nodeType": "ImportDirective", - "scope": 736, - "sourceUnit": 1097, - "src": "26:195:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 682, - "nodeType": "ImportDirective", - "scope": 736, - "sourceUnit": 1242, - "src": "223:198:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "file": "./Terminable.sol", - "id": 683, - "nodeType": "ImportDirective", - "scope": 736, - "sourceUnit": 806, - "src": "425:26:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 684, - "name": "Terminable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 805, - "src": "484:10:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Terminable_$805", - "typeString": "contract Terminable" - } - }, - "id": 685, - "nodeType": "InheritanceSpecifier", - "src": "484:10:3" - } - ], - "contractDependencies": [ - 805 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 735, - "linearizedBaseContracts": [ - 735, - 805 - ], - "name": "ERC20TokenHolder", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 688, - "libraryName": { - "contractScope": null, - "id": 686, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1241, - "src": "508:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "502:27:3", - "typeName": { - "contractScope": null, - "id": 687, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "522:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - } - }, - { - "constant": false, - "id": 690, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 735, - "src": "537:22:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 689, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "537:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 703, - "nodeType": "Block", - "src": "624:48:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 697, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 690, - "src": "635:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 699, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 692, - "src": "651:12:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 698, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1096, - "src": "644:6:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$1096_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "644:20:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "src": "635:29:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 702, - "nodeType": "ExpressionStatement", - "src": "635:29:3" - } - ] - }, - "documentation": null, - "id": 704, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [], - "id": 695, - "modifierName": { - "argumentTypes": null, - "id": 694, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "602:10:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$805_$", - "typeString": "type(contract Terminable)" - } - }, - "nodeType": "ModifierInvocation", - "src": "602:12:3" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 693, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 692, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "580:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 691, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "580:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "579:22:3" - }, - "returnParameters": { - "id": 696, - "nodeType": "ParameterList", - "parameters": [], - "src": "624:0:3" - }, - "scope": 735, - "src": "568:104:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 733, - "nodeType": "Block", - "src": "711:214:3", - "statements": [ - { - "assignments": [ - 708 - ], - "declarations": [ - { - "constant": false, - "id": 708, - "name": "currentBalance", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "722:22:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 707, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "722:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 715, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 712, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1284, - "src": "772:4:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$735", - "typeString": "contract ERC20TokenHolder" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$735", - "typeString": "contract ERC20TokenHolder" - } - ], - "id": 711, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "764:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 713, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "764:13:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 709, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 690, - "src": "747:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 710, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1070, - "src": "747:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "747:31:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "722:56:3" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 716, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "792:14:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "809:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "792:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 727, - "nodeType": "IfStatement", - "src": "789:95:3", - "trueBody": { - "id": 726, - "nodeType": "Block", - "src": "812:72:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 722, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 772, - "src": "847:8:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 723, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 708, - "src": "857:14:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 719, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 690, - "src": "827:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 721, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1121, - "src": "827:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1096_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1096_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "827:45:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 725, - "nodeType": "ExpressionStatement", - "src": "827:45:3" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 728, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "894:10:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$805_$", - "typeString": "type(contract Terminable)" - } - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "_terminate", - "nodeType": "MemberAccess", - "referencedDeclaration": 804, - "src": "894:21:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 731, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "894:23:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 732, - "nodeType": "ExpressionStatement", - "src": "894:23:3" - } - ] - }, - "documentation": null, - "id": 734, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 705, - "nodeType": "ParameterList", - "parameters": [], - "src": "699:2:3" - }, - "returnParameters": { - "id": 706, - "nodeType": "ParameterList", - "parameters": [], - "src": "711:0:3" - }, - "scope": 735, - "src": "680:245:3", - "stateMutability": "nonpayable", - "superFunction": 804, - "visibility": "internal" - } - ], - "scope": 736, - "src": "455:473:3" - } - ], - "src": "0:928:3" - }, - "id": 3 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "exportedSymbols": { - "IAlgoMiner": [ - 768 - ] - }, - "id": 769, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 737, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": false, - "id": 768, - "linearizedBaseContracts": [ - 768 - ], - "name": "IAlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 742, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 738, - "nodeType": "ParameterList", - "parameters": [], - "src": "73:2:4" - }, - "returnParameters": { - "id": 741, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 740, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 742, - "src": "97:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 739, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "97:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "96:6:4" - }, - "scope": 768, - "src": "53:50:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 747, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMinerType", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 743, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:2:4" - }, - "returnParameters": { - "id": 746, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 745, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 747, - "src": "154:5:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 744, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "154:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "153:7:4" - }, - "scope": 768, - "src": "109:52:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 752, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 748, - "nodeType": "ParameterList", - "parameters": [], - "src": "187:2:4" - }, - "returnParameters": { - "id": 751, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 750, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 752, - "src": "211:5:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 749, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "211:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "210:7:4" - }, - "scope": 768, - "src": "167:51:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 757, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 753, - "nodeType": "ParameterList", - "parameters": [], - "src": "241:2:4" - }, - "returnParameters": { - "id": 756, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 755, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 757, - "src": "265:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 754, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "265:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "264:9:4" - }, - "scope": 768, - "src": "224:50:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 762, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getReferral", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 758, - "nodeType": "ParameterList", - "parameters": [], - "src": "300:2:4" - }, - "returnParameters": { - "id": 761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 760, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 762, - "src": "324:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "324:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "323:9:4" - }, - "scope": 768, - "src": "280:53:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 767, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 763, - "nodeType": "ParameterList", - "parameters": [], - "src": "356:2:4" - }, - "returnParameters": { - "id": 766, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 765, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 767, - "src": "380:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 764, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "380:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "379:6:4" - }, - "scope": 768, - "src": "339:47:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 769, - "src": "26:363:4" - } - ], - "src": "0:389:4" - }, - "id": 4 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "exportedSymbols": { - "Terminable": [ - 805 - ] - }, - "id": 806, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 770, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:5" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 805, - "linearizedBaseContracts": [ - 805 - ], - "name": "Terminable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 772, - "name": "_creator", - "nodeType": "VariableDeclaration", - "scope": 805, - "src": "55:25:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 771, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 774, - "name": "_terminated", - "nodeType": "VariableDeclaration", - "scope": 805, - "src": "87:25:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 773, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "87:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 786, - "nodeType": "Block", - "src": "144:70:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 777, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 772, - "src": "155:8:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 778, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1256, - "src": "166:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "166:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "155:21:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 781, - "nodeType": "ExpressionStatement", - "src": "155:21:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 782, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 774, - "src": "187:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 783, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "201:5:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "187:19:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 785, - "nodeType": "ExpressionStatement", - "src": "187:19:5" - } - ] - }, - "documentation": null, - "id": 787, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 775, - "nodeType": "ParameterList", - "parameters": [], - "src": "132:2:5" - }, - "returnParameters": { - "id": 776, - "nodeType": "ParameterList", - "parameters": [], - "src": "144:0:5" - }, - "scope": 805, - "src": "121:93:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 795, - "nodeType": "Block", - "src": "247:52:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "266:12:5", - "subExpression": { - "argumentTypes": null, - "id": 790, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 774, - "src": "267:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 789, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "258:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 792, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "258:21:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 793, - "nodeType": "ExpressionStatement", - "src": "258:21:5" - }, - { - "id": 794, - "nodeType": "PlaceholderStatement", - "src": "290:1:5" - } - ] - }, - "documentation": null, - "id": 796, - "name": "notTerminated", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 788, - "nodeType": "ParameterList", - "parameters": [], - "src": "244:2:5" - }, - "src": "222:77:5", - "visibility": "internal" - }, - { - "body": { - "id": 803, - "nodeType": "Block", - "src": "338:37:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 799, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 774, - "src": "349:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 800, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "363:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "349:18:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 802, - "nodeType": "ExpressionStatement", - "src": "349:18:5" - } - ] - }, - "documentation": null, - "id": 804, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 797, - "nodeType": "ParameterList", - "parameters": [], - "src": "326:2:5" - }, - "returnParameters": { - "id": 798, - "nodeType": "ParameterList", - "parameters": [], - "src": "338:0:5" - }, - "scope": 805, - "src": "307:68:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 806, - "src": "26:352:5" - } - ], - "src": "0:378:5" - }, - "id": 5 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 899 - ] - }, - "id": 900, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 807, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:6" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 899, - "linearizedBaseContracts": [ - 899 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 812, - "members": [ - { - "constant": false, - "id": 811, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 812, - "src": "150:32:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 810, - "keyType": { - "id": 808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "159:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "150:25:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 809, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "170:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 899, - "src": "128:61:6", - "visibility": "public" - }, - { - "body": { - "id": 843, - "nodeType": "Block", - "src": "317:123:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 820, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 816, - "src": "335:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 822, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "354:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 821, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "346:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 823, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "346:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "335:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 819, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "327:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 825, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 826, - "nodeType": "ExpressionStatement", - "src": "327:30:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "375:19:6", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 829, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "380:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 830, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 816, - "src": "386:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 828, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 898, - "src": "376:3:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 831, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "376:18:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 827, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "367:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "367:28:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 834, - "nodeType": "ExpressionStatement", - "src": "367:28:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 835, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 814, - "src": "406:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 838, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 811, - "src": "406:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 839, - "indexExpression": { - "argumentTypes": null, - "id": 837, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 816, - "src": "418:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "406:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 840, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "429:4:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "406:27:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 842, - "nodeType": "ExpressionStatement", - "src": "406:27:6" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 844, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 817, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 814, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 844, - "src": "272:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 813, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "272:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 816, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 844, - "src": "291:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 815, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "291:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "271:36:6" - }, - "returnParameters": { - "id": 818, - "nodeType": "ParameterList", - "parameters": [], - "src": "317:0:6" - }, - "scope": 899, - "src": "259:181:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 874, - "nodeType": "Block", - "src": "575:123:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 852, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 848, - "src": "593:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 854, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "612:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 853, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "604:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "604:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "593:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 851, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "585:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 857, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "585:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 858, - "nodeType": "ExpressionStatement", - "src": "585:30:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 861, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 846, - "src": "637:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 862, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 848, - "src": "643:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 860, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 898, - "src": "633:3:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$812_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "633:18:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 859, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "625:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "625:27:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 865, - "nodeType": "ExpressionStatement", - "src": "625:27:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 866, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 846, - "src": "663:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 869, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 811, - "src": "663:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 870, - "indexExpression": { - "argumentTypes": null, - "id": 868, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 848, - "src": "675:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "663:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 871, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "686:5:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "663:28:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 873, - "nodeType": "ExpressionStatement", - "src": "663:28:6" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 875, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 846, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 875, - "src": "530:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 845, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "530:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 848, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 875, - "src": "549:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 847, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:36:6" - }, - "returnParameters": { - "id": 850, - "nodeType": "ParameterList", - "parameters": [], - "src": "575:0:6" - }, - "scope": 899, - "src": "514:184:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 897, - "nodeType": "Block", - "src": "864:84:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 889, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 885, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "882:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 887, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "901:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 886, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "893:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 888, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "893:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "882:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 884, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "874:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 890, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "874:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 891, - "nodeType": "ExpressionStatement", - "src": "874:30:6" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 892, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 877, - "src": "921:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 893, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 811, - "src": "921:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 895, - "indexExpression": { - "argumentTypes": null, - "id": 894, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "933:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "921:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 883, - "id": 896, - "nodeType": "Return", - "src": "914:27:6" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 898, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 880, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 877, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "799:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 876, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 812, - "src": "799:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$812_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 879, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "818:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 878, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "798:36:6" - }, - "returnParameters": { - "id": 883, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 882, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 898, - "src": "858:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 881, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "858:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "857:6:6" - }, - "scope": 899, - "src": "786:162:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 900, - "src": "108:842:6" - } - ], - "src": "0:951:6" - }, - "id": 6 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 1027 - ] - }, - "id": 1028, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 901, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:7" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Unsigned math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 1027, - "linearizedBaseContracts": [ - 1027 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 933, - "nodeType": "Block", - "src": "296:354:7", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 910, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 903, - "src": "527:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "532:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "527:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 916, - "nodeType": "IfStatement", - "src": "523:45:7", - "trueBody": { - "id": 915, - "nodeType": "Block", - "src": "535:33:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 913, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "556:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 909, - "id": 914, - "nodeType": "Return", - "src": "549:8:7" - } - ] - } - }, - { - "assignments": [ - 918 - ], - "declarations": [ - { - "constant": false, - "id": 918, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 933, - "src": "578:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 917, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "578:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 922, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 919, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 903, - "src": "590:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 920, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 905, - "src": "594:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "590:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "578:17:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 928, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 924, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 918, - "src": "613:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 925, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 903, - "src": "617:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 927, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 905, - "src": "622:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:10:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 923, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "605:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "605:19:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 930, - "nodeType": "ExpressionStatement", - "src": "605:19:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 931, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 918, - "src": "642:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 909, - "id": 932, - "nodeType": "Return", - "src": "635:8:7" - } - ] - }, - "documentation": "@dev Multiplies two unsigned integers, reverts on overflow.", - "id": 934, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 906, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 903, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 934, - "src": "242:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 902, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "242:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 905, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 934, - "src": "253:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 904, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "253:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "241:22:7" - }, - "returnParameters": { - "id": 909, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 908, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 934, - "src": "287:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 907, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "287:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "286:9:7" - }, - "scope": 1027, - "src": "229:421:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 957, - "nodeType": "Block", - "src": "845:229:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 944, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 938, - "src": "929:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 945, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "933:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "929:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 943, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "921:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "921:14:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 948, - "nodeType": "ExpressionStatement", - "src": "921:14:7" - }, - { - "assignments": [ - 950 - ], - "declarations": [ - { - "constant": false, - "id": 950, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 957, - "src": "945:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 949, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "945:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 954, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 951, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 936, - "src": "957:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 952, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 938, - "src": "961:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "957:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "945:17:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 955, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 950, - "src": "1066:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 942, - "id": 956, - "nodeType": "Return", - "src": "1059:8:7" - } - ] - }, - "documentation": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.", - "id": 958, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 939, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 936, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "791:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 935, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "791:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 938, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "802:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 937, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "802:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "790:22:7" - }, - "returnParameters": { - "id": 942, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 941, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 958, - "src": "836:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 940, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "835:9:7" - }, - "scope": 1027, - "src": "778:296:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 981, - "nodeType": "Block", - "src": "1272:78:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 968, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 962, - "src": "1290:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 969, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 960, - "src": "1295:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1290:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 967, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1282:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1282:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 972, - "nodeType": "ExpressionStatement", - "src": "1282:15:7" - }, - { - "assignments": [ - 974 - ], - "declarations": [ - { - "constant": false, - "id": 974, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 981, - "src": "1307:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 973, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1307:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 978, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 977, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 975, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 960, - "src": "1319:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 976, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 962, - "src": "1323:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1319:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1307:17:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 979, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 974, - "src": "1342:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 966, - "id": 980, - "nodeType": "Return", - "src": "1335:8:7" - } - ] - }, - "documentation": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 982, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 963, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 960, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "1218:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 959, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1218:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 962, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "1229:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 961, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1229:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1217:22:7" - }, - "returnParameters": { - "id": 966, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 965, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "1263:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 964, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1263:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1262:9:7" - }, - "scope": 1027, - "src": "1205:145:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1005, - "nodeType": "Block", - "src": "1498:78:7", - "statements": [ - { - "assignments": [ - 992 - ], - "declarations": [ - { - "constant": false, - "id": 992, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1005, - "src": "1508:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 991, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1508:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 996, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 995, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 993, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 984, - "src": "1520:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 994, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 986, - "src": "1524:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1520:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1508:17:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1000, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 998, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 992, - "src": "1543:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 999, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 984, - "src": "1548:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1543:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 997, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1535:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1001, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1535:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1002, - "nodeType": "ExpressionStatement", - "src": "1535:15:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 1003, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 992, - "src": "1568:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 990, - "id": 1004, - "nodeType": "Return", - "src": "1561:8:7" - } - ] - }, - "documentation": "@dev Adds two unsigned integers, reverts on overflow.", - "id": 1006, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 987, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 984, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1006, - "src": "1444:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 983, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1444:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 986, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1006, - "src": "1455:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 985, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1455:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1443:22:7" - }, - "returnParameters": { - "id": 990, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 989, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1006, - "src": "1489:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 988, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1489:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1488:9:7" - }, - "scope": 1027, - "src": "1431:145:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1025, - "nodeType": "Block", - "src": "1795:54:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1016, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1010, - "src": "1813:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1017, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1818:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1813:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1015, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1805:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1805:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1020, - "nodeType": "ExpressionStatement", - "src": "1805:15:7" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1021, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1008, - "src": "1837:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 1022, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1010, - "src": "1841:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1837:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1014, - "id": 1024, - "nodeType": "Return", - "src": "1830:12:7" - } - ] - }, - "documentation": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 1026, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1011, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1008, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1026, - "src": "1741:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1007, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1010, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1026, - "src": "1752:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1009, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1752:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1740:22:7" - }, - "returnParameters": { - "id": 1014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1013, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1026, - "src": "1786:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1012, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1786:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1785:9:7" - }, - "scope": 1027, - "src": "1728:121:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1028, - "src": "125:1726:7" - } - ], - "src": "0:1852:7" - }, - "id": 7 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 1096 - ] - }, - "id": 1097, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1029, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:8" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 1096, - "linearizedBaseContracts": [ - 1096 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1038, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1031, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1038, - "src": "155:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1030, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "155:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1033, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1038, - "src": "167:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1032, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "167:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "154:27:8" - }, - "returnParameters": { - "id": 1037, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1036, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1038, - "src": "200:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1035, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "200:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "199:6:8" - }, - "scope": 1096, - "src": "137:69:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1047, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1043, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1040, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1047, - "src": "229:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1039, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "229:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1042, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1047, - "src": "246:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1041, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "246:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "228:32:8" - }, - "returnParameters": { - "id": 1046, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1045, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1047, - "src": "279:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1044, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "279:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "278:6:8" - }, - "scope": 1096, - "src": "212:73:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1058, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1054, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1049, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1058, - "src": "313:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1048, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "313:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1051, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1058, - "src": "327:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "327:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1053, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1058, - "src": "339:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1052, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "339:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "312:41:8" - }, - "returnParameters": { - "id": 1057, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1056, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1058, - "src": "372:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1055, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "372:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:6:8" - }, - "scope": 1096, - "src": "291:87:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1063, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1059, - "nodeType": "ParameterList", - "parameters": [], - "src": "404:2:8" - }, - "returnParameters": { - "id": 1062, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1061, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1063, - "src": "430:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1060, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "430:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:9:8" - }, - "scope": 1096, - "src": "384:55:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1070, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1066, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1065, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 1070, - "src": "464:11:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1064, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "464:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "463:13:8" - }, - "returnParameters": { - "id": 1069, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1068, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1070, - "src": "500:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1067, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "500:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "499:9:8" - }, - "scope": 1096, - "src": "445:64:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1079, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1075, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1072, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1079, - "src": "534:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1071, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "534:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1074, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1079, - "src": "549:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1073, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "533:32:8" - }, - "returnParameters": { - "id": 1078, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1077, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1079, - "src": "589:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1076, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "589:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "588:9:8" - }, - "scope": 1096, - "src": "515:83:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 1087, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 1086, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1081, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1087, - "src": "619:20:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1080, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1083, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1087, - "src": "641:18:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1082, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "641:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1085, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1087, - "src": "661:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1084, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "661:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "618:57:8" - }, - "src": "604:72:8" - }, - { - "anonymous": false, - "documentation": null, - "id": 1095, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 1094, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1089, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1095, - "src": "697:21:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1088, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "697:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1091, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1095, - "src": "720:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1090, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "720:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1093, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1095, - "src": "745:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1092, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "745:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "696:63:8" - }, - "src": "682:78:8" - } - ], - "scope": 1097, - "src": "114:648:8" - } - ], - "src": "0:763:8" - }, - "id": 8 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "exportedSymbols": { - "SafeERC20": [ - 1241 - ] - }, - "id": 1242, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1098, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:9" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 1099, - "nodeType": "ImportDirective", - "scope": 1242, - "sourceUnit": 1097, - "src": "25:22:9", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 1100, - "nodeType": "ImportDirective", - "scope": 1242, - "sourceUnit": 1028, - "src": "48:33:9", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeERC20\n@dev Wrappers around ERC20 operations that throw on failure.\nTo use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "fullyImplemented": true, - "id": 1241, - "linearizedBaseContracts": [ - 1241 - ], - "name": "SafeERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1103, - "libraryName": { - "contractScope": null, - "id": 1101, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1027, - "src": "382:8:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1027", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "376:27:9", - "typeName": { - "id": 1102, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "395:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 1120, - "nodeType": "Block", - "src": "481:51:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1115, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1107, - "src": "514:2:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1116, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1109, - "src": "518:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1113, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1105, - "src": "499:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1038, - "src": "499:14:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "499:25:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1112, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "491:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1118, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "491:34:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1119, - "nodeType": "ExpressionStatement", - "src": "491:34:9" - } - ] - }, - "documentation": null, - "id": 1121, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1105, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1121, - "src": "431:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1104, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "431:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1107, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1121, - "src": "445:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1106, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "445:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1109, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1121, - "src": "457:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1108, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "457:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "430:41:9" - }, - "returnParameters": { - "id": 1111, - "nodeType": "ParameterList", - "parameters": [], - "src": "481:0:9" - }, - "scope": 1241, - "src": "409:123:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1141, - "nodeType": "Block", - "src": "628:61:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1135, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1125, - "src": "665:4:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1136, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1127, - "src": "671:2:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1137, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1129, - "src": "675:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1133, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1123, - "src": "646:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 1058, - "src": "646:18:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 1138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "646:35:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1132, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "638:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "638:44:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1140, - "nodeType": "ExpressionStatement", - "src": "638:44:9" - } - ] - }, - "documentation": null, - "id": 1142, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1123, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1142, - "src": "564:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1122, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "564:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1125, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1142, - "src": "578:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1124, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "578:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1127, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1142, - "src": "592:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "592:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1129, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1142, - "src": "604:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1128, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "604:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "563:55:9" - }, - "returnParameters": { - "id": 1131, - "nodeType": "ParameterList", - "parameters": [], - "src": "628:0:9" - }, - "scope": 1241, - "src": "538:151:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1177, - "nodeType": "Block", - "src": "771:353:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1152, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1148, - "src": "1007:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1153, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1016:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1007:10:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1155, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1006:12:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1159, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "1047:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - ], - "id": 1158, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1039:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1039:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1161, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1146, - "src": "1054:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1156, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1144, - "src": "1023:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1157, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1079, - "src": "1023:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1023:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1163, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1066:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1023:44:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1165, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1022:46:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1006:62:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1151, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "998:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "998:71:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1168, - "nodeType": "ExpressionStatement", - "src": "998:71:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1172, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1146, - "src": "1101:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1173, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1148, - "src": "1110:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1170, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1144, - "src": "1087:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1047, - "src": "1087:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1087:29:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1169, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1079:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1079:38:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1176, - "nodeType": "ExpressionStatement", - "src": "1079:38:9" - } - ] - }, - "documentation": null, - "id": 1178, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1149, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1144, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1178, - "src": "716:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1143, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "716:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1146, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1178, - "src": "730:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1145, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "730:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1148, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1178, - "src": "747:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1147, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "747:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "715:46:9" - }, - "returnParameters": { - "id": 1150, - "nodeType": "ParameterList", - "parameters": [], - "src": "771:0:9" - }, - "scope": 1241, - "src": "695:429:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1208, - "nodeType": "Block", - "src": "1216:145:9", - "statements": [ - { - "assignments": [ - 1188 - ], - "declarations": [ - { - "constant": false, - "id": 1188, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 1208, - "src": "1226:20:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1187, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1226:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1199, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1197, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1184, - "src": "1293:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1192, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "1273:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - ], - "id": 1191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1265:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1265:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1194, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1182, - "src": "1280:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1189, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1180, - "src": "1249:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1079, - "src": "1249:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1006, - "src": "1249:43:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:50:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1226:73:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1203, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1182, - "src": "1331:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1204, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1188, - "src": "1340:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1201, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1180, - "src": "1317:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1047, - "src": "1317:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1317:36:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1200, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1309:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1309:45:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1207, - "nodeType": "ExpressionStatement", - "src": "1309:45:9" - } - ] - }, - "documentation": null, - "id": 1209, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeIncreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1180, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1209, - "src": "1161:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1179, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "1161:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1182, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1209, - "src": "1175:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1181, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1175:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1184, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1209, - "src": "1192:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1183, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1192:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1160:46:9" - }, - "returnParameters": { - "id": 1186, - "nodeType": "ParameterList", - "parameters": [], - "src": "1216:0:9" - }, - "scope": 1241, - "src": "1130:231:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1239, - "nodeType": "Block", - "src": "1453:145:9", - "statements": [ - { - "assignments": [ - 1219 - ], - "declarations": [ - { - "constant": false, - "id": 1219, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 1239, - "src": "1463:20:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1218, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1463:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1230, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1228, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1215, - "src": "1530:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1223, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1278, - "src": "1510:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1241", - "typeString": "library SafeERC20" - } - ], - "id": 1222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1502:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1502:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1225, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1213, - "src": "1517:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1220, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1211, - "src": "1486:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1079, - "src": "1486:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 982, - "src": "1486:43:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:50:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1463:73:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1234, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1213, - "src": "1568:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1235, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1219, - "src": "1577:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1232, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1211, - "src": "1554:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "id": 1233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1047, - "src": "1554:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1554:36:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1231, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1259, - 1260 - ], - "referencedDeclaration": 1259, - "src": "1546:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1546:45:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1238, - "nodeType": "ExpressionStatement", - "src": "1546:45:9" - } - ] - }, - "documentation": null, - "id": 1240, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeDecreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1216, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1211, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1240, - "src": "1398:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1210, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1096, - "src": "1398:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1096", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1213, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1240, - "src": "1412:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1212, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1412:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1215, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1240, - "src": "1429:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1214, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1429:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1397:46:9" - }, - "returnParameters": { - "id": 1217, - "nodeType": "ParameterList", - "parameters": [], - "src": "1453:0:9" - }, - "scope": 1241, - "src": "1367:231:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1242, - "src": "352:1248:9" - } - ], - "src": "0:1601:9" - }, - "id": 9 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.abi b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.abi deleted file mode 100644 index e289ecc82..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[],"name":"terminate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"minerAddress","type":"address"}],"name":"registerMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isSystem","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getMinerByIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCoreTeam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addSystem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"minerAddress","type":"address"}],"name":"unregisterMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMinerCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceSystem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.bin b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.bin deleted file mode 100644 index a8c7ceb3e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.bin +++ /dev/null @@ -1 +0,0 @@ -60806040523480156200001157600080fd5b5060405160208062001070833981018060405260208110156200003357600080fd5b50516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a0384161790556200007d90640100000000620000d8810204565b6200009133640100000000620000f6810204565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054600160a060020a0319169055620001a4565b620000f360028264010000000062000dd76200011182021704565b50565b620000f360038264010000000062000dd76200011182021704565b600160a060020a03811615156200012757600080fd5b6200013c82826401000000006200016c810204565b156200014757600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200018457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610ebc80620001b46000396000f3fe608060405234801561001057600080fd5b50600436106100b85760003560e060020a9004806374be75921161007557806374be7592146101ac57806381f909f3146101d257806399f4b251146101f8578063bb52c13714610200578063d43acc791461021a578063e9d6185914610222576100b8565b80630c08bf88146100bd5780632e6b6849146100c7578063341ccfcb146100ed57806334cdcf26146101135780633d19ab131461014d578063608d3d3d14610186575b600080fd5b6100c561022a565b005b6100c5600480360360208110156100dd57600080fd5b5035600160a060020a0316610248565b6100c56004803603602081101561010357600080fd5b5035600160a060020a0316610268565b6101396004803603602081101561012957600080fd5b5035600160a060020a031661043c565b604080519115158252519081900360200190f35b61016a6004803603602081101561016357600080fd5b5035610455565b60408051600160a060020a039092168252519081900360200190f35b6101396004803603602081101561019c57600080fd5b5035600160a060020a0316610484565b6100c5600480360360208110156101c257600080fd5b5035600160a060020a0316610497565b6100c5600480360360208110156101e857600080fd5b5035600160a060020a03166104b4565b6100c5610656565b610208610ba4565b60408051918252519081900360200190f35b6100c5610bae565b6100c5610bb7565b61023333610484565b151561023e57600080fd5b610246610bc0565b565b61025133610484565b151561025c57600080fd5b61026581610c86565b50565b60005474010000000000000000000000000000000000000000900460ff161561029057600080fd5b61029933610484565b15156102a457600080fd5b6004546103e8116102b457600080fd5b600160a060020a038116600090815260056020526040902054156102d757600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561031857600080fd5b505afa15801561032c573d6000803e3d6000fd5b505050506040513d602081101561034257600080fd5b5051151561034f57600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561038d57600080fd5b505afa1580156103a1573d6000803e3d6000fd5b505050506040513d60208110156103b757600080fd5b50519050600560ff821611156103cc57600080fd5b505060048054600160a060020a039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b600061044f60028363ffffffff610c9716565b92915050565b600060048260010181548110151561046957fe5b600091825260209091200154600160a060020a031692915050565b600061044f60038363ffffffff610c9716565b6104a03361043c565b15156104ab57600080fd5b61026581610cce565b60005474010000000000000000000000000000000000000000900460ff16156104dc57600080fd5b6104e533610484565b15156104f057600080fd5b6004546001106104ff57600080fd5b60045460021415610564576004805480151561051757fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a0383168252600590526040812055610265565b600454600160a060020a038216600090815260056020526040902054146105fe5760048054600019810190811061059757fe5b6000918252602080832090910154600160a060020a03848116845260059092526040909220546004805492909316929181106105cf57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6004805480151561060b57fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a038316825260059052604081205550565b60005474010000000000000000000000000000000000000000900460ff161561067e57600080fd5b6106873361043c565b151561069257600080fd5b6004546001106106a157600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d602081101561072f57600080fd5b505190506000811161074057600080fd5b610748610e71565b60045460015b8181101561090157600060048281548110151561076757fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b1580156107cc57600080fd5b505afa1580156107e0573d6000803e3d6000fd5b505050506040513d60208110156107f657600080fd5b5051151561080457506108f9565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d602081101561086c57600080fd5b5051905060ff8116151561088e578460005b60200201805160010190526108f6565b8060ff16600114156108a25784600161087e565b8060ff16600214156108b65784600261087e565b8060ff16600314156108ca5784600361087e565b8060ff16600414156108de5784600461087e565b8060ff16600514156108f65760a08501805160010190525b50505b60010161074e565b5060a082015160808301516060840151604085015160208601518651600a90910201601490910201601e90910201602890910201603290910201610943610e71565b818581151561094e57fe5b04815281600a860281151561095f57fe5b046020820152816014860281151561097357fe5b04604082015281601e860281151561098757fe5b046060820152816028860281151561099b57fe5b04608082015281603286028115156109af57fe5b0460a082015260015b83811015610b9c5760006004828154811015156109d157fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b158015610a3657600080fd5b505afa158015610a4a573d6000803e3d6000fd5b505050506040513d6020811015610a6057600080fd5b50511515610a6e5750610b94565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610aac57600080fd5b505afa158015610ac0573d6000803e3d6000fd5b505050506040513d6020811015610ad657600080fd5b5051604080517f302c11ca0000000000000000000000000000000000000000000000000000000081529051919250610b9191600160a060020a0385169163302c11ca916004808301926020929190829003018186803b158015610b3857600080fd5b505afa158015610b4c573d6000803e3d6000fd5b505050506040513d6020811015610b6257600080fd5b50518560ff841660068110610b7357fe5b6020020151600154600160a060020a0316919063ffffffff610cdf16565b50505b6001016109b8565b505050505050565b6004546000190190565b61024633610d7e565b61024633610d8f565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610c2457600080fd5b505afa158015610c38573d6000803e3d6000fd5b505050506040513d6020811015610c4e57600080fd5b505190506000811115610c7e57600054600154610c7e91600160a060020a0391821691168363ffffffff610cdf16565b610265610da0565b61026560038263ffffffff610dd716565b6000600160a060020a0382161515610cae57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61026560028263ffffffff610dd716565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50511515610d7957600080fd5b505050565b61026560038263ffffffff610e2516565b61026560028263ffffffff610e2516565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a0381161515610dec57600080fd5b610df68282610c97565b15610e0057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610e3a57600080fd5b610e448282610c97565b1515610e4f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60c060405190810160405280600690602082028038833950919291505056fea165627a7a72305820d93c57fe9a496ba0db433cb631bbbbe57a53bb63720b63023ea0e465cf5c1d200029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.json deleted file mode 100644 index 124576278..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoFees.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "registerMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "index", - "type": "uint256" - } - ], - "name": "getMinerByIndex", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "unregisterMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerCount", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "60806040523480156200001157600080fd5b5060405160208062001070833981018060405260208110156200003357600080fd5b50516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a0384161790556200007d90640100000000620000d8810204565b6200009133640100000000620000f6810204565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054600160a060020a0319169055620001a4565b620000f360028264010000000062000dd76200011182021704565b50565b620000f360038264010000000062000dd76200011182021704565b600160a060020a03811615156200012757600080fd5b6200013c82826401000000006200016c810204565b156200014757600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200018457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b610ebc80620001b46000396000f3fe608060405234801561001057600080fd5b50600436106100b85760003560e060020a9004806374be75921161007557806374be7592146101ac57806381f909f3146101d257806399f4b251146101f8578063bb52c13714610200578063d43acc791461021a578063e9d6185914610222576100b8565b80630c08bf88146100bd5780632e6b6849146100c7578063341ccfcb146100ed57806334cdcf26146101135780633d19ab131461014d578063608d3d3d14610186575b600080fd5b6100c561022a565b005b6100c5600480360360208110156100dd57600080fd5b5035600160a060020a0316610248565b6100c56004803603602081101561010357600080fd5b5035600160a060020a0316610268565b6101396004803603602081101561012957600080fd5b5035600160a060020a031661043c565b604080519115158252519081900360200190f35b61016a6004803603602081101561016357600080fd5b5035610455565b60408051600160a060020a039092168252519081900360200190f35b6101396004803603602081101561019c57600080fd5b5035600160a060020a0316610484565b6100c5600480360360208110156101c257600080fd5b5035600160a060020a0316610497565b6100c5600480360360208110156101e857600080fd5b5035600160a060020a03166104b4565b6100c5610656565b610208610ba4565b60408051918252519081900360200190f35b6100c5610bae565b6100c5610bb7565b61023333610484565b151561023e57600080fd5b610246610bc0565b565b61025133610484565b151561025c57600080fd5b61026581610c86565b50565b60005474010000000000000000000000000000000000000000900460ff161561029057600080fd5b61029933610484565b15156102a457600080fd5b6004546103e8116102b457600080fd5b600160a060020a038116600090815260056020526040902054156102d757600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561031857600080fd5b505afa15801561032c573d6000803e3d6000fd5b505050506040513d602081101561034257600080fd5b5051151561034f57600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561038d57600080fd5b505afa1580156103a1573d6000803e3d6000fd5b505050506040513d60208110156103b757600080fd5b50519050600560ff821611156103cc57600080fd5b505060048054600160a060020a039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b600061044f60028363ffffffff610c9716565b92915050565b600060048260010181548110151561046957fe5b600091825260209091200154600160a060020a031692915050565b600061044f60038363ffffffff610c9716565b6104a03361043c565b15156104ab57600080fd5b61026581610cce565b60005474010000000000000000000000000000000000000000900460ff16156104dc57600080fd5b6104e533610484565b15156104f057600080fd5b6004546001106104ff57600080fd5b60045460021415610564576004805480151561051757fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a0383168252600590526040812055610265565b600454600160a060020a038216600090815260056020526040902054146105fe5760048054600019810190811061059757fe5b6000918252602080832090910154600160a060020a03848116845260059092526040909220546004805492909316929181106105cf57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6004805480151561060b57fe5b600082815260208082208301600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055909201909255600160a060020a038316825260059052604081205550565b60005474010000000000000000000000000000000000000000900460ff161561067e57600080fd5b6106873361043c565b151561069257600080fd5b6004546001106106a157600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d602081101561072f57600080fd5b505190506000811161074057600080fd5b610748610e71565b60045460015b8181101561090157600060048281548110151561076757fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b1580156107cc57600080fd5b505afa1580156107e0573d6000803e3d6000fd5b505050506040513d60208110156107f657600080fd5b5051151561080457506108f9565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d602081101561086c57600080fd5b5051905060ff8116151561088e578460005b60200201805160010190526108f6565b8060ff16600114156108a25784600161087e565b8060ff16600214156108b65784600261087e565b8060ff16600314156108ca5784600361087e565b8060ff16600414156108de5784600461087e565b8060ff16600514156108f65760a08501805160010190525b50505b60010161074e565b5060a082015160808301516060840151604085015160208601518651600a90910201601490910201601e90910201602890910201603290910201610943610e71565b818581151561094e57fe5b04815281600a860281151561095f57fe5b046020820152816014860281151561097357fe5b04604082015281601e860281151561098757fe5b046060820152816028860281151561099b57fe5b04608082015281603286028115156109af57fe5b0460a082015260015b83811015610b9c5760006004828154811015156109d157fe5b60009182526020918290200154604080517f19a74ab30000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216935083926319a74ab392600480840193829003018186803b158015610a3657600080fd5b505afa158015610a4a573d6000803e3d6000fd5b505050506040513d6020811015610a6057600080fd5b50511515610a6e5750610b94565b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610aac57600080fd5b505afa158015610ac0573d6000803e3d6000fd5b505050506040513d6020811015610ad657600080fd5b5051604080517f302c11ca0000000000000000000000000000000000000000000000000000000081529051919250610b9191600160a060020a0385169163302c11ca916004808301926020929190829003018186803b158015610b3857600080fd5b505afa158015610b4c573d6000803e3d6000fd5b505050506040513d6020811015610b6257600080fd5b50518560ff841660068110610b7357fe5b6020020151600154600160a060020a0316919063ffffffff610cdf16565b50505b6001016109b8565b505050505050565b6004546000190190565b61024633610d7e565b61024633610d8f565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610c2457600080fd5b505afa158015610c38573d6000803e3d6000fd5b505050506040513d6020811015610c4e57600080fd5b505190506000811115610c7e57600054600154610c7e91600160a060020a0391821691168363ffffffff610cdf16565b610265610da0565b61026560038263ffffffff610dd716565b6000600160a060020a0382161515610cae57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61026560028263ffffffff610dd716565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b505050506040513d6020811015610d6c57600080fd5b50511515610d7957600080fd5b505050565b61026560038263ffffffff610e2516565b61026560028263ffffffff610e2516565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a0381161515610dec57600080fd5b610df68282610c97565b15610e0057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0381161515610e3a57600080fd5b610e448282610c97565b1515610e4f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b60c060405190810160405280600690602082028038833950919291505056fea165627a7a72305820d93c57fe9a496ba0db433cb631bbbbe57a53bb63720b63023ea0e465cf5c1d200029", - "functionHashes": { - "addCoreTeam(address)": "2e6b6849", - "addSystem(address)": "74be7592", - "getMinerByIndex(uint256)": "3d19ab13", - "getMinerCount()": "bb52c137", - "isCoreTeam(address)": "608d3d3d", - "isSystem(address)": "34cdcf26", - "mine()": "99f4b251", - "registerMiner(address)": "341ccfcb", - "renounceCoreTeam()": "d43acc79", - "renounceSystem()": "e9d61859", - "terminate()": "0c08bf88", - "unregisterMiner(address)": "81f909f3" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "754400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addCoreTeam(address)": "infinite", - "addSystem(address)": "infinite", - "getMinerByIndex(uint256)": "1058", - "getMinerCount()": "541", - "isCoreTeam(address)": "infinite", - "isSystem(address)": "infinite", - "mine()": "infinite", - "registerMiner(address)": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSystem()": "infinite", - "terminate()": "infinite", - "unregisterMiner(address)": "infinite" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner-sol-output.json deleted file mode 100644 index e8c434ff2..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner-sol-output.json +++ /dev/null @@ -1,20333 +0,0 @@ -{ - "contracts": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol": { - "AlgoCommon": { - "abi": [], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b50603580601d6000396000f3fe6080604052600080fdfea165627a7a72305820c142737f5004f0e270be8e9321f75139c2de559ee56245828f39cd6b8e6ac07b0029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc1 TIMESTAMP PUSH20 0x7F5004F0E270BE8E9321F75139C2DE559EE56245 DUP3 DUP16 CODECOPY 0xcd PUSH12 0x8E6AC07B0029000000000000 ", - "sourceMap": "26:1033:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:1033:0;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "10600", - "executionCost": "66", - "totalCost": "10666" - }, - "internal": { - "getCapacityByCategory(uint8)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":\"AlgoCommon\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":{\"keccak256\":\"0x014debd2c96ba7aba7faef24eac1f1a5d46791b55ae55fbd51d7945bf21277e0\",\"urls\":[\"bzzr://b8d1cffc7f1bfdc8c911d90b785cf9c2723b24bd162d7cfd730e127f56932fe9\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "AlgoCoreTeamRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol": { - "AlgoMiner": { - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pauseMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isMining", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "startMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newMinerAddress", - "type": "address" - } - ], - "name": "migrateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMiner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReferral", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopAndRemoveOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentDay", - "outputs": [ - { - "name": "", - "type": "uint16" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "resumeMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerType", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwnerAddress", - "type": "address" - }, - { - "name": "newReferralAddress", - "type": "address" - } - ], - "name": "resetMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deactivateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "activateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentYearSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentYear", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "minerType", - "type": "uint8" - }, - { - "name": "category", - "type": "uint8" - }, - { - "name": "minerAccountAddress", - "type": "address" - }, - { - "name": "referralAccountAddress", - "type": "address" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405160a08062001458833981018060405260a08110156200003357600080fd5b5080516020820151604083015160608401516080909401516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a038416179055939492939192916200009a906401000000006200018e810204565b620000ae33640100000000620001ac810204565b620000c233640100000000620001c7810204565b600560ff85161115620000d457600080fd5b600160a060020a0383161515620000ea57600080fd5b6000856001811115620000f957fe5b14156200011657600160a060020a03821615156200011657600080fd5b6005805486919060ff1916600183818111156200012f57fe5b0217905550506005805461ff00191661010060ff9590951694909402939093176201000060b060020a03191662010000600160a060020a03938416021790925560068054600160a060020a031916929091169190911790555062000275565b620001a96002826401000000006200110d620001e282021704565b50565b620001a96003826401000000006200110d620001e282021704565b620001a96004826401000000006200110d620001e282021704565b600160a060020a0381161515620001f857600080fd5b6200020d82826401000000006200023d810204565b156200021857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200025557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6111d380620002856000396000f3fe608060405234801561001057600080fd5b50600436106101ec576000357c0100000000000000000000000000000000000000000000000000000000900480634969ae70116101215780639e614ca0116100bf578063ce41607a1161008e578063ce41607a14610422578063d43acc791461042a578063da40867914610432578063e9d618591461043a576101ec565b80639e614ca0146103f0578063b2a32cd5146103f8578063be95249414610400578063cdfd0f6414610408576101ec565b806380258e47116100fb57806380258e471461038c57806381a24459146103945780638329138f146103ba57806399f4b251146103e8576101ec565b80634969ae7014610322578063608d3d3d1461034057806374be759214610366576101ec565b80632e6b68491161018e57806334cdcf261161016857806334cdcf26146102cd578063363aa6c7146102f35780633e6968b6146102fb578063427534a41461031a576101ec565b80632e6b68491461027b578063302c11ca146102a1578063329b1c92146102c5576101ec565b806319a74ab3116101ca57806319a74ab31461021f57806321b79d9814610227578063231d4e2a1461022f57806329d10b6e14610255576101ec565b80630c08bf88146101f1578063162f986d146101fb5780631777fb4b14610203575b600080fd5b6101f9610442565b005b6101f9610460565b61020b6104cf565b604080519115158252519081900360200190f35b61020b6104d4565b6101f961050b565b6101f96004803603602081101561024557600080fd5b5035600160a060020a03166105a1565b6101f96004803603602081101561026b57600080fd5b5035600160a060020a031661068b565b6101f96004803603602081101561029157600080fd5b5035600160a060020a03166106a8565b6102a96106c5565b60408051600160a060020a039092168252519081900360200190f35b6102a96106da565b61020b600480360360208110156102e357600080fd5b5035600160a060020a03166106e9565b6101f9610704565b6103036107b5565b6040805161ffff9092168252519081900360200190f35b6101f96107c6565b61032a610832565b6040805160ff9092168252519081900360200190f35b61020b6004803603602081101561035657600080fd5b5035600160a060020a0316610846565b6101f96004803603602081101561037c57600080fd5b5035600160a060020a0316610859565b61032a610876565b61020b600480360360208110156103aa57600080fd5b5035600160a060020a0316610884565b6101f9600480360360408110156103d057600080fd5b50600160a060020a0381358116916020013516610897565b6101f961094a565b6101f9610b86565b6101f9610bf7565b6101f9610d53565b610410610d5c565b60408051918252519081900360200190f35b61032a610d62565b6101f9610d85565b6101f9610d8e565b6101f9610e1f565b61044b33610846565b151561045657600080fd5b61045e610e28565b565b60005460a060020a900460ff161561047757600080fd5b61048033610884565b151561048b57600080fd5b600160065460a060020a900460ff1660038111156104a557fe5b146104af57600080fd5b600680546002919060a060020a60ff02191660a060020a835b0217905550565b600190565b6000600160065460a060020a900460ff1660038111156104f057fe5b148015610506575060065460a860020a900460ff165b905090565b60005460a060020a900460ff161561052257600080fd5b600554620100009004600160a060020a0316331461053f57600080fd5b600160065460a060020a900460ff16600381111561055957fe5b1461056357600080fd5b60065460a860020a900460ff161561057a57600080fd5b6006805475ff000000000000000000000000000000000000000000191660a860020a179055565b6105aa33610846565b15156105b557600080fd5b600060065460a060020a900460ff1660038111156105cf57fe5b146105d957600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610688928492600160a060020a03909116916370a0823191602480820192602092909190829003018186803b15801561064357600080fd5b505afa158015610657573d6000803e3d6000fd5b505050506040513d602081101561066d57600080fd5b5051600154600160a060020a0316919063ffffffff610eee16565b50565b61069433610884565b151561069f57600080fd5b61068881610fa6565b6106b133610846565b15156106bc57600080fd5b61068881610fb7565b600554620100009004600160a060020a031690565b600654600160a060020a031690565b60006106fc60028363ffffffff610fc816565b90505b919050565b60005460a060020a900460ff161561071b57600080fd5b61072433610884565b151561072f57600080fd5b600360065460a060020a900460ff16600381111561074957fe5b141561075457600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff00001916905560a060020a60ff021916740300000000000000000000000000000000000000001775ff00ffffffffffffffffffffffffffffffffffffffff19169055565b60065460b860020a900461ffff1690565b60005460a060020a900460ff16156107dd57600080fd5b6107e633610884565b15156107f157600080fd5b600260065460a060020a900460ff16600381111561080b57fe5b1461081557600080fd5b600680546001919060a060020a60ff02191660a060020a836104c8565b60055460009060ff16600181111561050657fe5b60006106fc60038363ffffffff610fc816565b610862336106e9565b151561086d57600080fd5b61068881610fff565b600554610100900460ff1690565b60006106fc60048363ffffffff610fc816565b60005460a060020a900460ff16156108ae57600080fd5b6108b733610884565b15156108c257600080fd5b600360065460a060020a900460ff1660038111156108dc57fe5b146108e657600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a039687160217905560a060020a60ff02191660a060020a1773ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff161561096157600080fd5b61096a336106e9565b151561097557600080fd5b600060055460ff16600181111561098857fe5b1461099257600080fd5b600160065460a060020a900460ff1660038111156109ac57fe5b146109b657600080fd5b60065460a860020a900460ff1615156109ce57600080fd5b60065460b860020a900461ffff161515610a44576006805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a179055610b0c565b60068054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e1415610b0c576006805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600754600290046007555b60075461016d90046064600a82020460008211610b2857600080fd5b60008111610b3557600080fd5b600554600154610b5f91600160a060020a039182169162010000909104168463ffffffff610eee16565b600654600154610b8291600160a060020a0391821691168363ffffffff610eee16565b5050565b60005460a060020a900460ff1615610b9d57600080fd5b610ba633610846565b1515610bb157600080fd5b600060065460a060020a900460ff166003811115610bcb57fe5b1415610bd657600080fd5b6006805475ffff000000000000000000000000000000000000000019169055565b60005460a060020a900460ff1615610c0e57600080fd5b610c1733610846565b1515610c2257600080fd5b600060065460a060020a900460ff166003811115610c3c57fe5b14610c4657600080fd5b600060055460ff166001811115610c5957fe5b148015610c665750600754155b1561081557600554600090610c8290610100900460ff16611010565b600154604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506064600a850204840192600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d6020811015610d1d57600080fd5b50519050818114610d2d57600080fd5b600283046007555050600680546001925060a060020a60ff02191660a060020a836104c8565b61045e336110c2565b60075490565b600654760100000000000000000000000000000000000000000000900460ff1690565b61045e336110d3565b60005460a060020a900460ff1615610da557600080fd5b600554620100009004600160a060020a03163314610dc257600080fd5b600160065460a060020a900460ff166003811115610ddc57fe5b14610de657600080fd5b60065460a860020a900460ff161515610dfe57600080fd5b6006805475ff00000000000000000000000000000000000000000019169055565b61045e336110e4565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000811115610ee657600054600154610ee691600160a060020a0391821691168363ffffffff610eee16565b6106886110f5565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050506040513d6020811015610f9457600080fd5b50511515610fa157600080fd5b505050565b61068860048263ffffffff61110d16565b61068860038263ffffffff61110d16565b6000600160a060020a0382161515610fdf57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068860028263ffffffff61110d16565b600060ff8216151561102d575069152d02c7e14af68000006106ff565b8160ff166001141561104a575069d3c21bcecceda10000006106ff565b8160ff166002141561106857506a01a784379d99db420000006106ff565b8160ff166003141561108657506a027b46536c66c8e30000006106ff565b8160ff16600414156110a457506a034f086f3b33b6840000006106ff565b8160ff16600514156106ff57506a0422ca8b0a00a4250000006106ff565b61068860048263ffffffff61115b16565b61068860038263ffffffff61115b16565b61068860028263ffffffff61115b16565b6000805460a060020a60ff02191660a060020a179055565b600160a060020a038116151561112257600080fd5b61112c8282610fc8565b1561113657600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561117057600080fd5b61117a8282610fc8565b151561118557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820a2a7d81c4bf237d833a792f3dd14af3f88c7c6e7d320648513595fcbe01959490029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0xA0 DUP1 PUSH3 0x1458 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH1 0xA0 DUP2 LT ISZERO PUSH3 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND DUP2 OR PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND SWAP1 SWAP3 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND OR SWAP1 SSTORE SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP2 PUSH3 0x9A SWAP1 PUSH5 0x100000000 PUSH3 0x18E DUP2 MUL DIV JUMP JUMPDEST PUSH3 0xAE CALLER PUSH5 0x100000000 PUSH3 0x1AC DUP2 MUL DIV JUMP JUMPDEST PUSH3 0xC2 CALLER PUSH5 0x100000000 PUSH3 0x1C7 DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x5 PUSH1 0xFF DUP6 AND GT ISZERO PUSH3 0xD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP4 AND ISZERO ISZERO PUSH3 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 DUP2 GT ISZERO PUSH3 0xF9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH3 0x116 JUMPI PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH3 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD DUP7 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 DUP2 DUP2 GT ISZERO PUSH3 0x12F JUMPI INVALID JUMPDEST MUL OR SWAP1 SSTORE POP POP PUSH1 0x5 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 PUSH1 0xFF SWAP6 SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR PUSH3 0x10000 PUSH1 0xB0 PUSH1 0x2 EXP SUB NOT AND PUSH3 0x10000 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP4 DUP5 AND MUL OR SWAP1 SWAP3 SSTORE PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x275 JUMP JUMPDEST PUSH3 0x1A9 PUSH1 0x2 DUP3 PUSH5 0x100000000 PUSH3 0x110D PUSH3 0x1E2 DUP3 MUL OR DIV JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0x1A9 PUSH1 0x3 DUP3 PUSH5 0x100000000 PUSH3 0x110D PUSH3 0x1E2 DUP3 MUL OR DIV JUMP JUMPDEST PUSH3 0x1A9 PUSH1 0x4 DUP3 PUSH5 0x100000000 PUSH3 0x110D PUSH3 0x1E2 DUP3 MUL OR DIV JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH3 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x20D DUP3 DUP3 PUSH5 0x100000000 PUSH3 0x23D DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH3 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH3 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x11D3 DUP1 PUSH3 0x285 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1EC JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x4969AE70 GT PUSH2 0x121 JUMPI DUP1 PUSH4 0x9E614CA0 GT PUSH2 0xBF JUMPI DUP1 PUSH4 0xCE41607A GT PUSH2 0x8E JUMPI DUP1 PUSH4 0xCE41607A EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xD43ACC79 EQ PUSH2 0x42A JUMPI DUP1 PUSH4 0xDA408679 EQ PUSH2 0x432 JUMPI DUP1 PUSH4 0xE9D61859 EQ PUSH2 0x43A JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x9E614CA0 EQ PUSH2 0x3F0 JUMPI DUP1 PUSH4 0xB2A32CD5 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0xBE952494 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0xCDFD0F64 EQ PUSH2 0x408 JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x80258E47 GT PUSH2 0xFB JUMPI DUP1 PUSH4 0x80258E47 EQ PUSH2 0x38C JUMPI DUP1 PUSH4 0x81A24459 EQ PUSH2 0x394 JUMPI DUP1 PUSH4 0x8329138F EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0x99F4B251 EQ PUSH2 0x3E8 JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x4969AE70 EQ PUSH2 0x322 JUMPI DUP1 PUSH4 0x608D3D3D EQ PUSH2 0x340 JUMPI DUP1 PUSH4 0x74BE7592 EQ PUSH2 0x366 JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x2E6B6849 GT PUSH2 0x18E JUMPI DUP1 PUSH4 0x34CDCF26 GT PUSH2 0x168 JUMPI DUP1 PUSH4 0x34CDCF26 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x363AA6C7 EQ PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x3E6968B6 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x427534A4 EQ PUSH2 0x31A JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x2E6B6849 EQ PUSH2 0x27B JUMPI DUP1 PUSH4 0x302C11CA EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x329B1C92 EQ PUSH2 0x2C5 JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0x19A74AB3 GT PUSH2 0x1CA JUMPI DUP1 PUSH4 0x19A74AB3 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0x21B79D98 EQ PUSH2 0x227 JUMPI DUP1 PUSH4 0x231D4E2A EQ PUSH2 0x22F JUMPI DUP1 PUSH4 0x29D10B6E EQ PUSH2 0x255 JUMPI PUSH2 0x1EC JUMP JUMPDEST DUP1 PUSH4 0xC08BF88 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0x162F986D EQ PUSH2 0x1FB JUMPI DUP1 PUSH4 0x1777FB4B EQ PUSH2 0x203 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F9 PUSH2 0x442 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F9 PUSH2 0x460 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x4CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x20B PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0x50B JUMP JUMPDEST PUSH2 0x1F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x5A1 JUMP JUMPDEST PUSH2 0x1F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x68B JUMP JUMPDEST PUSH2 0x1F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x6A8 JUMP JUMPDEST PUSH2 0x2A9 PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x2A9 PUSH2 0x6DA JUMP JUMPDEST PUSH2 0x20B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0x704 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F9 PUSH2 0x7C6 JUMP JUMPDEST PUSH2 0x32A PUSH2 0x832 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x20B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x846 JUMP JUMPDEST PUSH2 0x1F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x37C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x859 JUMP JUMPDEST PUSH2 0x32A PUSH2 0x876 JUMP JUMPDEST PUSH2 0x20B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x884 JUMP JUMPDEST PUSH2 0x1F9 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x897 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xB86 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xD53 JUMP JUMPDEST PUSH2 0x410 PUSH2 0xD5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x32A PUSH2 0xD62 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xD85 JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xD8E JUMP JUMPDEST PUSH2 0x1F9 PUSH2 0xE1F JUMP JUMPDEST PUSH2 0x44B CALLER PUSH2 0x846 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x456 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x45E PUSH2 0xE28 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x477 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x480 CALLER PUSH2 0x884 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x48B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4A5 JUMPI INVALID JUMPDEST EQ PUSH2 0x4AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x2 SWAP2 SWAP1 PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH1 0xA0 PUSH1 0x2 EXP DUP4 JUMPDEST MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4F0 JUMPI INVALID JUMPDEST EQ DUP1 ISZERO PUSH2 0x506 JUMPI POP PUSH1 0x6 SLOAD PUSH1 0xA8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x522 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ PUSH2 0x53F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x559 JUMPI INVALID JUMPDEST EQ PUSH2 0x563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH22 0xFF000000000000000000000000000000000000000000 NOT AND PUSH1 0xA8 PUSH1 0x2 EXP OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5AA CALLER PUSH2 0x846 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x5B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x5CF JUMPI INVALID JUMPDEST EQ PUSH2 0x5D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x688 SWAP3 DUP5 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x657 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0xEEE AND JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x694 CALLER PUSH2 0x884 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x688 DUP2 PUSH2 0xFA6 JUMP JUMPDEST PUSH2 0x6B1 CALLER PUSH2 0x846 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x688 DUP2 PUSH2 0xFB7 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6FC PUSH1 0x2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFC8 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x71B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x724 CALLER PUSH2 0x884 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x72F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x749 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x754 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x5 DUP1 SLOAD PUSH22 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 NOT AND SWAP1 SSTORE PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH21 0x30000000000000000000000000000000000000000 OR PUSH22 0xFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xB8 PUSH1 0x2 EXP SWAP1 DIV PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7E6 CALLER PUSH2 0x884 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x80B JUMPI INVALID JUMPDEST EQ PUSH2 0x815 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH1 0xA0 PUSH1 0x2 EXP DUP4 PUSH2 0x4C8 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x506 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x6FC PUSH1 0x3 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFC8 AND JUMP JUMPDEST PUSH2 0x862 CALLER PUSH2 0x6E9 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x86D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x688 DUP2 PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6FC PUSH1 0x4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0xFC8 AND JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x8AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8B7 CALLER PUSH2 0x884 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x8DC JUMPI INVALID JUMPDEST EQ PUSH2 0x8E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x5 DUP1 SLOAD PUSH22 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 NOT AND PUSH3 0x10000 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP7 DUP8 AND MUL OR SWAP1 SSTORE PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH1 0xA0 PUSH1 0x2 EXP OR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x961 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x96A CALLER PUSH2 0x6E9 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x5 SLOAD PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x988 JUMPI INVALID JUMPDEST EQ PUSH2 0x992 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x9AC JUMPI INVALID JUMPDEST EQ PUSH2 0x9B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x9CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xB8 PUSH1 0x2 EXP SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO PUSH2 0xA44 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT PUSH23 0xFF00000000000000000000000000000000000000000000 NOT SWAP1 SWAP2 AND PUSH23 0x100000000000000000000000000000000000000000000 OR AND PUSH1 0xB8 PUSH1 0x2 EXP OR SWAP1 SSTORE PUSH2 0xB0C JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH2 0xFFFF PUSH1 0xB8 PUSH1 0x2 EXP DUP1 DUP5 DIV DUP3 AND SWAP3 SWAP1 SWAP3 ADD DUP2 AND DUP3 MUL PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP3 DUP4 SWAP1 SSTORE SWAP1 SWAP2 DIV AND PUSH2 0x16E EQ ISZERO PUSH2 0xB0C JUMPI PUSH1 0x6 DUP1 SLOAD PUSH25 0xFFFF0000000000000000000000000000000000000000000000 NOT PUSH1 0x1 PUSH1 0xFF PUSH23 0x100000000000000000000000000000000000000000000 DUP1 DUP6 DIV DUP3 AND SWAP3 SWAP1 SWAP3 ADD AND MUL PUSH23 0xFF00000000000000000000000000000000000000000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR AND PUSH1 0xB8 PUSH1 0x2 EXP OR SWAP1 SSTORE PUSH1 0x7 SLOAD PUSH1 0x2 SWAP1 DIV PUSH1 0x7 SSTORE JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x16D SWAP1 DIV PUSH1 0x64 PUSH1 0xA DUP3 MUL DIV PUSH1 0x0 DUP3 GT PUSH2 0xB28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xB35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 SLOAD PUSH2 0xB5F SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 PUSH3 0x10000 SWAP1 SWAP2 DIV AND DUP5 PUSH4 0xFFFFFFFF PUSH2 0xEEE AND JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 SLOAD PUSH2 0xB82 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH4 0xFFFFFFFF PUSH2 0xEEE AND JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xB9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBA6 CALLER PUSH2 0x846 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xBB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBCB JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0xBD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH22 0xFFFF0000000000000000000000000000000000000000 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xC0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC17 CALLER PUSH2 0x846 JUMP JUMPDEST ISZERO ISZERO PUSH2 0xC22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC3C JUMPI INVALID JUMPDEST EQ PUSH2 0xC46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x5 SLOAD PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xC59 JUMPI INVALID JUMPDEST EQ DUP1 ISZERO PUSH2 0xC66 JUMPI POP PUSH1 0x7 SLOAD ISZERO JUMPDEST ISZERO PUSH2 0x815 JUMPI PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xC82 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x1010 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x64 PUSH1 0xA DUP6 MUL DIV DUP5 ADD SWAP3 PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP2 DUP2 EQ PUSH2 0xD2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP4 DIV PUSH1 0x7 SSTORE POP POP PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 SWAP3 POP PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH1 0xA0 PUSH1 0x2 EXP DUP4 PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x45E CALLER PUSH2 0x10C2 JUMP JUMPDEST PUSH1 0x7 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH23 0x100000000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x45E CALLER PUSH2 0x10D3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xDA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ PUSH2 0xDC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x6 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xDDC JUMPI INVALID JUMPDEST EQ PUSH2 0xDE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xA8 PUSH1 0x2 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0xDFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH22 0xFF000000000000000000000000000000000000000000 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x45E CALLER PUSH2 0x10E4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xEB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0xEE6 JUMPI PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH2 0xEE6 SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH4 0xFFFFFFFF PUSH2 0xEEE AND JUMP JUMPDEST PUSH2 0x688 PUSH2 0x10F5 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF7E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0xFA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x688 PUSH1 0x4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x110D AND JUMP JUMPDEST PUSH2 0x688 PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x110D AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0xFDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x688 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x110D AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND ISZERO ISZERO PUSH2 0x102D JUMPI POP PUSH10 0x152D02C7E14AF6800000 PUSH2 0x6FF JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x104A JUMPI POP PUSH10 0xD3C21BCECCEDA1000000 PUSH2 0x6FF JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x1068 JUMPI POP PUSH11 0x1A784379D99DB42000000 PUSH2 0x6FF JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x3 EQ ISZERO PUSH2 0x1086 JUMPI POP PUSH11 0x27B46536C66C8E3000000 PUSH2 0x6FF JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x4 EQ ISZERO PUSH2 0x10A4 JUMPI POP PUSH11 0x34F086F3B33B684000000 PUSH2 0x6FF JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x5 EQ ISZERO PUSH2 0x6FF JUMPI POP PUSH11 0x422CA8B0A00A425000000 PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x688 PUSH1 0x4 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x115B AND JUMP JUMPDEST PUSH2 0x688 PUSH1 0x3 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x115B AND JUMP JUMPDEST PUSH2 0x688 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x115B AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND PUSH1 0xA0 PUSH1 0x2 EXP OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x112C DUP3 DUP3 PUSH2 0xFC8 JUMP JUMPDEST ISZERO PUSH2 0x1136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x1170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x117A DUP3 DUP3 PUSH2 0xFC8 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x1185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 LOG2 0xa7 0xd8 SHR 0x4b CALLCODE CALLDATACOPY 0xd8 CALLER 0xa7 SWAP3 RETURN 0xdd EQ 0xaf EXTCODEHASH DUP9 0xc7 0xc6 0xe7 0xd3 KECCAK256 PUSH5 0x8513595FCB 0xe0 NOT MSIZE 0x49 STOP 0x29 ", - "sourceMap": "619:5550:2:-;;;1311:647;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:647:2;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;1311:647:2;;;;;;;;;;;;;;;;;;;155:8:7;:21;;166:10;-1:-1:-1;;;;;;155:21:7;;;;;-1:-1:-1;;;;;;187:19:7;;;;-1:-1:-1;635:29:5;;;;;-1:-1:-1;;;;;635:29:5;;;;;1311:647:2;;;;;;;362:22:4;;:10;;;;:22;:::i;:::-;366:24:1;379:10;366:12;;;;:24;:::i;:::-;364:26:3;379:10;364:14;;;;:26;:::i;:::-;1624:1:2;1612:13;;;;;1604:22;;;;;;-1:-1:-1;;;;;1645:33:2;;;;1637:42;;;;;;1708:19;1695:9;:32;;;;;;;;;1692:109;;;-1:-1:-1;;;;;1752:36:2;;;;1744:45;;;;;;1813:10;:22;;1826:9;;1813:10;-1:-1:-1;;1813:22:2;;1826:9;1813:22;;;;;;;;;;;;-1:-1:-1;;1846:9:2;:20;;-1:-1:-1;;1846:20:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1877:28:2;;-1:-1:-1;;;;;1877:28:2;;;;;;;;1916:9;:34;;-1:-1:-1;;;;;;1916:34:2;;;;;;;;;;;-1:-1:-1;619:5550:2;;798:92:4;855:27;:14;874:7;855:18;;;;;;:27;:::i;:::-;798:92;:::o;822:96:1:-;881:29;:16;902:7;881:20;;;;;;:29;:::i;834:94:3:-;895:25;:12;912:7;895:16;;;;;;:25;:::i;259:181:8:-;-1:-1:-1;;;;;335:21:8;;;;327:30;;;;;;376:18;380:4;386:7;376:3;;;;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:8;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:8;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:8;;;;874:30;;;;;;-1:-1:-1;;;;;;921:20:8;:11;:20;;;;;;;;;;;;;;;786:162::o;619:5550:2:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "912600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "activateMiner()": "infinite", - "addCoreTeam(address)": "infinite", - "addSupervisor(address)": "infinite", - "addSystem(address)": "infinite", - "deactivateMiner()": "infinite", - "getCategory()": "474", - "getCurrentDay()": "581", - "getCurrentYear()": "473", - "getCurrentYearSupply()": "514", - "getMiner()": "635", - "getMinerType()": "501", - "getReferral()": "646", - "isAlgoMiner()": "300", - "isCoreTeam(address)": "infinite", - "isMining()": "880", - "isSupervisor(address)": "infinite", - "isSystem(address)": "infinite", - "migrateMiner(address)": "infinite", - "mine()": "infinite", - "pauseMining()": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSupervisor()": "infinite", - "renounceSystem()": "infinite", - "resetMiner(address,address)": "infinite", - "resumeMining()": "infinite", - "startMining()": "21741", - "stopAndRemoveOwnership()": "infinite", - "stopMining()": "21695", - "terminate()": "infinite" - } - }, - "methodIdentifiers": { - "activateMiner()": "b2a32cd5", - "addCoreTeam(address)": "2e6b6849", - "addSupervisor(address)": "29d10b6e", - "addSystem(address)": "74be7592", - "deactivateMiner()": "9e614ca0", - "getCategory()": "80258e47", - "getCurrentDay()": "3e6968b6", - "getCurrentYear()": "ce41607a", - "getCurrentYearSupply()": "cdfd0f64", - "getMiner()": "302c11ca", - "getMinerType()": "4969ae70", - "getReferral()": "329b1c92", - "isAlgoMiner()": "1777fb4b", - "isCoreTeam(address)": "608d3d3d", - "isMining()": "19a74ab3", - "isSupervisor(address)": "81a24459", - "isSystem(address)": "34cdcf26", - "migrateMiner(address)": "231d4e2a", - "mine()": "99f4b251", - "pauseMining()": "162f986d", - "renounceCoreTeam()": "d43acc79", - "renounceSupervisor()": "be952494", - "renounceSystem()": "e9d61859", - "resetMiner(address,address)": "8329138f", - "resumeMining()": "427534a4", - "startMining()": "21b79d98", - "stopAndRemoveOwnership()": "363aa6c7", - "stopMining()": "da408679", - "terminate()": "0c08bf88" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"terminate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pauseMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAlgoMiner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isMining\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMinerAddress\",\"type\":\"address\"}],\"name\":\"migrateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addSupervisor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMiner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getReferral\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSystem\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopAndRemoveOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"resumeMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getMinerType\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isCoreTeam\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addSystem\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCategory\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSupervisor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwnerAddress\",\"type\":\"address\"},{\"name\":\"newReferralAddress\",\"type\":\"address\"}],\"name\":\"resetMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mine\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deactivateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"activateMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceSupervisor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentYearSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentYear\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopMining\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceSystem\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"minerType\",\"type\":\"uint8\"},{\"name\":\"category\",\"type\":\"uint8\"},{\"name\":\"minerAccountAddress\",\"type\":\"address\"},{\"name\":\"referralAccountAddress\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol\":\"AlgoMiner\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":{\"keccak256\":\"0x014debd2c96ba7aba7faef24eac1f1a5d46791b55ae55fbd51d7945bf21277e0\",\"urls\":[\"bzzr://b8d1cffc7f1bfdc8c911d90b785cf9c2723b24bd162d7cfd730e127f56932fe9\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol\":{\"keccak256\":\"0x8252ea038586ac8cf89aea6810c1a75d84c2eba48d6b0ecc5f1783929de398a3\",\"urls\":[\"bzzr://3bd6a88368eeb6abb70573d16d481bc20bc22b6c0d3e60702c59c9fab4202528\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol\":{\"keccak256\":\"0xc2380a89ad6323344dd00f02f264f851dd49453de18e3dab8ed7cc13a1ee31db\",\"urls\":[\"bzzr://dcf790081bceacc3be474c4957629b5973332da040d44cf7969d80005b9671f1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol\":{\"keccak256\":\"0xfe4e8871ec41a8a704bda1fb30939151f4efa4e8cfbf705b9a1c1c5eeee87af2\",\"urls\":[\"bzzr://03d0c6d4c57474c1d775e0829e5b097d5ecb7e6732c010cf39f2575f4df45b2d\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol\":{\"keccak256\":\"0x79678e2992aafe0c33260767eba0b3c95474a2f0902154841f4ac62012528e67\",\"urls\":[\"bzzr://a4efbd6113fb5941933b0e94b0135d2ea7150a538ec80b9b5288a85506337f94\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol\":{\"keccak256\":\"0x2c964fd13fcc46f0326055bd50569f2bfb32ea7963780763d77b85ed51320205\",\"urls\":[\"bzzr://3fd83f4de7769670f420f04909921357a8ace3b9e0eb08b7c9df0ee57741d347\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol\":{\"keccak256\":\"0x861339f0f02c28b332f5d8dc165127fa1a402bbbfd7c3923acca26a6139e4f2b\",\"urls\":[\"bzzr://87e5728ff1289cbcc9669fae3a5b994b3a4e0788a2673595adcac700eea8c411\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol\":{\"keccak256\":\"0x8704856f4ea109e3df4805b3b3dd7d9b9026e94f80c42c6d750356d46036a530\",\"urls\":[\"bzzr://18db91d498a487cbc7085490ff2bf017849f88bb4032ea7d840bab3561c45cf4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol": { - "AlgoSupervisorRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addSupervisor(address)": "29d10b6e", - "isSupervisor(address)": "81a24459", - "renounceSupervisor()": "be952494" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol": { - "AlgoSystemRole": { - "abi": [ - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addSystem(address)": "74be7592", - "isSystem(address)": "34cdcf26", - "renounceSystem()": "e9d61859" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ERC20TokenHolder": { - "abi": [ - { - "inputs": [ - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "IAlgoMiner": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isMining", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMiner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReferral", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerType", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getCategory()": "80258e47", - "getMiner()": "302c11ca", - "getMinerType()": "4969ae70", - "getReferral()": "329b1c92", - "isAlgoMiner()": "1777fb4b", - "isMining()": "19a74ab3" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "Terminable": { - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "details": "Library for managing addresses assigned to a Role.", - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a7230582072caac54fe9b00b8b816307b2a5ded8de356c5be6012002ca36f81b18422d8260029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH19 0xCAAC54FE9B00B8B816307B2A5DED8DE356C5BE PUSH1 0x12 STOP 0x2c LOG3 PUSH16 0x81B18422D82600290000000000000000 ", - "sourceMap": "108:842:8:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing addresses assigned to a Role.\",\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "details": "Unsigned math operations with safety checks that revert on error", - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820c8fdc9a15986ffb647c7551d6f3c5b251c8209308e82491b559a3ee6cc289f670029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc8 REVERT 0xc9 LOG1 MSIZE DUP7 SELFDESTRUCT 0xb6 0x47 0xc7 SSTORE SAR PUSH16 0x3C5B251C8209308E82491B559A3EE6CC 0x28 SWAP16 PUSH8 0x29000000000000 ", - "sourceMap": "125:1726:9:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "see https://github.com/ethereum/EIPs/issues/20", - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "details": "Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "methods": {}, - "title": "SafeERC20" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820f19c7b62e065f91bc3f26e33372ab3fae2852e0b472cd6bb775c347272d9d5120029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 CALL SWAP13 PUSH28 0x62E065F91BC3F26E33372AB3FAE2852E0B472CD6BB775C347272D9D5 SLT STOP 0x29 ", - "sourceMap": "352:1248:11:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol", - "exportedSymbols": { - "AlgoCommon": [ - 97 - ] - }, - "id": 98, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:0" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 97, - "linearizedBaseContracts": [ - 97 - ], - "name": "AlgoCommon", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 8, - "name": "TOKEN_FACTOR", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "55:58:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "55:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 3, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "96:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3138", - "id": 5, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "110:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - } - ], - "id": 4, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "102:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 6, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "102:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "96:17:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13, - "name": "CAT_0_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "120:61:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "120:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "313030303030", - "id": 10, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "160:6:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100000_by_1", - "typeString": "int_const 100000" - }, - "value": "100000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 11, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "169:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "160:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 18, - "name": "CAT_1_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "188:62:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "188:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 15, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "228:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 16, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "238:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "228:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 25, - "name": "CAT_2_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "257:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "257:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 24, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - }, - "id": 22, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 20, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "297:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 21, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "301:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "297:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 23, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "311:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "297:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 32, - "name": "CAT_3_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "330:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "330:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - }, - "id": 29, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 27, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "370:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 28, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "374:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "370:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 30, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "384:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "370:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 39, - "name": "CAT_4_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "403:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 33, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "403:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 38, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - }, - "id": 36, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 34, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "443:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 35, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "447:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "443:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 37, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "457:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "443:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 46, - "name": "CAT_5_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "476:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 40, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "476:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 45, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - }, - "id": 43, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 41, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "516:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 42, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "520:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "516:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 44, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "530:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "516:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "body": { - "id": 95, - "nodeType": "Block", - "src": "630:426:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 55, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 53, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "644:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 54, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "656:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "644:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 61, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 59, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "713:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 60, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "725:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "713:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 67, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 65, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "782:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 66, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "794:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "782:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 73, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 71, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "851:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "863:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "851:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 79, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 77, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "920:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 78, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "932:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "920:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 85, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 83, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "989:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 84, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1001:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "989:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 89, - "nodeType": "IfStatement", - "src": "986:63:0", - "trueBody": { - "id": 88, - "nodeType": "Block", - "src": "1004:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 86, - "name": "CAT_5_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46, - "src": "1026:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 87, - "nodeType": "Return", - "src": "1019:18:0" - } - ] - } - }, - "id": 90, - "nodeType": "IfStatement", - "src": "917:132:0", - "trueBody": { - "id": 82, - "nodeType": "Block", - "src": "935:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 80, - "name": "CAT_4_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39, - "src": "957:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 81, - "nodeType": "Return", - "src": "950:18:0" - } - ] - } - }, - "id": 91, - "nodeType": "IfStatement", - "src": "848:201:0", - "trueBody": { - "id": 76, - "nodeType": "Block", - "src": "866:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 74, - "name": "CAT_3_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32, - "src": "888:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 75, - "nodeType": "Return", - "src": "881:18:0" - } - ] - } - }, - "id": 92, - "nodeType": "IfStatement", - "src": "779:270:0", - "trueBody": { - "id": 70, - "nodeType": "Block", - "src": "797:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 68, - "name": "CAT_2_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 25, - "src": "819:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 69, - "nodeType": "Return", - "src": "812:18:0" - } - ] - } - }, - "id": 93, - "nodeType": "IfStatement", - "src": "710:339:0", - "trueBody": { - "id": 64, - "nodeType": "Block", - "src": "728:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 62, - "name": "CAT_1_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "750:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 63, - "nodeType": "Return", - "src": "743:18:0" - } - ] - } - }, - "id": 94, - "nodeType": "IfStatement", - "src": "641:408:0", - "trueBody": { - "id": 58, - "nodeType": "Block", - "src": "659:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 56, - "name": "CAT_0_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13, - "src": "681:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 57, - "nodeType": "Return", - "src": "674:18:0" - } - ] - } - } - ] - }, - "documentation": null, - "id": 96, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCapacityByCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 49, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 48, - "name": "category", - "nodeType": "VariableDeclaration", - "scope": 96, - "src": "582:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 47, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "582:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "581:16:0" - }, - "returnParameters": { - "id": 52, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 51, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 96, - "src": "621:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 50, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "621:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "620:9:0" - }, - "scope": 97, - "src": "551:505:0", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 98, - "src": "26:1033:0" - } - ], - "src": "0:1059:0" - }, - "id": 0 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "exportedSymbols": { - "AlgoCoreTeamRole": [ - 184 - ] - }, - "id": 185, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 99, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:1" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 100, - "nodeType": "ImportDirective", - "scope": 185, - "sourceUnit": 1178, - "src": "26:189:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 184, - "linearizedBaseContracts": [ - 184 - ], - "name": "AlgoCoreTeamRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 103, - "libraryName": { - "contractScope": null, - "id": 101, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1177, - "src": "258:5:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$1177", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "252:27:1", - "typeName": { - "contractScope": null, - "id": 102, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "268:10:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 105, - "name": "_coreTeamMembers", - "nodeType": "VariableDeclaration", - "scope": 184, - "src": "287:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 104, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "287:10:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 113, - "nodeType": "Block", - "src": "355:43:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 109, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "379:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "379:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 108, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 171, - "src": "366:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "366:24:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 112, - "nodeType": "ExpressionStatement", - "src": "366:24:1" - } - ] - }, - "documentation": null, - "id": 114, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 106, - "nodeType": "ParameterList", - "parameters": [], - "src": "343:2:1" - }, - "returnParameters": { - "id": 107, - "nodeType": "ParameterList", - "parameters": [], - "src": "355:0:1" - }, - "scope": 184, - "src": "331:67:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 124, - "nodeType": "Block", - "src": "430:62:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 118, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "460:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "460:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 117, - "name": "isCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "449:10:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "449:22:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 116, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "441:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "441:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 122, - "nodeType": "ExpressionStatement", - "src": "441:31:1" - }, - { - "id": 123, - "nodeType": "PlaceholderStatement", - "src": "483:1:1" - } - ] - }, - "documentation": null, - "id": 125, - "name": "onlyCoreTeam", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 115, - "nodeType": "ParameterList", - "parameters": [], - "src": "427:2:1" - }, - "src": "406:86:1", - "visibility": "internal" - }, - { - "body": { - "id": 137, - "nodeType": "Block", - "src": "564:55:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 134, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "603:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 132, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "582:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 133, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 1176, - "src": "582:20:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "582:29:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 131, - "id": 136, - "nodeType": "Return", - "src": "575:36:1" - } - ] - }, - "documentation": null, - "id": 138, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 128, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 127, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "520:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "520:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "519:17:1" - }, - "returnParameters": { - "id": 131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "558:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 129, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "558:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "557:6:1" - }, - "scope": 184, - "src": "500:119:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 149, - "nodeType": "Block", - "src": "685:40:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 146, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 140, - "src": "709:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 145, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 171, - "src": "696:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "696:21:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 148, - "nodeType": "ExpressionStatement", - "src": "696:21:1" - } - ] - }, - "documentation": null, - "id": 150, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 143, - "modifierName": { - "argumentTypes": null, - "id": 142, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "672:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "672:12:1" - } - ], - "name": "addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 141, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 140, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 150, - "src": "648:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "648:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "647:17:1" - }, - "returnParameters": { - "id": 144, - "nodeType": "ParameterList", - "parameters": [], - "src": "685:0:1" - }, - "scope": 184, - "src": "627:98:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 158, - "nodeType": "Block", - "src": "768:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 154, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "795:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "795:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 153, - "name": "_removeCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 183, - "src": "779:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "779:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 157, - "nodeType": "ExpressionStatement", - "src": "779:27:1" - } - ] - }, - "documentation": null, - "id": 159, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [], - "src": "758:2:1" - }, - "returnParameters": { - "id": 152, - "nodeType": "ParameterList", - "parameters": [], - "src": "768:0:1" - }, - "scope": 184, - "src": "733:81:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 170, - "nodeType": "Block", - "src": "870:48:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 167, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 161, - "src": "902:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 164, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "881:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 166, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1122, - "src": "881:20:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "881:29:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 169, - "nodeType": "ExpressionStatement", - "src": "881:29:1" - } - ] - }, - "documentation": null, - "id": 171, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 162, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 161, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 171, - "src": "844:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 160, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "844:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "843:17:1" - }, - "returnParameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "870:0:1" - }, - "scope": 184, - "src": "822:96:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 182, - "nodeType": "Block", - "src": "977:51:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 179, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 173, - "src": "1012:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 176, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "988:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 178, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 1153, - "src": "988:23:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "988:32:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 181, - "nodeType": "ExpressionStatement", - "src": "988:32:1" - } - ] - }, - "documentation": null, - "id": 183, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 174, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 173, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 183, - "src": "951:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "951:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "950:17:1" - }, - "returnParameters": { - "id": 175, - "nodeType": "ParameterList", - "parameters": [], - "src": "977:0:1" - }, - "scope": 184, - "src": "926:102:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 185, - "src": "219:812:1" - } - ], - "src": "0:1033:1" - }, - "id": 1 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoMiner.sol", - "exportedSymbols": { - "AlgoMiner": [ - 782 - ] - }, - "id": 783, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 186, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:2" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 187, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 1375, - "src": "26:195:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 188, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 1520, - "src": "223:198:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "file": "./IAlgoMiner.sol", - "id": 189, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 1047, - "src": "425:26:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol", - "file": "./AlgoCommon.sol", - "id": 190, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 98, - "src": "453:26:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "file": "./ERC20TokenHolder.sol", - "id": 191, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 1014, - "src": "481:32:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol", - "file": "./AlgoSystemRole.sol", - "id": 192, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 957, - "src": "515:30:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "file": "./AlgoCoreTeamRole.sol", - "id": 193, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 185, - "src": "547:32:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol", - "file": "./AlgoSupervisorRole.sol", - "id": 194, - "nodeType": "ImportDirective", - "scope": 783, - "sourceUnit": 870, - "src": "581:34:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 195, - "name": "AlgoCommon", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 97, - "src": "641:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCommon_$97", - "typeString": "contract AlgoCommon" - } - }, - "id": 196, - "nodeType": "InheritanceSpecifier", - "src": "641:10:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 197, - "name": "ERC20TokenHolder", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1013, - "src": "653:16:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$1013", - "typeString": "contract ERC20TokenHolder" - } - }, - "id": 198, - "nodeType": "InheritanceSpecifier", - "src": "653:16:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 199, - "name": "AlgoSystemRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 956, - "src": "671:14:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoSystemRole_$956", - "typeString": "contract AlgoSystemRole" - } - }, - "id": 200, - "nodeType": "InheritanceSpecifier", - "src": "671:14:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 201, - "name": "AlgoCoreTeamRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 184, - "src": "687:16:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCoreTeamRole_$184", - "typeString": "contract AlgoCoreTeamRole" - } - }, - "id": 202, - "nodeType": "InheritanceSpecifier", - "src": "687:16:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 203, - "name": "AlgoSupervisorRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 869, - "src": "705:18:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoSupervisorRole_$869", - "typeString": "contract AlgoSupervisorRole" - } - }, - "id": 204, - "nodeType": "InheritanceSpecifier", - "src": "705:18:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 205, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1046, - "src": "725:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$1046", - "typeString": "contract IAlgoMiner" - } - }, - "id": 206, - "nodeType": "InheritanceSpecifier", - "src": "725:10:2" - } - ], - "contractDependencies": [ - 1013, - 1046, - 1083, - 869, - 97, - 184, - 956 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 782, - "linearizedBaseContracts": [ - 782, - 1046, - 869, - 184, - 956, - 1013, - 1083, - 97 - ], - "name": "AlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 209, - "libraryName": { - "contractScope": null, - "id": 207, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1519, - "src": "749:9:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "743:27:2", - "typeName": { - "contractScope": null, - "id": 208, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "763:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - } - }, - { - "constant": true, - "id": 212, - "name": "DAYS_PER_YEAR", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "778:44:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 210, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "778:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "hexValue": "333635", - "id": 211, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "819:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_365_by_1", - "typeString": "int_const 365" - }, - "value": "365" - }, - "visibility": "private" - }, - { - "canonicalName": "AlgoMiner.MinerType", - "id": 215, - "members": [ - { - "id": 213, - "name": "PoolBased", - "nodeType": "EnumValue", - "src": "857:9:2" - }, - { - "id": 214, - "name": "NonPoolBased", - "nodeType": "EnumValue", - "src": "877:12:2" - } - ], - "name": "MinerType", - "nodeType": "EnumDefinition", - "src": "831:65:2" - }, - { - "canonicalName": "AlgoMiner.MinerState", - "id": 220, - "members": [ - { - "id": 216, - "name": "Deactivated", - "nodeType": "EnumValue", - "src": "931:11:2" - }, - { - "id": 217, - "name": "Activated", - "nodeType": "EnumValue", - "src": "953:9:2" - }, - { - "id": 218, - "name": "Suspended", - "nodeType": "EnumValue", - "src": "973:9:2" - }, - { - "id": 219, - "name": "Stopped", - "nodeType": "EnumValue", - "src": "993:7:2" - } - ], - "name": "MinerState", - "nodeType": "EnumDefinition", - "src": "904:103:2" - }, - { - "constant": false, - "id": 222, - "name": "_minerType", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1015:28:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - }, - "typeName": { - "contractScope": null, - "id": 221, - "name": "MinerType", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 215, - "src": "1015:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 224, - "name": "_category", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1050:23:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 223, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1050:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 226, - "name": "_miner", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1080:22:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 225, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1080:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 228, - "name": "_referral", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1109:25:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 227, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1109:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 230, - "name": "_state", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1143:25:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "typeName": { - "contractScope": null, - "id": 229, - "name": "MinerState", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 220, - "src": "1143:10:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 232, - "name": "_mining", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1175:20:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 231, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1175:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 234, - "name": "_currentYear", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1202:26:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 233, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1202:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 236, - "name": "_currentDay", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1235:26:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 235, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1235:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 238, - "name": "_currentYearSupply", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "1268:34:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 237, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1268:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 304, - "nodeType": "Block", - "src": "1583:375:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 261, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 242, - "src": "1612:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1624:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "1612:13:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 260, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1604:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1604:22:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 265, - "nodeType": "ExpressionStatement", - "src": "1604:22:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 271, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 267, - "name": "minerAccountAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 244, - "src": "1645:19:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1676:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1668:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 270, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1668:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1645:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 266, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1637:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1637:42:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 273, - "nodeType": "ExpressionStatement", - "src": "1637:42:2" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - }, - "id": 277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 274, - "name": "minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 240, - "src": "1695:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 275, - "name": "MinerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 215, - "src": "1708:9:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerType_$215_$", - "typeString": "type(enum AlgoMiner.MinerType)" - } - }, - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "PoolBased", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1708:19:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "src": "1695:32:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 287, - "nodeType": "IfStatement", - "src": "1692:109:2", - "trueBody": { - "id": 286, - "nodeType": "Block", - "src": "1729:72:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 279, - "name": "referralAccountAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 246, - "src": "1752:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1786:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1778:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 282, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1778:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "1752:36:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 278, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1744:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1744:45:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 285, - "nodeType": "ExpressionStatement", - "src": "1744:45:2" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 290, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 288, - "name": "_minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 222, - "src": "1813:10:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 289, - "name": "minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 240, - "src": "1826:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "src": "1813:22:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "id": 291, - "nodeType": "ExpressionStatement", - "src": "1813:22:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 292, - "name": "_category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 224, - "src": "1846:9:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 293, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 242, - "src": "1858:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "1846:20:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 295, - "nodeType": "ExpressionStatement", - "src": "1846:20:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 296, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "1877:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 297, - "name": "minerAccountAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 244, - "src": "1886:19:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1877:28:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 299, - "nodeType": "ExpressionStatement", - "src": "1877:28:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 302, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 300, - "name": "_referral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 228, - "src": "1916:9:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 301, - "name": "referralAccountAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 246, - "src": "1928:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1916:34:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 303, - "nodeType": "ExpressionStatement", - "src": "1916:34:2" - } - ] - }, - "documentation": null, - "id": 305, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 251, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 248, - "src": "1469:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 252, - "modifierName": { - "argumentTypes": null, - "id": 250, - "name": "ERC20TokenHolder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1013, - "src": "1452:16:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20TokenHolder_$1013_$", - "typeString": "type(contract ERC20TokenHolder)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1452:30:2" - }, - { - "arguments": [], - "id": 254, - "modifierName": { - "argumentTypes": null, - "id": 253, - "name": "AlgoSystemRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "1492:14:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoSystemRole_$956_$", - "typeString": "type(contract AlgoSystemRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1492:16:2" - }, - { - "arguments": [], - "id": 256, - "modifierName": { - "argumentTypes": null, - "id": 255, - "name": "AlgoCoreTeamRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 184, - "src": "1518:16:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoCoreTeamRole_$184_$", - "typeString": "type(contract AlgoCoreTeamRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1518:18:2" - }, - { - "arguments": [], - "id": 258, - "modifierName": { - "argumentTypes": null, - "id": 257, - "name": "AlgoSupervisorRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 869, - "src": "1546:18:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoSupervisorRole_$869_$", - "typeString": "type(contract AlgoSupervisorRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "1546:20:2" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 249, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 240, - "name": "minerType", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1323:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - }, - "typeName": { - "contractScope": null, - "id": 239, - "name": "MinerType", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 215, - "src": "1323:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 242, - "name": "category", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1344:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 241, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1344:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 244, - "name": "minerAccountAddress", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1360:27:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 243, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1360:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 246, - "name": "referralAccountAddress", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1389:30:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 245, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1389:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 248, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 305, - "src": "1421:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 247, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1421:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1322:120:2" - }, - "returnParameters": { - "id": 259, - "nodeType": "ParameterList", - "parameters": [], - "src": "1583:0:2" - }, - "scope": 782, - "src": "1311:647:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 315, - "nodeType": "Block", - "src": "1987:60:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 311, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 308, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "2006:3:2", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2006:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 310, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "2020:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2006:20:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 307, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1998:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1998:29:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 313, - "nodeType": "ExpressionStatement", - "src": "1998:29:2" - }, - { - "id": 314, - "nodeType": "PlaceholderStatement", - "src": "2038:1:2" - } - ] - }, - "documentation": null, - "id": 316, - "name": "onlyMiner", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 306, - "nodeType": "ParameterList", - "parameters": [], - "src": "1984:2:2" - }, - "src": "1966:81:2", - "visibility": "internal" - }, - { - "body": { - "id": 382, - "nodeType": "Block", - "src": "2118:512:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 324, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "2137:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 325, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "2147:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 326, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2147:22:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2137:32:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 323, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "2129:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2129:41:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 329, - "nodeType": "ExpressionStatement", - "src": "2129:41:2" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - }, - "id": 333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 330, - "name": "_minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 222, - "src": "2186:10:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 331, - "name": "MinerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 215, - "src": "2200:9:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerType_$215_$", - "typeString": "type(enum AlgoMiner.MinerType)" - } - }, - "id": 332, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "PoolBased", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2200:19:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "src": "2186:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 334, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "2223:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 335, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2245:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2223:23:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2186:60:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 376, - "nodeType": "IfStatement", - "src": "2183:398:2", - "trueBody": { - "id": 375, - "nodeType": "Block", - "src": "2248:333:2", - "statements": [ - { - "assignments": [ - 339 - ], - "declarations": [ - { - "constant": false, - "id": 339, - "name": "capacity", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "2265:16:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 338, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2265:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 343, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 341, - "name": "_category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 224, - "src": "2306:9:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 340, - "name": "getCapacityByCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "2284:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint256_$", - "typeString": "function (uint8) pure returns (uint256)" - } - }, - "id": 342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2284:32:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2265:51:2" - }, - { - "assignments": [ - 345 - ], - "declarations": [ - { - "constant": false, - "id": 345, - "name": "expectedBalance", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "2331:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 344, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2331:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 353, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 346, - "name": "capacity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 339, - "src": "2357:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 347, - "name": "capacity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 339, - "src": "2368:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 348, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2379:2:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "src": "2368:13:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "313030", - "id": 350, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2384:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "100" - }, - "src": "2368:19:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2357:30:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2331:56:2" - }, - { - "assignments": [ - 355 - ], - "declarations": [ - { - "constant": false, - "id": 355, - "name": "currentBalance", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "2404:22:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2404:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 362, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 359, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "2454:4:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoMiner_$782", - "typeString": "contract AlgoMiner" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AlgoMiner_$782", - "typeString": "contract AlgoMiner" - } - ], - "id": 358, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2446:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 360, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2446:13:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 356, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "2429:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1348, - "src": "2429:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2429:31:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2404:56:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 364, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 355, - "src": "2485:14:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 365, - "name": "expectedBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 345, - "src": "2503:15:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2485:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 363, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "2477:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2477:42:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 368, - "nodeType": "ExpressionStatement", - "src": "2477:42:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 369, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "2536:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 370, - "name": "capacity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 339, - "src": "2557:8:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 371, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2568:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "2557:12:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2536:33:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 374, - "nodeType": "ExpressionStatement", - "src": "2536:33:2" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 377, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "2593:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 378, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "2602:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 379, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2602:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2593:29:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 381, - "nodeType": "ExpressionStatement", - "src": "2593:29:2" - } - ] - }, - "documentation": null, - "id": 383, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 319, - "modifierName": { - "argumentTypes": null, - "id": 318, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "2091:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2091:13:2" - }, - { - "arguments": null, - "id": 321, - "modifierName": { - "argumentTypes": null, - "id": 320, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2105:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2105:12:2" - } - ], - "name": "activateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 317, - "nodeType": "ParameterList", - "parameters": [], - "src": "2081:2:2" - }, - "returnParameters": { - "id": 322, - "nodeType": "ParameterList", - "parameters": [], - "src": "2118:0:2" - }, - "scope": 782, - "src": "2059:571:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 406, - "nodeType": "Block", - "src": "2699:138:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 391, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "2718:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 392, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "2728:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 393, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2728:22:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2718:32:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 390, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "2710:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2710:41:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 396, - "nodeType": "ExpressionStatement", - "src": "2710:41:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 397, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "2772:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 398, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "2781:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 399, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2781:22:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2772:31:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 401, - "nodeType": "ExpressionStatement", - "src": "2772:31:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 402, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "2814:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 403, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2824:5:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2814:15:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 405, - "nodeType": "ExpressionStatement", - "src": "2814:15:2" - } - ] - }, - "documentation": null, - "id": 407, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 386, - "modifierName": { - "argumentTypes": null, - "id": 385, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "2672:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2672:13:2" - }, - { - "arguments": null, - "id": 388, - "modifierName": { - "argumentTypes": null, - "id": 387, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2686:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2686:12:2" - } - ], - "name": "deactivateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 384, - "nodeType": "ParameterList", - "parameters": [], - "src": "2662:2:2" - }, - "returnParameters": { - "id": 389, - "nodeType": "ParameterList", - "parameters": [], - "src": "2699:0:2" - }, - "scope": 782, - "src": "2638:199:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 433, - "nodeType": "Block", - "src": "2912:142:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 415, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "2931:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 416, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "2941:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 417, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Deactivated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2941:22:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "2931:32:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 414, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "2923:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2923:41:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 420, - "nodeType": "ExpressionStatement", - "src": "2923:41:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 424, - "name": "newMinerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 409, - "src": "2997:15:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 428, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1570, - "src": "3039:4:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoMiner_$782", - "typeString": "contract AlgoMiner" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AlgoMiner_$782", - "typeString": "contract AlgoMiner" - } - ], - "id": 427, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3031:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3031:13:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 425, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "3014:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1348, - "src": "3014:16:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3014:31:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 421, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "2977:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1399, - "src": "2977:19:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1374_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1374_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2977:69:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 432, - "nodeType": "ExpressionStatement", - "src": "2977:69:2" - } - ] - }, - "documentation": null, - "id": 434, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 412, - "modifierName": { - "argumentTypes": null, - "id": 411, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "2899:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "2899:12:2" - } - ], - "name": "migrateMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 410, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 409, - "name": "newMinerAddress", - "nodeType": "VariableDeclaration", - "scope": 434, - "src": "2867:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 408, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2867:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2866:25:2" - }, - "returnParameters": { - "id": 413, - "nodeType": "ParameterList", - "parameters": [], - "src": "2912:0:2" - }, - "scope": 782, - "src": "2845:209:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 453, - "nodeType": "Block", - "src": "3121:108:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 442, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3140:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 443, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3150:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 444, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3150:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3140:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 441, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "3132:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3132:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 447, - "nodeType": "ExpressionStatement", - "src": "3132:39:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 448, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3192:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 449, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3201:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 450, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Suspended", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3201:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3192:29:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 452, - "nodeType": "ExpressionStatement", - "src": "3192:29:2" - } - ] - }, - "documentation": null, - "id": 454, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 437, - "modifierName": { - "argumentTypes": null, - "id": 436, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "3092:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3092:13:2" - }, - { - "arguments": null, - "id": 439, - "modifierName": { - "argumentTypes": null, - "id": 438, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 810, - "src": "3106:14:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3106:14:2" - } - ], - "name": "pauseMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 435, - "nodeType": "ParameterList", - "parameters": [], - "src": "3082:2:2" - }, - "returnParameters": { - "id": 440, - "nodeType": "ParameterList", - "parameters": [], - "src": "3121:0:2" - }, - "scope": 782, - "src": "3062:167:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 473, - "nodeType": "Block", - "src": "3297:100:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 462, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3316:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 463, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3326:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 464, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Suspended", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3326:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3316:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 461, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "3308:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3308:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 467, - "nodeType": "ExpressionStatement", - "src": "3308:39:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 468, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3360:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 469, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3369:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3369:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3360:29:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 472, - "nodeType": "ExpressionStatement", - "src": "3360:29:2" - } - ] - }, - "documentation": null, - "id": 474, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 457, - "modifierName": { - "argumentTypes": null, - "id": 456, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "3268:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3268:13:2" - }, - { - "arguments": null, - "id": 459, - "modifierName": { - "argumentTypes": null, - "id": 458, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 810, - "src": "3282:14:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3282:14:2" - } - ], - "name": "resumeMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 455, - "nodeType": "ParameterList", - "parameters": [], - "src": "3258:2:2" - }, - "returnParameters": { - "id": 460, - "nodeType": "ParameterList", - "parameters": [], - "src": "3297:0:2" - }, - "scope": 782, - "src": "3237:160:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 509, - "nodeType": "Block", - "src": "3475:193:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 482, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3494:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 483, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3504:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 484, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3504:18:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3494:28:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 481, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "3486:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3486:37:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 487, - "nodeType": "ExpressionStatement", - "src": "3486:37:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 488, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3544:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 489, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3553:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 490, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3553:18:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3544:27:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 492, - "nodeType": "ExpressionStatement", - "src": "3544:27:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 493, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "3582:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 494, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3592:5:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "3582:15:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 496, - "nodeType": "ExpressionStatement", - "src": "3582:15:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 497, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "3608:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 499, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3625:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 498, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3617:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3617:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3608:19:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 502, - "nodeType": "ExpressionStatement", - "src": "3608:19:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 503, - "name": "_referral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 228, - "src": "3638:9:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3658:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 504, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3650:7:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 506, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3650:10:2", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "3638:22:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 508, - "nodeType": "ExpressionStatement", - "src": "3638:22:2" - } - ] - }, - "documentation": null, - "id": 510, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 477, - "modifierName": { - "argumentTypes": null, - "id": 476, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "3446:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3446:13:2" - }, - { - "arguments": null, - "id": 479, - "modifierName": { - "argumentTypes": null, - "id": 478, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 810, - "src": "3460:14:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3460:14:2" - } - ], - "name": "stopAndRemoveOwnership", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 475, - "nodeType": "ParameterList", - "parameters": [], - "src": "3436:2:2" - }, - "returnParameters": { - "id": 480, - "nodeType": "ParameterList", - "parameters": [], - "src": "3475:0:2" - }, - "scope": 782, - "src": "3405:263:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 541, - "nodeType": "Block", - "src": "3785:174:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 522, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3804:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 523, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3814:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 524, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Stopped", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3814:18:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3804:28:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 521, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "3796:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "3796:37:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 527, - "nodeType": "ExpressionStatement", - "src": "3796:37:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 528, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "3846:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 529, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "3855:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 530, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "3855:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "3846:29:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "id": 532, - "nodeType": "ExpressionStatement", - "src": "3846:29:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 533, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "3886:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 534, - "name": "newOwnerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 512, - "src": "3895:15:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3886:24:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 536, - "nodeType": "ExpressionStatement", - "src": "3886:24:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 537, - "name": "_referral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 228, - "src": "3921:9:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 538, - "name": "newReferralAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 514, - "src": "3933:18:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3921:30:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 540, - "nodeType": "ExpressionStatement", - "src": "3921:30:2" - } - ] - }, - "documentation": null, - "id": 542, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 517, - "modifierName": { - "argumentTypes": null, - "id": 516, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "3756:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3756:13:2" - }, - { - "arguments": null, - "id": 519, - "modifierName": { - "argumentTypes": null, - "id": 518, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 810, - "src": "3770:14:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3770:14:2" - } - ], - "name": "resetMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 515, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 512, - "name": "newOwnerAddress", - "nodeType": "VariableDeclaration", - "scope": 542, - "src": "3696:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 511, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3696:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 514, - "name": "newReferralAddress", - "nodeType": "VariableDeclaration", - "scope": 542, - "src": "3721:26:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 513, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3721:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "3695:53:2" - }, - "returnParameters": { - "id": 520, - "nodeType": "ParameterList", - "parameters": [], - "src": "3785:0:2" - }, - "scope": 782, - "src": "3676:283:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 565, - "nodeType": "Block", - "src": "4021:121:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 550, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "4040:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 551, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "4050:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 552, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4050:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "4040:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 549, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4032:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4032:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 555, - "nodeType": "ExpressionStatement", - "src": "4032:39:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4090:8:2", - "subExpression": { - "argumentTypes": null, - "id": 557, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "4091:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 556, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4082:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4082:17:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 560, - "nodeType": "ExpressionStatement", - "src": "4082:17:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 561, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "4120:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 562, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4130:4:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "4120:14:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 564, - "nodeType": "ExpressionStatement", - "src": "4120:14:2" - } - ] - }, - "documentation": null, - "id": 566, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 545, - "modifierName": { - "argumentTypes": null, - "id": 544, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "3997:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "3997:13:2" - }, - { - "arguments": null, - "id": 547, - "modifierName": { - "argumentTypes": null, - "id": 546, - "name": "onlyMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 316, - "src": "4011:9:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4011:9:2" - } - ], - "name": "startMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 543, - "nodeType": "ParameterList", - "parameters": [], - "src": "3987:2:2" - }, - "returnParameters": { - "id": 548, - "nodeType": "ParameterList", - "parameters": [], - "src": "4021:0:2" - }, - "scope": 782, - "src": "3967:175:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 588, - "nodeType": "Block", - "src": "4203:121:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 574, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "4222:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 575, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "4232:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 576, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4232:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "4222:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 573, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4214:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4214:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 579, - "nodeType": "ExpressionStatement", - "src": "4214:39:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 581, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "4272:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 580, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4264:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4264:16:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 583, - "nodeType": "ExpressionStatement", - "src": "4264:16:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 584, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "4301:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4311:5:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "4301:15:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 587, - "nodeType": "ExpressionStatement", - "src": "4301:15:2" - } - ] - }, - "documentation": null, - "id": 589, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 569, - "modifierName": { - "argumentTypes": null, - "id": 568, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "4179:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4179:13:2" - }, - { - "arguments": null, - "id": 571, - "modifierName": { - "argumentTypes": null, - "id": 570, - "name": "onlyMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 316, - "src": "4193:9:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4193:9:2" - } - ], - "name": "stopMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 567, - "nodeType": "ParameterList", - "parameters": [], - "src": "4169:2:2" - }, - "returnParameters": { - "id": 572, - "nodeType": "ParameterList", - "parameters": [], - "src": "4203:0:2" - }, - "scope": 782, - "src": "4150:174:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 692, - "nodeType": "Block", - "src": "4380:800:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - }, - "id": 600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 597, - "name": "_minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 222, - "src": "4399:10:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 598, - "name": "MinerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 215, - "src": "4413:9:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerType_$215_$", - "typeString": "type(enum AlgoMiner.MinerType)" - } - }, - "id": 599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "PoolBased", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4413:19:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - }, - "src": "4399:33:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 596, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4391:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 601, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4391:42:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 602, - "nodeType": "ExpressionStatement", - "src": "4391:42:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 607, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 604, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "4452:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 605, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "4462:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 606, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "4462:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "4452:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 603, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4444:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4444:39:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 609, - "nodeType": "ExpressionStatement", - "src": "4444:39:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 611, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "4502:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 610, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "4494:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "4494:16:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 613, - "nodeType": "ExpressionStatement", - "src": "4494:16:2" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "id": 616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 614, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "4526:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 615, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4541:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4526:16:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 650, - "nodeType": "Block", - "src": "4623:238:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "4638:13:2", - "subExpression": { - "argumentTypes": null, - "id": 626, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "4638:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 628, - "nodeType": "ExpressionStatement", - "src": "4638:13:2" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 629, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "4669:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 630, - "name": "DAYS_PER_YEAR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 212, - "src": "4685:13:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 631, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4701:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4685:17:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 633, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4684:19:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4669:34:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 649, - "nodeType": "IfStatement", - "src": "4666:184:2", - "trueBody": { - "id": 648, - "nodeType": "Block", - "src": "4705:145:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "4724:14:2", - "subExpression": { - "argumentTypes": null, - "id": 635, - "name": "_currentYear", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 234, - "src": "4724:12:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 637, - "nodeType": "ExpressionStatement", - "src": "4724:14:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 638, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "4757:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 639, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4771:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4757:15:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 641, - "nodeType": "ExpressionStatement", - "src": "4757:15:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 642, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "4791:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 643, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "4812:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 644, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4833:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "4812:22:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4791:43:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 647, - "nodeType": "ExpressionStatement", - "src": "4791:43:2" - } - ] - } - } - ] - }, - "id": 651, - "nodeType": "IfStatement", - "src": "4523:338:2", - "trueBody": { - "id": 625, - "nodeType": "Block", - "src": "4544:73:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 617, - "name": "_currentYear", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 234, - "src": "4559:12:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4574:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4559:16:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 620, - "nodeType": "ExpressionStatement", - "src": "4559:16:2" - }, - { - "expression": { - "argumentTypes": null, - "id": 623, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 621, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "4590:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "31", - "id": 622, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4604:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "4590:15:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 624, - "nodeType": "ExpressionStatement", - "src": "4590:15:2" - } - ] - } - }, - { - "assignments": [ - 653 - ], - "declarations": [ - { - "constant": false, - "id": 653, - "name": "minerTokens", - "nodeType": "VariableDeclaration", - "scope": 692, - "src": "4873:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 652, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4873:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 657, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 654, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "4895:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 655, - "name": "DAYS_PER_YEAR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 212, - "src": "4916:13:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4895:34:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4873:56:2" - }, - { - "assignments": [ - 659 - ], - "declarations": [ - { - "constant": false, - "id": 659, - "name": "referralTokens", - "nodeType": "VariableDeclaration", - "scope": 692, - "src": "4940:22:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 658, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4940:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 665, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 664, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 662, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 660, - "name": "minerTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 653, - "src": "4965:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 661, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4979:2:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "src": "4965:16:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "313030", - "id": 663, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4984:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "100" - }, - "src": "4965:22:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4940:47:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 667, - "name": "minerTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 653, - "src": "5008:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5022:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5008:15:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 666, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "5000:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5000:24:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 671, - "nodeType": "ExpressionStatement", - "src": "5000:24:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 675, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 673, - "name": "referralTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 659, - "src": "5043:14:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 674, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5060:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5043:18:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 672, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "5035:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5035:27:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 677, - "nodeType": "ExpressionStatement", - "src": "5035:27:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 681, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "5095:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 682, - "name": "minerTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 653, - "src": "5103:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 678, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "5075:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1399, - "src": "5075:19:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1374_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1374_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5075:40:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 684, - "nodeType": "ExpressionStatement", - "src": "5075:40:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 688, - "name": "_referral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 228, - "src": "5146:9:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 689, - "name": "referralTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 659, - "src": "5157:14:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 685, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "5126:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1399, - "src": "5126:19:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1374_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1374_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5126:46:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 691, - "nodeType": "ExpressionStatement", - "src": "5126:46:2" - } - ] - }, - "documentation": null, - "id": 693, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 592, - "modifierName": { - "argumentTypes": null, - "id": 591, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1074, - "src": "4355:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4355:13:2" - }, - { - "arguments": null, - "id": 594, - "modifierName": { - "argumentTypes": null, - "id": 593, - "name": "onlySystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 897, - "src": "4369:10:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "4369:10:2" - } - ], - "name": "mine", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 590, - "nodeType": "ParameterList", - "parameters": [], - "src": "4345:2:2" - }, - "returnParameters": { - "id": 595, - "nodeType": "ParameterList", - "parameters": [], - "src": "4380:0:2" - }, - "scope": 782, - "src": "4332:848:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 701, - "nodeType": "Block", - "src": "5229:31:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 698, - "name": "_terminate", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1012 - ], - "referencedDeclaration": 1012, - "src": "5240:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5240:12:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 700, - "nodeType": "ExpressionStatement", - "src": "5240:12:2" - } - ] - }, - "documentation": null, - "id": 702, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 696, - "modifierName": { - "argumentTypes": null, - "id": 695, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "5216:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "5216:12:2" - } - ], - "name": "terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 694, - "nodeType": "ParameterList", - "parameters": [], - "src": "5206:2:2" - }, - "returnParameters": { - "id": 697, - "nodeType": "ParameterList", - "parameters": [], - "src": "5229:0:2" - }, - "scope": 782, - "src": "5188:72:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 709, - "nodeType": "Block", - "src": "5318:30:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 707, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5336:4:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 706, - "id": 708, - "nodeType": "Return", - "src": "5329:11:2" - } - ] - }, - "documentation": null, - "id": 710, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 703, - "nodeType": "ParameterList", - "parameters": [], - "src": "5288:2:2" - }, - "returnParameters": { - "id": 706, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 705, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 710, - "src": "5312:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 704, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5312:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5311:6:2" - }, - "scope": 782, - "src": "5268:80:2", - "stateMutability": "pure", - "superFunction": 1020, - "visibility": "public" - }, - { - "body": { - "id": 719, - "nodeType": "Block", - "src": "5408:43:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 716, - "name": "_minerType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 222, - "src": "5432:10:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_enum$_MinerType_$215", - "typeString": "enum AlgoMiner.MinerType" - } - ], - "id": 715, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5426:5:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": "uint8" - }, - "id": 717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "5426:17:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 714, - "id": 718, - "nodeType": "Return", - "src": "5419:24:2" - } - ] - }, - "documentation": null, - "id": 720, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getMinerType", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 711, - "nodeType": "ParameterList", - "parameters": [], - "src": "5377:2:2" - }, - "returnParameters": { - "id": 714, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 713, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "5401:5:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 712, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5401:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5400:7:2" - }, - "scope": 782, - "src": "5356:95:2", - "stateMutability": "view", - "superFunction": 1025, - "visibility": "public" - }, - { - "body": { - "id": 727, - "nodeType": "Block", - "src": "5510:35:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 725, - "name": "_category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 224, - "src": "5528:9:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 724, - "id": 726, - "nodeType": "Return", - "src": "5521:16:2" - } - ] - }, - "documentation": null, - "id": 728, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 721, - "nodeType": "ParameterList", - "parameters": [], - "src": "5479:2:2" - }, - "returnParameters": { - "id": 724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 723, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 728, - "src": "5503:5:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 722, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5503:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5502:7:2" - }, - "scope": 782, - "src": "5459:86:2", - "stateMutability": "view", - "superFunction": 1030, - "visibility": "public" - }, - { - "body": { - "id": 735, - "nodeType": "Block", - "src": "5603:32:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 733, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 226, - "src": "5621:6:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 732, - "id": 734, - "nodeType": "Return", - "src": "5614:13:2" - } - ] - }, - "documentation": null, - "id": 736, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 729, - "nodeType": "ParameterList", - "parameters": [], - "src": "5570:2:2" - }, - "returnParameters": { - "id": 732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 731, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 736, - "src": "5594:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 730, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5594:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5593:9:2" - }, - "scope": 782, - "src": "5553:82:2", - "stateMutability": "view", - "superFunction": 1035, - "visibility": "public" - }, - { - "body": { - "id": 743, - "nodeType": "Block", - "src": "5696:35:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 741, - "name": "_referral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 228, - "src": "5714:9:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 740, - "id": 742, - "nodeType": "Return", - "src": "5707:16:2" - } - ] - }, - "documentation": null, - "id": 744, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getReferral", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 737, - "nodeType": "ParameterList", - "parameters": [], - "src": "5663:2:2" - }, - "returnParameters": { - "id": 740, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 739, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 744, - "src": "5687:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 738, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5687:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5686:9:2" - }, - "scope": 782, - "src": "5643:88:2", - "stateMutability": "view", - "superFunction": 1040, - "visibility": "public" - }, - { - "body": { - "id": 756, - "nodeType": "Block", - "src": "5786:67:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 754, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - }, - "id": 752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 749, - "name": "_state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 230, - "src": "5804:6:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 750, - "name": "MinerState", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 220, - "src": "5814:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_MinerState_$220_$", - "typeString": "type(enum AlgoMiner.MinerState)" - } - }, - "id": 751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "Activated", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "5814:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MinerState_$220", - "typeString": "enum AlgoMiner.MinerState" - } - }, - "src": "5804:30:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "argumentTypes": null, - "id": 753, - "name": "_mining", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 232, - "src": "5838:7:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "5804:41:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 748, - "id": 755, - "nodeType": "Return", - "src": "5797:48:2" - } - ] - }, - "documentation": null, - "id": 757, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 745, - "nodeType": "ParameterList", - "parameters": [], - "src": "5756:2:2" - }, - "returnParameters": { - "id": 748, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 747, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 757, - "src": "5780:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 746, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5780:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5779:6:2" - }, - "scope": 782, - "src": "5739:114:2", - "stateMutability": "view", - "superFunction": 1045, - "visibility": "public" - }, - { - "body": { - "id": 764, - "nodeType": "Block", - "src": "5915:38:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 762, - "name": "_currentYear", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 234, - "src": "5933:12:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 761, - "id": 763, - "nodeType": "Return", - "src": "5926:19:2" - } - ] - }, - "documentation": null, - "id": 765, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCurrentYear", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 758, - "nodeType": "ParameterList", - "parameters": [], - "src": "5884:2:2" - }, - "returnParameters": { - "id": 761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 760, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 765, - "src": "5908:5:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 759, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5908:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "5907:7:2" - }, - "scope": 782, - "src": "5861:92:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 772, - "nodeType": "Block", - "src": "6015:37:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 770, - "name": "_currentDay", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 236, - "src": "6033:11:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "functionReturnParameters": 769, - "id": 771, - "nodeType": "Return", - "src": "6026:18:2" - } - ] - }, - "documentation": null, - "id": 773, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCurrentDay", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 766, - "nodeType": "ParameterList", - "parameters": [], - "src": "5983:2:2" - }, - "returnParameters": { - "id": 769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 768, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 773, - "src": "6007:6:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 767, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "6007:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6006:8:2" - }, - "scope": 782, - "src": "5961:91:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 780, - "nodeType": "Block", - "src": "6122:44:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 778, - "name": "_currentYearSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "6140:18:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 777, - "id": 779, - "nodeType": "Return", - "src": "6133:25:2" - } - ] - }, - "documentation": null, - "id": 781, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCurrentYearSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 774, - "nodeType": "ParameterList", - "parameters": [], - "src": "6089:2:2" - }, - "returnParameters": { - "id": 777, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 776, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 781, - "src": "6113:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 775, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6113:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "6112:9:2" - }, - "scope": 782, - "src": "6060:106:2", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 783, - "src": "619:5550:2" - } - ], - "src": "0:6171:2" - }, - "id": 2 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSupervisorRole.sol", - "exportedSymbols": { - "AlgoSupervisorRole": [ - 869 - ] - }, - "id": 870, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 784, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:3" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 785, - "nodeType": "ImportDirective", - "scope": 870, - "sourceUnit": 1178, - "src": "26:189:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 869, - "linearizedBaseContracts": [ - 869 - ], - "name": "AlgoSupervisorRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 788, - "libraryName": { - "contractScope": null, - "id": 786, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1177, - "src": "260:5:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$1177", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "254:27:3", - "typeName": { - "contractScope": null, - "id": 787, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "270:10:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 790, - "name": "_supervisors", - "nodeType": "VariableDeclaration", - "scope": 869, - "src": "289:31:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 789, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "289:10:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 798, - "nodeType": "Block", - "src": "353:45:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 794, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "379:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "379:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 793, - "name": "_addSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 856, - "src": "364:14:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "364:26:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 797, - "nodeType": "ExpressionStatement", - "src": "364:26:3" - } - ] - }, - "documentation": null, - "id": 799, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 791, - "nodeType": "ParameterList", - "parameters": [], - "src": "341:2:3" - }, - "returnParameters": { - "id": 792, - "nodeType": "ParameterList", - "parameters": [], - "src": "353:0:3" - }, - "scope": 869, - "src": "329:69:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 809, - "nodeType": "Block", - "src": "432:64:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 803, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "464:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "464:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 802, - "name": "isSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 823, - "src": "451:12:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "451:24:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 801, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "443:7:3", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 806, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "443:33:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 807, - "nodeType": "ExpressionStatement", - "src": "443:33:3" - }, - { - "id": 808, - "nodeType": "PlaceholderStatement", - "src": "487:1:3" - } - ] - }, - "documentation": null, - "id": 810, - "name": "onlySupervisor", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 800, - "nodeType": "ParameterList", - "parameters": [], - "src": "429:2:3" - }, - "src": "406:90:3", - "visibility": "internal" - }, - { - "body": { - "id": 822, - "nodeType": "Block", - "src": "570:51:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 819, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 812, - "src": "605:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 817, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 790, - "src": "588:12:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 818, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 1176, - "src": "588:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "588:25:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 816, - "id": 821, - "nodeType": "Return", - "src": "581:32:3" - } - ] - }, - "documentation": null, - "id": 823, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 813, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 812, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 823, - "src": "526:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 811, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "526:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "525:17:3" - }, - "returnParameters": { - "id": 816, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 815, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 823, - "src": "564:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 814, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "564:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "563:6:3" - }, - "scope": 869, - "src": "504:117:3", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 834, - "nodeType": "Block", - "src": "691:42:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 831, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 825, - "src": "717:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 830, - "name": "_addSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 856, - "src": "702:14:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "702:23:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 833, - "nodeType": "ExpressionStatement", - "src": "702:23:3" - } - ] - }, - "documentation": null, - "id": 835, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 828, - "modifierName": { - "argumentTypes": null, - "id": 827, - "name": "onlySupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 810, - "src": "676:14:3", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "676:14:3" - } - ], - "name": "addSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 825, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 835, - "src": "652:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 824, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "652:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "651:17:3" - }, - "returnParameters": { - "id": 829, - "nodeType": "ParameterList", - "parameters": [], - "src": "691:0:3" - }, - "scope": 869, - "src": "629:104:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 843, - "nodeType": "Block", - "src": "778:48:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 839, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "807:3:3", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 840, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "807:10:3", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 838, - "name": "_removeSupervisor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 868, - "src": "789:17:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "789:29:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 842, - "nodeType": "ExpressionStatement", - "src": "789:29:3" - } - ] - }, - "documentation": null, - "id": 844, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 836, - "nodeType": "ParameterList", - "parameters": [], - "src": "768:2:3" - }, - "returnParameters": { - "id": 837, - "nodeType": "ParameterList", - "parameters": [], - "src": "778:0:3" - }, - "scope": 869, - "src": "741:85:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 855, - "nodeType": "Block", - "src": "884:44:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 852, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 846, - "src": "912:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 849, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 790, - "src": "895:12:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 851, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1122, - "src": "895:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "895:25:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 854, - "nodeType": "ExpressionStatement", - "src": "895:25:3" - } - ] - }, - "documentation": null, - "id": 856, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 847, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 846, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 856, - "src": "858:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 845, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "858:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "857:17:3" - }, - "returnParameters": { - "id": 848, - "nodeType": "ParameterList", - "parameters": [], - "src": "884:0:3" - }, - "scope": 869, - "src": "834:94:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 867, - "nodeType": "Block", - "src": "989:47:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 864, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 858, - "src": "1020:7:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 861, - "name": "_supervisors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 790, - "src": "1000:12:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 863, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 1153, - "src": "1000:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1000:28:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 866, - "nodeType": "ExpressionStatement", - "src": "1000:28:3" - } - ] - }, - "documentation": null, - "id": 868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeSupervisor", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 858, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 868, - "src": "963:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 857, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "963:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "962:17:3" - }, - "returnParameters": { - "id": 860, - "nodeType": "ParameterList", - "parameters": [], - "src": "989:0:3" - }, - "scope": 869, - "src": "936:100:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 870, - "src": "219:820:3" - } - ], - "src": "0:1041:3" - }, - "id": 3 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoSystemRole.sol", - "exportedSymbols": { - "AlgoSystemRole": [ - 956 - ] - }, - "id": 957, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 871, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:4" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 872, - "nodeType": "ImportDirective", - "scope": 957, - "sourceUnit": 1178, - "src": "26:189:4", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 956, - "linearizedBaseContracts": [ - 956 - ], - "name": "AlgoSystemRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 875, - "libraryName": { - "contractScope": null, - "id": 873, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1177, - "src": "256:5:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$1177", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "250:27:4", - "typeName": { - "contractScope": null, - "id": 874, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "266:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 877, - "name": "_systemMembers", - "nodeType": "VariableDeclaration", - "scope": 956, - "src": "285:33:4", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 876, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "285:10:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 885, - "nodeType": "Block", - "src": "351:41:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 881, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "373:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 882, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "373:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 880, - "name": "_addSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 943, - "src": "362:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "362:22:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 884, - "nodeType": "ExpressionStatement", - "src": "362:22:4" - } - ] - }, - "documentation": null, - "id": 886, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 878, - "nodeType": "ParameterList", - "parameters": [], - "src": "339:2:4" - }, - "returnParameters": { - "id": 879, - "nodeType": "ParameterList", - "parameters": [], - "src": "351:0:4" - }, - "scope": 956, - "src": "327:65:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 896, - "nodeType": "Block", - "src": "422:60:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 890, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "450:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "450:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 889, - "name": "isSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 910, - "src": "441:8:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "441:20:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 888, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "433:7:4", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "433:29:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 894, - "nodeType": "ExpressionStatement", - "src": "433:29:4" - }, - { - "id": 895, - "nodeType": "PlaceholderStatement", - "src": "473:1:4" - } - ] - }, - "documentation": null, - "id": 897, - "name": "onlySystem", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 887, - "nodeType": "ParameterList", - "parameters": [], - "src": "419:2:4" - }, - "src": "400:82:4", - "visibility": "internal" - }, - { - "body": { - "id": 909, - "nodeType": "Block", - "src": "552:53:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 906, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 899, - "src": "589:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 904, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 877, - "src": "570:14:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 905, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 1176, - "src": "570:18:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "570:27:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 903, - "id": 908, - "nodeType": "Return", - "src": "563:34:4" - } - ] - }, - "documentation": null, - "id": 910, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 900, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 899, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 910, - "src": "508:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "508:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "507:17:4" - }, - "returnParameters": { - "id": 903, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 902, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 910, - "src": "546:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 901, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "546:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "545:6:4" - }, - "scope": 956, - "src": "490:115:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 921, - "nodeType": "Block", - "src": "667:38:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 918, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 912, - "src": "689:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 917, - "name": "_addSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 943, - "src": "678:10:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "678:19:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 920, - "nodeType": "ExpressionStatement", - "src": "678:19:4" - } - ] - }, - "documentation": null, - "id": 922, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 915, - "modifierName": { - "argumentTypes": null, - "id": 914, - "name": "onlySystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 897, - "src": "656:10:4", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "656:10:4" - } - ], - "name": "addSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 913, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 912, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 922, - "src": "632:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 911, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "631:17:4" - }, - "returnParameters": { - "id": 916, - "nodeType": "ParameterList", - "parameters": [], - "src": "667:0:4" - }, - "scope": 956, - "src": "613:92:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 930, - "nodeType": "Block", - "src": "746:44:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 926, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "771:3:4", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "771:10:4", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 925, - "name": "_removeSystem", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "757:13:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 928, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "757:25:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 929, - "nodeType": "ExpressionStatement", - "src": "757:25:4" - } - ] - }, - "documentation": null, - "id": 931, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 923, - "nodeType": "ParameterList", - "parameters": [], - "src": "736:2:4" - }, - "returnParameters": { - "id": 924, - "nodeType": "ParameterList", - "parameters": [], - "src": "746:0:4" - }, - "scope": 956, - "src": "713:77:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 942, - "nodeType": "Block", - "src": "844:46:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 939, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 933, - "src": "874:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 936, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 877, - "src": "855:14:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 938, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1122, - "src": "855:18:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "855:27:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 941, - "nodeType": "ExpressionStatement", - "src": "855:27:4" - } - ] - }, - "documentation": null, - "id": 943, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 934, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 933, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 943, - "src": "818:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "817:17:4" - }, - "returnParameters": { - "id": 935, - "nodeType": "ParameterList", - "parameters": [], - "src": "844:0:4" - }, - "scope": 956, - "src": "798:92:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 954, - "nodeType": "Block", - "src": "947:49:4", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 951, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 945, - "src": "980:7:4", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 948, - "name": "_systemMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 877, - "src": "958:14:4", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 950, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 1153, - "src": "958:21:4", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$1090_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "958:30:4", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 953, - "nodeType": "ExpressionStatement", - "src": "958:30:4" - } - ] - }, - "documentation": null, - "id": 955, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeSystem", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 946, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 945, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 955, - "src": "921:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 944, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "921:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "920:17:4" - }, - "returnParameters": { - "id": 947, - "nodeType": "ParameterList", - "parameters": [], - "src": "947:0:4" - }, - "scope": 956, - "src": "898:98:4", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 957, - "src": "219:780:4" - } - ], - "src": "0:1001:4" - }, - "id": 4 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "exportedSymbols": { - "ERC20TokenHolder": [ - 1013 - ] - }, - "id": 1014, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 958, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:5" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 959, - "nodeType": "ImportDirective", - "scope": 1014, - "sourceUnit": 1375, - "src": "26:195:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 960, - "nodeType": "ImportDirective", - "scope": 1014, - "sourceUnit": 1520, - "src": "223:198:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "file": "./Terminable.sol", - "id": 961, - "nodeType": "ImportDirective", - "scope": 1014, - "sourceUnit": 1084, - "src": "425:26:5", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 962, - "name": "Terminable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1083, - "src": "484:10:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Terminable_$1083", - "typeString": "contract Terminable" - } - }, - "id": 963, - "nodeType": "InheritanceSpecifier", - "src": "484:10:5" - } - ], - "contractDependencies": [ - 1083 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1013, - "linearizedBaseContracts": [ - 1013, - 1083 - ], - "name": "ERC20TokenHolder", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 966, - "libraryName": { - "contractScope": null, - "id": 964, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1519, - "src": "508:9:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "502:27:5", - "typeName": { - "contractScope": null, - "id": 965, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "522:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - } - }, - { - "constant": false, - "id": 968, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 1013, - "src": "537:22:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 967, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "537:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 981, - "nodeType": "Block", - "src": "624:48:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 975, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "635:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 977, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "651:12:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 976, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "644:6:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$1374_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 978, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "644:20:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "src": "635:29:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 980, - "nodeType": "ExpressionStatement", - "src": "635:29:5" - } - ] - }, - "documentation": null, - "id": 982, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [], - "id": 973, - "modifierName": { - "argumentTypes": null, - "id": 972, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1083, - "src": "602:10:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$1083_$", - "typeString": "type(contract Terminable)" - } - }, - "nodeType": "ModifierInvocation", - "src": "602:12:5" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 971, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 970, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 982, - "src": "580:20:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 969, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "580:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "579:22:5" - }, - "returnParameters": { - "id": 974, - "nodeType": "ParameterList", - "parameters": [], - "src": "624:0:5" - }, - "scope": 1013, - "src": "568:104:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1011, - "nodeType": "Block", - "src": "711:214:5", - "statements": [ - { - "assignments": [ - 986 - ], - "declarations": [ - { - "constant": false, - "id": 986, - "name": "currentBalance", - "nodeType": "VariableDeclaration", - "scope": 1011, - "src": "722:22:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 985, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "722:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 993, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 990, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1564, - "src": "772:4:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$1013", - "typeString": "contract ERC20TokenHolder" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$1013", - "typeString": "contract ERC20TokenHolder" - } - ], - "id": 989, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "764:7:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "764:13:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 987, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "747:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 1348, - "src": "747:16:5", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "747:31:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "722:56:5" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 994, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 986, - "src": "792:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "809:1:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "792:18:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1005, - "nodeType": "IfStatement", - "src": "789:95:5", - "trueBody": { - "id": 1004, - "nodeType": "Block", - "src": "812:72:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1000, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1050, - "src": "847:8:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1001, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 986, - "src": "857:14:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 997, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "827:6:5", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1399, - "src": "827:19:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1374_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1374_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 1002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "827:45:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1003, - "nodeType": "ExpressionStatement", - "src": "827:45:5" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 1006, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1083, - "src": "894:10:5", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$1083_$", - "typeString": "type(contract Terminable)" - } - }, - "id": 1008, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "_terminate", - "nodeType": "MemberAccess", - "referencedDeclaration": 1082, - "src": "894:21:5", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 1009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "894:23:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1010, - "nodeType": "ExpressionStatement", - "src": "894:23:5" - } - ] - }, - "documentation": null, - "id": 1012, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 983, - "nodeType": "ParameterList", - "parameters": [], - "src": "699:2:5" - }, - "returnParameters": { - "id": 984, - "nodeType": "ParameterList", - "parameters": [], - "src": "711:0:5" - }, - "scope": 1013, - "src": "680:245:5", - "stateMutability": "nonpayable", - "superFunction": 1082, - "visibility": "internal" - } - ], - "scope": 1014, - "src": "455:473:5" - } - ], - "src": "0:928:5" - }, - "id": 5 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "exportedSymbols": { - "IAlgoMiner": [ - 1046 - ] - }, - "id": 1047, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1015, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:6" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": false, - "id": 1046, - "linearizedBaseContracts": [ - 1046 - ], - "name": "IAlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1020, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1016, - "nodeType": "ParameterList", - "parameters": [], - "src": "73:2:6" - }, - "returnParameters": { - "id": 1019, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1018, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1020, - "src": "97:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1017, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "97:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "96:6:6" - }, - "scope": 1046, - "src": "53:50:6", - "stateMutability": "pure", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 1025, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMinerType", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1021, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:2:6" - }, - "returnParameters": { - "id": 1024, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1023, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1025, - "src": "154:5:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1022, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "154:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "153:7:6" - }, - "scope": 1046, - "src": "109:52:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 1030, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1026, - "nodeType": "ParameterList", - "parameters": [], - "src": "187:2:6" - }, - "returnParameters": { - "id": 1029, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1028, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1030, - "src": "211:5:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1027, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "211:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "210:7:6" - }, - "scope": 1046, - "src": "167:51:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 1035, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1031, - "nodeType": "ParameterList", - "parameters": [], - "src": "241:2:6" - }, - "returnParameters": { - "id": 1034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1033, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1035, - "src": "265:7:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1032, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "265:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "264:9:6" - }, - "scope": 1046, - "src": "224:50:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 1040, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getReferral", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1036, - "nodeType": "ParameterList", - "parameters": [], - "src": "300:2:6" - }, - "returnParameters": { - "id": 1039, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1038, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1040, - "src": "324:7:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1037, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "324:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "323:9:6" - }, - "scope": 1046, - "src": "280:53:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 1045, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1041, - "nodeType": "ParameterList", - "parameters": [], - "src": "356:2:6" - }, - "returnParameters": { - "id": 1044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1043, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1045, - "src": "380:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1042, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "380:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "379:6:6" - }, - "scope": 1046, - "src": "339:47:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1047, - "src": "26:363:6" - } - ], - "src": "0:389:6" - }, - "id": 6 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "exportedSymbols": { - "Terminable": [ - 1083 - ] - }, - "id": 1084, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1048, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:7" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1083, - "linearizedBaseContracts": [ - 1083 - ], - "name": "Terminable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1050, - "name": "_creator", - "nodeType": "VariableDeclaration", - "scope": 1083, - "src": "55:25:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1049, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1052, - "name": "_terminated", - "nodeType": "VariableDeclaration", - "scope": 1083, - "src": "87:25:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1051, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "87:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 1064, - "nodeType": "Block", - "src": "144:70:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1055, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1050, - "src": "155:8:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1056, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1534, - "src": "166:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "166:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "155:21:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1059, - "nodeType": "ExpressionStatement", - "src": "155:21:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 1062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1060, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "187:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1061, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "201:5:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "187:19:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1063, - "nodeType": "ExpressionStatement", - "src": "187:19:7" - } - ] - }, - "documentation": null, - "id": 1065, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1053, - "nodeType": "ParameterList", - "parameters": [], - "src": "132:2:7" - }, - "returnParameters": { - "id": 1054, - "nodeType": "ParameterList", - "parameters": [], - "src": "144:0:7" - }, - "scope": 1083, - "src": "121:93:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1073, - "nodeType": "Block", - "src": "247:52:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "266:12:7", - "subExpression": { - "argumentTypes": null, - "id": 1068, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "267:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1067, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "258:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "258:21:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1071, - "nodeType": "ExpressionStatement", - "src": "258:21:7" - }, - { - "id": 1072, - "nodeType": "PlaceholderStatement", - "src": "290:1:7" - } - ] - }, - "documentation": null, - "id": 1074, - "name": "notTerminated", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1066, - "nodeType": "ParameterList", - "parameters": [], - "src": "244:2:7" - }, - "src": "222:77:7", - "visibility": "internal" - }, - { - "body": { - "id": 1081, - "nodeType": "Block", - "src": "338:37:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 1079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 1077, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1052, - "src": "349:11:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1078, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "363:4:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "349:18:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1080, - "nodeType": "ExpressionStatement", - "src": "349:18:7" - } - ] - }, - "documentation": null, - "id": 1082, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1075, - "nodeType": "ParameterList", - "parameters": [], - "src": "326:2:7" - }, - "returnParameters": { - "id": 1076, - "nodeType": "ParameterList", - "parameters": [], - "src": "338:0:7" - }, - "scope": 1083, - "src": "307:68:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1084, - "src": "26:352:7" - } - ], - "src": "0:378:7" - }, - "id": 7 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 1177 - ] - }, - "id": 1178, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1085, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:8" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 1177, - "linearizedBaseContracts": [ - 1177 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 1090, - "members": [ - { - "constant": false, - "id": 1089, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 1090, - "src": "150:32:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1088, - "keyType": { - "id": 1086, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "159:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "150:25:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1087, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "170:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 1177, - "src": "128:61:8", - "visibility": "public" - }, - { - "body": { - "id": 1121, - "nodeType": "Block", - "src": "317:123:8", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1098, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1094, - "src": "335:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1100, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "354:1:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1099, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "346:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1101, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "346:10:8", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "335:21:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1097, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "327:7:8", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1103, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:30:8", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1104, - "nodeType": "ExpressionStatement", - "src": "327:30:8" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "375:19:8", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1107, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "380:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1108, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1094, - "src": "386:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1106, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1176, - "src": "376:3:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "376:18:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1105, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "367:7:8", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "367:28:8", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1112, - "nodeType": "ExpressionStatement", - "src": "367:28:8" - }, - { - "expression": { - "argumentTypes": null, - "id": 1119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1113, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1092, - "src": "406:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1116, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1089, - "src": "406:11:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1117, - "indexExpression": { - "argumentTypes": null, - "id": 1115, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1094, - "src": "418:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "406:20:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 1118, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "429:4:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "406:27:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1120, - "nodeType": "ExpressionStatement", - "src": "406:27:8" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 1122, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1095, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1092, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1122, - "src": "272:17:8", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1091, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "272:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1094, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1122, - "src": "291:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1093, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "291:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "271:36:8" - }, - "returnParameters": { - "id": 1096, - "nodeType": "ParameterList", - "parameters": [], - "src": "317:0:8" - }, - "scope": 1177, - "src": "259:181:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1152, - "nodeType": "Block", - "src": "575:123:8", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1130, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1126, - "src": "593:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1132, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "612:1:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1131, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "604:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1133, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "604:10:8", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "593:21:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1129, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "585:7:8", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "585:30:8", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1136, - "nodeType": "ExpressionStatement", - "src": "585:30:8" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1139, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1124, - "src": "637:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 1140, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1126, - "src": "643:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1138, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1176, - "src": "633:3:8", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$1090_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 1141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "633:18:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1137, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "625:7:8", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "625:27:8", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1143, - "nodeType": "ExpressionStatement", - "src": "625:27:8" - }, - { - "expression": { - "argumentTypes": null, - "id": 1150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1144, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1124, - "src": "663:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1147, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1089, - "src": "663:11:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1148, - "indexExpression": { - "argumentTypes": null, - "id": 1146, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1126, - "src": "675:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "663:20:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 1149, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "686:5:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "663:28:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1151, - "nodeType": "ExpressionStatement", - "src": "663:28:8" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 1153, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1127, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1124, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1153, - "src": "530:17:8", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1123, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "530:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1126, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1153, - "src": "549:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1125, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:36:8" - }, - "returnParameters": { - "id": 1128, - "nodeType": "ParameterList", - "parameters": [], - "src": "575:0:8" - }, - "scope": 1177, - "src": "514:184:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1175, - "nodeType": "Block", - "src": "864:84:8", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1163, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1157, - "src": "882:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 1165, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "901:1:8", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1164, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "893:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1166, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "893:10:8", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "882:21:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1162, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "874:7:8", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "874:30:8", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1169, - "nodeType": "ExpressionStatement", - "src": "874:30:8" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 1170, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1155, - "src": "921:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 1171, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1089, - "src": "921:11:8", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1173, - "indexExpression": { - "argumentTypes": null, - "id": 1172, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1157, - "src": "933:7:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "921:20:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1161, - "id": 1174, - "nodeType": "Return", - "src": "914:27:8" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 1176, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1155, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 1176, - "src": "799:17:8", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 1154, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1090, - "src": "799:4:8", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$1090_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1157, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 1176, - "src": "818:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1156, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "798:36:8" - }, - "returnParameters": { - "id": 1161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1160, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1176, - "src": "858:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1159, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "858:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "857:6:8" - }, - "scope": 1177, - "src": "786:162:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1178, - "src": "108:842:8" - } - ], - "src": "0:951:8" - }, - "id": 8 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 1305 - ] - }, - "id": 1306, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1179, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:9" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Unsigned math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 1305, - "linearizedBaseContracts": [ - 1305 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1211, - "nodeType": "Block", - "src": "296:354:9", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1188, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "527:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1189, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "532:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "527:6:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 1194, - "nodeType": "IfStatement", - "src": "523:45:9", - "trueBody": { - "id": 1193, - "nodeType": "Block", - "src": "535:33:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "556:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 1187, - "id": 1192, - "nodeType": "Return", - "src": "549:8:9" - } - ] - } - }, - { - "assignments": [ - 1196 - ], - "declarations": [ - { - "constant": false, - "id": 1196, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1211, - "src": "578:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1195, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "578:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1200, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1197, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "590:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 1198, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1183, - "src": "594:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "590:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "578:17:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1202, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1196, - "src": "613:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1203, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1181, - "src": "617:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 1205, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1183, - "src": "622:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:10:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1201, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "605:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "605:19:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1208, - "nodeType": "ExpressionStatement", - "src": "605:19:9" - }, - { - "expression": { - "argumentTypes": null, - "id": 1209, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1196, - "src": "642:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1187, - "id": 1210, - "nodeType": "Return", - "src": "635:8:9" - } - ] - }, - "documentation": "@dev Multiplies two unsigned integers, reverts on overflow.", - "id": 1212, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1181, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1212, - "src": "242:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1180, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "242:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1183, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1212, - "src": "253:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1182, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "253:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "241:22:9" - }, - "returnParameters": { - "id": 1187, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1186, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1212, - "src": "287:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1185, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "287:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "286:9:9" - }, - "scope": 1305, - "src": "229:421:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1235, - "nodeType": "Block", - "src": "845:229:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1222, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1216, - "src": "929:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "933:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "929:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1221, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "921:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "921:14:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1226, - "nodeType": "ExpressionStatement", - "src": "921:14:9" - }, - { - "assignments": [ - 1228 - ], - "declarations": [ - { - "constant": false, - "id": 1228, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1235, - "src": "945:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1227, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "945:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1232, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1229, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1214, - "src": "957:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 1230, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1216, - "src": "961:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "957:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "945:17:9" - }, - { - "expression": { - "argumentTypes": null, - "id": 1233, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1228, - "src": "1066:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1220, - "id": 1234, - "nodeType": "Return", - "src": "1059:8:9" - } - ] - }, - "documentation": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.", - "id": 1236, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1217, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1214, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1236, - "src": "791:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1213, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "791:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1216, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1236, - "src": "802:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1215, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "802:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "790:22:9" - }, - "returnParameters": { - "id": 1220, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1219, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1236, - "src": "836:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1218, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "835:9:9" - }, - "scope": 1305, - "src": "778:296:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1259, - "nodeType": "Block", - "src": "1272:78:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1246, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1240, - "src": "1290:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 1247, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1238, - "src": "1295:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1290:6:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1245, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1282:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1282:15:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1250, - "nodeType": "ExpressionStatement", - "src": "1282:15:9" - }, - { - "assignments": [ - 1252 - ], - "declarations": [ - { - "constant": false, - "id": 1252, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1259, - "src": "1307:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1251, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1307:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1256, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1253, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1238, - "src": "1319:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 1254, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1240, - "src": "1323:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1319:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1307:17:9" - }, - { - "expression": { - "argumentTypes": null, - "id": 1257, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "1342:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1244, - "id": 1258, - "nodeType": "Return", - "src": "1335:8:9" - } - ] - }, - "documentation": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 1260, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1241, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1238, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1260, - "src": "1218:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1237, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1218:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1240, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1260, - "src": "1229:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1239, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1229:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1217:22:9" - }, - "returnParameters": { - "id": 1244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1243, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1260, - "src": "1263:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1242, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1263:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1262:9:9" - }, - "scope": 1305, - "src": "1205:145:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1283, - "nodeType": "Block", - "src": "1498:78:9", - "statements": [ - { - "assignments": [ - 1270 - ], - "declarations": [ - { - "constant": false, - "id": 1270, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 1283, - "src": "1508:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1269, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1508:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1274, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1271, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "1520:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 1272, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1264, - "src": "1524:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1520:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1508:17:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1276, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1270, - "src": "1543:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 1277, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "1548:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1543:6:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1275, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1535:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1535:15:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1280, - "nodeType": "ExpressionStatement", - "src": "1535:15:9" - }, - { - "expression": { - "argumentTypes": null, - "id": 1281, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1270, - "src": "1568:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1268, - "id": 1282, - "nodeType": "Return", - "src": "1561:8:9" - } - ] - }, - "documentation": "@dev Adds two unsigned integers, reverts on overflow.", - "id": 1284, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1265, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1262, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1284, - "src": "1444:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1261, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1444:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1264, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1284, - "src": "1455:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1263, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1455:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1443:22:9" - }, - "returnParameters": { - "id": 1268, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1267, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1284, - "src": "1489:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1266, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1489:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1488:9:9" - }, - "scope": 1305, - "src": "1431:145:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1303, - "nodeType": "Block", - "src": "1795:54:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1294, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1288, - "src": "1813:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1295, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1818:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1813:6:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1293, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1805:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1805:15:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1298, - "nodeType": "ExpressionStatement", - "src": "1805:15:9" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1301, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1299, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1286, - "src": "1837:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 1300, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1288, - "src": "1841:1:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1837:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1292, - "id": 1302, - "nodeType": "Return", - "src": "1830:12:9" - } - ] - }, - "documentation": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 1304, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1289, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1286, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 1304, - "src": "1741:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1288, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 1304, - "src": "1752:9:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1287, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1752:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1740:22:9" - }, - "returnParameters": { - "id": 1292, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1291, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1304, - "src": "1786:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1290, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1786:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1785:9:9" - }, - "scope": 1305, - "src": "1728:121:9", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1306, - "src": "125:1726:9" - } - ], - "src": "0:1852:9" - }, - "id": 9 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 1374 - ] - }, - "id": 1375, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1307, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:10" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 1374, - "linearizedBaseContracts": [ - 1374 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 1316, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1312, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1309, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1316, - "src": "155:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1308, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "155:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1311, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1316, - "src": "167:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1310, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "167:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "154:27:10" - }, - "returnParameters": { - "id": 1315, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1314, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1316, - "src": "200:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1313, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "200:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "199:6:10" - }, - "scope": 1374, - "src": "137:69:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1325, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1321, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1318, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "229:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1317, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "229:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1320, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "246:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1319, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "246:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "228:32:10" - }, - "returnParameters": { - "id": 1324, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1323, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "279:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1322, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "279:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "278:6:10" - }, - "scope": 1374, - "src": "212:73:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1336, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1332, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1327, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1336, - "src": "313:12:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1326, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "313:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1329, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1336, - "src": "327:10:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1328, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "327:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1331, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1336, - "src": "339:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1330, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "339:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "312:41:10" - }, - "returnParameters": { - "id": 1335, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1334, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1336, - "src": "372:4:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1333, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "372:4:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:6:10" - }, - "scope": 1374, - "src": "291:87:10", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1341, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1337, - "nodeType": "ParameterList", - "parameters": [], - "src": "404:2:10" - }, - "returnParameters": { - "id": 1340, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1339, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1341, - "src": "430:7:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1338, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "430:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:9:10" - }, - "scope": 1374, - "src": "384:55:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1348, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1344, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1343, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 1348, - "src": "464:11:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "464:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "463:13:10" - }, - "returnParameters": { - "id": 1347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1346, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1348, - "src": "500:7:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "500:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "499:9:10" - }, - "scope": 1374, - "src": "445:64:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 1357, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1353, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1350, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "534:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1349, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "534:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1352, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "549:15:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1351, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "533:32:10" - }, - "returnParameters": { - "id": 1356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1355, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 1357, - "src": "589:7:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "589:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "588:9:10" - }, - "scope": 1374, - "src": "515:83:10", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 1365, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 1364, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1359, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1365, - "src": "619:20:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1358, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1361, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1365, - "src": "641:18:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "641:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1363, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1365, - "src": "661:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1362, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "661:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "618:57:10" - }, - "src": "604:72:10" - }, - { - "anonymous": false, - "documentation": null, - "id": 1373, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 1372, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1367, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 1373, - "src": "697:21:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1366, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "697:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1369, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1373, - "src": "720:23:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1368, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "720:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1371, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1373, - "src": "745:13:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1370, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "745:7:10", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "696:63:10" - }, - "src": "682:78:10" - } - ], - "scope": 1375, - "src": "114:648:10" - } - ], - "src": "0:763:10" - }, - "id": 10 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "exportedSymbols": { - "SafeERC20": [ - 1519 - ] - }, - "id": 1520, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1376, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:11" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 1377, - "nodeType": "ImportDirective", - "scope": 1520, - "sourceUnit": 1375, - "src": "25:22:11", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 1378, - "nodeType": "ImportDirective", - "scope": 1520, - "sourceUnit": 1306, - "src": "48:33:11", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeERC20\n@dev Wrappers around ERC20 operations that throw on failure.\nTo use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "fullyImplemented": true, - "id": 1519, - "linearizedBaseContracts": [ - 1519 - ], - "name": "SafeERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 1381, - "libraryName": { - "contractScope": null, - "id": 1379, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1305, - "src": "382:8:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1305", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "376:27:11", - "typeName": { - "id": 1380, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "395:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 1398, - "nodeType": "Block", - "src": "481:51:11", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1393, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1385, - "src": "514:2:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1394, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1387, - "src": "518:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1391, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1383, - "src": "499:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1392, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 1316, - "src": "499:14:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "499:25:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1390, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "491:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "491:34:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1397, - "nodeType": "ExpressionStatement", - "src": "491:34:11" - } - ] - }, - "documentation": null, - "id": 1399, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1383, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1399, - "src": "431:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1382, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "431:6:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1385, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1399, - "src": "445:10:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "445:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1387, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1399, - "src": "457:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "457:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "430:41:11" - }, - "returnParameters": { - "id": 1389, - "nodeType": "ParameterList", - "parameters": [], - "src": "481:0:11" - }, - "scope": 1519, - "src": "409:123:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1419, - "nodeType": "Block", - "src": "628:61:11", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1413, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1403, - "src": "665:4:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1414, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1405, - "src": "671:2:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1415, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1407, - "src": "675:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1411, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1401, - "src": "646:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 1336, - "src": "646:18:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 1416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "646:35:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1410, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "638:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "638:44:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1418, - "nodeType": "ExpressionStatement", - "src": "638:44:11" - } - ] - }, - "documentation": null, - "id": 1420, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1408, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1401, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1420, - "src": "564:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1400, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "564:6:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1403, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 1420, - "src": "578:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "578:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1405, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 1420, - "src": "592:10:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1404, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "592:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1407, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1420, - "src": "604:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1406, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "604:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "563:55:11" - }, - "returnParameters": { - "id": 1409, - "nodeType": "ParameterList", - "parameters": [], - "src": "628:0:11" - }, - "scope": 1519, - "src": "538:151:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1455, - "nodeType": "Block", - "src": "771:353:11", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 1444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 1430, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1426, - "src": "1007:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1016:1:11", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1007:10:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1433, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1006:12:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1437, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1558, - "src": "1047:4:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - ], - "id": 1436, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1039:7:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1039:13:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1439, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1424, - "src": "1054:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1434, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1422, - "src": "1023:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1357, - "src": "1023:15:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1023:39:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 1441, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1066:1:11", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1023:44:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 1443, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1022:46:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1006:62:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1429, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "998:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "998:71:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1446, - "nodeType": "ExpressionStatement", - "src": "998:71:11" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1450, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1424, - "src": "1101:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1451, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1426, - "src": "1110:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1448, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1422, - "src": "1087:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1325, - "src": "1087:13:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1087:29:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1447, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1079:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1079:38:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1454, - "nodeType": "ExpressionStatement", - "src": "1079:38:11" - } - ] - }, - "documentation": null, - "id": 1456, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1427, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1422, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1456, - "src": "716:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1421, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "716:6:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1424, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1456, - "src": "730:15:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1423, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "730:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1426, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1456, - "src": "747:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1425, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "747:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "715:46:11" - }, - "returnParameters": { - "id": 1428, - "nodeType": "ParameterList", - "parameters": [], - "src": "771:0:11" - }, - "scope": 1519, - "src": "695:429:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1486, - "nodeType": "Block", - "src": "1216:145:11", - "statements": [ - { - "assignments": [ - 1466 - ], - "declarations": [ - { - "constant": false, - "id": 1466, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 1486, - "src": "1226:20:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1465, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1226:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1477, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1475, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1462, - "src": "1293:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1470, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1558, - "src": "1273:4:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - ], - "id": 1469, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1265:7:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1265:13:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1472, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1460, - "src": "1280:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1467, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1458, - "src": "1249:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1357, - "src": "1249:15:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:39:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1284, - "src": "1249:43:11", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:50:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1226:73:11" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1481, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1460, - "src": "1331:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1482, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1466, - "src": "1340:12:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1479, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1458, - "src": "1317:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1325, - "src": "1317:13:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1317:36:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1478, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1309:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1309:45:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1485, - "nodeType": "ExpressionStatement", - "src": "1309:45:11" - } - ] - }, - "documentation": null, - "id": 1487, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeIncreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1463, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1458, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1487, - "src": "1161:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1457, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "1161:6:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1460, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1487, - "src": "1175:15:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1459, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1175:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1462, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1487, - "src": "1192:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1461, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1192:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1160:46:11" - }, - "returnParameters": { - "id": 1464, - "nodeType": "ParameterList", - "parameters": [], - "src": "1216:0:11" - }, - "scope": 1519, - "src": "1130:231:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 1517, - "nodeType": "Block", - "src": "1453:145:11", - "statements": [ - { - "assignments": [ - 1497 - ], - "declarations": [ - { - "constant": false, - "id": 1497, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 1517, - "src": "1463:20:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1496, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1463:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 1508, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1506, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1493, - "src": "1530:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1501, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1558, - "src": "1510:4:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$1519", - "typeString": "library SafeERC20" - } - ], - "id": 1500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1502:7:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 1502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1502:13:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1503, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1491, - "src": "1517:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 1498, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "1486:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 1357, - "src": "1486:15:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:39:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 1260, - "src": "1486:43:11", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 1507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:50:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1463:73:11" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 1512, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1491, - "src": "1568:7:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 1513, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1497, - "src": "1577:12:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 1510, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1489, - "src": "1554:5:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "id": 1511, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 1325, - "src": "1554:13:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1514, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1554:36:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1509, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 1537, - 1538 - ], - "referencedDeclaration": 1537, - "src": "1546:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 1515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1546:45:11", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1516, - "nodeType": "ExpressionStatement", - "src": "1546:45:11" - } - ] - }, - "documentation": null, - "id": 1518, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeDecreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1489, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "1398:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 1488, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1374, - "src": "1398:6:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$1374", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1491, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "1412:15:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1490, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1412:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1493, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 1518, - "src": "1429:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1492, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1429:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1397:46:11" - }, - "returnParameters": { - "id": 1495, - "nodeType": "ParameterList", - "parameters": [], - "src": "1453:0:11" - }, - "scope": 1519, - "src": "1367:231:11", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 1520, - "src": "352:1248:11" - } - ], - "src": "0:1601:11" - }, - "id": 11 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.abi b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.abi deleted file mode 100644 index 8f3d1e3d2..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[],"name":"terminate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pauseMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isAlgoMiner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"isMining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinerAddress","type":"address"}],"name":"migrateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addSupervisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMiner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReferral","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isSystem","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"stopAndRemoveOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentDay","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resumeMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMinerType","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCoreTeam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addSystem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCategory","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isSupervisor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwnerAddress","type":"address"},{"name":"newReferralAddress","type":"address"}],"name":"resetMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mine","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deactivateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activateMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceSupervisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentYearSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentYear","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"stopMining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceSystem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"minerType","type":"uint8"},{"name":"category","type":"uint8"},{"name":"minerAccountAddress","type":"address"},{"name":"referralAccountAddress","type":"address"},{"name":"tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.bin b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.bin deleted file mode 100644 index e60d416fa..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.bin +++ /dev/null @@ -1 +0,0 @@ -60806040523480156200001157600080fd5b5060405160a08062001458833981018060405260a08110156200003357600080fd5b5080516020820151604083015160608401516080909401516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a038416179055939492939192916200009a906401000000006200018e810204565b620000ae33640100000000620001ac810204565b620000c233640100000000620001c7810204565b600560ff85161115620000d457600080fd5b600160a060020a0383161515620000ea57600080fd5b6000856001811115620000f957fe5b14156200011657600160a060020a03821615156200011657600080fd5b6005805486919060ff1916600183818111156200012f57fe5b0217905550506005805461ff00191661010060ff9590951694909402939093176201000060b060020a03191662010000600160a060020a03938416021790925560068054600160a060020a031916929091169190911790555062000275565b620001a96002826401000000006200110d620001e282021704565b50565b620001a96003826401000000006200110d620001e282021704565b620001a96004826401000000006200110d620001e282021704565b600160a060020a0381161515620001f857600080fd5b6200020d82826401000000006200023d810204565b156200021857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200025557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6111d380620002856000396000f3fe608060405234801561001057600080fd5b50600436106101ec576000357c0100000000000000000000000000000000000000000000000000000000900480634969ae70116101215780639e614ca0116100bf578063ce41607a1161008e578063ce41607a14610422578063d43acc791461042a578063da40867914610432578063e9d618591461043a576101ec565b80639e614ca0146103f0578063b2a32cd5146103f8578063be95249414610400578063cdfd0f6414610408576101ec565b806380258e47116100fb57806380258e471461038c57806381a24459146103945780638329138f146103ba57806399f4b251146103e8576101ec565b80634969ae7014610322578063608d3d3d1461034057806374be759214610366576101ec565b80632e6b68491161018e57806334cdcf261161016857806334cdcf26146102cd578063363aa6c7146102f35780633e6968b6146102fb578063427534a41461031a576101ec565b80632e6b68491461027b578063302c11ca146102a1578063329b1c92146102c5576101ec565b806319a74ab3116101ca57806319a74ab31461021f57806321b79d9814610227578063231d4e2a1461022f57806329d10b6e14610255576101ec565b80630c08bf88146101f1578063162f986d146101fb5780631777fb4b14610203575b600080fd5b6101f9610442565b005b6101f9610460565b61020b6104cf565b604080519115158252519081900360200190f35b61020b6104d4565b6101f961050b565b6101f96004803603602081101561024557600080fd5b5035600160a060020a03166105a1565b6101f96004803603602081101561026b57600080fd5b5035600160a060020a031661068b565b6101f96004803603602081101561029157600080fd5b5035600160a060020a03166106a8565b6102a96106c5565b60408051600160a060020a039092168252519081900360200190f35b6102a96106da565b61020b600480360360208110156102e357600080fd5b5035600160a060020a03166106e9565b6101f9610704565b6103036107b5565b6040805161ffff9092168252519081900360200190f35b6101f96107c6565b61032a610832565b6040805160ff9092168252519081900360200190f35b61020b6004803603602081101561035657600080fd5b5035600160a060020a0316610846565b6101f96004803603602081101561037c57600080fd5b5035600160a060020a0316610859565b61032a610876565b61020b600480360360208110156103aa57600080fd5b5035600160a060020a0316610884565b6101f9600480360360408110156103d057600080fd5b50600160a060020a0381358116916020013516610897565b6101f961094a565b6101f9610b86565b6101f9610bf7565b6101f9610d53565b610410610d5c565b60408051918252519081900360200190f35b61032a610d62565b6101f9610d85565b6101f9610d8e565b6101f9610e1f565b61044b33610846565b151561045657600080fd5b61045e610e28565b565b60005460a060020a900460ff161561047757600080fd5b61048033610884565b151561048b57600080fd5b600160065460a060020a900460ff1660038111156104a557fe5b146104af57600080fd5b600680546002919060a060020a60ff02191660a060020a835b0217905550565b600190565b6000600160065460a060020a900460ff1660038111156104f057fe5b148015610506575060065460a860020a900460ff165b905090565b60005460a060020a900460ff161561052257600080fd5b600554620100009004600160a060020a0316331461053f57600080fd5b600160065460a060020a900460ff16600381111561055957fe5b1461056357600080fd5b60065460a860020a900460ff161561057a57600080fd5b6006805475ff000000000000000000000000000000000000000000191660a860020a179055565b6105aa33610846565b15156105b557600080fd5b600060065460a060020a900460ff1660038111156105cf57fe5b146105d957600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610688928492600160a060020a03909116916370a0823191602480820192602092909190829003018186803b15801561064357600080fd5b505afa158015610657573d6000803e3d6000fd5b505050506040513d602081101561066d57600080fd5b5051600154600160a060020a0316919063ffffffff610eee16565b50565b61069433610884565b151561069f57600080fd5b61068881610fa6565b6106b133610846565b15156106bc57600080fd5b61068881610fb7565b600554620100009004600160a060020a031690565b600654600160a060020a031690565b60006106fc60028363ffffffff610fc816565b90505b919050565b60005460a060020a900460ff161561071b57600080fd5b61072433610884565b151561072f57600080fd5b600360065460a060020a900460ff16600381111561074957fe5b141561075457600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff00001916905560a060020a60ff021916740300000000000000000000000000000000000000001775ff00ffffffffffffffffffffffffffffffffffffffff19169055565b60065460b860020a900461ffff1690565b60005460a060020a900460ff16156107dd57600080fd5b6107e633610884565b15156107f157600080fd5b600260065460a060020a900460ff16600381111561080b57fe5b1461081557600080fd5b600680546001919060a060020a60ff02191660a060020a836104c8565b60055460009060ff16600181111561050657fe5b60006106fc60038363ffffffff610fc816565b610862336106e9565b151561086d57600080fd5b61068881610fff565b600554610100900460ff1690565b60006106fc60048363ffffffff610fc816565b60005460a060020a900460ff16156108ae57600080fd5b6108b733610884565b15156108c257600080fd5b600360065460a060020a900460ff1660038111156108dc57fe5b146108e657600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a039687160217905560a060020a60ff02191660a060020a1773ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff161561096157600080fd5b61096a336106e9565b151561097557600080fd5b600060055460ff16600181111561098857fe5b1461099257600080fd5b600160065460a060020a900460ff1660038111156109ac57fe5b146109b657600080fd5b60065460a860020a900460ff1615156109ce57600080fd5b60065460b860020a900461ffff161515610a44576006805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a179055610b0c565b60068054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e1415610b0c576006805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600754600290046007555b60075461016d90046064600a82020460008211610b2857600080fd5b60008111610b3557600080fd5b600554600154610b5f91600160a060020a039182169162010000909104168463ffffffff610eee16565b600654600154610b8291600160a060020a0391821691168363ffffffff610eee16565b5050565b60005460a060020a900460ff1615610b9d57600080fd5b610ba633610846565b1515610bb157600080fd5b600060065460a060020a900460ff166003811115610bcb57fe5b1415610bd657600080fd5b6006805475ffff000000000000000000000000000000000000000019169055565b60005460a060020a900460ff1615610c0e57600080fd5b610c1733610846565b1515610c2257600080fd5b600060065460a060020a900460ff166003811115610c3c57fe5b14610c4657600080fd5b600060055460ff166001811115610c5957fe5b148015610c665750600754155b1561081557600554600090610c8290610100900460ff16611010565b600154604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506064600a850204840192600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d6020811015610d1d57600080fd5b50519050818114610d2d57600080fd5b600283046007555050600680546001925060a060020a60ff02191660a060020a836104c8565b61045e336110c2565b60075490565b600654760100000000000000000000000000000000000000000000900460ff1690565b61045e336110d3565b60005460a060020a900460ff1615610da557600080fd5b600554620100009004600160a060020a03163314610dc257600080fd5b600160065460a060020a900460ff166003811115610ddc57fe5b14610de657600080fd5b60065460a860020a900460ff161515610dfe57600080fd5b6006805475ff00000000000000000000000000000000000000000019169055565b61045e336110e4565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000811115610ee657600054600154610ee691600160a060020a0391821691168363ffffffff610eee16565b6106886110f5565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050506040513d6020811015610f9457600080fd5b50511515610fa157600080fd5b505050565b61068860048263ffffffff61110d16565b61068860038263ffffffff61110d16565b6000600160a060020a0382161515610fdf57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068860028263ffffffff61110d16565b600060ff8216151561102d575069152d02c7e14af68000006106ff565b8160ff166001141561104a575069d3c21bcecceda10000006106ff565b8160ff166002141561106857506a01a784379d99db420000006106ff565b8160ff166003141561108657506a027b46536c66c8e30000006106ff565b8160ff16600414156110a457506a034f086f3b33b6840000006106ff565b8160ff16600514156106ff57506a0422ca8b0a00a4250000006106ff565b61068860048263ffffffff61115b16565b61068860038263ffffffff61115b16565b61068860028263ffffffff61115b16565b6000805460a060020a60ff02191660a060020a179055565b600160a060020a038116151561112257600080fd5b61112c8282610fc8565b1561113657600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561117057600080fd5b61117a8282610fc8565b151561118557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820a2a7d81c4bf237d833a792f3dd14af3f88c7c6e7d320648513595fcbe01959490029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.json deleted file mode 100644 index cff6704e3..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoMiner.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "pauseMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isMining", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "startMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newMinerAddress", - "type": "address" - } - ], - "name": "migrateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMiner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReferral", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSystem", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopAndRemoveOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentDay", - "outputs": [ - { - "name": "", - "type": "uint16" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "resumeMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerType", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isSupervisor", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "newOwnerAddress", - "type": "address" - }, - { - "name": "newReferralAddress", - "type": "address" - } - ], - "name": "resetMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "mine", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "deactivateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "activateMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSupervisor", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentYearSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCurrentYear", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stopMining", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceSystem", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "minerType", - "type": "uint8" - }, - { - "name": "category", - "type": "uint8" - }, - { - "name": "minerAccountAddress", - "type": "address" - }, - { - "name": "referralAccountAddress", - "type": "address" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "60806040523480156200001157600080fd5b5060405160a08062001458833981018060405260a08110156200003357600080fd5b5080516020820151604083015160608401516080909401516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a038416179055939492939192916200009a906401000000006200018e810204565b620000ae33640100000000620001ac810204565b620000c233640100000000620001c7810204565b600560ff85161115620000d457600080fd5b600160a060020a0383161515620000ea57600080fd5b6000856001811115620000f957fe5b14156200011657600160a060020a03821615156200011657600080fd5b6005805486919060ff1916600183818111156200012f57fe5b0217905550506005805461ff00191661010060ff9590951694909402939093176201000060b060020a03191662010000600160a060020a03938416021790925560068054600160a060020a031916929091169190911790555062000275565b620001a96002826401000000006200110d620001e282021704565b50565b620001a96003826401000000006200110d620001e282021704565b620001a96004826401000000006200110d620001e282021704565b600160a060020a0381161515620001f857600080fd5b6200020d82826401000000006200023d810204565b156200021857600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200025557600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6111d380620002856000396000f3fe608060405234801561001057600080fd5b50600436106101ec576000357c0100000000000000000000000000000000000000000000000000000000900480634969ae70116101215780639e614ca0116100bf578063ce41607a1161008e578063ce41607a14610422578063d43acc791461042a578063da40867914610432578063e9d618591461043a576101ec565b80639e614ca0146103f0578063b2a32cd5146103f8578063be95249414610400578063cdfd0f6414610408576101ec565b806380258e47116100fb57806380258e471461038c57806381a24459146103945780638329138f146103ba57806399f4b251146103e8576101ec565b80634969ae7014610322578063608d3d3d1461034057806374be759214610366576101ec565b80632e6b68491161018e57806334cdcf261161016857806334cdcf26146102cd578063363aa6c7146102f35780633e6968b6146102fb578063427534a41461031a576101ec565b80632e6b68491461027b578063302c11ca146102a1578063329b1c92146102c5576101ec565b806319a74ab3116101ca57806319a74ab31461021f57806321b79d9814610227578063231d4e2a1461022f57806329d10b6e14610255576101ec565b80630c08bf88146101f1578063162f986d146101fb5780631777fb4b14610203575b600080fd5b6101f9610442565b005b6101f9610460565b61020b6104cf565b604080519115158252519081900360200190f35b61020b6104d4565b6101f961050b565b6101f96004803603602081101561024557600080fd5b5035600160a060020a03166105a1565b6101f96004803603602081101561026b57600080fd5b5035600160a060020a031661068b565b6101f96004803603602081101561029157600080fd5b5035600160a060020a03166106a8565b6102a96106c5565b60408051600160a060020a039092168252519081900360200190f35b6102a96106da565b61020b600480360360208110156102e357600080fd5b5035600160a060020a03166106e9565b6101f9610704565b6103036107b5565b6040805161ffff9092168252519081900360200190f35b6101f96107c6565b61032a610832565b6040805160ff9092168252519081900360200190f35b61020b6004803603602081101561035657600080fd5b5035600160a060020a0316610846565b6101f96004803603602081101561037c57600080fd5b5035600160a060020a0316610859565b61032a610876565b61020b600480360360208110156103aa57600080fd5b5035600160a060020a0316610884565b6101f9600480360360408110156103d057600080fd5b50600160a060020a0381358116916020013516610897565b6101f961094a565b6101f9610b86565b6101f9610bf7565b6101f9610d53565b610410610d5c565b60408051918252519081900360200190f35b61032a610d62565b6101f9610d85565b6101f9610d8e565b6101f9610e1f565b61044b33610846565b151561045657600080fd5b61045e610e28565b565b60005460a060020a900460ff161561047757600080fd5b61048033610884565b151561048b57600080fd5b600160065460a060020a900460ff1660038111156104a557fe5b146104af57600080fd5b600680546002919060a060020a60ff02191660a060020a835b0217905550565b600190565b6000600160065460a060020a900460ff1660038111156104f057fe5b148015610506575060065460a860020a900460ff165b905090565b60005460a060020a900460ff161561052257600080fd5b600554620100009004600160a060020a0316331461053f57600080fd5b600160065460a060020a900460ff16600381111561055957fe5b1461056357600080fd5b60065460a860020a900460ff161561057a57600080fd5b6006805475ff000000000000000000000000000000000000000000191660a860020a179055565b6105aa33610846565b15156105b557600080fd5b600060065460a060020a900460ff1660038111156105cf57fe5b146105d957600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051610688928492600160a060020a03909116916370a0823191602480820192602092909190829003018186803b15801561064357600080fd5b505afa158015610657573d6000803e3d6000fd5b505050506040513d602081101561066d57600080fd5b5051600154600160a060020a0316919063ffffffff610eee16565b50565b61069433610884565b151561069f57600080fd5b61068881610fa6565b6106b133610846565b15156106bc57600080fd5b61068881610fb7565b600554620100009004600160a060020a031690565b600654600160a060020a031690565b60006106fc60028363ffffffff610fc816565b90505b919050565b60005460a060020a900460ff161561071b57600080fd5b61072433610884565b151561072f57600080fd5b600360065460a060020a900460ff16600381111561074957fe5b141561075457600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff00001916905560a060020a60ff021916740300000000000000000000000000000000000000001775ff00ffffffffffffffffffffffffffffffffffffffff19169055565b60065460b860020a900461ffff1690565b60005460a060020a900460ff16156107dd57600080fd5b6107e633610884565b15156107f157600080fd5b600260065460a060020a900460ff16600381111561080b57fe5b1461081557600080fd5b600680546001919060a060020a60ff02191660a060020a836104c8565b60055460009060ff16600181111561050657fe5b60006106fc60038363ffffffff610fc816565b610862336106e9565b151561086d57600080fd5b61068881610fff565b600554610100900460ff1690565b60006106fc60048363ffffffff610fc816565b60005460a060020a900460ff16156108ae57600080fd5b6108b733610884565b15156108c257600080fd5b600360065460a060020a900460ff1660038111156108dc57fe5b146108e657600080fd5b600680546005805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a039687160217905560a060020a60ff02191660a060020a1773ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60005460a060020a900460ff161561096157600080fd5b61096a336106e9565b151561097557600080fd5b600060055460ff16600181111561098857fe5b1461099257600080fd5b600160065460a060020a900460ff1660038111156109ac57fe5b146109b657600080fd5b60065460a860020a900460ff1615156109ce57600080fd5b60065460b860020a900461ffff161515610a44576006805478ffff00000000000000000000000000000000000000000000001976ff0000000000000000000000000000000000000000000019909116760100000000000000000000000000000000000000000000171660b860020a179055610b0c565b60068054600161ffff60b860020a8084048216929092018116820278ffff00000000000000000000000000000000000000000000001990931692909217928390559091041661016e1415610b0c576006805478ffff000000000000000000000000000000000000000000000019600160ff760100000000000000000000000000000000000000000000808504821692909201160276ff0000000000000000000000000000000000000000000019909216919091171660b860020a179055600754600290046007555b60075461016d90046064600a82020460008211610b2857600080fd5b60008111610b3557600080fd5b600554600154610b5f91600160a060020a039182169162010000909104168463ffffffff610eee16565b600654600154610b8291600160a060020a0391821691168363ffffffff610eee16565b5050565b60005460a060020a900460ff1615610b9d57600080fd5b610ba633610846565b1515610bb157600080fd5b600060065460a060020a900460ff166003811115610bcb57fe5b1415610bd657600080fd5b6006805475ffff000000000000000000000000000000000000000019169055565b60005460a060020a900460ff1615610c0e57600080fd5b610c1733610846565b1515610c2257600080fd5b600060065460a060020a900460ff166003811115610c3c57fe5b14610c4657600080fd5b600060055460ff166001811115610c5957fe5b148015610c665750600754155b1561081557600554600090610c8290610100900460ff16611010565b600154604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506064600a850204840192600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610cf357600080fd5b505afa158015610d07573d6000803e3d6000fd5b505050506040513d6020811015610d1d57600080fd5b50519050818114610d2d57600080fd5b600283046007555050600680546001925060a060020a60ff02191660a060020a836104c8565b61045e336110c2565b60075490565b600654760100000000000000000000000000000000000000000000900460ff1690565b61045e336110d3565b60005460a060020a900460ff1615610da557600080fd5b600554620100009004600160a060020a03163314610dc257600080fd5b600160065460a060020a900460ff166003811115610ddc57fe5b14610de657600080fd5b60065460a860020a900460ff161515610dfe57600080fd5b6006805475ff00000000000000000000000000000000000000000019169055565b61045e336110e4565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b158015610e8c57600080fd5b505afa158015610ea0573d6000803e3d6000fd5b505050506040513d6020811015610eb657600080fd5b505190506000811115610ee657600054600154610ee691600160a060020a0391821691168363ffffffff610eee16565b6106886110f5565b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b505050506040513d6020811015610f9457600080fd5b50511515610fa157600080fd5b505050565b61068860048263ffffffff61110d16565b61068860038263ffffffff61110d16565b6000600160a060020a0382161515610fdf57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068860028263ffffffff61110d16565b600060ff8216151561102d575069152d02c7e14af68000006106ff565b8160ff166001141561104a575069d3c21bcecceda10000006106ff565b8160ff166002141561106857506a01a784379d99db420000006106ff565b8160ff166003141561108657506a027b46536c66c8e30000006106ff565b8160ff16600414156110a457506a034f086f3b33b6840000006106ff565b8160ff16600514156106ff57506a0422ca8b0a00a4250000006106ff565b61068860048263ffffffff61115b16565b61068860038263ffffffff61115b16565b61068860028263ffffffff61115b16565b6000805460a060020a60ff02191660a060020a179055565b600160a060020a038116151561112257600080fd5b61112c8282610fc8565b1561113657600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561117057600080fd5b61117a8282610fc8565b151561118557600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820a2a7d81c4bf237d833a792f3dd14af3f88c7c6e7d320648513595fcbe01959490029", - "functionHashes": { - "activateMiner()": "b2a32cd5", - "addCoreTeam(address)": "2e6b6849", - "addSupervisor(address)": "29d10b6e", - "addSystem(address)": "74be7592", - "deactivateMiner()": "9e614ca0", - "getCategory()": "80258e47", - "getCurrentDay()": "3e6968b6", - "getCurrentYear()": "ce41607a", - "getCurrentYearSupply()": "cdfd0f64", - "getMiner()": "302c11ca", - "getMinerType()": "4969ae70", - "getReferral()": "329b1c92", - "isAlgoMiner()": "1777fb4b", - "isCoreTeam(address)": "608d3d3d", - "isMining()": "19a74ab3", - "isSupervisor(address)": "81a24459", - "isSystem(address)": "34cdcf26", - "migrateMiner(address)": "231d4e2a", - "mine()": "99f4b251", - "pauseMining()": "162f986d", - "renounceCoreTeam()": "d43acc79", - "renounceSupervisor()": "be952494", - "renounceSystem()": "e9d61859", - "resetMiner(address,address)": "8329138f", - "resumeMining()": "427534a4", - "startMining()": "21b79d98", - "stopAndRemoveOwnership()": "363aa6c7", - "stopMining()": "da408679", - "terminate()": "0c08bf88" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "912600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "activateMiner()": "infinite", - "addCoreTeam(address)": "infinite", - "addSupervisor(address)": "infinite", - "addSystem(address)": "infinite", - "deactivateMiner()": "infinite", - "getCategory()": "474", - "getCurrentDay()": "581", - "getCurrentYear()": "473", - "getCurrentYearSupply()": "514", - "getMiner()": "635", - "getMinerType()": "501", - "getReferral()": "646", - "isAlgoMiner()": "300", - "isCoreTeam(address)": "infinite", - "isMining()": "880", - "isSupervisor(address)": "infinite", - "isSystem(address)": "infinite", - "migrateMiner(address)": "infinite", - "mine()": "infinite", - "pauseMining()": "infinite", - "renounceCoreTeam()": "infinite", - "renounceSupervisor()": "infinite", - "renounceSystem()": "infinite", - "resetMiner(address,address)": "infinite", - "resumeMining()": "infinite", - "startMining()": "21741", - "stopAndRemoveOwnership()": "infinite", - "stopMining()": "21695", - "terminate()": "infinite" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool-sol-output.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool-sol-output.json deleted file mode 100644 index ae00e7b9d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool-sol-output.json +++ /dev/null @@ -1,11930 +0,0 @@ -{ - "contracts": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol": { - "AlgoCommon": { - "abi": [], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b50603580601d6000396000f3fe6080604052600080fdfea165627a7a72305820c142737f5004f0e270be8e9321f75139c2de559ee56245828f39cd6b8e6ac07b0029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc1 TIMESTAMP PUSH20 0x7F5004F0E270BE8E9321F75139C2DE559EE56245 DUP3 DUP16 CODECOPY 0xcd PUSH12 0x8E6AC07B0029000000000000 ", - "sourceMap": "26:1033:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26:1033:0;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "10600", - "executionCost": "66", - "totalCost": "10666" - }, - "internal": { - "getCapacityByCategory(uint8)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":\"AlgoCommon\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":{\"keccak256\":\"0x014debd2c96ba7aba7faef24eac1f1a5d46791b55ae55fbd51d7945bf21277e0\",\"urls\":[\"bzzr://b8d1cffc7f1bfdc8c911d90b785cf9c2723b24bd162d7cfd730e127f56932fe9\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "AlgoCoreTeamRole": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol": { - "AlgoPool": { - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "transferToMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "poolType", - "type": "uint8" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506040516040806107e88339810180604052604081101561003057600080fd5b5080516020909101516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a03841617905561007f906401000000006100a3810204565b6003805483919060ff19166001838181111561009757fe5b0217905550505061014c565b6100bb6002826401000000006105c76100be82021704565b50565b600160a060020a03811615156100d357600080fd5b6100e68282640100000000610115810204565b156100f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561012c57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068d8061015b6000396000f3fe608060405234801561001057600080fd5b506004361061005a5760e060020a60003504630c08bf88811461005f5780632e6b684914610069578063608d3d3d1461008f578063d43acc79146100c9578063fe4028bb146100d1575b600080fd5b6100676100f7565b005b6100676004803603602081101561007f57600080fd5b5035600160a060020a0316610115565b6100b5600480360360208110156100a557600080fd5b5035600160a060020a0316610135565b604080519115158252519081900360200190f35b610067610150565b610067600480360360208110156100e757600080fd5b5035600160a060020a0316610159565b61010033610135565b151561010b57600080fd5b610113610320565b565b61011e33610135565b151561012957600080fd5b610132816103e6565b50565b600061014860028363ffffffff6103f716565b90505b919050565b6101133361042e565b60005474010000000000000000000000000000000000000000900460ff161561018157600080fd5b61018a33610135565b151561019557600080fd5b600160a060020a03811660009081526004602052604090205460ff16156101bb57600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156101fc57600080fd5b505afa158015610210573d6000803e3d6000fd5b505050506040513d602081101561022657600080fd5b5051151561023357600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561027157600080fd5b505afa158015610285573d6000803e3d6000fd5b505050506040513d602081101561029b57600080fd5b50519050600560ff821611156102b057600080fd5b60006102bb8261043f565b9050600160035460ff1660018111156102d057fe5b14156102e0576064600a82020490505b600160a060020a038085166000908152600460205260409020805460ff191660019081179091555461031a9116858363ffffffff6104f116565b50505050565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561038457600080fd5b505afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b5051905060008111156103de576000546001546103de91600160a060020a0391821691168363ffffffff6104f116565b610132610590565b61013260028263ffffffff6105c716565b6000600160a060020a038216151561040e57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61013260028263ffffffff61061516565b600060ff8216151561045c575069152d02c7e14af680000061014b565b8160ff1660011415610479575069d3c21bcecceda100000061014b565b8160ff166002141561049757506a01a784379d99db4200000061014b565b8160ff16600314156104b557506a027b46536c66c8e300000061014b565b8160ff16600414156104d357506a034f086f3b33b68400000061014b565b8160ff166005141561014b57506a0422ca8b0a00a42500000061014b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561055457600080fd5b505af1158015610568573d6000803e3d6000fd5b505050506040513d602081101561057e57600080fd5b5051151561058b57600080fd5b505050565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a03811615156105dc57600080fd5b6105e682826103f7565b156105f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561062a57600080fd5b61063482826103f7565b151561063f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820da6d23ac8f4b151242d9a9cc936a0d9469d337bb92eddce5cc529e4f80d49b290029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x40 DUP1 PUSH2 0x7E8 DUP4 CODECOPY DUP2 ADD DUP1 PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x0 DUP1 SLOAD CALLER PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT SWAP2 DUP3 AND DUP2 OR PUSH1 0xA0 PUSH1 0x2 EXP PUSH1 0xFF MUL NOT AND SWAP1 SWAP3 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP5 AND OR SWAP1 SSTORE PUSH2 0x7F SWAP1 PUSH5 0x100000000 PUSH2 0xA3 DUP2 MUL DIV JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF NOT AND PUSH1 0x1 DUP4 DUP2 DUP2 GT ISZERO PUSH2 0x97 JUMPI INVALID JUMPDEST MUL OR SWAP1 SSTORE POP POP POP PUSH2 0x14C JUMP JUMPDEST PUSH2 0xBB PUSH1 0x2 DUP3 PUSH5 0x100000000 PUSH2 0x5C7 PUSH2 0xBE DUP3 MUL OR DIV JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0xD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE6 DUP3 DUP3 PUSH5 0x100000000 PUSH2 0x115 DUP2 MUL DIV JUMP JUMPDEST ISZERO PUSH2 0xF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x68D DUP1 PUSH2 0x15B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0xE0 PUSH1 0x2 EXP PUSH1 0x0 CALLDATALOAD DIV PUSH4 0xC08BF88 DUP2 EQ PUSH2 0x5F JUMPI DUP1 PUSH4 0x2E6B6849 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0x608D3D3D EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xD43ACC79 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0xFE4028BB EQ PUSH2 0xD1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x67 PUSH2 0xF7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x67 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x115 JUMP JUMPDEST PUSH2 0xB5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x135 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x67 PUSH2 0x150 JUMP JUMPDEST PUSH2 0x67 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x159 JUMP JUMPDEST PUSH2 0x100 CALLER PUSH2 0x135 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x113 PUSH2 0x320 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x11E CALLER PUSH2 0x135 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x132 DUP2 PUSH2 0x3E6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x148 PUSH1 0x2 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3F7 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x113 CALLER PUSH2 0x42E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18A CALLER PUSH2 0x135 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x1777FB4B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x210 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0x80258E47 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x271 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x285 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x5 PUSH1 0xFF DUP3 AND GT ISZERO PUSH2 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2BB DUP3 PUSH2 0x43F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2D0 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x2E0 JUMPI PUSH1 0x64 PUSH1 0xA DUP3 MUL DIV SWAP1 POP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SLOAD PUSH2 0x31A SWAP2 AND DUP6 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4F1 AND JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x398 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x3DE JUMPI PUSH1 0x0 SLOAD PUSH1 0x1 SLOAD PUSH2 0x3DE SWAP2 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH4 0xFFFFFFFF PUSH2 0x4F1 AND JUMP JUMPDEST PUSH2 0x132 PUSH2 0x590 JUMP JUMPDEST PUSH2 0x132 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x5C7 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 AND ISZERO ISZERO PUSH2 0x40E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x132 PUSH1 0x2 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x615 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND ISZERO ISZERO PUSH2 0x45C JUMPI POP PUSH10 0x152D02C7E14AF6800000 PUSH2 0x14B JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x479 JUMPI POP PUSH10 0xD3C21BCECCEDA1000000 PUSH2 0x14B JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x497 JUMPI POP PUSH11 0x1A784379D99DB42000000 PUSH2 0x14B JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x3 EQ ISZERO PUSH2 0x4B5 JUMPI POP PUSH11 0x27B46536C66C8E3000000 PUSH2 0x14B JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x4 EQ ISZERO PUSH2 0x4D3 JUMPI POP PUSH11 0x34F086F3B33B684000000 PUSH2 0x14B JUMP JUMPDEST DUP2 PUSH1 0xFF AND PUSH1 0x5 EQ ISZERO PUSH2 0x14B JUMPI POP PUSH11 0x422CA8B0A00A425000000 PUSH2 0x14B JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 PUSH1 0x2 EXP MUL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x554 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x568 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH21 0xFF0000000000000000000000000000000000000000 NOT AND PUSH21 0x10000000000000000000000000000000000000000 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5E6 DUP3 DUP3 PUSH2 0x3F7 JUMP JUMPDEST ISZERO PUSH2 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x634 DUP3 DUP3 PUSH2 0x3F7 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x63F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xda PUSH14 0x23AC8F4B151242D9A9CC936A0D94 PUSH10 0xD337BB92EDDCE5CC529E 0x4f DUP1 0xd4 SWAP12 0x29 STOP 0x29 ", - "sourceMap": "551:1237:2:-;;;821:176;8:9:-1;5:2;;;30:1;27;20:12;5:2;821:176:2;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;821:176:2;;;;;;;155:8:5;:21;;166:10;-1:-1:-1;;;;;;155:21:5;;;;;-1:-1:-1;;;;;;187:19:5;;;;-1:-1:-1;635:29:3;;;;;-1:-1:-1;;;;;635:29:3;;;;;366:24:1;;:12;;;;:24;:::i;:::-;969:9:2;:20;;981:8;;969:9;-1:-1:-1;;969:20:2;;981:8;969:20;;;;;;;;;;;;;821:176;;551:1237;;822:96:1;881:29;:16;902:7;881:20;;;;;;:29;:::i;:::-;822:96;:::o;259:181:6:-;-1:-1:-1;;;;;335:21:6;;;;327:30;;;;;;376:18;380:4;386:7;376:3;;;;:18;:::i;:::-;375:19;367:28;;;;;;-1:-1:-1;;;;;406:20:6;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;406:27:6;429:4;406:27;;;259:181::o;786:162::-;858:4;-1:-1:-1;;;;;882:21:6;;;;874:30;;;;;;-1:-1:-1;;;;;;921:20:6;:11;:20;;;;;;;;;;;;;;;786:162::o;551:1237:2:-;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "335400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addCoreTeam(address)": "infinite", - "isCoreTeam(address)": "infinite", - "renounceCoreTeam()": "infinite", - "terminate()": "infinite", - "transferToMiner(address)": "infinite" - } - }, - "methodIdentifiers": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79", - "terminate()": "0c08bf88", - "transferToMiner(address)": "fe4028bb" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"terminate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isCoreTeam\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceCoreTeam\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"minerAddress\",\"type\":\"address\"}],\"name\":\"transferToMiner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"poolType\",\"type\":\"uint8\"},{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol\":\"AlgoPool\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol\":{\"keccak256\":\"0x014debd2c96ba7aba7faef24eac1f1a5d46791b55ae55fbd51d7945bf21277e0\",\"urls\":[\"bzzr://b8d1cffc7f1bfdc8c911d90b785cf9c2723b24bd162d7cfd730e127f56932fe9\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol\":{\"keccak256\":\"0x8252ea038586ac8cf89aea6810c1a75d84c2eba48d6b0ecc5f1783929de398a3\",\"urls\":[\"bzzr://3bd6a88368eeb6abb70573d16d481bc20bc22b6c0d3e60702c59c9fab4202528\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol\":{\"keccak256\":\"0xc30444f5c43be3fa9d5c27d4c8d3024c8e8182215d0750b120094fe5f7beb1cd\",\"urls\":[\"bzzr://fb67170fc2d84ce83219d2091c6df3183a413d26c81cfeaa632a6afc78cebb1c\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol\":{\"keccak256\":\"0x2c964fd13fcc46f0326055bd50569f2bfb32ea7963780763d77b85ed51320205\",\"urls\":[\"bzzr://3fd83f4de7769670f420f04909921357a8ace3b9e0eb08b7c9df0ee57741d347\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol\":{\"keccak256\":\"0x861339f0f02c28b332f5d8dc165127fa1a402bbbfd7c3923acca26a6139e4f2b\",\"urls\":[\"bzzr://87e5728ff1289cbcc9669fae3a5b994b3a4e0788a2673595adcac700eea8c411\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol\":{\"keccak256\":\"0x8704856f4ea109e3df4805b3b3dd7d9b9026e94f80c42c6d750356d46036a530\",\"urls\":[\"bzzr://18db91d498a487cbc7085490ff2bf017849f88bb4032ea7d840bab3561c45cf4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ERC20TokenHolder": { - "abi": [ - { - "inputs": [ - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "IAlgoMiner": { - "abi": [ - { - "constant": true, - "inputs": [], - "name": "isAlgoMiner", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isMining", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMiner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getReferral", - "outputs": [ - { - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getMinerType", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getCategory", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getCategory()": "80258e47", - "getMiner()": "302c11ca", - "getMinerType()": "4969ae70", - "getReferral()": "329b1c92", - "isAlgoMiner()": "1777fb4b", - "isMining()": "19a74ab3" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "Terminable": { - "abi": [ - { - "inputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "devdoc": { - "methods": {} - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "Roles": { - "abi": [], - "devdoc": { - "details": "Library for managing addresses assigned to a Role.", - "methods": {}, - "title": "Roles" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a7230582072caac54fe9b00b8b816307b2a5ded8de356c5be6012002ca36f81b18422d8260029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH19 0xCAAC54FE9B00B8B816307B2A5DED8DE356C5BE PUSH1 0x12 STOP 0x2c LOG3 PUSH16 0x81B18422D82600290000000000000000 ", - "sourceMap": "108:842:6:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(struct Roles.Role storage pointer,address)": "infinite", - "has(struct Roles.Role storage pointer,address)": "infinite", - "remove(struct Roles.Role storage pointer,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing addresses assigned to a Role.\",\"methods\":{},\"title\":\"Roles\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":\"Roles\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzzr://f704341d520fbc98716541f1b3f67737f0ee6e94adf072a66acb2bd25d593c2b\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "SafeMath": { - "abi": [], - "devdoc": { - "details": "Unsigned math operations with safety checks that revert on error", - "methods": {}, - "title": "SafeMath" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820c8fdc9a15986ffb647c7551d6f3c5b251c8209308e82491b559a3ee6cc289f670029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc8 REVERT 0xc9 LOG1 MSIZE DUP7 SELFDESTRUCT 0xb6 0x47 0xc7 SSTORE SAR PUSH16 0x3C5B251C8209308E82491B559A3EE6CC 0x28 SWAP16 PUSH8 0x29000000000000 ", - "sourceMap": "125:1726:7:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "add(uint256,uint256)": "infinite", - "div(uint256,uint256)": "infinite", - "mod(uint256,uint256)": "infinite", - "mul(uint256,uint256)": "infinite", - "sub(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"methods\":{},\"title\":\"SafeMath\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "spender", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "from", - "type": "address" - }, - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "who", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "to", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "devdoc": { - "details": "see https://github.com/ethereum/EIPs/issues/20", - "methods": {}, - "title": "ERC20 interface" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "", - "userdoc": { - "methods": {} - } - } - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "details": "Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "methods": {}, - "title": "SafeERC20" - }, - "evm": { - "bytecode": { - "linkReferences": {}, - "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820f19c7b62e065f91bc3f26e33372ab3fae2852e0b472cd6bb775c347272d9d5120029", - "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 CALL SWAP13 PUSH28 0x62E065F91BC3F26E33372AB3FAE2852E0B472CD6BB775C347272D9D5 SLT STOP 0x29 ", - "sourceMap": "352:1248:9:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "15200", - "executionCost": "116", - "totalCost": "15316" - }, - "internal": { - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure. To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"methods\":{},\"title\":\"SafeERC20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzzr://41ca38f6b0fa4b77b0feec43e422cfbec48b7eb38a41edf0b85c77e8d9a296b1\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzzr://48248e86f64407a95f241d6c5c8cfea6b4d4ebf4ebb467e5c98c8af3868fafe4\"]},\"d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0x05fcee7431cd35cd312e14e7f316a44ca3ccc5fb3b859aefc15c1a5db94add7e\",\"urls\":[\"bzzr://5ba67fb83aa7806883a335d53a27dcf1f53b75fa38dedd57893cc84633aa4d4c\"]}},\"version\":1}", - "userdoc": { - "methods": {} - } - } - } - }, - "sources": { - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol", - "exportedSymbols": { - "AlgoCommon": [ - 97 - ] - }, - "id": 98, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:0" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 97, - "linearizedBaseContracts": [ - 97 - ], - "name": "AlgoCommon", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 8, - "name": "TOKEN_FACTOR", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "55:58:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "55:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 3, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "96:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "3138", - "id": 5, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "110:2:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - } - ], - "id": 4, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "102:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": "uint256" - }, - "id": 6, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "102:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "96:17:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13, - "name": "CAT_0_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "120:61:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "120:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 12, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "313030303030", - "id": 10, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "160:6:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100000_by_1", - "typeString": "int_const 100000" - }, - "value": "100000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 11, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "169:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "160:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 18, - "name": "CAT_1_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "188:62:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "188:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 15, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "228:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 16, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "238:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "228:22:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 25, - "name": "CAT_2_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "257:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "257:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 24, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - }, - "id": 22, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 20, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "297:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 21, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "301:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "297:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_2000000_by_1", - "typeString": "int_const 2000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 23, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "311:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "297:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 32, - "name": "CAT_3_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "330:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "330:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 31, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - }, - "id": 29, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 27, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "370:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 28, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "374:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "370:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_3000000_by_1", - "typeString": "int_const 3000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 30, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "384:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "370:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 39, - "name": "CAT_4_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "403:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 33, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "403:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 38, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - }, - "id": 36, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 34, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "443:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 35, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "447:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "443:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_4000000_by_1", - "typeString": "int_const 4000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 37, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "457:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "443:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 46, - "name": "CAT_5_VALUE", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "476:66:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 40, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "476:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 45, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - }, - "id": 43, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 41, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "516:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31303030303030", - "id": 42, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "520:7:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000_by_1", - "typeString": "int_const 1000000" - }, - "value": "1000000" - }, - "src": "516:11:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_5000000_by_1", - "typeString": "int_const 5000000" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 44, - "name": "TOKEN_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8, - "src": "530:12:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "516:26:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "body": { - "id": 95, - "nodeType": "Block", - "src": "630:426:0", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 55, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 53, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "644:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 54, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "656:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "644:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 61, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 59, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "713:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 60, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "725:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "713:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 67, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 65, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "782:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "32", - "id": 66, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "794:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "782:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 73, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 71, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "851:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "33", - "id": 72, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "863:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "851:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 79, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 77, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "920:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "34", - "id": 78, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "932:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "920:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 85, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 83, - "name": "category", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "989:8:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 84, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1001:1:0", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "989:13:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 89, - "nodeType": "IfStatement", - "src": "986:63:0", - "trueBody": { - "id": 88, - "nodeType": "Block", - "src": "1004:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 86, - "name": "CAT_5_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 46, - "src": "1026:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 87, - "nodeType": "Return", - "src": "1019:18:0" - } - ] - } - }, - "id": 90, - "nodeType": "IfStatement", - "src": "917:132:0", - "trueBody": { - "id": 82, - "nodeType": "Block", - "src": "935:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 80, - "name": "CAT_4_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39, - "src": "957:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 81, - "nodeType": "Return", - "src": "950:18:0" - } - ] - } - }, - "id": 91, - "nodeType": "IfStatement", - "src": "848:201:0", - "trueBody": { - "id": 76, - "nodeType": "Block", - "src": "866:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 74, - "name": "CAT_3_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 32, - "src": "888:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 75, - "nodeType": "Return", - "src": "881:18:0" - } - ] - } - }, - "id": 92, - "nodeType": "IfStatement", - "src": "779:270:0", - "trueBody": { - "id": 70, - "nodeType": "Block", - "src": "797:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 68, - "name": "CAT_2_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 25, - "src": "819:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 69, - "nodeType": "Return", - "src": "812:18:0" - } - ] - } - }, - "id": 93, - "nodeType": "IfStatement", - "src": "710:339:0", - "trueBody": { - "id": 64, - "nodeType": "Block", - "src": "728:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 62, - "name": "CAT_1_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "750:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 63, - "nodeType": "Return", - "src": "743:18:0" - } - ] - } - }, - "id": 94, - "nodeType": "IfStatement", - "src": "641:408:0", - "trueBody": { - "id": 58, - "nodeType": "Block", - "src": "659:45:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 56, - "name": "CAT_0_VALUE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13, - "src": "681:11:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 52, - "id": 57, - "nodeType": "Return", - "src": "674:18:0" - } - ] - } - } - ] - }, - "documentation": null, - "id": 96, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCapacityByCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 49, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 48, - "name": "category", - "nodeType": "VariableDeclaration", - "scope": 96, - "src": "582:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 47, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "582:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "581:16:0" - }, - "returnParameters": { - "id": 52, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 51, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 96, - "src": "621:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 50, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "621:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "620:9:0" - }, - "scope": 97, - "src": "551:505:0", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 98, - "src": "26:1033:0" - } - ], - "src": "0:1059:0" - }, - "id": 0 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "exportedSymbols": { - "AlgoCoreTeamRole": [ - 184 - ] - }, - "id": 185, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 99, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:1" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "id": 100, - "nodeType": "ImportDirective", - "scope": 185, - "sourceUnit": 533, - "src": "26:189:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 184, - "linearizedBaseContracts": [ - 184 - ], - "name": "AlgoCoreTeamRole", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 103, - "libraryName": { - "contractScope": null, - "id": 101, - "name": "Roles", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 532, - "src": "258:5:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Roles_$532", - "typeString": "library Roles" - } - }, - "nodeType": "UsingForDirective", - "src": "252:27:1", - "typeName": { - "contractScope": null, - "id": 102, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "268:10:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - } - } - }, - { - "constant": false, - "id": 105, - "name": "_coreTeamMembers", - "nodeType": "VariableDeclaration", - "scope": 184, - "src": "287:35:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 104, - "name": "Roles.Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "287:10:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 113, - "nodeType": "Block", - "src": "355:43:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 109, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 889, - "src": "379:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "379:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 108, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 171, - "src": "366:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "366:24:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 112, - "nodeType": "ExpressionStatement", - "src": "366:24:1" - } - ] - }, - "documentation": null, - "id": 114, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 106, - "nodeType": "ParameterList", - "parameters": [], - "src": "343:2:1" - }, - "returnParameters": { - "id": 107, - "nodeType": "ParameterList", - "parameters": [], - "src": "355:0:1" - }, - "scope": 184, - "src": "331:67:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 124, - "nodeType": "Block", - "src": "430:62:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 118, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 889, - "src": "460:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "460:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 117, - "name": "isCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "449:10:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "449:22:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 116, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "441:7:1", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "441:31:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 122, - "nodeType": "ExpressionStatement", - "src": "441:31:1" - }, - { - "id": 123, - "nodeType": "PlaceholderStatement", - "src": "483:1:1" - } - ] - }, - "documentation": null, - "id": 125, - "name": "onlyCoreTeam", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 115, - "nodeType": "ParameterList", - "parameters": [], - "src": "427:2:1" - }, - "src": "406:86:1", - "visibility": "internal" - }, - { - "body": { - "id": 137, - "nodeType": "Block", - "src": "564:55:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 134, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "603:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 132, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "582:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 133, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "has", - "nodeType": "MemberAccess", - "referencedDeclaration": 531, - "src": "582:20:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$445_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$445_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "582:29:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 131, - "id": 136, - "nodeType": "Return", - "src": "575:36:1" - } - ] - }, - "documentation": null, - "id": 138, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 128, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 127, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "520:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "520:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "519:17:1" - }, - "returnParameters": { - "id": 131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 130, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "558:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 129, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "558:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "557:6:1" - }, - "scope": 184, - "src": "500:119:1", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 149, - "nodeType": "Block", - "src": "685:40:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 146, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 140, - "src": "709:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 145, - "name": "_addCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 171, - "src": "696:12:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "696:21:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 148, - "nodeType": "ExpressionStatement", - "src": "696:21:1" - } - ] - }, - "documentation": null, - "id": 150, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 143, - "modifierName": { - "argumentTypes": null, - "id": 142, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "672:12:1", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "672:12:1" - } - ], - "name": "addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 141, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 140, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 150, - "src": "648:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "648:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "647:17:1" - }, - "returnParameters": { - "id": 144, - "nodeType": "ParameterList", - "parameters": [], - "src": "685:0:1" - }, - "scope": 184, - "src": "627:98:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 158, - "nodeType": "Block", - "src": "768:46:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 154, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 889, - "src": "795:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "795:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - ], - "id": 153, - "name": "_removeCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 183, - "src": "779:15:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "779:27:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 157, - "nodeType": "ExpressionStatement", - "src": "779:27:1" - } - ] - }, - "documentation": null, - "id": 159, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "renounceCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [], - "src": "758:2:1" - }, - "returnParameters": { - "id": 152, - "nodeType": "ParameterList", - "parameters": [], - "src": "768:0:1" - }, - "scope": 184, - "src": "733:81:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 170, - "nodeType": "Block", - "src": "870:48:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 167, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 161, - "src": "902:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 164, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "881:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 166, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 477, - "src": "881:20:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$445_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$445_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "881:29:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 169, - "nodeType": "ExpressionStatement", - "src": "881:29:1" - } - ] - }, - "documentation": null, - "id": 171, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 162, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 161, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 171, - "src": "844:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 160, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "844:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "843:17:1" - }, - "returnParameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "870:0:1" - }, - "scope": 184, - "src": "822:96:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 182, - "nodeType": "Block", - "src": "977:51:1", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 179, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 173, - "src": "1012:7:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 176, - "name": "_coreTeamMembers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "988:16:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage", - "typeString": "struct Roles.Role storage ref" - } - }, - "id": 178, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 508, - "src": "988:23:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$445_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$445_storage_ptr_$", - "typeString": "function (struct Roles.Role storage pointer,address)" - } - }, - "id": 180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "988:32:1", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 181, - "nodeType": "ExpressionStatement", - "src": "988:32:1" - } - ] - }, - "documentation": null, - "id": 183, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeCoreTeam", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 174, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 173, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 183, - "src": "951:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "951:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "950:17:1" - }, - "returnParameters": { - "id": 175, - "nodeType": "ParameterList", - "parameters": [], - "src": "977:0:1" - }, - "scope": 184, - "src": "926:102:1", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 185, - "src": "219:812:1" - } - ], - "src": "0:1033:1" - }, - "id": 1 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoPool.sol", - "exportedSymbols": { - "AlgoPool": [ - 311 - ] - }, - "id": 312, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 186, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:2" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 187, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 730, - "src": "26:195:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 188, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 875, - "src": "223:198:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "file": "./IAlgoMiner.sol", - "id": 189, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 402, - "src": "425:26:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCommon.sol", - "file": "./AlgoCommon.sol", - "id": 190, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 98, - "src": "453:26:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "file": "./ERC20TokenHolder.sol", - "id": 191, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 369, - "src": "481:32:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/AlgoCoreTeamRole.sol", - "file": "./AlgoCoreTeamRole.sol", - "id": 192, - "nodeType": "ImportDirective", - "scope": 312, - "sourceUnit": 185, - "src": "515:32:2", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 193, - "name": "AlgoCommon", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 97, - "src": "572:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCommon_$97", - "typeString": "contract AlgoCommon" - } - }, - "id": 194, - "nodeType": "InheritanceSpecifier", - "src": "572:10:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 195, - "name": "ERC20TokenHolder", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 368, - "src": "584:16:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$368", - "typeString": "contract ERC20TokenHolder" - } - }, - "id": 196, - "nodeType": "InheritanceSpecifier", - "src": "584:16:2" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 197, - "name": "AlgoCoreTeamRole", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 184, - "src": "602:16:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AlgoCoreTeamRole_$184", - "typeString": "contract AlgoCoreTeamRole" - } - }, - "id": 198, - "nodeType": "InheritanceSpecifier", - "src": "602:16:2" - } - ], - "contractDependencies": [ - 438, - 184, - 368, - 97 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 311, - "linearizedBaseContracts": [ - 311, - 184, - 368, - 438, - 97 - ], - "name": "AlgoPool", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 201, - "libraryName": { - "contractScope": null, - "id": 199, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 874, - "src": "632:9:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "626:27:2", - "typeName": { - "contractScope": null, - "id": 200, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "646:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - } - }, - { - "canonicalName": "AlgoPool.PoolType", - "id": 204, - "members": [ - { - "id": 202, - "name": "MinerPool", - "nodeType": "EnumValue", - "src": "686:9:2" - }, - { - "id": 203, - "name": "ReferralPool", - "nodeType": "EnumValue", - "src": "706:12:2" - } - ], - "name": "PoolType", - "nodeType": "EnumDefinition", - "src": "661:64:2" - }, - { - "constant": false, - "id": 206, - "name": "_poolType", - "nodeType": "VariableDeclaration", - "scope": 311, - "src": "733:26:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - }, - "typeName": { - "contractScope": null, - "id": 205, - "name": "PoolType", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 204, - "src": "733:8:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 210, - "name": "_fundedMiners", - "nodeType": "VariableDeclaration", - "scope": 311, - "src": "766:46:2", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 209, - "keyType": { - "id": 207, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "774:7:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "766:24:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 208, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "785:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "body": { - "id": 226, - "nodeType": "Block", - "src": "958:39:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 222, - "name": "_poolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 206, - "src": "969:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 223, - "name": "poolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 212, - "src": "981:8:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "src": "969:20:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "id": 225, - "nodeType": "ExpressionStatement", - "src": "969:20:2" - } - ] - }, - "documentation": null, - "id": 227, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 217, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 214, - "src": "900:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 218, - "modifierName": { - "argumentTypes": null, - "id": 216, - "name": "ERC20TokenHolder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 368, - "src": "883:16:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20TokenHolder_$368_$", - "typeString": "type(contract ERC20TokenHolder)" - } - }, - "nodeType": "ModifierInvocation", - "src": "883:30:2" - }, - { - "arguments": [], - "id": 220, - "modifierName": { - "argumentTypes": null, - "id": 219, - "name": "AlgoCoreTeamRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 184, - "src": "923:16:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AlgoCoreTeamRole_$184_$", - "typeString": "type(contract AlgoCoreTeamRole)" - } - }, - "nodeType": "ModifierInvocation", - "src": "923:18:2" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 215, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 212, - "name": "poolType", - "nodeType": "VariableDeclaration", - "scope": 227, - "src": "833:17:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - }, - "typeName": { - "contractScope": null, - "id": 211, - "name": "PoolType", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 204, - "src": "833:8:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 214, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 227, - "src": "852:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 213, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "852:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "832:41:2" - }, - "returnParameters": { - "id": 221, - "nodeType": "ParameterList", - "parameters": [], - "src": "958:0:2" - }, - "scope": 311, - "src": "821:176:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 300, - "nodeType": "Block", - "src": "1086:619:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1105:28:2", - "subExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 237, - "name": "_fundedMiners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 210, - "src": "1106:13:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 239, - "indexExpression": { - "argumentTypes": null, - "id": 238, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 229, - "src": "1120:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1106:27:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 236, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1097:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1097:37:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 242, - "nodeType": "ExpressionStatement", - "src": "1097:37:2" - }, - { - "assignments": [ - 244 - ], - "declarations": [ - { - "constant": false, - "id": 244, - "name": "algoMiner", - "nodeType": "VariableDeclaration", - "scope": 300, - "src": "1147:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$401", - "typeString": "contract IAlgoMiner" - }, - "typeName": { - "contractScope": null, - "id": 243, - "name": "IAlgoMiner", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 401, - "src": "1147:10:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$401", - "typeString": "contract IAlgoMiner" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 248, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 246, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 229, - "src": "1181:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 245, - "name": "IAlgoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 401, - "src": "1170:10:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAlgoMiner_$401_$", - "typeString": "type(contract IAlgoMiner)" - } - }, - "id": 247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1170:24:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$401", - "typeString": "contract IAlgoMiner" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1147:47:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 250, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 244, - "src": "1223:9:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$401", - "typeString": "contract IAlgoMiner" - } - }, - "id": 251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "isAlgoMiner", - "nodeType": "MemberAccess", - "referencedDeclaration": 375, - "src": "1223:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_pure$__$returns$_t_bool_$", - "typeString": "function () pure external returns (bool)" - } - }, - "id": 252, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1223:23:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 249, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1215:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 253, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1215:32:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 254, - "nodeType": "ExpressionStatement", - "src": "1215:32:2" - }, - { - "assignments": [ - 256 - ], - "declarations": [ - { - "constant": false, - "id": 256, - "name": "minerCategory", - "nodeType": "VariableDeclaration", - "scope": 300, - "src": "1268:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 255, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1268:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 260, - "initialValue": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 257, - "name": "algoMiner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 244, - "src": "1290:9:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAlgoMiner_$401", - "typeString": "contract IAlgoMiner" - } - }, - "id": 258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "getCategory", - "nodeType": "MemberAccess", - "referencedDeclaration": 385, - "src": "1290:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1290:23:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1268:45:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 262, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 256, - "src": "1334:13:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "35", - "id": 263, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1351:1:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_5_by_1", - "typeString": "int_const 5" - }, - "value": "5" - }, - "src": "1334:18:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 261, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1326:7:2", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1326:27:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 266, - "nodeType": "ExpressionStatement", - "src": "1326:27:2" - }, - { - "assignments": [ - 268 - ], - "declarations": [ - { - "constant": false, - "id": 268, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 300, - "src": "1366:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 267, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1366:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 272, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 270, - "name": "minerCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 256, - "src": "1404:13:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 269, - "name": "getCapacityByCategory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 96, - "src": "1382:21:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint8_$returns$_t_uint256_$", - "typeString": "function (uint8) pure returns (uint256)" - } - }, - "id": 271, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1382:36:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1366:52:2" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - }, - "id": 276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 273, - "name": "_poolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 206, - "src": "1513:9:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 274, - "name": "PoolType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 204, - "src": "1526:8:2", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_PoolType_$204_$", - "typeString": "type(enum AlgoPool.PoolType)" - } - }, - "id": 275, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "ReferralPool", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1526:21:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PoolType_$204", - "typeString": "enum AlgoPool.PoolType" - } - }, - "src": "1513:34:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 286, - "nodeType": "IfStatement", - "src": "1510:90:2", - "trueBody": { - "id": 285, - "nodeType": "Block", - "src": "1549:51:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 277, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 268, - "src": "1564:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 278, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 268, - "src": "1572:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "hexValue": "3130", - "id": 279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1580:2:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "src": "1572:10:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "313030", - "id": 281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1585:3:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "100" - }, - "src": "1572:16:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1564:24:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 284, - "nodeType": "ExpressionStatement", - "src": "1564:24:2" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "id": 291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 287, - "name": "_fundedMiners", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 210, - "src": "1612:13:2", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 289, - "indexExpression": { - "argumentTypes": null, - "id": 288, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 229, - "src": "1626:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1612:27:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 290, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1642:4:2", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "1612:34:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 292, - "nodeType": "ExpressionStatement", - "src": "1612:34:2" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 296, - "name": "minerAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 229, - "src": "1677:12:2", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 297, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 268, - "src": "1691:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 293, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "1657:6:2", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 754, - "src": "1657:19:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$729_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$729_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1657:40:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 299, - "nodeType": "ExpressionStatement", - "src": "1657:40:2" - } - ] - }, - "documentation": null, - "id": 301, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 232, - "modifierName": { - "argumentTypes": null, - "id": 231, - "name": "notTerminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 429, - "src": "1059:13:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1059:13:2" - }, - { - "arguments": null, - "id": 234, - "modifierName": { - "argumentTypes": null, - "id": 233, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "1073:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1073:12:2" - } - ], - "name": "transferToMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 230, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 229, - "name": "minerAddress", - "nodeType": "VariableDeclaration", - "scope": 301, - "src": "1030:20:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 228, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1030:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1029:22:2" - }, - "returnParameters": { - "id": 235, - "nodeType": "ParameterList", - "parameters": [], - "src": "1086:0:2" - }, - "scope": 311, - "src": "1005:700:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - }, - { - "body": { - "id": 309, - "nodeType": "Block", - "src": "1754:31:2", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 306, - "name": "_terminate", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 367 - ], - "referencedDeclaration": 367, - "src": "1765:10:2", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1765:12:2", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 308, - "nodeType": "ExpressionStatement", - "src": "1765:12:2" - } - ] - }, - "documentation": null, - "id": 310, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": null, - "id": 304, - "modifierName": { - "argumentTypes": null, - "id": 303, - "name": "onlyCoreTeam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "1741:12:2", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "1741:12:2" - } - ], - "name": "terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 302, - "nodeType": "ParameterList", - "parameters": [], - "src": "1731:2:2" - }, - "returnParameters": { - "id": 305, - "nodeType": "ParameterList", - "parameters": [], - "src": "1754:0:2" - }, - "scope": 311, - "src": "1713:72:2", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 312, - "src": "551:1237:2" - } - ], - "src": "0:1790:2" - }, - "id": 2 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/ERC20TokenHolder.sol", - "exportedSymbols": { - "ERC20TokenHolder": [ - 368 - ] - }, - "id": 369, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 313, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:3" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "id": 314, - "nodeType": "ImportDirective", - "scope": 369, - "sourceUnit": 730, - "src": "26:195:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "file": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "id": 315, - "nodeType": "ImportDirective", - "scope": 369, - "sourceUnit": 875, - "src": "223:198:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "file": "./Terminable.sol", - "id": 316, - "nodeType": "ImportDirective", - "scope": 369, - "sourceUnit": 439, - "src": "425:26:3", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 317, - "name": "Terminable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 438, - "src": "484:10:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Terminable_$438", - "typeString": "contract Terminable" - } - }, - "id": 318, - "nodeType": "InheritanceSpecifier", - "src": "484:10:3" - } - ], - "contractDependencies": [ - 438 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 368, - "linearizedBaseContracts": [ - 368, - 438 - ], - "name": "ERC20TokenHolder", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 321, - "libraryName": { - "contractScope": null, - "id": 319, - "name": "SafeERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 874, - "src": "508:9:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - }, - "nodeType": "UsingForDirective", - "src": "502:27:3", - "typeName": { - "contractScope": null, - "id": 320, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "522:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - } - }, - { - "constant": false, - "id": 323, - "name": "_token", - "nodeType": "VariableDeclaration", - "scope": 368, - "src": "537:22:3", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 322, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "537:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 336, - "nodeType": "Block", - "src": "624:48:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 330, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "635:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 332, - "name": "tokenAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 325, - "src": "651:12:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 331, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 729, - "src": "644:6:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$729_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "644:20:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "src": "635:29:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 335, - "nodeType": "ExpressionStatement", - "src": "635:29:3" - } - ] - }, - "documentation": null, - "id": 337, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [], - "id": 328, - "modifierName": { - "argumentTypes": null, - "id": 327, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 438, - "src": "602:10:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$438_$", - "typeString": "type(contract Terminable)" - } - }, - "nodeType": "ModifierInvocation", - "src": "602:12:3" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 326, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 325, - "name": "tokenAddress", - "nodeType": "VariableDeclaration", - "scope": 337, - "src": "580:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 324, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "580:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "579:22:3" - }, - "returnParameters": { - "id": 329, - "nodeType": "ParameterList", - "parameters": [], - "src": "624:0:3" - }, - "scope": 368, - "src": "568:104:3", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 366, - "nodeType": "Block", - "src": "711:214:3", - "statements": [ - { - "assignments": [ - 341 - ], - "declarations": [ - { - "constant": false, - "id": 341, - "name": "currentBalance", - "nodeType": "VariableDeclaration", - "scope": 366, - "src": "722:22:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 340, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "722:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 348, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 345, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "772:4:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$368", - "typeString": "contract ERC20TokenHolder" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ERC20TokenHolder_$368", - "typeString": "contract ERC20TokenHolder" - } - ], - "id": 344, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "764:7:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "764:13:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 342, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "747:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 703, - "src": "747:16:3", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "747:31:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "722:56:3" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 351, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 349, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "792:14:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 350, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "809:1:3", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "792:18:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 360, - "nodeType": "IfStatement", - "src": "789:95:3", - "trueBody": { - "id": 359, - "nodeType": "Block", - "src": "812:72:3", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 355, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "847:8:3", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 356, - "name": "currentBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 341, - "src": "857:14:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 352, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 323, - "src": "827:6:3", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 754, - "src": "827:19:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$729_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$729_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "827:45:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 358, - "nodeType": "ExpressionStatement", - "src": "827:45:3" - } - ] - } - }, - { - "expression": { - "argumentTypes": null, - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": null, - "id": 361, - "name": "Terminable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 438, - "src": "894:10:3", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Terminable_$438_$", - "typeString": "type(contract Terminable)" - } - }, - "id": 363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "_terminate", - "nodeType": "MemberAccess", - "referencedDeclaration": 437, - "src": "894:21:3", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "894:23:3", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 365, - "nodeType": "ExpressionStatement", - "src": "894:23:3" - } - ] - }, - "documentation": null, - "id": 367, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 338, - "nodeType": "ParameterList", - "parameters": [], - "src": "699:2:3" - }, - "returnParameters": { - "id": 339, - "nodeType": "ParameterList", - "parameters": [], - "src": "711:0:3" - }, - "scope": 368, - "src": "680:245:3", - "stateMutability": "nonpayable", - "superFunction": 437, - "visibility": "internal" - } - ], - "scope": 369, - "src": "455:473:3" - } - ], - "src": "0:928:3" - }, - "id": 3 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/IAlgoMiner.sol", - "exportedSymbols": { - "IAlgoMiner": [ - 401 - ] - }, - "id": 402, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 370, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:4" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": false, - "id": 401, - "linearizedBaseContracts": [ - 401 - ], - "name": "IAlgoMiner", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 375, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isAlgoMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 371, - "nodeType": "ParameterList", - "parameters": [], - "src": "73:2:4" - }, - "returnParameters": { - "id": 374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 373, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "97:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 372, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "97:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "96:6:4" - }, - "scope": 401, - "src": "53:50:4", - "stateMutability": "pure", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 380, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMinerType", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 376, - "nodeType": "ParameterList", - "parameters": [], - "src": "130:2:4" - }, - "returnParameters": { - "id": 379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 378, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 380, - "src": "154:5:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 377, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "154:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "153:7:4" - }, - "scope": 401, - "src": "109:52:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 385, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCategory", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 381, - "nodeType": "ParameterList", - "parameters": [], - "src": "187:2:4" - }, - "returnParameters": { - "id": 384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 383, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 385, - "src": "211:5:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 382, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "211:5:4", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "210:7:4" - }, - "scope": 401, - "src": "167:51:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 390, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getMiner", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 386, - "nodeType": "ParameterList", - "parameters": [], - "src": "241:2:4" - }, - "returnParameters": { - "id": 389, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 388, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 390, - "src": "265:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 387, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "265:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "264:9:4" - }, - "scope": 401, - "src": "224:50:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 395, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getReferral", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 391, - "nodeType": "ParameterList", - "parameters": [], - "src": "300:2:4" - }, - "returnParameters": { - "id": 394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 393, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 395, - "src": "324:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 392, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "324:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "323:9:4" - }, - "scope": 401, - "src": "280:53:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - }, - { - "body": null, - "documentation": null, - "id": 400, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isMining", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 396, - "nodeType": "ParameterList", - "parameters": [], - "src": "356:2:4" - }, - "returnParameters": { - "id": 399, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 398, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 400, - "src": "380:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 397, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "380:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "379:6:4" - }, - "scope": 401, - "src": "339:47:4", - "stateMutability": "view", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 402, - "src": "26:363:4" - } - ], - "src": "0:389:4" - }, - "id": 4 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/Terminable.sol", - "exportedSymbols": { - "Terminable": [ - 438 - ] - }, - "id": 439, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 403, - "literals": [ - "solidity", - "0.5", - ".4" - ], - "nodeType": "PragmaDirective", - "src": "0:22:5" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 438, - "linearizedBaseContracts": [ - 438 - ], - "name": "Terminable", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 405, - "name": "_creator", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "55:25:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 404, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 407, - "name": "_terminated", - "nodeType": "VariableDeclaration", - "scope": 438, - "src": "87:25:5", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 406, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "87:4:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 419, - "nodeType": "Block", - "src": "144:70:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 410, - "name": "_creator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 405, - "src": "155:8:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 411, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 889, - "src": "166:3:5", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "166:10:5", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "155:21:5", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 414, - "nodeType": "ExpressionStatement", - "src": "155:21:5" - }, - { - "expression": { - "argumentTypes": null, - "id": 417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 415, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 407, - "src": "187:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 416, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "201:5:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "187:19:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 418, - "nodeType": "ExpressionStatement", - "src": "187:19:5" - } - ] - }, - "documentation": null, - "id": 420, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 408, - "nodeType": "ParameterList", - "parameters": [], - "src": "132:2:5" - }, - "returnParameters": { - "id": 409, - "nodeType": "ParameterList", - "parameters": [], - "src": "144:0:5" - }, - "scope": 438, - "src": "121:93:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 428, - "nodeType": "Block", - "src": "247:52:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "266:12:5", - "subExpression": { - "argumentTypes": null, - "id": 423, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 407, - "src": "267:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 422, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "258:7:5", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "258:21:5", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 426, - "nodeType": "ExpressionStatement", - "src": "258:21:5" - }, - { - "id": 427, - "nodeType": "PlaceholderStatement", - "src": "290:1:5" - } - ] - }, - "documentation": null, - "id": 429, - "name": "notTerminated", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 421, - "nodeType": "ParameterList", - "parameters": [], - "src": "244:2:5" - }, - "src": "222:77:5", - "visibility": "internal" - }, - { - "body": { - "id": 436, - "nodeType": "Block", - "src": "338:37:5", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 432, - "name": "_terminated", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 407, - "src": "349:11:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "363:4:5", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "349:18:5", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 435, - "nodeType": "ExpressionStatement", - "src": "349:18:5" - } - ] - }, - "documentation": null, - "id": 437, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_terminate", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 430, - "nodeType": "ParameterList", - "parameters": [], - "src": "326:2:5" - }, - "returnParameters": { - "id": 431, - "nodeType": "ParameterList", - "parameters": [], - "src": "338:0:5" - }, - "scope": 438, - "src": "307:68:5", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 439, - "src": "26:352:5" - } - ], - "src": "0:378:5" - }, - "id": 5 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/access/Roles.sol", - "exportedSymbols": { - "Roles": [ - 532 - ] - }, - "id": 533, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 440, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:6" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title Roles\n@dev Library for managing addresses assigned to a Role.", - "fullyImplemented": true, - "id": 532, - "linearizedBaseContracts": [ - 532 - ], - "name": "Roles", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "Roles.Role", - "id": 445, - "members": [ - { - "constant": false, - "id": 444, - "name": "bearer", - "nodeType": "VariableDeclaration", - "scope": 445, - "src": "150:32:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 443, - "keyType": { - "id": 441, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "159:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "150:25:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 442, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "170:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "value": null, - "visibility": "internal" - } - ], - "name": "Role", - "nodeType": "StructDefinition", - "scope": 532, - "src": "128:61:6", - "visibility": "public" - }, - { - "body": { - "id": 476, - "nodeType": "Block", - "src": "317:123:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 453, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 449, - "src": "335:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 455, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "354:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "346:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 456, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "346:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "335:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 452, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "327:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "327:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 459, - "nodeType": "ExpressionStatement", - "src": "327:30:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "375:19:6", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 462, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 447, - "src": "380:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 463, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 449, - "src": "386:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 461, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "376:3:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$445_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "376:18:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 460, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "367:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "367:28:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 467, - "nodeType": "ExpressionStatement", - "src": "367:28:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 468, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 447, - "src": "406:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 471, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 444, - "src": "406:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 472, - "indexExpression": { - "argumentTypes": null, - "id": 470, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 449, - "src": "418:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "406:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "74727565", - "id": 473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "429:4:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "406:27:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 475, - "nodeType": "ExpressionStatement", - "src": "406:27:6" - } - ] - }, - "documentation": "@dev give an account access to this role", - "id": 477, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 450, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 447, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 477, - "src": "272:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 446, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "272:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 449, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 477, - "src": "291:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 448, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "291:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "271:36:6" - }, - "returnParameters": { - "id": 451, - "nodeType": "ParameterList", - "parameters": [], - "src": "317:0:6" - }, - "scope": 532, - "src": "259:181:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 507, - "nodeType": "Block", - "src": "575:123:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 485, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 481, - "src": "593:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 487, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "612:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 486, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "604:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 488, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "604:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "593:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 484, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "585:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "585:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 491, - "nodeType": "ExpressionStatement", - "src": "585:30:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 494, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 479, - "src": "637:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - { - "argumentTypes": null, - "id": 495, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 481, - "src": "643:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 493, - "name": "has", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 531, - "src": "633:3:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$445_storage_ptr_$_t_address_$returns$_t_bool_$", - "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)" - } - }, - "id": 496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "633:18:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 492, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "625:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "625:27:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 498, - "nodeType": "ExpressionStatement", - "src": "625:27:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 499, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 479, - "src": "663:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 502, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 444, - "src": "663:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 503, - "indexExpression": { - "argumentTypes": null, - "id": 501, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 481, - "src": "675:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "663:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "hexValue": "66616c7365", - "id": 504, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "686:5:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "663:28:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 506, - "nodeType": "ExpressionStatement", - "src": "663:28:6" - } - ] - }, - "documentation": "@dev remove an account's access to this role", - "id": 508, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 479, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "530:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 478, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "530:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 481, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "549:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "529:36:6" - }, - "returnParameters": { - "id": 483, - "nodeType": "ParameterList", - "parameters": [], - "src": "575:0:6" - }, - "scope": 532, - "src": "514:184:6", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 530, - "nodeType": "Block", - "src": "864:84:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 522, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 518, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 512, - "src": "882:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 520, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "901:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 519, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "893:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 521, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "893:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "882:21:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 517, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "874:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 523, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "874:30:6", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 524, - "nodeType": "ExpressionStatement", - "src": "874:30:6" - }, - { - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 525, - "name": "role", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 510, - "src": "921:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role storage pointer" - } - }, - "id": 526, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "bearer", - "nodeType": "MemberAccess", - "referencedDeclaration": 444, - "src": "921:11:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 528, - "indexExpression": { - "argumentTypes": null, - "id": 527, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 512, - "src": "933:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "921:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 516, - "id": 529, - "nodeType": "Return", - "src": "914:27:6" - } - ] - }, - "documentation": "@dev check if an account has this role\n@return bool", - "id": 531, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "has", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 513, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 510, - "name": "role", - "nodeType": "VariableDeclaration", - "scope": 531, - "src": "799:17:6", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - }, - "typeName": { - "contractScope": null, - "id": 509, - "name": "Role", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 445, - "src": "799:4:6", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Role_$445_storage_ptr", - "typeString": "struct Roles.Role" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 512, - "name": "account", - "nodeType": "VariableDeclaration", - "scope": 531, - "src": "818:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 511, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "818:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "798:36:6" - }, - "returnParameters": { - "id": 516, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 515, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 531, - "src": "858:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 514, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "858:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "857:6:6" - }, - "scope": 532, - "src": "786:162:6", - "stateMutability": "view", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 533, - "src": "108:842:6" - } - ], - "src": "0:951:6" - }, - "id": 6 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "exportedSymbols": { - "SafeMath": [ - 660 - ] - }, - "id": 661, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 534, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:7" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeMath\n@dev Unsigned math operations with safety checks that revert on error", - "fullyImplemented": true, - "id": 660, - "linearizedBaseContracts": [ - 660 - ], - "name": "SafeMath", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 566, - "nodeType": "Block", - "src": "296:354:7", - "statements": [ - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 543, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 536, - "src": "527:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 544, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "532:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "527:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 549, - "nodeType": "IfStatement", - "src": "523:45:7", - "trueBody": { - "id": 548, - "nodeType": "Block", - "src": "535:33:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "hexValue": "30", - "id": 546, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "556:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 542, - "id": 547, - "nodeType": "Return", - "src": "549:8:7" - } - ] - } - }, - { - "assignments": [ - 551 - ], - "declarations": [ - { - "constant": false, - "id": 551, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 566, - "src": "578:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 550, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "578:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 555, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 552, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 536, - "src": "590:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "argumentTypes": null, - "id": 553, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 538, - "src": "594:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "590:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "578:17:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 561, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 557, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 551, - "src": "613:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 558, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 536, - "src": "617:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 560, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 538, - "src": "622:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "613:10:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 556, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "605:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "605:19:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 563, - "nodeType": "ExpressionStatement", - "src": "605:19:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 564, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 551, - "src": "642:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 542, - "id": 565, - "nodeType": "Return", - "src": "635:8:7" - } - ] - }, - "documentation": "@dev Multiplies two unsigned integers, reverts on overflow.", - "id": 567, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mul", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 536, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 567, - "src": "242:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 535, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "242:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 538, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 567, - "src": "253:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "253:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "241:22:7" - }, - "returnParameters": { - "id": 542, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 541, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 567, - "src": "287:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 540, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "287:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "286:9:7" - }, - "scope": 660, - "src": "229:421:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 590, - "nodeType": "Block", - "src": "845:229:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 577, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 571, - "src": "929:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 578, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "933:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "929:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 576, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "921:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "921:14:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 581, - "nodeType": "ExpressionStatement", - "src": "921:14:7" - }, - { - "assignments": [ - 583 - ], - "declarations": [ - { - "constant": false, - "id": 583, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "945:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 582, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "945:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 587, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 584, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 569, - "src": "957:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "id": 585, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 571, - "src": "961:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "957:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "945:17:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 588, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 583, - "src": "1066:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 575, - "id": 589, - "nodeType": "Return", - "src": "1059:8:7" - } - ] - }, - "documentation": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.", - "id": 591, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "div", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 572, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 569, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "791:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 568, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "791:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 571, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "802:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 570, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "802:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "790:22:7" - }, - "returnParameters": { - "id": 575, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 574, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 591, - "src": "836:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 573, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "835:9:7" - }, - "scope": 660, - "src": "778:296:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 614, - "nodeType": "Block", - "src": "1272:78:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 601, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 595, - "src": "1290:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "argumentTypes": null, - "id": 602, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 593, - "src": "1295:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1290:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 600, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1282:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1282:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 605, - "nodeType": "ExpressionStatement", - "src": "1282:15:7" - }, - { - "assignments": [ - 607 - ], - "declarations": [ - { - "constant": false, - "id": 607, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 614, - "src": "1307:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 606, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1307:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 611, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 608, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 593, - "src": "1319:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "argumentTypes": null, - "id": 609, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 595, - "src": "1323:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1319:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1307:17:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 612, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 607, - "src": "1342:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 599, - "id": 613, - "nodeType": "Return", - "src": "1335:8:7" - } - ] - }, - "documentation": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).", - "id": 615, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 593, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 615, - "src": "1218:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 592, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1218:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 595, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 615, - "src": "1229:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 594, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1229:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1217:22:7" - }, - "returnParameters": { - "id": 599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 598, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 615, - "src": "1263:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 597, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1263:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1262:9:7" - }, - "scope": 660, - "src": "1205:145:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 638, - "nodeType": "Block", - "src": "1498:78:7", - "statements": [ - { - "assignments": [ - 625 - ], - "declarations": [ - { - "constant": false, - "id": 625, - "name": "c", - "nodeType": "VariableDeclaration", - "scope": 638, - "src": "1508:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 624, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1508:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 629, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 628, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 626, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 617, - "src": "1520:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "argumentTypes": null, - "id": 627, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 619, - "src": "1524:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1520:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1508:17:7" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 631, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 625, - "src": "1543:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "argumentTypes": null, - "id": 632, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 617, - "src": "1548:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1543:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 630, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1535:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1535:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 635, - "nodeType": "ExpressionStatement", - "src": "1535:15:7" - }, - { - "expression": { - "argumentTypes": null, - "id": 636, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 625, - "src": "1568:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 623, - "id": 637, - "nodeType": "Return", - "src": "1561:8:7" - } - ] - }, - "documentation": "@dev Adds two unsigned integers, reverts on overflow.", - "id": 639, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 620, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 617, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 639, - "src": "1444:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 616, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1444:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 619, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 639, - "src": "1455:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 618, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1455:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1443:22:7" - }, - "returnParameters": { - "id": 623, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 622, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 639, - "src": "1489:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 621, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1489:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1488:9:7" - }, - "scope": 660, - "src": "1431:145:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 658, - "nodeType": "Block", - "src": "1795:54:7", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 649, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 643, - "src": "1813:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 650, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1818:1:7", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1813:6:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 648, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1805:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1805:15:7", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 653, - "nodeType": "ExpressionStatement", - "src": "1805:15:7" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 654, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "1837:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "id": 655, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 643, - "src": "1841:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1837:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 647, - "id": 657, - "nodeType": "Return", - "src": "1830:12:7" - } - ] - }, - "documentation": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.", - "id": 659, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mod", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 644, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 641, - "name": "a", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "1741:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 640, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1741:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 643, - "name": "b", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "1752:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 642, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1752:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1740:22:7" - }, - "returnParameters": { - "id": 647, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 646, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 659, - "src": "1786:7:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 645, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1786:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1785:9:7" - }, - "scope": 660, - "src": "1728:121:7", - "stateMutability": "pure", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 661, - "src": "125:1726:7" - } - ], - "src": "0:1852:7" - }, - "id": 7 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [ - 729 - ] - }, - "id": 730, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 662, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:8" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "interface", - "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20", - "fullyImplemented": false, - "id": 729, - "linearizedBaseContracts": [ - 729 - ], - "name": "IERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": null, - "documentation": null, - "id": 671, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 667, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 664, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 671, - "src": "155:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 663, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "155:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 666, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 671, - "src": "167:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 665, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "167:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "154:27:8" - }, - "returnParameters": { - "id": 670, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 669, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 671, - "src": "200:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 668, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "200:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "199:6:8" - }, - "scope": 729, - "src": "137:69:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 680, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 673, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 680, - "src": "229:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 672, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "229:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 675, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 680, - "src": "246:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 674, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "246:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "228:32:8" - }, - "returnParameters": { - "id": 679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 678, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 680, - "src": "279:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 677, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "279:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "278:6:8" - }, - "scope": 729, - "src": "212:73:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 691, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 682, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 691, - "src": "313:12:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "313:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 684, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 691, - "src": "327:10:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 683, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "327:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 686, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 691, - "src": "339:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 685, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "339:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "312:41:8" - }, - "returnParameters": { - "id": 690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 689, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 691, - "src": "372:4:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 688, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "372:4:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "371:6:8" - }, - "scope": 729, - "src": "291:87:8", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 696, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 692, - "nodeType": "ParameterList", - "parameters": [], - "src": "404:2:8" - }, - "returnParameters": { - "id": 695, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 694, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 696, - "src": "430:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 693, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "430:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "429:9:8" - }, - "scope": 729, - "src": "384:55:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 703, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 699, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 698, - "name": "who", - "nodeType": "VariableDeclaration", - "scope": 703, - "src": "464:11:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 697, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "464:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "463:13:8" - }, - "returnParameters": { - "id": 702, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 701, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 703, - "src": "500:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 700, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "500:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "499:9:8" - }, - "scope": 729, - "src": "445:64:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "body": null, - "documentation": null, - "id": 712, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 705, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 712, - "src": "534:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 704, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "534:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 707, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 712, - "src": "549:15:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 706, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "533:32:8" - }, - "returnParameters": { - "id": 711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 710, - "name": "", - "nodeType": "VariableDeclaration", - "scope": 712, - "src": "589:7:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 709, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "589:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "588:9:8" - }, - "scope": 729, - "src": "515:83:8", - "stateMutability": "view", - "superFunction": null, - "visibility": "external" - }, - { - "anonymous": false, - "documentation": null, - "id": 720, - "name": "Transfer", - "nodeType": "EventDefinition", - "parameters": { - "id": 719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 714, - "indexed": true, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "619:20:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 713, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 716, - "indexed": true, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "641:18:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 715, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "641:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 718, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "661:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 717, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "661:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "618:57:8" - }, - "src": "604:72:8" - }, - { - "anonymous": false, - "documentation": null, - "id": 728, - "name": "Approval", - "nodeType": "EventDefinition", - "parameters": { - "id": 727, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 722, - "indexed": true, - "name": "owner", - "nodeType": "VariableDeclaration", - "scope": 728, - "src": "697:21:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 721, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "697:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 724, - "indexed": true, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 728, - "src": "720:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 723, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "720:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 726, - "indexed": false, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 728, - "src": "745:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 725, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "745:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "696:63:8" - }, - "src": "682:78:8" - } - ], - "scope": 730, - "src": "114:648:8" - } - ], - "src": "0:763:8" - }, - "id": 8 - }, - "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol": { - "ast": { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol", - "exportedSymbols": { - "SafeERC20": [ - 874 - ] - }, - "id": 875, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 731, - "literals": [ - "solidity", - "^", - "0.5", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "0:23:9" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 732, - "nodeType": "ImportDirective", - "scope": 875, - "sourceUnit": 730, - "src": "25:22:9", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "d:/GitHub/ALGOToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "file": "../../math/SafeMath.sol", - "id": 733, - "nodeType": "ImportDirective", - "scope": 875, - "sourceUnit": 661, - "src": "48:33:9", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [], - "contractDependencies": [], - "contractKind": "library", - "documentation": "@title SafeERC20\n@dev Wrappers around ERC20 operations that throw on failure.\nTo use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "fullyImplemented": true, - "id": 874, - "linearizedBaseContracts": [ - 874 - ], - "name": "SafeERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "id": 736, - "libraryName": { - "contractScope": null, - "id": 734, - "name": "SafeMath", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 660, - "src": "382:8:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$660", - "typeString": "library SafeMath" - } - }, - "nodeType": "UsingForDirective", - "src": "376:27:9", - "typeName": { - "id": 735, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "395:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "body": { - "id": 753, - "nodeType": "Block", - "src": "481:51:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 748, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 740, - "src": "514:2:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 749, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 742, - "src": "518:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 746, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 738, - "src": "499:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 671, - "src": "499:14:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "499:25:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 745, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "491:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "491:34:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 752, - "nodeType": "ExpressionStatement", - "src": "491:34:9" - } - ] - }, - "documentation": null, - "id": 754, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 743, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 738, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 754, - "src": "431:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 737, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "431:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 740, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 754, - "src": "445:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 739, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "445:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 742, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 754, - "src": "457:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 741, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "457:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "430:41:9" - }, - "returnParameters": { - "id": 744, - "nodeType": "ParameterList", - "parameters": [], - "src": "481:0:9" - }, - "scope": 874, - "src": "409:123:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 774, - "nodeType": "Block", - "src": "628:61:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 768, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 758, - "src": "665:4:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 769, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 760, - "src": "671:2:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 770, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 762, - "src": "675:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 766, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 756, - "src": "646:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 691, - "src": "646:18:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "646:35:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 765, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "638:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "638:44:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 773, - "nodeType": "ExpressionStatement", - "src": "638:44:9" - } - ] - }, - "documentation": null, - "id": 775, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 763, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 756, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 775, - "src": "564:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 755, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "564:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 758, - "name": "from", - "nodeType": "VariableDeclaration", - "scope": 775, - "src": "578:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 757, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "578:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 760, - "name": "to", - "nodeType": "VariableDeclaration", - "scope": 775, - "src": "592:10:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "592:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 762, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 775, - "src": "604:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 761, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "604:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "563:55:9" - }, - "returnParameters": { - "id": 764, - "nodeType": "ParameterList", - "parameters": [], - "src": "628:0:9" - }, - "scope": 874, - "src": "538:151:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 810, - "nodeType": "Block", - "src": "771:353:9", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 785, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 781, - "src": "1007:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 786, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1016:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1007:10:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 788, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1006:12:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 792, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "1047:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - ], - "id": 791, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1039:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 793, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1039:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 794, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 779, - "src": "1054:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 789, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 777, - "src": "1023:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 712, - "src": "1023:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1023:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "hexValue": "30", - "id": 796, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1066:1:9", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1023:44:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 798, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1022:46:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1006:62:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 784, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "998:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 800, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "998:71:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 801, - "nodeType": "ExpressionStatement", - "src": "998:71:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 805, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 779, - "src": "1101:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 806, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 781, - "src": "1110:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 803, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 777, - "src": "1087:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 680, - "src": "1087:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1087:29:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 802, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1079:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1079:38:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 809, - "nodeType": "ExpressionStatement", - "src": "1079:38:9" - } - ] - }, - "documentation": null, - "id": 811, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeApprove", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 782, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 777, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 811, - "src": "716:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 776, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "716:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 779, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 811, - "src": "730:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 778, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "730:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 781, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 811, - "src": "747:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 780, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "747:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "715:46:9" - }, - "returnParameters": { - "id": 783, - "nodeType": "ParameterList", - "parameters": [], - "src": "771:0:9" - }, - "scope": 874, - "src": "695:429:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 841, - "nodeType": "Block", - "src": "1216:145:9", - "statements": [ - { - "assignments": [ - 821 - ], - "declarations": [ - { - "constant": false, - "id": 821, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 841, - "src": "1226:20:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 820, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1226:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 832, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 830, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 817, - "src": "1293:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 825, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "1273:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - ], - "id": 824, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1265:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1265:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 827, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 815, - "src": "1280:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 822, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 813, - "src": "1249:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 712, - "src": "1249:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 639, - "src": "1249:43:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 831, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1249:50:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1226:73:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 836, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 815, - "src": "1331:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 837, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 821, - "src": "1340:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 834, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 813, - "src": "1317:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 680, - "src": "1317:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1317:36:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 833, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1309:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1309:45:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 840, - "nodeType": "ExpressionStatement", - "src": "1309:45:9" - } - ] - }, - "documentation": null, - "id": 842, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeIncreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 818, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 813, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 842, - "src": "1161:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 812, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "1161:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 815, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 842, - "src": "1175:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 814, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1175:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 817, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 842, - "src": "1192:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 816, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1192:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1160:46:9" - }, - "returnParameters": { - "id": 819, - "nodeType": "ParameterList", - "parameters": [], - "src": "1216:0:9" - }, - "scope": 874, - "src": "1130:231:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - }, - { - "body": { - "id": 872, - "nodeType": "Block", - "src": "1453:145:9", - "statements": [ - { - "assignments": [ - 852 - ], - "declarations": [ - { - "constant": false, - "id": 852, - "name": "newAllowance", - "nodeType": "VariableDeclaration", - "scope": 872, - "src": "1463:20:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 851, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1463:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 863, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 861, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 848, - "src": "1530:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 856, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 913, - "src": "1510:4:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$874", - "typeString": "library SafeERC20" - } - ], - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1502:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": "address" - }, - "id": 857, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1502:13:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 858, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 846, - "src": "1517:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": null, - "id": 853, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 844, - "src": "1486:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 712, - "src": "1486:15:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:39:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sub", - "nodeType": "MemberAccess", - "referencedDeclaration": 615, - "src": "1486:43:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1486:50:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1463:73:9" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 867, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 846, - "src": "1568:7:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 868, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 852, - "src": "1577:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 865, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 844, - "src": "1554:5:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "id": 866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 680, - "src": "1554:13:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1554:36:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 864, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 892, - 893 - ], - "referencedDeclaration": 892, - "src": "1546:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1546:45:9", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 871, - "nodeType": "ExpressionStatement", - "src": "1546:45:9" - } - ] - }, - "documentation": null, - "id": 873, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeDecreaseAllowance", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 844, - "name": "token", - "nodeType": "VariableDeclaration", - "scope": 873, - "src": "1398:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - }, - "typeName": { - "contractScope": null, - "id": 843, - "name": "IERC20", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 729, - "src": "1398:6:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$729", - "typeString": "contract IERC20" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 846, - "name": "spender", - "nodeType": "VariableDeclaration", - "scope": 873, - "src": "1412:15:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 845, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1412:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 848, - "name": "value", - "nodeType": "VariableDeclaration", - "scope": 873, - "src": "1429:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 847, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1429:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1397:46:9" - }, - "returnParameters": { - "id": 850, - "nodeType": "ParameterList", - "parameters": [], - "src": "1453:0:9" - }, - "scope": 874, - "src": "1367:231:9", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "internal" - } - ], - "scope": 875, - "src": "352:1248:9" - } - ], - "src": "0:1601:9" - }, - "id": 9 - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.abi b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.abi deleted file mode 100644 index fb2d5f9a9..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.abi +++ /dev/null @@ -1 +0,0 @@ -[{"constant":false,"inputs":[],"name":"terminate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCoreTeam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCoreTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"minerAddress","type":"address"}],"name":"transferToMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"poolType","type":"uint8"},{"name":"tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.bin b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.bin deleted file mode 100644 index 51814af0e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.bin +++ /dev/null @@ -1 +0,0 @@ -608060405234801561001057600080fd5b506040516040806107e88339810180604052604081101561003057600080fd5b5080516020909101516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a03841617905561007f906401000000006100a3810204565b6003805483919060ff19166001838181111561009757fe5b0217905550505061014c565b6100bb6002826401000000006105c76100be82021704565b50565b600160a060020a03811615156100d357600080fd5b6100e68282640100000000610115810204565b156100f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561012c57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068d8061015b6000396000f3fe608060405234801561001057600080fd5b506004361061005a5760e060020a60003504630c08bf88811461005f5780632e6b684914610069578063608d3d3d1461008f578063d43acc79146100c9578063fe4028bb146100d1575b600080fd5b6100676100f7565b005b6100676004803603602081101561007f57600080fd5b5035600160a060020a0316610115565b6100b5600480360360208110156100a557600080fd5b5035600160a060020a0316610135565b604080519115158252519081900360200190f35b610067610150565b610067600480360360208110156100e757600080fd5b5035600160a060020a0316610159565b61010033610135565b151561010b57600080fd5b610113610320565b565b61011e33610135565b151561012957600080fd5b610132816103e6565b50565b600061014860028363ffffffff6103f716565b90505b919050565b6101133361042e565b60005474010000000000000000000000000000000000000000900460ff161561018157600080fd5b61018a33610135565b151561019557600080fd5b600160a060020a03811660009081526004602052604090205460ff16156101bb57600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156101fc57600080fd5b505afa158015610210573d6000803e3d6000fd5b505050506040513d602081101561022657600080fd5b5051151561023357600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561027157600080fd5b505afa158015610285573d6000803e3d6000fd5b505050506040513d602081101561029b57600080fd5b50519050600560ff821611156102b057600080fd5b60006102bb8261043f565b9050600160035460ff1660018111156102d057fe5b14156102e0576064600a82020490505b600160a060020a038085166000908152600460205260409020805460ff191660019081179091555461031a9116858363ffffffff6104f116565b50505050565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561038457600080fd5b505afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b5051905060008111156103de576000546001546103de91600160a060020a0391821691168363ffffffff6104f116565b610132610590565b61013260028263ffffffff6105c716565b6000600160a060020a038216151561040e57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61013260028263ffffffff61061516565b600060ff8216151561045c575069152d02c7e14af680000061014b565b8160ff1660011415610479575069d3c21bcecceda100000061014b565b8160ff166002141561049757506a01a784379d99db4200000061014b565b8160ff16600314156104b557506a027b46536c66c8e300000061014b565b8160ff16600414156104d357506a034f086f3b33b68400000061014b565b8160ff166005141561014b57506a0422ca8b0a00a42500000061014b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561055457600080fd5b505af1158015610568573d6000803e3d6000fd5b505050506040513d602081101561057e57600080fd5b5051151561058b57600080fd5b505050565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a03811615156105dc57600080fd5b6105e682826103f7565b156105f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561062a57600080fd5b61063482826103f7565b151561063f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820da6d23ac8f4b151242d9a9cc936a0d9469d337bb92eddce5cc529e4f80d49b290029 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.json deleted file mode 100644 index c0e18880b..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/bin/AlgoPool.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "abi": [ - { - "constant": false, - "inputs": [], - "name": "terminate", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "addCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "account", - "type": "address" - } - ], - "name": "isCoreTeam", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceCoreTeam", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "minerAddress", - "type": "address" - } - ], - "name": "transferToMiner", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "name": "poolType", - "type": "uint8" - }, - { - "name": "tokenAddress", - "type": "address" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - } - ], - "bytecode": "608060405234801561001057600080fd5b506040516040806107e88339810180604052604081101561003057600080fd5b5080516020909101516000805433600160a060020a0319918216811760a060020a60ff02191690925560018054909116600160a060020a03841617905561007f906401000000006100a3810204565b6003805483919060ff19166001838181111561009757fe5b0217905550505061014c565b6100bb6002826401000000006105c76100be82021704565b50565b600160a060020a03811615156100d357600080fd5b6100e68282640100000000610115810204565b156100f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a038216151561012c57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61068d8061015b6000396000f3fe608060405234801561001057600080fd5b506004361061005a5760e060020a60003504630c08bf88811461005f5780632e6b684914610069578063608d3d3d1461008f578063d43acc79146100c9578063fe4028bb146100d1575b600080fd5b6100676100f7565b005b6100676004803603602081101561007f57600080fd5b5035600160a060020a0316610115565b6100b5600480360360208110156100a557600080fd5b5035600160a060020a0316610135565b604080519115158252519081900360200190f35b610067610150565b610067600480360360208110156100e757600080fd5b5035600160a060020a0316610159565b61010033610135565b151561010b57600080fd5b610113610320565b565b61011e33610135565b151561012957600080fd5b610132816103e6565b50565b600061014860028363ffffffff6103f716565b90505b919050565b6101133361042e565b60005474010000000000000000000000000000000000000000900460ff161561018157600080fd5b61018a33610135565b151561019557600080fd5b600160a060020a03811660009081526004602052604090205460ff16156101bb57600080fd5b600081905080600160a060020a0316631777fb4b6040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156101fc57600080fd5b505afa158015610210573d6000803e3d6000fd5b505050506040513d602081101561022657600080fd5b5051151561023357600080fd5b600081600160a060020a03166380258e476040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561027157600080fd5b505afa158015610285573d6000803e3d6000fd5b505050506040513d602081101561029b57600080fd5b50519050600560ff821611156102b057600080fd5b60006102bb8261043f565b9050600160035460ff1660018111156102d057fe5b14156102e0576064600a82020490505b600160a060020a038085166000908152600460205260409020805460ff191660019081179091555461031a9116858363ffffffff6104f116565b50505050565b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561038457600080fd5b505afa158015610398573d6000803e3d6000fd5b505050506040513d60208110156103ae57600080fd5b5051905060008111156103de576000546001546103de91600160a060020a0391821691168363ffffffff6104f116565b610132610590565b61013260028263ffffffff6105c716565b6000600160a060020a038216151561040e57600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61013260028263ffffffff61061516565b600060ff8216151561045c575069152d02c7e14af680000061014b565b8160ff1660011415610479575069d3c21bcecceda100000061014b565b8160ff166002141561049757506a01a784379d99db4200000061014b565b8160ff16600314156104b557506a027b46536c66c8e300000061014b565b8160ff16600414156104d357506a034f086f3b33b68400000061014b565b8160ff166005141561014b57506a0422ca8b0a00a42500000061014b565b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561055457600080fd5b505af1158015610568573d6000803e3d6000fd5b505050506040513d602081101561057e57600080fd5b5051151561058b57600080fd5b505050565b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600160a060020a03811615156105dc57600080fd5b6105e682826103f7565b156105f057600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561062a57600080fd5b61063482826103f7565b151561063f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff1916905556fea165627a7a72305820da6d23ac8f4b151242d9a9cc936a0d9469d337bb92eddce5cc529e4f80d49b290029", - "functionHashes": { - "addCoreTeam(address)": "2e6b6849", - "isCoreTeam(address)": "608d3d3d", - "renounceCoreTeam()": "d43acc79", - "terminate()": "0c08bf88", - "transferToMiner(address)": "fe4028bb" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "335400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addCoreTeam(address)": "infinite", - "isCoreTeam(address)": "infinite", - "renounceCoreTeam()": "infinite", - "terminate()": "infinite", - "transferToMiner(address)": "infinite" - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package-lock.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package-lock.json deleted file mode 100644 index 18c9528d6..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package-lock.json +++ /dev/null @@ -1,555 +0,0 @@ -{ - "name": "algo-token-distribution", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "command-exists": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", - "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "openzeppelin-solidity": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-2.1.3.tgz", - "integrity": "sha512-Zz595xw6w4ZrNU3JJJTlPd8bHFbHv5OkJlkqsM2i+NBs6CzImoHI3dZ+nmhkfR+p52cGXKmayAGbnfdCum1SMg==" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "solc": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.5.4.tgz", - "integrity": "sha512-Jz3yz2mct0AYzR83/jBgxDqrLXTHhYUg2G2PVJbMMt5Vu+8e3Of1Mn3nvjPw5mh46jrzt8l4fBN7vHqG5ZF0cw==", - "requires": { - "command-exists": "^1.2.8", - "fs-extra": "^0.30.0", - "keccak": "^1.0.2", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33", - "yargs": "^11.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "requires": { - "camelcase": "^4.1.0" - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package.json b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package.json deleted file mode 100644 index e0362baf7..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/src/AdvancedAlgos.AlgoToken.AlgoTokenDistribution/SmartContracts/src/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "algo-token-distribution", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "openzeppelin-solidity": "2.1.3", - "solc": "0.5.4" - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests.csproj b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests.csproj deleted file mode 100644 index df6775c30..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - netcoreapp2.1 - true - latest - false - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoFeesTests.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoFeesTests.cs deleted file mode 100644 index ad3bf61b1..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoFeesTests.cs +++ /dev/null @@ -1,219 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest; -using Nethereum.RPC.Accounts; -using Nethereum.Web3; -using Nethereum.Web3.Accounts; -using Xunit; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests -{ - public class AlgoFeesTests - { - [Fact] - public async Task MinerRegistrationTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Create a fees... - var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await fees1.DeployAsync(token.ContractAddress); - - // Create some miners... - var minerAccounts = new IAccount[3]; - var referralAccounts = new IAccount[3]; - AlgoMiner[] miners = new AlgoMiner[3]; - - for (int i = 0; i < 3; i++) - { - // Create an account for the miner and the referral... - minerAccounts[i] = EthAccountFactory.Create(); - referralAccounts[i] = EthAccountFactory.Create(); - - // Create the miner... - miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miners[i].DeployAsync(0, 2, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress); - } - - // Register a miner... - await fees1.RegisterMinerAsync(miners[0].ContractAddress); - - Assert.Equal(1, await fees1.GetMinerCountAsync()); - Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0)); - - // Remove the only registered miner. - await fees1.UnregisterMinerAsync(miners[0].ContractAddress); - - Assert.Equal(0, await fees1.GetMinerCountAsync()); - - // Register the 3 miners and ensure they are registered... - for (int i = 0; i < 3; i++) - { - await fees1.RegisterMinerAsync(miners[i].ContractAddress); - } - - Assert.Equal(3, await fees1.GetMinerCountAsync()); - - for (int i = 0; i < 3; i++) - { - Assert.Equal(miners[i].ContractAddress, await fees1.GetMinerByIndexAsync(i)); - } - - // Remove the 2nd miner and check... - await fees1.UnregisterMinerAsync(miners[1].ContractAddress); - - Assert.Equal(2, await fees1.GetMinerCountAsync()); - Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0)); - Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1)); - - // Add the removed miner back... - await fees1.RegisterMinerAsync(miners[1].ContractAddress); - - Assert.Equal(3, await fees1.GetMinerCountAsync()); - Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0)); - Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1)); - Assert.Equal(miners[1].ContractAddress, await fees1.GetMinerByIndexAsync(2)); - - // Remove the latest miner... - await fees1.UnregisterMinerAsync(miners[1].ContractAddress); - - Assert.Equal(2, await fees1.GetMinerCountAsync()); - Assert.Equal(miners[0].ContractAddress, await fees1.GetMinerByIndexAsync(0)); - Assert.Equal(miners[2].ContractAddress, await fees1.GetMinerByIndexAsync(1)); - } - - [Fact] - public async Task MineTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var systemAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(systemAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Create a fees... - var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await fees1.DeployAsync(token.ContractAddress); - - // Register the system account... - await fees1.AddSystemAsync(systemAccount.Address); - - // Transfer some tokens to the fees... - await token.TransferAsync(fees1.ContractAddress, 151.Algo()); - - // Create one miner per category... - var minerAccounts = new IAccount[6]; - var referralAccounts = new IAccount[6]; - var miners = new AlgoMiner[6]; - - for (byte i = 0; i <= 5; i++) - { - // Create an account for the miner and the referral... - minerAccounts[i] = EthAccountFactory.Create(); - referralAccounts[i] = EthAccountFactory.Create(); - await EthNetwork.Instance.RefillAsync(minerAccounts[i]); - - // Create the miner as "NonPoolBased" so it can be activated... - miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miners[i].DeployAsync(1, i, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress); - - // Activate the miner... - await miners[i].ActivateMinerAsync(); - - // Start mining... - { - var miner = new AlgoMiner(miners[i].ContractAddress, EthNetwork.Instance.GetWeb3(minerAccounts[i]), EthNetwork.Instance.GasPriceProvider); - await miner.StartMiningAsync(); - } - - // Register a miner... - await fees1.RegisterMinerAsync(miners[i].ContractAddress); - } - - // Mine the fees... - { - var fees = new AlgoFees(fees1.ContractAddress, EthNetwork.Instance.GetWeb3(systemAccount), EthNetwork.Instance.GasPriceProvider); - await fees.MineAsync(); - } - - // Ensure the miners received the payment from the fees... - var balance0 = await token.BalanceOfAsync(minerAccounts[0].Address); - var balance1 = await token.BalanceOfAsync(minerAccounts[1].Address); - var balance2 = await token.BalanceOfAsync(minerAccounts[2].Address); - var balance3 = await token.BalanceOfAsync(minerAccounts[3].Address); - var balance4 = await token.BalanceOfAsync(minerAccounts[4].Address); - var balance5 = await token.BalanceOfAsync(minerAccounts[5].Address); - - Assert.Equal(1.Algo(), balance0); - Assert.Equal(10.Algo(), balance1); - Assert.Equal(20.Algo(), balance2); - Assert.Equal(30.Algo(), balance3); - Assert.Equal(40.Algo(), balance4); - Assert.Equal(50.Algo(), balance5); - } - - [Fact] - public async Task TerminateTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Store the current balance of the token owner... - var tokenOwnerAccountBalance = await token.BalanceOfAsync(tokenOwnerAccount.Address); - - // Create a fees... - var fees1 = new AlgoFees(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await fees1.DeployAsync(token.ContractAddress); - - // Transfer some tokens to the fees... - await token.TransferAsync(fees1.ContractAddress, 100.Algo()); - - // Ensure the receiver got the tokens... - Assert.Equal(100.Algo(), await token.BalanceOfAsync(fees1.ContractAddress)); - - // Terminate the contract. - await fees1.TerminateAsync(); - - // Ensure the contract returned all the tokens... - Assert.Equal(0, await token.BalanceOfAsync(fees1.ContractAddress)); - Assert.Equal(100.Algo(), await token.BalanceOfAsync(coreTeamAccount.Address)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoMinerTests.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoMinerTests.cs deleted file mode 100644 index afd0384f2..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoMinerTests.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest; -using Nethereum.Web3; -using Nethereum.Web3.Accounts; -using Xunit; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests -{ - public class AlgoMinerTests - { - [Fact] - public async Task PoolBasedMinerBasicWorkfloWTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var systemAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - var supervisorAccount = EthAccountFactory.Create(); - var minerAccount = EthAccountFactory.Create(); - var referralAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(systemAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - await EthNetwork.Instance.RefillAsync(supervisorAccount); - await EthNetwork.Instance.RefillAsync(minerAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Create the pools to transfer the proper number of tokens to the miners... - var pool1 = new AlgoPool(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await pool1.DeployAsync(0, token.ContractAddress); - var pool2 = new AlgoPool(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await pool2.DeployAsync(1, token.ContractAddress); - - // Transfer some tokens to the pools... - await token.TransferAsync(pool1.ContractAddress, 100.MAlgo()); - await token.TransferAsync(pool2.ContractAddress, 100.MAlgo()); - - // Create a miner category 2... - var miner1 = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miner1.DeployAsync(0, 2, minerAccount.Address, referralAccount.Address, token.ContractAddress); - - // Add roles to the miner... - await miner1.AddSystemAsync(systemAccount.Address); - await miner1.AddSupervisorAsync(supervisorAccount.Address); - - // Transfer tokens to the miner... - await pool1.TransferToMinerAsync(miner1.ContractAddress); - await pool2.TransferToMinerAsync(miner1.ContractAddress); - - // Ensure the miner received the tokens according to its category 2. - Assert.Equal(2.MAlgo() + 2.MAlgo() * 10 / 100, await token.BalanceOfAsync(miner1.ContractAddress)); - - // Activate the miner... - await miner1.ActivateMinerAsync(); - - // Start mining... - miner1.Bind(EthNetwork.Instance.GetWeb3(minerAccount)); - await miner1.StartMiningAsync(); - - // Mine 5 days... - miner1.Bind(EthNetwork.Instance.GetWeb3(systemAccount)); - - var paymentPerDay = 2.MAlgo() / 2 / 365; - BigInteger expectedMinerBalance = 0; - BigInteger expectedReferralBalance = 0; - - for (int i = 0; i < 5; i++) - { - await miner1.MineAsync(); - expectedMinerBalance += paymentPerDay; - expectedReferralBalance += paymentPerDay * 10 / 100; - - Assert.Equal(expectedMinerBalance, await token.BalanceOfAsync(minerAccount.Address)); - Assert.Equal(expectedReferralBalance, await token.BalanceOfAsync(referralAccount.Address)); - } - - // Pause the miner... - miner1.Bind(EthNetwork.Instance.GetWeb3(supervisorAccount)); - await miner1.PauseMiningAsync(); - - // Try to mine one day... - miner1.Bind(EthNetwork.Instance.GetWeb3(systemAccount)); - await Assert.ThrowsAsync( - () => miner1.MineAsync()); - - // Ensure the balance is not changed... - Assert.Equal(expectedMinerBalance, await token.BalanceOfAsync(minerAccount.Address)); - - // Resume the miner... - miner1.Bind(EthNetwork.Instance.GetWeb3(supervisorAccount)); - await miner1.ResumeMiningAsync(); - - // Mine one day... - miner1.Bind(EthNetwork.Instance.GetWeb3(coreTeamAccount)); - await miner1.MineAsync(); - expectedMinerBalance += paymentPerDay; - expectedReferralBalance += paymentPerDay * 10 / 100; - - Assert.Equal(expectedMinerBalance, await token.BalanceOfAsync(minerAccount.Address)); - Assert.Equal(expectedReferralBalance, await token.BalanceOfAsync(referralAccount.Address)); - } - - [Fact] - public async Task TerminateTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - var minerAccount = EthAccountFactory.Create(); - var referralAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Store the current balance of the token owner... - var tokenOwnerAccountBalance = await token.BalanceOfAsync(tokenOwnerAccount.Address); - - // Create a miner... - var miner1 = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miner1.DeployAsync(0, 2, minerAccount.Address, referralAccount.Address, token.ContractAddress); - - // Transfer some tokens to the miner... - await token.TransferAsync(miner1.ContractAddress, 100.Algo()); - - // Ensure the receiver got the tokens... - Assert.Equal(100.Algo(), await token.BalanceOfAsync(miner1.ContractAddress)); - - // Terminate the contract. - await miner1.TerminateAsync(); - - // Ensure the contract returned all the tokens... - Assert.Equal(0, await token.BalanceOfAsync(miner1.ContractAddress)); - Assert.Equal(100.Algo(), await token.BalanceOfAsync(coreTeamAccount.Address)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoPoolTests.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoPoolTests.cs deleted file mode 100644 index 5268bcc4c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/AlgoPoolTests.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest; -using Nethereum.RPC.Accounts; -using Nethereum.Web3; -using Nethereum.Web3.Accounts; -using Xunit; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests -{ - public class AlgoPoolTests - { - [Fact] - public async Task MinerPoolTransferToMinerTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - var minerAccounts = new IAccount[6]; - var referralAccounts = new IAccount[6]; - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Create a pool... - var pool1 = new AlgoPool(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await pool1.DeployAsync(0, token.ContractAddress); - - // Transfer some tokens to the pool... - await token.TransferAsync(pool1.ContractAddress, 100.MAlgo()); - - // Create miners for each category... - AlgoMiner[] miners = new AlgoMiner[6]; - - for (byte i = 0; i <= 5; i++) - { - // Create an account for the miner and the referral... - minerAccounts[i] = EthAccountFactory.Create(); - referralAccounts[i] = EthAccountFactory.Create(); - - // Create the miner... - miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miners[i].DeployAsync(0, i, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress); - } - - // Transfer tokens from the pool to the miners... - for (int i = 0; i <= 5; i++) - { - await pool1.TransferToMinerAsync(miners[i].ContractAddress); - } - - // Ensure each miner received the proper amount of tokens according its category... - Assert.Equal(100000.Algo(), await token.BalanceOfAsync(miners[0].ContractAddress)); - Assert.Equal(1.MAlgo(), await token.BalanceOfAsync(miners[1].ContractAddress)); - Assert.Equal(2.MAlgo(), await token.BalanceOfAsync(miners[2].ContractAddress)); - Assert.Equal(3.MAlgo(), await token.BalanceOfAsync(miners[3].ContractAddress)); - Assert.Equal(4.MAlgo(), await token.BalanceOfAsync(miners[4].ContractAddress)); - Assert.Equal(5.MAlgo(), await token.BalanceOfAsync(miners[5].ContractAddress)); - } - - [Fact] - public async Task ReferralPoolTransferToMinerTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - var minerAccounts = new IAccount[6]; - var referralAccounts = new IAccount[6]; - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Create a pool... - var pool1 = new AlgoPool(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await pool1.DeployAsync(1, token.ContractAddress); - - // Transfer some tokens to the pool... - await token.TransferAsync(pool1.ContractAddress, 100.MAlgo()); - - // Create miners for each category... - AlgoMiner[] miners = new AlgoMiner[6]; - - for (byte i = 0; i <= 5; i++) - { - // Create an account for the miner and the referral... - minerAccounts[i] = EthAccountFactory.Create(); - referralAccounts[i] = EthAccountFactory.Create(); - - // Create the miner... - miners[i] = new AlgoMiner(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await miners[i].DeployAsync(0, i, minerAccounts[i].Address, referralAccounts[i].Address, token.ContractAddress); - } - - // Transfer tokens from the pool to the miners... - for (int i = 0; i <= 5; i++) - { - await pool1.TransferToMinerAsync(miners[i].ContractAddress); - } - - // Ensure each miner received the proper amount of tokens according its category... - Assert.Equal(100000.Algo() * 10 / 100, await token.BalanceOfAsync(miners[0].ContractAddress)); - Assert.Equal(1.MAlgo() * 10 / 100, await token.BalanceOfAsync(miners[1].ContractAddress)); - Assert.Equal(2.MAlgo() * 10 / 100, await token.BalanceOfAsync(miners[2].ContractAddress)); - Assert.Equal(3.MAlgo() * 10 / 100, await token.BalanceOfAsync(miners[3].ContractAddress)); - Assert.Equal(4.MAlgo() * 10 / 100, await token.BalanceOfAsync(miners[4].ContractAddress)); - Assert.Equal(5.MAlgo() * 10 / 100, await token.BalanceOfAsync(miners[5].ContractAddress)); - } - - [Fact] - public async Task TerminateTest() - { - EthNetwork.UseDefaultTestNet(); - - var prefundedAccount = new Account(EthNetwork.Instance.PrefundedPrivateKey); - - var tokenOwnerAccount = EthAccountFactory.Create(); - var coreTeamAccount = EthAccountFactory.Create(); - - await EthNetwork.Instance.RefillAsync(tokenOwnerAccount); - await EthNetwork.Instance.RefillAsync(coreTeamAccount); - - // Create the ERC20 token... - var token = new AlgoTokenV1(EthNetwork.Instance.GetWeb3(tokenOwnerAccount), EthNetwork.Instance.GasPriceProvider); - await token.DeployAsync(); - - // Store the current balance of the token owner... - var tokenOwnerAccountBalance = await token.BalanceOfAsync(tokenOwnerAccount.Address); - - // Create a pool... - var pool1 = new AlgoPool(EthNetwork.Instance.GetWeb3(coreTeamAccount), EthNetwork.Instance.GasPriceProvider); - await pool1.DeployAsync(0, token.ContractAddress); - - // Transfer some tokens to the pool... - await token.TransferAsync(pool1.ContractAddress, 100.Algo()); - - // Ensure the receiver got the tokens... - Assert.Equal(100.Algo(), await token.BalanceOfAsync(pool1.ContractAddress)); - - // Terminate the contract. - await pool1.TerminateAsync(); - - // Ensure the contract returned all the tokens... - Assert.Equal(0, await token.BalanceOfAsync(pool1.ContractAddress)); - Assert.Equal(100.Algo(), await token.BalanceOfAsync(coreTeamAccount.Address)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/Algorithms/FeesDistributionAlgorithmTests.cs b/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/Algorithms/FeesDistributionAlgorithmTests.cs deleted file mode 100644 index cd4055a37..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-distribution/test/AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests/Algorithms/FeesDistributionAlgorithmTests.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution.Algorithms; -using Xunit; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenDistribution.IntegrationTests.Algorithms -{ - public class FeesDistributionAlgorithmTests - { - [Fact] - public void TestDistributionAlgorithm1() - { - var miners = new long[] { 100, 100, 100, 100, 100, 100 }; - var fees = FeesDistributionAlgorithm.Distribute(151000, miners); - - Assert.Equal(10, fees[0]); - Assert.Equal(100, fees[1]); - Assert.Equal(200, fees[2]); - Assert.Equal(300, fees[3]); - Assert.Equal(400, fees[4]); - Assert.Equal(500, fees[5]); - - Assert.Equal(151000, GetTotalAmount(miners, fees)); - } - - [Fact] - public void TestDistributionAlgorithm2() - { - var miners = new long[] { 100, 100, 0, 100, 100, 100 }; - var fees = FeesDistributionAlgorithm.Distribute(131000, miners); - - Assert.Equal(10, fees[0]); - Assert.Equal(100, fees[1]); - Assert.Equal(0, fees[2]); - Assert.Equal(300, fees[3]); - Assert.Equal(400, fees[4]); - Assert.Equal(500, fees[5]); - - Assert.Equal(131000, GetTotalAmount(miners, fees)); - } - - private static decimal GetTotalAmount(long[] miners, decimal[] fees) - { - decimal totalAmount = 0; - - for (int i = 0; i < 6; i++) - { - totalAmount += miners[i] * fees[i]; - } - - return totalAmount; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/README.md b/Deprecated-Code/IntelliToken/labs/algo-token-playground/README.md deleted file mode 100644 index 0fbef2920..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/README.md +++ /dev/null @@ -1,418 +0,0 @@ -# AlgoToken Playground - -## Building the application - -1. Download and install the netcore 2.1 SDK from -1. Build the application running the proper build script located in the `build` directory (`/labs/algo-token-playground/build`) according to your OS -1. The compiled binaries will be located in the `release/{platform}` directory -1. Once the application is compiled, the generated binaries do not require the netcore SDK to run. All dependencies, including the netcore runtime, are included in the generated directory. - -## Running the application - -* Run the application by executing proper binary file for your OS. The file name is `AdvancedAlgos.AlgoToken.AlgoTokenPlayground` plus the `.exe` extension on Windows. - -## Using the application - -### Environment - -By default the application is configured to run using the following configuration: - -* Eth Network URL: `http://127.0.0.1:8545` -* Gas Price: `20Gwei` - -You can check the configuration by running the command `list-env`. - -* Use the command `set-network ` to change the current network. -* Use the command `set-gasprice ` to change the gas price used for the transactions. The value is expected in Gweis. - -### Using Ganache to emulate a local testnet - -You can emulate a local testnet by installing Ganache in your machine. - -* Download and install the Ganache application from - * Ensure you set the port to 8545, which is the default port for GETH nodes - * Ensure you disable the setting "ERROR ON TRANSACTION FAILURE" to emulate the behavior of the GETH client - * Ensure you disable the setting "LOCK ACCOUNTS" to avoid locking the prefunded accounts -* If you prefer the command line version, you need to install nodejs and then you can use the scripts located in `/labs/tools/ganache-cli-setup` to install and run the application - * The Windows version of the script expect the directory `C:\Temp` to be available for the Ganache DB - * The Linux version of the script expect the directory `ganache-db` to be available in the current directory for the Ganache DB - * You can change the Ganache DB directory by using the `--db` switch - -### Managing accounts - -#### Creating a new account - -Use the `new-account [-n ]` command to create a new account. - -The optional `-n` switch let you set a friendly name for the new account, later can be used as an alias for the account address when is necessary. - ->Example: `new-account -n miner_1_account` - -#### Importing an existing account - -Use the command `import-account [-n ]` to import an existing account. - ->Example: `import-account 0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5 -n prefunded` - -#### Selecting an account for singing transactions - -Before executing any transaction, you need to set the account to be used for signing the transaction. - -Use the `set-account ` command to set the signing account. All subsequent transactions will be signed using this account. - ->Example: `set-account miner_1_account` - -The `new-account` and `import-account` commands will set the current account automatically. - -Notice that the current account name is shown in the command prompt. - -#### Listing the accounts registered in the playground - -The `list-accounts` command shows the list of accounts registered in the Playground. - ->Example: `list-accounts` - -### Ether management - -Before using an account to sing a transaction you need to send some ethers to that account. - -#### Transfer ethers to an account - -Use the `eth-transfer ` command to transfer ethers to an account: -* `to`: the destination account address (or name if the account is registered in the playground) -* `value`: the amount to transfer. By default this value is expected in weis, you can specify the following suffixes to use a different unit: - * `wei`: base unit - * `gwei`: 1000000000 weis - * `ether` or `eth`: 1000000000000000000 weis - * `mether` or `m`: 1000000000000000000000000 weis or 1M eth - ->Example: `eth-transfer miner_1_account 1eth` - -#### Getting the balance of an account - -Use the `eth-getbalance ` command to get the balance of the specified account. - ->Example: `eth-getbalance miner_1_account` - -### Using aliases - -The playground support aliases for account or contract addresses, in every place where an address is expected, the name given to the account or the contract can be used in place. Notice that this is an internal feature of the playground, neither accounts or contracts register this name in Ethereum. - -Some commands allow you to specify an alias, for example when an account is created or when a contract is deployed. - -Usually the `-n ` switch is the standard way to create an alias for an address. If you omit the switch the command will set an alias automatically. - -Valid chars for alias identifiers are any char except reserved chars. - -### Working with contracts - -#### Deploying contracts - -Ensure the current account is set before invoking a transaction (see `set-account` command). - -Every contract provides an specific command to deploy a new instance of the contract, the pattern used by the playground is `deploy-`, followed by the constructor parameters if they are required by the contract. Also the `-n ` switch is avaible to create an alias for the new instance address. - -To list the contracts created during the playground session use the command `list-contracts`. - -#### Invoking a transactional operation - -In order to invoke transactional operations, the pattern used is: - -`. ` - -Where `contract` is the contract address or an alias, the `operation` is the function you are calling, and `` is the list of parameters required by the operation, separated by spaces. - -String type parameters can be enclosed in double quotes, but is not mandatory, unless the string contains a reserved char. - -#### Invoking a call function - -The invoke syntax is the same used for transactional operations, the only difference is that the current account is not used, since the call functions do not need to be signed. - -#### Creating an alias for an contract address - -Use the command `register-contract
` to create an alias for an existing contract address: -* `address`: the address of the contract -* `name`: the alias name for the specified contract address - -## Algo Contracts - -The detailed specification of the following contracts can be found in the "Smart Contracts Requirements / Specifications" document. - -The goal of this document is to describe the commands available in the playground. For the behavior/business rules check the mentioned document. - -### AlgoToken - -AlgoToken is an standard ERC20 token contract. All available functions belong the ERC20 specification. - -The following commands are supported for the `AlgoToken` contract: - -#### deploy-algotoken - -`deploy-algotoken [-n ]` - -Creates a new instance of the `AlgoToken` contract. - ->Example: `deploy-algotoken -n token` - -#### algotoken-transfer - -`.algotoken-transfer ` - -Transfer tokens to the specified address: -* `to`: the destination account address -* `value`: the amount to transfer - -*These parameters follow the same rules listed in the `eth-transfer` command.* - ->Example: `token.algotoken-transfer dev_pool 100m` - -#### algotoken-balanceof - -`.algotoken-balanceof ` - -Get the balance for the specified address: -* `owner`: the account address to check - ->Example: `token.algotoken-balanceof dev_pool` - -#### algotoken-pause - -`.algotoken-pause` - -Pauses the token. All transactions will be suspended. - ->Example: `token.algotoken-pause` - -#### algotoken-unpause - -`.algotoken-unpause` - -Unpauses the token. All transactions will be resumed. - ->Example: `token.algotoken-unpause` - -### AlgoPool - -The following commands are supported for the `AlgoPool` contract: - -#### deploy-algopool - -`deploy-algopool [-n ]` - -Creates a new instance of the `AlgoPool` contract. -* `poolType`: the type of pool (uint8: 0 = MinerPool, 1 = ReferralPool) -* `tokenAddress`: the address of the AlgoToken contract - ->Example: `deploy-algopool 0 token -n dev_pool` - -#### algopool-transfertominer - -`.algopool-transfertominer ` - -Transfer tokens from the AlgoPool balance to the AlgoMiner balance. The amount of tokens to be transfered is determined by the AlgoMiner category (see the specification document). -* `minerAddress`: the address of the AlgoMiner contract - ->Example: `dev_pool.algopool-transfertominer miner_1` - -#### algopool-terminate - -`.algopool-terminate` - -Terminates the contract and return its balance to the creator. - ->Example: `dev_pool.algopool-terminate` - -### AlgoMiner - -The following commands are supported for the `AlgoMiner` contract: - -#### deploy-algominer - -`deploy-algominer [-n ]` - -Creates a new instance of the `AlgoPool` contract. -* `minerType`: the type of miner (uint8: 0 = PoolBased, 1 = NonPoolBased) -* `category`: the category of miner (uint8: valid from 0 to 5) -* `minerAccountAddress`: the address of the miner's owner -* `referralAccountAddress`: the address of the referral -* `tokenAddress`: the address of the AlgoToken contract - ->Example: `deploy-algominer 0 2 miner_1_account referral_1_account token -n miner_1` - -#### algominer-activateminer - -`.algominer-activateminer` - -Activates the miner. - ->Example: `miner_1.algominer-activateminer` - -#### algominer-deactivateminer - -`.algominer-deactivateminer` - -Deactivates the miner. - ->Example: `miner_1.algominer-deactivateminer` - -#### algominer-migrateminer - -`.algominer-migrateminer ` - -Transfer all tokens from this AlgoMiner another AlgoMiner. The miner must be deactivated before running this operation -* `newMinerAddress`: the address of the new AlgoMiner contract - ->Example: `miner_1.algominer-migrateminer miner_2` - -#### algominer-pausemining - -`.algominer-pausemining` - -Pauses the miner. - ->Example: `miner_1.algominer-pausemining` - -#### algominer-resumemining - -`.algominer-resumemining` - -Resumes the miner. - ->Example: `miner_1.algominer-resumemining` - -#### algominer-stopandremoveownership - -`.algominer-stopandremoveownership` - -Sets the miner to the stopped state and remove the ownership, a new owner and referral will be assigned using the `resetMiner` operation. - ->Example: `miner_1.algominer-stopandremoveownership` - -#### algominer-resetminer - -`.algominer-resetminer ` - -Resets the miner. -* `newOwnerAddress`: the address of the new owner -* `newReferralAddress`: the address of the new referral - ->Example: `miner_1.algominer-resetminer` - -#### algominer-startmining - -`.algominer-startmining` - -Starts the miner (used by the owner). - ->Example: `miner_1.algominer-startmining` - -#### algominer-stopmining - -`.algominer-stopmining` - -Stops the miner (used by the owner). - ->Example: `miner_1.algominer-stopmining` - -#### algominer-mine - -`.algominer-mine` - -This operation is executed by the system to request a payment from the AlgoMiner to the owner. The amount to pay is computed using the rules specified in the "Smart Contracts Requirements / Specifications" document. - ->Example: `miner_1.algominer-mine` - -#### algominer-terminate - -`.algominer-terminate` - -Terminates the contract and return its balance to the creator. - ->Example: `miner_1.algominer-terminate` - -#### algominer-addsystem - -`.algominer-addsystem ` - -Adds the specified account to the "System" role. -* `account`: the address of account to be added to the role. - ->Example: `miner_1.algominer-addsystem 0x862f8938949e4A1aA82Cd427d87E4fc76940e7a1` - -#### algominer-addcoreteam - -`.algominer-addcoreteam ` - -Adds the specified account to the "Core Team" role. -* `account`: the address of account to be added to the role. - ->Example: `miner_1.algominer-addcoreteam 0x862f8938949e4A1aA82Cd427d87E4fc76940e7a1` - -#### algominer-addsupervisor - -`.algominer-addsupervisor ` - -Adds the specified account to the "Supervisor" role. -* `account`: the address of account to be added to the role. - ->Example: `miner_1.algominer-addsupervisor 0x862f8938949e4A1aA82Cd427d87E4fc76940e7a1` - -### AlgoFees - -The following commands are supported for the `AlgoFees` contract: - -#### deploy-algofees - -`deploy-algofees [-n ]` - -Creates a new instance of the `AlgoFees` contract. -* `tokenAddress`: the address of the AlgoToken contract - ->Example: `deploy-algofees token -n fees1` - -#### algofees-registerminer - -`.algofees-registerminer ` - -Registers a miner with the AlgoFees. -* `minerAddress`: the address of the AlgoMiner contract - ->Example: `fees1.algofees-registerminer miner_0` - -#### algofees-unregisterminer - -`.algofees-unregisterminer ` - -Unregisters a miner from the AlgoFees. -* `minerAddress`: the address of the AlgoMiner contract - ->Example: `fees1.algofees-unregisterminer miner_0` - -#### algofees-mine - -`.algofees-mine` - -This operation is executed by the system to request a payment from the AlgoFees to registered miners. The amount to pay is computed using the rules specified in the "Smart Contracts Requirements / Specifications" document. - ->Example: `fees1.algofees-mine` - -#### algominer-terminate - -`.algofees-terminate` - -Terminates the contract and return its balance to the creator. - ->Example: `algofees.algofees-terminate` - -### System commands - -#### reset - -Resets the current playground instance, removing all aliases created. - ->Example: `reset` - -### Notes - -* Reserved chars: the following chars are reserved chars and cannot be used in identifiers or strings not enclosed in quotes: "space" ":" "/" "-" "." "," -* Commands, operations and identifiers are case insensitive diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/algofees-script.txt b/Deprecated-Code/IntelliToken/labs/algo-token-playground/algofees-script.txt deleted file mode 100644 index 732121402..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/algofees-script.txt +++ /dev/null @@ -1,61 +0,0 @@ -new-account -n miner_0_account -new-account -n ref_0_account -new-account -n miner_1_account -new-account -n ref_1_account -new-account -n miner_2_account -new-account -n ref_2_account -new-account -n miner_3_account -new-account -n ref_3_account -new-account -n miner_4_account -new-account -n ref_4_account -new-account -n miner_5_account -new-account -n ref_5_account -import-account 0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5 -n prefunded -eth-transfer miner_0_account 1eth -eth-transfer miner_1_account 1eth -eth-transfer miner_2_account 1eth -eth-transfer miner_3_account 1eth -eth-transfer miner_4_account 1eth -eth-transfer miner_5_account 1eth -deploy-algotoken -n token -deploy-algominer 1 0 miner_0_account ref_0_account token -n miner_0 -deploy-algominer 1 1 miner_1_account ref_1_account token -n miner_1 -deploy-algominer 1 2 miner_2_account ref_2_account token -n miner_2 -deploy-algominer 1 3 miner_3_account ref_3_account token -n miner_3 -deploy-algominer 1 4 miner_4_account ref_4_account token -n miner_4 -deploy-algominer 1 5 miner_5_account ref_5_account token -n miner_5 -miner_0.algominer-activateminer -miner_1.algominer-activateminer -miner_2.algominer-activateminer -miner_3.algominer-activateminer -miner_4.algominer-activateminer -miner_5.algominer-activateminer -set-account miner_0_account -miner_0.algominer-startmining -set-account miner_1_account -miner_1.algominer-startmining -set-account miner_2_account -miner_2.algominer-startmining -set-account miner_3_account -miner_3.algominer-startmining -set-account miner_4_account -miner_4.algominer-startmining -set-account miner_5_account -miner_5.algominer-startmining -set-account prefunded -deploy-algofees token -n fees1 -token.algotoken-transfer fees1 151eth -token.algotoken-balanceof fees1 -fees1.algofees-registerminer miner_0 -fees1.algofees-registerminer miner_1 -fees1.algofees-registerminer miner_2 -fees1.algofees-registerminer miner_3 -fees1.algofees-registerminer miner_4 -fees1.algofees-registerminer miner_5 -fees1.algofees-mine -token.algotoken-balanceof miner_0_account -token.algotoken-balanceof miner_1_account -token.algotoken-balanceof miner_2_account -token.algotoken-balanceof miner_3_account -token.algotoken-balanceof miner_4_account -token.algotoken-balanceof miner_5_account diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.cmd b/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.cmd deleted file mode 100644 index 61a0aadc3..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.cmd +++ /dev/null @@ -1 +0,0 @@ -dotnet publish ../src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj -c Release -o ../../build/release/osx-x64 --self-contained -r osx-x64 diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.sh b/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.sh deleted file mode 100644 index 6740e82b0..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-osx-x64.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -dotnet publish ../src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj -c Release -o ../../build/release/osx-x64 --self-contained -r osx-x64 diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.cmd b/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.cmd deleted file mode 100644 index ea75e2ad0..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.cmd +++ /dev/null @@ -1 +0,0 @@ -dotnet publish ../src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj -c Release -o ../../build/release/win-x64 --self-contained -r win-x64 diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.sh b/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.sh deleted file mode 100644 index 1df886e0d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/build/build-win-x64.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -dotnet publish ../src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj -c Release -o ../../build/release/win-x64 --self-contained -r win-x64 diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/pool-based-algominer-script.txt b/Deprecated-Code/IntelliToken/labs/algo-token-playground/pool-based-algominer-script.txt deleted file mode 100644 index 5d4cf358a..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/pool-based-algominer-script.txt +++ /dev/null @@ -1,26 +0,0 @@ -new-account -n miner_1_account -new-account -n ref_1_account -import-account 0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5 -n prefunded -eth-transfer miner_1_account 1eth -eth-getbalance miner_1_account -deploy-algotoken -n token -deploy-algopool 0 token -n dev_pool -deploy-algopool 1 token -n ref_pool -token.algotoken-transfer dev_pool 100m -token.algotoken-transfer ref_pool 100m -token.algotoken-balanceof dev_pool -token.algotoken-balanceof ref_pool -deploy-algominer 0 2 miner_1_account ref_1_account token -n miner_1 -dev_pool.algopool-transfertominer miner_1 -ref_pool.algopool-transfertominer miner_1 -token.algotoken-balanceof miner_1 -miner_1.algominer-activateminer -set-account miner_1_account -miner_1.algominer-startmining -set-account prefunded -miner_1.algominer-mine -token.algotoken-balanceof miner_1_account -token.algotoken-balanceof ref_1_account -miner_1.algominer-mine -token.algotoken-balanceof miner_1_account -token.algotoken-balanceof ref_1_account diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj deleted file mode 100644 index 8b51d428d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/AdvancedAlgos.AlgoToken.AlgoTokenPlayground.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - netcoreapp2.1 - true - latest - - - - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/AccountCounter.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/AccountCounter.cs deleted file mode 100644 index 84c6029b3..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/AccountCounter.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement -{ - public static class AccountCounter - { - private static long _count = 0; - - public static long Next() - { - Interlocked.Increment(ref _count); - return _count; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ImportAccountCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ImportAccountCommand.cs deleted file mode 100644 index afea426bc..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ImportAccountCommand.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Web3.Accounts; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement -{ - public class ImportAccountCommand : ICommand - { - private const string DEFAULT_NAME_FORMAT = "account#{0}"; - - public string Name { get; set; } - public string PrivateKey { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - string name = string.IsNullOrWhiteSpace(Name) ? - string.Format(CultureInfo.InvariantCulture, DEFAULT_NAME_FORMAT, AccountCounter.Next()) : Name; - - if (context.Accounts.ContainsKey(name)) throw new Exception($"The name '{name}' already exists."); - - var ethAccountDescriptor = new EthAccountDescriptor(name, new Account(PrivateKey)); - - context.Accounts.Add(name, ethAccountDescriptor); - context.CurrentAccount = ethAccountDescriptor; - - Console.WriteLine("Account imported:"); - Console.WriteLine($"- Name: '{name}'."); - Console.WriteLine($"- Address: '{ethAccountDescriptor.Account.Address}'."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ListAccountsCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ListAccountsCommand.cs deleted file mode 100644 index 69117feb3..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/ListAccountsCommand.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement -{ - public class ListAccountsCommand : ICommand - { - public Task ExecuteAsync(RuntimeContext context) - { - foreach (var ethAccountDescriptor in context.Accounts.Values) - { - Console.WriteLine($"- {ethAccountDescriptor.Name}:{ethAccountDescriptor.Account.Address}"); - } - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/NewAccountCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/NewAccountCommand.cs deleted file mode 100644 index 82e77351c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/NewAccountCommand.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement -{ - public class NewAccountCommand : ICommand - { - private const string DEFAULT_NAME_FORMAT = "account#{0}"; - - public string Name { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - string name = string.IsNullOrWhiteSpace(Name) ? - string.Format(CultureInfo.InvariantCulture, DEFAULT_NAME_FORMAT, AccountCounter.Next()) : Name; - - if (context.Accounts.ContainsKey(name)) throw new Exception($"The name '{name}' already exists."); - - var ethAccountDescriptor = new EthAccountDescriptor(name, EthAccountFactory.Create()); - - context.Accounts.Add(name, ethAccountDescriptor); - context.CurrentAccount = ethAccountDescriptor; - - Console.WriteLine("New account created:"); - Console.WriteLine($"- Name: '{name}'."); - Console.WriteLine($"- Address: '{ethAccountDescriptor.Account.Address}'."); - Console.WriteLine($"- Private Key: '{ethAccountDescriptor.Account.PrivateKey}'."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/SetAccountCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/SetAccountCommand.cs deleted file mode 100644 index 15c1aac92..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AccountManagement/SetAccountCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement -{ - public class SetAccountCommand : ICommand - { - public string Name { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - if (!context.Accounts.ContainsKey(Name)) throw new Exception($"Account '{Name}' not found."); - - context.CurrentAccount = context.Accounts[Name]; - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesDeployCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesDeployCommand.cs deleted file mode 100644 index 21db54aff..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesDeployCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract -{ - public class AlgoFeesDeployCommand : DeployContractCommand - { - public override string DefaultName => "AlgoFees"; - - public string TokenAddress { get; set; } - - protected override async Task DeployContractAsync(RuntimeContext context, Web3 web3) - { - var algoFees = new AlgoFees(web3, context.GasPriceProvider); - return await algoFees.DeployAsync(context.ResolveContractReference(TokenAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesMineCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesMineCommand.cs deleted file mode 100644 index 27ab17661..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesMineCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract -{ - public class AlgoFeesMineCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider); - - return await algoFees.MineAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesRegisterMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesRegisterMinerCommand.cs deleted file mode 100644 index e7828e3dc..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesRegisterMinerCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract -{ - public class AlgoFeesRegisterMinerCommand : EthInvokeTransactionalFunctionCommand - { - public string MinerAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider); - - return await algoFees.RegisterMinerAsync(context.ResolveContractReference(MinerAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesTerminateCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesTerminateCommand.cs deleted file mode 100644 index c5ae0f464..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesTerminateCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract -{ - public class AlgoFeesTerminateCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider); - - return await algoFees.TerminateAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesUnregisterMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesUnregisterMinerCommand.cs deleted file mode 100644 index 15cfded48..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoFeesContract/AlgoFeesUnregisterMinerCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract -{ - public class AlgoFeesUnregisterMinerCommand : EthInvokeTransactionalFunctionCommand - { - public string MinerAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoFees = new AlgoFees(contractAddress, web3, context.GasPriceProvider); - - return await algoFees.UnregisterMinerAsync(context.ResolveContractReference(MinerAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerActivateMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerActivateMinerCommand.cs deleted file mode 100644 index d5f40545d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerActivateMinerCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerActivateMinerCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.ActivateMinerAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddCoreTeamCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddCoreTeamCommand.cs deleted file mode 100644 index 741a9b40d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddCoreTeamCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerAddCoreTeamCommand : EthInvokeTransactionalFunctionCommand - { - public string Account { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.AddCoreTeamAsync(context.ResolveAccountReference(Account)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSupervisorCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSupervisorCommand.cs deleted file mode 100644 index 6b28c00dd..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSupervisorCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerAddSupervisorCommand : EthInvokeTransactionalFunctionCommand - { - public string Account { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.AddSupervisorAsync(context.ResolveAccountReference(Account)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSystemCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSystemCommand.cs deleted file mode 100644 index dd47486cf..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerAddSystemCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerAddSystemCommand : EthInvokeTransactionalFunctionCommand - { - public string Account { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.AddSystemAsync(context.ResolveAccountReference(Account)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeactivateMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeactivateMinerCommand.cs deleted file mode 100644 index 82ab1672b..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeactivateMinerCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerDeactivateMinerCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.DeactivateMinerAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeployCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeployCommand.cs deleted file mode 100644 index 41f9df66f..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerDeployCommand.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerDeployCommand : DeployContractCommand - { - public override string DefaultName => "AlgoMiner"; - - public byte MinerType { get; set; } - public byte Category { get; set; } - public string MinerAccountAddress { get; set; } - public string ReferralAccountAddress { get; set; } - public string TokenAddress { get; set; } - - protected override async Task DeployContractAsync(RuntimeContext context, Web3 web3) - { - var algoMiner = new AlgoMiner(web3, context.GasPriceProvider); - return await algoMiner.DeployAsync( - MinerType, - Category, - context.ResolveAccountReference(MinerAccountAddress), - context.ResolveAccountReference(ReferralAccountAddress), - context.ResolveContractReference(TokenAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMigrateMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMigrateMinerCommand.cs deleted file mode 100644 index 42444cbf7..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMigrateMinerCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerMigrateMinerCommand : EthInvokeTransactionalFunctionCommand - { - public string NewMinerAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.MigrateMinerAsync(context.ResolveContractReference(NewMinerAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMineCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMineCommand.cs deleted file mode 100644 index acd35e621..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerMineCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerMineCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.MineAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerPauseMiningCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerPauseMiningCommand.cs deleted file mode 100644 index ee163137d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerPauseMiningCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerPauseMiningCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.PauseMiningAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResetMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResetMinerCommand.cs deleted file mode 100644 index 5faa0df01..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResetMinerCommand.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerResetMinerCommand : EthInvokeTransactionalFunctionCommand - { - public string NewOwnerAddress { get; set; } - public string NewReferralAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.ResetMinerAsync( - context.ResolveAccountReference(NewOwnerAddress), - context.ResolveAccountReference(NewReferralAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResumeMiningCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResumeMiningCommand.cs deleted file mode 100644 index 82e2b5b79..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerResumeMiningCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerResumeMiningCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.ResumeMiningAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStartMiningCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStartMiningCommand.cs deleted file mode 100644 index eca781a6c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStartMiningCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerStartMiningCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.StartMiningAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopAndRemoveOwnershipCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopAndRemoveOwnershipCommand.cs deleted file mode 100644 index 496213588..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopAndRemoveOwnershipCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerStopAndRemoveOwnershipCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.StopAndRemoveOwnershipAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopMiningCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopMiningCommand.cs deleted file mode 100644 index 8ce66f982..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerStopMiningCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerStopMiningCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.StopMiningAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerTerminateCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerTerminateCommand.cs deleted file mode 100644 index b1efd4602..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoMinerContract/AlgoMinerTerminateCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract -{ - public class AlgoMinerTerminateCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoMiner = new AlgoMiner(contractAddress, web3, context.GasPriceProvider); - - return await algoMiner.TerminateAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolDeployCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolDeployCommand.cs deleted file mode 100644 index ed6732c6d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolDeployCommand.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoPoolContract -{ - public class AlgoPoolDeployCommand : DeployContractCommand - { - public override string DefaultName => "AlgoPool"; - - public byte PoolType { get; set; } - public string TokenAddress { get; set; } - - protected override async Task DeployContractAsync(RuntimeContext context, Web3 web3) - { - var algoPool = new AlgoPool(web3, context.GasPriceProvider); - return await algoPool.DeployAsync(PoolType, context.ResolveContractReference(TokenAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTerminateCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTerminateCommand.cs deleted file mode 100644 index c75efbd37..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTerminateCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoPoolContract -{ - public class AlgoPoolTerminateCommand : EthInvokeTransactionalFunctionCommand - { - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoPool = new AlgoPool(contractAddress, web3, context.GasPriceProvider); - - return await algoPool.TerminateAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTransferToMinerCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTransferToMinerCommand.cs deleted file mode 100644 index 0fab1e522..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoPoolContract/AlgoPoolTransferToMinerCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenDistribution; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoPoolContract -{ - public class AlgoPoolTransferToMinerCommand : EthInvokeTransactionalFunctionCommand - { - public string MinerAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoPool = new AlgoPool(contractAddress, web3, context.GasPriceProvider); - - return await algoPool.TransferToMinerAsync(context.ResolveContractReference(MinerAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenBalanceOfCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenBalanceOfCommand.cs deleted file mode 100644 index 5a55db87d..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenBalanceOfCommand.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract -{ - public class AlgoTokenBalanceOfCommand : EthInvokeCallFunctionCommand - { - public string OwnerAddress { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoToken = new AlgoTokenV1(contractAddress, web3, context.GasPriceProvider); - return await algoToken.BalanceOfAsync(context.ResolveAccountOrContractReference(OwnerAddress)); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenDeployCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenDeployCommand.cs deleted file mode 100644 index eec93f058..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenDeployCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract -{ - public class AlgoTokenDeployCommand : DeployContractCommand - { - public override string DefaultName => "AlgoToken"; - - protected override async Task DeployContractAsync(RuntimeContext context, Web3 web3) - { - var algoToken = new AlgoTokenV1(web3, context.GasPriceProvider); - return await algoToken.DeployAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenPauseCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenPauseCommand.cs deleted file mode 100644 index 3455188c2..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenPauseCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract -{ - public class AlgoTokenPauseCommand : EthInvokeTransactionalFunctionCommand - { - protected override Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoToken = new AlgoTokenV1(contractAddress, web3, context.GasPriceProvider); - return algoToken.PauseAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenTransferCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenTransferCommand.cs deleted file mode 100644 index 6f3bf36e5..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenTransferCommand.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract -{ - public class AlgoTokenTransferCommand : EthInvokeTransactionalFunctionCommand - { - public string To { get; set; } - public BigInteger Value { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoToken = new AlgoTokenV1(contractAddress, web3, context.GasPriceProvider); - return await algoToken.TransferAsync(context.ResolveAccountOrContractReference(To), Value); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenUnpauseCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenUnpauseCommand.cs deleted file mode 100644 index 555f6175e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/AlgoTokenContract/AlgoTokenUnpauseCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract -{ - public class AlgoTokenUnpauseCommand : EthInvokeTransactionalFunctionCommand - { - protected override Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3) - { - var algoToken = new AlgoTokenV1(contractAddress, web3, context.GasPriceProvider); - return algoToken.UnpauseAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ContractCounter.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ContractCounter.cs deleted file mode 100644 index b6f673697..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ContractCounter.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public static class ContractCounter - { - private static long _count = 0; - - public static long Next() - { - Interlocked.Increment(ref _count); - return _count; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/DeployContractCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/DeployContractCommand.cs deleted file mode 100644 index 1be07c16a..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/DeployContractCommand.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public abstract class DeployContractCommand : EthTransactionalCommand - { - private const string DEFAULT_NAME_FORMAT = "{0}#{1}"; - - public string Name { get; set; } - - public abstract string DefaultName { get; } - - protected abstract Task DeployContractAsync(RuntimeContext context, Web3 web3); - - protected override async Task ExecuteAsync(RuntimeContext context, Web3 web3) - { - string name = string.IsNullOrWhiteSpace(Name) ? - string.Format(CultureInfo.InvariantCulture, DEFAULT_NAME_FORMAT, DefaultName, ContractCounter.Next()) : Name; - - if (context.Contracts.ContainsKey(name)) throw new Exception($"The name '{name}' already exists."); - - try - { - var transactionReceipt = await DeployContractAsync(context, web3); - - if (transactionReceipt == null) return null; - - context.Contracts.Add(name, new EthContractDescriptor(name, transactionReceipt.ContractAddress)); - - Console.WriteLine("Contract successfully deployed."); - Console.WriteLine($"- Contract Name: '{name}'."); - Console.WriteLine($"- Contract Address: '{transactionReceipt.ContractAddress}'."); - - return transactionReceipt; - } - catch - { - Console.WriteLine("Failed to deploy the contract."); - throw; - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeCallFunctionCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeCallFunctionCommand.cs deleted file mode 100644 index 619b14161..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeCallFunctionCommand.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public abstract class EthInvokeCallFunctionCommand : ICommand - { - public string ContractReference { get; set; } - - public async Task ExecuteAsync(RuntimeContext context) - { - var web3 = new Web3(context.EthNetworkUrl); - - try - { - var result = await ExecuteAsync(context, context.ResolveContractReference(ContractReference), web3); - - Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "- Result: {0}.", result)); - } - catch - { - Console.WriteLine("Failed to execute the call."); - throw; - } - } - - protected abstract Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeTransactionalFunctionCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeTransactionalFunctionCommand.cs deleted file mode 100644 index 94d4cc2fb..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/EthInvokeTransactionalFunctionCommand.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public abstract class EthInvokeTransactionalFunctionCommand : EthTransactionalCommand - { - public string ContractReference { get; set; } - - protected abstract Task ExecuteAsync(RuntimeContext context, string contractAddress, Web3 web3); - - protected override async Task ExecuteAsync(RuntimeContext context, Web3 web3) - { - try - { - var transactionReceipt = await ExecuteAsync(context, context.ResolveContractReference(ContractReference), web3); - - Console.WriteLine("Function successfully executed."); - - return transactionReceipt; - } - catch - { - Console.WriteLine("Failed to execute the transaction."); - throw; - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ListContractsCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ListContractsCommand.cs deleted file mode 100644 index 28f1a6cda..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/ListContractsCommand.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public class ListContractsCommand : ICommand - { - public Task ExecuteAsync(RuntimeContext context) - { - foreach (var ethContractDescriptor in context.Contracts.Values) - { - Console.WriteLine($"- {ethContractDescriptor.Name}:{ethContractDescriptor.ContractAddress}"); - } - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/RegisterContractCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/RegisterContractCommand.cs deleted file mode 100644 index 00868c667..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ContractManagement/RegisterContractCommand.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement -{ - public class RegisterContractCommand : ICommand - { - public string Name { get; set; } - public string Address { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - if (context.Contracts.ContainsKey(Name)) throw new Exception($"The name '{Name}' already exists."); - if (!EthAddressParser.ValidateAddress(Address)) throw new Exception($"The address '{Address}' is invalid."); - - context.Contracts.Add(Name, new EthContractDescriptor(Name, Address)); - - Console.WriteLine($"Contract at '{Address}' registered as '{Name}'."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetGasPriceCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetGasPriceCommand.cs deleted file mode 100644 index e99b7344c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetGasPriceCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthNetwork -{ - public class SetGasPriceCommand : ICommand - { - public BigInteger GasPrice { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - context.GasPriceProvider.SetGasPrice(GasPrice); - - Console.WriteLine($"Gas Price set to {GasPrice}Gwei."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetNetworkCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetNetworkCommand.cs deleted file mode 100644 index 0af43225e..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthNetwork/SetNetworkCommand.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthNetwork -{ - public class SetNetworkCommand : ICommand - { - public string NetworkUrl { get; set; } - - public Task ExecuteAsync(RuntimeContext context) - { - if (string.Equals(NetworkUrl, RuntimeContext.LOCAL_NETWORK_ID, StringComparison.OrdinalIgnoreCase)) - { - NetworkUrl = RuntimeContext.LOCAL_NETWORK_URL; - } - - context.EthNetworkUrl = NetworkUrl; - - Console.WriteLine($"Network set to '{NetworkUrl}'."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthGetBalanceCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthGetBalanceCommand.cs deleted file mode 100644 index e5d34de99..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthGetBalanceCommand.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.Hex.HexTypes; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions -{ - public class EthGetBalanceCommand : ICommand - { - public string Account { get; set; } - - public async Task ExecuteAsync(RuntimeContext context) - { - var web3 = new Web3(context.EthNetworkUrl); - - try - { - var balance = await web3.Eth.GetBalance.SendRequestAsync(context.ResolveAccountOrContractReference(Account)); - - Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "- Balance: {0}.", balance.Value)); - } - catch - { - Console.WriteLine("Failed to get balance."); - throw; - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransactionalCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransactionalCommand.cs deleted file mode 100644 index 82448ae11..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransactionalCommand.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions -{ - public abstract class EthTransactionalCommand : ICommand - { - public async Task ExecuteAsync(RuntimeContext context) - { - if (context.CurrentAccount == null) throw new Exception("Current account is not set."); - - var web3 = new Web3(context.CurrentAccount.Account, context.EthNetworkUrl); - - var transactionReceipt = await ExecuteAsync(context, web3); - - if (transactionReceipt != null) - { - Console.WriteLine($"- Gas used: {transactionReceipt.GasUsed.Value}."); - } - } - - protected abstract Task ExecuteAsync(RuntimeContext context, Web3 web3); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransferCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransferCommand.cs deleted file mode 100644 index 5f13855f5..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/EthTransactions/EthTransferCommand.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoErc20Token; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Nethereum.Hex.HexTypes; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions -{ - public class EthTransferCommand : EthTransactionalCommand - { - public string To { get; set; } - public BigInteger Value { get; set; } - - protected override async Task ExecuteAsync(RuntimeContext context, Web3 web3) - { - return await web3.TransactionManager.TransactionReceiptService.SendRequestAndWaitForReceiptAsync(() => - web3.TransactionManager.SendTransactionAsync( - context.CurrentAccount.Account.Address, - context.ResolveAccountOrContractReference(To), - new HexBigInteger(Value))); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ICommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ICommand.cs deleted file mode 100644 index 38151aa46..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/ICommand.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands -{ - public interface ICommand - { - Task ExecuteAsync(RuntimeContext context); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ListEnvironmentCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ListEnvironmentCommand.cs deleted file mode 100644 index c63db111f..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ListEnvironmentCommand.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Util; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.System -{ - public class ListEnvironmentCommand : ICommand - { - public Task ExecuteAsync(RuntimeContext context) - { - Console.WriteLine($"- Network Url: '{context.EthNetworkUrl}'."); - Console.WriteLine($"- Gas Price: {UnitConversion.Convert.FromWei(context.GasPriceProvider.GetGasPrice(), UnitConversion.EthUnit.Gwei)}Gwei."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ResetCommand.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ResetCommand.cs deleted file mode 100644 index 1c3722ec1..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Commands/System/ResetCommand.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Util; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.System -{ - public class ResetCommand : ICommand - { - public Task ExecuteAsync(RuntimeContext context) - { - context.Reset(); - - Console.WriteLine("Done."); - - return Task.CompletedTask; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AccountManagementParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AccountManagementParsers.cs deleted file mode 100644 index 7f3d003d2..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AccountManagementParsers.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AccountManagement; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class AccountManagementParsers - { - public static void Register() - { - (from command in CommonParsers.Token("new-account") - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new NewAccountCommand - { - Name = name.GetOrDefault() - }).Register(); - - (from command in CommonParsers.Token("import-account") - from privateKey in CommonParsers.StringValue - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new ImportAccountCommand - { - Name = name.GetOrDefault(), - PrivateKey = privateKey - }).Register(); - - (from command in CommonParsers.Token("list-accounts") - select new ListAccountsCommand() - ).Register(); - - (from command in CommonParsers.Token("set-account") - from name in CommonParsers.Identifier - select new SetAccountCommand - { - Name = name - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoFeesParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoFeesParsers.cs deleted file mode 100644 index 937a68fa4..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoFeesParsers.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoFeesContract; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class AlgoFeesParsers - { - public static void Register() - { - (from command in CommonParsers.Token("deploy-algofees") - from tokenAddress in CommonParsers.StringValue - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new AlgoFeesDeployCommand - { - Name = name.GetOrDefault(), - TokenAddress = tokenAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algofees-registerminer") - from minerAddress in CommonParsers.StringValue - select new AlgoFeesRegisterMinerCommand - { - ContractReference = contractReference, - MinerAddress = minerAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algofees-unregisterminer") - from minerAddress in CommonParsers.StringValue - select new AlgoFeesUnregisterMinerCommand - { - ContractReference = contractReference, - MinerAddress = minerAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algofees-mine") - select new AlgoFeesMineCommand - { - ContractReference = contractReference - }).Register(); - - (from contractReference in CommonParsers.Invoke("algofees-terminate") - select new AlgoFeesTerminateCommand - { - ContractReference = contractReference - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoMinerParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoMinerParsers.cs deleted file mode 100644 index 582d714a8..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoMinerParsers.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoMinerContract; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class AlgoMinerParsers - { - public static void Register() - { - (from command in CommonParsers.Token("deploy-algominer") - from minerType in CommonParsers.ByteValue - from category in CommonParsers.ByteValue - from minerAccountAddress in CommonParsers.StringValue - from referralAccountAddress in CommonParsers.StringValue - from tokenAddress in CommonParsers.StringValue - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new AlgoMinerDeployCommand - { - Name = name.GetOrDefault(), - MinerType = minerType, - Category = category, - MinerAccountAddress = minerAccountAddress, - ReferralAccountAddress = referralAccountAddress, - TokenAddress = tokenAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-activateminer") - select new AlgoMinerActivateMinerCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-deactivateminer") - select new AlgoMinerDeactivateMinerCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-migrateminer") - from newMinerAddress in CommonParsers.StringValue - select new AlgoMinerMigrateMinerCommand - { - ContractReference = contractReference, - NewMinerAddress = newMinerAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-pausemining") - select new AlgoMinerPauseMiningCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-resumemining") - select new AlgoMinerResumeMiningCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-stopandremoveownership") - select new AlgoMinerStopAndRemoveOwnershipCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-resetminer") - from newOwnerAddress in CommonParsers.StringValue - from newReferralAddress in CommonParsers.StringValue - select new AlgoMinerResetMinerCommand - { - ContractReference = contractReference, - NewOwnerAddress = newOwnerAddress, - NewReferralAddress = newReferralAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-startmining") - select new AlgoMinerStartMiningCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-stopmining") - select new AlgoMinerStopMiningCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-mine") - select new AlgoMinerMineCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-terminate") - select new AlgoMinerTerminateCommand - { - ContractReference = contractReference - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-addsystem") - from account in CommonParsers.StringValue - select new AlgoMinerAddSystemCommand - { - ContractReference = contractReference, - Account = account - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-addcoreteam") - from account in CommonParsers.StringValue - select new AlgoMinerAddCoreTeamCommand - { - ContractReference = contractReference, - Account = account - }).Register(); - - (from contractReference in CommonParsers.Invoke("algominer-addsupervisor") - from account in CommonParsers.StringValue - select new AlgoMinerAddSupervisorCommand - { - ContractReference = contractReference, - Account = account - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoPoolParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoPoolParsers.cs deleted file mode 100644 index 5d933ef4a..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoPoolParsers.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoPoolContract; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class AlgoPoolParsers - { - public static void Register() - { - (from command in CommonParsers.Token("deploy-algopool") - from poolType in CommonParsers.ByteValue - from tokenAddress in CommonParsers.StringValue - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new AlgoPoolDeployCommand - { - Name = name.GetOrDefault(), - PoolType = poolType, - TokenAddress = tokenAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algopool-transfertominer") - from minerAddress in CommonParsers.StringValue - select new AlgoPoolTransferToMinerCommand - { - ContractReference = contractReference, - MinerAddress = minerAddress - }).Register(); - - (from contractReference in CommonParsers.Invoke("algopool-terminate") - select new AlgoPoolTerminateCommand - { - ContractReference = contractReference - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoTokenParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoTokenParsers.cs deleted file mode 100644 index 1e0592995..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/AlgoTokenParsers.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.AlgoTokenContract; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class AlgoTokenParsers - { - public static void Register() - { - (from command in CommonParsers.Token("deploy-algotoken") - from name in CommonParsers.Switch('n', "name", CommonParsers.Identifier).Optional() - select new AlgoTokenDeployCommand - { - Name = name.GetOrDefault() - }).Register(); - - (from contractReference in CommonParsers.Invoke("algotoken-transfer") - from to in CommonParsers.StringValue - from value in EthUnitParsers.EthValue - select new AlgoTokenTransferCommand - { - ContractReference = contractReference, - To = to, - Value = value - }).Register(); - - (from contractReference in CommonParsers.Invoke("algotoken-balanceof") - from owner in CommonParsers.StringValue - select new AlgoTokenBalanceOfCommand - { - ContractReference = contractReference, - OwnerAddress = owner - }).Register(); - - (from contractReference in CommonParsers.Invoke("algotoken-pause") - select new AlgoTokenPauseCommand - { - ContractReference = contractReference, - }).Register(); - - (from contractReference in CommonParsers.Invoke("algotoken-unpause") - select new AlgoTokenUnpauseCommand - { - ContractReference = contractReference, - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/CommonParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/CommonParsers.cs deleted file mode 100644 index 5ee66ae6c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/CommonParsers.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Numerics; -using System.Text; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class CommonParsers - { - public static readonly Parser ReservedChar = - Parse.Char(' ').XOr(Parse.Char(':')).XOr(Parse.Char('/')).XOr(Parse.Char('-')).XOr(Parse.Char('.')).XOr(Parse.Char(',')); - - public static readonly Parser Integer = - Parse.Digit.AtLeastOnce().Text().Token(); - - public static readonly Parser> String = - Parse.AnyChar.Except(ReservedChar).AtLeastOnce().Text(); - - public static readonly Parser> QuotedString = - from open in Parse.Char('"') - from content in Parse.CharExcept('"').Many().Text() - from close in Parse.Char('"') - select content; - - public static readonly Parser ByteValue = - Integer.Select(x => byte.Parse(x, CultureInfo.InvariantCulture)); - - public static readonly Parser IntegerValue = - Integer.Select(x => int.Parse(x, CultureInfo.InvariantCulture)); - - public static readonly Parser BigIntegerValue = - Integer.Select(x => BigInteger.Parse(x, CultureInfo.InvariantCulture)); - - public static readonly Parser DecimalValue = - Parse.DecimalInvariant.Token().Select(x => decimal.Parse(x, CultureInfo.InvariantCulture)); - - public static readonly Parser StringValue = - QuotedString.XOr(String).Text().Token(); - - public static readonly Parser Identifier = - Parse.AnyChar.Except(ReservedChar).AtLeastOnce().Text().Token(); - - public static Parser Token(string name) - => Parse.IgnoreCase(name).Text().Token().Select(_ => true); - - public static Parser Switch(char shortName, string longName) - => (from switchIdentifier in ShortSwitch(shortName).Or(LongSwitch(longName)) - select true).Token(); - - public static Parser Switch(char shortName, string longName, Parser valueParser) - => (from switchIdentifier in ShortSwitch(shortName).Or(LongSwitch(longName)) - from separator in Parse.Char(' ').XOr(Parse.Char(':')).Optional() - from value in valueParser - select value).Token(); - - public static Parser> List(Parser itemParser) - => itemParser.DelimitedBy(Parse.Char(',')).Token(); - - public static Parser EnumValue() where T : struct - => StringValue.Select(x => Enum.Parse(x, true)); - - public static Parser ShortSwitch(char shortName) - => from prefix in Parse.Char('/').XOr(Parse.Char('-')) - from switchIdentifier in Parse.IgnoreCase(shortName) - select true; - - public static Parser LongSwitch(string longName) - => from prefix in Parse.String("--") - from switchIdentifier in Parse.IgnoreCase(longName) - select true; - - public static Parser Invoke(string functionName) - => from target in Identifier - from separator in Parse.Char('.') - from _ in Token(functionName) - select target; - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ContractManagementParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ContractManagementParsers.cs deleted file mode 100644 index aa2ee6f90..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ContractManagementParsers.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.ContractManagement; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class ContractManagementParsers - { - public static void Register() - { - (from command in CommonParsers.Token("register-contract") - from address in CommonParsers.StringValue - from name in CommonParsers.StringValue - select new RegisterContractCommand - { - Name = name, - Address = address - }).Register(); - - (from command in CommonParsers.Token("list-contracts") - select new ListContractsCommand() - ).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthNetworkParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthNetworkParsers.cs deleted file mode 100644 index 3021a0fd9..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthNetworkParsers.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthNetwork; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class EthNetworkParsers - { - public static void Register() - { - (from command in CommonParsers.Token("set-network") - from networkUrl in CommonParsers.StringValue - select new SetNetworkCommand - { - NetworkUrl = networkUrl - }).Register(); - - (from command in CommonParsers.Token("set-gasprice") - from gasPrice in CommonParsers.BigIntegerValue - select new SetGasPriceCommand - { - GasPrice = gasPrice - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthTransactionsParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthTransactionsParsers.cs deleted file mode 100644 index d80c6f41a..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthTransactionsParsers.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.EthTransactions; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class EthTransactionsParsers - { - public static void Register() - { - (from command in CommonParsers.Token("eth-transfer") - from to in CommonParsers.StringValue - from value in EthUnitParsers.EthValue - select new EthTransferCommand - { - To = to, - Value = value - }).Register(); - - (from command in CommonParsers.Token("eth-getbalance") - from account in CommonParsers.StringValue - select new EthGetBalanceCommand - { - Account = account - }).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthUnitParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthUnitParsers.cs deleted file mode 100644 index 1a415186b..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/EthUnitParsers.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using Nethereum.Util; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class EthUnitParsers - { - public static readonly Parser EthValue = - EthUnit("wei") - .Or(EthUnit("gwei")) - .Or(EthUnit("eth")) - .Or(EthUnit("ether")) - .Or(EthUnit("m")) - .Or(EthUnit("mether")) - .Or(CommonParsers.BigIntegerValue); - - public static Parser EthUnit(string unitName) - => from value in CommonParsers.BigIntegerValue - from unit in Parse.IgnoreCase(unitName).Text() - select Convert(value, unit); - - private static BigInteger Convert(BigInteger value, string unitName) - { - switch (unitName.ToLowerInvariant()) - { - case "wei": - return value; - case "gwei": - return UnitConversion.Convert.ToWei(value, UnitConversion.EthUnit.Gwei); - case "eth": - case "ether": - return UnitConversion.Convert.ToWei(value, UnitConversion.EthUnit.Ether); - case "m": - case "mether": - return UnitConversion.Convert.ToWei(value, UnitConversion.EthUnit.Mether); - } - - throw new Exception("Invalid unit."); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ParserExtensions.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ParserExtensions.cs deleted file mode 100644 index 5344846f1..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/ParserExtensions.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class ParserExtensions - { - public static void Register(this Parser parser) - => REPL.Instance.RegisterParser(parser); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/SystemParsers.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/SystemParsers.cs deleted file mode 100644 index 72f6bfb8c..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Parsers/SystemParsers.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands.System; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers -{ - public static class SystemParsers - { - public static void Register() - { - (from command in CommonParsers.Token("reset") - select new ResetCommand() - ).Register(); - - (from command in CommonParsers.Token("list-env") - select new ListEnvironmentCommand() - ).Register(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Program.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Program.cs deleted file mode 100644 index 21bf29707..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Program.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Threading.Tasks; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground -{ - public static class Program - { - public static async Task Main(string[] args) - { - await REPL.Instance.RunAsync(); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/REPL.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/REPL.cs deleted file mode 100644 index a4f253be0..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/REPL.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Commands; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Parsers; -using AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime; -using Sprache; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground -{ - public class REPL - { - public static readonly REPL Instance = new REPL(); - - private readonly List> _parsers = new List>(); - private readonly RuntimeContext _context = new RuntimeContext(); - - static REPL() - { - SystemParsers.Register(); - EthNetworkParsers.Register(); - EthTransactionsParsers.Register(); - AccountManagementParsers.Register(); - ContractManagementParsers.Register(); - AlgoTokenParsers.Register(); - AlgoPoolParsers.Register(); - AlgoFeesParsers.Register(); - AlgoMinerParsers.Register(); - } - - private REPL() { } - - public void RegisterParser(Parser parser) => _parsers.Add(parser); - - public async Task RunAsync() - { - Console.WriteLine("Ready."); - - do - { - PrintPrompt(); - } while (await ProcessAsync(Console.ReadLine())); - } - - private void PrintPrompt() - { - var prompt = new StringBuilder(); - - if (_context.CurrentAccount != null) - { - prompt.Append(_context.CurrentAccount.Name); - } - - prompt.Append(">"); - - Console.Write(prompt.ToString()); - } - - private async Task ProcessAsync(string commandLine) - { - if (string.IsNullOrWhiteSpace(commandLine)) return true; - - if (commandLine.Equals("cls", StringComparison.OrdinalIgnoreCase) || - commandLine.Equals("clear", StringComparison.OrdinalIgnoreCase)) - { - Console.Clear(); - return true; - } - - if (commandLine.Equals("exit", StringComparison.OrdinalIgnoreCase) || - commandLine.Equals("quit", StringComparison.OrdinalIgnoreCase)) return false; - - foreach (var parser in _parsers) - { - var result = parser.TryParse(commandLine); - - if (!result.WasSuccessful) continue; - - try - { - await result.Value.ExecuteAsync(_context); - } - catch (Exception ex) - { - Console.WriteLine(ex.Message); - } - - return true; - } - - Console.WriteLine("Syntax error."); - - return true; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthAccountDescriptor.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthAccountDescriptor.cs deleted file mode 100644 index 7bb921916..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthAccountDescriptor.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.Web3.Accounts; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime -{ - public class EthAccountDescriptor - { - public EthAccountDescriptor(string name, Account account) - { - Name = name ?? throw new ArgumentNullException(nameof(name)); - Account = account ?? throw new ArgumentNullException(nameof(account)); - } - - public string Name { get; set; } - public Account Account { get; set; } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthContractDescriptor.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthContractDescriptor.cs deleted file mode 100644 index 439f9eb01..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/EthContractDescriptor.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.Web3.Accounts; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime -{ - public class EthContractDescriptor - { - public EthContractDescriptor(string name, string contractAddress) - { - Name = name ?? throw new ArgumentNullException(nameof(name)); - ContractAddress = contractAddress ?? throw new ArgumentNullException(nameof(contractAddress)); - } - - public string Name { get; set; } - public string ContractAddress { get; set; } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/RuntimeContext.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/RuntimeContext.cs deleted file mode 100644 index cca9d97a7..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/RuntimeContext.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime -{ - public class RuntimeContext - { - public const string LOCAL_NETWORK_ID = "local"; - public const string LOCAL_NETWORK_URL = "http://127.0.0.1:8545"; - - public string EthNetworkUrl { get; set; } = LOCAL_NETWORK_URL; - public EthAccountDescriptor CurrentAccount { get; set; } - public Dictionary Accounts { get; private set; } = new Dictionary(StringComparer.OrdinalIgnoreCase); - public Dictionary Contracts { get; private set; } = new Dictionary(StringComparer.OrdinalIgnoreCase); - public StaticGasPriceProvider GasPriceProvider { get; } = new StaticGasPriceProvider(); - - public void Reset() - { - Accounts = new Dictionary(StringComparer.OrdinalIgnoreCase); - Contracts = new Dictionary(StringComparer.OrdinalIgnoreCase); - } - - public string ResolveAccountReference(string reference) - { - if (string.IsNullOrWhiteSpace(reference) || string.Equals(reference, "0x0", StringComparison.OrdinalIgnoreCase)) return "0x0"; - - if (TryResolveAccountReference(reference, out string address)) return address; - - throw new Exception($"Invalid account name or address: '{reference}'."); - } - - public string ResolveContractReference(string reference) - { - if (TryResolveContractReference(reference, out string address)) return address; - - throw new Exception($"Invalid contract name or address: '{reference}'."); - } - - public string ResolveAccountOrContractReference(string reference) - { - if (TryResolveAccountOrContractReference(reference, out string address)) return address; - - throw new Exception($"Invalid name or address: '{reference}'."); - } - - public bool TryResolveAccountReference(string reference, out string address) - { - if (Accounts.ContainsKey(reference)) - { - address = Accounts[reference].Account.Address; - return true; - } - - if (EthAddressParser.ValidateAddress(reference)) - { - address = reference; - return true; - } - - address = null; - return false; - } - - public bool TryResolveContractReference(string reference, out string address) - { - if (Contracts.ContainsKey(reference)) - { - address = Contracts[reference].ContractAddress; - return true; - } - - if (EthAddressParser.ValidateAddress(reference)) - { - address = reference; - return true; - } - - address = null; - return false; - } - - public bool TryResolveAccountOrContractReference(string reference, out string address) - { - if (TryResolveAccountReference(reference, out address)) return true; - if (TryResolveContractReference(reference, out address)) return true; - return false; - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/StaticGasPriceProvider.cs b/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/StaticGasPriceProvider.cs deleted file mode 100644 index 08bb368b3..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/src/AdvancedAlgos.AlgoToken.AlgoTokenPlayground/Runtime/StaticGasPriceProvider.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using AdvancedAlgos.AlgoToken.Framework.Ethereum; -using Nethereum.Util; - -namespace AdvancedAlgos.AlgoToken.AlgoTokenPlayground.Runtime -{ - public class StaticGasPriceProvider : IGasPriceProvider - { - private BigInteger _gasPrice; - - public StaticGasPriceProvider() - { - _gasPrice = UnitConversion.Convert.ToWei(20, UnitConversion.EthUnit.Gwei); - } - - public BigInteger GetGasPrice() => _gasPrice; - public void SetGasPrice(BigInteger valueGwei) => _gasPrice = UnitConversion.Convert.ToWei(valueGwei, UnitConversion.EthUnit.Gwei); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/algo-token-playground/terminate-script.txt b/Deprecated-Code/IntelliToken/labs/algo-token-playground/terminate-script.txt deleted file mode 100644 index 83d82ea65..000000000 --- a/Deprecated-Code/IntelliToken/labs/algo-token-playground/terminate-script.txt +++ /dev/null @@ -1,29 +0,0 @@ -new-account -n miner_1_account -new-account -n ref_1_account -import-account 0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5 -n prefunded - -deploy-algotoken -n token - -token.algotoken-balanceof prefunded -deploy-algopool 0 token -n dev_pool -token.algotoken-transfer dev_pool 100m -token.algotoken-balanceof dev_pool -dev_pool.algopool-terminate -token.algotoken-balanceof dev_pool -token.algotoken-balanceof prefunded - -token.algotoken-balanceof prefunded -deploy-algofees token -n fees1 -token.algotoken-transfer fees1 100m -token.algotoken-balanceof fees1 -fees1.algofees-terminate -token.algotoken-balanceof fees1 -token.algotoken-balanceof prefunded - -token.algotoken-balanceof prefunded -deploy-algominer 0 2 miner_1_account ref_1_account token -n miner_1 -token.algotoken-transfer miner_1 100m -token.algotoken-balanceof miner_1 -miner_1.algominer-terminate -token.algotoken-balanceof miner_1 -token.algotoken-balanceof prefunded diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest.csproj b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest.csproj deleted file mode 100644 index fe23923a5..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - netcoreapp2.1 - true - latest - - - - - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/EthNetwork.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/EthNetwork.cs deleted file mode 100644 index 4ff2462e3..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/EthNetwork.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Nethereum.Hex.HexTypes; -using Nethereum.RPC.Accounts; -using Nethereum.Util; -using Nethereum.Web3; -using Nethereum.Web3.Accounts; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest -{ - public class EthNetwork - { - public const int TRANSACTION_BASE_FEE = 21000; - - public static EthNetwork Instance { get; private set; } - - private SemaphoreSlim _refillSync = new SemaphoreSlim(1, 1); - - public string Url { get; private set; } - public string PrefundedAddress { get; private set; } - public string PrefundedPrivateKey { get; private set; } - public IGasPriceProvider GasPriceProvider { get; private set; } - public BigInteger TxBaseFeeWei => GasPriceProvider.GetGasPrice() * TRANSACTION_BASE_FEE; - - public static void UseDefaultTestNet() => UseGanacheTestNet(); - - public static void UseGanacheTestNet() - { - Instance = new EthNetwork - { - Url = "http://127.0.0.1:8545", - PrefundedAddress = "0x06bB4674A4b08d07186b721378C7e241eD85443b", - PrefundedPrivateKey = "0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5", - GasPriceProvider = new StaticGasPriceProvider(2000000000) - }; - } - - public static void UseGethTestNet() - { - Instance = new EthNetwork - { - Url = "http://10.4.0.4:8545", - PrefundedAddress = "0x88474Ec3cfddfC943d3E42C94763D43f181A5a83", - PrefundedPrivateKey = "0x69970bd6c1b6cfbffea16656c27ff7b330b751ed5e46c1644b54a642871f4bbb", - GasPriceProvider = new StaticGasPriceProvider(2000000000) - }; - } - - public Web3 GetWeb3() => new Web3(Url); - public Web3 GetWeb3(IAccount account) => new Web3(account, Url); - - public Task RefillAsync(IAccount account) - { - return RefillAsync(account, UnitConversion.Convert.ToWei(1)); - } - - public async Task RefillAsync(IAccount account, BigInteger weis) - { - await _refillSync.WaitAsync(); - try - { - var prefundedAccount = new Account(PrefundedPrivateKey); - var web3 = new Web3(prefundedAccount, Url); - var recepit = await web3.TransactionManager.TransactionReceiptService.SendRequestAndWaitForReceiptAsync(() => - web3.TransactionManager.SendTransactionAsync(prefundedAccount.Address, account.Address, new HexBigInteger(weis)) - ); - } - finally - { - _refillSync.Release(); - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/StaticGasPriceProvider.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/StaticGasPriceProvider.cs deleted file mode 100644 index e8cc59df8..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest/StaticGasPriceProvider.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum.IntegrationTest -{ - public class StaticGasPriceProvider : IGasPriceProvider - { - private BigInteger _gasPrice; - - public StaticGasPriceProvider(BigInteger gasPrice) - { - _gasPrice = gasPrice; - } - - public BigInteger GetGasPrice() => _gasPrice; - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/AdvancedAlgos.AlgoToken.Framework.Ethereum.csproj b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/AdvancedAlgos.AlgoToken.Framework.Ethereum.csproj deleted file mode 100644 index d98ed2e6d..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/AdvancedAlgos.AlgoToken.Framework.Ethereum.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - netcoreapp2.1 - true - latest - - - - - - - diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAccountFactory.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAccountFactory.cs deleted file mode 100644 index c3933ce1b..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAccountFactory.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.Hex.HexConvertors.Extensions; -using Nethereum.Signer; -using Nethereum.Web3.Accounts; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum -{ - public static class EthAccountFactory - { - public static Account Create() - { - var accountEcKey = EthECKey.GenerateKey(); - var accountPrivateKey = accountEcKey.GetPrivateKeyAsBytes().ToHex(); - return new Account(accountPrivateKey); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAddressParser.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAddressParser.cs deleted file mode 100644 index d8e9a5c8e..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/EthAddressParser.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.Hex.HexConvertors.Extensions; -using Nethereum.Util; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum -{ - public static class EthAddressParser - { - private static readonly AddressUtil _addressUtil = new AddressUtil(); - - public static bool ValidateAddress(string address) - { - try - { - if (!_addressUtil.IsValidAddressLength(address)) return false; - address = _addressUtil.ConvertToChecksumAddress(address); - return _addressUtil.IsChecksumAddress(address); - } - catch - { - return false; - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Exceptions/TransactionRejectedException.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Exceptions/TransactionRejectedException.cs deleted file mode 100644 index 7aaf4592f..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Exceptions/TransactionRejectedException.cs +++ /dev/null @@ -1,24 +0,0 @@ -#pragma warning disable RCS1194 // Implement exception constructors. - -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.RPC.Eth.DTOs; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions -{ - public class TransactionRejectedException : Exception - { - private const string ERROR_MESSAGE = "The transaction was rejected."; - - public TransactionRejectedException(TransactionReceipt transactionReceipt) - : base(ERROR_MESSAGE) - { - TransactionReceipt = transactionReceipt; - } - - public TransactionReceipt TransactionReceipt { get; } - - public static void Throw(TransactionReceipt transactionReceipt) => throw new TransactionRejectedException(transactionReceipt); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Extensions/TransactionReceiptExtensions.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Extensions/TransactionReceiptExtensions.cs deleted file mode 100644 index 47d5ebc24..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Extensions/TransactionReceiptExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Nethereum.RPC.Eth.DTOs; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Exceptions; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum.Extensions -{ - public static class TransactionReceiptExtensions - { - public static void EnsureSucceededStatus(this TransactionReceipt transactionReceipt) - { - if (transactionReceipt.Status.Value != 1) TransactionRejectedException.Throw(transactionReceipt); - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/IGasPriceProvider.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/IGasPriceProvider.cs deleted file mode 100644 index 1a16a0b9c..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/IGasPriceProvider.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Text; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum -{ - public interface IGasPriceProvider - { - BigInteger GetGasPrice(); - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Reflection/AssemblyExtensions.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Reflection/AssemblyExtensions.cs deleted file mode 100644 index 9fc668554..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/Reflection/AssemblyExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum.Reflection -{ - public static class AssemblyExtensions - { - public static string GetResourceString(this Assembly assembly, string resourceName, Encoding encoding = null) - { - using (var stream = assembly.GetManifestResourceStream(assembly.GetName().Name + "." + resourceName)) - using (var reader = new StreamReader(stream, encoding ?? Encoding.UTF8)) - { - return reader.ReadToEnd(); - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/SmartContract.cs b/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/SmartContract.cs deleted file mode 100644 index deed26c1e..000000000 --- a/Deprecated-Code/IntelliToken/labs/framework/src/AdvancedAlgos.AlgoToken.Framework.Ethereum/SmartContract.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Numerics; -using System.Threading.Tasks; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Extensions; -using AdvancedAlgos.AlgoToken.Framework.Ethereum.Reflection; -using Nethereum.Contracts; -using Nethereum.Hex.HexTypes; -using Nethereum.RPC.Eth.DTOs; -using Nethereum.Web3; - -namespace AdvancedAlgos.AlgoToken.Framework.Ethereum -{ - public abstract class SmartContract where TContract : SmartContract - { - private static readonly object _syncForResourceLoader = new object(); - - private static string _abi; - private static string _bin; - - public SmartContract(Web3 web3, IGasPriceProvider gasPriceProvider) - { - Web3 = web3 ?? throw new ArgumentNullException(nameof(web3)); - GasPriceProvider = gasPriceProvider ?? throw new ArgumentNullException(nameof(gasPriceProvider)); - - LoadAbiAndBin(); - } - - public SmartContract(string contractAddress, Web3 web3, IGasPriceProvider gasPriceProvider) - { - Web3 = web3 ?? throw new ArgumentNullException(nameof(web3)); - GasPriceProvider = gasPriceProvider ?? throw new ArgumentNullException(nameof(gasPriceProvider)); - ContractAddress = contractAddress ?? throw new ArgumentNullException(nameof(contractAddress)); - - LoadAbiAndBin(); - - var contractDescriptor = web3.Eth.GetContract(_abi, contractAddress); - - Initialize(contractDescriptor); - } - - public Web3 Web3 { get; private set; } - public IGasPriceProvider GasPriceProvider { get; } - public string ContractAddress { get; private set; } - - protected abstract string AbiResourceName { get; } - protected abstract string BinResourceName { get; } - protected abstract BigInteger DeploymentGasUnits { get; } - - public void Bind(Web3 web3) - { - Web3 = web3 ?? throw new ArgumentNullException(nameof(web3)); - - var contractDescriptor = Web3.Eth.GetContract(_abi, ContractAddress); - - Initialize(contractDescriptor); - } - - protected virtual void Initialize(Contract contractDescriptor) { } - - protected async Task DeployAsync(params object[] constructorParameters) - { - var transactionReceipt = await Web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync( - _abi, - _bin, - Web3.TransactionManager.Account.Address, - new HexBigInteger(DeploymentGasUnits), - new HexBigInteger(GasPriceProvider.GetGasPrice()), - null, - null, - constructorParameters); - - transactionReceipt.EnsureSucceededStatus(); - - var contractDescriptor = Web3.Eth.GetContract(_abi, transactionReceipt.ContractAddress); - - Initialize(contractDescriptor); - - ContractAddress = transactionReceipt.ContractAddress; - - return transactionReceipt; - } - - protected async Task InvokeAsync(Function function, BigInteger gasUnits, params object[] parameters) - { - var transactionReceipt = await function.SendTransactionAndWaitForReceiptAsync( - Web3.TransactionManager.Account.Address, - new HexBigInteger(gasUnits), - new HexBigInteger(GasPriceProvider.GetGasPrice()), - null, - null, - parameters); - - transactionReceipt.EnsureSucceededStatus(); - - return transactionReceipt; - } - - private void LoadAbiAndBin() - { - lock (_syncForResourceLoader) - { - if (_abi != null) return; - - _abi = GetType().Assembly.GetResourceString(AbiResourceName); - _bin = GetType().Assembly.GetResourceString(BinResourceName); - } - } - } -} diff --git a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/README.md b/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/README.md deleted file mode 100644 index e2f11c0cc..000000000 --- a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/README.md +++ /dev/null @@ -1,11 +0,0 @@ -Ganache accounts: - -mnemonic: act analyst ability congress enter point unlock universe winner achieve refuse border - -Account #0 -Address: 0x06bB4674A4b08d07186b721378C7e241eD85443b -Private Key: 0x0936af475d2701538aad321f87e0a51f2b297634653393e8cab7290a674009a5 - -Account #1 -Address: 0x6d197071d41C77A2779B33304B8cC6Ea41f69918 -Private Key: 0x5e697f9196588307b9e818fafca38c33f6592c005bfd190820b1d2cc2d608882 \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.cmd b/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.cmd deleted file mode 100644 index 94a9e8a1c..000000000 --- a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.cmd +++ /dev/null @@ -1,2 +0,0 @@ -npm install -g ganache-cli - diff --git a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.sh b/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.sh deleted file mode 100644 index 363a3abfc..000000000 --- a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/install-local-ganache-cli.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -npm install -g ganache-cli diff --git a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.cmd b/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.cmd deleted file mode 100644 index 9f4bd884c..000000000 --- a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.cmd +++ /dev/null @@ -1 +0,0 @@ -ganache-cli "--mnemonic" "act analyst ability congress enter point unlock universe winner achieve refuse border" "--accounts" "2" "--defaultBalanceEther" "10000000" "--networkId" "777" "--db" "C:/Temp" "--deterministic" "--noVMErrorsOnRPCResponse" \ No newline at end of file diff --git a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.sh b/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.sh deleted file mode 100644 index c6dde2f78..000000000 --- a/Deprecated-Code/IntelliToken/labs/tools/ganache-cli-setup/run-local-ganache-cli.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -ganache-cli "--mnemonic" "act analyst ability congress enter point unlock universe winner achieve refuse border" "--accounts" "2" "--defaultBalanceEther" "10000000" "--networkId" "777" "--db" "$PWD/ganache-db" "--deterministic" "--noVMErrorsOnRPCResponse" diff --git a/Deprecated-Code/LogsServerModule/.babelrc b/Deprecated-Code/LogsServerModule/.babelrc deleted file mode 100644 index f2e312799..000000000 --- a/Deprecated-Code/LogsServerModule/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env", "stage-2"] -} diff --git a/Deprecated-Code/LogsServerModule/.eslintrc.js b/Deprecated-Code/LogsServerModule/.eslintrc.js deleted file mode 100644 index c06bffbce..000000000 --- a/Deprecated-Code/LogsServerModule/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - parser: 'babel-eslint', - extends: 'airbnb-base', - rules: { - 'max-len': ['error', 140, 2], - 'no-underscore-dangle': 'off', - 'no-param-reassign': 'off', - } -}; diff --git a/Deprecated-Code/LogsServerModule/.gitignore b/Deprecated-Code/LogsServerModule/.gitignore deleted file mode 100644 index 8e14c1a3d..000000000 --- a/Deprecated-Code/LogsServerModule/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store diff --git a/Deprecated-Code/LogsServerModule/CODE_OF_CONDUCT.md b/Deprecated-Code/LogsServerModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 05b430885..000000000 --- a/Deprecated-Code/LogsServerModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/LogsServerModule/CONTRIBUTING.md b/Deprecated-Code/LogsServerModule/CONTRIBUTING.md deleted file mode 100644 index c67e8d115..000000000 --- a/Deprecated-Code/LogsServerModule/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/LogsServerModule/LICENSE b/Deprecated-Code/LogsServerModule/LICENSE deleted file mode 100644 index 2fe09f449..000000000 --- a/Deprecated-Code/LogsServerModule/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -COPYRIGHT NOTICE - -© Copyright 2018 Superalgos.org - - -LICENSE NOTICE - -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitely agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. \ No newline at end of file diff --git a/Deprecated-Code/LogsServerModule/README.md b/Deprecated-Code/LogsServerModule/README.md deleted file mode 100644 index 5b26724cb..000000000 --- a/Deprecated-Code/LogsServerModule/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# LogsModule -This module will manage all application logs. diff --git a/Deprecated-Code/LogsServerModule/package-lock.json b/Deprecated-Code/LogsServerModule/package-lock.json deleted file mode 100644 index 4bd2b3f9b..000000000 --- a/Deprecated-Code/LogsServerModule/package-lock.json +++ /dev/null @@ -1,6923 +0,0 @@ -{ - "name": "logs-server", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.2.tgz", - "integrity": "sha512-IiuO1XaxxvbZa19gGHBOEgQKmMHB+ghXaNjSbY5dWqCEQgBDgJBA/2a1Oq9tMPhEPAmEY2FOuhaWRxxKxmVdlQ==", - "requires": { - "apollo-env": "0.3.2" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0" - } - }, - "@babel/generator": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", - "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", - "dev": true, - "requires": { - "@babel/types": "7.3.2", - "jsesc": "2.5.2", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0", - "@babel/template": "7.2.2", - "@babel/types": "7.3.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "7.3.2" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "esutils": "2.0.2", - "js-tokens": "4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", - "dev": true - }, - "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.3.2", - "@babel/types": "7.3.2" - } - }, - "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.3.2", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "@babel/parser": "7.3.2", - "@babel/types": "7.3.2", - "debug": "4.1.1", - "globals": "11.10.0", - "lodash": "4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", - "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", - "dev": true, - "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/inquire": "1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "10.12.21" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "3.4.32", - "@types/node": "10.12.21" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "10.12.21" - } - }, - "@types/cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", - "requires": { - "@types/express": "4.16.1" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "requires": { - "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.16.1", - "@types/serve-static": "1.13.2" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz", - "integrity": "sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==", - "requires": { - "@types/node": "10.12.21", - "@types/range-parser": "1.2.3" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/node": { - "version": "10.12.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz", - "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "4.16.1", - "@types/mime": "2.0.1" - } - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "3.0.0", - "@types/node": "10.12.21" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", - "dev": true, - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "apollo-cache-control": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.5.0.tgz", - "integrity": "sha512-zu26CFj7CboxLB6cckZQEiSUGXIr8MViEGIC5Vesz2yd37sjtevMfRwQhxFuK0HinR0T/WC3dz2k5cj+33vQQQ==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.0" - } - }, - "apollo-datasource": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.3.0.tgz", - "integrity": "sha512-+jWs3ezhx4lcAAPIHtlj0Zoiv2tvwfzn7feHuhxub3xFwkJm39T8hPjb3aMQCsuS7TukBD+F5ndgVob5hL/5Nw==", - "requires": { - "apollo-server-caching": "0.3.0", - "apollo-server-env": "2.2.0" - } - }, - "apollo-engine-reporting": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.0.0.tgz", - "integrity": "sha512-9gZSME9ggZwL1nBBvfgSehwc+PtcvZC1/3NYrBOFgidJbrEFita2w5A0jM8Brjo+N2FMKNYWGj8WQ1ywO21JPg==", - "requires": { - "apollo-engine-reporting-protobuf": "0.2.0", - "apollo-graphql": "0.1.0", - "apollo-server-core": "2.4.0", - "apollo-server-env": "2.2.0", - "async-retry": "1.2.3", - "graphql-extensions": "0.5.0" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.2.0.tgz", - "integrity": "sha512-qI+GJKN78UMJ9Aq/ORdiM2qymZ5yswem+/VDdVFocq+/e1QqxjnpKjQWISkswci5+WtpJl9SpHBNxG98uHDKkA==", - "requires": { - "protobufjs": "6.8.8" - } - }, - "apollo-env": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.3.2.tgz", - "integrity": "sha512-r6nrOw5Pyk6YLNKEtvBiTguJK+oPI1sthKogd7tp6jfkJ+q8SR/9sOoTxyV3vsmR/mMENuBHF89BGLLo9rxDiA==", - "requires": { - "core-js": "3.0.0-beta.3", - "node-fetch": "2.3.0" - } - }, - "apollo-graphql": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.1.0.tgz", - "integrity": "sha512-Mi5GqZJz1A/0i8SEm9EVHWe/LkGbYzV5wzobUY+1Q0SI1NdFtRgqHZUdHU0hz1jDnL+dpRqK1huVmtOO/DGa/A==", - "requires": { - "lodash.sortby": "4.7.0" - } - }, - "apollo-link": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.8.tgz", - "integrity": "sha512-lfzGRxhK9RmiH3HPFi7TIEBhhDY9M5a2ZDnllcfy5QDk7cCQHQ1WQArcw1FK0g1B+mV4Kl72DSrlvZHZJEolrA==", - "requires": { - "zen-observable-ts": "0.8.15" - } - }, - "apollo-server-caching": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.3.0.tgz", - "integrity": "sha512-dHwWUsRZu7I1yUfzTwPJgOigMsftgp8w3X96Zdch1ICWN7cM6aNxks9tTnLd+liUSEzdYLlTmEy5VUturF2IAw==", - "requires": { - "lru-cache": "5.1.1" - } - }, - "apollo-server-core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.4.0.tgz", - "integrity": "sha512-rTFJa12NzTWC9IJrXDr8AZMs1Slbes9YxbyaI+cMC5fs8O9wkCkb34C/1Tp7xKX0fgauXrKZpXv7yPTSm+4YFg==", - "requires": { - "@apollographql/apollo-tools": "0.3.2", - "@apollographql/graphql-playground-html": "1.6.6", - "@types/ws": "6.0.1", - "apollo-cache-control": "0.5.0", - "apollo-datasource": "0.3.0", - "apollo-engine-reporting": "1.0.0", - "apollo-server-caching": "0.3.0", - "apollo-server-env": "2.2.0", - "apollo-server-errors": "2.2.0", - "apollo-server-plugin-base": "0.3.0", - "apollo-tracing": "0.5.0", - "fast-json-stable-stringify": "2.0.0", - "graphql-extensions": "0.5.0", - "graphql-subscriptions": "1.0.0", - "graphql-tag": "2.10.1", - "graphql-tools": "4.0.4", - "graphql-upload": "8.0.4", - "lodash": "4.17.11", - "subscriptions-transport-ws": "0.9.15", - "ws": "6.1.3" - } - }, - "apollo-server-env": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", - "requires": { - "node-fetch": "2.3.0", - "util.promisify": "1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz", - "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg==" - }, - "apollo-server-express": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.4.0.tgz", - "integrity": "sha512-uDS7OZJ3EwFr4eZ9k1MiBtUTaqKgCXUUTCknPTdCbTzBel7TjNsa6PNKrSQk+jrLja2H8VwNjbra8uBF5z70Pw==", - "requires": { - "@apollographql/graphql-playground-html": "1.6.6", - "@types/accepts": "1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "2.8.4", - "@types/express": "4.16.1", - "accepts": "1.3.5", - "apollo-server-core": "2.4.0", - "body-parser": "1.18.3", - "cors": "2.8.5", - "graphql-subscriptions": "1.0.0", - "graphql-tools": "4.0.4", - "type-is": "1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.3.0.tgz", - "integrity": "sha512-SOwp4cpZwyklvP1MkMcY6+12c1hrb5gwC4vK4a23kL5rr9FC0sENcXo3uVVM4XlDGOXIkY+sCM8ngKFuef2flw==" - }, - "apollo-tracing": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.5.0.tgz", - "integrity": "sha512-j0icEhLYf0xS6Q/iCXA2j9KfpYw0a/XvLSUio7fm5yUwtXP2Pp11x5BtK1dI8sLMiaOqUrREz2XjV4PKLzQPuA==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.0" - } - }, - "apollo-utilities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.2.tgz", - "integrity": "sha512-EjDx8vToK+zkWIxc76ZQY/irRX52puNg04xf/w8R0kVTDAgHuVfnFVC01O5vE25kFnIaa5em0pFI0p9b6YMkhQ==", - "requires": { - "fast-json-stable-stringify": "2.0.0", - "tslib": "1.9.3" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "4.17.11" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "1.6.1", - "is-buffer": "1.1.6" - } - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.19.0", - "convert-source-map": "1.6.0", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.3", - "lodash": "4.17.11", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.3.2", - "@babel/traverse": "7.2.3", - "@babel/types": "7.3.2", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.6.4", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.8", - "invariant": "2.2.4", - "semver": "5.6.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.6.4", - "home-or-tmp": "2.0.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - }, - "dependencies": { - "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", - "dev": true - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.6.4", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.11" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.11" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - } - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.2", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000935", - "electron-to-chromium": "1.3.113" - } - }, - "bson": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", - "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" - }, - "busboy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.0.tgz", - "integrity": "sha512-e+kzZRAbbvJPLjQz2z+zAyr78BSi9IFeBTyLwF76g78Q2zRt/RZ1NtS3MS17v2yLqYfLz69zHdC+1L4ja8PwqQ==", - "requires": { - "dicer": "0.3.0" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000935", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz", - "integrity": "sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.7", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.4.2", - "xdg-basedir": "3.0.0" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.0.0-beta.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.3.tgz", - "integrity": "sha512-kM/OfrnMThP5PwGAj5HhQLdjUqzjrllqN2EVnk/X9qrLsfYjR2hzZ+E/8CzH0xuosexZtqMTLQrk//BULrBj9w==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "1.0.1" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "requires": { - "streamsearch": "0.1.2" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.13.0.tgz", - "integrity": "sha512-nqD5WQMisciZC5EHZowejLKQjWGuFS5c70fxqSKlnDME+oz9zmE8KTlX+lHSg+/5wsC/kf9Q9eMkC8qS3oM2fg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "ajv": "6.8.1", - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "debug": "4.1.1", - "doctrine": "2.1.0", - "eslint-scope": "4.0.0", - "eslint-utils": "1.3.1", - "eslint-visitor-keys": "1.0.0", - "espree": "5.0.0", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.10.0", - "ignore": "4.0.6", - "import-fresh": "3.0.0", - "imurmurhash": "0.1.4", - "inquirer": "6.2.2", - "js-yaml": "3.12.1", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "progress": "2.0.3", - "regexpp": "2.0.1", - "semver": "5.6.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "5.2.2", - "text-table": "0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, - "requires": { - "eslint-restricted-globals": "0.1.1", - "object.assign": "4.1.0", - "object.entries": "1.1.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.10.0" - } - }, - "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", - "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", - "dev": true, - "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.3.0", - "has": "1.0.3", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.10.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", - "dev": true, - "requires": { - "acorn": "6.0.7", - "acorn-jsx": "5.0.1", - "eslint-visitor-keys": "1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "2.2.4" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - } - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.4", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.1", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "graceful-fs": "4.1.15", - "rimraf": "2.6.3", - "write": "0.2.1" - } - }, - "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-capacitor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.0.tgz", - "integrity": "sha512-CIJZpxbVWhO+qyODeCR55Q+6vj0p2oL8DAWd/DZi3Ev+25PimUoScw07K0fPgluaH3lFoqNvwW13BDYfHWFQJw==" - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.12.1", - "node-pre-gyp": "0.10.3" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.3.5" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.3.5" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.24", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.4", - "nopt": "4.0.1", - "npm-packlist": "1.2.0", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.3", - "semver": "5.6.0", - "tar": "4.4.8" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "1.3.5" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "requires": { - "iterall": "1.2.2" - } - }, - "graphql-extensions": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.0.tgz", - "integrity": "sha512-2i0rpe4/D8jZj6XmxXGLFDAsGLhkFrSdpS5WfvTAzoXOc52hUAxNdsbgRQGeKMFhmanqA6FDXxO/s+BtPHChVA==", - "requires": { - "@apollographql/apollo-tools": "0.3.2" - } - }, - "graphql-subscriptions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", - "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", - "requires": { - "iterall": "1.2.2" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "graphql-tools": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", - "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", - "requires": { - "apollo-link": "1.2.8", - "apollo-utilities": "1.1.2", - "deprecated-decorator": "0.1.6", - "iterall": "1.2.2", - "uuid": "3.3.2" - } - }, - "graphql-upload": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.4.tgz", - "integrity": "sha512-jsTfVYXJ5mU6BXiiJ20CUCAcf41ICCQJ2ltwQFUuaFKiY4JhlG99uZZp5S3hbpQ/oA1kS7hz4pRtsnxPCa7Yfg==", - "requires": { - "busboy": "0.3.0", - "fs-capacitor": "2.0.0", - "http-errors": "1.7.1", - "object-path": "0.11.4" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.1.tgz", - "integrity": "sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw==", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "1.0.0", - "resolve-from": "4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", - "dev": true, - "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "3.0.3", - "figures": "2.0.0", - "lodash": "4.17.11", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "6.4.0", - "string-width": "2.1.1", - "strip-ansi": "5.0.0", - "through": "2.3.8" - }, - "dependencies": { - "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", - "dev": true, - "requires": { - "ansi-regex": "4.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "1.4.0" - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.13.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "1.6.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "4.0.1" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "3.0.3" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "1.0.1" - } - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true, - "optional": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mongodb": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", - "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==", - "requires": { - "mongodb-core": "3.1.11", - "safe-buffer": "5.1.2" - } - }, - "mongodb-core": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", - "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==", - "requires": { - "bson": "1.1.0", - "require_optional": "1.0.1", - "safe-buffer": "5.1.2", - "saslprep": "1.0.2" - } - }, - "mongoose": { - "version": "5.4.10", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.4.10.tgz", - "integrity": "sha512-yJl+A7p8QF++tyBl6fRGFON5GV57MTXLKNiaiqgX5vZs1qJpcZpPiUGU5odBiqTHFYPybuRp8dW9Qtv4K6SxBQ==", - "requires": { - "async": "2.6.1", - "bson": "1.1.0", - "kareem": "2.3.0", - "mongodb": "3.1.13", - "mongodb-core": "3.1.11", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.1", - "mquery": "3.2.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", - "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" - }, - "nodemon": { - "version": "1.18.9", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.9.tgz", - "integrity": "sha512-oj/eEVTEI47pzYAjGkpcNw0xYwTl4XSTUQv2NPQI6PpN3b75PhpuYk3Vb3U80xHCyM2Jm+1j68ULHXl4OR3Afw==", - "dev": true, - "requires": { - "chokidar": "2.1.0", - "debug": "3.2.6", - "ignore-by-default": "1.0.1", - "minimatch": "3.0.4", - "pstree.remy": "1.1.6", - "semver": "5.6.0", - "supports-color": "5.5.0", - "touch": "3.1.0", - "undefsafe": "2.0.2", - "update-notifier": "2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "chokidar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", - "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.7", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.12" - } - }, - "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", - "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1", - "has": "1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.3.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.6.0" - } - }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", - "dev": true, - "requires": { - "callsites": "3.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "1.1.2", - "@protobufjs/base64": "1.1.2", - "@protobufjs/codegen": "2.0.4", - "@protobufjs/eventemitter": "1.1.0", - "@protobufjs/fetch": "1.1.0", - "@protobufjs/float": "1.0.2", - "@protobufjs/inquire": "1.1.0", - "@protobufjs/path": "1.1.2", - "@protobufjs/pool": "1.1.0", - "@protobufjs/utf8": "1.1.0", - "@types/long": "4.0.0", - "@types/node": "10.12.21", - "long": "4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "pstree.remy": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", - "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "optional": true, - "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.4" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.5.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" - } - }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.2" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "1.2.8" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "2.0.0", - "semver": "5.6.0" - } - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "7.1.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "0.1.15" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", - "optional": true, - "requires": { - "sparse-bitfield": "3.0.3" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "5.6.0" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.4.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "astral-regex": "1.0.0", - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - } - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "1.5.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "3.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", - "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", - "requires": { - "backo2": "1.0.2", - "eventemitter3": "3.1.0", - "iterall": "1.2.2", - "symbol-observable": "1.2.0", - "ws": "5.2.2" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "1.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "table": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.2.tgz", - "integrity": "sha512-f8mJmuu9beQEDkKHLzOv4VxVYlU68NpdzjbGPl69i4Hx0sTopJuNxuzJd17iV2h24dAfa93u794OnDA5jqXvfQ==", - "dev": true, - "requires": { - "ajv": "6.8.1", - "lodash": "4.17.11", - "slice-ansi": "2.1.0", - "string-width": "2.1.1" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "1.0.10" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.21" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "2.6.9" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.2", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.2.1", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "2.1.1" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "2.1.1" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, - "ws": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", - "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", - "requires": { - "async-limiter": "1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "zen-observable": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", - "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" - }, - "zen-observable-ts": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.15.tgz", - "integrity": "sha512-sXKPWiw6JszNEkRv5dQ+lQCttyjHM2Iks74QU5NP8mMPS/NrzTlHDr780gf/wOBqmHkPO6NCLMlsa+fAQ8VE8w==", - "requires": { - "zen-observable": "0.8.13" - } - } - } -} diff --git a/Deprecated-Code/LogsServerModule/package.json b/Deprecated-Code/LogsServerModule/package.json deleted file mode 100644 index 94cb7a83d..000000000 --- a/Deprecated-Code/LogsServerModule/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "logs-server", - "version": "0.0.1", - "description": "Superalgos Logs backend API", - "author": "", - "license": "", - "main": "src/index.js", - "scripts": { - "start": "nodemon --exec babel-node --presets env,stage-2 src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "standard": { - "ignore": [ - "/src/errors/index.js" - ] - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-eslint": "^10.0.1", - "babel-preset-env": "^1.7.0", - "babel-preset-stage-2": "^6.24.1", - "eslint": "^5.8.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-plugin-import": "^2.14.0", - "nodemon": "^1.18.4" - }, - "dependencies": { - "apollo-server-express": "^2.1.0", - "axios": "^0.18.0", - "dotenv": "^6.0.0", - "express": "^4.16.3", - "graphql": "^0.13.2", - "mongoose": "^5.3.4" - } -} diff --git a/Deprecated-Code/LogsServerModule/src/app.js b/Deprecated-Code/LogsServerModule/src/app.js deleted file mode 100644 index 343a2aaec..000000000 --- a/Deprecated-Code/LogsServerModule/src/app.js +++ /dev/null @@ -1,43 +0,0 @@ -import 'dotenv/config'; -import express from 'express'; -import { ApolloServer } from 'apollo-server-express'; -import schema from './schema'; -import wrongPreshared from './errors/notAllowed.json'; - -const app = express(); - -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - -// Starting the graphql server -const server = new ApolloServer({ - schema, - playground: { - settings: { - 'editor.theme': 'dark', - 'editor.cursorShape': 'line', - }, - }, - context: ({ req }) => ({ - userId: req.headers.userid, - authorization: req.headers.authorization, - }), - formatError: error => ({ - code: error.extensions.exception.code, - message: error.message, - path: error.path, - }), - introspection: true, -}); - -server.applyMiddleware({ - app, - cors: true, -}); - -export default app; diff --git a/Deprecated-Code/LogsServerModule/src/errors/index.js b/Deprecated-Code/LogsServerModule/src/errors/index.js deleted file mode 100644 index c53178343..000000000 --- a/Deprecated-Code/LogsServerModule/src/errors/index.js +++ /dev/null @@ -1,21 +0,0 @@ -class ClientError extends Error { -} - - -export class AuthentificationError extends ClientError { - code = 401 - - message = 'Autentification not found, you have to be authentificated to perform this action' -} - -export class DatabaseError extends ClientError { - code = 404 - - message = `Ressource not found : ${this.message}` -} - -export class WrongArgumentsError extends ClientError { - code = 400 - - message = `Wrong arguments : ${this.message}` -} diff --git a/Deprecated-Code/LogsServerModule/src/errors/notAllowed.json b/Deprecated-Code/LogsServerModule/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/LogsServerModule/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/LogsServerModule/src/index.js b/Deprecated-Code/LogsServerModule/src/index.js deleted file mode 100644 index bba425a29..000000000 --- a/Deprecated-Code/LogsServerModule/src/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import app from './app'; - -app.listen(process.env.PORT, () => { - console.log(`Listening on port ${process.env.PORT}`); -}); diff --git a/Deprecated-Code/LogsServerModule/src/schema/index.js b/Deprecated-Code/LogsServerModule/src/schema/index.js deleted file mode 100644 index ac0ba9344..000000000 --- a/Deprecated-Code/LogsServerModule/src/schema/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import { - GraphQLSchema, -} from 'graphql'; - -import RootQuery from './queries'; - -const Schema = new GraphQLSchema({ - query: RootQuery, -}); - -export default Schema; diff --git a/Deprecated-Code/LogsServerModule/src/schema/queries/CalcLogLinkID.js b/Deprecated-Code/LogsServerModule/src/schema/queries/CalcLogLinkID.js deleted file mode 100644 index 677cc0241..000000000 --- a/Deprecated-Code/LogsServerModule/src/schema/queries/CalcLogLinkID.js +++ /dev/null @@ -1,28 +0,0 @@ -import 'dotenv/config'; -import { - GraphQLID, - GraphQLSchema, - GraphQLString -} from 'graphql'; - -import { LogLinkIDType } from '../types'; - -const crypto = require('crypto'); - - -const query = { - loglinkid: { - type: LogLinkIDType, - args: { seedID: { type: GraphQLID } }, - resolve(parent, args){ - // code to get data from db / other source - const hash = crypto.createHash('sha256'); - hash.update(process.env.PRESHARED_ELK_LOG_KEY+args.seedID); - - return { value: process.env.BEGIN_URL_ELK_LOG+hash.digest('hex')+process.env.END_URL_ELK_LOG }; - } - } -}; - - -export default query; diff --git a/Deprecated-Code/LogsServerModule/src/schema/queries/index.js b/Deprecated-Code/LogsServerModule/src/schema/queries/index.js deleted file mode 100644 index 030948804..000000000 --- a/Deprecated-Code/LogsServerModule/src/schema/queries/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import CalcLogLinkIDQuery from './CalcLogLinkID'; - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: Object.assign( - CalcLogLinkIDQuery, - ), -}); - -export default RootQuery; diff --git a/Deprecated-Code/LogsServerModule/src/schema/types/LogLinkID.js b/Deprecated-Code/LogsServerModule/src/schema/types/LogLinkID.js deleted file mode 100644 index 0e5969c30..000000000 --- a/Deprecated-Code/LogsServerModule/src/schema/types/LogLinkID.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLID -} from 'graphql'; - - -const LogLinkIDType = new GraphQLObjectType({ - name: 'LogLinkID', - description: 'Generate de LogLinkID', - fields: () => ({ - seedID: { type: GraphQLID }, - value: { type: GraphQLString }, - }), -}); - -export default LogLinkIDType; diff --git a/Deprecated-Code/LogsServerModule/src/schema/types/index.js b/Deprecated-Code/LogsServerModule/src/schema/types/index.js deleted file mode 100644 index e5f703ac2..000000000 --- a/Deprecated-Code/LogsServerModule/src/schema/types/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import LogLinkIDType from './LogLinkID'; - -export { - LogLinkIDType, -}; diff --git a/Deprecated-Code/Mariam/.gitattributes b/Deprecated-Code/Mariam/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/Mariam/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/Mariam/.gitignore b/Deprecated-Code/Mariam/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/Mariam/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/Mariam/AAMariam-Trading-Bot.sln b/Deprecated-Code/Mariam/AAMariam-Trading-Bot.sln deleted file mode 100644 index da30e179e..000000000 --- a/Deprecated-Code/Mariam/AAMariam-Trading-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AA2901BC-8F81-40F0-A402-5CA79A3F22AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/Mariam/Commons.js b/Deprecated-Code/Mariam/Commons.js deleted file mode 100644 index 400f8cd14..000000000 --- a/Deprecated-Code/Mariam/Commons.js +++ /dev/null @@ -1,18 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons"; - - - let thisObject = { - initialize: initialize - }; - - return thisObject; - - function initialize() { - - } -}; \ No newline at end of file diff --git a/Deprecated-Code/Mariam/LICENSE b/Deprecated-Code/Mariam/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/Mariam/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/Mariam/Mariam.png b/Deprecated-Code/Mariam/Mariam.png deleted file mode 100644 index 3e0e6cac2..000000000 Binary files a/Deprecated-Code/Mariam/Mariam.png and /dev/null differ diff --git a/Deprecated-Code/Mariam/Project.njsproj b/Deprecated-Code/Mariam/Project.njsproj deleted file mode 100644 index c9101ff71..000000000 --- a/Deprecated-Code/Mariam/Project.njsproj +++ /dev/null @@ -1,78 +0,0 @@ - - - - Debug - 2.0 - {aa2901bc-8f81-40f0-a402-5ca79a3f22ad} - - ShowAllFiles - User.Bot.js - - - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/Mariam/README.md b/Deprecated-Code/Mariam/README.md deleted file mode 100644 index b45fa9457..000000000 --- a/Deprecated-Code/Mariam/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# I'm Mariam, a t-bot! -AKA a trading algobot running on the AAPlatform by Advanced Algos Ltd. - -### My Specialty -I serve as a template for developing trading bots. - -### Ideal for -A starting point laying out the proper ways to interact with the AACloud. My actual trading strategy is quite unusable though... you will have to bring your own logic, strategy wise. - -### Details - -| **Name** | **Type** | **Version** | **Release Date** | **Current dataSet** | -|----------|----------|----------|----------|----------| -| Mariam |Trading | 1.0 | Jan 2018 | dataSet.V1 | - -# My Strategy - -### Markets -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC - -### Description - -> WARNING: The trading strategy behind Mariam is far from being a good strategy, let alone a proven one. - -I start out trying to sell BTC at the highest possible price, but, in all honesty, I don't do much to ensure that. I just sell and hope the price will rise. - -### Compatible Plotters -[AAMasters Plotters-Trading](https://github.com/AAMasters/Plotters-Trading) - -### Dependencies -[AAMasters Charly](https://github.com/AAMasters/AACharly-Extraction-Bot) -[AAMasters Bruce](https://github.com/AAMasters/AABruce-Indicator-Bot) -[AAMasters Olivia](https://github.com/AAMasters/AAOlivia-Indicator-Bot) - -### Trading as a Service (TaaS) Fees -No fees. - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/Mariam/Trading-Process/User.Bot.js b/Deprecated-Code/Mariam/Trading-Process/User.Bot.js deleted file mode 100644 index 232027916..000000000 --- a/Deprecated-Code/Mariam/Trading-Process/User.Bot.js +++ /dev/null @@ -1,205 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger) { - - const MODULE_NAME = 'User Bot'; - const FULL_LOG = true; - const ERROR_LOG = true; - - let thisObject = { - initialize: initialize, - start: start - }; - - let assistant; // You will receive a reference to the platform at your initialize function. - - - return thisObject; - - function initialize(pAssistant, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] initialize -> Entering function.'); } - - logger.fileName = MODULE_NAME; - - /* Store local values. */ - assistant = pAssistant; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] initialize -> onDone -> err = ' + err.message); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> Entering function.'); } - - /* - - This is an example. This bot will trade with a pseudo strategy based on candle and volumes stairs patterns. - Essentially it will look at the patterns it is in at different time periods and try to make a guess if it is a good time to buy, - sell, or do nothing. - - */ - - if (global.AT_BREAKPOINT === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> Plot Breakpoint Hit."); } - - } - - decideWhatToDo(onDone); - - function onDone(err) { - try { - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] start -> onDone -> Execution finished well.'); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - break; - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] start -> onDone -> Retry Later. Requesting Execution Retry.'); } - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - break; - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] start -> onDone -> Operation Failed. Aborting the process.'); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - break; - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] start -> onDone -> err = ' + err.message); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function decideWhatToDo(callBack) { - - try { - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> Entering function.'); } - - let balance = assistant.getAvailableBalance(); - - let rate = assistant.getMarketRate(); - rate = Number(rate.toFixed(8)); - - let amountA; - let amountB; - - let balanceA = Number(balance.assetA); - let balanceB = Number(balance.assetB); - - if (balanceA === 0 && balanceB === 0) { - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> Cannot place orders since Available Balance is zero on both Assets.'); } - callBack(global.DEFAULT_OK_RESPONSE); - return; - - let messageRelevance = Math.trunc(Math.random() * 10); - - switch (messageRelevance) { - - case 1: { - assistant.sendMessage(messageRelevance, 'No Available Balance','Cannot place orders since Available Balance is zero on both Assets.'); - break; - } - case 3: { - assistant.sendMessage(messageRelevance, 'Available Balance Too Low', 'Available balances too low on both assets.'); - break; - } - case 5: { - assistant.sendMessage(messageRelevance, 'Orders Already at Order Book', 'All intended orders have already been put at the order book.'); - break; - } - - } - } - - if (Math.random() * 10 > 3) { - - let messageRelevance = Math.trunc(Math.random() * 6); - - switch (messageRelevance) { - - case 1: { - assistant.sendMessage(messageRelevance, 'Feeling Lazy', 'I dont feel like putting any order by now. Will think about it later.'); - break; - } - case 3: { - assistant.sendMessage(messageRelevance, 'Not Right Time', 'According to my internal calculations, this is not a good time to place an order.'); - break; - } - case 5: { - assistant.sendMessage(messageRelevance, 'Not Feeling Lucky', 'I am currently not feeling lucky, for that reason I wont put any order now.'); - break; - } - - } - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> In some situations it is just fin no to place orders. Passing this turn. '); } - callBack(global.DEFAULT_OK_RESPONSE); - return; - } - - if (balanceA > 0) { - - amountA = balanceA; - amountA = Number(amountA.toFixed(8)); - - amountB = amountA / rate; - amountB = Number(amountB.toFixed(8)); - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> Decided to BUY.'); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> amountA = ' + amountA); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> amountB = ' + amountB); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> rate = ' + rate); } - - assistant.putPosition('buy', rate, amountA, amountB, callBack); - - assistant.sendMessage(10, 'Buy Order Placed', 'I ve just placed a Buy order because I thought the rate ' + rate + ' was great.'); - } - - if (balanceB > 0) { - - amountB = balanceB; - amountB = Number(amountB.toFixed(8)); - - amountA = amountB * rate; - amountA = Number(amountA.toFixed(8)); - - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> Decided to SELL.'); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> amountA = ' + amountA); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> amountB = ' + amountB); } - if (FULL_LOG === true) { logger.write( MODULE_NAME, '[INFO] start -> decideWhatToDo -> rate = ' + rate); } - - assistant.putPosition('sell', rate, amountA, amountB, callBack); - - assistant.sendMessage(10, 'Sell Order Placed', 'I ve just placed a Sell order because I believe it was the right time to do so.'); - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] start -> decideWhatToDo -> err = ' + err.message); } - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write(MODULE_NAME, '[ERROR] start -> err = ' + err.message); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/Mariam/package.json b/Deprecated-Code/Mariam/package.json deleted file mode 100644 index 64e3f931a..000000000 --- a/Deprecated-Code/Mariam/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AAMariam", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": { - } -} diff --git a/Deprecated-Code/Mariam/this.bot.config.json b/Deprecated-Code/Mariam/this.bot.config.json deleted file mode 100644 index 921822011..000000000 --- a/Deprecated-Code/Mariam/this.bot.config.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "displayName": "Mariam", - "codeName": "AAMariam", - "type": "Trading", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "AAMasters", - "profilePicture": "Mariam.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Trading-Process", - "description": "Simple trading strategy to be used as a template.", - "startMode": { - "live": { - "run": "false", - "resumeExecution": "false" - }, - "backtest": { - "run": "true", - "beginDatetime": "2018-04-21T18:00:00.000Z", - "endDatetime": "2018-04-21T18:15:00.000Z", - "waitTime": 1000 - }, - "competition": { - "run": "false", - "beginDatetime": "2018-05-17T00:00:00.000Z", - "endDatetime": "2018-05-18T00:00:00.000Z", - "resumeExecution": "false" - } - }, - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "timePeriod": 60000, - "statusDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AAMariam", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Trading-Process", - "dataSetVersion": "dataSet.V1" - } - ], - "dataDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSet": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSet": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AABruce", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSet": "One-Min", - "dataSetVersion": "dataSet.V1" - } - ] - } - ], - "products": [ - { - "codeName": "Live Trading History", - "displayName": "Live Trading History", - "shortDisplayName": "Live", - "description": "General information about Mariam live trading history.", - "dataSets": [ - { - "codeName": "Live History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Live.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - }, - { - "codeName": "Backtest Trading History", - "displayName": "Backtest Trading History", - "shortDisplayName": "Backtest", - "description": "General information about Mariam backtest trading history.", - "dataSets": [ - { - "codeName": "Backtest History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Backtest.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - }, - { - "codeName": "Competition Trading History", - "displayName": "Competition Trading History", - "shortDisplayName": "Competition", - "description": "General information about Mariam competition trading history.", - "dataSets": [ - { - "codeName": "Competition History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Competition.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTrading", - "moduleName": "History" - } - } - ] -} - - - diff --git a/Deprecated-Code/MasterApp/.gitignore b/Deprecated-Code/MasterApp/.gitignore deleted file mode 100644 index 0e1bd5c52..000000000 --- a/Deprecated-Code/MasterApp/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# dotenv environment variables file -.env -.env.prod - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store -client/package-lock.json - - -docker-compose\.demo\.yml - -docker-compose\.demo_with_prisma\.yml - -env_demo/ - -client/\.env-demo - -docker-compose\.demo\.prisma\.yml diff --git a/Deprecated-Code/MasterApp/CHANGELOG.md b/Deprecated-Code/MasterApp/CHANGELOG.md deleted file mode 100644 index 5d21e1458..000000000 --- a/Deprecated-Code/MasterApp/CHANGELOG.md +++ /dev/null @@ -1,34 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -## [Unreleased] -### Changed -- [List changes here for upcoming release] - -## 0.1.4 - 2019-01-17 -### Change -- Both: Migrate to superalgos.org - -## 0.1.3 - 2018-12-17 -### Change -- Client: Fix newsletter signup notification integration - -## 0.1.2 - 2018-12-16 -### Change -- Client: Upgrade Material-ui to fix webpack deepmerge import bug - -## 0.1.1 - 2018-12-16 -### Changed -- Update Master Client integration with Notifications Module - -## 0.1.0 - 2018-12-14 -### Added -- Notifications Module - Sending notifications such as emails, messages to client, etc -- Reintroduced CORS whitelist -- Created CHANGELOG — for the logging of changes - -### Removed -- Removed Sendgrid Mutations (moved to notifications module) - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/Deprecated-Code/MasterApp/CODE_OF_CONDUCT.md b/Deprecated-Code/MasterApp/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/MasterApp/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/MasterApp/CONTRIBUTING.md b/Deprecated-Code/MasterApp/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/MasterApp/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/MasterApp/LICENSE b/Deprecated-Code/MasterApp/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/MasterApp/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/MasterApp/README.md b/Deprecated-Code/MasterApp/README.md deleted file mode 100644 index 9b7ec142a..000000000 --- a/Deprecated-Code/MasterApp/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# MasterApp -The Master App is an application layer that wraps the client-side web modules of the various Superalgos platform modules (Users, Teams, KeyVault, Events, etc). -It provides, to these modules, an authentication layer and GraphQL data layer, among other commonly used utilities and APIs. - -Each client-side module is published as an NPM package and their function is best described as a -React higher-order component encasing their given module use cases. - -## Developing with the Master App - -### Getting Started - -Clone the repo. - -``` -git clone https://github.com/Superalgos/MasterApp.git -cd MasterApp -``` - -**Setup Server** - -``` -cd server -npm install -``` -Rename `.env.example` to `.env` - -Start the server: - -``` -npm run start -``` -The Graphql Playground will be viewable at [http://localhost:4100/graphql](http://localhost:4100/graphql) - -**Setup Client** - -In another CLI window, navigate to the MasterApp/client - -``` -cd ../client -npm install -``` - -Rename `.env.example` to `.env`. Get Auth0 Client ID from team member - -Start the client: - -``` -npm run dev - -# or if on windows -npm run dev_win -``` - -### Working with existing modules - -Using the `npm link` command, we can develop a module locally before publishing as a package on npm. - -In the client of the module to be developed: - -``` -npm link -``` - -Make note of the module package name — the name in the module's client package.json. *e.g. @superalgos/key-vault-client* - -In the Master app client dir link the developing module: - -``` -# in MasterApp/client -npm link - -e.g. -npm link @superalgos/key-vault-client -``` - -### Starting a new module - -*We are currently developing a boilerplate that will accelerate starting a new module and works easily within the MasterApp.* diff --git a/Deprecated-Code/MasterApp/client/.dockerignore b/Deprecated-Code/MasterApp/client/.dockerignore deleted file mode 100644 index 623b306c1..000000000 --- a/Deprecated-Code/MasterApp/client/.dockerignore +++ /dev/null @@ -1,12 +0,0 @@ -# Ignore files to be uploaded to the image -.env* -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/MasterApp/client/.env.local b/Deprecated-Code/MasterApp/client/.env.local deleted file mode 100644 index a510c90db..000000000 --- a/Deprecated-Code/MasterApp/client/.env.local +++ /dev/null @@ -1,12 +0,0 @@ -NODE_ENV=production -PORT=3100 - -PLATFORM_API_URL=http://localhost:4100/graphql -CANVAS_URL=http://localhost:4101/ - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ -AUTH0_CLIENTID=jfendNx2Vpa3LJa58x8lEmoPTG3nJV3B -AUTH0_CALLBACK_URL=http://localhost:3100/callback -AUTH0_LOGOUT_URL=http://localhost:3100 diff --git a/Deprecated-Code/MasterApp/client/.eslintrc b/Deprecated-Code/MasterApp/client/.eslintrc deleted file mode 100644 index fd6b2cc7d..000000000 --- a/Deprecated-Code/MasterApp/client/.eslintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "settings": { - "react": { - "pragma": "React", - "version": "16.0" - } - }, - "extends": ["standard", "standard-react"], - "rules":{ - "react/prop-types": 0 - }, - "env": { - "browser": true - } -} diff --git a/Deprecated-Code/MasterApp/client/.flowconfig b/Deprecated-Code/MasterApp/client/.flowconfig deleted file mode 100644 index a8cd5ce7f..000000000 --- a/Deprecated-Code/MasterApp/client/.flowconfig +++ /dev/null @@ -1,19 +0,0 @@ -[ignore] -node_modules - -[libs] -flow-typed - -[lints] - -[options] -module.name_mapper='.*\(.scss\)' -> 'empty/object' -module.name_mapper='.*\(.css\)' -> 'empty/object' -module.name_mapper='^src/\(.*\)$' -> '/src/\1' - -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FixMe - -[strict] diff --git a/Deprecated-Code/MasterApp/client/.gitignore b/Deprecated-Code/MasterApp/client/.gitignore deleted file mode 100644 index baabbad3b..000000000 --- a/Deprecated-Code/MasterApp/client/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env -.env.dev -.env.prod - -# Build folder js files -build* -dist/ - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store - -#yalc npm link -.yalc -yalc.lock diff --git a/Deprecated-Code/MasterApp/client/CODE_OF_CONDUCT.md b/Deprecated-Code/MasterApp/client/CODE_OF_CONDUCT.md deleted file mode 100644 index 05b430885..000000000 --- a/Deprecated-Code/MasterApp/client/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/MasterApp/client/CONTRIBUTING.md b/Deprecated-Code/MasterApp/client/CONTRIBUTING.md deleted file mode 100644 index 37f266969..000000000 --- a/Deprecated-Code/MasterApp/client/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos.org is an open source project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Company projects.** If you include your own IP � such as IP you created prior to working for the Company � into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Voluntary Works** All Company IP that you are involved with or create as part of your work for the Company is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Company to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. diff --git a/Deprecated-Code/MasterApp/client/Dockerfile b/Deprecated-Code/MasterApp/client/Dockerfile deleted file mode 100644 index 25f32ddd5..000000000 --- a/Deprecated-Code/MasterApp/client/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM duluca/minimal-nginx-web-server -COPY ./default /etc/nginx/sites-enabled/default -COPY ./build /var/www diff --git a/Deprecated-Code/MasterApp/client/Dockerfile.prod b/Deprecated-Code/MasterApp/client/Dockerfile.prod deleted file mode 100644 index e5d987b51..000000000 --- a/Deprecated-Code/MasterApp/client/Dockerfile.prod +++ /dev/null @@ -1,5 +0,0 @@ -FROM duluca/minimal-nginx-web-server -COPY ./default /etc/nginx/sites-enabled/default -COPY . /var/www -CMD 'nginx' - diff --git a/Deprecated-Code/MasterApp/client/LICENSE b/Deprecated-Code/MasterApp/client/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/MasterApp/client/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/MasterApp/client/babel.config.js b/Deprecated-Code/MasterApp/client/babel.config.js deleted file mode 100644 index dc0a08776..000000000 --- a/Deprecated-Code/MasterApp/client/babel.config.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = (api) => { - api.cache(true) - - const presets = [ - '@babel/preset-env', - '@babel/preset-react' - ] - - const plugins = [ - 'react-hot-loader/babel', - '@babel/plugin-proposal-class-properties', - '@babel/plugin-syntax-dynamic-import', - 'dynamic-import-node', - ['@babel/plugin-transform-runtime', { useESModules: true }] - ] - - return { - presets, - plugins - } -} diff --git a/Deprecated-Code/MasterApp/client/default b/Deprecated-Code/MasterApp/client/default deleted file mode 100644 index b2143fa25..000000000 --- a/Deprecated-Code/MasterApp/client/default +++ /dev/null @@ -1,27 +0,0 @@ -server { - listen 3100; - - root /var/www; - index index.html index.htm; - - # Make site accessible from http://localhost/ - server_name localhost; - - # Add 1 week expires header for static assets - location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { - expires 1w; - } - - location / { - # First attempt to serve request as file, then - # as directory, then fall back to redirecting to index.html - try_files $uri $uri/ /index.html; - } - - # If nginx can't find a file, fallback to the homepage. - location @root { - rewrite .* / redirect; - } - - include /etc/nginx/basic.conf; -} diff --git a/Deprecated-Code/MasterApp/client/docker-compose.prod.yml b/Deprecated-Code/MasterApp/client/docker-compose.prod.yml deleted file mode 100644 index 6a44ae3e0..000000000 --- a/Deprecated-Code/MasterApp/client/docker-compose.prod.yml +++ /dev/null @@ -1,30 +0,0 @@ -version: '3' -services: - node: - image: masterapp-client-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - args: - APP_PATH: /var/www - environment: - - NODE_ENV=production - - APP_PATH=/var/www - - PROD_GRAPHQL=https://platform-api-dev.advancedalgos.net/graphql - - VIRTUAL_HOST=platform-dev.advancedalgos.net - - LETSENCRYPT_HOST=platform-dev.advancedalgos.net - - LETSENCRYPT_EMAIL=ssl-certificates@advancedalgos.org - - VIRTUAL_PORT=3100 - container_name: masterapp-client-dev - tty: true - stdin_open: true - working_dir: ${APP_PATH} - command: ['nginx'] - restart: always - expose: - - 3100 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/MasterApp/client/html/favicon.ico b/Deprecated-Code/MasterApp/client/html/favicon.ico deleted file mode 100644 index 08c2369b0..000000000 Binary files a/Deprecated-Code/MasterApp/client/html/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/html/index.html b/Deprecated-Code/MasterApp/client/html/index.html deleted file mode 100644 index a166aa46d..000000000 --- a/Deprecated-Code/MasterApp/client/html/index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - Superalgos Platform - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - \ No newline at end of file diff --git a/Deprecated-Code/MasterApp/client/package.json b/Deprecated-Code/MasterApp/client/package.json deleted file mode 100644 index 2a8bcf887..000000000 --- a/Deprecated-Code/MasterApp/client/package.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "name": "@superalgos/master-app", - "version": "0.1.0", - "description": "Responsible for loading all web modules and running them.", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/MasterApp.git" - }, - "bugs": { - "url": "https://github.com/Superalgos/MasterApp/issues" - }, - "homepage": "https://github.com/Superalgos/MasterApp#readme", - "main": "src/index.js", - "scripts": { - "dev": "NODE_ENV=development webpack-dev-server --hot --port 3100 --config ./webpack.config.js", - "build": "NODE_ENV=production webpack --mode production --config ./webpack.config.js", - "dev_win": "webpack-dev-server --hot --port 3100 --config ./webpack.config.js", - "build_win": "webpack --mode production --config ./webpack.config.js", - "lint": "prettier-standard 'src/**/*.js'", - "flow-coverage": "npm run flow-coverage:build && npm run flow-coverage:open", - "flow-coverage:build": "flow-coverage-report --strict-coverage ", - "flow-coverage:open": "concurrently \"cd flow-coverage && http-server -c-1 \" \"open http://127.0.0.1:8080\"", - "flow": "flow" - }, - "devDependencies": { - "@babel/core": "^7.1.2", - "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.1.0", - "@babel/preset-env": "^7.1.0", - "@babel/preset-react": "^7.0.0", - "@superalgos/cockpit-client": "0.0.5", - "@superalgos/events-client": "0.0.2", - "@superalgos/key-vault-client": "0.0.32", - "@superalgos/logs-client": "0.0.1", - "@superalgos/operations-client": "0.0.41", - "@superalgos/strategizer-client": "0.0.18", - "@superalgos/teams-client": "0.0.40", - "@superalgos/users-client": "0.0.27", - "@superalgos/web-components": "0.0.23", - "autoprefixer": "^9.2.0", - "babel-loader": "^8.0.4", - "babel-preset-flow": "6.23.0", - "connect-history-api-fallback": "^1.5.0", - "css-loader": "^1.0.0", - "debug": "^4.1.0", - "dotenv-webpack": "^1.5.7", - "eslint": "^5.7.0", - "eslint-config-standard": "^12.0.0", - "eslint-config-standard-react": "^7.0.2", - "eslint-plugin-flowtype": "^2.42.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^7.0.1", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "eslint-plugin-standard": "^4.0.0", - "file-loader": "^2.0.0", - "flow-bin": "0.79.1", - "html-webpack-harddisk-plugin": "^0.2.0", - "html-webpack-plugin": "^3.2.0", - "koa-connect": "^2.0.1", - "node-sass": "^4.12.0", - "postcss-loader": "^3.0.0", - "prettier-standard": "^8.0.1", - "react-hot-loader": "^4.3.11", - "script-ext-html-webpack-plugin": "^2.0.1", - "webpack": "^4.20.2", - "webpack-cli": "^3.1.2", - "webpack-dev-server": "^3.1.14", - "webpack-merge": "^4.1.4" - }, - "standard": { - "parser": "babel-eslint", - "ignore": [ - "dist/", - "build/" - ] - }, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.8", - "@fortawesome/free-brands-svg-icons": "^5.5.0", - "@fortawesome/free-solid-svg-icons": "^5.5.0", - "@fortawesome/react-fontawesome": "^0.1.3", - "@material-ui/core": "^3.6.2", - "@material-ui/icons": "^3.0.1", - "apollo-cache-inmemory": "^1.3.5", - "apollo-client": "^2.5.1", - "apollo-link": "^1.2.3", - "apollo-link-context": "^1.0.9", - "apollo-link-error": "^1.1.1", - "apollo-link-http": "^1.5.5", - "auth0-lock": "^11.10.0", - "babel-plugin-dynamic-import-node": "^2.2.0", - "classnames": "^2.2.6", - "esm": "^3.2.25", - "graphql": "^14.0.2", - "graphql-tag": "^2.10.0", - "jwt-decode": "^2.2.0", - "mini-css-extract-plugin": "^0.4.4", - "npm": "^6.9.0", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "prop-types": "^15.6.2", - "query-string": "^6.2.0", - "react": "^16.8.6", - "react-apollo": "^2.5.2", - "react-dom": "^16.8.4", - "react-redux": "^5.1.0", - "react-router-dom": "^4.3.1", - "redux": "^4.0.1", - "uglifyjs-webpack-plugin": "^2.0.1" - } -} diff --git a/Deprecated-Code/MasterApp/client/postcss.config.js b/Deprecated-Code/MasterApp/client/postcss.config.js deleted file mode 100644 index 88752c6cb..000000000 --- a/Deprecated-Code/MasterApp/client/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - require('autoprefixer') - ] -} diff --git a/Deprecated-Code/MasterApp/client/src/App.js b/Deprecated-Code/MasterApp/client/src/App.js deleted file mode 100644 index 902a03bb8..000000000 --- a/Deprecated-Code/MasterApp/client/src/App.js +++ /dev/null @@ -1,101 +0,0 @@ -import { ApolloProvider } from 'react-apollo' -import React from 'react' -import { Route, BrowserRouter, Switch } from 'react-router-dom' -import { hot } from 'react-hot-loader' - -import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider' -import CssBaseline from '@material-ui/core/CssBaseline' -import { withStyles } from '@material-ui/core/styles' -import { theme, globalStyles } from './styles' -import './styles/styles.scss' - -import { client } from './graphql/apollo' -import Auth from './auth' - -import { Layout, Home, Charts, Callback, EmailSignupConfirm } from './views' - -import Users from '@superalgos/users-client' -import Teams from '@superalgos/teams-client' -import Events from '@superalgos/events-client' -import KeyVault from '@superalgos/key-vault-client' -import Operations from '@superalgos/operations-client' -import Strategizer from '@superalgos/strategizer-client' -import Logs from '@superalgos/logs-client' -import Cockpit from '@superalgos/cockpit-client' - -export const auth = new Auth( - result => console.log('Authentication successful.'), - client -) - -export const MasterApp = props => ( - - - - - - - - { - return - }} - /> - { - console.log(props.location) - return ( - - ) - }} - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - - - - -) - -const StyledMasterApp = withStyles(globalStyles)(MasterApp) -export default hot(module)(StyledMasterApp) diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos-platform.jpg b/Deprecated-Code/MasterApp/client/src/assets/superalgos-platform.jpg deleted file mode 100644 index 709e0ba60..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos-platform.jpg and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.pdf b/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.pdf deleted file mode 100644 index 11465c671..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.pdf and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.svg b/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.svg deleted file mode 100644 index 1fc7d8615..000000000 --- a/Deprecated-Code/MasterApp/client/src/assets/superalgos/Superalgos-logo-horz-dark.svg +++ /dev/null @@ -1 +0,0 @@ -Superalgos-logo-horz-dark \ No newline at end of file diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-192x192.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-192x192.png deleted file mode 100644 index 150043a06..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-512x512.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-512x512.png deleted file mode 100644 index d98b9ce8d..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/apple-touch-icon.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/apple-touch-icon.png deleted file mode 100644 index 95ec62746..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/apple-touch-icon.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/browserconfig.xml b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/browserconfig.xml deleted file mode 100644 index b3930d0f0..000000000 --- a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-16x16.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-16x16.png deleted file mode 100644 index 99bda00af..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-16x16.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-32x32.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-32x32.png deleted file mode 100644 index 08c2369b0..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon-32x32.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon.ico b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon.ico deleted file mode 100644 index cd2c5d6af..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/html_code.html b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/html_code.html deleted file mode 100644 index 5474df4e2..000000000 --- a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/html_code.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/mstile-150x150.png b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/mstile-150x150.png deleted file mode 100644 index 78a06c05a..000000000 Binary files a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/mstile-150x150.png and /dev/null differ diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/safari-pinned-tab.svg b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/safari-pinned-tab.svg deleted file mode 100644 index db3ba7cde..000000000 --- a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/safari-pinned-tab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/site.webmanifest b/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/site.webmanifest deleted file mode 100644 index 4cb663419..000000000 --- a/Deprecated-Code/MasterApp/client/src/assets/superalgos/favicon/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Superalgos", - "short_name": "Superalgos", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/Deprecated-Code/MasterApp/client/src/auth/Auth0.js b/Deprecated-Code/MasterApp/client/src/auth/Auth0.js deleted file mode 100644 index 37d937578..000000000 --- a/Deprecated-Code/MasterApp/client/src/auth/Auth0.js +++ /dev/null @@ -1,7 +0,0 @@ -export const AUTH_CONFIG = { - api_audience: process.env.AUTH0_AUDIENCE, - domain: process.env.AUTH0_DOMAIN, - clientId: process.env.AUTH0_CLIENTID, - callbackUrl: process.env.AUTH0_CALLBACK_URL, - logoutUrl: process.env.AUTH0_LOGOUT_URL -} diff --git a/Deprecated-Code/MasterApp/client/src/auth/index.js b/Deprecated-Code/MasterApp/client/src/auth/index.js deleted file mode 100644 index 7a654016d..000000000 --- a/Deprecated-Code/MasterApp/client/src/auth/index.js +++ /dev/null @@ -1,326 +0,0 @@ -import Auth0Lock from 'auth0-lock' -import gql from 'graphql-tag' -import { getItem, setItem } from '../utils/local-storage' -import { validObject, deleteCookie, slugify, isEmpty } from '../utils/js-helpers' -import Log from '../utils/log' -import { client } from '../graphql/apollo' -import { AUTH_CONFIG } from './Auth0' // create by renaming Auth0.sample.js to Auth0.js and setting vars - -const AUTHENTICATE = gql` - mutation authenticate($idToken: String!) { - users_Authenticate(idToken: $idToken) { - alias - authId - } - } -` - -const VERIFY_TEAM_INVITE = gql` - mutation verifyTeamInvite($token: String!) { - verifyTeamInvite(token: $token) { - email - team { - slug - } - } - } -` -const GET_TEAMS_BY_OWNER = gql` - query teamsByOwnerQuery { - teams_TeamsByOwner { - id - name - slug - } - } -` - -const CREATE_TEAM = gql` - mutation CreateTeamMutation($name: String!, $slug: String!, $botName: String!, $botSlug: String!) { - teams_CreateTeam(name: $name, slug: $slug, botName: $botName, botSlug: $botSlug) { - id - name - slug - } - } -` - -export const defaultOptions = { - oidcConformant: true, - autoclose: true, - allowedConnections: ['Username-Password-Authentication', 'github'], - auth: { - sso: true, - redirectUrl: window.location.origin + '/callback', - responseType: 'token id_token', - audience: `${AUTH_CONFIG.api_audience}`, - params: { - scope: `openid profile email user_metadata app_metadata picture` - } - }, - theme: { - logo: 'https://aadevelop.blob.core.windows.net/module-master/assets/logos/Superalgos-mark-auth0-lock.png', - primaryColor: '#e3493c' - }, - languageDictionary: { - title: 'Superalgos Platform' - }, - avatar: null, - mustAcceptTerms: true -} - -export const inviteOptions = { - oidcConformant: true, - autoclose: false, - allowedConnections: ['Username-Password-Authentication', 'github'], - allowShowPassword: true, - auth: { - sso: false, - redirectUrl: window.location.origin + '/callback', - responseType: 'token id_token', - audience: `${AUTH_CONFIG.api_audience}`, - params: { - state: '', - scope: `email` - } - }, - prefill: { email: '' }, - languageDictionary: { - title: 'Superalgos Platform' - }, - avatar: null, - mustAcceptTerms: true -} - -let lock = new Auth0Lock( - AUTH_CONFIG.clientId, - AUTH_CONFIG.domain, - defaultOptions -) - -class Auth { - constructor(cb, apolloClient) { - this.handleAuthentication() - // binds functions to keep this context - this.apolloClient = apolloClient - this.cb = cb.bind(this) - this.login = this.login.bind(this) - this.loginInvite = this.loginInvite.bind(this) - this.logout = this.logout.bind(this) - this.isAuthenticated = this.isAuthenticated.bind(this) - this.checkSession = this.checkSession.bind(this) - } - - login() { - // Call the show method to display the widget. - Log.info('logging in') - lock.show() - } - - async loginInvite(jwt) { - let email - let team - try { - const data = await client.mutate({ - mutation: VERIFY_TEAM_INVITE, - variables: { token: jwt } - }) - - Log.info('auth.loginInvite') - Log.info(await data.data.verifyTeamInvite) - - setItem('invite', JSON.stringify(data.data.verifyTeamInvite)) - - email = data.data.verifyTeamInvite.email - team = data.data.verifyTeamInvite.team.slug - } catch (err) { - return Log.error(err, 'loginInvite err: ') - } - inviteOptions.prefill.email = email - inviteOptions.auth.params.state = `${email}|${team}` - let lockInvite = new Auth0Lock( - AUTH_CONFIG.clientId, - AUTH_CONFIG.domain, - inviteOptions - ) - lockInvite.show() - } - - handleAuthentication() { - // Add a callback for Lock's `authenticated` event - lock.on('authenticated', async (authResult) => { - if (authResult && authResult.accessToken && authResult.idToken) { - // Set the time that the access token will expire at - let expiresAt = JSON.stringify( - authResult.expiresIn * 1000 + new Date().getTime() - ) - const data = { - status: `success`, - accessToken: authResult.accessToken, - idToken: authResult.idToken, - expiresAt - } - Log.info('setSession idTokenPayload:') - Log.info(authResult.idTokenPayload) - - try { - setItem('access_token', authResult.accessToken) - setItem('id_token', authResult.idToken) - setItem('expires_at', expiresAt) - setItem('user', JSON.stringify(user)) - await this.signinOrCreateAccount({ ...data }) - this.cb(data) - const user = { - authId: authResult.idTokenPayload.sub, - alias: authResult.idTokenPayload.nickname - } - - setItem('access_token', authResult.accessToken) - setItem('id_token', authResult.idToken) - setItem('expires_at', expiresAt) - setItem('user', JSON.stringify(user)) - window.location.href = '/' - return true - } catch (err) { - console.log('Sign in or create account error.') - window.localStorage.removeItem('access_token') - window.localStorage.removeItem('id_token') - window.localStorage.removeItem('expires_at') - window.localStorage.removeItem('user') - return false - } - } - }) - // Add a callback for Lock's `authorization_error` event - lock.on('authorization_error', err => { - const data = { status: `error`, errMessage: err.error } - this.cb(data) - }) - } - - checkSession() { - return new Promise((resolve, reject) => { - // Add a callback for Lock's `authenticated` event - lock.checkSession( - { - responseType: 'token id_token', - audience: AUTH_CONFIG.api_audience, - scope: 'openid email profile', - connection: 'github', - prompt: 'none' - }, - function (err, authResult) { - if (!err) { - resolve(authResult) - } else { - reject(err) - } - } - ) - }) - } - - async signinOrCreateAccount({ accessToken, idToken, expiresAt }) { - const response = await client.mutate({ - mutation: AUTHENTICATE, - variables: { idToken } - }) - Log.info('auth.signinOrCreateAccount data:') - Log.info(response) - const user = { - authId: response.data.users_Authenticate.authId, - alias: response.data.users_Authenticate.alias - } - if (validObject(user, 'alias')) { - Log.info(user.alias) - const existingTeam = await client.query({ - query: GET_TEAMS_BY_OWNER - }) - Log.info(existingTeam) - Log.info(existingTeam.data.teams_TeamsByOwner) - if (validObject(existingTeam.data, 'teams_TeamsByOwner') && isEmpty(existingTeam.data.teams_TeamsByOwner)) { - const slug = slugify(user.alias) - const newTeam = await client.mutate({ - mutation: CREATE_TEAM, - variables: { - name: slug, - slug: slug, - botName: `bot-${slug}`, - botSlug: `bot-${slug}` - } - }) - Log.info(newTeam) - Log.info(newTeam.data.teams_CreateTeam) - if (!validObject(newTeam.data, 'teams_CreateTeam') || isEmpty(newTeam.data.teams_CreateTeam)) { - throw newTeam.data.error - } - Log.info('Team and Bot Creation Success') - } - } - } - - logout() { - // Clear access token and ID token from local storage - window.localStorage.removeItem('access_token') - window.localStorage.removeItem('user') - window.localStorage.removeItem('name') - window.localStorage.removeItem('ecosystem') - deleteCookie('ajs_anonymous_id') - deleteCookie('ajs_user_id') - deleteCookie('current_tenant') - - lock.logout({ returnTo: AUTH_CONFIG.logoutUrl }) - } - - async isAuthenticated() { - // check session and run Auth0 SS0 - const getUser = await getItem('authUser') - const getExpires = await getItem('expires_at') - let user = JSON.parse(getUser) - - if (new Date().getTime() < getExpires * 1000) { - console.log( - 'handleAuth.user exp: ', - user, - getExpires, - window.location.href - ) - - return user - } - - // TODO improve to check the session validation on client side - const checkSSO = await this.checkSession() - .then(result => { - console.log('handleAuth.checksessions: ', result) - const user = { - authId: result.idTokenPayload.sub, - alias: result.idTokenPayload.nickname - } - setItem('authUser', JSON.stringify(user)) - // user confirmed, log into client - this.setSession(result) - return result.idTokenPayload - }) - .catch(err => { - if (err.error === 'login_required') { - // If graphql error, update session - // otherwise send to login - // return this.login() - } - return err - }) - - if (/manage|profile|create|dashboard/.test(window.location.href) && !user) { - this.login() - } - - if (validObject(checkSSO, 'error')) { - return false - } else { - return checkSSO - } - } -} - -export default Auth diff --git a/Deprecated-Code/MasterApp/client/src/graphql/EcosystemQuery.js b/Deprecated-Code/MasterApp/client/src/graphql/EcosystemQuery.js deleted file mode 100644 index 5f0ab6ef4..000000000 --- a/Deprecated-Code/MasterApp/client/src/graphql/EcosystemQuery.js +++ /dev/null @@ -1,121 +0,0 @@ -import gql from 'graphql-tag' - -export const ECOSYSTEM_QUERY = gql` - query { - web_GetEcosystem { - id - devTeams { - codeName - displayName - host { - url - storage - container - accessKey - } - bots { - codeName - displayName - type - profilePicture - repo - configFile - products{ - codeName - displayName - description - dataSets{ - codeName - type - validPeriods - filePath - fileName - dataRange{ - filePath - fileName - } - } - exchangeList{ - name - } - plotter{ - devTeam - codeName - moduleName - repo - } - } - } - plotters { - codeName - displayName - modules{ - codeName - moduleName - description - profilePicture - panels{ - codeName - moduleName - event - } - } - repo - configFile - } - } - hosts { - codeName - displayName - host { - url - storage - container - accessKey - } - competitions { - codeName - displayName - description - startDatetime - finishDatetime - formula - plotter{ - devTeam - codeName - host{ - url - storage - container - accessKey - } - moduleName - repo - } - rules - prizes - participants - repo - configFile - } - plotters { - codeName - displayName - modules{ - codeName - moduleName - description - profilePicture - panels{ - codeName - moduleName - event - } - } - repo - configFile - } - } - } - } -` diff --git a/Deprecated-Code/MasterApp/client/src/graphql/apollo.js b/Deprecated-Code/MasterApp/client/src/graphql/apollo.js deleted file mode 100644 index 7a194d4cd..000000000 --- a/Deprecated-Code/MasterApp/client/src/graphql/apollo.js +++ /dev/null @@ -1,92 +0,0 @@ -import { ApolloClient } from 'apollo-client' -import { HttpLink } from 'apollo-link-http' -import { InMemoryCache } from 'apollo-cache-inmemory' -import { ApolloLink, Observable } from 'apollo-link' -import { onError } from 'apollo-link-error' -import { setContext } from 'apollo-link-context' - -import { getItem } from '../utils/local-storage' - -const httpLink = new HttpLink({ uri: process.env.PLATFORM_API_URL }) - -const authRetryLink = onError( - ({ graphQLErrors, networkError, operation, forward }) => { - if (graphQLErrors) { - // User access token has expired - // console.log('authLink: ', graphQLErrors) // check for error message to intercept and resend with Auth0 access token - if (graphQLErrors[0].message === 'Context creation failed: jwt expired') { - window.localStorage.removeItem('access_token') - window.localStorage.removeItem('user') - window.localStorage.removeItem('name') - location.reload() - } else if (graphQLErrors[0].message === 'Not logged in') { - // We assume we have auth0 access token needed to run the async request - // Let's refresh token through async request - return new Observable(observer => { - getItem('access_token') - .then(accessToken => { - operation.setContext(({ headers = {} }) => ({ - headers: { - // Re-add old headers - ...headers, - // Switch out old access token for new one - Authorization: `Bearer ${accessToken}` || null - } - })) - }) - .then(() => { - const subscriber = { - next: observer.next.bind(observer), - error: observer.error.bind(observer), - complete: observer.complete.bind(observer) - } - - // Retry last failed request - forward(operation).subscribe(subscriber) - - // TODO improve with redux - location.reload() - }) - .catch(error => { - // No auth0 access token available, we force user to login - observer.error(error) - }) - }) - } - } - } -) - -const authLink = setContext((_, { headers }) => { - // get the authentication token from local storage if it exists - const token = localStorage.getItem('access_token') - return { - headers: { - ...headers, - Authorization: token ? `Bearer ${token}` : `` - } - } -}) - -const cache = new InMemoryCache({ addTypename: false }).restore(window.__APOLLO_STATE__) - -const defaultOptions = { - watchQuery: { - fetchPolicy: 'cache-and-network', - errorPolicy: 'all' - }, - query: { - fetchPolicy: 'network-only', - errorPolicy: 'all' - }, - mutate: { - errorPolicy: 'all' - } -} - -export const client = new ApolloClient({ - link: ApolloLink.from([authRetryLink, authLink, httpLink]), // replaced link with httpLink - cache, - defaultOptions, - connectToDevTools: true -}) diff --git a/Deprecated-Code/MasterApp/client/src/index.js b/Deprecated-Code/MasterApp/client/src/index.js deleted file mode 100644 index acbab7067..000000000 --- a/Deprecated-Code/MasterApp/client/src/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable no-unused-vars */ -import React from 'react' -import ReactDOM from 'react-dom' -import MasterApp from './App' -import { createStore } from 'redux' -import { Provider } from 'react-redux' -import rootReducer from './reducers/rootReducer' - -const store = createStore(rootReducer) - -if (process.env.NODE_ENV !== 'production') { - window.localStorage.setItem('debug', 'advanced-algos:*') -} - -ReactDOM.render( - - - , - document.getElementById('masterApp') -) diff --git a/Deprecated-Code/MasterApp/client/src/reducers/rootReducer.js b/Deprecated-Code/MasterApp/client/src/reducers/rootReducer.js deleted file mode 100644 index 4edf6109d..000000000 --- a/Deprecated-Code/MasterApp/client/src/reducers/rootReducer.js +++ /dev/null @@ -1,27 +0,0 @@ -const initState = { - context: { - masterApp: { - footer: { - visible: true - } - } - } -} - -const rootReducer = (state = initState, action) => { - if (action.type === 'HIDE_FOOTER') { - let newState = JSON.parse(JSON.stringify(state)) - newState.context.masterApp.footer.visible = false - return newState - } - - if (action.type === 'SHOW_FOOTER') { - let newState = JSON.parse(JSON.stringify(state)) - newState.context.masterApp.footer.visible = true - return newState - } - - return state -} - -export default rootReducer diff --git a/Deprecated-Code/MasterApp/client/src/styles/index.js b/Deprecated-Code/MasterApp/client/src/styles/index.js deleted file mode 100644 index e4730a3bf..000000000 --- a/Deprecated-Code/MasterApp/client/src/styles/index.js +++ /dev/null @@ -1,81 +0,0 @@ -import { createMuiTheme } from '@material-ui/core/styles' - -export const theme = createMuiTheme({ - breakpoints: { - values: { - xs: 0, - sm: 768, - md: 992, - lg: 1200, - xl: 1920 - } - }, - palette: { - primary: { - main: '#303036', - light: '#acb4b6' - }, - secondary: { - main: '#CC5835', - light: '#e3493c' - } // <--RUSTED_RED ~ GOLDEN_ORANGE --> #F0A202 - }, - typography: { - fontFamily: '"Saira","Saira Condensed", sans-serif', - useNextVariants: true - }, - overrides: { - Paper: { - root: { - backgroundColor: '#ffffff' - }, - elevation: 0, - square: true - } - } -}) - -export const globalStyles = theme => ({ - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - appBar: { - position: 'relative' - }, - toolbarTitle: { - flex: 1 - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - [theme.breakpoints.up(900 + theme.spacing.unit * 3 * 2)]: { - width: 900, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardHeader: { - backgroundColor: theme.palette.grey[200] - }, - cardPricing: { - display: 'flex', - justifyContent: 'center', - alignItems: 'baseline', - marginBottom: theme.spacing.unit * 2 - }, - cardActions: { - [theme.breakpoints.up('sm')]: { - paddingBottom: theme.spacing.unit * 2 - } - } -}) - -export default theme diff --git a/Deprecated-Code/MasterApp/client/src/styles/styles.scss b/Deprecated-Code/MasterApp/client/src/styles/styles.scss deleted file mode 100644 index 3fdd14f90..000000000 --- a/Deprecated-Code/MasterApp/client/src/styles/styles.scss +++ /dev/null @@ -1,495 +0,0 @@ -$break-lg: 1200px; -$break-md: 992px; -$break-sm: 768px; -$break-xs: 540px; - -$height-nav-bar: 131px; - -$height-not-top: 87px; - -$image-height-big: 60px; -$image-height-small: 45px; - -$text-height: 25px; - -$mobile-handle-height: 45px; - -$transition-time: 0.3s; - -$advanced-algos-red: rgb(245,88,88); - -@function strip-unit($value) { - @return $value / ($value * 0 + 1); -} - -@mixin fluid-type($min-vw, $max-vw, $min-font-size, $max-font-size) { - $u1: unit($min-vw); - $u2: unit($max-vw); - $u3: unit($min-font-size); - $u4: unit($max-font-size); - - @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 { - & { - - font-size: $min-font-size; - @media screen and (min-width: $min-vw) { - font-size: calc(#{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} * ((100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)})); - } - - @media screen and (min-width: $max-vw) { - font-size: $max-font-size; - } - } - } -} - -body{ - padding-right: 0 !important; - overflow-y: scroll; - - &::-webkit-scrollbar-track { - border: 1px solid #000; - padding: 2px 0; - background-color: #404040; - } - - &::-webkit-scrollbar { - width: 10px; - } - - &::-webkit-scrollbar-thumb { - border-radius: 10px; - box-shadow: inset 0 0 6px rgba(0,0,0,.3); - background-color: #737272; - border: 1px solid #000; - } - pre { - white-space: pre-wrap; - margin: 0; - } -} - -.container{ - padding: 15px 15px 15px 15px; - margin-left: auto; - margin-right: auto; - - width: 100%; - @media screen and (min-width: $break-sm) { - width: 768px; - } - @media screen and (min-width: $break-md) { - width: 970px; - } - @media screen and (min-width: $break-lg) { - width: 1170px; - } -} - -header.menu{ - transition: $transition-time; - &.notOnTop{ - background-color: rgba(0, 0, 0, 0.6); - border-bottom: 1px solid rgba(210, 217, 224, 0.5); - height: $height-not-top; - .container{ - border-bottom: 0px; - img.logo{ - margin-top: ( $height-not-top - $image-height-small ) / 2; - height: $image-height-small; - } - .mobileHandle{ - margin-top: ( $height-not-top - $mobile-handle-height ) / 2 ; - margin-bottom: ( $height-not-top - $mobile-handle-height ) / 2 ; - } - nav.links{ - @media screen and (min-width: $break-lg) { - ul.primaryMenu{ - li.primaryLink{ - padding-top: ( $height-not-top - $text-height ) / 2; - padding-bottom: ( $height-not-top - $text-height ) / 2; - } - } - } - } - } - } - position: fixed; - height: $height-nav-bar; - width: 100vw; - z-index: 125; - - .container{ - padding-top: 0px; - padding-bottom: 0px; - height: 100%; - border-bottom: 1px solid rgba(142, 144, 146, 0.3); - img.logo{ - transition: $transition-time; - margin-top: ( $height-nav-bar - $image-height-big ) / 2 ; - height: $image-height-big; - @media screen and (max-width: $break-xs) { - height: $image-height-small; - margin-top: ( $height-nav-bar - $image-height-small ) / 2 ; - } - } - .mobileHandle.openedMobile{ - &:before{ - content: ""; - position: absolute; - left: 16px; - top: 17px; - width: 1em; - height: 0.15em; - background: $advanced-algos-red; - box-shadow: - 0 0.25em 0 0 $advanced-algos-red, - 0 0.5em 0 0 $advanced-algos-red; - } - } - .mobileHandle:not(.openedMobile){ - &:before{ - content: ""; - position: absolute; - left: 16px; - top: 17px; - width: 1em; - height: 0.15em; - background: rgba(210, 217, 224, 0.9); - box-shadow: - 0 0.25em 0 0 rgba(210, 217, 224, 0.9), - 0 0.5em 0 0 rgba(210, 217, 224, 0.9); - } - } - .mobileHandle{ - &.openedMobile{ - color: $advanced-algos-red; - border: 1px solid $advanced-algos-red; - } - transition: $transition-time; - display: block; - height: $mobile-handle-height; - line-height: $mobile-handle-height; - border: 1px solid rgba(210, 217, 224, 0.5); - text-transform: uppercase; - color: rgba(210, 217, 224, 0.9); - text-align: center; - float: right; - width: auto; - clear: none; - margin-top: ( $height-nav-bar - $mobile-handle-height ) / 2 ; - margin-bottom: ( $height-nav-bar - $mobile-handle-height ) / 2 ; - margin-left: 0 !important; - margin-right: 20px; - margin: 41px 0 42px 20px; - padding: 0 18px 0 40px; - position: relative; - text-decoration: none; - border-radius: 31px; - @media screen and (min-width: $break-lg) { - display: none; - } - } - nav.links{ - @media screen and (max-width: $break-lg - 1) { - display: none; - &.openedMobile{ - display: block; - } - ul.primaryMenu{ - padding-left: 20px; - padding-right: 20px; - background-color: rgba(0, 0, 0, 0.6); - font-family: 'Saira'; - font-size: 12px; - font-weight: 700; - line-height: $text-height; - text-transform: uppercase; - list-style: none; - li.primaryLink{ - min-width: 240px; - min-height: 50px; - border-bottom: 1px solid white; - &.hasChildren{ - &:after{ - content: ''; - float: right; - border: solid white; - border-width: 0 2px 2px 0; - padding: 3px; - margin-top: -32px; - margin-right: 7px; - transform: rotate(45deg); - -webkit-transform: rotate(45deg); - } - } - &:last-child{ - border-bottom: 0; - } - a{ - text-transform: uppercase; - display: block; - font-size: 13px; - height: 50px; - line-height: 50px; - font-weight: 700; - letter-spacing: 1px; - padding: 0 40px 0 30px; - text-decoration: none; - color: white; - &:hover{ - color: $advanced-algos-red; - } - svg{ - padding-top: 10px; - } - } - ul.subMenu{ - display: none; - list-style: none; - } - &.selected{ - ul.subMenu{ - display: block; - } - } - } - } - } - @media screen and (min-width: $break-lg) { - display: block; - float: right; - ul.primaryMenu{ - margin: 0 4px 0 0; - list-style: none; - - font-family: 'Saira'; - font-size: 12px; - font-weight: 700; - line-height: $text-height; - text-transform: uppercase; - li.primaryLink{ - transition: $transition-time; - display: block; - float: left; - position: relative; - padding-top: ( $height-nav-bar - $text-height ) / 2; - padding-bottom: ( $height-nav-bar - $text-height ) / 2; - padding-left: 10px; - padding-right: 10px; - &.hasChildren{ - &:after{ - content: ''; - border: solid white; - border-width: 0 2px 2px 0; - display: inline-block; - padding: 3px; - margin-bottom: 2px; - transform: rotate(45deg); - -webkit-transform: rotate(45deg); - } - >a{ - margin-right:6px; - } - } - a{ - color: white; - &:hover{ - color: $advanced-algos-red; - } - text-decoration: none; - &.selected{ - color: $advanced-algos-red; - } - svg{ - padding-top: 10px; - margin-bottom: -2px; - &.tutorialIcon { - padding-top: 0px; - } - } - } - ul.subMenu{ - display: none; - position: absolute; - top: 100%; - left: 0; - - padding: 18px 30px; - list-style: none; - font-family: 'Saira'; - font-size: 12px; - font-weight: 300; - line-height: $text-height; - - min-width: 240px; - background-color: rgba(0, 0, 0, 0.6); - li{ - height: 30px; - } - } - &.selected{ - &>a{ - color: $advanced-algos-red; - } - ul.subMenu{ - display: block; - } - } - } - } - } - } - } -} - -.bannerTopBar{ - background-position: center center; - background-size: cover; - background-image: url(https://superalgos.org/img/photos/teams.jpg); - width: 100%; - height: 220px; - &.big{ - height: 100vh; - .caption{ - display: block; - top: 42%; - } - &.landing { - .caption{ - display: block; - top: 25%; - } - } - } - &.medium{ - height: 50vh; - .caption{ - display: block; - top: 46%; - } - } - .caption{ - display: none; - position: relative; - top: 50%; - font-family: Saira; - .title{ - color: white; - font-size: 64px; - line-height: 78px; - font-weight: 100; - @include fluid-type($break-xs, $break-lg, 26px, 64px); - } - .text{ - color: white; - line-height: 30px; - font-weight: 600; - padding: 2em 20% 0.5em; - @include fluid-type($break-xs, $break-lg, 18px, 20px); - } - .instructions{ - h4{ - color: white; - margin-top: 25px; - margin-bottom: 10px; - font-size: 1.6em; - a { - color: white; - text-decoration: none; - font-size: 0.9em; - &:hover { - color: #f55858; - } - } - } - h5{ - color: white; - margin-top:25px; - } - h6{ - color: white; - font-weight: 600; - a { - color: white; - text-decoration: none; - &:hover { - color: #f55858; - } - } - } - } - } -} - -.homePage.container{ - padding-top: 70px; - padding-bottom: 70px; - .title{ - padding: 0 0 10px 0; - @include fluid-type($break-xs, $break-lg, 24px, 45px); - line-height: 55px; - padding: 40px 0 0.5em 0; - font-weight: 100; - } - .subtitle{ - padding-bottom: 5px; - @include fluid-type($break-xs, $break-lg, 18px, 20px); - line-height: 19px; - font-weight: 100; - text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 1em; - - } - .column{ - vertical-align: top; - display: inline-block; - width: 100%; - padding: 10px; - @media screen and (min-width: $break-sm) { - width: 50%; - } - p{ - font-size: 16px; - line-height: 25px; - margin-bottom: 0.75em; - margin-top: 0.75em; - font-size: 16px; - font-weight: 300; - color: #5a6266; - text-size-adjust: 100%; - a{ - text-decoration: none; - transition: all 0.3s ease-in-out 0s; - color: #CC5835; - } - } - } -} - -.toTop{ - position: fixed; - height: 40px; - width: 40px; - bottom: 20px; - right: 20px; - z-index: 1; - background-color: #1a1a1a; - border-radius: 100%; - &:after{ - content: ''; - float: right; - border: solid white; - border-width: 0 3px 3px 0; - padding: 3px; - margin-top: 18px; - margin-right: 15px; - transform: rotate(-135deg); - -webkit-transform: rotate(-135deg); - } -} - -h1, h2, h3, h4, h5, h6, p, a, ul li, ol li, blockquote { - font-family: "Saira","Saira Condensed", sans-serif; -} diff --git a/Deprecated-Code/MasterApp/client/src/utils/ecosystem.js b/Deprecated-Code/MasterApp/client/src/utils/ecosystem.js deleted file mode 100644 index 8c7e49780..000000000 --- a/Deprecated-Code/MasterApp/client/src/utils/ecosystem.js +++ /dev/null @@ -1,12 +0,0 @@ -import { client } from '../graphql/apollo' -import { ECOSYSTEM_QUERY } from '../graphql/EcosystemQuery' -import Log from './log' - -export async function setInitialEcosystem() { - try { - const ecosystem = await client.query({ query: ECOSYSTEM_QUERY }) - window.localStorage.setItem('ecosystem', JSON.stringify(ecosystem.data.web_GetEcosystem)) - } catch (error) { - Log.error('Error getting the ecosystem: ' + error) - } - } diff --git a/Deprecated-Code/MasterApp/client/src/utils/js-helpers.js b/Deprecated-Code/MasterApp/client/src/utils/js-helpers.js deleted file mode 100644 index 7db4cb28a..000000000 --- a/Deprecated-Code/MasterApp/client/src/utils/js-helpers.js +++ /dev/null @@ -1,70 +0,0 @@ -export function isDefined (d) { - return d !== null && typeof d !== 'undefined' -} - -export function isNotDefined (d) { - return !isDefined(d) -} - -export const isArray = Array.isArray - -export function isObject (d) { - return isDefined(d) && typeof d === 'object' && !Array.isArray(d) -} - -export function isEmpty (obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) return false - } - return true -} - -export function isString (value) { - return typeof value === 'string' || value instanceof String -} - -export function validObject (object, ...keys) { - return keys.reduce((a, b) => (a || {})[b], object) !== undefined -} - -export function mergeDeep (target, ...sources) { - if (!sources.length) return target - const source = sources.shift() - - if (isObject(target) && isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!target[key]) Object.assign(target, { [key]: {} }) - mergeDeep(target[key], source[key]) - } else { - Object.assign(target, { [key]: source[key] }) - } - } - } - return mergeDeep(target, ...sources) -} - -export function deleteCookie (c) { - document.cookie.split(';').forEach(function (c) { - document.cookie = c - .replace(/^ +/, '') - .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/') - }) -} - -export function slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text -} diff --git a/Deprecated-Code/MasterApp/client/src/utils/local-storage.js b/Deprecated-Code/MasterApp/client/src/utils/local-storage.js deleted file mode 100644 index a63f289ff..000000000 --- a/Deprecated-Code/MasterApp/client/src/utils/local-storage.js +++ /dev/null @@ -1,5 +0,0 @@ -const getItem = async name => window.localStorage.getItem(name) -const setItem = async (name, value) => window.localStorage.setItem(name, value) -const removeItem = async name => window.localStorage.removeItem(name) - -export { getItem, setItem, removeItem } diff --git a/Deprecated-Code/MasterApp/client/src/utils/log.js b/Deprecated-Code/MasterApp/client/src/utils/log.js deleted file mode 100644 index 69263820d..000000000 --- a/Deprecated-Code/MasterApp/client/src/utils/log.js +++ /dev/null @@ -1,39 +0,0 @@ -import debug from 'debug' - -const BASE = 'superalgos' -const COLOURS = { - info: 'blue', - warn: 'orange', - error: 'red' -} - -class Log { - generateMessage (level, message, source) { - // Set the prefix which will cause debug to enable the message - const namespace = `${BASE}:${level}` - const createDebug = debug(namespace) - - // Set the colour of the message based on the level - createDebug.color = COLOURS[level] - - if (source) { - createDebug(source, message) - } else { - createDebug(message) - } - } - - info (message, source) { - return this.generateMessage('info', message, source) - } - - warn (message, source) { - return this.generateMessage('warn', message, source) - } - - error (message, source) { - return this.generateMessage('error', message, source) - } -} - -export default new Log() diff --git a/Deprecated-Code/MasterApp/client/src/views/callback/index.js b/Deprecated-Code/MasterApp/client/src/views/callback/index.js deleted file mode 100644 index 17e8bcbc2..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/callback/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' - -import { BannerTopBar } from '../common' - -const Callback = () => - -export default Callback diff --git a/Deprecated-Code/MasterApp/client/src/views/charts/index.js b/Deprecated-Code/MasterApp/client/src/views/charts/index.js deleted file mode 100644 index a3ffdded1..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/charts/index.js +++ /dev/null @@ -1,77 +0,0 @@ -import React, { Component } from 'react' - -import { withStyles } from '@material-ui/core/styles' -import { connect } from 'react-redux' -import { BannerTopBar } from '../common' - -const styles = theme => ({ - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: '100%', - height: '100%' - }, - heroContent: { - textColor: theme.palette.common.white, - maxWidth: 600, - height: 800, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - } -}) - -class Charts extends Component { - componentDidMount () { - if (window.canvasApp.visible === undefined) { - loadCanvas() // This happens only once. - } - - window.canvasApp.visible = true - let body = document.getElementById('body') - body.style = 'margin: 0px; padding: 0px; border: 0px; overflow:hidden;' - this.props.hideFooter() - } - - componentWillUnmount () { - window.canvasApp.visible = false - let body = document.getElementById('body') - body.style = '' - this.props.showFooter() - } - - render () { - return ( - - ) - } -} - -const mapStateToProps = state => { - return { - context: state.context - } -} - -const mapDispatchToProps = dispatch => { - return { - hideFooter: () => { - dispatch({ type: 'HIDE_FOOTER' }) - }, - showFooter: () => { - dispatch({ type: 'SHOW_FOOTER' }) - } - } -} - -export default connect( - mapStateToProps, - mapDispatchToProps -)(withStyles(styles)(Charts)) diff --git a/Deprecated-Code/MasterApp/client/src/views/common/components/BannerTopBar.js b/Deprecated-Code/MasterApp/client/src/views/common/components/BannerTopBar.js deleted file mode 100644 index e7d1fc719..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/common/components/BannerTopBar.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Typography from '@material-ui/core/Typography' - -const BannerTopBar = ({ size, backgroundUrl, title, text, children }) => ( -
-
- - {title} - - - {text} - - {children} -
-
-) - -BannerTopBar.propTypes = { - children: PropTypes.node, - backgroundUrl: PropTypes.string, - size: PropTypes.string, - title: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - text: PropTypes.oneOfType([PropTypes.string, PropTypes.array]) -} - -export default BannerTopBar diff --git a/Deprecated-Code/MasterApp/client/src/views/common/index.js b/Deprecated-Code/MasterApp/client/src/views/common/index.js deleted file mode 100644 index 9af9dc8f7..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/common/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import BannerTopBar from './components/BannerTopBar' - -export { BannerTopBar } diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupForm.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupForm.js deleted file mode 100644 index f56161281..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupForm.js +++ /dev/null @@ -1,139 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import { withStyles } from '@material-ui/core/styles' -import withWidth from '@material-ui/core/withWidth' -import { Mutation } from 'react-apollo' - -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import Button from '@material-ui/core/Button' -import InputBase from '@material-ui/core/InputBase' - -import styles from './styles' - -import NEWSLETTER_SIGNUP from '../graphql/NewsletterSignup' - -import { isEmpty } from '../../../utils/js-helpers' - -export class SignupForm extends Component { - constructor (props) { - super(props) - - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - - this.state = { - email: '', - emailError: '', - success: false - } - } - - render () { - const { - classes, - width, - alignCenter, - displayTitle, - displayIntro - } = this.props - return ( - - {(NewsletterSignup, { loading, error, data }) => { - return ( - - {displayTitle && Stay in touch!} - {displayIntro && Opt-in our mailing list to stay up to date with the Superalgos Project.} -
- - Thank you for signing up! Please check your email and click on the confirmation link to complete the signup process. - - - - - -
-
- ) - }} -
- ) - } - - validate (data) { - const errors = {} - switch (data.id) { - case 'email': - if (data.value === '') { - this.setState({ emailError: 'Please enter an email address' }) - } else { - this.setState({ emailError: '' }) - } - break - default: - } - return errors - } - - handleChange (e) { - let id = e.target.id - let value = e.target.value - let error = this.validate({ id, value }) - switch (id) { - case 'email': - if (!isEmpty(error)) this.setState({ emailError: error }) - this.setState({ email: value }) - break - default: - } - } - - async handleSubmit (e, NewsletterSignup) { - e.preventDefault() - console.log('NewsletterSignup handleSubmit: ', this.state.email) - const signupResponse = await NewsletterSignup({ variables: { email: this.state.email } }) - console.log('NewsletterSignup: ', signupResponse) - if (signupResponse.data.notifications_Master_NewsletterSignup === 'SUCCESS') this.setState({ email: '', success: true }) - } -} - -SignupForm.propTypes = { - classes: PropTypes.object, - width: PropTypes.string, - alignCenter: PropTypes.bool, - displayTitle: PropTypes.bool, - displayIntro: PropTypes.bool -} - -const SignupFormWithStyles = withStyles(styles)(SignupForm) - -export default withWidth()(SignupFormWithStyles) diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupVerifyResponse.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupVerifyResponse.js deleted file mode 100644 index eb83d5cca..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/SignupVerifyResponse.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { BannerTopBar } from '../../common' -import SignupForm from './SignupForm' - -export class SignupVerifyResponse extends React.Component { - componentDidMount () { - const { mutate } = this.props - mutate() - } - - render () { - const { loading, error, data } = this.props - let BannerTitle = '' - let BannerText = '' - let displayForm = false - console.log('SignupVerifyResponse:', loading, error, data) - if (error) { - if ( - error.message === - 'GraphQL error: Error: Token Expired. Please resubmit email address.' - ) { - BannerText = [ - - Newsletter Signup Error: Verification Token Expired - , -
, - 'Please resubmit your email address and a new token will be emailed to you.', -
, - ' We apologize for the inconvenience, but we highly value your seurity and privacy.' - ] - displayForm = true - } else { - BannerText = [ - 'Newsletter Signup Error: ', -
, - error.message - ] - } - return ( - - ) - } - if (loading && !error) { - BannerText = [ - 'Processing newsletter sign-up...', -
, - 'Thank you for opting-in to recieve updates about the Superalgos project!' - ] - } - if (data !== undefined && data !== null) { - console.log(data) - if (data.notifications_Master_NewsletterSignupVerify === 'SUCCESS') { - return ( - - - {displayForm && } - - - ) - } - } else { - return ( - - ) - } - } -} - -SignupVerifyResponse.propTypes = { - mutate: PropTypes.function, - loading: PropTypes.bool, - error: PropTypes.object, - data: PropTypes.object -} - -export default SignupVerifyResponse diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/styles.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/components/styles.js deleted file mode 100644 index 0fce0555f..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/components/styles.js +++ /dev/null @@ -1,72 +0,0 @@ -import lightGreen from '@material-ui/core/colors/lightGreen' - -const styles = theme => ({ - textLight: { - color: theme.palette.primary.light - }, - textWhite: { - color: theme.palette.common.white - }, - textSuccess: { - color: lightGreen[400] - }, - copyright: { - paddingTop: theme.spacing.unit * 3 - }, - linkLight: { - color: theme.palette.secondary.main, - textDecoration: 'none' - }, - signupRight: { - marginTop: theme.spacing.unit * 2, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - signupContainer: { - marginBottom: theme.spacing.unit * 2, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - signupTitle: { - fontSize: '25px', - marginBottom: theme.spacing.unit * 5 - }, - signupText: { - fontSize: '16px' - }, - signupInput: { - borderRadius: 4, - backgroundColor: theme.palette.common.white, - border: '1px solid #ced4da', - fontSize: 20, - padding: '10px 12px', - transition: theme.transitions.create(['border-color', 'box-shadow']), - marginRight: theme.spacing.unit * 1 - }, - signupInputSubmit: { - boxShadow: 'none', - textTransform: 'none', - fontSize: 20, - lineHeight: '1.1875em', - color: theme.palette.common.white, - padding: '10px 12px', - backgroundColor: '#5bc0de', - borderColor: '#46b8da', - '&:hover': { - backgroundColor: '#31b0d5', - borderColor: '#269abc' - }, - '&:active': { - boxShadow: 'none', - backgroundColor: '#0062cc', - borderColor: '#005cbf' - }, - '&:focus': { - boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)' - } - } -}) - -export default styles diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignup.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignup.js deleted file mode 100644 index 92c09f432..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignup.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -const NEWSLETTER_SIGNUP = gql` - mutation NewsletterSignup($email: String!) { - notifications_Master_NewsletterSignup(email: $email) - } -` - -export default NEWSLETTER_SIGNUP diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignupVerify.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignupVerify.js deleted file mode 100644 index 060b645fd..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/graphql/NewsletterSignupVerify.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -const NEWSLETTER_SIGNUP_VERIFY = gql` - mutation NewsletterSignupVerify($token: String!){ - notifications_Master_NewsletterSignupVerify(token: $token) - } -` - -export default NEWSLETTER_SIGNUP_VERIFY diff --git a/Deprecated-Code/MasterApp/client/src/views/email-verification/index.js b/Deprecated-Code/MasterApp/client/src/views/email-verification/index.js deleted file mode 100644 index bc1ae49f8..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/email-verification/index.js +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import queryString from 'query-string' -import { Mutation } from 'react-apollo' - -import { BannerTopBar } from '../common' -import SignupVerifyResponse from './components/SignupVerifyResponse' - -import NEWSLETTER_SIGNUP_VERIFY from './graphql/NewsletterSignupVerify' - -export const EmailSignupConfirm = ({ tokenParam }) => { - let token - let BannerText = '' - if (tokenParam !== '' && tokenParam !== null) { - const values = queryString.parse(tokenParam) - token = values.token - } else { - BannerText = [ - 'Newsletter Signup Error: Invalid Token', -
, - 'Please try signing up again! We apologize for the inconvenience,', -
, - 'but we highly value your seurity and privacy.' - ] - return ( - - ) - } - console.log(token) - return ( - - {(NewsletterSignupVerify, { loading, error, data }) => { - return ( - - ) - }} - - ) -} - -EmailSignupConfirm.propTypes = { - tokenParam: PropTypes.string -} - -export default EmailSignupConfirm diff --git a/Deprecated-Code/MasterApp/client/src/views/home/index.js b/Deprecated-Code/MasterApp/client/src/views/home/index.js deleted file mode 100644 index ebc655054..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/home/index.js +++ /dev/null @@ -1,54 +0,0 @@ -import React, { Component } from 'react' -import { Link } from 'react-router-dom' - -import { BannerTopBar } from '../common' -import { Typography } from '@material-ui/core' - -class Home extends Component { - constructor (props) { - super(props) - this.state = { - user: null - } - } - componentDidMount () { - const user = window.localStorage.getItem('user') - this.setState({ user }) - } - render () { - let user = JSON.parse(this.state.user) - if (this.state.user !== undefined && this.state.user !== null) {} - return ( - - -
- Welcome to the Superalgos Platform! -
- - Before you begin, please be aware this is an alpha stage deployment. - The features available as of today are limited but already functional. - However, you may encounter occasional instability and errors. - - - To try out the Demo version hosted here you will need to Sign Up / Login. - Once you are logged in, you will find basic instructions on how to proceed, - at this home page (click the Superalgos logo to return to this home page). - -
-
- - If you wish to set up your own indicators and strategies, please get in touch with us and we'll show you how (give us a shout in the Community Telegram) - -
-
-
- ) - } -} - -export default Home diff --git a/Deprecated-Code/MasterApp/client/src/views/index.js b/Deprecated-Code/MasterApp/client/src/views/index.js deleted file mode 100644 index 1d70a9d6c..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import Home from './home' -import Charts from './charts' -import Callback from './callback' -import Layout from './layout' -import EmailSignupConfirm from './email-verification' - -export { Layout, Home, Charts, Callback, EmailSignupConfirm } diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/footer/index.js b/Deprecated-Code/MasterApp/client/src/views/layout/footer/index.js deleted file mode 100644 index 2c9138222..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/footer/index.js +++ /dev/null @@ -1,94 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import classNames from 'classnames' -import { NavLink, Link } from 'react-router-dom' - -import { withStyles } from '@material-ui/core/styles' -import withWidth from '@material-ui/core/withWidth' -import { connect } from 'react-redux' - -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faFacebookF, faTelegramPlane, faTwitter } from '@fortawesome/free-brands-svg-icons' -import styles from './styles' - -import SignupForm from '../../email-verification/components/SignupForm' - -import aalogo from '../../../assets/superalgos/Superalgos-logo-horz-dark.svg' - -class Footer extends Component { - render () { - let { classes, width } = this.props - - const masterApp = this.props.context.masterApp - if (masterApp.footer.visible === false) { - return (
) - } else { - return ( - - ) - } - } -} - -Footer.propTypes = { - classes: PropTypes.object.isRequired, - width: PropTypes.string -} - -const mapStateToProps = (state) => { - return { - context: state.context - } -} - -const FooterWithStyles = withStyles(styles)(Footer) - -export default connect(mapStateToProps)(withWidth()(FooterWithStyles)) diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/footer/styles.js b/Deprecated-Code/MasterApp/client/src/views/layout/footer/styles.js deleted file mode 100644 index 92e48d4cc..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/footer/styles.js +++ /dev/null @@ -1,116 +0,0 @@ -import lightGreen from '@material-ui/core/colors/lightGreen' - -const styles = theme => ({ - textLight: { - color: theme.palette.primary.light - }, - textWhite: { - color: theme.palette.common.white - }, - textSuccess: { - color: lightGreen[400] - }, - copyright: { - paddingTop: theme.spacing.unit * 9, - fontSize: '16px' - }, - linkLight: { - color: theme.palette.secondary.main, - textDecoration: 'none' - }, - descriptionLeft: { - marginLeft: 0, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - descriptionText: { - fontSize: '16px' - }, - signupRight: { - marginTop: theme.spacing.unit * 2, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - signupContainer: { - marginBottom: theme.spacing.unit * 2, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - footer: { - borderTop: `4px solid ${theme.palette.secondary.light}`, - padding: `${theme.spacing.unit * 6}px 0`, - backgroundColor: '#19191C' /* #29292c */, - color: theme.palette.primary.light - }, - footerContainer: { - width: 'auto', - [theme.breakpoints.up(1200 + theme.spacing.unit * 3 * 2)]: { - width: 1200, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - footerLogo: { - marginBottom: theme.spacing.unit * 2 - }, - footerLink: { - textDecoration: 'none', - '&:hover': { - color: theme.palette.secondary.light - } - }, - footerInputRoot: { - 'label + &': { - marginTop: theme.spacing.unit * 3 - }, - [theme.breakpoints.down('xs')]: { - textAlign: 'center' - } - }, - footerInput: { - borderRadius: 4, - backgroundColor: theme.palette.common.white, - border: '1px solid #ced4da', - fontSize: 16, - padding: '10px 12px', - transition: theme.transitions.create(['border-color', 'box-shadow']), - marginRight: theme.spacing.unit * 1 - }, - footerInputSubmit: { - boxShadow: 'none', - textTransform: 'none', - fontSize: 16, - lineHeight: '1.1875em', - color: theme.palette.common.white, - padding: '10px 12px', - backgroundColor: '#5bc0de', - borderColor: '#46b8da', - '&:hover': { - backgroundColor: '#31b0d5', - borderColor: '#269abc' - }, - '&:active': { - boxShadow: 'none', - backgroundColor: '#0062cc', - borderColor: '#005cbf' - }, - '&:focus': { - boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)' - } - }, - icon: { - margin: theme.spacing.unit * 1, - fontSize: 30 - }, - iconHover: { - margin: theme.spacing.unit * 1, - '&:hover': { - color: theme.palette.secondary.light - } - } -}) - -export default styles diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/header/LoggedIn.js b/Deprecated-Code/MasterApp/client/src/views/layout/header/LoggedIn.js deleted file mode 100644 index c638639e8..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/header/LoggedIn.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react' -import { Link } from 'react-router-dom' - -import { isDefined } from '../../../utils/js-helpers' - -export const LoggedIn = props => { - let { user, auth, openedMenu, toggleMenuOpen, closeAll, bigScreen, mouseLeave } = props - let displayName = 'No Display Name' - - if (isDefined(user.alias)) { - displayName = user.alias - } - - if (isDefined(user.nickname)) { - displayName = user.nickname - } - - if (isDefined(user.firstName)) { - displayName = user.firstName - } - - displayName = displayName.split('-')[0] - displayName = displayName.split('.')[0] - displayName = displayName.split('_')[0] - displayName = displayName.split(' ')[0] - - return ( - -
  • toggleMenuOpen(42, bigScreen)} - onMouseLeave={() => mouseLeave(bigScreen)} - className={openedMenu === 42 ? 'selected primaryLink hasChildren' : 'primaryLink hasChildren'} - > - toggleMenuOpen(42, true)}> {displayName} - -
  • - ) -} - -export default LoggedIn diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/header/imports.js b/Deprecated-Code/MasterApp/client/src/views/layout/header/imports.js deleted file mode 100644 index 1a8ad21df..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/header/imports.js +++ /dev/null @@ -1,110 +0,0 @@ -import { - Search, - GamepadRounded, - AccessibilityNew, - LibraryAdd, - ImportContacts, - BugReport, - People, - Group, - VpnKey, - Home, - AddCircleOutline, - ViewModule -} from '@material-ui/icons' - -const usersMenus = { - title: 'Users', - to: '/users', - icon: Home, - submenus: [ - { title: 'Directory', to: '/users/browse', icon: ImportContacts }, - { title: 'Search', to: '/users/search', icon: Search }, - { title: 'Your Profile', to: '/users/user', icon: People, authenticated: true }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/UsersModule/issues/new', icon: BugReport, externalLink: true } - ] -} - -/* -const teamsMenus = { - title: 'Teams', - to: '/teams', - icon: Home, - submenus: [ - { title: 'Directory', to: '/teams/explore', icon: ImportContacts }, - { title: 'Your teams', to: '/teams/manage-teams', icon: Group, authenticated: true }, - { title: 'Team members', to: '/teams/team-members', icon: People, authenticated: true }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/TeamsModule/issues/new', icon: BugReport, externalLink: true } - ] -} -*/ - -const eventsMenus = { - title: 'Events', - to: '/events', - icon: Home, - submenus: [ - { title: 'Directory', to: '/events', icon: ImportContacts }, - { title: 'Your hosted events', to: '/events/host', icon: AccessibilityNew, authenticated: true }, - { title: 'Host an event', to: '/events/create', icon: LibraryAdd, authenticated: true }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/EventsClientModule/issues/new', icon: BugReport, externalLink: true } - ] -} - -const keyvaultMenus = { - title: 'Keys', - to: '/keys', - icon: Home, - authenticated: true, - submenus: [ - { title: 'Your keys', to: '/keys/browse', icon: VpnKey }, - { title: 'Add key', to: '/keys/addKey', icon: AddCircleOutline }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/KeyVaultModule/issues/new', icon: BugReport, externalLink: true } - ] -} - -const operationsMenus = { - title: 'Clones', - to: '/clones', - icon: Home, - authenticated: true, - submenus: [ - { title: 'Active Clones', to: '/clones/browse', icon: ImportContacts }, - { title: 'History Clones', to: '/clones/history', icon: LibraryAdd }, - { title: 'Create Clone', to: '/clones/add', icon: AddCircleOutline }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/OperationsModule/issues/new', icon: BugReport, externalLink: true } - ] -} - -const cockpitMenus = { - title: 'Cockpit', - to: '/cockpit', - icon: Home, - authenticated: true, - submenus: [ - { title: 'Signals', to: '/cockpit/signals', icon: GamepadRounded }, - { title: 'Report a Bug', to: 'https://github.com/Superalgos/CockpitClientModule/issues/new', icon: BugReport, externalLink: true } - ] -} - -/* -const strategizerMenus = { - title: 'Strategizer', - to: '/strategizer', - icon: Home, - authenticated: true, - submenus: [] -} -*/ - -const allMenus = [ - usersMenus, - // teamsMenus, - eventsMenus, - keyvaultMenus, - operationsMenus, - // strategizerMenus, - cockpitMenus -] - -export default allMenus diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/header/index.js b/Deprecated-Code/MasterApp/client/src/views/layout/header/index.js deleted file mode 100644 index 39bc0528c..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/header/index.js +++ /dev/null @@ -1,181 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Link } from 'react-router-dom' -import jwtDecode from 'jwt-decode' -import withWidth from '@material-ui/core/withWidth' -import { NotListedLocation as TutorialIcon } from '@material-ui/icons' - -// components -import { LoggedIn } from './LoggedIn' - -import allMenus from './imports' -import AALogo from '../../../assets/superalgos/Superalgos-logo-horz-dark.svg' - -class Header extends Component { - constructor (props) { - super(props) - this.renderSubMenu = this.renderSubMenu.bind(this) - this.state = { - onTop: true, - mobileOpen: false, - openedMenu: null, - user: null - } - } - - handleScroll () { - if (window.pageYOffset > 0) { - this.setState({ onTop: false }) - } else { - this.setState({ onTop: true }) - } - } - - scrollToTop () { - document.body.scrollTop = 0 // For Safari - document.documentElement.scrollTop = 0 // For Chrome, Firefox, IE and Opera - } - - toggleMobileOpen () { - this.setState({ mobileOpen: !this.state.mobileOpen }) - } - - toggleMenuOpen (index, allowed) { - if (allowed) { - if (this.state.openedMenu === index) { - this.setState({ openedMenu: null }) - } else { - this.setState({ openedMenu: index }) - } - } - } - - mouseLeave (allowed) { - if (allowed) { - this.setState({ openedMenu: null }) - } - } - - closeAll () { - this.setState({ openedMenu: null, mobileOpen: false }) - } - - componentDidMount () { - window.addEventListener('scroll', () => this.handleScroll()) - const user = window.localStorage.getItem('user') - this.setState({ user }) - } - - componentWillUnmount () { - window.removeEventListener('scroll', () => this.handleScroll()) - } - - render () { - const bigScreen = (this.props.width === 'lg' || this.props.width === 'xl') - let { auth } = this.props - let { onTop, mobileOpen, openedMenu } = this.state - if (window.localStorage.getItem('access_token')) { - if (jwtDecode(window.localStorage.getItem('access_token')).exp < new Date().getTime() / 1000) { - window.localStorage.removeItem('access_token') - window.localStorage.removeItem('user') - window.localStorage.removeItem('name') - window.location.reload() - } - } - let user = JSON.parse(this.state.user) - - const menus = allMenus.map(({ icon: Icon, to, title, submenus, authenticated }, index) => { - if (authenticated && !(this.state.user !== undefined && this.state.user !== null)) { - return - } - let cssChildren = submenus.length === 0 ? null : 'hasChildren' - return ( -
  • this.toggleMenuOpen(index, bigScreen)} - onMouseLeave={() => this.mouseLeave(bigScreen)} - key={index} - className={openedMenu === index ? `primaryLink ${cssChildren} selected` : `primaryLink ${cssChildren}`} - > - { bigScreen - ? this.toggleMenuOpen(index, true)}> {title} - : this.toggleMenuOpen(index, true)}> {title} - } - {this.renderSubMenu(Icon, to, title, submenus, authenticated, index, bigScreen)} -
  • - ) - }) - - return ( - -
    -
    - Superalgos -
    this.toggleMobileOpen()}> - Menu -
    - -
    -
    - {onTop ? '' :
    { this.scrollToTop() }} />} - - ) - } - - renderSubMenu (Icon, to, title, submenus, authenticated, index, bigScreen) { - return submenus.length === 0 ? null : ( -
      - { bigScreen - ? '' - :
    • Module Home Page
    • - } - { submenus.length > 0 && - submenus.map(({ icon: SubIcon, to: subTo, title: subTitle, externalLink, authenticated: subAuthenticated }, subindex) => { - if (subAuthenticated && !(this.state.user !== undefined && this.state.user !== null)) { - return - } - if (externalLink) { - return ( -
    • {subTitle}
    • - ) - } - return ( -
    • this.closeAll(index)}> {subTitle}
    • - ) - })} -
    - ) - } -} - -Header.propTypes = { - auth: PropTypes.object.isRequired -} - -export default withWidth()(Header) diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/index.js b/Deprecated-Code/MasterApp/client/src/views/layout/index.js deleted file mode 100644 index fab1f1093..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import { withStyles } from '@material-ui/core/styles' -import Footer from './footer' -import Header from './header' - -// styles -import styles from './styles' - -class Index extends React.Component { - render () { - return ( -
    -
    -
    {this.props.children}
    -
    -
    - ) - } -} - -export default withStyles(styles)(Index) diff --git a/Deprecated-Code/MasterApp/client/src/views/layout/styles.js b/Deprecated-Code/MasterApp/client/src/views/layout/styles.js deleted file mode 100644 index 062817c9a..000000000 --- a/Deprecated-Code/MasterApp/client/src/views/layout/styles.js +++ /dev/null @@ -1,10 +0,0 @@ -const styles = theme => ({ - layout: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'space-between', - minHeight: 'calc(100vh)' - } -}) - -export default styles diff --git a/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.common.config.js b/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.common.config.js deleted file mode 100644 index 3c31ba4d4..000000000 --- a/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.common.config.js +++ /dev/null @@ -1,42 +0,0 @@ -const pathConfig = require('./webpack.path.config') - -module.exports = { - context: pathConfig.context, - - entry: ['./src/index.js'], - - module: { - rules: [ - { - test: /\.js$/, - include: /node_modules\\@superalgos/, - loader: 'babel-loader' - }, - { - test: /\.js$/, - include: /node_modules\/@superalgos/, - loader: 'babel-loader' - }, - { - test: /\.js$/, - include: /node_modules\\@advancedalgos/, - loader: 'babel-loader' - }, - { - test: /\.js$/, - include: /node_modules\/@advancedalgos/, - loader: 'babel-loader' - }, - { - test: /\.js$/, - exclude: /node_modules/, - loader: 'babel-loader' - }, - { - test: /\.(png|svg|jpg|gif)$/, - use: [{ loader: 'file-loader' } - ] - } - ] - } -} diff --git a/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.path.config.js b/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.path.config.js deleted file mode 100644 index 4971b1cdc..000000000 --- a/Deprecated-Code/MasterApp/client/tools/webpack/helpers/webpack.path.config.js +++ /dev/null @@ -1,7 +0,0 @@ -const path = require('path') - -const context = path.resolve(__dirname, '../../..') - -module.exports = { - context -} diff --git a/Deprecated-Code/MasterApp/client/tools/webpack/webpack.dev.config.js b/Deprecated-Code/MasterApp/client/tools/webpack/webpack.dev.config.js deleted file mode 100644 index 12e2dbf2d..000000000 --- a/Deprecated-Code/MasterApp/client/tools/webpack/webpack.dev.config.js +++ /dev/null @@ -1,49 +0,0 @@ -const webpack = require('webpack') -const Dotenv = require('dotenv-webpack') -const path = require('path') -const merge = require('webpack-merge') -const commonConfig = require('./helpers/webpack.common.config') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') - -module.exports = merge(commonConfig, { - mode: 'development', - devtool: 'inline-sourcemap', - - output: { - path: path.resolve(__dirname, '../../build'), - filename: 'script.js', - publicPath: '/' - }, - - devServer: { - historyApiFallback: { - disableDotRule: true - } - }, - - plugins: [ - new Dotenv({ - path: '.env' - }), - new webpack.NamedModulesPlugin(), - new HtmlWebpackPlugin({ - template: 'html/index.html', - alwaysWriteToDisk: true - }), - new ScriptExtHtmlWebpackPlugin({ - defaultAttribute: 'async' - }), - new HtmlWebpackHarddiskPlugin() - ], - module: { - rules: [ - { - test: /\.s?[ac]ss$/, - loader: 'style-loader!css-loader!postcss-loader!sass-loader' - } - ] - }, - target: 'web' -}) diff --git a/Deprecated-Code/MasterApp/client/tools/webpack/webpack.prod.config.js b/Deprecated-Code/MasterApp/client/tools/webpack/webpack.prod.config.js deleted file mode 100644 index f99226c90..000000000 --- a/Deprecated-Code/MasterApp/client/tools/webpack/webpack.prod.config.js +++ /dev/null @@ -1,68 +0,0 @@ -const webpack = require('webpack') -const path = require('path') -const merge = require('webpack-merge') -const commonConfig = require('./helpers/webpack.common.config') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') -const Dotenv = require('dotenv-webpack') - -module.exports = merge(commonConfig, { - mode: 'production', - devtool: 'inline-sourcemap', - output: { - path: path.resolve(__dirname, '../../build'), - filename: 'script.js', - publicPath: '/' - }, - - optimization: { - minimizer: [ - new OptimizeCSSAssetsPlugin({}) - ], - splitChunks: { - cacheGroups: { - styles: { - name: 'styles', - test: /\.css$/, - chunks: 'all', - enforce: true - } - } - } - }, - plugins: [ - new Dotenv(), - new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: '[id].css' - }), - new HtmlWebpackPlugin({ - template: 'html/index.html', - alwaysWriteToDisk: true - }), - new ScriptExtHtmlWebpackPlugin({ - defaultAttribute: 'async' - }), - new HtmlWebpackHarddiskPlugin(), - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify('production') - }) - ], - module: { - rules: [ - { - test: /\.scss$/, - use: [ - MiniCssExtractPlugin.loader, - { loader: 'css-loader', options: { importLoaders: 2 } }, - 'postcss-loader', - { loader: 'sass-loader' } - ] - } - ] - }, - target: 'web' -}) diff --git a/Deprecated-Code/MasterApp/client/webpack.config.js b/Deprecated-Code/MasterApp/client/webpack.config.js deleted file mode 100644 index 2589e2f07..000000000 --- a/Deprecated-Code/MasterApp/client/webpack.config.js +++ /dev/null @@ -1,9 +0,0 @@ -let config = null - -if (process.env.NODE_ENV === 'production') { - config = require('./tools/webpack/webpack.prod.config.js') -} else { - config = require('./tools/webpack/webpack.dev.config.js') -} - -module.exports = config diff --git a/Deprecated-Code/MasterApp/docker-compose.linux.yml b/Deprecated-Code/MasterApp/docker-compose.linux.yml deleted file mode 100644 index 71b27f8f7..000000000 --- a/Deprecated-Code/MasterApp/docker-compose.linux.yml +++ /dev/null @@ -1,220 +0,0 @@ -version: "3" - -services: - postgres: - image: postgres:11-alpine - restart: always - environment: - POSTGRES_USER: prisma - POSTGRES_PASSWORD: prisma - POSTGRES_DB: prisma - volumes: - - postgresdb_data:/var/lib/postgresql/data-teams - networks: - - superalgos_net - - minio: - image: minio/minio:RELEASE.2019-07-05T21-20-21Z - volumes: - - minio_data:/data - environment: - MINIO_ACCESS_KEY: minio - MINIO_SECRET_KEY: minio123 - command: server /data - networks: - - superalgos_net - - prisma: - image: prismagraphql/prisma:1.27 - restart: always - environment: - PRISMA_CONFIG: | - port: 4466 - # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security - managementApiSecret: prisma_secret - databases: - default: - connector: postgres - host: postgres - port: 5432 - user: prisma - password: prisma - migrations: true - volumes: - - postgresdb_data:/data/db - networks: - - superalgos_net - depends_on: - - postgres - - teams-deploy: - image: superalgos/teams-prisma:0.1.0 - restart: "no" - env_file: ./env/teams-prisma.env - command: sh -c './wait-for prisma:4466 -- prisma deploy' - networks: - - superalgos_net - depends_on: - - prisma - - teams-api: - image: superalgos/teams-api:0.1.0 - restart: always - env_file: ./env/teams-api.env - command: sh -c './wait-for prisma:4466 -- node .' - networks: - - superalgos_net - depends_on: - - teams-deploy - - mongo: - image: mongo:4.0.9 - restart: always - volumes: - - mongodb_data:/data/db - networks: - - superalgos_net - - mongo-express: - image: mongo-express - restart: always - ports: - - "8081:8081" - networks: - - superalgos_net - depends_on: - - mongo - - saweb-api: - image: superalgos/saweb-api:0.1.0 - restart: always - env_file: ./env/saweb-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - logs-api: - image: superalgos/logs-api:0.1.0 - restart: always - env_file: ./env/logs-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - clones-api: - image: superalgos/clones-api:0.1.0 - restart: always - env_file: ./env/clones-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - cockpit-api: - image: superalgos/cockpit-api:0.1.0 - restart: always - env_file: ./env/cockpit-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - strategizer-api: - image: superalgos/strategizer-api:0.1.0 - restart: always - env_file: ./env/strategizer-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - events-api: - image: superalgos/events-api:0.1.0 - restart: always - env_file: ./env/events-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - users-api: - image: superalgos/users-api:0.1.0 - restart: always - env_file: ./env/users-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - keyvault-api: - image: superalgos/keyvault-api:0.1.0 - restart: always - env_file: ./env/keyvault-api.env - command: node . - networks: - - superalgos_net - depends_on: - - mongo-express - - notifications-api: - image: superalgos/notifications-api:0.1.0 - restart: always - env_file: ./env/notifications-api.env - command: node . - networks: - - superalgos_net - depends_on: - - prisma - - master-app: - image: superalgos/master-app:0.1.0 - restart: always - env_file: ./env/master-app.env - command: ["nginx"] - ports: - - "3100:3100" - networks: - - superalgos_net - - master-app-api: - image: superalgos/master-app-api:0.1.0 - restart: always - env_file: ./env/master-app-api.env - command: sh -c './wait-for users-api:4000 -- ./wait-for teams-api:4001 -- ./wait-for keyvault-api:4002 -- ./wait-for clones-api:4003 -- ./wait-for saweb-api:4004 -- ./wait-for events-api:4005 -- ./wait-for notifications-api:4006 -- ./wait-for logs-api:4007 -- ./wait-for strategizer-api:4008 -- ./wait-for cockpit-api:4009 -- node .' - ports: - - "4100:4100" - networks: - - superalgos_net - - aaweb: - image: superalgos/aaweb:0.1.0 - restart: always - env_file: ./env/aaweb.env - command: node server - ports: - - "4101:4101" - networks: - - superalgos_net - - kubernetes: - image: qoomon/docker-host:2.2.0 - cap_add: [ 'NET_ADMIN', 'NET_RAW' ] - restart: on-failure - networks: - - superalgos_net - -networks: - superalgos_net: - -volumes: - mongodb_data: - postgresdb_data: diff --git a/Deprecated-Code/MasterApp/docker-compose.win.yml b/Deprecated-Code/MasterApp/docker-compose.win.yml deleted file mode 100644 index 84404f7ef..000000000 --- a/Deprecated-Code/MasterApp/docker-compose.win.yml +++ /dev/null @@ -1,246 +0,0 @@ -version: "3" - -services: - postgres: - image: postgres:11-alpine - restart: always - environment: - POSTGRES_USER: prisma - POSTGRES_PASSWORD: prisma - POSTGRES_DB: prisma - volumes: - - postgresdb_data:/var/lib/postgresql/data-teams - networks: - - superalgos_net - - minio: - image: minio/minio:RELEASE.2019-07-05T21-20-21Z - volumes: - - 'C:\superalgos\data:/data' - ports: - - "9000:9000" - environment: - MINIO_ACCESS_KEY: minio - MINIO_SECRET_KEY: minio123 - command: server /data - networks: - - superalgos_net - - prisma: - image: prismagraphql/prisma:1.27 - restart: always - environment: - PRISMA_CONFIG: | - port: 4466 - # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security - managementApiSecret: prisma_secret - databases: - default: - connector: postgres - host: postgres - port: 5432 - user: prisma - password: prisma - migrations: true - ports: - - "4466:4466" - volumes: - - postgresdb_data:/data/db - networks: - - superalgos_net - depends_on: - - postgres - - teams-deploy: - image: superalgos/teams-prisma:0.1.0 - restart: "no" - env_file: ./env/teams-prisma.env - command: sh -c './wait-for prisma:4466 -- prisma deploy' - networks: - - superalgos_net - depends_on: - - prisma - - teams-api: - image: superalgos/teams-api:0.1.0 - restart: always - env_file: ./env/teams-api.env - command: sh -c './wait-for prisma:4466 -- node .' - ports: - - "4001:4001" - networks: - - superalgos_net - depends_on: - - teams-deploy - - mongo: - image: mongo:4.0.9 - restart: always - volumes: - - mongodb_data:/data/db - ports: - - "27017:27017" - networks: - - superalgos_net - - mongo-express: - image: mongo-express - restart: always - ports: - - "8081:8081" - networks: - - superalgos_net - depends_on: - - mongo - - saweb-api: - image: superalgos/saweb-api:0.1.0 - restart: always - env_file: ./env/saweb-api.env - command: node . - ports: - - "4004:4004" - networks: - - superalgos_net - depends_on: - - mongo-express - - logs-api: - image: superalgos/logs-api:0.1.0 - restart: always - env_file: ./env/logs-api.env - command: node . - ports: - - "4007:4007" - networks: - - superalgos_net - depends_on: - - mongo-express - - clones-api: - image: superalgos/clones-api:0.1.0 - restart: always - env_file: ./env/clones-api.env - command: node . - ports: - - "4003:4003" - networks: - - superalgos_net - depends_on: - - mongo-express - - cockpit-api: - image: superalgos/cockpit-api:0.1.0 - restart: always - env_file: ./env/cockpit-api.env - command: node . - ports: - - "4009:4009" - networks: - - superalgos_net - depends_on: - - mongo-express - - strategizer-api: - image: superalgos/strategizer-api:0.1.0 - restart: always - env_file: ./env/strategizer-api.env - command: node . - ports: - - "4008:4008" - networks: - - superalgos_net - depends_on: - - mongo-express - - events-api: - image: superalgos/events-api:0.1.0 - restart: always - env_file: ./env/events-api.env - command: node . - ports: - - "4005:4005" - networks: - - superalgos_net - depends_on: - - mongo-express - - users-api: - image: superalgos/users-api:0.1.0 - restart: always - env_file: ./env/users-api.env - command: node . - ports: - - "4000:4000" - networks: - - superalgos_net - depends_on: - - mongo-express - - keyvault-api: - image: superalgos/keyvault-api:0.1.0 - restart: always - env_file: ./env/keyvault-api.env - command: node . - ports: - - "4002:4002" - networks: - - superalgos_net - depends_on: - - mongo-express - - notifications-api: - image: superalgos/notifications-api:0.1.0 - restart: always - env_file: ./env/notifications-api.env - command: node . - ports: - - "4006:4006" - networks: - - superalgos_net - depends_on: - - prisma - - master-app: - image: superalgos/master-app:0.1.0 - restart: always - env_file: ./env/master-app.env - command: ["nginx"] - ports: - - "3100:3100" - networks: - - superalgos_net - - master-app-api: - image: superalgos/master-app-api:0.1.0 - restart: always - env_file: ./env/master-app-api.env - command: sh -c './wait-for users-api:4000 -- ./wait-for teams-api:4001 -- ./wait-for keyvault-api:4002 -- ./wait-for clones-api:4003 -- ./wait-for saweb-api:4004 -- ./wait-for events-api:4005 -- ./wait-for notifications-api:4006 -- ./wait-for logs-api:4007 -- ./wait-for strategizer-api:4008 -- ./wait-for cockpit-api:4009 -- node .' - ports: - - "4100:4100" - networks: - - superalgos_net - - aaweb: - image: superalgos/aaweb:0.1.0 - restart: always - env_file: ./env/aaweb.env - command: node server - ports: - - "4101:4101" - networks: - - superalgos_net - - kubernetes: - image: qoomon/docker-host:2.2.0 - cap_add: [ 'NET_ADMIN', 'NET_RAW' ] - restart: on-failure - networks: - - superalgos_net - -networks: - superalgos_net: - -volumes: - mongodb_data: - postgresdb_data: diff --git a/Deprecated-Code/MasterApp/docker-compose.yml b/Deprecated-Code/MasterApp/docker-compose.yml deleted file mode 100644 index a2a21cf7d..000000000 --- a/Deprecated-Code/MasterApp/docker-compose.yml +++ /dev/null @@ -1,260 +0,0 @@ -version: "3" - -services: - postgres: - image: postgres:11-alpine - restart: always - environment: - POSTGRES_USER: prisma - POSTGRES_PASSWORD: prisma - POSTGRES_DB: prisma - volumes: - - postgresdb_data:/var/lib/postgresql/data-teams - networks: - - superalgos_net - - minio: - image: minio/minio:RELEASE.2019-07-05T21-20-21Z - volumes: - - 'D:\data:/data' - ports: - - "9000:9000" - environment: - MINIO_ACCESS_KEY: minio - MINIO_SECRET_KEY: minio123 - command: server /data - networks: - - superalgos_net - - prisma: - image: prismagraphql/prisma:1.27 - restart: always - environment: - PRISMA_CONFIG: | - port: 4466 - # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security - managementApiSecret: prisma_secret - databases: - default: - connector: postgres - host: postgres - port: 5432 - user: prisma - password: prisma - migrations: true - ports: - - "4466:4466" - volumes: - - postgresdb_data:/data/db - networks: - - superalgos_net - depends_on: - - postgres - - teams-deploy: - image: superalgos/teams-prisma:0.1.0 - restart: "no" - build: ../TeamsPrisma - env_file: ./env/teams-prisma.env - command: sh -c './wait-for prisma:4466 -- prisma deploy' - networks: - - superalgos_net - depends_on: - - prisma - - teams-api: - image: superalgos/teams-api:0.1.0 - restart: always - build: ../TeamsModule/api - env_file: ./env/teams-api.env - command: sh -c './wait-for prisma:4466 -- node .' - ports: - - "4001:4001" - networks: - - superalgos_net - depends_on: - - teams-deploy - - mongo: - image: mongo:4.0.9 - restart: always - volumes: - - mongodb_data:/data/db - ports: - - "27017:27017" - networks: - - superalgos_net - - mongo-express: - image: mongo-express - restart: always - ports: - - "8081:8081" - networks: - - superalgos_net - depends_on: - - mongo - - saweb-api: - image: superalgos/saweb-api:0.1.0 - restart: always - build: ../saweb-api - env_file: ./env/saweb-api.env - command: node . - ports: - - "4004:4004" - networks: - - superalgos_net - depends_on: - - mongo-express - - logs-api: - image: superalgos/logs-api:0.1.0 - restart: always - build: ../LogsServerModule - env_file: ./env/logs-api.env - command: node . - ports: - - "4007:4007" - networks: - - superalgos_net - depends_on: - - mongo-express - - clones-api: - image: superalgos/clones-api:0.1.0 - restart: always - build: ../OperationsModule/server - env_file: ./env/clones-api.env - command: node . - ports: - - "4003:4003" - networks: - - superalgos_net - depends_on: - - mongo-express - - cockpit-api: - image: superalgos/cockpit-api:0.1.0 - restart: always - build: ../CockpitServerModule - env_file: ./env/cockpit-api.env - command: node . - ports: - - "4009:4009" - networks: - - superalgos_net - depends_on: - - mongo-express - - strategizer-api: - image: superalgos/strategizer-api:0.1.0 - restart: always - build: ../StrategizerServerModule - env_file: ./env/strategizer-api.env - command: node . - ports: - - "4008:4008" - networks: - - superalgos_net - depends_on: - - mongo-express - - events-api: - image: superalgos/events-api:0.1.0 - restart: always - build: ../EventsServerModule - env_file: ./env/events-api.env - command: node . - ports: - - "4005:4005" - networks: - - superalgos_net - depends_on: - - mongo-express - - users-api: - image: superalgos/users-api:0.1.0 - restart: always - build: ../UsersModule/server - env_file: ./env/users-api.env - command: node . - ports: - - "4000:4000" - networks: - - superalgos_net - depends_on: - - mongo-express - - keyvault-api: - image: superalgos/keyvault-api:0.1.0 - restart: always - build: ../KeyVaultModule/server - env_file: ./env/keyvault-api.env - command: node . - ports: - - "4002:4002" - networks: - - superalgos_net - depends_on: - - mongo-express - - notifications-api: - image: superalgos/notifications-api:0.1.0 - restart: always - build: ../NotificationsModule/server - env_file: ./env/notifications-api.env - command: node . - ports: - - "4006:4006" - networks: - - superalgos_net - depends_on: - - prisma - - master-app: - image: superalgos/master-app:0.1.0 - restart: always - build: ./client - env_file: ./env/master-app.env - command: ["nginx"] - ports: - - "3100:3100" - networks: - - superalgos_net - - master-app-api: - image: superalgos/master-app-api:0.1.0 - restart: always - build: ./server - env_file: ./env/master-app-api.env - command: sh -c './wait-for users-api:4000 -- ./wait-for teams-api:4001 -- ./wait-for keyvault-api:4002 -- ./wait-for clones-api:4003 -- ./wait-for saweb-api:4004 -- ./wait-for events-api:4005 -- ./wait-for notifications-api:4006 -- ./wait-for logs-api:4007 -- ./wait-for strategizer-api:4008 -- ./wait-for cockpit-api:4009 -- node .' - ports: - - "4100:4100" - networks: - - superalgos_net - - aaweb: - image: superalgos/aaweb:0.1.0 - restart: always - build: ../AAWeb - env_file: ./env/aaweb.env - command: node server - ports: - - "4101:4101" - networks: - - superalgos_net - - kubernetes: - image: qoomon/docker-host:2.2.0 - cap_add: [ 'NET_ADMIN', 'NET_RAW' ] - restart: on-failure - networks: - - superalgos_net - -networks: - superalgos_net: - -volumes: - mongodb_data: - postgresdb_data: diff --git a/Deprecated-Code/MasterApp/docs/RefactorModuletoMaster.md b/Deprecated-Code/MasterApp/docs/RefactorModuletoMaster.md deleted file mode 100644 index d4b0923fa..000000000 --- a/Deprecated-Code/MasterApp/docs/RefactorModuletoMaster.md +++ /dev/null @@ -1,21 +0,0 @@ -# Refactoring Modules for use within Master app - -1. Add `basename={window.location.pathname}` to BrowserRouter props in App.js. -2. Update Router paths. Remove home, callback routes. -3. Remove Material-ui theme provider. -4. Remove Apollo React. -5. Update auth handling. Pass as props or pull from local storage. -6. Remove header and footer. -7. Update [Material-UI Typography variants](https://material-ui.com/style/typography/#migration-to-typography-v2) -8. Add react hot module: `npm i react-hot-loader -D` - -## Developing Module with Master App - -### Setup -The symlinks in -1. Navigate to your module client. -2. Run `npm link` -3. Navigate `MasterApp/client`. -4. Run `npm link [you-module-package]`. eg `npm link @superalgos/teams-client` -5. Start server: `npm run dev` -6. When a change is made in your module, after a second or two, the browser page should update without reloading. diff --git a/Deprecated-Code/MasterApp/env/aaweb.env b/Deprecated-Code/MasterApp/env/aaweb.env deleted file mode 100644 index 0f9bb089e..000000000 --- a/Deprecated-Code/MasterApp/env/aaweb.env +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=4101 - -#Log options -CONSOLE_LOG=false -CONSOLE_ERROR_LOG=true -LOG_FILE_CONTENT=false - -# Server commands -PATH_TO_CANVAS_APP=./dependency/CanvasApp -PATH_TO_FILES_COMPONENT=./dependency/Files-Component/src - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql diff --git a/Deprecated-Code/MasterApp/env/clones-api.env b/Deprecated-Code/MasterApp/env/clones-api.env deleted file mode 100644 index 89eecfef3..000000000 --- a/Deprecated-Code/MasterApp/env/clones-api.env +++ /dev/null @@ -1,27 +0,0 @@ -NODE_ENV=production -PORT=4003 - -FULL_LOG=false - -# Database configuration -MONGO_URL=mongodb://host.docker.internal:27017/operations - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -OPERATIONS_API_PRESHARED=clones_key - -# Temporary restriction on asset balances -ACCESS_CODE=access_code -DEFAULT_BALANCE_ASSET_A=0 -DEFAULT_BALANCE_ASSET_B=0.001 - -# Kubernetes configuration -GATEWAY_ENDPOINT_K8S=http://host.docker.internal:4100/graphql -CLONE_EXECUTOR_IMAGE=superalgos/clone-executor:1.0.48 - -CLUSTER_SERVER=https://kubernetes:6445 -CLUSTER_NAME=docker-for-desktop-cluster -INSECURE_SKIP_TLS_VERIFY=true -CONTEXT_NAME=docker-for-desktop -USER_NAME=docker-for-desktop -CLIENT_CERTIFICATE_DATA=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM5RENDQWR5Z0F3SUJBZ0lJU2doRTQ5cFpBdEV3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBME1Ua3hOVE13TXpOYUZ3MHlNREExTURJeE5ETXhNVFJhTURZeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sc3dHUVlEVlFRREV4SmtiMk5yWlhJdFptOXlMV1JsCmMydDBiM0F3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3VERGppbnl5V3l4aVUKbVlzelIxUXhCdzAxZUltVTRnMU1VQVRIN3FCazFVdWdVVHAzWVUzWVJ1NitGdnpwbHVoY2lWVFByeDdDamRvcwo2ODBsM0pVWTdTZzdIYjNQTlRhQm9PdnlxSGVXYmd4TDBsQitXeG1lVEJ4QnlBV09VR0Fmd0pHVnBRL2JTQnNwCndhYmJrdXpmMzRxcFFreHFrRVVwbDlHOUhaNFZrZ0Mvb280Tm1YTlBOMmlSMkowUXN0TjY4ZmZqcGNQSVJCdzAKR3h5ZVJPNzh6SUQralpDYi9hUGt3YnZpVmNEV1ZvSU9VbWlUQlFzd1dTMCtzWG5tamtjWW8rR2JjVmdsT3BLVApxN0lPOUZoaDVGZ1RLZk9SYmxLNXl3YXdETXN2TmpVbEFUZ2ZKODU5ZXFRaGo3RlFSRUpQRkY2MGVId0Q4RGhhClpqL3ZLbnlwQWdNQkFBR2pKekFsTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFHM05RT1VNclJ3bHZINDRLRjMvSFV2eGxxTi9SRlpyQQpHZWlWREJ6cUpDd2wwSFBNQkh4T0ZCVnEvQ1dTQVNjeDJlV0xQWG5PNXBJOWFJckN5R3c3Y3A5S290TUVkVW4vCmVpMmVPdE1NSkpTMGt6empqUGNtOHZ2OXNNN2pvQXhWQkF1cG5VaStJMDRmSVRIcDlpSkxET29uUzJoanBpYm0KZzVQNlVUTGFBanUrNUhqRTZHZkNROFh2WVRRbytjUlV3MjhZd1l0SG5Cam5KVVRtK2lXand6WTJtbG1odGZlbQpJSkkzNGhXeEYrZHl6eVR4NEQ1aTNyeGtiWm5vQ3JTK1A2YmNWUFMvSWkreUk2WjdjKzlvdVNjaWlHRmNSWGhRCkMwa0NvV1k2L2FEYlVZRzZvSVdZZVB3OXhQbWVsdCtyRHdJdHFyYU5TWE9MQVV4R1llZmZXQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K -CLIENT_KEY_DATA=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBcmd3NDRwOHNsc3NZbEptTE0wZFVNUWNOTlhpSmxPSU5URkFFeCs2Z1pOVkxvRkU2CmQyRk4yRWJ1dmhiODZaYm9YSWxVejY4ZXdvM2FMT3ZOSmR5VkdPMG9PeDI5enpVMmdhRHI4cWgzbG00TVM5SlEKZmxzWm5rd2NRY2dGamxCZ0g4Q1JsYVVQMjBnYktjR20yNUxzMzkrS3FVSk1hcEJGS1pmUnZSMmVGWklBdjZLTwpEWmx6VHpkb2tkaWRFTExUZXZIMzQ2WER5RVFjTkJzY25rVHUvTXlBL28yUW0vMmo1TUc3NGxYQTFsYUNEbEpvCmt3VUxNRmt0UHJGNTVvNUhHS1BobTNGWUpUcVNrNnV5RHZSWVllUllFeW56a1c1U3Vjc0dzQXpMTHpZMUpRRTQKSHlmT2ZYcWtJWSt4VUVSQ1R4UmV0SGg4QS9BNFdtWS83eXA4cVFJREFRQUJBb0lCQVFDWWpXZnk0dmV2T0ZiVQpNUHo4dGtHS001Y1ZUaEN4YWEya1BPTGo1em01QitlZ25uSHpuMXNlL1pWWEVra2Q2VUxEa1MvQVZjdE5WZzVzCm4wWVNNSlNTNDVRR3ROdmcyZEJyc0lQL0RrQzducnV5WGFabUNpMmJQVFRyUjRudkltNE9ocmhVaFBnd0NMU2UKVmZtTnJldG5rc1V6OUVPTWgrWEhQaVg5Y0E5VzhVOEM5UGNoU3ZxSjFGR3crc0paLysyeGltdnF0RnUzMEZ0egphUkxOaEFVTmpGN2xuUUZhZS9pS2xGcDJ2MWRteXRCMUp5eTRkRzl1TFJSWWN4Qy9pa1Q4VUUzZ1RVdGR2V2lNClE4QXlQaVEvVVl3THVmazMreFIyUGxLUEFMdEF4MHhzWVJKTWVmaFJpWFlJWXZoa2srRTZPdGZyc2ZzZW15REoKODdRNzM3bnhBb0dCQU5pNy9GdkhBbmdnc1V3VDMzM1hoNzk5OGhiNTRWSzU1Yzc5MEtnRm9yeUpUYnhIWU5PZQpvRkdWbWd5YU92d1hWbnVhZFpoNlpsRU9mMXJXbVNPcWFXRjlGNFhYdnB6NWZuajJJUU1xV2ZUOTViSC9yaGRTClMzQTd1RmxQL3RlcS9JMmlpbHhsSFhKa3lEemxKeDJlbDhWR1hHeXpxTjBBZ3RPdjdvMElhYU9WQW9HQkFNMlUKZFJSMG5mRnd3MGpjVHVvU0ZBalBIaytEQnorZVRwbVFQWWZIZTJpb21qM0hadEkyMm1adG9sV1l4UTNqRjlPbAp5RkFvY2RjK2trS1V4VVBkMng3Qm44VkE5Rkg5bkN2NEZ1VDRJNmRPbUZkeWZtc3R1MkRnSWQ3aThYeGdURlM5CklPL0lqTWhuRzIzaHBVSkZDTU5VOCtMRXBKeUZBR29YK2lvcnFtL0ZBb0dCQU1IL2txWDcvc1BVVDU4UGNzOUwKcXlERzlYbUhkaDc4Y3kzU2w0Q3VlcnBVRkpiaE5WUjIrbjNNY1RXeW4vV2lWakVSVXcySEVpcWYxWE5ULzRPagpOK3loY2ZyRjRNTFZ1RlZCeXM3d2k5RDFxekttOEFmRUMrNk1KamtibDdzb1BDUHpSL0hvT0hGNnNKbUJiSC9nCncyMDd5K01vOVkvTXMwNFVmbTBUQ0t2NUFvR0JBTWl6dlRJQlFBbHRHMXBRcTBKZDcrMUJ0OGZNbGhFSURwaGgKZDVETnNhL1ZtdS9oY29LY1J0QmxERzBndnBEMk9sYklyUzJFcnMrREtPdVRycHE1UjZsWlF4QWlmK1JrQWtueQo1UGNaUWtXZXQ1LzRDVys5c0FlK0NaTStZS0FhcTZxM0VpYkcxcHIzL3BGaUVDTUlucXVFanEyL2FTM2RzeS9nCnhMelM4SXc1QW9HQUNOR2hlOWZmVkVCTDREZ1B5YjViNDhLVmttT2loMnl5VkMxTkRtakdiYWVhTWhLQzNzekQKMEVqZU0zTmNjNnViVmNGTGVUV0JBc2hJTk1zSENCWmZISFpRZk9ybkQ3dHNBY1M3MGt5eFBxZzc0c25TSEZPcAoxMlRXQnVFNUU5V2l0aW1JZHRJZWhwdlVLZVZWUTd0NXgrSnNsS2N3MnZ4YjdWV1E2SWg1cURrPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= diff --git a/Deprecated-Code/MasterApp/env/cockpit-api.env b/Deprecated-Code/MasterApp/env/cockpit-api.env deleted file mode 100644 index a5cd08efd..000000000 --- a/Deprecated-Code/MasterApp/env/cockpit-api.env +++ /dev/null @@ -1,6 +0,0 @@ -NODE_ENV=production -PORT=4009 - -PRESHARED_GATEWAY_KEY=cockpit_key - -MONGO_URL=mongodb://host.docker.internal:27017/cockpit diff --git a/Deprecated-Code/MasterApp/env/events-api.env b/Deprecated-Code/MasterApp/env/events-api.env deleted file mode 100644 index 2cfdb0c95..000000000 --- a/Deprecated-Code/MasterApp/env/events-api.env +++ /dev/null @@ -1,10 +0,0 @@ -NODE_ENV=production -PORT=4005 - -MONGO_URL=mongodb://host.docker.internal:27017/operations - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -PRESHARED_GATEWAY_KEY=events_key - -SENTRY_DNS=https://55a47295db124d01af0120be919eff93@sentry.io/1313621 - diff --git a/Deprecated-Code/MasterApp/env/keyvault-api.env b/Deprecated-Code/MasterApp/env/keyvault-api.env deleted file mode 100644 index d9d864b06..000000000 --- a/Deprecated-Code/MasterApp/env/keyvault-api.env +++ /dev/null @@ -1,9 +0,0 @@ -NODE_ENV=production -PORT=4002 - -MONGO_URL=mongodb://host.docker.internal:27017/keyvault - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -KEYVAULT_API_PRESHARED=keyvault_key - -SERVER_SECRET=9%o|i6-mlihgOd&fXeUDB&ae+j"dnM+* diff --git a/Deprecated-Code/MasterApp/env/logs-api.env b/Deprecated-Code/MasterApp/env/logs-api.env deleted file mode 100644 index 68221a9e2..000000000 --- a/Deprecated-Code/MasterApp/env/logs-api.env +++ /dev/null @@ -1,7 +0,0 @@ -NODE_ENV=production -PORT=4007 - -PRESHARED_GATEWAY_KEY=logs_key -PRESHARED_ELK_LOG_KEY=preshared_log -BEGIN_URL_ELK_LOG=https://logs-dev.superalgos.org/s/ -END_URL_ELK_LOG=/app/kibana#/dashboard/logdashboard?embed=true&_g=(refreshInterval%3A(pause%3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-6M%2Cmode%3Aquick%2Cto%3Anow)) diff --git a/Deprecated-Code/MasterApp/env/master-app-api.env b/Deprecated-Code/MasterApp/env/master-app-api.env deleted file mode 100644 index ea4c5b45e..000000000 --- a/Deprecated-Code/MasterApp/env/master-app-api.env +++ /dev/null @@ -1,27 +0,0 @@ -TEAMS_API_PRESHARED=teams_key -USERS_API_PRESHARED=users_key -EVENTS_API_PRESHARED=events_key -KEYVAULT_API_PRESHARED=keyvault_key -NOTIFICATIONS_API_PRESHARED=notifications_key -OPERATIONS_API_PRESHARED=clones_key -LOGS_API_PRESHARED=logs_key -STRATEGIZER_API_PRESHARED=strategizer_keys -COCKPIT_API_PRESHARED=cockpit_key -SAWEB_API_PRESHARED=saweb_key - -GRAPHQL_API_URL=http://host.docker.internal:4100/graphql - -TEAMS_API_URL=http://host.docker.internal:4001/graphql -USERS_API_URL=http://host.docker.internal:4000/graphql -EVENTS_API_URL=http://host.docker.internal:4005/graphql -KEYVAULT_API_URL=http://host.docker.internal:4002/graphql -NOTIFICATIONS_API_URL=http://host.docker.internal:4006/graphql -OPERATIONS_API_URL=http://host.docker.internal:4003/graphql -LOGS_API_URL=http://host.docker.internal:4007/graphql -STRATEGIZER_API_URL=http://host.docker.internal:4008/graphql -COCKPIT_API_URL=http://host.docker.internal:4009/graphql -SAWEB_API_URL=http://host.docker.internal:4004/graphql - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ diff --git a/Deprecated-Code/MasterApp/env/master-app.env b/Deprecated-Code/MasterApp/env/master-app.env deleted file mode 100644 index bc938c5cd..000000000 --- a/Deprecated-Code/MasterApp/env/master-app.env +++ /dev/null @@ -1,12 +0,0 @@ -NODE_ENV=production -PORT=3100 - -PLATFORM_API_URL=http://host.docker.internal:4100/graphql -CANVAS_URL=http://host.docker.internal:4101/ - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ -AUTH0_CLIENTID=jfendNx2Vpa3LJa58x8lEmoPTG3nJV3B -AUTH0_CALLBACK_URL=http://host.docker.internal:3100/callback -AUTH0_LOGOUT_URL=http://host.docker.internal:3100 diff --git a/Deprecated-Code/MasterApp/env/notifications-api.env b/Deprecated-Code/MasterApp/env/notifications-api.env deleted file mode 100644 index 582223872..000000000 --- a/Deprecated-Code/MasterApp/env/notifications-api.env +++ /dev/null @@ -1,29 +0,0 @@ -NODE_ENV=production -PORT=4006 - -PRESHARED_GATEWAY_KEY=notifications_key -GENERATE_SOURCEMAP=false - -# # SendGrid Api Keys -# SG_APIKEY= -# SG_APIKEY_CAMPAIGN= - -# SG_MASTER_SIGNUP_EMAILID= -# SG_MASTER_FEEDBACK_EMAILID= - -# SG_CORPORATE_SIGNUP_EMAILID= -# SG_CORPORATE_CONTACT_EMAILID= - -# SG_TEAMS_MEMBER_INVITE_EMAILID= -# SG_TEAMS_TEAMCREATE_EMAILID= - -# #SendGrid Origins -# SG_PLATFORM_ORIGIN= -# SG_CORPORATE_ORIGIN= - -# # Email addresses -# CORPORATE_EMAIL= - -# # Google ReCaptcha -# RECAPTCHA= - diff --git a/Deprecated-Code/MasterApp/env/saweb-api.env b/Deprecated-Code/MasterApp/env/saweb-api.env deleted file mode 100644 index 932aad7c6..000000000 --- a/Deprecated-Code/MasterApp/env/saweb-api.env +++ /dev/null @@ -1,21 +0,0 @@ -NODE_ENV=production -PORT=4004 - -LOG_LEVEL=error - -MONGO_URL=mongodb://host.docker.internal:27017/saweb - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -PRESHARED_GATEWAY_KEY=saweb_key - -# The NODE_ENDPOINT is used at team creation and is where other components will search for the team -NODE_ENDPOINT=http://host.docker.internal:4100/ - -# Storage Configuration -STORAGE_PROVIDER=Minio -# Minio -MINIO_END_POINT=minio -MINIO_PORT=9000 -MINIO_USE_SSL=false -MINIO_ACCESS_KEY=minio -MINIO_SECRET_KEY=minio123 diff --git a/Deprecated-Code/MasterApp/env/strategizer-api.env b/Deprecated-Code/MasterApp/env/strategizer-api.env deleted file mode 100644 index 6ab84ea97..000000000 --- a/Deprecated-Code/MasterApp/env/strategizer-api.env +++ /dev/null @@ -1,7 +0,0 @@ -NODE_ENV=production -PORT=4008 - -MONGO_URL=mongodb://host.docker.internal:27017/strategies - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -PRESHARED_GATEWAY_KEY=strategizer_keys diff --git a/Deprecated-Code/MasterApp/env/teams-api.env b/Deprecated-Code/MasterApp/env/teams-api.env deleted file mode 100644 index 9ba68bb78..000000000 --- a/Deprecated-Code/MasterApp/env/teams-api.env +++ /dev/null @@ -1,14 +0,0 @@ -NODE_ENV=production -PORT=4001 - -PRESHARED_GATEWAY_KEY=teams_key - -PRISMA_SECRET=prisma_secret -PRISMA_ENDPOINT=http://prisma:4466 - -GENERATE_SOURCEMAP=true -SCHEMA_PATH=src/generated/prisma.graphql - -PLATFORM_API_URL=http://host.docker.internal:4100/graphql - -STORAGE_URL=https://aadevelop.blob.core.windows.net diff --git a/Deprecated-Code/MasterApp/env/teams-prisma.env b/Deprecated-Code/MasterApp/env/teams-prisma.env deleted file mode 100644 index 315fcabde..000000000 --- a/Deprecated-Code/MasterApp/env/teams-prisma.env +++ /dev/null @@ -1 +0,0 @@ -PRISMA_MANAGEMENT_API_SECRET=prisma_secret diff --git a/Deprecated-Code/MasterApp/env/users-api.env b/Deprecated-Code/MasterApp/env/users-api.env deleted file mode 100644 index a4ebb963f..000000000 --- a/Deprecated-Code/MasterApp/env/users-api.env +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=4000 - -MONGO_URL=mongodb://host.docker.internal:27017/users - -GATEWAY_ENDPOINT=http://host.docker.internal:4100/graphql -USERS_API_PRESHARED=users_key - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-dev.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ -AUTH0_CALLBACK_URL=http://host.docker.internal/callback -AUTH0_LOGOUT_URL=http://host.docker.internal diff --git a/Deprecated-Code/MasterApp/env_linux/aaweb.env b/Deprecated-Code/MasterApp/env_linux/aaweb.env deleted file mode 100644 index 5e41b8c9a..000000000 --- a/Deprecated-Code/MasterApp/env_linux/aaweb.env +++ /dev/null @@ -1,19 +0,0 @@ -NODE_ENV=production -PORT=4101 - -#Log options -CONSOLE_LOG=false -CONSOLE_ERROR_LOG=true -LOG_FILE_CONTENT=false - -# Server commands -PATH_TO_CANVAS_APP=./dependency/CanvasApp -PATH_TO_FILES_COMPONENT=./dependency/Files-Component/src - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql - -# Webproxy -VIRTUAL_HOST=demo-charts-dev.superalgos.org -LETSENCRYPT_HOST=demo-charts-dev.superalgos.org -LETSENCRYPT_EMAIL=ssl-certificates@advancedalgos.org -VIRTUAL_PORT=4101 diff --git a/Deprecated-Code/MasterApp/env_linux/clones-api.env b/Deprecated-Code/MasterApp/env_linux/clones-api.env deleted file mode 100644 index df6a33eb3..000000000 --- a/Deprecated-Code/MasterApp/env_linux/clones-api.env +++ /dev/null @@ -1,26 +0,0 @@ -NODE_ENV=production -PORT=4003 - -FULL_LOG=false - -# Database configuration -MONGO_URL=mongodb://mongo/operations - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -OPERATIONS_API_PRESHARED=clones_key - -# Temporary restriction on asset balances -ACCESS_CODE=access_code -DEFAULT_BALANCE_ASSET_A=0 -DEFAULT_BALANCE_ASSET_B=0.001 - -# Kubernetes configuration -GATEWAY_ENDPOINT_K8S=http://localhost:4100/graphql -CLONE_EXECUTOR_IMAGE=superalgos/clone-executor:1.0.33 - -CLUSTER_SERVER=https://kubernetes:16443 -CLUSTER_NAME=microk8s-cluster -CERTIFICATE_AUTHORITY_DATA=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lKQU5LRmNnK2hiS0xpTUEwR0NTcUdTSWIzRFFFQkN3VUFNQlF4RWpBUUJnTlYKQkFNTUNURXlOeTR3TGpBdU1UQWVGdzB4T1RBMk1qQXhNak0yTURSYUZ3MDBOakV4TURVeE1qTTJNRFJhTUJReApFakFRQmdOVkJBTU1DVEV5Tnk0d0xqQXVNVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DCmdnRUJBTXBTSFhlZjFZSTRJR1UyeUlNNVM4THRxWTMxNklQczVnNGxORVlCV0wrME1mMXhBRURHRU0vaW4reTAKMkZ0QUFKWnhybWZ3UEpSTVozQ2tMMysxTnJxVjFtQW1wRkE5cDcxZXlOYmpuMmk2N0Y0N2MyeldGNlBTc0ZlYwowVUlmRklWaE9wWmgvUTN0WUQvZlQveEJlOTE2Wmd2eVY0TThCL1BGY2xKbWUyM1VTMHB3RGZObFpmc2FsQzhpCkVCc2pQYURrMThucng2bDVZTWF4UENyNHRnSWc2WENvQm9wS1l5UzNpZUtSSzh2Qnhyb3drN1pHWWJMUm1udHUKZUU4b1Z5RXpsUGVrNkJYQm1JRVp3MmJMeTNKeG42b3IyWmlZMEcrekRZKzYwN2dsaFVyNnhEM0QxUHUzMnozNQo0SldlbkJTem5wVjMvTDk0aUVFMEpsdG9xS3NDQXdFQUFhTlRNRkV3SFFZRFZSME9CQllFRkRERzhjUG5iZmIyCnd2cXBXSzdEYzlpckt3RnpNQjhHQTFVZEl3UVlNQmFBRkRERzhjUG5iZmIyd3ZxcFdLN0RjOWlyS3dGek1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1Bwclp6bnhaZEtuUUc1U3duSgpwWDBsditNNFF0R04zMDZwamxycTFtbWY2WXEwRDl5bEZ2WFRmNUtTWXZ0VGNaenorV1lReGNrc1JtUkIvOERjCjZnQ2hLSHFsV1NIV3FHcU94T1RQVFYvYktOd0NmY1BmaS81YzlFd0NtdjBndlA1Y0MxaTdWMUMxSEoxN0UwY0EKSzVEdytJMFd0Ky9kRWJXdnVhRStmcDBKT3hsdllMUGdkZlBoTnliL2lScDYzdHJudEhjdy9MOTEyM2xpMHF1aQo2VUJUZzFFYnR1VDZSVitsK2d5NkIvaENERG9IaUJRdnM3VmNqVXNaN1ZNUlpkckdlY0U5R3Q5Nkx2N0tNZ2lNCmQ4eFZXVGg5MnArU2lEem1vNnY1WVFvTHNqU25jK1NMK09jN2JsODRVSTFTNk1CVExSa0tRb0d6L0tPLzNrRkUKT08wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== -CONTEXT_NAME=microk8s-cluster -USER_NAME=admin -USER_PASSWORD=MGJmZDhZd3RnaGNyc3NqNGZZd3o1NzczazRJMnBtUWhuNGRvRXdIZXdvMD0K diff --git a/Deprecated-Code/MasterApp/env_linux/cockpit-api.env b/Deprecated-Code/MasterApp/env_linux/cockpit-api.env deleted file mode 100644 index c61f41fb4..000000000 --- a/Deprecated-Code/MasterApp/env_linux/cockpit-api.env +++ /dev/null @@ -1,6 +0,0 @@ -NODE_ENV=production -PORT=4009 - -PRESHARED_GATEWAY_KEY=cockpit_key - -MONGO_URL=mongodb://mongo/cockpit diff --git a/Deprecated-Code/MasterApp/env_linux/events-api.env b/Deprecated-Code/MasterApp/env_linux/events-api.env deleted file mode 100644 index 6578bf6f7..000000000 --- a/Deprecated-Code/MasterApp/env_linux/events-api.env +++ /dev/null @@ -1,10 +0,0 @@ -NODE_ENV=production -PORT=4005 - -MONGO_URL=mongodb://mongo/operations - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -PRESHARED_GATEWAY_KEY=events_key - -SENTRY_DNS=https://55a47295db124d01af0120be919eff93@sentry.io/1313621 - diff --git a/Deprecated-Code/MasterApp/env_linux/keyvault-api.env b/Deprecated-Code/MasterApp/env_linux/keyvault-api.env deleted file mode 100644 index a321b16c9..000000000 --- a/Deprecated-Code/MasterApp/env_linux/keyvault-api.env +++ /dev/null @@ -1,9 +0,0 @@ -NODE_ENV=production -PORT=4002 - -MONGO_URL=mongodb://mongo/keyvault - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -KEYVAULT_API_PRESHARED=keyvault_key - -SERVER_SECRET=9%o|i6-mlihgOd&fXeUDB&ae+j"dnM+* diff --git a/Deprecated-Code/MasterApp/env_linux/logs-api.env b/Deprecated-Code/MasterApp/env_linux/logs-api.env deleted file mode 100644 index 68221a9e2..000000000 --- a/Deprecated-Code/MasterApp/env_linux/logs-api.env +++ /dev/null @@ -1,7 +0,0 @@ -NODE_ENV=production -PORT=4007 - -PRESHARED_GATEWAY_KEY=logs_key -PRESHARED_ELK_LOG_KEY=preshared_log -BEGIN_URL_ELK_LOG=https://logs-dev.superalgos.org/s/ -END_URL_ELK_LOG=/app/kibana#/dashboard/logdashboard?embed=true&_g=(refreshInterval%3A(pause%3A!t%2Cvalue%3A0)%2Ctime%3A(from%3Anow-6M%2Cmode%3Aquick%2Cto%3Anow)) diff --git a/Deprecated-Code/MasterApp/env_linux/master-app-api.env b/Deprecated-Code/MasterApp/env_linux/master-app-api.env deleted file mode 100644 index 90a88b952..000000000 --- a/Deprecated-Code/MasterApp/env_linux/master-app-api.env +++ /dev/null @@ -1,27 +0,0 @@ -TEAMS_API_PRESHARED=teams_key -USERS_API_PRESHARED=users_key -EVENTS_API_PRESHARED=events_key -KEYVAULT_API_PRESHARED=keyvault_key -NOTIFICATIONS_API_PRESHARED=notifications_key -OPERATIONS_API_PRESHARED=clones_key -LOGS_API_PRESHARED=logs_key -STRATEGIZER_API_PRESHARED=strategizer_keys -COCKPIT_API_PRESHARED=cockpit_key -SAWEB_API_PRESHARED=saweb_key - -GRAPHQL_API_URL=http://localhost:4100/graphql - -TEAMS_API_URL=http://teams-api:4001/graphql -USERS_API_URL=http://users-api:4000/graphql -EVENTS_API_URL=http://events-api:4005/graphql -KEYVAULT_API_URL=http://keyvault-api:4002/graphql -NOTIFICATIONS_API_URL=http://notifications-api:4006/graphql -OPERATIONS_API_URL=http://clones-api:4003/graphql -LOGS_API_URL=http://logs-api:4007/graphql -STRATEGIZER_API_URL=http://strategizer-api:4008/graphql -COCKPIT_API_URL=http://cockpit-api:4009/graphql -SAWEB_API_URL=http://saweb-api:4004/graphql - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ diff --git a/Deprecated-Code/MasterApp/env_linux/master-app.env b/Deprecated-Code/MasterApp/env_linux/master-app.env deleted file mode 100644 index 5aab561cb..000000000 --- a/Deprecated-Code/MasterApp/env_linux/master-app.env +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=3100 - -PLATFORM_API_URL=http://localhost:4100/graphql -CANVAS_URL=http://localhost:4101/ - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ -AUTH0_CLIENTID=jfendNx2Vpa3LJa58x8lEmoPTG3nJV3B -AUTH0_CALLBACK_URL=http://localhost:3100/callback -AUTH0_LOGOUT_URL=http://localhost:3100/ - diff --git a/Deprecated-Code/MasterApp/env_linux/notifications-api.env b/Deprecated-Code/MasterApp/env_linux/notifications-api.env deleted file mode 100644 index 582223872..000000000 --- a/Deprecated-Code/MasterApp/env_linux/notifications-api.env +++ /dev/null @@ -1,29 +0,0 @@ -NODE_ENV=production -PORT=4006 - -PRESHARED_GATEWAY_KEY=notifications_key -GENERATE_SOURCEMAP=false - -# # SendGrid Api Keys -# SG_APIKEY= -# SG_APIKEY_CAMPAIGN= - -# SG_MASTER_SIGNUP_EMAILID= -# SG_MASTER_FEEDBACK_EMAILID= - -# SG_CORPORATE_SIGNUP_EMAILID= -# SG_CORPORATE_CONTACT_EMAILID= - -# SG_TEAMS_MEMBER_INVITE_EMAILID= -# SG_TEAMS_TEAMCREATE_EMAILID= - -# #SendGrid Origins -# SG_PLATFORM_ORIGIN= -# SG_CORPORATE_ORIGIN= - -# # Email addresses -# CORPORATE_EMAIL= - -# # Google ReCaptcha -# RECAPTCHA= - diff --git a/Deprecated-Code/MasterApp/env_linux/saweb-api.env b/Deprecated-Code/MasterApp/env_linux/saweb-api.env deleted file mode 100644 index fb40f4f9d..000000000 --- a/Deprecated-Code/MasterApp/env_linux/saweb-api.env +++ /dev/null @@ -1,21 +0,0 @@ -NODE_ENV=production -PORT=4004 - -LOG_LEVEL=error - -MONGO_URL=mongodb://mongo/saweb - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -PRESHARED_GATEWAY_KEY=saweb_key - -# The NODE_ENDPOINT is used at team creation and is where other components will search for the team -NODE_ENDPOINT=http://localhost:4100/ - -# Storage Configuration -STORAGE_PROVIDER=Minio -# Minio -MINIO_END_POINT=minio -MINIO_PORT=9000 -MINIO_USE_SSL=false -MINIO_ACCESS_KEY=minio -MINIO_SECRET_KEY=minio123 diff --git a/Deprecated-Code/MasterApp/env_linux/strategizer-api.env b/Deprecated-Code/MasterApp/env_linux/strategizer-api.env deleted file mode 100644 index df17d4b92..000000000 --- a/Deprecated-Code/MasterApp/env_linux/strategizer-api.env +++ /dev/null @@ -1,7 +0,0 @@ -NODE_ENV=production -PORT=4008 - -MONGO_URL=mongodb://mongo/strategies - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -PRESHARED_GATEWAY_KEY=strategizer_keys diff --git a/Deprecated-Code/MasterApp/env_linux/teams-api.env b/Deprecated-Code/MasterApp/env_linux/teams-api.env deleted file mode 100644 index b3e6ad7b5..000000000 --- a/Deprecated-Code/MasterApp/env_linux/teams-api.env +++ /dev/null @@ -1,14 +0,0 @@ -NODE_ENV=production -PORT=4001 - -PRESHARED_GATEWAY_KEY=teams_key - -PRISMA_SECRET=prisma_secret -PRISMA_ENDPOINT=http://prisma:4466 - -GENERATE_SOURCEMAP=true -SCHEMA_PATH=src/generated/prisma.graphql - -PLATFORM_API_URL=http://master-app-api:4100/graphql - -STORAGE_URL=https://aadevelop.blob.core.windows.net diff --git a/Deprecated-Code/MasterApp/env_linux/teams-prisma.env b/Deprecated-Code/MasterApp/env_linux/teams-prisma.env deleted file mode 100644 index 315fcabde..000000000 --- a/Deprecated-Code/MasterApp/env_linux/teams-prisma.env +++ /dev/null @@ -1 +0,0 @@ -PRISMA_MANAGEMENT_API_SECRET=prisma_secret diff --git a/Deprecated-Code/MasterApp/env_linux/users-api.env b/Deprecated-Code/MasterApp/env_linux/users-api.env deleted file mode 100644 index 77024832e..000000000 --- a/Deprecated-Code/MasterApp/env_linux/users-api.env +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=4000 - -MONGO_URL=mongodb://mongo/users - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -USERS_API_PRESHARED=users_key - -AUTH0_DOMAIN=superalgos.eu.auth0.com -AUTH0_AUDIENCE=https://auth-local.superalgos.org -AUTH0_ISSUER=https://superalgos.eu.auth0.com/ -AUTH0_CALLBACK_URL=https://localhost:3100/callback -AUTH0_LOGOUT_URL=https://localhost:3100/ diff --git a/Deprecated-Code/MasterApp/server/.dockerignore b/Deprecated-Code/MasterApp/server/.dockerignore deleted file mode 100644 index 623b306c1..000000000 --- a/Deprecated-Code/MasterApp/server/.dockerignore +++ /dev/null @@ -1,12 +0,0 @@ -# Ignore files to be uploaded to the image -.env* -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/MasterApp/server/.gitignore b/Deprecated-Code/MasterApp/server/.gitignore deleted file mode 100644 index 891f9f16c..000000000 --- a/Deprecated-Code/MasterApp/server/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env* - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -# Mac specific files -.DS_Store - -# JetBrains -.idea diff --git a/Deprecated-Code/MasterApp/server/CODE_OF_CONDUCT.md b/Deprecated-Code/MasterApp/server/CODE_OF_CONDUCT.md deleted file mode 100644 index 05b430885..000000000 --- a/Deprecated-Code/MasterApp/server/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/MasterApp/server/CONTRIBUTING.md b/Deprecated-Code/MasterApp/server/CONTRIBUTING.md deleted file mode 100644 index f82ea6d92..000000000 --- a/Deprecated-Code/MasterApp/server/CONTRIBUTING.md +++ /dev/null @@ -1,51 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to the this module. Your help may be essential to the project's success and we want you in! - -Superalgos.org is an open source project, currently at a very early stage. Although this module is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _work for hire_ and --as such-- are compensated on a case by case basis, with ALGO tokens. Contributors agree to provide an express grant of patent rights for their contributions. Our Balanced Contributor Intellectual Property Agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person named below and Superalgos ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you sign it. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by signing this Agreement, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor or contractor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. This is true regardless of the computer you use to develop your IP, including the one furnished to you by the Company. - -3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Works made for hire.** All Company IP that you are involved with or create as part of your work for the Company is [work made for hire](http://www.copyright.gov/circs/circ09.pdf) under copyright law and compensated by your regular salary or pay. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP, including after you leave the Company. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your job and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. - - -Print Name: _____________ - -Sign: ________________ - -Date: ________________ - diff --git a/Deprecated-Code/MasterApp/server/Dockerfile b/Deprecated-Code/MasterApp/server/Dockerfile deleted file mode 100644 index 361862e36..000000000 --- a/Deprecated-Code/MasterApp/server/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/master-app-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/MasterApp/server/Dockerfile.prod b/Deprecated-Code/MasterApp/server/Dockerfile.prod deleted file mode 100644 index a993dce25..000000000 --- a/Deprecated-Code/MasterApp/server/Dockerfile.prod +++ /dev/null @@ -1,21 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4100 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/MasterApp/server/LICENSE b/Deprecated-Code/MasterApp/server/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/MasterApp/server/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/MasterApp/server/docker-compose.prod.yml b/Deprecated-Code/MasterApp/server/docker-compose.prod.yml deleted file mode 100644 index 022f14032..000000000 --- a/Deprecated-Code/MasterApp/server/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: masterappapi-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: masterappapi - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: node . - expose: - - 4100 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/MasterApp/server/package-lock.json b/Deprecated-Code/MasterApp/server/package-lock.json deleted file mode 100644 index 32bbc012f..000000000 --- a/Deprecated-Code/MasterApp/server/package-lock.json +++ /dev/null @@ -1,4455 +0,0 @@ -{ - "name": "@superalgos/master-app-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.7.tgz", - "integrity": "sha512-+ertvzAwzkYmuUtT8zH3Zi6jPdyxZwOgnYaZHY7iLnMVJDhQKWlkyjLMF8wyzlPiEdDImVUMm5lOIBZo7LkGlg==", - "requires": { - "apollo-env": "0.5.1" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.20", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.20.tgz", - "integrity": "sha512-3LWZa80HcP70Pl+H4KhLDJ7S0px+9/c8GTXdl6SpunRecUaB27g/oOQnAjNHLHdbWuGE0uyqcuGiTfbKB3ilaQ==" - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/express": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.0.tgz", - "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz", - "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/node": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", - "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "@wry/equality": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.9.tgz", - "integrity": "sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ==", - "requires": { - "tslib": "^1.9.3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "apollo-cache-control": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.7.2.tgz", - "integrity": "sha512-7prjFN8H9lRE0npqGG8kM3XICvNCcgQt6eCy8kkcPOIZwM+F8m8ShjEfNF9UWW32i+poOk3G67HegPRyjCc6/Q==", - "requires": { - "apollo-server-env": "2.4.0", - "graphql-extensions": "0.7.2" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.7.2.tgz", - "integrity": "sha512-TuVINuAOrEtzQAkAlCZMi9aP5rcZ+pVaqoBI5fD2k5O9fmb8OuXUQOW028MUhC66tg4E7h4YSF1uYUIimbu4SQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6" - } - } - } - }, - "apollo-datasource": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.5.0.tgz", - "integrity": "sha512-SVXxJyKlWguuDjxkY/WGlC/ykdsTmPxSF0z8FenagcQ91aPURXzXP1ZDz5PbamY+0iiCRubazkxtTQw4GWTFPg==", - "requires": { - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.4.0" - } - }, - "apollo-engine-reporting": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.3.2.tgz", - "integrity": "sha512-Q9XUZ3CTqddjCswlbn+OD2oYxZ5p4lCAnsWOGMfYnSmCXLagyNK28UFFQodjFOy73p6nlTAg9cwaJ9yMOBeeXA==", - "requires": { - "apollo-engine-reporting-protobuf": "0.3.1", - "apollo-graphql": "^0.3.2", - "apollo-server-core": "2.6.4", - "apollo-server-env": "2.4.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.7.3" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.1.tgz", - "integrity": "sha512-Ui3nPG6BSZF8BEqxFs6EkX6mj2OnFLMejxEHSOdM82bakyeouCGd7J0fiy8AD6liJoIyc4X7XfH4ZGGMvMh11A==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-env": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.1.tgz", - "integrity": "sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw==", - "requires": { - "core-js": "^3.0.1", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - } - }, - "apollo-graphql": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.3.2.tgz", - "integrity": "sha512-YbzYGR14GV0023m//EU66vOzZ3i7c04V/SF8Qk+60vf1sOWyKgO6mxZJ4BKhw10qWUayirhSDxq3frYE+qSG0A==", - "requires": { - "apollo-env": "0.5.1", - "lodash.sortby": "^4.7.0" - } - }, - "apollo-link": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", - "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", - "requires": { - "apollo-utilities": "^1.3.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.19" - } - }, - "apollo-link-context": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.18.tgz", - "integrity": "sha512-aG5cbUp1zqOHHQjAJXG7n/izeMQ6LApd/whEF5z6qZp5ATvcyfSNkCfy3KRJMMZZ3iNfVTs6jF+IUA8Zvf+zeg==", - "requires": { - "apollo-link": "^1.2.12", - "tslib": "^1.9.3" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", - "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", - "requires": { - "apollo-utilities": "^1.3.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.19" - } - } - } - }, - "apollo-link-http": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.5.tgz", - "integrity": "sha512-C5N6N/mRwmepvtzO27dgMEU3MMtRKSqcljBkYNZmWwH11BxkUQ5imBLPM3V4QJXNE7NFuAQAB5PeUd4ligivTQ==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-link-http-common": "^0.2.5" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", - "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", - "requires": { - "apollo-utilities": "^1.3.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.19" - } - } - } - }, - "apollo-link-http-common": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.5.tgz", - "integrity": "sha512-6FV1wr5AqAyJ64Em1dq5hhGgiyxZE383VJQmhIoDVc3MyNcFL92TkhxREOs4rnH2a9X2iJMko7nodHSGLC6d8w==", - "requires": { - "apollo-link": "^1.2.3" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", - "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", - "requires": { - "apollo-utilities": "^1.3.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.19" - } - } - } - }, - "apollo-server-caching": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz", - "integrity": "sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==", - "requires": { - "lru-cache": "^5.0.0" - } - }, - "apollo-server-core": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.6.4.tgz", - "integrity": "sha512-GBF+tQoJ/ysaY2CYMkuuAwJM1nk1yLJumrsBTFfcvalSzS64VdS5VN/zox1eRI+LHQQzHM18HYEAgDGa/EX+gw==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6", - "@apollographql/graphql-playground-html": "1.6.20", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.7.2", - "apollo-datasource": "0.5.0", - "apollo-engine-reporting": "1.3.2", - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.4.0", - "apollo-server-errors": "2.3.0", - "apollo-server-plugin-base": "0.5.3", - "apollo-tracing": "0.7.2", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "0.7.3", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - } - }, - "apollo-server-env": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.0.tgz", - "integrity": "sha512-7ispR68lv92viFeu5zsRUVGP+oxsVI3WeeBNniM22Cx619maBUwcYTIC3+Y3LpXILhLZCzA1FASZwusgSlyN9w==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz", - "integrity": "sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw==" - }, - "apollo-server-express": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.6.4.tgz", - "integrity": "sha512-U6hiZxty/rait39V5d+QeueNHlwfl68WbYtsutDUVxnq2Jws2ZDrvIkaWWN6HQ77+nBy5gGVxycvWIyoHHfi+g==", - "requires": { - "@apollographql/graphql-playground-html": "1.6.20", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.17.0", - "accepts": "^1.3.5", - "apollo-server-core": "2.6.4", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.5.3.tgz", - "integrity": "sha512-Ax043vQTzPgFeJk6m6hmPm9NMfogO3LlTKJfrWHuyZhPNeTLweHNK30vpdzzgPalcryyDMDfLYFzxuDm0W+rRQ==" - }, - "apollo-tracing": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.7.2.tgz", - "integrity": "sha512-bT4/n8Vy9DweC3+XWJelJD41FBlKMXR0OVxjLMiCe9clb4yTgKhYxRGTyh9KjmhWsng9gG/DphO0ixWsOgdXmA==", - "requires": { - "apollo-server-env": "2.4.0", - "graphql-extensions": "0.7.2" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.7.2.tgz", - "integrity": "sha512-TuVINuAOrEtzQAkAlCZMi9aP5rcZ+pVaqoBI5fD2k5O9fmb8OuXUQOW028MUhC66tg4E7h4YSF1uYUIimbu4SQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6" - } - } - } - }, - "apollo-utilities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", - "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", - "requires": { - "@wry/equality": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "requires": { - "dicer": "0.3.0" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", - "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "requires": { - "streamsearch": "0.1.2" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", - "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "express-jwt": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz", - "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==", - "requires": { - "async": "^1.5.0", - "express-unless": "^0.3.0", - "jsonwebtoken": "^8.1.0", - "lodash.set": "^4.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - } - } - }, - "express-unless": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", - "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA=" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-capacitor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", - "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.3.1.tgz", - "integrity": "sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-extensions": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.7.3.tgz", - "integrity": "sha512-D+FZM0t5gFntJUizeRCurZuUqsyVP13CRejRX+cDJivyGkE6OMWYkCWlzHcbye79q+hYN1m6a3NhlrJRaD9D0w==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6" - } - }, - "graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "graphql-tools": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.5.tgz", - "integrity": "sha512-kQCh3IZsMqquDx7zfIGWBau42xe46gmqabwYkpPlCLIjcEY1XK+auP7iGRD9/205BPyoQdY8hT96MPpgERdC9Q==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - }, - "graphql-upload": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.7.tgz", - "integrity": "sha512-gi2yygbDPXbHPC7H0PNPqP++VKSoNoJO4UrXWq4T0Bi4IhyUd3Ycop/FSxhx2svWIK3jdXR/i0vi91yR1aAF0g==", - "requires": { - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.4", - "http-errors": "^1.7.2", - "object-path": "^0.11.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonwebtoken": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", - "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", - "requires": { - "jws": "^3.1.5", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", - "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.10", - "safe-buffer": "^5.0.1" - } - }, - "jwks-rsa": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.5.1.tgz", - "integrity": "sha512-FcH0mrrfS/5CDArzw7y4AIsNJ15SkAb8XTmfEnpUDmEsUf/4KfSQifff7hYEyrZuKnhisn4L9Pme4fb/ZoHKqQ==", - "requires": { - "debug": "^2.6.9", - "jsonwebtoken": "^8.5.1", - "limiter": "^1.1.4", - "lru-memoizer": "^1.12.0", - "ms": "^2.1.1", - "request": "^2.88.0" - }, - "dependencies": { - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "jws": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", - "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", - "requires": { - "jwa": "^1.1.5", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==" - }, - "lock": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz", - "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0=" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "lru-memoizer": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz", - "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=", - "requires": { - "lock": "~0.1.2", - "lodash": "^4.17.4", - "lru-cache": "~4.0.0", - "very-fast-args": "^1.1.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "nodemon": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.1.tgz", - "integrity": "sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", - "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==" - } - } - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" - }, - "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", - "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "ts-invariant": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", - "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "very-fast-args": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz", - "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "zen-observable": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", - "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" - }, - "zen-observable-ts": { - "version": "0.8.19", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.19.tgz", - "integrity": "sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/MasterApp/server/package.json b/Deprecated-Code/MasterApp/server/package.json deleted file mode 100644 index b4f34fdfe..000000000 --- a/Deprecated-Code/MasterApp/server/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "@superalgos/master-app-api", - "version": "0.1.0", - "description": "Responsible for loading all web modules and running them.", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/MasterApp.git" - }, - "bugs": { - "url": "https://github.com/Superalgos/MasterApp/issues" - }, - "homepage": "https://github.com/Superalgos/MasterApp#readme", - "main": "src/index.js", - "scripts": { - "start": "nodemon src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "devDependencies": { - "nodemon": "1.19.1" - }, - "dependencies": { - "apollo-link": "1.2.12", - "apollo-link-context": "1.0.18", - "apollo-link-http": "1.5.5", - "apollo-server-express": "2.6.4", - "axios": "0.19.0", - "body-parser": "1.19.0", - "dotenv": "8.0.0", - "esm": "3.2.25", - "express": "4.17.1", - "express-jwt": "5.3.1", - "graphql": "14.3.1", - "graphql-tools": "4.0.5", - "jwks-rsa": "1.5.1", - "lodash.merge": "4.6.1", - "node-fetch": "2.6.0", - "winston": "3.2.1" - } -} diff --git a/Deprecated-Code/MasterApp/server/src/app.js b/Deprecated-Code/MasterApp/server/src/app.js deleted file mode 100644 index e40e13a0d..000000000 --- a/Deprecated-Code/MasterApp/server/src/app.js +++ /dev/null @@ -1,220 +0,0 @@ -import express from 'express' -import 'dotenv/config' -import { ApolloServer, ForbiddenError } from 'apollo-server-express' -import { mergeSchemas } from 'graphql-tools' -import jwt from 'express-jwt' -import jwksRsa from 'jwks-rsa' -import axios from 'axios' - -import { createTransformedRemoteSchema } from './createRemoteSchema' -import { teams, events, operations } from './links' - -import logger from './logger' -import bodyParser from 'body-parser' - -async function getUserId (authId) { - try { - - const userData = await axios({ - url: process.env.USERS_API_URL, - method: 'post', - headers: { - preshared: process.env.USERS_API_PRESHARED - }, - data: { - query: ` - { - userByAuthId(authId: "${authId}") - { - id - } - } - ` - } - }) - return userData.data.data.userByAuthId.id - } catch (error) { - return (error) - } -} - -async function run () { - const transformedKeyVaultSchema = await createTransformedRemoteSchema( - 'keyVault_', - process.env.KEYVAULT_API_URL, - process.env.KEYVAULT_API_PRESHARED) - const transformedTeamsSchema = await createTransformedRemoteSchema( - 'teams_', - process.env.TEAMS_API_URL, - process.env.TEAMS_API_PRESHARED) - const transformedUsersSchema = await createTransformedRemoteSchema( - 'users_', - process.env.USERS_API_URL, - process.env.USERS_API_PRESHARED) - const transformedEventsSchema = await createTransformedRemoteSchema( - 'events_', - process.env.EVENTS_API_URL, - process.env.EVENTS_API_PRESHARED) - const transformedOperationsSchema = await createTransformedRemoteSchema( - 'operations_', - process.env.OPERATIONS_API_URL, - process.env.OPERATIONS_API_PRESHARED) - const transformedNotificationsSchema = await createTransformedRemoteSchema( - 'notifications_', - process.env.NOTIFICATIONS_API_URL, - process.env.NOTIFICATIONS_API_PRESHARED) - const transformedLogsSchema = await createTransformedRemoteSchema( - 'logs_', - process.env.LOGS_API_URL, - process.env.LOGS_API_PRESHARED) - const transformedStrategizerSchema = await createTransformedRemoteSchema( - 'strategizer_', - process.env.STRATEGIZER_API_URL, - process.env.STRATEGIZER_API_PRESHARED) - const transformedCockpitSchema = await createTransformedRemoteSchema( - 'cockpit_', - process.env.COCKPIT_API_URL, - process.env.COCKPIT_API_PRESHARED) - const transformedSAWeb = await createTransformedRemoteSchema( - 'web_', - process.env.SAWEB_API_URL, - process.env.SAWEB_API_PRESHARED) - - var schemas = [] - var resolvers = {} - - if (transformedTeamsSchema) { - schemas.push(transformedTeamsSchema) - if (transformedUsersSchema && transformedEventsSchema && transformedStrategizerSchema) { - schemas.push(teams.linkSchemaDefs) - resolvers = Object.assign(resolvers, teams.resolver(transformedUsersSchema, transformedEventsSchema, transformedStrategizerSchema)) - } - } - if (transformedUsersSchema) { - schemas.push(transformedUsersSchema) - } - if (transformedEventsSchema) { - schemas.push(transformedEventsSchema) - if (transformedUsersSchema && transformedTeamsSchema && transformedOperationsSchema) { - schemas.push(events.linkSchemaDefs) - resolvers = Object.assign(resolvers, events.resolver(transformedUsersSchema, transformedTeamsSchema, transformedOperationsSchema)) - } - } - if (transformedKeyVaultSchema) { - schemas.push(transformedKeyVaultSchema) - } - if (transformedOperationsSchema) { - schemas.push(transformedOperationsSchema) - if (transformedTeamsSchema && transformedCockpitSchema) { - schemas.push(operations.linkSchemaDefs) - resolvers = Object.assign(resolvers, operations.resolver(transformedTeamsSchema, transformedCockpitSchema)) - } - } - if (transformedNotificationsSchema) { - schemas.push(transformedNotificationsSchema) - } - if (transformedLogsSchema) { - schemas.push(transformedLogsSchema) - } - if (transformedStrategizerSchema) { - schemas.push(transformedStrategizerSchema) - } - if (transformedCockpitSchema) { - schemas.push(transformedCockpitSchema) - } - if (transformedSAWeb) { - schemas.push(transformedSAWeb) - } - - const schema = mergeSchemas({ - schemas, - resolvers - }) - - const app = express() - - app.use(bodyParser.json({limit: '50mb'})); - app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); - - app.use('/graphql', - jwt({ - secret: jwksRsa.expressJwtSecret({ - cache: true, - rateLimit: true, - jwksRequestsPerMinute: 1, - jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json` - }), - credentialsRequired: false, - audience: process.env.AUTH0_AUDIENCE, - issuer: process.env.AUTH0_ISSUER, - algorithms: [`RS256`] - }), - function (err, req, res, next) { - if (err.code === 'invalid_token') { - res.locals.error = err.message - } - return next() - } - ) - - app.use('/graphql', (req, res, next) => { - res.locals.userId = '' - if (req.user) { - getUserId(req.user.sub) - .then(data => { - res.locals.userId = data - next() - }) - .catch(err => { - console.log(err) - next() - }) - } else { - next() - } - }) - - const context = ({ req, res }) => { - if (res.locals.error) { - throw new ForbiddenError(res.locals.error) - } - const response = { - headers: Object.assign( - res.locals.userId ? { userId: res.locals.userId } : {}, - req.headers.authorization ? { authorization: req.headers.authorization } : {}, - req.headers.keyvault ? { keyvault: req.headers.keyvault } : {} - ) - } - return response - } - - const server = new ApolloServer({ - schema, - context, - formatError: error => { - logger.error('An error ocurred inside a module: %s', error.message) - return error.message - }, - formatResponse: response => { - logger.debug('Response from Apollo Server: ' + response) - return response - }, - playground: { - settings: { - 'editor.theme': 'dark', - 'editor.cursorShape': 'line' - } - } - }) - - server.applyMiddleware({ app, cors: { origin: true, credentials: true, methods:'GET,PUT,POST,DELETE,OPTIONS'}}) - - app.listen(4100) - logger.info(`Server running. Open ${process.env.GRAPHQL_API_URL} to run queries.`) -} - -try { - run() -} catch (e) { - logger.error(`An general error occured while running the app: ${e}, details: ${e.message}, stack: ${e.stack}`) -} diff --git a/Deprecated-Code/MasterApp/server/src/createRemoteSchema.js b/Deprecated-Code/MasterApp/server/src/createRemoteSchema.js deleted file mode 100644 index 500eebeee..000000000 --- a/Deprecated-Code/MasterApp/server/src/createRemoteSchema.js +++ /dev/null @@ -1,62 +0,0 @@ -import fetch from 'node-fetch' -import { createHttpLink } from 'apollo-link-http' -import { setContext } from 'apollo-link-context' -import { ApolloLink } from 'apollo-link' -import { - makeRemoteExecutableSchema, - introspectSchema, - transformSchema, - RenameTypes, - RenameRootFields -} from 'graphql-tools' - -import { capitalize } from './utils' -import logger from './logger' - -export const createRemoteSchema = async (uri, preshared_key) => { - const makeDatabaseServiceLink = () => createHttpLink({ - uri: uri, - headers: { - preshared: preshared_key - }, - fetch - }) - const databaseServiceSchemaDefinition = await introspectSchema(makeDatabaseServiceLink()) - - const http = makeDatabaseServiceLink() - - const authLink = setContext((request, previousContext) => { - return ( - { - headers: { - Authorization: previousContext.graphqlContext.headers.authorization ? previousContext.graphqlContext.headers.authorization : '', - UserId: previousContext.graphqlContext.headers.userId ? previousContext.graphqlContext.headers.userId : '', - keyvault: previousContext.graphqlContext.headers.keyvault ? previousContext.graphqlContext.headers.keyvault : '' - } - } - ) - }) - - return makeRemoteExecutableSchema({ - schema: databaseServiceSchemaDefinition, - link: ApolloLink.from([authLink, http]) - }) -} - -export const createTransformedRemoteSchema = async (prefix, uri, preshared_key) => { - var schema - try { - logger.info('About to create %s schema at %s.', prefix, uri) - schema = await createRemoteSchema(uri, preshared_key) - } catch (error) { - logger.error('An error occured while fetching %s, %s schema. Details: %j', prefix, uri, error) - return false - } - const transformedSchema = transformSchema(schema, [ - new RenameTypes((name) => prefix + capitalize(name)), - new RenameRootFields((operation, name) => prefix + capitalize(name)) - ]) - return transformedSchema -} - -export default createRemoteSchema diff --git a/Deprecated-Code/MasterApp/server/src/index.js b/Deprecated-Code/MasterApp/server/src/index.js deleted file mode 100644 index 59744b324..000000000 --- a/Deprecated-Code/MasterApp/server/src/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require = require('esm')(module) -module.exports = require('./app.js') diff --git a/Deprecated-Code/MasterApp/server/src/links/events.js b/Deprecated-Code/MasterApp/server/src/links/events.js deleted file mode 100644 index 048285e2a..000000000 --- a/Deprecated-Code/MasterApp/server/src/links/events.js +++ /dev/null @@ -1,164 +0,0 @@ -export const linkSchemaDefs = - ` - extend type events_Event { - host: users_User - } - extend type events_Event { - participatingAs: [teams_Team] - } - extend type events_Event { - canParticipateAs: [teams_Team] - } - extend type events_Inviter { - inviter: users_User - } - extend type events_Formula { - owner: users_User - } - extend type events_Plotter { - owner: users_User - } - extend type events_Participant { - participant: teams_Team - } - extend type events_Participant { - clone: operations_GetClones - } - extend type events_Invitation { - invitee: teams_Team - } - ` - -export const resolver = (usersSchema, teamsSchema, operationsSchema) => ({ - events_Event: { - host: { - fragment: `fragment UserFragment on events_Event{hostId}`, - resolve ({hostId : id}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: usersSchema, - operation: 'query', - fieldName: 'users_User', - args: { id }, - context, - info - }) - } - }, - participatingAs: { - fragment: `fragment TeamFragment on events_Event{participatingAsId}`, - resolve ({participatingAsId : teamIds}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_TeamsByIds', - args: { teamIds }, - context, - info - }) - } - }, - canParticipateAs: { - fragment: `fragment TeamFragment on events_Event{canParticipateAsId}`, - resolve ({canParticipateAsId : teamIds}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_TeamsByIds', - args: { teamIds }, - context, - info - }) - } - } - }, - events_Inviter: { - inviter: { - fragment: `fragment UserFragment on events_Inviter{inviterId}`, - resolve ({inviter : id}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: usersSchema, - operation: 'query', - fieldName: 'users_User', - args: { id }, - context, - info - }) - } - } - }, - events_Formula: { - owner: { - fragment: `fragment UserFragment on events_Formula{ownerId}`, - resolve ({owner : id}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: usersSchema, - operation: 'query', - fieldName: 'users_User', - args: { id }, - context, - info - }) - } - } - }, - events_Plotter: { - owner: { - fragment: `fragment UserFragment on events_Plotter{ownerId}`, - resolve ({owner : id}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: usersSchema, - operation: 'query', - fieldName: 'users_User', - args: { id }, - context, - info - }) - } - } - }, - events_Participant: { - participant: { - fragment: `fragment TeamFragment on events_Participant{participantId}`, - resolve ({participantId : teamId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_TeamById', - args: { teamId }, - context, - info - }) - } - }, - clone: { - fragment: `fragment CloneFragment on events_Participant{operationId}`, - resolve ({operationId: cloneId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: operationsSchema, - operation: 'query', - fieldName: 'operations_GetClone', - args: { cloneId }, - context, - info - }) - } - } - }, - events_Invitation: { - invitee: { - fragment: `fragment TeamFragment on events_Invitation{inviteeId}`, - resolve ({inviteeId : teamId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_TeamById', - args: { teamId }, - context, - info - }) - } - } - }, -}) - -export default { resolver, linkSchemaDefs } diff --git a/Deprecated-Code/MasterApp/server/src/links/index.js b/Deprecated-Code/MasterApp/server/src/links/index.js deleted file mode 100644 index 9941d76a2..000000000 --- a/Deprecated-Code/MasterApp/server/src/links/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import teams from './teams' -import events from './events' -import operations from './operations' - -export { teams, events, operations } diff --git a/Deprecated-Code/MasterApp/server/src/links/operations.js b/Deprecated-Code/MasterApp/server/src/links/operations.js deleted file mode 100644 index 1b8c27e47..000000000 --- a/Deprecated-Code/MasterApp/server/src/links/operations.js +++ /dev/null @@ -1,60 +0,0 @@ -export const linkSchemaDefs = - ` - extend type operations_GetClones { - team: teams_Team - } - extend type operations_GetClones { - bot: teams_FinancialBeings - } - extend type operations_Clone { - signals( orderStatus: String ): [cockpit_Signal] - } - ` - -export const resolver = (teamsSchema, cockpitSchema) => ({ - operations_Clone: { - signals: { - fragment: `fragment SignalFragment on operations_Clone{id}`, - resolve ({id: cloneId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: cockpitSchema, - operation: 'query', - fieldName: 'cockpit_SignalsByCloneId', - args: { ...args, cloneId }, - context, - info - }) - } - } - }, - operations_GetClones: { - team: { - fragment: `fragment TeamFragment on operations_GetClones{teamId}`, - resolve ({teamId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_TeamById', - args: { teamId }, - context, - info - }) - } - }, - bot: { - fragment: `fragment TeamFragment on operations_GetClones{botId}`, - resolve ({botId: fbId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: teamsSchema, - operation: 'query', - fieldName: 'teams_FbByFbId', - args: { fbId }, - context, - info - }) - } - } - } -}) - -export default { resolver, linkSchemaDefs } diff --git a/Deprecated-Code/MasterApp/server/src/links/teams.js b/Deprecated-Code/MasterApp/server/src/links/teams.js deleted file mode 100644 index 6ef328eeb..000000000 --- a/Deprecated-Code/MasterApp/server/src/links/teams.js +++ /dev/null @@ -1,67 +0,0 @@ -export const linkSchemaDefs = - ` - extend type teams_Team { - ownerUser: users_User - } - extend type teams_Team { - events( - hostId: String, - inviteeId: String, - minStartDate: Int, - maxStartDate: Int, - minEndDate: Int, - maxEndDate: Int - ): [events_Event] - } - extend type teams_FinancialBeings { - tradingSystem: strategizer_TradingSystem - } - ` - -export const resolver = (usersSchema, eventsSchema, strategizerSchema) => ({ - teams_FinancialBeings: { - tradingSystem: { - fragment: `fragment TradingSystemFragment on teams_FinancialBeings{slug}`, - resolve ({slug: fbSlug}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: strategizerSchema, - operation: 'query', - fieldName: 'strategizer_TradingSystemByFb', - args: { fbSlug }, - context, - info - }) - } - } - }, - teams_Team: { - ownerUser: { - fragment: `fragment UserFragment on teams_Team{owner}`, - resolve ({owner: id}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: usersSchema, - operation: 'query', - fieldName: 'users_User', - args: { id }, - context, - info - }) - } - }, - events: { - fragment: `fragment EventFragment on teams_Team{id}`, - resolve ({id: participantId}, args, context, info) { - return info.mergeInfo.delegateToSchema({ - schema: eventsSchema, - operation: 'query', - fieldName: 'events_Events', - args: { ...args, participantId }, - context, - info - }) - } - } - } -}) - -export default { resolver, linkSchemaDefs } diff --git a/Deprecated-Code/MasterApp/server/src/logger/index.js b/Deprecated-Code/MasterApp/server/src/logger/index.js deleted file mode 100644 index eb15587e3..000000000 --- a/Deprecated-Code/MasterApp/server/src/logger/index.js +++ /dev/null @@ -1,42 +0,0 @@ -import { createLogger, format, transports } from 'winston' -import { inspect } from 'util' - -const { combine, timestamp, simple } = format - -const options = { - file: { - level: 'info', - filename: '../logs/app.log', - handleExceptions: true, - json: true, - maxsize: 5242880, // 5MB - maxFiles: 5, - colorize: false, - timestamp: true - }, - console: { - level: 'info', - handleExceptions: true, - json: false, - colorize: true, - } -} - -const logger = createLogger({ - level: 'info', - format: format.combine( - format.colorize(), - format.splat(), - format.timestamp({ format: 'YY/MM/DD HH:mm' }), - format.printf( - info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}` - ) - ), - transports: [ - new transports.File(options.file), - new transports.Console(options.console) - ], - exitOnError: false // do not exit on handled exceptions -}) - -export default logger diff --git a/Deprecated-Code/MasterApp/server/src/resolvers/index.js b/Deprecated-Code/MasterApp/server/src/resolvers/index.js deleted file mode 100644 index 9919da6d3..000000000 --- a/Deprecated-Code/MasterApp/server/src/resolvers/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import merge from 'lodash.merge' -// import { SendgridMutations } from './mutation' - -const resolvers = { - Mutation: { - // ...SendgridMutations - } -} - -export default resolvers diff --git a/Deprecated-Code/MasterApp/server/src/resolvers/mutation/index.js b/Deprecated-Code/MasterApp/server/src/resolvers/mutation/index.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/MasterApp/server/src/schema/index.js b/Deprecated-Code/MasterApp/server/src/schema/index.js deleted file mode 100644 index 8b1651b1d..000000000 --- a/Deprecated-Code/MasterApp/server/src/schema/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export const typeDef = ` - type Mutation { - master_SampleMutation(variable: String!): String - } - - schema { - mutation: Mutation - } -` diff --git a/Deprecated-Code/MasterApp/server/src/utils.js b/Deprecated-Code/MasterApp/server/src/utils.js deleted file mode 100644 index a9c57d8ce..000000000 --- a/Deprecated-Code/MasterApp/server/src/utils.js +++ /dev/null @@ -1,20 +0,0 @@ -import fs from 'fs' -import path from 'path' - -export const mergeDirectoryModules = dirpath => - fs - .readdirSync(dirpath, 'utf8') - .filter(filename => !/^[_|index.]/.test(filename)) - .reduce( - (acc, filename) => ({ - ...acc, - ...require(path.resolve(dirpath, filename)).default, - }), - {} - ) - -export const capitalize = (string) => { - return (string).charAt(0).toUpperCase() + (string).slice(1) -} - -export default capitalize diff --git a/Deprecated-Code/MasterApp/server/wait-for b/Deprecated-Code/MasterApp/server/wait-for deleted file mode 100644 index 539a01d4e..000000000 --- a/Deprecated-Code/MasterApp/server/wait-for +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/sh - -TIMEOUT=15 -QUIET=0 - -echoerr() { - if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi -} - -usage() { - exitcode="$1" - cat << USAGE >&2 -Usage: - $cmdname host:port [-t timeout] [-- command args] - -q | --quiet Do not output any status messages - -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout - -- COMMAND ARGS Execute command with args after the test finishes -USAGE - exit "$exitcode" -} - -wait_for() { - for i in `seq $TIMEOUT` ; do - nc -z "$HOST" "$PORT" > /dev/null 2>&1 - - result=$? - if [ $result -eq 0 ] ; then - if [ $# -gt 0 ] ; then - exec "$@" - fi - exit 0 - fi - sleep 1 - done - echo "Operation timed out" >&2 - exit 1 -} - -while [ $# -gt 0 ] -do - case "$1" in - *:* ) - HOST=$(printf "%s\n" "$1"| cut -d : -f 1) - PORT=$(printf "%s\n" "$1"| cut -d : -f 2) - shift 1 - ;; - -q | --quiet) - QUIET=1 - shift 1 - ;; - -t) - TIMEOUT="$2" - if [ "$TIMEOUT" = "" ]; then break; fi - shift 2 - ;; - --timeout=*) - TIMEOUT="${1#*=}" - shift 1 - ;; - --) - shift - break - ;; - --help) - usage 0 - ;; - *) - echoerr "Unknown argument: $1" - usage 1 - ;; - esac -done - -if [ "$HOST" = "" -o "$PORT" = "" ]; then - echoerr "Error: you need to provide a host and port to test." - usage 2 -fi - -wait_for "$@" diff --git a/Deprecated-Code/NotificationsModule/.gitignore b/Deprecated-Code/NotificationsModule/.gitignore deleted file mode 100644 index aa2282e00..000000000 --- a/Deprecated-Code/NotificationsModule/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/.cache -.vscode -docs/notes \ No newline at end of file diff --git a/Deprecated-Code/NotificationsModule/CODE_OF_CONDUCT.md b/Deprecated-Code/NotificationsModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/NotificationsModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/NotificationsModule/CONTRIBUTING.md b/Deprecated-Code/NotificationsModule/CONTRIBUTING.md deleted file mode 100644 index f570b62c4..000000000 --- a/Deprecated-Code/NotificationsModule/CONTRIBUTING.md +++ /dev/null @@ -1,55 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -<<<<<<< HEAD -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. -======= -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP � such as IP you created prior to working for the Project � into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sub-licensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. ->>>>>>> develop - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - -<<<<<<< HEAD - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. -======= - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. ->>>>>>> develop diff --git a/Deprecated-Code/NotificationsModule/LICENSE b/Deprecated-Code/NotificationsModule/LICENSE deleted file mode 100644 index 0c75681a5..000000000 --- a/Deprecated-Code/NotificationsModule/LICENSE +++ /dev/null @@ -1,66 +0,0 @@ -COPYRIGHT NOTICE - -<<<<<<< HEAD -© Copyright 2018 Superalgos.org -======= -© Copyright 2019 Superalgos.org ->>>>>>> develop - - -LICENSE NOTICE - -<<<<<<< HEAD -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -======= -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this ->>>>>>> develop -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - -<<<<<<< HEAD - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software -======= - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software ->>>>>>> develop - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -<<<<<<< HEAD -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitely agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. -======= -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitly agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. ->>>>>>> develop diff --git a/Deprecated-Code/NotificationsModule/README.md b/Deprecated-Code/NotificationsModule/README.md deleted file mode 100644 index bb3a12f4d..000000000 --- a/Deprecated-Code/NotificationsModule/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Superlgos Notifications Module - -## Introduction - -The general purpose of the notifications module is providing notification services to other Superalgos Platform modules. - -## Quick Start - -Requirements: - -- NodeJS 8+ -- NPM (comes installed with NodeJS) -- [Github authorization via SSH](https://help.github.com/articles/connecting-to-github-with-ssh/): *optional* - removes need to authenticate every push or pull from GitHub especially as this is a private repo. - -1. Clone this repository `git clone https://github.com/AdvancedAlgos/NotificationsModule.git` -2. `cd NotificationsModule` -5. Navigate to desired package (eg, server) in /packages and look at its README.md for further instructions. - -## Getting Started - -_This repo is currently under heavy initial-phase development and is not representative of the more mature product. On that note, feel free to look around and keep an eye out as the development unfolds!_ - -1. Where we set sail — [to the docs!](./docs/README.md) diff --git a/Deprecated-Code/NotificationsModule/docs/README.md b/Deprecated-Code/NotificationsModule/docs/README.md deleted file mode 100644 index b1555f5e2..000000000 --- a/Deprecated-Code/NotificationsModule/docs/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Superalgos Notifications Module Documentation - -## Architecture -Currently, this module is only a GraphQL server providing notification services to other platform modules. For example, it wraps the SendGrid API and allows other modules to send transactional emails or provides signup methods to campaign newsletter list. - -There is no database or client for this module currently. - -### GraqphQL schema - -The Notifications Module graphql schema: - -``` -type Mutation { - Corporate_NewsletterSignup(email: String!): String - Corporate_NewsletterSignupVerify(token: String!): String - Corporate_Contact(email: String!, name: String, message: String!, recaptcha: String!): String - Master_NewsletterSignup(email: String!): String - Master_NewsletterSignupVerify(token: String!): String - Master_Feedback(email: String!, subject: String!, message: String!, recaptcha: String!): String - Teams_SendTeamMemberInvite(email: String!, teamName: String!): String - Teams_SendTeamCreateConfirmation(email: String!, teamName: String!, botName: String!): String - Teams_VerifyTeamMemberInviteToken(token: String!): String -} -``` diff --git a/Deprecated-Code/NotificationsModule/package.json b/Deprecated-Code/NotificationsModule/package.json deleted file mode 100644 index df7fe6e85..000000000 --- a/Deprecated-Code/NotificationsModule/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "NotificationsModule", - "version": "0.0.1", - "description": "Superalgos Notifications Module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/NotificationsModule.git" - }, - "keywords": [ - "Superalgos" - ], - "author": "Barry Low ", - "license": "SEE LICENSE IN LICENSE.MD", - "bugs": { - "url": "https://github.com/Superalgos/NotificationsModule.git/issues" - }, - "homepage": "https://github.com/Superalgos/NotificationsModule.git#readme" -} diff --git a/Deprecated-Code/NotificationsModule/server/.babelrc b/Deprecated-Code/NotificationsModule/server/.babelrc deleted file mode 100644 index 81bfbad3f..000000000 --- a/Deprecated-Code/NotificationsModule/server/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presets": ["@babel/preset-env"], - "plugins": [ - "@babel/plugin-proposal-throw-expressions", - ["@babel/plugin-proposal-class-properties", { "loose": true }] - ] -} diff --git a/Deprecated-Code/NotificationsModule/server/.env.sample b/Deprecated-Code/NotificationsModule/server/.env.sample deleted file mode 100644 index 40ac2b180..000000000 --- a/Deprecated-Code/NotificationsModule/server/.env.sample +++ /dev/null @@ -1,32 +0,0 @@ -PORT=4101 - -PRESHARED_GATEWAY_KEY=SECRET_STUFF - -NODE_ENV=development -GENERATE_SOURCEMAP=false - -# APIs -PLATFORM_API_URL=https://platform-api-dev.advancedalgos.net - -# SendGrid Api Keys -SG_APIKEY=sg-apikey -SG_APIKEY_CAMPAIGN=sg-apikey-contacts - -# SendGrid Template IDs -SG_MASTER_SIGNUP_EMAILID=sg-master-signup-template-id -SG_MASTER_FEEDBACK_EMAILID=sg-master-feedback-template-id - -SG_CORPORATE_SIGNUP_EMAILID=sg-master-signup-template-id -SG_CORPORATE_CONTACT_EMAILID=sg-master-contact-template-id - -SG_TEAMS_MEMBER_INVITE_EMAILID=sg-teams-member-invite-template-id -SG_TEAMS_TEAMCREATE_EMAILID=sg-teams-teamcreate-template-id - -#SendGrid Origins -SG_PLATFORM_ORIGIN=https://platform-dev.advancedalgos.net -# SG_PLATFORM_ORIGIN=https://platform.advancedalgos.net -SG_CORPORATE_ORIGIN=http://localhost:3999 -# SG_CORPORATE_ORIGIN=https://advancedalgos.net - -# Google ReCaptcha -RECAPTCHA=google-recaptcha-secret diff --git a/Deprecated-Code/NotificationsModule/server/.gitignore b/Deprecated-Code/NotificationsModule/server/.gitignore deleted file mode 100644 index 5410e8c43..000000000 --- a/Deprecated-Code/NotificationsModule/server/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -/.env -/.env.prod -.env.dev -/database/.env -/database/docker-compose.prisma.prod.yml -/docker-compose.prisma.prod.yml -/docker-compose.prod.yml -.graphqlconfig.prod.yml -dist -node_modules -.idea -.vscode -*.log diff --git a/Deprecated-Code/NotificationsModule/server/CODE_OF_CONDUCT.md b/Deprecated-Code/NotificationsModule/server/CODE_OF_CONDUCT.md deleted file mode 100644 index c71b685b4..000000000 --- a/Deprecated-Code/NotificationsModule/server/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/NotificationsModule/server/CONTRIBUTING.md b/Deprecated-Code/NotificationsModule/server/CONTRIBUTING.md deleted file mode 100644 index 311653120..000000000 --- a/Deprecated-Code/NotificationsModule/server/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Advanced Algos LTD is a startup, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Advanced Algos LTD ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Voluntary Works** All Company IP that you are involved with or create as part of your work for the Company is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Company to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/NotificationsModule/server/Dockerfile b/Deprecated-Code/NotificationsModule/server/Dockerfile deleted file mode 100644 index 728ef13db..000000000 --- a/Deprecated-Code/NotificationsModule/server/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4301 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -RUN npm audit fix - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/NotificationsModule/server/LICENSE b/Deprecated-Code/NotificationsModule/server/LICENSE deleted file mode 100644 index 923a8be14..000000000 --- a/Deprecated-Code/NotificationsModule/server/LICENSE +++ /dev/null @@ -1,39 +0,0 @@ -COPYRIGHT NOTICE - -© Copyright 2019 Superalgos.org - - -LICENSE NOTICE - -Superalgos is a collaborative project currently at a very early stage. Because certain aspects of -the project are still not clearly defined, we have chosen to --temporarily-- grant a restrictive -license for the use of this repository, until those aspects are clarified and a proper open source -license can be granted. - -Superalgos.org is publishing the code of this software for several reasons. However, it shall not be considered free software yet. Superalgos is a collaborative project in the crypto space and this -software is still proprietary software. - -The reasons for opening up the code of this software at this stage are the following: - - * We believe that transparency is paramount to achieving our goals, so we want everyone to - be able to understand what this software does and how. Opening up the code of this software - allows anyone to take a close look. - - * We welcome contributions from the community. Contributions are regarded as voluntary work. - There may be incentives in place for certain kinds of contributions. Contact us to learn more. - Contributors agree to provide an express grant of patent rights for their contributions. - - -LICENSE WORDING - -Superalgos.org grants a limited license for the following uses: - -1. CODE REVIEW AND AUDITS. You are granted permission to clone this repository to analyze, - review or audit the code. - -2. COLLABORATING WITH Superalgos.org. You are granted permission to fork this repository - with the sole purpose of correcting bugs and developing functionality in agreement with - Superalgos.org. By contributing to this repository you explicitly agree to the terms - detailed in CONTRIBUTING.MD. - -PLEASE SEE CONTRIBUTING.MD FOR MORE DETAILS ON THE IMPLICATIONS SURROUNDING YOUR CONTRIBUTIONS TO THIS REPOSITORY. diff --git a/Deprecated-Code/NotificationsModule/server/README.md b/Deprecated-Code/NotificationsModule/server/README.md deleted file mode 100644 index c2d5fd021..000000000 --- a/Deprecated-Code/NotificationsModule/server/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# Superalgos Notifications GraphQL API Server - -This is the Superalgos Notifications Module server-side GraphQL API server. We use Docker to develop locally and for our production workflow. - -This module currently has no client-side component. - -## Getting Started - -Run -``` - npm install -``` -then -``` - npm run dev -``` - -### Using Docker - -Get latest Docker and Docker Compose: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) - -#### Using Docker container for Development - -To run starter kit in development mode with hot code reload execute: - -Run docker container in background: - -``` -docker-compose up -d -``` - -If image issues, try running: -``` -docker-compose up --build -``` -then run -``` -docker-compose up -d -``` - -To view logs -``` -docker-compose logs -f -t -``` -Hit Ctrl + c to exit logs without stopping service - -To stop service -``` -docker-compose down -``` - -### Main Libraries - -- [*Webpack 4*](https://webpack.js.org/):web application bundler. Allows us to us latest newer JS ECMA features that increase productivity and code clarity. Also allows additional libraries such as modular and programmable CSS via SASS/SCSS/LESS. Provides webserver for local development. -- [*Bulma CSS Framework*](https://bulma.io/documentation/): Bulma is a highly-customizable CSS-only framework allowing us to quickly prototype the layout of a webapp without being complicated by opinionated functionality represented in libraries such as Bootstrap or Material UI. Grants us the flexibility to create a custom look at top speed whilst minimizing baggage. -- [*HyperApp*](https://github.com/hyperapp/hyperapp): Allows a controlled Flux-styled approach to state-management and data-flow through components like React minus the excess boilerplate and learning curve. -- [*Docker*](https://www.docker.com/what-docker) - -### File organization - -``` -. # Top level directory located at your choice -├── src -│ ├── actions # Actions are functions that change the app state -│ ├── assets # images, logos and other static assets -│ ├── state # Schema of state — the single source of truth concerning app state. -│ ├── styles # SASS/SCSS styles -│ ├── utils # Local storage and other utils -│ └── views # Main folder for editing site content -│ ├─ nav # Nav components — header, footer, etc. -│ ├─ pages # Nav components — header, footer, etc. -│ │ ├─ landing # Homepage -│ │ │ ├─ sections # Homepage sections. Collated in its own index.js -│ │ │ └─ index.js # Main homepage component. Pulls in sections -│ │ └─ ... # Other page/component folders -│ └─ index.js # Main view container. Main router -├── html -│ └── index.html # index.html template pulled in by Webpack to attach transpiled bundles -├── index.js # JS entry point to website -│ -├── tools # utility scripts, mostly for webpack configuration -│ -├── node_modules # created by running `npm install` in this packages root dir -├── dist # created by `npm run develop` - a cache of bundled files served by Webpack for local development -└── build # created by `npm run build` - location of deployable production bundle - -``` - -## Deployment - -The simplest deployment is compiling/transpiling the site to a distribution bundle and then uploading the files in the bundle to a web-accessible folder or storage. - -For this application we use Webpack to transpile the application which combines and minimizes all code and assets into an optimized bundle without and of the development code and resources. - -To build, run: -``` - npm run build -``` -Looking in this packages directory, there should be a ./build directory with the final built files that can be uploaded. - -### Create Docker image - -``` - docker build -t aateamapi/prod . -``` - -### Deployment instructions - -Coming soon... diff --git a/Deprecated-Code/NotificationsModule/server/docker-compose.build-image.yml b/Deprecated-Code/NotificationsModule/server/docker-compose.build-image.yml deleted file mode 100644 index d9ddff043..000000000 --- a/Deprecated-Code/NotificationsModule/server/docker-compose.build-image.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3' -services: - api: - build: - context: . - dockerfile: Dockerfile - env_file: ./.env.dev - container_name: aanotificationapi - ports: - - "4101:4101" - volumes: - - .:/var/www/app - - /var/www/app/node_modules - tty: true - stdin_open: true - volumes: - working_dir: /var/www/app - restart: always - command: node --require @babel/register --require dotenv/config src/index.js diff --git a/Deprecated-Code/NotificationsModule/server/package-lock.json b/Deprecated-Code/NotificationsModule/server/package-lock.json deleted file mode 100644 index 567885d98..000000000 --- a/Deprecated-Code/NotificationsModule/server/package-lock.json +++ /dev/null @@ -1,8007 +0,0 @@ -{ - "name": "aa-notifications-server", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.2.8.tgz", - "integrity": "sha512-A7FTUigtpGCFBaLT1ILicdjM6pZ7LQNw7Vgos0t4aLYtvlKO/L1nMi/NO7bPypzZaJSToTgcxHJPRydP1Md+Kw==", - "requires": { - "apollo-env": "0.2.5" - } - }, - "@apollographql/apollo-upload-server": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-upload-server/-/apollo-upload-server-5.0.3.tgz", - "integrity": "sha512-tGAp3ULNyoA8b5o9LsU2Lq6SwgVPUOKAqKywu2liEtTvrFSGPrObwanhYwArq3GPeOqp2bi+JknSJCIU3oQN1Q==", - "requires": { - "@babel/runtime-corejs2": "^7.0.0-rc.1", - "busboy": "^0.2.14", - "object-path": "^0.11.4" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" - }, - "@babel/cli": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.0.tgz", - "integrity": "sha512-FLteTkEoony0DX8NbnT51CmwmLBzINdlXmiJCSqCLmqWCDA/xk8EITPWqwDnVLbuK0bsZONt/grqHnQzQ15j0Q==", - "dev": true, - "requires": { - "chokidar": "^2.0.3", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.0.tgz", - "integrity": "sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.0", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.0", - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.10", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz", - "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==", - "dev": true, - "requires": { - "@babel/types": "^7.2.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.1.tgz", - "integrity": "sha512-EsEP7XLFmcJHjcuFYBxYD1FkP0irC8C9fsrt2tX/jrAi/eTnFI6DOPgVFb+WREeg1GboF+Ib+nCHbGBodyAXSg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", - "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", - "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", - "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==", - "dev": true, - "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.2.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/node": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.2.0.tgz", - "integrity": "sha512-RFwVH5xWpwd4SfkOI0WsK9AnF5o+C9iMTvUkkTb7jUNaiDieV8BGK38t74bTPjgc4FCxSAWNKqaqgDW4fenkyA==", - "dev": true, - "requires": { - "@babel/polyfill": "^7.0.0", - "@babel/register": "^7.0.0", - "commander": "^2.8.1", - "lodash": "^4.17.10", - "v8flags": "^3.1.1" - } - }, - "@babel/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz", - "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.2.1", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-throw-expressions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.2.0.tgz", - "integrity": "sha512-adsydM8DQF4i5DLNO4ySAU5VtHTPewOtNBV3u7F4lNMPADFF9bWQ+iDtUUe8+033cYCUz+bFlQdXQJmJOwoLpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-throw-expressions": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-throw-expressions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.2.0.tgz", - "integrity": "sha512-ngwynuqu1Rx0JUS9zxSDuPgW1K8TyVZCi2hHehrL4vyjqE7RGoNHWlZsS7KQT2vw9Yjk4YLa0+KldBXTRdPLRg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz", - "integrity": "sha512-aPCEkrhJYebDXcGTAP+cdUENkH7zqOlgbKwLbghjjHpJRJBWM/FSlCjMoPGA8oUdiMfOrk3+8EFPLLb5r7zj2w==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", - "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.1.0", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.3" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz", - "integrity": "sha512-7TtPIdwjS/i5ZBlNiQePQCovDh9pAhVbp/nGVRBZuUdBiVRThyyLend3OHobc0G+RLCPPAN70+z/MAMhsgJd/A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/polyfill": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.0.0.tgz", - "integrity": "sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "@babel/preset-env": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.0.tgz", - "integrity": "sha512-haGR38j5vOGVeBatrQPr3l0xHbs14505DcM57cbJy48kgMFvvHHoYEhHuRV+7vi559yyAUAVbTWzbK/B/pzJng==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.2.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" - } - }, - "@babel/register": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", - "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", - "dev": true, - "requires": { - "core-js": "^2.5.7", - "find-cache-dir": "^1.0.0", - "home-or-tmp": "^3.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "pirates": "^4.0.0", - "source-map-support": "^0.5.9" - } - }, - "@babel/runtime-corejs2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.2.0.tgz", - "integrity": "sha512-kPfmKoRI8Hpo5ZJGACWyrc9Eq1j3ZIUpUAQT2yH045OuYpccFJ9kYA/eErwzOM2jeBG1sC8XX1nl1EArtuM8tg==", - "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" - } - }, - "@babel/template": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", - "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.2", - "@babel/types": "^7.1.2" - } - }, - "@babel/traverse": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz", - "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.1.6", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.6", - "@babel/types": "^7.1.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - } - }, - "@babel/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.0.tgz", - "integrity": "sha512-b4v7dyfApuKDvmPb+O488UlGuR1WbwMXFsO/cyqMrnfvRAChZKJAYeeglWTjUO1b9UghKKgepAQM5tsvBJca6A==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "@kbrandwijk/swagger-to-graphql": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@kbrandwijk/swagger-to-graphql/-/swagger-to-graphql-2.4.3.tgz", - "integrity": "sha512-CNVsCrMge/jq6DCT5buNZ8PACY9RTvPJbCNoIcndfkJOCsNxOx9dnc5qw4pHZdHi8GS6l3qlgkuFKp33iD8J2Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.25.0", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.8.4", - "json-schema-ref-parser": "^3.1.2", - "lodash": "^4.16.4", - "node-request-by-swagger": "^1.0.6", - "request": "^2.75.0", - "request-promise": "^4.1.1", - "yargs": "^8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@sendgrid/client": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", - "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", - "requires": { - "@sendgrid/helpers": "^6.3.0", - "@types/request": "^2.0.3", - "request": "^2.81.0" - } - }, - "@sendgrid/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", - "requires": { - "chalk": "^2.0.1", - "deepmerge": "^2.1.1" - } - }, - "@sendgrid/mail": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", - "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", - "requires": { - "@sendgrid/client": "^6.3.0", - "@sendgrid/helpers": "^6.3.0" - } - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "http://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/caseless": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", - "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==" - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" - }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", - "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" - }, - "@types/node": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", - "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==" - }, - "@types/range-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", - "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" - }, - "@types/request": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", - "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", - "requires": { - "@types/caseless": "*", - "@types/form-data": "*", - "@types/node": "*", - "@types/tough-cookie": "*" - } - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==" - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "adm-zip": { - "version": "0.4.7", - "resolved": "http://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", - "dev": true - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "apollo-cache-control": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.3.3.tgz", - "integrity": "sha512-X6JhKfIaMLfl2jpsK/880BflXA+2lmm2sAsOZL4Bn2VrMsDtOssI1Ij9vNRbch9k9cA4WJvKed7Sql/wUIa1Eg==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.3.3" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.3.3.tgz", - "integrity": "sha512-pudOaHq7Ok+rh1ElzlqFaoYZWGefUNsqn/jX6eKns7rl0VHuB4qZBfhpVLTpquJpM6Y19/hsCYZNPfnUVMFIiA==", - "requires": { - "@apollographql/apollo-tools": "^0.2.6" - } - } - } - }, - "apollo-codegen": { - "version": "0.19.1", - "resolved": "http://registry.npmjs.org/apollo-codegen/-/apollo-codegen-0.19.1.tgz", - "integrity": "sha512-jlxz/b5iinRWfh48hXdmMtrjTPn/rDok0Z3b7icvkiaD6I30w4sq9B+JDkFbLnkldzsFLV2BZtBDa/dkZhx8Ng==", - "dev": true, - "requires": { - "@babel/generator": "7.0.0-beta.38", - "@babel/types": "7.0.0-beta.38", - "change-case": "^3.0.1", - "common-tags": "^1.5.1", - "core-js": "^2.5.3", - "glob": "^7.1.2", - "graphql": "^0.13.1", - "graphql-config": "^1.1.1", - "inflected": "^2.0.3", - "node-fetch": "^1.7.3", - "rimraf": "^2.6.2", - "source-map-support": "^0.5.0", - "yargs": "^10.0.3" - }, - "dependencies": { - "@babel/generator": { - "version": "7.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.38.tgz", - "integrity": "sha512-aOHQPhsEyaB6p2n+AK981+onHoc+Ork9rcAQVSUJR33wUkGiWRpu6/C685knRyIZVsKeSdG5Q4xMiYeFUhuLzA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.38", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/types": { - "version": "7.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.38.tgz", - "integrity": "sha512-SAtyEjmA7KiEoL2eAOAUM6M9arQJGWxJKK0S9x0WyPOosHS420RXoxPhn57u/8orRnK8Kxm0nHQQNTX203cP1Q==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - }, - "graphql-config": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-1.2.1.tgz", - "integrity": "sha512-BOtbEOn/fD13jT0peCy3Fzp1DSTsA/1AcZp266AQ5Sk3wFndKCEa/H7donbu5UriOw1V/N1WDirYPnr7rd8E7Q==", - "dev": true, - "requires": { - "graphql": "^0.12.3", - "graphql-import": "^0.4.0", - "graphql-request": "^1.4.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "graphql": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.12.3.tgz", - "integrity": "sha512-Hn9rdu4zacplKXNrLCvR8YFiTGnbM4Zw/UH8FDmzBDsH7ou40lSNH4tIlsxcYnz2TGNVJCpu1WxCM23yd6kzhA==", - "dev": true, - "requires": { - "iterall": "1.1.3" - } - } - } - }, - "graphql-import": { - "version": "0.4.5", - "resolved": "http://registry.npmjs.org/graphql-import/-/graphql-import-0.4.5.tgz", - "integrity": "sha512-G/+I08Qp6/QGTb9qapknCm3yPHV0ZL7wbaalWFpxsfR8ZhZoTBe//LsbsCKlbALQpcMegchpJhpTSKiJjhaVqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, - "iterall": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" - } - } - } - }, - "apollo-datasource": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.2.1.tgz", - "integrity": "sha512-r185+JTa5KuF1INeTAk7AEP76zwMN6c8Ph1lmpzJMNwBUEzTGnLClrccCskCBx4SxfnkdKbuQdwn9JwCJUWrdg==", - "requires": { - "apollo-server-caching": "0.2.1", - "apollo-server-env": "2.2.0" - } - }, - "apollo-engine-reporting": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-0.1.3.tgz", - "integrity": "sha512-VkjiifHMHIAxydXecT+ck0WtqpFIsMlylKnKeuNAXfIfAXHX/JYtLhbArTTyhDunLrphMiUewfFv9P0K+aX2jw==", - "requires": { - "apollo-engine-reporting-protobuf": "0.1.0", - "apollo-server-env": "2.2.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.3.3", - "lodash": "^4.17.10" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.3.3.tgz", - "integrity": "sha512-pudOaHq7Ok+rh1ElzlqFaoYZWGefUNsqn/jX6eKns7rl0VHuB4qZBfhpVLTpquJpM6Y19/hsCYZNPfnUVMFIiA==", - "requires": { - "@apollographql/apollo-tools": "^0.2.6" - } - } - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.1.0.tgz", - "integrity": "sha512-GReJtAYTmpwg0drb9VgFtqObYYTCHkJhlHEYCeXY8bJV4fOgXsAZ7CIXR9nPKO0mBaoHIHaGYvXGcyCLrZ36VA==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-env": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.2.5.tgz", - "integrity": "sha512-Gc7TEbwCl7jJVutnn8TWfzNSkrrqyoo0DP92BQJFU9pZbJhpidoXf2Sw1YwOJl82rRKH3ujM3C8vdZLOgpFcFA==", - "requires": { - "core-js": "^3.0.0-beta.3", - "node-fetch": "^2.2.0" - }, - "dependencies": { - "core-js": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.4.tgz", - "integrity": "sha512-yz4iJCkkSQLQSLHPGUln6r5ZBkLPzZSvHG0g1nfvcdnmpIe+KE9WOb1ZEEf6EEaEmjp9Ol0Kw5J5vnoIWc5eWw==" - } - } - }, - "apollo-errors": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/apollo-errors/-/apollo-errors-1.9.0.tgz", - "integrity": "sha512-XVukHd0KLvgY6tNjsPS3/Re3U6RQlTKrTbIpqqeTMo2N34uQMr+H1UheV21o8hOZBAFosvBORVricJiP5vfmrw==", - "requires": { - "assert": "^1.4.1", - "extendable-error": "^0.1.5" - } - }, - "apollo-server-caching": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.2.1.tgz", - "integrity": "sha512-+U9F3X297LL8Gqy6ypfDNEv/DfV/tDht9Dr2z3AMaEkNW1bwO6rmdDL01zYxDuVDVq6Z3qSiNCSO2pXE2F0zmA==", - "requires": { - "lru-cache": "^5.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, - "apollo-server-core": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.2.6.tgz", - "integrity": "sha512-hC3+Y9A4rN4W2X2cWqjrWWHkjKaG/jUQjtAVpQteDW+7n3bLKHCrpDFiFad++lq0ymRVW8diAaYDS4myJwjmoA==", - "requires": { - "@apollographql/apollo-tools": "^0.2.6", - "@apollographql/apollo-upload-server": "^5.0.3", - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.3.3", - "apollo-datasource": "0.2.1", - "apollo-engine-reporting": "0.1.3", - "apollo-server-caching": "0.2.1", - "apollo-server-env": "2.2.0", - "apollo-server-errors": "2.2.0", - "apollo-server-plugin-base": "0.1.6", - "apollo-tracing": "0.3.3", - "graphql-extensions": "0.3.6", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "json-stable-stringify": "^1.0.1", - "lodash": "^4.17.10", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - } - }, - "apollo-server-env": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz", - "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg==" - }, - "apollo-server-express": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.2.6.tgz", - "integrity": "sha512-+zajJDcJLhWdkW8f0D5KQfDsaxgx7fQ3ULGDT1eZgL0UY5pazWBOnXqeRoVKRl+r1WcrwN1SMfBVnAKWv6CyVw==", - "requires": { - "@apollographql/apollo-upload-server": "^5.0.3", - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.16.0", - "accepts": "^1.3.5", - "apollo-server-core": "2.2.6", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.1.6.tgz", - "integrity": "sha512-nh6I2+mgSL5cYxqYXymAr8xBZ/ju8nunPjHp/21+/mgbF4Is0xtM9oDq5Qf0Q/cGh/djF6YcBuB1yUG+68gJXw==" - }, - "apollo-tracing": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.3.3.tgz", - "integrity": "sha512-gsTYgDVjtMlnomPq46aky7yk8XshCQfj9rxalCCismLlMomVW44fq+8GKQnZIkFOwiAsazRy4dzZ0cBbygA9sA==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.3.3" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.3.3.tgz", - "integrity": "sha512-pudOaHq7Ok+rh1ElzlqFaoYZWGefUNsqn/jX6eKns7rl0VHuB4qZBfhpVLTpquJpM6Y19/hsCYZNPfnUVMFIiA==", - "requires": { - "@apollographql/apollo-tools": "^0.2.6" - } - } - } - }, - "apollo-utilities": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.20.tgz", - "integrity": "sha512-2M4BJCyX/9UXGJFoV4sTnVTZ4Q29aM18Z1avDrwvlCGGwoRTz50sGBAfTiWnUnnNQyPIIJEYElScw46DgIu0Rg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browserslist": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz", - "integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000912", - "electron-to-chromium": "^1.3.86", - "node-releases": "^1.0.5" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000916", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000916.tgz", - "integrity": "sha512-D6J9jloPm2MPkg0PXcODLMQAJKkeixKO9xhqTUMvtd44MtTYMyyDXPQ2Lk9IgBq5FH0frwiPa/N/w8ncQf7kIQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", - "dev": true - }, - "colorspace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz", - "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==", - "dev": true, - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", - "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "dev": true, - "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", - "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^3.0.0", - "require-from-string": "^2.0.1" - }, - "dependencies": { - "parse-json": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", - "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", - "dev": true, - "requires": { - "error-ex": "^1.3.1" - } - } - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "dev": true, - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - }, - "dependencies": { - "node-fetch": { - "version": "2.1.2", - "resolved": "http://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", - "dev": true - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "cucumber-html-reporter": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cucumber-html-reporter/-/cucumber-html-reporter-3.0.4.tgz", - "integrity": "sha512-uit68jymdI8Z6m+kJ5YnJPeHf5IdYXt2j52l5xLwgpcLBQRhCvr1peV9UODaCN5nLnRN9nqh1qaw4iNp1rTpvQ==", - "dev": true, - "requires": { - "find": "^0.2.7", - "fs-extra": "^3.0.1", - "js-base64": "^2.3.2", - "jsonfile": "^3.0.0", - "lodash": "^4.17.2", - "open": "0.0.5" - }, - "dependencies": { - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "disparity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", - "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", - "dev": true, - "requires": { - "ansi-styles": "^2.0.1", - "diff": "^1.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - } - } - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", - "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.88", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.88.tgz", - "integrity": "sha512-UPV4NuQMKeUh1S0OWRvwg0PI8ASHN9kBC8yDTk1ROXLC85W5GnhTRu/MZu3Teqx3JjlQYuckuHYXSUSgtb3J+A==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "dev": true, - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "express-request-proxy": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/express-request-proxy/-/express-request-proxy-2.2.2.tgz", - "integrity": "sha512-0Dzn6LQG0ohd2S+zJVMhsntwcDakEzm/uKJSZxH7B66ZBvTsB5LU/HvfO1dHG+RRiKuCg0aWfUa66PljnDjEdw==", - "dev": true, - "requires": { - "async": "^2.6.1", - "body-parser": "^1.18.3", - "camel-case": "^3.0.0", - "debug": "^3.1.0", - "lodash": "^4.17.10", - "lru-cache": "^4.1.3", - "path-to-regexp": "^1.1.1", - "request": "^2.87.0", - "simple-errors": "^1.0.1", - "through2": "^2.0.3", - "type-is": "^1.6.16", - "url-join": "4.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extendable-error": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.5.tgz", - "integrity": "sha1-EiMIpwl7yJomOyxPvwiceBQOO20=" - }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==", - "dev": true - }, - "fast-xml-parser": { - "version": "3.12.10", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.12.10.tgz", - "integrity": "sha512-pw26n3OTAAQ8/2E76XOYpI0Z2PcX/kqZR8s1NnSpU9iXbUj+hkgvC9Ag1Cxqr3GUzuArxlLLroS8FeSmumkdgg==", - "requires": { - "nimnjs": "^1.3.2" - } - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz", - "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=", - "dev": true, - "requires": { - "traverse-chain": "~0.1.0" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz", - "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "format-util": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz", - "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphcool-json-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/graphcool-json-schema/-/graphcool-json-schema-1.2.1.tgz", - "integrity": "sha1-bO+2yLUFQ2FebvpDu1T54/uygfM=", - "dev": true - }, - "graphcool-yml": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/graphcool-yml/-/graphcool-yml-0.4.15.tgz", - "integrity": "sha512-ZVbRfVI8l21+1JQkcG0XuRam9mgiVUh9/PIcluzCZca2+lZQg/e1WCDXpwsC69i2ZdPcZwpOCLFKQMg5rnulCA==", - "dev": true, - "requires": { - "ajv": "^5.5.1", - "bluebird": "^3.5.1", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^4.0.3", - "graphcool-json-schema": "1.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "graphql": { - "version": "0.13.2", - "resolved": "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "dev": true, - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-cli": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/graphql-cli/-/graphql-cli-2.17.0.tgz", - "integrity": "sha512-K82gG79pA3G8GzMeqFq5+kkdZi7K6UWlvmrWLuGaIvo8F1wdHAKDvfexjRGb5CPisqAJqQqbsGsfrg7If488kA==", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "apollo-codegen": "^0.19.1", - "chalk": "^2.3.1", - "command-exists": "^1.2.2", - "cross-spawn": "^6.0.5", - "disparity": "^2.0.0", - "dotenv": "^5.0.0", - "express": "^4.16.2", - "express-request-proxy": "^2.0.0", - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0", - "graphql-cli-prepare": "1.4.19", - "graphql-config": "2.2.1", - "graphql-config-extension-graphcool": "1.0.11", - "graphql-config-extension-prisma": "0.2.5", - "graphql-playground-middleware-express": "1.7.6", - "graphql-schema-linter": "0.1.1", - "inquirer": "5.1.0", - "is-url-superb": "2.0.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.5", - "mkdirp": "^0.5.1", - "node-fetch": "^2.0.0", - "npm-paths": "^1.0.0", - "npm-run": "4.1.2", - "opn": "^5.2.0", - "ora": "^1.4.0", - "parse-github-url": "^1.0.2", - "request": "^2.83.0", - "rimraf": "2.6.2", - "source-map-support": "^0.5.3", - "tmp-graphql-config-extension-openapi": "^1.0.7", - "update-notifier": "^2.3.0", - "yargs": "11.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "dotenv": { - "version": "5.0.1", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", - "dev": true - } - } - }, - "graphql-cli-prepare": { - "version": "1.4.19", - "resolved": "https://registry.npmjs.org/graphql-cli-prepare/-/graphql-cli-prepare-1.4.19.tgz", - "integrity": "sha512-PJFm9/DvfZwKz3h2Wyn/5Sr/sX35XsYzNO3olfm5V8qqueNIONI0g7sVqpF7wYdvhEtt/8YA9DjgrGclCbpMfA==", - "dev": true, - "requires": { - "chalk": "2.3.1", - "fs-extra": "5.0.0", - "graphql-import": "0.4.5", - "graphql-static-binding": "0.9.3", - "lodash": "4.17.5" - }, - "dependencies": { - "chalk": { - "version": "2.3.1", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.2.0" - } - }, - "graphql-import": { - "version": "0.4.5", - "resolved": "http://registry.npmjs.org/graphql-import/-/graphql-import-0.4.5.tgz", - "integrity": "sha512-G/+I08Qp6/QGTb9qapknCm3yPHV0ZL7wbaalWFpxsfR8ZhZoTBe//LsbsCKlbALQpcMegchpJhpTSKiJjhaVqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } - } - }, - "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", - "dev": true, - "requires": { - "graphql-import": "^0.7.1", - "graphql-request": "^1.5.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.4" - } - }, - "graphql-config-extension-graphcool": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/graphql-config-extension-graphcool/-/graphql-config-extension-graphcool-1.0.11.tgz", - "integrity": "sha512-uNhyMqj30M4KLkD/gGEEr6cPuVX/jtm0C9O5Bj9V2jFhN5IdHXWJx+fC/p/xxh82iOuR8uibKNCXzwA7R6F6IA==", - "dev": true, - "requires": { - "graphcool-yml": "0.4.15", - "graphql-config": "2.2.1" - } - }, - "graphql-config-extension-prisma": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/graphql-config-extension-prisma/-/graphql-config-extension-prisma-0.2.5.tgz", - "integrity": "sha512-7Qh3TzZS3hwZpJbTNfTHXBM6UbzV7DMik9Mc95Rz76yTAs7Wr83xBFsH4Ap1NWlqBgANfO3cLLI4YomDJmO5SA==", - "dev": true, - "requires": { - "graphql-config": "2.2.1", - "prisma-yml": "1.20.0-beta.18" - } - }, - "graphql-extensions": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.3.6.tgz", - "integrity": "sha512-QGnDQ0TkF1YpVE/ZvKVl3bZ1PfwSbynVBcNU5U1DPU56pLkltETORiFL4TQ/Tt7RzagBX/xVaI3q0xJC6h9M5w==", - "requires": { - "@apollographql/apollo-tools": "^0.2.6" - } - }, - "graphql-import": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz", - "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==", - "requires": { - "lodash": "^4.17.4", - "resolve-from": "^4.0.0" - } - }, - "graphql-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/graphql-middleware/-/graphql-middleware-2.0.2.tgz", - "integrity": "sha512-qDmot+DU2XTRnWS3SJGRUUPQ9jhma9AtUR1GtWnqq3JkzoqzT/dprxS7eszIj0c1gD5UrySpm4yM1fNbQcazwA==", - "requires": { - "graphql-tools": "^4.0.3" - } - }, - "graphql-playground-html": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.4.tgz", - "integrity": "sha512-mnpAVYSR3TesYsJ5OLJVJMA0muTCw4npsCI1cKMtW35lbA6KljZkLkz3ZWXhEIYPnHKIeUHEtbn1ZGkEXtAxLg==", - "dev": true, - "requires": { - "graphql-config": "2.2.1" - } - }, - "graphql-playground-middleware-express": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.6.tgz", - "integrity": "sha512-fICPxYGIdhCxtFlwCnP3uZ2uRWeQ9wj7OkcWUiHNwaFma2TbRD5nNKaPA2u21YWha9xv26qIDxxcdW27F/lcbQ==", - "dev": true, - "requires": { - "graphql-playground-html": "1.6.4" - } - }, - "graphql-request": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", - "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", - "dev": true, - "requires": { - "cross-fetch": "2.2.2" - } - }, - "graphql-schema-linter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/graphql-schema-linter/-/graphql-schema-linter-0.1.1.tgz", - "integrity": "sha512-caZbOgNw08/9p3a+qusmaFi1TklG9ti+KHI6a2yfdp009gyoClWGQ+ElKVIiZkJQSeWCri2s2UFBCZjoM0JwTw==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "columnify": "^1.5.4", - "commander": "^2.11.0", - "cosmiconfig": "^3.1.0", - "figures": "^2.0.0", - "glob": "^7.1.2", - "graphql": "^0.13.0", - "lodash": "^4.17.4" - } - }, - "graphql-static-binding": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/graphql-static-binding/-/graphql-static-binding-0.9.3.tgz", - "integrity": "sha512-C8+EqwNCiQxUhbrWEokxN16oINAkhIDBzEpKHXeatBRaAyMczXm0J6HMaMSKOuQmk7P1PbDHIVW3FVZwXF2WJQ==", - "dev": true, - "requires": { - "cucumber-html-reporter": "^3.0.4" - } - }, - "graphql-subscriptions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", - "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz", - "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==" - }, - "graphql-tools": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.3.tgz", - "integrity": "sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.3.tgz", - "integrity": "sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw==", - "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.10" - } - }, - "zen-observable-ts": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz", - "integrity": "sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ==", - "requires": { - "zen-observable": "^0.8.0" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", - "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" - } - }, - "home-or-tmp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", - "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflected": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.0.4.tgz", - "integrity": "sha512-HQPzFLTTUvwfeUH6RAGjD8cHS069mBqXG5n4qaxX7sJXBhVQrsGgF+0ZJGkSuN6a8pcUWB/GXStta11kKi/WvA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.1.0.tgz", - "integrity": "sha512-kn7N70US1MSZHZHSGJLiZ7iCwwncc7b0gc68YtlX29OjI3Mp0tSVV+snVXpZ1G+ONS3Ac9zd1m6hve2ibLDYfA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "dev": true, - "requires": { - "lower-case": "^1.1.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", - "dev": true, - "requires": { - "upper-case": "^1.1.0" - } - }, - "is-url-superb": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-2.0.0.tgz", - "integrity": "sha1-tyihjPaS5NFtprlMdAioEdsNBJI=", - "dev": true, - "requires": { - "url-regex": "^3.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz", - "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-ref-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-3.3.1.tgz", - "integrity": "sha512-stQTMhec2R/p2L9dH4XXRlpNCP0mY8QrLd/9Kl+8SHJQmwHtE1nDfXH4wbsSM+GkJMl8t92yZbI0OIol432CIQ==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "debug": "^3.0.0", - "es6-promise": "^4.1.1", - "js-yaml": "^3.9.1", - "ono": "^4.0.2", - "z-schema": "^3.18.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonwebtoken": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", - "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", - "requires": { - "jws": "^3.1.5", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", - "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.10", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", - "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", - "requires": { - "jwa": "^1.1.5", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "dev": true, - "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "logform": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", - "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", - "dev": true, - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "colors": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", - "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", - "dev": true - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", - "dev": true, - "requires": { - "lower-case": "^1.1.2" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "dev": true, - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "requires": { - "mime-db": "~1.36.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nimn-date-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz", - "integrity": "sha512-1Nf+x3EeMvHUiHsVuEhiZnwA8RMeOBVTQWfB1S2n9+i6PYCofHd2HRMD+WOHIHYshy4T4Gk8wQoCol7Hq3av8Q==" - }, - "nimn_schema_builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz", - "integrity": "sha512-DK5/B8CM4qwzG2URy130avcwPev4uO0ev836FbQyKo1ms6I9z/i6EJyiZ+d9xtgloxUri0W+5gfR8YbPq7SheA==" - }, - "nimnjs": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/nimnjs/-/nimnjs-1.3.2.tgz", - "integrity": "sha512-TIOtI4iqkQrUM1tiM76AtTQem0c7e56SkDZ7sj1d1MfUsqRcq2ZWQvej/O+HBTZV7u/VKnwlKTDugK/75IRPPw==", - "requires": { - "nimn-date-parser": "^1.0.0", - "nimn_schema_builder": "^1.0.0" - } - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.0.tgz", - "integrity": "sha512-+qV91QMDBvARuPxUEfI/mRF/BY+UAkTIn3pvmvM2iOLIRvv6RNYklFXBgrkky6P1wXUqQW1P3qKlWxxy4JZbfg==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-request-by-swagger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/node-request-by-swagger/-/node-request-by-swagger-1.1.4.tgz", - "integrity": "sha512-hwaTaFPUwNKns5qXwGJpLQM3Z5zRluYeAxpYy1L8fWmWdT/DjLmsnW8/oGlSN8Vo4R28c2znfUoBUiB/RlPptw==", - "dev": true - }, - "nodemon": { - "version": "1.18.7", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz", - "integrity": "sha512-xuC1V0F5EcEyKQ1VhHYD13owznQbUw29JKvZ8bVH7TmuvVNHvvbp9pLgE4PjTMRJVe0pJ8fGRvwR2nMiosIsPQ==", - "dev": true, - "requires": { - "chokidar": "^2.0.4", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.2", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, - "npm-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-paths/-/npm-paths-1.0.0.tgz", - "integrity": "sha512-COlxSO5PK9UvZXIa7/sqJDZOlffWFx9+CKJJWkdbhUJMBwcf9sof2jxt4uiVsl+nY3sy0/XFGl4iGr8GoKfiXA==", - "dev": true, - "requires": { - "global-modules": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "npm-run": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-4.1.2.tgz", - "integrity": "sha1-EDDh7FaQjIn8w/o2bQOiwrqY65k=", - "dev": true, - "requires": { - "cross-spawn": "^5.1.0", - "minimist": "^1.2.0", - "npm-path": "^2.0.3", - "npm-which": "^3.0.1", - "serializerr": "^1.0.3", - "sync-exec": "^0.6.2" - } - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "ono": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz", - "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==", - "dev": true, - "requires": { - "format-util": "^1.0.3" - } - }, - "open": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true - }, - "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "ora": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", - "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.0.1", - "log-symbols": "^2.1.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", - "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "prisma-json-schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/prisma-json-schema/-/prisma-json-schema-0.1.3.tgz", - "integrity": "sha512-XZrf2080oR81mY8/OC8al68HiwBm0nXlFE727JIia0ZbNqwuV4MyRYk6E0+OIa6/9KEYxZrcAmoBs3EW1cCvnA==", - "dev": true - }, - "prisma-yml": { - "version": "1.20.0-beta.18", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.20.0-beta.18.tgz", - "integrity": "sha512-wI/lOQrD78de2+ZNzJlbEYcYiUANtpdyT0VzAS+YbF5+1/O+shOnpwYsBtjrVL5Er0RwMkwH7j+oZQM61ENBMQ==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - } - }, - "protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "pstree.remy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz", - "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, - "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", - "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "requires": { - "lodash": "^4.13.1" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - }, - "dependencies": { - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", - "dev": true, - "requires": { - "protochain": "^1.0.5" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-errors/-/simple-errors-1.0.1.tgz", - "integrity": "sha1-sLvsrB8QgvE7OWKJS0qeiPOgye8=", - "dev": true, - "requires": { - "errno": "^0.1.1" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.1.tgz", - "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", - "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", - "dev": true, - "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "sync-exec": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.6.2.tgz", - "integrity": "sha1-cX0izFPwzh3vVZQ2LzqJouu5EQU=", - "dev": true - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmp-graphql-config-extension-openapi": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tmp-graphql-config-extension-openapi/-/tmp-graphql-config-extension-openapi-1.0.7.tgz", - "integrity": "sha512-NQPUaywaVC2hzWkBBsTX3sV2XfxU0mc409rJyrA7iCu5DSTjMLUqI+U4KJVSy/Ltp0zgbWMWua471R7zMql9Pw==", - "dev": true, - "requires": { - "@kbrandwijk/swagger-to-graphql": "2.4.3", - "graphql-config": "2.2.1" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "traverse-chain": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", - "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "dev": true, - "requires": { - "upper-case": "^1.1.1" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz", - "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validator": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.9.0.tgz", - "integrity": "sha512-hZJcZSWz9poXBlAkjjcsNAdrZ6JbjD3kWlNjq/+vE7RLLS/+8PAj3qVVwrwsOz/WL8jPmZ1hYkRvtlUeZAm4ug==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "http://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz", - "integrity": "sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^1.9.1", - "one-time": "0.0.4", - "readable-stream": "^2.3.6", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "winston-transport": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.2.0.tgz", - "integrity": "sha512-0R1bvFqxSlK/ZKTH86nymOuKv/cT1PQBMuDdA7k7f0S9fM44dNH6bXnuxwXPrN8lefJgtZq08BKdyZ0DZIy/rg==", - "dev": true, - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yaml-ast-parser": { - "version": "0.0.40", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.40.tgz", - "integrity": "sha1-CFNtTnPTIrHJziB6uN1w4E0grm4=", - "dev": true - }, - "yargs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", - "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - }, - "z-schema": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.24.2.tgz", - "integrity": "sha512-Zb2YLJ9g72MexBXKPRzoypd4OZfVkFghdy10eVbcMNLl9YQsPXtyMpiK7a3sG7IIERg1lEDjEMrG9Km9DPbWLw==", - "dev": true, - "requires": { - "commander": "^2.7.1", - "core-js": "^2.5.7", - "lodash.get": "^4.0.0", - "lodash.isequal": "^4.0.0", - "validator": "^10.0.0" - } - }, - "zen-observable": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.9.tgz", - "integrity": "sha512-Y9kPzjGvIZ5jchSlqlCpBW3I82zBBL4z+ulXDRVA1NwsKzjt5kwAi+gOYIy0htNkfuehGZZtP5mRXHRV6TjDWw==" - } - } -} diff --git a/Deprecated-Code/NotificationsModule/server/package.json b/Deprecated-Code/NotificationsModule/server/package.json deleted file mode 100644 index 888aad0e6..000000000 --- a/Deprecated-Code/NotificationsModule/server/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "aa-notifications-server", - "scripts": { - "start": "NODE_ENV=production nodemon -e js,graphql -x node -r @babel/register -r dotenv/config src/index.js", - "debug": "nodemon --trace-warnings src/index.js --watch ./src --exec \"node --require @babel/register --require dotenv/config\"", - "playground": "graphql playground --dotenv dotenv/config", - "dev": "npm-run-all --parallel debug playground" - }, - "dependencies": { - "@sendgrid/client": "^6.3.0", - "@sendgrid/mail": "^6.3.1", - "apollo-errors": "^1.9.0", - "apollo-server-express": "^2.2.6", - "axios": "^0.18.0", - "cors": "^2.8.5", - "express": "^4.16.4", - "fast-xml-parser": "^3.12.10", - "graphql-import": "^0.7.1", - "graphql-middleware": "^2.0.2", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.10.0", - "graphql-tools": "^4.0.3", - "jsonwebtoken": "^8.4.0", - "lodash.get": "^4.4.2", - "lodash.merge": "^4.6.1", - "request": "^2.88.0", - "request-promise-native": "^1.0.5" - }, - "devDependencies": { - "@babel/cli": "^7.2.0", - "@babel/core": "^7.2.0", - "@babel/node": "^7.2.0", - "@babel/plugin-proposal-class-properties": "^7.2.1", - "@babel/plugin-proposal-throw-expressions": "^7.2.0", - "@babel/polyfill": "^7.0.0", - "@babel/preset-env": "^7.2.0", - "@babel/register": "^7.0.0", - "dotenv": "^6.2.0", - "graphql-cli": "^2.17.0", - "nodemon": "^1.18.7", - "npm-run-all": "^4.1.5", - "winston": "^3.1.0" - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/ApolloServer.js b/Deprecated-Code/NotificationsModule/server/src/ApolloServer.js deleted file mode 100644 index 257cfa15e..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/ApolloServer.js +++ /dev/null @@ -1,131 +0,0 @@ -import http from 'http' -import { ApolloServer, makeExecutableSchema } from 'apollo-server-express' -import { applyMiddleware as applyGraphQLMiddleware } from 'graphql-middleware' -import { moduleAuth } from './middleware' -import logger from './logger' - -/** - * - * @description Creates an Apollo Server. Setup based on `vue-cli-plugin-apollo`. - * @param {Object} app Express application - * @param {Object} options Apollo options - * @returns {Object} HTTP Server - */ -export default function createApolloServer( - app, - { - // Main options - graphqlEndpoint = '', - typeDefs = {}, - resolvers = {}, - schemaDirectives = {}, - directiveResolvers = {}, - graphqlMiddlewares = [], - dataSources = () => ({}), - context = () => ({}), - // Subscriptions - subscriptionsEndpoint = '', - wsMiddlewares = [], - // Mocks - mocks, - // Apollo Engine - engineKey = '', - // HTTP options - cors = true, - timeout = 120000, - // Extra options for Apollo Server - apolloServerOptions = {}, - } -) { - const schema = makeExecutableSchema({ - typeDefs, - resolvers, - schemaDirectives, - directiveResolvers, - resolverValidationOptions: { - requireResolversForResolveType: false, - }, - }) - - // Apollo server options - const options = { - ...apolloServerOptions, - schema: applyGraphQLMiddleware(schema, ...graphqlMiddlewares), - tracing: true, - cacheControl: true, - introspection: true, - playground: true, - engine: engineKey ? { apiKey: engineKey } : false, - dataSources, - // Resolvers context in POST requests - context: async ({ req, connection }) => { - let contextData - try { - if (connection) { - contextData = { ...connection.context } - } else { - contextData = await context({ req, request: req }) - } - } catch (err) { - logger.error(err) - throw err - } - - return contextData - }, - // Resolvers context in WebSocket requests - subscriptions: { - path: subscriptionsEndpoint, - onConnect: async (connection, websocket) => { - const { authorization, userid } = connection - - let contextData = {} - try { - // Simulate `req` object for auth - const req = { headers: { authorization, userid } } - - // Call all middlewares in order and modify `req` - await new Promise((resolve, reject) => - wsMiddlewares.reduceRight( - (acc, m) => err => (err ? reject(err) : m(req, null, acc)), - err => (err ? reject(err) : resolve()) - )() - ) - - contextData = await context({ - connection, - websocket, - request: req, - req, - }) - } catch (err) { - logger.error(err) - } - - return contextData - }, - }, - } - - // Apollo Server - const server = new ApolloServer(options) - - // Express middleware - server.applyMiddleware({ - moduleAuth, - app, - cors, - path: graphqlEndpoint, - // gui: { - // endpoint: graphqlEndpoint, - // subscriptionEndpoint: graphqlSubscriptionsPath, - // }, - }) - - // Create HTTP server and add subscriptions - const httpServer = http.createServer(app) - httpServer.setTimeout(timeout) - server.installSubscriptionHandlers(httpServer) - - return httpServer -} diff --git a/Deprecated-Code/NotificationsModule/server/src/errors/index.js b/Deprecated-Code/NotificationsModule/server/src/errors/index.js deleted file mode 100644 index 42be0507f..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/errors/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import { ApolloError } from 'apollo-server-express' -import { inspect } from 'util' -import logger from '../logger' - -export { - ApolloError, - AuthenticationError, - ForbiddenError, - SyntaxError, - UserInputError, - ValidationError, -} from 'apollo-server-express' - -export const formatError = (error) => { - // This can be used to send errors to third - // party services like Sentry or Stackdriver - logger.info('formatError') - logger.error(JSON.parse(JSON.stringify(inspect(error)))) - const originalError = searchOriginalError(error) - logger.error('originalError') - logger.error(originalError) - const { message, code } = originalError - return { message, code} -} - -const searchOriginalError = (error) => { - if (error.originalError) { - logger.error('Original Error') - logger.error(error.originalError) - return error.originalError - } - if (error.errors) { - logger.error('Errors') - logger.error(JSON.parse(JSON.stringify(inspect(error.errors)))) - return error.errors.map(searchOriginalError)[0] - } - logger.error('searchOriginalErrors') - logger.error(JSON.parse(JSON.stringify(inspect(error)))) - return error; -} - -// Define custom Apollo errors here -export class ExternalServiceError extends ApolloError { - constructor(message) { - super(message, 'EXTERNAL_SERVICE_UNAVAILABLE') - - Object.defineProperty(this, 'name', { value: this.constructor.name }) - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/errors/notAllowed.json b/Deprecated-Code/NotificationsModule/server/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/index.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/index.js deleted file mode 100644 index ad9f6c6aa..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import Corporate from './sendgrid/corporate' -import Master from './sendgrid/master' -import Teams from './sendgrid/teams' - -export const resolvers = { - Mutation: { - Corporate_NewsletterSignup: (parent, arg, ctx, info) => Corporate.Corporate_NewsletterSignup(parent, arg, ctx, info), - Corporate_NewsletterSignupVerify: (parent, arg, ctx, info) => Corporate.Corporate_NewsletterSignupVerify(parent, arg, ctx, info), - Corporate_Contact: (parent, arg, ctx, info) => Corporate.Corporate_Contact(parent, arg, ctx, info), - Master_NewsletterSignup: (parent, arg, ctx, info) => Master.Master_NewsletterSignup(parent, arg, ctx, info), - Master_NewsletterSignupVerify: (parent, arg, ctx, info) => Master.Master_NewsletterSignupVerify(parent, arg, ctx, info), - Master_Feedback: (parent, arg, ctx, info) => Master.Master_Feedback(parent, arg, ctx, info), - Teams_SendTeamMemberInvite: (parent, arg, ctx, info) => Teams.Teams_SendTeamMemberInvite(parent, arg, ctx, info), - Teams_VerifyTeamMemberInviteToken: (parent, arg, ctx, info) => Teams.Teams_VerifyTeamMemberInviteToken(parent, arg, ctx, info), - Teams_SendTeamCreateConfirmation: (parent, arg, ctx, info) => Teams.Teams_SendTeamCreateConfirmation(parent, arg, ctx, info) - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/corporate.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/corporate.js deleted file mode 100644 index cd5edadbb..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/corporate.js +++ /dev/null @@ -1,221 +0,0 @@ -import sgMail from '@sendgrid/mail' -import axios from 'axios' -import jwt from 'jsonwebtoken' -import { ApolloError } from 'apollo-server-express' - -import logger from '../../../../logger' - -const API_KEY = process.env.SG_APIKEY -const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN -const CORPORATE_EMAIL = process.env.CORPORATE_EMAIL - -const origin = process.env.SG_CORPORATE_ORIGIN - -export default { - async Corporate_NewsletterSignup(parent, { email }, ctx, info) { - logger.info('Corporate_NewsletterSignup params email:') - logger.info(email) - const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' }) - const params = '/email-verification.shtml?token=' - - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": email - } - ], - dynamic_template_data: { - "aaverifylink": origin + params + token, - "subject": 'VERIFY YOUR INTEREST in the Superalgos project' - }, - "subject": 'VERIFY YOUR INTEREST in the Superalgos project' - } - ], - "from": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Team" - }, - "template_id": process.env.SG_CORPORATE_SIGNUP_EMAILID - }) - - const sendVerify = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - logger.info('Sendgrid sendVerify response:') - logger.info(response) - if (response.status >= 200 && response.status < 300) { - return 'SUCCESS' - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - logger.error('Sendgrid sendVerify Error:') - logger.error(error) - throw new ApolloError(`Sendgrid sendVerify Error: ${error.response.data.errors[0].message}`, 404) - }) - return sendVerify - }, - - async Corporate_NewsletterSignupVerify(parent, { token }, ctx, info){ - let verifiedToken - try { - verifiedToken = jwt.verify(token, API_KEY, {maxAge: '1d'}) - } catch(err) { - logger.error('Sendgrid verifiedToken Error:') - logger.error(err) - if (err.name === 'TokenExpiredError'){ - throw new ApolloError('Error: Token Expired. Please resubmit email address.', 400) - } else { - throw new ApolloError(`Error: ${err.message}`, 400) - } - } - logger.info('Sendgrid verifySignup verifiedToken: ') - logger.info(verifiedToken) - - const email = verifiedToken.email - - const subscribe = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/contactdb/recipients', - data: [{"email": email}], - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY_CAMPAIGN - } - }) - .then(response => { - logger.info('Sendgrid verifySignup subscribe: ') - logger.info(response) - const recipients = response.data.persisted_recipients - - if (recipients.length > 0 ){ - const addToList = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/contactdb/lists/4068018/recipients/' + recipients[0], - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY_CAMPAIGN - } - }) - .then(response => { - logger.info('Sendgrid verifySignup addToList: ') - logger.info(response) - if (response.status >= 200 && response.status < 300) { - return 'SUCCESS' - } else { - throw response.data.errors[0].message - } - }) - .catch(error => { - logger.error('Sendgrid verifySignUp subscribe Error:') - logger.error(error) - throw `Email SignUp Error: ${error}` - }) - return addToList - } else{ - return response.data.errors[0].message - } - }) - .then(response => { - return response - }) - .catch(error => { - logger.error('Sendgrid verifySubscribe Error:') - logger.error(error) - throw new ApolloError(`Sendgrid verifySubscribe Error: ${error.response.data.errors[0].message}`, 404) - }) - return subscribe - }, - - async Corporate_Contact(parent, { email, name, message, recaptcha }, ctx, info) { - logger.info(`Corporate_Contact: ${email} | ${name} | ${message} | ${recaptcha}`) - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": CORPORATE_EMAIL - } - ], - dynamic_template_data: { - "aacontactname": name, - "aacontactemail": email, - "aacontactbody": message, - "subject": `Superalgos Project Site Contact - Message from ${name}` - }, - "subject": `Superalgos Project Site Contact - Message from ${name}` - } - ], - "from": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Team" - }, - "reply_to": { - "email": email, - "name": name - }, - "template_id": process.env.SG_CORPORATE_CONTACT_EMAILID - }) - - const checkCaptcha = axios({ - method: 'post', - url: 'https://www.google.com/recaptcha/api/siteverify', - params: { - secret: process.env.RECAPTCHA, - response: recaptcha - } - }) - .then(function (response) { - // logger.info(response) - if (response.status >= 200 && response.status < 300 && response.data.success) { - return axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - // logger.info('Sendgrid Contact response: ') - // logger.info(response) - if (response.status >= 200 && response.status < 300) { - logger.info('Sendgrid Contact email sent') - return `Superalgos Project Contact email sent` - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - logger.error(`sendgrid Error: ${JSON.stringify(error)}`) - throw `Superalgos Project Contact email send error: ${error.response.data.errors[0].message}` - }) - }else{ - logger.info('Superalgos Project Contact recaptcha error') - logger.info(response.data) - throw { response: { data: JSON.stringify(response.data) } } - } - }) - .then(function(response){ - return response - }) - .catch(function (error) { - logger.error('Sendgrid Superalgos Project Contact RECAPTCHA Error:') - logger.error(error) - throw new ApolloError(`Sendgrid Superalgos Project Contact RECAPTCHA Error: ${error.response.data}`, 404) - }) - - return checkCaptcha - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/master.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/master.js deleted file mode 100644 index 4b84588e5..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/master.js +++ /dev/null @@ -1,219 +0,0 @@ -import sgMail from '@sendgrid/mail' -import axios from 'axios' -import jwt from 'jsonwebtoken' -import { ApolloError } from 'apollo-server-express' - -import logger from '../../../../logger' - -const API_KEY = process.env.SG_APIKEY -const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN - -const origin = process.env.SG_PLATFORM_ORIGIN - -export default { - async Master_NewsletterSignup(parent, { email }, ctx, info) { - logger.info('Master_NewsletterSignup params email:') - logger.info(email) - const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' }) - const params = '/email-verification?token=' - - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": email - } - ], - dynamic_template_data: { - "aaverifylink": origin + params + token, - "subject": 'VERIFY YOUR INTEREST in the Superalgos Project' - }, - "subject": 'VERIFY YOUR INTEREST in the Superalgos Project' - } - ], - "from": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Team" - }, - "reply_to": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Team" - }, - "template_id": process.env.SG_MASTER_SIGNUP_EMAILID - }) - - const sendVerify = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - logger.info('Sendgrid Master SendVerify response:') - logger.info (response) - if (response.status >= 200 && response.status < 300) { - return 'SUCCESS' - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - logger.error('Sendgrid Master SendVerify Error:') - logger.error(error) - throw new ApolloError(`Sendgrid Master SendVerify Error: ${error.response.data.errors[0].message}`, 404) - }) - return sendVerify - }, - async Master_NewsletterSignupVerify(parent, { token }, ctx, info){ - let verifiedToken - try { - verifiedToken = jwt.verify(token, API_KEY, {maxAge: '1d'}) - } catch(err) { - logger.error('Sendgrid Master verifiedToken Error:') - logger.error(err) - if (err.name === 'TokenExpiredError'){ - throw new ApolloError('Error: Token Expired. Please resubmit email address.', 400) - } else { - throw new ApolloError(`Error: ${err.message}`, 400) - } - } - logger.info('Sendgrid Master verifySignup verifiedToken: ') - logger.info(verifiedToken) - - const email = verifiedToken.email - - const subscribe = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/contactdb/recipients', - data: [{"email": email}], - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY_CAMPAIGN - } - }) - .then(response => { - logger.info('Sendgrid Master verifySignup subscribe: ') - logger.info(response) - const recipients = response.data.persisted_recipients - - if (recipients.length > 0 ){ - const addToList = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/contactdb/lists/4068018/recipients/' + recipients[0], - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY_CAMPAIGN - } - }) - .then(response => { - logger.info('Sendgrid Master verifySignup addToList: ') - logger.info(response) - if (response.status >= 200 && response.status < 300) { - return 'SUCCESS' - } else { - throw response.data.errors[0].message - } - }) - .catch(error => { - logger.error('Sendgrid Master verifySignUp subscribe Error:') - logger.error(error) - throw `Email SignUp Error: ${error}` - }) - return addToList - } else{ - return response.data.errors[0].message - } - }) - .then(response => { - return response - }) - .catch(error => { - logger.error('Sendgrid Master verifySubscribe Error:') - logger.error(error) - throw new ApolloError(`Sendgrid Master verifySubscribe Error: ${error.response.data.errors[0].message}`, 404) - }) - return subscribe - }, - async Master_Feedback(parent, { email, subject, message, recaptcha }, ctx, info) { - const toEmail = 'feedback@superalgos.org' - - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": toEmail - } - ], - dynamic_template_data: { - "aacontactname": name, - "aacontactemail": email, - "aacontactbody": message - }, - "subject": `Superalgos Platform App Feedback - Message from ${name}` - } - ], - "from": { - "email": email, - "name": name - }, - "reply_to": { - "email": email, - "name": name - }, - "template_id": process.env.SG_MASTER_FEEDBACK_EMAILID - }) - - const checkCaptcha = axios({ - method: 'post', - url: 'https://www.google.com/recaptcha/api/siteverify', - params: { - secret: process.env.RECAPTCHA, - response: recaptcha - } - }) - .then(function (response) { - logger.info(response.data) - if (response.status >= 200 && response.status < 300 && response.data.success) { - return axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - logger.info('Platform Feedback response: ') - logger.info(response) - if (response.status >= 200 && response.status < 300) { - return `Platform Feedback email sent` - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - logger.error(`sendgrid Error: ${JSON.stringify(error)}`) - throw `Platform Feedback email send error: ${error.response.data.errors[0].message}` - }) - }else{ - throw response.data - } - }) - .then(function(response){ - return response - }) - .catch(function (error) { - logger.error('Platform Feedback RECAPTCHA Error:') - logger.error(error) - throw new ApolloError(`Platform Feedback RECAPTCHA Error: ${error.response.data.errors[0].message}`, 404) - }) - - return checkCaptcha - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/teams.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/teams.js deleted file mode 100644 index 8bc9fcc67..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Mutation/sendgrid/teams.js +++ /dev/null @@ -1,134 +0,0 @@ -import sgMail from '@sendgrid/mail' -import axios from 'axios' -import jwt from 'jsonwebtoken' -import { ApolloError } from 'apollo-server-express' - -import logger from '../../../../logger' - -const API_KEY = process.env.SG_APIKEY -const API_KEY_CAMPAIGN = process.env.SG_APIKEY_CAMPAIGN - -const origin = process.env.SG_PLATFORM_ORIGIN - -export default { - async Teams_SendTeamMemberInvite(parent, { email, teamName }, ctx, info) { - logger.info('Teams_NewsletterSignup params email:') - logger.info(email) - const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' }) - const params = '/email-verification?token=' - - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": email - } - ], - dynamic_template_data: { - "aateaminvitelink": origin + params + token, - "aateamname": teamName, - "subject": "INVITATION: Join team " + teamName - }, - "subject": "INVITATION: Join team " + teamName - } - ], - "from": { - "email": "noreply@superalgos.org", - "name": "Superalgos Project Teams" - }, - "reply_to": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Teams" - }, - "template_id": process.env.SG_TEAMS_MEMBER_INVITE_EMAILID - }) - - let sendVerify = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - if (response.status >= 200 && response.status < 300) { - return 'Success' - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - throw new ApolloError (`Send Team Invite Verification Error: - ${error.status}-${error.response.data.errors[0].message}`, 404) - }) - return sendVerify - }, - - async Teams_VerifyTeamMemberInviteToken(parent, { email, teamName }, ctx, info) { - let verifiedToken - try { - verifiedToken = await jwt.verify(token, API_KEY, {maxAge: '7d'}) - } catch(err) { - if (err.name === "TokenExpiredError"){ - throw new ApolloError('Team Invite Token Error: Token Expired. Please request new invitation or apply to the team again', 404) - } else { - throw new ApolloError (`Team Invite Token Error: - ${err.message}`, 404) - } - } - logger.info(`verifyInviteToken: ${verifiedToken}`) - return verifiedToken - }, - - async Teams_SendTeamCreateConfirmation(parent, { email, teamName, botName }, ctx, info){ - const data = JSON.stringify({ - "personalizations": [ - { - "to": [ - { - "email": email - } - ], - dynamic_template_data: { - "aadeveloplink": "https://platform.superalgos.org/index.html", - "aateamname": teamName, - "aabotname": botName, - "subject": "Team " + teamName + " has been created!" - }, - "subject": "Team " + teamName + " has been created!" - } - ], - "from": { - "email": "noreply@superalgos.org", - "name": "Superalgos Project Teams" - }, - "reply_to": { - "email": "feedback@superalgos.org", - "name": "Superalgos Project Teams" - }, - "template_id": process.env.SG_TEAMS_TEAMCREATE_EMAILID - }) - - let sendTeamCreation = axios({ - method: 'post', - url: 'https://api.sendgrid.com/v3/mail/send', - data: data, - headers:{ - 'content-type': 'application/json', - 'authorization': 'Bearer ' + API_KEY - } - }) - .then(function (response) { - if (response.status >= 200 && response.status < 300) { - return 'Success' - } else { - throw response.data.errors[0].message - } - }) - .catch(function (error) { - throw new ApolloError(`Team Creation Confirmation Error: ${error.response.data.errors[0].message}`) - }) - return sendTeamCreation - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Query/index.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Query/index.js deleted file mode 100644 index a9f46ea07..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/Query/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import logger from '../../../logger' - -export const resolvers = { - Query: { - _blank: (parent, arg, ctx, info) => { return '' } - } -} diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/index.js b/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/index.js deleted file mode 100644 index 543ab4e32..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/resolvers/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import merge from 'lodash.merge' - -import { resolvers as queryResolvers } from './Query' -import { resolvers as mutationResolvers } from './Mutation' - -export const resolvers = merge(queryResolvers, mutationResolvers) diff --git a/Deprecated-Code/NotificationsModule/server/src/graphql/schema.graphql b/Deprecated-Code/NotificationsModule/server/src/graphql/schema.graphql deleted file mode 100644 index 54d629145..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/graphql/schema.graphql +++ /dev/null @@ -1,15 +0,0 @@ -type Query { - _blank: String -} - -type Mutation { - Corporate_NewsletterSignup(email: String!): String - Corporate_NewsletterSignupVerify(token: String!): String - Corporate_Contact(email: String!, name: String, message: String!, recaptcha: String!): String - Master_NewsletterSignup(email: String!): String - Master_NewsletterSignupVerify(token: String!): String - Master_Feedback(email: String!, subject: String!, message: String!, recaptcha: String!): String - Teams_SendTeamMemberInvite(email: String!, teamName: String!): String - Teams_SendTeamCreateConfirmation(email: String!, teamName: String!, botName: String!): String - Teams_VerifyTeamMemberInviteToken(token: String!): String -} diff --git a/Deprecated-Code/NotificationsModule/server/src/index.js b/Deprecated-Code/NotificationsModule/server/src/index.js deleted file mode 100644 index ff53c3f0a..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/index.js +++ /dev/null @@ -1,71 +0,0 @@ -import '@babel/polyfill' -require('dotenv').config(); -import express from 'express' -import createApolloServer from './ApolloServer' -import { formatError } from './errors' -import { makeExecutableSchema } from 'graphql-tools' -import { importSchema } from 'graphql-import' - -import { resolvers } from './graphql/resolvers' - -import logger from './logger' - -import wrongPreshared from './errors/notAllowed.json' - -const GRAPHQL_ENDPOINT = '/graphql' -const GRAPHQL_SUBSCRIPTIONS = '/graphql' -const PORT = process.env.PORT -const NODE_ENV = 'development' - -const app = express() - -app.post(GRAPHQL_ENDPOINT, (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - -app.post(GRAPHQL_ENDPOINT) - -const corsOptions = { - "origin": "*", - "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", - "preflightContinue": false, - "optionsSuccessStatus": 204 -} - -const options = { - port: PORT, - cors: corsOptions, - endpoint: '/graphql', - subscriptions: '/graphql' -} - -let server -try { - server = createApolloServer(app, { - graphqlEndpoint: GRAPHQL_ENDPOINT, - subscriptionsEndpoint: GRAPHQL_SUBSCRIPTIONS, - apolloServerOptions: { formatError }, - typeDefs: importSchema('src/graphql/schema.graphql'), - resolvers, - resolverValidationOptions: { requireResolversForResolveType: false }, - context: req => ({ - ...req , - token: req.headers ? req.headers : undefined, - user: req.user ? req.user : undefined, - userId: (req.headers && req.headers.userid) ? req.headers.userid : undefined - }) - }) -} catch (err) { - logger.error('Create Apollo Server Error: ') - logger.error(err) -} - -server.listen({ port: PORT }, () => { - logger.info( - `🚀 GraphQL Server is running on http://localhost:${PORT}${GRAPHQL_ENDPOINT} in "${NODE_ENV}" mode\n` - ) -}) diff --git a/Deprecated-Code/NotificationsModule/server/src/logger/index.js b/Deprecated-Code/NotificationsModule/server/src/logger/index.js deleted file mode 100644 index d45a27e85..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/logger/index.js +++ /dev/null @@ -1,41 +0,0 @@ -import { createLogger, format, transports } from 'winston' -import { inspect } from 'util' - -const { combine, timestamp, simple } = format - -const options = { - file: { - level: 'info', - filename: '../logs/app.log', - handleExceptions: true, - json: true, - maxsize: 5242880, // 5MB - maxFiles: 5, - colorize: false, - timestamp: true - }, - console: { - level: 'info', - handleExceptions: true, - json: false, - colorize: true, - } -} - -const logger = createLogger({ - level: 'info', - format: format.combine( - format.colorize(), - format.timestamp({ format: 'YY/MM/DD HH:mm' }), - format.printf( - info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}` - ) - ), - transports: [ - new transports.File(options.file), - new transports.Console(options.console) - ], - exitOnError: false // do not exit on handled exceptions -}) - -export default logger diff --git a/Deprecated-Code/NotificationsModule/server/src/middleware/index.js b/Deprecated-Code/NotificationsModule/server/src/middleware/index.js deleted file mode 100644 index c23d24ee0..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/middleware/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import moduleAuth from './moduleAuth' - -export { moduleAuth } diff --git a/Deprecated-Code/NotificationsModule/server/src/middleware/moduleAuth.js b/Deprecated-Code/NotificationsModule/server/src/middleware/moduleAuth.js deleted file mode 100644 index 2680886ed..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/middleware/moduleAuth.js +++ /dev/null @@ -1,13 +0,0 @@ -import logger from '../logger' - -export const moduleAuth = async (req, res, next, db) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - logger.info('Module authenticated') - next(); - } else { - logger.error('Module authentication error') - res.send(wrongPreshared); - } -} - -export default moduleAuth diff --git a/Deprecated-Code/NotificationsModule/server/src/pubsub.js b/Deprecated-Code/NotificationsModule/server/src/pubsub.js deleted file mode 100644 index df9481ea8..000000000 --- a/Deprecated-Code/NotificationsModule/server/src/pubsub.js +++ /dev/null @@ -1,3 +0,0 @@ -import { PubSub } from 'graphql-subscriptions' - -export default new PubSub() diff --git a/Deprecated-Code/OneMinCandles/.gitattributes b/Deprecated-Code/OneMinCandles/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/OneMinCandles/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/OneMinCandles/.gitignore b/Deprecated-Code/OneMinCandles/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/OneMinCandles/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/OneMinCandles/AABruce-Indicator-Bot.sln b/Deprecated-Code/OneMinCandles/AABruce-Indicator-Bot.sln deleted file mode 100644 index 913b8fd07..000000000 --- a/Deprecated-Code/OneMinCandles/AABruce-Indicator-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{045BBAEF-3C35-4017-8458-E46AEF438790}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {045BBAEF-3C35-4017-8458-E46AEF438790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {045BBAEF-3C35-4017-8458-E46AEF438790}.Debug|Any CPU.Build.0 = Debug|Any CPU - {045BBAEF-3C35-4017-8458-E46AEF438790}.Release|Any CPU.ActiveCfg = Release|Any CPU - {045BBAEF-3C35-4017-8458-E46AEF438790}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {2A5094EC-199A-4833-894F-166CB38B4715} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/OneMinCandles/Bruce.png b/Deprecated-Code/OneMinCandles/Bruce.png deleted file mode 100644 index e94d68143..000000000 Binary files a/Deprecated-Code/OneMinCandles/Bruce.png and /dev/null differ diff --git a/Deprecated-Code/OneMinCandles/Commons.js b/Deprecated-Code/OneMinCandles/Commons.js deleted file mode 100644 index 10d791988..000000000 --- a/Deprecated-Code/OneMinCandles/Commons.js +++ /dev/null @@ -1,67 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons"; - - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - const GMT_SECONDS = ':00.000 GMT+0000'; - - let thisObject = { - initializeStorage: initializeStorage - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - return thisObject; - - function initializeStorage(charlyStorage, bruceStorage, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initializeStorage -> Entering function."); } - - initializeBruceStorage(); - - function initializeBruceStorage() { - - bruceStorage.initialize(bot.dataMine, onBruceInizialized); - - function onBruceInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - initializeCharlyStorage(); - - } else { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> initializeBruceStorage -> onBruceInizialized -> err = " + err.stack); - callBackFunction(err); - } - } - } - - function initializeCharlyStorage() { - - charlyStorage.initialize(bot.dataMine, onCharlyInizialized); - - function onCharlyInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } else { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> initializeCharlyStorage -> onCharlyInizialized -> err = " + err.stack); - callBackFunction(err); - } - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -}; \ No newline at end of file diff --git a/Deprecated-Code/OneMinCandles/LICENSE b/Deprecated-Code/OneMinCandles/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/OneMinCandles/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/OneMinCandles/Project.njsproj b/Deprecated-Code/OneMinCandles/Project.njsproj deleted file mode 100644 index fbadd8f27..000000000 --- a/Deprecated-Code/OneMinCandles/Project.njsproj +++ /dev/null @@ -1,78 +0,0 @@ - - - - Debug - 2.0 - {045bbaef-3c35-4017-8458-e46aef438790} - - ShowAllFiles - - - C:\Users\Luis\source\repos\AABruce\One-Min-Daily-Candles-Volumes - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/OneMinCandles/README.md b/Deprecated-Code/OneMinCandles/README.md deleted file mode 100644 index eb4d83b88..000000000 --- a/Deprecated-Code/OneMinCandles/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Bruce - -Bruce is a low level Indicator bot that has as an input trades files and outputs 1 minute candles packaged on daily files. - -## Single Period Daily - -This process reads trades packed in 1 minutes files. For every day it creates a file with candles at 1 minute. - -### Start Mode - -This process runs every 1 minute under allMonths start mode, where a yearly range must be specified (initial processing year and final processing year) - -## Dataset 1: Candles in 1 Minute Resolutions - -### Current Dataset Scope -* **Exchanges**: Poloniex, Coss -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 secs) - -### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 minute -* **Cloud Output Location:** AAMasters > AABruce.1.0 > AACloud.1.1 > ExchangeName > dataSet.V1 -* **Folder Structure Tree**: Output > Candles > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day > Hour > Minute -* **Files Structure**: One .json file stored at the Minute level of the Folder Tree Structure -* **In-File Record Structure**: - * Minimum, decimal; - * Maximum, decimal; - * Open, decimal; - * Close, decimal; - * Begin, decimal; - * End, decimal; -* **In-File Record Example**: - * [[13760.00000003,13799.99999984,13799.99999984,13785.89250371,1514764800000,1514764859999],[13760,13785.89250371,13766.22307573,13785.89250322,1514764860000,1514764919999], ... ,[13760,13785.89250322,13760.00000114,13760.00000089,1514764920000,1514764979999]] - -## Dataset 2: Volumes in 1 Minute Resolutions - -### Current Dataset Scope -* **Exchanges**: Poloniex, Coss -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 secs) - -### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 minute -* **Cloud Output Location:** AAMasters > AACloud.1.1 > ExchangeName > dataSet.V1 -* **Folder Structure Tree**: Output > Volumes > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day > Hour > Minute -* **Files Structure**: One .json file stored at the Minute level of the Folder Tree Structure -* **In-File Record Structure**: - * Buy Volume, decimal; - * Sell Volume, decimal; - * Open Volume, decimal; - * Close Volume, decimal -* **In-File Record Example**: - * [[7412.27033867,7414.5873403,7414.57532252,7414.5873403],[7390.42410104,7414.5873403,7412.06261697,7390.42410104], ... ,[7390,7392.88810353,7392.88810353,7390]] - -### Compatible Plotters -[AAMasters Plotters-Candles-Volumes](https://github.com/AAMasters/Plotters-Candles-Volumes) - -### Dependencies -[AAMasters Charly](https://github.com/AAMasters/AACharly-Extraction-Bot) - -### Data as a Service (DaaS) Fees -No fees. - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/OneMinCandles/Single-Period-Daily/User.Bot.js b/Deprecated-Code/OneMinCandles/Single-Period-Daily/User.Bot.js deleted file mode 100644 index e280cd6ea..000000000 --- a/Deprecated-Code/OneMinCandles/Single-Period-Daily/User.Bot.js +++ /dev/null @@ -1,814 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const CANDLES_ONE_MIN = "One-Min"; - - const VOLUMES_FOLDER_NAME = "Volumes"; - const VOLUMES_ONE_MIN = "One-Min"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - let statusDependencies; - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - statusDependencies = pStatusDependencies; - - logger.fileName = MODULE_NAME - logger.initialize(); - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } - - /* - This process is going to do the following: - Read the trades from Charly's Output and pack them into daily files with candles of one minute. - */ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let processDate = new Date((new Date()).getUTCFullYear() + "-" + ((new Date()).getUTCMonth() + 1) + "-1 00:00:00.000 GMT+0000"); - - let thisDatetime = new Date(); - - let market = bot.market; - - let lastTradeFileProcessed; // Datetime of the last file certified by the Hole Fixing process as without permanent holes. - let firstTradeFile; // Datetime of the first trade file in the whole market history. - let lastTradeFileSaved; // Datetime of the last verified file without holes. - let lastCandleClose; // Value of the last candle close. - let lastTradeFile; // Datetime pointing to the last Trade File sucessfuly processed and included in the last file. - let beginingOfMarket - - getContextVariables(); - - function getContextVariables() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Entering function."); } - - let thisReport; - let reportKey; - - /* First Status Report */ - reportKey = "AAMasters" + "-" + "AACharly" + "-" + "Historic-Trades" + "-" + "dataSet.V1"; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet."); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - firstTradeFile = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - lastTradeFileSaved = new Date(thisReport.lastFileSaved.year + "-" + thisReport.lastFileSaved.month + "-" + thisReport.lastFileSaved.days + " " + thisReport.lastFileSaved.hours + ":" + thisReport.lastFileSaved.minutes + GMT_SECONDS); - - /* Final Status Report */ - - reportKey = "AAMasters" + "-" + "AABruce" + "-" + "Single-Period-Daily" + "-" + "dataSet.V1" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile === undefined) { // Means this is the first time ever this process runs. - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running for the very first time. -> reportKey = " + reportKey); - - lastCandleClose = 0; - lastTradeFileProcessed = new Date(firstTradeFile.valueOf() - ONE_DAY_IN_MILISECONDS) - beginingOfMarket = new Date(firstTradeFile.valueOf()) - - buildCandlesAndVolumes(); - - } else { - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Process Running not for the very first time. -> reportKey = " + reportKey); - - lastTradeFileProcessed = new Date(thisReport.lastTradeFile.year + "-" + thisReport.lastTradeFile.month + "-" + thisReport.lastTradeFile.days + " " + "00:00" + GMT_SECONDS); - lastCandleClose = thisReport.candleClose; - beginingOfMarket = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - - if (beginingOfMarket.valueOf() !== firstTradeFile.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(firstTradeFile.valueOf()) - lastTradeFileProcessed = new Date(firstTradeFile.valueOf() - ONE_DAY_IN_MILISECONDS) - lastCandleClose = 0 - buildCandlesAndVolumes() - return - } - - if (thisReport.fileComplete === true) { - buildCandlesAndVolumes(); - } else { - lastTradeFile = new Date(thisReport.lastTradeFile.year + "-" + thisReport.lastTradeFile.month + "-" + thisReport.lastTradeFile.days + " " + thisReport.lastTradeFile.hours + ":" + thisReport.lastTradeFile.minutes + GMT_SECONDS); - findPreviousContent(); - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function findPreviousContent() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> Entering function."); } - - let previousCandles; - let previousVolumes; - - getCandles(); - - function getCandles() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getCandles -> Entering function."); } - - let fileName = 'Data.json'; - let dateForPath = lastTradeFileProcessed.getUTCFullYear() + '/' + utilities.pad(lastTradeFileProcessed.getUTCMonth() + 1, 2) + '/' + utilities.pad(lastTradeFileProcessed.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getCandles -> reading file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - let candlesFile; - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getCandles -> onFileReceived -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getCandles -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getCandles -> onFileReceived -> text = " + text); - } - - candlesFile = JSON.parse(text); - previousCandles = candlesFile; - getVolumes(); - - } catch (err) { - - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getCandles -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getCandles -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[HINT] start -> findPreviousContent -> getCandles -> onFileReceived -> Empty or corrupt volume file found."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function getVolumes() { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getVolumes -> Entering function."); } - - let fileName = 'Data.json'; - let dateForPath = lastTradeFileProcessed.getUTCFullYear() + '/' + utilities.pad(lastTradeFileProcessed.getUTCMonth() + 1, 2) + '/' + utilities.pad(lastTradeFileProcessed.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getVolumes -> reading file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - let volumesFile; - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getVolumes -> onFileReceived -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> onFileReceived -> text = " + text); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> getVolumes -> onFileReceived -> text = " + text); - } - - volumesFile = JSON.parse(text); - previousVolumes = volumesFile; - lastTradeFileProcessed = new Date(lastTradeFileProcessed.valueOf() - ONE_DAY_IN_MILISECONDS); // We know that after the next call a new day will be added. - buildCandlesAndVolumes(previousCandles, previousVolumes); - - } catch (err) { - - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> onFileReceived -> text = " + text); - logger.write(MODULE_NAME, "[HINT] start -> findPreviousContent -> getVolumes -> onFileReceived -> Empty or corrupt volume file found."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> getVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> findPreviousContent -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandlesAndVolumes(previousCandles, previousVolumes) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> Entering function."); } - - /* - Here we are going to scan the trades files packing them in candles files every one day. - We need for this the last close value, bacause all candles that are empty of trades at the begining, they need to - have a valid open and close value. This was previously calculated before arriving to this function. - */ - - let canAddPrevious = true; - - try { - nextFile(); - - function nextFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> Entering function."); } - - lastTradeFileProcessed = new Date(lastTradeFileProcessed.valueOf() + ONE_DAY_IN_MILISECONDS); - - let date = new Date(lastTradeFileProcessed.valueOf() - 60 * 1000); - - if (date.valueOf() < firstTradeFile.valueOf()) { // At the special case where we are at the begining of the market, this might be true. - date = new Date(firstTradeFile.valueOf() - 60 * 1000); - } - - if (lastTradeFile !== undefined) { - date = new Date(lastTradeFile.valueOf()); - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> date = " + date); } - - let candles = []; - let volumes = []; - - if (previousCandles !== undefined && canAddPrevious === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> Adding Previous Candles. "); } - - for (let i = 0; i < previousCandles.length; i++) { - - let candle = { - open: previousCandles[i][2], - close: previousCandles[i][3], - min: previousCandles[i][0], - max: previousCandles[i][1], - begin: previousCandles[i][4], - end: previousCandles[i][5] - }; - - candles.push(candle); - } - } - - if (previousVolumes !== undefined && canAddPrevious === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> Adding Previous Volumes. "); } - - for (let i = 0; i < previousVolumes.length; i++) { - - let volume = { - begin: previousVolumes[i][2], - end: previousVolumes[i][3], - buy: previousVolumes[i][0], - sell: previousVolumes[i][1] - }; - - volumes.push(volume); - } - } - - canAddPrevious = false; // We add them only onece. - - nextDate(); - - function nextDate() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> Entering function."); } - - date = new Date(date.valueOf() + 60 * 1000); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> date = " + date); } - - /* Check if we are outside the current Day / File */ - - if (date.getUTCDate() !== lastTradeFileProcessed.getUTCDate()) { - - writeFiles(lastTradeFileProcessed, candles, volumes, true, onFilesWritten); - - return; - - function onFilesWritten() { - - nextFile(); - } - } - - /* Check if we have past the most recent hole fixed file */ - - if (date.valueOf() > lastTradeFileSaved.valueOf()) { - - writeFiles(lastTradeFileProcessed, candles, volumes, false, onFilesWritten); - return; - - function onFilesWritten() { - - if (FULL_LOG === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> Head of the market reached for market " + market.baseAsset + '_' + market.quotedAsset + "."); - } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - } - - readTrades(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function readTrades() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> readTrades -> Entering function."); } - - lastTradeFile = new Date(date.valueOf()); - - let dateForPath = date.getUTCFullYear() + '/' + utilities.pad(date.getUTCMonth() + 1, 2) + '/' + utilities.pad(date.getUTCDate(), 2) + '/' + utilities.pad(date.getUTCHours(), 2) + '/' + utilities.pad(date.getUTCMinutes(), 2); - let fileName = "Data.json" - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "AACharly"; - - let filePath = filePathRoot + "/Output/" + TRADES_FOLDER_NAME + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> nextDate -> readTrades -> reading file at dateForPath = " + dateForPath); - - function onFileReceived(err, text) { - - let tradesFile; - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> text = " + text); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> text = " + text); - } - - let candle = { - open: lastCandleClose, - close: lastCandleClose, - min: lastCandleClose, - max: lastCandleClose, - begin: date.valueOf(), - end: date.valueOf() + 60 * 1000 - 1 - }; - - let volume = { - begin: date.valueOf(), - end: date.valueOf() + 60 * 1000 - 1, - buy: 0, - sell: 0 - }; - - tradesFile = JSON.parse(text); - - let tradesCount = utilities.pad(tradesFile.length, 5); - - logger.write(MODULE_NAME, "[INFO] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> " + tradesCount + " trades found at " + filePath + " for market " + market.baseAsset + '_' + market.quotedAsset + ". "); - - if (tradesFile.length > 0) { - - /* Candle open and close Calculations */ - - candle.open = tradesFile[0][2]; - candle.close = tradesFile[tradesFile.length - 1][2]; - lastCandleClose = candle.close; - } - - for (let i = 0; i < tradesFile.length; i++) { - - let record = { - side: tradesFile[i][1], - price: tradesFile[i][2], - amount: tradesFile[i][3] - }; - - let trade = { - type: record.side, - rate: record.price, - amountA: record.amount, - amountB: record.amount * record.price - }; - - /* Candle min and max Calculations */ - - if (trade.rate < candle.min) { - candle.min = trade.rate; - } - - if (trade.rate > candle.max) { - candle.max = trade.rate; - } - - /* Volume Calculations */ - - if (trade.type === "sell") { - volume.sell = volume.sell + trade.amountA; - } else { - volume.buy = volume.buy + trade.amountA; - } - } - - candles.push(candle); - volumes.push(volume); - nextDate(); - - } catch (err) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> text = " + text); - logger.write(MODULE_NAME, "[HINT] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> onFileReceived -> Empty or corrupt volume file found."); - - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> readTrades -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> nextFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandlesAndVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFiles(date, candles, volumes, isFileComplete, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> Entering function."); } - - /* - Here we will write the contents of the Candles and Volumens files. If the File is declared as complete, we will also write the status report. - */ - - try { - - writeCandles(); - - function writeCandles() { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < candles.length; i++) { - - fileContent = fileContent + separator + '[' + candles[i].min + "," + candles[i].max + "," + candles[i].open + "," + candles[i].close + "," + candles[i].begin + "," + candles[i].end + "]"; - if (separator === "") { separator = ","; } - fileRecordCounter++; - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let dateForPath = date.getUTCFullYear() + '/' + utilities.pad(date.getUTCMonth() + 1, 2) + '/' + utilities.pad(date.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> writing file at dateForPath = " + dateForPath); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeCandles -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> fileContent = " + fileContent); - } - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""); - - writeVolumes(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeCandles -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeVolumes() { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < volumes.length; i++) { - - /* Validation trying to find a BUG that changes the dates of rubish data. */ - - if (volumes[i].begin < 1262304000000 | volumes[i].end < 1262304000000) { // If it is storing a number that represents a date before the year 2010... - - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> Invalid Date trying to be recorded on output file. "); - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> volumes[i].begin = " + volumes[i].begin); - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> volumes[i].end = " + volumes[i].end); - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> i = " + i); - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> volumes = " + JSON.stringify(volumes)); - - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - fileContent = fileContent + separator + '[' + volumes[i].buy + "," + volumes[i].sell + "," + volumes[i].begin + "," + volumes[i].end + "]"; - if (separator === "") { separator = ","; } - fileRecordCounter++; - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let dateForPath = date.getUTCFullYear() + '/' + utilities.pad(date.getUTCMonth() + 1, 2) + '/' + utilities.pad(date.getUTCDate(), 2); - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> writing file at dateForPath = " + dateForPath); - - function onFileCreated(err) { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> fileContent = " + fileContent); - } - - logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""); - - writeReport(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeReport() { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeReport -> Entering function."); } - - writeStatusReport(date, lastTradeFile, lastCandleClose, isFileComplete, false, onStatusReportWritten); - - function onStatusReportWritten(err) { - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeReport -> onStatusReportWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> onStatusReportWritten -> err = " + err.stack); - callBackFunction(err); - return; - } - - callBack(); - return; - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeReport -> onStatusReportWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> writeReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(lastFileDate, lastTradeFile, candleClose, isFileComplete, isMonthComplete, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastFileDate = " + lastFileDate); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastTradeFile = " + lastTradeFile); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> candleClose = " + candleClose); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> isFileComplete = " + isFileComplete); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> isMonthComplete = " + isMonthComplete); } - - try { - - if (lastTradeFile === undefined) { - - /* At the begining of a new month, it can happen for reasons not 100% clear that this variable gets undifined. - Probably it is because the instance that was waiting to execute in coma state, wakes up before than Charly - writting the trades of this new month. Anyway, when this happens, a different path in code is taken and this - variable gets undefined. A workaround for that without further investigation of the real cause of the problem - is to RETRY the execution until the normal conditions arise and everything continues working well. That is what - we are going to do for now. */ - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] start -> writeStatusReport -> Cannot write the status report."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] start -> writeStatusReport -> lastTradeFile = undefined."); } - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - - return; - } - - let key = bot.dataMine + "-" + bot.codeName + "-" + bot.process + "-" + bot.dataSetVersion - let statusReport = statusDependencies.statusReports.get(key); - - statusReport.file = { - lastFile: { - year: lastFileDate.getUTCFullYear(), - month: (lastFileDate.getUTCMonth() + 1), - days: lastFileDate.getUTCDate() - }, - lastTradeFile: { - year: lastTradeFile.getUTCFullYear(), - month: (lastTradeFile.getUTCMonth() + 1), - days: lastTradeFile.getUTCDate(), - hours: lastTradeFile.getUTCHours(), - minutes: lastTradeFile.getUTCMinutes() - }, - beginingOfMarket: { - year: beginingOfMarket.getUTCFullYear(), - month: (beginingOfMarket.getUTCMonth() + 1), - days: beginingOfMarket.getUTCDate(), - hours: beginingOfMarket.getUTCHours(), - minutes: beginingOfMarket.getUTCMinutes() - }, - candleClose: candleClose, - fileComplete: isFileComplete - }; - - let fileContent = JSON.stringify(statusReport); - - statusReport.save(onSaved); - - function onSaved(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> onSaved -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> onSaved -> err = " + err.stack); - callBackFunction(err); - return; - } - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/OneMinCandles/package.json b/Deprecated-Code/OneMinCandles/package.json deleted file mode 100644 index 8aee0df58..000000000 --- a/Deprecated-Code/OneMinCandles/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AABruce", - "version": "1.0.0", - "description": "Processes that get the order books from Poloniex.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": { - } -} diff --git a/Deprecated-Code/OneMinCandles/this.bot.config.json b/Deprecated-Code/OneMinCandles/this.bot.config.json deleted file mode 100644 index 5e95eab66..000000000 --- a/Deprecated-Code/OneMinCandles/this.bot.config.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "displayName": "Bruce", - "codeName": "AABruce", - "type": "Indicator Bot", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "dataMine": "AAMasters", - "profilePicture": "Bruce.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Single-Period-Daily", - "description": "Produces two data-sets with candles and volumes.", - "startMode": { - "allMonths": { - "run": "true", - "minYear": "2019", - "maxYear": "2019" - }, - "oneMonth": { - "run": "false", - "year": "2018", - "month": "6" - }, - "noTime": { - "run": "false" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "statusDependencies": [ - { - "dataMine": "AAMasters", - "bot": "AACharly", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Historic-Trades", - "dataSetVersion": "dataSet.V1" - }, - { - "dataMine": "AAMasters", - "bot": "AACharly", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Hole-Fixing", - "dataSetVersion": "dataSet.V1", - "dataSetSection": "Month", - "waitUntilNextUpdate": true - }, - { - "dataMine": "AAMasters", - "bot": "AABruce", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Single-Period-Daily", - "dataSetVersion": "dataSet.V1", - "dataSetSection": "Month" - } - ] - } - ], - "products": [ - { - "codeName": "Candles", - "displayName": "Candles", - "description": "01 Min Candles.", - "storageAccount": "aamasters", - "dataSets": [ - { - "codeName": "One-Min", - "type": "Daily Files", - "validPeriods": [ "01-min" ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/One-Min", - "fileName": "Data.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "AAMasters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Candles" - } - }, - { - "codeName": "Volumes", - "displayName": "Buy and Sell Volumes", - "description": "01 Min Volumes.", - "storageAccount": "aamasters", - "dataSets": [ - { - "codeName": "One-Min", - "type": "Daily Files", - "validPeriods": [ "01-min" ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/One-Min", - "fileName": "Data.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "AAMasters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Volumes" - } - } - ], - "storage": { - "sas": "?sv=2017-07-29&ss=b&srt=sco&sp=rl&se=2018-12-31T22:59:59Z&st=2018-04-01T12:59:54Z&spr=https&sig=Fre%2FUWrF9IAXNnJSOZ%2F5q5LUow9uno7dXg5pGZ3YDzo%3D", - "fileUri": "https://aamasters.blob.core.windows.net" - } -} - - - diff --git a/Deprecated-Code/OperationsModule/.gitignore b/Deprecated-Code/OperationsModule/.gitignore deleted file mode 100644 index 208fa65b1..000000000 --- a/Deprecated-Code/OperationsModule/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. -.scannerwork - -\.env - -\.nyc_output/ - -coverage/ - -node_modules/** - -test/activeCloneList\.js diff --git a/Deprecated-Code/OperationsModule/CODE_OF_CONDUCT.md b/Deprecated-Code/OperationsModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/OperationsModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/OperationsModule/CONTRIBUTING.md b/Deprecated-Code/OperationsModule/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/OperationsModule/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/OperationsModule/LICENSE b/Deprecated-Code/OperationsModule/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/OperationsModule/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/OperationsModule/README.md b/Deprecated-Code/OperationsModule/README.md deleted file mode 100644 index e61542682..000000000 --- a/Deprecated-Code/OperationsModule/README.md +++ /dev/null @@ -1,4 +0,0 @@ - -## AA Operations Module - -This module allow users to control the bot instance on the virtual machine. diff --git a/Deprecated-Code/OperationsModule/client/.gitignore b/Deprecated-Code/OperationsModule/client/.gitignore deleted file mode 100644 index d30f40ef4..000000000 --- a/Deprecated-Code/OperationsModule/client/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/Deprecated-Code/OperationsModule/client/CODE_OF_CONDUCT.md b/Deprecated-Code/OperationsModule/client/CODE_OF_CONDUCT.md deleted file mode 100644 index 05b430885..000000000 --- a/Deprecated-Code/OperationsModule/client/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/OperationsModule/client/CONTRIBUTING.md b/Deprecated-Code/OperationsModule/client/CONTRIBUTING.md deleted file mode 100644 index c67e8d115..000000000 --- a/Deprecated-Code/OperationsModule/client/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/OperationsModule/client/LICENSE b/Deprecated-Code/OperationsModule/client/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/OperationsModule/client/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/OperationsModule/client/README.md b/Deprecated-Code/OperationsModule/client/README.md deleted file mode 100644 index 8bbd3204b..000000000 --- a/Deprecated-Code/OperationsModule/client/README.md +++ /dev/null @@ -1,4 +0,0 @@ - -## AA Operations Web Client - -This client allows the users to interact via web browser. diff --git a/Deprecated-Code/OperationsModule/client/package-lock.json b/Deprecated-Code/OperationsModule/client/package-lock.json deleted file mode 100644 index b3bdfc11c..000000000 --- a/Deprecated-Code/OperationsModule/client/package-lock.json +++ /dev/null @@ -1,881 +0,0 @@ -{ - "name": "@superalgos/operations-client", - "version": "0.0.41", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", - "requires": { - "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } - } - }, - "@material-ui/core": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.9.3.tgz", - "integrity": "sha512-REIj62+zEvTgI/C//YL4fZxrCVIySygmpZglsu/Nl5jPqy3CDjZv1F9ubBYorHqmRgeVPh64EghMMWqk4egmfg==", - "requires": { - "@babel/runtime": "^7.2.0", - "@material-ui/system": "^3.0.0-alpha.0", - "@material-ui/utils": "^3.0.0-alpha.2", - "@types/jss": "^9.5.6", - "@types/react-transition-group": "^2.0.8", - "brcast": "^3.0.1", - "classnames": "^2.2.5", - "csstype": "^2.5.2", - "debounce": "^1.1.0", - "deepmerge": "^3.0.0", - "dom-helpers": "^3.2.1", - "hoist-non-react-statics": "^3.2.1", - "is-plain-object": "^2.0.4", - "jss": "^9.8.7", - "jss-camel-case": "^6.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-nested": "^6.0.1", - "jss-props-sort": "^6.0.0", - "jss-vendor-prefixer": "^7.0.0", - "normalize-scroll-left": "^0.1.2", - "popper.js": "^1.14.1", - "prop-types": "^15.6.0", - "react-event-listener": "^0.6.2", - "react-transition-group": "^2.2.1", - "recompose": "0.28.0 - 0.30.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - } - } - }, - "@material-ui/icons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz", - "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==", - "requires": { - "@babel/runtime": "7.0.0", - "recompose": "^0.29.0" - }, - "dependencies": { - "recompose": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz", - "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - } - } - } - }, - "@material-ui/system": { - "version": "3.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz", - "integrity": "sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==", - "requires": { - "@babel/runtime": "^7.2.0", - "deepmerge": "^3.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "@material-ui/utils": { - "version": "3.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz", - "integrity": "sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "react-is": "^16.6.3" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "@types/jss": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.8.tgz", - "integrity": "sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==", - "requires": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" - } - }, - "@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" - }, - "@types/react": { - "version": "16.8.22", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.22.tgz", - "integrity": "sha512-C3O1yVqk4sUXqWyx0wlys76eQfhrQhiDhDlHBrjER76lR2S2Agiid/KpOU9oCqj1dISStscz7xXz1Cg8+sCQeA==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-transition-group": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.9.2.tgz", - "integrity": "sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==", - "requires": { - "@types/react": "*" - } - }, - "@types/zen-observable": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", - "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" - }, - "@wry/equality": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.9.tgz", - "integrity": "sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ==", - "requires": { - "tslib": "^1.9.3" - } - }, - "apollo-cache": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.2.tgz", - "integrity": "sha512-+KA685AV5ETEJfjZuviRTEImGA11uNBp/MJGnaCvkgr+BYRrGLruVKBv6WvyFod27WEB2sp7SsG8cNBKANhGLg==", - "requires": { - "apollo-utilities": "^1.3.2", - "tslib": "^1.9.3" - } - }, - "apollo-client": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.3.tgz", - "integrity": "sha512-DS8pmF5CGiiJ658dG+mDn8pmCMMQIljKJSTeMNHnFuDLV0uAPZoeaAwVFiAmB408Ujqt92oIZ/8yJJAwSIhd4A==", - "requires": { - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.3.2", - "apollo-link": "^1.0.0", - "apollo-utilities": "1.3.2", - "symbol-observable": "^1.0.2", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - }, - "apollo-link": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.12.tgz", - "integrity": "sha512-fsgIAXPKThyMVEMWQsUN22AoQI+J/pVXcjRGAShtk97h7D8O+SPskFinCGEkxPeQpE83uKaqafB2IyWdjN+J3Q==", - "requires": { - "apollo-utilities": "^1.3.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.19" - } - }, - "apollo-utilities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", - "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", - "requires": { - "@wry/equality": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "brcast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz", - "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==" - }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", - "requires": { - "is-in-browser": "^1.0.2" - } - }, - "csstype": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", - "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" - }, - "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, - "graphql": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.3.1.tgz", - "integrity": "sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", - "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "hyphenate-style-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", - "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "indefinite-observable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.2.tgz", - "integrity": "sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==", - "requires": { - "symbol-observable": "1.2.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", - "requires": { - "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", - "requires": { - "hyphenate-style-name": "^1.0.2" - } - }, - "jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==" - }, - "jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==" - }, - "jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", - "requires": { - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-props-sort": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", - "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==" - }, - "jss-vendor-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", - "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", - "requires": { - "css-vendor": "^0.3.8" - } - }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "luxon": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.16.0.tgz", - "integrity": "sha512-qaqB+JwpGwtl7UbIXng3A/l4W/ySBr8drQvwtMLZBMiLD2V+0fEnPWMrs+UjnIy9PsktazQaKvwDUCLzoWz0Hw==" - }, - "material-ui-pickers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/material-ui-pickers/-/material-ui-pickers-1.0.1.tgz", - "integrity": "sha512-FRJwgeFUQdQxzNAybZvf11204KFBxqKS6sg4JvAO0cWmHULXJhrc9kuEDT8F7Pomwnv6+AyfxygsoMgIRcBMNg==", - "requires": { - "classnames": "^2.2.6", - "keycode": "^2.2.0", - "react-event-listener": "^0.6.4", - "react-text-mask": "=5.4.1", - "react-transition-group": "^2.5.0", - "tslib": "^1.9.3" - } - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "normalize-scroll-left": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", - "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "react-apollo": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.5.8.tgz", - "integrity": "sha512-60yOQrnNosxU/tRbOxGDaYNLFcOKmQqxHPhxyvKTlGIaF/rRCXQRKixUgWVffpEupSHHD7psY5k5ZOuZsdsSGQ==", - "requires": { - "apollo-utilities": "^1.3.0", - "fast-json-stable-stringify": "^2.0.0", - "hoist-non-react-statics": "^3.3.0", - "lodash.isequal": "^4.5.0", - "prop-types": "^15.7.2", - "ts-invariant": "^0.4.2", - "tslib": "^1.9.3" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - } - } - }, - "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "react-event-listener": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", - "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "react-hot-loader": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.3.11.tgz", - "integrity": "sha512-T0G5jURyTsFLoiW6MTr5Q35UHC/B2pmYJ7+VBjk8yMDCEABRmCGy4g6QwxoB4pWg4/xYvVTa/Pbqnsgx/+NLuA==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - } - }, - "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - } - }, - "react-text-mask": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/react-text-mask/-/react-text-mask-5.4.1.tgz", - "integrity": "sha512-mGx1n0x0skktwsKcpgAGnrgExFlXDflbWEHh8PC1UaQP8+EdHkW7JYczTghsBo2rnVwU9/4A9x/2bVt3HY46/w==", - "requires": { - "prop-types": "^15.5.6" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "recompose": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", - "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "ts-invariant": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", - "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" - }, - "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" - }, - "warning": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", - "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "zen-observable": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", - "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" - }, - "zen-observable-ts": { - "version": "0.8.19", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.19.tgz", - "integrity": "sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/OperationsModule/client/package.json b/Deprecated-Code/OperationsModule/client/package.json deleted file mode 100644 index 512ac872c..000000000 --- a/Deprecated-Code/OperationsModule/client/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "@superalgos/operations-client", - "version": "0.0.41", - "description": "Superalgos Operations client-side web app", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "main": "src/index.js", - "dependencies": { - "@material-ui/core": "^3.2.2", - "@material-ui/icons": "^3.0.1", - "apollo-client": "^2.4.2", - "classnames": "^2.2.6", - "graphql": "^14.0.2", - "graphql-tag": "^2.10.0", - "luxon": "^1.4.4", - "material-ui-pickers": "^1.0.1", - "react": "^16.6.1", - "react-apollo": "^2.2.4", - "react-dom": "^16.6.1", - "react-router-dom": "^4.3.1" - }, - "devDependencies": { - "react-hot-loader": "^4.3.11" - } -} diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/clones.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/clones.js deleted file mode 100644 index b215a578d..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/clones.js +++ /dev/null @@ -1,42 +0,0 @@ -import gql from 'graphql-tag' -import { clone } from '../Fragments' - -const OPERATIONS_ADD_CLONE = gql` - mutation Operations_AddClone($clone: operations_CloneInput!) { - operations_AddClone(clone: $clone) { - ...clone - } - } - ${clone} -` - -const OPERATIONS_LIST_CLONES = gql` - query Operations_Clones{ - operations_Clones(queryLogs: true) { - ...clone - } - } - ${clone} -` - -const OPERATIONS_HISTORY_CLONES = gql` - query Operations_HistoryClones{ - operations_HistoryClones(botType: "Trading") { - ...clone - } - } - ${clone} -` - -const OPERATIONS_REMOVE_CLONE = gql` - mutation Operations_RemoveClone($id: ID!){ - operations_RemoveClone( id: $id) - } -` - -export default { - OPERATIONS_LIST_CLONES, - OPERATIONS_HISTORY_CLONES, - OPERATIONS_ADD_CLONE, - OPERATIONS_REMOVE_CLONE -} diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/index.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/index.js deleted file mode 100644 index 619c6f158..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import clones from './clones' -import teams from './teams' -import keys from './keys' - -export { - clones, - teams, - keys -} diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/keys.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/keys.js deleted file mode 100644 index 23d3ffed3..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/keys.js +++ /dev/null @@ -1,16 +0,0 @@ -import gql from 'graphql-tag' - -export const GET_ALL_KEYS = gql` - query { - keyVault_AvailableKeys { - id - key - description - exchange - } - } -` - -export default { - GET_ALL_KEYS -} diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/teams.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/teams.js deleted file mode 100644 index 2785ede48..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/Calls/teams.js +++ /dev/null @@ -1,21 +0,0 @@ -import gql from 'graphql-tag' - -export const GET_ALL_TEAMS_QUERY = gql` - query { - teams_TeamsByOwner { - id - name - slug - fb { - id - name - slug - kind - } - } - } -` - -export default { - GET_ALL_TEAMS_QUERY -} diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/Fragments/index.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/Fragments/index.js deleted file mode 100644 index 69e8de038..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/Fragments/index.js +++ /dev/null @@ -1,38 +0,0 @@ -import gql from 'graphql-tag' - -export const clone = gql` - fragment clone on operations_Clone { - id - authId - teamId - botId - mode - resumeExecution - beginDatetime - endDatetime - waitTime - state - stateDatetime - createDatetime - lastLogs - summaryDate - buyAverage - sellAverage - marketRate - combinedProfitsA - combinedProfitsB - assetA - assetB - botType - teamName - botName - botAvatar - teamAvatar - processName - keyId - botSlug - exchangeName - timePeriod - balanceAssetB - } -` diff --git a/Deprecated-Code/OperationsModule/client/src/GraphQL/models.js b/Deprecated-Code/OperationsModule/client/src/GraphQL/models.js deleted file mode 100644 index a45c7db0a..000000000 --- a/Deprecated-Code/OperationsModule/client/src/GraphQL/models.js +++ /dev/null @@ -1,53 +0,0 @@ -const availableTimePeriods = ["24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min"] - -const tradingStartModes = { - live: 'Live', - backtest: 'Backtest' -} - -const tradingStartModesList = { - live: 'Live', - backtest: 'Backtest', - competition: 'Competition' -} - -const indicatorStartModes = { - allMonths: 'All Months', - oneMonth: 'One Month', - noTime: 'Head of the Market' -} - -const sensorProcessNames = { - Live: "Live-Trades", - HoleFixing: "Hole-Fixing" -} - -const indicatorProcessNames = { - Daily: 'Multi-Period-Daily', - Market: 'Multi-Period-Market' -} - - -const botTypes = { - Trading: "Trading", - Indicator: "Indicator", - Sensor: "Sensor" -} - -const exchanges = { - // COSS: "COSS", - Poloniex: "Poloniex" -} - -const markets = { - USDT_BTC: "USDT_BTC" -} - -const baseAssets = { - assetA: "USDT", - assetB: "BTC" -} - -export { - tradingStartModes, tradingStartModesList, exchanges, indicatorStartModes, availableTimePeriods, sensorProcessNames, indicatorProcessNames, botTypes, markets, baseAssets -} diff --git a/Deprecated-Code/OperationsModule/client/src/img/binance.png b/Deprecated-Code/OperationsModule/client/src/img/binance.png deleted file mode 100644 index 18ce7c638..000000000 Binary files a/Deprecated-Code/OperationsModule/client/src/img/binance.png and /dev/null differ diff --git a/Deprecated-Code/OperationsModule/client/src/img/poloniex.png b/Deprecated-Code/OperationsModule/client/src/img/poloniex.png deleted file mode 100644 index dfe143781..000000000 Binary files a/Deprecated-Code/OperationsModule/client/src/img/poloniex.png and /dev/null differ diff --git a/Deprecated-Code/OperationsModule/client/src/index.js b/Deprecated-Code/OperationsModule/client/src/index.js deleted file mode 100644 index dbc3944b5..000000000 --- a/Deprecated-Code/OperationsModule/client/src/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import { Route, Switch } from 'react-router-dom' -import { MuiPickersUtilsProvider } from 'material-ui-pickers' -import LuxonUtils from 'material-ui-pickers/utils/luxon-utils' -import BrowseClones from './views/Clone/List' -import HistoryClones from './views/Clone/History' -import AddClone from './views/Clone/Add' -import Home from './views/Home' - -const App = () => ( - - - - - - - - -) - -export default App diff --git a/Deprecated-Code/OperationsModule/client/src/theme.js b/Deprecated-Code/OperationsModule/client/src/theme.js deleted file mode 100644 index a0abae869..000000000 --- a/Deprecated-Code/OperationsModule/client/src/theme.js +++ /dev/null @@ -1,71 +0,0 @@ -import { createMuiTheme } from '@material-ui/core/styles' - -export const theme = createMuiTheme({ - palette: { - primary: { main: '#303036' }, // DARK. - secondary: { main: '#CC5835' } // RUSTED_RED. - }, - typography: { - fontFamily: '"Saira","Saira Condenses", sans-serif', - useNextVariants: true - }, - overrides: { - Paper: { - root: { - backgroundColor: '#ffffff' - }, - elevation: 0, - square: true - } - } -}) - -export const globalStyles = theme => ({ - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - appBar: { - position: 'relative' - }, - toolbarTitle: { - flex: 1 - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - [theme.breakpoints.up(900 + theme.spacing.unit * 3 * 2)]: { - width: 900, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardHeader: { - backgroundColor: theme.palette.grey[200] - }, - cardPricing: { - display: 'flex', - justifyContent: 'center', - alignItems: 'baseline', - marginBottom: theme.spacing.unit * 2 - }, - cardActions: { - [theme.breakpoints.up('sm')]: { - paddingBottom: theme.spacing.unit * 2 - } - }, - footer: { - marginTop: theme.spacing.unit * 8, - borderTop: `1px solid ${theme.palette.divider}`, - padding: `${theme.spacing.unit * 6}px 0` - } -}) - -export default theme diff --git a/Deprecated-Code/OperationsModule/client/src/utils/index.js b/Deprecated-Code/OperationsModule/client/src/utils/index.js deleted file mode 100644 index 72c6b92e5..000000000 --- a/Deprecated-Code/OperationsModule/client/src/utils/index.js +++ /dev/null @@ -1,75 +0,0 @@ -export function toLocalTime (epoch) { - const localDate = new Date(0) - localDate.setUTCSeconds(epoch) - const options = { year: 'numeric', month: 'long', day: '2-digit' } - return ( - `${localDate.toLocaleDateString(options) - } at ${ - localDate.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit' })}` - ) -} - -export function toUTCTimestamp (localDate) { - if (isDefined(localDate)) { - const date = new Date(localDate.valueOf()) - const utcDate = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), - date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), - date.getUTCSeconds()) - - return utcDate.valueOf() / 1000 | 0 - } -} - -export function isDefined (d) { - return d !== null && typeof d !== 'undefined' -} - -export const isArray = Array.isArray - -export function isObject (d) { - return isDefined(d) && typeof d === 'object' && !Array.isArray(d) -} - -export function isEmpty (obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) return false - } - return true -} - -export function validObject (object, ...keys) { - return keys.reduce((a, b) => (a || { })[b], object) !== undefined -} - -export function mergeDeep (target, ...sources) { - if (!sources.length) return target - const source = sources.shift() - - if (isObject(target) && isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!target[key]) Object.assign(target, { [key]: {} }) - mergeDeep(target[key], source[key]) - } else { - Object.assign(target, { [key]: source[key] }) - } - } - } - return mergeDeep(target, ...sources) -} - -export function slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string.toString().toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text -} - diff --git a/Deprecated-Code/OperationsModule/client/src/views/BannerTopBar/index.js b/Deprecated-Code/OperationsModule/client/src/views/BannerTopBar/index.js deleted file mode 100644 index 263ea7bee..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/BannerTopBar/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' -import Typography from '@material-ui/core/Typography' - -const TopBar = ({ - size, - backgroundUrl, - title, - text -}) => ( -
    -
    - {title} - {text} -
    -
    -) - -export default TopBar diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/index.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/index.js deleted file mode 100644 index 8ab5803de..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/index.js +++ /dev/null @@ -1,685 +0,0 @@ -import React, { Component } from 'react' -import { graphql, compose, Query } from 'react-apollo' -import { clones, teams, keys } from '../../../GraphQL/Calls' -import { DateTime } from 'luxon'; -import TopBar from '../../BannerTopBar' -import { withStyles } from '@material-ui/core/styles' -import classNames from 'classnames' -import styles from './styles' -import { isDefined } from '../../../utils' -import { - tradingStartModes, availableTimePeriods, - sensorProcessNames, indicatorProcessNames, botTypes, exchanges, markets, baseAssets -} from '../../../GraphQL/models' - -import { - MenuItem, Button, TextField, FormControl, InputLabel, Input, Typography, - Paper, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, - Select, FormControlLabel, Checkbox, FormHelperText -} from '@material-ui/core' -import { DateTimePicker } from 'material-ui-pickers' -import { ChevronLeft, ChevronRight } from '@material-ui/icons' - -class AddClone extends Component { - - constructor(props) { - super(props) - let user = localStorage.getItem('user') - this.state = { - user: JSON.parse(user), - selectedBot: { 'id': '' }, - mode: tradingStartModes.backtest, - resumeExecution: false, - beginDatetime: DateTime.utc().minus({ days: 8 }).startOf('day'), - endDatetime: DateTime.utc(), - waitTime: 1, - state: '', - stateDatetime: 0, - createDatetime: 0, - teams: [], - teamId: '', - keyId: '', - exchangeName: exchanges.Poloniex, - processName: indicatorProcessNames.Daily, - accessCodeOption: false, - accessCode: '', - baseAssetBalance: 0, - market: markets.USDT_BTC, - baseAsset: baseAssets.assetA, - - // Indicator Bot - startYear: 2019, - endYear: 2019, - month: 1, - - //TradingBot - timePeriod: '', - - //Error handlers - botError: false, - modeError: false, - isNewCloneConfirmationOpen: false, - serverResponse: '', - serverError: false, - processNameError: false, - keyIdError: false, - accessCodeError: false, - baseAssetBalanceError: false - } - } - - render() { - const { classes } = this.props - if (!isDefined(this.state.user)) { - return ( - - ) - } else return ( - - - -
    - - -
    - - Create a Bot Clone - - - - A bot clone it's a copy of your bot running on a virtual machine. - Please select from your teams and bots the one you want to clone! - - - - - Select Team and Bot - - - {({ loading, error, data }) => { - if (error) return `Error! There has been an error loading teams.` - - if (loading) { - return ( - - ) - } - - if (!isDefined(data.teams_TeamsByOwner)) { - return ( - - ) - } else { - this.teams = data.teams_TeamsByOwner - } - - return ( - - ) - }} - - {this.state.selectedBot.kind} - - - this.setState({ exchangeName: e.target.value })} - fullWidth - > - {Object.keys(exchanges).map((option, index) => ( - - {option} - - ))} - - - this.setState({ timePeriod: e.target.value })} - fullWidth - > - {availableTimePeriods.map((option, index) => ( - - {option} - - ))} - - - {this.state.selectedBot.kind === botTypes.Trading && - - - this.setState({ market: e.target.value })} - fullWidth - > - {Object.keys(markets).map((option, index) => ( - - {option} - - ))} - - - this.setState({ baseAsset: e.target.value })} - fullWidth - > - {Object.keys(baseAssets).map((option, index) => ( - - {baseAssets[option]} - - ))} - - - - Available Running Modes are Backtest and Live. -
      -
    • Backtest mode does NOT put real orders at the exchange; - it simulates the order execution at the specified price. -
    • -
    • - Live mode DOES put real orders at the exchange. -
    • -
    -
    - - - this.setState({ mode: e.target.value })} - onBlur={(e) => this.setState({ modeError: false })} - error={this.state.modeError} - fullWidth - > - {Object.keys(tradingStartModes).map(option => ( - - {tradingStartModes[option]} - - ))} - - - {this.state.mode == "backtest" && - - } - rightArrowIcon={} - value={this.state.beginDatetime} - label='Backtest Start Date' - onChange={newVal => this.setState({ beginDatetime: newVal })} - className={classNames(classes.form, classes.textField)} - fullWidth - /> - - } - rightArrowIcon={} - value={this.state.endDatetime} - label='Backtest End Date' - onChange={newVal => this.setState({ endDatetime: newVal })} - className={classNames(classes.form, classes.textField)} - fullWidth - /> - - } - - {this.state.mode == "live" && - - - Select one of your available Exchange API Keys to be used by this clone. - - - - {({ loading, error, data }) => { - if (loading) return ( - this.setState({ keyId: e.target.value })} - onBlur={(e) => this.setState({ keyIdError: false })} - error={this.state.keyIdError} - fullWidth - > - - 'Loading keys...' - - - ); - if (error) return `Error! ${error.message}`; - const list = data.keyVault_AvailableKeys.map((key) => ( - - {key.key.substr(0, 32) + "..." + " - " + key.exchange} - - )); - return ( - this.setState({ keyId: e.target.value })} - onBlur={(e) => this.setState({ keyIdError: false })} - error={this.state.keyIdError} - fullWidth - > - {list} - - ); - }} - - - - Because we are still in early alpha-testing phase, - Live Trading Clones are limited to an initial investment - of 0.001 BTC or 10 USDT. If you choose to run this bot or any modified - version of the code, you are doing it at your own risk. - - - this.setState({ accessCodeOption: e.target.checked })} - color="primary" - /> - } - label="I have an Access Code" - className={classNames(classes.form, classes.textField)} - /> - - - } - - {this.state.accessCodeOption && - - - The Access Code is only used by alpha testers. Please contact the team for more details. - - this.setState({ accessCode: e.target.value })} - onBlur={(e) => this.setState({ accessCodeError: false })} - error={this.state.accessCodeError} - fullWidth - /> - - this.setState({ baseAssetBalance: e.target.value })} - onBlur={(e) => this.setState({ baseAssetBalanceError: false })} - error={this.state.baseAssetBalanceError} - fullWidth - /> - - } - -
    - } - - {this.state.selectedBot.kind === botTypes.Indicator && - - this.setState({ processName: e.target.value })} - onBlur={(e) => this.setState({ processNameError: false })} - error={this.state.processNameError} - fullWidth - > - {Object.keys(indicatorProcessNames).map((option, index) => ( - - {indicatorProcessNames[option]} - - ))} - - - } - - {this.state.selectedBot.kind === botTypes.Sensor && - - this.setState({ processName: e.target.value })} - onBlur={(e) => this.setState({ processNameError: false })} - error={this.state.processNameError} - fullWidth - > - {Object.keys(sensorProcessNames).map((option, index) => ( - - {sensorProcessNames[option]} - - ))} - - - } - - {(this.state.mode === "noTime" && this.state.selectedBot.kind === botTypes.Indicator) && - - - The Resume Execution option let's you pick up the context of - the last execution and continue from there. - - this.setState({ resumeExecution: e.target.checked })} - value="resumeExecution" - color="primary" - /> - } - label="Resume Execution" - className={classNames(classes.form, classes.textField)} - /> - {!this.state.resumeExecution && - } - rightArrowIcon={} - value={this.state.beginDatetime} - label='Start Date' - onChange={newVal => this.setState({ beginDatetime: newVal })} - className={classNames(classes.form, classes.textField)} - fullWidth - /> - } - - - } - - - You will be able to see the clone information under Active Clones. - Whenever you decide to stop the clone you can delete it. On History Clones will find all deleted clones. - - -
    - -
    - -
    - - - Creating bot clone - - - {this.state.serverResponse} - - - - - - -
    -
    -
    - ); - } - - setSelectedBot(botId) { - if (isDefined(this.teams)) { - for (var j = 0; j < this.teams.length; j++) { - for (var i = 0; i < this.teams[j].fb.length; i++) { - if (this.teams[j].fb[i].id === botId) { - this.setState({ selectedBot: this.teams[j].fb[i] }) - this.setState({ teamId: this.teams[j].id }) - return - } - } - } - } - } - - async submitForm(e) { - e.preventDefault() - let error = this.validate() - if (!error) { - let serverResponse = await this.createCloneOnServer() - error = serverResponse.errors || !isDefined(serverResponse.data.operations_AddClone) - if (error) { - this.state.serverResponse = serverResponse.errors[0].message || serverResponse.errors[0] - this.state.serverError = true - } else { - this.state.serverResponse = "The new clone was sucessfully created." - this.state.serverError = false - } - - this.handleNewCloneConfirmationOpen() - } - } - - async createCloneOnServer() { - let variables = { - clone: { - teamId: this.state.teamId, - botId: this.state.selectedBot.id, - mode: this.state.mode, - resumeExecution: this.state.resumeExecution, - botType: this.state.selectedBot.kind, - exchangeName: this.state.exchangeName - } - } - - if (this.state.selectedBot.kind === "Trading") { - variables.clone.processName = 'Trading-Process' - variables.clone.timePeriod = this.state.timePeriod - variables.clone.baseAsset = this.state.baseAsset - variables.clone.market = this.state.market - if (this.state.mode === "backtest") { - let beginDate = DateTime.fromISO(this.state.beginDatetime.toISO({ includeOffset: false }), { zone: "UTC" }); - let endDate = DateTime.fromISO(this.state.endDatetime.toISO({ includeOffset: false }), { zone: "UTC" }); - variables.clone.beginDatetime = beginDate.valueOf() / 1000 | 0 - variables.clone.endDatetime = endDate.valueOf() / 1000 | 0 - variables.clone.waitTime = this.state.waitTime - } else { - variables.clone.keyId = this.state.keyId - variables.clone.accessCode = this.state.accessCode - variables.clone.baseAssetBalance = Number(this.state.baseAssetBalance) - } - } else { - let beginDate = DateTime.fromISO(this.state.beginDatetime.toISO({ includeOffset: false }), { zone: "UTC" }); - - variables.clone.processName = this.state.processName - variables.clone.startYear = this.state.startYear - variables.clone.endYear = this.state.endYear - variables.clone.month = this.state.month - variables.clone.beginDatetime = beginDate.valueOf() / 1000 | 0 - } - - return this.props.addCloneMutation({ - variables: variables - }) - } - - handleNewCloneConfirmationOpen = () => { - this.setState({ isNewCloneConfirmationOpen: true }) - }; - - handleNewCloneConfirmationClose = () => { - this.setState({ - isNewCloneConfirmationOpen: false - }) - - if (!this.state.serverError) - this.setState({ - selectedBot: { 'id': '' }, - mode: 'noTime', - resumeExecution: false, - beginDatetime: DateTime.utc().minus({ days: 8 }).startOf('day'), - endDatetime: DateTime.utc(), - waitTime: 1, - state: '', - stateDatetime: 0, - createDatetime: 0, - exchangeName: exchanges.Poloniex, - processName: indicatorProcessNames.Daily, - teams: [], - teamId: '', - keyId: '', - accessCodeOption: false, - accessCode: '', - baseAssetBalance: 0, - market: markets.USDT_BTC, - baseAsset: baseAssets.assetA, - - // Indicator Bot - startYear: 2019, - endYear: 2019, - month: 1, - - //TradingBot - timePeriod: '', - - //Error handlers - botError: false, - modeError: false, - isNewCloneConfirmationOpen: false, - serverResponse: '', - serverError: false, - processNameError: false, - keyIdError: false, - accessCodeError: false, - baseAssetBalanceError: false - }) - }; - - validate() { - let isError = false - - if (this.state.selectedBot.id.length < 1) { - isError = true - this.setState(state => ({ botError: true })); - } - - if (this.state.mode.length < 1) { - isError = true - this.setState(state => ({ modeError: true })); - } - - if (this.state.selectedBot.kind === "Trading" - && this.state.mode === 'noTime') { - isError = true - this.setState(state => ({ modeError: true })); - } - - if (this.state.selectedBot.kind !== "Trading" - && this.state.processName.length < 1) { - isError = true - this.setState(state => ({ processNameError: true })); - } - - if (this.state.mode === 'live' && this.state.keyId.length < 1) { - isError = true - this.setState(state => ({ keyIdError: true })); - } - - if (this.state.accessCodeOption) { - if (this.state.accessCode.length < 1) { - isError = true - this.setState(state => ({ accessCodeError: true })); - } - if (this.state.baseAssetBalance.length < 1 || isNaN(this.state.baseAssetBalance)) { - isError = true - this.setState(state => ({ baseAssetBalanceError: true })); - } - } - - return isError; - - } - -} - -export default compose( - graphql(clones.OPERATIONS_ADD_CLONE, { name: 'addCloneMutation' }), - withStyles(styles) -)(AddClone) diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/styles.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/styles.js deleted file mode 100644 index b5533fe95..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/Add/styles.js +++ /dev/null @@ -1,37 +0,0 @@ -const styles = theme => ({ - root: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - }, - container: { - display: 'flex', - flexWrap: 'wrap', - padding: 20, - height: '100%' - }, - textField: { - width: '80%', - marginLeft: '10%', - marginBottom: 10 - }, - actionButton: { - textAlign: 'center', - marginTop: 10 - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 20 - }, - form: { - marginTop: 20 - }, - selectEmpty: { - marginTop: theme.spacing.unit * 2 - } -}) - -export default styles diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/History/index.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/History/index.js deleted file mode 100644 index e1bc38bd8..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/History/index.js +++ /dev/null @@ -1,127 +0,0 @@ -import React, { Component } from 'react' -import { graphql } from 'react-apollo' -import { clones } from '../../../GraphQL/Calls' -import TopBar from '../../BannerTopBar' -import ListClones from '../List/ListClones' - -class HistoryClones extends Component { - - constructor (props) { - super(props) - let user = localStorage.getItem('user') - this.state = { - user: JSON.parse(user) - } - } - - render () { - let data = this.props.data - - if (data.loading) { - return ( - - ) - } else if (data.operations_HistoryClones && data.operations_HistoryClones.length > 0) { - return ( - - - -
    - { - data.operations_HistoryClones.map((clone, i) => { - return ( - - ) - }) - } -
    -
    - ) - } else if (data.error) { - console.log('Error Listing clones.', data.error) - return ( - - ) - } else { - return ( - - ) - } - } - - getBodyContent (data) { - if (data.loading) { - return ( - - ) - } else if (data.operations_HistoryClones && data.operations_HistoryClones.length > 0) { - return ( - - - -
    - { - data.operations_HistoryClones.map((clone, i) => { - return ( - - ) - }) - } -
    -
    - ) - } else if (data.error) { - return ( - - ) - } else { - return ( - - - ) - } - } - -} - -export default graphql(clones.OPERATIONS_HISTORY_CLONES)(HistoryClones) diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/CloneDialog.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/List/CloneDialog.js deleted file mode 100644 index 90998f09a..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/CloneDialog.js +++ /dev/null @@ -1,56 +0,0 @@ -import React, { Component } from 'react' -import AddClone from './AddClone' -import { withStyles } from '@material-ui/core/styles' -import styles from './styles' -import { - Button, Dialog, DialogContent, DialogContentText, DialogTitle -} from '@material-ui/core' - -class CloneDialog extends Component { - - constructor (props) { - super(props) - this.state = { - selected:'', - isNewCloneDialogOpen: false, - } - } - - handleNewCloneDialogOpen = () => { - this.setState({ isNewCloneDialogOpen: true }) - }; - - handleNewCloneDialogClose = () => { - this.setState({ isNewCloneDialogOpen: false }) - }; - - render () { - const { classes } = this.props - return ( -
    - - - - Add a new Clone - - - - Description... - - - - -
    - ) - } -} - -export default withStyles(styles)(CloneDialog) diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/ListClones.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/List/ListClones.js deleted file mode 100644 index 730ebf7b3..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/ListClones.js +++ /dev/null @@ -1,306 +0,0 @@ -import React, { Component } from 'react' -import { graphql, compose } from 'react-apollo' -import {withRouter} from "react-router-dom"; -import { clones } from '../../../GraphQL/Calls' -import { - Typography, Button, TextField, Dialog, DialogContent, - DialogContentText, DialogTitle, DialogActions, - ExpansionPanel, ExpansionPanelDetails, ExpansionPanelSummary, - ExpansionPanelActions, Divider - -} from '@material-ui/core' -import Avatar from '@material-ui/core/Avatar'; -import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -import { tradingStartModesList, indicatorStartModes } from '../../../GraphQL/models' -import { isDefined, toLocalTime } from '../../../utils' -import classNames from 'classnames' -import { withStyles } from '@material-ui/core/styles' -import styles from './styles' - -class ListClones extends Component { - - constructor (props) { - super(props) - this.state = { - isRemoveDialogOpen: false, - isLogsDialogOpen: false, - } - } - - render () { - const { classes } = this.props - const clone = this.props.currentClone - return ( - - - }> -
    - - {clone.teamName} -
    -
    - - {clone.botName} -
    -
    - - { clone.processName } / { clone.botType === 'Trading' ? tradingStartModesList[clone.mode] : indicatorStartModes[clone.mode] } - -
    -
    - - -
    - Context Information -
    -
    - Created: - Resume Execution: - { isDefined(clone.beginDatetime) && - Begin: - } - { isDefined(clone.endDatetime) && - End: - } - { isDefined(clone.waitTime) && - Wait Time: - } - { clone.botType === 'Trading' && - - Exchange: - Time Period: - Initial Balance (BTC): - - } -
    -
    - {toLocalTime(clone.createDatetime)} - {clone.resumeExecution ? 'Yes':'No'} - { isDefined(clone.beginDatetime) && - {toLocalTime(clone.beginDatetime)} - } - { isDefined(clone.endDatetime) && - {toLocalTime(clone.endDatetime)} - } - { isDefined(clone.waitTime) && - {clone.waitTime} - } - { clone.botType === 'Trading' && - - {clone.exchangeName} - {clone.timePeriod} - {clone.balanceAssetB} - - } -
    -
    -
    - { isDefined(clone.summaryDate) && - -
    - Execution Information -
    -
    - Last Execution: - { (clone.botType === 'Trading' && isDefined(clone.assetA) ) && - - Buy Average: - Sell Average: - Market Rate: - ROI {clone.assetA}: - ROI {clone.assetB}: - - } -
    -
    - { toLocalTime(clone.summaryDate) } - { (clone.botType === 'Trading' && isDefined(clone.assetA) ) && - - {clone.buyAverage} - {clone.sellAverage} - {clone.marketRate} - {clone.combinedProfitsA}% - {clone.combinedProfitsB}% - - } -
    -
    -
    -
    - } - { (clone.state !== 'UNPUBLISHED') && - -
    - Virtual Machine Status - -
    -
    - } -
    - { - !this.props.isHistory && - - } - { - !this.props.isHistory && - - - - - - } -
    - - - - Delete Clone - - - - Are you sure you want to delete this clone? - Deleting this clone will prevent any running bots associated to this clone to access your account at the exchange. - - - - - - - - - - - - Last clone logs - - - - Here you can check the clone output directly from the virtual machine. - The last 20 lines are displayed, but you can check the Logs Module for more details. - -
    - -
    -
    - - - -
    - -
    - ) - } - - showCloneLogs(clone) { - this.props.history.push("/logs/show/"+clone.botSlug+"-"+clone.id+".1.0"); - } - - canStopClone(){ - const state = JSON.parse(this.props.currentClone.state) - if(isDefined(state) && state.hasOwnProperty("running")){ - return true - } else { - return false - } - } - - canRestartClone(){ - const state = JSON.parse(this.props.currentClone.state) - if(isDefined(state) && state.hasOwnProperty("terminated")){ - return true - } else { - return false - } - } - - removeClone (clone) { - this.props.mutate({ - variables:{ - id: clone.id - }, - refetchQueries: [{query: clones.OPERATIONS_LIST_CLONES}] - }) - } - - showLogs () { - this.setState({ isLogsDialogOpen: true }) - } - - handleLogsDialogClose = () => { - this.setState({ isLogsDialogOpen: false }) - } - - handleRemoveDialogOpen = () => { - this.setState({ isRemoveDialogOpen: true }) - } - - handleRemoveDialogOK = () => { - this.removeClone(this.props.currentClone) - this.setState({ isRemoveDialogOpen: false }) - } - - handleRemoveDialogCancel = () => { - this.setState({ isRemoveDialogOpen: false }) - } -} - -export default compose( - graphql(clones.OPERATIONS_REMOVE_CLONE), - withStyles(styles), - withRouter -)(ListClones) diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/index.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/List/index.js deleted file mode 100644 index c94f56cc5..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/index.js +++ /dev/null @@ -1,127 +0,0 @@ -import React, { Component } from 'react' -import { graphql } from 'react-apollo' -import { clones } from '../../../GraphQL/Calls' -import TopBar from '../../BannerTopBar' -import ListClones from './ListClones' - -class BrowseClones extends Component { - - constructor (props) { - super(props) - let user = localStorage.getItem('user') - this.state = { - user: JSON.parse(user) - } - } - - render () { - let data = this.props.data - - if (data.loading) { - return ( - - ) - } else if (data.operations_Clones && data.operations_Clones.length > 0) { - return ( - - - -
    - { - data.operations_Clones.map((clone, i) => { - return ( - - ) - }) - } -
    -
    - ) - } else if (data.error) { - console.log('Error Listing clones.', data.error) - return ( - - ) - } else { - return ( - - ) - } - } - - getBodyContent (data) { - if (data.loading) { - return ( - - ) - } else if (data.operations_Clones && data.operations_Clones.length > 0) { - return ( - - - -
    - { - data.operations_Clones.map((clone, i) => { - return ( - - ) - }) - } -
    -
    - ) - } else if (data.error) { - return ( - - ) - } else { - return ( - - - ) - } - } - -} - -export default graphql(clones.OPERATIONS_LIST_CLONES)(BrowseClones) diff --git a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/styles.js b/Deprecated-Code/OperationsModule/client/src/views/Clone/List/styles.js deleted file mode 100644 index f7e1b1135..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Clone/List/styles.js +++ /dev/null @@ -1,89 +0,0 @@ -const styles = theme => ({ - root: { - flexGrow: 1, - margin: 10 - }, - image: { - width: 128, - height: '100%', - cursor: 'default' - }, - img: { - margin: 'auto', - display: 'block', - maxWidth: '100%', - maxHeight: '100%' - - }, - buttonList: { - margin: theme.spacing.unit, - float: 'right' - }, - buttonGrid: { - marginTop: -20 - }, - button: { - display: 'block', - marginLeft: 'auto', - marginRight: 'auto' - }, - textField: { - marginLeft: theme.spacing.unit, - marginRight: theme.spacing.unit - }, - textArea: { - margin: theme.spacing.unit, - whiteSpace: 'pre', - width: '98%', - overflowY: 'hidden', - overflowX: 'hidden' - }, - heading: { - fontSize: theme.typography.pxToRem(18), - flexBasis: '33.33%', - fontWeight: '600', - whiteSpace: 'nowrap', - display: 'inline-flex', - alignItems: 'center', - paddingRight: theme.typography.pxToRem(20) - }, - helper: { - borderLeft: `2px solid ${theme.palette.divider}`, - padding: `0px ${theme.spacing.unit * 2}px` - }, - logsWrapper: { - width: '1750px', - overflowY: 'auto', - overflowX: 'hidden' - }, - details: { - display: 'flex' - }, - column2: { - flexBasis: '50%', - maxWidth: '50%' - }, - column3: { - flexBasis: '33.33%', - maxWidth: '33.33%' - }, - cloneInfoTitle: { - fontWeight: '600', - flexBasis: '100%', - maxWidth: '100%' - }, - cloneInfoBold: { - fontWeight: '600', - paddingLeft: '10px', - paddingTop: '10px' - }, - cloneInfoNormal: { - paddingLeft: '10px', - paddingTop: '10px' - }, - avatar: { - margin: 10 - } -}) - -export default styles diff --git a/Deprecated-Code/OperationsModule/client/src/views/Home.js b/Deprecated-Code/OperationsModule/client/src/views/Home.js deleted file mode 100644 index 90892a4c8..000000000 --- a/Deprecated-Code/OperationsModule/client/src/views/Home.js +++ /dev/null @@ -1,51 +0,0 @@ -import React, { Component } from 'react' -import { Typography } from '@material-ui/core' -import TopBar from './BannerTopBar' - -class Home extends Component { - - render() { - return ( - - - -
    - - Clones Module - - - Creating and managing bot clones - -
    - - The clones module allows creating and managing the execution of bot’s code. - It also stores the metadata information of the clones and handles the interaction - with the orchestration software. - - - It integrates with other system modules to enable secure and encapsulated execution of the - bots. On the clone creation process the encapsulation is achieved by deploying a Clone Executor - Image on a Kubernetes container. - -
    -
    - - Bots are executed using the common framework called Clone Executor which provides support for commonly used resources. - - - When creating a new clone, specific execution parameters are selected, for example the exchange and the time period that the bot will operate in. - -
    -
    - -
    - ) - } -} - -export default Home diff --git a/Deprecated-Code/OperationsModule/package-lock.json b/Deprecated-Code/OperationsModule/package-lock.json deleted file mode 100644 index 963dbad49..000000000 --- a/Deprecated-Code/OperationsModule/package-lock.json +++ /dev/null @@ -1,945 +0,0 @@ -{ - "name": "@superalgos/operations-test", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "requires": { - "chalk": "^2.0.1" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", - "requires": { - "cliui": "^4.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.11", - "yargs": "^12.0.5" - }, - "dependencies": { - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - } - } -} diff --git a/Deprecated-Code/OperationsModule/package.json b/Deprecated-Code/OperationsModule/package.json deleted file mode 100644 index 2ae36c7f1..000000000 --- a/Deprecated-Code/OperationsModule/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@superalgos/operations-test", - "version": "0.1.0", - "description": "Superalgos Operations backend API", - "main": "src/index.js", - "scripts": { - "test": "./node_modules/.bin/mocha --reporter spec" - }, - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "dependencies": { - "axios": "0.19.0", - "chai": "^4.2.0", - "dotenv": "8.0.0", - "mocha": "^6.1.4" - } -} diff --git a/Deprecated-Code/OperationsModule/server/.dockerignore b/Deprecated-Code/OperationsModule/server/.dockerignore deleted file mode 100644 index 360da893f..000000000 --- a/Deprecated-Code/OperationsModule/server/.dockerignore +++ /dev/null @@ -1,9 +0,0 @@ -# Ignore files to be uploaded to the image -.env* -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md diff --git a/Deprecated-Code/OperationsModule/server/.env.local b/Deprecated-Code/OperationsModule/server/.env.local deleted file mode 100644 index 12e7738fe..000000000 --- a/Deprecated-Code/OperationsModule/server/.env.local +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=4003 - -# Database configuration -MONGO_URL=mongodb://mongo/operations - -GATEWAY_ENDPOINT=http://docker.for.win.localhost:4100/graphql -OPERATIONS_API_PRESHARED=clones_key - -# Temporary restriction on asset balances -ACCESS_CODE=access_code -DEFAULT_BALANCE_ASSET_A=0 -DEFAULT_BALANCE_ASSET_B=0.001 diff --git a/Deprecated-Code/OperationsModule/server/.gitignore b/Deprecated-Code/OperationsModule/server/.gitignore deleted file mode 100644 index 6e4d73920..000000000 --- a/Deprecated-Code/OperationsModule/server/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. -.env -.env.dev - -/node_modules -/coverage - -config -config-dev diff --git a/Deprecated-Code/OperationsModule/server/CODE_OF_CONDUCT.md b/Deprecated-Code/OperationsModule/server/CODE_OF_CONDUCT.md deleted file mode 100644 index 05b430885..000000000 --- a/Deprecated-Code/OperationsModule/server/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at superalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/OperationsModule/server/CONTRIBUTING.md b/Deprecated-Code/OperationsModule/server/CONTRIBUTING.md deleted file mode 100644 index c67e8d115..000000000 --- a/Deprecated-Code/OperationsModule/server/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/OperationsModule/server/Dockerfile b/Deprecated-Code/OperationsModule/server/Dockerfile deleted file mode 100644 index 398f7db72..000000000 --- a/Deprecated-Code/OperationsModule/server/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/clones-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/OperationsModule/server/Dockerfile.prod b/Deprecated-Code/OperationsModule/server/Dockerfile.prod deleted file mode 100644 index 6f2cd3865..000000000 --- a/Deprecated-Code/OperationsModule/server/Dockerfile.prod +++ /dev/null @@ -1,23 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4003 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules && \ - mkdir -p /root/.kube - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app -COPY ./config /root/.kube - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/OperationsModule/server/LICENSE b/Deprecated-Code/OperationsModule/server/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/OperationsModule/server/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/OperationsModule/server/README.md b/Deprecated-Code/OperationsModule/server/README.md deleted file mode 100644 index ef43b765f..000000000 --- a/Deprecated-Code/OperationsModule/server/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Superalgos Operations Server Module - -The Superalgos Operations Server manages the clone life cycle inside the **Superalgos Ecosystem**. -The main function includes storing the metadata information of the clones and handling the interaction with the orchestration software which is [Kubernetes](https://Kubernetes.io). - -# Execution sequence -The operations module (or Clones) integrates with other system modules to enable secure and encapsulated execution. On the clone creation process the encapsulation is achieved by deploying a **Clone Executor** Image on a **Kubernates** container. -- [Keys](https://github.com/Superalgos/KeyVaultModule): Manages the signature of the messages sent to the external exchanges. -- [Teams](https://github.com/Superalgos/TeamsModule): Provide team and bot authorization. -- [Clone Executor](https://github.com/Superalgos/CloneExecutor): Receive the execution parameters and runs an independent instance of the platform. - -```mermaid -sequenceDiagram -User ->> Keys: createKey -User ->> Keys: getAvailableKeys -User ->> Clones: createClone -Clones ->> Keys: getAvailableKeys -Clones ->> Keys: authorizeCloneToUseKey -Keys ->> Clones: geCloneTeamAndBot -Keys ->> Teams: getTeamMembers -Keys -->> Clones: authorizeCloneToUseKey -Clones ->> Clone Executor: createClone -Clone Executor ->> Keys: signTransaction -Clone Executor ->> Clones: updateExection - -Note left of Clone Executor: signTransaction and
    updateExection are
    called n number
    of times -User ->> Clones: getCloneExecutionInformation -Clone Executor ->> Clones: cloneExecutionComplete -User ->> Clones: deleteClone -Clones ->> Keys: releaseKey -``` - -> Details about all available methods can be found at the GraphQL endpoint. - -## List active clones -- List the clones created by the user that are currently running on the virtual machine. -- List the running clones of the teams who the user is authorized to manage (future release) - -## List history clones -- List the clones owned by the user that were completed and deleted -- List the finalised clones of the teams who the user is authorized to manage (future release) - -## Add new clones - A clone can be created: - - As a personal clone (the source code will be the one on the personal user folder) - - As a team clone (the source code will be the one on the main team folder) - Who can create each type: - - Personal clones are managed by the user who creates it, not visible for any other user. - - Team clones are managed by any ADMIN type team member (on the team member role attribute), and all team admins will see it listed. - -> Written with [StackEdit](https://stackedit.io/). diff --git a/Deprecated-Code/OperationsModule/server/docker-compose.prod.yml b/Deprecated-Code/OperationsModule/server/docker-compose.prod.yml deleted file mode 100644 index 0fc83bb6a..000000000 --- a/Deprecated-Code/OperationsModule/server/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: aaoperationsapi-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: aaoperationsapi - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: npm start - expose: - - 4003 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/OperationsModule/server/package-lock.json b/Deprecated-Code/OperationsModule/server/package-lock.json deleted file mode 100644 index 5cd17d311..000000000 --- a/Deprecated-Code/OperationsModule/server/package-lock.json +++ /dev/null @@ -1,4286 +0,0 @@ -{ - "name": "@superalgos/clones-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@kubernetes/client-node": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.10.2.tgz", - "integrity": "sha512-JvsmxbTwiMqsh9LyuXMzT5HjoENFbB3a/JroJsobuAzkxN162UqAOvg++/AA+ccIMWRR2Qln4FyaOJ0a4eKyXg==", - "requires": { - "@types/js-yaml": "^3.12.1", - "@types/node": "^10.12.0", - "@types/request": "^2.47.1", - "@types/underscore": "^1.8.9", - "@types/ws": "^6.0.1", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.13.1", - "json-stream": "^1.0.0", - "jsonpath-plus": "^0.19.0", - "request": "^2.88.0", - "shelljs": "^0.8.2", - "tslib": "^1.9.3", - "underscore": "^1.9.1", - "ws": "^6.1.0" - }, - "dependencies": { - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@panva/jose": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@panva/jose/-/jose-1.3.0.tgz", - "integrity": "sha512-2comC1FjCLxSW7TdEOWt6HFSVjWH1w7q9AxZeP7j/ui/QMSPXN3tdw/PbRvErf0chXcZnw4UImiD/2u0RzUqSQ==", - "requires": { - "asn1.js": "^5.1.1" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==" - }, - "@types/node": { - "version": "10.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", - "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==" - }, - "@types/request": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", - "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", - "requires": { - "@types/caseless": "*", - "@types/form-data": "*", - "@types/node": "*", - "@types/tough-cookie": "*" - } - }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==" - }, - "@types/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-ROHiJBeuXxVVaKm65tM/LHWlkcTFBQJqJgDB90Vj3fsl8Q290Z29cmEwnpvtlb0nSzuMIaIYWj0ZvmVgim8khA==" - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aggregate-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.0.tgz", - "integrity": "sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^3.2.0" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.2.0.tgz", - "integrity": "sha512-Q7hnYGGNYbcmGrCPulXfkEw7oW7qjWeM4ZTALmgpuIcZLxyqqKYWxCZg2UBm8bklrnB4m2mGyJPWfoktdORD8A==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.1.0.tgz", - "integrity": "sha512-uQWrpRm+iZZUCAp7ZZJQbd4Za9I3AjR/3YTjmcnAtkauaIm/T5CT6U8zVI6e60T6OANqBFAzuR9/HB3NzuZCRA==" - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", - "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - }, - "defer-to-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz", - "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==" - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "express-graphql": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.8.0.tgz", - "integrity": "sha512-yjFFLTw9J/7QbLBs/SRX1IykEnJHIdaAeDTiw1yC+zPHoQSCijKdPZYhe+B0SC0sFJydAXW6RSqqnERGgKPH7g==", - "requires": { - "accepts": "^1.3.5", - "content-type": "^1.0.4", - "http-errors": "^1.7.2", - "raw-body": "^2.3.3" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.3.1.tgz", - "integrity": "sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA==", - "requires": { - "iterall": "^1.2.2" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonpath-plus": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", - "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg==" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kubernetes-client": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/kubernetes-client/-/kubernetes-client-8.3.0.tgz", - "integrity": "sha512-ISk9gi6QxZHHTFnhWgDFUKYb4bhACclALMAP2FWE7rbfHrOnXWmNm5cbD3VotA/WjvNOQpINbp1+qDXEQwH94Q==", - "requires": { - "@kubernetes/client-node": "0.10.2", - "camelcase": "^5.3.1", - "deepmerge": "^3.2.0", - "depd": "^2.0.0", - "js-yaml": "^3.13.1", - "json-stream": "^1.0.0", - "openid-client": "^3.1.0", - "pump": "^3.0.0", - "qs": "^6.7.0", - "request": "^2.88.0", - "swagger-fluent": "^3.2.1", - "url-join": "^4.0.0", - "ws": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "luxon": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.16.0.tgz", - "integrity": "sha512-qaqB+JwpGwtl7UbIXng3A/l4W/ySBr8drQvwtMLZBMiLD2V+0fEnPWMrs+UjnIy9PsktazQaKvwDUCLzoWz0Hw==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, - "mongodb": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz", - "integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==", - "requires": { - "mongodb-core": "3.2.7", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "mongodb-core": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", - "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "mongoose": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.6.1.tgz", - "integrity": "sha512-/EBoXS+fZv8dYf0VKMXwhTEVYUI+6EbmVhmV2DzO9BGacTSgStQprU09rZYfVxe8EmLhmTrSV5eCIRLBYuXGag==", - "requires": { - "async": "2.6.2", - "bson": "~1.1.1", - "kareem": "2.3.0", - "mongodb": "3.2.7", - "mongodb-core": "3.2.7", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.6.0", - "mquery": "3.2.1", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "safe-buffer": "5.1.2", - "sift": "7.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", - "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" - }, - "mquery": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.1.tgz", - "integrity": "sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nodemon": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.1.tgz", - "integrity": "sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", - "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "oidc-token-hash": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-3.0.2.tgz", - "integrity": "sha512-dTzp80/y/da+um+i+sOucNqiPpwRL7M/xPwj7pH1TFA2/bqQ+OK2sJahSXbemEoLtPkHcFLyhLhLWZa9yW5+RA==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "openid-client": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-3.1.2.tgz", - "integrity": "sha512-+6hmonMWYRFoNaog2Ik6B86JYsJiFR7xzI13EfDdGGvb75zGLxW7pe7Y1yL+KT3KjxacW5GoFIOvzY0WsIlfdQ==", - "requires": { - "@panva/jose": "^1.3.0", - "base64url": "^3.0.1", - "got": "^9.6.0", - "lodash": "^4.17.11", - "lru-cache": "^5.1.1", - "make-error": "^1.3.5", - "object-hash": "^1.3.1", - "oidc-token-hash": "^3.0.2", - "p-any": "^2.1.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, - "p-any": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", - "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", - "requires": { - "p-cancelable": "^2.0.0", - "p-some": "^4.0.0", - "type-fest": "^0.3.0" - }, - "dependencies": { - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" - } - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-some": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", - "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", - "requires": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" - }, - "dependencies": { - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" - } - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" - }, - "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", - "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "requires": { - "is-buffer": "^1.0.2" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "swagger-fluent": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/swagger-fluent/-/swagger-fluent-3.2.1.tgz", - "integrity": "sha512-Ol4wwbc9kKNdOGPS3aoKLEkCFPiEioA9gMUeeRzlugHHu0HYVvftLpK9v4X8ZUm8l2n2yGiLUBp+gKqhQzHspw==", - "requires": { - "merge-deep": "^3.0.2", - "request": "^2.88.0" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=" - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.0.1.tgz", - "integrity": "sha512-ILHfMbuqLJvnSgYXLgy4kMntroJpe8hT41dOVWM8bxRuw6TK4mgMp9VJUNsZTEc5Bh+Mbs0DJT4M0N+wBG9l9A==", - "requires": { - "async-limiter": "^1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/Deprecated-Code/OperationsModule/server/package.json b/Deprecated-Code/OperationsModule/server/package.json deleted file mode 100644 index 7e0734a4d..000000000 --- a/Deprecated-Code/OperationsModule/server/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@superalgos/clones-api", - "version": "0.1.0", - "description": "Superalgos Clones backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/Superalgos/OperationsModule.git" - }, - "main": "src/index.js", - "scripts": { - "start": "nodemon src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "devDependencies": { - "nodemon": "^1.19.1" - }, - "dependencies": { - "@kubernetes/client-node": "^0.10.2", - "axios": "^0.19.0", - "cors": "^2.8.5", - "dotenv": "^8.0.0", - "esm": "^3.2.25", - "express": "^4.17.1", - "express-graphql": "^0.8.0", - "graphql": "^14.3.1", - "kubernetes-client": "^8.3.0", - "luxon": "^1.16.0", - "mongoose": "^5.6.1", - "winston": "^3.2.1" - } -} diff --git a/Deprecated-Code/OperationsModule/server/src/app.js b/Deprecated-Code/OperationsModule/server/src/app.js deleted file mode 100644 index 5fc1d6a81..000000000 --- a/Deprecated-Code/OperationsModule/server/src/app.js +++ /dev/null @@ -1,43 +0,0 @@ -import express from 'express' -import 'dotenv/config' -import graphqlHTTP from 'express-graphql' -import schema from './schema' -import mongoose from 'mongoose' -import cors from 'cors' -import logger from './config/logger' -import wrongPreshared from './errors/notAllowed.json' - -const app = express() - -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.OPERATIONS_API_PRESHARED) { - next() - } else { - res.send(wrongPreshared) - } -}) - -// Allow cross origing request -app.use(cors()) - -// Database Connection -mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }) - -mongoose.connection.once('open', () => { - logger.info('Connected to the DB.') -}) - -app.use('/graphql', graphqlHTTP(req => { - return { - schema: schema, - context: { - userId: req.headers.userid, - authorization: req.headers.authorization - }, - graphiql: true - } -})) - -app.listen(process.env.PORT, () => { - logger.info(`Listening on port ${process.env.PORT}.`) -}) diff --git a/Deprecated-Code/OperationsModule/server/src/enums/BotTypes.js b/Deprecated-Code/OperationsModule/server/src/enums/BotTypes.js deleted file mode 100644 index d6993d277..000000000 --- a/Deprecated-Code/OperationsModule/server/src/enums/BotTypes.js +++ /dev/null @@ -1,11 +0,0 @@ -export const Trading = 'Trading' -export const Indicator = 'Indicator' -export const Sensor = 'Sensor' - -export const BotTypesEnum = [ - Trading, - Indicator, - Sensor -] - -export default BotTypesEnum diff --git a/Deprecated-Code/OperationsModule/server/src/enums/CloneMode.js b/Deprecated-Code/OperationsModule/server/src/enums/CloneMode.js deleted file mode 100644 index fcf46ab0c..000000000 --- a/Deprecated-Code/OperationsModule/server/src/enums/CloneMode.js +++ /dev/null @@ -1,19 +0,0 @@ -export const LIVE = 'live' -export const BACKTEST = 'backtest' -export const COMPETITION = 'competition' -export const ALL_MONTHS = 'allMonths' -export const ONE_MONTH = 'oneMonth' -export const NO_TIME = 'noTime' -export const FIXED_INTERVAL = 'fixedInterval' - -export const CloneModeEnum = [ - LIVE, - BACKTEST, - COMPETITION, - ALL_MONTHS, - ONE_MONTH, - NO_TIME, - FIXED_INTERVAL -] - -export default CloneModeEnum diff --git a/Deprecated-Code/OperationsModule/server/src/enums/CloneState.js b/Deprecated-Code/OperationsModule/server/src/enums/CloneState.js deleted file mode 100644 index e82389e90..000000000 --- a/Deprecated-Code/OperationsModule/server/src/enums/CloneState.js +++ /dev/null @@ -1,19 +0,0 @@ -export const UNPUBLISHED = 'UNPUBLISHED'; -export const PUBLISHED = 'PUBLISHED'; -export const CANCELLED = 'CANCELLED'; -export const RUNNING = 'RUNNING'; -export const INTERRUPTED = 'INTERRUPTED'; -export const FINISHED = 'FINISHED'; -export const ARCHIVED = 'ARCHIVED'; - -export const CloneStateEnum = [ - UNPUBLISHED, - PUBLISHED, - CANCELLED, - RUNNING, - INTERRUPTED, - FINISHED, - ARCHIVED, -]; - -export default CloneStateEnum; diff --git a/Deprecated-Code/OperationsModule/server/src/errors/index.js b/Deprecated-Code/OperationsModule/server/src/errors/index.js deleted file mode 100644 index 35256c26d..000000000 --- a/Deprecated-Code/OperationsModule/server/src/errors/index.js +++ /dev/null @@ -1,47 +0,0 @@ -export class AuthenticationError extends Error { - constructor(message) { - super(message) - this.code = 401 - this.message = 'Autentification not found, you have to be authentificated to perform this action.' - } -} - -export class AuthorizationError extends Error { - constructor(message) { - super(message) - this.code = 401 - this.message = 'You are not authorized to perform this action.' - } -} - -export class WrongArgumentsError extends Error { - constructor(message) { - super(message) - this.code = 400 - this.message = `Wrong arguments : ${this.message}` - } -} - -export class ServiceUnavailableError extends Error { - constructor(message) { - super(message) - this.code = 503 - this.message = `At least one service is unresponding ${this.message}` - } -} - -export class OperationsError extends Error { - constructor(message) { - super(message) - this.code = 500 - this.message = `OperationsModule Internal Error. ${this.message}` - } -} - -export class KubernateError extends Error { - constructor(message) { - super(message) - this.code = 500 - this.message = `OperationsModule Kubernate Error. ${this.message}` - } -} diff --git a/Deprecated-Code/OperationsModule/server/src/errors/notAllowed.json b/Deprecated-Code/OperationsModule/server/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/OperationsModule/server/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/addBotMutation.js b/Deprecated-Code/OperationsModule/server/src/graphQLCalls/addBotMutation.js deleted file mode 100644 index e69cb6696..000000000 --- a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/addBotMutation.js +++ /dev/null @@ -1,35 +0,0 @@ -import logger from '../config/logger' -import axios from 'axios' - -const addBotMutation = async (authorization, bot) => { - logger.debug('addBotMutation -> Entering function.') - - let response = await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation web_AddBot($bot: web_BotInput){ - web_AddBot(bot: $bot){ - codeName - cloneId - } - } - `, - variables: { - bot - } - }, - headers: { - authorization: authorization - } - }) - - if (response.data.errors) { - throw response.data.errors - } - - return response.data.data.web_AddBot -} - -export default addBotMutation diff --git a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/authorizeKey.js b/Deprecated-Code/OperationsModule/server/src/graphQLCalls/authorizeKey.js deleted file mode 100644 index 0c4275cdf..000000000 --- a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/authorizeKey.js +++ /dev/null @@ -1,28 +0,0 @@ -import logger from '../config/logger' -import axios from 'axios' - -const authorizeKey = (authorization, keyId, cloneId, releaseClon) => { - logger.debug('authorizeKey -> Entering function.') - - return axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation keyVault_AuthorizeClone($keyId: String!, $cloneId: String!, $releaseClon: Boolean!){ - keyVault_AuthorizeClone(keyId: $keyId, cloneId: $cloneId, releaseClon:$releaseClon) - } - `, - variables: { - keyId: keyId, - cloneId: cloneId, - releaseClon: releaseClon - } - }, - headers: { - authorization: authorization - } - }) -} - -export default authorizeKey diff --git a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/ecosystemQuery.js b/Deprecated-Code/OperationsModule/server/src/graphQLCalls/ecosystemQuery.js deleted file mode 100644 index 1c645e652..000000000 --- a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/ecosystemQuery.js +++ /dev/null @@ -1,40 +0,0 @@ -import logger from '../config/logger' -import axios from 'axios' - -const ecosystemQuery = async (authorization) => { - logger.debug('ecosystemQuery -> Entering function') - - let response = await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - query { - web_GetEcosystem { - devTeams { - codeName - displayName - host { - url - storage - container - accessKey - } - } - } - } - ` - }, - headers: { - authorization: authorization - } - }) - - if (response.data.errors) { - throw response.data.errors - } - - return response.data.data.web_GetEcosystem -} - -export default ecosystemQuery diff --git a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/removeBotMutation.js b/Deprecated-Code/OperationsModule/server/src/graphQLCalls/removeBotMutation.js deleted file mode 100644 index 42872ba92..000000000 --- a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/removeBotMutation.js +++ /dev/null @@ -1,35 +0,0 @@ -import logger from '../config/logger' -import axios from 'axios' - -const removeBotMutation = async (authorization, bot) => { - logger.debug('removeBotMutation -> Entering function.') - - let response = await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation web_RemoveBot($bot: web_BotInput){ - web_RemoveBot(bot: $bot){ - codeName - cloneId - } - } - `, - variables: { - bot - } - }, - headers: { - authorization: authorization - } - }) - - if (response.data.errors) { - throw response.data.errors - } - - return response.data.data.web_RemoveBot -} - -export default removeBotMutation diff --git a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/teamQuery.js b/Deprecated-Code/OperationsModule/server/src/graphQLCalls/teamQuery.js deleted file mode 100644 index ed7b2a35e..000000000 --- a/Deprecated-Code/OperationsModule/server/src/graphQLCalls/teamQuery.js +++ /dev/null @@ -1,49 +0,0 @@ -import logger from '../config/logger' -import axios from 'axios' - -const teamQuery = (authorization, botId) => { - logger.debug('teamQuery -> Entering function') - - return axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - query teams_FbByOwner($fbId: String){ - teams_FbByOwner(fbId: $fbId) { - edges{ - node{ - id - kind - name - slug - avatar - team{ - id - name - slug - profile{ - avatar - } - members{ - member{ - alias - } - } - } - } - } - } - } - `, - variables: { - fbId: botId - } - }, - headers: { - authorization: authorization - } - }) -} - -export default teamQuery diff --git a/Deprecated-Code/OperationsModule/server/src/index.js b/Deprecated-Code/OperationsModule/server/src/index.js deleted file mode 100644 index 59744b324..000000000 --- a/Deprecated-Code/OperationsModule/server/src/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require = require('esm')(module) -module.exports = require('./app.js') diff --git a/Deprecated-Code/OperationsModule/server/src/kubernetes/createClone.js b/Deprecated-Code/OperationsModule/server/src/kubernetes/createClone.js deleted file mode 100644 index a89ec00c0..000000000 --- a/Deprecated-Code/OperationsModule/server/src/kubernetes/createClone.js +++ /dev/null @@ -1,214 +0,0 @@ -import logger from '../config/logger' -import { toPlatformDatetime, isDefined } from '../config/utils' -import { KubernateError } from '../errors' -import { Client } from 'kubernetes-client' -import deploymentManifest from '../config/clone-deployment.json' -import { BACKTEST, COMPETITION, LIVE, NO_TIME } from '../enums/CloneMode' -import { Trading, Indicator, Sensor } from '../enums/BotTypes' -import kubeconfig from './kubeConfig' - -const createClone = async (clone) => { - try { - logger.debug('createClone %s', clone.id) - - const Request = require('kubernetes-client/backends/request') - const backend = new Request(Request.config.fromKubeconfig(kubeconfig())) - const client = new Client({ backend, version: '1.9' }) - - deploymentManifest.metadata.name = clone.id - deploymentManifest.spec.template.spec.containers[0].image = process.env.CLONE_EXECUTOR_IMAGE - - logger.debug('createClone Environment and Storage Configuration.') - let env = [] - env.push({ - 'name': 'GATEWAY_ENDPOINT', - 'value': process.env.GATEWAY_ENDPOINT - }) - env.push({ - 'name': 'GATEWAY_ENDPOINT_K8S', - 'value': process.env.GATEWAY_ENDPOINT_K8S - }) - env.push({ - 'name': 'HOST_STORAGE', - 'value': 'localStorage' - }) - if (clone.authorization) { - env.push({ - 'name': 'AUTHORIZATION', - 'value': clone.authorization - }) - } - - if (JSON.parse(process.env.FULL_LOG)) { - env.push({ - 'name': 'FULL_LOG', - 'value': process.env.FULL_LOG - }) - } - logger.debug('createClone General Financial Being Configuration.') - env.push({ - 'name': 'DEV_TEAM', - 'value': clone.teamSlug - }) - env.push({ - 'name': 'BOT', - 'value': clone.botSlug - }) - env.push({ - 'name': 'TYPE', - 'value': clone.botType - }) - env.push({ - 'name': 'CLONE_ID', - 'value': clone.id.toString() - }) - env.push({ - 'name': 'START_MODE', - 'value': clone.mode - }) - env.push({ - 'name': 'PROCESS', - 'value': clone.processName - }) - env.push({ - 'name': 'EXCHANGE_NAME', - 'value': clone.exchangeName - }) - - if (isDefined(clone.timePeriod)) { - env.push({ - 'name': 'TIME_PERIOD', - 'value': clone.timePeriod.toString() - }) - } - - logger.debug('createClone Trading Configuration.') - if (clone.botType === Trading) { - env.push({ - 'name': 'RESUME_EXECUTION', - 'value': clone.resumeExecution.toString() - }) - - env.push({ - 'name': 'DATA_SET', - 'value': datasetNames().get(clone.timePeriod) - }) - - env.push({ - 'name': 'BASE_ASSET', - 'value': clone.baseAsset - }) - env.push({ - 'name': 'INITIAL_BALANCE_ASSET_A', - 'value': clone.balanceAssetA.toString() - }) - env.push({ - 'name': 'INITIAL_BALANCE_ASSET_B', - 'value': clone.balanceAssetB.toString() - }) - - if (clone.mode === BACKTEST) { - env.push({ - 'name': 'BEGIN_DATE_TIME', - 'value': toPlatformDatetime(clone.beginDatetime) - }) - env.push({ - 'name': 'END_DATE_TIME', - 'value': toPlatformDatetime(clone.endDatetime) - }) - env.push({ - 'name': 'WAIT_TIME', - 'value': clone.waitTime.toString() - }) - } else if (clone.mode === COMPETITION) { - env.push({ - 'name': 'BEGIN_DATE_TIME', - 'value': toPlatformDatetime(clone.beginDatetime) - }) - env.push({ - 'name': 'END_DATE_TIME', - 'value': toPlatformDatetime(clone.endDatetime) - }) - env.push({ - 'name': 'KEY_ID', - 'value': clone.keyId - }) - env.push({ - 'name': 'ACCESS_TOKEN', - 'value': clone.accessTokenKey - }) - } else if (clone.mode === LIVE) { - env.push({ - 'name': 'KEY_ID', - 'value': clone.keyId - }) - env.push({ - 'name': 'ACCESS_TOKEN', - 'value': clone.accessTokenKey - }) - } - } else if (clone.botType === Indicator || clone.botType === Sensor) { - if (clone.mode === NO_TIME) { - if (!clone.resumeExecution) { - env.push({ - 'name': 'BEGIN_DATE_TIME', - 'value': toPlatformDatetime(clone.beginDatetime) - }) - } - } else { - env.push({ - 'name': 'MIN_YEAR', - 'value': isDefined(clone.startYear) ? clone.startYear.toString() : '' - }) - env.push({ - 'name': 'MAX_YEAR', - 'value': isDefined(clone.endYear) ? clone.endYear.toString() : '' - }) - env.push({ - 'name': 'MONTH', - 'value': isDefined(clone.month) ? clone.month.toString() : '' - }) - env.push({ - 'name': 'INTERVAL', - 'value': isDefined(clone.interval) ? clone.interval.toString() : '' - }) - } - } - - deploymentManifest.spec.template.spec.containers[0].env = env - - await client.apis.batch.v1.namespaces('default').jobs.post( - { body: deploymentManifest }) - - logger.debug('createClone %s on Kubernates success.', clone.id) - } catch (err) { - logger.error('Error creating clone: %s', err) - throw new KubernateError(err) - } -} - -function datasetNames() { - let dataSetMap = new Map() - dataSetMap.set("24-hs", "Multi-Period-Market") - dataSetMap.set("12-hs", "Multi-Period-Market") - dataSetMap.set("08-hs", "Multi-Period-Market") - dataSetMap.set("06-hs", "Multi-Period-Market") - dataSetMap.set("04-hs", "Multi-Period-Market") - dataSetMap.set("03-hs", "Multi-Period-Market") - dataSetMap.set("02-hs", "Multi-Period-Market") - dataSetMap.set("01-hs", "Multi-Period-Market") - dataSetMap.set("45-min", "Multi-Period-Daily") - dataSetMap.set("40-min", "Multi-Period-Daily") - dataSetMap.set("30-min", "Multi-Period-Daily") - dataSetMap.set("20-min", "Multi-Period-Daily") - dataSetMap.set("15-min", "Multi-Period-Daily") - dataSetMap.set("10-min", "Multi-Period-Daily") - dataSetMap.set("05-min", "Multi-Period-Daily") - dataSetMap.set("04-min", "Multi-Period-Daily") - dataSetMap.set("03-min", "Multi-Period-Daily") - dataSetMap.set("02-min", "Multi-Period-Daily") - dataSetMap.set("01-min", "Multi-Period-Daily") - return dataSetMap -} - -export default createClone diff --git a/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodLogs.js b/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodLogs.js deleted file mode 100644 index e2d95f2a5..000000000 --- a/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodLogs.js +++ /dev/null @@ -1,43 +0,0 @@ -import logger from '../config/logger' -import { Client } from 'kubernetes-client' -import kubeconfig from './kubeConfig' - -const getClonePodLogs = async (cloneName) => { - try { - logger.debug('getClonePodLogs on kubernates started.') - - const Request = require('kubernetes-client/backends/request') - const backend = new Request(Request.config.fromKubeconfig(kubeconfig())) - const client = new Client({ backend, version: '1.9' }) - - let query = { - 'qs': { - 'labelSelector': 'job-name=' + cloneName - } - } - - const pod = await client.api.v1.namespaces('default').pods.get(query) - - let queryLogs = { - 'qs': { - 'tailLines': '300' - } - } - if(pod.body.items[0] !== undefined){ - const logs = await client.api.v1.namespaces('default') - .pods(pod.body.items[0].metadata.name).log.get(queryLogs) - let logsArray = logs.body.split('\n') - - logger.debug('getClonePodLogs on kubernates successful.') - - return JSON.stringify(logsArray, null, 2) - } else { - logger.warn('getClonePodStatus pod not found %s: ', cloneName) - return "Logs not available." - } - } catch (err) { - logger.error('There was an error getting the pod logs %s: ', err) - return "Logs not available." - } -} -export default getClonePodLogs diff --git a/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodStatus.js b/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodStatus.js deleted file mode 100644 index b3ea72af0..000000000 --- a/Deprecated-Code/OperationsModule/server/src/kubernetes/getClonePodStatus.js +++ /dev/null @@ -1,40 +0,0 @@ -import logger from '../config/logger' -import { Client } from 'kubernetes-client' -import kubeconfig from './kubeConfig' - -const getClonePodStatus = async (cloneName) => { - try { - logger.debug('getClonePodStatus on kubernates started.') - - const Request = require('kubernetes-client/backends/request') - const backend = new Request(Request.config.fromKubeconfig(kubeconfig())) - const client = new Client({ backend, version: '1.9' }) - - let query = { - 'qs': { - 'labelSelector': 'job-name=' + cloneName - } - } - - const pod = await client.api.v1.namespaces('default').pods.get(query) - - if (pod.body.items[0] !== undefined) { - let clonePodStatus = pod.body.items[0].status.containerStatuses[0].state - - if (clonePodStatus.hasOwnProperty('terminated') - && clonePodStatus.terminated.hasOwnProperty('containerID')) { - delete clonePodStatus.terminated.containerID - } - logger.debug('getClonePodStatus %s on kubernates successful', cloneName) - - return JSON.stringify(clonePodStatus, null, 2) - } else { - logger.warn('getClonePodStatus pod not found: %s', cloneName) - return " Clone not found on the server. " - } - } catch (err) { - logger.error('There was an error getting the pod status %s: ', err) - return "Status not available." - } -} -export default getClonePodStatus diff --git a/Deprecated-Code/OperationsModule/server/src/kubernetes/kubeConfig.js b/Deprecated-Code/OperationsModule/server/src/kubernetes/kubeConfig.js deleted file mode 100644 index ccc14d9b6..000000000 --- a/Deprecated-Code/OperationsModule/server/src/kubernetes/kubeConfig.js +++ /dev/null @@ -1,49 +0,0 @@ -import logger from '../config/logger' - -const kubeConfig = () => { - - let clusterConfig = {} - clusterConfig.name = process.env.CLUSTER_NAME - let cluster = {} - cluster.server = process.env.CLUSTER_SERVER - if (process.env.CERTIFICATE_AUTHORITY_DATA) { - cluster['certificate-authority-data'] = process.env.CERTIFICATE_AUTHORITY_DATA - } - if (process.env.INSECURE_SKIP_TLS_VERIFY) { - cluster['insecure-skip-tls-verify'] = JSON.parse(process.env.INSECURE_SKIP_TLS_VERIFY) - } - clusterConfig.cluster = cluster - - let contextConfig = {} - contextConfig.name = process.env.CONTEXT_NAME - let context = {} - context.cluster = process.env.CLUSTER_NAME - context.user = process.env.USER_NAME - contextConfig.context = context - - let userConfig = {} - userConfig.name = process.env.USER_NAME - let user = {} - if (process.env.USER_PASSWORD) { - user.password = process.env.USER_PASSWORD - user.username = process.env.USER_NAME - } - if (process.env.CLIENT_CERTIFICATE_DATA) { - user['client-certificate-data'] = process.env.CLIENT_CERTIFICATE_DATA - user['client-key-data'] = process.env.CLIENT_KEY_DATA - } - userConfig.user = user - - const config = { - apiVersion: 'v1', - clusters: [clusterConfig], - contexts: [contextConfig], - 'current-context': process.env.CONTEXT_NAME, - kind: 'Config', - users: [userConfig] - } - - return config -} - -export default kubeConfig diff --git a/Deprecated-Code/OperationsModule/server/src/kubernetes/removeClone.js b/Deprecated-Code/OperationsModule/server/src/kubernetes/removeClone.js deleted file mode 100644 index e54a45884..000000000 --- a/Deprecated-Code/OperationsModule/server/src/kubernetes/removeClone.js +++ /dev/null @@ -1,29 +0,0 @@ -import logger from '../config/logger' -import { Client } from 'kubernetes-client' -import kubeconfig from './kubeConfig' - -const removeClone = async (cloneId) => { - try { - logger.debug('removeClone %s', cloneId) - - const Request = require('kubernetes-client/backends/request') - const backend = new Request(Request.config.fromKubeconfig(kubeconfig())) - const client = new Client({ backend, version: '1.9' }) - - let query = { - 'qs': { - 'labelSelector': 'job-name=' + cloneId - } - } - - await client.apis.batch.v1.namespaces('default').jobs(cloneId).delete() - - const pod = await client.api.v1.namespaces('default').pods.get(query) - await client.api.v1.namespaces('default').pods(pod.body.items[0].metadata.name).delete() - - logger.debug('removeClone %s on kubernates succesful', cloneId) - } catch (err) { - logger.warn('removeClone %s on kubernates failed, the job was not found on the server.', cloneId) - } -} -export default removeClone diff --git a/Deprecated-Code/OperationsModule/server/src/models/clone.js b/Deprecated-Code/OperationsModule/server/src/models/clone.js deleted file mode 100644 index 783769ea7..000000000 --- a/Deprecated-Code/OperationsModule/server/src/models/clone.js +++ /dev/null @@ -1,65 +0,0 @@ -import mongoose, { Schema } from 'mongoose' - -import { - UNPUBLISHED, - CloneStateEnum -} from '../enums/CloneState' - -import { - BACKTEST, - CloneModeEnum -} from '../enums/CloneMode' - -const cloneSchema = new Schema({ - authId: { - type: String, - required: true - }, - teamId: { - type: String, - required: true - }, - botId: { - type: String, - required: true - }, - keyId: String, - mode: { - type: String, - enum: CloneModeEnum, - default: BACKTEST - }, - resumeExecution: Boolean, - beginDatetime: Number, - endDatetime: Number, - waitTime: Number, - state: { - type: String, - enum: CloneStateEnum, - default: UNPUBLISHED - }, - stateDatetime: Number, - createDatetime: Number, - active: Boolean, - summaryDate: Number, - buyAverage: Number, - sellAverage: Number, - marketRate: Number, - combinedProfitsA: Number, - combinedProfitsB: Number, - assetA: String, - assetB: String, - processName: { - type: String, - required: true - }, - exchangeName: String, - timePeriod: String, - balanceAssetA: Number, - balanceAssetB: Number - -}) - -const Clone = mongoose.model('Clone', cloneSchema) - -export default Clone diff --git a/Deprecated-Code/OperationsModule/server/src/models/index.js b/Deprecated-Code/OperationsModule/server/src/models/index.js deleted file mode 100644 index 288fb0f47..000000000 --- a/Deprecated-Code/OperationsModule/server/src/models/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Clone from './clone' - -export { - Clone -} diff --git a/Deprecated-Code/OperationsModule/server/src/schema/cloneDetails.js b/Deprecated-Code/OperationsModule/server/src/schema/cloneDetails.js deleted file mode 100644 index afee56903..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/cloneDetails.js +++ /dev/null @@ -1,17 +0,0 @@ -const cloneDetails = (selectedBot, clone) => { - if (selectedBot !== undefined) { - clone.botId = selectedBot.id - clone.kind = selectedBot.kind - clone.botName = selectedBot.name - clone.botSlug = selectedBot.slug - clone.botAvatar = selectedBot.avatar - clone.teamId = selectedBot.team.id - clone.teamName = selectedBot.team.name - clone.teamSlug = selectedBot.team.slug - clone.teamAvatar = selectedBot.team.profile.avatar - clone.botType = selectedBot.kind - } - return clone -} - -export default cloneDetails diff --git a/Deprecated-Code/OperationsModule/server/src/schema/index.js b/Deprecated-Code/OperationsModule/server/src/schema/index.js deleted file mode 100644 index fe0cc23fd..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import { GraphQLSchema } from 'graphql' -import Mutation from './mutations' -import RootQuery from './queries' - -const Schema = new GraphQLSchema({ - query: RootQuery, - mutation: Mutation -}) - -export default Schema diff --git a/Deprecated-Code/OperationsModule/server/src/schema/mutations/AddCloneMutation.js b/Deprecated-Code/OperationsModule/server/src/schema/mutations/AddCloneMutation.js deleted file mode 100644 index 1cf7d4abb..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/mutations/AddCloneMutation.js +++ /dev/null @@ -1,150 +0,0 @@ -import { CloneInputType } from '../types/input' -import { CloneType } from '../types' -import { Clone } from '../../models' -import { BotTypesEnum } from '../../enums/BotTypes' -import teamQuery from '../../graphQLCalls/teamQuery' -import authorizeKey from '../../graphQLCalls/authorizeKey' -import addBotMutation from '../../graphQLCalls/addBotMutation' -import cloneDetails from '../cloneDetails' -import { - AuthenticationError, - WrongArgumentsError, - OperationsError, - AuthorizationError -} from '../../errors' -import logger from '../../config/logger' -import createKubernetesClone from '../../kubernetes/createClone' -import { isDefined } from '../../config/utils' -import { CloneModeEnum, LIVE, COMPETITION, BACKTEST } from '../../enums/CloneMode' -import { Trading } from '../../enums/BotTypes' - -const args = { - clone: { type: CloneInputType } -} - -const resolve = async (parent, { clone }, context) => { - logger.debug('addClone -> Entering Fuction.') - - if (!context.userId) { - throw new AuthenticationError() - } else { - clone.authorization = context.authorization - } - - if (!Object.values(CloneModeEnum).includes(clone.mode)) { - throw new WrongArgumentsError('The mode selected is not valid.') - } - - if (!Object.values(BotTypesEnum).includes(clone.botType)) { - throw new WrongArgumentsError('The bot type selected is not valid.') - } - - if ((clone.mode === LIVE || clone.mode === COMPETITION) && !isDefined(clone.keyId)) { - throw new WrongArgumentsError('The key was not provided to run the clone.') - } - - let allUserBotsResponse = await teamQuery(context.authorization, clone.botId) - let bot = allUserBotsResponse.data.data.teams_FbByOwner.edges[0].node - clone = cloneDetails(bot, clone) - clone.createDatetime = new Date().valueOf() / 1000 | 0 - clone.active = true - - // TODO Temporary Limitations on bot creation - if (clone.accessCode !== undefined && clone.accessCode.length > 0) { - if (clone.accessCode === process.env.ACCESS_CODE) { - if (clone.baseAsset === 'assetB') { - clone.balanceAssetA = 0 - clone.balanceAssetB = clone.balanceBaseAsset - } else if (clone.baseAsset === 'assetA') { - clone.balanceAssetA = clone.balanceBaseAsset - clone.balanceAssetB = 0 - } else { - throw new Error('Invalid base asset.') - } - } else { - throw new Error('Invalid access code.') - } - } else { - if (clone.baseAsset === 'assetB') { - clone.balanceAssetA = 0 - clone.balanceAssetB = Number(process.env.DEFAULT_BALANCE_ASSET_B) - } else if (clone.baseAsset === 'assetA') { - clone.balanceAssetA = Number(process.env.DEFAULT_BALANCE_ASSET_A) - clone.balanceAssetB = 0 - } else { - throw new Error('Invalid base asset.') - } - } - - if (!(clone.teamSlug === "AAMasters" || clone.teamSlug === "AAVikings")) { - let clones = await Clone.find({ - authId: context.userId, - active: true - }) - - if (clones !== undefined && clones.length >= 5) { - throw new Error('Currently maximum number of clones per user is 5. You can delete an existing clone and try again.') - } - } - // END temporary limitations - try { - let newClone = new Clone(clone) - newClone.authId = context.userId - clone.id = newClone._id - - logger.debug('addClone -> Creating the clone on the Database.') - let savedClone = await newClone.save() - - if (clone.mode === LIVE || clone.mode === COMPETITION) { - logger.debug('addClone -> Authorizing clone to use the key.') - - let keyResponse = await authorizeKey(context.authorization, clone.keyId, clone.id, false) - if (isDefined(keyResponse.data.data.keyVault_AuthorizeClone)) { - clone.accessTokenKey = keyResponse.data.data.keyVault_AuthorizeClone - } else { - logger.error('addClone -> Authorizing clone to use the key fail.') - throw new AuthorizationError() - } - } - - await createKubernetesClone(clone) - - if (clone.botType === Trading) { - let productCodeName - if (clone.mode === LIVE) { - productCodeName = 'Live Trading History' - } - if (clone.mode === COMPETITION) { - productCodeName = 'Competition Trading History' - } - if (clone.mode === BACKTEST) { - productCodeName = 'Backtest Trading History' - } - - let newEcosystemBot = { - devTeam: clone.teamSlug, - codeName: clone.botSlug, - cloneId: clone.id, - productCodeName - } - - await addBotMutation(context.authorization, newEcosystemBot) - } - - logger.debug('addClone -> Clone created sucessfully.') - return savedClone - } catch (err) { - logger.error('addClone -> Error: %s', err.stack) - throw new OperationsError('There has been an error creating the clone.') - } -} - -const AddCloneMutation = { - addClone: { - type: CloneType, - args, - resolve - } -} - -export default AddCloneMutation diff --git a/Deprecated-Code/OperationsModule/server/src/schema/mutations/RemoveCloneMutation.js b/Deprecated-Code/OperationsModule/server/src/schema/mutations/RemoveCloneMutation.js deleted file mode 100644 index 38813d3eb..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/mutations/RemoveCloneMutation.js +++ /dev/null @@ -1,77 +0,0 @@ -import { GraphQLNonNull, GraphQLID, GraphQLString } from 'graphql' -import { AuthenticationError, OperationsError } from '../../errors' -import { Clone } from '../../models' -import logger from '../../config/logger' -import removeKuberneteClone from '../../kubernetes/removeClone' -import teamQuery from '../../graphQLCalls/teamQuery' -import { isDefined } from '../../config/utils' -import cloneDetails from '../cloneDetails' -import authorizeKey from '../../graphQLCalls/authorizeKey' -import { LIVE, COMPETITION, BACKTEST } from '../../enums/CloneMode' -import { Trading } from '../../enums/BotTypes' -import removeBotMutation from '../../graphQLCalls/removeBotMutation' - -const args = { id: { type: new GraphQLNonNull(GraphQLID) } } - -const resolve = async (parent, { id }, context) => { - logger.debug('removeClone -> Entering Fuction.') - - if (!context.userId) { - throw new AuthenticationError() - } - try { - let clone = await Clone.findOne({ - _id: id, - authId: context.userId, - active: true - }) - - if (!isDefined(clone)) { - throw new OperationsError('You are not authorized to remove this clone.') - } - - let allUserBotsResponse = await teamQuery(context.authorization, clone.botId) - let bot = allUserBotsResponse.data.data.teams_FbByOwner.edges[0].node - clone = cloneDetails(bot, clone) - - if ((clone.mode === LIVE || clone.mode === COMPETITION) && isDefined(clone.keyId)) { - logger.debug('removeClone -> Release the clone key.') - await authorizeKey(context.authorization, clone.keyId, clone.id, true) - } - - logger.debug('removeClone -> Removing Clone from Kubernates.') - await removeKuberneteClone(clone.id) - - const query = { - _id: id, - authId: context.userId - } - const options = { new: true } - const update = { active: false } - - return new Promise((res, rej) => { - Clone.findOneAndUpdate(query, update, options, (err, doc) => { - if (err) { - logger.error('removeClone -> Error removing clone from the DB. %s', err.stack) - rej(err) - return - } - logger.debug('removeClone -> Clone Removed from the DB.') - res('Clone Removed.') - }) - }) - } catch (error) { - logger.error('Error removing the clone. %s', error.stack) - throw new OperationsError(error.message) - } -} - -const RemoveCloneMutation = { - removeClone: { - type: GraphQLString, - args, - resolve - } -} - -export default RemoveCloneMutation diff --git a/Deprecated-Code/OperationsModule/server/src/schema/mutations/RunSimulation.js b/Deprecated-Code/OperationsModule/server/src/schema/mutations/RunSimulation.js deleted file mode 100644 index 27639308f..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/mutations/RunSimulation.js +++ /dev/null @@ -1,140 +0,0 @@ -import { GraphQLString } from 'graphql' -import { SimulationInputType } from '../types/input' -import removeKuberneteClone from '../../kubernetes/removeClone' -import { Clone } from '../../models' -import { Indicator } from '../../enums/BotTypes' -import { DateTime } from 'luxon' -import teamQuery from '../../graphQLCalls/teamQuery' -import cloneDetails from '../cloneDetails' -import { - AuthenticationError, - OperationsError -} from '../../errors' -import logger from '../../config/logger' -import createKubernetesClone from '../../kubernetes/createClone' - -const args = { - simulation: { type: SimulationInputType } -} - -const resolve = async (parent, { simulation }, context) => { - logger.debug('runSimulation -> Entering Fuction.') - - if (!context.userId) { - throw new AuthenticationError() - } - - try { - // Find all running clones - let clones = await Clone.find({ - authId: context.userId, - active: true - }).sort({ createDatetime: -1 }) - - // Find all user bots - let allUserBotsResponse = await teamQuery(context.authorization, null) - let allUserBots = allUserBotsResponse.data.data.teams_FbByOwner.edges - let simulatorBot - - // Identify clones to stop, if any - for (var j = 0; j < allUserBots.length; j++) { - let bot = allUserBots[j].node - if (bot.kind === Indicator && bot.slug.substring(0, 10) === "simulator-") { - simulatorBot = bot // TODO One simulator per user - for (var i = 0; i < clones.length; i++) { - if (clones[i].botId === bot.id) { - if ((simulation.timePeriodDailyArray !== undefined && clones[i].processName === "Multi-Period-Daily") || - (simulation.timePeriodMarketArray !== undefined && clones[i].processName === "Multi-Period-Market") || - (simulation.timePeriodDailyArray === undefined && simulation.timePeriodMarketArray === undefined)) { - - logger.debug('runSimulation -> Stop running clones.') - - await removeKuberneteClone(clones[i]._id) - logger.debug('runSimulation -> Clone Removed from Kubernetes: %s.', clones[i]._id) - - let clone = await Clone.findOneAndUpdate({ _id: clones[i]._id, authId: context.userId }, { active: false }, { new: true }) - - if (!clone) throw new Error('Clone Not Found.') - logger.debug('runSimulation -> Clone Removed from the DB.') - } - } - } - } - } - - if (simulation.beginDatetime === undefined) { - simulation.beginDatetime = DateTime.utc().minus({ days: 7 }).startOf('day') - } - - if (simulation.resumeExecution === undefined) { - simulation.resumeExecution = false - } - - if (simulatorBot !== undefined) { - if (simulation.timePeriodDailyArray !== undefined && simulation.timePeriodDailyArray.length > 0) { - simulation.timePeriod = simulation.timePeriodDailyArray - await createSimulatorClone(simulation, "Multi-Period-Daily", context.userId, simulatorBot, context.authorization) - } - - if (simulation.timePeriodMarketArray !== undefined && simulation.timePeriodMarketArray.length > 0) { - simulation.timePeriod = simulation.timePeriodMarketArray - await createSimulatorClone(simulation, "Multi-Period-Market", context.userId, simulatorBot, context.authorization) - } - - if (simulation.timePeriodDailyArray === undefined && simulation.timePeriodMarketArray === undefined) { - simulation.timePeriod = ["15-min", "10-min", "05-min"] - await createSimulatorClone(simulation, "Multi-Period-Daily", context.userId, simulatorBot, context.authorization) - - simulation.timePeriod = ["24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs"] - await createSimulatorClone(simulation, "Multi-Period-Market", context.userId, simulatorBot, context.authorization) - } - - return "Simulation Clones Recreated." - } else { - return "The user doesn't have any simulator bot." - } - } catch (err) { - logger.error('runSimulation -> Error: %s', err.stack) - throw new OperationsError('There has been an error creating the clones.') - } -} - -async function createSimulatorClone(simulation, processName, userId, simulatorBot, authorization) { - let clone = { - teamId: simulatorBot.team.id, - botId: simulatorBot.id, - mode: "noTime", - kind: "Indicator", - botSlug: simulatorBot.slug, - resumeExecution: simulation.resumeExecution, - exchangeName: "Poloniex", // TODO pending enable multiple exchange - beginDatetime: simulation.beginDatetime, - processName: processName, - createDatetime: new Date().valueOf() / 1000 | 0, - active: true, - authId: userId, - timePeriod: simulation.timePeriod.toString(), - authorization: authorization - } - - let newClone = new Clone(clone) - clone.id = newClone._id - - logger.debug('runSimulation -> Creating %s clone on the Database.', processName) - await newClone.save() - - clone = cloneDetails(simulatorBot, clone) - await createKubernetesClone(clone) - - logger.debug('runSimulation -> %s clone created.', processName) -} - -const RunSimulationMutation = { - runSimulation: { - type: GraphQLString, - args, - resolve - } -} - -export default RunSimulationMutation diff --git a/Deprecated-Code/OperationsModule/server/src/schema/mutations/UpdateExecutionSummary.js b/Deprecated-Code/OperationsModule/server/src/schema/mutations/UpdateExecutionSummary.js deleted file mode 100644 index 28b32a054..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/mutations/UpdateExecutionSummary.js +++ /dev/null @@ -1,91 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, - GraphQLString, - GraphQLInt, - GraphQLFloat -} from 'graphql' -import { OperationsError, AuthorizationError, AuthenticationError } from '../../errors' -import { Clone } from '../../models' -import logger from '../../config/logger' -import { isDefined } from '../../config/utils' - -const args = { - id: { type: new GraphQLNonNull(GraphQLID) }, - summaryDate: { type: GraphQLInt }, - buyAverage: { type: GraphQLFloat }, - sellAverage: { type: GraphQLFloat }, - marketRate: { type: GraphQLFloat }, - combinedProfitsA: { type: GraphQLFloat }, - combinedProfitsB: { type: GraphQLFloat }, - assetA: { type: GraphQLString }, - assetB: { type: GraphQLString } -} - -const resolve = async (parent, - { id, summaryDate, buyAverage, sellAverage, marketRate, combinedProfitsA, - combinedProfitsB, assetA, assetB - }, context) => { - logger.debug('UpdateExecutionSummary -> Entering Function.') - - if (!context.userId) { - throw new AuthenticationError() - } - - if (!(context.userId === process.env.AACLOUD_ID)) { - logger.debug('User %s is not authorized to manage team %s.', authId, team.slug) - throw new AuthorizationError() - } - - try { - let clone = await Clone.findOne({ - _id: id, - active: true - }) - - if (!isDefined(clone)) { - return 'Clone not found.' - } - - const query = { _id: id } - const options = { new: true } - const update = { - summaryDate: summaryDate, - buyAverage: buyAverage, - sellAverage: sellAverage, - marketRate: marketRate, - combinedProfitsA: combinedProfitsA, - combinedProfitsB: combinedProfitsB, - assetA: assetA, - assetB: assetB - } - - logger.debug('UpdateExecutionSummary -> Updating clone on database.') - - return new Promise((res, rej) => { - Clone.update(query, update, options, (err, clone) => { - if (err) { - logger.error('Error updating execution summary on the database. %s', err.stack) - rej(err) - return - } - logger.debug('Execution summary updated.') - res('Execution summary updated.') - }) - }) - - } catch (error) { - logger.error('Error updating the execution summary. %s', error.stack) - throw new OperationsError(error.message) - } -} - -const UpdateExecutionSummary = { - updateExecutionSummary: { - type: GraphQLString, - args, - resolve - } -} - -export default UpdateExecutionSummary diff --git a/Deprecated-Code/OperationsModule/server/src/schema/mutations/index.js b/Deprecated-Code/OperationsModule/server/src/schema/mutations/index.js deleted file mode 100644 index 2b85823a6..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/mutations/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import { GraphQLObjectType } from 'graphql' -import AddCloneMutation from './AddCloneMutation' -import RemoveCloneMutation from './RemoveCloneMutation' -import UpdateExecutionSummary from './UpdateExecutionSummary' -import RunSimulation from './RunSimulation' - -const Mutation = new GraphQLObjectType({ - name: 'Mutation', - fields: Object.assign( - AddCloneMutation, - RemoveCloneMutation, - UpdateExecutionSummary, - RunSimulation - ) -}) - -export default Mutation diff --git a/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClone.js b/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClone.js deleted file mode 100644 index c449e3084..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClone.js +++ /dev/null @@ -1,49 +0,0 @@ -import { GraphQLNonNull, GraphQLID } from 'graphql' -import { OperationsError } from '../../errors' -import { GetClonesType } from '../types' -import { Clone } from '../../models' -import logger from '../../config/logger' -import mongoose from 'mongoose' -import { isDefined } from '../../config/utils' - -const args = { - cloneId: { type: new GraphQLNonNull(GraphQLID) } -} - -const resolve = async(parent, { cloneId }, context) => { - logger.debug('Get Clone -> Entering Fuction.') - - try { - if (mongoose.Types.ObjectId.isValid(cloneId)) { - let existingClone = await Clone.findOne({ - _id: cloneId - }) - - if (isDefined(existingClone)) { - return { - id: cloneId, - teamId: existingClone.teamId, - botId: existingClone.botId - } - } else { - throw new Error('Clone not found.') - } - } else { - throw new Error('Invalid Clone ID.') - } - return clones - } catch (err) { - logger.error('Get Clone error: %s', err.stack) - throw new OperationsError('There has been an error getting the clone. ' + err.message) - } -} - -const GetClones = { - getClone: { - type: GetClonesType, - args, - resolve - } -} - -export default GetClones diff --git a/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClones.js b/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClones.js deleted file mode 100644 index 0c6616d90..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/queries/GetClones.js +++ /dev/null @@ -1,56 +0,0 @@ -import { GraphQLList, GraphQLID } from 'graphql' -import { OperationsError } from '../../errors' -import { GetClonesType } from '../types' -import { Clone } from '../../models' -import logger from '../../config/logger' -import mongoose from 'mongoose' -import { isDefined } from '../../config/utils' - -const args = { - cloneIdList: { type: new GraphQLList(GraphQLID) } -} - -const resolve = async(parent, { cloneIdList }, context) => { - logger.debug('Get Clones -> Entering Fuction.') - try { - let clones = [] - for (var i = 0; i < cloneIdList.length; i++) { - if (mongoose.Types.ObjectId.isValid(cloneIdList[i])) { - let existingClone = await Clone.findOne({ - _id: cloneIdList[i] - }) - - if (isDefined(existingClone)) { - clones.push({ - id: cloneIdList[i], - teamId: existingClone.teamId, - botId: existingClone.botId - }) - } else { - clones.push({ - id: cloneIdList[i] - }) - } - } else { - clones.push({ - id: cloneIdList[i] - }) - } - } - - return clones - } catch (err) { - logger.error('Get Clones error: %s', err.stack) - throw new OperationsError('There has been an error getting the clones.') - } -} - -const GetClones = { - getClones: { - type: new GraphQLList(GetClonesType), - args, - resolve - } -} - -export default GetClones diff --git a/Deprecated-Code/OperationsModule/server/src/schema/queries/HistoryClones.js b/Deprecated-Code/OperationsModule/server/src/schema/queries/HistoryClones.js deleted file mode 100644 index 4ea4e7b9b..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/queries/HistoryClones.js +++ /dev/null @@ -1,60 +0,0 @@ -import { GraphQLList, GraphQLString } from 'graphql' -import { AuthenticationError, OperationsError } from '../../errors' -import { CloneType } from '../types' -import { Clone } from '../../models' -import logger from '../../config/logger' -import cloneDetails from '../cloneDetails' -import teamQuery from '../../graphQLCalls/teamQuery' - -const args = { - botType: { type: GraphQLString } -} - -const resolve = async(parent, { botType }, context) => { - logger.debug('Retrieving History Clones.') - try { - if (!context.userId) { - throw new AuthenticationError() - } - - let clones = await Clone.find({ - authId: context.userId, - active: false - }).sort({createDatetime: -1}) - - let cloneResponse = [] - let allUserBotsResponse = await teamQuery(context.authorization, null) - let allUserBots = allUserBotsResponse.data.data.teams_FbByOwner.edges - - for (var i = 0; i < clones.length; i++) { - for (var j = 0; j < allUserBots.length; j++) { - let bot = allUserBots[j].node - if(clones[i].botId === bot.id){ - let clone = cloneDetails(bot, clones[i]) - cloneResponse.push(clone) - break - } - } - } - - if (botType) { - var filtered = cloneResponse.filter((value) => value.botType === botType) - return filtered - } else { - return cloneResponse - } - } catch (err) { - logger.error('Retrieving History Clones error: %s', err.stack) - throw new OperationsError('There has been an error retrieving history clones.') - } -} - -const HistoryClones = { - historyClones: { - type: new GraphQLList(CloneType), - args, - resolve - } -} - -export default HistoryClones diff --git a/Deprecated-Code/OperationsModule/server/src/schema/queries/ListClones.js b/Deprecated-Code/OperationsModule/server/src/schema/queries/ListClones.js deleted file mode 100644 index 2e1da2f0b..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/queries/ListClones.js +++ /dev/null @@ -1,72 +0,0 @@ -import { GraphQLList, GraphQLString, GraphQLBoolean } from 'graphql' -import { AuthenticationError, OperationsError } from '../../errors' -import { CloneType } from '../types' -import { Clone } from '../../models' -import logger from '../../config/logger' -import getCloneStatus from '../../kubernetes/getClonePodStatus' -import getCloneLogs from '../../kubernetes/getClonePodLogs' -import cloneDetails from '../cloneDetails' -import teamQuery from '../../graphQLCalls/teamQuery' - -const args = { - botType: { type: GraphQLString }, - queryLogs: { type: GraphQLBoolean } -} - -const resolve = async (parent, { botType, queryLogs }, context) => { - logger.debug('List Clones -> Entering Fuction.') - try { - if (!context.userId) { - throw new AuthenticationError() - } - - let clones = await Clone.find({ - authId: context.userId, - active: true - }).sort({ createDatetime: -1 }) - - let cloneResponse = [] - let allUserBotsResponse = await teamQuery(context.authorization, null) - let allUserBots = allUserBotsResponse.data.data.teams_FbByOwner.edges - - for (var i = 0; i < clones.length; i++) { - for (var j = 0; j < allUserBots.length; j++) { - let bot = allUserBots[j].node - if(clones[i].botId === bot.id){ - let clone = cloneDetails(bot, clones[i]) - cloneResponse.push(clone) - break - } - } - } - - if (queryLogs) { - for (var i = 0; i < cloneResponse.length; i++) { - let state = await getCloneStatus(cloneResponse[i].id) - cloneResponse[i].state = state.substring(1, state.length - 1) - - let lastLogs = await getCloneLogs(cloneResponse[i].id) - cloneResponse[i].lastLogs = lastLogs.substring(1, lastLogs.length - 1) - } - } - if (botType) { - var filtered = cloneResponse.filter((value) => value.botType === botType) - return filtered - } else { - return cloneResponse - } - } catch (err) { - logger.error('List Clones error: %s', err.stack) - throw new OperationsError('There has been an error listing the clones.') - } -} - -const ListClones = { - clones: { - type: new GraphQLList(CloneType), - args, - resolve - } -} - -export default ListClones diff --git a/Deprecated-Code/OperationsModule/server/src/schema/queries/index.js b/Deprecated-Code/OperationsModule/server/src/schema/queries/index.js deleted file mode 100644 index ac8c69673..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/queries/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import { GraphQLObjectType } from 'graphql' -import ListClones from './ListClones' -import HistoryClones from './HistoryClones' -import GetClones from './GetClones' -import GetClone from './GetClone' - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: Object.assign( - ListClones, - HistoryClones, - GetClones, - GetClone - ) -}) - -export default RootQuery diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/CloneType.js b/Deprecated-Code/OperationsModule/server/src/schema/types/CloneType.js deleted file mode 100644 index 9a683a09a..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/CloneType.js +++ /dev/null @@ -1,48 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLInt, - GraphQLBoolean, - GraphQLID, - GraphQLFloat -} from 'graphql' - -const CloneType = new GraphQLObjectType({ - name: 'Clone', - fields: () => ({ - id: {type: GraphQLID}, - authId: {type: GraphQLID}, - teamId: {type: GraphQLString}, - botId: {type: GraphQLString}, - mode: {type: GraphQLString}, - resumeExecution: {type: GraphQLBoolean}, - beginDatetime: {type: GraphQLInt}, - endDatetime: {type: GraphQLInt}, - waitTime: {type: GraphQLInt}, - state: {type: GraphQLString}, - stateDatetime: {type: GraphQLInt}, - createDatetime: {type: GraphQLInt}, - lastLogs: {type: GraphQLString}, - processName: { type: GraphQLString }, - summaryDate: {type: GraphQLInt}, - buyAverage: {type: GraphQLFloat}, - sellAverage: {type: GraphQLFloat}, - marketRate: {type: GraphQLFloat}, - combinedProfitsA: {type: GraphQLFloat}, - combinedProfitsB: {type: GraphQLFloat}, - assetA: {type: GraphQLString}, - assetB: {type: GraphQLString}, - botType: {type: GraphQLString}, - teamName: {type: GraphQLString}, - botName: {type: GraphQLString}, - botAvatar: {type: GraphQLString}, - teamAvatar: {type: GraphQLString}, - keyId: {type: GraphQLString}, - botSlug: {type: GraphQLString}, - exchangeName:{type: GraphQLString}, - timePeriod:{type: GraphQLString}, - balanceAssetA:{type: GraphQLFloat}, - balanceAssetB:{type: GraphQLFloat}, - }) -}) -export default CloneType diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/GetClonesType.js b/Deprecated-Code/OperationsModule/server/src/schema/types/GetClonesType.js deleted file mode 100644 index df24d0502..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/GetClonesType.js +++ /dev/null @@ -1,11 +0,0 @@ -import { GraphQLObjectType, GraphQLID } from 'graphql' - -const GetClonesType = new GraphQLObjectType({ - name: 'GetClones', - fields: () => ({ - id: {type: GraphQLID}, - teamId: {type: GraphQLID}, - botId: {type: GraphQLID} - }) -}) -export default GetClonesType diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/index.js b/Deprecated-Code/OperationsModule/server/src/schema/types/index.js deleted file mode 100644 index 189212b48..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import CloneType from './CloneType' -import GetClonesType from './GetClonesType' - -export { - CloneType, - GetClonesType -} diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/input/Clone.js b/Deprecated-Code/OperationsModule/server/src/schema/types/input/Clone.js deleted file mode 100644 index 2be02a3b3..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/input/Clone.js +++ /dev/null @@ -1,37 +0,0 @@ -import { - GraphQLString, - GraphQLInt, - GraphQLInputObjectType, - GraphQLBoolean, - GraphQLNonNull, - GraphQLFloat -} from 'graphql' - -const Type = new GraphQLInputObjectType({ - name: 'CloneInput', - description: 'Payload for clone input', - fields: () => ({ - teamId: { type: new GraphQLNonNull(GraphQLString) }, - botId: { type: new GraphQLNonNull(GraphQLString) }, - mode: { type: GraphQLString }, - resumeExecution: { type: GraphQLBoolean }, - beginDatetime: { type: GraphQLInt }, - endDatetime: { type: GraphQLInt }, - waitTime: { type: GraphQLInt }, - startYear: { type: GraphQLInt }, - endYear: { type: GraphQLInt }, - month: { type: GraphQLInt }, - interval: { type: GraphQLInt }, - processName: { type: new GraphQLNonNull(GraphQLString) }, - botType: { type: new GraphQLNonNull(GraphQLString) }, - keyId: { type: GraphQLString }, - timePeriod: { type: GraphQLString }, - exchangeName: { type: GraphQLString }, - balanceBaseAsset: { type: GraphQLFloat }, - market: { type: GraphQLString }, - baseAsset: { type: GraphQLString }, - accessCode: { type: GraphQLString } - }) -}) - -export default Type diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/input/Simulation.js b/Deprecated-Code/OperationsModule/server/src/schema/types/input/Simulation.js deleted file mode 100644 index 26ef2a11f..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/input/Simulation.js +++ /dev/null @@ -1,20 +0,0 @@ -import { - GraphQLString, - GraphQLInt, - GraphQLInputObjectType, - GraphQLNonNull, - GraphQLList, - GraphQLBoolean -} from 'graphql' - -const Type = new GraphQLInputObjectType({ - name: 'SimulationInput', - fields: () => ({ - beginDatetime: { type: new GraphQLNonNull(GraphQLInt) }, - timePeriodDailyArray: { type: new GraphQLList(new GraphQLNonNull(GraphQLString)) }, - timePeriodMarketArray: { type: new GraphQLList(new GraphQLNonNull(GraphQLString)) }, - resumeExecution: { type: GraphQLBoolean } - }) -}) - -export default Type diff --git a/Deprecated-Code/OperationsModule/server/src/schema/types/input/index.js b/Deprecated-Code/OperationsModule/server/src/schema/types/input/index.js deleted file mode 100644 index 08e467348..000000000 --- a/Deprecated-Code/OperationsModule/server/src/schema/types/input/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import CloneInputType from './Clone' -import SimulationInputType from './Simulation' - -export { - CloneInputType, - SimulationInputType -} diff --git a/Deprecated-Code/OperationsModule/test/activeCloneListDemo.js b/Deprecated-Code/OperationsModule/test/activeCloneListDemo.js deleted file mode 100644 index d87c6c89e..000000000 --- a/Deprecated-Code/OperationsModule/test/activeCloneListDemo.js +++ /dev/null @@ -1,374 +0,0 @@ - -exports.activeCloneList = function (exchangeName) { - var activeCloneList = [] - - if(exchangeName === "Coss" && false){ - // Charly Live-Trades - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqkwdd005d0737j715vdd7', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Sensor', - 'exchangeName': 'Coss', - 'processName': 'Live-Trades', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Charly Hole-Fixing - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqkwdd005d0737j715vdd7', - 'mode': 'allMonths', - 'resumeExecution': true, - 'botType': 'Sensor', - 'exchangeName': 'Coss', - 'processName': 'Hole-Fixing', - 'startYear': 2019, - 'endYear': 2021, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Bruce Single-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqma3n005l0737us5ss1t8', - 'mode': 'allMonths', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Single-Period-Daily', - 'startYear': 2019, - 'endYear': 2021, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Olivia Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr98f3005q07376vx9dbmv', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Olivia Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr98f3005q07376vx9dbmv', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AATom Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr9mpd005v0737bcsixkv0', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AATom Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr9mpd005v0737bcsixkv0', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Chris Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumra2fb00600737ycmz1anm', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Chris Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumra2fb00600737ycmz1anm', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AAPaula Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumrafn2006507377yaz7jri', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AAPaula Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumrafn2006507377yaz7jri', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Gauss Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumt5x3s00840737knglq0vu', - 'botId': 'cjumt5x41008a0737rad8n2eh', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Gauss Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumt5x3s00840737knglq0vu', - 'botId': 'cjumt5x41008a0737rad8n2eh', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Coss', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - - } else if(exchangeName === "Poloniex"){ - // Charly Live-Trades - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqkwdd005d0737j715vdd7', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Sensor', - 'exchangeName': 'Poloniex', - 'processName': 'Live-Trades', - 'startYear': 2019, - 'endYear': 2021, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Charly Hole-Fixing - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqkwdd005d0737j715vdd7', - 'mode': 'allMonths', - 'resumeExecution': true, - 'botType': 'Sensor', - 'exchangeName': 'Poloniex', - 'processName': 'Hole-Fixing', - 'startYear': 2019, - 'endYear': 2021, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Bruce Single-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumqma3n005l0737us5ss1t8', - 'mode': 'allMonths', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Single-Period-Daily', - 'startYear': 2019, - 'endYear': 2021, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Olivia Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr98f3005q07376vx9dbmv', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Olivia Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr98f3005q07376vx9dbmv', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AATom Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr9mpd005v0737bcsixkv0', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AATom Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumr9mpd005v0737bcsixkv0', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Chris Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumra2fb00600737ycmz1anm', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Chris Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumra2fb00600737ycmz1anm', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AAPaula Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumrafn2006507377yaz7jri', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // AAPaula Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumqkwd400570737f2poka9i', - 'botId': 'cjumrafn2006507377yaz7jri', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Gauss Multi-Period-Daily - activeCloneList.push({ - 'teamId': 'cjumt5x3s00840737knglq0vu', - 'botId': 'cjumt5x41008a0737rad8n2eh', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Daily', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - // Gauss Multi-Period-Market - activeCloneList.push({ - 'teamId': 'cjumt5x3s00840737knglq0vu', - 'botId': 'cjumt5x41008a0737rad8n2eh', - 'mode': 'noTime', - 'resumeExecution': true, - 'botType': 'Indicator', - 'exchangeName': 'Poloniex', - 'processName': 'Multi-Period-Market', - 'startYear': 2019, - 'endYear': 2019, - 'month': 1, - 'beginDatetime': 1553641200 - }) - } - return activeCloneList -} diff --git a/Deprecated-Code/OperationsModule/test/cloneAdminTest.js b/Deprecated-Code/OperationsModule/test/cloneAdminTest.js deleted file mode 100644 index 777c5475f..000000000 --- a/Deprecated-Code/OperationsModule/test/cloneAdminTest.js +++ /dev/null @@ -1,180 +0,0 @@ -var assert = require('chai').assert -const axios = require('axios') -const { activeCloneList } = require('./activeCloneList') -require('dotenv').config() -var cloneList = activeCloneList("Poloniex") - -describe('Admin clones Clones', function () { - it('Remove clones', async function () { - this.timeout(300000) - var clones = await getClones() - for (let clone of clones) { - await removeClone(clone.id, clone.botName) - } - assert.isOk('everything', 'everything is ok') - }) - // it('Add COSS Live Indicator Clones', async function () { - // this.timeout(1000000) - // var error - // var clones = activeCloneList("Coss") - // try { - // for (let clone of clones) { - // await createClone(clone) - // } - // } catch (err) { - // console.log('Error: ' + err) - // error = err - // } - // assert.equal(error, undefined) - // }) - // it('Add POLONIEX Live Indicator Clones', async function () { - // this.timeout(1000000) - // var error - // var clones = activeCloneList("Poloniex") - // try { - // for (let clone of clones) { - // await createClone(clone) - // } - // } catch (err) { - // console.log('Error: ' + err) - // error = err - // } - // assert.equal(error, undefined) - // }) - describe('Poloniex clones', function () { - it('Add Charly', async function () { - this.timeout(10000) - await createClone(cloneList[0]) - await createClone(cloneList[1]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Bruce', async function () { - this.timeout(10000) - await createClone(cloneList[2]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Olivia', async function () { - this.timeout(10000) - await createClone(cloneList[3]) - await createClone(cloneList[4]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Tom', async function () { - this.timeout(10000) - await createClone(cloneList[5]) - await createClone(cloneList[6]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Chris', async function () { - this.timeout(10000) - await createClone(cloneList[7]) - await createClone(cloneList[8]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Paula', async function () { - this.timeout(10000) - await createClone(cloneList[9]) - await createClone(cloneList[10]) - assert.isOk('everything', 'everything is ok') - }) - it('Add Gauss', async function () { - this.timeout(6000) - await createClone(cloneList[11]) - await createClone(cloneList[12]) - assert.isOk('everything', 'everything is ok') - }) - }) -}) - -async function getClones() { - try { - const clones = await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - query { - operations_Clones(queryLogs: false) { - id - botName - } - } - `, - }, - headers: { - authorization: 'Bearer ' + process.env.ACCESS_TOKEN - } - }) - - console.log('getClones ok ') - return clones.data.data.operations_Clones - } catch (error) { - console.log('getClones error: ' + error.response.data.errors[0]) - throw error - } -} - -async function removeClone(cloneId, botName) { - try { - await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation ($id: ID!){ - operations_RemoveClone( - id: $id - ) - } - `, - variables: { - id: cloneId - }, - }, - headers: { - authorization: 'Bearer ' + process.env.ACCESS_TOKEN - } - }) - - console.log('removeClone ok: ' + botName) - return true - } catch (error) { - console.log('removeClone error: ' + error.response.data.errors[0]) - throw error - } -} - -async function createClone(clone) { - try { - const clones = await axios({ - url: process.env.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation ($clone: operations_CloneInput){ - operations_AddClone( - clone: $clone - ) { - id - teamName - botName - processName - } - } - `, - variables: { - clone: clone - }, - }, - headers: { - authorization: 'Bearer ' + process.env.ACCESS_TOKEN - } - }) - - console.log('createClone id: ' + clones.data.data.operations_AddClone.id + ', botId: ' + clone.botId) - return clones.data.data.operations_AddClone - } catch (error) { - console.log('createClone error: ' + error.response.data.errors[0]) - throw error - } -} diff --git a/Deprecated-Code/PlotterBollingerBands/.gitattributes b/Deprecated-Code/PlotterBollingerBands/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/PlotterBollingerBands/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/PlotterBollingerBands/.gitignore b/Deprecated-Code/PlotterBollingerBands/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/PlotterBollingerBands/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/PlotterBollingerBands/BollingerBands.js b/Deprecated-Code/PlotterBollingerBands/BollingerBands.js deleted file mode 100644 index 3a5950ede..000000000 --- a/Deprecated-Code/PlotterBollingerBands/BollingerBands.js +++ /dev/null @@ -1,726 +0,0 @@ -function newMastersPlottersBollingerBandsBollingerBands() { - - const MODULE_NAME = "Bands Plotter"; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - currentBand: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let bands = []; // Here we keep the bands to be ploted every time the Draw() function is called by the AAWebPlatform. - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - - try { - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - let newMarketFile = marketFiles.getFile(pTimeFrame); - - if (newMarketFile !== undefined) { - - marketFile = newMarketFile; - recalculate(); - } - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - if (newFileCursor !== undefined) { - - fileCursor = newFileCursor; - recalculate(); - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Bands Changed", bands); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (fileCursor === undefined) { return; } // We need to wait - - if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - bands = []; - let lastBand - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getUTCFullYear() + '-' + pad(currentDate.getUTCMonth() + 1, 2) + '-' + pad(currentDate.getUTCDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let band = { - begin: undefined, - end: undefined, - movingAverage: undefined, - standardDeviation: undefined, - deviation: undefined - }; - - band.begin = dailyFile[i][0]; - band.end = dailyFile[i][1]; - band.movingAverage = dailyFile[i][2]; - band.standardDeviation = dailyFile[i][3]; - band.deviation = dailyFile[i][4]; - - if (lastBand !== undefined) { - if (lastBand.movingAverage > band.movingAverage) { band.direction = "Down" } - if (lastBand.movingAverage < band.movingAverage) { band.direction = "Up" } - if (lastBand.movingAverage === band.movingAverage) { band.direction = "Side" } - } - - lastBand = band - - if ( - (band.begin >= farLeftDate.valueOf() && band.end <= farRightDate.valueOf()) && - (band.begin >= coordinateSystem.min.x && band.end <= coordinateSystem.max.x) - ) { - - bands.push(band); - - if (datetime.valueOf() >= band.begin && datetime.valueOf() <= band.end) { - - thisObject.currentBand = band; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentBand); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by bands. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - if (bands.length > 0) { - - if (bands[0].begin > lowerEnd || bands[bands.length - 1].end < upperEnd) { - - setTimeout(recalculate, 2000); - } - } - - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - bands = []; - let lastBand - - for (let i = 0; i < marketFile.length; i++) { - - let band = { - begin: undefined, - end: undefined, - movingAverage: undefined, - standardDeviation: undefined, - deviation: undefined - }; - - band.begin = marketFile[i][0]; - band.end = marketFile[i][1]; - band.movingAverage = marketFile[i][2]; - band.standardDeviation = marketFile[i][3]; - band.deviation = marketFile[i][4]; - - if (lastBand !== undefined) { - if (lastBand.movingAverage > band.movingAverage) { band.direction = "Down" } - if (lastBand.movingAverage < band.movingAverage) { band.direction = "Up" } - if (lastBand.movingAverage === band.movingAverage) { band.direction = "Side" } - } - - lastBand = band - - if ( - (band.begin >= leftDate.valueOf() && band.end <= rightDate.valueOf()) && - (band.begin >= coordinateSystem.min.x && band.end <= coordinateSystem.max.x) - ) { - - bands.push(band); - - if (datetime.valueOf() >= band.begin && datetime.valueOf() <= band.end) { - - thisObject.currentBand = band; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentBand); - - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - let band; - let previousBand; - - if (bands.length > 0) { - - /* Now we calculate and plot the bands */ - - for (let i = 1; i < bands.length; i++) { - - band = bands[i]; - previousBand = bands[i - 1]; - - /* From here we draw the actual Bollinger Bands and lines it contains. */ - - let bandPoint1 = { - x: band.begin, - y: previousBand.movingAverage - previousBand.deviation - }; - - let bandPoint2 = { - x: band.begin, - y: previousBand.movingAverage + previousBand.deviation - }; - - let bandPoint3 = { - x: band.end, - y: band.movingAverage + band.deviation - }; - - let bandPoint4 = { - x: band.end, - y: band.movingAverage - band.deviation - }; - - let bandPoint5 = { - x: band.begin, - y: previousBand.movingAverage - }; - - let bandPoint6 = { - x: band.end, - y: band.movingAverage - }; - - bandPoint1 = coordinateSystem.transformThisPoint(bandPoint1); - bandPoint2 = coordinateSystem.transformThisPoint(bandPoint2); - bandPoint3 = coordinateSystem.transformThisPoint(bandPoint3); - bandPoint4 = coordinateSystem.transformThisPoint(bandPoint4); - bandPoint5 = coordinateSystem.transformThisPoint(bandPoint5); - bandPoint6 = coordinateSystem.transformThisPoint(bandPoint6); - - bandPoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint1, thisObject.container); - bandPoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint2, thisObject.container); - bandPoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint3, thisObject.container); - bandPoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint4, thisObject.container); - bandPoint5 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint5, thisObject.container); - bandPoint6 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(bandPoint6, thisObject.container); - - if (bandPoint2.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x || bandPoint1.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x) { - continue; - } - - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT) { - let diffA = bandPoint1.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - if (diffA > 0) { - bandPoint1.y = bandPoint1.y - diffA - bandPoint2.y = bandPoint2.y - diffA - bandPoint3.y = bandPoint3.y - diffA - bandPoint4.y = bandPoint4.y - diffA - bandPoint5.y = bandPoint5.y - diffA - bandPoint6.y = bandPoint6.y - diffA - } - - let diffB = bandPoint2.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - if (diffB < 0) { - bandPoint1.y = bandPoint1.y - diffB - bandPoint2.y = bandPoint2.y - diffB - bandPoint3.y = bandPoint3.y - diffB - bandPoint4.y = bandPoint4.y - diffB - bandPoint5.y = bandPoint5.y - diffB - bandPoint6.y = bandPoint6.y - diffB - } - } - - bandPoint1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint1); - bandPoint2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint2); - bandPoint3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint3); - bandPoint4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint4); - bandPoint5 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint5); - bandPoint6 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(bandPoint6); - - bandPoint1 = thisObject.fitFunction(bandPoint1); - bandPoint2 = thisObject.fitFunction(bandPoint2); - bandPoint3 = thisObject.fitFunction(bandPoint3); - bandPoint4 = thisObject.fitFunction(bandPoint4); - bandPoint5 = thisObject.fitFunction(bandPoint5); - bandPoint6 = thisObject.fitFunction(bandPoint6); - - /* First we are drawing a semi-transparent background */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(bandPoint1.x, bandPoint1.y); - browserCanvasContext.lineTo(bandPoint2.x, bandPoint2.y); - browserCanvasContext.lineTo(bandPoint3.x, bandPoint3.y); - browserCanvasContext.lineTo(bandPoint4.x, bandPoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 0.05)'; - - if (userPositionDate >= band.begin && userPositionDate <= band.end) { - /* highlight the current band */ - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.05)'; // Current band accroding to time - } - - if ( - bandPoint1.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.x + 150 - || - bandPoint1.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x - 150 - ) { - // we leave this bands without fill. - } else { - browserCanvasContext.fill(); - } - - - - - /* Next we are drawing the outter bands lines */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(bandPoint1.x, bandPoint1.y); - browserCanvasContext.lineTo(bandPoint4.x, bandPoint4.y); - browserCanvasContext.moveTo(bandPoint2.x, bandPoint2.y); - browserCanvasContext.lineTo(bandPoint3.x, bandPoint3.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; - - if (userPositionDate >= band.begin && userPositionDate <= band.end) { - - /* highlight the current band */ - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band accroding to time - - let currentBand = { - bodyWidth: bandPoint3.x - bandPoint2.x, - leftBodyHeight: bandPoint2.y - bandPoint1.y, - rightBodyHeight: bandPoint3.y - bandPoint4.y, - topDelta: bandPoint3.y - bandPoint2.y, - bottomDelta: bandPoint4.y - bandPoint1.y, - period: timeFrame, - innerBand: band - }; - - thisObject.container.eventHandler.raiseEvent("Current Record Changed", currentBand); - } - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - - - /* Finally we draw the moving average line */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(bandPoint5.x, bandPoint5.y); - browserCanvasContext.lineTo(bandPoint6.x, bandPoint6.y); - - browserCanvasContext.closePath(); - - if (bandPoint5.y > bandPoint6.y) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 1)'; - } - - if (userPositionDate >= band.begin && userPositionDate <= band.end) { - /* highlight the current band */ - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current band accroding to time - } - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - /* Contributing to Auto-Scale*/ - coordinateSystem.reportYValue(band.movingAverage + band.deviation) - coordinateSystem.reportYValue(band.movingAverage - band.deviation) - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - diff --git a/Deprecated-Code/PlotterBollingerBands/BollingerBandsPanel.js b/Deprecated-Code/PlotterBollingerBands/BollingerBandsPanel.js deleted file mode 100644 index 0cf50836d..000000000 --- a/Deprecated-Code/PlotterBollingerBands/BollingerBandsPanel.js +++ /dev/null @@ -1,220 +0,0 @@ - -function newMastersPlottersBollingerBandsBollingerBandsBollingerBandsPanel() { - - var thisObject = { - fitFunction: undefined, - onRecordChange: onRecordChange, - container: undefined, - isVisible: true, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - thisObject.container = newContainer(); - thisObject.container.initialize(); - thisObject.container.frame.containerName = "Bollinger Band"; - - let currentBand; - let upDownButton - - return thisObject; - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.isVisible = undefined - - currentBand = undefined - upDownButton.finalize() - upDownButton = undefined - } - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL; - - thisObject.container.frame.position.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 3; - thisObject.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(lastCurrentBand) { - - currentBand = lastCurrentBand; - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentBandInfo(); - - upDownButton.draw() - } - - - function plotCurrentBandInfo() { - - if (currentBand === undefined) { return; } - if (currentBand.innerBand === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - var bandPoint1 = { - x: X_AXIS - currentBand.bodyWidth / 2, - y: Y_AXIS - currentBand.leftBodyHeight / 2 - currentBand.bottomDelta / 4 - }; - - var bandPoint2 = { - x: X_AXIS - currentBand.bodyWidth / 2, - y: Y_AXIS + currentBand.leftBodyHeight / 2 - currentBand.topDelta / 4 - }; - - var bandPoint3 = { - x: X_AXIS + currentBand.bodyWidth / 2, - y: Y_AXIS + currentBand.rightBodyHeight / 2 + currentBand.topDelta / 4 - }; - - var bandPoint4 = { - x: X_AXIS + currentBand.bodyWidth / 2, - y: Y_AXIS - currentBand.rightBodyHeight / 2 + currentBand.bottomDelta / 4 - }; - - /* Extra bounderies due to constrained space */ - - const upperLimit = frameTitleHeight + frameBodyHeight * 0.25; - const downLimit = frameTitleHeight + frameBodyHeight * 0.75; - - if (bandPoint1.y > downLimit) { bandPoint1.y = downLimit; } - if (bandPoint4.y > downLimit) { bandPoint4.y = downLimit; } - - if (bandPoint2.y < upperLimit) { bandPoint2.y = upperLimit; } - if (bandPoint3.y < upperLimit) { bandPoint3.y = upperLimit; } - - const leftLimit = thisObject.container.frame.width * 0.40; - const rightLimit = thisObject.container.frame.width * 0.60; - - if (bandPoint1.x < leftLimit) { bandPoint1.x = leftLimit; } - if (bandPoint2.x < leftLimit) { bandPoint2.x = leftLimit; } - - if (bandPoint3.x > rightLimit) { bandPoint3.x = rightLimit; } - if (bandPoint4.x > rightLimit) { bandPoint4.x = rightLimit; } - - bandPoint1 = thisObject.container.frame.frameThisPoint(bandPoint1); - bandPoint2 = thisObject.container.frame.frameThisPoint(bandPoint2); - bandPoint3 = thisObject.container.frame.frameThisPoint(bandPoint3); - bandPoint4 = thisObject.container.frame.frameThisPoint(bandPoint4); - - bandPoint1 = thisObject.fitFunction(bandPoint1) - bandPoint2 = thisObject.fitFunction(bandPoint2) - bandPoint3 = thisObject.fitFunction(bandPoint3) - bandPoint4 = thisObject.fitFunction(bandPoint4) - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(bandPoint1.x, bandPoint1.y); - browserCanvasContext.lineTo(bandPoint2.x, bandPoint2.y); - browserCanvasContext.lineTo(bandPoint3.x, bandPoint3.y); - browserCanvasContext.lineTo(bandPoint4.x, bandPoint4.y); - - browserCanvasContext.closePath(); - - const OPACITY = '0.1'; - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + OPACITY + ')'; - - browserCanvasContext.fill(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(bandPoint1.x, bandPoint1.y); - browserCanvasContext.lineTo(bandPoint4.x, bandPoint4.y); - browserCanvasContext.moveTo(bandPoint2.x, bandPoint2.y); - browserCanvasContext.lineTo(bandPoint3.x, bandPoint3.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.stroke(); - - browserCanvasContext.beginPath(); - - let y1 = bandPoint1.y + (bandPoint2.y - bandPoint1.y) / 2; - let y2 = bandPoint4.y - (bandPoint4.y - bandPoint3.y) / 2; - - browserCanvasContext.moveTo(bandPoint1.x, y1); - browserCanvasContext.lineTo(bandPoint4.x, y2); - - - browserCanvasContext.closePath(); - - if (y1 > y2) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 1)'; - } - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.stroke(); - - /* put the labels with the bands values */ - - let y; - - if (currentBand.innerBand.direction !== undefined) { - UI.projects.superalgos.utilities.drawPrint.printLabel('Direction', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.05, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentBand.innerBand.direction, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.10, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - } - - UI.projects.superalgos.utilities.drawPrint.printLabel('Moving Average', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.15, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentBand.innerBand.movingAverage, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.20, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction, undefined, undefined, 10); - - UI.projects.superalgos.utilities.drawPrint.printLabel('Deviation', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.85, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentBand.innerBand.deviation, X_AXIS, frameTitleHeight + frameBodyHeight * 0.80, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction, undefined, undefined, 10); - - UI.projects.superalgos.utilities.drawPrint.printLabel('Standard Deviation', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.95, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentBand.innerBand.standardDeviation, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.90, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction, undefined, undefined, 10); - - } -} - diff --git a/Deprecated-Code/PlotterBollingerBands/LICENSE b/Deprecated-Code/PlotterBollingerBands/LICENSE deleted file mode 100644 index dbbe35581..000000000 --- a/Deprecated-Code/PlotterBollingerBands/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/Deprecated-Code/PlotterBollingerBands/PercentageBandwidth.js b/Deprecated-Code/PlotterBollingerBands/PercentageBandwidth.js deleted file mode 100644 index 0f38df5b2..000000000 --- a/Deprecated-Code/PlotterBollingerBands/PercentageBandwidth.js +++ /dev/null @@ -1,921 +0,0 @@ -function newMastersPlottersBollingerBandsPercentageBandwidth() { - - const MODULE_NAME = "Bands Plotter"; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - draw: draw, - recalculateScale: recalculateScale, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - currentPercentageBandwidth: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let plotAreaFrame = newCoordinateSystem(); // Used for full frame view. - let plotAreaViewport = newCoordinateSystem(); // Used for viewport view. - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let percentageBandwidthArray = []; // Here we keep the percentageBandwidthArray to be ploted every time the Draw() function is called by the AAWebPlatform. - - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, callBackFunction) { - - try { - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - recalculateScaleY(); - recalculateScaleX(); - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - - /* Get ready for plotting. */ - - recalculate(); - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculateScaleY(); - recalculateScaleX(); - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function recalculateScale() { - - recalculateScaleY(); - recalculateScaleX(); - - } - - function getContainer(point) { - - try { - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - let newMarketFile = marketFiles.getFile(pTimeFrame); - - if (newMarketFile !== undefined) { - - marketFile = newMarketFile; - recalculate(); - } - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - if (newFileCursor !== undefined) { - - fileCursor = newFileCursor; - recalculate(); - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - - datetime = pDatetime; - - } - - function onDailyFileLoaded(event) { - - try { - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Bands Changed", percentageBandwidthArray); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (fileCursor === undefined) { return; } // We need to wait - - if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - percentageBandwidthArray = []; - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getUTCFullYear() + '-' + pad(currentDate.getUTCMonth() + 1, 2) + '-' + pad(currentDate.getUTCDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let percentageBandwidth = { - begin: undefined, - end: undefined, - value: undefined, - movingAverage: undefined, - bandwidth: undefined - }; - - percentageBandwidth.begin = dailyFile[i][0]; - percentageBandwidth.end = dailyFile[i][1]; - percentageBandwidth.value = dailyFile[i][2]; - percentageBandwidth.movingAverage = dailyFile[i][3]; - percentageBandwidth.bandwidth = dailyFile[i][4]; - - if (percentageBandwidth.begin >= farLeftDate.valueOf() && percentageBandwidth.end <= farRightDate.valueOf()) { - - percentageBandwidthArray.push(percentageBandwidth); - - if (datetime.valueOf() >= percentageBandwidth.begin && datetime.valueOf() <= percentageBandwidth.end) { - - thisObject.currentPercentageBandwidth = percentageBandwidth; - thisObject.container.eventHandler.raiseEvent("Current Percentage Bandwidth Changed", thisObject.currentPercentageBandwidth); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by percentageBandwidthArray. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - if (percentageBandwidthArray.length > 0) { - - if (percentageBandwidthArray[0].begin > lowerEnd || percentageBandwidthArray[percentageBandwidthArray.length - 1].end < upperEnd) { - - setTimeout(recalculate, 2000); - - //console.log("File missing while calculating percentageBandwidthArray, scheduling a recalculation in 2 seconds."); - - } - } - - //console.log("Olivia > recalculateUsingDailyFiles > total percentageBandwidthArray generated : " + percentageBandwidthArray.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - percentageBandwidthArray = []; - - for (let i = 0; i < marketFile.length; i++) { - - let percentageBandwidth = { - begin: undefined, - end: undefined, - value: undefined, - movingAverage: undefined, - bandwidth: undefined - }; - - percentageBandwidth.begin = marketFile[i][0]; - percentageBandwidth.end = marketFile[i][1]; - percentageBandwidth.value = marketFile[i][2]; - percentageBandwidth.movingAverage = marketFile[i][3]; - percentageBandwidth.bandwidth = marketFile[i][4]; - - if (percentageBandwidth.begin >= leftDate.valueOf() && percentageBandwidth.end <= rightDate.valueOf()) { - - percentageBandwidthArray.push(percentageBandwidth); - - if (datetime.valueOf() >= percentageBandwidth.begin && datetime.valueOf() <= percentageBandwidth.end) { - - thisObject.currentPercentageBandwidth = percentageBandwidth; - thisObject.container.eventHandler.raiseEvent("Current Percentage Bandwidth Changed", thisObject.currentPercentageBandwidth); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total percentageBandwidthArray generated : " + percentageBandwidthArray.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function recalculateScaleX() { - - try { - - var minValue = { - x: MIN_PLOTABLE_DATE.valueOf() - }; - - var maxValue = { - x: MAX_PLOTABLE_DATE.valueOf() - }; - - plotAreaViewport.initializeX( - minValue, - maxValue, - thisObject.container.frame.width - ); - - plotAreaFrame.initializeX( - minValue, - maxValue, - thisObject.container.frame.width - ); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateScaleX -> err = " + err.stack); } - } - } - - function recalculateScaleY() { - - try { - - var minValue = { - y: 0 - }; - - var maxValue = { - y: 0 - }; - - maxValue.y = 100; - - plotAreaViewport.initializeY( - minValue, - maxValue, - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - ); - - plotAreaFrame.initializeY( - minValue, - maxValue, - thisObject.container.frame.height - ); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateScaleY -> err = " + err.stack); } - } - } - - - function plotChart() { - - try { - - let userPosition = getUserPosition() - let userPositionDate = userPosition.point.x - - let percentageBandwidth; - let previousBand; - - if (percentageBandwidthArray.length > 0) { - - /* This next section is to get ready in order to be able to plot dinamically constrained to the viewport */ - - let visibleHeight = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y; - - let frameCorner1 = { - x: 0, - y: 0 - }; - - let frameCorner2 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - }; - - /* Now the transformations. */ - - frameCorner1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(frameCorner1, thisObject.container.frame.container); - frameCorner2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(frameCorner2, thisObject.container.frame.container); - - let frameHeightInViewPort = frameCorner2.y - frameCorner1.y; - let pbChartHeight = 20; - let pbOffset = 100 / 5 * 4; - - /* Now we calculate and plot the percentageBandwidthArray */ - - for (let i = 1; i < percentageBandwidthArray.length; i++) { - - percentageBandwidth = percentageBandwidthArray[i]; - previousBand = percentageBandwidthArray[i - 1]; - - /* Here we will draw the percent bandwidth chart */ - - let currentPercentBandwidth = percentageBandwidth.value * pbChartHeight / 100; - if (currentPercentBandwidth > pbChartHeight) { currentPercentBandwidth = pbChartHeight }; - if (currentPercentBandwidth < 0) { currentPercentBandwidth = 0 }; - - let previousPercentBandwidth = previousBand.value * pbChartHeight / 100; - if (previousPercentBandwidth > pbChartHeight) { previousPercentBandwidth = pbChartHeight }; - if (previousPercentBandwidth < 0) { previousPercentBandwidth = 0 }; - - let currentMovingAverage = percentageBandwidth.movingAverage * pbChartHeight / 100; - let previousMovingAverage = previousBand.movingAverage * pbChartHeight / 100; - - let currentBandwidth = percentageBandwidth.bandwidth * 100 * pbChartHeight / 100; - let previousBandwidth = previousBand.bandwidth * 100 * pbChartHeight / 100; - - let pbPoint1; - let pbPoint2; - let pbPoint3; - let pbPoint4; - let pbPoint5; - let pbPoint6; - let pbPoint7; - let pbPoint8; - let pbPoint9; - let pbPoint10; - - function calculateCoordinates(plot, height) { - - pbPoint1 = { - x: percentageBandwidth.begin, - y: previousPercentBandwidth + pbOffset - }; - - pbPoint2 = { - x: percentageBandwidth.end, - y: currentPercentBandwidth + pbOffset - }; - - /* Points needed for the lines */ - - pbPoint3 = { - x: 0, - y: 0 * pbChartHeight / 100 + pbOffset - }; - - pbPoint4 = { - x: 0, - y: 30 * pbChartHeight / 100 + pbOffset - }; - - pbPoint5 = { - x: 0, - y: 70 * pbChartHeight / 100 + pbOffset - }; - - pbPoint6 = { - x: 0, - y: 100 * pbChartHeight / 100 + pbOffset - }; - - /* Moving Average */ - - pbPoint7 = { - x: percentageBandwidth.begin, - y: previousMovingAverage + pbOffset - }; - - pbPoint8 = { - x: percentageBandwidth.end, - y: currentMovingAverage + pbOffset - }; - - /* Bandwidth */ - - pbPoint9 = { - x: percentageBandwidth.begin, - y: previousBandwidth + pbOffset - }; - - pbPoint10 = { - x: percentageBandwidth.end, - y: currentBandwidth + pbOffset - }; - - pbPoint1 = plot.transformThisPoint(pbPoint1); - pbPoint2 = plot.transformThisPoint(pbPoint2); - - pbPoint3 = plot.transformThisPoint(pbPoint3); - pbPoint4 = plot.transformThisPoint(pbPoint4); - pbPoint5 = plot.transformThisPoint(pbPoint5); - pbPoint6 = plot.transformThisPoint(pbPoint6); - - pbPoint7 = plot.transformThisPoint(pbPoint7); - pbPoint8 = plot.transformThisPoint(pbPoint8); - - pbPoint9 = plot.transformThisPoint(pbPoint9); - pbPoint10 = plot.transformThisPoint(pbPoint10); - - pbPoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint1, thisObject.container); - pbPoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint2, thisObject.container); - - pbPoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint3, thisObject.container); - pbPoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint4, thisObject.container); - pbPoint5 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint5, thisObject.container); - pbPoint6 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint6, thisObject.container); - - pbPoint7 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint7, thisObject.container); - pbPoint8 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint8, thisObject.container); - - pbPoint9 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint9, thisObject.container); - pbPoint10 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(pbPoint10, thisObject.container); - - if (pbPoint1.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x || pbPoint2.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x) { - return false; - } - - return true; - - } - - if (calculateCoordinates(plotAreaFrame, thisObject.container.frame.height) === false) { continue; } // We try to see if it fits in the visible area. - - if (frameHeightInViewPort > visibleHeight * 2 / 3) { - - if (calculateCoordinates(plotAreaViewport, visibleHeight) === false) { - continue; - } // We snap t to the view port. - - /* Now we set the real value of y. */ - - pbPoint1.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (previousPercentBandwidth + pbOffset) * plotAreaViewport.scale.y; - pbPoint2.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (currentPercentBandwidth + pbOffset) * plotAreaViewport.scale.y; - - pbPoint3.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (0 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y; - pbPoint4.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (30 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y; - pbPoint5.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (70 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y; - pbPoint6.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (100 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y; - - pbPoint7.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (previousMovingAverage + pbOffset) * plotAreaViewport.scale.y; - pbPoint8.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (currentMovingAverage + pbOffset) * plotAreaViewport.scale.y; - - pbPoint9.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (previousBandwidth + pbOffset) * plotAreaViewport.scale.y; - pbPoint10.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - (currentBandwidth + pbOffset) * plotAreaViewport.scale.y; - - } - - /* Everything must fit within the visible area */ - - pbPoint1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint1); - pbPoint2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint2); - - pbPoint3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint3); - pbPoint4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint4); - pbPoint5 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint5); - pbPoint6 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint6); - - pbPoint7 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint7); - pbPoint8 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint8); - - pbPoint9 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint9); - pbPoint10 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(pbPoint10); - - - /* Now the drawing of the lines */ - - let bgOpacityA = 0.05; - let bgOpacityB = 0.05; - let bgOpacityC = 0.05; - - let fgOpacity = '1'; - - let lineWidthA = 0.2; - let lineWidthB = 0.2; - let lineWidthC = 0.2; - - if (pbPoint1.y > pbPoint4.y || pbPoint2.y > pbPoint4.y) { - bgOpacityA = bgOpacityA * 2; - } - - if (pbPoint1.y < pbPoint5.y || pbPoint2.y < pbPoint5.y) { - bgOpacityC = bgOpacityC * 2; - } - - if (pbPoint1.y >= pbPoint3.y || pbPoint2.y >= pbPoint3.y) { - bgOpacityA = bgOpacityA * 1.5; - lineWidthA = lineWidthA * 2; - } - - if (pbPoint1.y <= pbPoint6.y || pbPoint2.y <= pbPoint6.y) { - bgOpacityC = bgOpacityC * 1.5; - lineWidthC = lineWidthC * 2; - } - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint3.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint3.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint4.y); - browserCanvasContext.lineTo(pbPoint1.x, pbPoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ',' + bgOpacityA + ' )'; - browserCanvasContext.fill(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint4.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint4.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint5.y); - browserCanvasContext.lineTo(pbPoint1.x, pbPoint5.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + bgOpacityB + ')'; - browserCanvasContext.fill(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint5.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint5.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint6.y); - browserCanvasContext.lineTo(pbPoint1.x, pbPoint6.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + bgOpacityC + ')'; - browserCanvasContext.fill(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint3.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint3.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + fgOpacity + ')'; - browserCanvasContext.lineWidth = lineWidthA; - browserCanvasContext.stroke(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint4.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint4.y); - browserCanvasContext.moveTo(pbPoint1.x, pbPoint5.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint5.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + fgOpacity + ')'; - browserCanvasContext.lineWidth = lineWidthB; - browserCanvasContext.stroke(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint6.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint6.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + fgOpacity + ')'; - browserCanvasContext.lineWidth = lineWidthC; - browserCanvasContext.stroke(); - - /* Now the drawing of the percentage bandwidth*/ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint1.x, pbPoint1.y); - browserCanvasContext.lineTo(pbPoint2.x, pbPoint2.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', 1)'; - - if (userPositionDate >= percentageBandwidth.begin && userPositionDate <= percentageBandwidth.end) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', 1)'; - } - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.stroke(); - - /* Now the drawing of the moving average*/ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint7.x, pbPoint7.y); - browserCanvasContext.lineTo(pbPoint8.x, pbPoint8.y); - - browserCanvasContext.closePath(); - - if (pbPoint7.y > pbPoint8.y) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 1)'; - } - - if (userPositionDate >= percentageBandwidth.begin && userPositionDate <= percentageBandwidth.end) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', 1)'; - } - - browserCanvasContext.lineWidth = 0.2; - browserCanvasContext.stroke(); - - /* Now the drawing of the bandwidth*/ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(pbPoint9.x, pbPoint9.y); - browserCanvasContext.lineTo(pbPoint10.x, pbPoint10.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', 1)'; - - if (userPositionDate >= percentageBandwidth.begin && userPositionDate <= percentageBandwidth.end) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.BLACK + ', 1)'; - } - - browserCanvasContext.setLineDash([1, 4]) - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - - diff --git a/Deprecated-Code/PlotterBollingerBands/Plotters-Bollinger-Bands.sln b/Deprecated-Code/PlotterBollingerBands/Plotters-Bollinger-Bands.sln deleted file mode 100644 index 661fcc076..000000000 --- a/Deprecated-Code/PlotterBollingerBands/Plotters-Bollinger-Bands.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{096B35AD-F86F-47B9-A99F-04CA93397DA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E75EDC9D-66A7-4C54-8EA1-5ADC148CACA8} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/PlotterBollingerBands/Project.njsproj b/Deprecated-Code/PlotterBollingerBands/Project.njsproj deleted file mode 100644 index e92bfb11e..000000000 --- a/Deprecated-Code/PlotterBollingerBands/Project.njsproj +++ /dev/null @@ -1,71 +0,0 @@ - - - - Debug - 2.0 - {096b35ad-f86f-47b9-a99f-04ca93397da8} - - ShowAllFiles - BollingerBands.js - . - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - Code - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/PlotterBollingerBands/README.md b/Deprecated-Code/PlotterBollingerBands/README.md deleted file mode 100644 index d47bdb098..000000000 --- a/Deprecated-Code/PlotterBollingerBands/README.md +++ /dev/null @@ -1 +0,0 @@ -# Plotter Bollinger Bands diff --git a/Deprecated-Code/PlotterBollingerBands/this.plotter.config.json b/Deprecated-Code/PlotterBollingerBands/this.plotter.config.json deleted file mode 100644 index a0b3faf21..000000000 --- a/Deprecated-Code/PlotterBollingerBands/this.plotter.config.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "displayName": "Plotters Bollinger Bands", - "codeName": "PlottersBollingerBands", - "dataMine": "Masters", - "modules": [ - { - "codeName": "BollingerBands", - "moduleName": "BollingerBands", - "description": "Plots Bollinger Bands.", - "profilePicture": "BollingerBands.png", - "panels": [ - { - "codeName": "BollingerBandsPanel", - "moduleName": "BollingerBandsPanel", - "event": "Current Record Changed" - } - ] - }, - { - "codeName": "PercentageBandwidth", - "moduleName": "PercentageBandwidth", - "description": "Plots Bollinger Bands.", - "profilePicture": "PercentageBandwidth.png", - "panels": [ - ] - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/PlotterCandlesVolumes/.gitattributes b/Deprecated-Code/PlotterCandlesVolumes/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/PlotterCandlesVolumes/.gitignore b/Deprecated-Code/PlotterCandlesVolumes/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/PlotterCandlesVolumes/CandlePanel.js b/Deprecated-Code/PlotterCandlesVolumes/CandlePanel.js deleted file mode 100644 index c223aaa74..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/CandlePanel.js +++ /dev/null @@ -1,352 +0,0 @@ - -function newMastersPlottersCandlesVolumesCandlesCandlePanel() { - - let thisObject = { - fitFunction: undefined, - container: undefined, - isVisible: true, - onRecordChange: onRecordChange, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - thisObject.container = newContainer(); - thisObject.container.initialize(); - thisObject.container.frame.containerName = "Candle"; - - let currentCandle; - let upDownButton - - return thisObject; - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.isVisible = undefined - - currentCandle = undefined - upDownButton.finalize() - upDownButton = undefined - } - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL; - - thisObject.container.frame.position.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 2; - thisObject.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(lastCurrentCandle) { - - currentCandle = lastCurrentCandle; - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentCandleInfo(); - - upDownButton.draw() - - } - - - function plotCurrentCandleInfo() { - - if (currentCandle === undefined) { return; } - if (currentCandle.innerCandle === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - let candlePoint1 = { - x: X_AXIS - currentCandle.bodyWidth / 2, - y: Y_AXIS - currentCandle.bodyHeight / 2 - }; - - let candlePoint2 = { - x: X_AXIS + currentCandle.bodyWidth / 2, - y: Y_AXIS - currentCandle.bodyHeight / 2 - }; - - let candlePoint3 = { - x: X_AXIS + currentCandle.bodyWidth / 2, - y: Y_AXIS + currentCandle.bodyHeight / 2 - }; - - let candlePoint4 = { - x: X_AXIS - currentCandle.bodyWidth / 2, - y: Y_AXIS + currentCandle.bodyHeight / 2 - }; - - - let stickPoint1 = { - x: X_AXIS - currentCandle.stickWidth / 2, - y: candlePoint1.y - currentCandle.stickStart - }; - - let stickPoint2 = { - x: X_AXIS + currentCandle.stickWidth / 2, - y: candlePoint1.y - currentCandle.stickStart - }; - - let stickPoint3 = { - x: X_AXIS + currentCandle.stickWidth / 2, - y: candlePoint1.y - currentCandle.stickStart + currentCandle.stickHeight - }; - - let stickPoint4 = { - x: X_AXIS - currentCandle.stickWidth / 2, - y: candlePoint1.y - currentCandle.stickStart + currentCandle.stickHeight - }; - - - /* Extra bounderies due to constrained space */ - - const upperLimit = frameTitleHeight + frameBodyHeight * 0.15; - const downLimit = frameTitleHeight + frameBodyHeight * 0.85; - - if (candlePoint1.y < upperLimit) { - - candlePoint1.y = upperLimit; - candlePoint2.y = upperLimit; - - } - - if (stickPoint1.y < upperLimit) { - - stickPoint1.y = upperLimit; - stickPoint2.y = upperLimit; - - } - - if (candlePoint3.y < upperLimit) { - - candlePoint3.y = upperLimit; - candlePoint4.y = upperLimit; - - } - - if (stickPoint3.y < upperLimit) { - - stickPoint3.y = upperLimit; - stickPoint4.y = upperLimit; - - } - - if (candlePoint1.y > downLimit) { - - candlePoint1.y = downLimit; - candlePoint2.y = downLimit; - - } - - if (stickPoint1.y > downLimit) { - - stickPoint1.y = downLimit; - stickPoint2.y = downLimit; - - } - - if (candlePoint3.y > downLimit) { - - candlePoint3.y = downLimit; - candlePoint4.y = downLimit; - - } - - if (stickPoint3.y > downLimit) { - - stickPoint3.y = downLimit; - stickPoint4.y = downLimit; - - } - - const leftLimit = thisObject.container.frame.width * 0.42; - const rightLimit = thisObject.container.frame.width * 0.58; - - if (candlePoint1.x < leftLimit) { - - candlePoint1.x = leftLimit; - candlePoint4.x = leftLimit; - - } - - if (stickPoint1.x < leftLimit) { - - stickPoint1.x = leftLimit; - stickPoint4.x = leftLimit; - - } - - if (candlePoint4.x < leftLimit) { - - candlePoint4.x = leftLimit; - candlePoint1.x = leftLimit; - - } - - if (stickPoint4.x < leftLimit) { - - stickPoint4.x = leftLimit; - stickPoint1.x = leftLimit; - - } - - if (candlePoint2.x > rightLimit) { - - candlePoint2.x = rightLimit; - candlePoint3.x = rightLimit; - - } - - if (stickPoint2.x > rightLimit) { - - stickPoint2.x = rightLimit; - stickPoint3.x = rightLimit; - - } - - if (candlePoint3.x > rightLimit) { - - candlePoint3.x = rightLimit; - candlePoint2.x = rightLimit; - - } - - if (stickPoint3.x > rightLimit) { - - stickPoint3.x = rightLimit; - stickPoint2.x = rightLimit; - - } - - - candlePoint1 = thisObject.container.frame.frameThisPoint(candlePoint1); - candlePoint2 = thisObject.container.frame.frameThisPoint(candlePoint2); - candlePoint3 = thisObject.container.frame.frameThisPoint(candlePoint3); - candlePoint4 = thisObject.container.frame.frameThisPoint(candlePoint4); - - candlePoint1 = thisObject.fitFunction(candlePoint1) - candlePoint2 = thisObject.fitFunction(candlePoint2) - candlePoint3 = thisObject.fitFunction(candlePoint3) - candlePoint4 = thisObject.fitFunction(candlePoint4) - - stickPoint1 = thisObject.container.frame.frameThisPoint(stickPoint1); - stickPoint2 = thisObject.container.frame.frameThisPoint(stickPoint2); - stickPoint3 = thisObject.container.frame.frameThisPoint(stickPoint3); - stickPoint4 = thisObject.container.frame.frameThisPoint(stickPoint4); - - stickPoint1 = thisObject.fitFunction(stickPoint1) - stickPoint2 = thisObject.fitFunction(stickPoint2) - stickPoint3 = thisObject.fitFunction(stickPoint3) - stickPoint4 = thisObject.fitFunction(stickPoint4) - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(stickPoint1.x, stickPoint1.y); - browserCanvasContext.lineTo(stickPoint2.x, stickPoint2.y); - browserCanvasContext.lineTo(stickPoint3.x, stickPoint3.y); - browserCanvasContext.lineTo(stickPoint4.x, stickPoint4.y); - - browserCanvasContext.closePath(); - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 1)'; - browserCanvasContext.fill(); - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(candlePoint1.x, candlePoint1.y); - browserCanvasContext.lineTo(candlePoint2.x, candlePoint2.y); - browserCanvasContext.lineTo(candlePoint3.x, candlePoint3.y); - browserCanvasContext.lineTo(candlePoint4.x, candlePoint4.y); - - browserCanvasContext.closePath(); - - const OPACITY = '1'; - - if (currentCandle.innerCandle.direction === 'up') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + OPACITY + ')'; } - if (currentCandle.innerCandle.direction === 'down') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')'; } - if (currentCandle.innerCandle.direction === 'side') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', ' + OPACITY + ')'; } - - if (currentCandle.innerCandle.direction === 'up') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')'; } - if (currentCandle.innerCandle.direction === 'down') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')'; } - if (currentCandle.innerCandle.direction === 'side') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', ' + OPACITY + ')'; } - - browserCanvasContext.fill(); - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - /* put the labels with the candles values */ - - let y; - - UI.projects.superalgos.utilities.drawPrint.printLabel('Max', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.05, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentCandle.innerCandle.max, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.10, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - UI.projects.superalgos.utilities.drawPrint.printLabel('Min', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.95, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentCandle.innerCandle.min, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.90, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - y = Y_AXIS - currentCandle.bodyHeight / 2; - - if (y < frameTitleHeight + frameBodyHeight * 0.15) { y = frameTitleHeight + frameBodyHeight * 0.15; } - if (y > frameTitleHeight + frameBodyHeight * 0.80) { y = frameTitleHeight + frameBodyHeight * 0.80; } - - UI.projects.superalgos.utilities.drawPrint.printLabel('Open', undefined, undefined, X_AXIS * 2 / 5, y, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentCandle.innerCandle.open, undefined, undefined, X_AXIS * 2 / 5, y + frameBodyHeight * 0.05, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - y = Y_AXIS + currentCandle.bodyHeight / 2; - - if (y < frameTitleHeight + frameBodyHeight * 0.15) { y = frameTitleHeight + frameBodyHeight * 0.15; } - if (y > frameTitleHeight + frameBodyHeight * 0.80) { y = frameTitleHeight + frameBodyHeight * 0.80; } - - UI.projects.superalgos.utilities.drawPrint.printLabel('Close', undefined, undefined, X_AXIS * 7 / 5, y, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentCandle.innerCandle.close, undefined, undefined, X_AXIS * 7 / 5, y + frameBodyHeight * 0.05, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - } -} - - diff --git a/Deprecated-Code/PlotterCandlesVolumes/Candles.js b/Deprecated-Code/PlotterCandlesVolumes/Candles.js deleted file mode 100644 index 46aba26b6..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/Candles.js +++ /dev/null @@ -1,810 +0,0 @@ -function newMastersPlottersCandlesVolumesCandles() { - - const MODULE_NAME = "Candles Plotter"; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw, - onDailyFileLoaded: onDailyFileLoaded, - currentCandle: undefined - }; - - /* this is part of the module template */ - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let candles = []; // Here we keep the candles to be ploted every time the Draw() function is called by the AAWebPlatform. - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - - try { - - let container; - - /* First we check if this point is inside this space. */ - - if (thisObject.container.frame.isThisPointHere(point) === true) { - - return thisObject.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - if (timeFrame !== pTimeFrame) { - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - let newMarketFile = marketFiles.getFile(pTimeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - - } else { - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - thisObject.container.frame.draw(); - - return plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Candles Changed", candles); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (fileCursor === undefined) { return; } // We need to wait - - if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - candles = []; - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getUTCFullYear() + '-' + pad(currentDate.getUTCMonth() + 1, 2) + '-' + pad(currentDate.getUTCDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = dailyFile[i][0]; - candle.max = dailyFile[i][1]; - - candle.open = dailyFile[i][2]; - candle.close = dailyFile[i][3]; - - candle.begin = dailyFile[i][4]; - candle.end = dailyFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'down'; } - if (candle.open < candle.close) { candle.direction = 'up'; } - if (candle.open === candle.close) { candle.direction = 'side'; } - - /* Contributing to Auto-Scale*/ - if (i === 0) { - coordinateSystem.reportXValue(candle.begin) - } - if (i === dailyFile.length - 1) { - coordinateSystem.reportXValue(candle.end) - } - - if ( - (candle.begin >= farLeftDate.valueOf() && candle.end <= farRightDate.valueOf()) && - (candle.begin >= coordinateSystem.min.x && candle.end <= coordinateSystem.max.x) - ) { - - candles.push(candle); - - if (datetime.valueOf() >= candle.begin && datetime.valueOf() <= candle.end) { - - thisObject.currentCandle = candle; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentCandle); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by candles. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - if (candles.length > 0) { - if (candles[0].begin > lowerEnd || candles[candles.length - 1].end < upperEnd) { - setTimeout(recalculate, 2000); - } - } - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - candles = []; - - for (let i = 0; i < marketFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = marketFile[i][0]; - candle.max = marketFile[i][1]; - - candle.open = marketFile[i][2]; - candle.close = marketFile[i][3]; - - candle.begin = marketFile[i][4]; - candle.end = marketFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'down'; } - if (candle.open < candle.close) { candle.direction = 'up'; } - if (candle.open === candle.close) { candle.direction = 'side'; } - - /* Contributing to Auto-Scale*/ - if (i === 0) { - coordinateSystem.reportXValue(candle.begin) - } - if (i === marketFile.length - 1) { - coordinateSystem.reportXValue(candle.end) - } - - if ( - (candle.begin >= leftDate.valueOf() && candle.end <= rightDate.valueOf()) && - (candle.begin >= coordinateSystem.min.x && candle.end <= coordinateSystem.max.x) - ) { - - candles.push(candle); - - if (datetime.valueOf() >= candle.begin && datetime.valueOf() <= candle.end) { - - thisObject.currentCandle = candle; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentCandle); - - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - let elementsPlotted = 0 - let lowResolution = false - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_PLOTTING_IN_LOW_RESOLUTION) { - if (candles.length > 100) { - lowResolution = true - } - } - - if (candles.length > 0) { - - /* On screen candles */ - let onScreenCandles = [] - let mouseCandle - - /* Now we calculate all the points. */ - for (let i = 0; i < candles.length; i++) { - - candle = candles[i]; - - candle.candlePoint1 = { - x: candle.begin + timeFrame / 7 * 1.5, - y: candle.open - }; - - candle.candlePoint2 = { - x: candle.begin + timeFrame / 7 * 5.5, - y: candle.open - }; - - candle.candlePoint3 = { - x: candle.begin + timeFrame / 7 * 5.5, - y: candle.close - }; - - candle.candlePoint4 = { - x: candle.begin + timeFrame / 7 * 1.5, - y: candle.close - }; - - candle.candlePoint1 = coordinateSystem.transformThisPoint(candle.candlePoint1); - candle.candlePoint2 = coordinateSystem.transformThisPoint(candle.candlePoint2); - candle.candlePoint3 = coordinateSystem.transformThisPoint(candle.candlePoint3); - candle.candlePoint4 = coordinateSystem.transformThisPoint(candle.candlePoint4); - - candle.candlePoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.candlePoint1, thisObject.container); - candle.candlePoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.candlePoint2, thisObject.container); - candle.candlePoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.candlePoint3, thisObject.container); - candle.candlePoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.candlePoint4, thisObject.container); - - /* Skip the first candle with zero at open */ - if (candle.open === 0) { continue } - - if (candle.candlePoint2.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x || candle.candlePoint1.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x) { - continue - } - - addToOnScreenCandles(candle) - - candle.stickPoint1 = { - x: candle.begin + timeFrame / 7 * 3.2, - y: candle.max - }; - - candle.stickPoint2 = { - x: candle.begin + timeFrame / 7 * 3.8, - y: candle.max - }; - - candle.stickPoint3 = { - x: candle.begin + timeFrame / 7 * 3.8, - y: candle.min - }; - - candle.stickPoint4 = { - x: candle.begin + timeFrame / 7 * 3.2, - y: candle.min - }; - - candle.stickPoint1 = coordinateSystem.transformThisPoint(candle.stickPoint1); - candle.stickPoint2 = coordinateSystem.transformThisPoint(candle.stickPoint2); - candle.stickPoint3 = coordinateSystem.transformThisPoint(candle.stickPoint3); - candle.stickPoint4 = coordinateSystem.transformThisPoint(candle.stickPoint4); - - candle.stickPoint1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.stickPoint1, thisObject.container); - candle.stickPoint2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.stickPoint2, thisObject.container); - candle.stickPoint3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.stickPoint3, thisObject.container); - candle.stickPoint4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(candle.stickPoint4, thisObject.container); - - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT) { - let diffA = candle.stickPoint3.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - if (diffA > 0) { - candle.candlePoint1.y = candle.candlePoint1.y - diffA - candle.candlePoint2.y = candle.candlePoint2.y - diffA - candle.candlePoint3.y = candle.candlePoint3.y - diffA - candle.candlePoint4.y = candle.candlePoint4.y - diffA - - candle.stickPoint1.y = candle.stickPoint1.y - diffA - candle.stickPoint2.y = candle.stickPoint2.y - diffA - candle.stickPoint3.y = candle.stickPoint3.y - diffA - candle.stickPoint4.y = candle.stickPoint4.y - diffA - } - - let diffB = candle.stickPoint1.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - if (diffB < 0) { - candle.candlePoint1.y = candle.candlePoint1.y - diffB - candle.candlePoint2.y = candle.candlePoint2.y - diffB - candle.candlePoint3.y = candle.candlePoint3.y - diffB - candle.candlePoint4.y = candle.candlePoint4.y - diffB - - candle.stickPoint1.y = candle.stickPoint1.y - diffB - candle.stickPoint2.y = candle.stickPoint2.y - diffB - candle.stickPoint3.y = candle.stickPoint3.y - diffB - candle.stickPoint4.y = candle.stickPoint4.y - diffB - } - } - - candle.candlePoint1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint1); - candle.candlePoint2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint2); - candle.candlePoint3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint3); - candle.candlePoint4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint4); - - candle.candlePoint1 = thisObject.fitFunction(candle.candlePoint1); - candle.candlePoint2 = thisObject.fitFunction(candle.candlePoint2); - candle.candlePoint3 = thisObject.fitFunction(candle.candlePoint3); - candle.candlePoint4 = thisObject.fitFunction(candle.candlePoint4); - - candle.stickPoint1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint1); - candle.stickPoint2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint2); - candle.stickPoint3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint3); - candle.stickPoint4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint4); - - candle.stickPoint1 = thisObject.fitFunction(candle.stickPoint1); - candle.stickPoint2 = thisObject.fitFunction(candle.stickPoint2); - candle.stickPoint3 = thisObject.fitFunction(candle.stickPoint3); - candle.stickPoint4 = thisObject.fitFunction(candle.stickPoint4); - } - - - - function addToOnScreenCandles(candle) { - - /* Contributing to Auto-Scale*/ - coordinateSystem.reportYValue(candle.max) - coordinateSystem.reportYValue(candle.min) - - - //if (onScreenCandles.length < 15000) { - onScreenCandles.push(candle) - //} - - if (userPositionDate >= candle.begin && userPositionDate <= candle.end) { - mouseCandle = candle - } - } - - /* We draw the sticks */ - browserCanvasContext.beginPath(); - - for (let i = 0; i < onScreenCandles.length; i++) { - - candle = onScreenCandles[i]; - - browserCanvasContext.moveTo(candle.stickPoint1.x, candle.stickPoint1.y); - browserCanvasContext.lineTo(candle.stickPoint2.x, candle.stickPoint2.y); - browserCanvasContext.lineTo(candle.stickPoint3.x, candle.stickPoint3.y); - browserCanvasContext.lineTo(candle.stickPoint4.x, candle.stickPoint4.y); - } - - browserCanvasContext.closePath(); - - if (lowResolution === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 1)'; - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.LIGHT + ', 1)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - } - - /* The stick at the mouse candle */ - if (mouseCandle) { - browserCanvasContext.beginPath(); - - candle = mouseCandle - - browserCanvasContext.moveTo(candle.stickPoint1.x, candle.stickPoint1.y); - browserCanvasContext.lineTo(candle.stickPoint2.x, candle.stickPoint2.y); - browserCanvasContext.lineTo(candle.stickPoint3.x, candle.stickPoint3.y); - browserCanvasContext.lineTo(candle.stickPoint4.x, candle.stickPoint4.y); - - browserCanvasContext.closePath(); - - if (lowResolution === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 1)'; - browserCanvasContext.fill(); - } - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - } - - - /* We draw the candles. */ - drawCandlesByDirection('up') - drawCandlesByDirection('down') - drawCandlesByDirection('side') - - function drawCandlesByDirection(direction) { - - browserCanvasContext.beginPath(); - - for (let i = 0; i < onScreenCandles.length; i++) { - - candle = onScreenCandles[i]; - - if (candle.direction !== direction) { continue } - - browserCanvasContext.moveTo(candle.candlePoint1.x, candle.candlePoint1.y); - browserCanvasContext.lineTo(candle.candlePoint2.x, candle.candlePoint2.y); - browserCanvasContext.lineTo(candle.candlePoint3.x, candle.candlePoint3.y); - browserCanvasContext.lineTo(candle.candlePoint4.x, candle.candlePoint4.y); - browserCanvasContext.lineTo(candle.candlePoint1.x, candle.candlePoint1.y); - - elementsPlotted++ - } - - browserCanvasContext.closePath(); - - if (lowResolution === false) { - - if (direction === 'up') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', 1)'; } - if (direction === 'down') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 1)'; } - if (direction === 'side') { browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 1)'; } - - browserCanvasContext.fill(); - } - - if (direction === 'up') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 1)'; } - if (direction === 'down') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', 1)'; } - if (direction === 'side') { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 1)'; } - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - } - - /* Draw mouse candel and Raise Event. */ - if (mouseCandle) { - - /* highlight the current candle */ - - browserCanvasContext.beginPath(); - - candle = mouseCandle - - browserCanvasContext.moveTo(candle.candlePoint1.x, candle.candlePoint1.y); - browserCanvasContext.lineTo(candle.candlePoint2.x, candle.candlePoint2.y); - browserCanvasContext.lineTo(candle.candlePoint3.x, candle.candlePoint3.y); - browserCanvasContext.lineTo(candle.candlePoint4.x, candle.candlePoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current candle accroding to time - - browserCanvasContext.fill(); - - let currentCandle = { - bodyWidth: candle.candlePoint2.x - candle.candlePoint1.x, - bodyHeight: candle.candlePoint3.y - candle.candlePoint2.y, - stickHeight: candle.stickPoint4.y - candle.stickPoint2.y, - stickWidth: candle.stickPoint2.x - candle.stickPoint1.x, - stickStart: candle.candlePoint2.y - candle.stickPoint2.y, - period: timeFrame, - innerCandle: candle - }; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", currentCandle); - } - } - return elementsPlotted - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - - - - diff --git a/Deprecated-Code/PlotterCandlesVolumes/Candles.png b/Deprecated-Code/PlotterCandlesVolumes/Candles.png deleted file mode 100644 index f1e093cd5..000000000 Binary files a/Deprecated-Code/PlotterCandlesVolumes/Candles.png and /dev/null differ diff --git a/Deprecated-Code/PlotterCandlesVolumes/LICENSE b/Deprecated-Code/PlotterCandlesVolumes/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/PlotterCandlesVolumes/Plotters-Candles-Volumes.sln b/Deprecated-Code/PlotterCandlesVolumes/Plotters-Candles-Volumes.sln deleted file mode 100644 index 661fcc076..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/Plotters-Candles-Volumes.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{096B35AD-F86F-47B9-A99F-04CA93397DA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E75EDC9D-66A7-4C54-8EA1-5ADC148CACA8} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/PlotterCandlesVolumes/Project.njsproj b/Deprecated-Code/PlotterCandlesVolumes/Project.njsproj deleted file mode 100644 index f8e8bdc92..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/Project.njsproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - Debug - 2.0 - {096b35ad-f86f-47b9-a99f-04ca93397da8} - - ShowAllFiles - Candles.js - . - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - - Code - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/PlotterCandlesVolumes/README.md b/Deprecated-Code/PlotterCandlesVolumes/README.md deleted file mode 100644 index 5aa302b7d..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/README.md +++ /dev/null @@ -1 +0,0 @@ -# AAOlivia-Plotter diff --git a/Deprecated-Code/PlotterCandlesVolumes/VolumePanel.js b/Deprecated-Code/PlotterCandlesVolumes/VolumePanel.js deleted file mode 100644 index 9a1608a65..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/VolumePanel.js +++ /dev/null @@ -1,256 +0,0 @@ - -function newMastersPlottersCandlesVolumesVolumesVolumePanel() { - - let thisObject = { - fitFunction: undefined, - container: undefined, - isVisible: true, - onRecordChange: onRecordChange, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - thisObject.container = newContainer(); - thisObject.container.initialize(); - thisObject.container.frame.containerName = "Volume"; - - let currentVolume; - let upDownButton - - return thisObject; - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.isVisible = undefined - - currentVolume = undefined - upDownButton.finalize() - upDownButton = undefined - } - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL; - - thisObject.container.frame.position.x = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width; - thisObject.container.frame.position.y = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(lastCurrentVolume) { - - currentVolume = lastCurrentVolume; - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentVolumeInfo(); - - upDownButton.draw() - } - - function plotCurrentVolumeInfo() { - - if (currentVolume === undefined) { return; } - if (currentVolume.innerVolumeBar === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS_BUY = frameTitleHeight + frameBodyHeight * 0.85; - const Y_AXIS_SELL = frameTitleHeight + frameBodyHeight * 0.15; - - let buyVolumePoint1 = { - x: X_AXIS - currentVolume.buyInfo.baseWidth / 2, - y: Y_AXIS_BUY - }; - - let buyVolumePoint2 = { - x: X_AXIS - currentVolume.buyInfo.topWidth / 2, - y: Y_AXIS_BUY + currentVolume.buyInfo.height - }; - - let buyVolumePoint3 = { - x: X_AXIS + currentVolume.buyInfo.topWidth / 2, - y: Y_AXIS_BUY + currentVolume.buyInfo.height - }; - - let buyVolumePoint4 = { - x: X_AXIS + currentVolume.buyInfo.baseWidth / 2, - y: Y_AXIS_BUY - }; - - /* Extra bounderies due to constrained space */ - - const upperLimit = frameTitleHeight + frameBodyHeight * 0.15; - const downLimit = frameTitleHeight + frameBodyHeight * 0.85; - - const leftLimit = thisObject.container.frame.width * 0.40; - const rightLimit = thisObject.container.frame.width * 0.60; - - if (buyVolumePoint1.y < downLimit) { buyVolumePoint1.y = downLimit; } - if (buyVolumePoint4.y < downLimit) { buyVolumePoint4.y = downLimit; } - - if (buyVolumePoint2.y < upperLimit) { buyVolumePoint2.y = upperLimit; } - if (buyVolumePoint3.y < upperLimit) { buyVolumePoint3.y = upperLimit; } - - if (buyVolumePoint1.x < leftLimit) { buyVolumePoint1.x = leftLimit; } - if (buyVolumePoint2.x < leftLimit) { buyVolumePoint2.x = leftLimit; } - - if (buyVolumePoint3.x > rightLimit) { buyVolumePoint3.x = rightLimit; } - if (buyVolumePoint4.x > rightLimit) { buyVolumePoint4.x = rightLimit; } - - - - buyVolumePoint1 = thisObject.container.frame.fitIntoFrame(buyVolumePoint1); - buyVolumePoint2 = thisObject.container.frame.fitIntoFrame(buyVolumePoint2); - buyVolumePoint3 = thisObject.container.frame.fitIntoFrame(buyVolumePoint3); - buyVolumePoint4 = thisObject.container.frame.fitIntoFrame(buyVolumePoint4); - - buyVolumePoint1 = thisObject.container.frame.frameThisPoint(buyVolumePoint1); - buyVolumePoint2 = thisObject.container.frame.frameThisPoint(buyVolumePoint2); - buyVolumePoint3 = thisObject.container.frame.frameThisPoint(buyVolumePoint3); - buyVolumePoint4 = thisObject.container.frame.frameThisPoint(buyVolumePoint4); - - buyVolumePoint1 = thisObject.fitFunction(buyVolumePoint1) - buyVolumePoint2 = thisObject.fitFunction(buyVolumePoint2) - buyVolumePoint3 = thisObject.fitFunction(buyVolumePoint3) - buyVolumePoint4 = thisObject.fitFunction(buyVolumePoint4) - - let sellVolumePoint1 = { - x: X_AXIS - currentVolume.buyInfo.baseWidth / 2, - y: Y_AXIS_SELL - }; - - let sellVolumePoint2 = { - x: X_AXIS - currentVolume.buyInfo.topWidth / 2, - y: Y_AXIS_SELL + currentVolume.sellInfo.height - }; - - let sellVolumePoint3 = { - x: X_AXIS + currentVolume.buyInfo.topWidth / 2, - y: Y_AXIS_SELL + currentVolume.sellInfo.height - }; - - let sellVolumePoint4 = { - x: X_AXIS + currentVolume.buyInfo.baseWidth / 2, - y: Y_AXIS_SELL - }; - - if (sellVolumePoint1.y < upperLimit) { sellVolumePoint1.y = upperLimit; } - if (sellVolumePoint4.y < upperLimit) { sellVolumePoint4.y = upperLimit; } - - if (sellVolumePoint2.y > downLimit) { sellVolumePoint2.y = downLimit; } - if (sellVolumePoint3.y > downLimit) { sellVolumePoint3.y = downLimit; } - - if (sellVolumePoint1.x < leftLimit) { sellVolumePoint1.x = leftLimit; } - if (sellVolumePoint2.x < leftLimit) { sellVolumePoint2.x = leftLimit; } - - if (sellVolumePoint3.x > rightLimit) { sellVolumePoint3.x = rightLimit; } - if (sellVolumePoint4.x > rightLimit) { sellVolumePoint4.x = rightLimit; } - - sellVolumePoint1 = thisObject.container.frame.fitIntoFrame(sellVolumePoint1); - sellVolumePoint2 = thisObject.container.frame.fitIntoFrame(sellVolumePoint2); - sellVolumePoint3 = thisObject.container.frame.fitIntoFrame(sellVolumePoint3); - sellVolumePoint4 = thisObject.container.frame.fitIntoFrame(sellVolumePoint4); - - sellVolumePoint1 = thisObject.container.frame.frameThisPoint(sellVolumePoint1); - sellVolumePoint2 = thisObject.container.frame.frameThisPoint(sellVolumePoint2); - sellVolumePoint3 = thisObject.container.frame.frameThisPoint(sellVolumePoint3); - sellVolumePoint4 = thisObject.container.frame.frameThisPoint(sellVolumePoint4); - - sellVolumePoint1 = thisObject.fitFunction(sellVolumePoint1) - sellVolumePoint2 = thisObject.fitFunction(sellVolumePoint2) - sellVolumePoint3 = thisObject.fitFunction(sellVolumePoint3) - sellVolumePoint4 = thisObject.fitFunction(sellVolumePoint4) - - - - const OPACITY = '0.40'; - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(buyVolumePoint1.x, buyVolumePoint1.y); - browserCanvasContext.lineTo(buyVolumePoint2.x, buyVolumePoint2.y); - browserCanvasContext.lineTo(buyVolumePoint3.x, buyVolumePoint3.y); - browserCanvasContext.lineTo(buyVolumePoint4.x, buyVolumePoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + OPACITY + ')'; - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')'; - - browserCanvasContext.fill(); - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(sellVolumePoint1.x, sellVolumePoint1.y); - browserCanvasContext.lineTo(sellVolumePoint2.x, sellVolumePoint2.y); - browserCanvasContext.lineTo(sellVolumePoint3.x, sellVolumePoint3.y); - browserCanvasContext.lineTo(sellVolumePoint4.x, sellVolumePoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')'; - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')'; - - browserCanvasContext.fill(); - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - /* put the labels with the volumes values */ - - UI.projects.superalgos.utilities.drawPrint.printLabel('Buy Volume', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.95, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentVolume.innerVolumeBar.amountBuy, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.90, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - UI.projects.superalgos.utilities.drawPrint.printLabel('Sell Volume', undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.05, '0.60', undefined, undefined, 'Center', thisObject.container, thisObject.fitFunction); - UI.projects.superalgos.utilities.drawPrint.printLabel(currentVolume.innerVolumeBar.amountSell, undefined, undefined, X_AXIS, frameTitleHeight + frameBodyHeight * 0.10, '1.00', 15, undefined, 'Center', thisObject.container, thisObject.fitFunction); - - } - - -} - diff --git a/Deprecated-Code/PlotterCandlesVolumes/Volumes.js b/Deprecated-Code/PlotterCandlesVolumes/Volumes.js deleted file mode 100644 index cf5691eee..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/Volumes.js +++ /dev/null @@ -1,755 +0,0 @@ -function newMastersPlottersCandlesVolumesVolumes() { - - const MODULE_NAME = "Volumes Plotter"; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - recalculateScale: recalculateScale, - draw: draw - }; - - /* this is part of the module template */ - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - let scaleFile; // This file is used to calculate the scale. - - /* these are module specific variables: */ - - let volumes = []; // Here we keep the volumes to be ploted every time the Draw() function is called by the AAWebPlatform. - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - scaleFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = UI.projects.superalgos.spaces.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function recalculateScale() { - recalculate(); - } - - function getContainer(point) { - - try { - - let container; - - /* First we check if this point is inside this space. */ - - if (thisObject.container.frame.isThisPointHere(point) === true) { - - return thisObject.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - let newMarketFile = marketFiles.getFile(pTimeFrame); - - if (newMarketFile !== undefined) { - - marketFile = newMarketFile; - recalculate(); - } - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - if (newFileCursor !== undefined) { - - fileCursor = newFileCursor; - recalculate(); - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - if (event.currentValue === event.totalValue) { - /* This happens only when all of the files in the cursor have been loaded. */ - recalculate(); - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - thisObject.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - recalculateUsingMarketFiles(); - } else { - recalculateUsingDailyFiles(); - } - thisObject.container.eventHandler.raiseEvent("Volumes Changed", volumes); - } - - function recalculateUsingDailyFiles() { - - try { - - if (fileCursor === undefined) { return; } // We need to wait - - if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - volumes = []; - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getUTCFullYear() + '-' + pad(currentDate.getUTCMonth() + 1, 2) + '-' + pad(currentDate.getUTCDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = dailyFile[i][0]; - volume.amountSell = dailyFile[i][1]; - - volume.begin = dailyFile[i][2]; - volume.end = dailyFile[i][3]; - - if ( - (volume.begin >= farLeftDate.valueOf() && volume.end <= farRightDate.valueOf()) && - (volume.begin >= coordinateSystem.min.x && volume.end <= coordinateSystem.max.x) - ) { - - volumes.push(volume); - - if (datetime.valueOf() >= volume.begin && datetime.valueOf() <= volume.end) { - - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentCandle); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by volumes. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - if (volumes.length > 0) { - - if (volumes[0].begin > lowerEnd || volumes[volumes.length - 1].end < upperEnd) { - - setTimeout(recalculate, 2000); - - //console.log("File missing while calculating volumes, scheduling a recalculation in 2 seconds."); - - } - } - - //console.log("Olivia > recalculateUsingDailyFiles > total volumes generated : " + volumes.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let leftDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = UI.projects.superalgos.utilities.dateRateTransformations.getDateFromPointAtBrowserCanvas(UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - volumes = []; - - for (let i = 0; i < marketFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = marketFile[i][0]; - volume.amountSell = marketFile[i][1]; - - volume.begin = marketFile[i][2]; - volume.end = marketFile[i][3]; - - if ( - (volume.begin >= leftDate.valueOf() && volume.end <= rightDate.valueOf()) && - (volume.begin >= coordinateSystem.min.x && volume.end <= coordinateSystem.max.x) - ) { - - volumes.push(volume); - - if (datetime.valueOf() >= volume.begin && datetime.valueOf() <= volume.end) { - - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.currentCandle); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total volumes generated : " + volumes.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - let lowResolution = false - if (UI.projects.superalgos.spaces.chartingSpace.viewport.zoomTargetLevel < UI.projects.superalgos.globals.zoom.ZOOM_OUT_THRESHOLD_FOR_PLOTTING_IN_LOW_RESOLUTION) { - if (volumes.length > 100) { - lowResolution = true - } - } - - if (volumes.length > 0) { - - /* Now we calculate and plot the volumes */ - - let visibleHeight = UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y; - - let frameCorner1 = { - x: 0, - y: 0 - }; - - let frameCorner2 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - }; - - - /* Now the transformations. */ - - frameCorner1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(frameCorner1, thisObject.container.frame.container); - frameCorner2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(frameCorner2, thisObject.container.frame.container); - - let frameHeightInViewPort = frameCorner2.y - frameCorner1.y; - - if (volumes.length > 0) { - - for (let i = 0; i < volumes.length; i++) { - - volume = volumes[i]; - - let volumePointA1; - let volumePointA2; - let volumePointA3; - let volumePointA4; - - function calculateBuys(plot, height) { - - volumePointA1 = { - x: volume.begin + timeFrame / 7 * 2, - y: 0 - }; - - volumePointA2 = { - x: volume.begin + timeFrame / 7 * 2, - y: volume.amountBuy - }; - - volumePointA3 = { - x: volume.begin + timeFrame / 7 * 5, - y: volume.amountBuy - }; - - volumePointA4 = { - x: volume.begin + timeFrame / 7 * 5, - y: 0 - }; - - volumePointA1 = plot.transformThisPoint(volumePointA1); - volumePointA2 = plot.transformThisPoint(volumePointA2); - volumePointA3 = plot.transformThisPoint(volumePointA3); - volumePointA4 = plot.transformThisPoint(volumePointA4); - - volumePointA1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointA1, thisObject.container); - volumePointA2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointA2, thisObject.container); - volumePointA3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointA3, thisObject.container); - volumePointA4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointA4, thisObject.container); - - let baseIncrement = (volumePointA3.x - volumePointA1.x) * WIDHTER_VOLUME_BAR_BASE_FACTOR; - - volumePointA1.x = volumePointA1.x - baseIncrement; - volumePointA4.x = volumePointA4.x + baseIncrement; - - if (volumePointA4.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x || volumePointA1.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.x) { - return false; - } - - return true; - - } - - if (calculateBuys(coordinateSystem, thisObject.container.frame.height) === false) { continue; } // We try to see if it fits in the visible area. - - let diffA = volumePointA1.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.y - if (diffA > 0) { - volumePointA1.y = volumePointA1.y - diffA - volumePointA2.y = volumePointA2.y - diffA - volumePointA3.y = volumePointA3.y - diffA - volumePointA4.y = volumePointA4.y - diffA - } - - let volumePointB1; - let volumePointB2; - let volumePointB3; - let volumePointB4; - - function calculateSells(plot, height) { - - volumePointB1 = { - x: volume.begin + timeFrame / 7 * 2, - y: height - }; - - volumePointB2 = { - x: volume.begin + timeFrame / 7 * 2, - y: height - volume.amountSell - }; - - volumePointB3 = { - x: volume.begin + timeFrame / 7 * 5, - y: height - volume.amountSell - }; - - volumePointB4 = { - x: volume.begin + timeFrame / 7 * 5, - y: height - }; - - volumePointB1 = plot.transformThisPoint2(volumePointB1); - volumePointB2 = plot.transformThisPoint2(volumePointB2); - volumePointB3 = plot.transformThisPoint2(volumePointB3); - volumePointB4 = plot.transformThisPoint2(volumePointB4); - - volumePointB1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointB1, thisObject.container); - volumePointB2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointB2, thisObject.container); - volumePointB3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointB3, thisObject.container); - volumePointB4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(volumePointB4, thisObject.container); - } - - calculateSells(coordinateSystem, thisObject.container.frame.height); // We try to see if it fits in the visible area. - - let diffB = volumePointB1.y - UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y - if (diffB < 0) { - volumePointB1.y = volumePointB1.y - diffB - volumePointB2.y = volumePointB2.y - diffB - volumePointB3.y = volumePointB3.y - diffB - volumePointB4.y = volumePointB4.y - diffB - } - - /* We put a wider base */ - - let baseIncrement = (volumePointB3.x - volumePointB1.x) * WIDHTER_VOLUME_BAR_BASE_FACTOR; - - volumePointB1.x = volumePointB1.x - baseIncrement; - volumePointB4.x = volumePointB4.x + baseIncrement; - - /* We put a less wider top */ - - let baseDencrement = (volumePointA3.x - volumePointA2.x) * LESS_WIDHTER_VOLUME_BAR_TOP_FACTOR; - - volumePointA2.x = volumePointA2.x + baseDencrement; - volumePointA3.x = volumePointA3.x - baseDencrement; - - volumePointB2.x = volumePointB2.x + baseDencrement; - volumePointB3.x = volumePointB3.x - baseDencrement; - - - /* Everything must fit within the visible area */ - - volumePointA1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointA1); - volumePointA2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointA2); - volumePointA3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointA3); - volumePointA4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointA4); - - volumePointB1 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointB1); - volumePointB2 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointB2); - volumePointB3 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointB3); - volumePointB4 = UI.projects.superalgos.spaces.chartingSpace.viewport.fitIntoVisibleArea(volumePointB4); - - volumePointA1 = thisObject.fitFunction(volumePointA1); - volumePointA2 = thisObject.fitFunction(volumePointA2); - volumePointA3 = thisObject.fitFunction(volumePointA3); - volumePointA4 = thisObject.fitFunction(volumePointA4); - - volumePointB1 = thisObject.fitFunction(volumePointB1); - volumePointB2 = thisObject.fitFunction(volumePointB2); - volumePointB3 = thisObject.fitFunction(volumePointB3); - volumePointB4 = thisObject.fitFunction(volumePointB4); - - /* Everything must fit within the Frame. We know that that is equivalent to say that each bar con not be higher than the base of the opposite . */ - - if (volumePointA2.y < volumePointB1.y) { - - volumePointA2.y = volumePointB1.y; - volumePointA3.y = volumePointB1.y; - - } - - if (volumePointB2.y > volumePointA1.y) { - - volumePointB2.y = volumePointA1.y; - volumePointB3.y = volumePointA1.y; - - } - - /* Now the drawing of the volume bars*/ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(volumePointA1.x, volumePointA1.y); - browserCanvasContext.lineTo(volumePointA2.x, volumePointA2.y); - browserCanvasContext.lineTo(volumePointA3.x, volumePointA3.y); - browserCanvasContext.lineTo(volumePointA4.x, volumePointA4.y); - - browserCanvasContext.closePath(); - - if (lowResolution === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', 0.40)'; - - if (userPositionDate >= volume.begin && userPositionDate <= volume.end) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.40)'; // Current bar accroding to time - } - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', 0.40)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(volumePointB1.x, volumePointB1.y); - browserCanvasContext.lineTo(volumePointB2.x, volumePointB2.y); - browserCanvasContext.lineTo(volumePointB3.x, volumePointB3.y); - browserCanvasContext.lineTo(volumePointB4.x, volumePointB4.y); - - browserCanvasContext.closePath(); - - if (lowResolution === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', 0.40)'; - - if (userPositionDate >= volume.begin && userPositionDate <= volume.end) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 0.40)'; // Current volume accroding to time - } - - browserCanvasContext.fill(); - } - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', 0.40)'; - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - if (userPositionDate >= volume.begin && userPositionDate <= volume.end) { - - let buyInfo = { - baseWidth: volumePointA4.x - volumePointA1.x, - topWidth: volumePointA3.x - volumePointA2.x, - height: volumePointA2.y - volumePointA1.y - }; - - let sellInfo = { - baseWidth: volumePointB4.x - volumePointB1.x, - topWidth: volumePointB3.x - volumePointB2.x, - height: volumePointB2.y - volumePointB1.y - }; - - let currentVolume = { - buyInfo: buyInfo, - sellInfo: sellInfo, - period: timeFrame, - innerVolumeBar: volume - }; - - thisObject.container.eventHandler.raiseEvent("Current Record Changed", currentVolume); - - } - /* Contributing to Auto-Scale*/ - coordinateSystem.reportYValue(volume.amountBuy * 5) - coordinateSystem.reportYValue(volume.amountSell * 5) - coordinateSystem.reportYValue(0) - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - function onViewportZoomChanged(event) { - recalculate() - } - - function onViewportPositionChanged(event) { - - try { - if (event !== undefined) { - if (event.recalculate === true) { - recalculate(); - return - } - } - if (Math.random() * 100 > 95) { - recalculate(); - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - recalculate(); - } -} - - diff --git a/Deprecated-Code/PlotterCandlesVolumes/Volumes.png b/Deprecated-Code/PlotterCandlesVolumes/Volumes.png deleted file mode 100644 index aaea183a6..000000000 Binary files a/Deprecated-Code/PlotterCandlesVolumes/Volumes.png and /dev/null differ diff --git a/Deprecated-Code/PlotterCandlesVolumes/this.plotter.config.json b/Deprecated-Code/PlotterCandlesVolumes/this.plotter.config.json deleted file mode 100644 index 5ac90a9dc..000000000 --- a/Deprecated-Code/PlotterCandlesVolumes/this.plotter.config.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "displayName": "Plotters Candles & Volumes", - "codeName": "PlottersCandlesVolumes", - "dataMine": "Masters", - "modules": [ - { - "codeName": "Candles", - "moduleName": "Candles", - "description": "Plots traditional red and green candles.", - "profilePicture": "Candles.png", - "panels": [ - { - "codeName": "CandlePanel", - "moduleName": "CandlePanel", - "event": "Current Record Changed" - } - ] - }, - { - "codeName": "Volumes", - "description": "Plots volumes separated in buy and sell.", - "moduleName": "Volumes", - "profilePicture": "Volumes.png", - "panels": [ - { - "codeName": "VolumePanel", - "moduleName": "VolumePanel", - "event": "Current Record Changed" - } - ] - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/PlotterTrading/.gitattributes b/Deprecated-Code/PlotterTrading/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/PlotterTrading/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/PlotterTrading/.gitignore b/Deprecated-Code/PlotterTrading/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/PlotterTrading/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/PlotterTrading/Competition.png b/Deprecated-Code/PlotterTrading/Competition.png deleted file mode 100644 index a4ee16263..000000000 Binary files a/Deprecated-Code/PlotterTrading/Competition.png and /dev/null differ diff --git a/Deprecated-Code/PlotterTrading/Details.js b/Deprecated-Code/PlotterTrading/Details.js deleted file mode 100644 index fc3db73c1..000000000 --- a/Deprecated-Code/PlotterTrading/Details.js +++ /dev/null @@ -1,727 +0,0 @@ -function newAAMastersPlottersTradingDetails() { - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - container: undefined, - getContainer: getContainer, - setTimePeriod: setTimePeriod, - setDatetime: setDatetime, - draw: draw - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let timeLineCoordinateSystem = newTimeLineCoordinateSystem(); // Needed to be able to plot on the timeline, otherwise not. - let timeLineCoordinateSystemFrame = newTimeLineCoordinateSystem(); // This chart uses this extra object. - - let timePeriod; // This will hold the current Time Period the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let fileCache; // This object will provide the different Market Files at different Time Periods. - let fileCursorCache; // This object will provide the different File Cursors at different Time Periods. - - /* these are module specific variables: */ - - let volumes = []; // Here we keep the volumes to be ploted every time the Draw() function is called by the AAWebPlatform. - - return thisObject; - - function initialize(pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { - - let cursorCacheInProgress = false; - let finaleStepsInProgress = false; - - datetime = pDatetime; - timePeriod = pTimePeriod; - - fileCache = newFileCache(); - fileCache.initialize("AAMasters", "AAOlivia", "Market Volumes", "Market Volumes", pExchange, pMarket, onFileReady); - - function onFileReady() { - - let newMarketFile = fileCache.getFile(ONE_DAY_IN_MILISECONDS); - - if (newMarketFile !== undefined) { - - marketFile = newMarketFile; - - initializeFileCursorCache(); - - } - } - - function initializeFileCursorCache() { - - if (cursorCacheInProgress === false) { - - cursorCacheInProgress = true; - - fileCursorCache = newFileCursorCache(); - fileCursorCache.initialize("AAMasters", "AAOlivia", "Daily Volumes", "Daily Volumes", pExchange, pMarket, pDatetime, pTimePeriod, onFileCursorReady); - - } - } - - function onFileCursorReady() { - - recalculate(); - - let newFileCursor = fileCursorCache.getFileCursor(pTimePeriod); - - if (newFileCursor !== undefined) { // if the file ready is the one we need then it and we dont have it yet, then we will continue here. - - let stringDate = datetime.getUTCFullYear() + '-' + pad(datetime.getUTCMonth() + 1, 2) + '-' + pad(datetime.getUTCDate(), 2); - - let dailyFile = newFileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - if (finaleStepsInProgress === false) { - - finaleStepsInProgress = true; - - fileCursor = newFileCursor; - - recalculateScaleX(); - recalculate(); - recalculateScaleY(); - - viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); - canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - - callBackFunction(); - - } - } - } - - } - - } - - function getContainer(point) { - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } - - function setTimePeriod(pTimePeriod) { - - timePeriod = pTimePeriod; - - if (timePeriod >= _1_HOUR_IN_MILISECONDS) { - - let newMarketFile = fileCache.getFile(pTimePeriod); - - if (newMarketFile !== undefined) { - - marketFile = newMarketFile; - - recalculate(); - - } - - } else { - - fileCursorCache.setTimePeriod(pTimePeriod); - - fileCursorCache.setDatetime(datetime); - - let newFileCursor = fileCursorCache.getFileCursor(pTimePeriod); - - if (newFileCursor !== undefined) { - - fileCursor = newFileCursor; - - recalculate(); - - } - } - - if (timePeriod === _1_HOUR_IN_MILISECONDS) { - - fileCursorCache.setTimePeriod(pTimePeriod); - - fileCursorCache.setDatetime(datetime); - - } - - } - - function setDatetime(pDatetime) { - - datetime = pDatetime; - - } - - function draw() { - - this.container.frame.draw(); - - if (timePeriod < _1_HOUR_IN_MILISECONDS) { - - if (Math.random() * 1000 > 995) { - - recalculateScaleX(); - recalculate(); - recalculateScaleY(); - - } - } - - plotChart(); - - } - - function recalculate() { - - if (timePeriod >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Volumes Changed", volumes); - } - - function recalculateUsingDailyFiles() { - - if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timePeriod); - - let leftDate = getDateFromPoint(viewPort.visibleArea.topLeft, thisObject.container, timeLineCoordinateSystem); - let rightDate = getDateFromPoint(viewPort.visibleArea.topRight, thisObject.container, timeLineCoordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - volumes = []; - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getFullYear() + '-' + pad(currentDate.getMonth() + 1, 2) + '-' + pad(currentDate.getDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = dailyFile[i][0]; - volume.amountSell = dailyFile[i][1]; - - volume.begin = dailyFile[i][2]; - volume.end = dailyFile[i][3]; - - if (volume.begin >= farLeftDate.valueOf() && volume.end <= farRightDate.valueOf()) { - - volumes.push(volume); - - if (datetime.valueOf() >= volume.begin && datetime.valueOf() <= volume.end) { - - thisObject.container.eventHandler.raiseEvent("Current Candle Changed", thisObject.currentCandle); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by volumes. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - if (volumes.length > 0) { - - if (volumes[0].begin > lowerEnd || volumes[volumes.length - 1].end < upperEnd) { - - setTimeout(recalculate, 2000); - - //console.log("File missing while calculating volumes, scheduling a recalculation in 2 seconds."); - - } - } - - //console.log("Olivia > recalculateUsingDailyFiles > total volumes generated : " + volumes.length); - - } - - function recalculateUsingMarketFiles() { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timePeriod); - - let leftDate = getDateFromPoint(viewPort.visibleArea.topLeft, thisObject.container, timeLineCoordinateSystem); - let rightDate = getDateFromPoint(viewPort.visibleArea.topRight, thisObject.container, timeLineCoordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - volumes = []; - - for (let i = 0; i < marketFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = marketFile[i][0]; - volume.amountSell = marketFile[i][1]; - - volume.begin = marketFile[i][2]; - volume.end = marketFile[i][3]; - - if (volume.begin >= leftDate.valueOf() && volume.end <= rightDate.valueOf()) { - - volumes.push(volume); - - if (datetime.valueOf() >= volume.begin && datetime.valueOf() <= volume.end) { - - thisObject.container.eventHandler.raiseEvent("Current Volume Changed", thisObject.currentCandle); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total volumes generated : " + volumes.length); - } - - function recalculateScaleX() { - - - var minValue = { - x: MIN_PLOTABLE_DATE.valueOf() - }; - - var maxValue = { - x: MAX_PLOTABLE_DATE.valueOf() - }; - - timeLineCoordinateSystem.initializeX( - minValue, - maxValue, - thisObject.container.frame.width - ); - - timeLineCoordinateSystemFrame.initializeX( - minValue, - maxValue, - thisObject.container.frame.width - ); - - } - - function recalculateScaleY() { - - var minValue = { - y: 0 - }; - - var maxValue = { - y: 0 - }; - - let timePeriodRatio = ONE_DAY_IN_MILISECONDS / timePeriod; - - maxValue.y = getMaxVolume() / (timePeriodRatio / 10); - - timeLineCoordinateSystem.initializeY( - minValue, - maxValue, - viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y - ); - - timeLineCoordinateSystemFrame.initializeY( - minValue, - maxValue, - thisObject.container.frame.height - ); - - function getMaxVolume() { - - let maxValue = 0; - - for (var i = 0; i < marketFile.length; i++) { - - let currentMax = (marketFile[i][0] + marketFile[i][1]) * 4; - - if (maxValue < currentMax) { - maxValue = currentMax; - } - } - - return maxValue; - - } - - } - - function plotChart() { - - if (volumes.length > 0) { - - /* Now we calculate and plot the volumes */ - - let visibleHeight = viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y; - - let frameCorner1 = { - x: 0, - y: 0 - }; - - let frameCorner2 = { - x: thisObject.container.frame.width, - y: thisObject.container.frame.height - }; - - - /* Now the transformations. */ - - frameCorner1 = transformThisPoint(frameCorner1, thisObject.container.frame.container); - frameCorner2 = transformThisPoint(frameCorner2, thisObject.container.frame.container); - - let frameHeightInViewPort = frameCorner2.y - frameCorner1.y; - - if (volumes.length > 0) { - - for (var i = 0; i < volumes.length; i++) { - - volume = volumes[i]; - - let volumePointA1; - let volumePointA2; - let volumePointA3; - let volumePointA4; - - function calculateBuys(plot, height) { - - volumePointA1 = { - x: volume.begin + timePeriod / 7 * 2, - y: 0 - }; - - volumePointA2 = { - x: volume.begin + timePeriod / 7 * 2, - y: volume.amountBuy - }; - - volumePointA3 = { - x: volume.begin + timePeriod / 7 * 5, - y: volume.amountBuy - }; - - volumePointA4 = { - x: volume.begin + timePeriod / 7 * 5, - y: 0 - }; - - volumePointA1 = plot.transformThisPoint(volumePointA1); - volumePointA2 = plot.transformThisPoint(volumePointA2); - volumePointA3 = plot.transformThisPoint(volumePointA3); - volumePointA4 = plot.transformThisPoint(volumePointA4); - - volumePointA1 = transformThisPoint(volumePointA1, thisObject.container); - volumePointA2 = transformThisPoint(volumePointA2, thisObject.container); - volumePointA3 = transformThisPoint(volumePointA3, thisObject.container); - volumePointA4 = transformThisPoint(volumePointA4, thisObject.container); - - let baseIncrement = (volumePointA3.x - volumePointA1.x) * WIDHTER_VOLUME_BAR_BASE_FACTOR; - - volumePointA1.x = volumePointA1.x - baseIncrement; - volumePointA4.x = volumePointA4.x + baseIncrement; - - if (volumePointA4.x < viewPort.visibleArea.bottomLeft.x || volumePointA1.x > viewPort.visibleArea.bottomRight.x) { - return false; - } - - return true; - - } - - if (calculateBuys(timeLineCoordinateSystemFrame, thisObject.container.frame.height) === false) { continue; } // We try to see if it fits in the visible area. - - if (volumePointA1.y > viewPort.visibleArea.bottomLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) { - - if (calculateBuys(timeLineCoordinateSystem, visibleHeight) === false) { continue; } // We snap t to the view port. - - /* Now we set the real value of y. */ - - volumePointA1.y = viewPort.visibleArea.bottomRight.y; - volumePointA2.y = viewPort.visibleArea.bottomRight.y - volume.amountBuy * timeLineCoordinateSystem.scale.y; - volumePointA3.y = viewPort.visibleArea.bottomRight.y - volume.amountBuy * timeLineCoordinateSystem.scale.y; - volumePointA4.y = viewPort.visibleArea.bottomRight.y; - - } - - let volumePointB1; - let volumePointB2; - let volumePointB3; - let volumePointB4; - - function calculateSells(plot, height) { - - volumePointB1 = { - x: volume.begin + timePeriod / 7 * 2, - y: height - }; - - volumePointB2 = { - x: volume.begin + timePeriod / 7 * 2, - y: height - volume.amountSell - }; - - volumePointB3 = { - x: volume.begin + timePeriod / 7 * 5, - y: height - volume.amountSell - }; - - volumePointB4 = { - x: volume.begin + timePeriod / 7 * 5, - y: height - }; - - volumePointB1 = plot.transformThisPoint2(volumePointB1); - volumePointB2 = plot.transformThisPoint2(volumePointB2); - volumePointB3 = plot.transformThisPoint2(volumePointB3); - volumePointB4 = plot.transformThisPoint2(volumePointB4); - - volumePointB1 = transformThisPoint(volumePointB1, thisObject.container); - volumePointB2 = transformThisPoint(volumePointB2, thisObject.container); - volumePointB3 = transformThisPoint(volumePointB3, thisObject.container); - volumePointB4 = transformThisPoint(volumePointB4, thisObject.container); - - } - - calculateSells(timeLineCoordinateSystemFrame, thisObject.container.frame.height); // We try to see if it fits in the visible area. - - if (volumePointB1.y < viewPort.visibleArea.topLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) { - - calculateSells(timeLineCoordinateSystem, visibleHeight); // We snap it to the view port. - - /* Now we set the real value of y. */ - - volumePointB1.y = viewPort.visibleArea.topLeft.y; - volumePointB2.y = viewPort.visibleArea.topLeft.y + volume.amountSell * timeLineCoordinateSystem.scale.y; - volumePointB3.y = viewPort.visibleArea.topLeft.y + volume.amountSell * timeLineCoordinateSystem.scale.y; - volumePointB4.y = viewPort.visibleArea.topLeft.y; - - } - - /* We put a wider base */ - - let baseIncrement = (volumePointB3.x - volumePointB1.x) * WIDHTER_VOLUME_BAR_BASE_FACTOR; - - volumePointB1.x = volumePointB1.x - baseIncrement; - volumePointB4.x = volumePointB4.x + baseIncrement; - - /* We put a less wider top */ - - let baseDencrement = (volumePointA3.x - volumePointA2.x) * LESS_WIDHTER_VOLUME_BAR_TOP_FACTOR; - - volumePointA2.x = volumePointA2.x + baseDencrement; - volumePointA3.x = volumePointA3.x - baseDencrement; - - volumePointB2.x = volumePointB2.x + baseDencrement; - volumePointB3.x = volumePointB3.x - baseDencrement; - - - /* Everything must fit within the visible area */ - - volumePointA1 = viewPort.fitIntoVisibleArea(volumePointA1); - volumePointA2 = viewPort.fitIntoVisibleArea(volumePointA2); - volumePointA3 = viewPort.fitIntoVisibleArea(volumePointA3); - volumePointA4 = viewPort.fitIntoVisibleArea(volumePointA4); - - volumePointB1 = viewPort.fitIntoVisibleArea(volumePointB1); - volumePointB2 = viewPort.fitIntoVisibleArea(volumePointB2); - volumePointB3 = viewPort.fitIntoVisibleArea(volumePointB3); - volumePointB4 = viewPort.fitIntoVisibleArea(volumePointB4); - - /* Everything must fit within the Frame. We know that that is equivalent to say that each bar con not be higher than the base of the opposite . */ - - if (volumePointA2.y < volumePointB1.y) { - - volumePointA2.y = volumePointB1.y; - volumePointA3.y = volumePointB1.y; - - } - - if (volumePointB2.y > volumePointA1.y) { - - volumePointB2.y = volumePointA1.y; - volumePointB3.y = volumePointA1.y; - - } - - /* Now the drawing of the volume bars*/ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(volumePointA1.x, volumePointA1.y); - browserCanvasContext.lineTo(volumePointA2.x, volumePointA2.y); - browserCanvasContext.lineTo(volumePointA3.x, volumePointA3.y); - browserCanvasContext.lineTo(volumePointA4.x, volumePointA4.y); - - browserCanvasContext.closePath(); - - - if (datetime !== undefined) { - - let dateValue = datetime.valueOf(); - - if (dateValue >= volume.begin && dateValue <= volume.end) { - - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, 0.40)'; // Current bar accroding to time - - } else { - - browserCanvasContext.fillStyle = 'rgba(64, 217, 26, 0.40)'; - } - - } else { - - browserCanvasContext.fillStyle = 'rgba(64, 217, 26, 0.40)'; - - } - - browserCanvasContext.fill(); - browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, 0.40)'; - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(volumePointB1.x, volumePointB1.y); - browserCanvasContext.lineTo(volumePointB2.x, volumePointB2.y); - browserCanvasContext.lineTo(volumePointB3.x, volumePointB3.y); - browserCanvasContext.lineTo(volumePointB4.x, volumePointB4.y); - - browserCanvasContext.closePath(); - - if (datetime !== undefined) { - - let dateValue = datetime.valueOf(); - - if (dateValue >= volume.begin && dateValue <= volume.end) { - - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, 0.40)'; // Current candle accroding to time - - } else { - - browserCanvasContext.fillStyle = 'rgba(219, 18, 18, 0.40)'; - } - - } else { - - browserCanvasContext.fillStyle = 'rgba(219, 18, 18, 0.40)'; - - } - - browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, 0.40)'; - - browserCanvasContext.fill(); - browserCanvasContext.lineWidth = 1; - browserCanvasContext.stroke(); - - - - if (datetime !== undefined) { - - let dateValue = datetime.valueOf(); - - if (dateValue >= volume.begin && dateValue <= volume.end) { - - let buyInfo = { - baseWidth: volumePointA4.x - volumePointA1.x, - topWidth: volumePointA3.x - volumePointA2.x, - height: volumePointA2.y - volumePointA1.y - }; - - let sellInfo = { - baseWidth: volumePointB4.x - volumePointB1.x, - topWidth: volumePointB3.x - volumePointB2.x, - height: volumePointB2.y - volumePointB1.y - }; - - let currentVolume = { - buyInfo: buyInfo, - sellInfo: sellInfo, - period: timePeriod, - innerVolumeBar: volume - }; - - thisObject.container.eventHandler.raiseEvent("Current Volume Info Changed", currentVolume); - - } - } - } - } - } - } - - function onZoomChanged(event) { - - recalculateScaleX(); - recalculate(); - recalculateScaleY(); - - } - - function onDragFinished() { - - recalculateScaleX(); - recalculate(); - recalculateScaleY(); - - } -} - diff --git a/Deprecated-Code/PlotterTrading/History.js b/Deprecated-Code/PlotterTrading/History.js deleted file mode 100644 index aaf61d035..000000000 --- a/Deprecated-Code/PlotterTrading/History.js +++ /dev/null @@ -1,926 +0,0 @@ -function newAAMastersPlottersTradingHistory() { - - const MODULE_NAME = "AAMasters Plotters Trading History"; - const INTENSIVE_LOG = false; - const ERROR_LOG = true; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - getContainer: getContainer, - setTimePeriod: setTimePeriod, - setDatetime: setDatetime, - recalculateScale: recalculateScale, - draw: draw, - payload: { - profile: { - position: { - x: 0, - y: 0 - }, - visible: false - }, - notes: [] - } - }; - - /* this is part of the module template */ - - thisObject.container = newContainer() - thisObject.container.initialize(MODULE_NAME) - - let timeLineCoordinateSystem = newTimeLineCoordinateSystem(); // Needed to be able to plot on the timeline, otherwise not. - - let timePeriod; // This will hold the current Time Period the user is at. - let datetime; // This will hold the current Datetime the user is at. - - /* these are module specific variables: */ - - let fileSequence; - let plotElements = []; // This is where the elements to be plotted are stored before plotting. - let plotLines = []; // Here we store the lines of open positions. - let notes = []; // Here we store the notes with messages from the bot. - - let notesChangedEventRaised = true; // This controls when to raise the event that notes changed. - - let previousNotesSetKey; - let currentNotesSetKey; - - let offsetChangedEventSubscriptionId - let filesUpdatedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - - viewPort.eventHandler.stopListening(offsetChangedEventSubscriptionId); - fileSequence.eventHandler.stopListening(filesUpdatedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - - /* Destroyd References */ - - datetime = undefined; - timePeriod = undefined; - - fileSequence = undefined; - plotElements = undefined; - plotLines = undefined; - notes = undefined; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err.message = " + err.message); } - } - } - - function initialize(pStorage, pExchange, pMarket, pDatetime, pTimePeriod, callBackFunction) { - - try { - - datetime = pDatetime; - timePeriod = pTimePeriod; - - fileSequence = pStorage.fileSequences[0]; - - recalculate(callBackFunction); - recalculateScale(callBackFunction); - - filesUpdatedEventSubscriptionId = fileSequence.eventHandler.listenToEvent("Files Updated", onFilesUpdated);// Only the first sequence is supported right now. - offsetChangedEventSubscriptionId = viewPort.eventHandler.listenToEvent("Offset Changed", onOffsetChanged); - - immensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(callBackFunction); - recalculateScale(callBackFunction); - }) - - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - callBackFunction(GLOBAL.CUSTOM_FAIL_RESPONSE); - } - } - - function getContainer(point) { - - try { - - let container; - - /* First we check if this point is inside this space. */ - - if (thisObject.container.frame.isThisPointHere(point) === true) { - - return thisObject.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function onFilesUpdated() { - - recalculate(); - - } - - function setTimePeriod(pTimePeriod) { - - try { - - timePeriod = pTimePeriod; - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimePeriod -> err = " + err.stack); } - } - } - - function setDatetime(newDatetime) { - - try { - - datetime = newDatetime; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimePeriod -> err = " + err.stack); } - } - } - - function onOffsetChanged() { - - if (Math.random() * 100 > 95) { - - recalculate() - }; - - } - - function recalculate(callBackFunction) { - - try { - - if (fileSequence === undefined) { return; } - - /* - - We are going to filter the records depending on the Time Period. We want that for a 1 min time peroid all the records appears on screen, - but for higher periods, we will filter out some records, so that they do not overlap ever. - - */ - - plotElements = []; - plotLines = []; - notes = []; - - let lastSellRate; - let lastSellDate; - let sellExecRate; - - let lastBuyRate; - let lastBuyDate; - let buyExecRate; - - let maxSequence = fileSequence.getFilesLoaded(); - - for (let j = 0; j < maxSequence; j++) { - - let file = fileSequence.getFile(j); - - let history = []; - let lines = []; - - /* First the small balls */ - - const ONE_MIN_IN_MILISECONDS = 60 * 1000; - let step = timePeriod / ONE_MIN_IN_MILISECONDS; - - let i = 0; - let lastRecordPushed = 0; - - for (i = 0; i < file.length; i = i + step) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14], - - messageRelevance: file[i][15], - messageTitle: file[i][16], - messageBody: file[i][17] - }; - - history.push(newHistoryRecord); - lastRecordPushed = i; - - /* Here we build the lines. */ - - if (timePeriod <= 1 * 60 * 1000) { - - if (newHistoryRecord.lastSellRate > 0) { - - lastSellRate = newHistoryRecord.lastSellRate; - lastSellDate = newHistoryRecord.date; - - } - - if (newHistoryRecord.sellExecRate > 0) { - - let newLine = { - type: "sell", - x1: lastSellDate, - y1: lastSellRate, - x2: newHistoryRecord.date, - y2: newHistoryRecord.sellExecRate - }; - - lines.push(newLine); - - } - - if (newHistoryRecord.lastBuyRate > 0) { - - lastBuyRate = newHistoryRecord.lastBuyRate; - lastBuyDate = newHistoryRecord.date; - - } - - if (newHistoryRecord.buyExecRate > 0) { - - let newLine = { - type: "buy", - x1: lastBuyDate, - y1: lastBuyRate, - x2: newHistoryRecord.date, - y2: newHistoryRecord.buyExecRate - }; - - lines.push(newLine); - - } - } - - } - - /* We allways want to put the last record of the file on the filterd dataset, so as to allways show the latest advance of the bot. */ - - i = file.length - 1; - - if (lastRecordPushed !== i) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14], - - messageRelevance: file[i][15], - messageTitle: file[i][16], - messageBody: file[i][17] - }; - - history.push(newHistoryRecord); - - } - - - /* Second we process the text */ - - for (let i = 0; i < file.length; i++) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14], - - messageRelevance: file[i][15], - messageTitle: file[i][16], - messageBody: file[i][17] - }; - - if (newHistoryRecord.messageTitle !== "" && newHistoryRecord.messageBody !== "") { - - if (newHistoryRecord.messageRelevance >= 0 && newHistoryRecord.messageRelevance <= 10) { - - let relevanceTimePeriod = (dailyFilePeriods[10 - newHistoryRecord.messageRelevance][0]); - - if (timePeriod <= relevanceTimePeriod) { - - let note = { - title: newHistoryRecord.messageTitle, - body: newHistoryRecord.messageBody, - date: newHistoryRecord.date, - rate: newHistoryRecord.marketRate, - position: { - x: 0, - y: 0 - }, - visible: false - }; - - notes.push(note); - } - } - } - } - - plotElements.push(history); - plotLines.push(lines); - - } - - notesChangedEventRaised = false; - - thisObject.container.eventHandler.raiseEvent("History Changed", history); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - callBackFunction(GLOBAL.CUSTOM_FAIL_RESPONSE); - } - } - - function recalculateScale(callBackFunction) { - - try { - - if (fileSequence === undefined) { return; } // We need the market file to be loaded to make the calculation. - - if (timeLineCoordinateSystem.maxValue > 0) { return; } // Already calculated. - - let minValue = { - x: MIN_PLOTABLE_DATE.valueOf(), - y: 0 - }; - - let maxValue = { - x: MAX_PLOTABLE_DATE.valueOf(), - y: nextPorwerOf10(USDT_BTC_HTH) / 4 // TODO: This 4 is temporary - }; - - - timeLineCoordinateSystem.initialize( - minValue, - maxValue, - thisObject.container.frame.width, - thisObject.container.frame.height - ); - - function getMaxRate() { - - try { - - let maxValue = 0; - - let maxSequence = fileSequence.getFilesLoaded(); - - for (let j = 0; j < maxSequence; j++) { - - let file = fileSequence.getFile(j); - - for (let i = 0; i < file.length; i++) { - - let currentMax = file[i][1] + file[i][2]; // 1 = rates. - - if (maxValue < currentMax) { - maxValue = currentMax; - } - } - } - - return maxValue; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateScale -> getMaxRate -> err = " + err.stack); } - callBackFunction(GLOBAL.CUSTOM_FAIL_RESPONSE); - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateScale -> err = " + err.stack); } - callBackFunction(GLOBAL.CUSTOM_FAIL_RESPONSE); - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - let userPosition = getUserPosition() - let userPositionDate = userPosition.point.x - - let point = { - x: 0, - y: 0 - }; - - let history; - - for (let j = 0; j < plotElements.length; j++) { - - let history = plotElements[j]; - - for (let i = 0; i < history.length; i++) { - - record = history[i]; - - let timestamp = Math.trunc(record.date / timePeriod) * timePeriod + timePeriod / 2; - - point = { - x: timestamp, - y: record.marketRate - }; - - point = timeLineCoordinateSystem.transformThisPoint(point); - point = transformThisPoint(point, thisObject.container); - - if (point.x < viewPort.visibleArea.bottomLeft.x || point.x > viewPort.visibleArea.bottomRight.x) { continue; } - - point = viewPort.fitIntoVisibleArea(point); - - let isCurrentRecord = false; - - if (userPositionDate >= record.date - timePeriod / 2 && userPositionDate <= record.date + timePeriod / 2 - 1) { - isCurrentRecord = true; - } - - let radius = 3; - - let opacity = '0.2'; - - browserCanvasContext.lineWidth = 1; - - /* Outer Circle */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')'; - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT + ', ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true); - browserCanvasContext.closePath(); - - if (point.x < viewPort.visibleArea.topLeft.x + 50 || point.x > viewPort.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { - browserCanvasContext.fill(); - } - - browserCanvasContext.stroke(); - - /* Draw a red inverted triangle on exec sell */ - - if (record.sellExecRate > 0) { - - opacity = '0.5'; - - let point1 = { - x: record.date, - y: record.sellExecRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.sellExecRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.sellExecRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(219, 18, 18, ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - /* Draw a green triangle on exec buy */ - - if (record.buyExecRate > 0) { - - opacity = '0.5'; - - let point1 = { - x: record.date, - y: record.buyExecRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.buyExecRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.buyExecRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(64, 217, 26, ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - /* Draw a red inverted triangle on sell */ - - if (record.lastSellRate > 0) { - - opacity = '0.5'; - - let point1 = { - x: record.date, - y: record.lastSellRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.lastSellRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.lastSellRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - /* Draw a green triangle on buy */ - - if (record.lastBuyRate > 0) { - - opacity = '0.5'; - - let point1 = { - x: record.date, - y: record.lastBuyRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.lastBuyRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.lastBuyRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - - /* Since there is at least some point plotted, then the profile should be visible. */ - - thisObject.payload.profile.visible = true; - } - - /* Draw the lines connecting plot elements. */ - - let lines = plotLines[j]; - - for (let i = 0; i < lines.length; i++) { - - let line = lines[i]; - - opacity = '0.2'; - - let point1 = { - x: line.x1, - y: line.y1 - }; - - let point2 = { - x: line.x2, - y: line.y2 - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - - browserCanvasContext.closePath(); - - if (line.type === "sell") { - - browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, ' + opacity + ')'; - - } else { - - browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, ' + opacity + ')'; - - } - - browserCanvasContext.stroke(); - - } - - /* Now we calculate the anchor position of notes. */ - - currentNotesSetKey = ""; - - for (let i = 0; i < notes.length; i++) { - - let note = notes[i]; - - opacity = '0.2'; - - note.position = { - x: note.date, - y: note.rate - }; - - note.position = timeLineCoordinateSystem.transformThisPoint(note.position); - note.position = transformThisPoint(note.position, thisObject.container); - - if (note.position.x < (viewPort.visibleArea.bottomRight.x / 2) * (-1) || note.position.x > (viewPort.visibleArea.bottomRight.x) * (1.5)) { - note.visible = false; - currentNotesSetKey = currentNotesSetKey + "0"; - } else { - note.visible = true; - currentNotesSetKey = currentNotesSetKey + "1"; - } - } - - if (notesChangedEventRaised === false) { - - /* In this case the event is raised because we might have a different set of notes. */ - - thisObject.container.eventHandler.raiseEvent("Notes Changed", notes); - thisObject.payload.notes = notes; - - notesChangedEventRaised = true; - - } else { - - if (currentNotesSetKey !== previousNotesSetKey) { - - /* In this case the event is raised because the visibility of some of the notes changed. */ - - thisObject.container.eventHandler.raiseEvent("Notes Changed", notes); - thisObject.payload.notes = notes; - - previousNotesSetKey = currentNotesSetKey; - } - } - - } - - /* - - We replace the coordinate of the profile point so that whoever has a reference to it, gets the new position. - We will use the last point plotted on screen as the profilePoint. - - */ - - thisObject.payload.profile.position.x = point.x; - thisObject.payload.profile.position.y = point.y; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } -} - diff --git a/Deprecated-Code/PlotterTrading/History.png b/Deprecated-Code/PlotterTrading/History.png deleted file mode 100644 index a6809adfd..000000000 Binary files a/Deprecated-Code/PlotterTrading/History.png and /dev/null differ diff --git a/Deprecated-Code/PlotterTrading/LICENSE b/Deprecated-Code/PlotterTrading/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/PlotterTrading/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/PlotterTrading/Live.png b/Deprecated-Code/PlotterTrading/Live.png deleted file mode 100644 index 71f565286..000000000 Binary files a/Deprecated-Code/PlotterTrading/Live.png and /dev/null differ diff --git a/Deprecated-Code/PlotterTrading/Plotters-Trading.sln b/Deprecated-Code/PlotterTrading/Plotters-Trading.sln deleted file mode 100644 index 661fcc076..000000000 --- a/Deprecated-Code/PlotterTrading/Plotters-Trading.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{096B35AD-F86F-47B9-A99F-04CA93397DA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E75EDC9D-66A7-4C54-8EA1-5ADC148CACA8} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/PlotterTrading/Project.njsproj b/Deprecated-Code/PlotterTrading/Project.njsproj deleted file mode 100644 index d12ab345e..000000000 --- a/Deprecated-Code/PlotterTrading/Project.njsproj +++ /dev/null @@ -1,70 +0,0 @@ - - - - Debug - 2.0 - {096b35ad-f86f-47b9-a99f-04ca93397da8} - - ShowAllFiles - History.js - . - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - Code - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/PlotterTrading/README.md b/Deprecated-Code/PlotterTrading/README.md deleted file mode 100644 index 1fec2f25c..000000000 --- a/Deprecated-Code/PlotterTrading/README.md +++ /dev/null @@ -1 +0,0 @@ -# AAMariam-Plotter diff --git a/Deprecated-Code/PlotterTrading/this.plotter.config.json b/Deprecated-Code/PlotterTrading/this.plotter.config.json deleted file mode 100644 index 73cd0f511..000000000 --- a/Deprecated-Code/PlotterTrading/this.plotter.config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "displayName": "Plotters Trading", - "codeName": "PlottersTrading", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "Details", - "moduleName": "Details", - "description": "Plots trading decitions in an easy to understand way.", - "panels": [] - }, - { - "codeName": "History", - "moduleName": "History", - "description": "Plots trading history.", - "profilePicture": "History.png", - "panels": [] - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/PlotterTradingSimulation/.gitattributes b/Deprecated-Code/PlotterTradingSimulation/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/PlotterTradingSimulation/.gitignore b/Deprecated-Code/PlotterTradingSimulation/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/PlotterTradingSimulation/Conditions.js b/Deprecated-Code/PlotterTradingSimulation/Conditions.js deleted file mode 100644 index 1d932cf6e..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Conditions.js +++ /dev/null @@ -1,1128 +0,0 @@ -function newTradingEnginesPlottersTradingSimulationConditions() { - - const MODULE_NAME = "Conditions Plotter"; - const INFO_LOG = false; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - draw: draw, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - record: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let conditions = []; - let headers; - - let noDefinitionOnFocusErrorDisplayed = false - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } - - /* Stop listening to the necesary events. */ - - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - /* Ready for when dimmension changes. */ - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); } - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - marketFile = marketFiles.getFile(pTimeFrame); - - recalculate(); - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - fileCursor = newFileCursor; // In this case, we explicitly want that if there is no valid cursor, we invalidate the data and show nothing. - recalculate(); - - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - - if (INFO_LOG === true) { logger.write("[INFO] setDatetime -> Entering function."); } - - datetime = pDatetime; - - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDailyFileLoaded -> Entering function."); } - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - conditions = [] - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Conditions Changed", conditions); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingDailyFiles -> Entering function."); } - - if (fileCursor === undefined) { - conditions = []; - return; - } // We need to wait - - if (fileCursor.files.size === 0) { - conditions = []; - return; - } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - conditions = []; - - - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getFullYear() + '-' + pad(currentDate.getMonth() + 1, 2) + '-' + pad(currentDate.getDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - headers = dailyFile[0]; - - for (let i = 0; i < dailyFile[1].length; i++) { - - let record = { - begin: undefined, - end: undefined, - conditions: undefined - }; - - record.begin = dailyFile[1][i][0]; - record.end = dailyFile[1][i][1]; - record.strategyIndex = dailyFile[1][i][2]; - record.variable_current_position_stopLoss_phase = dailyFile[1][i][3]; - record.variable_current_position_takeProfit_phase = dailyFile[1][i][4]; - record.conditions = dailyFile[1][i][5]; - record.formulaErrors = dailyFile[1][i][6]; - record.formulaValues = dailyFile[1][i][7]; - - if ( - (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - conditions.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Condition Changed", thisObject.record); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by conditions. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - setTimeout(recalculate, 2000); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingMarketFiles -> Entering function."); } - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - conditions = []; - headers = marketFile[0]; - - for (let i = 0; i < marketFile[1].length; i++) { - - let record = { - begin: undefined, - end: undefined, - conditions: undefined - }; - - record.begin = marketFile[1][i][0]; - record.end = marketFile[1][i][1]; - record.strategyIndex = marketFile[1][i][2]; - record.variable_current_position_stopLoss_phase = marketFile[1][i][3]; - record.variable_current_position_takeProfit_phase = marketFile[1][i][4]; - record.conditions = marketFile[1][i][5]; - record.formulaErrors = marketFile[1][i][6]; - record.formulaValues = marketFile[1][i][7]; - - if ( - (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - conditions.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Condition Changed", thisObject.record); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total conditions generated : " + conditions.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - thisObject.container.eventHandler.raiseEvent("Current Condition Record Changed", undefined); - - let conditionRecord; - - for (let i = 0; i < conditions.length; i++) { - - conditionRecord = conditions[i]; - - /* Send the current record to the panel */ - - if (userPositionDate >= conditionRecord.begin && userPositionDate <= conditionRecord.end) { - - let record = { - conditionsNames: headers, - strategyIndex: conditionRecord.strategyIndex, - variable_current_position_stopLoss_phase: conditionRecord.variable_current_position_stopLoss_phase, - variable_current_position_takeProfit_phase: conditionRecord.variable_current_position_takeProfit_phase, - conditionsValues: conditionRecord.conditions, - formulaErrors: conditionRecord.formulaErrors, - formulaValues: conditionRecord.formulaValues - }; - - sendRecordInfoToDesignerSpace(record) - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - function sendRecordInfoToDesignerSpace(record) { - - if (record === undefined) { return; } - if (record.conditionsNames === undefined) { return; } - if (canvas.designSpace.workspace === undefined) { return; } - - /* We will get now the designer trading system */ - let designerTradingSystem - let fileTradingSystem = record.conditionsNames; - - for (let i = 0; i < canvas.designSpace.workspace.workspaceNode.rootNodes.length; i++) { - let rootNode = canvas.designSpace.workspace.workspaceNode.rootNodes[i] - if (rootNode.type === 'Trading System') { - if (rootNode.id === fileTradingSystem.id) { - designerTradingSystem = rootNode - } - } - } - - if (designerTradingSystem === undefined) { return; } - - try { - - browserCanvasContext.beginPath(); - - - let conditionIndex = 0; - let formulaErrorsIndex = 0; - let formulaValuesIndex = 0; - - designerTradingSystem.payload.uiObject.setErrorMessage(fileTradingSystem.error) - - if (fileTradingSystem.parameters !== undefined) { - designerTradingSystem.parameters.payload.uiObject.setErrorMessage(fileTradingSystem.parameters.error) - if (fileTradingSystem.parameters.baseAsset !== undefined) { - designerTradingSystem.parameters.baseAsset.payload.uiObject.setErrorMessage(fileTradingSystem.parameters.baseAsset.error) - } - if (fileTradingSystem.parameters.timeRange !== undefined) { - designerTradingSystem.parameters.timeRange.payload.uiObject.setErrorMessage(fileTradingSystem.parameters.timeRange.error) - } - if (fileTradingSystem.parameters.slippage !== undefined) { - designerTradingSystem.parameters.slippage.payload.uiObject.setErrorMessage(fileTradingSystem.parameters.slippage.error) - } - if (fileTradingSystem.parameters.feeStructure !== undefined) { - designerTradingSystem.parameters.feeStructure.payload.uiObject.setErrorMessage(fileTradingSystem.parameters.feeStructure.error) - } - } - - for (let j = 0; j < fileTradingSystem.strategies.length; j++) { - - let strategy = fileTradingSystem.strategies[j]; - designerTradingSystem.strategies[j].payload.uiObject.setErrorMessage(strategy.error) - - if (record.strategyIndex === j) { - designerTradingSystem.strategies[j].payload.uiObject.isExecuting = true - } else { - designerTradingSystem.strategies[j].payload.uiObject.isExecuting = false - } - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - designerTradingSystem.strategies[j].triggerStage.payload.uiObject.setErrorMessage(triggerStage.error) - - if (triggerStage.triggerOn !== undefined) { - designerTradingSystem.strategies[j].triggerStage.triggerOn.payload.uiObject.setErrorMessage(triggerStage.triggerOn.error) - - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - - let situation = triggerStage.triggerOn.situations[k]; - designerTradingSystem.strategies[j].triggerStage.triggerOn.situations[k].payload.uiObject.setErrorMessage(triggerStage.triggerOn.situations[k].error) - processSituation(situation, designerTradingSystem.strategies[j].triggerStage.triggerOn.situations[k]); - } - - for (let k = 0; k < triggerStage.triggerOn.announcements.length; k++) { - - let announcement = triggerStage.triggerOn.announcements[k]; - designerTradingSystem.strategies[j].triggerStage.triggerOn.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].triggerStage.triggerOn.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - - if (triggerStage.triggerOff !== undefined) { - - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - - let situation = triggerStage.triggerOff.situations[k]; - designerTradingSystem.strategies[j].triggerStage.triggerOff.situations[k].payload.uiObject.setErrorMessage(triggerStage.triggerOff.situations[k].error) - processSituation(situation, designerTradingSystem.strategies[j].triggerStage.triggerOff.situations[k]); - } - - for (let k = 0; k < triggerStage.triggerOff.announcements.length; k++) { - - let announcement = triggerStage.triggerOff.announcements[k]; - designerTradingSystem.strategies[j].triggerStage.triggerOff.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].triggerStage.triggerOff.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - - if (triggerStage.takePosition !== undefined) { - - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - - let situation = triggerStage.takePosition.situations[k]; - designerTradingSystem.strategies[j].triggerStage.takePosition.situations[k].payload.uiObject.setErrorMessage(triggerStage.takePosition.situations[k].error) - processSituation(situation, designerTradingSystem.strategies[j].triggerStage.takePosition.situations[k]); - } - - for (let k = 0; k < triggerStage.takePosition.announcements.length; k++) { - - let announcement = triggerStage.takePosition.announcements[k]; - designerTradingSystem.strategies[j].triggerStage.takePosition.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].triggerStage.takePosition.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - } - - let openStage = strategy.openStage - - if (openStage !== undefined) { - designerTradingSystem.strategies[j].openStage.payload.uiObject.setErrorMessage(openStage.error) - - let initialDefinition = openStage.initialDefinition - - if (initialDefinition !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.payload.uiObject.setErrorMessage(openStage.initialDefinition.error) - - if (initialDefinition.stopLoss !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.payload.uiObject.setErrorMessage(openStage.initialDefinition.stopLoss.error) - - for (let p = 0; p < initialDefinition.stopLoss.phases.length; p++) { - - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].payload.uiObject.isExecuting = true - } else { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].payload.uiObject.isExecuting = false - } - - let phase = initialDefinition.stopLoss.phases[p]; - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].payload.uiObject.setErrorMessage(openStage.initialDefinition.stopLoss.phases[p].error) - - if (phase.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].formula.payload.uiObject.setErrorMessage(openStage.initialDefinition.stopLoss.phases[p].formula.error) - - if (record.formulaErrors[formulaErrorsIndex] !== "") { - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].formula.payload.uiObject.setErrorMessage(record.formulaErrors[formulaErrorsIndex]) - } - } - formulaErrorsIndex++ - - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].formula.payload.uiObject.setValue(record.formulaValues[formulaValuesIndex]) - } - formulaValuesIndex++ - } - - for (let k = 0; k < phase.announcements.length; k++) { - - let announcement = phase.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].nextPhaseEvent.payload.uiObject.setErrorMessage(openStage.initialDefinition.stopLoss.phases[p].nextPhaseEvent.error) - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].nextPhaseEvent.situations[k]); - } - - for (let k = 0; k < nextPhaseEvent.announcements.length; k++) { - - let announcement = nextPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].nextPhaseEvent.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].nextPhaseEvent.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n]; - if (moveToPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].moveToPhaseEvents[n].payload.uiObject.setErrorMessage(openStage.initialDefinition.stopLoss.phases[p].moveToPhaseEvents[n].error) - - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - - let situation = moveToPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].moveToPhaseEvents[n].situations[k]); - } - - for (let k = 0; k < moveToPhaseEvent.announcements.length; k++) { - - let announcement = moveToPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].moveToPhaseEvents[n].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.stopLoss.phases[p].moveToPhaseEvents[n].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - } - } - } - - if (initialDefinition.takeProfit !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.payload.uiObject.setErrorMessage(openStage.initialDefinition.takeProfit.error) - - for (let p = 0; p < initialDefinition.takeProfit.phases.length; p++) { - - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].payload.uiObject.isExecuting = true - } else { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].payload.uiObject.isExecuting = false - } - - let phase = initialDefinition.takeProfit.phases[p]; - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].payload.uiObject.setErrorMessage(openStage.initialDefinition.takeProfit.phases[p].error) - - if (phase.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].formula.payload.uiObject.setErrorMessage(openStage.initialDefinition.takeProfit.phases[p].formula.error) - - if (record.formulaErrors[formulaErrorsIndex] !== "") { - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].formula.payload.uiObject.setErrorMessage(record.formulaErrors[formulaErrorsIndex]) - } - } - formulaErrorsIndex++ - - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase === p) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].formula.payload.uiObject.setValue(record.formulaValues[formulaValuesIndex]) - } - formulaValuesIndex++ - } - - for (let k = 0; k < phase.announcements.length; k++) { - - let announcement = phase.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].nextPhaseEvent.payload.uiObject.setErrorMessage(openStage.initialDefinition.takeProfit.phases[p].nextPhaseEvent.error) - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].nextPhaseEvent.situations[k]); - } - - for (let k = 0; k < nextPhaseEvent.announcements.length; k++) { - - let announcement = nextPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].nextPhaseEvent.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].nextPhaseEvent.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n]; - if (moveToPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].moveToPhaseEvents[n].payload.uiObject.setErrorMessage(openStage.initialDefinition.takeProfit.phases[p].moveToPhaseEvent[n].error) - - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - - let situation = moveToPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].moveToPhaseEvents[n].situations[k]); - } - - for (let k = 0; k < moveToPhaseEvent.announcements.length; k++) { - - let announcement = moveToPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].moveToPhaseEvents[n].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].openStage.initialDefinition.takeProfit.phases[p].moveToPhaseEvents[n].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - } - } - } - } - - let openExecution = openStage.openExecution - - if (openExecution !== undefined) { - designerTradingSystem.strategies[j].openStage.openExecution.payload.uiObject.setErrorMessage(openStage.openExecution.error) - } - } - - let manageStage = strategy.manageStage - - if (manageStage !== undefined) { - designerTradingSystem.strategies[j].manageStage.payload.uiObject.setErrorMessage(manageStage.error) - - if (manageStage.stopLoss !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.payload.uiObject.setErrorMessage(manageStage.stopLoss.error) - - for (let p = 0; p < manageStage.stopLoss.phases.length; p++) { - - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].payload.uiObject.isExecuting = true - } else { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].payload.uiObject.isExecuting = false - } - - let phase = manageStage.stopLoss.phases[p]; - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].payload.uiObject.setErrorMessage(manageStage.stopLoss.phases[p].error) - - if (phase.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].formula.payload.uiObject.setErrorMessage(manageStage.stopLoss.phases[p].formula.error) - - if (record.formulaErrors[formulaErrorsIndex] !== "") { - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].formula.payload.uiObject.setErrorMessage(record.formulaErrors[formulaErrorsIndex]) - } - } - formulaErrorsIndex++ - if (record.strategyIndex === j && record.variable_current_position_stopLoss_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].formula.payload.uiObject.setValue(record.formulaValues[formulaValuesIndex]) - } - formulaValuesIndex++ - } - - for (let k = 0; k < phase.announcements.length; k++) { - - let announcement = phase.announcements[k]; - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].nextPhaseEvent.payload.uiObject.setErrorMessage(manageStage.stopLoss.phases[p].nextPhaseEvent.error) - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].nextPhaseEvent.situations[k]); - } - - for (let k = 0; k < nextPhaseEvent.announcements.length; k++) { - - let announcement = nextPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].nextPhaseEvent.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].nextPhaseEvent.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n]; - if (moveToPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].moveToPhaseEvent[n].payload.uiObject.setErrorMessage(manageStage.stopLoss.phases[p].moveToPhaseEvent[n].error) - - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - - let situation = moveToPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].moveToPhaseEvent[n].situations[k]); - } - - for (let k = 0; k < moveToPhaseEvent.announcements.length; k++) { - - let announcement = moveToPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].moveToPhaseEvent[n].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.stopLoss.phases[p].moveToPhaseEvent[n].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - } - } - } - - if (manageStage.takeProfit !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.payload.uiObject.setErrorMessage(manageStage.takeProfit.error) - - for (let p = 0; p < manageStage.takeProfit.phases.length; p++) { - - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].payload.uiObject.isExecuting = true - } else { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].payload.uiObject.isExecuting = false - } - - let phase = manageStage.takeProfit.phases[p]; - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].payload.uiObject.setErrorMessage(manageStage.takeProfit.phases[p].error) - - if (phase.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].formula.payload.uiObject.setErrorMessage(manageStage.takeProfit.phases[p].formula.error) - - if (record.formulaErrors[formulaErrorsIndex] !== "") { - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].formula.payload.uiObject.setErrorMessage(record.formulaErrors[formulaErrorsIndex]) - } - } - formulaErrorsIndex++ - - if (record.strategyIndex === j && record.variable_current_position_takeProfit_phase - 1 === p) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].formula.payload.uiObject.setValue(record.formulaValues[formulaValuesIndex]) - } - formulaValuesIndex++ - } - - for (let k = 0; k < phase.announcements.length; k++) { - - let announcement = phase.announcements[k]; - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].nextPhaseEvent.payload.uiObject.setErrorMessage(manageStage.takeProfit.phases[p].nextPhaseEvent.error) - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].nextPhaseEvent.situations[k]); - } - - for (let k = 0; k < nextPhaseEvent.announcements.length; k++) { - - let announcement = nextPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].nextPhaseEvent.announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].nextPhaseEvent.announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n]; - if (moveToPhaseEvent !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].moveToPhaseEvents[n].payload.uiObject.setErrorMessage(manageStage.takeProfit.phases[p].moveToPhaseEvents[n].error) - - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - - let situation = moveToPhaseEvent.situations[k]; - - processSituation(situation, designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].moveToPhaseEvents[n].situations[k]); - } - - for (let k = 0; k < moveToPhaseEvent.announcements.length; k++) { - - let announcement = moveToPhaseEvent.announcements[k]; - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].moveToPhaseEvents[n].announcements[k].payload.uiObject.setErrorMessage(announcement.error) - if (announcement.formula !== undefined) { - designerTradingSystem.strategies[j].manageStage.takeProfit.phases[p].moveToPhaseEvents[n].announcements[k].formula.payload.uiObject.setErrorMessage(announcement.formula.error) - } - } - } - } - } - } - } - - - let closeStage = strategy.closeStage - - if (closeStage !== undefined) { - designerTradingSystem.strategies[j].closeStage.payload.uiObject.setErrorMessage(closeStage.error) - - let closeExecution = closeStage.closeExecution - - if (closeExecution !== undefined) { - designerTradingSystem.strategies[j].closeStage.closeExecution.payload.uiObject.setErrorMessage(closeStage.closeExecution.error) - } - } - } - - function processSituation(situation, node) { - - node.payload.uiObject.setErrorMessage(situation.error) - - let highlightSituation = true - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = node.conditions[m] - if (condition !== undefined) { - condition.payload.uiObject.setErrorMessage(situation.conditions[m].error) - - if (situation.conditions[m].javascriptCode !== undefined) { - if (condition.javascriptCode !== undefined) { - condition.javascriptCode.payload.uiObject.setErrorMessage(situation.conditions[m].javascriptCode.error) - } - } - - if (record.conditionsValues[conditionIndex] === 1) { - condition.payload.uiObject.highlight() - } else { - highlightSituation = false - } - conditionIndex++; - } - } - - if (highlightSituation === true) { - node.payload.uiObject.highlight() - } - } - - - browserCanvasContext.closePath(); - browserCanvasContext.fill(); - - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] sendRecordInfoToDesignerSpace -> err = " + err.stack); } - } - } - - - - function onViewportZoomChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportZoomChanged -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportPositionChanged -> Entering function."); } - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDragFinished -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - - - - - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/PlotterTradingSimulation/LICENSE b/Deprecated-Code/PlotterTradingSimulation/LICENSE deleted file mode 100644 index dbbe35581..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/Deprecated-Code/PlotterTradingSimulation/Plotters-Trading-Simulation.sln b/Deprecated-Code/PlotterTradingSimulation/Plotters-Trading-Simulation.sln deleted file mode 100644 index 661fcc076..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Plotters-Trading-Simulation.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{096B35AD-F86F-47B9-A99F-04CA93397DA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {096B35AD-F86F-47B9-A99F-04CA93397DA8}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E75EDC9D-66A7-4C54-8EA1-5ADC148CACA8} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/PlotterTradingSimulation/Project.njsproj b/Deprecated-Code/PlotterTradingSimulation/Project.njsproj deleted file mode 100644 index e7eadcb92..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Project.njsproj +++ /dev/null @@ -1,87 +0,0 @@ - - - - Debug - 2.0 - {096b35ad-f86f-47b9-a99f-04ca93397da8} - - ShowAllFiles - TradingSimulation.js - . - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - Code - - - Code - - - Code - - - Code - - - Code - - - - Code - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/PlotterTradingSimulation/Project.njsproj.user b/Deprecated-Code/PlotterTradingSimulation/Project.njsproj.user deleted file mode 100644 index db8622989..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Project.njsproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - Debug|Any CPU - - \ No newline at end of file diff --git a/Deprecated-Code/PlotterTradingSimulation/README.md b/Deprecated-Code/PlotterTradingSimulation/README.md deleted file mode 100644 index d47bdb098..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/README.md +++ /dev/null @@ -1 +0,0 @@ -# Plotter Bollinger Bands diff --git a/Deprecated-Code/PlotterTradingSimulation/SimulationExecution.js b/Deprecated-Code/PlotterTradingSimulation/SimulationExecution.js deleted file mode 100644 index cecae899f..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/SimulationExecution.js +++ /dev/null @@ -1,799 +0,0 @@ -function newTradingEnginesPlottersTradingSimulationSimulationExecution() { - - const MODULE_NAME = "Simulation Execution Plotter"; - const INTENSIVE_LOG = false; - const ERROR_LOG = true; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - /* these are module specific variables: */ - - let fileSequence; - let plotElements = []; // This is where the elements to be plotted are stored before plotting. - let plotLines = []; // Here we store the lines of open positions. - - let previousNotesSetKey; - - let onMouseOverEventSuscriptionId - let offsetChangedEventSubscriptionId - let filesUpdatedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - fileSequence.eventHandler.stopListening(filesUpdatedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - - /* Destroyd References */ - - datetime = undefined; - timeFrame = undefined; - - fileSequence = undefined; - plotElements = undefined; - plotLines = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] ' + MODULE_NAME + ' -> finalize -> err = " + err.stack.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - fileSequence = pStorage.fileSequences[0]; - - recalculate(); - - filesUpdatedEventSubscriptionId = fileSequence.eventHandler.listenToEvent("Files Updated", onFilesUpdated); // Only the first sequence is supported right now. - offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Ready for when dimmension changes. */ - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); - - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] ' + MODULE_NAME + ' -> initialize -> err = " + err.stack); } - callBackFunction(GLOBAL.CUSTOM_FAIL_RESPONSE); - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - try { - let container; - /* First we check if this point is inside this space. */ - if (this.container.frame.isThisPointHere(point) === true) { - return this.container; - } else { - /* This point does not belong to this space. */ - return undefined; - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] ' + MODULE_NAME + ' -> initialize -> err = " + err.stack); } - } - } - - function onFilesUpdated() { - recalculate(); - } - - function setTimeFrame(pTimeFrame) { - timeFrame = pTimeFrame; - recalculate(); - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onViewportPositionChanged() { - if (Math.random() * 100 > 95) { - recalculate() - } - } - - function recalculate() { - try { - if (fileSequence === undefined) { return; } - /* - - We are going to filter the records depending on the Time Frame. We want that for a 1 min time peroid all the records appears on screen, - but for higher periods, we will filter out some records, so that they do not overlap ever. - - */ - plotElements = []; - plotLines = []; - - let lastSellRate; - let lastSellDate; - let sellExecRate; - - let lastBuyRate; - let lastBuyDate; - let buyExecRate; - - let maxSequence = fileSequence.getFilesLoaded(); - - for (let j = 0; j < maxSequence; j++) { - - let file = fileSequence.getFile(j); - - let history = []; - let lines = []; - - /* First the small balls */ - - const ONE_MIN_IN_MILISECONDS = 60 * 1000; - let step = timeFrame / ONE_MIN_IN_MILISECONDS; - step = 1; // For now we dont discard records depending on the zoom level. - - let i = 0; - let lastRecordPushed = 0; - - for (i = 0; i < file.length; i = i + step) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14], - datetime: file[i][0] - }; - - /* Finally we add this History Record to the Array */ - - history.push(newHistoryRecord); - lastRecordPushed = i; - - /* Here we build the lines. */ - - //if (timeFrame <= 1 * 60 * 1000) { - - if (newHistoryRecord.lastSellRate > 0) { - lastSellRate = newHistoryRecord.lastSellRate; - lastSellDate = newHistoryRecord.date; - } - - if (newHistoryRecord.sellExecRate > 0) { - let newLine = { - type: "sell", - x1: lastSellDate, - y1: lastSellRate, - x2: newHistoryRecord.date, - y2: newHistoryRecord.sellExecRate - }; - lines.push(newLine); - } - - if (newHistoryRecord.lastBuyRate > 0) { - lastBuyRate = newHistoryRecord.lastBuyRate; - lastBuyDate = newHistoryRecord.date; - } - - if (newHistoryRecord.buyExecRate > 0) { - let newLine = { - type: "buy", - x1: lastBuyDate, - y1: lastBuyRate, - x2: newHistoryRecord.date, - y2: newHistoryRecord.buyExecRate - }; - lines.push(newLine); - } - //} - } - - /* We allways want to put the last record of the file on the filterd dataset, so as to allways show the latest advance of the bot. */ - - i = file.length - 1; - - if (lastRecordPushed !== i) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14] - }; - - history.push(newHistoryRecord); - - } - - - for (let i = 0; i < file.length; i++) { - - let newHistoryRecord = { - - date: Math.trunc(file[i][0] / 60000) * 60000 + 30000, - buyAvgRate: file[i][1], - sellAvgRate: file[i][2], - - lastSellRate: file[i][3], - sellExecRate: file[i][4], - lastBuyRate: file[i][5], - buyExecRate: file[i][6], - - marketRate: file[i][7], - newPositions: file[i][8], - newTrades: file[i][9], - movedPositions: file[i][10], - profitsAssetA: file[i][11], - profitsAssetB: file[i][12], - combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14] - }; - - } - plotElements.push(history); - plotLines.push(lines); - } - - thisObject.container.eventHandler.raiseEvent("History Changed", history); - - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] ' + MODULE_NAME + ' -> recalculate -> err = " + err.stack); } - } - } - - function draw() { - plotChart(); - } - - function plotChart() { - try { - - let record - - let point = { - x: 0, - y: 0 - }; - - let history; - - for (let j = 0; j < plotElements.length; j++) { - - let history = plotElements[j]; - - for (let i = 0; i < history.length; i++) { - - record = history[i]; - record = record - - let timestamp = record.date // Math.trunc(record.date / timeFrame) * timeFrame + timeFrame / 2; - - point = { - x: timestamp, - y: record.marketRate - }; - - point = coordinateSystem.transformThisPoint(point); - point = transformThisPoint(point, thisObject.container); - - if (point.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) { continue; } - - point = canvas.chartingSpace.viewport.fitIntoVisibleArea(point); - point = thisObject.fitFunction(point); - - let isCurrentRecord = false; - - if (userPositionDate >= record.date - 30000 && userPositionDate <= record.date + 30000 - 1) { - isCurrentRecord = true; - } - - let opacity = '1'; - let currentRadius = 10 - - /* Draw a red inverted triangle on exec sell */ - if (record.sellExecRate > 0) { - - opacity = '1'; - - let normalSize = 5 - let extraSize = 0 - if (isCurrentRecord) { extraSize = 5 } - - let point1 = { - x: record.date, - y: record.sellExecRate - }; - - let point2 = { - x: record.date + timeFrame / 7 * (normalSize + extraSize), - y: record.sellExecRate - }; - - let point3 = { - x: record.date - timeFrame / 7 * (normalSize + extraSize), - y: record.sellExecRate - }; - - point1 = coordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1); - point1 = thisObject.fitFunction(point1); - - point2 = coordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point2 = thisObject.fitFunction(point2); - - point3 = coordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - record.timeFrame = diff - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point2 = thisObject.fitFunction(point2); - point3 = thisObject.fitFunction(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - if (isCurrentRecord === false) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - - } - - /* Draw a green triangle on exec buy */ - if (record.buyExecRate > 0) { - - opacity = '1'; - - let normalSize = 5 - let extraSize = 0 - if (isCurrentRecord) { extraSize = 5 } - - let point1 = { - x: record.date, - y: record.buyExecRate - }; - - let point2 = { - x: record.date + timeFrame / 7 * (normalSize + extraSize), - y: record.buyExecRate - }; - - let point3 = { - x: record.date - timeFrame / 7 * (normalSize + extraSize), - y: record.buyExecRate - }; - - point1 = coordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1); - point1 = thisObject.fitFunction(point1); - - point2 = coordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point2 = thisObject.fitFunction(point2); - - point3 = coordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - record.timeFrame = diff - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point2 = thisObject.fitFunction(point2); - point3 = thisObject.fitFunction(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')'; - - if (isCurrentRecord === false) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - } - - /* Draw a red inverted triangle on sell */ - if (record.lastSellRate > 0) { - opacity = '1'; - - let normalSize = 5 - let extraSize = 0 - if (isCurrentRecord) { extraSize = 5 } - - let point1 = { - x: record.date, - y: record.lastSellRate - }; - - let point2 = { - x: record.date + timeFrame / 7 * (normalSize + extraSize), - y: record.lastSellRate - }; - - let point3 = { - x: record.date - timeFrame / 7 * (normalSize + extraSize), - y: record.lastSellRate - }; - - point1 = coordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1); - point1 = thisObject.fitFunction(point1); - - point2 = coordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point2 = thisObject.fitFunction(point2); - - point3 = coordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - record.timeFrame = diff - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point2 = thisObject.fitFunction(point2); - point3 = thisObject.fitFunction(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - } - - /* Draw a green triangle on buy */ - if (record.lastBuyRate > 0) { - - opacity = '1'; - - let normalSize = 5 - let extraSize = 0 - if (isCurrentRecord) { extraSize = 5 } - - let point1 = { - x: record.date, - y: record.lastBuyRate - }; - - let point2 = { - x: record.date + timeFrame / 7 * (normalSize + extraSize), - y: record.lastBuyRate - }; - - let point3 = { - x: record.date - timeFrame / 7 * (normalSize + extraSize), - y: record.lastBuyRate - }; - - point1 = coordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1); - point1 = thisObject.fitFunction(point1); - - point2 = coordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point2 = thisObject.fitFunction(point2); - - point3 = coordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - record.timeFrame = diff - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - point2 = thisObject.fitFunction(point2); - point3 = thisObject.fitFunction(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - } - - /* Send the current record to the panel */ - - if (userPositionDate >= record.date - 30000 && userPositionDate < record.date + 30000) { - thisObject.container.eventHandler.raiseEvent("Current Record Changed", record); - } - - /* Circles */ - - let radius = 2; - currentRadius = 10 - - /* Outer Circle */ - - if (isCurrentRecord === true) { - - browserCanvasContext.beginPath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - - browserCanvasContext.arc(point.x, point.y, currentRadius, 0, Math.PI * 2, true); - browserCanvasContext.closePath(); - - if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { - browserCanvasContext.fill(); - } - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - } - - /* Inner Circle */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + opacity + ')'; - - browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true); - browserCanvasContext.closePath(); - - if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { - browserCanvasContext.fill(); - } - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - - } - - /* Draw the lines connecting plot elements. */ - let lines = plotLines[j]; - - for (let i = 0; i < lines.length; i++) { - - let line = lines[i]; - - opacity = '1'; - - let point1 = { - x: line.x1, - y: line.y1 - }; - - let point2 = { - x: line.x2, - y: line.y2 - }; - - point1 = coordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1); - point1 = thisObject.fitFunction(point1); - - point2 = coordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point2 = thisObject.fitFunction(point2); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - - browserCanvasContext.closePath(); - - if (line.type === "sell") { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - } - - browserCanvasContext.setLineDash([4, 1]) - browserCanvasContext.lineWidth = 0.25; - browserCanvasContext.stroke(); - } - - - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] ' + MODULE_NAME + ' -> plotChart -> err = " + err.stack); } - } - } -} - - - - - - - - - diff --git a/Deprecated-Code/PlotterTradingSimulation/SimulationExecutionPanel.js b/Deprecated-Code/PlotterTradingSimulation/SimulationExecutionPanel.js deleted file mode 100644 index ad1e51b7b..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/SimulationExecutionPanel.js +++ /dev/null @@ -1,465 +0,0 @@ - -function newTradingEnginesPlottersTradingSimulationSimulationExecutionSimulationExecutionPanel() { - - - let thisObject = { - fitFunction: undefined, - container: undefined, - isVisible: true, - onRecordChange: onRecordChange, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - let container = newContainer(); - container.initialize(); - thisObject.container = container; - - container.frame.containerName = "Trading Execution"; - - let record; - let upDownButton - - return thisObject; - - function finalize() { - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.isVisible = undefined - - record = undefined - upDownButton.finalize() - upDownButton = undefined - } - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 2.5; - - thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topLeft.x + thisObject.container.frame.width * 4; - thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(lastCurrentCandle) { - - record = lastCurrentCandle; - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plot(); - - upDownButton.draw() - - } - - - function plot() { - - if (record === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - record = record - - point = { - x: X_AXIS, - y: Y_AXIS - }; - - point = thisObject.container.frame.frameThisPoint(point); - point = thisObject.fitFunction(point); - - let isCurrentRecord = true; - - let radius = 2; - let currentRadius = 10 - let opacity = '1'; - - /* Draw a red inverted triangle on exec sell */ - if (record.sellExecRate > 0) { - - opacity = '1'; - - let point1 = { - x: X_AXIS, - y: Y_AXIS - }; - - let point2 = { - x: X_AXIS + record.timeFrame / 4, - y: Y_AXIS - }; - - let point3 = { - x: X_AXIS - record.timeFrame / 4, - y: Y_AXIS - }; - - point1 = thisObject.container.frame.frameThisPoint(point1); - point1 = thisObject.fitFunction(point1); - - point2 = thisObject.container.frame.frameThisPoint(point2); - point2 = thisObject.fitFunction(point2); - - point3 = thisObject.container.frame.frameThisPoint(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - if (isCurrentRecord === false) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - } - - /* Draw a green triangle on exec buy */ - if (record.buyExecRate > 0) { - - opacity = '1'; - - let point1 = { - x: X_AXIS, - y: Y_AXIS - }; - - let point2 = { - x: X_AXIS + record.timeFrame / 4, - y: Y_AXIS - }; - - let point3 = { - x: X_AXIS - record.timeFrame / 4, - y: Y_AXIS - }; - - point1 = thisObject.container.frame.frameThisPoint(point1); - point1 = thisObject.fitFunction(point1); - - point2 = thisObject.container.frame.frameThisPoint(point2); - point2 = thisObject.fitFunction(point2); - - point3 = thisObject.container.frame.frameThisPoint(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')'; - - if (isCurrentRecord === false) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - } - - /* Draw a red inverted triangle on sell */ - if (record.lastSellRate > 0) { - opacity = '1'; - - let point1 = { - x: X_AXIS, - y: Y_AXIS - }; - - let point2 = { - x: X_AXIS + record.timeFrame / 4, - y: Y_AXIS - }; - - let point3 = { - x: X_AXIS - record.timeFrame / 4, - y: Y_AXIS - }; - - point1 = thisObject.container.frame.frameThisPoint(point1); - point1 = thisObject.fitFunction(point1); - - point2 = thisObject.container.frame.frameThisPoint(point2); - point2 = thisObject.fitFunction(point2); - - point3 = thisObject.container.frame.frameThisPoint(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - } - - /* Draw a green triangle on buy */ - if (record.lastBuyRate > 0) { - - opacity = '1'; - - let point1 = { - x: X_AXIS, - y: Y_AXIS - }; - - let point2 = { - x: X_AXIS + record.timeFrame / 4, - y: Y_AXIS - }; - - let point3 = { - x: X_AXIS - record.timeFrame / 4, - y: Y_AXIS - }; - - point1 = thisObject.container.frame.frameThisPoint(point1); - point1 = thisObject.fitFunction(point1); - - point2 = thisObject.container.frame.frameThisPoint(point2); - point2 = thisObject.fitFunction(point2); - - point3 = thisObject.container.frame.frameThisPoint(point3); - point3 = thisObject.fitFunction(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2); - point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + opacity + ')'; - } else { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - } - - browserCanvasContext.fill(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - } - - browserCanvasContext.lineWidth = 0.25; - - /* Outer Circle */ - - if (isCurrentRecord === true) { - - browserCanvasContext.beginPath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; /* highlight the current record */ - - browserCanvasContext.arc(point.x, point.y, currentRadius, 0, Math.PI * 2, true); - browserCanvasContext.closePath(); - - if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { - browserCanvasContext.fill(); - } - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - } - - /* Inner Circle */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GOLDEN_ORANGE + ', ' + opacity + ')'; - - browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true); - browserCanvasContext.closePath(); - - if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else { - browserCanvasContext.fill(); - } - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - /* put the labels */ - - browserCanvasContext.beginPath(); - - let y; - let recordDate = new Date(record.datetime) - - printLabel('Market Rate', X_AXIS, frameTitleHeight + frameBodyHeight * 0.05 / 2, '1'); - printLabel(record.marketRate, X_AXIS, frameTitleHeight + frameBodyHeight * 0.10 / 2, '0.50'); - - printLabel('Sell Rate', X_AXIS, frameTitleHeight + frameBodyHeight * 0.15 / 2, '1'); - printLabel(record.lastSellRate, X_AXIS, frameTitleHeight + frameBodyHeight * 0.20 / 2, '0.50'); - - printLabel('Sell Executed Rate', X_AXIS, frameTitleHeight + frameBodyHeight * 0.25 / 2, '1'); - printLabel(record.sellExecRate, X_AXIS, frameTitleHeight + frameBodyHeight * 0.30 / 2, '0.50'); - - printLabel('Buy Rate', X_AXIS, frameTitleHeight + frameBodyHeight * 0.35 / 2, '1'); - printLabel(record.lastBuyRate, X_AXIS, frameTitleHeight + frameBodyHeight * 0.40 / 2, '0.40'); - - printLabel('Buy Executed Rate', X_AXIS, frameTitleHeight + frameBodyHeight * 0.45 / 2, '1'); - printLabel(record.buyExecRate, X_AXIS, frameTitleHeight + frameBodyHeight * 0.50 / 2, '0.50'); - - printLabel('ROI Asset A', X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.25 / 2), '1'); - printLabel((record.combinedProfitsB).toFixed(2) + '%', X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.30 / 2), '0.50'); - - printLabel('ROI Asset B', X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.15 / 2), '1'); - printLabel((record.combinedProfitsA).toFixed(2) + '%', X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.20 / 2), '0.50'); - - printLabel('Datetime', X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.05 / 2), '1'); - printLabel(recordDate.toUTCString(), X_AXIS, frameTitleHeight + frameBodyHeight * (1 - 0.1 / 2), '0.50'); - - - function printLabel(labelToPrint, x, y, opacity) { - - let labelPoint; - let fontSize = 10; - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.SECONDARY + ' Saira'; - - let label = '' + labelToPrint; - if (isNaN(label) === false) { - label = Number(label).toLocaleString(); - } - let xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO; - - labelPoint = { - x: x - xOffset, - y: y - }; - - labelPoint = thisObject.container.frame.frameThisPoint(labelPoint); - labelPoint = thisObject.fitFunction(labelPoint) - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', ' + opacity + ')'; - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y); - - } - - browserCanvasContext.closePath(); - browserCanvasContext.fill(); - - } - - -} - - - - - - - - diff --git a/Deprecated-Code/PlotterTradingSimulation/Strategies.js b/Deprecated-Code/PlotterTradingSimulation/Strategies.js deleted file mode 100644 index 34b0c28ea..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Strategies.js +++ /dev/null @@ -1,718 +0,0 @@ -function newTradingEnginesPlottersTradingSimulationStrategies() { - - const MODULE_NAME = "Strategies Plotter"; - const INFO_LOG = false; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - record: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let strategies = []; - let strategyImages = []; - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - strategyImages = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - /* Ready for when dimmension changes. */ - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - for (let i = 1; i < 15; i++) { - let strategyImage = canvas.designSpace.iconByUiObjectType.get('Strategy'); - strategyImages.push(strategyImage); - } - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); } - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - marketFile = marketFiles.getFile(pTimeFrame); - - recalculate(); - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - fileCursor = newFileCursor; // In this case, we explicitly want that if there is no valid cursor, we invalidate the data and show nothing. - recalculate(); - - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDailyFileLoaded -> Entering function."); } - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - strategies = [] - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Strategies Changed", strategies); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingDailyFiles -> Entering function."); } - - if (fileCursor === undefined) { - strategies = []; - return; - } // We need to wait - - if (fileCursor.files.size === 0) { - strategies = []; - return; - } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - strategies = []; - - - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getFullYear() + '-' + pad(currentDate.getMonth() + 1, 2) + '-' + pad(currentDate.getDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let record = { - begin: undefined, - end: undefined, - status: undefined, - number: undefined, - beginRate: undefined, - endRate: undefined - }; - - record.begin = dailyFile[i][0]; - record.end = dailyFile[i][1]; - record.status = dailyFile[i][2]; - record.number = dailyFile[i][3]; - record.beginRate = dailyFile[i][4]; - record.endRate = dailyFile[i][5]; - record.situationName = dailyFile[i][6]; - record.name = dailyFile[i][7]; - - if ( - (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - strategies.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Strategy Changed", thisObject.record); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by strategies. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - setTimeout(recalculate, 2000); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingMarketFiles -> Entering function."); } - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - strategies = []; - - for (let i = 0; i < marketFile.length; i++) { - - let record = { - begin: undefined, - end: undefined, - status: undefined, - number: undefined, - beginRate: undefined, - endRate: undefined - }; - - record.begin = marketFile[i][0]; - record.end = marketFile[i][1]; - record.status = marketFile[i][2]; - record.number = marketFile[i][3]; - record.beginRate = marketFile[i][4]; - record.endRate = marketFile[i][5]; - record.situationName = marketFile[i][6]; - record.name = marketFile[i][7]; - - if (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) { - - strategies.push(record); - - if ( - (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Strategy Changed", thisObject.record); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total strategies generated : " + strategies.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - thisObject.container.eventHandler.raiseEvent("Current Strategy Record Changed", undefined); - - let record; - - for (let i = 0; i < strategies.length; i++) { - - record = strategies[i]; - - let recordPoint1 = { - x: record.begin, - y: record.beginRate - }; - - let recordPoint2 = { - x: record.end, - y: record.endRate - }; - - let recordPoint3 = { - x: record.begin, - y: record.beginRate - }; - - let recordPoint4 = { - x: record.end, - y: record.endRate - }; - - recordPoint1 = coordinateSystem.transformThisPoint(recordPoint1); - recordPoint2 = coordinateSystem.transformThisPoint(recordPoint2); - recordPoint3 = coordinateSystem.transformThisPoint(recordPoint3); - recordPoint4 = coordinateSystem.transformThisPoint(recordPoint4); - - recordPoint1 = transformThisPoint(recordPoint1, thisObject.container); - recordPoint2 = transformThisPoint(recordPoint2, thisObject.container); - recordPoint3 = transformThisPoint(recordPoint3, thisObject.container); - recordPoint4 = transformThisPoint(recordPoint4, thisObject.container); - - if (recordPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) { - continue; - } - - recordPoint3.y = recordPoint1.y + 2000; - recordPoint4.y = recordPoint1.y + 2000; - - recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1); - recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2); - recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3); - recordPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint4); - - recordPoint1 = thisObject.fitFunction(recordPoint1, undefined, 30); - recordPoint2 = thisObject.fitFunction(recordPoint2, undefined, 30); - recordPoint3 = thisObject.fitFunction(recordPoint3, undefined, 30); - recordPoint4 = thisObject.fitFunction(recordPoint4, undefined, 30); - - let imageSize = 20; - let imageToDraw = strategyImages[record.number]; - - - /* Draw the line that represents the duration of closed strategy */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(recordPoint3.x + imageSize / 2, recordPoint3.y); - browserCanvasContext.lineTo(recordPoint4.x - imageSize / 2, recordPoint4.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', 1)'; - browserCanvasContext.lineWidth = 1 - - if (record.status === 1) { - browserCanvasContext.setLineDash([0, 0]) - } else { - browserCanvasContext.setLineDash([2, 4]) - } - browserCanvasContext.stroke() - - /* Draw the Area */ - /* - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(recordPoint1.x, recordPoint2.y); - browserCanvasContext.lineTo(recordPoint3.x, recordPoint3.y); - browserCanvasContext.lineTo(recordPoint4.x, recordPoint4.y); - browserCanvasContext.lineTo(recordPoint2.x, recordPoint2.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.LIGHT_GREY + ', ' + 0.5 + ')'; - browserCanvasContext.fill(); - */ - - /* Situation Name */ - let digit = record.begin.toFixed(0).substring(7,8) - let positionY = recordPoint3.y - (recordPoint3.y - recordPoint1.y) / 2 + (Number(digit) * 10 - 50) - - if (canvas.chartingSpace.viewport.zoomLevel >= ZOOM_OUT_THRESHOLD_FOR_HIDDING_CHARTS_LABELS) { - if (record.name !== "New Strategy") { - printLabel(record.name, recordPoint1.x + 5, positionY - 15, '1', 12); - } - if (record.situationName !== "New Situation") { - printLabel(record.situationName, recordPoint1.x + 5, positionY, '1', 12); - } - } - - /* Draw the Sticks */ - - drawStick(recordPoint1, recordPoint3); - drawStick(recordPoint2, recordPoint4); - - if (imageToDraw.canDrawIcon === true) { - browserCanvasContext.drawImage(imageToDraw, recordPoint3.x - imageSize / 2, recordPoint3.y - imageSize / 2, imageSize, imageSize); - if (record.status === 1) { - browserCanvasContext.drawImage(imageToDraw, recordPoint4.x - imageSize / 2, recordPoint4.y - imageSize / 2, imageSize, imageSize); - } - } - - /* Send the current record to the panel */ - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - let record = { - }; - thisObject.container.eventHandler.raiseEvent("Current Strategy Record Changed", record); - } - - function drawStick(point1, point2) { - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.DARK + ', 0.25)'; - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - /* highlight the current record */ - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current record accroding to time - } - - browserCanvasContext.setLineDash([4, 3]) - browserCanvasContext.lineWidth = 0.5 - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportZoomChanged -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportPositionChanged -> Entering function."); } - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDragFinished -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - - - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/PlotterTradingSimulation/Trades.js b/Deprecated-Code/PlotterTradingSimulation/Trades.js deleted file mode 100644 index cad27fe7c..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/Trades.js +++ /dev/null @@ -1,690 +0,0 @@ -function newTradingEnginesPlottersTradingSimulationTrades() { - - const MODULE_NAME = "Trades Plotter"; - const INFO_LOG = false; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - record: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let trades = []; - let headers; - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* Destroyd References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - /* Ready for when dimmension changes. */ - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); } - - let container; - - /* First we check if this point is inside this space. */ - - if (this.container.frame.isThisPointHere(point) === true) { - - return this.container; - - } else { - - /* This point does not belong to this space. */ - - return undefined; - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err = " + err.stack); } - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - marketFile = marketFiles.getFile(pTimeFrame); - - recalculate(); - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - fileCursor = newFileCursor; // In this case, we explicitly want that if there is no valid cursor, we invalidate the data and show nothing. - recalculate(); - - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDailyFileLoaded -> Entering function."); } - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - trades = [] - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Trades Changed", trades); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingDailyFiles -> Entering function."); } - - if (fileCursor === undefined) { - trades = []; - return; - } // We need to wait - - if (fileCursor.files.size === 0) { - trades = []; - return; - } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - trades = []; - - - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getFullYear() + '-' + pad(currentDate.getMonth() + 1, 2) + '-' + pad(currentDate.getDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let record = {}; - - record.begin = dailyFile[i][0]; - record.end = dailyFile[i][1]; - record.status = dailyFile[i][2]; - record.variable_last_position_ROI = dailyFile[i][3]; - record.beginRate = dailyFile[i][4]; - record.endRate = dailyFile[i][5]; - record.exitType = dailyFile[i][6]; - record.situationName = dailyFile[i][7]; - - if ( - (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - trades.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Trade Changed", thisObject.record); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by trades. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - setTimeout(recalculate, 2000); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] recalculateUsingMarketFiles -> Entering function."); } - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - trades = []; - - for (let i = 0; i < marketFile.length; i++) { - - let record = {}; - - record.begin = marketFile[i][0]; - record.end = marketFile[i][1]; - record.status = marketFile[i][2]; - record.variable_last_position_ROI = marketFile[i][3]; - record.beginRate = marketFile[i][4]; - record.endRate = marketFile[i][5]; - record.exitType = marketFile[i][6]; - record.situationName = marketFile[i][7]; - - if ( - (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - trades.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Trade Changed", thisObject.record); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total trades generated : " + trades.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - thisObject.container.eventHandler.raiseEvent("Current Trade Record Changed", undefined); - - let record; - - for (let i = 0; i < trades.length; i++) { - - record = trades[i]; - - /* Send the current record to the panel */ - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - let record = { - }; - thisObject.container.eventHandler.raiseEvent("Current Trade Record Changed", record); - } - - let recordPoint1 = { - x: record.begin, - y: record.beginRate - }; - - let recordPoint2 = { - x: record.end, - y: record.beginRate - }; - - let recordPoint3 = { - x: record.end, - y: record.endRate - }; - - recordPoint1 = coordinateSystem.transformThisPoint(recordPoint1); - recordPoint2 = coordinateSystem.transformThisPoint(recordPoint2); - recordPoint3 = coordinateSystem.transformThisPoint(recordPoint3); - - recordPoint1 = transformThisPoint(recordPoint1, thisObject.container); - recordPoint2 = transformThisPoint(recordPoint2, thisObject.container); - recordPoint3 = transformThisPoint(recordPoint3, thisObject.container); - - if (recordPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) { - continue; - } - - recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1); - recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2); - recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3); - - recordPoint1 = thisObject.fitFunction(recordPoint1); - recordPoint2 = thisObject.fitFunction(recordPoint2); - recordPoint3 = thisObject.fitFunction(recordPoint3); - - let line0 = record.situationName - let line1 = ''; - let line2 = ''; - - if (line0 === 'New Situation') { - line0 = '' - } - - if (record.status === 1) { - switch (record.exitType) { - case 1: { - line1 = 'Stop Loss'; - break; - } - case 2: { - line1 = 'Take Profit'; - break; - } - } - } else { - line1 = 'Open Position'; - } - - if (record.variable_last_position_ROI < 0) { - line2 = 'ROI:' + (record.variable_last_position_ROI).toFixed(2) + ' %'; - } else { - line2 = 'ROI:' + (record.variable_last_position_ROI).toFixed(2) + ' %'; - } - - /* Draw the triangle that represents the trade. */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(recordPoint1.x, recordPoint1.y); - browserCanvasContext.lineTo(recordPoint2.x, recordPoint2.y); - browserCanvasContext.lineTo(recordPoint3.x, recordPoint3.y); - - browserCanvasContext.closePath(); - - let opacity = '0.25'; - - if (record.variable_last_position_ROI > 0) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.PATINATED_TURQUOISE + ', ' + opacity + ')'; - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ')'; - } else { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + opacity + ')'; - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ')'; - } - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + opacity + ')'; - } - - browserCanvasContext.fill(); - - browserCanvasContext.lineWidth = 1; - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke(); - - let point = {} - - if (record.beginRate > record.endRate) { - point.x = recordPoint3.x - point.y = recordPoint3.y + 100 - } else { - point.x = recordPoint3.x - point.y = recordPoint3.y - 100 - } - - point = canvas.chartingSpace.viewport.fitIntoVisibleArea(point); - point = thisObject.fitFunction(point, undefined, 50); - - if ( - recordPoint3.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 250 - || - recordPoint3.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 250 - || - recordPoint3.y > canvas.chartingSpace.viewport.visibleArea.bottomRight.y - 150 - || - recordPoint3.y < canvas.chartingSpace.viewport.visibleArea.topLeft.y + 150 - ) { - // we do not write any text - } else { - - if (canvas.chartingSpace.viewport.zoomLevel >= ZOOM_OUT_THRESHOLD_FOR_HIDDING_CHARTS_LABELS) { - printLabel(line0, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line1.length * FONT_ASPECT_RATIO, point.y - 15, '1', 12); - printLabel(line1, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line1.length * FONT_ASPECT_RATIO, point.y, '1', 12); - printLabel(line2, recordPoint2.x - (recordPoint2.x - recordPoint1.x) / 2 - line2.length * FONT_ASPECT_RATIO, point.y + 15, '1', 12); - } - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportZoomChanged -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onViewportPositionChanged -> Entering function."); } - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - if (INFO_LOG === true) { logger.write("[INFO] onDragFinished -> Entering function."); } - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - - - - - - - - - - - - - - - - - - - - - diff --git a/Deprecated-Code/PlotterTradingSimulation/TradingSimulation.js b/Deprecated-Code/PlotterTradingSimulation/TradingSimulation.js deleted file mode 100644 index 52b8d4704..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/TradingSimulation.js +++ /dev/null @@ -1,864 +0,0 @@ -function newTradingEnginesPlottersTradingSimulationTradingSimulation() { - - const MODULE_NAME = "Simulation Plotter"; - const ERROR_LOG = true; - const INTENSIVE_LOG = false; - const logger = newWebDebugLog(); - logger.fileName = MODULE_NAME; - - let thisObject = { - - // Main functions and properties. - - initialize: initialize, - finalize: finalize, - container: undefined, - fitFunction: undefined, - getContainer: getContainer, - setTimeFrame: setTimeFrame, - setDatetime: setDatetime, - setCoordinateSystem: setCoordinateSystem, - draw: draw, - - /* Events declared outside the plotter. */ - - onDailyFileLoaded: onDailyFileLoaded, - - // Secondary functions and properties. - - record: undefined - }; - - /* this is part of the module template */ - - let container = newContainer(); // Do not touch this 3 lines, they are just needed. - container.initialize(); - thisObject.container = container; - - let coordinateSystem - - let timeFrame; // This will hold the current Time Frame the user is at. - let datetime; // This will hold the current Datetime the user is at. - - let marketFile; // This is the current Market File being plotted. - let fileCursor; // This is the current File Cursor being used to retrieve Daily Files. - - let marketFiles; // This object will provide the different Market Files at different Time Frames. - let dailyFiles; // This object will provide the different File Cursors at different Time Frames. - - /* these are module specific variables: */ - - let records = []; // Here we keep the records to be ploted every time the Draw() function is called by the AAWebPlatform. - - let imageStopLossPhase; - let imageTakeProfitPhase; - let imageRecord; - - let onMouseOverEventSuscriptionId - let zoomChangedEventSubscriptionId - let offsetChangedEventSubscriptionId - let dragFinishedEventSubscriptionId - let dimmensionsChangedEventSubscriptionId - let marketFilesUpdatedEventSubscriptionId - let dailyFilesUpdatedEventSubscriptionId - let scaleChangedEventSubscriptionId - - let userPositionDate - return thisObject; - - function finalize() { - try { - - /* Stop listening to the necesary events. */ - thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId) - canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId); - canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId); - canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId); - thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId) - marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId); - dailyFiles.eventHandler.stopListening(dailyFilesUpdatedEventSubscriptionId); - - /* icons */ - - imageStopLossPhase = undefined; - imageTakeProfitPhase = undefined; - imageRecord = undefined; - - /* Destroy References */ - - marketFiles = undefined; - dailyFiles = undefined; - - datetime = undefined; - timeFrame = undefined; - - marketFile = undefined; - fileCursor = undefined; - - thisObject.fitFunction = undefined - - finalizeCoordinateSystem() - coordinateSystem = undefined - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err.stack); } - } - } - - function initialize(pStorage, pDatetime, pTimeFrame, pCoordinateSystem, callBackFunction) { - - try { - - /* Store the information received. */ - - marketFiles = pStorage.marketFiles[0]; - dailyFiles = pStorage.dailyFiles[0]; - - datetime = pDatetime; - timeFrame = pTimeFrame; - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - - /* We need a Market File in order to calculate the Y scale, since this scale depends on actual data. */ - - marketFile = marketFiles.getFile(ONE_DAY_IN_MILISECONDS); // This file is the one processed faster. - - /* Now we set the right files according to current Period. */ - - marketFile = marketFiles.getFile(pTimeFrame); - fileCursor = dailyFiles.getFileCursor(pTimeFrame); - - /* Listen to the necesary events. */ - - zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged); - offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged); - dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished); - marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated); - dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated); - onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver) - - /* Get ready for plotting. */ - - recalculate(); - - /* Ready for when dimmension changes. */ - - dimmensionsChangedEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('Dimmensions Changed', function () { - recalculate(); - }) - - /* Loading a few icons */ - - imageStopLossPhase = canvas.designSpace.iconByUiObjectType.get('Managed Stop Loss'); - imageTakeProfitPhase = canvas.designSpace.iconByUiObjectType.get('Phase'); - imageRecord = canvas.designSpace.iconByUiObjectType.get('Trading System'); - - callBackFunction(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err.stack); } - } - } - - function initializeCoordinateSystem() { - scaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged) - } - - function finalizeCoordinateSystem() { - coordinateSystem.eventHandler.stopListening(scaleChangedEventSubscriptionId) - } - - function onScaleChanged() { - recalculate(); - } - - function onMouseOver(event) { - let userPosition = getDateFromPointAtBrowserCanvas(event, thisObject.container, coordinateSystem) - userPositionDate = userPosition.valueOf() - } - - function getContainer(point) { - let container; - /* First we check if this point is inside this space. */ - if (this.container.frame.isThisPointHere(point) === true) { - return this.container; - } else { - /* This point does not belong to this space. */ - return undefined; - } - } - - function onMarketFilesUpdated() { - try { - let newMarketFile = marketFiles.getFile(timeFrame); - if (newMarketFile !== undefined) { - marketFile = newMarketFile; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onMarketFilesUpdated -> err = " + err.stack); } - } - } - - function onDailyFilesUpdated() { - try { - let newFileCursor = dailyFiles.getFileCursor(timeFrame); - if (newFileCursor !== undefined) { - fileCursor = newFileCursor; - recalculate(); - } - } catch (err) { - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFilesUpdated -> err = " + err.stack); } - } - } - - function setTimeFrame(pTimeFrame) { - - try { - - if (timeFrame !== pTimeFrame) { - - timeFrame = pTimeFrame; - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - marketFile = marketFiles.getFile(pTimeFrame); - - recalculate(); - - } else { - - let newFileCursor = dailyFiles.getFileCursor(pTimeFrame); - - fileCursor = newFileCursor; // In this case, we explicitly want that if there is no valid cursor, we invalidate the data and show nothing. - recalculate(); - - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] setTimeFrame -> err = " + err.stack); } - } - } - - function setDatetime(pDatetime) { - datetime = pDatetime; - } - - function setCoordinateSystem(pCoordinateSystem) { - finalizeCoordinateSystem() - coordinateSystem = pCoordinateSystem - initializeCoordinateSystem() - } - - function onDailyFileLoaded(event) { - - try { - - if (event.currentValue === event.totalValue) { - - /* This happens only when all of the files in the cursor have been loaded. */ - - recalculate(); - - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDailyFileLoaded -> err = " + err.stack); } - } - } - - function draw() { - - try { - - if (INTENSIVE_LOG === true) { logger.write("[INFO] draw -> Entering function."); } - - this.container.frame.draw(); - - plotChart(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err = " + err.stack); } - } - } - - function recalculate() { - - try { - - records = [] - - if (timeFrame >= _1_HOUR_IN_MILISECONDS) { - - recalculateUsingMarketFiles(); - - } else { - - recalculateUsingDailyFiles(); - - } - - thisObject.container.eventHandler.raiseEvent("Records Changed", records); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculate -> err = " + err.stack); } - } - } - - function recalculateUsingDailyFiles() { - - try { - - if (fileCursor === undefined) { - records = []; - return; - } // We need to wait - - if (fileCursor.files.size === 0) { - records = []; - return; - } // We need to wait until there are files in the cursor - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - let farLeftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - let farRightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - let currentDate = new Date(farLeftDate.valueOf()); - - records = []; - - while (currentDate.valueOf() <= farRightDate.valueOf() + ONE_DAY_IN_MILISECONDS) { - - let stringDate = currentDate.getFullYear() + '-' + pad(currentDate.getMonth() + 1, 2) + '-' + pad(currentDate.getDate(), 2); - - let dailyFile = fileCursor.files.get(stringDate); - - if (dailyFile !== undefined) { - - for (let i = 0; i < dailyFile.length; i++) { - - let record = {}; - - record.begin = dailyFile[i][0]; - record.end = dailyFile[i][1]; - record.variable_current_balance_baseAsset = dailyFile[i][2]; - record.variable_current_balance_quotedAsset = dailyFile[i][3]; - record.variable_episode_stat_profitLoss = dailyFile[i][4]; - record.variable_last_position_profitLoss = dailyFile[i][5]; - record.variable_current_position_stopLoss_value = dailyFile[i][6]; - record.variable_episode_count_positions = dailyFile[i][7]; - record.variable_episode_count_hits = dailyFile[i][8]; - record.variable_episode_count_fails = dailyFile[i][9]; - record.variable_episode_stat_hitRatio = dailyFile[i][10]; - record.variable_episode_stat_ROI = dailyFile[i][11]; - record.variable_episode_count_periods = dailyFile[i][12]; - record.variable_episode_stat_days = dailyFile[i][13]; - record.variable_episode_stat_anualizedRateOfReturn = dailyFile[i][14]; - record.variable_current_position_rate = dailyFile[i][15]; - record.variable_last_position_ROI = dailyFile[i][16]; - record.strategy = dailyFile[i][17]; - record.variable_current_position_takeProfit_value = dailyFile[i][18]; - record.variable_current_position_stopLoss_phase = dailyFile[i][19]; - record.variable_current_position_takeProfit_phase = dailyFile[i][20]; - record.variable_current_position_size = dailyFile[i][21]; // 25 is the message for the executor - record.variable_episode_parameters_initial_balance_baseAsset = dailyFile[i][22]; - record.variable_episode_parameters_minimum_balance_baseAsset = dailyFile[i][23]; - record.variable_episode_parameters_maximum_balance_baseAsset = dailyFile[i][24]; - record.variable_episode_parameters_initial_balance_quotedAsset = dailyFile[i][25]; - record.variable_episode_parameters_minimum_balance_quotedAsset = dailyFile[i][26]; - record.variable_episode_parameters_maximum_balance_quotedAsset = dailyFile[i][27]; - record.variable_episode_parameters_baseAsset = dailyFile[i][28]; - record.variable_episode_parameters_quotedAsset = dailyFile[i][29]; - record.variable_episode_parameters_marketBaseAsset = dailyFile[i][30]; - record.variable_episode_parameters_marketQuotedAsset = dailyFile[i][31]; - record.variable_current_position_count_periods = dailyFile[i][32]; - record.variable_current_position_stat_days = dailyFile[i][33]; - - if ( - (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - records.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.record); - - } - } - } - } - - currentDate = new Date(currentDate.valueOf() + ONE_DAY_IN_MILISECONDS); - } - - /* Lests check if all the visible screen is going to be covered by records. */ - - let lowerEnd = leftDate.valueOf(); - let upperEnd = rightDate.valueOf(); - - setTimeout(recalculate, 2000); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingDailyFiles -> err = " + err.stack); } - } - } - - function recalculateUsingMarketFiles() { - - try { - - if (marketFile === undefined) { return; } // Initialization not complete yet. - - let daysOnSides = getSideDays(timeFrame); - - let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem); - let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem); - - let dateDiff = rightDate.valueOf() - leftDate.valueOf(); - - leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5); - rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5); - - records = []; - - for (let i = 0; i < marketFile.length; i++) { - - let record = {}; - - record.begin = marketFile[i][0]; - record.end = marketFile[i][1]; - record.variable_current_balance_baseAsset = marketFile[i][2]; - record.variable_current_balance_quotedAsset = marketFile[i][3]; - record.variable_episode_stat_profitLoss = marketFile[i][4]; - record.variable_last_position_profitLoss = marketFile[i][5]; - record.variable_current_position_stopLoss_value = marketFile[i][6]; - record.variable_episode_count_positions = marketFile[i][7]; - record.variable_episode_count_hits = marketFile[i][8]; - record.variable_episode_count_fails = marketFile[i][9]; - record.variable_episode_stat_hitRatio = marketFile[i][10]; - record.variable_episode_stat_ROI = marketFile[i][11]; - record.variable_episode_count_periods = marketFile[i][12]; - record.variable_episode_stat_days = marketFile[i][13]; - record.variable_episode_stat_anualizedRateOfReturn = marketFile[i][14]; - record.variable_current_position_rate = marketFile[i][15]; - record.variable_last_position_ROI = marketFile[i][16]; - record.variable_current_position_takeProfit_value = marketFile[i][17]; - record.variable_current_position_stopLoss_phase = marketFile[i][18]; - record.variable_current_position_takeProfit_phase = marketFile[i][19]; - record.variable_current_position_size = marketFile[i][20]; - record.variable_episode_parameters_initial_balance_baseAsset = marketFile[i][21]; - record.variable_episode_parameters_minimum_balance_baseAsset = marketFile[i][22]; - record.variable_episode_parameters_maximum_balance_baseAsset = marketFile[i][23]; - record.variable_episode_parameters_initial_balance_quotedAsset = marketFile[i][24]; - record.variable_episode_parameters_minimum_balance_quotedAsset = marketFile[i][25]; - record.variable_episode_parameters_maximum_balance_quotedAsset = marketFile[i][26]; - record.variable_episode_parameters_baseAsset = marketFile[i][27]; - record.variable_episode_parameters_quotedAsset = marketFile[i][28]; - record.variable_episode_parameters_marketBaseAsset = marketFile[i][29]; - record.variable_episode_parameters_marketQuotedAsset = marketFile[i][30]; - record.variable_current_position_count_periods = marketFile[i][31]; - record.variable_current_position_stat_days = marketFile[i][32]; - - if ( - (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) && - (record.begin >= coordinateSystem.min.x && record.end <= coordinateSystem.max.x) - ) { - - records.push(record); - - if (datetime.valueOf() >= record.begin && datetime.valueOf() <= record.end) { - - thisObject.record = record; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", thisObject.record); - - } - } - } - - //console.log("Olivia > recalculateUsingMarketFiles > total records generated : " + records.length); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] recalculateUsingMarketFiles -> err = " + err.stack); } - } - } - - function plotChart() { - - try { - - let record; - - /* Now we calculate and plot the records */ - - for (let i = 0; i < records.length; i++) { // We do not start in 0 so as to be able to read the previous record i - 1 - - record = records[i]; - - /* Contributing to Auto-Scale*/ - if (record.variable_current_position_stopLoss_value !== 0) { - coordinateSystem.reportYValue(record.variable_current_position_stopLoss_value) - } - if (record.variable_current_position_takeProfit_value !== 0) { - coordinateSystem.reportYValue(record.variable_current_position_takeProfit_value) - } - - /* Send the current record to the panel */ - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - let eventRecords = { - record: record - }; - thisObject.container.eventHandler.raiseEvent("Current Record Changed", eventRecords); - } - - let stopLossPhase = -1; - let takeProfitPhase = -1; - - if (i > 0) { - if (record.variable_current_position_stopLoss_phase !== records[i - 1].variable_current_position_stopLoss_phase) { - stopLossPhase = record.variable_current_position_stopLoss_phase; - } - - if (record.variable_current_position_takeProfit_phase !== records[i - 1].variable_current_position_takeProfit_phase) { - takeProfitPhase = record.variable_current_position_takeProfit_phase; - } - } - - let recordPoint1 = { - x: record.begin + timeFrame / 7 * 1.5, - y: thisObject.container.frame.height - }; - - let recordPoint2 = { - x: record.end + timeFrame / 7 * 5.5, - y: thisObject.container.frame.height - }; - - let recordPoint3 = { - x: recordPoint1.x + (recordPoint2.x - recordPoint1.x) / 2, - y: 0 - }; - - let recordPoint4 = { - x: record.begin + timeFrame / 7 * 1.5, - y: thisObject.container.frame.height * 100 - }; - - let recordPoint5 = { - x: record.begin, - y: record.variable_current_position_stopLoss_value - }; - - let recordPoint6 = { - x: record.end, - y: record.variable_current_position_stopLoss_value - }; - - if (record.variable_current_position_stopLoss_value === 0) { // Put these points out of range if stopLoss is zero. - - recordPoint5.x = 0; - recordPoint6.x = 0; - } - - let recordPoint7 = { - x: record.begin, - y: record.variable_current_position_rate - }; - - let recordPoint8 = { - x: record.end, - y: record.variable_current_position_rate - }; - - if (record.variable_current_position_rate === 0) { // Put these points out of range if sellRate is zero. - - recordPoint7.x = 0; - recordPoint8.x = 0; - } - - let recordPoint9 = { - x: record.begin, - y: record.variable_current_position_takeProfit_value - }; - - let recordPoint10 = { - x: record.end, - y: record.variable_current_position_takeProfit_value - }; - - if (record.variable_current_position_takeProfit_value === 0) { // Put these points out of range if takeProfit is zero. - - recordPoint9.x = 0; - recordPoint10.x = 0; - } - - recordPoint1 = coordinateSystem.transformThisPoint(recordPoint1); - recordPoint2 = coordinateSystem.transformThisPoint(recordPoint2); - recordPoint3 = coordinateSystem.transformThisPoint(recordPoint3); - recordPoint4 = coordinateSystem.transformThisPoint(recordPoint4); - recordPoint5 = coordinateSystem.transformThisPoint(recordPoint5); - recordPoint6 = coordinateSystem.transformThisPoint(recordPoint6); - recordPoint7 = coordinateSystem.transformThisPoint(recordPoint7); - recordPoint8 = coordinateSystem.transformThisPoint(recordPoint8); - recordPoint9 = coordinateSystem.transformThisPoint(recordPoint9); - recordPoint10 = coordinateSystem.transformThisPoint(recordPoint10); - - recordPoint1 = transformThisPoint(recordPoint1, thisObject.container); - recordPoint2 = transformThisPoint(recordPoint2, thisObject.container); - recordPoint3 = transformThisPoint(recordPoint3, thisObject.container); - recordPoint4 = transformThisPoint(recordPoint4, thisObject.container); - recordPoint5 = transformThisPoint(recordPoint5, thisObject.container); - recordPoint6 = transformThisPoint(recordPoint6, thisObject.container); - recordPoint7 = transformThisPoint(recordPoint7, thisObject.container); - recordPoint8 = transformThisPoint(recordPoint8, thisObject.container); - recordPoint9 = transformThisPoint(recordPoint9, thisObject.container); - recordPoint10 = transformThisPoint(recordPoint10, thisObject.container); - - recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1); - recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2); - recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3); - recordPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint4); - recordPoint5 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint5); - recordPoint6 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint6); - recordPoint7 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint7); - recordPoint8 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint8); - recordPoint9 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint9); - recordPoint10 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint10); - - recordPoint1 = thisObject.fitFunction(recordPoint1); - recordPoint2 = thisObject.fitFunction(recordPoint2); - recordPoint3 = thisObject.fitFunction(recordPoint3); - recordPoint4 = thisObject.fitFunction(recordPoint4); - recordPoint5 = thisObject.fitFunction(recordPoint5); - recordPoint6 = thisObject.fitFunction(recordPoint6); - recordPoint7 = thisObject.fitFunction(recordPoint7); - recordPoint8 = thisObject.fitFunction(recordPoint8); - recordPoint9 = thisObject.fitFunction(recordPoint9); - recordPoint10 = thisObject.fitFunction(recordPoint10); - - /* Image representing a Record */ - - let imageOffset = { - x: 0, - y: -30 - } - let imageSize = (recordPoint2.x - recordPoint1.x) / 2; - let recordLabel = record.variable_episode_count_periods.toLocaleString() - if (imageSize < 8) { - if (recordLabel[recordLabel.length - 1] !== '0' || imageSize < 4) - recordLabel = '' - } - let labelOffset = { - x: 0 - imageSize / 2 + 3 + imageOffset.x, - y: -2 - imageOffset.y - } - - let imagePosition = { - x: recordPoint4.x + imageOffset.x, - y: 0 - } - - imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition) - imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize) - - if (imageRecord.canDrawIcon === true) { - browserCanvasContext.drawImage(imageRecord, imagePosition.x, imagePosition.y, imageSize, imageSize); - browserCanvasContext.save(); - browserCanvasContext.translate(recordPoint3.x + labelOffset.x, recordPoint3.y + labelOffset.y); - browserCanvasContext.rotate(-Math.PI / 2); - printLabel(recordLabel, 0, 0, '1', 8, undefined, undefined, undefined, undefined, true); - browserCanvasContext.restore(); - } - - if (recordPoint5.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint5.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) { - continue; - } - - /* Next we are drawing the position Rate */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(recordPoint7.x, recordPoint7.y); - browserCanvasContext.lineTo(recordPoint8.x, recordPoint8.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', 1)'; - browserCanvasContext.lineWidth = 1 - browserCanvasContext.setLineDash([1, 4]) - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - browserCanvasContext.lineWidth = 5 - browserCanvasContext.setLineDash([3, 4]) - - /* highlight the current record */ - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current record accroding to time - } - - browserCanvasContext.stroke() - browserCanvasContext.setLineDash([0, 0]) - - imageSize = 20; - let imageToDraw; - - /* Depending on what is on top, it is also the text and image of the take accumulatedProfitLoss / stop loss */ - - let yOffset = 0 - if (record.variable_current_position_takeProfit_value > record.variable_current_position_stopLoss_value) { yOffset = imageSize * 2 } - - /* Next we are drawing the stopLoss floor / ceilling */ - - browserCanvasContext.beginPath(); - - - browserCanvasContext.moveTo(recordPoint5.x, recordPoint5.y); - browserCanvasContext.lineTo(recordPoint6.x, recordPoint6.y); - - - browserCanvasContext.closePath(); - - let opacity = 1 - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + opacity + ''; - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - /* highlight the current record */ - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current record accroding to time - } - - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - - imagePosition = { - x: recordPoint6.x - imageSize, - y: recordPoint6.y - imageSize * 1.25 + yOffset - } - - imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition) - imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize) - - let labelPosition = { - x: recordPoint6.x - imageSize / 2 - 3, - y: recordPoint6.y - imageSize * 1.5 + yOffset * 2 - } - labelPosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(labelPosition) - labelPosition = thisObject.fitFunction(labelPosition, undefined, 30) - - if (imageStopLossPhase.canDrawIcon === true && stopLossPhase > -1) { - browserCanvasContext.drawImage(imageStopLossPhase, imagePosition.x, imagePosition.y, imageSize, imageSize); - printLabel(stopLossPhase, labelPosition.x, labelPosition.y, '1', 9); - } - - /* Next we are drawing the Take Profit */ - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(recordPoint9.x, recordPoint9.y); - browserCanvasContext.lineTo(recordPoint10.x, recordPoint10.y); - - browserCanvasContext.closePath(); - - opacity = 1 - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + opacity + ''; - - if (userPositionDate >= record.begin && userPositionDate <= record.end) { - - /* highlight the current record */ - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)'; // Current record accroding to time - } - - browserCanvasContext.lineWidth = 1 - browserCanvasContext.stroke() - - imagePosition = { - x: recordPoint10.x - imageSize * 2 / 3, - y: recordPoint10.y + imageSize / 4 - yOffset - } - imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition) - imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize) - - labelPosition = { - x: recordPoint10.x - imageSize * 1 / 3, - y: recordPoint10.y + imageSize * 1.9 - yOffset * 2 - } - labelPosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(labelPosition) - labelPosition = thisObject.fitFunction(labelPosition, undefined, 30) - - if (imageTakeProfitPhase.canDrawIcon === true && takeProfitPhase > -1) { - browserCanvasContext.drawImage(imageTakeProfitPhase, imagePosition.x, imagePosition.y, imageSize, imageSize); - printLabel(takeProfitPhase, labelPosition.x, labelPosition.y, '1', 9); - } - } - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] plotChart -> err = " + err.stack); } - } - } - - - function onViewportZoomChanged(event) { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportZoomChanged -> err = " + err.stack); } - } - } - - function onViewportPositionChanged(event) { - - try { - - if (event !== undefined) { - if (event.recalculate === true) { - recalculate() - return - } - } - if (Math.random() * 100 > 95) { - recalculate() - }; - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onViewportPositionChanged -> err = " + err.stack); } - } - } - - function onDragFinished() { - - try { - - recalculate(); - - } catch (err) { - - if (ERROR_LOG === true) { logger.write("[ERROR] onDragFinished -> err = " + err.stack); } - } - } -} - diff --git a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationAssetBalancesPanel.js b/Deprecated-Code/PlotterTradingSimulation/TradingSimulationAssetBalancesPanel.js deleted file mode 100644 index 6ff7fc997..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationAssetBalancesPanel.js +++ /dev/null @@ -1,219 +0,0 @@ - -function newTradingEnginesPlottersTradingSimulationTradingSimulationTradingSimulationAssetBalancesPanel() { - - let thisObject = { - fitFunction: undefined, - onRecordChange: onRecordChange, - container: undefined, - session: undefined, - isVisible: true, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - let container = newContainer(); - container.initialize(); - thisObject.container = container; - - container.frame.containerName = "Simulation Asset Balances Panel"; - - let record; - let lastRecord; - let upDownButton - - const HEIGHT_FACTOR = 1.25 - - return thisObject; - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL * 1; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * HEIGHT_FACTOR; - - thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 1; - thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - - thisObject.assetBalances = newAssetalances() - thisObject.assetBalances.container.connectToParent(thisObject.container, true, true) - thisObject.assetBalances.initialize() - - } - - function finalize() { - thisObject.session = undefined - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.onRecordChange = undefined - thisObject.isVisible = undefined - - record = undefined - lastRecord = undefined - upDownButton = undefined - - thisObject.assetBalances.finalize() - thisObject.assetBalances = undefined - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(records) { - - record = records.record; - lastRecord = records.lastRecord - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentRecordInfo(); - - upDownButton.draw() - - /* Define panel name */ - if (thisObject.session !== undefined) { - const MAX_LABEL_LENGTH = 25 - if (thisObject.session.name.length > MAX_LABEL_LENGTH) { - container.frame.containerName = thisObject.session.name.substring(0, MAX_LABEL_LENGTH) + '...' - } else { - container.frame.containerName = thisObject.session.name - } - } - } - - - function plotCurrentRecordInfo() { - - if (record === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - /* put the labels with the records values */ - - let y = 0; - let increment = 0.024 / HEIGHT_FACTOR * 2.5; - - y = y + increment; - y = y + increment; - printLabel('Asset Balances', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - /* Parameters */ - let params - let paramsArray = [] - let positionTaken = false - - if (record.variable_current_position_size > 0) { - positionTaken = true - } - - let testPoint = { - x: 0, - y: thisObject.container.frame.height - } - - testPoint = thisObject.container.frame.frameThisPoint(testPoint) - let fitPoint = thisObject.fitFunction(testPoint) - if (fitPoint.y !== testPoint.y) { - return - } - - if (record.variable_episode_parameters_baseAsset === record.variable_episode_parameters_marketBaseAsset) { - params = {} - params.VALUE = record.variable_current_balance_baseAsset; - params.INIT_VALUE = record.variable_episode_parameters_initial_balance_baseAsset - params.MIN_VALUE = record.variable_episode_parameters_minimum_balance_baseAsset - params.MAX_VALUE = record.variable_episode_parameters_maximum_balance_baseAsset - params.ASSET_LABEL = 'Base' - params.ASSET_NAME = record.variable_episode_parameters_baseAsset - params.LEFT_OFFSET = X_AXIS - params.POSITION_TAKEN = positionTaken - params.BASE_ASSET = record.variable_episode_parameters_baseAsset - params.DECIMALS = 4 - - paramsArray.push(params) - - params = {} - params.VALUE = record.variable_current_balance_quotedAsset; - params.MIN_VALUE = record.variable_episode_parameters_minimum_balance_quotedAsset - params.INIT_VALUE = record.variable_episode_parameters_initial_balance_quotedAsset - params.MAX_VALUE = record.variable_episode_parameters_maximum_balance_quotedAsset - params.ASSET_LABEL = 'Quoted' - params.ASSET_NAME = record.variable_episode_parameters_quotedAsset - params.LEFT_OFFSET = X_AXIS - params.POSITION_TAKEN = positionTaken - params.BASE_ASSET = record.variable_episode_parameters_baseAsset - params.DECIMALS = 2 - - paramsArray.push(params) - } else { - params = {} - params.VALUE = record.variable_current_balance_quotedAsset; - params.INIT_VALUE = record.variable_episode_parameters_initial_balance_quotedAsset - params.MIN_VALUE = record.variable_episode_parameters_minimum_balance_quotedAsset - params.MAX_VALUE = record.variable_episode_parameters_maximum_balance_quotedAsset - params.ASSET_LABEL = 'Base' - params.ASSET_NAME = record.variable_episode_parameters_baseAsset - params.LEFT_OFFSET = X_AXIS - params.POSITION_TAKEN = positionTaken - params.BASE_ASSET = record.variable_episode_parameters_baseAsset - params.DECIMALS = 4 - - paramsArray.push(params) - - params = {} - params.VALUE = record.variable_current_balance_baseAsset; - params.MIN_VALUE = record.variable_episode_parameters_minimum_balance_baseAsset - params.INIT_VALUE = record.variable_episode_parameters_initial_balance_baseAsset - params.MAX_VALUE = record.variable_episode_parameters_maximum_balance_baseAsset - params.ASSET_LABEL = 'Quoted' - params.ASSET_NAME = record.variable_episode_parameters_quotedAsset - params.LEFT_OFFSET = X_AXIS - params.POSITION_TAKEN = positionTaken - params.BASE_ASSET = record.variable_episode_parameters_baseAsset - params.DECIMALS = 2 - - paramsArray.push(params) - } - - - thisObject.assetBalances.setParamsArray(paramsArray) - thisObject.assetBalances.draw() - } -} diff --git a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationCurrentPositionPanel.js b/Deprecated-Code/PlotterTradingSimulation/TradingSimulationCurrentPositionPanel.js deleted file mode 100644 index d3f7c9fbc..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationCurrentPositionPanel.js +++ /dev/null @@ -1,178 +0,0 @@ - - - -function newTradingEnginesPlottersTradingSimulationTradingSimulationTradingSimulationCurrentPositionPanel() { - - let thisObject = { - fitFunction: undefined, - onRecordChange: onRecordChange, - container: undefined, - session: undefined, - isVisible: true, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - let container = newContainer(); - container.initialize(); - thisObject.container = container; - - container.frame.containerName = "Simulation Current Position Panel"; - - let record; - let lastRecord; - let upDownButton - - const HEIGHT_FACTOR = 1.25 - - return thisObject; - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL * 1; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * HEIGHT_FACTOR; - - thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 1; - thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - - } - - function finalize() { - thisObject.session = undefined - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.onRecordChange = undefined - thisObject.isVisible = undefined - - record = undefined - lastRecord = undefined - upDownButton = undefined - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(records) { - - record = records.record; - lastRecord = records.lastRecord - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentRecordInfo(); - - upDownButton.draw() - - /* Define panel name */ - if (thisObject.session !== undefined) { - const MAX_LABEL_LENGTH = 25 - if (thisObject.session.name.length > MAX_LABEL_LENGTH) { - container.frame.containerName = thisObject.session.name.substring(0, MAX_LABEL_LENGTH) + '...' - } else { - container.frame.containerName = thisObject.session.name - } - } - } - - - function plotCurrentRecordInfo() { - - if (record === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - - /* put the labels with the records values */ - - let y = 0; - let increment = 0.024 / HEIGHT_FACTOR * 2.5; - - y = y + increment; - y = y + increment; - printLabel('Current Position', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Size', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_current_position_size, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Rate', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_current_position_rate, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Stop', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_current_position_stopLoss_value, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Take Profit', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_current_position_takeProfit_value, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Periods', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_current_position_count_periods), X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Days', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_current_position_stat_days).toFixed(2), X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - y = y + increment; - printLabel('Latest Position', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Profit / Loss', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_last_position_profitLoss), X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('ROI', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_last_position_ROI).toFixed(2) + ' % ', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - } -} diff --git a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationEpisodePanel.js b/Deprecated-Code/PlotterTradingSimulation/TradingSimulationEpisodePanel.js deleted file mode 100644 index e1530d7cf..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/TradingSimulationEpisodePanel.js +++ /dev/null @@ -1,177 +0,0 @@ - -function newTradingEnginesPlottersTradingSimulationTradingSimulationTradingSimulationEpisodePanel() { - - let thisObject = { - fitFunction: undefined, - onRecordChange: onRecordChange, - container: undefined, - session: undefined, - isVisible: true, - draw: draw, - getContainer: getContainer, - initialize: initialize, - finalize: finalize - }; - - let container = newContainer(); - container.initialize(); - thisObject.container = container; - - container.frame.containerName = "Simulation Episode Panel"; - - let record; - let lastRecord; - let upDownButton - - const HEIGHT_FACTOR = 1.25 - - return thisObject; - - function initialize() { - - thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL * 1; - thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * HEIGHT_FACTOR; - - thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 1; - thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y; - - upDownButton = newUpDownButton() - upDownButton.parentContainer = thisObject.container - upDownButton.container.frame.parentFrame = thisObject.container.frame - upDownButton.fitFunction = thisObject.fitFunction - upDownButton.initialize() - - } - - function finalize() { - thisObject.session = undefined - - thisObject.container.finalize() - thisObject.container = undefined - thisObject.fitFunction = undefined - thisObject.onRecordChange = undefined - thisObject.isVisible = undefined - - record = undefined - lastRecord = undefined - upDownButton = undefined - } - - function getContainer(point) { - if (thisObject.isVisible !== true) { return } - let container; - - container = upDownButton.getContainer(point) - if (container !== undefined) { return container } - - if (thisObject.container.frame.isThisPointHere(point, true) === true) { - - let checkPoint = { - x: point.x, - y: point.y - } - - checkPoint = thisObject.fitFunction(checkPoint) - - if (point.x === checkPoint.x && point.y === checkPoint.y) { - return thisObject.container; - } - } - } - - - function onRecordChange(records) { - - record = records.record; - lastRecord = records.lastRecord - - } - - - function draw() { - if (thisObject.isVisible !== true) { return } - thisObject.container.frame.draw(false, false, true, thisObject.fitFunction); - - plotCurrentRecordInfo(); - - upDownButton.draw() - - /* Define panel name */ - if (thisObject.session !== undefined) { - const MAX_LABEL_LENGTH = 25 - if (thisObject.session.name.length > MAX_LABEL_LENGTH) { - container.frame.containerName = thisObject.session.name.substring(0, MAX_LABEL_LENGTH) + '...' - } else { - container.frame.containerName = thisObject.session.name - } - } - } - - - function plotCurrentRecordInfo() { - - if (record === undefined) { return; } - - const frameBodyHeight = thisObject.container.frame.getBodyHeight(); - const frameTitleHeight = thisObject.container.frame.height - frameBodyHeight; - - const X_AXIS = thisObject.container.frame.width / 2; - const Y_AXIS = frameTitleHeight + frameBodyHeight / 2; - - - /* put the labels with the records values */ - - let y = 0; - let increment = 0.024 / HEIGHT_FACTOR * 2.5; - - y = y + increment; - y = y + increment; - printLabel('Episode', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Profit / Loss', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_stat_profitLoss, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Trades', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_count_positions, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Hits', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_count_hits, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Fails', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_count_fails, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Hit Ratio', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_episode_stat_hitRatio * 100).toFixed(2) + ' %', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('ROI', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_episode_stat_ROI * 100).toFixed(2) + ' %', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Periods', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_count_periods, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Days', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel(record.variable_episode_stat_days, X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - y = y + increment; - printLabel('Anualized Rate of Return', X_AXIS, frameTitleHeight + frameBodyHeight * y, '0.60', undefined, undefined, true, thisObject.container, thisObject.fitFunction); - y = y + increment; - printLabel((record.variable_episode_stat_anualizedRateOfReturn * 100).toFixed(2) + ' %', X_AXIS, frameTitleHeight + frameBodyHeight * y, '1.00', 14, undefined, true, thisObject.container, thisObject.fitFunction); - - } -} diff --git a/Deprecated-Code/PlotterTradingSimulation/this.plotter.config.json b/Deprecated-Code/PlotterTradingSimulation/this.plotter.config.json deleted file mode 100644 index d5ff7028d..000000000 --- a/Deprecated-Code/PlotterTradingSimulation/this.plotter.config.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "displayName": "Plotters Trading Simulation", - "codeName": "PlottersTradingSimulation", - "dataMine": "Masters", - "modules": [ - { - "codeName": "TradingSimulation", - "moduleName": "TradingSimulation", - "description": "Plots Bollinger Records.", - "profilePicture": "TradingSimulation.png", - "panels": [ - { - "codeName": "TradingSimulationPanel", - "moduleName": "TradingSimulationPanel", - "event": "Current Record Changed" - } - ] - }, - { - "codeName": "Conditions", - "moduleName": "Conditions", - "description": "Plots Simulation Conditions.", - "profilePicture": "Conditions.png", - "panels": [] - }, - { - "codeName": "Strategies", - "moduleName": "Strategies", - "description": "Plots Strategies.", - "profilePicture": "Strategies.png", - "panels": [ - ] - }, - { - "codeName": "Trades", - "moduleName": "Trades", - "description": "Plots Trades.", - "profilePicture": "Trades.png", - "panels": [ - ] - }, - { - "codeName": "SimulationExecution", - "moduleName": "SimulationExecution", - "description": "Plots Simulation Execution.", - "profilePicture": "SimulationExecution.png", - "panels": [ - { - "codeName": "SimulationExecutionPanel", - "moduleName": "SimulationExecutionPanel", - "event": "Current Record Changed" - } - ] - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/ProtocolEngine/.gitattributes b/Deprecated-Code/ProtocolEngine/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/ProtocolEngine/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/ProtocolEngine/.gitignore b/Deprecated-Code/ProtocolEngine/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/ProtocolEngine/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/ProtocolEngine/AAJason-Trading-Bot.sln b/Deprecated-Code/ProtocolEngine/AAJason-Trading-Bot.sln deleted file mode 100644 index da30e179e..000000000 --- a/Deprecated-Code/ProtocolEngine/AAJason-Trading-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AA2901BC-8F81-40F0-A402-5CA79A3F22AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/ProtocolEngine/Commons.js b/Deprecated-Code/ProtocolEngine/Commons.js deleted file mode 100644 index 7b8bc19bf..000000000 --- a/Deprecated-Code/ProtocolEngine/Commons.js +++ /dev/null @@ -1,3121 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons -> " + bot.SESSION.name ; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - const GMT_SECONDS = ':00.000 GMT+0000'; - - let thisObject = { - finalize: finalize, - runSimulation: runSimulation, - buildPercentageBandwidthArray: buildPercentageBandwidthArray, - buildBollingerBandsArray: buildBollingerBandsArray, - buildBollingerChannelsArray: buildBollingerChannelsArray, - buildBollingerSubChannelsArray: buildBollingerSubChannelsArray, - buildCandles: buildCandles - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - let percentageBandwidthAt = {} - let bollingerBandsAt = {} - let bollingerChannelsAt = {} - let bollingerSubChannelsAt = {} - let candlesAt = {} - - - return thisObject; - - function finalize() { - percentageBandwidthAt = undefined - bollingerBandsAt = undefined - bollingerChannelsAt = undefined - bollingerSubChannelsAt = undefined - candlesAt = undefined - thisObject = undefined - } - - function runSimulation( - timePeriod, - timePeriodLabel, - currentDay, - interExecutionMemory, - assistant, - callback, - callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> Entering function."); } - let processingDailyFiles - if (timePeriod > global.dailyFilePeriods[0][0]) { - processingDailyFiles = false - } else { - processingDailyFiles = true - } - - let recordsArray = []; - let conditionsArray = []; - let strategiesArray = []; - let tradesArray = []; - - let tradingSystem = bot.DEFINITION.tradingSystem; - - /* Initial Default Values */ - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> bot.VALUES_TO_USE.timeRange.initialDatetime = " + bot.VALUES_TO_USE.timeRange.initialDatetime); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> bot.VALUES_TO_USE.timeRange.finalDatetime = " + bot.VALUES_TO_USE.timeRange.finalDatetime); } - - let timerToCloseStage = 0 - - /* Stop Loss Management */ - - const MIN_STOP_LOSS_VALUE = 1 // We can not let the stop be zero to avoid division by 0 error or infinity numbers as a result. - const MAX_STOP_LOSS_VALUE = Number.MAX_SAFE_INTEGER - let stopLoss = 0; - - /* Take Profit Management */ - - const MIN_TAKE_PROFIT_VALUE = 1 // We can not let the buy order be zero to avoid division by 0 error or infinity numbers as a result. - const MAX_TAKE_PROFIT_VALUE = Number.MAX_SAFE_INTEGER - let takeProfit = 0; - - /* Simulation Records */ - - let hitRatio = 0; - let ROI = 0; - let days = 0; - let positionDays = 0; - let anualizedRateOfReturn = 0; - let type = '""'; - let marketRate = 0; - let takePositionNow = false - let closePositionNow = false - - /* In some cases we need to know if we are positioned at the last candle of the calendar day, for that we need these variables. */ - - let lastInstantOfTheDay = 0 - if (currentDay) { - lastInstantOfTheDay = currentDay.valueOf() + ONE_DAY_IN_MILISECONDS - 1; - } - - /* - The following counters need to survive multiple executions of the similator and keep themselves reliable. - This is challenging when the simulation is executed using Daily Files, since each execution means a new - day and these counters are meant to be kept along the whole market. - - To overcome this problem, we use the interExecutionMemory to record the values of the current execution - when finish. But there are a few details: - - 1. When the process is at the head of the market, it executes multple times at the same day. - 2. The same code serves execution from Market Files. - 3. In Daily Files we are receiving candles from the current day and previous day, so we need to take care of - not adding to the counters duplicate info when processing the day before candles. - - To overcome these challenges we record the values of the counters and variables on the interExecutionMemory only when - the day is complete and if we have a current Day. That menas that for Market Files we will never use - interExecutionMemory. - */ - - /*Needed for statistics */ - let previousBalanceAssetA = 0; - let previousBalanceAssetB = 0; - - /* Position Management */ - let tradePositionRate = 0; - let tradePositionSize = 0; - - /* Strategy and Phase Management */ - let currentStrategyIndex = -1; - let strategyStage = 'No Stage'; - - let stopLossPhase = -1; - let stopLossStage = 'No Stage'; - - let takeProfitPhase = -1; - let takeProfitStage = 'No Stage'; - - /* These 2 objects will allow us to create separate files for each one of them. */ - - let currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - - let currentTrade = { - begin: 0, - end: 0, - status: 0, - profit: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - - let balanceAssetA = bot.VALUES_TO_USE.initialBalanceA; - let balanceAssetB = bot.VALUES_TO_USE.initialBalanceB; - - let lastTradeProfitLoss = 0; - let profit = 0; - let lastTradeROI = 0; - - let roundtrips = 0; - let fails = 0; - let hits = 0; - let periods = 0; - let positionPeriods = 0; - - /* Usefull counters for conditions and formulas */ - - let distanceToLast = { - triggerOn: 0, - triggerOff: 0, - takePosition: 0, - closePosition: 0 - } - - /* Message to the Simulation Executor */ - - let orderId = 0; - let messageId = 0; - - let yesterday = {}; - - /* Initialization */ - - yesterday.stopLoss = 0 - yesterday.takeProfit = 0 - - yesterday.previousBalanceAssetA = previousBalanceAssetA - yesterday.previousBalanceAssetB = previousBalanceAssetB - - yesterday.tradePositionRate = tradePositionRate - yesterday.tradePositionSize = tradePositionSize - - yesterday.currentStrategyIndex = currentStrategyIndex - yesterday.strategyStage = strategyStage - - yesterday.stopLossPhase = stopLossPhase - yesterday.stopLossStage = stopLossStage - - yesterday.takeProfitPhase = takeProfitPhase - yesterday.takeProfitStage = takeProfitStage - - yesterday.currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - - yesterday.currentTrade = { - begin: 0, - end: 0, - status: 0, - profit: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - yesterday.lastTradeProfitLoss = 0; - yesterday.profit = 0; - yesterday.lastTradeROI = 0; - - yesterday.roundtrips = 0; - yesterday.fails = 0; - yesterday.hits = 0; - yesterday.periods = 0; - yesterday.positionPeriods = 0; - - yesterday.distanceToLast = { - triggerOn: 0, - triggerOff: 0, - takePosition: 0, - closePosition: 0 - } - - yesterday.orderId = 0; - yesterday.messageId = 0; - - yesterday.hitRatio = 0; - yesterday.ROI = 0; - yesterday.anualizedRateOfReturn = 0; - - if (interExecutionMemory.roundtrips === undefined) { // This just means that the inter execution memory was never used before. - - /* Initialize the data structure we will use inter execution. */ - - interExecutionMemory.stopLoss = 0 - interExecutionMemory.takeProfit = 0 - - interExecutionMemory.previousBalanceAssetA = previousBalanceAssetA - interExecutionMemory.previousBalanceAssetB = previousBalanceAssetB - - interExecutionMemory.tradePositionRate = tradePositionRate - interExecutionMemory.tradePositionSize = tradePositionSize - - interExecutionMemory.currentStrategyIndex = currentStrategyIndex - interExecutionMemory.strategyStage = strategyStage - - interExecutionMemory.stopLossPhase = stopLossPhase - interExecutionMemory.stopLossStage = stopLossStage - - interExecutionMemory.takeProfitPhase = takeProfitPhase - interExecutionMemory.takeProfitStage = takeProfitStage - - interExecutionMemory.currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - - interExecutionMemory.currentTrade = { - begin: 0, - end: 0, - status: 0, - profit: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - - interExecutionMemory.balanceAssetA = balanceAssetA; - interExecutionMemory.balanceAssetB = balanceAssetB; - - interExecutionMemory.lastTradeProfitLoss = lastTradeProfitLoss; - interExecutionMemory.profit = profit; - interExecutionMemory.lastTradeROI = lastTradeROI; - - interExecutionMemory.roundtrips = 0; - interExecutionMemory.fails = 0; - interExecutionMemory.hits = 0; - interExecutionMemory.periods = 0; - interExecutionMemory.positionPeriods = 0; - - interExecutionMemory.distanceToLast = { - triggerOn: 0, - triggerOff: 0, - takePosition: 0, - closePosition: 0 - } - - interExecutionMemory.orderId = 0; - interExecutionMemory.messageId = 0; - - interExecutionMemory.hitRatio = 0; - interExecutionMemory.ROI = 0; - interExecutionMemory.anualizedRateOfReturn = 0; - - interExecutionMemory.announcements = [] - - } else { - - /* We get the initial values from the day previous to the candles we receive at the current execution */ - - stopLoss = interExecutionMemory.stopLoss - takeProfit = interExecutionMemory.takeProfit - - previousBalanceAssetA = interExecutionMemory.previousBalanceAssetA - previousBalanceAssetB = interExecutionMemory.previousBalanceAssetB - - tradePositionRate = interExecutionMemory.tradePositionRate - tradePositionSize = interExecutionMemory.tradePositionSize - - currentStrategyIndex = interExecutionMemory.currentStrategyIndex - strategyStage = interExecutionMemory.strategyStage - - stopLossPhase = interExecutionMemory.stopLossPhase - stopLossStage = interExecutionMemory.stopLossStage - - takeProfitPhase = interExecutionMemory.takeProfitPhase - takeProfitStage = interExecutionMemory.takeProfitStage - - currentStrategy = { - begin: interExecutionMemory.currentStrategy.begin, - end: interExecutionMemory.currentStrategy.end, - status: interExecutionMemory.currentStrategy.status, - number: interExecutionMemory.currentStrategy.number, - beginRate: interExecutionMemory.currentStrategy.beginRate, - endRate: interExecutionMemory.currentStrategy.endRate - } - - currentTrade = { - begin: interExecutionMemory.currentTrade.begin, - end: interExecutionMemory.currentTrade.end, - status: interExecutionMemory.currentTrade.status, - profit: interExecutionMemory.currentTrade.profit, - exitType: interExecutionMemory.currentTrade.exitType, - beginRate: interExecutionMemory.currentTrade.beginRate, - endRate: interExecutionMemory.currentTrade.endRate - } - - if (currentDay) { - if (currentDay.valueOf() >= bot.VALUES_TO_USE.timeRange.initialDatetime.valueOf() + ONE_DAY_IN_MILISECONDS) { // Only after the first day we start grabbing the balance from this memory. - - balanceAssetA = interExecutionMemory.balanceAssetA; - balanceAssetB = interExecutionMemory.balanceAssetB; - - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - } - } - - lastTradeProfitLoss = interExecutionMemory.lastTradeProfitLoss; - profit = interExecutionMemory.profit; - lastTradeROI = interExecutionMemory.lastTradeROI; - - roundtrips = interExecutionMemory.roundtrips; - fails = interExecutionMemory.fails; - hits = interExecutionMemory.hits; - periods = interExecutionMemory.periods; - positionPeriods = interExecutionMemory.positionPeriods; - - distanceToLast.triggerOn = interExecutionMemory.distanceToLast.triggerOn - distanceToLast.triggerOff = interExecutionMemory.distanceToLast.triggerOff - distanceToLast.takePosition = interExecutionMemory.distanceToLast.takePosition - distanceToLast.closePosition = interExecutionMemory.distanceToLast.closePosition - - orderId = interExecutionMemory.orderId; // to be deprecated - messageId = interExecutionMemory.messageId; // to be deprecated - - hitRatio = interExecutionMemory.hitRatio; - ROI = interExecutionMemory.ROI; - anualizedRateOfReturn = interExecutionMemory.anualizedRateOfReturn; - - /* For the case that any of these variables are not updated during the main loop, we need to store their value at the yesterday structure, otherwise it would be lost. */ - - yesterday.stopLoss = stopLoss - yesterday.takeProfit = takeProfit - - yesterday.previousBalanceAssetA = previousBalanceAssetA - yesterday.previousBalanceAssetB = previousBalanceAssetB - - yesterday.tradePositionRate = tradePositionRate - yesterday.tradePositionSize = tradePositionSize - - yesterday.currentStrategyIndex = currentStrategyIndex; - yesterday.strategyStage = strategyStage; - - yesterday.stopLossPhase = stopLossPhase; - yesterday.stopLossStage = stopLossStage; - - yesterday.takeProfitPhase = takeProfitPhase; - yesterday.takeProfitStage = takeProfitStage; - - yesterday.currentStrategy = { - begin: currentStrategy.begin, - end: currentStrategy.end, - status: currentStrategy.status, - number: currentStrategy.number, - beginRate: currentStrategy.beginRate, - endRate: currentStrategy.endRate - } - - yesterday.currentTrade = { - begin: currentTrade.begin, - end: currentTrade.end, - status: currentTrade.status, - profit: currentTrade.profit, - exitType: currentTrade.exitType, - beginRate: currentTrade.beginRate, - endRate: currentTrade.endRate - } - - yesterday.lastTradeProfitLoss = lastTradeProfitLoss; - yesterday.profit = profit; - yesterday.lastTradeROI = lastTradeROI; - - yesterday.roundtrips = roundtrips; - yesterday.fails = fails; - yesterday.hits = hits; - yesterday.periods = periods; - yesterday.positionPeriods = positionPeriods; - - yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn - yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff - yesterday.distanceToLast.takePosition = distanceToLast.takePosition - yesterday.distanceToLast.closePosition = distanceToLast.closePosition - - yesterday.hitRatio = hitRatio; - yesterday.ROI = ROI; - yesterday.anualizedRateOfReturn = anualizedRateOfReturn; - } - - /* Main Array and Maps */ - - let candles = candlesAt[timePeriodLabel] - let percentageBandwidthArray = percentageBandwidthAt[timePeriodLabel] - let bollingerBandsArray = bollingerBandsAt[timePeriodLabel] - let bollingerChannelsArray = bollingerChannelsAt[timePeriodLabel] - let bollingerSubChannelsArray = bollingerSubChannelsAt[timePeriodLabel] - - /* Last Candle */ - let lastCandle = candles[candles.length - 1]; - - /* Main Simulation Loop: We go thourgh all the candles at this time period. */ - let i - - /* For Loop Level heartbeat */ - let loopingDay - let previousLoopingDay - - initializeLoop() - - function initializeLoop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> initializeLoop -> Entering function."); } - - /* Estimate Initial Candle */ - - let firstEnd = candles[0].end - let targetEnd = bot.VALUES_TO_USE.timeRange.initialDatetime.valueOf() - let diff = targetEnd - firstEnd - let amount = diff / timePeriod - - i = Math.trunc(amount) - if (i < 0) { i = 0 } - if (i > candles.length - 1) { - /* This will happen when the bot.VALUES_TO_USE.timeRange.initialDatetime is beyond the last candle available, meaning that the dataSet needs to be updated with more up-to-date data. */ - i = candles.length - 1 - } - - loop() - } - - function loop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Processing candle # " + i); } - - let candle = candles[i]; - - /* Not processing while out of user-defined time range */ - - if (candle.end < bot.VALUES_TO_USE.timeRange.initialDatetime.valueOf()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle before the bot.VALUES_TO_USE.timeRange.initialDatetime."); } - controlLoop(); - return - } - if (candle.begin > bot.VALUES_TO_USE.timeRange.finalDatetime.valueOf()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle after the bot.VALUES_TO_USE.timeRange.finalDatetime."); } - afterLoop(); - return - } - - let percentageBandwidth = getElement(percentageBandwidthArray, candle, 'Current' + '-' + 'Percentage Bandwidth'); - let bollingerBand = getElement(bollingerBandsArray, candle, 'Current' + '-' + 'Bollinger Band'); - let bollingerChannel = getElement(bollingerChannelsArray, candle, 'Current' + '-' + 'Bollnger Channel'); - let bollingerSubChannel = getElement(bollingerSubChannelsArray, candle, 'Current' + '-' + 'Bollnger Sub Channel'); - - let chart = {} - - if (processingDailyFiles) { - for (let j = 0; j < global.dailyFilePeriods.length; j++) { - - let mapKey = dailyFilePeriods[j][1] - let propertyName = 'at' + mapKey.replace('-', ''); - - chart[propertyName] = {} - chart[propertyName].candle = getElement(candlesAt[mapKey], candle, 'Daily' + '-' + mapKey + '-' + 'Candles'); - chart[propertyName].percentageBandwidth = getElement(percentageBandwidthAt[mapKey], candle, 'Daily' + '-' + mapKey + '-' + 'Percentage Bandwidth'); - chart[propertyName].bollingerBand = getElement(bollingerBandsAt[mapKey], candle, 'Daily' + '-' + mapKey + '-' + 'Bollinger Band'); - chart[propertyName].bollingerChannel = getElement(bollingerChannelsAt[mapKey], candle, 'Daily' + '-' + mapKey + '-' + 'Bollnger Channel'); - chart[propertyName].bollingerSubChannel = getElement(bollingerSubChannelsAt[mapKey], candle, 'Daily' + '-' + mapKey + '-' + 'Bollnger Sub Channel'); - } - } - - for (let j = 0; j < global.marketFilesPeriods.length; j++) { - - let mapKey = marketFilesPeriods[j][1] - let propertyName = 'at' + mapKey.replace('-', ''); - - chart[propertyName] = {} - chart[propertyName].candle = getElement(candlesAt[mapKey], candle, 'Market' + '-' + mapKey + '-' + 'Candles'); - chart[propertyName].percentageBandwidth = getElement(percentageBandwidthAt[mapKey], candle, 'Market' + '-' + mapKey + '-' + 'Percentage Bandwidth'); - chart[propertyName].bollingerBand = getElement(bollingerBandsAt[mapKey], candle, 'Market' + '-' + mapKey + '-' + 'Bollinger Band'); - chart[propertyName].bollingerChannel = getElement(bollingerChannelsAt[mapKey], candle, 'Market' + '-' + mapKey + '-' + 'Bollnger Channel'); - chart[propertyName].bollingerSubChannel = getElement(bollingerSubChannelsAt[mapKey], candle, 'Market' + '-' + mapKey + '-' + 'Bollnger Sub Channel'); - } - - /* While we are processing the previous day. */ - let positionedAtYesterday = false - if (currentDay) { - positionedAtYesterday = (candle.end < currentDay.valueOf()) - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Candle Begin @ " + (new Date(candle.begin)).toLocaleString()) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Candle End @ " + (new Date(candle.end)).toLocaleString()) } - - /* Assistant Info */ - - let ticker = { - bid: candle.close, - ask: candle.close, - last: candle.close - } - - /* We will produce a simulation level heartbeat in order to inform the user this is running. */ - - loopingDay = new Date(Math.trunc(candle.begin / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS) - if (loopingDay.valueOf() !== previousLoopingDay) { - - let processingDate = loopingDay.getUTCFullYear() + '-' + utilities.pad(loopingDay.getUTCMonth() + 1, 2) + '-' + utilities.pad(loopingDay.getUTCDate(), 2); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Simulation " + bot.sessionKey + " Loop # " + i + " @ " + processingDate)} - console.log("Jason -> " + MODULE_NAME + " -> runSimulation -> loop -> Simulation " + bot.sessionKey + " Loop # " + i + " @ " + processingDate) - - bot.sessionHeartBeat(processingDate) // tell the world we are alive and doing well - } - previousLoopingDay = loopingDay.valueOf() - - /* If any of the needed indicators is missing, then that period is not calculated */ - if (bollingerBand === undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because Bollinger Band is undefined."); } - controlLoop(); - return - } - if (percentageBandwidth === undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because %B is undefined."); } - controlLoop(); - return - } // percentageBandwidth might start after the first few candles. - if (bollingerChannel === undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because Bollingeer Channel is undefined."); } - controlLoop(); - return - } - if (bollingerSubChannel === undefined) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because Bollingeer Sub Channel is undefined."); } - controlLoop(); - return - } - - //if (LRC === undefined) { controlLoop(); return} - - periods++; - days = periods * timePeriod / ONE_DAY_IN_MILISECONDS; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.periods = periods - } - - /* We skip the candle at the head of the market because i has not closed yet. */ - let candlesPerDay = ONE_DAY_IN_MILISECONDS / timePeriod - if (i === candles.length - 1) { - if ((candles.length < candlesPerDay) || (candles.length > candlesPerDay && candles.length < candlesPerDay * 2)) { - /*We are at the head of the market, thus we skip the last candle because it has not close yet. */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because it is the last one and has not been closed yet."); } - controlLoop(); - return - /* Note here that in the last candle of the first day or the second day it will use an incomplete candle and partially calculated indicators. - if we skip these two periods, then there will be a hole in the file since the last period will be missing. */ - } - } - - } else { // We are processing Market Files - if (i === candles.length - 1) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Skipping Candle because it is the last one and has not been closed yet."); } - controlLoop(); - return - } - } - - let conditions = new Map; // Here we store the conditions values that will be use in the simulator for decision making. - let formulas = new Map; - let conditionsArrayRecord = []; // These are the records that will be saved in a file for the plotter to consume. - let conditionsArrayValues = []; // Here we store the conditions values that will be written on file for the plotter. - let formulasErrors = []; // Here we store the errors produced by all phase formulas. - let formulasValues = []; // Here we store the values produced by all phase formulas. - - /* We define and evaluate all conditions to be used later during the simulation loop. */ - - conditionsArrayRecord.push(candle.begin); - conditionsArrayRecord.push(candle.end); - - for (let j = 0; j < tradingSystem.strategies.length; j++) { - - let strategy = tradingSystem.strategies[j]; - - let positionSize = 0 - let positionRate = 0 - - /* Continue with the rest of the formulas and conditions */ - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOn !== undefined) { - - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - - let situation = triggerStage.triggerOn.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOn' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - - if (triggerStage.triggerOff !== undefined) { - - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - - let situation = triggerStage.triggerOff.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOff' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - - if (triggerStage.takePosition !== undefined) { - - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - - let situation = triggerStage.takePosition.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'takePosition' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - - let openStage = strategy.openStage - - if (openStage !== undefined) { - - /* Default Values*/ - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - positionSize = balanceAssetA; - positionRate = candle.close; - } else { - positionSize = balanceAssetB; - positionRate = candle.close; - } - - let initialDefinition = openStage.initialDefinition - - if (initialDefinition !== undefined) { - - if (tradePositionSize !== 0) { - positionSize = tradePositionSize - } else { - if (initialDefinition.positionSize !== undefined) { - if (initialDefinition.positionSize.formula !== undefined) { - try { - positionSize = eval(initialDefinition.positionSize.formula.code); - } catch (err) { - initialDefinition.positionSize.formula.error = err.message - } - if (isNaN(positionSize)) { - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - positionSize = balanceAssetA; - } else { - positionSize = balanceAssetB; - } - } else { - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - if (positionSize > balanceAssetA) { positionSize = balanceAssetA } - } else { - if (positionSize > balanceAssetB) { positionSize = balanceAssetB } - } - } - } - } - } - - if (tradePositionRate !== 0) { - positionRate = tradePositionRate - } else { - if (initialDefinition.positionRate !== undefined) { - if (initialDefinition.positionRate.formula !== undefined) { - try { - positionRate = eval(initialDefinition.positionRate.formula.code); - } catch (err) { - initialDefinition.positionRate.formula.error = err.message - } - if (isNaN(positionRate)) { - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - positionRate = candle.close; - } else { - positionRate = candle.close; - } - } - } - } - } - - if (initialDefinition.stopLoss !== undefined) { - - for (let p = 0; p < initialDefinition.stopLoss.phases.length; p++) { - - let phase = initialDefinition.stopLoss.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "Formula evaluates to Infinity." - formulaValue = MAX_STOP_LOSS_VALUE - if (stopLossStage === 'Open Stage') { - formulaError = "WARNING: Formula evaluates to Infinity." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> initialDefinition.stopLoss -> MAX_STOP_LOSS_VALUE -> formulaError = " + formulaError); } - } - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_STOP_LOSS_VALUE) { - formulaValue = MIN_STOP_LOSS_VALUE - if (stopLossStage === 'Open Stage') { - formulaError = "WARNING: Formula is evaluating below the MIN_STOP_LOSS_VALUE." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> initialDefinition.stopLoss -> MIN_STOP_LOSS_VALUE -> formulaError = " + formulaError); } - } - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - - if (initialDefinition.takeProfit !== undefined) { - - for (let p = 0; p < initialDefinition.takeProfit.phases.length; p++) { - - let phase = initialDefinition.takeProfit.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaValue = MAX_TAKE_PROFIT_VALUE - if (takeProfitStage === 'Open Stage') { - formulaError = "WARNING: Formula evaluates to Infinity." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> initialDefinition.takeProfit -> MAX_TAKE_PROFIT_VALUE -> formulaError = " + formulaError); } - } - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_TAKE_PROFIT_VALUE) { - formulaValue = MIN_TAKE_PROFIT_VALUE - if (takeProfitStage === 'Open Stage') { - formulaError = "WARNING: Formula is evaluating below the MIN_TAKE_PROFIT_VALUE." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> initialDefinition.takeProfit -> MIN_TAKE_PROFIT_VALUE -> formulaError = " + formulaError); } - } - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - } - - strategy.positionSize = positionSize - strategy.positionRate = positionRate - } - - let manageStage = strategy.manageStage - - if (manageStage !== undefined) { - - if (manageStage.stopLoss !== undefined) { - - for (let p = 0; p < manageStage.stopLoss.phases.length; p++) { - - let phase = manageStage.stopLoss.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "" - formulaValue = MAX_STOP_LOSS_VALUE - if (stopLossStage === 'Manage Stage') { - formulaError = "WARNING: Formula evaluates to Infinity." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> manageStage.stopLoss -> MAX_STOP_LOSS_VALUE -> formulaError = " + formulaError); } - } - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_STOP_LOSS_VALUE) { - formulaValue = MIN_STOP_LOSS_VALUE - if (stopLossStage === 'Manage Stage') { - formulaError = "WARNING: Formula is evaluating below the MIN_STOP_LOSS_VALUE." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> manageStage.stopLoss -> MIN_STOP_LOSS_VALUE -> formulaError = " + formulaError); } - } - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - - if (manageStage.takeProfit !== undefined) { - - for (let p = 0; p < manageStage.takeProfit.phases.length; p++) { - - let phase = manageStage.takeProfit.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "Formula evaluates to Infinity." - formulaValue = MAX_TAKE_PROFIT_VALUE - if (takeProfitStage === 'Manage Stage') { - formulaError = "WARNING: Formula evaluates to Infinity." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> manageStage.takeProfit -> MAX_TAKE_PROFIT_VALUE -> formulaError = " + formulaError); } - } - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_TAKE_PROFIT_VALUE) { - formulaValue = MIN_TAKE_PROFIT_VALUE - if (takeProfitStage === 'Manage Stage') { - formulaError = "WARNING: Formula is evaluating below the MIN_TAKE_PROFIT_VALUE." - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] runSimulation -> loop -> manageStage.takeProfit -> MIN_TAKE_PROFIT_VALUE -> formulaError = " + formulaError); } - } - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - } - - function newCondition(key, node) { - - let condition; - let error = '' - let value - - try { - value = eval(node.code); - } catch (err) { - /* - One possible error is that the conditions references a .previous that is undefined. For this - reason and others, we will simply set the value to false. - */ - value = false - - if (node.code.indexOf('previous') > -1 && err.message.indexOf('of undefined') > -1 || - node.code.indexOf('chart') > -1 && err.message.indexOf('of undefined') > -1 - ) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - node.error = err.message + " @ " + (new Date(candle.begin)).toLocaleString() - } - } - - condition = { - key: key, - value: value - }; - - conditions.set(condition.key, condition); - - if (condition.value) { - conditionsArrayValues.push(1); - } else { - conditionsArrayValues.push(0); - } - } - } - - /* Trigger On Conditions */ - if ( - strategyStage === 'No Stage' && - currentStrategyIndex === -1 - ) { - let minimumBalance - let maximumBalance - let balance - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - balance = balanceAssetA - minimumBalance = bot.VALUES_TO_USE.minimumBalanceA - maximumBalance = bot.VALUES_TO_USE.maximumBalanceA - } else { - balance = balanceAssetB - minimumBalance = bot.VALUES_TO_USE.minimumBalanceB - maximumBalance = bot.VALUES_TO_USE.maximumBalanceB - } - - if (balance > minimumBalance && balance < maximumBalance) { - - /* - Here we need to pick a strategy, or if there is not suitable strategy for the current - market conditions, we pass until the next period. - - To pick a new strategy we will evaluate what we call the trigger on. Once we enter - into one strategy, we will ignore market conditions for others. However there is also - a strategy trigger off which can be hit before taking a position. If hit, we would - be outside a strategy again and looking for the condition to enter all over again. - - */ - - for (let j = 0; j < tradingSystem.strategies.length; j++) { - - let strategy = tradingSystem.strategies[j]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOn !== undefined) { - - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - - let situation = triggerStage.triggerOn.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOn' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - strategyStage = 'Trigger Stage'; - currentStrategyIndex = j; - currentStrategy.begin = candle.begin; - currentStrategy.beginRate = candle.min; - currentStrategy.endRate = candle.min; // In case the strategy does not get exited - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.strategyStage = strategyStage; - yesterday.currentStrategyIndex = currentStrategyIndex; - yesterday.currentStrategy.begin = currentStrategy.begin; - yesterday.currentStrategy.beginRate = currentStrategy.beginRate; - yesterday.currentStrategy.endRate = currentStrategy.endRate; - } - } - - distanceToLast.triggerOn = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn - } - } - - checkAnnouncements(triggerStage.triggerOn) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Switching to Trigger Stage because conditions at Trigger On Event were met."); } - break; - } - } - } - } - } - } else { - let stopRunningDate = new Date(candle.begin) - if (balance <= minimumBalance) { - tradingSystem.error = "Min Balance @ " + stopRunningDate.toLocaleString() - } - if (balance >= maximumBalance) { - tradingSystem.error = "Max Balance @ " + stopRunningDate.toLocaleString() - } - } - } - - /* Trigger Off Condition */ - if (strategyStage === 'Trigger Stage') { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOff !== undefined) { - - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - - let situation = triggerStage.triggerOff.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = currentStrategyIndex + '-' + 'triggerStage' + '-' + 'triggerOff' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - currentStrategy.number = currentStrategyIndex - currentStrategy.end = candle.end; - currentStrategy.endRate = candle.min; - currentStrategy.status = 1; - strategyStage = 'No Stage'; - currentStrategyIndex = -1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentStrategy.number = currentStrategy.number; - yesterday.currentStrategy.end = currentStrategy.end; - yesterday.currentStrategy.endRate = currentStrategy.endRate; - yesterday.currentStrategy.status = currentStrategy.status; - yesterday.strategyStage = strategyStage; - yesterday.currentStrategyIndex = currentStrategyIndex; - } - } - - distanceToLast.triggerOff = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff - } - } - - checkAnnouncements(triggerStage.triggerOff) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Switching to No Stage because conditions at the Trigger Off Event were met."); } - break; - } - } - } - } - } - - /* Take Position Condition */ - if (strategyStage === 'Trigger Stage') { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.takePosition !== undefined) { - - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - - let situation = triggerStage.takePosition.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = currentStrategyIndex + '-' + 'triggerStage' + '-' + 'takePosition' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - type = '"Take Position"'; - - strategyStage = 'Open Stage'; - stopLossStage = 'Open Stage'; - takeProfitStage = 'Open Stage'; - stopLossPhase = 0; - takeProfitPhase = 0; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.strategyStage = strategyStage; - yesterday.stopLossStage = stopLossStage; - yesterday.takeProfitStage = takeProfitStage; - yesterday.stopLossPhase = stopLossPhase; - yesterday.takeProfitPhase = takeProfitPhase; - } - } - - takePositionNow = true - - checkAnnouncements(triggerStage.takePosition) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Conditions at the Take Position Event were met."); } - break; - } - } - } - } - } - - /* Stop Loss Management */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - - checkStopPhases() - calculateStopLoss(); - - } - - function checkStopPhases() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let parentNode - let j = currentStrategyIndex - let stageKey - let initialDefinitionKey = '' - let p - - if (stopLossStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.stopLoss !== undefined) { - parentNode = openStage.initialDefinition - initialDefinitionKey = '-' + 'initialDefinition' - stageKey = 'openStage' - p = stopLossPhase - } - } - } - - if (stopLossStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.stopLoss !== undefined) { - parentNode = manageStage - stageKey = 'manageStage' - p = stopLossPhase - 1 - } - } - - let phase = parentNode.stopLoss.phases[p]; - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + stageKey + initialDefinitionKey + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - stopLossPhase++; - stopLossStage = 'Manage Stage' - if (takeProfitPhase > 0) { strategyStage = 'Manage Stage' } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLossPhase = stopLossPhase; - yesterday.stopLossStage = stopLossStage; - yesterday.strategyStage = strategyStage; - } - } - - checkAnnouncements(nextPhaseEvent) - return; - } - } - } - } - - function calculateStopLoss() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let phase - let key - - if (stopLossStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.stopLoss !== undefined) { - phase = openStage.initialDefinition.stopLoss.phases[stopLossPhase]; - key = currentStrategyIndex + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + (stopLossPhase); - } - } - } - - if (stopLossStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.stopLoss !== undefined) { - phase = manageStage.stopLoss.phases[stopLossPhase - 1]; - key = currentStrategyIndex + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + (stopLossPhase - 1); - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - let previousValue = stopLoss - - stopLoss = formulas.get(key) - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLoss = stopLoss - } - } - - if (stopLoss !== previousValue) { - checkAnnouncements(phase, stopLoss) - } - } - } - } - - /* Take Profit Management */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - - checkTakeProfitPhases(); - calculateTakeProfit(); - - } - - function checkTakeProfitPhases() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let parentNode - let j = currentStrategyIndex - let stageKey - let initialDefinitionKey = '' - let p - - if (takeProfitStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.takeProfit !== undefined) { - parentNode = openStage.initialDefinition - initialDefinitionKey = '-' + 'initialDefinition' - stageKey = 'openStage' - p = takeProfitPhase - } - } - } - - if (takeProfitStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.takeProfit !== undefined) { - parentNode = manageStage - stageKey = 'manageStage' - p = takeProfitPhase - 1 - } - } - - let phase = parentNode.takeProfit.phases[p]; - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + stageKey + initialDefinitionKey + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - takeProfitPhase++; - takeProfitStage = 'Manage Stage' - if (stopLossPhase > 0) { strategyStage = 'Manage Stage' } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.takeProfitPhase = takeProfitPhase; - yesterday.takeProfitStage = takeProfitStage; - yesterday.strategyStage = strategyStage; - } - } - - checkAnnouncements(nextPhaseEvent) - return; - } - } - } - } - - function calculateTakeProfit() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let phase - let key - - if (takeProfitStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.takeProfit !== undefined) { - phase = openStage.initialDefinition.takeProfit.phases[takeProfitPhase]; - key = currentStrategyIndex + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + (takeProfitPhase); - } - } - } - - if (takeProfitStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.takeProfit !== undefined) { - phase = manageStage.takeProfit.phases[takeProfitPhase - 1]; - key = currentStrategyIndex + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + (takeProfitPhase - 1); - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - - let previousValue = stopLoss - - takeProfit = formulas.get(key) - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.takeProfit = takeProfit - } - } - - if (takeProfit !== previousValue) { - checkAnnouncements(phase, takeProfit) - } - } - } - } - - /* Keeping Position Counters Up-to-date */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') - ) { - - if (takePositionNow === true) { - positionPeriods = 0 - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.positionPeriods = 0 - } - } - } - - positionPeriods++; - positionDays = positionPeriods * timePeriod / ONE_DAY_IN_MILISECONDS; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.positionPeriods = positionPeriods - } - } - } else { - positionPeriods = 0 - positionDays = 0 - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.positionPeriods = 0 - } - } - } - - /* Keeping Distance Counters Up-to-date */ - if ( - distanceToLast.triggerOn > 0 // with this we avoind counting before the first event happens. - ) { - distanceToLast.triggerOn++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.triggerOn = distanceToLast.triggerOn - } - } - } - - if ( - distanceToLast.triggerOff > 0 // with this we avoind counting before the first event happens. - ) { - distanceToLast.triggerOff++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff - } - } - } - - if ( - distanceToLast.takePosition > 0 // with this we avoind counting before the first event happens. - ) { - distanceToLast.takePosition++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.takePosition = distanceToLast.takePosition - } - } - } - - if ( - distanceToLast.closePosition > 0 // with this we avoind counting before the first event happens. - ) { - distanceToLast.closePosition++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.takePosition = distanceToLast.closePosition - } - } - } - - /* Checking if Stop or Take Profit were hit */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - /* Checking what happened since the last execution. We need to know if the Stop Loss - or our Take Profit were hit. */ - - /* Stop Loss condition: Here we verify if the Stop Loss was hitted or not. */ - - if ((bot.VALUES_TO_USE.baseAsset === 'BTC' && candle.max >= stopLoss) || (bot.VALUES_TO_USE.baseAsset !== 'BTC' && candle.min <= stopLoss)) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Stop Loss was hit."); } - /* - Hit Point Validation - - This prevents misscalculations when a formula places the stop loss in this case way beyond the market price. - If we take the stop loss value at those situation would be a huge distortion of facts. - */ - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - if (stopLoss < candle.min) { - stopLoss = candle.min - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLoss = stopLoss - } - } - } - } else { - if (stopLoss > candle.max) { - stopLoss = candle.max - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLoss = stopLoss - } - } - } - } - - let slippedStopLoss = stopLoss - - /* Apply the Slippage */ - let slippageAmount = slippedStopLoss * bot.VALUES_TO_USE.slippage.stopLoss / 100 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - slippedStopLoss = slippedStopLoss + slippageAmount - } else { - slippedStopLoss = slippedStopLoss - slippageAmount - } - - let finalStopLoss = slippedStopLoss; - - let feePaid = 0 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - strategy.positionSize = balanceAssetB / finalStopLoss; - strategy.positionRate = finalStopLoss; - - feePaid = balanceAssetB / finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetA = balanceAssetA + balanceAssetB / finalStopLoss - feePaid; - balanceAssetB = 0; - } else { - strategy.positionSize = balanceAssetA * finalStopLoss; - strategy.positionRate = finalStopLoss; - - feePaid = balanceAssetA * finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetB = balanceAssetB + balanceAssetA * finalStopLoss - feePaid; - balanceAssetA = 0; - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - } - } - - marketRate = finalStopLoss; - type = '"Close@StopLoss"'; - strategyStage = 'Close Stage'; - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - currentTrade.end = candle.end; - currentTrade.status = 1; - currentTrade.exitType = 1; - currentTrade.endRate = finalStopLoss; - - closePositionNow = true; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.strategyStage = strategyStage; - yesterday.stopLossStage = stopLossStage; - yesterday.takeProfitStage = takeProfitStage; - yesterday.currentTrade.end = currentTrade.end; - yesterday.currentTrade.status = currentTrade.status; - yesterday.currentTrade.exitType = currentTrade.exitType; - yesterday.currentTrade.endRate = currentTrade.endRate; - } - } - } - - /* Take Profit condition: Here we verify if the Take Profit was hit or not. */ - - if ((bot.VALUES_TO_USE.baseAsset === 'BTC' && candle.min <= takeProfit) || (bot.VALUES_TO_USE.baseAsset !== 'BTC' && candle.max >= takeProfit)) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Take Profit was hit."); } - /* - Hit Point Validation: - - This prevents misscalculations when a formula places the take profit in this case way beyond the market price. - If we take the stop loss value at those situation would be a huge distortion of facts. - */ - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - if (takeProfit > candle.max) { - takeProfit = candle.max - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.takeProfit = takeProfit - } - } - } - } else { - if (takeProfit < candle.min) { - takeProfit = candle.min - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.takeProfit = takeProfit - } - } - } - } - - let slippedTakeProfit = takeProfit - /* Apply the Slippage */ - let slippageAmount = slippedTakeProfit * bot.VALUES_TO_USE.slippage.takeProfit / 100 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - slippedTakeProfit = slippedTakeProfit + slippageAmount - } else { - slippedTakeProfit = slippedTakeProfit - slippageAmount - } - - let finalTakeProfit = slippedTakeProfit; - - let feePaid = 0 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - strategy.positionSize = balanceAssetB / finalTakeProfit; - strategy.positionRate = finalTakeProfit; - - feePaid = balanceAssetB / finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetA = balanceAssetA + balanceAssetB / finalTakeProfit - feePaid; - balanceAssetB = 0; - } else { - strategy.positionSize = balanceAssetA * finalTakeProfit; - strategy.positionRate = finalTakeProfit; - - feePaid = balanceAssetA * finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetB = balanceAssetB + balanceAssetA * finalTakeProfit - feePaid; - balanceAssetA = 0; - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - } - } - - marketRate = finalTakeProfit; - type = '"Close@TakeProfit"'; - strategyStage = 'Close Stage'; - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - - currentTrade.end = candle.end; - currentTrade.status = 1; - currentTrade.exitType = 2; - currentTrade.endRate = finalTakeProfit; - - closePositionNow = true; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.strategyStage = strategyStage; - yesterday.stopLossStage = stopLossStage; - yesterday.takeProfitStage = takeProfitStage; - - yesterday.currentTrade.end = currentTrade.end; - yesterday.currentTrade.status = currentTrade.status; - yesterday.currentTrade.exitType = currentTrade.exitType; - yesterday.currentTrade.endRate = currentTrade.endRate; - } - } - } - } - - /* Taking a Position */ - if ( - takePositionNow === true - ) { - takePositionNow = false - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Entering code block."); } - - /* Inicializing this counter */ - distanceToLast.takePosition = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.takePosition = distanceToLast.takePosition - } - } - - /* Position size and rate */ - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - tradePositionSize = strategy.positionSize; - tradePositionRate = strategy.positionRate; - - /* We take what was calculated at the formula and apply the slippage. */ - let slippageAmount = tradePositionRate * bot.VALUES_TO_USE.slippage.positionRate / 100 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - tradePositionRate = tradePositionRate - slippageAmount - } else { - tradePositionRate = tradePositionRate + slippageAmount - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.tradePositionSize = tradePositionSize; - yesterday.tradePositionRate = tradePositionRate; - } - } - - /* Update the trade record information. */ - currentTrade.begin = candle.begin; - currentTrade.beginRate = tradePositionRate; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentTrade.begin = currentTrade.begin; - yesterday.currentTrade.beginRate = currentTrade.beginRate; - } - } - - /* Check if we need to execute. */ - if (i > candles.length - 10) { /* Only at the last candles makes sense to check if we are in live mode or not.*/ - /* Check that we are in LIVE MODE */ - if (bot.startMode === "Live") { - /* We see if we need to put the actual order at the exchange. */ - if (interExecutionMemory.executionContext !== undefined) { - switch (interExecutionMemory.executionContext.status) { - case "Without a Position": { // We need to put the order because It was not put yet. - if (strategy.openStage !== undefined) { - if (strategy.openStage.openExecution !== undefined) { - putOpeningOrder() - return - } - } - break - } - case "Position Closed": { // Waiting for a confirmation that the position was closed. - if (strategy.openStage !== undefined) { - if (strategy.openStage.openExecution !== undefined) { - putOpeningOrder() - return - } - } - break - } - case "Taking Position": { // Waiting for a confirmation that the position was taken. - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Exiting code block because status is Taking Position."); } - break - } - case "In a Position": { // This should mean that we already put the order at the exchange. - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Exiting code block because status is In a Position."); } - break - } - } - } else { // The context does not exist so it means we are not in a position. - if (strategy.openStage !== undefined) { - if (strategy.openStage.openExecution !== undefined) { - putOpeningOrder() - return - } - } - } - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Not trading live."); } - } - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionNow -> Not the last closed candle."); } - } - - takePositionAtSimulation() - return - - function putOpeningOrder() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Entering function."); } - - /* We wont take a position unless we are withing the bot.VALUES_TO_USE.timeRange.initialDatetime and the bot.VALUES_TO_USE.timeRange.finalDatetime range */ - if (bot.VALUES_TO_USE.timeRange.initialDatetime !== undefined) { - if (candle.end < bot.VALUES_TO_USE.timeRange.initialDatetime.valueOf()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Not placing the trade at the exchange because current candle ends before the start date. -> bot.VALUES_TO_USE.timeRange.initialDatetime = " + bot.VALUES_TO_USE.timeRange.initialDatetime); } - takePositionAtSimulation() - return; - } - } - - /*We wont take a position if we are past the final datetime */ - if (bot.VALUES_TO_USE.timeRange.finalDatetime !== undefined) { - if (candle.begin > bot.VALUES_TO_USE.timeRange.finalDatetime.valueOf()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> putOpeningOrder -> Not placing the trade at the exchange because current candle begins after the end date. -> bot.VALUES_TO_USE.timeRange.finalDatetime = " + bot.VALUES_TO_USE.timeRange.finalDatetime); } - takePositionAtSimulation() - return; - } - } - - - /* Checking the status of current positions */ - let positions = assistant.getPositions(); - if (positions.length > 0) { - let position = positions[positions.length - 1] // We are allways checking the the last position is not open. - if (position.status === 'open') { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Not placing the trade at the exchange because the last position is still open. "); } - afterLoop(); - return - } - } - - /* Mechanism to avoid putting the same order over and over again at different executions of the simulation engine. */ - - if (interExecutionMemory.executionContext !== undefined) { - if (interExecutionMemory.executionContext.periods !== undefined) { - if (periods <= interExecutionMemory.executionContext.periods) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Not placing the trade at the exchange because it was already placed at a previous execution."); } - takePositionAtSimulation() - return; - } - } - } - - /* We are not going to place orders based on outdated information. The next filter prevents firing orders when backtesting. */ - if (currentDay) { - let today = new Date(Math.trunc((new Date().valueOf()) / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS) - let processDay = new Date(Math.trunc(currentDay.valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS) - if (today.valueOf() !== processDay.valueOf()) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Not placing the trade at the exchange because the current candle belongs to the previous day and that is considered simulation and not live trading."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> today = " + today); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> processDay = " + processDay); } - takePositionAtSimulation() - return; - } - } - - let openPositionRate - let amountA - let amountB - let positionDirection - let availableBalance = assistant.getAvailableBalance() - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - positionDirection = "sell" - - openPositionRate = tradePositionRate - 100 // 100 is Provisional since we do have management of orders yet - - amountA = tradePositionSize * openPositionRate - amountB = tradePositionSize - - if (amountB > availableBalance.assetB) { // The assistant know what fees were paid. - amountB = availableBalance.assetB - } - } else { - positionDirection = "buy" - - openPositionRate = tradePositionRate + 100 // 100 is Provisional since we do have management of orders yet - - amountA = tradePositionSize - amountB = tradePositionSize / openPositionRate - - if (amountA > availableBalance.assetA) { // The assistant know what fees were paid. - amountA = availableBalance.assetA - } - } - - interExecutionMemory.executionContext = { - status: "Taking Position", - periods: periods, - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> Ready to put order."); } - assistant.putPosition(positionDirection, openPositionRate, amountA, amountB, onOrderPut) - - function onOrderPut(err) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> Entering function."); } - - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> DEFAULT_OK_RESPONSE "); } - interExecutionMemory.executionContext = { - status: "In a Position", - periods: periods, - amountA: amountA, - amountB: amountB - } - takePositionAtSimulation() - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> DEFAULT_FAIL_RESPONSE "); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> Message = " + err.message); } - strategy.openStage.openExecution.error = err.message - afterLoop() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> DEFAULT_RETRY_RESPONSE "); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> Message = " + err.message); } - strategy.openStage.openExecution.error = err.message - afterLoop() - return; - } - } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> Unexpected Response -> Message = " + err.message); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } - - function takePositionAtSimulation() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionAtSimulation -> Entering function."); } - - /* Continue with the simulation */ - calculateTakeProfit(); - calculateStopLoss(); - - marketRate = candle.close; - - previousBalanceAssetA = balanceAssetA; - previousBalanceAssetB = balanceAssetB; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.previousBalanceAssetA = previousBalanceAssetA; - yesterday.previousBalanceAssetB = previousBalanceAssetB; - } - } - - lastTradeProfitLoss = 0; - lastTradeROI = 0; - - let feePaid = 0 - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - - feePaid = tradePositionSize * tradePositionRate * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetB = balanceAssetB + tradePositionSize * tradePositionRate - feePaid; - balanceAssetA = balanceAssetA - tradePositionSize; - } else { - - feePaid = tradePositionSize / tradePositionRate * bot.VALUES_TO_USE.feeStructure.taker / 100 - - balanceAssetA = balanceAssetA + tradePositionSize / tradePositionRate - feePaid; - balanceAssetB = balanceAssetB - tradePositionSize; - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - yesterday.lastTradeProfitLoss = lastTradeProfitLoss; - yesterday.lastTradeROI = lastTradeROI; - } - } - - addRecord(); - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> takePositionAtSimulation -> Exiting Loop Body after taking position at simulation."); } - controlLoop(); - return - } - } - - if (closePositionNow === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing a Position -> Entering code block."); } - - closePositionNow = false - - /* Inicializing this counter */ - distanceToLast.closePosition = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.closePosition = distanceToLast.closePosition - } - } - - /* Position size and rate */ - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - if (i > candles.length - 10) { /* Only at the last candles makes sense to check if we are in live mode or not.*/ - /* Check that we are in LIVE MODE */ - if (bot.startMode === "Live") { - /* We see if we need to put the actual order at the exchange. */ - if (interExecutionMemory.executionContext !== undefined) { - switch (interExecutionMemory.executionContext.status) { - case "Without a Position": { // No way to close anything at the exchange. - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing a Position -> Exiting code block because status is Without a Position."); } - break - } - case "In a Position": { // This should mean that we already put the order at the exchange. - if (strategy.closeStage !== undefined) { - if (strategy.closeStage.closeExecution !== undefined) { - putClosingOrder() - return - } - } - break - } - case "Closing Position": { // Waiting for a confirmation that the position was taken. - if (strategy.closeStage !== undefined) { - if (strategy.closeStage.closeExecution !== undefined) { - putClosingOrder() - return - } - } - break - } - - case "Position Closed": { // - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing a Position -> Exiting code block because status is Position Closed."); } - break - } - } - } - } - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing a Position -> Not within the last 10 candles."); } - } - - closePositionAtSimulation() - return - - function putClosingOrder() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> putClosingOrder -> Entering function."); } - - /* Checking the status of current positions */ - let positions = assistant.getPositions(); - if (positions.length > 0) { - let position = positions[positions.length - 1] // We are allways checking the the last position is not open. - if (position.status === 'open') { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> Exiting function because status of last position is Open."); } - afterLoop(); - return - } - } - - /* Mechanism to avoid putting the same order over and over again at different executions of the simulation engine. */ - - if (interExecutionMemory.executionContext !== undefined) { - if (interExecutionMemory.executionContext.periods !== undefined) { - if (periods <= interExecutionMemory.executionContext.periods) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> Exiting function because this closing was already submited at a previous execution."); } - closePositionAtSimulation() - return; - } - } - } - - let closePositionRate - let amountA - let amountB - let positionDirection - let availableBalance = assistant.getAvailableBalance() - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - positionDirection = "buy" - - closePositionRate = ticker.last + 100; // This is provisional and totally arbitrary, until we have a formula on the designer that defines this stuff. - - amountA = availableBalance.assetA - amountB = availableBalance.assetA / closePositionRate - - } else { - positionDirection = "sell" - - closePositionRate = ticker.last - 100; // This is provisional and totally arbitrary, until we have a formula on the designer that defines this stuff. - - amountA = availableBalance.assetB * closePositionRate - amountB = availableBalance.assetB - - } - - interExecutionMemory.executionContext = { - status: "Closing Position", - periods: periods, - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> About to close position at the exchange."); } - assistant.putPosition(positionDirection, closePositionRate, amountA, amountB, onOrderPut) - - function onOrderPut(err) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> onOrderPut -> Entering function."); } - - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> onOrderPut -> DEFAULT_OK_RESPONSE "); } - interExecutionMemory.executionContext = { - status: "Position Closed", - periods: periods, - amountA: amountA, - amountB: amountB - } - closePositionAtSimulation() - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putClosingOrder -> onOrderPut -> DEFAULT_FAIL_RESPONSE "); } - /* We will assume that the problem is temporary, and expect that it will work at the next execution.*/ - strategy.closeStage.closeExecution.error = err.message - afterLoop() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> putOpeningOrder -> onOrderPut -> DEFAULT_RETRY_RESPONSE "); } - strategy.closeStage.closeExecution.error = err.message - afterLoop() - return; - } - } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putClosingOrder -> onOrderPut -> Unexpected Response -> Message = " + err.message); } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] runSimulation -> loop -> putClosingOrder -> onOrderPut -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } - - function closePositionAtSimulation() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> closePositionAtSimulation -> Entering function."); } - - roundtrips++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.roundtrips = roundtrips - } - } - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - lastTradeProfitLoss = balanceAssetA - previousBalanceAssetA; - lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize; - if (isNaN(lastTradeROI)) { lastTradeROI = 0; } - profit = balanceAssetA - bot.VALUES_TO_USE.initialBalanceA; - } else { - lastTradeProfitLoss = balanceAssetB - previousBalanceAssetB; - lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize; - if (isNaN(lastTradeROI)) { lastTradeROI = 0; } - profit = balanceAssetB - bot.VALUES_TO_USE.initialBalanceB; - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.lastTradeProfitLoss = lastTradeProfitLoss; - yesterday.profit = profit; - yesterday.lastTradeROI = lastTradeROI; - } - } - - currentTrade.lastTradeROI = lastTradeROI; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentTrade.lastTradeROI = currentTrade.lastTradeROI; - } - } - - if (lastTradeProfitLoss > 0) { - hits++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.hits = hits - } - } - - } else { - fails++; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.fails = fails - } - } - } - - if (bot.VALUES_TO_USE.baseAsset === 'BTC') { - ROI = (bot.VALUES_TO_USE.initialBalanceA + profit) / bot.VALUES_TO_USE.initialBalanceA - 1; - hitRatio = hits / roundtrips; - anualizedRateOfReturn = ROI / days * 365; - } else { - ROI = (bot.VALUES_TO_USE.initialBalanceB + profit) / bot.VALUES_TO_USE.initialBalanceB - 1; - hitRatio = hits / roundtrips; - anualizedRateOfReturn = ROI / days * 365; - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.ROI = ROI; - yesterday.hitRatio = hitRatio; - yesterday.anualizedRateOfReturn = anualizedRateOfReturn; - } - } - - addRecord(); - - stopLoss = 0; - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLoss = stopLoss - } - } - takeProfit = 0; - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.takeProfit = takeProfit - } - } - - tradePositionRate = 0; - tradePositionSize = 0; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.tradePositionSize = tradePositionSize; - yesterday.tradePositionRate = tradePositionRate; - } - } - - timerToCloseStage = candle.begin - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - stopLossPhase = -1; - takeProfitPhase = -1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.stopLossStage = stopLossStage; - yesterday.takeProfitStage = takeProfitStage; - yesterday.stopLossPhase = stopLossPhase; - yesterday.takeProfitPhase = takeProfitPhase; - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> closePositionAtSimulation -> Exiting Loop Body after closing position at simulation."); } - controlLoop(); - return - } - } - - /* Closing the Closing Stage */ - if (strategyStage === 'Close Stage') { - if (candle.begin - 5 * 60 * 1000 > timerToCloseStage) { - - currentStrategy.number = currentStrategyIndex - currentStrategy.end = candle.end; - currentStrategy.endRate = candle.min; - currentStrategy.status = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - - yesterday.currentStrategy.number = currentStrategy.number; - yesterday.currentStrategy.end = currentStrategy.end; - yesterday.currentStrategy.endRate = currentStrategy.endRate; - yesterday.currentStrategy.status = currentStrategy.status; - } - } - - currentStrategyIndex = -1; - strategyStage = 'No Stage'; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentStrategyIndex = currentStrategyIndex; - yesterday.strategyStage = strategyStage; - } - } - - timerToCloseStage = 0 - - distanceToLast.triggerOff = 1; - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.distanceToLast.triggerOff = distanceToLast.triggerOff - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing the Closing Stage -> Exiting Close Stage."); } - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Closing the Closing Stage -> Waiting for timer."); } - } - } - - /* Not a buy or sell condition */ - - marketRate = candle.close; - addRecord(); - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> Exiting Loop Body after adding a record."); } - controlLoop(); - return - - function addRecord() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> loop -> addRecord -> Entering function."); } - - // Since we are going to write the message to a file that the Simulation Executor is going to read, we use the abbreviations. - let messageType; - let message; - let simulationRecord; - let executionRecord; - - let strategyStageNumber - switch (strategyStage) { - case 'No Stage': { - strategyStageNumber = 0 - break - } - case 'Trigger Stage': { - strategyStageNumber = 1 - break - } - case 'Open Stage': { - strategyStageNumber = 2 - break - } - case 'Manage Stage': { - strategyStageNumber = 3 - break - } - case 'Close Stage': { - strategyStageNumber = 4 - break - } - } - - if (balanceAssetA === Infinity) { - balanceAssetA = Number.MAX_SAFE_INTEGER - } - - if (balanceAssetB === Infinity) { - balanceAssetB = Number.MAX_SAFE_INTEGER - } - - let quotedBaseAsset = '"' + bot.VALUES_TO_USE.baseAsset + '"' - - simulationRecord = { - begin: candle.begin, - end: candle.end, - type: type, - marketRate: marketRate, - amount: 1, - balanceA: balanceAssetA, - balanceB: balanceAssetB, - profit: profit, - lastTradeProfitLoss: lastTradeProfitLoss, - stopLoss: stopLoss, - roundtrips: roundtrips, - hits: hits, - fails: fails, - hitRatio: hitRatio, - ROI: ROI, - periods: periods, - days: days, - anualizedRateOfReturn: anualizedRateOfReturn, - positionRate: tradePositionRate, - lastTradeROI: lastTradeROI, - strategy: currentStrategyIndex, - strategyStageNumber: strategyStageNumber, - takeProfit: takeProfit, - stopLossPhase: stopLossPhase, - takeProfitPhase: takeProfitPhase, - executionRecord: '', - positionSize: tradePositionSize, - initialBalanceA: bot.VALUES_TO_USE.initialBalanceA, - minimumBalanceA: bot.VALUES_TO_USE.minimumBalanceA, - maximumBalanceA: bot.VALUES_TO_USE.maximumBalanceA, - initialBalanceB: bot.VALUES_TO_USE.initialBalanceB, - minimumBalanceB: bot.VALUES_TO_USE.minimumBalanceB, - maximumBalanceB: bot.VALUES_TO_USE.maximumBalanceB, - baseAsset: quotedBaseAsset, - positionPeriods: positionPeriods, - positionDays: positionDays, - distanceToLastTriggerOn: distanceToLast.triggerOn, - distanceToLastTriggerOff: distanceToLast.triggerOff, - distanceToLastTakePosition: distanceToLast.takePosition, - distanceToLastClosePosition: distanceToLast.closePosition - } - - recordsArray.push(simulationRecord); - - type = '""'; - - /* Prepare the information for the Conditions File */ - - conditionsArrayRecord.push(currentStrategyIndex); - conditionsArrayRecord.push(strategyStageNumber); - conditionsArrayRecord.push(stopLossPhase); - conditionsArrayRecord.push(takeProfitPhase); - conditionsArrayRecord.push(conditionsArrayValues); - conditionsArrayRecord.push(formulasErrors); - conditionsArrayRecord.push(formulasValues); - - conditionsArray.push(conditionsArrayRecord); - - /* Prepare the information for the Strategies File*/ - - if ( - (currentStrategy.begin !== 0 && currentStrategy.end !== 0) || - (currentStrategy.begin !== 0 && i === candles.length - 1 && lastCandle.end !== lastInstantOfTheDay) - ) { - - strategiesArray.push(currentStrategy); - - currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - } - } - } - - /* Prepare the information for the Trades File */ - - if ( - (currentTrade.begin !== 0 && currentTrade.end !== 0) || - (currentTrade.begin !== 0 && i === candles.length - 1 && lastCandle.end !== lastInstantOfTheDay) - ) { - - currentTrade.profit = lastTradeProfitLoss; - - tradesArray.push(currentTrade); - - currentTrade = { - begin: 0, - end: 0, - status: 0, - lastTradeROI: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - - if (processingDailyFiles) { - if (positionedAtYesterday) { - yesterday.currentTrade = { - begin: 0, - end: 0, - status: 0, - lastTradeROI: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - } - } - } - } - - function checkAnnouncements(node, value) { - /* - Value is an optional parameter that represents the value that the announcement is monitoring for change. - If we do receive this value, we will only make the annoucement if the variance is grater than the user pre-defined value - for this variance. - */ - - if (node.announcements !== undefined) { - for (let i = 0; i < node.announcements.length; i++) { - let announcement = node.announcements[i] - let key = node.type + "-" + announcement.name + "-" + announcement.id - - let lastPeriodAnnounced = -1 - let newAnnouncementRecord = {} - - for (let j = 0; j < interExecutionMemory.announcements.length; j++) { - let announcementRecord = interExecutionMemory.announcements[j] - if (announcementRecord.key === key) { - lastPeriodAnnounced = announcementRecord.periods - newAnnouncementRecord = announcementRecord - break - } - } - - if (periods > lastPeriodAnnounced) { - - /* The Value Variation is what tells us how much the value already announced must change in order to annouce it again. */ - let valueVariantion - try { - let code = JSON.parse(announcement.code) - valueVariantion = code.valueVariantion - } catch (err) { - announcement.error = err.message - } - - if (newAnnouncementRecord.value !== undefined && valueVariantion !== undefined) { - let upperLimit = newAnnouncementRecord.value + newAnnouncementRecord.value * valueVariantion / 100 - let lowerLimit = newAnnouncementRecord.value - newAnnouncementRecord.value * valueVariantion / 100 - if (value > lowerLimit && value < upperLimit ) { - /* There is not enough variation to announce this again. */ - return - } - } - - /* Here we check if there is a formula attached to the annoucement, we evaluate it to get the annoucement text. */ - let formulaValue - if (announcement.formula !== undefined) { - try { - formulaValue = eval(announcement.formula.code); - } catch (err) { - announcement.formula.error = err.message - } - } - announcement.formulaValue = formulaValue - - bot.SESSION.socialBots.announce(announcement) - - /* Next, we will remmeber this announcement was already done, so that it is not announced again in further processing of the same day. */ - if (newAnnouncementRecord.periods !== undefined) { - newAnnouncementRecord.periods = periods - newAnnouncementRecord.value = value - } else { - newAnnouncementRecord = { - key: key, - periods: periods, - value: value - } - interExecutionMemory.announcements.push(newAnnouncementRecord) - } - } - } - } - } - } - - function controlLoop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> controlLoop -> Entering function."); } - - /* Checking if we should continue processing this loop or not.*/ - if (bot.STOP_SESSION === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> controlLoop -> We are going to stop here bacause we were requested to stop processing."); } - console.log("[INFO] runSimulation -> controlLoop -> We are going to stop here bacause we were requested to stop processing.") - afterLoop() - return - } - - i++ - if (i < candles.length) { - setImmediate(loop) // This will execute the next loop in the next iteration of the NodeJs event loop allowing for other callbacks to be executed. - } else { - afterLoop() - } - } - - function afterLoop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> afterLoop -> Entering function."); } - - /* - Before returning we need to see if we have to record some of our counters at the interExecutionMemory. - To do that, the condition to be met is that this execution must include all candles of the current day. - */ - - if (processingDailyFiles) { - - if (lastCandle.end === lastInstantOfTheDay) { - - interExecutionMemory.stopLoss = yesterday.stopLoss - interExecutionMemory.takeProfit = yesterday.takeProfit - - interExecutionMemory.previousBalanceAssetA = yesterday.previousBalanceAssetA - interExecutionMemory.previousBalanceAssetB = yesterday.previousBalanceAssetB - - interExecutionMemory.tradePositionRate = yesterday.tradePositionRate - interExecutionMemory.tradePositionSize = yesterday.tradePositionSize - - interExecutionMemory.currentStrategyIndex = yesterday.currentStrategyIndex - interExecutionMemory.strategyStage = yesterday.strategyStage - - interExecutionMemory.stopLossPhase = yesterday.stopLossPhase - interExecutionMemory.stopLossStage = yesterday.stopLossStage - - interExecutionMemory.takeProfitPhase = yesterday.takeProfitPhase - interExecutionMemory.takeProfitStage = yesterday.takeProfitStage - - interExecutionMemory.currentStrategy = { - begin: yesterday.currentStrategy.begin, - end: yesterday.currentStrategy.end, - status: yesterday.currentStrategy.status, - number: yesterday.currentStrategy.number, - beginRate: yesterday.currentStrategy.beginRate, - endRate: yesterday.currentStrategy.endRate - } - - interExecutionMemory.currentTrade = { - begin: yesterday.currentTrade.begin, - end: yesterday.currentTrade.end, - status: yesterday.currentTrade.status, - profit: yesterday.currentTrade.profit, - exitType: yesterday.currentTrade.exitType, - beginRate: yesterday.currentTrade.beginRate, - endRate: yesterday.currentTrade.endRate - } - - interExecutionMemory.balanceAssetA = yesterday.balanceAssetA; - interExecutionMemory.balanceAssetB = yesterday.balanceAssetB; - interExecutionMemory.lastTradeProfitLoss = yesterday.lastTradeProfitLoss; - interExecutionMemory.profit = yesterday.profit; - interExecutionMemory.lastTradeROI = yesterday.lastTradeROI; - - interExecutionMemory.roundtrips = yesterday.roundtrips; - interExecutionMemory.fails = yesterday.fails; - interExecutionMemory.hits = yesterday.hits; - interExecutionMemory.periods = yesterday.periods; - interExecutionMemory.positionPeriods = yesterday.positionPeriods; - - interExecutionMemory.distanceToLast.triggerOn = yesterday.distanceToLast.triggerOn - interExecutionMemory.distanceToLast.triggerOff = yesterday.distanceToLast.triggerOff - interExecutionMemory.distanceToLast.takePosition = yesterday.distanceToLast.takePosition - interExecutionMemory.distanceToLast.closePosition = yesterday.distanceToLast.closePosition - - interExecutionMemory.messageId = interExecutionMemory.messageId + yesterday.messageId; - interExecutionMemory.orderId = interExecutionMemory.orderId + yesterday.orderId; - - interExecutionMemory.hitRatio = yesterday.hitRatio; - interExecutionMemory.ROI = yesterday.ROI; - interExecutionMemory.anualizedRateOfReturn = yesterday.anualizedRateOfReturn; - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> callback -> recordsArray.length = " + recordsArray.length); } - - callback(tradingSystem, recordsArray, conditionsArray, strategiesArray, tradesArray); - } - - function getElement(pArray, currentCandle, datasetName) { - - try { - let element; - for (let i = 0; i < pArray.length; i++) { - element = pArray[i]; - - if (currentCandle.end === element.end) { // when there is an exact match at the end we take that element - return element - } else { - if ( - i > 0 && - element.end > currentCandle.end - ) { - let previousElement = pArray[i - 1] - if (previousElement.end < currentCandle.end) { - return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element. - } else { - return - } - } - if ( - i === pArray.length - 1 // If we reach the end of the array, then we return the last element. - && - element.end < currentCandle.end - ) { - return element - } - } - } - return - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] runSimulation -> getElement -> datasetName = " + datasetName); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] runSimulation -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildPercentageBandwidthArray(dataFile, timePeriodLabel, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildPercentageBandwidthArray -> Entering function."); } - - try { - - let percentageBandwidthArray = []; - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let percentageBandwidth = { - begin: dataFile[i][0], - end: dataFile[i][1], - value: dataFile[i][2], - movingAverage: dataFile[i][3], - bandwidth: dataFile[i][4] - }; - - if (previous !== undefined) { - - if (previous.movingAverage > percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Down'; } - if (previous.movingAverage < percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Up'; } - if (previous.movingAverage === percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Side'; } - - } - - percentageBandwidth.previous = previous; - - percentageBandwidthArray.push(percentageBandwidth); - - previous = percentageBandwidth; - - } - - percentageBandwidthAt[timePeriodLabel] = percentageBandwidthArray - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildPercentageBandwidthArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerBandsArray(dataFile, timePeriodLabel, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerBandsArray -> Entering function."); } - - try { - - let bollingerBandsArray = []; - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerBand = { - begin: dataFile[i][0], - end: dataFile[i][1], - movingAverage: dataFile[i][2], - standardDeviation: dataFile[i][3], - deviation: dataFile[i][4] - }; - - if (previous !== undefined) { - - if (previous.movingAverage > bollingerBand.movingAverage) { bollingerBand.direction = 'Down'; } - if (previous.movingAverage < bollingerBand.movingAverage) { bollingerBand.direction = 'Up'; } - if (previous.movingAverage === bollingerBand.movingAverage) { bollingerBand.direction = 'Side'; } - - } - - bollingerBand.previous = previous; - - bollingerBandsArray.push(bollingerBand); - - previous = bollingerBand; - } - - bollingerBandsAt[timePeriodLabel] = bollingerBandsArray - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerBandsArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerChannelsArray(dataFile, timePeriodLabel, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerChannelsArray -> Entering function."); } - - try { - - let bollingerChannelsArray = []; - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerChannel = { - begin: dataFile[i][0], - end: dataFile[i][1], - direction: dataFile[i][2], - period: dataFile[i][3] - }; - - bollingerChannel.previous = previous; - - bollingerChannelsArray.push(bollingerChannel); - - previous = bollingerChannel; - } - - bollingerChannelsAt[timePeriodLabel] = bollingerChannelsArray - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerChannelsArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerSubChannelsArray(dataFile, timePeriodLabel, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerSubChannelsArray -> Entering function."); } - - try { - let bollingerSubChannelsArray = []; - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerSubChannel = { - begin: dataFile[i][0], - end: dataFile[i][1], - direction: dataFile[i][2], - slope: dataFile[i][3], - period: dataFile[i][4], - firstMovingAverage: dataFile[i][5], - lastMovingAverage: dataFile[i][6], - firstDeviation: dataFile[i][7], - lastDeviation: dataFile[i][8] - }; - - bollingerSubChannel.previous = previous; - - bollingerSubChannelsArray.push(bollingerSubChannel); - - previous = bollingerSubChannel; - } - - bollingerSubChannelsAt[timePeriodLabel] = bollingerSubChannelsArray - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerSubChannelsArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandles(dataFile, timePeriodLabel, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildCandles -> Entering function."); } - - try { - let candles = []; - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = dataFile[i][0]; - candle.max = dataFile[i][1]; - - candle.open = dataFile[i][2]; - candle.close = dataFile[i][3]; - - candle.begin = dataFile[i][4]; - candle.end = dataFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'Down'; } - if (candle.open < candle.close) { candle.direction = 'Up'; } - if (candle.open === candle.close) { candle.direction = 'Side'; } - - candle.previous = previous; - - candles.push(candle); - - previous = candle; - } - - candlesAt[timePeriodLabel] = candles - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; - - - diff --git a/Deprecated-Code/ProtocolEngine/LICENSE b/Deprecated-Code/ProtocolEngine/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/ProtocolEngine/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/ProtocolEngine/Multi-Period/User.Bot.js b/Deprecated-Code/ProtocolEngine/Multi-Period/User.Bot.js deleted file mode 100644 index 658848110..000000000 --- a/Deprecated-Code/ProtocolEngine/Multi-Period/User.Bot.js +++ /dev/null @@ -1,992 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "User Bot"; - - const SIMULATED_RECORDS_FOLDER_NAME = "Trading-Simulation"; - const CONDITIONS_FOLDER_NAME = "Simulation-Conditions"; - const STRATEGIES_FOLDER_NAME = "Simulation-Strategies"; - const TRADES_FOLDER_NAME = "Simulation-Trades"; - - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - let commons = COMMONS.newCommons(bot, logger, UTILITIES); - - thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - let assistant; - - return thisObject; - - function initialize(callBackFunction, pAssistant) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - assistant = pAssistant; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - commons.finalize() - commons = undefined - utilities = undefined - assistant = undefined - thisObject = undefined - } - - function start(multiPeriodDataFiles, timePeriod, timePeriodLabel, currentDay, interExecutionMemory, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = global.MARKET; - let dataFile; - - let recordsArray - let conditionsArray - let strategiesArray - let tradesArray - - let tradingSystem = {}; - - for (let j = 0; j < global.marketFilesPeriods.length; j++) { - - let mapKey = marketFilesPeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(mapKey) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Building Dataset for timePeriod = " + mapKey); } - - if (dataFiles) { - for (let i = 0; i < 5; i++) { - - dataFile = dataFiles[i]; - - switch (i) { - case 0: { - commons.buildBollingerBandsArray(dataFile, mapKey, callBackFunction); - break; - } - case 1: { - commons.buildPercentageBandwidthArray(dataFile, mapKey, callBackFunction); - break; - } - case 2: { - commons.buildBollingerChannelsArray(dataFile, mapKey, callBackFunction); - break; - } - case 3: { - commons.buildBollingerSubChannelsArray(dataFile, mapKey, callBackFunction); - break; - } - case 4: { - commons.buildCandles(dataFile, mapKey, callBackFunction); - break; - } - } - } - } - } - - for (let j = 0; j < global.dailyFilePeriods.length; j++) { - - let mapKey = global.dailyFilePeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(mapKey) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Building Dataset for timePeriod = " + mapKey); } - - if (dataFiles) { - for (let i = 0; i < 5; i++) { - - dataFile = dataFiles[i]; - - switch (i) { - case 0: { - commons.buildBollingerBandsArray(dataFile, mapKey, callBackFunction); - break; - } - case 1: { - commons.buildPercentageBandwidthArray(dataFile, mapKey, callBackFunction); - break; - } - case 2: { - commons.buildBollingerChannelsArray(dataFile, mapKey, callBackFunction); - break; - } - case 3: { - commons.buildBollingerSubChannelsArray(dataFile, mapKey, callBackFunction); - break; - } - case 4: { - commons.buildCandles(dataFile, mapKey, callBackFunction); - break; - } - } - } - } - } - - commons.runSimulation( - timePeriod, - timePeriodLabel, - currentDay, - interExecutionMemory, - assistant, - writeFiles, - callBackFunction) - - function writeFiles(pTradingSystem, pRecordsArray, pConditionsArray, pStrategiesArray, pTradesArray) { - - tradingSystem = pTradingSystem - recordsArray = pRecordsArray - conditionsArray = pConditionsArray - strategiesArray = pStrategiesArray - tradesArray = pTradesArray - - if (timePeriod > global.dailyFilePeriods[0][0]) { - writeMarketFiles() - } else { - writeDailyFiles() - } - } - - function writeMarketFiles() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> Entering function."); } - - writeRecordsFile(); - - function writeRecordsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeRecordsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < recordsArray.length; i++) { - - let record = recordsArray[i]; - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.type + "," + - record.marketRate + "," + - record.amount + "," + - record.balanceA + "," + - record.balanceB + "," + - record.profit + "," + - record.lastTradeProfitLoss + "," + - record.stopLoss + "," + - record.roundtrips + "," + - record.hits + "," + - record.fails + "," + - record.hitRatio + "," + - record.ROI + "," + - record.periods + "," + - record.days + "," + - record.anualizedRateOfReturn + "," + - record.positionRate + "," + - record.lastTradeROI + "," + - record.strategy + "," + - record.strategyStageNumber + "," + - record.takeProfit + "," + - record.stopLossPhase + "," + - record.takeProfitPhase + "," + - JSON.stringify(record.executionRecord) + "," + - record.positionSize + "," + - record.initialBalanceA + "," + - record.minimumBalanceA + "," + - record.maximumBalanceA + "," + - record.initialBalanceB + "," + - record.minimumBalanceB + "," + - record.maximumBalanceB + "," + - record.baseAsset + "," + - record.positionPeriods + "," + - record.positionDays + "," + - record.distanceToLastTriggerOn + "," + - record.distanceToLastTriggerOff + "," + - record.distanceToLastTakePosition + "," + - record.distanceToLastClosePosition + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timePeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeConditionsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeConditionsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeConditionsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < conditionsArray.length; i++) { - - let record = conditionsArray[i]; - - let conditions = ""; - let conditionsSeparator = ""; - - for (let j = 0; j < record.length - 3; j++) { - conditions = conditions + conditionsSeparator + record[j]; - if (conditionsSeparator === "") { conditionsSeparator = ","; } - } - - conditions = conditions + conditionsSeparator + '[' + record[record.length - 3] + ']'; // The last item contains an Array of condition values. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 2] + ']'; // The last item contains an Array of formulaErrors. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 1] + ']'; // The last item contains an Array of formulaValues. - - fileContent = fileContent + separator + '[' + conditions + ']'; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - fileContent = "[" + JSON.stringify(tradingSystem) + "," + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timePeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeStrategiesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStrategiesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeStrategiesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < strategiesArray.length; i++) { - let record = strategiesArray[i]; - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.number + "," + - record.beginRate + "," + - record.endRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timePeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeTradesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeTradesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeTradesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < tradesArray.length; i++) { - - let record = tradesArray[i]; - if (record.stopRate === undefined) { record.stopRate = 0 } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.lastTradeROI + "," + - record.beginRate + "," + - record.endRate + "," + - record.exitType + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timePeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - /* Emit event that signals that simulation files were updated */ - global.SYSTEM_EVENT_HANDLER.raiseEvent('Jason-Multi-Period', 'Simulation Files Updated') - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - - function writeDailyFiles() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> Entering function."); } - - writeRecordsFile(); - - /* TODO : NEXT function is a work in progress, not used today */ - function writeFinalResults() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeFinalResults -> Entering function."); } - - if ( // We only write this file if we are at the head of the market. - Math.trunc(currentDay.valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS - !== - Math.trunc((new Date()).valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS - ) { - writeRecordsFile(); - return; - } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < recordsArray.length; i++) { - - let record = recordsArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.type + "," + - record.marketRate + "," + - record.amount + "," + - record.balanceA + "," + - record.balanceB + "," + - record.profit + "," + - record.lastTradeProfitLoss + "," + - record.stopLoss + "," + - record.roundtrips + "," + - record.hits + "," + - record.fails + "," + - record.hitRatio + "," + - record.ROI + "," + - record.periods + "," + - record.days + "," + - record.anualizedRateOfReturn + "," + - record.positionRate + "," + - record.lastTradeROI + "," + - record.strategy + "," + - record.strategyStageNumber + "," + - record.takeProfit + "," + - record.stopLossPhase + "," + - record.takeProfitPhase + "," + - JSON.stringify(record.executionRecord) + "," + - record.positionSize + "," + - record.initialBalanceA + "," + - record.minimumBalanceA + "," + - record.maximumBalanceA + "," + - record.initialBalanceB + "," + - record.minimumBalanceB + "," + - record.maximumBalanceB + "," + - record.baseAsset + "," + - record.positionPeriods + "," + - record.positionDays + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timePeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeRecordsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeRecordsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeRecordsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < recordsArray.length; i++) { - - let record = recordsArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.type + "," + - record.marketRate + "," + - record.amount + "," + - record.balanceA + "," + - record.balanceB + "," + - record.profit + "," + - record.lastTradeProfitLoss + "," + - record.stopLoss + "," + - record.roundtrips + "," + - record.hits + "," + - record.fails + "," + - record.hitRatio + "," + - record.ROI + "," + - record.periods + "," + - record.days + "," + - record.anualizedRateOfReturn + "," + - record.positionRate + "," + - record.lastTradeROI + "," + - record.strategy + "," + - record.strategyStageNumber + "," + - record.takeProfit + "," + - record.stopLossPhase + "," + - record.takeProfitPhase + "," + - JSON.stringify(record.executionRecord) + "," + - record.positionSize + "," + - record.initialBalanceA + "," + - record.minimumBalanceA + "," + - record.maximumBalanceA + "," + - record.initialBalanceB + "," + - record.minimumBalanceB + "," + - record.maximumBalanceB + "," + - record.baseAsset + "," + - record.positionPeriods + "," + - record.positionDays + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timePeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeConditionsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeConditionsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeConditionsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < conditionsArray.length; i++) { - - let record = conditionsArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - let conditions = ""; - let conditionsSeparator = ""; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - for (let j = 0; j < record.length - 3; j++) { - conditions = conditions + conditionsSeparator + record[j]; - if (conditionsSeparator === "") { conditionsSeparator = ","; } - } - - conditions = conditions + conditionsSeparator + '[' + record[record.length - 3] + ']'; // The last item contains an Array of condition values. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 2] + ']'; // The last item contains an Array of formulaErrors. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 1] + ']'; // The last item contains an Array of formulaValues. - - fileContent = fileContent + separator + '[' + conditions + ']'; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - fileContent = "[" + JSON.stringify(tradingSystem) + "," + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timePeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeStrategiesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStrategiesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeStrategiesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < strategiesArray.length; i++) { - let record = strategiesArray[i]; - - /* Will only add to the file the records of the current day. In this case since objects can span more than one day, we add all of the objects that ends - at the current date. */ - - if (record.end < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.number + "," + - record.beginRate + "," + - record.endRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timePeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeTradesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeTradesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeTradesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < tradesArray.length; i++) { - - let record = tradesArray[i]; - - /* Will only add to the file the records of the current day. In this case since objects can span more than one day, we add all of the objects that ends - at the current date. */ - - if (record.end < currentDay.valueOf()) { continue; } - if (record.stopRate === undefined) { record.stopRate = 0 } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.lastTradeROI + "," + - record.beginRate + "," + - record.endRate + "," + - record.exitType + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timePeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - /* Emit event that signals that simulation files were updated */ - global.SYSTEM_EVENT_HANDLER.raiseEvent('Jason-Multi-Period', 'Simulation Files Updated') - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/ProtocolEngine/Project.njsproj b/Deprecated-Code/ProtocolEngine/Project.njsproj deleted file mode 100644 index 0351129cc..000000000 --- a/Deprecated-Code/ProtocolEngine/Project.njsproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - 2.0 - {aa2901bc-8f81-40f0-a402-5ca79a3f22ad} - - ShowAllFiles - - - c:\users\luis\source\repos\AAOlivia\Multi-Period-Market - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/ProtocolEngine/README.md b/Deprecated-Code/ProtocolEngine/README.md deleted file mode 100644 index 099b74e58..000000000 --- a/Deprecated-Code/ProtocolEngine/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# I'm Jason, an AA i-Bot! - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/ProtocolEngine/package-lock.json b/Deprecated-Code/ProtocolEngine/package-lock.json deleted file mode 100644 index 4fc77c7f4..000000000 --- a/Deprecated-Code/ProtocolEngine/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "AAToma", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@superalgos/mqservice": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@superalgos/mqservice/-/mqservice-0.0.3.tgz", - "integrity": "sha512-7beJRbcylkzND1MnWdEIrmtrqOyFvRsS131JKk6Xap5fFpS8kPpXKHEY50K97qwBnbTJZSJyNvSjafJPRUNjqQ==" - } - } -} diff --git a/Deprecated-Code/ProtocolEngine/package.json b/Deprecated-Code/ProtocolEngine/package.json deleted file mode 100644 index 76760c537..000000000 --- a/Deprecated-Code/ProtocolEngine/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "AAToma", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": { - "@superalgos/mqservice": "0.0.3" - } -} diff --git a/Deprecated-Code/ProtocolEngine/this.bot.config.json b/Deprecated-Code/ProtocolEngine/this.bot.config.json deleted file mode 100644 index 8361d7bf1..000000000 --- a/Deprecated-Code/ProtocolEngine/this.bot.config.json +++ /dev/null @@ -1,537 +0,0 @@ -{ - "displayName": "Jason", - "codeName": "AAJason", - "type": "Trading Bot", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "AAMasters", - "profilePicture": "Jason.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Multi-Period", - "description": "Produces a Daily or Market files depending on the current timePeriod.", - "startMode": { - "userDefined": { - "run": "true" - } - }, - "deadWaitTime": 0, - "liveWaitTime": 60000, - "normalWaitTime": 5000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Trading-Simulation", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Simulation-Conditions", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Simulation-Strategies", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Simulation-Trades", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Live Trading History", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Trading-Simulation", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Simulation-Conditions", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Simulation-Strategies", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Simulation-Trades", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Live Trading History", - "dataSet": "Oficial History" - } - ], - "framework": { - "name": "Multi-Period", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "startDate": { - "takeItFromStatusDependency": 2 - }, - "endDate": { - "takeItFromStatusDependency": 1 - } - }, - "statusDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AACharly", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Historic-Trades", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "type": "Trading Engine", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "type": "Trading Engine", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Context", - "dataSetVersion": "dataSet.V1" - } - ], - "dataDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Percentage-Bandwidth", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Bands", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Sub-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Percentage-Bandwidth", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Bands", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Sub-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - } - ] - } - ], - "products": [ - { - "codeName": "Trading-Simulation", - "displayName": "Simulation", - "description": "Trading Simulation", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Trading-Simulation/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Trading-Simulation/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Trading-Simulation/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "TradingSimulation" - } - }, - { - "codeName": "Simulation-Conditions", - "displayName": "Conditions", - "description": "Simulation Conditions", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Conditions/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Conditions/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Conditions/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Conditions" - } - }, - { - "codeName": "Simulation-Strategies", - "displayName": "Strategies", - "description": "Simulation Strategies", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Strategies/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Strategies/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Strategies/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Strategies" - } - }, - { - "codeName": "Simulation-Trades", - "displayName": "Trades", - "description": "Simulation Trades", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Trades/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Trades/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/@Session/Simulation-Trades/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Trades" - } - }, - { - "codeName": "Live-Trading-History", - "displayName": "Live", - "shortDisplayName": "Live", - "description": "Live Trading Execution.", - "dataSets": [ - { - "codeName": "Oficial History", - "type": "File Sequence", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs", - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/@Session/Trading-Process", - "fileName": "Execution.History.Live.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "SimulationExecution" - } - } - ] -} \ No newline at end of file diff --git a/Deprecated-Code/RawData/.gitattributes b/Deprecated-Code/RawData/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/RawData/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/RawData/.gitignore b/Deprecated-Code/RawData/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/RawData/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/RawData/Commons.js b/Deprecated-Code/RawData/Commons.js deleted file mode 100644 index 271f6cbe2..000000000 --- a/Deprecated-Code/RawData/Commons.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - let thisObject = { - - }; - - return thisObject; -}; \ No newline at end of file diff --git a/Deprecated-Code/RawData/Exchange-Raw-Data-Sensor-Bot.sln b/Deprecated-Code/RawData/Exchange-Raw-Data-Sensor-Bot.sln deleted file mode 100644 index a21837e88..000000000 --- a/Deprecated-Code/RawData/Exchange-Raw-Data-Sensor-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AE0A3FE2-7021-4CC2-9922-A887CA5CDD7C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AE0A3FE2-7021-4CC2-9922-A887CA5CDD7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE0A3FE2-7021-4CC2-9922-A887CA5CDD7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE0A3FE2-7021-4CC2-9922-A887CA5CDD7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE0A3FE2-7021-4CC2-9922-A887CA5CDD7C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {9128DF06-8CA5-497C-8BF7-B924571C5394} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/RawData/Historic-OHLCVs/User.Bot.js b/Deprecated-Code/RawData/Historic-OHLCVs/User.Bot.js deleted file mode 100644 index 42d72a9ea..000000000 --- a/Deprecated-Code/RawData/Historic-OHLCVs/User.Bot.js +++ /dev/null @@ -1,694 +0,0 @@ - -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE, STATUS_REPORT, EXCHANGE_API) { - - const FULL_LOG = true; - const GMT_SECONDS = ':00.000 GMT+0000'; - const MODULE_NAME = "User Bot"; - const CANDLES_FOLDER_NAME = "Candles/One-Min"; - const VOLUMES_FOLDER_NAME = "Volumes/One-Min"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger) - let fileStorage = FILE_STORAGE.newFileStorage(logger); - let statusDependencies - - const ONE_MIN = 60000 - const ONE_DAY = ONE_MIN * 60 * 24 - - const MAX_OHLCVs_PER_EXECUTION = 10000000 - const symbol = bot.market.baseAsset + '/' + bot.market.quotedAsset - const ccxt = require('ccxt') - - let fetchType = "by Time" - let lastId - let firstId - let allOHLCVs = [] - let thisReport; - let since - let initialProcessTimestamp - let beginingOfMarket - let lastFile - let exchangeId - let options = {} - let rateLimit = 500 - let exchange - let uiStartDate = new Date(bot.uiStartDate) - let fisrtTimeThisProcessRun = false - let limit = 1000 // This is the default value - let hostname - let lastCandleOfTheDay - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - let exchangeClass - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - statusDependencies = pStatusDependencies; - - exchangeId = bot.exchange.toLowerCase().replace(' ', '') - - /* Applying the parameters defined by the user at the Exchange Node Config */ - if (bot.exchangeNode.config.API !== undefined) { - for (let i = 0; i < bot.exchangeNode.config.API.length; i++) { - if (bot.exchangeNode.config.API[i].method === 'fetch_ohlcv') { - if (bot.exchangeNode.config.API[i].class !== undefined) { - exchangeId = bot.exchangeNode.config.API[i].class - } - if (bot.exchangeNode.config.API[i].fetchOHLCVsMethod !== undefined) { - options = { - 'fetchOHLCVsMethod': bot.exchangeNode.config.API[i].fetchOHLCVsMethod - } - } - if (bot.exchangeNode.config.API[i].firstId !== undefined) { - firstId = bot.exchangeNode.config.API[i].firstId - } - if (bot.exchangeNode.config.API[i].rateLimit !== undefined) { - rateLimit = bot.exchangeNode.config.API[i].rateLimit - } - if (bot.exchangeNode.config.API[i].hostname !== undefined) { - hostname = bot.exchangeNode.config.API[i].hostname - } - if (bot.exchangeNode.config.API[i].fetchType !== undefined) { - fetchType = bot.exchangeNode.config.API[i].fetchType - } - } - } - } - - if (bot.config.fetchLimit !== undefined) { - limit = bot.config.fetchLimit - } - - let key = process.env.KEY - let secret = process.env.SECRET - - if (key === "undefined") { key = undefined } - if (secret === "undefined") { secret = undefined } - - - exchangeClass = ccxt[exchangeId] - const exchangeConstructorParams = { - 'apiKey': key, - 'secret': secret, - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false, - options: options - } - if (rateLimit !== undefined) { - exchangeConstructorParams.rateLimit = rateLimit - } - if (hostname !== undefined) { - exchangeConstructorParams.hostname = hostname - } - - exchange = new exchangeClass(exchangeConstructorParams) - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - - /* CCXT Supported Exchanges */ - console.log('CCXT Library current supported exchanges:') - for (const property in ccxt) { - console.log(`${property}`); - } - console.log('For more info please check: https://github.com/ccxt/ccxt/wiki/Manual') - console.log('Exchange Class ' + exchangeId) - console.log(exchangeClass) - - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(callBackFunction) { - try { - - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - let abort = false - begin() - - async function begin() { - - getContextVariables() - if (abort === true) { return } - await getFirstId() - await getOHLCVs() - if (abort === true) { return } - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - await saveOHLCVs() - } - - function getContextVariables() { - - try { - let reportKey; - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey) - - if (thisReport.file.beginingOfMarket !== undefined) { // This means this is not the first time this process run. - beginingOfMarket = new Date(thisReport.file.beginingOfMarket.year + "-" + thisReport.file.beginingOfMarket.month + "-" + thisReport.file.beginingOfMarket.days + " " + thisReport.file.beginingOfMarket.hours + ":" + thisReport.file.beginingOfMarket.minutes + GMT_SECONDS); - lastFile = new Date(thisReport.file.lastFile.year + "-" + thisReport.file.lastFile.month + "-" + thisReport.file.lastFile.days + " " + thisReport.file.lastFile.hours + ":" + thisReport.file.lastFile.minutes + GMT_SECONDS); - lastId = thisReport.file.lastId - lastCandleOfTheDay = thisReport.file.lastCandleOfTheDay - } else { // This means this is the first time this process run. - fisrtTimeThisProcessRun = true - beginingOfMarket = new Date(uiStartDate.valueOf()) - } - - defineSince() - function defineSince() { - if (thisReport.file.uiStartDate === undefined) { - thisReport.file.uiStartDate = uiStartDate - } else { - thisReport.file.uiStartDate = new Date(thisReport.file.uiStartDate) - } - - if (uiStartDate.valueOf() !== thisReport.file.uiStartDate.valueOf()) { - since = uiStartDate.valueOf() - initialProcessTimestamp = since - fisrtTimeThisProcessRun = true - beginingOfMarket = new Date(uiStartDate.valueOf()) - } else { - if (lastFile !== undefined) { - since = lastFile.valueOf() - initialProcessTimestamp = lastFile.valueOf() - } else { - since = uiStartDate.valueOf() - initialProcessTimestamp = uiStartDate.valueOf() - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot Status Dependencies. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - abort = true - } - } - - async function getFirstId() { - try { - /* We need the first id only when we are going to fetch trades based on id and it is the first time the process runs*/ - if (fetchType !== "by Id") { return } - if (lastId !== undefined) { return } - lastId = 0 - - return - /* - const limit = 1 - const exchangeClass = ccxt[exchangeId] - const exchange = new exchangeClass({ - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - }) - - const OHLCVs = await exchange.fetchOHLCV(symbol, '1m', since, limit, undefined) - - let lastRecord = OHLCVs[OHLCVs.length - 1] - lastId = lastRecord.info[firstId] - */ - } catch (err) { - /* If something fails trying to get an id close to since, we just will continue without an id.*/ - } - } - - async function getOHLCVs() { - - try { - let lastOHLCVKey = '' - let params = undefined - let previousSince - let fromDate = new Date(since) - let lastDate = new Date() - - while (true) { - - /* Reporting we are doing well */ - function heartBeat(noNewInternalLoop) { - let processingDate = new Date(since) - processingDate = processingDate.getUTCFullYear() + '-' + utilities.pad(processingDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processingDate.getUTCDate(), 2); - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getOHLCVs -> Fetching OHLCVs @ " + processingDate + "-> exchange = " + bot.exchange + " -> symbol = " + symbol + " -> since = " + since + " -> limit = " + limit) } - let heartBeatText = "Fetching " + allOHLCVs.length.toFixed(0) + " OHLCVs from " + bot.exchange + " " + symbol + " @ " + processingDate - let currentDate = new Date(since) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(heartBeatText, percentage) // tell the world we are alive and doing well - if (global.areEqualDates(currentDate, new Date()) === false) { - if (noNewInternalLoop !== true) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage); - } - } - } - - heartBeat() - - /* Defining if we will query the exchange by Date or Id */ - if (fetchType === "by Id") { - /* - params = { - 'fromId': lastId - } - */ - since = lastId - } - - /* Fetching the OHLCVs from the exchange.*/ - await new Promise(resolve => setTimeout(resolve, rateLimit)) // rate limit - const OHLCVs = await exchange.fetchOHLCV(symbol, '1m', since, limit, params) - - /* - OHLCV Structure - The fetchOHLCV method shown above returns a list (a flat array) of OHLCV candles represented by the following structure: - - [ - [ - 1504541580000, // UTC timestamp in milliseconds, integer - 4235.4, // (O)pen price, float - 4240.6, // (H)ighest price, float - 4230.0, // (L)owest price, float - 4230.7, // (C)losing price, float - 37.72941911 // (V)olume (in terms of the base currency), float - ], - ... - ] - */ - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getOHLCVs -> OHLCVs Fetched = " + OHLCVs.length) } - if (OHLCVs.length > 0) { - let beginDate = new Date(OHLCVs[0].timestamp) - let endDate = new Date(OHLCVs[OHLCVs.length - 1].timestamp) - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getOHLCVs -> OHLCVs Fetched From " + beginDate + " -> timestamp = " + OHLCVs[0].timestamp) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getOHLCVs -> OHLCVs Fetched to " + endDate + " -> timestamp = " + OHLCVs[OHLCVs.length - 1].timestamp) } - - if (fisrtTimeThisProcessRun === true) { - let OHLCV = OHLCVs[0] - - initialProcessTimestamp = OHLCV[0] // 'timestamp' - beginingOfMarket = new Date(Math.trunc(OHLCV[0] / ONE_DAY) * ONE_DAY) // 'timestamp' - fromDate = new Date(beginingOfMarket.valueOf()) - fisrtTimeThisProcessRun = false - } - } - - if (OHLCVs.length > 1) { - previousSince = since - since = OHLCVs[OHLCVs.length - 1][0] // 'timestamp' - if (since === previousSince) { - since++ // this prevents requesting in a loop OHLCVs with the same timestamp, that can happen when all the records fetched comes with exactly the same timestamp. - } - - - lastId = OHLCVs[OHLCVs.length - 1]['id'] - - for (let i = 0; i < OHLCVs.length; i++) { - - let OHLCV = OHLCVs[i] - - let OHLCVKey = OHLCV[0] + '-' + OHLCV[1].toFixed(16) + '-' + OHLCV[2].toFixed(16) + '-' + OHLCV[3].toFixed(16) + '-' + OHLCV[4].toFixed(16) + '-' + OHLCV[5].toFixed(16) - if (OHLCVKey !== lastOHLCVKey) { - allOHLCVs.push(OHLCV) - } - lastOHLCVKey = OHLCVKey - } - - heartBeat(true) - } - - if ( - OHLCVs.length < limit - 1 || - global.STOP_TASK_GRACEFULLY === true || - allOHLCVs.length >= MAX_OHLCVs_PER_EXECUTION - ) { - break - } - } - } catch (err) { - if (err.stack.toString().indexOf('ERR_RATE_LIMIT') >= 0) { - logger.write(MODULE_NAME, "[ERROR] start -> getOHLCVs -> Retrying Later -> The Exchange " + bot.exchange + " is saying you are requesting data too often. I will retry the request later, no action is required. To avoid this happening again please increase the rateLimit at the Exchange node config. You might continue seeing this if you are retrieving data from multiple markets at the same time. In this case I tried to get 1 min OHLCVs from " + symbol); - return - } - - if (err.stack.toString().indexOf('RequestTimeout') >= 0) { - logger.write(MODULE_NAME, "[ERROR] start -> getOHLCVs -> Retrying Later -> The Exchange " + bot.exchange + " is not responding at the moment. I will save the data already fetched and try to reconnect later to fetch the rest of the missing data."); - return - } - - if (err.stack.toString().indexOf('ExchangeNotAvailable') >= 0) { - logger.write(MODULE_NAME, "[ERROR] start -> getOHLCVs -> Retrying Later -> The Exchange " + bot.exchange + " is not available at the moment. I will save the data already fetched and try to reconnect later to fetch the rest of the missing data."); - return - } - - logger.write(MODULE_NAME, "[ERROR] start -> getOHLCVs -> Retrying Later -> err = " + err.stack); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - abort = true - return - } - } - - async function saveOHLCVs() { - - try { - - let candlesFileContent = '[' - let volumesFileContent = '[' - let previousDay = Math.trunc((initialProcessTimestamp - ONE_DAY) / ONE_DAY) - let currentDay = Math.trunc((initialProcessTimestamp - ONE_DAY) / ONE_DAY) - let needSeparator = false - let error - let separator - let heartBeatCounter = 0 - let headOfTheMarketReached = false - - let lastCandle = { - begin: 0, - end: 0, - open: 0, - close: 0, - min: 0, - max: 0 - } - - let lastVolume = { - begin: 0, - end: 0, - buy: 0, - sell: 0 - } - - let i = 0 - lastId = undefined - - if (lastCandleOfTheDay !== undefined) { - lastCandle = JSON.parse(JSON.stringify(lastCandleOfTheDay)) - } - - controlLoop() - - function loop() { - - let filesToCreate = 0 - let filesCreated = 0 - - /* Go through all possible 1 min candles of a day. */ - for (let j = 0; j < 60 * 24; j++) { - - let candle = { - begin: currentDay * ONE_DAY + ONE_MIN * j, - end: currentDay * ONE_DAY + ONE_MIN * j + ONE_MIN - 1, - open: lastCandle.close, - close: lastCandle.close, - min: lastCandle.close, - max: lastCandle.close - } - let volume = { - begin: currentDay * ONE_DAY + ONE_MIN * j, - end: currentDay * ONE_DAY + ONE_MIN * j + ONE_MIN - 1, - buy: lastVolume.buy, - sell: lastVolume.sell - } - - let processingDate = new Date(candle.begin) - processingDate = processingDate.getUTCFullYear() + '-' + utilities.pad(processingDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processingDate.getUTCDate(), 2); - - if (candle.begin > (new Date()).valueOf()) { - /* We stop when the current candle is pointing to a time in the future.*/ - headOfTheMarketReached = true - saveFile(currentDay) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveOHLCVs -> Before Fetch -> Saving OHLCVs @ " + processingDate + " -> i = " + i + " -> total = " + allOHLCVs.length) } - bot.processHeartBeat("Saving " + i.toFixed(0) + " / " + allOHLCVs.length + " OHLCVs from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - - /* We exit the loop and we aint comming back*/ - return - } - - let OHLCV = { // these values should be overrided unless there are no OHLVCs fetched from the exchange. - timestamp: (new Date()).valueOf() + ONE_MIN, - open: 0, - hight: 0, - low: 0, - close: 0, - volume: 0 - } - - let record = allOHLCVs[i] - - if (record !== undefined) { // can be undefined if there is no candle fetched from the exchange - OHLCV = { - timestamp: record[0], - open: record[1], - hight: record[2], - low: record[3], - close: record[4], - volume: record[5] - } - } - - let candleMinute = Math.trunc(candle.begin / ONE_MIN) - let OHLCVMinute - - checkOHLCVMinute() - - function checkOHLCVMinute() { - /* - Some exchanges return inconsistent data. It is not guaranteed that each candle will have a timeStamp exactly at the begining of an - UTC minute. It is also not guaranteed that the distance between timestamps will be the same. To fix this, we will do this. - */ - - OHLCVMinute = Math.trunc(OHLCV.timestamp / ONE_MIN) - - if (OHLCVMinute < candleMinute) { - if (i >= allOHLCVs.length - 1) { - /* We run out of OHLCVs, we can not move to the next OHLCV, we leave this function. */ - return - } - - i++ - record = allOHLCVs[i] - OHLCV = { - timestamp: record[0], - open: record[1], - hight: record[2], - low: record[3], - close: record[4], - volume: record[5], - id: record[6] - } - checkOHLCVMinute() - } - } - - /* Reporting we are doing well */ - heartBeatCounter-- - if (heartBeatCounter <= 0) { - heartBeatCounter = 1440 - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveOHLCVs -> After Fetch -> Saving OHLCVs @ " + processingDate + " -> i = " + i + " -> total = " + allOHLCVs.length) } - bot.processHeartBeat("Saving " + i.toFixed(0) + " / " + allOHLCVs.length + " OHLCVs from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - } - /* End Reporting */ - - if (candleMinute === OHLCVMinute) { - candle.open = OHLCV.open - candle.close = OHLCV.close - candle.min = OHLCV.low - candle.max = OHLCV.hight - volume.buy = OHLCV.volume / 2 - volume.sell = OHLCV.volume / 2 - - if (i < allOHLCVs.length - 1) { - i++ - } - - lastId = OHLCV.id - - } - lastCandle = candle - - if (needSeparator === false) { - needSeparator = true; - separator = ''; - } else { - separator = ','; - } - - /* Add the candle to the file content.*/ - candlesFileContent = candlesFileContent + separator + '[' + candle.min + "," + candle.max + "," + candle.open + "," + candle.close + "," + candle.begin + "," + candle.end + "]"; - volumesFileContent = volumesFileContent + separator + '[' + volume.buy + "," + volume.sell + "," + volume.begin + "," + volume.end + "]"; - - /* We store the last candle of the day in order to have a previous candles during next execution. */ - if (j === 1440 - 1) { - lastCandleOfTheDay = JSON.parse(JSON.stringify(candle)) - } - } - - previousDay = currentDay - - if (i > 0) { // Only start saving at the day of the first candle. - saveFile(currentDay) - return - } - - controlLoop() - - function saveFile(day) { - candlesFileContent = candlesFileContent + ']' - volumesFileContent = volumesFileContent + ']' - - let fileName = 'Data.json' - - filesToCreate++ - fileStorage.createTextFile(getFilePath(day * ONE_DAY, CANDLES_FOLDER_NAME) + '/' + fileName, candlesFileContent + '\n', onFileCreated); - - filesToCreate++ - fileStorage.createTextFile(getFilePath(day * ONE_DAY, VOLUMES_FOLDER_NAME) + '/' + fileName, volumesFileContent + '\n', onFileCreated); - - candlesFileContent = '[' - volumesFileContent = '[' - needSeparator = false - - } - - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> OHLCVsReadyToBeSaved -> onFileBCreated -> err = " + JSON.stringify(err)); - error = err // This allows the loop to be breaked. - return; - } - filesCreated++ - lastFile = new Date((currentDay * ONE_DAY)) - if (filesCreated === filesToCreate) { - controlLoop() - } - } - - function getFilePath(timestamp, folderName) { - let datetime = new Date(timestamp) - let dateForPath = datetime.getUTCFullYear() + '/' + - utilities.pad(datetime.getUTCMonth() + 1, 2) + '/' + - utilities.pad(datetime.getUTCDate(), 2) - let filePath = bot.filePathRoot + "/Output/" + folderName + '/' + dateForPath; - return filePath - } - } - - function controlLoop() { - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - if (error) { - callBackFunction(error); - return; - } - - currentDay++ - - /* - One possible exit is when we reached the amount of candles downloaded. This not necesary happens at the end of the market - if the process was canceled for any reason at the middle. - */ - - if (i >= allOHLCVs.length - 1) { - writeStatusReport() - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveOHLCVs -> controlLoop -> Exit because i reached the end of the candles array. ") } - return - } - - - /* The natural exit is at the end of the market */ - if (headOfTheMarketReached === false) { - setImmediate(loop) - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveOHLCVs -> controlLoop -> Exit because we reached the end of the market. ") } - writeStatusReport() - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> saveOHLCVs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - abort = true - } - } - - function writeStatusReport() { - try { - if (lastFile === undefined) { return } - thisReport.file = { - lastFile: { - year: lastFile.getUTCFullYear(), - month: (lastFile.getUTCMonth() + 1), - days: lastFile.getUTCDate(), - hours: lastFile.getUTCHours(), - minutes: lastFile.getUTCMinutes() - }, - beginingOfMarket: { - year: beginingOfMarket.getUTCFullYear(), - month: (beginingOfMarket.getUTCMonth() + 1), - days: beginingOfMarket.getUTCDate(), - hours: beginingOfMarket.getUTCHours(), - minutes: beginingOfMarket.getUTCMinutes() - }, - uiStartDate: uiStartDate.toUTCString(), - lastCandleOfTheDay: lastCandleOfTheDay - }; - - if (fetchType === "by Id") { - thisReport.file.lastId = lastId - } - - thisReport.save(onSaved); - - function onSaved(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> onSaved -> err = " + err.stack); - callBackFunction(err); - return; - } - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/RawData/Historic-Trades/User.Bot.js b/Deprecated-Code/RawData/Historic-Trades/User.Bot.js deleted file mode 100644 index dfa816cf6..000000000 --- a/Deprecated-Code/RawData/Historic-Trades/User.Bot.js +++ /dev/null @@ -1,501 +0,0 @@ - -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE, STATUS_REPORT, EXCHANGE_API) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const MODULE_NAME = "User Bot"; - const TRADES_FOLDER_NAME = "Trades"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger) - let fileStorage = FILE_STORAGE.newFileStorage(logger); - let statusDependencies - - const ONE_MINUTE = 60000 - const MAX_TRADES_PER_EXECUTION = 100000 - const symbol = bot.market.baseAsset + '/' + bot.market.quotedAsset - const ccxt = require('ccxt') - - let allTrades = [] - let thisReport; - let since - let initialProcessTimestamp - let beginingOfMarket - let lastFileSaved - let exchangeId - let options = {} - let fetchType = "by Time" - let lastId - let firstId - let rateLimit - let exchange - let uiStartDate = new Date(bot.uiStartDate) - - const limit = 1000 - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - statusDependencies = pStatusDependencies; - - exchangeId = bot.exchange.toLowerCase() - - /* Applying the parameters defined by the user at the Exchange node */ - if (bot.exchangeNode.config.API !== undefined) { - for (let i = 0; i < bot.exchangeNode.config.API.length; i++) { - if (bot.exchangeNode.config.API[i].method === 'fetchTrades') { - if (bot.exchangeNode.config.API[i].class !== undefined) { - exchangeId = bot.exchangeNode.config.API[i].class - } - if (bot.exchangeNode.config.API[i].fetchType !== undefined) { - fetchType = bot.exchangeNode.config.API[i].fetchType - } - if (bot.exchangeNode.config.API[i].fetchTradesMethod !== undefined) { - options = { - 'fetchTradesMethod': bot.exchangeNode.config.API[i].fetchTradesMethod - } - } - if (bot.exchangeNode.config.API[i].firstId !== undefined) { - firstId = bot.exchangeNode.config.API[i].firstId - } - if (bot.exchangeNode.config.API[i].rateLimit !== undefined) { - rateLimit = bot.exchangeNode.config.API[i].rateLimit - } - } - } - } - - let key = process.env.KEY - let secret = process.env.SECRET - - if (key === "undefined") { key = undefined } - if (secret === "undefined") { secret = undefined } - - - const exchangeClass = ccxt[exchangeId] - const exchangeConstructorParams = { - 'apiKey': key, - 'secret': secret, - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false, - options: options - } - if (rateLimit !== undefined) { - exchangeConstructorParams.rateLimit = rateLimit - } - - exchange = new exchangeClass(exchangeConstructorParams) - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(callBackFunction) { - try { - - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - let abort = false - begin() - - async function begin() { - - getContextVariables() - if (abort === true) { return } - await getFirstId() - await getTrades() - if (abort === true) { return} - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - await saveTrades() - } - - function getContextVariables() { - - try { - let reportKey; - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-Trades" - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey) - - if (thisReport.file.beginingOfMarket !== undefined) { // This means this is not the first time this process run. - beginingOfMarket = new Date(thisReport.file.beginingOfMarket.year + "-" + thisReport.file.beginingOfMarket.month + "-" + thisReport.file.beginingOfMarket.days + " " + thisReport.file.beginingOfMarket.hours + ":" + thisReport.file.beginingOfMarket.minutes + GMT_SECONDS); - lastFileSaved = new Date(thisReport.file.lastFileSaved.year + "-" + thisReport.file.lastFileSaved.month + "-" + thisReport.file.lastFileSaved.days + " " + thisReport.file.lastFileSaved.hours + ":" + thisReport.file.lastFileSaved.minutes + GMT_SECONDS); - lastId = thisReport.file.lastId - } else { // This means this is the first time this process run. - beginingOfMarket = new Date(uiStartDate.valueOf()) - } - - defineSince() - function defineSince() { - if (thisReport.file.uiStartDate === undefined) { - thisReport.file.uiStartDate = uiStartDate - } else { - thisReport.file.uiStartDate = new Date(thisReport.file.uiStartDate) - } - - if (uiStartDate.valueOf() !== thisReport.file.uiStartDate.valueOf()) { - since = uiStartDate.valueOf() - initialProcessTimestamp = since - beginingOfMarket = new Date(uiStartDate.valueOf()) - } else { - if (lastFileSaved !== undefined) { - since = lastFileSaved.valueOf() - initialProcessTimestamp = lastFileSaved.valueOf() - } else { - since = uiStartDate.valueOf() - initialProcessTimestamp = uiStartDate.valueOf() - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot Status Dependencies. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - abort = true - } - } - - async function getFirstId() { - try { - /* We need the first id only when we are going to fetch trades based on id and it is the first time the process runs*/ - if (fetchType !== "by Id") { return } - if (lastId !== undefined) { return } - - const limit = 1 - const exchangeClass = ccxt[exchangeId] - const exchange = new exchangeClass({ - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - }) - - const trades = await exchange.fetchTrades(symbol, since, limit, undefined) - - let lastRecord = trades[trades.length - 1] - lastId = lastRecord.info[firstId] - } catch (err) { - /* If something fails trying to get an id close to since, we just will continue without an id.*/ - } - } - - async function getTrades() { - - try { - let lastTradeKey = '' - let params = undefined - let previousSince - - while (true) { - - /* Reporting we are doing well */ - let processingDate = new Date(since) - processingDate = processingDate.getUTCFullYear() + '-' + utilities.pad(processingDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processingDate.getUTCDate(), 2); - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getTrades -> Fetching Trades @ " + processingDate + "-> exchange = " + bot.exchange + " -> symbol = " + symbol + " -> since = " + since + " -> limit = " + limit ) } - bot.processHeartBeat("Fetching " + allTrades.length.toFixed(0) + " trades from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - - if (fetchType === "by Id") { - params = { - 'fromId': lastId - } - since = undefined - } - - /* Fetching the trades from the exchange.*/ - const trades = await exchange.fetchTrades(symbol, since, limit, params) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getTrades -> Trades Fetched = " + trades.length) } - if (trades.length > 0) { - let beginDate = new Date(trades[0].timestamp) - let endDate = new Date(trades[trades.length - 1].timestamp) - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getTrades -> Trades Fetched From " + beginDate) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getTrades -> Trades Fetched to " + endDate) } - } - - if (trades.length > 1) { - previousSince = since - since = trades[trades.length - 1]['timestamp'] - if (since === previousSince) { - since++ // this prevents requesting in a loop trades with the same timestamp, that can happen when all the records fetched comes with exactly the same timestamp. - } - - lastId = trades[trades.length - 1]['id'] - - for (let i = 0; i < trades.length; i++) { - let trade = trades[i] - let tradeKey = trade.id + '-' + trade.timestamp + '-' + trade.side + '-' + trade.price.toFixed(16) + '-' + trade.amount.toFixed(16) - if (tradeKey !== lastTradeKey) { - allTrades.push([trade.timestamp, trade.side, trade.price, trade.amount, trade.id]) - } - lastTradeKey = tradeKey - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getTrades -> Fetching Trades @ " + processingDate + "-> exchange = " + bot.exchange + " -> symbol = " + symbol + " -> since = " + since + " -> limit = " + limit) } - bot.processHeartBeat("Fetching " + allTrades.length.toFixed(0) + " trades from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - - } - - if ( - trades.length < limit - 1 || - global.STOP_TASK_GRACEFULLY === true || - allTrades.length >= MAX_TRADES_PER_EXECUTION - ) { - break - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getTrades -> Retrying Later -> err = " + err.stack); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - abort = true - } - } - - async function saveTrades() { - - try { - - let fileContent = '[' - let previousRecordMinute = Math.trunc((initialProcessTimestamp - ONE_MINUTE) / ONE_MINUTE) - let currentRecordMinute - let needSeparator = false - let error - let separator - let heartBeatCounter = 0 - - let i = -1 - lastId = undefined - controlLoop() - - function loop() { - - let filesToCreate = 0 - let filesCreated = 0 - - let record = allTrades[i] - let trade = { - timestamp: record[0], - side: record[1], - price: record[2], - amount: record[3] - } - - if (lastId === undefined) { - lastId = record[4] - } - - let processingDate = new Date(trade.timestamp) - processingDate = processingDate.getUTCFullYear() + '-' + utilities.pad(processingDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processingDate.getUTCDate(), 2); - - /* Reporting we are doing well */ - heartBeatCounter-- - if (heartBeatCounter <= 0) { - heartBeatCounter = 1000 - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveTrades -> Saving Trades @ " + processingDate + " -> i = " + i + " -> total = " + allTrades.length) } - bot.processHeartBeat("Saving " + i.toFixed(0) + " trades from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - } - - /* Saving the trades in Files*/ - currentRecordMinute = Math.trunc(trade.timestamp / ONE_MINUTE) - - if ( - currentRecordMinute !== previousRecordMinute - ) { - /* There are no more trades at this minute or it is the last trade, so we save the file.*/ - saveFile(previousRecordMinute) - lastId = undefined - } - - if (needSeparator === false) { - needSeparator = true; - separator = ''; - } else { - separator = ','; - } - - /* Add the trade to the file content.*/ - fileContent = fileContent + separator + '[' + trade.timestamp + ',"' + trade.side + '",' + trade.price + ',' + trade.amount + ']'; - - if (i === allTrades.length - 1) { - /* This is the last trade, so we save the file.*/ - saveFile(currentRecordMinute) - /* It might happen that there are several minutes after the last trade without trades. We need to record empty files for them.*/ - if (allTrades.length < MAX_TRADES_PER_EXECUTION) { - let currentTimeMinute = Math.trunc((new Date()).valueOf() / ONE_MINUTE) - if (currentTimeMinute - currentRecordMinute > 1) { - createMissingEmptyFiles(currentRecordMinute, currentTimeMinute) - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> saveTrades -> Saving Trades @ " + processingDate + " -> i = " + i + " -> total = " + allTrades.length) } - bot.processHeartBeat("Saving " + i.toFixed(0) + " trades from " + bot.exchange + " " + symbol + " @ " + processingDate) // tell the world we are alive and doing well - - return - } - previousRecordMinute = currentRecordMinute - if (error) { - callBackFunction(error); - return; - } - if (filesToCreate === 0) { - controlLoop() - } - function saveFile(minute) { - fileContent = fileContent + ']' - if (currentRecordMinute - previousRecordMinute > 1) { - createMissingEmptyFiles(previousRecordMinute, currentRecordMinute) - } - let fileName = 'Data.json' - if (previousRecordMinute >= initialProcessTimestamp / ONE_MINUTE) { - filesToCreate++ - fileStorage.createTextFile(getFilePath(minute * ONE_MINUTE) + '/' + fileName, fileContent + '\n', onFileCreated); - } - fileContent = '[' - needSeparator = false - - } - function createMissingEmptyFiles(begin, end) { - - /* - If this range is too wide, we will consider this means that the begin is before the begining of this market at this exchange. - In that case we will change the begin and the beginingOfMarket - */ - - if ((end - begin) / 60 / 24 > 7) { - begin = end - beginingOfMarket = new Date(end * ONE_MINUTE) - } - - for (let j = begin + 1; j < end; j++) { - let fileName = 'Data.json' - filesToCreate++ - fileStorage.createTextFile(getFilePath(j * ONE_MINUTE) + '/' + fileName, "[]" + '\n', onFileCreated); - - } - } - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> tradesReadyToBeSaved -> onFileBCreated -> err = " + JSON.stringify(err)); - error = err // This allows the loop to be breaked. - return; - } - filesCreated++ - lastFileSaved = new Date((currentRecordMinute * ONE_MINUTE)) - if (filesCreated === filesToCreate) { - controlLoop() - } - } - function getFilePath(timestamp) { - let datetime = new Date(timestamp) - let dateForPath = datetime.getUTCFullYear() + '/' + - utilities.pad(datetime.getUTCMonth() + 1, 2) + '/' + - utilities.pad(datetime.getUTCDate(), 2) + '/' + - utilities.pad(datetime.getUTCHours(), 2) + '/' + - utilities.pad(datetime.getUTCMinutes(), 2) - let filePath = bot.filePathRoot + "/Output/" + TRADES_FOLDER_NAME + '/' + dateForPath; - return filePath - } - - - } - function controlLoop() { - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - i++ - if (i < allTrades.length) { - setImmediate(loop) - } else { - writeStatusReport() - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> saveTrades -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - abort = true - } - } - - function writeStatusReport() { - try { - if (lastFileSaved === undefined) {return} - thisReport.file = { - lastFileSaved: { - year: lastFileSaved.getUTCFullYear(), - month: (lastFileSaved.getUTCMonth() + 1), - days: lastFileSaved.getUTCDate(), - hours: lastFileSaved.getUTCHours(), - minutes: lastFileSaved.getUTCMinutes() - }, - beginingOfMarket: { - year: beginingOfMarket.getUTCFullYear(), - month: (beginingOfMarket.getUTCMonth() + 1), - days: beginingOfMarket.getUTCDate(), - hours: beginingOfMarket.getUTCHours(), - minutes: beginingOfMarket.getUTCMinutes() - }, - uiStartDate: uiStartDate.toUTCString() - }; - - if (fetchType === "by Id") { - thisReport.file.lastId = lastId - } - - thisReport.save(onSaved); - - function onSaved(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> onSaved -> err = " + err.stack); - callBackFunction(err); - return; - } - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/RawData/LICENSE b/Deprecated-Code/RawData/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/RawData/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/RawData/Project.njsproj b/Deprecated-Code/RawData/Project.njsproj deleted file mode 100644 index 3cdafad98..000000000 --- a/Deprecated-Code/RawData/Project.njsproj +++ /dev/null @@ -1,73 +0,0 @@ - - - - Debug - 2.0 - {ae0a3fe2-7021-4cc2-9922-a887ca5cdd7c} - - ShowAllFiles - - - c:\users\luis\source\repos\AACharly\Poloniex-Hole-Fixing - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - Code - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/RawData/Project.njsproj.user b/Deprecated-Code/RawData/Project.njsproj.user deleted file mode 100644 index db8622989..000000000 --- a/Deprecated-Code/RawData/Project.njsproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - Debug|Any CPU - - \ No newline at end of file diff --git a/Deprecated-Code/RawData/README.md b/Deprecated-Code/RawData/README.md deleted file mode 100644 index b2479aeaf..000000000 --- a/Deprecated-Code/RawData/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Charly - -Charly is a Sensor bot that is capable of extracting trades from exchanges. It has 3 main processes which together creates an ongoing dataset of trades guaranteed to be reliable. - -## Live Trades - -This process extracts the latest 2 minutes of trade records and save 2 files of 1 minute each. The last file written is overwritten at the next run, allowing the process to complete with the trades that happened after the previous execution retrieval of data. - -### Start Mode - -The process need to run every 1 minute in noTime mode. - -``` -"startMode": { - "noTime": { - "run": "false" - } - } -``` - -## Hole Fixing - -When the Live Trades process goes down, the exchange goes down or anything in the middle goes down, data from the exchange can not be retrieved. Once Live Trades is running normally again a whole on the dataset appears between the last files saved and the new files after the restart. - -The Hole Fixing process is there to detect those holes and retrieve the missing information, allowing the dataset to be 100% reliable. - -### Start Mode - -This process runs every 1 minute under allMonths start mode, where a yearly range must be specified (initial processing year and final processing year) - -``` -"startMode": { - "allMonths": { - "run": "true", - "minYear": "2019", - "maxYear": "2021" - } - } -``` - -## Historic Trades - -This process is designed to grabb historical trades information from an exchange, starting from the latest trades, and going all the way back to the begining of the market, respecting the exchange limits on trades per batch extracted. - -This process is currently not being mantained, meaning that there is no guarantee that it can still run. - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/RawData/package-lock.json b/Deprecated-Code/RawData/package-lock.json deleted file mode 100644 index 1306b696d..000000000 --- a/Deprecated-Code/RawData/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "AACharly", - "version": "1.0.0", - "lockfileVersion": 1 -} diff --git a/Deprecated-Code/RawData/package.json b/Deprecated-Code/RawData/package.json deleted file mode 100644 index 446c6b8b6..000000000 --- a/Deprecated-Code/RawData/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "AACharly", - "version": "1.0.0", - "description": "Processes that get the trades from Poloniex.", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": {} -} diff --git a/Deprecated-Code/RawData/this.bot.config.json b/Deprecated-Code/RawData/this.bot.config.json deleted file mode 100644 index fcfcc6eaa..000000000 --- a/Deprecated-Code/RawData/this.bot.config.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "displayName": "Exchange Raw Data", - "codeName": "Exchange-Raw-Data", - "type": "Sensor Bot", - "dataMine": "Masters", - "profilePicture": "Exchange Raw Data.png", - "processes": [ - { - "name": "Live-Trades", - "description": "Retrieves the trades done at the current and the previous minute and saves them at the storage account.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "false" - }, - "fixedInterval": { - "run": "true", - "interval": 60000 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Live-Trades" - } - ] - }, - { - "name": "Historic-Trades", - "description": "Retrieves and saves the historical trades in batches going backwards from the current time until reaching the begining of the market.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "2014", - "maxYear": "2020" - }, - "oneMonth": { - "run": "true", - "year": "2018", - "month": "01" - }, - "noTime": { - "run": "false" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Live-Trades" - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-Trades" - } - ] - }, - { - "name": "Hole-Fixing", - "description": "Scans the trades saved by the Live Trades and Historic Trades processes searching for missing records. Once a hole is found on the data set, it patches it by retrieving the missing records from the exchange.", - "startMode": { - "allMonths": { - "run": "true", - "minYear": "2019", - "maxYear": "2019" - }, - "oneMonth": { - "run": "false", - "year": "2019", - "month": "10" - }, - "noTime": { - "run": "false" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Live-Trades", - "waitUntilNextUpdate": true - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Historic-Trades" - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Hole-Fixing", - "dataSetSection": "Month" - }, - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "process": "Hole-Fixing" - } - ] - } - ] -} - - - diff --git a/Deprecated-Code/SaWebApi/.dockerignore b/Deprecated-Code/SaWebApi/.dockerignore deleted file mode 100644 index fe24f1c90..000000000 --- a/Deprecated-Code/SaWebApi/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore files to be uploaded to the image -.env -.env.dev -.env.prod -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/SaWebApi/.env.local b/Deprecated-Code/SaWebApi/.env.local deleted file mode 100644 index fb69d8efa..000000000 --- a/Deprecated-Code/SaWebApi/.env.local +++ /dev/null @@ -1,21 +0,0 @@ -NODE_ENV=production -PORT=4004 - -# LOG_LEVEL=info - -MONGO_URL=mongodb://mongo/saweb - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -PRESHARED_GATEWAY_KEY=saweb_key - -# The NODE_ENDPOINT is used at team creation and is where other components will search for the team -NODE_ENDPOINT=http://docker.for.win.localhost:4100/ - -# Storage Configuration -STORAGE_PROVIDER=Minio -# Minio -MINIO_END_POINT=minio -MINIO_PORT=9000 -MINIO_USE_SSL=false -MINIO_ACCESS_KEY=minio -MINIO_SECRET_KEY=minio123 diff --git a/Deprecated-Code/SaWebApi/.gitignore b/Deprecated-Code/SaWebApi/.gitignore deleted file mode 100644 index d67bde39e..000000000 --- a/Deprecated-Code/SaWebApi/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -/node_modules - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store diff --git a/Deprecated-Code/SaWebApi/CODE_OF_CONDUCT.md b/Deprecated-Code/SaWebApi/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/SaWebApi/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/SaWebApi/CONTRIBUTING.md b/Deprecated-Code/SaWebApi/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/SaWebApi/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/SaWebApi/Dockerfile b/Deprecated-Code/SaWebApi/Dockerfile deleted file mode 100644 index f034cb7a6..000000000 --- a/Deprecated-Code/SaWebApi/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/saweb-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/SaWebApi/Dockerfile.prod b/Deprecated-Code/SaWebApi/Dockerfile.prod deleted file mode 100644 index 1b6cc3770..000000000 --- a/Deprecated-Code/SaWebApi/Dockerfile.prod +++ /dev/null @@ -1,21 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4004 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/SaWebApi/LICENSE b/Deprecated-Code/SaWebApi/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/SaWebApi/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/SaWebApi/README.md b/Deprecated-Code/SaWebApi/README.md deleted file mode 100644 index 92be9c77b..000000000 --- a/Deprecated-Code/SaWebApi/README.md +++ /dev/null @@ -1 +0,0 @@ -# saweb-api \ No newline at end of file diff --git a/Deprecated-Code/SaWebApi/docker-compose.prod.yml b/Deprecated-Code/SaWebApi/docker-compose.prod.yml deleted file mode 100644 index 7ec7ba765..000000000 --- a/Deprecated-Code/SaWebApi/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: saweb-api:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: saweb-api - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: node . - expose: - - 4004 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/SaWebApi/package-lock.json b/Deprecated-Code/SaWebApi/package-lock.json deleted file mode 100644 index 689905ac4..000000000 --- a/Deprecated-Code/SaWebApi/package-lock.json +++ /dev/null @@ -1,3295 +0,0 @@ -{ - "name": "saweb-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.7.tgz", - "integrity": "sha512-+ertvzAwzkYmuUtT8zH3Zi6jPdyxZwOgnYaZHY7iLnMVJDhQKWlkyjLMF8wyzlPiEdDImVUMm5lOIBZo7LkGlg==", - "requires": { - "apollo-env": "0.5.1" - } - }, - "@apollographql/apollo-upload-server": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-upload-server/-/apollo-upload-server-5.0.3.tgz", - "integrity": "sha512-tGAp3ULNyoA8b5o9LsU2Lq6SwgVPUOKAqKywu2liEtTvrFSGPrObwanhYwArq3GPeOqp2bi+JknSJCIU3oQN1Q==", - "requires": { - "@babel/runtime-corejs2": "^7.0.0-rc.1", - "busboy": "^0.2.14", - "object-path": "^0.11.4" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.18.tgz", - "integrity": "sha512-7HGC1hQ0Aj93z2kv8h4RBtYClkiccj+F2Juh1m74Pky7D9tJDsQ4eBlaNNn0jMxGAL6EuaGwBN46EA9JtBMRog==" - }, - "@azure/ms-rest-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.3.tgz", - "integrity": "sha512-eROQ034b+9v0Hd3wETKi/EwF5pqS3VRAk1Lm8iKVPOP8v30f6Zfzsi420MRfBMsbNCx/mE2N0L65Px7tvcGfVg==", - "requires": { - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - }, - "dependencies": { - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - } - } - }, - "@azure/storage-blob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-10.3.0.tgz", - "integrity": "sha512-KZbJ3q8RpAdeIB5Em1lgXkiq7Mll9bSHHbHavOFMepkkF7HQa3Sez9FdkAVIkVVWK5YoBlshBGZ+mtiSQiS9Fw==", - "requires": { - "@azure/ms-rest-js": "1.2.3", - "events": "3.0.0", - "tslib": "^1.9.3" - } - }, - "@babel/runtime-corejs2": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz", - "integrity": "sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.5.tgz", - "integrity": "sha512-T8oej2B9TVALoCK4epWXRNWaFaqDyOaEQ3ntph+tSw5QoKnZfxgCXefIm3+nGp2XCRrkX4X7U5CSTMnwKJcOjQ==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/node": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "apollo-cache-control": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.6.0.tgz", - "integrity": "sha512-66aCF6MHe0/FdD3knphwTv6CCIdb1ZxrMsiRpxP474qqyYVe2jAwBu6aJBn4emffZHZ7i6gp9dY6cPHThjnbKA==", - "requires": { - "apollo-server-env": "2.3.0", - "graphql-extensions": "0.6.0" - } - }, - "apollo-datasource": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.4.0.tgz", - "integrity": "sha512-6QkgnLYwQrW0qv+yXIf617DojJbGmza2XJXUlgnzrGGhxzfAynzEjaLyYkc8rYS1m82vjrl9EOmLHTcnVkvZAQ==", - "requires": { - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.3.0" - } - }, - "apollo-engine-reporting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.1.0.tgz", - "integrity": "sha512-Dj0BwgcluHL0QVUaquhAoYoLX9Z4DRP/n2REcIwO8d2iy52r+1wN5QqZLx97dEFh7CjhNjTWeysJzc8XMWKa1Q==", - "requires": { - "apollo-engine-reporting-protobuf": "0.3.0", - "apollo-graphql": "^0.2.1-alpha.1", - "apollo-server-core": "2.5.0", - "apollo-server-env": "2.3.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.6.0" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.0.tgz", - "integrity": "sha512-PYowpx/E+TJT/8nKpp3JmJuKh3x1SZcxDF6Cquj0soV205TUpFFCZQMi91i5ACiEp2AkYvM/GDBIrw+rfIwzTg==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-env": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.1.tgz", - "integrity": "sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw==", - "requires": { - "core-js": "^3.0.1", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - }, - "dependencies": { - "core-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.2.tgz", - "integrity": "sha512-3poRGjbu56leCtZCZCzCgQ7GcKOflDFnjWIepaPFUsM0IXUBrne10sl3aa2Bkcz3+FjRdIxBe9dAMhIJmEnQNA==" - } - } - }, - "apollo-graphql": { - "version": "0.2.1-register.1", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.2.1-register.1.tgz", - "integrity": "sha512-Z2LOuvYomC9CN9K+mpFVcVQu6Ml5PIJlV+YOkGzFq73xeqWg1InxHqI3eEdCEhxTJq6H8rlWT8ATrMS+4sIhqw==", - "requires": { - "apollo-env": "0.4.1-register.1", - "lodash.sortby": "^4.7.0" - }, - "dependencies": { - "apollo-env": { - "version": "0.4.1-register.1", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.4.1-register.1.tgz", - "integrity": "sha512-fg1US7YZ6yW1N0tFq8g4HpCR3eJZmI+rIiHDiknYN9D1MTjvwYdmXYhi7VaPvQ21hV5nMRvfBUMqYXjP+6FsGQ==", - "requires": { - "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - } - }, - "core-js": { - "version": "3.0.0-beta.13", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", - "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" - } - } - }, - "apollo-link": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", - "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", - "requires": { - "apollo-utilities": "^1.2.1", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.18" - } - }, - "apollo-server-caching": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz", - "integrity": "sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==", - "requires": { - "lru-cache": "^5.0.0" - } - }, - "apollo-server-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.5.0.tgz", - "integrity": "sha512-7hyQ/Rt0hC38bUfxMQmLNHDBIGEBykFWo9EO0W+3o/cno/SqBKd1KKichrABVv+v+SCvZAUutX6gYS5l3G+ULQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6-alpha.1", - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.6.0", - "apollo-datasource": "0.4.0", - "apollo-engine-reporting": "1.1.0", - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.3.0", - "apollo-server-errors": "2.3.0", - "apollo-server-plugin-base": "0.4.0", - "apollo-tracing": "0.6.0", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "0.6.0", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - }, - "dependencies": { - "graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tools": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", - "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - } - } - }, - "apollo-server-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.3.0.tgz", - "integrity": "sha512-WIwlkCM/gir0CkoYWPMTCH8uGCCKB/aM074U1bKayvkFOBVO2VgG5x2kgsfkyF05IMQq2/GOTsKhNY7RnUEhTA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz", - "integrity": "sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw==" - }, - "apollo-server-express": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.1.0.tgz", - "integrity": "sha512-jLFIz1VLduMA/rme4OAy3IPeoaMEZOPoQXpio8AhfjIqCijRPPfoWJ2QMqz56C/g3vas7rZtgcVOrHpjBKudjw==", - "requires": { - "@apollographql/apollo-upload-server": "^5.0.3", - "@apollographql/graphql-playground-html": "^1.6.0", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.16.0", - "accepts": "^1.3.5", - "apollo-server-core": "^2.1.0", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^0.5.8", - "graphql-tools": "^3.0.4", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.4.0.tgz", - "integrity": "sha512-iD7ARNtwnvHGd1EMPK0CuodM8d8hgDvFwTfIDzJY04QIQ6/KrBFaWhnCXJsy+HMb47GovwBbq67IK6eb2WJgBg==" - }, - "apollo-tracing": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.6.0.tgz", - "integrity": "sha512-OpYPHVBgcQ/HT2WLXJQWwhilzR1rrl01tZeMU2N7yinsp/oyKngF5aUSMtuvX1k/T3abilQo+w10oAQlBCGdPA==", - "requires": { - "apollo-server-env": "2.3.0", - "graphql-extensions": "0.6.0" - } - }, - "apollo-utilities": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.0.tgz", - "integrity": "sha512-wQjV+FdWcTWmWUFlChG5rS0vHKy5OsXC6XlV9STRstQq6VbXANwHy6DHnTEQAfLXWAbNcPgBu+nBUpR3dFhwrA==", - "requires": { - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.4.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "ts-invariant": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.2.tgz", - "integrity": "sha512-PTAAn8lJPEdRBJJEs4ig6MVZWfO12yrFzV7YaPslmyhG7+4MA279y4BXT3f72gXeVl0mC1aAWq2rMX4eKTWU/Q==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", - "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "azure-storage": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.3.tgz", - "integrity": "sha512-IGLs5Xj6kO8Ii90KerQrrwuJKexLgSwYC4oLWmc11mzKe7Jt2E5IVg+ZQ8K53YWZACtVTMBNO3iGuA+4ipjJxQ==", - "requires": { - "browserify-mime": "~1.2.9", - "extend": "^3.0.2", - "json-edm-parser": "0.1.2", - "md5.js": "1.3.4", - "readable-stream": "~2.0.0", - "request": "^2.86.0", - "underscore": "~1.8.3", - "uuid": "^3.0.0", - "validator": "~9.4.1", - "xml2js": "0.2.8", - "xmlbuilder": "^9.0.7" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" - }, - "xml2js": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", - "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", - "requires": { - "sax": "0.5.x" - } - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream2": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-1.1.0.tgz", - "integrity": "sha1-xzjjqRupd+u14f70MeE8oR2GOeI=", - "requires": { - "defined": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-mime": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz", - "integrity": "sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=" - }, - "bson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", - "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-js": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", - "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-2.1.1.tgz", - "integrity": "sha1-kThDAexe0cmnJH0RKCRyFvA1R80=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - } - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-capacitor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", - "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-extensions": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.6.0.tgz", - "integrity": "sha512-SshzmbD68fHXRv2q3St29olMOxHDLQ5e9TOh+Tz2BYxinrfhjFaPNcEefiK/vF295wW827Y58bdO11Xmhf8J+Q==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6-alpha.1" - } - }, - "graphql-subscriptions": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-0.5.8.tgz", - "integrity": "sha512-0CaZnXKBw2pwnIbvmVckby5Ge5e2ecmjofhYCdyeACbCly2j3WXDP/pl+s+Dqd2GQFC7y99NB+53jrt55CKxYQ==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "graphql-tools": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.1.1.tgz", - "integrity": "sha512-yHvPkweUB0+Q/GWH5wIG60bpt8CTwBklCSzQdEHmRUgAdEQKxw+9B7zB3dG7wB3Ym7M7lfrS4Ej+jtDZfA2UXg==", - "requires": { - "apollo-link": "^1.2.2", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - }, - "graphql-upload": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.6.tgz", - "integrity": "sha512-cBRALMOvGBm2AD6M61b1QbSmKfCLXvgV+Z3wXT2JS1EQwGWQ1g5/sby4J/cpwAaGnq5P2eGp+N3HQI9cSn9Jfg==", - "requires": { - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.1", - "http-errors": "^1.7.2", - "object-path": "^0.11.4" - }, - "dependencies": { - "busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "requires": { - "dicer": "0.3.0" - } - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "requires": { - "streamsearch": "0.1.2" - } - } - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-beautify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.0.tgz", - "integrity": "sha512-Y8lEcqhyJKRq2IhYBGtRIQO7EgOlyeSCYXnQCzAnGO5DhCBzMBEZ90PTw620NwpfQccJ/sj4+bU+r4GBI0b2Lw==" - }, - "json-edm-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz", - "integrity": "sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=", - "requires": { - "jsonparse": "~1.2.0" - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonparse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz", - "integrity": "sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minio": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.8.tgz", - "integrity": "sha512-nPVmtms5cARaaqCCH3n0n0jIMaaG+y8Ka5s0/YA8X5/fvZoHmDmaIoJtvSwZc72L/gQgqEJqcIvBMrbjW7NkHQ==", - "requires": { - "async": "^1.5.2", - "block-stream2": "^1.0.0", - "concat-stream": "^1.4.8", - "es6-error": "^2.0.2", - "json-stream": "^1.0.0", - "lodash": "^4.14.2", - "mime-types": "^2.1.14", - "mkdirp": "^0.5.1", - "querystring": "0.2.0", - "through2": "^0.6.5", - "uuid": "^3.1.0", - "xml": "^1.0.0", - "xml2js": "^0.4.15" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "mongodb": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.6.tgz", - "integrity": "sha512-E5QJuXQoMlT7KyCYqNNMfAkhfQD79AT4F8Xd+6x37OX+8BL17GyXyWvfm6wuyx4wnzCCPoCSLeMeUN2S7dU9yw==", - "requires": { - "mongodb-core": "3.1.5", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.5.tgz", - "integrity": "sha512-emT/tM4ZBinqd6RZok+EzDdtN4LjYJIckv71qQVOEFmvXgT5cperZegVmTgox/1cx4XQu6LJ5ZuIwipP/eKdQg==", - "requires": { - "bson": "^1.1.0", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - }, - "dependencies": { - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - } - } - }, - "mongoose": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.3.4.tgz", - "integrity": "sha512-DIUWOyYgZv2zGi/BoFEaFiaCVuDonnzGhW3cnc3JFjBScYn6z24tS2j3VB0dtMoX8FFjxmmMVnlmHPEIbV4PKA==", - "requires": { - "async": "2.6.1", - "bson": "~1.0.5", - "kareem": "2.3.0", - "lodash.get": "4.4.2", - "mongodb": "3.1.6", - "mongodb-core": "3.1.5", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.1", - "mquery": "3.2.0", - "ms": "2.0.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz", - "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.7.tgz", - "integrity": "sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A==" - } - } - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", - "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" - } - }, - "redis-commands": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz", - "integrity": "sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==" - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", - "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "ts-invariant": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", - "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "validator": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", - "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.11", - "yargs": "^12.0.5" - }, - "dependencies": { - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "zen-observable": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", - "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" - }, - "zen-observable-ts": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz", - "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/SaWebApi/package.json b/Deprecated-Code/SaWebApi/package.json deleted file mode 100644 index 3e4f6357e..000000000 --- a/Deprecated-Code/SaWebApi/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "saweb-api", - "version": "0.1.0", - "description": "Superalgos Web backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/SAWebServer.git" - }, - "main": "src/index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "devDependencies": { - "express": "^4.16.4", - "chai": "^4.2.0", - "mocha": "^6.1.4" - }, - "dependencies": { - "@azure/storage-blob": "^10.3.0", - "apollo-server-express": "2.1.0", - "axios": "0.19.0", - "azure-storage": "^2.10.3", - "dotenv": "8.0.0", - "esm": "^3.2.22", - "express": "4.16.3", - "graphql": "0.13.2", - "json-beautify": "^1.1.0", - "minio": "^7.0.8", - "mongoose": "5.3.4", - "redis": "^2.8.0", - "winston": "3.2.1" - } -} diff --git a/Deprecated-Code/SaWebApi/src/app.js b/Deprecated-Code/SaWebApi/src/app.js deleted file mode 100644 index 74855f021..000000000 --- a/Deprecated-Code/SaWebApi/src/app.js +++ /dev/null @@ -1,58 +0,0 @@ -import 'dotenv/config'; -import express from 'express'; -import { ApolloServer } from 'apollo-server-express'; -import schema from './schema'; -import wrongPreshared from './errors/notAllowed.json'; -import db from './db'; -import logger from './utils/logger' -import bodyParser from 'body-parser' - -const app = express(); - -app.use(bodyParser.json({limit: '50mb'})); -app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); - -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - -// Starting the graphql server -const server = new ApolloServer({ - schema, - playground: { - settings: { - 'editor.theme': 'dark', - 'editor.cursorShape': 'line', - }, - }, - context: ({ req }) => ({ - userId: req.headers.userid, - authorization: req.headers.authorization, - }), - formatError: error => ({ - code: error.extensions.exception.code, - message: error.message, - path: error.path, - }), - introspection: true, -}); - -server.applyMiddleware({ - app, - cors: true, -}); - -db.on('error', (err) => { - logger.error(err); -}); -db.once('open', () => { - logger.info('Connected to the DB.'); -}); - -app.listen(process.env.PORT, () => { - logger.info(`Listening on port ${process.env.PORT}`); -}); diff --git a/Deprecated-Code/SaWebApi/src/config/ecosystem.json b/Deprecated-Code/SaWebApi/src/config/ecosystem.json deleted file mode 100644 index dfde878c0..000000000 --- a/Deprecated-Code/SaWebApi/src/config/ecosystem.json +++ /dev/null @@ -1,892 +0,0 @@ -{ - "authId": "", - "devTeams": [ - { - "codeName": "AAMasters", - "displayName": "Masters", - "host": { - "url": "https://demo-api-dev.superalgos.org/", - "storage": "localStorage", - "container": "aamasters", - "accessKey": "09e890b76767ede3e10f0526b5036600a6b8d3faac540336e12b493fdb2aa9ed46f86094c34652f99fb6322e5f09806412f17725807f85e4dc4169bd22dd59f0b23aba5251f5544478a1aabf5a2dea5260e6eb0c29af3a788208af85025a02f94950437d501b91fd55b9d97b3d6ac3af4e1161321f78b73ca0fda524dc3a5d03" - }, - "bots": [ - { - "codeName": "AAOlivia", - "displayName": "Olivia", - "type": "Indicator", - "profilePicture": "Olivia.png", - "repo": "AAOlivia-Indicator-Bot", - "configFile": "this.bot.config.json", - "products": [ - { - "codeName": "Candles", - "displayName": "Candles", - "description": "Two sets of files per period that contains candles.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candles/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Candles" - } - }, - { - "codeName": "Volumes", - "displayName": "Buy and Sell Volumes", - "description": "Two sets of files per period that contains buy and sell volumes.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAOlivia.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volumes/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersCandlesVolumes", - "moduleName": "Volumes" - } - } - ] - }, - { - "codeName": "AATom", - "displayName": "Tom", - "type": "Indicator", - "profilePicture": "Tom.png", - "repo": "AATom-Indicator-Bot", - "configFile": "this.bot.config.json", - "products": [ - { - "codeName": "Candle-Stairs", - "displayName": "Candle-Stairs Patters", - "description": "Two sets of files per period that contains candle-stairs patterns.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersStairsPatterns", - "moduleName": "CandleStairs" - } - }, - { - "codeName": "Volume-Stairs", - "displayName": "Volume-Stairs Patters", - "description": "Two sets of files per period that contains volume-stairs patterns.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AATom.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersStairsPatterns", - "moduleName": "VolumeStairs" - } - } - ] - }, - { - "codeName": "AAChris", - "displayName": "Chris", - "type": "Indicator", - "profilePicture": "Chris.png", - "repo": "AAChris-Indicator-Bot", - "configFile": "this.bot.config.json", - "products": [ - { - "codeName": "Bollinger-Bands", - "displayName": "Bollinger Bands", - "description": "Bollinger Bands", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Bands/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersBollingerBands", - "moduleName": "BollingerBands" - } - }, - { - "codeName": "Percentage-Bandwidth", - "displayName": "Percentage Bandwidth", - "description": "Percentage Bandwidth", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAChris.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Percentage-Bandwidth/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersBollingerBands", - "moduleName": "PercentageBandwidth" - } - } - ] - }, - { - "codeName": "AAPaula", - "displayName": "Paula", - "type": "Indicator", - "profilePicture": "Paula.png", - "repo": "AAPaula-Indicator-Bot", - "configFile": "this.bot.config.json", - "products": [ - { - "codeName": "Bollinger-Channels", - "displayName": "Bollinger-Channels", - "description": "Two sets of files per period that contains band-channel patterns.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Channels/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Channels/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Channels/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersBollingerChannels", - "moduleName": "BollingerChannels" - } - }, - { - "codeName": "Bollinger-Sub-Channels", - "displayName": "Bollinger-Sub-Channels", - "description": "Bollinger Sub Channels with slope.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Sub-Channels/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Sub-Channels/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Sub-Channels/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersBollingerChannels", - "moduleName": "BollingerSubChannels" - } - } - ] - } - ], - "plotters": [ - { - "displayName": "Plotters Candles & Volumes", - "codeName": "PlottersCandlesVolumes", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "Candles", - "moduleName": "Candles", - "description": "Plots traditional red and green candles.", - "profilePicture": "Candles.png", - "panels": [ - { - "codeName": "CandlePanel", - "moduleName": "CandlePanel", - "event": "Current Candle Changed" - } - ] - }, - { - "codeName": "Volumes", - "description": "Plots volumes separated in buy and sell.", - "moduleName": "Volumes", - "profilePicture": "Volumes.png", - "panels": [ - { - "codeName": "VolumePanel", - "moduleName": "VolumePanel", - "event": "Current Volume Changed" - } - ] - } - ], - "repo": "Plotters-Candles-Volumes", - "configFile": "this.plotter.config.json" - }, - { - "displayName": "Plotters Stairs Patterns", - "codeName": "PlottersStairsPatterns", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "CandleStairs", - "moduleName": "CandleStairs", - "description": "Plots Candle Stairs patterns.", - "profilePicture": "CandleStairs.png", - "panels": [] - }, - { - "codeName": "VolumeStairs", - "description": "Plots Volume Stairs patterns.", - "moduleName": "VolumeStairs", - "profilePicture": "VolumeStairs.png", - "panels": [] - } - ], - "repo": "Plotters-Stairs-Patterns", - "configFile": "this.plotter.config.json" - }, - { - "displayName": "Plotters Trading", - "codeName": "PlottersTrading", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "Details", - "moduleName": "Details", - "description": "Plots trading decitions in an easy to understand way.", - "panels": [] - }, - { - "codeName": "History", - "moduleName": "History", - "description": "Plots trading history.", - "profilePicture": "History.png", - "panels": [] - } - ], - "repo": "Plotters-Trading", - "configFile": "this.plotter.config.json" - }, - { - "displayName": "Plotters Bollinger Bands", - "codeName": "PlottersBollingerBands", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "BollingerBands", - "moduleName": "BollingerBands", - "description": "Plots Bollinger Bands.", - "profilePicture": "BollingerBands.png", - "panels": [ - { - "codeName": "BollingerBandsPanel", - "moduleName": "BollingerBandsPanel", - "event": "Current Band Changed" - } - ] - }, - { - "codeName": "PercentageBandwidth", - "moduleName": "PercentageBandwidth", - "description": "Plots Bollinger Bands.", - "profilePicture": "PercentageBandwidth.png", - "panels": [] - } - ], - "repo": "Plotters-Bollinger-Bands", - "configFile": "this.plotter.config.json" - }, - { - "displayName": "Plotters Trading Simulation", - "codeName": "PlottersTradingSimulation", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "TradingSimulation", - "moduleName": "TradingSimulation", - "description": "Plots Bollinger Records.", - "profilePicture": "TradingSimulation.png", - "panels": [ - { - "codeName": "TradingSimulationPanel", - "moduleName": "TradingSimulationPanel", - "event": "Current Record Changed" - } - ] - }, - { - "codeName": "Conditions", - "moduleName": "Conditions", - "description": "Plots Simulation Conditions.", - "profilePicture": "Conditions.png", - "panels": [] - }, - { - "codeName": "Strategies", - "moduleName": "Strategies", - "description": "Plots Strategies.", - "profilePicture": "Strategies.png", - "panels": [] - }, - { - "codeName": "Trades", - "moduleName": "Trades", - "description": "Plots Trades.", - "profilePicture": "Trades.png", - "panels": [] - }, - { - "codeName": "SimulationExecution", - "moduleName": "SimulationExecution", - "description": "Plots Simulation Execution.", - "profilePicture": "SimulationExecution.png", - "panels": [ - { - "codeName": "SimulationExecutionPanel", - "moduleName": "SimulationExecutionPanel", - "event": "Current Record Changed" - } - ] - } - ], - "repo": "Plotters-Trading-Simulation", - "configFile": "this.plotter.config.json" - }, - { - "displayName": "Plotters Bollinger Channels", - "codeName": "PlottersBollingerChannels", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "BollingerChannels", - "moduleName": "BollingerChannels", - "description": "Plots Bollinger Channels.", - "profilePicture": "BollingerChannels.png", - "panels": [ - { - "codeName": "ChannelPanel", - "moduleName": "ChannelPanel", - "event": "Current Channel Changed" - } - ] - }, - { - "codeName": "BollingerSubChannels", - "moduleName": "BollingerSubChannels", - "description": "Plots Bollinger Sub-Channels.", - "profilePicture": "BollingerSubChannels.png", - "panels": [ - { - "codeName": "SubChannelPanel", - "moduleName": "SubChannelPanel", - "event": "Current Sub-Channel Changed" - } - ] - } - ], - "repo": "Plotters-Bollinger-Channels", - "configFile": "this.plotter.config.json" - } - ] - }, - { - "codeName": "AAVikings", - "displayName": "Vikings", - "host": { - "url": "https://demo-api-dev.superalgos.org/", - "container": "aavikings", - "storage": "localStorage", - "accessKey": "0f38fea438be5adfc5873228f503c55353fb334406128b16a958851b8e47c118a08f0105dd8985d5479758fc4cc3f56c2e2364c2d7c3d0fdffba8d7e9356056a34629e3b926b1ebb940122d973db30b04fc18fab542cbc1afdc032dccf64b0fe308ee6bbc74f82bd350aaebf723428a50d8a699fa2b4b96d58716986ed24069f" - }, - "bots": [ - { - "codeName": "AAGauss", - "displayName": "Gauss", - "type": "Indicator", - "profilePicture": "Gauss.png", - "repo": "AAGauss-Indicator-Bot", - "configFile": "this.bot.config.json", - "products": [ - { - "codeName": "LRCPoints", - "displayName": "LRCPoints", - "description": "Two sets of files per period that contains LRC points.", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ - "24-hs", - "12-hs", - "08-hs", - "06-hs", - "04-hs", - "03-hs", - "02-hs", - "01-hs" - ], - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ - "45-min", - "40-min", - "30-min", - "20-min", - "15-min", - "10-min", - "05-min", - "04-min", - "03-min", - "02-min", - "01-min" - ], - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAVikings/AAGauss.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/LRC-Points/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAVikings", - "codeName": "PlotterLinearRegressionCurve", - "moduleName": "LRC" - } - } - ] - } - ], - "plotters": [ - { - "displayName": "Plotter LRC", - "codeName": "PlotterLinearRegressionCurve", - "devTeam": "AAVikings", - "modules": [ - { - "codeName": "LRC", - "moduleName": "LRC", - "description": "Plots the linear regression curve.", - "profilePicture": "LRC.png", - "panels": [ - { - "codeName": "ChannelPanel", - "moduleName": "ChannelPanel", - "event": "Current LRC Changed" - } - ] - } - ], - "repo": "Plotters-Linear-Regression-Curve", - "configFile": "this.plotter.config.json" - } - ] - } - ], - "hosts": [ - { - "codeName": "AAMasters", - "displayName": "AA Arena", - "host": { - "url": "https://demo-api-dev.superalgos.org/", - "storage": "localStorage", - "container": "aamasters", - "accessKey": "09e890b76767ede3e10f0526b5036600a6b8d3faac540336e12b493fdb2aa9ed46f86094c34652f99fb6322e5f09806412f17725807f85e4dc4169bd22dd59f0b23aba5251f5544478a1aabf5a2dea5260e6eb0c29af3a788208af85025a02f94950437d501b91fd55b9d97b3d6ac3af4e1161321f78b73ca0fda524dc3a5d03" - }, - "competitions": [ - { - "codeName": "Weekend-Deathmatch", - "description": "First AA Internal Competition. Bots will be trading during 3 days at the USDT/BTC market of Poloniex to see who can make the gratest return over investment (ROI).", - "displayName": "AA Internal Challenge", - "startDatetime": "2018-01-01T16:00:00.000Z", - "finishDatetime": "2018-01-02T16:00:00.000Z", - "formula": "ROI", - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersROI", - "host": { - "url": "https://demo-api-dev.superalgos.org/", - "storage": "localStorage", - "container": "aamasters", - "accessKey": "" - }, - "moduleName": "CombinedProfits", - "repo": "Plotters-ROI" - }, - "rules": [], - "prizes": [], - "participants": [], - "repo": "Weekend-Deathmatch", - "configFile": "this.competition.config.json" - } - ], - "plotters": [ - { - "displayName": "Plotters ROI", - "codeName": "PlottersROI", - "devTeam": "AAMasters", - "modules": [ - { - "codeName": "CombinedProfits", - "moduleName": "CombinedProfits", - "description": "Plots participants of a competition by the ROI each one had over time.", - "panels": [] - } - ], - "repo": "Plotters-ROI", - "configFile": "this.plotter.config.json" - } - ] - } - ] -} diff --git a/Deprecated-Code/SaWebApi/src/db.js b/Deprecated-Code/SaWebApi/src/db.js deleted file mode 100644 index 8bbcd0c63..000000000 --- a/Deprecated-Code/SaWebApi/src/db.js +++ /dev/null @@ -1,10 +0,0 @@ -import mongoose from 'mongoose'; - -mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }) -mongoose.set('useCreateIndex', true); -mongoose.set('useFindAndModify', false); -mongoose.Promise = global.Promise; - -const db = mongoose.connection; - -export default db; diff --git a/Deprecated-Code/SaWebApi/src/errors/index.js b/Deprecated-Code/SaWebApi/src/errors/index.js deleted file mode 100644 index 4680e2202..000000000 --- a/Deprecated-Code/SaWebApi/src/errors/index.js +++ /dev/null @@ -1,23 +0,0 @@ -export class AuthenticationError extends Error { - constructor(message) { - super(message) - this.code = 401 - this.message = 'Authentication not found, you have to be authenticated to perform this action.' - } -} - -export class WrongArgumentsError extends Error { - constructor(message) { - super(message) - this.code = 400 - this.message = `Wrong arguments : ${this.message}` - } -} - -export class ServiceUnavailableError extends Error { - constructor(message) { - super(message) - this.code = 503 - this.message = `At least one service is unresponding ${this.message}` - } -} diff --git a/Deprecated-Code/SaWebApi/src/errors/notAllowed.json b/Deprecated-Code/SaWebApi/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/SaWebApi/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/SaWebApi/src/index.js b/Deprecated-Code/SaWebApi/src/index.js deleted file mode 100644 index 59744b324..000000000 --- a/Deprecated-Code/SaWebApi/src/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require = require('esm')(module) -module.exports = require('./app.js') diff --git a/Deprecated-Code/SaWebApi/src/models/ecosystem.js b/Deprecated-Code/SaWebApi/src/models/ecosystem.js deleted file mode 100644 index e50759767..000000000 --- a/Deprecated-Code/SaWebApi/src/models/ecosystem.js +++ /dev/null @@ -1,343 +0,0 @@ -const mongoose = require('mongoose') -const { Schema } = require('mongoose') - -const ecosystemSchema = new Schema({ - authId: { - type: String, - required: true - }, - devTeams: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - host: { - url: { - type: String, - required: true - }, - storage: { - type: String, - required: true - }, - container: { - type: String, - required: true - }, - accessKey: { - type: String, - required: false - }, - ownerKey: { - type: String, - required: false - } - }, - bots: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - type: { - type: String, - required: true - }, - profilePicture: { - type: String, - required: true - }, - repo: { - type: String, - required: false - }, - configFile: { - type: String, - required: false - }, - cloneId: { - type: String, - required: false - }, - products: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - description: { - type: String, - required: true - }, - dataSets: [{ - codeName: { - type: String, - required: true - }, - type: { - type: String, - required: true - }, - validPeriods: [{ - type: String, - required: true - }], - filePath: { - type: String, - required: true - }, - fileName: { - type: String, - required: true - }, - dataRange: { - filePath: { - type: String, - required: false - }, - fileName: { - type: String, - required: false - }, - }, - }], - exchangeList: [{ - name: { - type: String, - required: true - } - }], - plotter: { - codeName: { - type: String, - required: false - }, - devTeam: { - type: String, - required: false - }, - moduleName: { - type: String, - required: true - }, - } - }] - }], - plotters: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - modules: [{ - codeName: { - type: String, - required: true - }, - moduleName: { - type: String, - required: true - }, - description: { - type: String, - required: false - }, - profilePicture: { - type: String, - required: false - }, - panels: [{ - codeName: { - type: String, - required: true - }, - moduleName: { - type: String, - required: true - }, - event: { - type: String, - required: true - } - }], - }], - repo: { - type: String, - required: true - }, - configFile: { - type: String, - required: true - } - }] - }], - hosts: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - host: { - url: { - type: String, - required: true - }, - storage: { - type: String, - required: true - }, - container: { - type: String, - required: true - }, - accessKey: { - type: String, - required: false - } - }, - competitions: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - description: { - type: String, - required: false - }, - startDatetime: { - type: String, - required: false - }, - finishDatetime: { - type: String, - required: false - }, - formula: { - type: String, - required: false - }, - plotter: { - devTeam: { - type: String, - required: true - }, - codeName: { - type: String, - required: true - }, - host: { - url: { - type: String, - required: true - }, - storage: { - type: String, - required: true - }, - container: { - type: String, - required: true - }, - accessKey: { - type: String, - required: false - } - }, - repo: { - type: String, - required: true - }, - moduleName: { - type: String, - required: true - }, - }, - participants: [{ - type: String, - required: false - }], - repo: { - type: String, - required: true - }, - configFile: { - type: String, - required: true - } - }], - plotters: [{ - codeName: { - type: String, - required: true - }, - displayName: { - type: String, - required: true - }, - modules: [{ - codeName: { - type: String, - required: true - }, - moduleName: { - type: String, - required: true - }, - description: { - type: String, - required: false - }, - profilePicture: { - type: String, - required: false - }, - panels: [{ - codeName: { - type: String, - required: true - }, - moduleName: { - type: String, - required: true - }, - event: { - type: String, - required: true - } - }], - }], - repo: { - type: String, - required: true - }, - configFile: { - type: String, - required: true - } - }] - }] -}) - -const Ecosystem = mongoose.model('Ecosystem', ecosystemSchema); - -export default Ecosystem; diff --git a/Deprecated-Code/SaWebApi/src/models/index.js b/Deprecated-Code/SaWebApi/src/models/index.js deleted file mode 100644 index 7f988ec48..000000000 --- a/Deprecated-Code/SaWebApi/src/models/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ecosystem from './ecosystem'; - -export { - Ecosystem -}; diff --git a/Deprecated-Code/SaWebApi/src/schema/index.js b/Deprecated-Code/SaWebApi/src/schema/index.js deleted file mode 100644 index 59088712f..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import { - GraphQLSchema, -} from 'graphql'; -import RootQuery from './queries'; -import Mutation from './mutations'; - -const Schema = new GraphQLSchema({ - query: RootQuery, - mutation: Mutation, -}); - -export default Schema; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/AddBot.js b/Deprecated-Code/SaWebApi/src/schema/mutations/AddBot.js deleted file mode 100644 index 86d972b68..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/AddBot.js +++ /dev/null @@ -1,71 +0,0 @@ -import logger from '../../utils/logger' -import { BotInputType, } from '../types/input' -import { BotType, } from '../types' -import { Ecosystem } from '../../models' - -export const args = { bot: { type: BotInputType } } - -const resolve = async (parent, { bot }, context) => { - logger.debug('addBot -> Dev team: %s. Bot: %s', bot.devTeam, bot.codeName) - try { - - let userEcosystem = await Ecosystem.findOne({ - authId: context.userId - }) - - if (!userEcosystem) { - throw 'Ecosystem not found for the user.' - } - - let newBotClone - for (let i = 0; i < userEcosystem.devTeams.length; i++) { - const auxTeam = userEcosystem.devTeams[i] - if (auxTeam.codeName === bot.devTeam) { - for (let j = 0; j < auxTeam.bots.length; j++) { - const auxBot = auxTeam.bots[j] - if (auxBot.codeName === bot.codeName) { - for (let k = 0; k < auxBot.products.length; k++) { - const auxProduct = auxBot.products[k] - if (auxProduct.codeName === bot.productCodeName) { - newBotClone = { - displayName: auxBot.displayName, - codeName: auxBot.codeName, - type: auxBot.type, - profilePicture: auxBot.profilePicture, - cloneId: bot.cloneId, - products: [auxProduct] - } - auxTeam.bots.push(newBotClone) - userEcosystem.markModified("devTeams") - break - } - } - break - } - } - break - } - } - - if (newBotClone) { - await userEcosystem.save() - return newBotClone - } else { - throw 'Algobot not found.' - } - - } catch (err) { - logger.error('addBot -> Error: %s', err.message) - throw err - } -} - -const mutation = { - addBot: { - type: BotType, - args, - resolve, - } -} - -export default mutation; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/AddTeam.js b/Deprecated-Code/SaWebApi/src/schema/mutations/AddTeam.js deleted file mode 100644 index 73c7c6918..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/AddTeam.js +++ /dev/null @@ -1,89 +0,0 @@ -import logger from '../../utils/logger' -import { AuthenticationError, WrongArgumentsError } from '../../errors' -import { TeamType } from '../types' -import { Ecosystem } from '../../models' -import { TeamInputType } from '../types/input' -import { copyBot } from '../../storage/CopyBot' -import { copySimulator } from '../../storage/CopySimulator' -import { createContainer, writeFileContent } from '../../storage/providers/MinioStorage' -import crypto from 'crypto' - -export const args = { team: { type: TeamInputType } } - -const resolve = async (parent, { team }, context) => { - logger.debug('addTeam -> Entering Function.') - - if (!context.userId) { - throw new AuthenticationError() - } - - try { - let userEcosystem = await Ecosystem.findOne({ - authId: context.userId - }) - - if (!userEcosystem) { - logger.debug('addTeam -> Ecosystem not found for the user, creating a new one from default.') - - let defaultEcosystem = require('../../config/ecosystem.json') - userEcosystem = new Ecosystem(defaultEcosystem) - userEcosystem.authId = context.userId - } - - for (let i = 0; i < userEcosystem.devTeams.length; i++) { - const auxTeam = userEcosystem.devTeams[i]; - if (auxTeam.codeName === team.codeName) { - throw new WrongArgumentsError("The team already exist on the user ecosystem.") - } - } - - // Teams will be created on a local minio container - let botsConfigurations = [] - try { - await createContainer(team.codeName) - } catch (err) { - if (err.message !== 'Your previous request to create the named bucket succeeded and you already own it.') { - logger.error('addTeam -> Error: %s', err.stack) - throw err - } else { - logger.warn('addTeam -> %s', err.message) - } - } - - let tradingBot = await copyBot(team.codeName, team.bot.codeName, team.bot.displayName, writeFileContent) - botsConfigurations.push(tradingBot) - let simulatorBot = await copySimulator(team.codeName, team.bot.codeName, team.bot.displayName, writeFileContent) - botsConfigurations.push(simulatorBot) - - team.bots = botsConfigurations - - if (!team.host) { - let nodeEndpoint = { - url: process.env.NODE_ENDPOINT, - storage: 'localStorage', - container: team.codeName, - accessKey: crypto.randomBytes(128).toString('hex'), - ownerKey: crypto.randomBytes(128).toString('hex') - } - team.host = nodeEndpoint - } - - userEcosystem.devTeams.push(team) - userEcosystem.markModified("devTeams") - await userEcosystem.save() - return team - } catch (err) { - logger.error('addTeam -> Error: %s', err.stack) - throw err - } -} - -const mutation = { - addTeam: { - type: TeamType, - args, - resolve, - } -} - -export default mutation; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/CreateFile.js b/Deprecated-Code/SaWebApi/src/schema/mutations/CreateFile.js deleted file mode 100644 index b1e501e80..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/CreateFile.js +++ /dev/null @@ -1,40 +0,0 @@ -import logger from '../../utils/logger' -import { FileInputType } from '../types/input' -import { GraphQLString } from 'graphql' -import { writeFileContent } from '../../storage/providers/MinioStorage' -import { AuthenticationError, WrongArgumentsError } from '../../errors' -import getDevTeamHost from '../../utils/getDevTeamHost' - -export const args = { file: { type: FileInputType } } - -const resolve = async (parent, { file }, context) => { - try { - if (file.accessKey === undefined || file.accessKey === null) { - throw new WrongArgumentsError() - } - - let host = await getDevTeamHost(file.container, undefined, file.accessKey) - - if (host === undefined || host === null) { - throw new AuthenticationError() - } - let date = new Date() - await writeFileContent(file.container, file.filePath, file.fileContent) - let dateAfter = new Date() - logger.info('createFile: ' + file.container + '/...' + file.filePath.substring(file.filePath.length -110 , file.filePath.length) + ', ' + (dateAfter - date)) - return 'File created.' - } catch (err) { - logger.error('createFile -> Error: %s', err.message) - throw err - } -} - -const mutation = { - createFile: { - type: GraphQLString, - args, - resolve, - } -} - -export default mutation; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/DeleteTeam.js b/Deprecated-Code/SaWebApi/src/schema/mutations/DeleteTeam.js deleted file mode 100644 index 6c1fbc0f8..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/DeleteTeam.js +++ /dev/null @@ -1,61 +0,0 @@ -import logger from '../../utils/logger' -import { AuthenticationError, WrongArgumentsError } from '../../errors' -import { TeamType } from '../types' -import { Ecosystem } from '../../models' -import { DeleteTeamInputType } from '../types/input' -import { deleteContainer } from '../../storage/providers/MinioStorage' - -export const args = { team: { type: DeleteTeamInputType } } - -const resolve = async (parent, { team }, context) => { - logger.debug('deleteTeam -> Entering Function.') - - if (!context.userId) { - throw new AuthenticationError() - } - - try { - let userEcosystem = await Ecosystem.findOne({ - authId: context.userId - }) - - if (!userEcosystem) { - logger.debug('deleteTeam -> Ecosystem not found for the user.') - throw new WrongArgumentsError('The user does not have an ecosystem configured.') - } - - let teamFound = false - for (let i = 0; i < userEcosystem.devTeams.length; i++) { - const auxTeam = userEcosystem.devTeams[i] - if (auxTeam.codeName === team.codeName) { - logger.debug('deleteTeam -> Team found, removing.') - teamFound = true - await deleteContainer(team.codeName) - userEcosystem.devTeams.splice(i, 1) - userEcosystem.markModified("devTeams") - await userEcosystem.save() - break - } - } - - if (!teamFound) { - throw new WrongArgumentsError('Team was not found on the user ecosystem.') - } else { - return team - } - - } catch (err) { - logger.error('deleteTeam -> Error: %s', err.stack) - throw err - } -} - -const mutation = { - deleteTeam: { - type: TeamType, - args, - resolve, - } -} - -export default mutation; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/RemoveBot.js b/Deprecated-Code/SaWebApi/src/schema/mutations/RemoveBot.js deleted file mode 100644 index 83249f703..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/RemoveBot.js +++ /dev/null @@ -1,64 +0,0 @@ -import logger from '../../utils/logger' -import { BotInputType, } from '../types/input' -import { BotType, } from '../types' -import { Ecosystem } from '../../models' - -export const args = { bot: { type: BotInputType } } - -const resolve = async (parent, { bot }, context) => { - logger.debug('removeBot -> Dev team: %s. Bot: %s', bot.devTeam, bot.codeName) - try { - - let userEcosystem = await Ecosystem.findOne({ - authId: context.userId - }) - - if (!userEcosystem) { - throw 'Ecosystem not found for the user.' - } - - let removedBotClone - for (let i = 0; i < userEcosystem.devTeams.length; i++) { - const auxTeam = userEcosystem.devTeams[i] - if (auxTeam.codeName === bot.devTeam) { - for (let j = 0; j < auxTeam.bots.length; j++) { - const auxBot = auxTeam.bots[j] - if (auxBot.codeName === bot.codeName && auxBot.cloneId === bot.cloneId) { - for (let k = 0; k < auxBot.products.length; k++) { - const auxProduct = auxBot.products[k] - if (auxProduct.codeName === bot.productCodeName) { - removedBotClone = auxBot - auxTeam.bots.splice(j, 1) - userEcosystem.markModified("devTeams") - break - } - } - break - } - } - break - } - } - - if (removedBotClone) { - await userEcosystem.save() - return removedBotClone - } else { - throw 'Algobot not found.' - } - - } catch (err) { - logger.error('removeBot -> Error: %s', err.message) - throw err - } -} - -const mutation = { - removeBot: { - type: BotType, - args, - resolve, - } -} - -export default mutation; diff --git a/Deprecated-Code/SaWebApi/src/schema/mutations/index.js b/Deprecated-Code/SaWebApi/src/schema/mutations/index.js deleted file mode 100644 index be7aad941..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/mutations/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql' - -import AddTeamMutation from './AddTeam' -import DeleteTeamMutation from './DeleteTeam' -import CreateFileMutation from './CreateFile' -import AddBotMutation from './AddBot' -import RemoveBotMutation from './RemoveBot' - -const Mutation = new GraphQLObjectType({ - name: 'Mutation', - fields: Object.assign( - AddTeamMutation, - DeleteTeamMutation, - CreateFileMutation, - AddBotMutation, - RemoveBotMutation - ) -}) - -export default Mutation diff --git a/Deprecated-Code/SaWebApi/src/schema/queries/Ecosystem.js b/Deprecated-Code/SaWebApi/src/schema/queries/Ecosystem.js deleted file mode 100644 index d6eeafb6f..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/queries/Ecosystem.js +++ /dev/null @@ -1,42 +0,0 @@ -import logger from '../../utils/logger' -import { Ecosystem } from '../../models' -import { EcosystemType } from '../types' - -const args = {} - -const resolve = async (parent, args, context) => { - logger.debug('getEcosystem -> Entering Function.') - - try { - if (!context.userId) { - logger.debug('getEcosystem -> User not logged in, returning default ecosystem.') - let defaultEcosystem = require('../../config/ecosystem.json') - return defaultEcosystem - } else { - let userEcosystem = await Ecosystem.findOne({ - authId: context.userId - }) - - if (!userEcosystem) { - logger.debug('addTeam -> Ecosystem not found for the user, retrieving default.') - let defaultEcosystem = require('../../config/ecosystem.json') - return defaultEcosystem - } - - return userEcosystem - } - } catch (err) { - logger.error('getEcosystem -> Error: %s', err.stack) - throw err - } -} - -const query = { - getEcosystem: { - type: EcosystemType, - args, - resolve, - } -} - -export default query diff --git a/Deprecated-Code/SaWebApi/src/schema/queries/FileContent.js b/Deprecated-Code/SaWebApi/src/schema/queries/FileContent.js deleted file mode 100644 index 43bf10c3d..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/queries/FileContent.js +++ /dev/null @@ -1,47 +0,0 @@ -import logger from '../../utils/logger' -import { FileInputType } from '../types/input' -import { GraphQLString } from 'graphql' -import { getFileContent } from '../../storage/providers/MinioStorage' -import { AuthenticationError, WrongArgumentsError } from '../../errors' -import getDevTeamHost from '../../utils/getDevTeamHost' - -export const args = { file: { type: FileInputType } } - -const resolve = async (parent, { file }, context) => { - try { - if (file.accessKey === undefined || file.accessKey === null) { - throw new WrongArgumentsError() - } - - let host = await getDevTeamHost(file.container, file.accessKey) - - if (host === undefined || host === null) { - logger.error('Error getting file:' + JSON.stringify(file)) - throw new AuthenticationError() - } - - let date = new Date() - let fileContent = await getFileContent(file.container, file.filePath) - let dateAfter = new Date() - logger.info('getFileContent: ' + file.container + '/...' + file.filePath.substring(file.filePath.length -110 , file.filePath.length) + ', ' + (dateAfter - date)) - return fileContent - - } catch (err) { - if (err.message === 'The specified key does not exist.') - logger.debug('getFileContent -> Error: %s', err.message) - else { - logger.error('getFileContent -> Error: %s', err.message) - throw err - } - } -} - -const query = { - fileContent: { - type: GraphQLString, - args, - resolve, - } -} - -export default query diff --git a/Deprecated-Code/SaWebApi/src/schema/queries/PlotterCode.js b/Deprecated-Code/SaWebApi/src/schema/queries/PlotterCode.js deleted file mode 100644 index 6008bd919..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/queries/PlotterCode.js +++ /dev/null @@ -1,53 +0,0 @@ -import logger from '../../utils/logger' -import { FileInputType } from '../types/input' -import { GraphQLString } from 'graphql' -import { getFileContent } from '../../storage/providers/MinioStorage' -import { getFileContentRemote } from '../../storage/providers/AzureStorage' - -export const args = { file: { type: FileInputType } } - -const resolve = async (parent, { file }, context) => { - logger.debug('getPlotterCode -> Entering Function: ' + file.container + '/' + file.filePath) - - try { - - let fileContent - if (file.storage === '' || file.storage === undefined) { - //TODO Add permissions - fileContent = await getFileContent(file.container, file.filePath) - } else { - // TODO Temporary fix for plotter and plotter pannels - if (file.storage === '' && file.accessKey === '') { - let defaultEcosystem = require('../../config/ecosystem.json') - for (let index = 0; index < defaultEcosystem.devTeams.length; index++) { - const devTeam = defaultEcosystem.devTeams[index]; - if (devTeam.codeName.toLowerCase() === file.container) { - file.storage = devTeam.host.storage - file.accessKey = devTeam.host.accessKey - } - } - } - if (file.storage === '' || file.accessKey === '') { - throw "Wrong parameters." - } - fileContent = await getFileContentRemote(file.container, file.filePath, file.storage, file.accessKey) - } - - return fileContent - - } catch (err) { - logger.error('getPlotterCode -> Error: %s', err) - logger.error('getPlotterCode -> Stack: %s', err.stack) - throw err - } -} - -const query = { - plotterCode: { - type: GraphQLString, - args, - resolve, - } -} - -export default query diff --git a/Deprecated-Code/SaWebApi/src/schema/queries/index.js b/Deprecated-Code/SaWebApi/src/schema/queries/index.js deleted file mode 100644 index 2551f88ec..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/queries/index.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import EcosystemQuery from './Ecosystem'; -import FileContentQuery from './FileContent'; -import PlotterCodeQuery from './PlotterCode'; - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: Object.assign( - EcosystemQuery, - FileContentQuery, - PlotterCodeQuery - ), -}); - -export default RootQuery; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Bot.js b/Deprecated-Code/SaWebApi/src/schema/types/Bot.js deleted file mode 100644 index 347587f02..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Bot.js +++ /dev/null @@ -1,28 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { ProductType } from './index' - -const BotType = new GraphQLObjectType({ - name: 'Bot', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - type: { type: GraphQLString }, - profilePicture: { type: GraphQLString }, - repo: { type: GraphQLString }, - configFile: { type: GraphQLString }, - cloneId: { type: GraphQLString }, - products: { - type: new GraphQLList(ProductType), - resolve(parent) { - return parent.products; - } - }, - }), -}); - -export default BotType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Competition.js b/Deprecated-Code/SaWebApi/src/schema/types/Competition.js deleted file mode 100644 index 16f42cd4a..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Competition.js +++ /dev/null @@ -1,32 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { PlotterReferenceType } from './index'; - -const CompetitionType = new GraphQLObjectType({ - name: 'Competition', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - description: { type: GraphQLString }, - startDatetime: { type: GraphQLString }, - finishDatetime: { type: GraphQLString }, - formula: { type: GraphQLString }, - plotter: { - type: PlotterReferenceType, - resolve(parent) { - return parent.plotter; - } - }, - rules:{ type: new GraphQLList(GraphQLString) }, - prizes:{ type: new GraphQLList(GraphQLString) }, - participants:{ type: new GraphQLList(GraphQLString) }, - repo: { type: GraphQLString }, - configFile: { type: GraphQLString } - }), -}); - -export default CompetitionType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/DataRange.js b/Deprecated-Code/SaWebApi/src/schema/types/DataRange.js deleted file mode 100644 index aebeb3cd7..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/DataRange.js +++ /dev/null @@ -1,14 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -const DataRangeType = new GraphQLObjectType({ - name: 'DataRange', - fields: () => ({ - filePath: { type: GraphQLString }, - fileName: { type: GraphQLString } - }), -}); - -export default DataRangeType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/DataSet.js b/Deprecated-Code/SaWebApi/src/schema/types/DataSet.js deleted file mode 100644 index a96ff8ff5..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/DataSet.js +++ /dev/null @@ -1,21 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { DataRangeType } from './index' - -const DataSetType = new GraphQLObjectType({ - name: 'DataSet', - fields: () => ({ - codeName: { type: GraphQLString }, - type: { type: GraphQLString }, - validPeriods: { type: new GraphQLList(GraphQLString) }, - filePath: { type: GraphQLString }, - fileName: { type: GraphQLString }, - dataRange: { type: DataRangeType } - }), -}); - -export default DataSetType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Ecosystem.js b/Deprecated-Code/SaWebApi/src/schema/types/Ecosystem.js deleted file mode 100644 index 8fabc5847..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Ecosystem.js +++ /dev/null @@ -1,31 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLID, - GraphQLList -} from 'graphql'; - -import { TeamType, EventHostType } from './index'; - -const EcosystemType = new GraphQLObjectType({ - name: 'Ecosystem', - fields: () => ({ - id: { type: GraphQLID }, - authId: { type: GraphQLString }, - userName: { type: GraphQLString }, // TODO this field is temporary, it should be used the user module query - devTeams: { - type: new GraphQLList(TeamType), - resolve(parent) { - return parent.devTeams; - } - }, - hosts: { - type: new GraphQLList(EventHostType), - resolve(parent) { - return parent.hosts; - } - } - }), -}); - -export default EcosystemType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/EventHost.js b/Deprecated-Code/SaWebApi/src/schema/types/EventHost.js deleted file mode 100644 index c951dabba..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/EventHost.js +++ /dev/null @@ -1,37 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { CompetitionType, PlotterType, HostType } from './index'; - -const EventHostType = new GraphQLObjectType({ - name: 'EventHost', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - host: { - type: HostType, - resolve(parent) { - return parent.host; - } - }, - container: { type: GraphQLString }, - accessKey: { type: GraphQLString }, - competitions: { - type: new GraphQLList(CompetitionType), - resolve(parent) { - return parent.competitions; - } - }, - plotters: { - type: new GraphQLList(PlotterType), - resolve(parent) { - return parent.plotters; - } - } - }), -}); - -export default EventHostType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Exchange.js b/Deprecated-Code/SaWebApi/src/schema/types/Exchange.js deleted file mode 100644 index b80b7ec03..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Exchange.js +++ /dev/null @@ -1,13 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -const ExchangeType = new GraphQLObjectType({ - name: 'Exchange', - fields: () => ({ - name: { type: GraphQLString } - }), -}); - -export default ExchangeType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/File.js b/Deprecated-Code/SaWebApi/src/schema/types/File.js deleted file mode 100644 index bf3c11136..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/File.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -const FileType = new GraphQLObjectType({ - name: 'File', - fields: () => ({ - container: { type: GraphQLString }, - filePath: { type: GraphQLString }, - storage: { type: GraphQLString }, - accessKey: { type: GraphQLString }, - fileContent: { type: GraphQLString } - }), -}); - -export default FileType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Host.js b/Deprecated-Code/SaWebApi/src/schema/types/Host.js deleted file mode 100644 index 0b36b8e00..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Host.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -const HostType = new GraphQLObjectType({ - name: 'Host', - fields: () => ({ - url: { type: GraphQLString }, - storage: { type: GraphQLString }, - container: { type: GraphQLString }, - accessKey: { type: GraphQLString }, - ownerKey: { type: GraphQLString } - }), -}); - -export default HostType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Module.js b/Deprecated-Code/SaWebApi/src/schema/types/Module.js deleted file mode 100644 index eb1addabb..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Module.js +++ /dev/null @@ -1,25 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql' - -import { PanelType } from './index' - -const ModuleType = new GraphQLObjectType({ - name: 'Module', - fields: () => ({ - codeName: { type: GraphQLString }, - moduleName: { type: GraphQLString }, - description: { type: GraphQLString }, - profilePicture: { type: GraphQLString }, - panels: { - type: new GraphQLList(PanelType), - resolve(parent) { - return parent.panels; - } - } - }), -}); - -export default ModuleType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Panel.js b/Deprecated-Code/SaWebApi/src/schema/types/Panel.js deleted file mode 100644 index a3e19b4aa..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Panel.js +++ /dev/null @@ -1,15 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -const PanelType = new GraphQLObjectType({ - name: 'Panel', - fields: () => ({ - codeName: { type: GraphQLString }, - moduleName: { type: GraphQLString }, - event: { type: GraphQLString } - }), -}); - -export default PanelType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Plotter.js b/Deprecated-Code/SaWebApi/src/schema/types/Plotter.js deleted file mode 100644 index b0b672625..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Plotter.js +++ /dev/null @@ -1,26 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { ModuleType } from './index' - -const PlotterType = new GraphQLObjectType({ - name: 'Plotter', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - host: { type: GraphQLString }, - modules: { - type: new GraphQLList(ModuleType), - resolve(parent) { - return parent.modules; - } - }, - repo: { type: GraphQLString }, - configFile: { type: GraphQLString } - }), -}); - -export default PlotterType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/PlotterReference.js b/Deprecated-Code/SaWebApi/src/schema/types/PlotterReference.js deleted file mode 100644 index 06baa44f0..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/PlotterReference.js +++ /dev/null @@ -1,24 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString -} from 'graphql'; - -import { HostType } from './index'; - -const PlotterReferenceType = new GraphQLObjectType({ - name: 'PlotterReference', - fields: () => ({ - devTeam: { type: GraphQLString }, - codeName: { type: GraphQLString }, - host: { - type: HostType, - resolve(parent) { - return parent.host; - } - }, - moduleName: { type: GraphQLString }, - repo: { type: GraphQLString } - }), -}); - -export default PlotterReferenceType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Product.js b/Deprecated-Code/SaWebApi/src/schema/types/Product.js deleted file mode 100644 index 1494872c3..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Product.js +++ /dev/null @@ -1,31 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { ExchangeType, DataSetType, PlotterReferenceType } from './index' - -const ProductType = new GraphQLObjectType({ - name: 'Product', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - description: { type: GraphQLString }, - dataSets: { - type: new GraphQLList(DataSetType), - resolve(parent) { - return parent.dataSets; - } - }, - exchangeList: { - type: new GraphQLList(ExchangeType), - resolve(parent) { - return parent.exchangeList; - } - }, - plotter: { type: PlotterReferenceType } - }), -}); - -export default ProductType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/Team.js b/Deprecated-Code/SaWebApi/src/schema/types/Team.js deleted file mode 100644 index 00607f192..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/Team.js +++ /dev/null @@ -1,35 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -import { BotType, PlotterType, HostType } from './index'; - -const TeamType = new GraphQLObjectType({ - name: 'Team', - fields: () => ({ - codeName: { type: GraphQLString }, - displayName: { type: GraphQLString }, - host: { - type: HostType, - resolve(parent) { - return parent.host; - } - }, - bots: { - type: new GraphQLList(BotType), - resolve(parent) { - return parent.bots; - } - }, - plotters: { - type: new GraphQLList(PlotterType), - resolve(parent) { - return parent.plotters; - } - } - }), -}); - -export default TeamType; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/index.js b/Deprecated-Code/SaWebApi/src/schema/types/index.js deleted file mode 100644 index 31708e9b2..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import TeamType from './Team'; -import BotType from './Bot'; -import EventHostType from './EventHost'; -import HostType from './Host'; -import EcosystemType from './Ecosystem'; -import FileType from './File'; -import PanelType from './Panel'; -import ModuleType from './Module'; -import PlotterType from './Plotter'; -import CompetitionType from './Competition'; -import PlotterReferenceType from './PlotterReference'; -import ProductType from './Product'; -import DataSetType from './DataSet'; -import DataRangeType from './DataRange'; -import ExchangeType from './Exchange'; - -export { - TeamType, - BotType, - EventHostType, - HostType, - EcosystemType, - FileType, - PanelType, - ModuleType, - PlotterType, - CompetitionType, - PlotterReferenceType, - ProductType, - DataSetType, - DataRangeType, - ExchangeType -}; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Bot.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Bot.js deleted file mode 100644 index 1fdcd09ad..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Bot.js +++ /dev/null @@ -1,22 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'BotInput', - description: 'Payload for bot input.', - fields: () => ({ - codeName: { type: new GraphQLNonNull(GraphQLString) }, - productCodeName: { type: GraphQLString }, - devTeam: { type: GraphQLString}, - displayName: { type: GraphQLString }, - repo: { type: GraphQLString }, - configFile: { type: GraphQLString }, - cloneId: { type: GraphQLString }, - validPeriod: { type: GraphQLString }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/DataSet.js b/Deprecated-Code/SaWebApi/src/schema/types/input/DataSet.js deleted file mode 100644 index 71efbf934..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/DataSet.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLList -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'DataSetInput', - description: 'Payload for data set input.', - fields: () => ({ - codeName: { type: new GraphQLNonNull(GraphQLString) }, - type: { type: new GraphQLNonNull(GraphQLString) }, - filePath: { type: new GraphQLNonNull(GraphQLString) }, - fileName: { type: new GraphQLNonNull(GraphQLString) }, - validPeriods: { type: new GraphQLList(GraphQLString) } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/DeleteTeam.js b/Deprecated-Code/SaWebApi/src/schema/types/input/DeleteTeam.js deleted file mode 100644 index bd7ed63d2..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/DeleteTeam.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLString, - GraphQLInputObjectType, - GraphQLNonNull -} from 'graphql'; - -import { HostInputType } from './index'; - -const Type = new GraphQLInputObjectType({ - name: 'DeleteTeamInput', - description: 'Payload for team input', - fields: () => ({ - codeName: { type: new GraphQLNonNull(GraphQLString) }, - host: { type: HostInputType } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Exchange.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Exchange.js deleted file mode 100644 index 738aca4ac..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Exchange.js +++ /dev/null @@ -1,15 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'ExchangeInput', - description: 'Payload for exchange input.', - fields: () => ({ - name: { type: new GraphQLNonNull(GraphQLString) } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/File.js b/Deprecated-Code/SaWebApi/src/schema/types/input/File.js deleted file mode 100644 index 7b69397ae..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/File.js +++ /dev/null @@ -1,19 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'FileInput', - description: 'Payload for file input.', - fields: () => ({ - container: { type: new GraphQLNonNull(GraphQLString) }, - filePath: { type: new GraphQLNonNull(GraphQLString) }, - storage: { type: new GraphQLNonNull(GraphQLString) }, - accessKey: { type: GraphQLString }, - fileContent: { type: GraphQLString } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Host.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Host.js deleted file mode 100644 index 6f9d4bb5f..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Host.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'HostInput', - description: 'Payload for host input.', - fields: () => ({ - url: { type: GraphQLString }, - storage: { type: GraphQLString }, - container: { type: GraphQLString }, - accessKey: { type: GraphQLString } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Plotter.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Plotter.js deleted file mode 100644 index 1faa1a322..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Plotter.js +++ /dev/null @@ -1,17 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull -} from 'graphql'; - -const Type = new GraphQLInputObjectType({ - name: 'PlotterInput', - description: 'Payload for plotter input.', - fields: () => ({ - devTeam: { type: new GraphQLNonNull(GraphQLString) }, - codeName: { type: new GraphQLNonNull(GraphQLString) }, - moduleName: { type: new GraphQLNonNull(GraphQLString) } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Product.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Product.js deleted file mode 100644 index 9fb26fab2..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Product.js +++ /dev/null @@ -1,24 +0,0 @@ -import { - GraphQLInputObjectType, - GraphQLString, - GraphQLNonNull -} from 'graphql'; - -import { DataSetInputType } from './index'; -import { ExchangeInputType } from './index'; -import { PlotterInputType } from './index'; - -const Type = new GraphQLInputObjectType({ - name: 'ProductInput', - description: 'Payload for product input.', - fields: () => ({ - codeName: { type: new GraphQLNonNull(GraphQLString) }, - displayName: { type: new GraphQLNonNull(GraphQLString) }, - description: { type: GraphQLString }, - dataSets: { type: new GraphQLList(DataSetInputType) }, - exchangeList: { type: new GraphQLList(ExchangeInputType) }, - plotter: { type: PlotterInputType } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/Team.js b/Deprecated-Code/SaWebApi/src/schema/types/input/Team.js deleted file mode 100644 index c4423a55a..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/Team.js +++ /dev/null @@ -1,21 +0,0 @@ -import { - GraphQLString, - GraphQLInputObjectType, - GraphQLNonNull -} from 'graphql'; - -import { BotInputType, HostInputType } from './index'; - -const Type = new GraphQLInputObjectType({ - name: 'TeamInput', - description: 'Payload for team input', - fields: () => ({ - codeName: { type: new GraphQLNonNull(GraphQLString) }, - displayName: { type: new GraphQLNonNull(GraphQLString) }, - host: { type: HostInputType }, - bot: { type: new GraphQLNonNull(BotInputType) }, - plotter: { type: BotInputType } - }), -}); - -export default Type; diff --git a/Deprecated-Code/SaWebApi/src/schema/types/input/index.js b/Deprecated-Code/SaWebApi/src/schema/types/input/index.js deleted file mode 100644 index 6344400c3..000000000 --- a/Deprecated-Code/SaWebApi/src/schema/types/input/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import TeamInputType from './Team' -import BotInputType from './Bot' -import HostInputType from './Host' -import FileInputType from './File' -import DeleteTeamInputType from './DeleteTeam' -import DataSetInputType from './DataSet' -import ExchangeInputType from './Exchange' -import PlotterInputType from './Plotter' -import ProductInputType from './Product' - -export { - TeamInputType, - BotInputType, - HostInputType, - FileInputType, - DeleteTeamInputType, - DataSetInputType, - ExchangeInputType, - PlotterInputType, - ProductInputType -} diff --git a/Deprecated-Code/SaWebApi/src/storage/CopyBot.js b/Deprecated-Code/SaWebApi/src/storage/CopyBot.js deleted file mode 100644 index 76483c90f..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/CopyBot.js +++ /dev/null @@ -1,41 +0,0 @@ -import beautify from 'json-beautify' -import logger from '../utils/logger' -import readFile from '../utils/readFile' - -export const copyBot = async (teamCodeName, botCodeName, botDisplayName, writeFileContent) => { - try { - logger.debug('copyBot started for bot %s', botCodeName) - // File imports - const botCode = await readFile('./src/storage/templates/TradingBot/User.Bot.js') - const config = await readFile('./src/storage/templates/TradingBot/this.bot.config.json') - - // Change config to adapt the new indicator - let parsedConfig = JSON.parse(config) - parsedConfig.displayName = botDisplayName - parsedConfig.codeName = botCodeName - parsedConfig.devTeam = teamCodeName - parsedConfig.profilePicture = botCodeName + '.png' - - parsedConfig.processes[0].statusDependencies[0].devTeam = teamCodeName - parsedConfig.processes[0].statusDependencies[0].bot = botCodeName - parsedConfig.processes[0].statusDependencies[1].devTeam = teamCodeName - parsedConfig.processes[0].statusDependencies[1].bot = 'simulator-' + botCodeName - parsedConfig.processes[0].statusDependencies[2].devTeam = teamCodeName - parsedConfig.processes[0].statusDependencies[2].bot = 'simulator-' + botCodeName - - parsedConfig.processes[0].dataDependencies[1].devTeam = teamCodeName - parsedConfig.processes[0].dataDependencies[1].bot = 'simulator-' + botCodeName - parsedConfig.processes[0].dataDependencies[2].devTeam = teamCodeName - parsedConfig.processes[0].dataDependencies[2].bot = 'simulator-' + botCodeName - - // Creating a new trading bot - let newBotPath = teamCodeName + '/bots/' + botCodeName + '-Trading-Bot' - await writeFileContent(teamCodeName, newBotPath + '/Trading-Process/User.Bot.js', botCode) - await writeFileContent(teamCodeName, newBotPath + '/this.bot.config.json', beautify(parsedConfig, null, 2, 80)) - - return parsedConfig - } catch (err) { - logger.error('copyBot error for bot: %s. %s', botCodeName, err) - throw err - } -} diff --git a/Deprecated-Code/SaWebApi/src/storage/CopySimulator.js b/Deprecated-Code/SaWebApi/src/storage/CopySimulator.js deleted file mode 100644 index 9bcb240f2..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/CopySimulator.js +++ /dev/null @@ -1,83 +0,0 @@ -import beautify from 'json-beautify' -import logger from '../utils/logger' -import readFile from '../utils/readFile' - -export const copySimulator = async (teamCodeName, botCodeName, botDisplayName, writeFileContent) => { - try { - logger.debug('copySimulator started for bot %s', 'simulator-' + botCodeName) - - // File imports - const commons = await readFile('./src/storage/templates/Simulator/Commons.js') - const config = await readFile('./src/storage/templates/Simulator/this.bot.config.json') - const codeDaily = await readFile('./src/storage/templates/Simulator/User.Bot.Daily.js') - const codeMarket = await readFile('./src/storage/templates/Simulator/User.Bot.Market.js') - - // Change config to adapt the new indicator - let newBotCodeName = 'simulator-' + botCodeName - let parsedConfig = JSON.parse(config) - parsedConfig.displayName = 'Simulator ' + botDisplayName - parsedConfig.codeName = newBotCodeName - parsedConfig.devTeam = teamCodeName - parsedConfig.profilePicture = newBotCodeName + '.png' - - parsedConfig.processes[0].statusDependencies[0].devTeam = teamCodeName - parsedConfig.processes[0].statusDependencies[0].bot = newBotCodeName - parsedConfig.processes[1].statusDependencies[2].devTeam = teamCodeName - parsedConfig.processes[1].statusDependencies[2].bot = newBotCodeName - - //Changing Indicator Output - parsedConfig.products[0].storageAccount = teamCodeName - parsedConfig.products[0].dataSets[0].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Market/@Period' - parsedConfig.products[0].dataSets[1].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Daily/@Period/@Year/@Month/@Day' - parsedConfig.products[0].dataSets[1].dataRange.filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Daily' - - parsedConfig.products[1].storageAccount = teamCodeName - parsedConfig.products[1].dataSets[0].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Market/@Period' - parsedConfig.products[1].dataSets[1].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Daily/@Period/@Year/@Month/@Day' - parsedConfig.products[1].dataSets[1].dataRange.filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Daily' - - parsedConfig.products[2].storageAccount = teamCodeName - parsedConfig.products[2].dataSets[0].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Market/@Period' - parsedConfig.products[2].dataSets[1].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Daily/@Period/@Year/@Month/@Day' - parsedConfig.products[2].dataSets[1].dataRange.filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Daily' - - parsedConfig.products[3].storageAccount = teamCodeName - parsedConfig.products[3].dataSets[0].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Market/@Period' - parsedConfig.products[3].dataSets[1].filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Daily/@Period/@Year/@Month/@Day' - parsedConfig.products[3].dataSets[1].dataRange.filePath = teamCodeName + '/' + parsedConfig.codeName + '.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Daily' - - // Write the new files - let newSimulatorName = newBotCodeName + '-Indicator-Bot' - let newSimulatorPath = teamCodeName + '/bots/' + newSimulatorName - await writeFileContent(teamCodeName, newSimulatorPath + '/Commons.js', commons) - await writeFileContent(teamCodeName, newSimulatorPath + '/this.bot.config.json', beautify(parsedConfig, null, 2, 80)) - await writeFileContent(teamCodeName, newSimulatorPath + '/Multi-Period-Daily/User.Bot.js', codeDaily) - await writeFileContent(teamCodeName, newSimulatorPath + '/Multi-Period-Market/User.Bot.js', codeMarket) - - logger.debug('copySimulator completed for bot %s', newBotCodeName) - return parsedConfig - } catch (err) { - logger.error('copySimulator error for bot: %s. %s', botCodeName, err) - throw err - } -} - -export const removeSimulator = async (storage, teamCodeName, botCodeName) => { - try { - logger.debug('removeSimulator started for bot %s', botCodeName) - - // Delete simulator code - let newSimulatorName = 'simulator-' + botCodeName + '-Indicator-Bot' - let newSimulatorPath = teamCodeName + '/bots/' + newSimulatorName - await storage.deleteBlob(teamCodeName, newSimulatorPath + '/Commons.js') - await storage.deleteBlob(teamCodeName, newSimulatorPath + '/this.bot.config.json') - await storage.deleteBlob(teamCodeName, newSimulatorPath + '/Multi-Period-Daily/User.Bot.js') - await storage.deleteBlob(teamCodeName, newSimulatorPath + '/Multi-Period-Market/User.Bot.js') - - logger.debug('removeSimulator completed for bot %s', botCodeName) - - } catch (err) { - logger.error('copySimulator error for bot %s: %s', botCodeName, err) - throw err - } -} diff --git a/Deprecated-Code/SaWebApi/src/storage/providers/AzureStorage.js b/Deprecated-Code/SaWebApi/src/storage/providers/AzureStorage.js deleted file mode 100644 index d820fbbb7..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/providers/AzureStorage.js +++ /dev/null @@ -1,91 +0,0 @@ -import { - Aborter, - BlobURL, - BlockBlobURL, - ContainerURL, - ServiceURL, - StorageURL, - SharedKeyCredential, - AnonymousCredential -} from '@azure/storage-blob' - -const getService = () => { - // Use SharedKeyCredential with storage account and account key - const sharedKeyCredential = new SharedKeyCredential(process.env.AZURE_BASE_URL, process.env.AZURE_CONNECTION_STRING); - - // Use sharedKeyCredential, tokenCredential or anonymousCredential to create a pipeline - const pipeline = StorageURL.newPipeline(sharedKeyCredential, { - retryOptions: { maxTries: 10 } - }); - - // List containers - const serviceURL = new ServiceURL( - // When using AnonymousCredential, following url should include a valid SAS or support public access - `https://${process.env.AZURE_BASE_URL}.blob.core.windows.net`, - pipeline - ) - return serviceURL -} - -export const getFileContentRemote = async (containerName, blobName, storage, accessKey) => { - const pipeline = StorageURL.newPipeline(new AnonymousCredential(), { - retryOptions: { maxTries: 10 } - }) - const serviceURLWithAccessKey = new ServiceURL( - `${storage}${accessKey}`, - pipeline - ); - const containerURL = ContainerURL.fromServiceURL(serviceURLWithAccessKey, containerName) - const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName) - let downloadResponse = await blockBlobURL.download(Aborter.none, 0) - return await streamToString(downloadResponse.readableStreamBody) -} - -export const getFileContent = async (containerName, blobName) => { - const containerURL = ContainerURL.fromServiceURL(getService(), containerName) - const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName) - let downloadResponse = await blockBlobURL.download(Aborter.none, 0) - return await streamToString(downloadResponse.readableStreamBody) -} - -export const writeFileContent = async (containerName, blobName, content) => { - const containerURL = ContainerURL.fromServiceURL(getService(), containerName) - const blobURL = BlobURL.fromContainerURL(containerURL, blobName) - const blockBlobURL = BlockBlobURL.fromBlobURL(blobURL) - await blockBlobURL.upload( - Aborter.none, - content, - content.length - ) -} - -export const deleteBlob = async (containerName, blobName) => { - const containerURL = ContainerURL.fromServiceURL(getService(), containerName) - const blockBlobURL = BlockBlobURL.fromContainerURL(containerURL, blobName) - await blockBlobURL.delete(Aborter.none) -} - -export const deleteContainer = async (containerName) => { - const containerURL = ContainerURL.fromServiceURL(getService(), containerName) - await containerURL.delete(Aborter.none) -} - -export const createContainer = async (containerName) => { - const containerURL = ContainerURL.fromServiceURL(getService(), containerName) - await containerURL.create(Aborter.none) -} - -// A helper method used to read a Node.js readable stream into string -async function streamToString(readableStream) { - return new Promise((resolve, reject) => { - const chunks = [] - readableStream.on('data', data => { - chunks.push(data.toString()); - }) - readableStream.on('end', () => { - resolve(chunks.join('')) - }) - readableStream.on('error', reject) - }) -} - diff --git a/Deprecated-Code/SaWebApi/src/storage/providers/MinioStorage.js b/Deprecated-Code/SaWebApi/src/storage/providers/MinioStorage.js deleted file mode 100644 index 1da17c11e..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/providers/MinioStorage.js +++ /dev/null @@ -1,99 +0,0 @@ -import { Client } from 'minio' - -const getService = () => { - let service = new Client({ - endPoint: process.env.MINIO_END_POINT, - port: JSON.parse(process.env.MINIO_PORT), - useSSL: JSON.parse(process.env.MINIO_USE_SSL), - accessKey: process.env.MINIO_ACCESS_KEY, - secretKey: process.env.MINIO_SECRET_KEY - }) - return service -} - -export const getFileContent = async (containerName, blobName) => { - let service = getService() - let chunks = [] - let fileContent = await new Promise(function (resolve, reject) { - service.getObject(containerName, blobName, function (error, dataStream) { - if (error) { - reject(error) - } - if (dataStream != undefined) { - dataStream.on('data', function (chunk) { - chunks.push(chunk.toString()) - }) - dataStream.on('end', function () { - resolve(chunks.join('')) - }) - dataStream.on('error', function (e) { - reject(e) - }) - } else { - resolve('') - } - }) - }) - return fileContent -} - -export const writeFileContent = async (containerName, blobName, content) => { - let service = getService() - await new Promise(function (resolve, reject) { - service.putObject(containerName, blobName, content, 'text/plain', function (error) { - if (error) { - reject(error) - } - resolve() - }) - }) -} - -export const createContainer = async (containerName) => { - let service = getService() - await new Promise(function (resolve, reject) { - service.makeBucket(containerName, '', function (error) { - if (error) { - reject(error) - } - resolve() - }) - }) -} - -export const deleteContainer = async (containerName) => { - let service = getService() - let objectsStream = service.listObjects(containerName, '', true) - let totalObjects = 0 - let removed = 0 - objectsStream.on('data', async function (obj) { - totalObjects++ - await new Promise(function (resolve, reject) { - service.removeObject(containerName, obj.name, function (e) { - if (e) reject(e) - removed++ - resolve() - }) - }) - }) - objectsStream.on('error', function (e) { - throw e - }) - objectsStream.on('end', async function (e) { - await removeBucket() - }) - - function removeBucket() { - if (totalObjects === removed) { - new Promise(function (resolve, reject) { - service.removeBucket(containerName, function (e) { - if (e) reject(e) - resolve() - }) - }) - } else { - setTimeout(removeBucket, 2000) - } - } -} - diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/Commons.js b/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/Commons.js deleted file mode 100644 index 7d9509461..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/Commons.js +++ /dev/null @@ -1,1991 +0,0 @@ -const strategy = require('./Integrations/Strategy') - -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - const { orderMessage } = require("@superalgos/mqservice") - - const { - MESSAGE_ENTITY, MESSAGE_TYPE, ORDER_CREATOR, ORDER_TYPE, - ORDER_OWNER, ORDER_DIRECTION, ORDER_STATUS, ORDER_EXIT_OUTCOME, - createMessage, getMessage, getExpandedMessage - } = orderMessage.newOrderMessage() - - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons"; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - const GMT_SECONDS = ':00.000 GMT+0000'; - - let thisObject = { - initializeData: initializeData, - runSimulation: runSimulation, - buildLRC: buildLRC, - buildPercentageBandwidthMap: buildPercentageBandwidthMap, - buildBollingerBandsMap: buildBollingerBandsMap, - buildBollingerChannelsArray: buildBollingerChannelsArray, - buildBollingerSubChannelsArray: buildBollingerSubChannelsArray, - buildCandles: buildCandles - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - let LRCMap = new Map(); - let percentageBandwidthMap = new Map(); - let bollingerBandsMap = new Map(); - let bollingerChannelsArray = []; - let bollingerSubChannelsArray = []; - - let candles = []; - - return thisObject; - - function initializeData() { - - LRCMap = new Map(); - percentageBandwidthMap = new Map(); - bollingerBandsMap = new Map(); - bollingerChannelsArray = []; - bollingerSubChannelsArray = []; - - candles = []; - } - - async function runSimulation( - timePeriod, - currentDay, - startDate, - endDate, - interExecutionMemory, - callback, - callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> Entering function."); } - - let executionArray = []; - let recordsArray = []; - let conditionsArray = []; - let strategiesArray = []; - let tradesArray = []; - let lastObjectsArray = []; - - let tradingSystem = await strategy.getStrategy(); - - /* Initial Default Values */ - - let initialDate = startDate; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> initialDate = " + initialDate); } - - const DEFAULT_BASE_ASSET_BALANCE = 1 - const DEFAULT_BASE_ASSET_MINIMUN_BALANCE = 0.5 - const DEFAULT_BASE_ASSET_MAXIMUN_BALANCE = 2 - - let initialBalanceA = DEFAULT_BASE_ASSET_BALANCE - let minimumBalanceA = DEFAULT_BASE_ASSET_MINIMUN_BALANCE - let maximumBalanceA = DEFAULT_BASE_ASSET_MAXIMUN_BALANCE - let initialBalanceB = 0 - let minimumBalanceB = 0 - let maximumBalanceB = 0 - let baseAsset = 'BTC' - - /* Parameters Processing */ - - if (tradingSystem.parameters !== undefined) { - if (tradingSystem.parameters.baseAsset !== undefined) { - if (tradingSystem.parameters.baseAsset.formula !== undefined) { - let receivedParameters - try { - receivedParameters = JSON.parse(tradingSystem.parameters.baseAsset.formula.code); - - if (receivedParameters.name !== undefined) { - baseAsset = receivedParameters.name; - if (baseAsset !== 'BTC' && baseAsset !== 'USDT') { - tradingSystem.parameters.baseAsset.formula.error = baseAsset + ' is not supported. Using default: BTC.' - baseAsset = 'BTC' - } - } - - if (baseAsset === 'BTC') { - if (receivedParameters.initialBalance !== undefined) { - initialBalanceA = receivedParameters.initialBalance; - initialBalanceB = 0 - } else { - initialBalanceA = DEFAULT_BASE_ASSET_BALANCE; - initialBalanceB = 0 - } - if (receivedParameters.minimumBalance !== undefined) { - minimumBalanceA = receivedParameters.minimumBalance; - minimumBalanceB = 0 - } else { - minimumBalanceA = DEFAULT_BASE_ASSET_MINIMUN_BALANCE; - minimumBalanceB = 0 - } - if (receivedParameters.maximumBalance !== undefined) { - maximumBalanceA = receivedParameters.maximumBalance; - maximumBalanceB = 0 - } else { - maximumBalanceA = DEFAULT_BASE_ASSET_MAXIMUN_BALANCE; - maximumBalanceB = 0 - } - } else { - if (receivedParameters.initialBalance !== undefined) { - initialBalanceB = receivedParameters.initialBalance; - initialBalanceA = 0 - } else { - initialBalanceB = DEFAULT_BASE_ASSET_BALANCE; - initialBalanceA = 0 - } - if (receivedParameters.minimumBalance !== undefined) { - minimumBalanceB = receivedParameters.minimumBalance; - minimumBalanceA = 0 - } else { - minimumBalanceB = DEFAULT_BASE_ASSET_MINIMUN_BALANCE; - minimumBalanceA = 0 - } - if (receivedParameters.maximumBalance !== undefined) { - maximumBalanceB = receivedParameters.maximumBalance; - maximumBalanceA = 0 - } else { - maximumBalanceB = DEFAULT_BASE_ASSET_MAXIMUN_BALANCE; - maximumBalanceA = 0 - } - } - } catch (err) { - tradingSystem.parameters.baseAsset.formula.error = err.message - } - } - } - } - - /* Strategy and Phases */ - - let currentStrategyIndex = -1; - let strategyStage = 'No Stage'; - - /* Stop Loss Management */ - - const MIN_STOP_LOSS_VALUE = 1 // We can not let the stop be zero to avoid division by 0 error or infinity numbers as a result. - const MAX_STOP_LOSS_VALUE = Number.MAX_SAFE_INTEGER - let stopLoss = 0; - let stopLossPhase = 0; - let stopLossStage = 'No Stage'; - - /* Take Profit Management */ - - const MIN_TAKE_PROFIT_VALUE = 1 // We can not let the buy order be zero to avoid division by 0 error or infinity numbers as a result. - const MAX_TAKE_PROFIT_VALUE = Number.MAX_SAFE_INTEGER - let previousTakeProfit = 0; - let takeProfit = 0; - let takeProfitPhase = 0; - let takeProfitStage = 'No Stage'; - - /* Simulation Records */ - - let tradePositionRate = 0; - let tradePositionSize = 0; - let positionInstant; - - let previousBalanceAssetA = 0; - let previousBalanceAssetB = 0; - let hitRatio = 0; - let ROI = 0; - let days = 0; - let anualizedRateOfReturn = 0; - let type = '""'; - let marketRate = 0; - let takePositionNow = false - - /* In some cases we need to know if we are positioned at the last candle of the calendar day, for that we need thse variables. */ - - let lastInstantOfTheDay = currentDay.valueOf() + ONE_DAY_IN_MILISECONDS - 1; - let lastCandle = candles[candles.length - 1]; - - /* These 2 objects will allow us to create separate files for each one of them. */ - - let currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0 - } - - let currentTrade = { - begin: 0, - end: 0, - status: 0, - profit: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - - /* - The following counters need to survive multiple executions of the similator and keep themselves reliable. - This is challenging when the simulation is executed using Daily Files, since each execution means a new - day and these counters are meant to be kept along the whole market. - - To overcome this problem, we use the interExecutionMemory to record the values of the current execution - when finish. But there are a few details: - - 1. When the process is at the head of the market, it executes multple times at the same day. - 2. The same code serves execution from Market Files. - 3. In Daily Files we are receiving candles from the current day and previous day, so we need to take care of - not adding to the counters duplicate info when processing the day before candles. - - To overcome these challenges we record the values of the counters and variables on the interExecutionMemory only when - the day is complete and if we have a currentDay. That menas that for Market Files we will never use - interExecutionMemory. - */ - - let balanceAssetA = initialBalanceA; - let balanceAssetB = initialBalanceB; - - let lastTradeProfitLoss = 0; - let profit = 0; - let lastTradeROI = 0; - - let roundtrips = 0; - let fails = 0; - let hits = 0; - let periods = 0; - - /* Message to the Simulation Executor */ - - let orderId = 0; - let messageId = 0; - - let yesterday = {}; - - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - yesterday.lastTradeProfitLoss = 0; - yesterday.profit = 0; - yesterday.lastTradeROI = 0; - - yesterday.Roundtrips = 0; - yesterday.fails = 0; - yesterday.hits = 0; - yesterday.Periods = 0; - - yesterday.orderId = 0; - yesterday.messageId = 0; - - yesterday.hitRatio = 0; - yesterday.ROI = 0; - yesterday.anualizedRateOfReturn = 0; - - if (interExecutionMemory.roundtrips === undefined) { - - /* Initialize the data structure we will use inter execution. */ - - interExecutionMemory.balanceAssetA = balanceAssetA; - interExecutionMemory.balanceAssetB = balanceAssetB; - - interExecutionMemory.lastTradeProfitLoss = lastTradeProfitLoss; - interExecutionMemory.profit = profit; - interExecutionMemory.lastTradeROI = lastTradeROI; - - interExecutionMemory.roundtrips = 0; - interExecutionMemory.fails = 0; - interExecutionMemory.hits = 0; - interExecutionMemory.periods = 0; - - interExecutionMemory.orderId = 0; - interExecutionMemory.messageId = 0; - - interExecutionMemory.hitRatio = 0; - interExecutionMemory.ROI = 0; - interExecutionMemory.anualizedRateOfReturn = 0; - - } else { - - /* We get the initial values from the day previous to the candles we receive at the current execution */ - - if (currentDay.valueOf() >= startDate.valueOf() + ONE_DAY_IN_MILISECONDS) { // Only after the first day we start grabbing the balance from this memory. - - balanceAssetA = interExecutionMemory.balanceAssetA; - balanceAssetB = interExecutionMemory.balanceAssetB; - - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - } - - lastTradeProfitLoss = interExecutionMemory.lastTradeProfitLoss; - profit = interExecutionMemory.profit; - lastTradeROI = interExecutionMemory.lastTradeROI; - - roundtrips = interExecutionMemory.roundtrips; - fails = interExecutionMemory.fails; - hits = interExecutionMemory.hits; - periods = interExecutionMemory.periods; - - orderId = interExecutionMemory.orderId; - messageId = interExecutionMemory.messageId; - - hitRatio = interExecutionMemory.hitRatio; - ROI = interExecutionMemory.ROI; - anualizedRateOfReturn = interExecutionMemory.anualizedRateOfReturn; - - yesterday.hitRatio = hitRatio; - yesterday.ROI = ROI; - yesterday.anualizedRateOfReturn = anualizedRateOfReturn; - - } - - /* Main Simulation Loop: We go thourgh all the candles at this time period. */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> Main Simulation Loop -> candles.length = " + candles.length); } - - for (let i = 0; i < candles.length; i++) { - - - let candle = candles[i]; - let percentageBandwidth = percentageBandwidthMap.get(candle.begin); - let bollingerBand = bollingerBandsMap.get(candle.begin); - let bollingerChannel = getElement(bollingerChannelsArray, candle.begin, candle.end); - let bollingerSubChannel = getElement(bollingerSubChannelsArray, candle.begin, candle.end); - - //let LRC = LRCMap.get(candle.begin); - - /* If any of the needed indicators is missing, then that period is not calculated */ - - if (candle.begin < initialDate.valueOf()) { continue; } - if (bollingerBand === undefined) { continue; } - if (percentageBandwidth === undefined) { continue; } // percentageBandwidth might start after the first few candles. - if (bollingerChannel === undefined) { continue; } - if (bollingerSubChannel === undefined) { continue; } - - //if (LRC === undefined) { continue; } - - periods++; - days = periods * timePeriod / ONE_DAY_IN_MILISECONDS; - - if (currentDay !== undefined) { // This means that we are processing Daily Files - if (candle.end < currentDay.valueOf()) { - yesterday.Periods++; - } - - /* We skip the candle at the head of the market because i has not closed yet. */ - let candlesPerDay = ONE_DAY_IN_MILISECONDS / timePeriod - if (i === candles.length - 1) { - if ((candles.length < candlesPerDay) || (candles.length > candlesPerDay && candles.length < candlesPerDay * 2) ) { - /*We are at the head of the market, thus we skip the last candle because it has not close yet. */ - continue; - /* Note here that in the last candle of the first day or the second day it will use an incomplete candle and partially calculated indicators. - if we skip these two periods, then there will be a hole in the file since the last period will be missing. */ - } - } - } else { // We are processing Market Files - if (i === candles.length - 1) { - continue; - } - } - - let lastObjects = { - candle: clone(candle), - //LRC: clone(LRC), - bollingerBand: clone(bollingerBand), - percentageBandwidth: clone(percentageBandwidth), - bollingerChannel: clone(bollingerChannel), - bollingerSubChannel: clone(bollingerSubChannel) - } - - function clone(obj) { - if (null == obj || "object" != typeof obj) return obj; - var copy = obj.constructor(); - for (var attr in obj) { - if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; - } - return copy; - } - - lastObjects.candle.previous = undefined; - //lastObjects.LRC.previous = undefined; - lastObjects.bollingerBand.previous = undefined; - lastObjects.percentageBandwidth.previous = undefined; - lastObjects.bollingerChannel.previous = undefined; - lastObjects.bollingerSubChannel.previous = undefined; - - lastObjectsArray.push(lastObjects); - - if (lastObjectsArray.length > 5) { - lastObjectsArray.splice(0,1); - } - - let conditions = new Map; // Here we store the conditions values that will be use in the simulator for decision making. - let formulas = new Map; - let conditionsArrayRecord = []; // These are the records that will be saved in a file for the plotter to consume. - let conditionsArrayValues = []; // Here we store the conditions values that will be written on file for the plotter. - let formulasErrors = []; // Here we store the errors produced by all phase formulas. - let formulasValues = []; // Here we store the values produced by all phase formulas. - - /* We define and evaluate all conditions to be used later during the simulation loop. */ - - conditionsArrayRecord.push(candle.begin); - conditionsArrayRecord.push(candle.end); - - evaluateConditionsAndFormulas(tradingSystem, conditions); - - function evaluateConditionsAndFormulas(tradingSystem, conditions) { - - for (let j = 0; j < tradingSystem.strategies.length; j++) { - - let strategy = tradingSystem.strategies[j]; - - let positionSize = 0 - let positionRate = 0 - - /* Continue with the rest of the formulas and conditions */ - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOn !== undefined) { - - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - - let situation = triggerStage.triggerOn.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOn' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - - if (triggerStage.triggerOff !== undefined) { - - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - - let situation = triggerStage.triggerOff.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOff' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - - if (triggerStage.takePosition !== undefined) { - - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - - let situation = triggerStage.takePosition.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'takePosition' + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - - let openStage = strategy.openStage - - if (openStage !== undefined) { - - /* Default Values*/ - if (baseAsset === 'BTC') { - positionSize = balanceAssetA; - positionRate = candle.close; - } else { - positionSize = balanceAssetB; - positionRate = candle.close; - } - - let initialDefinition = openStage.initialDefinition - - if (initialDefinition !== undefined) { - - if (tradePositionSize !== 0) { - positionSize = tradePositionSize - } else { - if (initialDefinition.positionSize !== undefined) { - if (initialDefinition.positionSize.formula !== undefined) { - try { - positionSize = eval(initialDefinition.positionSize.formula.code); - } catch (err) { - initialDefinition.positionSize.formula.error = err.message - } - if (isNaN(positionSize)) { - if (baseAsset === 'BTC') { - positionSize = balanceAssetA; - } else { - positionSize = balanceAssetB; - } - } else { - if (baseAsset === 'BTC') { - if (positionSize > balanceAssetA) { positionSize = balanceAssetA } - } else { - if (positionSize > balanceAssetB) { positionSize = balanceAssetB } - } - } - } - } - } - - if (tradePositionRate !== 0) { - positionRate = tradePositionRate - } else { - if (initialDefinition.positionRate !== undefined) { - if (initialDefinition.positionRate.formula !== undefined) { - try { - positionRate = eval(initialDefinition.positionRate.formula.code); - } catch (err) { - initialDefinition.positionRate.formula.error = err.message - } - if (isNaN(positionRate)) { - if (baseAsset === 'BTC') { - positionRate = candle.close; - } else { - positionRate = candle.close; - } - } - } - } - } - - if (initialDefinition.stopLoss !== undefined) { - - for (let p = 0; p < initialDefinition.stopLoss.phases.length; p++) { - - let phase = initialDefinition.stopLoss.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError= "Formula evaluates to Infinity." - formulaValue = MAX_STOP_LOSS_VALUE - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_STOP_LOSS_VALUE) { - formulaValue = MIN_STOP_LOSS_VALUE - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - - if (initialDefinition.takeProfit !== undefined) { - - for (let p = 0; p < initialDefinition.takeProfit.phases.length; p++) { - - let phase = initialDefinition.takeProfit.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "Formula evaluates to Infinity." - formulaValue = MAX_TAKE_PROFIT_VALUE - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_TAKE_PROFIT_VALUE) { - formulaValue = MIN_TAKE_PROFIT_VALUE - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - } - - strategy.positionSize = positionSize - strategy.positionRate = positionRate - } - - let manageStage = strategy.manageStage - - if (manageStage !== undefined) { - - if (manageStage.stopLoss !== undefined) { - - for (let p = 0; p < manageStage.stopLoss.phases.length; p++) { - - let phase = manageStage.stopLoss.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "Formula evaluates to Infinity." - formulaValue = MAX_STOP_LOSS_VALUE - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_STOP_LOSS_VALUE) { - formulaValue = MIN_STOP_LOSS_VALUE - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - - if (manageStage.takeProfit !== undefined) { - - for (let p = 0; p < manageStage.takeProfit.phases.length; p++) { - - let phase = manageStage.takeProfit.phases[p]; - - /* Evaluate Formula */ - let formulaValue - let formulaError = '' - - if (phase.formula !== undefined) { - try { - formulaValue = eval(phase.formula.code); - if (formulaValue === Infinity) { - formulaError = "Formula evaluates to Infinity." - formulaValue = MAX_TAKE_PROFIT_VALUE - } - } catch (err) { - if (phase.formula.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - formulaError = err.message - } - } - if (isNaN(formulaValue)) { formulaValue = 0; } - if (formulaValue < MIN_TAKE_PROFIT_VALUE) { - formulaValue = MIN_TAKE_PROFIT_VALUE - } - - formulasErrors.push('"' + formulaError + '"') - formulasValues.push(formulaValue) - let key = j + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + p; - formulas.set(key, formulaValue) - } - - /* next phase event */ - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - if (condition.code !== undefined) { - newCondition(key, condition.code); - } - } - } - } - } - } - } - - function newCondition(key, node) { - - let condition; - let error = '' - let value - - try { - value = eval(node.code); - } catch (err) { - /* - One possible error is that the conditions references a .previous that is undefined. For this - reason and others, we will simply set the value to false. - */ - value = false - - if (node.code.indexOf('previous') > 0 && err.message.indexOf('of undefined') > 0) { - /* - We are not going to set an error for the casess we are using previous and the error is that the indicator is undefined. - */ - } else { - node.error = err.message - } - } - - condition = { - key: key, - value: value - }; - - conditions.set(condition.key, condition); - - if (condition.value) { - conditionsArrayValues.push(1); - } else { - conditionsArrayValues.push(0); - } - } - } - } - - /* Trigger On Conditions */ - if ( - strategyStage === 'No Stage' && - currentStrategyIndex === -1 - ) { - let minimumBalance - let maximumBalance - let balance - - if (baseAsset === 'BTC') { - balance = balanceAssetA - minimumBalance = minimumBalanceA - maximumBalance = maximumBalanceA - } else { - balance = balanceAssetB - minimumBalance = minimumBalanceB - maximumBalance = maximumBalanceB - } - - if (balance > minimumBalance && balance < maximumBalance) { - - /* - Here we need to pick a strategy, or if there is not suitable strategy for the current - market conditions, we pass until the next period. - - To pick a new strategy we will evaluate what we call the trigger on. Once we enter - into one strategy, we will ignore market conditions for others. However there is also - a strategy trigger off which can be hit before taking a position. If hit, we would - be outside a strategy again and looking for the condition to enter all over again. - - */ - - for (let j = 0; j < tradingSystem.strategies.length; j++) { - - let strategy = tradingSystem.strategies[j]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOn !== undefined) { - - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - - let situation = triggerStage.triggerOn.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + 'triggerStage' + '-' + 'triggerOn' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - strategyStage = 'Trigger Stage'; - currentStrategyIndex = j; - currentStrategy.begin = candle.begin; - currentStrategy.beginRate = candle.min; - currentStrategy.endRate = candle.min; // In case the strategy does not get exited - break; - } - } - } - } - } - } else { - let stopRunningDate = new Date(candle.begin) - if (balance < minimumBalance) { - tradingSystem.error = "Min Balance @ " + stopRunningDate.toUTCString() - } - if (balance > maximumBalance) { - tradingSystem.error = "Max Balance @ " + stopRunningDate.toUTCString() - } - } - } - - /* Trigger Off Condition */ - if (strategyStage === 'Trigger Stage') { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.triggerOff !== undefined) { - - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - - let situation = triggerStage.triggerOff.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = currentStrategyIndex + '-' + 'triggerStage' + '-' + 'triggerOff' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - currentStrategy.number = currentStrategyIndex - currentStrategy.end = candle.end; - currentStrategy.endRate = candle.min; - currentStrategy.status = 1; - strategyStage = 'No Stage'; - currentStrategyIndex = -1; - break; - } - } - } - } - } - - /* Take Position Condition */ - if (strategyStage === 'Trigger Stage') { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - - if (triggerStage.takePosition !== undefined) { - - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - - let situation = triggerStage.takePosition.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = currentStrategyIndex + '-' + 'triggerStage' + '-' + 'takePosition' + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - type = '"Take Position"'; - - strategyStage = 'Open Stage'; - stopLossStage = 'Open Stage'; - takeProfitStage = 'Open Stage'; - stopLossPhase = 1; - takeProfitPhase = 1; - currentTrade.begin = candle.begin; - currentTrade.beginRate = candle.close; - takePositionNow = true - break; - } - } - } - } - } - - /* Stop Loss Management */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - - checkStopPhases() - calculateStopLoss(); - - } - - function checkStopPhases() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let parentNode - let j = currentStrategyIndex - let stageKey - let initialDefinitionKey = '' - let p - - if (stopLossStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.stopLoss !== undefined) { - parentNode = openStage.initialDefinition - initialDefinitionKey = '-' + 'initialDefinition' - stageKey = 'openStage' - p = stopLossPhase - 1 - } - } - } - - if (stopLossStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.stopLoss !== undefined) { - parentNode = manageStage - stageKey = 'manageStage' - p = stopLossPhase - 2 - } - } - - let phase = parentNode.stopLoss.phases[p]; - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + stageKey + initialDefinitionKey + '-' + 'stopLoss' + '-' + p + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - stopLossPhase++; - stopLossStage = 'Manage Stage' - if (takeProfitPhase > 1) { strategyStage = 'Manage Stage' } - return; - } - } - } - } - - function calculateStopLoss() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let phase - let key - - if (stopLossStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.stopLoss !== undefined) { - phase = openStage.initialDefinition.stopLoss.phases[stopLossPhase - 1]; - key = currentStrategyIndex + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'stopLoss' + '-' + (stopLossPhase - 1); - } - } - } - - if (stopLossStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.stopLoss !== undefined) { - phase = manageStage.stopLoss.phases[stopLossPhase - 2]; - key = currentStrategyIndex + '-' + 'manageStage' + '-' + 'stopLoss' + '-' + (stopLossPhase - 2); - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - stopLoss = formulas.get(key) - } - } - } - - /* Take Profit Management */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - - checkTakeProfitPhases(); - calculateTakeProfit(); - - } - - function checkTakeProfitPhases() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let parentNode - let j = currentStrategyIndex - let stageKey - let initialDefinitionKey = '' - let p - - if (takeProfitStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.takeProfit !== undefined) { - parentNode = openStage.initialDefinition - initialDefinitionKey = '-' + 'initialDefinition' - stageKey = 'openStage' - p = takeProfitPhase - 1 - } - } - } - - if (takeProfitStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.takeProfit !== undefined) { - parentNode = manageStage - stageKey = 'manageStage' - p = takeProfitPhase - 2 - } - } - - let phase = parentNode.takeProfit.phases[p]; - - let nextPhaseEvent = phase.nextPhaseEvent; - if (nextPhaseEvent !== undefined) { - - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - - let situation = nextPhaseEvent.situations[k]; - let passed = true; - - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m]; - let key = j + '-' + stageKey + initialDefinitionKey + '-' + 'takeProfit' + '-' + p + '-' + k + '-' + m; - - let value = false - if (conditions.get(key) !== undefined) { - value = conditions.get(key).value; - } - - if (value === false) { passed = false; } - } - - if (passed) { - - takeProfitPhase++; - takeProfitStage = 'Manage Stage' - if (stopLossPhase > 1) { strategyStage = 'Manage Stage' } - return; - } - } - } - } - - function calculateTakeProfit() { - - let strategy = tradingSystem.strategies[currentStrategyIndex]; - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let phase - let key - - if (takeProfitStage === 'Open Stage' && openStage !== undefined) { - if (openStage.initialDefinition !== undefined) { - if (openStage.initialDefinition.takeProfit !== undefined) { - phase = openStage.initialDefinition.takeProfit.phases[takeProfitPhase - 1]; - key = currentStrategyIndex + '-' + 'openStage' + '-' + 'initialDefinition' + '-' + 'takeProfit' + '-' + (takeProfitPhase - 1); - } - } - } - - if (takeProfitStage === 'Manage Stage' && manageStage !== undefined) { - if (manageStage.takeProfit !== undefined) { - phase = manageStage.takeProfit.phases[takeProfitPhase - 2]; - key = currentStrategyIndex + '-' + 'manageStage' + '-' + 'takeProfit' + '-' + (takeProfitPhase - 2); - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - takeProfit = formulas.get(key) - } - } - } - - /* Checking if Stop or Take Profit were hit */ - if ( - (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage') && - takePositionNow !== true - ) { - - /* Checking what happened since the last execution. We need to know if the Stop Loss - or our Take Profit were hit. */ - - /* Stop Loss condition: Here we verify if the Stop Loss was hitted or not. */ - - if ((baseAsset === 'BTC' && candle.max >= stopLoss) || (baseAsset !== 'BTC' && candle.min <= stopLoss)) { - - if (baseAsset === 'BTC') { - balanceAssetA = balanceAssetA + balanceAssetB / stopLoss; - balanceAssetB = 0; - } else { - balanceAssetB = balanceAssetB + balanceAssetA * stopLoss; - balanceAssetA = 0; - } - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - } - } - - marketRate = stopLoss; - type = '"Close@StopLoss"'; - strategyStage = 'Close Stage'; - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - currentTrade.end = candle.end; - currentTrade.status = 1; - currentTrade.exitType = 1; - currentTrade.endRate = stopLoss; - - currentStrategy.number = currentStrategyIndex - currentStrategy.end = candle.end; - currentStrategy.endRate = candle.min; - currentStrategy.status = 1; - } - - /* Take Profit condition: Here we verify if the Take Profit was filled or not. */ - - if ((baseAsset === 'BTC' && candle.min <= takeProfit) || (baseAsset !== 'BTC' && candle.max >= takeProfit)) { - - if (baseAsset === 'BTC') { - balanceAssetA = balanceAssetA + balanceAssetB / takeProfit; - balanceAssetB = 0; - } else { - balanceAssetB = balanceAssetB + balanceAssetA * takeProfit; - balanceAssetA = 0; - } - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - } - } - - marketRate = takeProfit; - type = '"Close@TakeProfit"'; - strategyStage = 'Close Stage'; - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - currentTrade.end = candle.end; - currentTrade.status = 1; - currentTrade.exitType = 2; - currentTrade.endRate = takeProfit; - - currentStrategy.number = currentStrategyIndex - currentStrategy.end = candle.end; - currentStrategy.endRate = candle.min; - currentStrategy.status = 1; - } - } - - /* Taking a Position */ - if ( - takePositionNow === true - ) { - takePositionNow = false - - /* tradePositionSize default is the whole balance if no size was defined by the user */ - if (baseAsset === 'BTC') { - tradePositionSize = balanceAssetA; - } else { - tradePositionSize = balanceAssetB; - } - tradePositionRate = candle.close - - /* Check if the user defined a position size or rate */ - let strategy = tradingSystem.strategies[currentStrategyIndex]; - - tradePositionSize = strategy.positionSize; - tradePositionRate = strategy.positionRate; - - calculateTakeProfit(); - calculateStopLoss(); - - marketRate = candle.close; - - previousBalanceAssetA = balanceAssetA; - previousBalanceAssetB = balanceAssetB; - - lastTradeProfitLoss = 0; - lastTradeROI = 0; - - if (baseAsset === 'BTC') { - balanceAssetB = balanceAssetB + tradePositionSize * tradePositionRate; - balanceAssetA = balanceAssetA - tradePositionSize; - } else { - balanceAssetA = balanceAssetA + tradePositionSize / tradePositionRate; - balanceAssetB = balanceAssetB - tradePositionSize; - } - - positionInstant = candle.end; - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.balanceAssetA = balanceAssetA; - yesterday.balanceAssetB = balanceAssetB; - - yesterday.lastTradeProfitLoss = lastTradeProfitLoss; - yesterday.lastTradeROI = lastTradeROI; - } - } - - addRecord(); - continue; - } - - /* Closing a Position */ - if (strategyStage === 'Close Stage') { - - roundtrips++; - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.Roundtrips++; - } - } - - if (baseAsset === 'BTC') { - lastTradeProfitLoss = balanceAssetA - previousBalanceAssetA; - lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize; - if (isNaN(lastTradeROI)) { lastTradeROI = 0; } - profit = balanceAssetA - initialBalanceA; - } else { - lastTradeProfitLoss = balanceAssetB - previousBalanceAssetB; - lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize; - if (isNaN(lastTradeROI)) { lastTradeROI = 0; } - profit = balanceAssetB - initialBalanceB; - } - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.lastTradeProfitLoss = lastTradeProfitLoss; - yesterday.profit = profit; - yesterday.lastTradeROI = lastTradeROI; - } - } - - currentTrade.lastTradeROI = lastTradeROI; - currentTrade.stopRate = stopLoss; - - if (lastTradeProfitLoss > 0) { - hits++; - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.hits++; - } - } - - } else { - fails++; - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.fails++; - } - } - } - - if (baseAsset === 'BTC') { - ROI = (initialBalanceA + profit) / initialBalanceA - 1; - hitRatio = hits / roundtrips; - anualizedRateOfReturn = ROI / days * 365; - } else { - ROI = (initialBalanceB + profit) / initialBalanceB - 1; - hitRatio = hits / roundtrips; - anualizedRateOfReturn = ROI / days * 365; - } - - if (currentDay !== undefined) { - if (positionInstant < currentDay.valueOf()) { - yesterday.ROI = ROI; - yesterday.hitRatio = hitRatio; - yesterday.anualizedRateOfReturn = anualizedRateOfReturn; - } - } - - - addRecord(); - - currentStrategyIndex = -1; - stopLoss = 0; - tradePositionRate = 0; - tradePositionSize = 0; - positionInstant = undefined; - takeProfit = 0; - strategyStage = 'No Stage'; - stopLossStage = 'No Stage'; - takeProfitStage = 'No Stage'; - stopLossPhase = 0; - takeProfitPhase = 0; - continue; - - } - - /* Not a buy or sell condition */ - - marketRate = candle.close; - addRecord(); - - function addRecord() { - - // Since we are going to write the message to a file that the Simulation Executor is going to read, we use the abbreviations. - let messageType; - let message; - let simulationRecord; - let executionRecord; - let executionMessage; - - messageId++; - - if (strategyStage === 'Open Stage' || strategyStage === 'Manage Stage' || type === '"Close@TakeProfit"' || type === '"Close@StopLoss"') { - - if (type === '"Take Position"') { - messageType = MESSAGE_TYPE.Order; - orderId++; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> addRecord -> Taking Position Now. "); } - - } else { - if (type === '"Close@TakeProfit"' || type === '"Close@StopLoss"') { - messageType = MESSAGE_TYPE.OrderClose; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> addRecord -> Closing Position Now. "); } - - } else { - messageType = MESSAGE_TYPE.OrderUpdate; - } - } - - let exitOutcome = "" - if (messageType === MESSAGE_TYPE.OrderClose && type === '"Close@TakeProfit"') { - exitOutcome = "TP" - } - if (messageType === MESSAGE_TYPE.OrderClose && type === '"Close@StopLoss"') { - exitOutcome = "SL" - } - - executionMessage = createMessage( - messageId, - MESSAGE_ENTITY.SimulationEngine, - MESSAGE_ENTITY.SimulationExecutor, - messageType, - (new Date()).valueOf(), - orderId.toString(), - ORDER_CREATOR.SimulationEngine, - (new Date()).valueOf(), - ORDER_OWNER.User, - global.EXCHANGE_NAME, - "BTC_USDT", - 0, - ORDER_TYPE.Limit, - tradePositionRate, - stopLoss, - takeProfit, - ORDER_DIRECTION.Sell, - -1, - ORDER_STATUS.Signaled, - 0, - exitOutcome) - - } - else { - - executionMessage = createMessage( - messageId, - MESSAGE_ENTITY.SimulationEngine, - MESSAGE_ENTITY.SimulationExecutor, - MESSAGE_TYPE.HeartBeat, - (new Date()).valueOf(), - "", - "", - 0, - "", - "", - "", - 0, - "", - 0, - 0, - 0, - "", - 0, - "", - 0, - "", - "") - } - - executionRecord = { - begin: candle.begin, - end: candle.end, - executionRecord: executionMessage - } - - executionArray.push(executionRecord) - - let strategyStageNumber - switch (strategyStage) { - case 'No Stage': { - strategyStageNumber = 0 - break - } - case 'Trigger Stage': { - strategyStageNumber = 1 - break - } - case 'Open Stage': { - strategyStageNumber = 2 - break - } - case 'Manage Stage': { - strategyStageNumber = 3 - break - } - case 'Close Stage': { - strategyStageNumber = 4 - break - } - } - - if (balanceAssetA === Infinity) { - balanceAssetA = Number.MAX_SAFE_INTEGER - } - - if (balanceAssetB === Infinity) { - balanceAssetB = Number.MAX_SAFE_INTEGER - } - - let quotedBaseAsset = '"' + baseAsset + '"' - - simulationRecord = { - begin: candle.begin, - end: candle.end, - type: type, - marketRate: marketRate, - amount: 1, - balanceA: balanceAssetA, - balanceB: balanceAssetB, - profit: profit, - lastTradeProfitLoss: lastTradeProfitLoss, - stopLoss: stopLoss, - roundtrips: roundtrips, - hits: hits, - fails: fails, - hitRatio: hitRatio, - ROI: ROI, - periods: periods, - days: days, - anualizedRateOfReturn: anualizedRateOfReturn, - positionRate: tradePositionRate, - lastTradeROI: lastTradeROI, - strategy: currentStrategyIndex, - strategyStageNumber: strategyStageNumber, - takeProfit: takeProfit, - stopLossPhase: stopLossPhase, - takeProfitPhase: takeProfitPhase, - executionRecord: executionMessage, - positionSize: tradePositionSize, - initialBalanceA: initialBalanceA, - minimumBalanceA: minimumBalanceA, - maximumBalanceA: maximumBalanceA, - initialBalanceB: initialBalanceB, - minimumBalanceB: minimumBalanceB, - maximumBalanceB: maximumBalanceB, - baseAsset: quotedBaseAsset - } - - recordsArray.push(simulationRecord); - - type = '""'; - - /* Prepare the information for the Conditions File */ - - conditionsArrayRecord.push(currentStrategyIndex); - conditionsArrayRecord.push(strategyStageNumber); - conditionsArrayRecord.push(stopLossPhase); - conditionsArrayRecord.push(takeProfitPhase); - conditionsArrayRecord.push(conditionsArrayValues); - conditionsArrayRecord.push(formulasErrors); - conditionsArrayRecord.push(formulasValues); - - conditionsArray.push(conditionsArrayRecord); - - /* Prepare the information for the Strategies File*/ - - if ( - (currentStrategy.begin !== 0 && currentStrategy.end !== 0) || - (currentStrategy.begin !== 0 && i === candles.length - 1 && lastCandle.end !== lastInstantOfTheDay) - ) { - - strategiesArray.push(currentStrategy); - - currentStrategy = { - begin: 0, - end: 0, - status: 0, - number: 0, - beginRate: 0, - endRate: 0 - } - } - - /* Prepare the information for the Trades File */ - - if ( - (currentTrade.begin !== 0 && currentTrade.end !== 0) || - (currentTrade.begin !== 0 && i === candles.length - 1 && lastCandle.end !== lastInstantOfTheDay) - ) { - - currentTrade.profit = lastTradeProfitLoss; - - tradesArray.push(currentTrade); - - currentTrade = { - begin: 0, - end: 0, - status: 0, - lastTradeROI: 0, - exitType: 0, - beginRate: 0, - endRate: 0 - } - } - } - } - - /* - Before returning we need to see if we have to record some of our counters at the interExecutionMemory. - To do that, the condition to be met is that this execution must include all candles of the currentDay. - */ - - if (currentDay !== undefined) { - - if (lastCandle.end === lastInstantOfTheDay) { - - interExecutionMemory.balanceAssetA = yesterday.balanceAssetA; - interExecutionMemory.balanceAssetB = yesterday.balanceAssetB; - interExecutionMemory.lastTradeProfitLoss = yesterday.lastTradeProfitLoss; - interExecutionMemory.profit = yesterday.profit; - interExecutionMemory.lastTradeROI = yesterday.lastTradeROI; - - interExecutionMemory.roundtrips = interExecutionMemory.roundtrips + yesterday.Roundtrips; - interExecutionMemory.fails = interExecutionMemory.fails + yesterday.fails; - interExecutionMemory.hits = interExecutionMemory.hits + yesterday.hits; - interExecutionMemory.periods = interExecutionMemory.periods + yesterday.Periods; - - interExecutionMemory.messageId = interExecutionMemory.messageId + yesterday.messageId; - interExecutionMemory.orderId = interExecutionMemory.orderId + yesterday.orderId; - - interExecutionMemory.hitRatio = yesterday.hitRatio; - interExecutionMemory.ROI = yesterday.ROI; - interExecutionMemory.anualizedRateOfReturn = yesterday.anualizedRateOfReturn; - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] runSimulation -> callback -> recordsArray.length = " + recordsArray.length); } - - callback(tradingSystem, executionArray, recordsArray, conditionsArray, strategiesArray, tradesArray, lastObjectsArray); - - function getElement(pArray, begin, end) { - - let element; - - for (let i = 0; i < pArray.length; i++) { - - element = pArray[i]; - - if (begin >= element.begin && end <= element.end) { - return element - } - } - - return - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] runSimulation -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildLRC(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildLRC -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let LRC = { - begin: dataFile[i][0], - end: dataFile[i][1], - _15: dataFile[i][2], - _30: dataFile[i][3], - _60: dataFile[i][4] - }; - - if (previous !== undefined) { - - if (previous._15 > LRC._15) { LRC.direction15 = 'Down'; } - if (previous._15 < LRC._15) { LRC.direction15 = 'Up'; } - if (previous._15 === LRC._15) { LRC.direction15 = 'Side'; } - - if (previous._30 > LRC._30) { LRC.direction30 = 'Down'; } - if (previous._30 < LRC._30) { LRC.direction30 = 'Up'; } - if (previous._30 === LRC._30) { LRC.direction30 = 'Side'; } - - if (previous._60 > LRC._60) { LRC.direction60 = 'Down'; } - if (previous._60 < LRC._60) { LRC.direction60 = 'Up'; } - if (previous._60 === LRC._60) { LRC.direction60 = 'Side'; } - - } - - LRC.previous = previous; - - LRCMap.set(LRC.begin, LRC); - - previous = LRC; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildLRC -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildPercentageBandwidthMap(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildPercentageBandwidthMap -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let percentageBandwidth = { - begin: dataFile[i][0], - end: dataFile[i][1], - value: dataFile[i][2], - movingAverage: dataFile[i][3], - bandwidth: dataFile[i][4] - }; - - if (previous !== undefined) { - - if (previous.movingAverage > percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Down'; } - if (previous.movingAverage < percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Up'; } - if (previous.movingAverage === percentageBandwidth.movingAverage) { percentageBandwidth.direction = 'Side'; } - - } - - percentageBandwidth.previous = previous; - - percentageBandwidthMap.set(percentageBandwidth.begin, percentageBandwidth); - - previous = percentageBandwidth; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildPercentageBandwidthMap -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerBandsMap(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerBandsMap -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerBand = { - begin: dataFile[i][0], - end: dataFile[i][1], - movingAverage: dataFile[i][2], - standardDeviation: dataFile[i][3], - deviation: dataFile[i][4] - }; - - if (previous !== undefined) { - - if (previous.movingAverage > bollingerBand.movingAverage) { bollingerBand.direction = 'Down'; } - if (previous.movingAverage < bollingerBand.movingAverage) { bollingerBand.direction = 'Up'; } - if (previous.movingAverage === bollingerBand.movingAverage) { bollingerBand.direction = 'Side'; } - - } - - bollingerBand.previous = previous; - - bollingerBandsMap.set(bollingerBand.begin, bollingerBand); - - previous = bollingerBand; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerBandsMap -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerChannelsArray(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerChannelsArray -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerChannel = { - begin: dataFile[i][0], - end: dataFile[i][1], - direction: dataFile[i][2], - period: dataFile[i][3] - }; - - bollingerChannel.previous = previous; - - bollingerChannelsArray.push(bollingerChannel); - - previous = bollingerChannel; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerChannelsArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildBollingerSubChannelsArray(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildBollingerSubChannelsArray -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let bollingerSubChannel = { - begin: dataFile[i][0], - end: dataFile[i][1], - direction: dataFile[i][2], - slope: dataFile[i][3], - period: dataFile[i][4], - firstMovingAverage: dataFile[i][5], - lastMovingAverage: dataFile[i][6], - firstDeviation: dataFile[i][7], - lastDeviation: dataFile[i][8] - }; - - bollingerSubChannel.previous = previous; - - bollingerSubChannelsArray.push(bollingerSubChannel); - - previous = bollingerSubChannel; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildBollingerSubChannelsArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandles(dataFile, callBackFunction) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] buildCandles -> Entering function."); } - - try { - - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = dataFile[i][0]; - candle.max = dataFile[i][1]; - - candle.open = dataFile[i][2]; - candle.close = dataFile[i][3]; - - candle.begin = dataFile[i][4]; - candle.end = dataFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'Down'; } - if (candle.open < candle.close) { candle.direction = 'Up'; } - if (candle.open === candle.close) { candle.direction = 'Side'; } - - candle.previous = previous; - - candles.push(candle); - - previous = candle; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Daily.js b/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Daily.js deleted file mode 100644 index ef105c9a6..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Daily.js +++ /dev/null @@ -1,553 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "User Bot"; - - const EXECUTION_FOLDER_NAME = "Trading-Execution"; - const SIMULATED_RECORDS_FOLDER_NAME = "Trading-Simulation"; - const CONDITIONS_FOLDER_NAME = "Simulation-Conditions"; - const STRATEGIES_FOLDER_NAME = "Simulation-Strategies"; - const TRADES_FOLDER_NAME = "Simulation-Trades"; - - const commons = COMMONS.newCommons(bot, logger, UTILITIES); - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - let dataDependencies; - - return thisObject; - - function initialize(pDataDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - dataDependencies = pDataDependencies; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(dataFiles, timePeriod, outputPeriodLabel, currentDay, startDate, endDate, interExecutionMemory, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = global.MARKET; - let dataFile; - - let recordsArray - let conditionsArray - let strategiesArray - let tradesArray - let lastObjectsArray - - let tradingSystem = {}; - - commons.initializeData(); - - for (let i = 0; i < dataDependencies.config.length; i++) { - - let dependency = dataDependencies.config[i]; - dataFile = dataFiles[i]; - - switch (i) { - - case 0: { - commons.buildLRC(dataFile, callBackFunction); - break; - } - case 1: { - commons.buildPercentageBandwidthMap(dataFile, callBackFunction); - break; - } - case 2: { - commons.buildBollingerBandsMap(dataFile, callBackFunction); - break; - } - case 3: { - commons.buildBollingerChannelsArray(dataFile, callBackFunction); - break; - } - case 4: { - commons.buildBollingerSubChannelsArray(dataFile, callBackFunction); - break; - } - case 5: { - commons.buildCandles(dataFile, callBackFunction); - break; - } - } - } - - commons.runSimulation( - timePeriod, - currentDay, - startDate, - endDate, - interExecutionMemory, - writeFiles, - callBackFunction) - - function writeFiles(pTradingSystem, pExecutionArray, pRecordsArray, pConditionsArray, pStrategiesArray, pTradesArray, pLastObjectsArray) { - - tradingSystem = pTradingSystem - executionArray = pExecutionArray - recordsArray = pRecordsArray - conditionsArray = pConditionsArray - strategiesArray = pStrategiesArray - tradesArray = pTradesArray - lastObjectsArray = pLastObjectsArray - - writeExecutionFile() - } - - function writeExecutionFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < executionArray.length; i++) { - - let record = executionArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - JSON.stringify(record.executionRecord) + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + EXECUTION_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + outputPeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeRecordsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeRecordsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < recordsArray.length; i++) { - - let record = recordsArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.type + "," + - record.marketRate + "," + - record.amount + "," + - record.balanceA + "," + - record.balanceB + "," + - record.profit + "," + - record.lastTradeProfitLoss + "," + - record.stopLoss + "," + - record.roundtrips + "," + - record.hits + "," + - record.fails + "," + - record.hitRatio + "," + - record.ROI + "," + - record.periods + "," + - record.days + "," + - record.anualizedRateOfReturn + "," + - record.positionRate + "," + - record.lastTradeROI + "," + - record.strategy + "," + - record.strategyStageNumber + "," + - record.takeProfit + "," + - record.stopLossPhase + "," + - record.takeProfitPhase + "," + - JSON.stringify(record.executionRecord) + "," + - record.positionSize + "," + - record.initialBalanceA + "," + - record.minimumBalanceA + "," + - record.maximumBalanceA + "," + - record.initialBalanceB + "," + - record.minimumBalanceB + "," + - record.maximumBalanceB + "," + - record.baseAsset + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + outputPeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeConditionsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeConditionsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < conditionsArray.length; i++) { - - let record = conditionsArray[i]; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - let conditions = ""; - let conditionsSeparator = ""; - - /* Will only add to the file the records of the current day */ - - if (record.begin < currentDay.valueOf()) { continue; } - - for (let j = 0; j < record.length - 3; j++) { - conditions = conditions + conditionsSeparator + record[j]; - if (conditionsSeparator === "") { conditionsSeparator = ","; } - } - - conditions = conditions + conditionsSeparator + '[' + record[record.length - 3] + ']'; // The last item contains an Array of condition values. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 2] + ']'; // The last item contains an Array of formulaErrors. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 1] + ']'; // The last item contains an Array of formulaValues. - - fileContent = fileContent + separator + '[' + conditions + ']'; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - fileContent = "[" + JSON.stringify(tradingSystem) + "," + JSON.stringify(lastObjectsArray) + "," + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + outputPeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeStrategiesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStrategiesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < strategiesArray.length; i++) { - let record = strategiesArray[i]; - - /* Will only add to the file the records of the current day. In this case since objects can span more than one day, we add all of the objects that ends - at the current date. */ - - if (record.end < currentDay.valueOf()) { continue; } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.number + "," + - record.beginRate + "," + - record.endRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + outputPeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeTradesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeTradesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < tradesArray.length; i++) { - - let record = tradesArray[i]; - - /* Will only add to the file the records of the current day. In this case since objects can span more than one day, we add all of the objects that ends - at the current date. */ - - if (record.end < currentDay.valueOf()) { continue; } - if (record.stopRate === undefined) { record.stopRate = 0} - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.lastTradeROI + "," + - record.beginRate + "," + - record.endRate + "," + - record.exitType + "," + - record.stopRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + outputPeriodLabel + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Market.js b/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Market.js deleted file mode 100644 index a4dc38283..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/User.Bot.Market.js +++ /dev/null @@ -1,518 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "User Bot"; - - const EXECUTION_FOLDER_NAME = "Trading-Execution"; - const SIMULATED_RECORDS_FOLDER_NAME = "Trading-Simulation"; - const CONDITIONS_FOLDER_NAME = "Simulation-Conditions"; - const STRATEGIES_FOLDER_NAME = "Simulation-Strategies"; - const TRADES_FOLDER_NAME = "Simulation-Trades"; - - const commons = COMMONS.newCommons(bot, logger, UTILITIES); - - thisObject = { - initialize: initialize, - start: start - }; - - let dataDependencies; - - return thisObject; - - function initialize(pDataDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - dataDependencies = pDataDependencies; - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(dataFiles, timePeriod, outputPeriodLabel, startDate, endDate, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = global.MARKET; - let dataFile; - - let recordsArray - let conditionsArray - let strategiesArray - let tradesArray - let lastObjectsArray - - let tradingSystem = {}; - let interExecutionMemory = {}; - let currentDay = bot.processDatetime; - - commons.initializeData(); - - for (let i = 0; i < dataDependencies.config.length; i++) { - - let dependency = dataDependencies.config[i]; - dataFile = dataFiles[i]; - - switch (i) { - - case 0: { - commons.buildLRC(dataFile, callBackFunction); - break; - } - case 1: { - commons.buildPercentageBandwidthMap(dataFile, callBackFunction); - break; - } - case 2: { - commons.buildBollingerBandsMap(dataFile, callBackFunction); - break; - } - case 3: { - commons.buildBollingerChannelsArray(dataFile, callBackFunction); - break; - } - case 4: { - commons.buildBollingerSubChannelsArray(dataFile, callBackFunction); - break; - } - case 5: { - commons.buildCandles(dataFile, callBackFunction); - break; - } - } - } - - commons.runSimulation( - timePeriod, - currentDay, - startDate, - endDate, - interExecutionMemory, - writeFiles, - callBackFunction) - - function writeFiles(pTradingSystem, pExecutionArray, pRecordsArray, pConditionsArray, pStrategiesArray, pTradesArray, pLastObjectsArray) { - - tradingSystem = pTradingSystem - executionArray = pExecutionArray - recordsArray = pRecordsArray - conditionsArray = pConditionsArray - strategiesArray = pStrategiesArray - tradesArray = pTradesArray - lastObjectsArray = pLastObjectsArray - - writeExecutionFile() - } - - function writeExecutionFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < executionArray.length; i++) { - - let record = executionArray[i]; - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - JSON.stringify(record.executionRecord) + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + EXECUTION_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + outputPeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeExecutionFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeRecordsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeExecutionFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeRecordsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < recordsArray.length; i++) { - - let record = recordsArray[i]; - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.type + "," + - record.marketRate + "," + - record.amount + "," + - record.balanceA + "," + - record.balanceB + "," + - record.profit + "," + - record.lastTradeProfitLoss + "," + - record.stopLoss + "," + - record.roundtrips + "," + - record.hits + "," + - record.fails + "," + - record.hitRatio + "," + - record.ROI + "," + - record.periods + "," + - record.days + "," + - record.anualizedRateOfReturn + "," + - record.positionRate + "," + - record.lastTradeROI + "," + - record.strategy + "," + - record.strategyStageNumber + "," + - record.takeProfit + "," + - record.stopLossPhase + "," + - record.takeProfitPhase + "," + - JSON.stringify(record.executionRecord) + "," + - record.positionSize + "," + - record.initialBalanceA + "," + - record.minimumBalanceA + "," + - record.maximumBalanceA + "," + - record.initialBalanceB + "," + - record.minimumBalanceB + "," + - record.maximumBalanceB + "," + - record.baseAsset + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + outputPeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeRecordsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeConditionsFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeRecordsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeConditionsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < conditionsArray.length; i++) { - - let record = conditionsArray[i]; - - let conditions = ""; - let conditionsSeparator = ""; - - for (let j = 0; j < record.length - 3; j++) { - conditions = conditions + conditionsSeparator + record[j]; - if (conditionsSeparator === "") { conditionsSeparator = ","; } - } - - conditions = conditions + conditionsSeparator + '[' + record[record.length - 3] + ']'; // The last item contains an Array of condition values. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 2] + ']'; // The last item contains an Array of formulaErrors. - conditions = conditions + conditionsSeparator + '[' + record[record.length - 1] + ']'; // The last item contains an Array of formulaValues. - - fileContent = fileContent + separator + '[' + conditions + ']'; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - fileContent = "[" + JSON.stringify(tradingSystem) + "," + JSON.stringify(lastObjectsArray) + "," + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + outputPeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeConditionsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeStrategiesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeConditionsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStrategiesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < strategiesArray.length; i++) { - let record = strategiesArray[i]; - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.number + "," + - record.beginRate + "," + - record.endRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + outputPeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStrategiesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - writeTradesFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStrategiesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeTradesFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (let i = 0; i < tradesArray.length; i++) { - - let record = tradesArray[i]; - if (record.stopRate === undefined) { record.stopRate = 0 } - - fileContent = fileContent + separator + '[' + - record.begin + "," + - record.end + "," + - record.status + "," + - record.lastTradeROI + "," + - record.beginRate + "," + - record.endRate + "," + - record.exitType + "," + - record.stopRate + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - - let filePathRoot = bot.devTeam + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; - let filePath = filePathRoot + "/Output/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + outputPeriodLabel; - filePath += '/' + fileName - - fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeTradesFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB); - - callBackFunction(err); - return; - - } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTradesFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/this.bot.config.json b/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/this.bot.config.json deleted file mode 100644 index 15b52e5e1..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/Simulator/this.bot.config.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "displayName": "Jason", - "codeName": "AAJason", - "type": "Indicator", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "AAMasters", - "profilePicture": "Jason.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Multi-Period-Market", - "description": "Produces a single file for each time period covering all the market.", - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "framework": { - "name": "Multi-Period-Market", - "startDate": { - "fixedDate": "2018-07-01" - }, - "endDate": { - } - }, - "statusDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - } - ], - "dataDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "LRC-Points", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Percentage-Bandwidth", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Bands", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Sub-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - } - ] - }, - { - "name": "Multi-Period-Daily", - "description": "Produces a Daily File at each time period.", - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "framework": { - "name": "Multi-Period-Daily", - "validPeriods": [ "15-min", "10-min", "05-min"], - "startDate": { - "fixedDate": "2018-07-01" - }, - "endDate": { - "takeItFromStatusDependency": 1 - } - }, - "statusDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AACharly", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Historic-Trades", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - } - ], - "dataDependencies": [ - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "LRC-Points", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Percentage-Bandwidth", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAChris", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Bands", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAPaula", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Bollinger-Standard-Sub-Channels", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - }, - { - "devTeam": "AAMasters", - "bot": "AAOlivia", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - } - ] - } - ], - "products": [ - { - "codeName": "Trading-Simulation", - "displayName": "Trading Simulation", - "description": "Trading Simulation", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "15-min", "10-min", "05-min" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Trading-Simulation/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "TradingSimulation" - } - }, - { - "codeName": "Simulation-Conditions", - "displayName": "Simulation Conditions", - "description": "Simulation Conditions", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "15-min", "10-min", "05-min" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Conditions/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Conditions" - } - }, - { - "codeName": "Simulation-Strategies", - "displayName": "Simulation Strategies", - "description": "Simulation Strategies", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "15-min", "10-min", "05-min" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Strategies/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Strategies" - } - }, - { - "codeName": "Simulation-Trades", - "displayName": "Simulation Trades", - "description": "Simulation Trades", - "storageAccount": "aajason", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "15-min", "10-min", "05-min" ], - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "AAMasters/AAJason.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Simulation-Trades/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "Trades" - } - } - ] -} diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/User.Bot.js b/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/User.Bot.js deleted file mode 100644 index ac5a643ea..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/User.Bot.js +++ /dev/null @@ -1,915 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger) { - - // Variable used for logs, which will be passed to the logger instance - const MODULE_NAME = 'User Bot' - const LOG_INFO = true - let assistant, fileStorage - let autopilotControl = false - - const orderMessage = require("@superalgos/mqservice/orderMessage/orderMessage") - - const { - MESSAGE_ENTITY, MESSAGE_TYPE, ORDER_CREATOR, ORDER_TYPE, ORDER_OWNER, - ORDER_DIRECTION, ORDER_STATUS, ORDER_EXIT_OUTCOME, ORDER_MARGIN_ENABLED, - getMessage, createMessageFromObject - } = orderMessage.newOrderMessage() - - const axios = require('axios') - const util = require('util') - - /* - This objects returns two public functions that will be used to integrate with the platform. - */ - return { - initialize: initialize, - start: start, - setAutopilot: setAutopilot, - executorLogic: executorLogic - } - - function initialize(pAssistant, pGenes, callBackFunction) { - try { - logInfo('initialize -> Entering function.') - - // Integration with platform logger, when running on cloud - logger.fileName = MODULE_NAME - assistant = pAssistant - - if (bot.timePeriodFileStorage === undefined) { - throw new Error("Execution Parameter Time Period not defined.") - } - - if (bot.dataSet === undefined) { - throw new Error("Execution Parameter Data Set not defined.") - } - - let key = bot.devTeam + '-simulator-' + bot.codeName + '-Trading-Execution-' + bot.dataSet + '-dataSet.V1' - fileStorage = assistant.dataDependencies.dataSets.get(key) - - if (fileStorage !== undefined) { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } else { - logError('initialize -> Failed to initialize storage. Key not found:' + key) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } catch (error) { - logError('initialize -> onDone -> err = ' + error.message) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function logInfo(message) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[INFO] ' + message) } - } - - function logWarn(message) { - if (LOG_INFO === true) { logger.write(MODULE_NAME, '[WARN] ' + message) } - } - - function logError(message) { - logger.write(MODULE_NAME, '[ERROR] ' + message) - } - - function setAutopilot(autopilot) { - autopilotControl = autopilot - } - - /* - The start function is called by the platform for executing the bot every 1 minute - */ - function start(callBackFunction) { - logInfo('start -> Entering function.') - - const callback = util.callbackify(executorLogic) - - callback((err, ret) => { - if (err) { - callBackFunction(err) - } else { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - }) - } - - function getValueFromPreviousExecution(key) { - let value = assistant.remindMeOf(key) - if (value === undefined) - value = 0 - return value - } - - async function executorLogic() { - try { - let indicatorFileContent = await getIndicatorFile() - let simulatorEngineMessage = getSimulatorEngineMessageFromFile(indicatorFileContent) - - let stopLoss = getValueFromPreviousExecution('lastStopLoss') - let takeProfit = getValueFromPreviousExecution('lastTakeProfit') - let openTradeSimulatorMessageId = getValueFromPreviousExecution('openTradeSimulatorMessageId') - - if (simulatorEngineMessage === undefined) { - if (openTradeSimulatorMessageId > 0) { - logWarn('executorLogic -> Simulator message not available. Will proceed to check if the trade needs to be closed.') - let simulatorMessajeNotFound = -1 - await closeTrade(stopLoss, takeProfit, simulatorMessajeNotFound) - } - } else { - logInfo('executorLogic -> Processing simulator record: ' + JSON.stringify(simulatorEngineMessage)) - - // Verify if there is an inconsistent state between the simulator and executor - let isMessageAnOrder = (simulatorEngineMessage.messageType === MESSAGE_TYPE.Order) - let isMessageAnOrderUpdate = (simulatorEngineMessage.messageType === MESSAGE_TYPE.OrderUpdate) - let isMessageAnOrderClose = (simulatorEngineMessage.messageType === MESSAGE_TYPE.OrderClose) - let isMessageAHeartBeat = (simulatorEngineMessage.messageType === MESSAGE_TYPE.HeartBeat) - - let existsAnOpenTrade = (openTradeSimulatorMessageId > 0) - if (existsAnOpenTrade) { - let isOrderMessage = isMessageAnOrder && simulatorEngineMessage.id === openTradeSimulatorMessageId - if (isOrderMessage || isMessageAnOrderUpdate) { - logInfo('Moving the position because it is the same message that caused the open trade or because it is an update.') - await openOrMoveTrade(simulatorEngineMessage) - } else if (isMessageAnOrderClose) { - assistant.rememberThis('closeTradeSimulatorMessageId', simulatorEngineMessage.id) - let isStopLoss = (simulatorEngineMessage.order.exitOutcome === ORDER_EXIT_OUTCOME.StopLoss) - let isTakeProfit = (simulatorEngineMessage.order.exitOutcome === ORDER_EXIT_OUTCOME.StopLoss) - if (isStopLoss) { - stopLoss = assistant.getMarketRate() - takeProfit = 0 - } else if (isTakeProfit) { - stopLoss = 0 - takeProfit = assistant.getMarketRate() - } - } else if (isMessageAHeartBeat) { - logWarn('An inconsisten state was detected: there is an open trade and a close trade was expected.') - let skippedSimulatorEngineMessage = getSkippedMessageOrderClose(indicatorFileContent) - if (skippedSimulatorEngineMessage === undefined) { - logWarn('There was not a Skipped Message Order Close. Closing the position the best possible.') - stopLoss = assistant.getMarketRate() - takeProfit = 0 - } else { - if (skippedSimulatorEngineMessage.id > openTradeSimulatorMessageId) { - logWarn('The Skipped Message Order Close was found and using it to set the SL and TP.') - stopLoss = skippedSimulatorEngineMessage.order.stop - takeProfit = skippedSimulatorEngineMessage.order.takeProfit - } else { - logWarn('One Message Order Close was found but is older than the Open Order. Closing the position the best possible.') - stopLoss = assistant.getMarketRate() - takeProfit = 0 - } - } - } else { - logError('Not managed condition.') - } - assistant.rememberThis('lastStopLoss', stopLoss) - assistant.rememberThis('lastTakeProfit', takeProfit) - await closeTrade(stopLoss, takeProfit, openTradeSimulatorMessageId) - } else { - if (isMessageAnOrder) { - await openOrMoveTrade(simulatorEngineMessage) - } else { - logInfo('Nothing to do, there is not an open order.') - } - } - assistant.addExtraData(simulatorEngineMessage) // Adding the record used for the execution - } - } catch (error) { - logError('Error on executorLogic: ' + JSON.stringify(error)) - throw error - } - } - - async function closeTrade(stopLoss, takeProfit, openTradeSimulatorMessageId) { - let currentRate = assistant.getMarketRate() - let wasExecuted = false - let tradeSize = assistant.getAvailableBalance().assetA - let tradeDirection = ORDER_DIRECTION.Buy - let closeTradeSimulatorMessageId = getValueFromPreviousExecution('closeTradeSimulatorMessageId') - - if (process.env.BASE_ASSET === 'assetA') { - wasExecuted = closeTradeSimulatorMessageId > 0 && assistant.getAvailableBalance().assetB === 0 && assistant.getAvailableBalance().assetA > 0 - tradeSize = assistant.getAvailableBalance().assetB - tradeDirection = ORDER_DIRECTION.Sell - } else { - wasExecuted = closeTradeSimulatorMessageId > 0 && assistant.getAvailableBalance().assetA === 0 && assistant.getAvailableBalance().assetB > 0 - } - - // Check completion of current positions at the exchange - let positions = assistant.getPositions() - let isPositionExecuted = false - for (let i = 0; i < positions.length; i++) { - const position = positions[i]; - if (position.id === closeTradeSimulatorMessageId && position.status === 'executed') { - isPositionExecuted = true - break - } - } - - if (isPositionExecuted || wasExecuted) { - assistant.rememberThis('openTradeSimulatorMessageId', 0) - assistant.rememberThis('closeTradeSimulatorMessageId', 0) - assistant.rememberThis('openTradePositionId', 0) - assistant.rememberThis('lastStopLoss', 0) - assistant.rememberThis('lastTakeProfit', 0) - - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = openTradeSimulatorMessageId - simulatorExecutorMessage.order.id = positions.length > 0 ? positions[0].id : 0 - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = stopLoss - simulatorExecutorMessage.order.takeProfit = takeProfit - simulatorExecutorMessage.order.direction = tradeDirection - simulatorExecutorMessage.order.size = tradeSize - simulatorExecutorMessage.order.status = ORDER_STATUS.Placed - simulatorExecutorMessage.order.exitOutcome = ORDER_EXIT_OUTCOME.StopLoss - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - } - - // Checking Stop Loss & Take Profit - if ((takeProfit > 0 || stopLoss > 0) && closeTradeSimulatorMessageId > 0) { - let exitOutcome - if (takeProfit > 0) { - logInfo('Closing trade with Take Profit.') - exitOutcome = ORDER_EXIT_OUTCOME.TakeProfit - } else { - logInfo('Closing trade with Stop Loss.') - exitOutcome = ORDER_EXIT_OUTCOME.StopLoss - } - - try { - let position - if (process.env.BASE_ASSET === 'assetA') { - position = await createSellPosition(currentRate) - } else { - position = await createBuyPosition(currentRate) - } - assistant.rememberThis('closeTradePositionId', position.id) - - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = openTradeSimulatorMessageId - simulatorExecutorMessage.order.id = position.id - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = stopLoss - simulatorExecutorMessage.order.takeProfit = takeProfit - simulatorExecutorMessage.order.direction = tradeDirection - simulatorExecutorMessage.order.size = tradeSize - simulatorExecutorMessage.order.status = ORDER_STATUS.Placed - simulatorExecutorMessage.order.exitOutcome = exitOutcome - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - - } catch (error) { - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = openTradeSimulatorMessageId - simulatorExecutorMessage.from = MESSAGE_ENTITY.TradingAssistant - simulatorExecutorMessage.to = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = stopLoss - simulatorExecutorMessage.order.takeProfit = takeProfit - simulatorExecutorMessage.order.direction = tradeDirection - simulatorExecutorMessage.order.size = tradeSize - simulatorExecutorMessage.order.status = ORDER_STATUS.Rejected - simulatorExecutorMessage.order.exitOutcome = exitOutcome - simulatorExecutorMessage.order.statusDetails = error.message - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - } finally { - return - } - } - } - - async function openOrMoveTrade(simulatorEngineMessage) { - autopilotControl = true // Force autopilot on for now - if (!autopilotControl) { - autopilotControl = await getAutopilot() - } - if (autopilotControl.autopilot || autopilotControl) { - await openTradeAutopilotOn(simulatorEngineMessage) - } else { - await openTradeAutopilotOff(simulatorEngineMessage) - } - } - - async function openTradeAutopilotOn(simulatorEngineMessage) { - let currentRate = assistant.getMarketRate() - let tradeSize = assistant.getAvailableBalance().assetB - let tradeDirection = ORDER_DIRECTION.Sell - - if (process.env.BASE_ASSET === 'assetA') { - tradeSize = assistant.getAvailableBalance().assetA - tradeDirection = ORDER_DIRECTION.Buy - } - - try { - // Create a new position or move existing position to complete the order execution - let position - if (process.env.BASE_ASSET === 'assetA') { - position = await createBuyPosition(currentRate) - } else { - position = await createSellPosition(currentRate) - } - - assistant.rememberThis('openTradePositionId', position.id) - assistant.rememberThis('openTradeSimulatorMessageId', simulatorEngineMessage.id) - assistant.rememberThis('lastStopLoss', simulatorEngineMessage.order.stop) - assistant.rememberThis('lastTakeProfit', simulatorEngineMessage.order.takeProfit) - - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.order.id = position.id - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = simulatorEngineMessage.order.stop - simulatorExecutorMessage.order.takeProfit = simulatorEngineMessage.order.takeProfit - simulatorExecutorMessage.order.direction = tradeDirection - simulatorExecutorMessage.order.size = tradeSize - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - } catch (error) { - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.from = MESSAGE_ENTITY.TradingAssistant - simulatorExecutorMessage.to = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.messageType = MESSAGE_TYPE.Order - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = simulatorEngineMessage.order.stop - simulatorExecutorMessage.order.takeProfit = simulatorEngineMessage.order.takeProfit - simulatorExecutorMessage.order.direction = tradeDirection - simulatorExecutorMessage.order.size = tradeSize - simulatorExecutorMessage.order.status = ORDER_STATUS.Rejected - simulatorExecutorMessage.order.statusDetails = error.message - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - } - } - - async function openTradeAutopilotOff(simulatorEngineMessage) { - /** - * If there is a ManualAuthorized order on the cockpit we will proceed to: - * 1) Save an audit containing what we received from the cockpit - * 2) Execute the order in the market as received - * 3) Save the audit of the order placed - * 4) Update the cockpit with the result - */ - let acceptedSignals = await getSignalsByCloneId(ORDER_STATUS.ManualAuthorized) - if (acceptedSignals !== undefined && acceptedSignals.length > 0) { - for (let acceptedSignal of acceptedSignals) { - try { - logInfo('openTradeAutopilotOff -> Executing manual authorized signal.') - - // 1) Save audit containing what we received from the cockpit - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.from = MESSAGE_ENTITY.TradingCokpit - simulatorExecutorMessage.to = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.order = acceptedSignal.orderData // we save the order as received - simulatorExecutorMessage.order.status = ORDER_STATUS.ManualAuthorized - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - - // 2) Execute the order in the market as received - let position = await createSellPosition(acceptedSignal.orderData.rate, acceptedSignal.orderData.size) - assistant.rememberThis('openTradePositionId', position.id) - assistant.rememberThis('openTradeSimulatorMessageId', simulatorEngineMessage.id) - assistant.rememberThis('lastStopLoss', simulatorEngineMessage.order.stop) - assistant.rememberThis('lastTakeProfit', simulatorEngineMessage.order.takeProfit) - - // 3) Save the audit of the order placed - simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.from = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingAssistant - simulatorExecutorMessage.dateTime = position.date - - simulatorExecutorMessage.order = acceptedSignal.orderData - simulatorExecutorMessage.order.id = position.id - simulatorExecutorMessage.order.dateTime = position.date - simulatorExecutorMessage.order.rate = position.rate - simulatorExecutorMessage.order.size = position.amountB - simulatorExecutorMessage.order.status = ORDER_STATUS.Placed - simulatorExecutorMessage.order.sizeFilled = 0 - - // 4) Update the cockpit with the result - await updateSignal(acceptedSignal.id, simulatorExecutorMessage) - - message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - return - } catch (error) { - // Update the cockpit with the error - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.from = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingCokpit - simulatorExecutorMessage.messageType = MESSAGE_TYPE.Order - simulatorExecutorMessage.dateTime = bot.processDatetime.valueOf() - simulatorExecutorMessage.order.status = ORDER_STATUS.Rejected - simulatorExecutorMessage.order.statusDetails = error.message - - simulatorExecutorMessage.order = acceptedSignal.order - - await updateSignal(acceptedSignal.id, simulatorExecutorMessage) - - // Update the audit with the error - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - return - } - } - } - - /** - * If there is a Placed order on the cockpit we will proceed to: - * 1) Check order status on the market - * 2) Save the audit of the status - * 3) Update the cockpit with the results - */ - let inProcessSignals = await getSignalsByCloneId(ORDER_STATUS.Placed) - if (inProcessSignals !== undefined && inProcessSignals.length > 0) { - for (let inProcessSignal of inProcessSignals) { - logInfo('openTradeAutopilotOff -> Checking in process signal.') - // 1) Check order status on the market - let position = checkSignalCompletion() - if (position || position === undefined) { - // 2) Save the audit of the status - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = inProcessSignal.orderData.id - simulatorExecutorMessage.from = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingCokpit - simulatorExecutorMessage.messageType = MESSAGE_TYPE.OrderUpdate - - simulatorExecutorMessage.order = inProcessSignal.orderData - simulatorExecutorMessage.order.status = ORDER_STATUS.Filled - simulatorExecutorMessage.order.sizeFilled = -1 - - // 3) Update the cockpit with the results - await updateSignal(inProcessSignal.id, simulatorExecutorMessage) - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - } else { - // Otherwise: Save the audit of the order status, wichs is currently saved by the trading process - } - return - } - } - - /** - * If there is any signal not yet authorized: - * 1) Update the signal with the new indicator value on the cockpit - * 3) Save the audit of the message sent - */ - let assetBBalance = assistant.getAvailableBalance().assetB - let currentRate = assistant.getMarketRate() - let signals = await getSignalsByCloneId(ORDER_STATUS.Signaled) - if (signals !== undefined && signals.length > 0) { - for (let inProcessSignal of signals) { - logInfo('openTradeAutopilotOff -> Signal waiting for approval found, updating it with latest market data.') - - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingCokpit - simulatorExecutorMessage.messageType = MESSAGE_TYPE.OrderUpdate - simulatorExecutorMessage.order.id = 0 - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.stop = simulatorEngineMessage.order.stop - simulatorExecutorMessage.order.takeProfit = simulatorEngineMessage.order.takeProfit - simulatorExecutorMessage.order.direction = simulatorEngineMessage.order.direction - simulatorExecutorMessage.order.size = assetBBalance - simulatorExecutorMessage.order.status = ORDER_STATUS.Signaled - - await updateSignal(inProcessSignal.id, simulatorExecutorMessage) - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - return - } - } - - /** - * Finally: - * 1) Check if it's needed to create a new signal based on the indicator - * 2) Save the audit message for the received info from Trading Simulator - * 3) Create the signal on the cockpit - */ - if (simulatorEngineMessage !== undefined && simulatorEngineMessage.messageType === MESSAGE_TYPE.Order - && simulatorEngineMessage.order.direction === ORDER_DIRECTION.Sell) { - logInfo('Creating new signal.') - - // 2) Save the audit message for the received info from Trading Simulator - let simulatorExecutorMessage = buildBasicSimulatorExecutorMessage() - simulatorExecutorMessage.id = simulatorEngineMessage.id - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingCokpit - simulatorExecutorMessage.messageType = MESSAGE_TYPE.Order - simulatorExecutorMessage.order.id = 0 - simulatorExecutorMessage.order.status = ORDER_STATUS.Signaled - simulatorExecutorMessage.order.rate = currentRate - simulatorExecutorMessage.order.direction = ORDER_DIRECTION.Sell - simulatorExecutorMessage.order.takeProfit = simulatorEngineMessage.order.takeProfit - simulatorExecutorMessage.order.stop = simulatorEngineMessage.order.stop - simulatorExecutorMessage.order.size = assetBBalance - - let message = createMessageFromObject(simulatorExecutorMessage) - assistant.addExtraData(message) - - // 3) Create the signal on the cockpit - await createSignal(simulatorExecutorMessage) - } else { - logWarn("openTradeAutopilotOff -> Nothing to do, there isn't a buy or sell opportunity.") - } - } - - async function createBuyPosition(currentRate, amountToBuy) { - if (!amountToBuy) amountToBuy = assistant.getAvailableBalance().assetA - let amountB = Number((amountToBuy / currentRate).toFixed(8)) - let positions = assistant.getPositions() - let assetABalance = assistant.getAvailableBalance().assetA - - if (positions.length > 0 && positions[0].type === 'buy' && positions[0].status !== 'executed') { - logInfo('createBuyPosition -> Moving an existing BUY position to a new price: $' + Number(currentRate).toLocaleString()) - - assistant.movePosition[util.promisify.custom] = n => new Promise((resolve, reject) => { - assistant.movePosition(positions[0], currentRate, (result, position) => { - if (result !== global.DEFAULT_OK_RESPONSE) { - reject(result) - } else { - resolve(position) - } - }) - }) - - let movePosition = util.promisify(assistant.movePosition) - await movePosition(positions[0], currentRate) - return positions[0] - } else if (assetABalance > 0) { - logInfo('createBuyPosition -> Put a new BUY position at price: $' + Number(currentRate).toLocaleString()) - - assistant.putPosition[util.promisify.custom] = n => new Promise((resolve, reject) => { - assistant.putPosition('buy', currentRate, amountToBuy, amountB, (result, position) => { - if (result !== global.DEFAULT_OK_RESPONSE) { - reject(result) - } else { - resolve(position) - } - }) - }) - - let putPosition = util.promisify(assistant.putPosition) - let position = await putPosition('buy', currentRate, amountToBuy, amountB) - return position - } else { - logInfo('createBuyPosition -> Not enough available balance to buy.') - throw new Error('There is not enough available balance to buy.') - } - } - - async function createSellPosition(currentRate, amountToSell) { - if (!amountToSell) amountToSell = assistant.getAvailableBalance().assetB - let amountA = amountToSell * currentRate - let positions = assistant.getPositions() - - if (positions.length > 0 && positions[0].type === 'sell' && positions[0].status !== 'executed') { - logInfo('createSellPosition -> Moving an existing SELL position to a new price: $' + Number(currentRate).toLocaleString()) - - assistant.movePosition[util.promisify.custom] = n => new Promise((resolve, reject) => { - assistant.movePosition(positions[0], currentRate, (result, position) => { - if (result !== global.DEFAULT_OK_RESPONSE) { - reject(result) - } else { - resolve(position) - } - }) - }) - - let movePosition = util.promisify(assistant.movePosition) - await movePosition(positions[0], currentRate) - return positions[0] - } else if (assistant.getAvailableBalance().assetB > 0) { - logInfo('createSellPosition -> Put a new SELL position at price: $' + Number(currentRate).toLocaleString()) - assistant.putPosition[util.promisify.custom] = n => new Promise((resolve, reject) => { - assistant.putPosition('sell', currentRate, amountA, amountToSell, (result, position) => { - if (result !== global.DEFAULT_OK_RESPONSE) { - reject(result) - } else { - resolve(position) - } - }) - }) - - let putPosition = util.promisify(assistant.putPosition) - let position = await putPosition('sell', currentRate, amountA, amountToSell) - return position - } else { - logInfo('createSellPosition -> There is not enough available balance to sell.') - throw new Error('There is not enough available balance to sell.') - } - } - - function checkSignalCompletion() { - let positions = assistant.getPositions() - if ((positions.length === 0) || (positions.length > 0 && positions[0].status === 'executed')) { - logInfo('checkSignalCompletion -> The order was executed.') - return positions[0] - } else { - return false - } - } - - // Storage functions - async function getIndicatorFile() { - logInfo('getIndicatorFile -> Entering function. ' + bot.processDatetime.toISOString()) - - let filePath - if (bot.processes[0].timePeriod > 2700000) { - // Market Files - filePath = 'Trading-Execution/' + bot.dataSet + '/' + bot.timePeriodFileStorage - } else { - // Daily Files - let dateTime = bot.processDatetime - let datePath = dateTime.getUTCFullYear() + '/' + pad(dateTime.getUTCMonth() + 1, 2) + '/' + pad(dateTime.getUTCDate(), 2) - filePath = 'Trading-Execution/' + bot.dataSet + '/' + bot.timePeriodFileStorage + '/' + datePath - } - - /* - bot.botCache: allows us to keep a map (key value pairs) between executions, - so we don't need to go to the storage to retrieve this value. - If the value already exist on the cache we will get it from there, - otherwise it will be retrieved from the bot storage. - */ - if (bot.startMode === 'Backtest' && bot.botCache.has(filePath)) { - logInfo('getIndicatorFile -> Getting the file from local cache.') - return bot.botCache.get(filePath) - } else { - let indicatorFileContent = await getFileContent(filePath, 'USDT_BTC.json') - bot.botCache.set(filePath, JSON.parse(indicatorFileContent)) - return JSON.parse(indicatorFileContent) - } - } - - function getSimulatorEngineMessageFromFile(indicatorFileContent) { - try { - let lastIndexIndicatorFile = indicatorFileContent.length - 1 - - if (indicatorFileContent[lastIndexIndicatorFile] === undefined) { - logWarn('getSimulatorEngineMessageFromFile -> Recived file does not contain any record yet.') - return - } - let lastAvailableDateTime = indicatorFileContent[lastIndexIndicatorFile][0] - - if (bot.processDatetime.valueOf() <= lastAvailableDateTime || !isExecutionToday()) { - for (let i = 0; i < indicatorFileContent.length; i++) { - if (bot.processDatetime.valueOf() >= indicatorFileContent[i][0] && bot.processDatetime.valueOf() < indicatorFileContent[i][1]) { - return getMessage(indicatorFileContent[i][2]) - } - } - - logWarn('getSimulatorEngineMessageFromFile -> The indicator message was not found at time: ' + bot.processDatetime.valueOf()) - } else { - // Running live we will process last available Indicator Message only if it's delayed 30 minutes top - let maxTolerance = 30 * 60 * 1000 - let lastAvailableDateTimeEnd = indicatorFileContent[lastIndexIndicatorFile][1] - let minutesDelayed = (bot.processDatetime.valueOf() - lastAvailableDateTimeEnd) / 60 / 1000 - logWarn('getSimulatorEngineMessageFromFile -> Last available indicator is delayed: ' + minutesDelayed.toFixed(2) + ' minutes.') - if (bot.processDatetime.valueOf() <= (lastAvailableDateTime + maxTolerance)) { - return getMessage(indicatorFileContent[lastIndexIndicatorFile][2]) - } else { - logWarn('getSimulatorEngineMessageFromFile -> Last available indicator older than 30 minutes: ' + JSON.stringify(indicatorFileContent[lastIndexIndicatorFile])) - assistant.addExtraData(indicatorFileContent[lastIndexIndicatorFile]) // Adding the record used for the execution - } - } - } catch (error) { - logError('getSimulatorEngineMessageFromFile -> error = ' + error.message) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - function getSkippedMessageOrderClose(indicatorFileContent) { - try { - let lastIndexIndicatorFile = indicatorFileContent.length - 1 - - for (let i = lastIndexIndicatorFile; i >= 0; i--) { - let simulatorMessage = getMessage(indicatorFileContent[i][2]) - if (simulatorMessage.messageType === MESSAGE_TYPE.OrderClose) { - return simulatorMessage - } - } - } catch (error) { - logError('getSkippedMessageOrderClose -> error = ' + error.message) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - // Helper Functions - function isExecutionToday() { - let localDate = new Date() - let today = new Date(Date.UTC( - localDate.getUTCFullYear(), - localDate.getUTCMonth(), - localDate.getUTCDate())) - - return (today.getUTCFullYear() === bot.processDatetime.getUTCFullYear() - && today.getUTCMonth() === bot.processDatetime.getUTCMonth() - && today.getUTCDate() === bot.processDatetime.getUTCDate()) - } - - // Modules queries - async function getSignalsByCloneId(orderStatus) { - try { - const cockPit = await axios({ - url: process.env.GATEWAY_ENDPOINT_K8S, - method: 'post', - data: { - query: ` - query($cloneId: String!, $orderStatus: String){ - cockpit_SignalsByCloneId(cloneId: $cloneId, orderStatus:$orderStatus){ - id - cloneId - orderId - orderCreator - orderStatus - orderData - } - } - `, - variables: { - cloneId: process.env.CLONE_ID, - orderStatus: orderStatus - }, - }, - headers: { - authorization: process.env.AUTHORIZATION - } - }) - - logInfo("Retrieved signals in status: " + orderStatus) - return cockPit.data.data.cockpit_SignalsByCloneId - - } catch (error) { - logError('getSignalsByCloneId error: ' + error.response.data.errors[0]) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - async function updateSignal(signalId, message) { - try { - const cockPit = await axios({ - url: process.env.GATEWAY_ENDPOINT_K8S, - method: 'post', - data: { - query: ` - mutation ($signalId: ID!, $message:cockpit_JSON!){ - cockpit_UpdateSignal( - id: $signalId - message: $message - ) { - id - cloneId - orderStatus - } - } - `, - variables: { - signalId: signalId, - message: message - }, - }, - headers: { - authorization: process.env.AUTHORIZATION - } - }) - - logInfo('updateSignal ok.') - return cockPit.data.data.cockpit_UpdateSignal - } catch (error) { - logError('updateSignal error: ' + error.response.data.errors[0]) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - async function createSignal(message) { - try { - const cockPit = await axios({ - url: process.env.GATEWAY_ENDPOINT_K8S, - method: 'post', - data: { - query: ` - mutation ($cloneId: String!, $message: cockpit_JSON!){ - cockpit_CreateSignal( - cloneId: $cloneId - message: $message - ) { - id - cloneId - orderStatus - } - } - `, - variables: { - cloneId: process.env.CLONE_ID, - message: message - }, - }, - headers: { - authorization: process.env.AUTHORIZATION - } - }) - - logInfo('createSignal ok.') - return cockPit.data.data.cockpit_CreateSignal - } catch (error) { - logInfo("createSignal error: " + error.response.data.errors[0]) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - async function getAutopilot() { - try { - const cockPit = await axios({ - url: process.env.GATEWAY_ENDPOINT_K8S, - method: 'post', - data: { - query: ` - query($cloneId: String!){ - cockpit_CloneSettingsByCloneId(cloneId: $cloneId){ - id - cloneId - autopilot - } - } - `, - variables: { - cloneId: process.env.CLONE_ID - }, - }, - headers: { - authorization: process.env.AUTHORIZATION - } - }) - - if (cockPit.data.errors) { - throw new Error(cockPit.data.errors[0].message) - } else { - logInfo('getAutopilot -> Ok.') - return cockPit.data.data.cockpit_CloneSettingsByCloneId - } - - } catch (error) { - logInfo('getAutopilot error: ' + error) - throw global.DEFAULT_RETRY_RESPONSE - } - } - - async function getFileContent(containerName, blobName) { - fileStorage.getTextFile[util.promisify.custom] = n => new Promise((resolve, reject) => { - fileStorage.getTextFile(containerName, blobName, (result, fileContent) => { - if (result !== global.DEFAULT_OK_RESPONSE) { - let errorMessage = '[WARN] getFileContent -> The indicator dependency is not ready. Will retry later.' - console.log(errorMessage) - logWarn(errorMessage) - reject(global.DEFAULT_RETRY_RESPONSE) - } else { - resolve(fileContent) - } - }) - }) - - let getTextFile = util.promisify(fileStorage.getTextFile) - let fileContent = await getTextFile(containerName, blobName) - return fileContent - } - - function pad(str, max) { - str = str.toString() - return str.length < max ? pad('0' + str, max) : str - } - - function buildBasicSimulatorExecutorMessage() { - var simulatorExecutorMessage = {} - simulatorExecutorMessage.id = 0 - simulatorExecutorMessage.from = MESSAGE_ENTITY.SimulationExecutor - simulatorExecutorMessage.to = MESSAGE_ENTITY.TradingAssistant - simulatorExecutorMessage.messageType = MESSAGE_TYPE.Order - simulatorExecutorMessage.dateTime = bot.processDatetime.valueOf() - - simulatorExecutorMessage.order = {} - simulatorExecutorMessage.order.id = 0 - simulatorExecutorMessage.order.dateTime = bot.processDatetime.valueOf() - simulatorExecutorMessage.order.creator = ORDER_CREATOR.SimulationEngine - simulatorExecutorMessage.order.owner = ORDER_OWNER.User - simulatorExecutorMessage.order.exchange = global.EXCHANGE_NAME - simulatorExecutorMessage.order.market = global.MARKET.assetA + '_' + global.MARKET.assetB - simulatorExecutorMessage.order.marginEnabled = ORDER_MARGIN_ENABLED.False - simulatorExecutorMessage.order.type = ORDER_TYPE.Limit - simulatorExecutorMessage.order.status = ORDER_STATUS.Placed - simulatorExecutorMessage.order.sizeFilled = 0 - simulatorExecutorMessage.order.exitOutcome = '' - simulatorExecutorMessage.order.statusMessage = '' - - return simulatorExecutorMessage - } - -} diff --git a/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/this.bot.config.json b/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/this.bot.config.json deleted file mode 100644 index d59dba4bc..000000000 --- a/Deprecated-Code/SaWebApi/src/storage/templates/TradingBot/this.bot.config.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "displayName": "Bumblebee", - "codeName": "bumblebee", - "type": "Trading", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "devTeam": "vikings", - "profilePicture": "bumblebee.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Trading-Process", - "description": "Trading strategy to be used as a template.", - "normalWaitTime": 60000, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "timePeriod": 3600000, - "statusDependencies": [ - { - "devTeam": "aavikings", - "bot": "bumblebee", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Trading-Process", - "dataSetVersion": "dataSet.V1", - "type": "Trading" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1", - "type": "Indicator" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1", - "type": "Indicator" - } - ], - "dataDependencies": [ - { - "devTeam": "AAMasters", - "bot": "AABruce", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSetVersion": "dataSet.V1", - "dataSet": "One-Min" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Trading-Execution", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Market" - }, - { - "devTeam": "AAMasters", - "bot": "AAJason", - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Trading-Execution", - "dataSetVersion": "dataSet.V1", - "dataSet": "Multi-Period-Daily" - } - ] - } - ], - "products": [ - { - "codeName": "Live Trading History", - "displayName": "Live Trading History", - "shortDisplayName": "Live", - "description": "General information about trading history.", - "dataSets": [ - { - "codeName": "Oficial History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Live.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "SimulationExecution" - } - }, - { - "codeName": "Backtest Trading History", - "displayName": "Backtest Trading History", - "shortDisplayName": "Backtest", - "description": "General information about backtest trading history.", - "dataSets": [ - { - "codeName": "Backtest History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Backtest.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "SimulationExecution" - } - }, - { - "codeName": "Competition Trading History", - "displayName": "Competition Trading History", - "shortDisplayName": "Competition", - "description": "General information about competition trading history.", - "dataSets": [ - { - "codeName": "Competition History", - "type": "File Sequence", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "@DevTeam/@Bot.1.0/AACloud.1.1/Poloniex/dataSet.V1/Output/Trading-Process", - "fileName": "Execution.History.Competition.@Sequence.json" - } - ], - "exchangeList": [ - { - "name": "Poloniex" - } - ], - "plotter": { - "devTeam": "AAMasters", - "codeName": "PlottersTradingSimulation", - "moduleName": "SimulationExecution" - } - } - ], - "marketRateProvider": { - "devTeam": "AAMasters", - "bot": "AABruce", - "host": { - "url": "https://demo-dev.superalgos.org/", - "storage": "localStorage", - "container": "aamasters", - "accessKey": "" - }, - "botVersion": { - "major": 1, - "minor": 0 - }, - "product": "Candles", - "dataSet": "One-Min", - "dataSetVersion": "dataSet.V1" - } -} diff --git a/Deprecated-Code/SaWebApi/src/utils/getDevTeamHost.js b/Deprecated-Code/SaWebApi/src/utils/getDevTeamHost.js deleted file mode 100644 index 2066fc4fb..000000000 --- a/Deprecated-Code/SaWebApi/src/utils/getDevTeamHost.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Ecosystem } from '../models' - -let teamCache = new Map() -export default async function getDevTeamHost(devTeamName, accessKey, ownerKey) { - let host - if (accessKey) { - host = teamCache.get(devTeamName + '.accessKey') - } else { - host = teamCache.get(devTeamName + '.ownerKey') - } - if (host && (host.accessKey === accessKey || host.ownerKey === ownerKey)) { - return host - } else { - let ecosystem = await Ecosystem.find() - - for (var i = 0; i < ecosystem.length; i++) { - for (var j = 0; j < ecosystem[i].devTeams.length; j++) { - if (ecosystem[i].devTeams[j].codeName.toLowerCase() === devTeamName.toLowerCase()) { - if (ecosystem[i].devTeams[j].host.accessKey === accessKey) { - teamCache.set(devTeamName + '.accessKey', ecosystem[i].devTeams[j].host) - return ecosystem[i].devTeams[j].host - } - if (ecosystem[i].devTeams[j].host.ownerKey === ownerKey) { - teamCache.set(devTeamName + '.ownerKey', ecosystem[i].devTeams[j].host) - return ecosystem[i].devTeams[j].host - } - } - } - } - - } -} diff --git a/Deprecated-Code/SaWebApi/src/utils/logger.js b/Deprecated-Code/SaWebApi/src/utils/logger.js deleted file mode 100644 index 3932769cc..000000000 --- a/Deprecated-Code/SaWebApi/src/utils/logger.js +++ /dev/null @@ -1,41 +0,0 @@ -import { createLogger, format, transports } from 'winston' -import { inspect } from 'util' - -const options = { - file: { - level: 'info', - filename: '../logs/app.log', - handleExceptions: true, - json: true, - maxsize: 5242880, // 5MB - maxFiles: 5, - colorize: false, - timestamp: true - }, - console: { - level: process.env.LOG_LEVEL || 'debug', - handleExceptions: true, - json: false, - colorize: true, - timestamp: true - } -} - -const logger = createLogger({ - level: 'info', - format: format.combine( - format.colorize(), - format.splat(), - format.timestamp({ format: 'YY/MM/DD HH:mm' }), - format.printf( - info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}` - ) - ), - transports: [ - // new transports.File(options.file), - new transports.Console(options.console) - ], - exitOnError: false // do not exit on handled exceptions -}) - -export default logger diff --git a/Deprecated-Code/SaWebApi/src/utils/readFile.js b/Deprecated-Code/SaWebApi/src/utils/readFile.js deleted file mode 100644 index 1be0d4609..000000000 --- a/Deprecated-Code/SaWebApi/src/utils/readFile.js +++ /dev/null @@ -1,14 +0,0 @@ -import fs from 'fs' - -export default function readFile(fileName) { - return new Promise(function (resolve, reject) { - fs.readFile(fileName, 'utf8', (err, file) => { - if (err) { - reject(err) - } else { - resolve(file) - } - }) - - }) -} diff --git a/Deprecated-Code/SaWebApi/test/minioTest.js b/Deprecated-Code/SaWebApi/test/minioTest.js deleted file mode 100644 index e7d1bd7b0..000000000 --- a/Deprecated-Code/SaWebApi/test/minioTest.js +++ /dev/null @@ -1,46 +0,0 @@ -import { assert } from 'chai' -import { - getFileContent, - createContainer, - deleteContainer, - writeFileContent -} from '../src/storage/providers/MinioStorage' - -import 'dotenv/config' - -describe('Minio Storage Tests', function () { - it('Create Container', async function () { - let containerName = 'test-container' - await createContainer(containerName) - assert.isOk('everything', 'everything is ok') - }) - it('Save File', async function () { - let containerName = 'test-container' - let blobName = 'test-folder/test_data_file.json' - let content = '[0,0,0,0]' - await writeFileContent(containerName, blobName, content) - - // for (let index = 0; index < 1000; index++) { - // let blobName = 'test-folder/test_data_file_' + index + '.json' - // await writeFileContent(containerName, blobName, content) - // } - - assert.isOk('everything', 'everything is ok') - }) - it('Retrieve File', async function () { - let containerName = 'test-container' - let blobName = 'test-folder/test_data_file_1.json' - let fileContent = await getFileContent(containerName, blobName) - - let expected = '[0,0,0,0]' - assert.equal(fileContent, expected) - }) - it('Delete Container', async function () { - let containerName = 'test-container' - console.log('start: '+ new Date().toISOString()) - await deleteContainer(containerName) - console.log('end: '+ new Date().toISOString()) - - assert.isOk('everything', 'everything is ok') - }) -}) diff --git a/Deprecated-Code/StairPatterns/.gitattributes b/Deprecated-Code/StairPatterns/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/StairPatterns/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/StairPatterns/.gitignore b/Deprecated-Code/StairPatterns/.gitignore deleted file mode 100644 index 82c487bdd..000000000 --- a/Deprecated-Code/StairPatterns/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* - diff --git a/Deprecated-Code/StairPatterns/Json.json b/Deprecated-Code/StairPatterns/Json.json deleted file mode 100644 index 5f282702b..000000000 --- a/Deprecated-Code/StairPatterns/Json.json +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Deprecated-Code/StairPatterns/LICENSE b/Deprecated-Code/StairPatterns/LICENSE deleted file mode 100644 index 10e295746..000000000 --- a/Deprecated-Code/StairPatterns/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Financial Beings License - -Collective Copyright by the Advanced Algos Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software including without limitation the rights to use, copy, modify, -merge, publish, distribute and sublicense copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following -conditions: - - 1. Using, copying, modifying, publishing, distributing and sublicensing rights - are restricted to the Advanced Algos Platform, meaning the rights granted can - only be exercised through the Advanced Algos Service. - - 2. The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Deprecated-Code/StairPatterns/Multi-Period-Daily/User.Bot.js b/Deprecated-Code/StairPatterns/Multi-Period-Daily/User.Bot.js deleted file mode 100644 index 3d85b8526..000000000 --- a/Deprecated-Code/StairPatterns/Multi-Period-Daily/User.Bot.js +++ /dev/null @@ -1,1647 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const INTENSIVE_LOG = false; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const CANDLE_STAIRS_FOLDER_NAME = "Candle-Stairs"; - - const VOLUMES_FOLDER_NAME = "Volumes"; - const VOLUME_STAIRS_FOLDER_NAME = "Volume-Stairs"; - - thisObject = { - initialize: initialize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - let statusDependencies; - let beginingOfMarket - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - - This process is going to do the following: - - Read the candles and volumes from Candles Volumes and produce for each market two files with candles stairs and volumes stairs respectively. - - */ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - /* One of the challenges of this process is that each imput file contains one day of candles. So if a stair spans more than one day - then we dont want to break the stais in two pieces. What we do is that we read to candles files at the time and record at the current - date all stairs of the day plus the ones thas spans to the second day without bigining at the second day. Then when we process the next - day, we must remember where the last stairs of each type endded, so as not to create overlapping stairs in the current day. */ - - let market = bot.market; - - /* Context Variables */ - - let contextVariables = { - lastCandleFile: undefined, // Datetime of the last file files sucessfully produced by this process. - firstTradeFile: undefined, // Datetime of the first trade file in the whole market history. - maxCandleFile: undefined // Datetime of the last file available to be used as an input of this process. - }; - - let previousDay; // Holds the date of the previous day relative to the processing date. - let processDate; // Holds the processing date. - - getContextVariables(); - - function getContextVariables() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Entering function."); } - - let thisReport; - let reportKey; - let statusReport; - - /* We look first for Exchange Raw Data in order to get when the market starts. */ - - reportKey = "Masters" + "-" + "Exchange-Raw-Data" + "-" + "Historic-OHLCVs" + "-" + "dataSet.V1"; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet."); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.firstTradeFile = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS); - - /* Second, we get the report from Candles Volumes, to know when the marted ends. */ - - reportKey = "Masters" + "-" + "Candles-Volumes" + "-" + "Multi-Period-Daily" + "-" + "dataSet.V1"; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> reportKey = " + reportKey); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - contextVariables.maxCandleFile = new Date(thisReport.lastFile.valueOf()); - - /* Finally we get our own Status Report. */ - - reportKey = "Masters" + "-" + "Stairs-Patterns" + "-" + "Multi-Period-Daily" + "-" + "dataSet.V1"; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } - - statusReport = statusDependencies.statusReports.get(reportKey); - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - thisReport = statusDependencies.statusReports.get(reportKey).file; - - if (thisReport.lastFile !== undefined) { - - beginingOfMarket = new Date(thisReport.beginingOfMarket); - - if (beginingOfMarket.valueOf() !== contextVariables.firstTradeFile.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated. -> reportKey = " + reportKey); - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() + ONE_DAY_IN_MILISECONDS) - - buildStairs(); - return; - } - - contextVariables.lastCandleFile = new Date(thisReport.lastFile); - - /* - The stairs objects can span more than one day. In order not to cut these objects into two when this happens, this process will alsways read - 3 files. - - 1. The first file is a stairs file corresponding to processDay -2. From there we will know where the last staris ended. - 2. The second is a candle or volume file corresponding to processDay -1. - 3. The third is a candle of volume file at processDay. - - We will recalculate 2 and 3 considering the objects already in 1, so as to make the transition between 2 and 3 smooth. - */ - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> thisReport.lastFile !== undefined"); } - - buildStairs(); - return; - - } else { - - /* - In the case when there is no status report, we take the date of the file with the first trades as the begining of the market. Then we will - go one day fordward in time, so that when we enter the loop, the "previous day" does not fall outside the begining of the market. - */ - - contextVariables.lastCandleFile = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - contextVariables.lastCandleFile = new Date(contextVariables.lastCandleFile.valueOf() + ONE_DAY_IN_MILISECONDS) - - beginingOfMarket = new Date(contextVariables.firstTradeFile.getUTCFullYear() + "-" + (contextVariables.firstTradeFile.getUTCMonth() + 1) + "-" + contextVariables.firstTradeFile.getUTCDate() + " " + "00:00" + GMT_SECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> thisReport.lastFile === undefined"); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> contextVariables.lastCandleFile = " + contextVariables.lastCandleFile); } - - buildStairs(); - return; - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildStairs() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> Entering function."); } - - let n; - processDate = new Date(contextVariables.lastCandleFile.valueOf() - ONE_DAY_IN_MILISECONDS); // Go back one day to start well when we advance time at the begining of the loop. - let fromDate = new Date(processDate.valueOf()) - let lastDate = new Date() - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> processDate = " + processDate); } - - advanceTime(); - - function advanceTime() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> advanceTime -> Entering function."); } - - processDate = new Date(processDate.valueOf() + ONE_DAY_IN_MILISECONDS); - previousDay = new Date(processDate.valueOf() - ONE_DAY_IN_MILISECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> advanceTime -> processDate = " + processDate); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> advanceTime -> previousDay = " + previousDay); } - - /* Validation that we are not going past the head of the market. */ - - if (processDate.valueOf() > contextVariables.maxCandleFile.valueOf()) { - - const logText = "Head of the market found @ " + previousDay.getUTCFullYear() + "/" + (previousDay.getUTCMonth() + 1) + "/" + previousDay.getUTCDate() + "."; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> advanceTime -> " + logText); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - - } - - /* Telling the world we are alive and doing well */ - let currentDateString = processDate.getUTCFullYear() + '-' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(processDate.getUTCDate(), 2); - let currentDate = new Date(processDate) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(currentDateString, percentage) - - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage); - } - - periodsLoop(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> advanceTime -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function periodsLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> periodsLoop -> Entering function."); } - - /* - - We will iterate through all posible timeFrames. - - */ - - n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function loopBody() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> Entering function."); } - - const timeFrame = global.dailyFilePeriods[n][1]; - - let endOfLastCandleStair = new Date(previousDay.valueOf() - ONE_DAY_IN_MILISECONDS); - let endOfLastBuyVolumeStair = new Date(previousDay.valueOf() - ONE_DAY_IN_MILISECONDS); - let endOfLastSellVolumeStair = new Date(previousDay.valueOf() - ONE_DAY_IN_MILISECONDS); - - /* - By default we set the starting date of the processDay - 2 file. If we find the file this value shoulld be overwritten by the value of the end property - of the last object on the file. - */ - - endOfLastCandleStair = endOfLastCandleStair.valueOf(); - endOfLastBuyVolumeStair = endOfLastBuyVolumeStair.valueOf(); - endOfLastSellVolumeStair = endOfLastSellVolumeStair.valueOf(); - - getEndOfLastCandleStair(); - - function getEndOfLastCandleStair() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastCandleStair -> Entering function."); } - - let fileDate = new Date(previousDay.valueOf() - ONE_DAY_IN_MILISECONDS); - getCandleStairsFile(); - - function getCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> Entering function."); } - - let dateForPath = fileDate.getUTCFullYear() + '/' + utilities.pad(fileDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(fileDate.getUTCDate(), 2); - let fileName = "Data.json" - let filePath = bot.filePathRoot + "/Output/" + CANDLE_STAIRS_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> onFileReceived -> Entering function."); } - - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> onFileReceived -> text = " + text); } - - if ( - err.result === global.CUSTOM_FAIL_RESPONSE.result && - (err.message === 'Folder does not exist.' || err.message === 'File does not exist.') - ) { - - getEndOfLastVolumeStair(); - return; - } - - let stairsFile = JSON.parse(text); - - if (stairsFile.length > 0) { - - endOfLastCandleStair = stairsFile[stairsFile.length - 1][5]; // We get from the last regord the end value. Position 5 = Stairs.end - getEndOfLastVolumeStair(); - - } else { - - getEndOfLastVolumeStair(); - return; - - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> onFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastCandleStair -> getCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastCandleStair -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function getEndOfLastVolumeStair() { - - try { - - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastVolumeStair -> Entering function."); } - - let fileDate = new Date(previousDay.valueOf() - ONE_DAY_IN_MILISECONDS); - getCandleStairsFile(); - - function getCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> Entering function."); } - - let dateForPath = fileDate.getUTCFullYear() + '/' + utilities.pad(fileDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(fileDate.getUTCDate(), 2); - let fileName = "Data.json" - let filePath = bot.filePathRoot + "/Output/" + VOLUME_STAIRS_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> onFileReceived -> text = " + text); } - - if ( - err.result === global.CUSTOM_FAIL_RESPONSE.result && - (err.message === 'Folder does not exist.' || err.message === 'File does not exist.') - ) { - - processCandles(); - return; - } - - let stairsFile = JSON.parse(text); - - if (stairsFile.length > 0) { - - for (let i = 0; i < stairsFile.length; i++) { - - let stairs = { - type: stairsFile[i][0], - begin: stairsFile[i][1], - end: stairsFile[i][2], - direction: stairsFile[i][3], - barsCount: stairsFile[i][4], - firstAmount: stairsFile[i][5], - lastAmount: stairsFile[i][6] - }; - - if (stairs.type === 'buy') { - - endOfLastBuyVolumeStair = stairs.end; - - } else { - - endOfLastSellVolumeStair = stairs.end; - - } - } - - processCandles(); - - } else { - - processCandles(); - return; - - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> onFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> onFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> onFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastVolumeStair -> getCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> getEndOfLastVolumeStair -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function processCandles() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> Entering function."); } - - let candles = []; // Here we will put all the candles of the 2 files read. - - let previousDayStairsArray = []; // Here All the stairs of the previous day. - let processDayStairsArray = []; // Here All the stairs of the process day. - - let previousDayFile; - let processDayFile; - - getCandleStairsFile(); - - function getCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getCandleStairsFile -> Entering function."); } - - let dateForPath = previousDay.getUTCFullYear() + '/' + utilities.pad(previousDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(previousDay.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getCandleStairsFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getCandleStairsFile -> onCurrentDayFileReceived -> text = " + text); } - - previousDayFile = JSON.parse(text); - getProcessDayFile() - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getCandleStairsFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getCandleStairsFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getCandleStairsFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function getProcessDayFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getProcessDayFile -> Entering function."); } - - let dateForPath = processDate.getUTCFullYear() + '/' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(processDate.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getProcessDayFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> getProcessDayFile -> onCurrentDayFileReceived -> text = " + text); } - - processDayFile = JSON.parse(text); - buildCandles(); - - } catch (err) { - - if (processDate.valueOf() > contextVariables.maxCandleFile.valueOf()) { - - processDayFile = []; // we are past the head of the market, then no worries if this file is non existent. - buildCandles(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getProcessDayFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getProcessDayFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getProcessDayFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> getProcessDayFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildCandles() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> buildCandles -> Entering function."); } - - pushCandles(previousDayFile); - pushCandles(processDayFile); - findCandleStairs(); - - function pushCandles(candlesFile) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> buildCandles -> pushCandles -> Entering function."); } - - for (let i = 0; i < candlesFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = candlesFile[i][0]; - candle.max = candlesFile[i][1]; - - candle.open = candlesFile[i][2]; - candle.close = candlesFile[i][3]; - - candle.begin = candlesFile[i][4]; - candle.end = candlesFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'Down'; } - if (candle.open < candle.close) { candle.direction = 'Up'; } - if (candle.open === candle.close) { candle.direction = 'Side'; } - - candles.push(candle); - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> buildCandles -> pushCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - function findCandleStairs() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> findCandleStairs -> Entering function."); } - - /* Finding stairs */ - - let stairs; - - for (let i = 0; i < candles.length - 1; i++) { - - let currentCandle = candles[i]; - let nextCandle = candles[i + 1]; - - if (currentCandle.direction === nextCandle.direction && currentCandle.direction !== 'Side') { - - if (stairs === undefined) { - - stairs = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined, - candleCount: 0, - firstMin: 0, - firstMax: 0, - lastMin: 0, - lastMax: 0 - }; - - stairs.direction = currentCandle.direction; - stairs.candleCount = 2; - - stairs.begin = currentCandle.begin; - stairs.end = nextCandle.end; - - stairs.open = currentCandle.open; - stairs.close = nextCandle.close; - - if (currentCandle.min < nextCandle.min) { stairs.min = currentCandle.min; } else { stairs.min = nextCandle.min; } - if (currentCandle.max > nextCandle.max) { stairs.max = currentCandle.max; } else { stairs.max = nextCandle.max; } - - if (stairs.direction === 'Up') { - - stairs.firstMin = currentCandle.open; - stairs.firstMax = currentCandle.close; - - stairs.lastMin = nextCandle.open; - stairs.lastMax = nextCandle.close; - - } else { - - stairs.firstMin = currentCandle.close; - stairs.firstMax = currentCandle.open; - - stairs.lastMin = nextCandle.close; - stairs.lastMax = nextCandle.open; - - } - - - } else { - - stairs.candleCount++; - stairs.end = nextCandle.end; - stairs.close = nextCandle.close; - - if (stairs.min < nextCandle.min) { stairs.min = currentCandle.min; } - if (stairs.max > nextCandle.max) { stairs.max = currentCandle.max; } - - if (stairs.direction === 'Up') { - - stairs.lastMin = nextCandle.open; - stairs.lastMax = nextCandle.close; - - } else { - - stairs.lastMin = nextCandle.close; - stairs.lastMax = nextCandle.open; - - } - - } - - } else { - - if (stairs !== undefined) { - - /* - Here we detect stairs that started at process day - 2. - */ - - if (stairs.begin > endOfLastCandleStair) { - - if (stairs.begin >= processDate.valueOf()) { - - processDayStairsArray.push(stairs); - - } else { - - previousDayStairsArray.push(stairs); - - } - } - - stairs = undefined; - } - } - } - - writeCandleStairsFile(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> findCandleStairs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - } - - function writeCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> Entering function."); } - - writeFile(previousDayStairsArray, previousDay, onPreviousFileWritten); - - function onPreviousFileWritten() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> onPreviousFileWritten -> Entering function."); } - - writeFile(processDayStairsArray, processDate, onProcessFileWritten); - - function onProcessFileWritten() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> onPreviousFileWritten -> onProcessFileWritten -> Entering function."); } - - processVolumes(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> writeCandleStairsFile -> onPreviousFileWritten -> onProcessFileWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> writeCandleStairsFile -> onPreviousFileWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFile(pStairs, pDate, callback) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < pStairs.length; i++) { - - let stairs = pStairs[i]; - - fileContent = fileContent + separator + '[' + - stairs.open + "," + - stairs.close + "," + - stairs.min + "," + - stairs.max + "," + - stairs.begin + "," + - stairs.end + "," + - '"' + stairs.direction + '"' + "," + - stairs.candleCount + "," + - stairs.firstMin + "," + - stairs.firstMax + "," + - stairs.lastMin + "," + - stairs.lastMax + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = pDate.getUTCFullYear() + '/' + utilities.pad(pDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(pDate.getUTCDate(), 2); - let fileName = 'Data.json'; - - let filePath = bot.filePathRoot + "/Output/" + CANDLE_STAIRS_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> onFileCreated -> Entering function."); } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> onFileCreated -> Content written = " + fileContent); - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> onFileCreated -> err = " + err.stack); - callBack(err); - return; - } - - const logText = "[WARN] Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> onFileCreated -> " + logText); } - - callback(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> writeCandleStairsFile -> writeFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> writeCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function processVolumes() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> Entering function."); } - - let volumes = []; - - let previousDayStairsArray = []; // Here All the stairs of the previous day. - let processDayStairsArray = []; // Here All the stairs of the process day. - - let previousDayFile; - let processDayFile; - - getCandleStairsFile(); - - function getCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getCandleStairsFile -> Entering function."); } - - let dateForPath = previousDay.getUTCFullYear() + '/' + utilities.pad(previousDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(previousDay.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getCandleStairsFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getCandleStairsFile -> onCurrentDayFileReceived -> text = " + text); } - - previousDayFile = JSON.parse(text); - getProcessDayFile() - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getCandleStairsFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getCandleStairsFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getCandleStairsFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function getProcessDayFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getProcessDayFile -> Entering function."); } - - let dateForPath = processDate.getUTCFullYear() + '/' + utilities.pad(processDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(processDate.getUTCDate(), 2); - let fileName = "Data.json" - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + "Multi-Period-Daily" + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onCurrentDayFileReceived); - - function onCurrentDayFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getProcessDayFile -> onCurrentDayFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> getProcessDayFile -> onCurrentDayFileReceived -> text = " + text); } - - processDayFile = JSON.parse(text); - buildVolumes(); - - } catch (err) { - - if (processDate.valueOf() > contextVariables.maxCandleFile.valueOf()) { - - processDayFile = []; // we are past the head of the market, then no worries if this file is non existent. - buildVolumes(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getProcessDayFile -> onCurrentDayFileReceived -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getProcessDayFile -> onCurrentDayFileReceived -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getProcessDayFile -> onCurrentDayFileReceived -> market = " + market.baseAsset + '_' + market.quotedAsset); - - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return; - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> getProcessDayFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function buildVolumes() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> buildVolumes -> Entering function."); } - - pushVolumes(previousDayFile); - pushVolumes(processDayFile); - findVolumesStairs(); - - function pushVolumes(volumesFile) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> buildVolumes -> pushVolumes -> Entering function."); } - - for (let i = 0; i < volumesFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = volumesFile[i][0]; - volume.amountSell = volumesFile[i][1]; - - volume.begin = volumesFile[i][2]; - volume.end = volumesFile[i][3]; - - volumes.push(volume); - - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> buildVolumes -> pushVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> buildVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function findVolumesStairs() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> findVolumesStairs -> Entering function."); } - - /* Finding stairs */ - - let buyUpStairs; - let buyDownStairs; - - let sellUpStairs; - let sellDownStairs; - - for (let i = 0; i < volumes.length - 1; i++) { - - let currentVolume = volumes[i]; - let nextVolume = volumes[i + 1]; - - - /* buy volume going up */ - - if (currentVolume.amountBuy < nextVolume.amountBuy) { - - if (buyUpStairs === undefined) { - - buyUpStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - buyUpStairs.type = 'buy'; - buyUpStairs.direction = 'Up'; - buyUpStairs.barsCount = 2; - - buyUpStairs.begin = currentVolume.begin; - buyUpStairs.end = nextVolume.end; - - buyUpStairs.firstAmount = currentVolume.amountBuy; - buyUpStairs.lastAmount = nextVolume.amountBuy; - - } else { - - buyUpStairs.barsCount++; - buyUpStairs.end = nextVolume.end; - buyUpStairs.lastAmount = nextVolume.amountBuy; - - } - - } else { - - if (buyUpStairs !== undefined) { - - if (buyUpStairs.barsCount > 2) { - - pushToArray(buyUpStairs); - } - - buyUpStairs = undefined; - } - } - - /* buy volume going down */ - - if (currentVolume.amountBuy > nextVolume.amountBuy) { - - if (buyDownStairs === undefined) { - - buyDownStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - buyDownStairs.type = 'buy'; - buyDownStairs.direction = 'Down'; - buyDownStairs.barsCount = 2; - - buyDownStairs.begin = currentVolume.begin; - buyDownStairs.end = nextVolume.end; - - buyDownStairs.firstAmount = currentVolume.amountBuy; - buyDownStairs.lastAmount = nextVolume.amountBuy; - - } else { - - buyDownStairs.barsCount++; - buyDownStairs.end = nextVolume.end; - buyDownStairs.lastAmount = nextVolume.amountBuy; - - } - - } else { - - if (buyDownStairs !== undefined) { - - if (buyDownStairs.barsCount > 2) { - - pushToArray(buyDownStairs); - } - - buyDownStairs = undefined; - } - } - - /* sell volume going up */ - - if (currentVolume.amountSell < nextVolume.amountSell) { - - if (sellUpStairs === undefined) { - - sellUpStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - sellUpStairs.type = 'sell'; - sellUpStairs.direction = 'Up'; - sellUpStairs.barsCount = 2; - - sellUpStairs.begin = currentVolume.begin; - sellUpStairs.end = nextVolume.end; - - sellUpStairs.firstAmount = currentVolume.amountSell; - sellUpStairs.lastAmount = nextVolume.amountSell; - - } else { - - sellUpStairs.barsCount++; - sellUpStairs.end = nextVolume.end; - sellUpStairs.lastAmount = nextVolume.amountSell; - - } - - } else { - - if (sellUpStairs !== undefined) { - - if (sellUpStairs.barsCount > 2) { - - pushToArray(sellUpStairs); - } - - sellUpStairs = undefined; - } - } - - /* sell volume going down */ - - if (currentVolume.amountSell > nextVolume.amountSell) { - - if (sellDownStairs === undefined) { - - sellDownStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - sellDownStairs.type = 'sell'; - sellDownStairs.direction = 'Down'; - sellDownStairs.barsCount = 2; - - sellDownStairs.begin = currentVolume.begin; - sellDownStairs.end = nextVolume.end; - - sellDownStairs.firstAmount = currentVolume.amountSell; - sellDownStairs.lastAmount = nextVolume.amountSell; - - } else { - - sellDownStairs.barsCount++; - sellDownStairs.end = nextVolume.end; - sellDownStairs.lastAmount = nextVolume.amountSell; - - } - - } else { - - if (sellDownStairs !== undefined) { - - if (sellDownStairs.barsCount > 2) { - - pushToArray(sellDownStairs); - } - - sellDownStairs = undefined; - } - } - - function pushToArray(stairs) { - - if (INTENSIVE_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> findVolumesStairs -> pushToArray -> Entering function."); } - - try { - - if (stairs !== undefined) { - - /* - Here we detect stairs that started at process day - 2. - */ - - if (stairs.type === 'sell') { - - if (stairs.begin > endOfLastSellVolumeStair) { - - if (stairs.begin >= processDate.valueOf()) { - - processDayStairsArray.push(stairs); - - } else { - - previousDayStairsArray.push(stairs); - - } - } - } - else { - - if (stairs.begin > endOfLastBuyVolumeStair) { - - if (stairs.begin >= processDate.valueOf()) { - - processDayStairsArray.push(stairs); - - } else { - - previousDayStairsArray.push(stairs); - - } - } - - } - - stairs = undefined; - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> findVolumesStairs -> pushToArray -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - writeVolumeStairsFile(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> findVolumesStairs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeVolumeStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> Entering function."); } - - writeFile(previousDayStairsArray, previousDay, onPreviousFileWritten); - - function onPreviousFileWritten() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> Entering function."); } - - writeFile(processDayStairsArray, processDate, onProcessFileWritten); - - function onProcessFileWritten() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> onProcessFileWritten -> Entering function."); } - - controlLoop(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> onProcessFileWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFile(pStairs, pDate, callback) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> writeFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < pStairs.length; i++) { - - let stairs = pStairs[i]; - - fileContent = fileContent + separator + '[' + - '"' + stairs.type + '"' + "," + - stairs.begin + "," + - stairs.end + "," + - '"' + stairs.direction + '"' + "," + - stairs.barsCount + "," + - stairs.firstAmount + "," + - stairs.lastAmount + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let dateForPath = pDate.getUTCFullYear() + '/' + utilities.pad(pDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(pDate.getUTCDate(), 2); - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + VOLUME_STAIRS_FOLDER_NAME + "/" + bot.process + "/" + timeFrame + "/" + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> writeFile -> onFileCreated -> Entering function."); } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> writeFile -> onFileCreated -> Content written = " + fileContent); - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> writeFile -> onFileCreated -> err = " + err.stack); - callBack(err); - return; - } - - const logText = "[WARN] Finished with File @ " + market.baseAsset + "_" + market.quotedAsset + ", " + fileRecordCounter + " records inserted into " + filePath + "/" + fileName + ""; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> processVolumes -> writeVolumeStairsFile -> writeFile -> onFileCreated -> " + logText); } - - callback(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> writeFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> writeVolumeStairsFile -> onPreviousFileWritten -> writeFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> writeVolumeStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> processVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> loopBody -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function controlLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> controlLoop -> Entering function."); } - - n++; - - if (n < global.dailyFilePeriods.length) { - - loopBody(); - - } else { - - n = 0; - - writeDataRanges(onWritten); - - function onWritten(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> controlLoop -> onWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> controlLoop -> onWritten -> err = " + err.stack); - callBack(err); - return; - } - - writeStatusReport(processDate, advanceTime); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> controlLoop -> onWritten -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> controlLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> err.message = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeDataRanges(callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - writeDataRange(contextVariables.firstTradeFile, processDate, CANDLE_STAIRS_FOLDER_NAME, onCandlesStairsDataRangeWritten); - - function onCandlesStairsDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRanges -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onCandlesStairsDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - writeDataRange(contextVariables.firstTradeFile, processDate, VOLUME_STAIRS_FOLDER_NAME, onVolumeStairsDataRangeWritten); - - function onVolumeStairsDataRangeWritten(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] writeDataRanges -> writeDataRanges -> onVolumeStairsDataRangeWritten -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeDataRanges -> writeDataRanges -> onVolumeStairsDataRangeWritten -> err = " + err.stack); - callBack(err); - return; - } - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRanges -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - - } - - function writeDataRange(pBegin, pEnd, pProductFolder, callBack) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> Entering function."); } - - let dataRange = { - begin: pBegin.valueOf(), - end: pEnd.valueOf() - }; - - let fileContent = JSON.stringify(dataRange); - - let fileName = 'Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + pProductFolder + "/" + bot.process; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> onFileCreated -> err = " + err.stack); - callBack(err); - return; - } - - if (LOG_FILE_CONTENT === true) { - logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> onFileCreated -> Content written = " + fileContent); - } - - let key = bot.dataMine + "-" + bot.codeName + "-" + pProductFolder + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - dateRange: dataRange - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Data Range Updated', event) - - callBack(global.DEFAULT_OK_RESPONSE); - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> err = " + err.stack); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(lastFileDate, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> lastFileDate = " + lastFileDate); } - - try { - - let reportKey = "Masters" + "-" + "Stairs-Patterns" + "-" + "Multi-Period-Daily" + "-" + "dataSet.V1"; - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.file.lastFile = lastFileDate; - thisReport.file.beginingOfMarket = beginingOfMarket.toUTCString() - thisReport.save(callBack); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err.message = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/StairPatterns/Multi-Period-Market/User.Bot.js b/Deprecated-Code/StairPatterns/Multi-Period-Market/User.Bot.js deleted file mode 100644 index 3c79011eb..000000000 --- a/Deprecated-Code/StairPatterns/Multi-Period-Market/User.Bot.js +++ /dev/null @@ -1,818 +0,0 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const GMT_SECONDS = ':00.000 GMT+0000'; - const GMT_MILI_SECONDS = '.000 GMT+0000'; - const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; - - const MODULE_NAME = "User Bot"; - - const TRADES_FOLDER_NAME = "Trades"; - - const CANDLES_FOLDER_NAME = "Candles"; - const CANDLE_STAIRS_FOLDER_NAME = "Candle-Stairs"; - - const VOLUMES_FOLDER_NAME = "Volumes"; - const VOLUME_STAIRS_FOLDER_NAME = "Volume-Stairs"; - - thisObject = { - initialize: initialize, - start: start - }; - - let statusDependencies; - let utilities = UTILITIES.newCloudUtilities(bot, logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - return thisObject; - - function initialize(pStatusDependencies, callBackFunction) { - - try { - - logger.fileName = MODULE_NAME; - logger.initialize(); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - statusDependencies = pStatusDependencies; - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - - This process is going to do the following: - - Read the candles and volumes from Candles Volumes and produce for each market two files with candles stairs and volumes stairs respectively. - - */ - - function start(callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> Entering function."); } - - let market = bot.market; - - buildStairs(); - - function buildStairs() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> Entering function."); } - - try { - - let n; - - periodsLoop(); - - function periodsLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> periodsLoop -> Entering function."); } - - /* - - We will iterate through all posible periods. - - */ - - n = 0 // loop Variable representing each possible period as defined at the periods array. - - loopBody(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> periodsLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function loopBody() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> Entering function."); } - - const outputPeriod = global.marketFilesPeriods[n][0]; - const timeFrame = global.marketFilesPeriods[n][1]; - - nextCandleFile(); - - function nextCandleFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> Entering function."); } - - let fileName = "Data.json"; - - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> text = " + text); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - return; - - } - - let marketFile = JSON.parse(text); - - let candles = []; - let stairsArray = []; - - buildCandles(); - - function buildCandles() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> buildCandles -> Entering function."); } - - try { - - for (let i = 0; i < marketFile.length; i++) { - - let candle = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined - }; - - candle.min = marketFile[i][0]; - candle.max = marketFile[i][1]; - - candle.open = marketFile[i][2]; - candle.close = marketFile[i][3]; - - candle.begin = marketFile[i][4]; - candle.end = marketFile[i][5]; - - if (candle.open > candle.close) { candle.direction = 'Down'; } - if (candle.open < candle.close) { candle.direction = 'Up'; } - if (candle.open === candle.close) { candle.direction = 'Side'; } - - candles.push(candle); - - } - - findCandleStairs(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> buildCandles -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function findCandleStairs() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> findCandleStairs -> Entering function."); } - - /* Finding stairs */ - - let stairs; - - for (let i = 0; i < candles.length - 1; i++) { - - let currentCandle = candles[i]; - let nextCandle = candles[i + 1]; - - if (currentCandle.direction === nextCandle.direction && currentCandle.direction !== 'Side') { - - if (stairs === undefined) { - - stairs = { - open: undefined, - close: undefined, - min: 10000000000000, - max: 0, - begin: undefined, - end: undefined, - direction: undefined, - candleCount: 0, - firstMin: 0, - firstMax: 0, - lastMin: 0, - lastMax: 0 - }; - - stairs.direction = currentCandle.direction; - stairs.candleCount = 2; - - stairs.begin = currentCandle.begin; - stairs.end = nextCandle.end; - - stairs.open = currentCandle.open; - stairs.close = nextCandle.close; - - if (currentCandle.min < nextCandle.min) { stairs.min = currentCandle.min; } else { stairs.min = nextCandle.min; } - if (currentCandle.max > nextCandle.max) { stairs.max = currentCandle.max; } else { stairs.max = nextCandle.max; } - - if (stairs.direction === 'Up') { - - stairs.firstMin = currentCandle.open; - stairs.firstMax = currentCandle.close; - - stairs.lastMin = nextCandle.open; - stairs.lastMax = nextCandle.close; - - } else { - - stairs.firstMin = currentCandle.close; - stairs.firstMax = currentCandle.open; - - stairs.lastMin = nextCandle.close; - stairs.lastMax = nextCandle.open; - - } - - - } else { - - stairs.candleCount++; - stairs.end = nextCandle.end; - stairs.close = nextCandle.close; - - if (stairs.min < nextCandle.min) { stairs.min = currentCandle.min; } - if (stairs.max > nextCandle.max) { stairs.max = currentCandle.max; } - - if (stairs.direction === 'Up') { - - stairs.lastMin = nextCandle.open; - stairs.lastMax = nextCandle.close; - - } else { - - stairs.lastMin = nextCandle.close; - stairs.lastMax = nextCandle.open; - - } - - } - - } else { - - if (stairs !== undefined) { - stairsArray.push(stairs); - stairs = undefined; - } - } - } - - writeCandleStairsFile(); - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> findCandleStairs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeCandleStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < stairsArray.length; i++) { - - let stairs = stairsArray[i]; - - fileContent = fileContent + separator + '[' + - stairs.open + "," + - stairs.close + "," + - stairs.min + "," + - stairs.max + "," + - stairs.begin + "," + - stairs.end + "," + - '"' + stairs.direction + '"' + "," + - stairs.candleCount + "," + - stairs.firstMin + "," + - stairs.firstMax + "," + - stairs.lastMin + "," + - stairs.lastMax + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + CANDLE_STAIRS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - - callBackFunction(err); - return; - - } - - nextVolumeFile(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> writeCandleStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> onFileReceived -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextCandleFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - function nextVolumeFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> Entering function."); } - - let fileName = "Data.json" - - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + bot.dataMine + "/" + "Candles-Volumes"; - let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> text = " + text); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> err = " + err.stack); - callBackFunction(err); - return; - - } - - let marketFile = JSON.parse(text); - - let volumes = []; - let stairsArray = []; - - buildVolumes(); - - function buildVolumes() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> buildVolumes -> Entering function."); } - - for (let i = 0; i < marketFile.length; i++) { - - let volume = { - amountBuy: 0, - amountSell: 0, - begin: undefined, - end: undefined - }; - - volume.amountBuy = marketFile[i][0]; - volume.amountSell = marketFile[i][1]; - - volume.begin = marketFile[i][2]; - volume.end = marketFile[i][3]; - - volumes.push(volume); - - } - - findVolumesStairs(); - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> buildVolumes -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function findVolumesStairs() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> findVolumesStairs -> Entering function."); } - - /* Finding stairs */ - - let buyUpStairs; - let buyDownStairs; - - let sellUpStairs; - let sellDownStairs; - - for (let i = 0; i < volumes.length - 1; i++) { - - let currentVolume = volumes[i]; - let nextVolume = volumes[i + 1]; - - - /* buy volume going up */ - - if (currentVolume.amountBuy < nextVolume.amountBuy) { - - if (buyUpStairs === undefined) { - - buyUpStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - buyUpStairs.type = 'buy'; - buyUpStairs.direction = 'Up'; - buyUpStairs.barsCount = 2; - - buyUpStairs.begin = currentVolume.begin; - buyUpStairs.end = nextVolume.end; - - buyUpStairs.firstAmount = currentVolume.amountBuy; - buyUpStairs.lastAmount = nextVolume.amountBuy; - - } else { - - buyUpStairs.barsCount++; - buyUpStairs.end = nextVolume.end; - buyUpStairs.lastAmount = nextVolume.amountBuy; - - } - - } else { - - if (buyUpStairs !== undefined) { - - if (buyUpStairs.barsCount > 2) { - - stairsArray.push(buyUpStairs); - } - - buyUpStairs = undefined; - } - } - - /* buy volume going down */ - - if (currentVolume.amountBuy > nextVolume.amountBuy) { - - if (buyDownStairs === undefined) { - - buyDownStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - buyDownStairs.type = 'buy'; - buyDownStairs.direction = 'Down'; - buyDownStairs.barsCount = 2; - - buyDownStairs.begin = currentVolume.begin; - buyDownStairs.end = nextVolume.end; - - buyDownStairs.firstAmount = currentVolume.amountBuy; - buyDownStairs.lastAmount = nextVolume.amountBuy; - - } else { - - buyDownStairs.barsCount++; - buyDownStairs.end = nextVolume.end; - buyDownStairs.lastAmount = nextVolume.amountBuy; - - } - - } else { - - if (buyDownStairs !== undefined) { - - if (buyDownStairs.barsCount > 2) { - - stairsArray.push(buyDownStairs); - } - - buyDownStairs = undefined; - } - } - - /* sell volume going up */ - - if (currentVolume.amountSell < nextVolume.amountSell) { - - if (sellUpStairs === undefined) { - - sellUpStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - sellUpStairs.type = 'sell'; - sellUpStairs.direction = 'Up'; - sellUpStairs.barsCount = 2; - - sellUpStairs.begin = currentVolume.begin; - sellUpStairs.end = nextVolume.end; - - sellUpStairs.firstAmount = currentVolume.amountSell; - sellUpStairs.lastAmount = nextVolume.amountSell; - - } else { - - sellUpStairs.barsCount++; - sellUpStairs.end = nextVolume.end; - sellUpStairs.lastAmount = nextVolume.amountSell; - - } - - } else { - - if (sellUpStairs !== undefined) { - - if (sellUpStairs.barsCount > 2) { - - stairsArray.push(sellUpStairs); - } - - sellUpStairs = undefined; - } - } - - /* sell volume going down */ - - if (currentVolume.amountSell > nextVolume.amountSell) { - - if (sellDownStairs === undefined) { - - sellDownStairs = { - type: undefined, - begin: undefined, - end: undefined, - direction: undefined, - barsCount: 0, - firstAmount: 0, - lastAmount: 0 - }; - - sellDownStairs.type = 'sell'; - sellDownStairs.direction = 'Down'; - sellDownStairs.barsCount = 2; - - sellDownStairs.begin = currentVolume.begin; - sellDownStairs.end = nextVolume.end; - - sellDownStairs.firstAmount = currentVolume.amountSell; - sellDownStairs.lastAmount = nextVolume.amountSell; - - } else { - - sellDownStairs.barsCount++; - sellDownStairs.end = nextVolume.end; - sellDownStairs.lastAmount = nextVolume.amountSell; - - } - - } else { - - if (sellDownStairs !== undefined) { - - if (sellDownStairs.barsCount > 2) { - - stairsArray.push(sellDownStairs); - } - - sellDownStairs = undefined; - } - } - } - - writeVolumeStairsFile(); - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> findVolumesStairs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeVolumeStairsFile() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> Entering function."); } - - let separator = ""; - let fileRecordCounter = 0; - - let fileContent = ""; - - for (i = 0; i < stairsArray.length; i++) { - - let stairs = stairsArray[i]; - - fileContent = fileContent + separator + '[' + - '"' + stairs.type + '"' + "," + - stairs.begin + "," + - stairs.end + "," + - '"' + stairs.direction + '"' + "," + - stairs.barsCount + "," + - stairs.firstAmount + "," + - stairs.lastAmount + "]"; - - if (separator === "") { separator = ","; } - - fileRecordCounter++; - - } - - fileContent = "[" + fileContent + "]"; - - let fileName = 'Data.json'; - let filePath = bot.filePathRoot + "/Output/" + VOLUME_STAIRS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrame; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - - callBackFunction(err); - return; - - } - - controlLoop(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> onFileReceived -> writeVolumeStairsFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> nextVolumeFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> loopBody -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function controlLoop() { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildStairs -> controlLoop -> Entering function."); } - - n++; - - if (n < global.marketFilesPeriods.length) { - - loopBody(); - - } else { - - writeStatusReport(callBackFunction); - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> controlLoop -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> buildStairs -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeStatusReport(callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeStatusReport -> Entering function."); } - - try { - - let reportKey = "Masters" + "-" + "Stairs-Patterns" + "-" + "Multi-Period-Market" + "-" + "dataSet.V1"; - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime; - thisReport.save(callBack); - - if (global.areEqualDates(bot.processDatetime, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, bot.processDatetime); - } - - /* Telling the world we are alive and doing well */ - let currentDateString = bot.processDatetime.getUTCFullYear() + '-' + utilities.pad(bot.processDatetime.getUTCMonth() + 1, 2) + '-' + utilities.pad(bot.processDatetime.getUTCDate(), 2); - let currentDate = new Date(bot.processDatetime) - let lastDate = new Date() - bot.processHeartBeat(currentDateString, global.getPercentage(currentDate, currentDate, lastDate)) - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeStatusReport -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/StairPatterns/Project.njsproj b/Deprecated-Code/StairPatterns/Project.njsproj deleted file mode 100644 index 4cab6c556..000000000 --- a/Deprecated-Code/StairPatterns/Project.njsproj +++ /dev/null @@ -1,91 +0,0 @@ - - - - Debug - 2.0 - {aa2901bc-8f81-40f0-a402-5ca79a3f22ad} - - ShowAllFiles - - - c:\users\luis\source\repos\AAOlivia\Multi-Period-Market - . - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/StairPatterns/README.md b/Deprecated-Code/StairPatterns/README.md deleted file mode 100644 index 057a53b4a..000000000 --- a/Deprecated-Code/StairPatterns/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# I'm Stairs Patterns, an AA i-Bot! - -# Disclaimer - -THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL ADVANCED ALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE AACLOUD, THE AA ARENA COMPETITION, THE AA MASTERS BOTS, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. diff --git a/Deprecated-Code/StairPatterns/Stairs-Patterns-Indicator-Bot.sln b/Deprecated-Code/StairPatterns/Stairs-Patterns-Indicator-Bot.sln deleted file mode 100644 index da30e179e..000000000 --- a/Deprecated-Code/StairPatterns/Stairs-Patterns-Indicator-Bot.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{AA2901BC-8F81-40F0-A402-5CA79A3F22AD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2901BC-8F81-40F0-A402-5CA79A3F22AD}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B4BDAEAF-E863-458A-87C1-CC6D8C490784} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/StairPatterns/package.json b/Deprecated-Code/StairPatterns/package.json deleted file mode 100644 index 6a1cc344a..000000000 --- a/Deprecated-Code/StairPatterns/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "Stairs-Patternsa", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "Luis-Fernando-Molina", - "license": "ISC", - "dependencies": { - } -} diff --git a/Deprecated-Code/StairPatterns/this.bot.config.json b/Deprecated-Code/StairPatterns/this.bot.config.json deleted file mode 100644 index 064bff527..000000000 --- a/Deprecated-Code/StairPatterns/this.bot.config.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "displayName": "Stairs Patterns", - "codeName": "Stairs-Patterns", - "type": "Indicator Bot", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "dataMine": "Masters", - "profilePicture": "Stairs Patterns.png", - "dataSetVersion": "dataSet.V1", - "processes": [ - { - "name": "Multi-Period-Market", - "description": "Produces for each market two files with candles stairs and volumes stairs respectively.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Candle-Stairs", - "dataSet": "Multi-Period-Market" - }, - { - "product": "Volume-Stairs", - "dataSet": "Multi-Period-Market" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Stairs-Patterns", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1" - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Market", - "dataSetVersion": "dataSet.V1", - "waitUntilNextUpdate": true - } - ] - }, - { - "name": "Multi-Period-Daily", - "description": "Produces for each market two files with candles stairs and volumes stairs respectively at each day of the market history.", - "startMode": { - "allMonths": { - "run": "false", - "minYear": "", - "maxYear": "" - }, - "oneMonth": { - "run": "false", - "year": "", - "month": "" - }, - "noTime": { - "run": "true" - }, - "fixedInterval": { - "run": "false", - "interval": 0 - } - }, - "deadWaitTime": 0, - "normalWaitTime": 0, - "retryWaitTime": 10000, - "sleepWaitTime": 3600000, - "comaWaitTime": 86400000, - "updatesDatasets": [ - { - "product": "Candle-Stairs", - "dataSet": "Multi-Period-Daily" - }, - { - "product": "Volume-Stairs", - "dataSet": "Multi-Period-Daily" - } - ], - "statusDependencies": [ - { - "dataMine": "Masters", - "bot": "Exchange-Raw-Data", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Historic-Trades", - "dataSetVersion": "dataSet.V1" - }, - { - "dataMine": "Masters", - "bot": "Candles-Volumes", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1", - "waitUntilNextUpdate": true - }, - { - "dataMine": "Masters", - "bot": "Stairs-Patterns", - "botVersion": { - "major": 1, - "minor": 0 - }, - "process": "Multi-Period-Daily", - "dataSetVersion": "dataSet.V1" - } - ] - } - ], - "products": [ - { - "codeName": "Candle-Stairs", - "displayName": "Candle-Stairs Patters", - "description": "Two sets of files per period that contains candle-stairs patterns.", - "storageAccount": "Stairs-Patterns", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Candle-Stairs/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersStairsPatterns", - "moduleName": "CandleStairs" - } - }, - { - "codeName": "Volume-Stairs", - "displayName": "Volume-Stairs Patters", - "description": "Two sets of files per period that contains volume-stairs patterns.", - "storageAccount": "Stairs-Patterns", - "shareWith": "Public", - "dataSets": [ - { - "codeName": "Multi-Period-Market", - "type": "Market Files", - "validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ], - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Market/@Period", - "fileName": "@AssetA_@AssetB.json" - }, - { - "codeName": "Multi-Period-Daily", - "type": "Daily Files", - "validPeriods": [ "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min" ], - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", - "fileName": "@AssetA_@AssetB.json", - "dataRange": { - "filePath": "Masters/Stairs-Patterns.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily", - "fileName": "Data.Range.@AssetA_@AssetB.json" - } - } - ], - "exchangeList": [ - { - "name": "Poloniex" - }, - { - "name": "Coss" - } - ], - "plotter": { - "dataMine": "Masters", - "codeName": "PlottersStairsPatterns", - "moduleName": "VolumeStairs" - } - } - ] -} - - - diff --git a/Deprecated-Code/StrategizerServer/.babelrc b/Deprecated-Code/StrategizerServer/.babelrc deleted file mode 100644 index f2e312799..000000000 --- a/Deprecated-Code/StrategizerServer/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env", "stage-2"] -} diff --git a/Deprecated-Code/StrategizerServer/.dockerignore b/Deprecated-Code/StrategizerServer/.dockerignore deleted file mode 100644 index fe24f1c90..000000000 --- a/Deprecated-Code/StrategizerServer/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore files to be uploaded to the image -.env -.env.dev -.env.prod -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/StrategizerServer/.env.local b/Deprecated-Code/StrategizerServer/.env.local deleted file mode 100644 index 7fb211a31..000000000 --- a/Deprecated-Code/StrategizerServer/.env.local +++ /dev/null @@ -1,6 +0,0 @@ -NODE_ENV=production -PORT=4008 - -MONGO_URL=mongodb://mongo/strategies - -PRESHARED_GATEWAY_KEY=strategizer_keys diff --git a/Deprecated-Code/StrategizerServer/.eslintrc.js b/Deprecated-Code/StrategizerServer/.eslintrc.js deleted file mode 100644 index 93f90913a..000000000 --- a/Deprecated-Code/StrategizerServer/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - parser: 'babel-eslint', - extends: 'airbnb-base', - rules: { - 'max-len': ['error', 140, 2], - 'no-underscore-dangle': 'off', - 'no-param-reassign': 'off', - 'import/no-cycle': 'off', - } -}; diff --git a/Deprecated-Code/StrategizerServer/.gitignore b/Deprecated-Code/StrategizerServer/.gitignore deleted file mode 100644 index 8e14c1a3d..000000000 --- a/Deprecated-Code/StrategizerServer/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Dependency directories -node_modules/ - -# Optional npm cache directory -.npm - -# dotenv environment variables file -.env - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -#Mac specific files -.DS_Store diff --git a/Deprecated-Code/StrategizerServer/CODE_OF_CONDUCT.md b/Deprecated-Code/StrategizerServer/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/StrategizerServer/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/StrategizerServer/CONTRIBUTING.md b/Deprecated-Code/StrategizerServer/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/StrategizerServer/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/StrategizerServer/Dockerfile b/Deprecated-Code/StrategizerServer/Dockerfile deleted file mode 100644 index 35d0269e8..000000000 --- a/Deprecated-Code/StrategizerServer/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/strategizer-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/StrategizerServer/Dockerfile.prod b/Deprecated-Code/StrategizerServer/Dockerfile.prod deleted file mode 100644 index 0564b918f..000000000 --- a/Deprecated-Code/StrategizerServer/Dockerfile.prod +++ /dev/null @@ -1,21 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4008 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/StrategizerServer/LICENSE b/Deprecated-Code/StrategizerServer/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/StrategizerServer/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/StrategizerServer/README.md b/Deprecated-Code/StrategizerServer/README.md deleted file mode 100644 index 25af39636..000000000 --- a/Deprecated-Code/StrategizerServer/README.md +++ /dev/null @@ -1 +0,0 @@ -This is the backend of the Strategizer module. It enables you to save and change your strategies for the Jason indicator approch. \ No newline at end of file diff --git a/Deprecated-Code/StrategizerServer/docker-compose.prod.yml b/Deprecated-Code/StrategizerServer/docker-compose.prod.yml deleted file mode 100644 index e7765248b..000000000 --- a/Deprecated-Code/StrategizerServer/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: aastrategizerapi-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: aastrategizerapi - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: npm start - expose: - - 4008 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/StrategizerServer/package-lock.json b/Deprecated-Code/StrategizerServer/package-lock.json deleted file mode 100644 index 80cc95a42..000000000 --- a/Deprecated-Code/StrategizerServer/package-lock.json +++ /dev/null @@ -1,7098 +0,0 @@ -{ - "name": "@superalgos/strategizer-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.5.tgz", - "integrity": "sha512-5ySiiNT2EIwxGKWyoAOnibCPUXvbxKOVxiPMK4uIXmvF+qbGNleQWP+vekciiAmCCESPmGd5szscRwDm4G/NNg==", - "requires": { - "apollo-env": "0.4.0" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz", - "integrity": "sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/node": { - "version": "11.13.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", - "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "apollo-cache-control": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.5.2.tgz", - "integrity": "sha512-uehXDUrd3Qim+nzxqqN7XT1YTbNSyumW3/FY5BxbKZTI8d4oPG4eyVQKqaggooSjswKQnOoIQVes3+qg9tGAkw==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.4" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.4.tgz", - "integrity": "sha512-qLThJGVMqcItE7GDf/xX/E40m/aeqFheEKiR5bfra4q5eHxQKGjnIc20P9CVqjOn9I0FkEiU9ypOobfmIf7t6g==", - "requires": { - "@apollographql/apollo-tools": "^0.3.3" - } - } - } - }, - "apollo-datasource": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.3.1.tgz", - "integrity": "sha512-qdEUeonc9pPZvYwXK36h2NZoT7Pddmy0HYOzdV0ON5pcG1YtNmUyyYi83Q60V5wTWjuaCjyJ9hOY6wr0BMvQuA==", - "requires": { - "apollo-server-caching": "0.3.1", - "apollo-server-env": "2.2.0" - } - }, - "apollo-engine-reporting": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.0.7.tgz", - "integrity": "sha512-mFsXvd+1/o5jSa9tI2RoXYGcvCLcwwcfLwchjSTxqUd4ViB8RbqYKynzEZ+Omji7PBRM0azioBm43f7PSsQPqA==", - "requires": { - "apollo-engine-reporting-protobuf": "0.2.1", - "apollo-graphql": "^0.1.0", - "apollo-server-core": "2.4.8", - "apollo-server-env": "2.2.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.5.7" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.2.1.tgz", - "integrity": "sha512-5pYR84uWeylRS2OJowtkTczT3bWTwOErWtfnkRKccUi/wZ/AZJBP+D5HKNzM7xoFcz9XvrJyS+wBTz1oBi0Jiw==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-env": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.4.0.tgz", - "integrity": "sha512-TZpk59RTbXd8cEqwmI0KHFoRrgBRplvPAP4bbRrX4uDSxXvoiY0Y6tQYUlJ35zi398Hob45mXfrZxeRDzoFMkQ==", - "requires": { - "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - } - }, - "apollo-graphql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.1.3.tgz", - "integrity": "sha512-bYgDh71jFfHKO9ioGlxnnoSYgpNp6LRl+/QHTx6tktQEN0Z+AdpkOKFNCHO/pRU/4vSqV5wuIhxhnCecxJQrMA==", - "requires": { - "apollo-env": "0.4.0", - "lodash.sortby": "^4.7.0" - } - }, - "apollo-link": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", - "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", - "requires": { - "apollo-utilities": "^1.2.1", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.18" - } - }, - "apollo-server-caching": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.3.1.tgz", - "integrity": "sha512-mfxzikYXbB/OoEms77AGYwRh7FF3Oim5v5XWAL+VL49FrkbZt5lopVa4bABi7Mz8Nt3Htl9EBJN8765s/yh8IA==", - "requires": { - "lru-cache": "^5.0.0" - } - }, - "apollo-server-core": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.4.8.tgz", - "integrity": "sha512-N+5UOzHhMOnHizEiArJtNvEe/cGhSHQyTn5tlU4RJ36FDBJ/WlYZfPbGDMLISSUCJ6t+aP8GLL4Mnudt9d2PDQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.3", - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.5.2", - "apollo-datasource": "0.3.1", - "apollo-engine-reporting": "1.0.7", - "apollo-server-caching": "0.3.1", - "apollo-server-env": "2.2.0", - "apollo-server-errors": "2.2.1", - "apollo-server-plugin-base": "0.3.7", - "apollo-tracing": "0.5.2", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "0.5.7", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - } - }, - "apollo-server-env": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.1.tgz", - "integrity": "sha512-wY/YE3iJVMYC+WYIf8QODBjIP4jhI+oc7kiYo9mrz7LdYPKAgxr/he+NteGcqn/0Ea9K5/ZFTGJDbEstSMeP8g==" - }, - "apollo-server-express": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.4.8.tgz", - "integrity": "sha512-i60l32mfVe33jnKDPNYgUKUKu4Al0xEm2HLOSMgtJ9Wbpe/MbOx5X8M5F27fnHYdM+G5XfAErsakAyRGnQJ48Q==", - "requires": { - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.16.1", - "accepts": "^1.3.5", - "apollo-server-core": "2.4.8", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.3.7.tgz", - "integrity": "sha512-hW1jaLKf9qNOxMTwRq2CSqz3eqXsZuEiCc8/mmEtOciiVBq1GMtxFf19oIYM9HQuPvQU2RWpns1VrYN59L3vbg==" - }, - "apollo-tracing": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.5.2.tgz", - "integrity": "sha512-2FdwRvPIq9uuF6OzONroXep6VBGqzHOkP6LlcFQe7SdwxfRP+SD/ycHNSC1acVg2b8d+am9Kzqg2vV54UpOIKA==", - "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.4" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.4.tgz", - "integrity": "sha512-qLThJGVMqcItE7GDf/xX/E40m/aeqFheEKiR5bfra4q5eHxQKGjnIc20P9CVqjOn9I0FkEiU9ypOobfmIf7t6g==", - "requires": { - "@apollographql/apollo-tools": "^0.3.3" - } - } - } - }, - "apollo-utilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", - "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.2.1", - "tslib": "^1.9.3" - }, - "dependencies": { - "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - }, - "busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "requires": { - "dicer": "0.3.0" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000963", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz", - "integrity": "sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "3.0.0-beta.13", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", - "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "requires": { - "streamsearch": "0.1.2" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.128", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.128.tgz", - "integrity": "sha512-1QK+KELj1mhC9iE7grSP9PP2f06F85UgTs0M9qjuvSuKwxbyifhyPB8dZ27IlYvzMBnLtO4oHNBKTQoN6Tg5mg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - } - }, - "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", - "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", - "has": "^1.0.3", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "read-pkg-up": "^2.0.0", - "resolve": "^1.10.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - } - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", - "dev": true - }, - "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-capacitor": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.1.tgz", - "integrity": "sha512-kyV2oaG1/pu9NPosfGACmBym6okgzyg6hEtA5LSUq0dGpGLe278MVfMwVnSHDA/OBcTCHkPNqWL9eIwbPN6dDg==" - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-extensions": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.7.tgz", - "integrity": "sha512-HrU6APE1PiehZ46scMB3S5DezSeCATd8v+e4mmg2bqszMyCFkmAnmK6hR1b5VjHxhzt5/FX21x1WsXfqF4FwdQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.3" - } - }, - "graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "graphql-tools": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", - "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - }, - "graphql-upload": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.6.tgz", - "integrity": "sha512-cBRALMOvGBm2AD6M61b1QbSmKfCLXvgV+Z3wXT2JS1EQwGWQ1g5/sby4J/cpwAaGnq5P2eGp+N3HQI9cSn9Jfg==", - "requires": { - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.1", - "http-errors": "^1.7.2", - "object-path": "^0.11.4" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true, - "optional": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mongodb": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.3.tgz", - "integrity": "sha512-jw8UyPsq4QleZ9z+t/pIVy3L++51vKdaJ2Q/XXeYxk/3cnKioAH8H6f5tkkDivrQL4PUgUOHe9uZzkpRFH1XtQ==", - "requires": { - "mongodb-core": "^3.2.3", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.3.tgz", - "integrity": "sha512-UyI0rmvPPkjOJV8XGWa9VCTq7R4hBVipimhnAXeSXnuAPjuTqbyfA5Ec9RcYJ1Hhu+ISnc8bJ1KfGZd4ZkYARQ==", - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.5.5.tgz", - "integrity": "sha512-rov43FpXDMoE22q8/iUoeSdg6zBtyTE/ZIIKRpQomASl0JOyD0479Weu9w5g0GjmP8fHmNjsWneoLIbnyGcnDQ==", - "requires": { - "async": "2.6.1", - "bson": "~1.1.1", - "kareem": "2.3.0", - "mongodb": "3.2.3", - "mongodb-core": "3.2.3", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.2", - "mquery": "3.2.0", - "ms": "2.1.1", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sift": "7.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.2.tgz", - "integrity": "sha512-NOeCoW6AYc3hLi30npe7uzbD9b4FQZKH40YKABUCCvaKKL5agj6YzvHoNx8jQpDMNPgIa5bvSZQbQpWBAVD0Kw==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==" - }, - "nodemon": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.0.tgz", - "integrity": "sha512-NHKpb/Je0Urmwi3QPDHlYuFY9m1vaVfTsRZG5X73rY46xPj0JpNe8WhUGQdkDXQDOxrBNIU3JrcflE9Y44EcuA==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", - "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" - } - } - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "pstree.remy": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", - "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rxjs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz", - "integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", - "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", - "dev": true, - "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "ts-invariant": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", - "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "zen-observable": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", - "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" - }, - "zen-observable-ts": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz", - "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/StrategizerServer/package.json b/Deprecated-Code/StrategizerServer/package.json deleted file mode 100644 index 667c39594..000000000 --- a/Deprecated-Code/StrategizerServer/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@superalgos/strategizer-api", - "version": "0.1.0", - "description": "Superalgos strategizer backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "main": "src/index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/Superalgos/StrategizerServerModule.git" - }, - "scripts": { - "start": "nodemon --exec babel-node --presets env,stage-2 src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "standard": { - "ignore": [ - "/src/errors/index.js" - ] - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-eslint": "^10.0.1", - "babel-preset-env": "^1.7.0", - "babel-preset-stage-2": "^6.24.1", - "eslint": "^5.8.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-plugin-import": "^2.14.0", - "nodemon": "^1.18.10" - }, - "dependencies": { - "apollo-server-express": "^2.1.0", - "axios": "^0.18.0", - "dotenv": "^6.0.0", - "express": "^4.16.3", - "graphql": "^0.13.2", - "mongoose": "^5.3.4" - } -} diff --git a/Deprecated-Code/StrategizerServer/src/app.js b/Deprecated-Code/StrategizerServer/src/app.js deleted file mode 100644 index 343a2aaec..000000000 --- a/Deprecated-Code/StrategizerServer/src/app.js +++ /dev/null @@ -1,43 +0,0 @@ -import 'dotenv/config'; -import express from 'express'; -import { ApolloServer } from 'apollo-server-express'; -import schema from './schema'; -import wrongPreshared from './errors/notAllowed.json'; - -const app = express(); - -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - -// Starting the graphql server -const server = new ApolloServer({ - schema, - playground: { - settings: { - 'editor.theme': 'dark', - 'editor.cursorShape': 'line', - }, - }, - context: ({ req }) => ({ - userId: req.headers.userid, - authorization: req.headers.authorization, - }), - formatError: error => ({ - code: error.extensions.exception.code, - message: error.message, - path: error.path, - }), - introspection: true, -}); - -server.applyMiddleware({ - app, - cors: true, -}); - -export default app; diff --git a/Deprecated-Code/StrategizerServer/src/db.js b/Deprecated-Code/StrategizerServer/src/db.js deleted file mode 100644 index 8f7d6a6cd..000000000 --- a/Deprecated-Code/StrategizerServer/src/db.js +++ /dev/null @@ -1,11 +0,0 @@ -import 'dotenv/config'; -import mongoose from 'mongoose'; - -mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }); -mongoose.set('useCreateIndex', true); -mongoose.set('useFindAndModify', false); -mongoose.Promise = global.Promise; - -const db = mongoose.connection; - -export default db; diff --git a/Deprecated-Code/StrategizerServer/src/errors/index.js b/Deprecated-Code/StrategizerServer/src/errors/index.js deleted file mode 100644 index d97fc3ec5..000000000 --- a/Deprecated-Code/StrategizerServer/src/errors/index.js +++ /dev/null @@ -1,23 +0,0 @@ -export class AuthentificationError extends Error { - code = 401 - - message = 'Autentification not found, you have to be authentificated to perform this action' -} - -export class DatabaseError extends Error { - code = 404 - - message = `Ressource not found : ${this.message}` -} - -export class WrongArgumentsError extends Error { - code = 400 - - message = `Wrong arguments : ${this.message}` -} - -export class ServiceUnavailableError extends Error { - code = 503 - - message = `At least one service is unresponding ${this.message}` -} diff --git a/Deprecated-Code/StrategizerServer/src/errors/notAllowed.json b/Deprecated-Code/StrategizerServer/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/StrategizerServer/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/StrategizerServer/src/index.js b/Deprecated-Code/StrategizerServer/src/index.js deleted file mode 100644 index f16f609ff..000000000 --- a/Deprecated-Code/StrategizerServer/src/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable no-console */ -import db from './db'; -import app from './app'; - -db.on('error', (err) => { - console.log(err); -}); -db.once('open', () => { - console.log('Connected to the DB.'); -}); - -app.listen(process.env.PORT, () => { - console.log(`Listening on port ${process.env.PORT}`); -}); diff --git a/Deprecated-Code/StrategizerServer/src/models/TradingSystem.js b/Deprecated-Code/StrategizerServer/src/models/TradingSystem.js deleted file mode 100644 index 5980b6079..000000000 --- a/Deprecated-Code/StrategizerServer/src/models/TradingSystem.js +++ /dev/null @@ -1,24 +0,0 @@ -import mongoose, { Schema } from 'mongoose'; - -const tradingSystemSchema = new Schema( - { - fbSlug: { - type: String, - required: true, - unique: true, - dropDups: true, - }, - data: Object, - history: [{ - updatedAt: Date, - data: Object, - }], - }, - { - timestamps: true, - }, -); - -const TradingSystem = mongoose.model('TradingSystem', tradingSystemSchema); - -export default TradingSystem; diff --git a/Deprecated-Code/StrategizerServer/src/models/index.js b/Deprecated-Code/StrategizerServer/src/models/index.js deleted file mode 100644 index 3ea7d795c..000000000 --- a/Deprecated-Code/StrategizerServer/src/models/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-disable import/prefer-default-export */ -import TradingSystem from './TradingSystem'; - -export { - TradingSystem, -}; diff --git a/Deprecated-Code/StrategizerServer/src/schema/index.js b/Deprecated-Code/StrategizerServer/src/schema/index.js deleted file mode 100644 index 81d0b3150..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { - GraphQLSchema, -} from 'graphql'; - -import Mutation from './mutations'; -import RootQuery from './queries'; - -const Schema = new GraphQLSchema({ - query: RootQuery, - mutation: Mutation, -}); - -export default Schema; diff --git a/Deprecated-Code/StrategizerServer/src/schema/mutations/CreateTradingSystem.js b/Deprecated-Code/StrategizerServer/src/schema/mutations/CreateTradingSystem.js deleted file mode 100644 index 3546ff05c..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/mutations/CreateTradingSystem.js +++ /dev/null @@ -1,42 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, -} from 'graphql'; -import { TradingSystemType } from '../types'; -import { TradingSystem } from '../../models'; -import { TradingSystemInputType } from '../types/input'; -import defaultTradingSystem from '../../templates/tradingSystemTemplate'; - -export const args = { - fbSlug: { type: new GraphQLNonNull(GraphQLString) }, - tradingSystem: { type: TradingSystemInputType }, -}; - -const resolve = (parent, { fbSlug, tradingSystem }) => { - if (tradingSystem === undefined) { - tradingSystem = defaultTradingSystem; - } - tradingSystem.fbSlug = fbSlug; - tradingSystem.history = []; - const newTradingSystem = new TradingSystem(tradingSystem); - - return new Promise((res, rej) => { - newTradingSystem.save((err) => { - if (err) { - rej(err); - return; - } - res(newTradingSystem); - }); - }); -}; - -const mutation = { - createTradingSystem: { - type: TradingSystemType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/StrategizerServer/src/schema/mutations/EditTradingSystem.js b/Deprecated-Code/StrategizerServer/src/schema/mutations/EditTradingSystem.js deleted file mode 100644 index c45dd6858..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/mutations/EditTradingSystem.js +++ /dev/null @@ -1,47 +0,0 @@ -import { - GraphQLNonNull, - GraphQLID, -} from 'graphql'; -import { TradingSystemType } from '../types'; -import { TradingSystem } from '../../models'; -import { TradingSystemInputType } from '../types/input'; - -const args = { - id: { type: new GraphQLNonNull(GraphQLID) }, - tradingSystem: { type: new GraphQLNonNull(TradingSystemInputType) }, -}; - -const resolve = (parent, { id: _id, tradingSystem: editedTradingSystem }) => new Promise((res, rej) => { - TradingSystem.findOne({ _id }).exec((err, tradingSystem) => { - if (err) { - rej(err); - return; - } - if (!tradingSystem) { - rej(err); - return; - } - tradingSystem.history.push({ - updatedAt: tradingSystem.updatedAt, - data: tradingSystem.data, - }); - tradingSystem.data = editedTradingSystem.data; - tradingSystem.save((error) => { - if (error) { - rej(error); - return; - } - res(tradingSystem); - }); - }); -}); - -const mutation = { - editTradingSystem: { - type: TradingSystemType, - args, - resolve, - }, -}; - -export default mutation; diff --git a/Deprecated-Code/StrategizerServer/src/schema/mutations/index.js b/Deprecated-Code/StrategizerServer/src/schema/mutations/index.js deleted file mode 100644 index bfbd12119..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/mutations/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import CreateTradingSystemMutation from './CreateTradingSystem'; -import EditTradingSystemMutation from './EditTradingSystem'; - -const Mutation = new GraphQLObjectType({ - name: 'Mutation', - fields: Object.assign( - CreateTradingSystemMutation, - EditTradingSystemMutation, - ), -}); - -export default Mutation; diff --git a/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemByFB.js b/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemByFB.js deleted file mode 100644 index 3bbfdd4e8..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemByFB.js +++ /dev/null @@ -1,35 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, -} from 'graphql'; -import { DatabaseError } from '../../errors'; -import { TradingSystemType } from '../types'; -import { TradingSystem } from '../../models'; - -const args = { - fbSlug: { type: new GraphQLNonNull(GraphQLString) }, -}; - -const resolve = (parent, { fbSlug }) => new Promise((res, rej) => { - TradingSystem.findOne({ fbSlug }).exec((err, tradingSystem) => { - if (err) { - rej(err); - return; - } - if (!tradingSystem) { - rej(new DatabaseError('None of the tradingSystem are linked to that fbSlug')); - return; - } - res(tradingSystem); - }); -}); - -const query = { - tradingSystemByFb: { - type: TradingSystemType, - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemById.js b/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemById.js deleted file mode 100644 index 053f33d19..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/queries/TradingSystemById.js +++ /dev/null @@ -1,35 +0,0 @@ -import { - GraphQLNonNull, - GraphQLString, -} from 'graphql'; -import { DatabaseError } from '../../errors'; -import { TradingSystemType } from '../types'; -import { TradingSystem } from '../../models'; - -const args = { - id: { type: new GraphQLNonNull(GraphQLString) }, -}; - -const resolve = (parent, { id }) => new Promise((res, rej) => { - TradingSystem.findOne({ _id: id }).exec((err, tradingSystem) => { - if (err) { - rej(err); - return; - } - if (!tradingSystem) { - rej(new DatabaseError('None of the tradingSystem are linked to that id')); - return; - } - res(tradingSystem); - }); -}); - -const query = { - tradingSystemById: { - type: TradingSystemType, - args, - resolve, - }, -}; - -export default query; diff --git a/Deprecated-Code/StrategizerServer/src/schema/queries/index.js b/Deprecated-Code/StrategizerServer/src/schema/queries/index.js deleted file mode 100644 index 7810c75cf..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/queries/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - GraphQLObjectType, -} from 'graphql'; - -import TradingSystemByFbQuery from './TradingSystemByFB'; -import TradingSystemByIdQuery from './TradingSystemById'; - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: Object.assign( - TradingSystemByFbQuery, - TradingSystemByIdQuery, - ), -}); - -export default RootQuery; diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/GraphQLJSONObject.js b/Deprecated-Code/StrategizerServer/src/schema/types/GraphQLJSONObject.js deleted file mode 100644 index 4c4b52774..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/types/GraphQLJSONObject.js +++ /dev/null @@ -1,83 +0,0 @@ -/* eslint-disable no-void */ -exports.__esModule = true; -exports.GraphQLJSONObject = void 0; -exports.default = void 0; -exports.GraphQLJSON = void 0; - -const _graphql = require('graphql'); - -const _language = require('graphql/language'); - -function identity(value) { - return value; -} - -function ensureObject(value) { - if (typeof value !== 'object' || value === null || Array.isArray(value)) { - throw new TypeError(`JSONObject cannot represent non-object value: ${value}`); - } - - return value; -} - -function parseObject(ast, variables) { - const value = Object.create(null); - ast.fields.forEach((field) => { - // eslint-disable-next-line no-use-before-define - value[field.name.value] = parseLiteral(field.value, variables); - }); - return value; -} - -function parseLiteral(ast, variables) { - switch (ast.kind) { - case _language.Kind.STRING: - case _language.Kind.BOOLEAN: - return ast.value; - - case _language.Kind.INT: - case _language.Kind.FLOAT: - return parseFloat(ast.value); - - case _language.Kind.OBJECT: - return parseObject(ast, variables); - - case _language.Kind.LIST: - return ast.values.map(n => parseLiteral(n, variables)); - - case _language.Kind.NULL: - return null; - - case _language.Kind.VARIABLE: - { - const name = ast.name.value; - return variables ? variables[name] : undefined; - } - - default: - return undefined; - } -} // This named export is intended for users of CommonJS. Users of ES modules -// should instead use the default export. - - -const GraphQLJSON = new _graphql.GraphQLScalarType({ - name: 'JSON', - description: 'The `JSON` scalar type represents JSON values as specified by' - + ' [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).', - serialize: identity, - parseValue: identity, - parseLiteral, -}); -exports.GraphQLJSON = GraphQLJSON; -const _default = GraphQLJSON; -exports.default = _default; -const GraphQLJSONObject = new _graphql.GraphQLScalarType({ - name: 'JSONObject', - description: 'The `JSONObject` scalar type represents JSON objects as specified by' - + ' [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).', - serialize: ensureObject, - parseValue: ensureObject, - parseLiteral: parseObject, -}); -exports.GraphQLJSONObject = GraphQLJSONObject; diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/TradingSystem.js b/Deprecated-Code/StrategizerServer/src/schema/types/TradingSystem.js deleted file mode 100644 index 3cc5584e6..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/types/TradingSystem.js +++ /dev/null @@ -1,18 +0,0 @@ -import { - GraphQLObjectType, - GraphQLString, - GraphQLID, -} from 'graphql'; -import GraphQLJSON from './GraphQLJSONObject'; - -const Type = new GraphQLObjectType({ - name: 'TradingSystem', - description: 'Everything you need to know about a trading system', - fields: () => ({ - id: { type: GraphQLID }, - fbSlug: { type: GraphQLString }, - data: { type: GraphQLJSON }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/enum/.keep b/Deprecated-Code/StrategizerServer/src/schema/types/enum/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/index.js b/Deprecated-Code/StrategizerServer/src/schema/types/index.js deleted file mode 100644 index b94631f0c..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/types/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import TradingSystemType from './TradingSystem'; - -export { - // eslint-disable-next-line import/prefer-default-export - TradingSystemType, -}; diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/input/TradingSystem.js b/Deprecated-Code/StrategizerServer/src/schema/types/input/TradingSystem.js deleted file mode 100644 index 4dc4bd5f1..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/types/input/TradingSystem.js +++ /dev/null @@ -1,14 +0,0 @@ -import { - GraphQLInputObjectType, -} from 'graphql'; -import GraphQLJSON from '../GraphQLJSONObject'; - -const Type = new GraphQLInputObjectType({ - name: 'TradingSystemInput', - description: 'Payload for trading system input', - fields: () => ({ - data: { type: GraphQLJSON }, - }), -}); - -export default Type; diff --git a/Deprecated-Code/StrategizerServer/src/schema/types/input/index.js b/Deprecated-Code/StrategizerServer/src/schema/types/input/index.js deleted file mode 100644 index 34935212f..000000000 --- a/Deprecated-Code/StrategizerServer/src/schema/types/input/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import TradingSystemInputType from './TradingSystem'; - -export { - // eslint-disable-next-line import/prefer-default-export - TradingSystemInputType, -}; diff --git a/Deprecated-Code/StrategizerServer/src/templates/tradingSystemTemplate.js b/Deprecated-Code/StrategizerServer/src/templates/tradingSystemTemplate.js deleted file mode 100644 index 944c8ef9a..000000000 --- a/Deprecated-Code/StrategizerServer/src/templates/tradingSystemTemplate.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-disable max-len */ -const tradingSystem = { - data: {}, -}; - -export default tradingSystem; diff --git a/Deprecated-Code/StrategizerServer/src/utils/.keep b/Deprecated-Code/StrategizerServer/src/utils/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/TaskServer/.dockerignore b/Deprecated-Code/TaskServer/.dockerignore deleted file mode 100644 index 0165f51d2..000000000 --- a/Deprecated-Code/TaskServer/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -.vs/** -obj/** - -bin/** - -*.config -*.log -*.cache -.env* - -\.vscode/ -Project.njsproj -coverage/ -.nyc_output/ diff --git a/Deprecated-Code/TaskServer/.gitattributes b/Deprecated-Code/TaskServer/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/TaskServer/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/TaskServer/.gitignore b/Deprecated-Code/TaskServer/.gitignore deleted file mode 100644 index 4d0f3bae0..000000000 --- a/Deprecated-Code/TaskServer/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ - -.vs/* -obj/* - -bin/* - -*.config -*.log -*.cache -node_modules/* -exchange/Auth0.js -.env* - -\.vscode/ -Project.njsproj -coverage/* -.nyc_output/** diff --git a/Deprecated-Code/TaskServer/CODE_OF_CONDUCT.md b/Deprecated-Code/TaskServer/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/TaskServer/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/TaskServer/CONTRIBUTING.md b/Deprecated-Code/TaskServer/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/TaskServer/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/CloudUtilities.js b/Deprecated-Code/TaskServer/CloudUtilities.js deleted file mode 100644 index 1c8a9ccb6..000000000 --- a/Deprecated-Code/TaskServer/CloudUtilities.js +++ /dev/null @@ -1,85 +0,0 @@ - -exports.newCloudUtilities = function newCloudUtilities(logger) { - - const FULL_LOG = true; - - const MODULE_NAME = "Cloud Utilities"; - - let utilities = { - pad: pad, - createFolderIfNeeded: createFolderIfNeeded, - calculatePresicion: calculatePresicion - }; - - return utilities; - - function createFolderIfNeeded(path, azureFileStorage, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] createFolderIfNeeded -> Entering function."); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] createFolderIfNeeded -> path = " + path); } - - let splittedPath = path.split("/"); - - let partialPath = ''; - let separator = ""; - - let i = 0; - loop(); - - function loop() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] createFolderIfNeeded -> path = " + path); } - - partialPath = partialPath + separator + splittedPath[i]; - separator = "/"; - - i++; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] createFolderIfNeeded -> partialPath = " + partialPath); } - - azureFileStorage.createFolder(partialPath, checkLoop); - - function checkLoop(err) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] createFolderIfNeeded -> loop -> checkLoop -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] createFolderIfNeeded -> loop -> checkLoop -> err = "+ err.stack); - callBackFunction(err); - return; - } - - if (i === splittedPath.length) { - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } else { - - loop(); - - } - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] createFolderIfNeeded -> Error = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - - function calculatePresicion(number) { - - for (let i = -10; i <= 10; i++) { - if (number < Math.pow(10, i)) { - return Math.pow(10, i - 3); - } - } - } - - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad("0" + str, max) : str; - } -} diff --git a/Deprecated-Code/TaskServer/Commons.js b/Deprecated-Code/TaskServer/Commons.js deleted file mode 100644 index 7e32f50cb..000000000 --- a/Deprecated-Code/TaskServer/Commons.js +++ /dev/null @@ -1,572 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES, FILE_STORAGE) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons"; - - let thisObject = { - validateDataDependencies: validateDataDependencies, - validateOutputDatasets: validateOutputDatasets, - inflateDatafiles: inflateDatafiles, - dataBuildingProcedure: dataBuildingProcedure, - calculationsProcedure: calculationsProcedure, - generateFileContent: generateFileContent, - writeFile: writeFile - }; - - let utilities = UTILITIES.newCloudUtilities(logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - return thisObject; - - function validateDataDependencies(dataDependencies, callBackFunction) { - for (let i = 0; i < dataDependencies.length; i++) { - - let dataDependencyNode = dataDependencies[i] - - /* Basic validations to see if we have everything we need. */ - if (dataDependencyNode.referenceParent.parentNode.config.singularVariableName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Single Variable Name defined. Product Definition = " + JSON.stringify(dataDependencyNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (dataDependencyNode.referenceParent.parentNode.config.pluralVariableName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Plural Variable Name defined. Product Definition = " + JSON.stringify(dataDependencyNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (dataDependencyNode.referenceParent.parentNode.record === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Record Definition. Product Definition = " + JSON.stringify(dataDependencyNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - return true - } - - function validateOutputDatasets(outputDatasets, callBackFunction) { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - - if (outputDatasetNode.referenceParent === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Output Dataset without Reference Parent. Output Dataset = " + JSON.stringify(outputDatasetNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDatasetNode.referenceParent.parentNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Dataset not a child of a Product Definition. Dataset = " + JSON.stringify(outputDatasetNode.referenceParent)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDatasetNode.referenceParent.parentNode.config.singularVariableName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Single Variable Name defined. Product Definition = " + JSON.stringify(outputDatasetNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDatasetNode.referenceParent.parentNode.config.pluralVariableName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Plural Variable Name defined. Product Definition = " + JSON.stringify(outputDatasetNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDatasetNode.referenceParent.parentNode.record === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition without a Record Definition. Product Definition = " + JSON.stringify(outputDatasetNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDatasetNode.referenceParent.parentNode.dataBuilding === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> Product Definition " + outputDatasetNode.referenceParent.parentNode.name + " without a Data Building Procedure. Product Definition Name = " + outputDatasetNode.referenceParent.parentNode.name); - } - if (outputDatasetNode.referenceParent.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Dataset witn no codeName defined. Product Dataset = " + JSON.stringify(outputDatasetNode.referenceParent)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (outputDatasetNode.referenceParent.parentNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Dataset not attached to a Product Definition. Dataset = " + JSON.stringify(outputDatasetNode.referenceParent)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (outputDatasetNode.referenceParent.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition witn no codeName defined. Product Definition = " + JSON.stringify(outputDatasetNode.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - let botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Indicator Bot') - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Trading Bot') - } - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Learning Bot') - } - if (botNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Product Definition not attached to a Bot. Product Definition = "); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (botNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Bot witn no codeName defined."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - let dataMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Data Mine') - if (dataMineNode === undefined) { - let tradingMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Trading Mine') - if (tradingMineNode === undefined) { - let learningMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Learning Mine') - if (learningMineNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Bot not attached to a Data Mine, Trading Mine or Learning Mine."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } else { - if (tradingMineNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Learning Mine witn no codeName defined."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } else { - if (tradingMineNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Trading Mine witn no codeName defined."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } else { - if (dataMineNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] start -> Data Mine witn no codeName defined."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } - return true - } - - function inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, timeFrame) { - /* - For each dataDependencyNode in our data dependencies, we should have a dataFile containing the records needed as an imput for this process. - What we need to do first is transform those records into JSON objects that can be used by user-defined formulas. - The first step does that but with the not calculated properties, the second step adds the calculated properties. - */ - for (let i = 0; i < dataDependencies.length; i++) { - - let dataFile - let jsonData // Datafile converted into Json objects - let inputData // Includes calculated properties - let singularVariableName // name of the variable for this product - let recordDefinition - - let dataDependencyNode = dataDependencies[i] - dataFile = dataFiles.get(dataDependencyNode.id) - - if (dataFile === undefined) { continue } // When a datafile is not found it might be because we are processing market or daily and at the dependency array there are both types mixed up. - - recordDefinition = dataDependencyNode.referenceParent.parentNode.record - singularVariableName = dataDependencyNode.referenceParent.parentNode.config.singularVariableName - /* Transform the raw data into JSON objects */ - jsonData = jsonifyDataFile(dataFile, recordDefinition) - /* Add the calculated properties */ - if (dataDependencyNode.referenceParent.parentNode.calculations !== undefined) { - inputData = calculationsProcedure(jsonData, recordDefinition, dataDependencyNode.referenceParent.parentNode.calculations, singularVariableName, timeFrame) - } else { - inputData = jsonData - } - products[dataDependencyNode.referenceParent.parentNode.config.pluralVariableName] = inputData - - /* The main dependency is defined as the first dependency processed. */ - if (mainDependency.records === undefined) { - mainDependency.records = inputData - } - } - } - - function jsonifyDataFile(dataFile, recordDefinition) { - - /* - This function has as an input the raw data on files and creates with it an array of JSON objects - with not calculated properties for later being consumed by Formulas - */ - - let jsonifiedArray = [] - let previous; - - for (let i = 0; i < dataFile.length; i++) { - - let record = {} - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated !== true) { - record[property.config.codeName] = dataFile[i][j] - } - } - - record.previous = previous; - jsonifiedArray.push(record); - previous = record; - } - - return jsonifiedArray - } - - function calculationsProcedure(jsonArray, recordDefinition, calculationsProcedure, variableName, timeFrame) { - - /* - This function has as an input an array of JSON objects, and it adds calculated properties to - complete the set of properties that will be available for Formulas. - */ - - let system = { // These are the available system variables to be used in User Code and Formulas - timeFrame: timeFrame, - ONE_DAY_IN_MILISECONDS: global.ONE_DAY_IN_MILISECONDS - } - let variable = {} // This is the structure where the user will define its own variables that will be shared across different code blocks and formulas. - let results = [] - - /* This is Initialization Code */ - if (calculationsProcedure.initialization !== undefined) { - if (calculationsProcedure.initialization.javascriptCode !== undefined) { - try { - eval(calculationsProcedure.initialization.javascriptCode.code) - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> initialization -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> initialization -> Error executing User Code. Code = " + calculationsProcedure.initialization.javascriptCode.code); - throw ("Error Executing User Code.") - } - } - } - - /* This is Initialization Code */ - if (calculationsProcedure.loop !== undefined) { - if (calculationsProcedure.loop.javascriptCode !== undefined) { - for (let index = 0; index < jsonArray.length; index++) { - - let product = {} - product[variableName] = jsonArray[index] - - /* This is Loop Code */ - try { - eval(calculationsProcedure.loop.javascriptCode.code) - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> Error executing User Code. product = " + JSON.stringify(product)) - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> Error executing User Code. Code = " + calculationsProcedure.loop.javascriptCode.code); - throw ("Error Executing User Code.") - } - - /* For each calculated property we apply its formula*/ - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated === true) { - if (property.formula !== undefined) { - if (property.formula.code !== undefined) { - try { - let newValue = eval(property.formula.code) - let currentRecord = product[variableName] - currentRecord[property.config.codeName] = newValue - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. product = " + JSON.stringify(product)) - logger.write(MODULE_NAME, "[ERROR] calculationsProcedure -> loop -> formula -> Error executing User Code. Code = " + property.formula.code); - throw ("Error Executing User Code.") - } - } - } - } - } - - /* Adding the new element to the resulting array */ - results.push(product[variableName]); - } - } - } - return results - } - - function dataBuildingProcedure( - products, - mainDependency, - recordDefinition, - dataBuildingProcedure, - variableName, - productName, - timeFrame, - timeFrameLabel, - resultsWithIrregularPeriods, - interExecutionMemory, - processingDailyFiles, - currentDay - ) { - - /* - This function has as an input the products object, with all the information - of all products calculated so far by the process. Based on that information - the function will evaluate user supplied code and formulas in order to build - a new set of information. - */ - - let lastInstantOfTheDay - let yesterday = {} - let system = { // These are the available system variables to be used in User Code and Formulas - timeFrame: timeFrame, - ONE_DAY_IN_MILISECONDS: global.ONE_DAY_IN_MILISECONDS, - ONE_MIN_IN_MILISECONDS: global.ONE_MIN_IN_MILISECONDS - } - let variable = {} // This is the structure where the user will define its own variables that will be shared across different code blocks and formulas. - let results = [] - - /* - We are going to build a map structure so that users can easily get the current object of - each data dependency based on the current element of the main data dependency. - We will use as key for these maps the begin and end property, meaning only elements with exactly - the same begin and end property will be matched. - */ - - const PROPERTIES_COUNT = Object.keys(products).length - - let dataDependencies = {} - if (PROPERTIES_COUNT > 1) { // only if we have secondary data dependencies. - for (let i = 1; i < PROPERTIES_COUNT; i++) { - let dataDependecyArray = Object.values(products)[i] - let dataDependencyName = Object.keys(products)[i] - let dataDependencyMap = new Map() - for (let j = 0; j < dataDependecyArray.length; j++) { - let record = dataDependecyArray[j] - let key = record.begin.toString() + '-' + record.end.toString() - dataDependencyMap.set(key, record) - } - dataDependencies[dataDependencyName] = dataDependencyMap - } - } - - function getElement(dependencyName, currentRecordPrimaryDataDependency) { - let key = currentRecordPrimaryDataDependency.begin.toString() + '-' + currentRecordPrimaryDataDependency.end.toString() - return dataDependencies[dependencyName].get(key) - } - - /* This is Initialization Code */ - if (dataBuildingProcedure.initialization !== undefined) { - if (dataBuildingProcedure.initialization.javascriptCode !== undefined) { - try { - eval(dataBuildingProcedure.initialization.javascriptCode.code) - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> initialization -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> initialization -> Error executing User Code. Code = " + dataBuildingProcedure.initialization.javascriptCode.code); - throw ("Error Executing User Code.") - } - } - } - - if (processingDailyFiles) { - /* Initialization of Last Instance */ - lastInstantOfTheDay = currentDay.valueOf() + global.ONE_DAY_IN_MILISECONDS - 1; - - if (interExecutionMemory[productName] === undefined) { - /* The first time the intialization variables goes to the Inter Execution Memory. */ - interExecutionMemory[productName] = {} - interExecutionMemory[productName].variable = JSON.parse(JSON.stringify(variable)) - } - else { - /* We override the initialization, since the valid stuff is already at the Inter Execution Memory */ - variable = JSON.parse(JSON.stringify(interExecutionMemory[productName].variable)) - } - } - - /* This is Initialization Code */ - if (dataBuildingProcedure.loop !== undefined) { - if (dataBuildingProcedure.loop.javascriptCode !== undefined) { - let lastRecord - for (let index = 0; index < mainDependency.records.length; index++) { - - let record = { - previous: mainDependency.records[index - 1], - current: mainDependency.records[index], - next: mainDependency.records[index + 1] - } - lastRecord = record - let product = {} - product[variableName] = {} - - /* This is Loop Code */ - try { - eval(dataBuildingProcedure.loop.javascriptCode.code) - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> Error executing User Code. product = " + JSON.stringify(product)) - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> Error executing User Code. Code = " + dataBuildingProcedure.loop.javascriptCode.code); - throw ("Error Executing User Code.") - } - - /* For each non-calculated property we apply its formula*/ - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated !== true) { - if (property.formula !== undefined) { - if (property.formula.code !== undefined) { - try { - let newValue = eval(property.formula.code) - let currentRecord = product[variableName] - currentRecord[property.config.codeName] = newValue - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> formula -> Error executing User Code. Error = " + err.stack) - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> formula -> Error executing User Code. product = " + JSON.stringify(product)) - logger.write(MODULE_NAME, "[ERROR] dataBuildingProcedure -> loop -> formula -> Error executing User Code. Code = " + property.formula.code); - throw ("Error Executing User Code.") - } - } - } - } - } - - /* If within the code the new data structure was not yet pushed to the results array, we do it */ - if (resultsWithIrregularPeriods !== true) { - /* Adding the new element to the resulting array */ - results.push(product[variableName]); - } - - /* At the last instant of yesterday, we update the yesterday object. */ - if (processingDailyFiles) { - if (record.current.end + 1 === currentDay.valueOf()) { - yesterday.variable = JSON.parse(JSON.stringify(variable)) - } - } - } - /* - Before returning we need to see if we have to record some of our counters at the interExecutionMemory. - To do that, the condition to be met is that this execution must include all candles of the current day. - */ - if (processingDailyFiles) { - if (lastRecord.current.end === lastInstantOfTheDay && yesterday.variable !== undefined) { - interExecutionMemory[productName] = {} - interExecutionMemory[productName].variable = JSON.parse(JSON.stringify(yesterday.variable)) - } - } - } - } - return results - } - - function generateFileContent(records, recordDefinition, resultsWithIrregularPeriods, processingDailyFiles, currentDay, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> generateFileContent -> Entering function."); } - - let fileContent = ""; - let recordSeparator = ""; - - for (let i = 0; i < records.length; i++) { - let record = records[i]; - - if (processingDailyFiles === true) { - - if (resultsWithIrregularPeriods === true) { - /* - Here we have an special problem that occurs when an object spans several time peridos. If not taken care of - it can happen that the object gets splitted between 2 days, which we dont want since it would loose some of - its properties. - - To solve this issue, we wont save objects which ends at the last candle of the day, because we will save it - at the next day, in whole, even if it starts in the previous day. - */ - - let lastInstantOdDay = currentDay.valueOf() + global.ONE_DAY_IN_MILISECONDS - 1; - - if (record.end < currentDay.valueOf() - 1) { continue; } - if (record.end === lastInstantOdDay) { continue; } - } else { - /* - The normal situation is that objects are respecting the time size of its main dependency, in which case we only - care of not adding objects of the previous day we are currently processing (while on daily files) - */ - if (record.end < currentDay.valueOf()) { continue; } - } - } - - fileContent = fileContent + recordSeparator + '[' - let propertySeparator = "" - for (let j = 0; j < recordDefinition.properties.length; j++) { - let property = recordDefinition.properties[j] - if (property.config.isCalculated !== true) { - fileContent = fileContent + propertySeparator - if (property.config.isString === true) { - fileContent = fileContent + '"' - } - fileContent = fileContent + record[property.config.codeName] - if (property.config.isString === true) { - fileContent = fileContent + '"' - } - if (propertySeparator === "") { propertySeparator = ","; } - } - } - fileContent = fileContent + ']' - if (recordSeparator === "") { recordSeparator = ","; } - } - fileContent = "[" + fileContent + "]"; - return fileContent - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> generateFileContent -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function writeFile(contextSummary, fileContent, anotherFileWritten, processingDailyFiles, timeFrameLabel, currentDay, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFile -> Entering function."); } - - let market = bot.market; - let fileName = 'Data.json'; - let dateForPath = '' - - if (processingDailyFiles === true) { - dateForPath = "/" + currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2); - } - - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + contextSummary.dataMine + "/" + contextSummary.bot; - let filePath = filePathRoot + "/Output/" + contextSummary.product + "/" + contextSummary.dataset + "/" + timeFrameLabel + dateForPath; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFile -> onFileCreated -> Entering function."); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFile -> onFileCreated -> fileContent = " + fileContent); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - - callBackFunction(err); - return; - - } - - anotherFileWritten(); - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -} - diff --git a/Deprecated-Code/TaskServer/DataDependencies.js b/Deprecated-Code/TaskServer/DataDependencies.js deleted file mode 100644 index bc6cbf79e..000000000 --- a/Deprecated-Code/TaskServer/DataDependencies.js +++ /dev/null @@ -1,140 +0,0 @@ -exports.newDataDependencies = function newDataDependencies(BOT, logger, DATA_SET) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - const MODULE_NAME = "Data Dependencies"; - - let bot = BOT - - let thisObject = { - nodeArray: undefined, - dataSetsModulesArray: [], - isItADepenency: isItADepenency, - initialize: initialize, - finalize: finalize - }; - - let filter = new Map() - - return thisObject; - - function initialize(callBackFunction) { - try { - /* Basic Valdidations */ - if (bot.processNode.referenceParent.processDependencies !== undefined) { - thisObject.nodeArray = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency') - if (thisObject.nodeArray.length === 0) { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible to not have data dependencies at all."); - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - /* - We will filter ourt declared dependencies that are not present in the workspace. - This will allow the user to have less Data Mines loaded at the workspace - that the ones that a Trading Mine depends on. - */ - thisObject.nodeArray = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(thisObject.nodeArray) - - } else { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible not to have process dependencies, which means not data dependencies."); - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - - if (thisObject.nodeArray.length === 0) { - - // We allow old indicators not to declare their data dependencies. - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - - /* Session based dependency filters */ - if (bot.DEPENDENCY_FILTER !== undefined) { - for (let i = 0; i < bot.DEPENDENCY_FILTER.length; i++) { - let key = bot.DEPENDENCY_FILTER[i] - filter.set(key, true) - } - } - - /* - For each dependency declared at the nodeArray, we will initialize a DataSet as part of this initialization process. - */ - let alreadyCalledBack = false - let addCount = 0 - let skipCount = 0 - - /* - The current nodeArray that we have includes all the dependencies daclared in the Data Mine | Trading Mine | Learning Mine - process dependencies, minus the ones without reference parent, meaning that references Data Mines that are - not present at the workspace. From all the remaining dependencies there will be others that we need to - filter out, and they are the ones which the user does not have a data product anywhere on the network where - this task is running, that is storing the data associated to this dependency. The way we use to filter this - out is by analizyng the response of the initialization call to the DataSet module. If it did not fail but - it was not initialized, then we will assume this happened because the data could not be located and we will - assume the user did this on purpose and we will filter out this dependency by not putting it on this new array. - */ - let newNodeArray = [] - - for (let i = 0; i < thisObject.nodeArray.length; i++) { - let dataSetModule = DATA_SET.newDataSet(BOT, logger); - dataSetModule.initialize(thisObject.nodeArray[i], onInitilized); - - function onInitilized(err, wasInitialized) { - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> err = " + JSON.stringify(err)); - - alreadyCalledBack = true; - callBackFunction(err); - return; - } - - if (wasInitialized === true) { - addCount++; - newNodeArray.push(thisObject.nodeArray[i]) - addDataSet() - } else { - skipCount++ - } - checkIfWeAreDone() - } - - function addDataSet() { - thisObject.dataSetsModulesArray.push(dataSetModule); - } - - function checkIfWeAreDone() { - if (addCount + skipCount === thisObject.nodeArray.length) { - if (alreadyCalledBack === false) { - alreadyCalledBack = true - thisObject.nodeArray = newNodeArray - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - for (let i = 0; i < thisObject.dataSetsModulesArray.length; i++) { - let dataSetModule = thisObject.dataSetsModulesArray[i] - dataSetModule.finalize() - } - thisObject.dataSetsModulesArray = undefined - filter = undefined - bot = undefined - } - - function isItADepenency(timeFrame, product) { - let key = timeFrame + '-' + product - - return filter.get(key) - } -}; diff --git a/Deprecated-Code/TaskServer/DataSet.js b/Deprecated-Code/TaskServer/DataSet.js deleted file mode 100644 index 4637e72b9..000000000 --- a/Deprecated-Code/TaskServer/DataSet.js +++ /dev/null @@ -1,184 +0,0 @@ -exports.newDataSet = function newDataSet(BOT, logger) { - - const MODULE_NAME = "Dataset"; - - let bot = BOT; - - let thisObject = { - node: undefined, - networkNode: undefined, - initialize: initialize, - finalize: finalize, - getTextFile: getTextFile, - createTextFile: createTextFile - }; - - /* Storage account to be used here. */ - - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage - - return thisObject; - - function initialize(dataDependency, callBackFunction) { - - try { - thisObject.node = dataDependency.referenceParent; - logger.fileName = MODULE_NAME - - /* Some very basic validations that we have all the information needed. */ - if (thisObject.node === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Data Dependency without Reference Parent -> dataDependency = " + JSON.stringify(dataDependency)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - logger.fileName = MODULE_NAME + "." + thisObject.node.type + "." + thisObject.node.name + "." + thisObject.node.id; - - if (thisObject.node.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Dataset witn no codeName defined -> Product Dataset = " + JSON.stringify(thisObject.node)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Dataset not attached to a Product Definition -> Dataset = " + JSON.stringify(thisObject.node)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Product Definition witn no codeName defined -> Product Definition = " + JSON.stringify(thisObject.node.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode.parentNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Product Definition not attached to a Bot -> Product Definition = " + JSON.stringify(thisObject.node.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Bot witn no codeName defined. Bot = " + JSON.stringify(thisObject.node.parentNode.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode.parentNode.parentNode === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Bot not attached to a Data Mine or Trading Mine. Bot = " + JSON.stringify(thisObject.node.parentNode.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - if (thisObject.node.parentNode.parentNode.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] initialize -> Data Mine witn no codeName defined. Data Mine = " + JSON.stringify(thisObject.node.parentNode.parentNode.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - /* Now we will see where do we need to fetch this data from. */ - let network = global.TASK_NETWORK - let datasetProductDefinition = thisObject.node.parentNode - - let nodeArray = global.NODE_MESH_TO_PATH_ARRAY(network, datasetProductDefinition.id) - let networkNode = global.FIND_NODE_IN_NODE_ARRAY(nodeArray, 'Network Node') - - if (networkNode === undefined) { - logger.write(MODULE_NAME, "[WARN] initialize -> Network Node not found.") - logger.write(MODULE_NAME, "[WARN] initialize -> Initialization Failed because we could not find where the data of this dataset is located within the network. Check the logs for more info."); - logger.write(MODULE_NAME, "[WARN] initialize -> Could not find where " + datasetProductDefinition.name + " for " + bot.exchange + " " + bot.market.baseAsset + "/" + bot.market.quotedAsset + " is stored within the network."); - callBackFunction(global.DEFAULT_OK_RESPONSE, false); - return - } - - /* We found where the data is located on the network. */ - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Retrieving data from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.'); } - - fileStorage = FILE_STORAGE.newFileStorage(logger, networkNode.config.host, networkNode.config.webPort); - callBackFunction(global.DEFAULT_OK_RESPONSE, true); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - fileStorage = undefined - thisObject.networkNode = undefined - bot = undefined - thisObject = undefined - } - - function getTextFile(pFolderPath, pFileName, callBackFunction) { - - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getTextFile -> Entering function."); } - - let dataMineCodeName = thisObject.node.parentNode.parentNode.parentNode.config.codeName - let botCodeName = thisObject.node.parentNode.parentNode.config.codeName - - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + dataMineCodeName + "/" + botCodeName; - let filePath = filePathRoot + "/Output/" + pFolderPath; - filePath += '/' + pFileName - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getTextFile -> onFileReceived -> Entering function."); } - - callBackFunction(err, text); - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] 'getTextFile' -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function createTextFile(pFolderPath, pFileName, pFileContent, callBackFunction) { - - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createTextFile -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createTextFile -> pFolderPath = " + pFolderPath); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createTextFile -> pFileName = " + pFileName); } - - let ownerId = thisObject.node.dataMine + "-" + thisObject.node.bot - let botId = bot.dataMine + "-" + bot.codeName - - if (ownerId !== botId) { - - let customErr = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: "Only bots owners of a Data Set can create text files on them." - }; - logger.write(MODULE_NAME, "[ERROR] save -> customErr = " + customErr.message); - callBackFunction(customErr); - return; - } - - let filePathRoot = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + thisObject.node.dataMine + "/" + thisObject.node.bot; - let filePath = filePathRoot + "/Output/" + pFolderPath + '/' + pFileName; - - fileStorage.createTextFile(filePath, pFileContent, onFileCreated); - - function onFileCreated(err) { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createTextFile -> onFileCreated -> Entering function."); } - - callBackFunction(err); - - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] 'createTextFile' -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -}; diff --git a/Deprecated-Code/TaskServer/DebugLog.js b/Deprecated-Code/TaskServer/DebugLog.js deleted file mode 100644 index 91b318fe7..000000000 --- a/Deprecated-Code/TaskServer/DebugLog.js +++ /dev/null @@ -1,188 +0,0 @@ -exports.newDebugLog = function newDebugLog() { - - const MODULE_NAME = "DebugLog"; - - let executionDatetime = "D." + global.EXECUTION_DATETIME.getUTCFullYear() + - "." + pad(global.EXECUTION_DATETIME.getUTCMonth() + 1, 2) + - "." + pad(global.EXECUTION_DATETIME.getUTCDate(), 2) + - ".T." + pad(global.EXECUTION_DATETIME.getUTCHours(), 2) + - "." + pad(global.EXECUTION_DATETIME.getUTCMinutes(), 2) + - "." + pad(global.EXECUTION_DATETIME.getUTCSeconds(), 2); - - let messageId = 0; - - let thisObject = { - bot: undefined, - write: write, - newInternalLoop: newInternalLoop, - persist: persist, // This method is executed at the end of each Main Loop. - initialize: initialize, - finalize: finalize - }; - - let accumulatedLog = "["; - let disableLogging; - let internalLoopCounter = -1; - - return thisObject; - - function initialize(pdisableLogging) { - - try { - - disableLogging = pdisableLogging - - } catch (err) { - console.log("[ERROR] Debug Log -> initialize -> err = " + err.stack); - } - } - - function finalize() { - persist() - } - - function newInternalLoop(pBot, pProcess, date, percentage) { - if (percentage === undefined) { - percentage = "" - } else { - percentage = percentage.toFixed(2) + " %" - } - - if (date === undefined) { date = thisObject.bot.processDatetime } - date = date.getUTCFullYear() + '-' + strPad(date.getUTCMonth() + 1, 2, "0") + '-' + strPad(date.getUTCDate(), 2, "0"); - - console.log(new Date().toISOString() + " " + strPad(thisObject.bot.exchange, 20) + " " + strPad(thisObject.bot.market.baseAsset + '/' + thisObject.bot.market.quotedAsset, 10) + " " + strPad(pBot, 30) + " " + strPad(pProcess, 30) - + " Internal Loop # " + strPad(internalLoopCounter + 1, 8) + " " + strPad(date, 30) + " " + strPad(percentage, 10)) - - persist(); - - function strPad(str, max, fill) { - if (fill === undefined) { fill = " " } - str = str.toString(); - return str.length < max ? strPad(fill + str, max) : str; - } - } - - function persist() { - - /* Here we actually write the content of the in-memory log to a file */ - - try { - if (accumulatedLog === "[") { return } // nothing to persist at the moment. - - internalLoopCounter++; - - let contentToPersist = accumulatedLog; - accumulatedLog = "["; - - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(); - - let filePath = thisObject.bot.filePathRoot + "/Logs/" + thisObject.bot.process + "/" - - if (thisObject.bot.TRADING_SESSION !== undefined) { - filePath = filePath + thisObject.bot.TRADING_SESSION.folderName + "/" + executionDatetime; - } else { - if (thisObject.bot.LEARNING_SESSION !== undefined) { - filePath = filePath + thisObject.bot.LEARNING_SESSION.folderName + "/" + executionDatetime; - } else { - filePath = filePath + executionDatetime; - } - } - - if (thisObject.bot.debug.year !== undefined) { - - filePath = filePath + "/" + thisObject.bot.debug.year + "/" + thisObject.bot.debug.month; - } - - let fileName; - if (internalLoopCounter >= 0) { - fileName = "Loop." + pad(thisObject.bot.loopCounter, 8) + "." + pad(internalLoopCounter, 4) + ".json"; - } else { - fileName = "Loop." + pad(thisObject.bot.loopCounter, 8) + ".json"; - } - - writeLog(); - - /* This is the implementation of the mechanism to auto-mantain logs. */ - if (contentToPersist.indexOf('[ERROR]') < 0 && contentToPersist.indexOf('[PERSIST]') < 0 && contentToPersist.indexOf('[IMPORTANT]') < 0) { - thisObject.bot.LOGS_TO_DELETE_QUEUE.push(filePath + '/' + fileName) - } - if (thisObject.bot.LOGS_TO_DELETE_QUEUE.length > thisObject.bot.DELETE_QUEUE_SIZE) { - let fileToDelete = thisObject.bot.LOGS_TO_DELETE_QUEUE[0] - thisObject.bot.LOGS_TO_DELETE_QUEUE.splice(0, 1) - /* Will delete this file only if it does not contains ERROR inside. */ - let fileContent = fileStorage.getTextFile(fileToDelete, onGetFile, true) - function onGetFile(err, fileContent) { - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (fileContent.indexOf("ERROR") < 0) { - /* Logs will only be deleted when they contain no ERROR in them. */ - fileStorage.deleteTextFile(fileToDelete); - } - } else { - fileStorage.deleteTextFile(fileToDelete); - } - } - } - - function writeLog() { - - fileStorage.createTextFile(filePath + '/' + fileName, contentToPersist + '\r\n' + "]", onFileCreated, undefined, true); - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - console.log("[ERROR] DebugLog -> persist -> onInizialized -> onFileCreated -> err = " + err.message); - setTimeout(writeLog, 10000); // Lets retry until we make it. - return; - } - contentToPersist = ""; - } - } - } catch (err) { - console.log("[ERROR] DebugLog -> persist -> err = " + err.stack); - console.log("[ERROR] DebugLog -> persist -> onInizialized -> contentToPersist = " + contentToPersist); - } - } - - - function write(pModule, pMessage) { - try { - if (disableLogging === true) { return; } - - if (thisObject.bot === undefined) { return; } - - if (pModule === "") { // For debugging purposes - console.log(pMessage) - } - - let newDate = new Date(); - newDate = newDate.toISOString(); - - messageId++; - - /* When writting one file for all modules we use this. */ - - let message = "['" + newDate + "'," + messageId + ",'" + pModule + "','" + pMessage + "']" - let logLine = '\r\n' + message; - - if (process.env.CONSOLE_LOG === "true" || message.indexOf("ERROR") > 0) { - let key = '' - if (thisObject.bot) { - key = thisObject.bot.dataMine + '-' + thisObject.bot.codeName + '-' + thisObject.bot.process - } - console.log('*********** ' + message + ' @ ' + key) - } - - accumulatedLog = accumulatedLog + logLine; - - } catch (err) { - console.log("[ERROR] DebugLog -> write -> err = " + err.stack); - } - } - - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad("0" + str, max) : str; - } - -}; - diff --git a/Deprecated-Code/TaskServer/EventServerClient.js b/Deprecated-Code/TaskServer/EventServerClient.js deleted file mode 100644 index 09bf453cb..000000000 --- a/Deprecated-Code/TaskServer/EventServerClient.js +++ /dev/null @@ -1,204 +0,0 @@ -exports.newEventsServerClient = function newEventsServerClient(host, port) { - - const MODULE = "Task Server " - - const INFO_LOG = false - - let thisObject = { - initialize: initialize, - finalize: finalize, - createEventHandler: createEventHandler, - deleteEventHandler: deleteEventHandler, - listenToEvent: listenToEvent, - stopListening: stopListening, - raiseEvent: raiseEvent - } - - let eventListeners = new Map() - let responseWaiters = new Map() - - let WEB_SOCKETS_CLIENT - const WEB_SOCKET = require('ws') - - if (host === undefined) { - host = 'localhost' - } - if (port === undefined) { - port = process.env.WEB_SOCKETS_SERVER_PORT - } - - let messageCounter = 0 - let commandCounter = 0 - - return thisObject - - function initialize(callBackFunction) { - - setuptWebSockets(callBackFunction) - - } - - function setuptWebSockets(callBackFunction) { - try { - - if (INFO_LOG === true) { - console.log('setuptWebSockets at ' + host + ':' + port) - } - WEB_SOCKETS_CLIENT = new WEB_SOCKET('ws://' + host + ':' + port ) - - WEB_SOCKETS_CLIENT.onerror = err => { - console.log('[ERROR] Task Server -> Event Server Client -> setuptWebSockets -> On connection error -> error = ' + err.stack) - console.log('[ERROR] This could mean that the port '+ port +' is taken by some other app running at your system. To resolve this issue, please pick another port number and change it at the .ENV file inside the Superalgos folder AND at the .ENV file inside the TaskServer folder. After that run the app again. ') - } - WEB_SOCKETS_CLIENT.onopen = () => { - try { - if (INFO_LOG === true) { - console.log('Websocket connection opened.') - } - - if (callBackFunction !== undefined) { - callBackFunction() - } - } catch(err) { - console.log('[ERROR] Task Server -> Event Server Client -> setuptWebSockets -> onopen -> err = ' + err.stack) - } - } - WEB_SOCKETS_CLIENT.onmessage = e => { - try { - if (INFO_LOG === true) { - console.log('Websocket Message Received: ' + e.data.substring(0, 1000)) - } - - let message = JSON.parse(e.data) - - if (message.action === 'Event Raised') { - let key - if (message.callerId !== undefined) { - key = message.eventHandlerName + '-' + message.eventType + '-' + message.callerId - } else { - key = message.eventHandlerName + '-' + message.eventType - } - let handler = eventListeners.get(key) - if (handler) { - handler.callBack(message) - } - return - } - - if (message.action === 'Event Server Response') { - let handler = responseWaiters.get(message.callerId) - if (handler) { - handler(message) - } - return - } - } catch (err) { - console.log('[ERROR] Task Server -> Event Server Client -> setuptWebSockets -> onmessage -> err = ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] Task Server -> Event Server Client -> setuptWebSockets -> err = ' + err.stack) - } - } - - function finalize() { - /* Before disconnecting we will forze all eventListeners to stop listening. */ - const eventListenersArray = [...eventListeners.values()] - for (let i = 0; i < eventListenersArray.length; i++) { - let handler = eventListenersArray[i] - let eventCommand = { - action: 'stopListening', - eventHandlerName: handler.eventHandlerName, - eventType: handler.eventType, - callerId: handler.callerId - } - sendCommand(eventCommand) - } - WEB_SOCKETS_CLIENT.close(); - } - - function sendCommand(command, responseCallBack, eventsCallBack) { - try { - if (command.action === 'listenToEvent') { - let key - if (command.callerId) { - key = command.eventHandlerName + '-' + command.eventType + '-' + command.callerId - } else { - key = command.eventHandlerName + '-' + command.eventType - } - let handler = { - eventHandlerName: command.eventHandlerName, - eventType: command.eventType, - callerId: command.callerId, - callBack: eventsCallBack - } - eventListeners.set(key, handler) - } - if (command.callerId && responseCallBack) { - responseWaiters.set(command.callerId, responseCallBack) - } - - if (WEB_SOCKETS_CLIENT.readyState === 1) { // 1 means connected and ready. - - WEB_SOCKETS_CLIENT.send("Task Server" + "|*|" + "|*|" + JSON.stringify(command)) - - } else { - console.log('[ERROR] Task Server -> Event Server Client -> setuptWebSockets -> sendCommand -> WebSocket message could not be sent because the connection was not ready. Message = ' + JSON.stringify(command)) - } - } catch(err) { - console.log('[ERROR] Task Server -> Event Server Client -> sendCommand -> err = ' + err.stack) - } - } - - function createEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'createEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function deleteEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'deleteEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function listenToEvent(eventHandlerName, eventType, extraData, callerId, responseCallBack, eventsCallBack) { - let eventCommand = { - action: 'listenToEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - extraData: extraData, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack, eventsCallBack) - } - - function stopListening(eventHandlerName, eventType, eventSubscriptionId, callerId, responseCallBack) { - /* User either needs to specify a valid eventSubscriptionId OR the 3 params: eventHandlerName, eventType, callerId which were used when start listening to events. */ - let eventCommand = { - action: 'stopListening', - eventHandlerName: eventHandlerName, - eventType: eventType, - eventSubscriptionId: eventSubscriptionId, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function raiseEvent(eventHandlerName, eventType, event, callerId, responseCallBack) { - let eventCommand = { - action: 'raiseEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - event: event, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/FileStorage.js b/Deprecated-Code/TaskServer/FileStorage.js deleted file mode 100644 index 8cc7baac9..000000000 --- a/Deprecated-Code/TaskServer/FileStorage.js +++ /dev/null @@ -1,533 +0,0 @@ - -const path = require('path') - -exports.newFileStorage = function newFileStorage(logger, host, port) { - - const MODULE_NAME = 'FileStorage' - const MAX_RETRY = 10 - const FAST_RETRY_TIME_IN_MILISECONDS = 500 - const SLOW_RETRY_TIME_IN_MILISECONDS = 2000 - - if (logger === undefined) { // Dummy logger - logger = {} - function write() { - - } - logger.write = write - } - - let thisObject = { - asyncGetTextFile: asyncGetTextFile, - asyncCreateTextFile: asyncCreateTextFile, - getTextFile: getTextFile, - createTextFile: createTextFile, - deleteTextFile: deleteTextFile - } - - return thisObject - - async function asyncGetTextFile(filePath, noRetry, canUsePrevious) { - /* This function allows its caller to work with async / await instead of callbacks */ - let promise = new Promise((resolve, reject) => { - - getTextFile(filePath, onFileRead, noRetry, canUsePrevious) - function onFileRead(err, text) { - - let response = { - err: err, - text: text - } - resolve(response) - } - }) - - return promise - } - - async function asyncCreateTextFile(filePath, fileContent, keepPrevious, noTemp) { - /* This function allows its caller to work with async / await instead of callbacks */ - let promise = new Promise((resolve, reject) => { - - createTextFile(filePath, fileContent, onFileWriten, keepPrevious, noTemp) - function onFileWriten(err) { - - let response = { - err: err - } - resolve(response) - } - }) - - return promise - } - - function getTextFile(filePath, callBackFunction, noRetry, canUsePrevious) { - - let currentRetryGetTextFile = 0 - - recursiveGetTextFile(filePath, callBackFunction, noRetry, canUsePrevious) - - function recursiveGetTextFile(filePath, callBackFunction, noRetry, canUsePrevious) { - let fileDoesNotExist = false - - /* Choose path for either bots or data */ - let fileLocation - let mustBeJason - if (filePath.indexOf("/bots/") > 0) { - fileLocation = process.env.BOTS_PATH + '/' + filePath - mustBeJason = false - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - mustBeJason = true - } - - try { - - logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> fileLocation: ' + fileLocation) - - /* Here we actually reaad the file. */ - if (host === undefined || host === 'localhost') { - /* We read the file from the local file system. */ - const fs = require('fs') - fs.readFile(fileLocation, onFileRead) - } else { - /* We read the file via a web server over http */ - getFileViaHTTP(fileLocation, onFileRead, callBackFunction) - } - - function onFileRead(err, text) { - let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS - if (currentRetryGetTextFile > MAX_RETRY - 2) { - retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS - } - if (err) { - - if (err.code === 'ENOENT') { // since files are deleted before being replaced, it can happen that it does not exist and after a retry it does. - if (noRetry === true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Not Retrying. ') - let customResponse = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: 'File does not exist.' - } - callBackFunction(customResponse) - return - } - - fileDoesNotExist = true - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> File does not exist. Retrying. ') - setTimeout(retry, retryTimeToUse) - return - } - - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> filePath = ' + filePath) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Error reading file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - return - } - - /* - It might happen that we try to read a file just at the moment it is being written by another process. It that case we might get - an empty file. If we are not allowed to use the Previous version of the file in this case, then we will retry to read it again - a little bit later. - */ - if (text.toString() === "" && canUsePrevious !== true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Read and Empty File -> filePath = ' + filePath) - setTimeout(retry, retryTimeToUse) - return - } - - if (mustBeJason === false) { - /* In this case there is nothing else to check. */ - callBackFunction(global.DEFAULT_OK_RESPONSE, text.toString()) - return - } - - /* - We are going to check if the file is a valir JSON object - */ - try { - let jsonCheck = JSON.parse(text.toString()) - - /* The file was correctly read and could be parsed. */ - callBackFunction(global.DEFAULT_OK_RESPONSE, text.toString()) - return - - } catch (err) { - - if (canUsePrevious === true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Could read the file, but could not parse it as it is not a valid JSON. Will try to read the PREVIOUS version instead. -> file = ' + fileLocation) - - if (host === undefined || host === 'localhost') { - /* We read the file from the local file system. */ - const fs = require('fs') - fs.readFile(fileLocation + '.Previous.json', onPreviousFileRead) - } else { - /* We read the file via a web server over http */ - getFileViaHTTP(fileLocation + '.Previous.json', onPreviousFileRead, callBackFunction) - } - - function onPreviousFileRead(err, text) { - - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> canUsePrevious -> Could not read the Previous file either. Giving up.') - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> canUsePrevious -> err = ' + err.stack) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - /* Returning the previous file */ - callBackFunction(global.DEFAULT_OK_RESPONSE, text.toString()) - return - } - } else { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> Could read the file, but could not parse it as it is not a valid JSON.') - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> err = ' + err.stack) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> onFileRead -> text.toString() = ' + text.toString()) - setTimeout(retry, retryTimeToUse) - return - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error reading file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> Error reading file -> err = ' + err.stack) - retry() - } - - function retry() { - console.log(new Date(), '[WARN] Read File Retry #: ' + currentRetryGetTextFile, fileLocation) - if (currentRetryGetTextFile < MAX_RETRY) { - currentRetryGetTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Will try to read the file again -> Retry #: ' + currentRetryGetTextFile) - recursiveGetTextFile(filePath, callBackFunction, noRetry, canUsePrevious) - } else { - currentRetryGetTextFile = 0 - - if (fileDoesNotExist === true) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. File Not Found.') - let customResponse = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: 'File does not exist.' - } - callBackFunction(customResponse) - return - } else { - - logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> Max retries reached reading a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> getTextFile -> retry -> file = ' + fileLocation) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - } - } - } - } - - function createTextFile(filePath, fileContent, callBackFunction, keepPrevious, noTemp) { - - let currentRetryWriteTextFile = 0 - - recursiveCreateTextFile(filePath, fileContent, callBackFunction, keepPrevious, noTemp) - - function recursiveCreateTextFile(filePath, fileContent, callBackFunction, keepPrevious, noTemp) { - /* Choose path for either logs or data */ - let fileLocation - if (filePath.indexOf("/Logs/") > 0) { - fileLocation = process.env.LOG_PATH + '/' + filePath - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - } - - try { - logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> fileLocation: ' + fileLocation) - - /* If necesary a folder or folders are created before writing the file to disk. */ - let directoryPath = fileLocation.substring(0, fileLocation.lastIndexOf('/') + 1); - mkDirByPathSync(directoryPath) - - /* - Here we write the file with a temporary name so as to avoid dirty read from other processes. - Then we delete the original file, if exists, and finally we rename the temporary into the original name. - */ - const fs = require('fs') - if (noTemp === true) { - fs.writeFile(fileLocation, fileContent, onFileWriten) - } else { - fs.writeFile(fileLocation + '.tmp', fileContent, onFileWriten) - } - - function onFileWriten(err) { - let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS - if (currentRetryWriteTextFile > MAX_RETRY - 2) { - retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS - } - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> file = ' + fileLocation + '.tmp') - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> Error writing file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { - - if (noTemp === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - if (keepPrevious === true) { - /* - In some cases, we are going to keep a copy of the previous version of the file being written. This will be usefull to recover from crashes - when the file written gets corrupted for any reason. - */ - fs.unlink(fileLocation + '.Previous.json', onUnlinked) - - function onUnlinked(err) { - let code = '' - if (err) { - code = err.code - } - if (code !== '' && code !== 'ENOENT') { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error deleting file -> file = ' + fileLocation + '.Previous.json') - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error deleting file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - return - } - - /* Rename de Original into Previous */ - fs.rename(fileLocation, fileLocation + '.Previous.json', onOriginalRenamed) - - function onOriginalRenamed(err) { - let code = '' - if (err) { - code = err.code - } - if (code !== '' && code !== 'ENOENT') { // Unless the file does not exists we do this... - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> Error renaming original file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> Error renaming original file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - return - } - - /* Rename de Temp into Original */ - fs.rename(fileLocation + '.tmp', fileLocation, onTempRenamed) - - function onTempRenamed(err) { - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> onTempRenamed -> Error renaming temp file -> file = ' + fileLocation + '.tmp') - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> onTempRenamed -> Error renaming temp file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { - - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } - } - } - } - } else { - - /* In this case, there is no need to keep a copy of the file being replaced, so we just delete and that's it. */ - fs.unlink(fileLocation, onUnlinked) - - function onUnlinked(err) { - let code = '' - if (err) { - code = err.code - } - if (code !== '' && code !== 'ENOENT') { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error deleting file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> Error deleting file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - return - } - - /* Rename de Temp into Original */ - fs.rename(fileLocation + '.tmp', fileLocation, onTempRenamed) - - function onTempRenamed(err) { - if (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> onTempRenamed -> Error renaming temp file -> file = ' + fileLocation + '.tmp') - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> onFileWriten -> onUnlinked -> onOriginalRenamed -> onTempRenamed -> Error renaming temp file -> err = ' + err.stack) - setTimeout(retry, retryTimeToUse) - } else { - - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } - } - } - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> Error writing file -> err = ' + err.stack) - retry() - } - - function retry() { - if (currentRetryWriteTextFile < MAX_RETRY) { - currentRetryWriteTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> createTextFile -> retry -> Will try to write the file again -> Retry #: ' + currentRetryWriteTextFile) - recursiveCreateTextFile(filePath, fileContent, callBackFunction, keepPrevious) - } else { - currentRetryWriteTextFile = 0 - logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> Max retries reached writting a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> createTextFile -> retry -> file = ' + fileLocation) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - } - } - - function deleteTextFile(filePath, callBackFunction) { - - let currentRetryDeleteTextFile = 0 - - recursiveDeleteTextFile(filePath, callBackFunction) - - function recursiveDeleteTextFile(filePath, callBackFunction) { - logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> Entering Function.') - - /* Choose path for either logs or data */ - let fileLocation - if (filePath.indexOf("/Logs/") > 0) { - fileLocation = process.env.LOG_PATH + '/' + filePath - } else { - fileLocation = process.env.STORAGE_PATH + '/' + filePath - } - - try { - - logger.write(MODULE_NAME, '[INFO] FileStorage -> deleteTextFile -> fileLocation: ' + fileLocation) - - const fs = require('fs') - fs.unlink(fileLocation, onUnlinked) - - function onUnlinked(err) { - let retryTimeToUse = FAST_RETRY_TIME_IN_MILISECONDS - if (currentRetryDeleteTextFile > MAX_RETRY - 2) { - retryTimeToUse = SLOW_RETRY_TIME_IN_MILISECONDS - } - if (err) { - if (callBackFunction !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } else { - setTimeout(retry, retryTimeToUse) - } - } - } catch (err) { - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> file = ' + fileLocation) - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> Error writing file -> err = ' + err.stack) - if (callBackFunction !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function retry() { - if (currentRetryDeleteTextFile < MAX_RETRY) { - currentRetryDeleteTextFile++ - logger.write(MODULE_NAME, '[WARN] FileStorage -> deleteTextFile -> retry -> Will try to delete the file again -> Retry #: ' + currentRetryDeleteTextFile) - recursiveDeleteTextFile(filePath, callBackFunction) - } else { - currentRetryDeleteTextFile = 0 - logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> Max retries reached deleting a file. Giving up.') - logger.write(MODULE_NAME, '[ERROR] FileStorage -> deleteTextFile -> retry -> file = ' + fileLocation) - if (callBackFunction !== undefined) { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - } - } - } - } - - /* Function to create folders of missing folders at any path. */ - function mkDirByPathSync(targetDir, { isRelativeToScript = false } = {}) { - const sep = '/'; - const initDir = path.isAbsolute(targetDir) ? sep : ''; - const baseDir = isRelativeToScript ? __dirname : '.'; - - return targetDir.split(sep).reduce((parentDir, childDir) => { - const curDir = path.resolve(baseDir, parentDir, childDir); - try { - const fs = require('fs') - fs.mkdirSync(curDir); - } catch (err) { - if (err.code === 'EEXIST') { // curDir already exists! - return curDir; - } - - // To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows. - if (err.code === 'ENOENT') { // Throw the original parentDir error on curDir `ENOENT` failure. - throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`); - } - - const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1; - if (!caughtErr || caughtErr && curDir === path.resolve(targetDir)) { - throw err; // Throw if it's just the last created dir. - } - } - - return curDir; - }, initDir); - } - - function getFileViaHTTP(filePath, callback, callBackFunction) { - try { - - /* The filePath received is the one that is needed to fetch data from with fs. To do it via http we need to remove the prefix that includes this: ./Data-Storage/ */ - filePath = filePath.substring(15, filePath.length) - - let http = require('http'); - let url = 'http://' + host + - ':' + port + - '/Storage/' + - filePath - - logger.write(MODULE_NAME, '[INFO] FileStorage -> getFileViaHTTP -> url = ' + url) - - let request = http.get(url, onResponse); - - request.on('error', function (err) { - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onError -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onError -> Failed to fetch file via HTTP. Will retry later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - }) - - function onResponse(response) { - - try { - const chunks = [] - - response.on('data', onMessegesArrived) - response.on('end', onEnd) - - function onMessegesArrived(chunk) { - chunks.push(chunk) - } - - function onEnd() { - let fileContent = Buffer.concat(chunks).toString('utf8') - let err = null - if (fileContent.indexOf('does not exist') >= 0) { - err = { - code: "ENOENT" // This is how fs would have returned upon this situation. - } - fileContent = undefined - } - callback(err, fileContent) - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onResponse -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> onResponse -> Failed to fetch file via HTTP. Will retry later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] getFileViaHTTP -> Failed to fetch file via HTTP. Will retry later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - } - } -} diff --git a/Deprecated-Code/TaskServer/IndicatorBot.js b/Deprecated-Code/TaskServer/IndicatorBot.js deleted file mode 100644 index 2f55a1daa..000000000 --- a/Deprecated-Code/TaskServer/IndicatorBot.js +++ /dev/null @@ -1,786 +0,0 @@ -exports.newIndicatorBot = function newIndicatorBot(bot, parentLogger) { - - const MODULE_NAME = "Indicator Bot"; - const FULL_LOG = true; - - let USER_BOT_MODULE; - let COMMONS_MODULE; - - const MULTI_PERIOD_MARKET = require(global.ROOT_DIR + 'MultiPeriodMarket'); - const MULTI_PERIOD_DAILY = require(global.ROOT_DIR + 'MultiPeriodDaily'); - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - - let nextLoopTimeoutHandle; - - let thisObject = { - initialize: initialize, - run: run - }; - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - try { - processConfig = pProcessConfig; - - if (bot.definedByUI === true) { - /* The code of the bot is defined at the UI. No need to load a file with the code. */ - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - /* This bot is not ready for taking its code from the UI, then we need to load it from its repo. */ - let filePath = bot.dataMine + "/" + "bots" + "/" + bot.processNode.referenceParent.parentNode.config.repo + "/" + pProcessConfig.codeName - filePath += "/User.Bot.js" - - fileStorage.getTextFile(filePath, onBotDownloaded); - - function onBotDownloaded(err, text) { - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> onBotDownloaded -> err = " + err.message); - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> onBotDownloaded -> filePath = " + filePath); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - USER_BOT_MODULE = {} - USER_BOT_MODULE.newUserBot = eval(text); // TODO This needs to be changed function - - filePath = bot.dataMine + "/" + "bots" + "/" + bot.processNode.referenceParent.parentNode.config.repo - filePath += "/Commons.js" - - fileStorage.getTextFile(filePath, onCommonsDownloaded); - - function onCommonsDownloaded(err, text) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - parentLogger.write(MODULE_NAME, "[WARN] initialize -> onBotDownloaded -> onCommonsDownloaded -> Commons not found: " + err.message); - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - COMMONS_MODULE = {} - COMMONS_MODULE.newCommons = eval(text); // TODO This needs to be changed function - - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - } - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function run(callBackFunction) { - try { - let fixedTimeLoopIntervalHandle; - - /* Heartbeats sent to the UI */ - bot.processHeartBeat = processHeartBeat - - if (bot.runAtFixedInterval === true) { - fixedTimeLoopIntervalHandle = setInterval(loop, bot.fixedInterval); - } else { - loop(); - } - - function loop() { - try { - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - /* For each loop we want to create a new log file. */ - if (logger !== undefined) { - logger.finalize() - } - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set(MODULE_NAME, logger) - logger.bot = bot; - logger.initialize(); - - bot.loopCounter++; - bot.loopStartTime = new Date().valueOf(); - - /* We tell the UI that we are running. */ - processHeartBeat() - - /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); - const DATA_DEPENDENCIES = require(global.ROOT_DIR + 'DataDependencies'); - const DATA_SET = require(global.ROOT_DIR + 'DataSet'); - const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); - - /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ - bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. - - /* High level log entry */ - console.log(new Date().toISOString() + " " + pad(bot.exchange, 20) + " " + pad(bot.market.baseAsset + '/' + bot.market.quotedAsset, 10) + " " + pad(bot.codeName, 30) + " " + pad(bot.process, 30) - + " Main Loop # " + pad(Number(bot.loopCounter), 8)) - - /* We will prepare first the infraestructure needed for the bot to run. There are 3 modules we need to sucessfullly initialize first. */ - let processExecutionEvents - let userBot; - let processFramework; - let statusDependencies; - let dataDependencies; - - let nextWaitTime; - - initializeProcessExecutionEvents(); - - function initializeProcessExecutionEvents() { - try { - processExecutionEvents = PROCESS_EXECUTION_EVENTS.newProcessExecutionEvents(bot, logger) - processExecutionEvents.initialize(processConfig, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Execution finished well."); - startProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessExecutionEvents() { - try { - processExecutionEvents.start(onStarted); - - function onStarted(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessExecutionEvents -> onStarted -> Execution finished well."); - - if (global.STOP_TASK_GRACEFULLY === true) { - loopControl() - return - } - - initializeStatusDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessExecutionEvents -> onStarted -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeStatusDependencies() { - try { - statusDependencies = STATUS_DEPENDENCIES.newStatusDependencies(bot, logger, STATUS_REPORT, UTILITIES, PROCESS_OUTPUT); - statusDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeStatusDependencies -> onInizialized -> Execution finished well."); - initializeDataDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeStatusDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeDataDependencies() { - try { - dataDependencies = DATA_DEPENDENCIES.newDataDependencies(bot, logger, DATA_SET); - dataDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - /* If the process is configured to run inside a framework, we continue there, otherwise we run the bot directly. */ - if (processConfig.framework === undefined) { - initializeUserBot(); - return; - } - - switch (processConfig.framework.name) { - case 'Multi-Period-Market': { - processFramework = MULTI_PERIOD_MARKET.newMultiPeriodMarket(bot, logger, UTILITIES, FILE_STORAGE); - intitializeProcessFramework(); - break; - } - case 'Multi-Period-Daily': { - processFramework = MULTI_PERIOD_DAILY.newMultiPeriodDaily(bot, logger, UTILITIES, FILE_STORAGE); - intitializeProcessFramework(); - break; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework not Supported."); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework Name = " + processConfig.framework.name); - global.unexpectedError = err.message - processStopped() - return - } - } - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeDataDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - processStopped() - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeUserBot() { - try { - usertBot = USER_BOT_MODULE.newUserBot(bot, logger, COMMONS_MODULE, UTILITIES, FILE_STORAGE); - usertBot.initialize(statusDependencies, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeUserBot -> onInizialized -> Execution finished well."); - startUserBot(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeUserBot -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startUserBot() { - try { - usertBot.start(onFinished); - - function onFinished(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startUserBot -> onFinished -> Execution finished well."); - finishProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - case "Dependency does not exist.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> Dependency does not exist. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - case "Dependency not ready.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished -> Dependency not ready. Will Retry Later."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function intitializeProcessFramework() { - try { - processFramework.initialize(processConfig, statusDependencies, dataDependencies, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> intitializeProcessFramework -> onInizialized -> Execution finished well."); - startProcessFramework(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> intitializeProcessFramework -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessFramework() { - try { - processFramework.start(onFinished); - - function onFinished(err) { - try { - processFramework.finalize() - processFramework = undefined - dataDependencies.finalize() - dataDependencies = undefined - statusDependencies.finalize() - statusDependencies = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessFramework -> onFinished -> Execution finished well."); - finishProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - case "Dependency does not exist.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency does not exist. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - case "Dependency not ready.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency not ready. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function finishProcessExecutionEvents() { - try { - processExecutionEvents.finish(onFinished); - - function onFinished(err) { - try { - processExecutionEvents.finalize() - processExecutionEvents = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> finishProcessExecutionEvents -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> finishProcessExecutionEvents -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function loopControl(nextWaitTime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> nextWaitTime = " + nextWaitTime); } - - /* We show we reached the end of the loop. */ - processHeartBeat() - - /* Here we check if we must stop the loop gracefully. */ - shallWeStop(onStop, onContinue); - - function onStop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } - processStopped() - return; - } - - function onContinue() { - /* Indicator bots are going to be executed after a configured period of time after the last execution ended. This is to avoid overlapping executions. */ - switch (nextWaitTime) { - case 'Normal': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.normalWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.normalWaitTime / 1000 + " seconds for next execution.") - if (global.WRITE_LOGS_TO_FILES === 'true') { - logger.persist(); - } - } - break; - case 'Retry': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); - processHeartBeat(undefined, undefined, "Trying to recover from some problem. Waiting " + processConfig.retryWaitTime / 1000 + " seconds for next execution.") - logger.persist(); - } - break; - case 'Sleep': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.sleepWaitTime / 60000 + " minutes for next execution.") - logger.persist(); - } - break; - case 'Coma': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.comaWaitTime / 3600000 + " hours for next execution.") - logger.persist(); - } - break; - } - } - } - - function shallWeStop(stopCallBack, continueCallBack) { - try { - /* IMPORTANT: This function is exactly the same on the 3 modules. */ - if (!global.STOP_TASK_GRACEFULLY) { - continueCallBack(); - } else { - stopCallBack(); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function processHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Heartbeat', event) - } - - function processStopped() { - if (global.unexpectedError !== undefined) { - global.PROCESS_ERROR(bot.processKey, undefined, "An unexpected error caused the Process to stop.") - } else { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Stopped') - } - logger.persist(); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - if (global.unexpectedError !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } else { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.stack); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/IndicatorOutput.js b/Deprecated-Code/TaskServer/IndicatorOutput.js deleted file mode 100644 index cc585a1db..000000000 --- a/Deprecated-Code/TaskServer/IndicatorOutput.js +++ /dev/null @@ -1,155 +0,0 @@ -exports.newIndicatorOutput = function newIndicatorOutput(bot, logger, UTILITIES, FILE_STORAGE) { - const FULL_LOG = true; - const MODULE_NAME = "Indicator Bot"; - - let thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(logger); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - const COMMONS = require('./Commons.js'); - let commons = COMMONS.newCommons(bot, logger, UTILITIES, FILE_STORAGE); - - return thisObject; - - function finalize() { - thisObject = undefined - utilities = undefined - fileStorage = undefined - commons = undefined - } - - function initialize(callBackFunction) { - try { - logger.fileName = MODULE_NAME; - logger.initialize(); - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function start(dataFiles, timeFrame, timeFrameLabel, currentDay, interExecutionMemory, callBackFunction) { - - try { - - let products = {} - let mainDependency = {} - let processingDailyFiles - - if (currentDay !== undefined) { - processingDailyFiles = true - } else { - processingDailyFiles = false - } - - /* The first phase here is about checking that we have everything we need at the definition level. */ - let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency') - - if (commons.validateDataDependencies(dataDependencies, callBackFunction) !== true) { return } - - let outputDatasets = global.NODE_BRANCH_TO_ARRAY (bot.processNode.referenceParent.processOutput, 'Output Dataset') - if (commons.validateOutputDatasets(outputDatasets, callBackFunction) !== true) { return } - - /* The second phase is about transforming the inputs into a format that can be used to apply the user defined code. */ - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, timeFrame) - - /* During the third phase, we need to generate the data of the different products this process produces an output */ - for (let i = 0; i < outputDatasets.length; i++) { - - let outputDatasetNode = outputDatasets[i] - let jsonData // Just build data as Json objects - let outputData // Data built as a result of applying user defined code and formulas at the Data Building Procedure - let singularVariableName // Name of the variable for this product - let recordDefinition // Record as defined by the user at the UI - let fileContent // Here we store the contents of the new data built just before writing it to a file. - let resultsWithIrregularPeriods // A product will have irregular periods when the User Code inserts new result records at will, in contrast with normal procedure where the platform insert one record per loop execution. - - /* - For each outputDatasetNode in our process output, we will build the information based on our input products. - */ - - recordDefinition = outputDatasetNode.referenceParent.parentNode.record - singularVariableName = outputDatasetNode.referenceParent.parentNode.config.singularVariableName - - /* Check Irregular Periods */ - - if (outputDatasetNode.referenceParent.parentNode.dataBuilding.loop.javascriptCode !== undefined) { - if (outputDatasetNode.referenceParent.parentNode.dataBuilding.loop.javascriptCode.code.indexOf('results.push') >= 0) { - resultsWithIrregularPeriods = true - } - } - - /* Build the data */ - jsonData = commons.dataBuildingProcedure( - products, - mainDependency, - recordDefinition, - outputDatasetNode.referenceParent.parentNode.dataBuilding, - singularVariableName, - outputDatasetNode.referenceParent.parentNode.config.codeName, - timeFrame, - timeFrameLabel, - resultsWithIrregularPeriods, - interExecutionMemory, - processingDailyFiles, - currentDay - ) - - /* Add the calculated properties */ - if (outputDatasetNode.referenceParent.parentNode.calculations !== undefined) { - outputData = commons.calculationsProcedure(jsonData, recordDefinition, outputDatasetNode.referenceParent.parentNode.calculations, singularVariableName, timeFrame) - } else { - outputData = jsonData - } - products[outputDatasetNode.referenceParent.parentNode.config.pluralVariableName] = outputData - } - - /*At the fourth and last phase, we will save the new information generated into files corresponding to each output outputDatasetNode.*/ - let totalFilesWritten = 0 - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let outputData = products[outputDatasetNode.referenceParent.parentNode.config.pluralVariableName] - let resultsWithIrregularPeriods // A product will have irregular periods when the User Code inserts new result records at will, in contrast with normal procedure where the platform insert one record per loop execution. - let contextSummary = {} - - /* Check Irregular Periods */ - if (outputDatasetNode.referenceParent.parentNode.dataBuilding.loop.javascriptCode.code.indexOf('results.push') >= 0) { - resultsWithIrregularPeriods = true - } - - /* Simplifying the access to basic info */ - - contextSummary.dataset = outputDatasetNode.referenceParent.config.codeName - contextSummary.product = outputDatasetNode.referenceParent.parentNode.config.codeName - - let botNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Indicator Bot') - contextSummary.bot = botNode.config.codeName - let dataMineNode = global.FIND_NODE_IN_NODE_MESH(outputDatasetNode, 'Data Mine') - contextSummary.dataMine = dataMineNode.config.codeName - - let fileContent = commons.generateFileContent(outputData, outputDatasetNode.referenceParent.parentNode.record, resultsWithIrregularPeriods, processingDailyFiles, currentDay, callBackFunction) - commons.writeFile(contextSummary, fileContent, anotherFileWritten, processingDailyFiles, timeFrameLabel, currentDay, callBackFunction) - } - - - function anotherFileWritten() { - totalFilesWritten++ - if (totalFilesWritten === outputDatasets.length) { - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/LICENSE b/Deprecated-Code/TaskServer/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/TaskServer/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/TaskServer/LearningSession.js b/Deprecated-Code/TaskServer/LearningSession.js deleted file mode 100644 index 6a7953b65..000000000 --- a/Deprecated-Code/TaskServer/LearningSession.js +++ /dev/null @@ -1,519 +0,0 @@ -exports.newLearningSession = function newLearningSession(bot, parentLogger) { - - const MODULE_NAME = "Learning Session" - const FULL_LOG = true; - - let thisObject = { - initialize: initialize - } - - const SOCIAL_BOTS_MODULE = require('./SocialBots.js') - let socialBotsModule = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - try { - /* Initialize this info so that everything is logged propeerly */ - bot.LEARNING_SESSION = { - name: bot.processNode.session.name, - id: bot.processNode.session.id - } - - /* Set the folderName for early logging */ - if (bot.processNode.session.config.folderName === undefined) { - bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.LEARNING_SESSION.id - } else { - bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName - } - - /* Check if there is a session */ - if (bot.processNode.session === undefined) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> Cannot run without a Session."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - /* Listen to event to start or stop the session. */ - bot.sessionKey = bot.processNode.session.name + '-' + bot.processNode.session.type + '-' + bot.processNode.session.id - global.SESSION_MAP.set(bot.sessionKey, bot.sessionKey) - - global.EVENT_SERVER_CLIENT.listenToEvent(bot.sessionKey, 'Learning Session Status', undefined, bot.sessionKey, undefined, onSessionStatus) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.sessionKey, 'Run Learning Session', undefined, bot.sessionKey, undefined, onSessionRun) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.sessionKey, 'Stop Learning Session', undefined, bot.sessionKey, undefined, onSessionStop) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.sessionKey, 'Resume Learning Session', undefined, bot.sessionKey, undefined, onSessionResume) - - /* Connect this here so that it is accesible from other places */ - bot.sessionError = sessionError - bot.sessionWarning = sessionWarning - bot.sessionInfo = sessionInfo - - /* Heartbeats sent to the UI */ - bot.sessionHeartBeat = sessionHeartBeat - - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - - function onSessionStatus() { - if (bot.SESSION_STATUS === 'Running') { - let event = { - status: 'Learning Session Runnning' - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Status Response', event) - } else { - let event = { - status: 'Learning Session Not Runnning' - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Status Response', event) - } - } - - function onSessionRun(message) { - try { - /* This happens when the UI is reloaded, the session was running and tries to run it again. */ - if (bot.SESSION_STATUS === 'Idle' || bot.SESSION_STATUS === 'Running') { - parentLogger.write(MODULE_NAME, "[WARN] onSessionRun -> Event received to run the Session while it was already running. ") - return - } - - /* We are going to run the Definition comming at the event. */ - bot.TRADING_SYSTEM = JSON.parse(message.event.tradingSystem) - bot.TRADING_ENGINE = JSON.parse(message.event.tradingEngine) - bot.LEARNING_SESSION = JSON.parse(message.event.session) - bot.DEPENDENCY_FILTER = JSON.parse(message.event.dependencyFilter) - bot.RESUME = false - bot.FIRST_EXECUTION = true - bot.LEARNING_SESSION.stop = stopSession // stop function - - setUpSessionFolderName() - - /* We validate all parameters received and complete some that might be missing if needed. */ - if (checkParemeters() === false) { return } - - socialBotsModule.initialize() - - let allGood - switch (bot.LEARNING_SESSION.type) { - case 'Backtesting Session': { - allGood = startBackTesting(message) - break - } - case 'Live Trading Session': { - allGood = startLiveTrading(message) - break - } - case 'Fordward Testing Session': { - allGood = startFordwardTesting(message) - break - } - case 'Paper Trading Session': { - allGood = startPaperTrading(message) - break - } - } - if (allGood === true) { - bot.SESSION_STATUS = 'Idle' - bot.STOP_SESSION = false - } else { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] onSessionRun -> Stopping the Session now. ') } - } - - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is starting.") - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionRun -> err = " + err.stack); - } - } - - function onSessionStop() { - stopSession('Session Stopped From the User Interface.') - } - - function onSessionResume(message) { - try { - if (bot.LEARNING_SESSION.stop === undefined) { - parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") - return - } - - /* This happens when the UI is reloaded, the session was running and tries to run it again. */ - if (bot.SESSION_STATUS === 'Idle' || bot.SESSION_STATUS === 'Running') { - parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session while it was already running. ") - return - } - - bot.RESUME = true - bot.STOP_SESSION = false - - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is resuming.") - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionResume -> err = " + err.stack); - } - } - - function stopSession(commandOrigin) { - - socialBotsModule.sendMessage(bot.LEARNING_SESSION.type + " '" + bot.LEARNING_SESSION.name + "' is stopping " + commandOrigin) - socialBotsModule.finalize() - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] stopSession -> Stopping the Session now. ') } - sessionInfo(bot.LEARNING_SESSION, commandOrigin) - } - - function setUpSessionFolderName() { - /* - The session object is overwritten when the session is run. For that reason we - need to setup again the folder name at the Session level. - Set the folderName for logging, reports, context and data output - */ - let config - if (bot.LEARNING_SESSION.config !== undefined) { - config = bot.LEARNING_SESSION.config - if (config.folderName === undefined) { - bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.LEARNING_SESSION.id - } else { - bot.LEARNING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName - } - } - } - - function checkParemeters() { - /* - Here we check all the Session Parameters received. If something critical is missing we abort returning false. If something - non critical is missing, we complete it with a default value. - */ - - if (bot.LEARNING_SESSION.learningParameters === undefined) { - let errorMessage = "Session Node with no Parameters." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION, errorMessage) - return false - } - - /* Time Range */ - if (bot.LEARNING_SESSION.learningParameters.timeRange === undefined) { // if the Time Range is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.timeRange = { - name: 'Missing Time Range', - type: 'Time Range', - config: { - initialDatetime: (new Date()).valueOf(), - finalDatetime: (new Date()).valueOf() + global.ONE_YEAR_IN_MILISECONDS - } - } - } else { - /* Check that we received valid dates */ - if (bot.LEARNING_SESSION.type === 'Backtesting Session') { - if (isNaN(new Date(bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime)).valueOf()) { - let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters, errorMessage) - return false - } - } - if (isNaN(new Date(bot.LEARNING_SESSION.learningParameters.timeRange.config.finalDatetime)).valueOf()) { - let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters, errorMessage) - return false - } - } - - /* Session Type Forced Values */ - let today = (new Date()).valueOf() - let aYearAgo = today - global.ONE_YEAR_IN_MILISECONDS - let aYearFromNow = today + global.ONE_YEAR_IN_MILISECONDS - switch (bot.LEARNING_SESSION.type) { - case 'Backtesting Session': { - useDefaultDatetimes(aYearAgo, today) - break - } - case 'Live Trading Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - case 'Fordward Testing Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - case 'Paper Trading Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - } - - function useDefaultDatetimes(initialDefault, finalDefault) { - /* - Note that inside the system, we are going to deal with these - dates in their numeric value representation. - */ - - /* Initial Datetime */ - if (bot.LEARNING_SESSION.type === 'Backtesting Session') { - if (bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime === undefined) { - bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime = initialDefault - } else { - bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime = (new Date(bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime)).valueOf() - } - } else { - /* Non backtest session can start from the past only if explicitly configured that way */ - if (bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime === undefined || bot.LEARNING_SESSION.learningParameters.timeRange.config.allowStartingFromThePast !== true) { - bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime = initialDefault - } else { - bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime = (new Date(bot.LEARNING_SESSION.learningParameters.timeRange.config.initialDatetime)).valueOf() - } - } - - /* Final Datetime */ - if (bot.LEARNING_SESSION.learningParameters.timeRange.config.finalDatetime === undefined) { - bot.LEARNING_SESSION.learningParameters.timeRange.config.finalDatetime = finalDefault - } else { - bot.LEARNING_SESSION.learningParameters.timeRange.config.finalDatetime = (new Date(bot.LEARNING_SESSION.learningParameters.timeRange.config.finalDatetime)).valueOf() - } - } - - /* Time Frame */ - if (bot.LEARNING_SESSION.learningParameters.timeFrame === undefined) { - let errorMessage = "Session Parameters Node with no Time Frame." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters, errorMessage) - return false - } - if (bot.LEARNING_SESSION.learningParameters.timeFrame.config.label === undefined) { - let errorMessage = "Session Parameters Node with no Time Frame Label configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters.timeFrame, errorMessage) - return false - } - bot.LEARNING_SESSION.learningParameters.timeFrame.config.value = getTimeFrameFromLabel(bot.LEARNING_SESSION.learningParameters.timeFrame.config.label) - if (bot.LEARNING_SESSION.learningParameters.timeFrame.config.value === undefined) { - let errorMessage = "Config error: label value not recognized. Try 01-min or 01-hs for example." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters.timeFrame, errorMessage) - return false - } - - /* Session Base Asset */ - if (bot.LEARNING_SESSION.learningParameters.sessionBaseAsset === undefined) { - let errorMessage = "Session Parameters Node with no Session Base Asset." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters, errorMessage) - return false - } - if (bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.initialBalance === undefined) { - let errorMessage = "Session Parameters Session Base Asset with no initialBalance configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters.sessionBaseAsset, errorMessage) - return false - } - - /* Session Quoted Asset */ - if (bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset === undefined) { - let errorMessage = "Session Parameters Node with no Session Quoted Asset." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters, errorMessage) - return false - } - if (bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.initialBalance === undefined) { - let errorMessage = "Session Parameters Session Quoted Asset with no initialBalance configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.sessionError(bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset, errorMessage) - return false - } - - /* Slippage */ - if (bot.LEARNING_SESSION.learningParameters.slippage === undefined) { // if the Slippage is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.slippage = { - name: 'Missing Slippage', - type: 'Slippage', - config: { - marketOrderRate: 0, - stopLoss: 0, - takeProfit: 0 - } - } - } - if (bot.LEARNING_SESSION.learningParameters.slippage.config.marketOrderRate === undefined) { // if the marketOrderRate is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.slippage.config.marketOrderRate = 0 - } - if (bot.LEARNING_SESSION.learningParameters.slippage.config.stopLoss === undefined) { // if the stopLoss is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.slippage.config.stopLoss = 0 - } - if (bot.LEARNING_SESSION.learningParameters.slippage.config.takeProfit === undefined) { // if the takeProfit is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.slippage.config.takeProfit = 0 - } - - /* Fee Structure */ - if (bot.LEARNING_SESSION.learningParameters.feeStructure === undefined) { // if the Fee Structure is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.feeStructure = { - name: 'Missing Fee Structure', - type: 'Fee Structure', - config: { - maker: 0, - taker: 0 - } - } - } - if (bot.LEARNING_SESSION.learningParameters.feeStructure.config.maker === undefined) { // if the maker is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.feeStructure.config.maker = 0 - } - if (bot.LEARNING_SESSION.learningParameters.feeStructure.config.taker === undefined) { // if the taker is missing we create a default one. - bot.LEARNING_SESSION.learningParameters.feeStructure.config.taker = 0 - } - - return true - } - - function startBackTesting(message) { - return true - } - - function startLiveTrading(message) { - if (bot.KEY === undefined || bot.SECRET === undefined) { - let errorMessage = "Key 'codeName' or 'secret' not provided. Plese check that and try again." - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> startLiveTrading -> " + errorMessage); } - bot.sessionError(bot.LEARNING_SESSION, errorMessage) - return false - } - return true - } - - function startFordwardTesting(message) { - if (bot.KEY === undefined || bot.SECRET === undefined) { - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[WARN] initialize -> startFordwardTesting -> Key name or Secret not provided, not possible to run the process in Forward Testing mode."); } - console.log("Key 'codeName' or 'secret' not provided. Plese check that and try again.") - return false - } - - /* Reduce the balance */ - let balancePercentage = 1 // This is the default value - - if (bot.LEARNING_SESSION.config.balancePercentage !== undefined) { - balancePercentage = bot.LEARNING_SESSION.config.balancePercentage - } - - bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.initialBalance = bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.initialBalance * balancePercentage / 100 - bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.initialBalance = bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.initialBalance * balancePercentage / 100 - - bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.minimumBalance = bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.minimumBalance * balancePercentage / 100 - bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.minimumBalance = bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.minimumBalance * balancePercentage / 100 - - bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.maximumBalance = bot.LEARNING_SESSION.learningParameters.sessionBaseAsset.config.maximumBalance * balancePercentage / 100 - bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.maximumBalance = bot.LEARNING_SESSION.learningParameters.sessionQuotedAsset.config.maximumBalance * balancePercentage / 100 - - pProcessConfig.normalWaitTime = bot.LEARNING_SESSION.learningParameters.timeFrame.config.value - - return true - } - - function startPaperTrading(message) { - return true - } - - function getTimeFrameFromLabel(timeFrameLabel) { - - for (let i = 0; i < global.marketFilesPeriods.length; i++) { - let value = global.marketFilesPeriods[i][0] - let label = global.marketFilesPeriods[i][1] - - if (timeFrameLabel === label) { - return value - } - } - - for (let i = 0; i < global.dailyFilePeriods.length; i++) { - let value = global.dailyFilePeriods[i][0] - let label = global.dailyFilePeriods[i][1] - - if (timeFrameLabel === label) { - return value - } - } - } - - function sessionHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Heartbeat', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionHeartBeat -> Stopping the Session now. ') } - } - } - - function sessionError(node, errorMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - errorMessage: errorMessage - } - } else { - event = { - errorMessage: errorMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Error', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionError -> Stopping the Session now. ') } - } - } - - function sessionWarning(node, warningMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - warningMessage: warningMessage - } - } else { - event = { - warningMessage: warningMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Warning', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionWarning -> Stopping the Session now. ') } - } - } - - function sessionInfo(node, infoMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - infoMessage: infoMessage - } - } else { - event = { - infoMessage: infoMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Info', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionInfo -> Stopping the Session now. ') } - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/Announcements.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/Announcements.js deleted file mode 100644 index a5bff8a8f..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/Announcements.js +++ /dev/null @@ -1,57 +0,0 @@ -exports.newAnnouncements = function newAnnouncements(bot, logger) { - - const MODULE_NAME = 'Announcements' - - let thisObject = { - makeAnnoucements: makeAnnoucements, - initialize: initialize, - finalize: finalize - } - - let tradingSystem - let tradingEngine - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - } - - function finalize() { - tradingSystem = undefined - tradingEngine = undefined - bot.TRADING_SESSION.messagesSent = undefined - } - - function makeAnnoucements(node) { - if (node.announcements !== undefined) { - for (let i = 0; i < node.announcements.length; i++) { - let announcement = node.announcements[i] - let canAnnounce = true - if (announcement.announcementCondition !== undefined) { - let conditionValue - try { - conditionValue = eval(announcement.announcementCondition.code) - } catch (err) { - tradingSystem.errors.push([announcement.announcementCondition.id, err.message]) - } - if (conditionValue !== true) { canAnnounce = false } - } - if (canAnnounce === true) { - let text = announcement.config.text - if (announcement.formula !== undefined) { - text = tradingSystem.formulas.get(announcement.formula.id) - } - - if (bot.TRADING_SESSION.socialBots !== undefined) { - bot.TRADING_SESSION.socialBots.announce(text) - tradingSystem.announcements.push([announcement.id, text]) - } else { - tradingSystem.errors.push([announcement.id, 'Could not announce because session does not have Social Bots.']) - } - } - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/ExchangeAPI.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/ExchangeAPI.js deleted file mode 100644 index 6b9ff2e92..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/ExchangeAPI.js +++ /dev/null @@ -1,185 +0,0 @@ -exports.newExchangeAPI = function newExchangeAPI(bot, logger) { - - let MODULE_NAME = "Exchange API"; - - let thisObject = { - getOrder: getOrder, - createOrder: createOrder, - cancelOrder: cancelOrder, - initialize: initialize, - finalize: finalize - }; - - let tradingSystem - - let exchangeId - let options = {} - let exchange - - const ccxt = require('ccxt') - - return thisObject; - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - - exchangeId = bot.exchange.toLowerCase() - - let key = bot.KEY - let secret = bot.SECRET - - const exchangeClass = ccxt[exchangeId] - const exchangeConstructorParams = { - 'apiKey': key, - 'secret': secret, - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false, - 'adjustForTimeDifference': true, - options: options - } - exchange = new exchangeClass(exchangeConstructorParams) - } - - function finalize() { - tradingSystem = undefined - exchangeId = undefined - options = undefined - exchange = undefined - } - - async function getOrder(tradingSystemOrder, tradingEngineOrder) { - - let orderId = tradingEngineOrder.exchangeId.value - const symbol = bot.market.baseAsset + '/' + bot.market.quotedAsset - - /* Basic Logging */ - logInfo("getOrder -> orderId = " + orderId) - logInfo("getOrder -> symbol = " + symbol) - - /* Basic Validations */ - if (exchange.has['fetchOrder'] === false) { - logError("getOrder -> Exchange does not support fetchOrder command."); - return - } - - try { - let order = await exchange.fetchOrder(orderId, symbol) - - logInfo("getOrder -> Response from the Exchange: " + JSON.stringify(order)); - return order - } catch (err) { - tradingSystem.errors.push([tradingSystemOrder.id, "getOrder -> Error = " + err.message]) - logError("getOrder -> Error = " + err.message); - } - } - - async function createOrder(tradingSystemOrder, tradingEngineOrder) { - - let price = tradingEngineOrder.rate.value // CCXT: how much quote currency you are willing to pay for a trade lot of base currency (for limit orders only) - let type // CCXT: a string literal type of order, ccxt currently unifies market and limit orders only - let side // CCXT: a string literal for the direction of your order, buy or sell - let symbol = bot.market.baseAsset + '/' + bot.market.quotedAsset // CCXT: a string literal symbol of the market you wish to trade on, like BTC/USD, ZEC/ETH, DOGE/DASH, etc - let amount = tradingEngineOrder.orderBaseAsset.size.value // CCXT: how much of currency you want to trade, in Base Asset. - - switch (tradingSystemOrder.type) { - case 'Market Buy Order': { - type = 'market' - side = 'buy' - break - } - case 'Market Sell Order': { - type = 'market' - side = 'sell' - break - } - case 'Limit Buy Order': { - type = 'limit' - side = 'buy' - break - } - case 'Limit Sell Order': { - type = 'limit' - side = 'sell' - break - } - } - - /* Basic Logging */ - logInfo("createOrder -> symbol = " + symbol); - logInfo("createOrder -> side = " + side); - logInfo("createOrder -> type = " + type); - logInfo("createOrder -> amount = " + amount); - logInfo("createOrder -> price = " + price); - - /* Basic Validations */ - if (side !== "buy" && side !== "sell") { - logError("createOrder -> side must be either 'buy' or 'sell'."); - return - } - if (exchange.has['createOrder'] === false) { - logError("createOrder -> Exchange does not support createOrder command."); - return - } - - try { - let order = await (exchange.createOrder(symbol, type, side, amount, price)) - - logInfo("createOrder -> Response from the Exchange: " + JSON.stringify(order)); - return order.id - } catch (err) { - tradingSystem.errors.push([tradingSystemOrder.id, "createOrder -> Error = " + err.message]) - logError("createOrder -> Error = " + err.message) - if (err.message.indexOf('API-key format invalid') >= 0) { - logError ('The exchange says the API key provided is not good or it is not in the correct format. This is what you are using:') - errorFooter() - } - if (err.message.indexOf('Signature for this request is not valid.') >= 0) { - logError ('The exchange says the secret provided is not good, incorrect or not in the correct format. This is what you are using:') - errorFooter() - } - function errorFooter(){ - logError ('key: ->' + bot.KEY + '<-') - logError ('secret: ->' + bot.SECRET + '<-') - logError ('key.length:' + bot.KEY.length ) - logError ('secret.length:' + bot.SECRET.length ) - logError ('Double check that you copied the key at the codeName property and the secret at secret property without bringing any invisible caracter from the exchange web site, or leaving any character from the sample text. Also check that the keys are not disabled at the exchange ot that they are not restricted by IP.') - logError ('As a remainder. Binance key and secret are 64 bytes in lenght each one. ' ) - } - } - } - - async function cancelOrder(tradingSystemOrder, tradingEngineOrder) { - - let orderId = tradingEngineOrder.exchangeId.value - - /* Basic Logging */ - logInfo("cancelOrder -> Entering function. orderId = " + orderId); - - const symbol = bot.market.baseAsset + '/' + bot.market.quotedAsset - - /* Basic Validations */ - if (exchange.has['fetchOrder'] === false) { - logError("cancelOrder -> Exchange does not support fetchOrder command."); - return - } - - try { - let order = await exchange.cancelOrder(orderId, symbol) - - logInfo("cancelOrder -> Response from the Exchange: " + JSON.stringify(order)); - return true - } catch (err) { - tradingSystem.errors.push([tradingSystemOrder.id, "cancelOrder -> Error = " + err.message]) - logError("cancelOrder -> Error = " + err.message); - } - } - - function logInfo(message) { - logger.write(MODULE_NAME, '[INFO] ' + message) - } - - function logError(message) { - logger.write(MODULE_NAME, '[ERROR] ' + message) - } -}; diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersCalculations.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersCalculations.js deleted file mode 100644 index 94ffe42d3..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersCalculations.js +++ /dev/null @@ -1,316 +0,0 @@ -exports.newOrdersCalculations = function newOrdersCalculations(bot, logger) { - /* - When we are live trading, we need to syncronize with the exchange. - */ - const MODULE_NAME = 'Orders Calculations' - - let thisObject = { - actualSizeCalculation: actualSizeCalculation, - actualRateCalculation: actualRateCalculation, - feesToBePaidCalculation: feesToBePaidCalculation, - amountReceivedCalculation: amountReceivedCalculation, - finapercentageFilledCalculationlize: percentageFilledCalculation, - feesPaidCalculation: feesPaidCalculation, - sizeFilledCalculation: sizeFilledCalculation, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - return thisObject - - function initialize() { - sessionParameters = bot.TRADING_SESSION.tradingParameters - tradingEngine = bot.simulationState.tradingEngine - tradingSystem = bot.simulationState.tradingSystem - } - - function finalize() { - sessionParameters = undefined - tradingEngine = undefined - tradingSystem = undefined - } - - async function actualSizeCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - When we submit the order to the exchange, we do it specifying the order size - in Base Asset. It is mandatory to be in Base Asset as per CCXT Library API and - probably as per the Exchange API too. - - The exchange might take that size or might change it a little - bit. For example, if it does not accept as many decimals as we are sending. - - We have also seen that for Market Orders, the exchange usually does not take - the size requested exactly. Sometimes is a little bit less or even a little bit - more. For Limit orders it is usually the same. - - If it happens that the size accepted (Actual Size) is different than the - size requested (Size), we need to make several adjustments so that the - accounting syncronizes with reality. - */ - - /* This calculation needs to happen only once, the first time the order is checked. */ - if (tradingEngineOrder.orderBaseAsset.actualSize.value !== tradingEngineOrder.orderBaseAsset.actualSize.config.initialValue) { return } - - /* We receive the actual size from the exchange at the order.amount field. */ - tradingEngineOrder.orderBaseAsset.actualSize.value = order.amount - - recalculateActualSize() - recalculateSizePlaced() - - function recalculateActualSize() { - /* - We will recalculate the Quoted Asset Actual Size. This will also give to it an initial value. - In the next formula, we are unsing the rate of the order because we dont know yet the Actual Rate. - This rate might be replaced afteerwards for the Actual Rate when this is calculated again once - the Actual Rate is known. - */ - tradingEngineOrder.orderQuotedAsset.actualSize.value = tradingEngineOrder.orderBaseAsset.actualSize.value * tradingEngineOrder.rate.value - - tradingEngineOrder.orderBaseAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.actualSize.value, 10) - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) - } - - function recalculateSizePlaced() { - /* - We will also recalculate the Size Placed that was previously calculated with the order Size, - and now we will do it with the order Actual Size. - - We need to unaccount the previous size placed and correctly account - for the the new actual sizes we now know. - */ - tradingEngineStage.stageBaseAsset.sizePlaced.value = - tradingEngineStage.stageBaseAsset.sizePlaced.value - - tradingEngineOrder.orderBaseAsset.size.value - - tradingEngineStage.stageBaseAsset.sizePlaced.value = - tradingEngineStage.stageBaseAsset.sizePlaced.value + - tradingEngineOrder.orderBaseAsset.actualSize.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value - - tradingEngineOrder.orderQuotedAsset.size.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value + - tradingEngineOrder.orderQuotedAsset.actualSize.value - - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) - } - } - - async function actualRateCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - Actual Rate Calculation: Let's remember that the exchange may not take the rate - we send it with the order (in Limit orders) and for any reason change it a little bit. - For example we might have sent a rate with too many decimals and the exchange truncate - them. Another thing that might happen is that we send a rate that is matching orders already - at the order book. In this case we would get an actual rate not only different than the one - we sent, but also, better since the trading engine inside the exchange would match orders - with the first orders best by price. - - In the case of Market Orders we don't even send a rate. For all those reason - we get and store the Actual Rate at which the order was filled. - */ - if (order.average !== undefined) { - /* - We will use the average whenever is available. As of today it is not 100% clear when this is - available, but it seems sometimes it is not. In those cases we use the price. - */ - tradingEngineOrder.orderStatistics.actualRate.value = order.average - } else { - /* - We use the order.price when the average is not available. - */ - tradingEngineOrder.orderStatistics.actualRate.value = order.price - } - - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) - - /* - If the Actual Rate happens to be exctly the same than the order rate, then there is - nothing else to do here. Otherwise there are adjustments to be made. - */ - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } - - let previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value - - recalculateActualSize() - recalculateSizePlaced() - - function recalculateActualSize() { - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } - /* - Now we know the Actual Rate at which the order was filled. Since the actual rate - is not the same as the Rate we defined for the order, we need to syncronize - the Actual Order Size for Quoted Asset since it was calculated with the Order Size that we - now know it is not the one really used at the exchange. We will recalculate the - Actual Size in Quoted Asset and not in Base Asset, since the Actual Size in Base Asset - is the one we accepted by the exchange, so that is fixed, regardless of how we initially - got the Order Size in Base Asset, either from direct imput from the user or calculated - from the Order Size in Quoted Asset input it by the user. So here we go. - */ - previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value - - tradingEngineOrder.orderQuotedAsset.actualSize.value = - tradingEngineOrder.orderBaseAsset.actualSize.value * - tradingEngineOrder.orderStatistics.actualRate.value - - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) - - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderQuotedAsset.actualSize.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'Actual Size (' + previousQuotedAssetActualSize + ') recalculated (' + tradingEngineOrder.orderQuotedAsset.actualSize.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' - ] - ) - } - - function recalculateSizePlaced() { - let previousStageQuotedAssetSizePlaced = tradingEngineStage.stageQuotedAsset.sizePlaced.value - /* - Since we changed the Actual Size in Quoted Asset, we need to fix the Size Placed in Quoted Asset - that was previously calculated with the previous value of actualSize. - */ - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value - - previousQuotedAssetActualSize - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value + - tradingEngineOrder.orderQuotedAsset.actualSize.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) - - tradingSystem.warnings.push( - [ - [tradingEngineStage.stageQuotedAsset.sizePlaced.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'Size Placed (' + previousStageQuotedAssetSizePlaced + ') recalculated (' + tradingEngineStage.stageQuotedAsset.sizePlaced.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' - ] - ) - } - } - - async function feesToBePaidCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - The Fees To Be Paid are the fees that will be paid once the order is 100% Filled. - */ - switch (tradingEngineOrder.type) { - case 'Market Order': { - await applyFeePercentage( - 'feesToBePaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.taker, - 100 - ) - break - } - case 'Limit Order': { - await applyFeePercentage( - 'feesToBePaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.maker, - 100 - ) - break - } - } - } - - async function percentageFilledCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - Percentage Filled Calculation: The only relevant information we get from the exchange is the order.filled. - We know this field will go up until reaching the Actual Size. Once it reaches that number - the order will be 100% filled. - */ - tradingEngineOrder.orderStatistics.percentageFilled.value = order.filled * 100 / tradingEngineOrder.orderBaseAsset.actualSize.value - tradingEngineOrder.orderStatistics.percentageFilled.value = global.PRECISE(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) - } - - async function feesPaidCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - Within the order information received from the exchange we can not see the fees paid so we need to - calculate them ourselves. Knwowing the Fees Paid is critical to later update the balances correctly, - since at every trade we will receive less than just the Actual Size. In fact we will receive the Actual - Size minus the Fees Paid. - - The percentage at which the exchange will charge fees needs to be configured at the the Session Fees Parameters. - */ - switch (tradingEngineOrder.type) { - case 'Market Order': { - await applyFeePercentage( - 'feesPaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.taker, - tradingEngineOrder.orderStatistics.percentageFilled.value - ) - break - } - case 'Limit Order': { - await applyFeePercentage( - 'feesPaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.maker, - tradingEngineOrder.orderStatistics.percentageFilled.value - ) - break - } - } - } - - async function sizeFilledCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - CCXT returns order.filled with an amount denominated in Base Asset. We will - take it from there for our Order Base Asset. The amount in order.filled does - not reflect the Fees Paid, even if we are paying the fees in Base Asset. - */ - tradingEngineOrder.orderBaseAsset.sizeFilled.value = order.filled - tradingEngineOrder.orderBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) - /* - For Quoted Asset, CCXT does not return any field with the size filled, so we - need to calculate that by ourselves. - */ - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = - tradingEngineOrder.orderQuotedAsset.actualSize.value * tradingEngineOrder.orderStatistics.percentageFilled.value / 100 - - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) - } - - async function amountReceivedCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - This calculation is for informational purposes, so that users do not have to calculate - it by themselves. The Amount Received out of the trade depends if we are Buying or Selling - the Base Asset. If we are Buying, then the Amount Receiced will be in Base Asset. If we - are selling then it will be in Quoted Asset. - */ - - switch (true) { - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - /* - In this case the Amount Received is in Base Asset. - */ - tradingEngineOrder.orderBaseAsset.amountReceived.value = - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - tradingEngineOrder.orderBaseAsset.feesPaid.value - break - } - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - /* - In this case the Amount Received is in Quoted Asset. - */ - tradingEngineOrder.orderQuotedAsset.amountReceived.value = - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - - tradingEngineOrder.orderQuotedAsset.feesPaid.value - break - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersSimulations.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersSimulations.js deleted file mode 100644 index cf4fa5a20..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/OrdersSimulations.js +++ /dev/null @@ -1,433 +0,0 @@ -exports.newOrdersSimulations = function newOrdersSimulations(bot, logger) { - /* - When we are backtesting or paper trading, we need to simulate what would have happened at the exchange. - */ - const MODULE_NAME = 'Orders Simulations' - - let thisObject = { - actualSizeSimulation: actualSizeSimulation, - actualRateSimulation: actualRateSimulation, - feesToBePaidSimulation: feesToBePaidSimulation, - amountReceivedSimulation: amountReceivedSimulation, - percentageFilledSimulation: percentageFilledSimulation, - feesPaidSimulation: feesPaidSimulation, - sizeFilledSimulation: sizeFilledSimulation, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - return thisObject - - function initialize() { - sessionParameters = bot.TRADING_SESSION.tradingParameters - tradingEngine = bot.simulationState.tradingEngine - tradingSystem = bot.simulationState.tradingSystem - } - - function finalize() { - sessionParameters = undefined - tradingEngine = undefined - tradingSystem = undefined - } - - async function actualSizeSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* - The Actual Size is the size the exchange accepts for the order, - regarless of the size sent in the request to the exchange. - - While backtesting and paper trading, we do not really need to - simulate an Actual Size. We will just copy to that field the - size of the order. - - This calculation needs to happen only once, so as to set these values. - */ - if (tradingEngineOrder.orderBaseAsset.actualSize.value !== tradingEngineOrder.orderBaseAsset.actualSize.config.initialValue) { return } - - tradingEngineOrder.orderBaseAsset.actualSize.value = tradingEngineOrder.orderBaseAsset.size.value - tradingEngineOrder.orderQuotedAsset.actualSize.value = tradingEngineOrder.orderQuotedAsset.size.value - } - - function actualRateSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* Actual Rate Simulation */ - let previousQuotedAssetActualSize = tradingEngineOrder.orderQuotedAsset.actualSize.value - - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.orderStatistics.actualRate.config.initialValue) { - /* - The default value for the Actual Rate is the rate of the order. - */ - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value - } - - basedOnSessionParameters() - basedOnTradingSystem() - considerBestMatchWithOrderBook() - recalculateActualSize() - recalculateSizePlaced() - - function basedOnSessionParameters() { - /* - The default way to calculate the Actual Rate is to apply the Slippage defined - at the Session Parameters Definition. We are not going to apply the default if there - is a definition for this order on how to calculate the actual rate. - */ - if (tradingSystemOrder.simulatedExchangeEvents !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate !== undefined) { - return - } - } - switch (tradingEngineOrder.type) { - case 'Market Order': { - - /* Actual Rate is simulated based on the Session Paremeters */ - let slippageAmount = tradingEngineOrder.rate.value * sessionParameters.slippage.config.marketOrderRate / 100 - if (slippageAmount !== 0) { - switch (tradingSystemOrder.type) { - case 'Market Sell Order': { - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value - slippageAmount - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) - - tradingSystem.warnings.push( - [ - [sessionParameters.slippage.id, tradingEngineOrder.rate.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'slippage.config.marketOrderRate Slippage Amount (' + slippageAmount + ') substracted from Order Rate (' + tradingEngineOrder.rate.value + ') to get the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ')' - ] - ) - break - } - case 'Market Buy Order': { - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value + slippageAmount - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) - - tradingSystem.warnings.push( - [ - [sessionParameters.slippage.id, tradingEngineOrder.rate.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'slippage.config.marketOrderRate Slippage Amount (' + slippageAmount + ') added to Order Rate (' + tradingEngineOrder.rate.value + ') to get the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ')' - ] - ) - break - } - } - } - break - } - case 'Limit Order': { - /* In Limit Orders the actual rate is the rate of the order, there is no slippage */ - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngineOrder.rate.value - break - } - } - } - - function basedOnTradingSystem() { - /* - If the user specified a Formula to simulate the Actual Rate for this order, - we use that formula here. Note that if this Formula exists, this will override - the calculation based on Slippage. - */ - if (tradingSystemOrder.simulatedExchangeEvents !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate.formula !== undefined) { - /* Calculate this only once for this order */ - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.orderStatistics.actualRate.config.initialValue) { - let newValue = tradingSystem.formulas.get(tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate.formula.id) - newValue = global.PRECISE(newValue, 10) - - tradingSystem.warnings.push( - [ - tradingSystemOrder.simulatedExchangeEvents.simulatedActualRate.formula.id, - 'Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') calculated with this Formula (' + newValue + ')' - ] - ) - tradingEngineOrder.orderStatistics.actualRate.value = newValue - } - } - } - } - } - - function considerBestMatchWithOrderBook() { - /* - Until here we have got the Actual Rate based on the formula definition or based on session parameters slippage. - The last check is about watching what happened in the market. Let's remember that the exchange will - fill the order with the best possible matches at it's order book. That means that if the rate - we set for the order was too low (for a sale order) or too hight (for a buy order), the actual rate - should be better than expected. - - We don't know what it is at the order book, but whe know that the last candle includes trades that bounced between - the min an max of the candle. That could tell us the above the max and below the min, the order would be matched - with orders at the order book. For that reason, we do this: - */ - switch (true) { - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - if (tradingEngineOrder.orderStatistics.actualRate.value > tradingEngine.current.episode.candle.max.value) { - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.current.episode.candle.max.id], - 'Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') too high. Changed to candle.max (' + tradingEngine.current.episode.candle.max.value + ')' - ] - ) - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.current.episode.candle.max.value - } - break - } - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - if (tradingEngineOrder.orderStatistics.actualRate.value < tradingEngine.current.episode.candle.min.value) { - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderStatistics.actualRate.id, tradingEngine.current.episode.candle.min.id], - 'Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') too low. Changed to candle.min (' + tradingEngine.current.episode.candle.max.value + ')' - ] - ) - tradingEngineOrder.orderStatistics.actualRate.value = tradingEngine.current.episode.candle.min.value - } - break - } - } - tradingEngineOrder.orderStatistics.actualRate.value = global.PRECISE(tradingEngineOrder.orderStatistics.actualRate.value, 10) - } - - function recalculateActualSize() { - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } - /* - Now that we have an Actual Rate, we need to adjust the Actual Size in Quoted Asset, since - Base Asset is what the exchange accepts as input and give information at. Quotes Asset properties are always calculated. - */ - tradingEngineOrder.orderQuotedAsset.actualSize.value = - tradingEngineOrder.orderBaseAsset.actualSize.value * - tradingEngineOrder.orderStatistics.actualRate.value - - tradingEngineOrder.orderQuotedAsset.actualSize.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.actualSize.value, 10) - - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderQuotedAsset.actualSize.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'Actual Size (' + previousQuotedAssetActualSize + ') recalculated (' + tradingEngineOrder.orderQuotedAsset.actualSize.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' - ] - ) - } - - function recalculateSizePlaced() { - if (tradingEngineOrder.orderStatistics.actualRate.value === tradingEngineOrder.rate.value) { return } - /* - Since the Actual Rate might have changed, we need to recalculate the Size Placed, where we accumulate all the Size Placed of - all orders of a Stage. For Base Asset there is nothing to do, since the Actual Rate does not have an inpact on it. - - For Quoted Asset, we need to first unaccount what this same orded added before to Size Placed (with the precious Actual Size) and - account with the new Actual Size. - */ - let previousStageQuotedAssetSizePlaced = tradingEngineStage.stageQuotedAsset.sizePlaced.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value - - previousQuotedAssetActualSize - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value + - tradingEngineOrder.orderQuotedAsset.actualSize.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) - - tradingSystem.warnings.push( - [ - [tradingEngineStage.stageQuotedAsset.sizePlaced.id, tradingEngineOrder.orderStatistics.actualRate.id], - 'Size Placed (' + previousStageQuotedAssetSizePlaced + ') recalculated (' + tradingEngineStage.stageQuotedAsset.sizePlaced.value + ') because the Actual Rate (' + tradingEngineOrder.orderStatistics.actualRate.value + ') is different than the Order Rate (' + tradingEngineOrder.rate.value + '))' - ] - ) - } - } - - async function feesToBePaidSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* - The Fees To Be Paid are the fees that will be paid once the order is 100% Filled. - */ - switch (tradingEngineOrder.type) { - case 'Market Order': { - await applyFeePercentage( - 'feesToBePaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.taker, - 100 - ) - break - } - case 'Limit Order': { - await applyFeePercentage( - 'feesToBePaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.maker, - 100 - ) - break - } - } - } - - function percentageFilledSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* - When we are live, it is the exchange who knows which order was filled and in - which amount. Since we are backtesting here, we need to simulate what happens - at the exchange. We can not simulate that an order is filled if the candle we - see did not touch the order. - - For limit buy orders we are going to check if the price was below the order actual rate, and - for limit sell orders we are going to check if the price was above the order actual rate. - - If we have a partial filling defined specifically for this order, - we are going to use it to estimate how much of the order we will consider filled. - */ - let orderWasHit - switch (tradingSystemOrder.type) { - case 'Limit Buy Order': { - if (tradingEngine.current.episode.candle.min.value <= tradingEngineOrder.orderStatistics.actualRate.value) { - orderWasHit = true - } - break - } - case 'Limit Sell Order': { - if (tradingEngine.current.episode.candle.max.value >= tradingEngineOrder.orderStatistics.actualRate.value) { - orderWasHit = true - } - break - } - case 'Market Buy Order': { - orderWasHit = true - break - } - case 'Market Sell Order': { - orderWasHit = true - break - } - } - if (orderWasHit === true) { - /* - Initially, we will assume that 100% of the order was filled. This might be overwritten - if there is a configuration for this order that details how much is must be considered - filled each time we check this. - */ - tradingEngineOrder.orderStatistics.percentageFilled.value = 100 - - /* Based on the Trading System Definition */ - if (tradingSystemOrder.simulatedExchangeEvents !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedPartialFill !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedPartialFill.config.fillProbability !== undefined) { - - /* Percentage Filled */ - let percentageFilled = tradingSystemOrder.simulatedExchangeEvents.simulatedPartialFill.config.fillProbability * 100 - if (tradingEngineOrder.orderStatistics.percentageFilled.value + percentageFilled > 100) { - percentageFilled = 100 - tradingEngineOrder.orderStatistics.percentageFilled.value - } - tradingEngineOrder.orderStatistics.percentageFilled.value = tradingEngineOrder.orderStatistics.percentageFilled.value + percentageFilled - tradingEngineOrder.orderStatistics.percentageFilled.value = global.PRECISE(tradingEngineOrder.orderStatistics.percentageFilled.value, 10) - } - } - } - } - } - - function feesPaidSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* - The way the Fess Paid are calculated is as follows: From the order Actual Size we apply the % of fee, - that would give us the total fees for that order. To that we apply the % filled of the orders, - that give use the final result of the fees paid for the current % filled. - - But before that, we will see if there is an specific definition on how to simulate the fees for - this order, or if there is not, we use the Fees Structure defined at the Session Parameters. - */ - - /* Based on the Trading System Definition */ - if (tradingSystemOrder.simulatedExchangeEvents !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedFeesPaid !== undefined) { - if (tradingSystemOrder.simulatedExchangeEvents.simulatedFeesPaid.config.percentage !== undefined) { - applyFeePercentage( - 'feesPaid', - tradingEngineOrder, - tradingSystemOrder, - tradingSystemOrder.simulatedExchangeEvents.simulatedFeesPaid.config.percentage, - tradingEngineOrder.orderStatistics.percentageFilled.value - ) - return - } - } - } - - /* - Another way to simulate the Fees Paid is by using the Session Paremeters configuration for Fees. - */ - switch (tradingEngineOrder.type) { - case 'Market Order': { - applyFeePercentage( - 'feesPaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.taker, - tradingEngineOrder.orderStatistics.percentageFilled.value - ) - break - } - case 'Limit Order': { - applyFeePercentage( - 'feesPaid', - tradingEngineOrder, - tradingSystemOrder, - sessionParameters.feeStructure.config.maker, - tradingEngineOrder.orderStatistics.percentageFilled.value - ) - break - } - } - } - - function sizeFilledSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) { - /* - Size Filled is the amount of Base Asset or Quoted Asset that at the exchange matches - another counterparty order. We calculate this using the Percentage Filled we already simulated. - */ - - tradingEngineOrder.orderBaseAsset.sizeFilled.value = - tradingEngineOrder.orderBaseAsset.actualSize.value * - tradingEngineOrder.orderStatistics.percentageFilled.value / 100 - - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = - tradingEngineOrder.orderQuotedAsset.actualSize.value * - tradingEngineOrder.orderStatistics.percentageFilled.value / 100 - - tradingEngineOrder.orderBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.sizeFilled.value, 10) - tradingEngineOrder.orderQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.sizeFilled.value, 10) - } - - async function amountReceivedSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) { - /* - This simulation is for informational purposes, so that users do not have to calculate - it by themselves. The Amount Received out of the trade depends if we are Buying or Selling - the Base Asset. If we are Buying, then the Amount Receiced will be in Base Asset. If we - are selling then it will be in Quoted Asset. - */ - - switch (true) { - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - /* - In this case the Amount Received is in Base Asset. - */ - tradingEngineOrder.orderBaseAsset.amountReceived.value = - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - tradingEngineOrder.orderBaseAsset.feesPaid.value - break - } - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - /* - In this case the Amount Received is in Quoted Asset. - */ - tradingEngineOrder.orderQuotedAsset.amountReceived.value = - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - - tradingEngineOrder.orderQuotedAsset.feesPaid.value - break - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/Snapshots.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/Snapshots.js deleted file mode 100644 index 933d0f37c..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/Snapshots.js +++ /dev/null @@ -1,342 +0,0 @@ -exports.newSnapshots = function newSnapshots(bot, logger) { - /* - This module encapsulates the snapshots functionality. - */ - const MODULE_NAME = 'Snapshots' - - let thisObject = { - updateChart: updateChart, - strategyEntry: strategyEntry, - strategyExit: strategyExit, - positionEntry: positionEntry, - positionExit: positionExit, - addCodeToSnapshot: addCodeToSnapshot, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - const SNAPSHOTS_FOLDER_NAME = 'Snapshots' - - /* Snapshots of Strategies and Positions */ - let snapshots = { - headers: [], - strategies: [], - positions: [] - } - - let positionKeys = new Map() // This is to prevent adding the same indicator / variable to the output collection. - let strategyKeys = new Map() - let createHeaders = true // This is going to be true only once - let createCloseHeaders = true // This is going to be true only once - let closeValues - let strategyValues - let addToStrategyValues - let positionValues - let addToPositionValues - - let chart - - return thisObject - - function initialize() { - tradingEngine = bot.simulationState.tradingEngine - tradingSystem = bot.simulationState.tradingSystem - sessionParameters = bot.TRADING_SESSION.tradingParameters - } - - function finalize() { - writeSnapshotFiles() - tradingEngine = undefined - tradingSystem = undefined - sessionParameters = undefined - - positionKeys = undefined - strategyKeys = undefined - - chart = undefined - } - - function updateChart(pChart) { - chart = pChart - } - - function strategyEntry() { - /* - We will record here a snapshot of all values used in conditions and formulas within the Trading System. - If the strategy exists with a trade, this information will be added to the snapshots file. - */ - - strategyKeys = new Map() - strategyValues = [] - addToStrategyValues = true - - evalNode(tradingSystem) - - /* Turn off this */ - createHeaders = false - addToStrategyValues = false - } - - function strategyExit() { - getResults(tradingEngine.current.strategy.begin.value, tradingEngine.current.strategy.end.value) - let valuesArray = closeValues.concat(strategyValues) - snapshots.strategies.push(valuesArray) - } - - function positionEntry() { - - positionKeys = new Map() - positionValues = [] - addToPositionValues = true - - evalNode(tradingSystem) - - /* Turn off this */ - createHeaders = false - addToPositionValues = false - } - - function positionExit() { - getResults(tradingEngine.current.position.begin.value, tradingEngine.current.position.end.value) - let valuesArray = closeValues.concat(positionValues) - snapshots.positions.push(valuesArray) - } - - function evalNode(node) { - if (node === undefined) { return } - - /* Here we check if there is a codition to be evaluated */ - if (node.type === 'Condition') { - /* We will eval this condition */ - evalCondition(node) - } - - /* Here we check if there is a formula to be evaluated */ - if (node.type === 'Formula') { - if (node.code !== undefined) { - /* We will eval this formula */ - evalFormula(node) - } - } - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - evalNode(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - evalNode(nodePropertyArray[m]) - } - } - break - } - } - } - } - } - - function evalCondition(node) { - - /* - The code can be at the condition node if it was done with the Conditions Editor, or it can also be - at a Javascript Code node. If there is a Javascript object we will give it preference and take the code - from there. Otherwise we will take the code from the Condition node. - */ - - let nodeWithCode = node - if (node.javascriptCode !== undefined) { - if (node.javascriptCode.code !== undefined) { - nodeWithCode = node.javascriptCode - } - } - addCodeToSnapshot(nodeWithCode) - } - - function evalFormula(node) { - let nodeWithCode = node - addCodeToSnapshot(nodeWithCode) - } - - function addCodeToSnapshot(nodeWithCode) { - if (nodeWithCode === undefined) { return } - if (nodeWithCode.code === undefined) { return } - - try { - let instructionsArray = nodeWithCode.code.split(' ') - for (let i = 0; i < instructionsArray.length; i++) { - let instruction = instructionsArray[i] - instruction = instruction.replace('(', '') - instruction = instruction.replace(')', '') - instruction = instruction.replace(//g, '') - instruction = instruction.replace(/<=/g, '') - instruction = instruction.replace(/>=/g, '') - instruction = instruction.replace(/!=/g, '') - instruction = instruction.replace(/!==/g, '') - instruction = instruction.replace(/==/g, '') - instruction = instruction.replace(/===/g, '') - instruction = instruction.replace(/{/g, '') - instruction = instruction.replace(/}/g, '') - if (instruction.indexOf('chart') >= 0) { - let parts = instruction.split('.') - let timeFrame = parts[1] - let product = parts[2] - let property - checkPrevious(3) - function checkPrevious(index) { - property = parts[index] - if (property === 'previous') { - product = product + '.previous' - checkPrevious(index + 1) - } - } - - // Example: chart.at01hs.popularSMA.sma200 - chart.at01hs.popularSMA.sma100 < 10 - if (timeFrame !== 'atAnyTimeFrame') { - timeFrame = timeFrame.substring(2, 4) + '-' + timeFrame.substring(4, 7) - } - let key = timeFrame + '-' + product + '-' + property - let existingKey - - if (addToStrategyValues === true) { - addValues(strategyKeys, strategyValues) - } - - if (addToPositionValues === true) { - addValues(positionKeys, positionValues) - } - - function addValues(keys, values) { - existingKey = keys.get(key) - - if (existingKey === undefined) { // means that at the current loop this property of this product was not used before. - keys.set(key, key) - if (createHeaders === true) { - snapshots.headers.push(key) - } - - try { - let value = eval(instruction) - values.push(value) - } catch (err) { - tradingSystem.errors.push([nodeWithCode.id, 'Instruction ' + instruction + ' evalueates with error ' + err.message]) - values.push(0) - } - } - } - } - } - } catch (err) { - tradingSystem.errors.push([nodeWithCode.id, err.message]) - logger.write(MODULE_NAME, '[ERROR] runSimulation -> addCodeToSnapshot -> nodeWithCode.code = ' + nodeWithCode.code) - logger.write(MODULE_NAME, '[ERROR] runSimulation -> addCodeToSnapshot -> err = ' + err.stack) - } - } - - function getResults(openDatetime, closeDatetime) { - - let closeHeaders = ['Trade Number', 'Open Datetime', 'Close Datetime', 'Strategy Name', 'Trigger On Situation', 'Take Position Situation', 'Result In Base Asset', 'Result In Quoted Asset', 'ROI in Base Asset', 'ROI in Quoted Asset', 'Exit Type'] - closeValues = [ - tradingEngine.current.episode.episodeCounters.positions.value, // Position Number - (new Date(openDatetime)).toISOString(), // Open Datetime - (new Date(closeDatetime)).toISOString(), // Open Datetime - tradingEngine.current.strategy.strategyName.value, // Strategy Name - tradingEngine.current.strategy.situationName.value, // Trigger On Situation - tradingEngine.current.position.situationName.value, // Take Position Situation - tradingEngine.current.position.positionBaseAsset.hitFail.value, // Result in Base Asset - tradingEngine.current.position.positionQuotedAsset.hitFail.value, // Result in Base Asset - tradingEngine.current.position.positionBaseAsset.ROI.value, // ROI in Base Asseet - tradingEngine.current.position.positionQuotedAsset.ROI.value, // ROI in Quoted Asset - tradingEngine.current.position.exitType.value // Exit Type - ] - - if (createCloseHeaders === true) { - snapshots.headers = closeHeaders.concat(JSON.parse(JSON.stringify(snapshots.headers))) - createCloseHeaders = false - } - } - - function writeSnapshotFiles() { - - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.strategy === true) { - writeSnapshotFile(snapshots.strategies, 'Strategies') - } - } - - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.strategy === true) { - writeSnapshotFile(snapshots.positions, 'Positions') - } - } - } - - function writeSnapshotFile(snapshotArray, pFileName) { - try { - const FILE_STORAGE = require('../FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - let fileContent = ""; - let separator = "\r\n"; - - parseRecord(snapshots.headers) - - for (let i = 0; i < snapshotArray.length; i++) { - let record = snapshotArray[i]; - parseRecord(record) - } - - function parseRecord(record) { - for (let j = 0; j < record.length; j++) { - let property = record[j] - - fileContent = fileContent + '' + property - if (j !== record.length - 1) { - fileContent = fileContent + "," - } - } - fileContent = fileContent + separator - } - - fileContent = "" + fileContent + ""; - - let fileName = pFileName + '.csv'; - let filePath = bot.filePathRoot + "/Output/" + bot.TRADING_SESSION.folderName + "/" + SNAPSHOTS_FOLDER_NAME; - filePath += '/' + fileName - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated); - - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> filePath = " + filePath); - logger.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset); - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] writeSnapshotFile -> err = " + err.stack); - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEngine.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEngine.js deleted file mode 100644 index b91ed2247..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEngine.js +++ /dev/null @@ -1,229 +0,0 @@ -exports.newTradingEngine = function newTradingEngine(bot, logger) { - /* - We call the Trading Engine to the data structure that is needed in order to exevute the - trading protocol with the specific rules defined at the Trading System. - */ - const MODULE_NAME = 'Trading Engine' - let thisObject = { - mantain: mantain, - reset: reset, - getNodeById: getNodeById, - cloneValues: cloneValues, - setCurrentCandle: setCurrentCandle, - setCurrentCycle: setCurrentCycle, - initializeNode: initializeNode, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let sessionParameters - let nodesMap = new Map() - - return thisObject - - function initialize() { - - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - - initializeNodeMap(tradingEngine) - - if (bot.FIRST_EXECUTION === true) { - /* - Here we will go through all the nodes in the Trading Engine hiriarchy and - apply the initial value to the value property when needed - */ - initializeNode(tradingEngine) - } - } - - function finalize() { - tradingEngine = undefined - sessionParameters = undefined - nodesMap = undefined - } - - function mantain() { - } - - function reset() { - - } - - function getNodeById(NodeId) { - return nodesMap.get(NodeId) - } - - function setCurrentCandle(candle) { - tradingEngine.current.episode.candle.begin.value = candle.begin - tradingEngine.current.episode.candle.end.value = candle.end - tradingEngine.current.episode.candle.open.value = candle.open - tradingEngine.current.episode.candle.close.value = candle.close - tradingEngine.current.episode.candle.min.value = candle.min - tradingEngine.current.episode.candle.max.value = candle.max - } - - function setCurrentCycle(cycle) { - tradingEngine.current.episode.cycle.value = cycle - tradingEngine.current.episode.cycle.lastBegin.value = tradingEngine.current.episode.cycle.begin.value - tradingEngine.current.episode.cycle.lastEnd.value = tradingEngine.current.episode.cycle.end.value - switch (cycle) { - case 'First': { - tradingEngine.current.episode.cycle.begin.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value - tradingEngine.current.episode.cycle.end.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value / 2 - 1 - break - } - case 'Second': { - tradingEngine.current.episode.cycle.begin.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value / 2 - tradingEngine.current.episode.cycle.end.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value * 4 / 4 - 1 - break - } - } - /* - We can not have the last begin or last end to be zero, because that would prevent - objects starting with lastBegin in zero to being saved on file. For that reason - we will do this: - */ - if (tradingEngine.current.episode.cycle.lastBegin.value === 0) { - tradingEngine.current.episode.cycle.lastBegin.value = tradingEngine.current.episode.cycle.begin.value - } - if (tradingEngine.current.episode.cycle.lastEnd.value === 0) { - tradingEngine.current.episode.cycle.lastEnd.value = tradingEngine.current.episode.cycle.end.value - } - } - - function cloneValues(originNode, destinationNode) { - if (originNode === undefined) { return } - if (destinationNode === undefined) { return } - - /* Here copy the node value */ - destinationNode.value = originNode.value - - /* Now we go down through all the children of the origin node, assuming the destination node has the same children structure*/ - let nodeDefinition = global.APP_SCHEMA_MAP.get(originNode.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (originNode[property.name] !== undefined && destinationNode[property.name] !== undefined) { - cloneValues(originNode[property.name], destinationNode[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (originNode[property.name] !== undefined && destinationNode[property.name] !== undefined) { - let originNodePropertyArray = originNode[property.name] - let destinationNodePropertyArray = destinationNode[property.name] - for (let m = 0; m < originNodePropertyArray.length; m++) { - cloneValues(originNodePropertyArray[m], destinationNodePropertyArray[m]) - } - } - break - } - } - } - } - } - - function initializeNodeMap(node) { - if (node === undefined) { return } - /* Add to Node Map */ - nodesMap.set(node.id, node) - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - initializeNodeMap(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - initializeNodeMap(nodePropertyArray[m]) - } - } - break - } - } - } - } - } - - function initializeNode(node) { - if (node === undefined) { return } - - /* Here we initialize the node value */ - if (node.config !== undefined) { - if (node.config.initialValue !== undefined) { - node.value = node.config.initialValue - } - } - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - initializeNode(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - initializeNode(nodePropertyArray[m]) - } - } - break - } - } - } - } - } -} - diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEpisode.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEpisode.js deleted file mode 100644 index 05ea301c0..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingEpisode.js +++ /dev/null @@ -1,320 +0,0 @@ -exports.newTradingEpisode = function newTradingEpisode(bot, logger, tradingEngineModule) { - /* - This module packages all functions related to Episodes. - */ - const MODULE_NAME = 'Trading Episode' - let thisObject = { - mantain: mantain, - reset: reset, - openEpisode: openEpisode, - updateExitType: updateExitType, - closeEpisode: closeEpisode, - cycleBasedStatistics: cycleBasedStatistics, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - } - - function finalize() { - tradingEngine = undefined - tradingSystem = undefined - sessionParameters = undefined - } - - function mantain() { - updateCounters() - updateStatistics() - updateEnds() - updateDistanceToEventsCounters() - } - - function reset() { - resetTradingEngineDataStructure() - } - - function openEpisode() { - /* - This function is called each time the simulation starts. That does not mean the Episode - must be opened there, since it might happen that it is looping at the end of the market - or the task / session was restarted. We will only execute if the episode was never opened before. - */ - if (tradingEngine.current.episode.begin.value !== tradingEngine.current.episode.begin.config.initialValue) { return } - - /* Starting begin and end */ - tradingEngine.current.episode.begin.value = tradingEngine.current.episode.candle.begin.value - tradingEngine.current.episode.end.value = tradingEngine.current.episode.candle.end.value - - /* Getting the begin Balance from the session configuration */ - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value = sessionParameters.sessionBaseAsset.config.initialBalance - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value = sessionParameters.sessionQuotedAsset.config.initialBalance - - /* The current balance is also the begin balance, that is how this starts. */ - tradingEngine.current.episode.episodeBaseAsset.balance.value = sessionParameters.sessionBaseAsset.config.initialBalance - tradingEngine.current.episode.episodeQuotedAsset.balance.value = sessionParameters.sessionQuotedAsset.config.initialBalance - - /* Recording the opening at the Trading Engine Data Structure */ - tradingEngine.current.episode.status.value = 'Open' - tradingEngine.current.episode.serialNumber.value = 1 - tradingEngine.current.episode.identifier.value = global.UNIQUE_ID() - tradingEngine.current.episode.beginRate.value = tradingEngine.current.episode.candle.close.value - } - - function updateExitType(exitType) { - tradingEngine.current.episode.exitType.value = exitType - } - - function closeEpisode() { - tradingEngine.current.episode.status.value = 'Closed' - tradingEngine.current.episode.end.value = tradingEngine.current.episode.candle.end.value - tradingEngine.current.episode.endRate.value = tradingEngine.current.episode.candle.close.value - tradingEngine.current.episode.episodeBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.episode.episodeQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - } - - function resetEpisode() { - tradingEngineModule.initializeNode(tradingEngine.current.episode) - } - - function updateEnds() { - if (tradingEngine.current.episode.status.value === 'Open') { - tradingEngine.current.episode.end.value = tradingEngine.current.episode.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.episode.endRate.value = tradingEngine.current.episode.candle.close.value - tradingEngine.current.episode.episodeBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.episode.episodeQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - } - } - - function resetTradingEngineDataStructure() { - if (tradingEngine.current.episode.status.value === 'Closed') { - resetEpisode() - } - } - - function updateCounters() { - if (tradingEngine.current.episode.status.value === 'Open') { - tradingEngine.current.episode.episodeCounters.periods.value++ - } - } - - function updateStatistics() { - - /* Daus Calculation */ - tradingEngine.current.episode.episodeStatistics.days.value = - tradingEngine.current.episode.episodeCounters.periods.value * - sessionParameters.timeFrame.config.value / - global.ONE_DAY_IN_MILISECONDS - } - - function cycleBasedStatistics() { - - calculateAssetsStatistics() - calculateEpisodeStatistics() - - function calculateAssetsStatistics() { - /* Updating Profit Loss */ - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value - - sessionParameters.sessionBaseAsset.config.initialBalance - - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value - - sessionParameters.sessionQuotedAsset.config.initialBalance - - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.profitLoss.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value, 10) - - /* - Updating ROI - - https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp - */ - tradingEngine.current.episode.episodeBaseAsset.ROI.value = - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value / - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * 100 - - tradingEngine.current.episode.episodeQuotedAsset.ROI.value = - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value / - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value * 100 - - tradingEngine.current.episode.episodeBaseAsset.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.ROI.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.ROI.value, 10) - - /* Updating Hit Ratio */ - if (tradingEngine.current.episode.episodeCounters.positions.value > 0) { - tradingEngine.current.episode.episodeBaseAsset.hitRatio.value = - tradingEngine.current.episode.episodeBaseAsset.hits.value / - tradingEngine.current.episode.episodeCounters.positions.value - - tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value = - tradingEngine.current.episode.episodeQuotedAsset.hits.value / - tradingEngine.current.episode.episodeCounters.positions.value - - tradingEngine.current.episode.episodeBaseAsset.hitRatio.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.hitRatio.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.hitRatio.value, 10) - } - - /* - Updating Annualized Rate Of Return - - https://www.investopedia.com/terms/a/annualized-rate.asp - */ - tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = - Math.pow( - ( - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value + - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value - ) / tradingEngine.current.episode.episodeBaseAsset.beginBalance.value - , - (365 / tradingEngine.current.episode.episodeStatistics.days.value) - ) - 1 - - tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = - Math.pow( - ( - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value + - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - ) / tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value - , - (365 / tradingEngine.current.episode.episodeStatistics.days.value) - ) - 1 - - tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.annualizedRateOfReturn.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.annualizedRateOfReturn.value, 10) - - /* Updating Hit or Fail */ - if (tradingEngine.current.episode.episodeBaseAsset.profitLoss.value > 0) { - tradingEngine.current.episode.episodeBaseAsset.hitFail.value = 'Hit' - } else { - tradingEngine.current.episode.episodeBaseAsset.hitFail.value = 'Fail' - } - if (tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value > 0) { - tradingEngine.current.episode.episodeQuotedAsset.hitFail.value = 'Hit' - } else { - tradingEngine.current.episode.episodeQuotedAsset.hitFail.value = 'Fail' - } - } - - function calculateEpisodeStatistics() { - /* Updating Profit Loss */ - tradingEngine.current.episode.episodeStatistics.profitLoss.value = - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.episode.candle.close.value + - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - - tradingEngine.current.episode.episodeStatistics.profitLoss.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.profitLoss.value, 10) - - /* - Updating ROI - - https://www.investopedia.com/articles/basics/10/guide-to-calculating-roi.asp - */ - tradingEngine.current.episode.episodeStatistics.ROI.value = - ( - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.episode.endRate.value + - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - ) / ( - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * tradingEngine.current.episode.beginRate.value + - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value - ) * 100 - - tradingEngine.current.episode.episodeStatistics.ROI.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.ROI.value, 10) - - /* - Updating Annualized Rate Of Return - - https://www.investopedia.com/terms/a/annualized-rate.asp - */ - tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value = - Math.pow( - ( - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * tradingEngine.current.episode.beginRate.value + - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value + - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value + - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - ) / - ( - tradingEngine.current.episode.episodeBaseAsset.beginBalance.value * tradingEngine.current.episode.beginRate.value + - tradingEngine.current.episode.episodeQuotedAsset.beginBalance.value - ) - , - (365 / tradingEngine.current.episode.episodeStatistics.days.value) - ) - 1 - - tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value = global.PRECISE(tradingEngine.current.episode.episodeStatistics.annualizedRateOfReturn.value, 10) - - /* Updating Hit or Fail */ - if (tradingEngine.current.episode.episodeStatistics.profitLoss.value > 0) { - tradingEngine.current.episode.episodeStatistics.hitFail.value = 'Hit' - } else { - tradingEngine.current.episode.episodeStatistics.hitFail.value = 'Fail' - } - } - } - - function updateDistanceToEventsCounters() { - /* Keeping Distance Counters Up-to-date while avoinding counting before the first event happens. */ - if ( - tradingEngine.current.episode.distanceToEvent.triggerOn.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.triggerOn.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.triggerOff.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.triggerOff.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.takePosition.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.takePosition.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.closePosition.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.closePosition.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.nextPhase.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.nextPhase.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.moveToPhase.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.moveToPhase.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.createOrder.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.createOrder.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.cancelOrder.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.cancelOrder.value++ - } - - if ( - tradingEngine.current.episode.distanceToEvent.closeOrder.value > 0 - ) { - tradingEngine.current.episode.distanceToEvent.closeOrder.value++ - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingExecution.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingExecution.js deleted file mode 100644 index b1e5e3e25..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingExecution.js +++ /dev/null @@ -1,103 +0,0 @@ -exports.newTradingExecution = function newTradingExecution(bot, logger, tradingEngineModule) { - /* - The Trading Execution modules manages the execution nodes and execution algoritms. - */ - const MODULE_NAME = 'Trading Execution' - - let thisObject = { - mantain: mantain, - reset: reset, - runExecution: runExecution, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - const TRADING_ORDERS_MODULE = require('./TradingOrders.js') - let tradingOrdersModule = TRADING_ORDERS_MODULE.newTradingOrders(bot, logger, tradingEngineModule) - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - - tradingOrdersModule.initialize() - } - - function finalize() { - tradingSystem = undefined - tradingEngine = undefined - sessionParameters = undefined - - tradingOrdersModule.finalize() - tradingOrdersModule = undefined - } - - function mantain() { - tradingOrdersModule.mantain() - } - - function reset() { - tradingOrdersModule.reset() - } - - async function runExecution( - executionNode, - tradingEngineStage - ) { - try { - /* Trading Engine Stage Validations */ - if (tradingEngineStage.stageBaseAsset === undefined) { badDefinitionUnhandledException(undefined, 'stageBaseAsset === undefined', tradingEngineStage) } - if (tradingEngineStage.stageBaseAsset.targetSize === undefined) { badDefinitionUnhandledException(undefined, 'stageBaseAsset.targetSize === undefined', tradingEngineStage) } - if (tradingEngineStage.stageBaseAsset.sizePlaced === undefined) { badDefinitionUnhandledException(undefined, 'stageBaseAsset.sizePlaced === undefined', tradingEngineStage) } - if (tradingEngineStage.stageBaseAsset.sizeFilled === undefined) { badDefinitionUnhandledException(undefined, 'stageBaseAsset.sizeFilled === undefined', tradingEngineStage) } - if (tradingEngineStage.stageBaseAsset.feesPaid === undefined) { badDefinitionUnhandledException(undefined, 'stageBaseAsset.feesPaid === undefined', tradingEngineStage) } - if (tradingEngineStage.stageQuotedAsset === undefined) { badDefinitionUnhandledException(undefined, 'stageQuotedAsset === undefined', tradingEngineStage) } - if (tradingEngineStage.stageQuotedAsset.targetSize === undefined) { badDefinitionUnhandledException(undefined, 'stageQuotedAsset.targetSize === undefined', tradingEngineStage) } - if (tradingEngineStage.stageQuotedAsset.sizePlaced === undefined) { badDefinitionUnhandledException(undefined, 'stageQuotedAsset.sizePlaced === undefined', tradingEngineStage) } - if (tradingEngineStage.stageQuotedAsset.sizeFilled === undefined) { badDefinitionUnhandledException(undefined, 'stageQuotedAsset.sizeFilled === undefined', tradingEngineStage) } - if (tradingEngineStage.stageQuotedAsset.feesPaid === undefined) { badDefinitionUnhandledException(undefined, 'stageQuotedAsset.feesPaid === undefined', tradingEngineStage) } - - await checkExecutionAlgorithms(executionNode) - - async function checkExecutionAlgorithms(executionNode) { - for (let i = 0; i < executionNode.executionAlgorithms.length; i++) { - let executionAlgorithm = executionNode.executionAlgorithms[i] - await tradingOrdersModule.checkOrders(tradingEngineStage, executionAlgorithm.marketBuyOrders, executionAlgorithm, executionNode) - await tradingOrdersModule.checkOrders(tradingEngineStage, executionAlgorithm.marketSellOrders, executionAlgorithm, executionNode) - await tradingOrdersModule.checkOrders(tradingEngineStage, executionAlgorithm.limitBuyOrders, executionAlgorithm, executionNode) - await tradingOrdersModule.checkOrders(tradingEngineStage, executionAlgorithm.limitSellOrders, executionAlgorithm, executionNode) - } - } - - } catch (err) { - tradingSystem.errors.push([executionNode.id, err.message]) - - if (typeof err === 'string' || err instanceof String) { - logger.write(MODULE_NAME, '[ERROR] runExecution -> err = ' + err) - } - if (err.stack !== undefined) { - logger.write(MODULE_NAME, '[ERROR] runExecution -> err = ' + err.stack) - } - } - } - - function badDefinitionUnhandledException(err, message, node) { - tradingSystem.errors.push([node.id, message]) - - logger.write(MODULE_NAME, "[ERROR] -> " + message); - logger.write(MODULE_NAME, "[ERROR] -> node.name = " + node.name); - logger.write(MODULE_NAME, "[ERROR] -> node.type = " + node.type); - logger.write(MODULE_NAME, "[ERROR] -> node.config = " + JSON.stringify(node.config)); - if (err !== undefined) { - logger.write(MODULE_NAME, "[ERROR] -> err.stack = " + err.stack); - } - throw 'Please fix the problem and try again.' - } -} - diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOrders.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOrders.js deleted file mode 100644 index 2c432eb57..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOrders.js +++ /dev/null @@ -1,1071 +0,0 @@ -exports.newTradingOrders = function newTradingOrders(bot, logger, tradingEngineModule) { - /* - The Trading Orders modules manages the execution of orders against the exchanges. - */ - const MODULE_NAME = 'Trading Orders' - - let thisObject = { - mantain: mantain, - reset: reset, - checkOrders: checkOrders, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - const EXCHANGE_API_MODULE = require('./ExchangeAPI.js') - let exchangeAPIModule = EXCHANGE_API_MODULE.newExchangeAPI(bot, logger) - - const ANNOUNCEMENTS_MODULE = require('./Announcements.js') - let announcementsModule = ANNOUNCEMENTS_MODULE.newAnnouncements(bot, logger) - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - - exchangeAPIModule.initialize() - announcementsModule.initialize() - } - - function finalize() { - tradingSystem = undefined - tradingEngine = undefined - sessionParameters = undefined - - exchangeAPIModule.finalize() - exchangeAPIModule = undefined - - announcementsModule.finalize() - announcementsModule = undefined - } - - function mantain() { - mantainReset(true, false) - } - - function reset() { - mantainReset(false, true) - } - - function mantainReset(mantain, reset) { - - if (tradingEngine.current.strategy.index.value === tradingEngine.current.strategy.index.config.initialValue) { return } - - let stageNode - let executionNode - - stageNode = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].openStage - executionNode = stageNode.openExecution - processExecutionNode(executionNode, tradingEngine.current.strategyOpenStage.status.value) - - stageNode = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].closeStage - executionNode = stageNode.closeExecution - processExecutionNode(executionNode, tradingEngine.current.strategyCloseStage.status.value) - - function processExecutionNode(executionNode, stageStatus) { - - preocessExecutionAlgorithms(executionNode) - - function preocessExecutionAlgorithms(executionNode) { - for (let i = 0; i < executionNode.executionAlgorithms.length; i++) { - let executionAlgorithm = executionNode.executionAlgorithms[i] - processOrders(executionAlgorithm.marketBuyOrders) - processOrders(executionAlgorithm.marketSellOrders) - processOrders(executionAlgorithm.limitBuyOrders) - processOrders(executionAlgorithm.limitSellOrders) - } - } - - function processOrders(orders) { - for (let i = 0; i < orders.length; i++) { - let tradingSystemOrder = orders[i] - if (tradingSystemOrder.referenceParent === undefined) { - badDefinitionUnhandledException(undefined, 'tradingSystemOrder.referenceParent === undefined', tradingSystemOrder) - } - let tradingEngineOrder = tradingEngineModule.getNodeById(tradingSystemOrder.referenceParent.id) - - if (tradingEngineOrder.status === undefined) { - badDefinitionUnhandledException(undefined, 'tradingEngineOrder.status === undefined', tradingEngineOrder) - } - - if (mantain === true) { - updateCounters(tradingEngineOrder) - updateEnds(tradingEngineOrder) - updateStatistics(tradingEngineOrder) - } - if (reset === true) { - resetTradingEngineDataStructure(tradingEngineOrder, tradingSystemOrder, stageStatus) - } - } - } - } - } - - async function checkOrders(tradingEngineStage, orders, executionAlgorithm, executionNode) { - for (let i = 0; i < orders.length; i++) { - - let tradingSystemOrder = orders[i] - tradingSystemValidations(tradingSystemOrder) - let tradingEngineOrder = tradingEngineModule.getNodeById(tradingSystemOrder.referenceParent.id) - tradingEngineValidations(tradingEngineOrder) - - switch (tradingEngineOrder.status.value) { - case 'Not Open': { - { - /* During the First cycle we can not create new orders. That is reserved for the Second cycle. */ - if (tradingEngine.current.episode.cycle.value === 'First') { continue } - /* When the stage is closing we can not create new orders */ - if (tradingEngineStage.status.value === 'Closing') { continue } - /* - Check if we can create an order based on the config value for spawnMultipleOrders. - Trading System Orders that cannot spawn more than one Trading Engine Order needs to check if - at the Trading Engine Order the lock is Open or Closed. - */ - if (tradingSystemOrder.config.spawnMultipleOrders !== true) { - if (tradingEngineOrder.lock.value === 'Closed') { - tradingSystem.infos.push(['Order ' + tradingSystemOrder.name + ' skipped because lock was closed.']) - continue - } - } - /* Check if we need to Create this Order */ - let situationName = await checkOrderEvent(tradingSystemOrder.createOrderEvent, tradingSystemOrder, executionAlgorithm, executionNode) - if (situationName !== undefined) { - - /* Open a new order */ - await tryToOpenOrder(tradingEngineStage, executionAlgorithm, tradingSystemOrder, tradingEngineOrder, situationName) - } - } - break - } - case 'Open': { - /* During the Second cycle we can not cancel orders. That is reserved for the First cycle. */ - if (tradingEngine.current.episode.cycle.value === 'Second') { continue } - - /* Simulate Events that happens at the Exchange, if needed. */ - simulateCheckExchangeEvents(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) - - /* Check Events that happens at the Exchange, if needed. */ - let allGood = await checkExchangeEvents(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) - - if (allGood !== true) { - /* - For some reason we could not check the order at the exchange, so we will not even check if we - need to cancel it, since we could end up with inconsisten information at the accounting level. - */ - if (tradingSystemOrder.cancelOrderEvent !== undefined) { - tradingSystem.warnings.push( - [ - tradingSystemOrder.cancelOrderEvent.id, - 'Skipping Cancel Event Checking because cheking the order at the exchange failed.' - ] - ) - } - return - } - - /* Check if we need to cancel the order */ - await checkCancelOrderEvent(tradingEngineStage, executionAlgorithm, executionNode, tradingEngineOrder, tradingSystemOrder) - /* - If by this time the order is closed, we need to clone it and get the close - to the Last node at the Trading Engine data structure. - */ - if (tradingEngineOrder.status.value === 'Closed') { - switch (tradingEngineOrder.type) { - case 'Market Order': { - tradingEngineModule.cloneValues(tradingEngineOrder, tradingEngine.last.marketOrders) - break - } - case 'Limit Order': { - tradingEngineModule.cloneValues(tradingEngineOrder, tradingEngine.last.limitOrders) - break - } - } - } - } - } - } - } - - async function checkCancelOrderEvent(tradingEngineStage, executionAlgorithm, executionNode, tradingEngineOrder, tradingSystemOrder) { - /* - In the previous steps, we might have discovered that the order was cancelled - at the exchange, or filled, so the order might still not be Open. - If the stage is closing or the order is not Open, we wont be cancelling orders - based on defined events. - */ - if (tradingEngineStage.status.value !== 'Closing' && tradingEngineOrder.status.value === 'Open') { - - /* Check if we need to Cancel this Order */ - let situationName = await checkOrderEvent(tradingSystemOrder.cancelOrderEvent, tradingSystemOrder, executionAlgorithm, executionNode) - if (situationName !== undefined) { - - /* Simulate Order Cancelation, if needed. */ - simulateCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, 'Cancel Event') - - /* Cancel the order at the Exchange, if needed. */ - await exchangeCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, 'Cancel Event') - - await updateEndsWithCycle(tradingEngineOrder) - } - } - } - - function tradingSystemValidations(tradingSystemOrder) { - /* Trading System Validations */ - if (tradingSystemOrder.config.percentageOfAlgorithmSize === undefined) { badDefinitionUnhandledException(undefined, 'tradingSystemOrder.config.percentageOfAlgorithmSize === undefined', tradingSystemOrder) } - if (tradingSystemOrder.referenceParent === undefined) { badDefinitionUnhandledException(undefined, 'tradingSystemOrder.referenceParent === undefined', tradingSystemOrder) } - } - - function tradingEngineValidations(tradingEngineOrder) { - /* Trading Engine Order Validations */ - if (tradingEngineOrder.serialNumber === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.serialNumber === undefined', tradingEngineOrder) } - if (tradingEngineOrder.identifier === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.identifier === undefined', tradingEngineOrder) } - if (tradingEngineOrder.exchangeId === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.exchangeId === undefined', tradingEngineOrder) } - if (tradingEngineOrder.begin === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.begin === undefined', tradingEngineOrder) } - if (tradingEngineOrder.end === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.end === undefined', tradingEngineOrder) } - if (tradingEngineOrder.rate === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.rate === undefined', tradingEngineOrder) } - if (tradingEngineOrder.status === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.status === undefined', tradingEngineOrder) } - if (tradingEngineOrder.algorithmName === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.algorithmName === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderCounters === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderCounters === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderCounters.periods === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderCounters.periods === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderStatistics.days === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderStatistics.days === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderStatistics.percentageFilled === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderStatistics.percentageFilled === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderStatistics.actualRate === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderStatistics.actualRate === undefined', tradingEngineOrder) } - - if (tradingEngineOrder.orderBaseAsset.size === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.size === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderBaseAsset.sizeFilled === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.sizeFilled === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderBaseAsset.feesPaid === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.feesPaid === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderBaseAsset.actualSize === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.actualSize === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderBaseAsset.amountReceived === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.amountReceived === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderBaseAsset.feesToBePaid === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderBaseAsset.feesToBePaid === undefined', tradingEngineOrder) } - - if (tradingEngineOrder.orderQuotedAsset.size === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.size === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderQuotedAsset.sizeFilled === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.sizeFilled === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderQuotedAsset.feesPaid === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.feesPaid === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderQuotedAsset.actualSize === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.actualSize === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderQuotedAsset.amountReceived === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.amountReceived === undefined', tradingEngineOrder) } - if (tradingEngineOrder.orderQuotedAsset.feesToBePaid === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.orderQuotedAsset.feesToBePaid === undefined', tradingEngineOrder) } - } - - async function tryToOpenOrder(tradingEngineStage, executionAlgorithm, tradingSystemOrder, tradingEngineOrder, situationName) { - - await calculateOrderRate() - await calculateOrderSize() - - /* Check Size: We are not going to create Orders which size is equal or less to zero. */ - if (tradingEngineOrder.orderBaseAsset.size.value <= 0) { - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderBaseAsset.size.id, tradingSystemOrder.id], - 'Could not open this order because its size is zero.' - ] - ) - return - } - - if (tradingEngineOrder.orderQuotedAsset.size.value <= 0) { - tradingSystem.warnings.push( - [ - [tradingEngineOrder.orderQuotedAsset.size.id, tradingSystemOrder.id ], - 'Could not open this order because its size is zero.' - ] - ) - return - } - - /* Place Order at the Exchange, if needed. */ - let result = await createOrderAtExchange(tradingSystemOrder, tradingEngineOrder) - if (result !== true) { - tradingSystem.warnings.push( - [ - [tradingSystemOrder.id, tradingEngineOrder], - 'Could not open this order because something failed placing the order at the Exchange.' - ] - ) - return - } - - /* Update Stage Placed Size */ - tradingEngineStage.stageBaseAsset.sizePlaced.value = tradingEngineStage.stageBaseAsset.sizePlaced.value + tradingEngineOrder.orderBaseAsset.size.value - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) - tradingEngineStage.stageQuotedAsset.sizePlaced.value = tradingEngineStage.stageQuotedAsset.sizePlaced.value + tradingEngineOrder.orderQuotedAsset.size.value - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) - - /* Updating Episode Counters */ - tradingEngine.current.episode.episodeCounters.orders.value++ - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.createOrder.value = 1 - - /* Create Order Procedure */ - tradingEngineOrder.status.value = 'Open' - tradingEngineOrder.identifier.value = global.UNIQUE_ID() - tradingEngineOrder.begin.value = tradingEngine.current.episode.cycle.begin.value - tradingEngineOrder.end.value = tradingEngine.current.episode.cycle.end.value - tradingEngineOrder.serialNumber.value = tradingEngine.current.episode.episodeCounters.orders.value - tradingEngineOrder.orderName.value = tradingSystemOrder.name - tradingEngineOrder.algorithmName.value = executionAlgorithm.name - tradingEngineOrder.situationName.value = situationName - - async function calculateOrderRate() { - - /* Optional Rate Definition */ - if (tradingSystemOrder.type === 'Limit Buy Order' || tradingSystemOrder.type === 'Limit Sell Order') { - if (tradingSystemOrder.orderRate === undefined) { badDefinitionUnhandledException(undefined, 'tradingSystemOrder.orderRate === undefined', tradingSystemOrder) } - if (tradingSystemOrder.orderRate.formula === undefined) { badDefinitionUnhandledException(undefined, 'tradingSystemOrder.orderRate.formula === undefined', tradingSystemOrder) } - - /* Extract the rate value from the user-defined formula */ - tradingEngineOrder.rate.value = tradingSystem.formulas.get(tradingSystemOrder.orderRate.formula.id) - - /* Final rate validations */ - if (tradingEngineOrder.rate.value === undefined) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.rate.value === undefined', tradingSystemOrder) } - if (isNaN(tradingEngineOrder.rate.value) === true) { badDefinitionUnhandledException(undefined, 'isNaN(tradingEngineOrder.rate.value) === true', tradingSystemOrder) } - if (tradingEngineOrder.rate.value <= 0) { badDefinitionUnhandledException(undefined, 'tradingEngineOrder.rate.value <= 0', tradingSystemOrder) } - - tradingEngineOrder.rate.value = global.PRECISE(tradingEngineOrder.rate.value, 10) - } else { - /* - For Market Orders, the rate is irrelevant, since it is not sent to the Exchange. - We store at this field the last know price as a reference. - */ - tradingEngineOrder.rate.value = tradingEngine.current.episode.candle.close.value - } - } - - async function calculateOrderSize() { - let algorithmSizeInBaseAsset - let algorithmSizeInQuotedAsset - - requiredConfigurationValidation() - notPassingTargetSizeValidation() - notNegativeBalanceValidation() - - function requiredConfigurationValidation() { - /* Validate that this config exists */ - if (executionAlgorithm.config.percentageOfStageTargetSize === undefined) { - badDefinitionUnhandledException(undefined, 'executionAlgorithm.config.percentageOfStageTargetSize === undefined', executionAlgorithm) - } - if (isNaN(executionAlgorithm.config.percentageOfStageTargetSize) === true) { - badDefinitionUnhandledException(undefined, 'isNaN(executionAlgorithm.config.percentageOfStageTargetSize) === true', executionAlgorithm) - } - - algorithmSizeInBaseAsset = tradingEngineStage.stageBaseAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100 - algorithmSizeInQuotedAsset = tradingEngineStage.stageQuotedAsset.targetSize.value * executionAlgorithm.config.percentageOfStageTargetSize / 100 - - /* Validate that this config exists */ - if (tradingSystemOrder.config.percentageOfAlgorithmSize === undefined) { - badDefinitionUnhandledException(undefined, 'tradingSystemOrder.config.percentageOfAlgorithmSize === undefined', tradingSystemOrder) - } - if (isNaN(tradingSystemOrder.config.percentageOfAlgorithmSize) === true) { - badDefinitionUnhandledException(undefined, 'isNaN(tradingSystemOrder.config.percentageOfAlgorithmSize) === true', tradingSystemOrder) - } - } - - function notPassingTargetSizeValidation() { - /* - The Size calculation depends on how the user defined the size of the position. - The user could have defined the size of the position in Base Asset or Quoted Asset. - */ - switch (tradingEngineStage.stageDefinedIn.value) { - case 'Base Asset': { - /* Size in Base Asset */ - tradingEngineOrder.orderBaseAsset.size.value = algorithmSizeInBaseAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100 - tradingEngineOrder.orderBaseAsset.size.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.size.value, 10) - - /* Check that the Size calculated would not surpass Stage Target Size */ - if ( - tradingEngineOrder.orderBaseAsset.size.value + tradingEngineStage.stageBaseAsset.sizePlaced.value > - tradingEngineStage.stageBaseAsset.targetSize.value - ) { - let previousValue = tradingEngineOrder.orderBaseAsset.size.value - tradingEngineOrder.orderBaseAsset.size.value = - tradingEngineStage.stageBaseAsset.targetSize.value - - tradingEngineStage.stageBaseAsset.sizePlaced.value - - tradingSystem.warnings.push( - [ - [tradingEngineStage.stageBaseAsset.targetSize.id, tradingEngineOrder.orderBaseAsset.size.id, tradingEngineStage.stageBaseAsset.sizePlaced.id], - 'Order size (' + previousValue + ') shrinked (' + tradingEngineOrder.orderBaseAsset.size.value + ') so that the Size Placed (' + tradingEngineStage.stageBaseAsset.sizePlaced.value + ') does not exceed the Target Size (' + tradingEngineStage.stageBaseAsset.targetSize.value + ') for the stage.' - ] - ) - } - - /* Size in Quoted Asset */ - tradingEngineOrder.orderQuotedAsset.size.value = tradingEngineOrder.orderBaseAsset.size.value * tradingEngineOrder.rate.value - break - } - case 'Quoted Asset': { - /* Size in Quoted Asset */ - tradingEngineOrder.orderQuotedAsset.size.value = algorithmSizeInQuotedAsset * tradingSystemOrder.config.percentageOfAlgorithmSize / 100 - tradingEngineOrder.orderQuotedAsset.size.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.size.value, 10) - - /* Check that the Size calculated would not surpass Stage Target Size */ - if ( - tradingEngineOrder.orderQuotedAsset.size.value + tradingEngineStage.stageQuotedAsset.sizePlaced.value > - tradingEngineStage.stageQuotedAsset.targetSize.value - ) { - let previousValue = tradingEngineOrder.orderQuotedAsset.size.value - tradingEngineOrder.orderQuotedAsset.size.value = - tradingEngineStage.stageQuotedAsset.targetSize.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value - - tradingSystem.warnings.push( - [ - [tradingEngineStage.stageQuotedAsset.targetSize.id, tradingEngineOrder.orderQuotedAsset.size.id, tradingEngineStage.stageQuotedAsset.sizePlaced.id], - 'Order size (' + previousValue + ') shrinked (' + tradingEngineOrder.orderQuotedAsset.size.value + ') so that the Size Placed (' + tradingEngineStage.stageQuotedAsset.sizePlaced.value + ') does not exceed the Target Size (' + tradingEngineStage.stageQuotedAsset.targetSize.value + ') for the stage.' - ] - ) - } - - /* Size in Base Asset */ - tradingEngineOrder.orderBaseAsset.size.value = tradingEngineOrder.orderQuotedAsset.size.value / tradingEngineOrder.rate.value - - break - } - } - } - - function notNegativeBalanceValidation() { - /* Check that the Size calculated would not leave a negative balance */ - switch (true) { - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - if ( - tradingEngine.current.episode.episodeQuotedAsset.balance.value - tradingEngineOrder.orderQuotedAsset.size.value < 0 - ) { - tradingSystem.warnings.push( - [ - [tradingEngine.current.episode.episodeQuotedAsset.balance.id, tradingEngineOrder.orderQuotedAsset.size.id], - 'Order Size Quoted Asset (' + tradingEngineOrder.orderQuotedAsset.size.value + ') changed to Balance Quoted Asset (' + tradingEngine.current.episode.episodeQuotedAsset.balance.value + ') so that the Balance does not drop below zero.' - ] - ) - - tradingEngineOrder.orderQuotedAsset.size.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - tradingEngineOrder.orderBaseAsset.size.value = tradingEngineOrder.orderQuotedAsset.size.value / tradingEngineOrder.rate.value - } - break - } - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - if ( - tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngineOrder.orderBaseAsset.size.value < 0 - ) { - tradingSystem.warnings.push( - [ - [tradingEngine.current.episode.episodeBaseAsset.balance.id, tradingEngineOrder.orderBaseAsset.size.id], - 'Order Size Base Asset (' + tradingEngineOrder.orderBaseAsset.size.value + ') changed to Balance Base Asset (' + tradingEngine.current.episode.episodeBaseAsset.balance.value + ') so that the Balance does not drop below zero.' - ] - ) - - tradingEngineOrder.orderBaseAsset.size.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngineOrder.orderQuotedAsset.size.value = tradingEngineOrder.orderBaseAsset.size.value * tradingEngineOrder.rate.value - } - break - } - } - } - - tradingEngineOrder.orderBaseAsset.size.value = global.PRECISE(tradingEngineOrder.orderBaseAsset.size.value, 10) - tradingEngineOrder.orderQuotedAsset.size.value = global.PRECISE(tradingEngineOrder.orderQuotedAsset.size.value, 10) - } - - async function createOrderAtExchange(tradingSystemOrder, tradingEngineOrder) { - - /* Filter by Session Type */ - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - return true - } - case 'Live Trading Session': { - break - } - case 'Fordward Testing Session': { - break - } - case 'Paper Trading Session': { - return true - } - } - - let orderId = await exchangeAPIModule.createOrder(tradingSystemOrder, tradingEngineOrder) - - if (orderId !== undefined) { - tradingEngineOrder.exchangeId.value = orderId - return true - } - } - } - - async function checkExchangeEvents(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) { - - /* Filter by Session Type */ - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - return true - } - case 'Live Trading Session': { - break - } - case 'Fordward Testing Session': { - break - } - case 'Paper Trading Session': { - return true - } - } - - let order = await exchangeAPIModule.getOrder(tradingSystemOrder, tradingEngineOrder) - - if (order === undefined) { - tradingSystem.warnings.push( - [ - [tradingSystemOrder.id, tradingEngineOrder.id], - 'Could not verify the status of this order at the exchange.' - ] - ) - return false - } - - const AT_EXCHANGE_STATUS = { - OPEN: 'open', - CLOSED: 'closed', - CANCELLED: 'canceled' - } - - /* Status Checks */ - if (order.remaining === 0 && order.status === AT_EXCHANGE_STATUS.CLOSED) { - /* Close this Order */ - tradingEngineOrder.status.value = 'Closed' - tradingEngineOrder.exitType.value = 'Filled' - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - await updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - - await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) - return - } - - if (order.remaining > 0 && order.status === AT_EXCHANGE_STATUS.CLOSED) { - /* Close this Order */ - tradingEngineOrder.status.value = 'Closed' - tradingEngineOrder.exitType.value = 'Closed at the Exchange' - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - await updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - - await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) - await recalculateStageSize(tradingEngineStage, tradingEngineOrder) - return - } - - if (order.status === AT_EXCHANGE_STATUS.CANCELLED) { - /* Close this Order */ - tradingEngineOrder.status.value = 'Closed' - /* - We must be carefull here not to overide an already defined exitType. It can happen - for instance that the order was cancellerd from the bot, but veryfing the cancellation - was not possible because of a connection to the exchange problem. In that case - the exit type was defined but the order was kept open until the verification could be done. - */ - if (tradingEngineOrder.exitType.value === tradingEngineOrder.exitType.config.initialValue) { - tradingEngineOrder.exitType.value = 'Cancelled at the Exchange' - } - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - await updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'checkExchangeEvents -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - - await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) - await recalculateStageSize(tradingEngineStage, tradingEngineOrder) - return - } - - /* - If the order happens to be at least partially filled, there is a syncronization work - we need to do, that includes discovering which is the Actual Rate the order is being filled, - the Fees Paid and many other thing we need to account for. - */ - if (order.filled > 0) { - await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) - } - - /* - Forced Cancellation Check: Here we check if we need to cancel this order because the - stage is closing. - */ - if (tradingEngineStage.status.value === 'Closing' && tradingEngineOrder.status.value !== 'Closed') { - await exchangeCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, 'Closing Stage') - } - - return true - } - - function simulateCheckExchangeEvents(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) { - - /* Filter by Session Type */ - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - break - } - case 'Live Trading Session': { - return - } - case 'Fordward Testing Session': { - return - } - case 'Paper Trading Session': { - break - } - } - - simulateSyncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) - - /* Check if we need to close the order */ - if (tradingEngineOrder.orderStatistics.percentageFilled.value === 100) { - - /* Close this Order */ - tradingEngineOrder.status.value = 'Closed' - tradingEngineOrder.exitType.value = 'Filled' - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'percentageFilledSimulation -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - } - - /* If the Stage is Closing and this order is still open, we need to cancel it now */ - if (tradingEngineStage.status.value === 'Closing' && tradingEngineOrder.status.value !== 'Closed') { - simulateCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, 'Closing Stage') - } - } - - function simulateSyncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder) { - - let previousBaseAssetSizeFilled = tradingEngineOrder.orderBaseAsset.sizeFilled.value - let previousQuotedAssetSizeFilled = tradingEngineOrder.orderQuotedAsset.sizeFilled.value - let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value - let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - - const ORDERS_SIMULATIONS_MODULE = require('./OrdersSimulations.js') - let ordersSimulationsModule = ORDERS_SIMULATIONS_MODULE.newOrdersSimulations(bot, logger) - ordersSimulationsModule.initialize() - - ordersSimulationsModule.actualSizeSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.actualRateSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.feesToBePaidSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.percentageFilledSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.feesPaidSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.sizeFilledSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - ordersSimulationsModule.amountReceivedSimulation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, applyFeePercentage) - - ordersSimulationsModule.finalize() - - doTheAccounting( - tradingEngineStage, - tradingSystemOrder, - tradingEngineOrder, - previousBaseAssetSizeFilled, - previousQuotedAssetSizeFilled, - previousBaseAssetFeesPaid, - previousQuotedAssetFeesPaid - ) - } - - async function syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) { - - let previousBaseAssetSizeFilled = tradingEngineOrder.orderBaseAsset.sizeFilled.value - let previousQuotedAssetSizeFilled = tradingEngineOrder.orderQuotedAsset.sizeFilled.value - let previousBaseAssetFeesPaid = tradingEngineOrder.orderBaseAsset.feesPaid.value - let previousQuotedAssetFeesPaid = tradingEngineOrder.orderQuotedAsset.feesPaid.value - - const ORDERS_CALCULATIONS_MODULE = require('./OrdersCalculations.js') - let ordersCalculationsModule = ORDERS_CALCULATIONS_MODULE.newOrdersCalculations(bot, logger) - ordersCalculationsModule.initialize() - - await ordersCalculationsModule.actualSizeCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.actualRateCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.feesToBePaidCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.percentageFilledCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.feesPaidCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.sizeFilledCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - await ordersCalculationsModule.amountReceivedCalculation(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order, applyFeePercentage) - - ordersCalculationsModule.finalize() - - await doTheAccounting( - tradingEngineStage, - tradingSystemOrder, - tradingEngineOrder, - previousBaseAssetSizeFilled, - previousQuotedAssetSizeFilled, - previousBaseAssetFeesPaid, - previousQuotedAssetFeesPaid - ) - } - - async function doTheAccounting( - tradingEngineStage, - tradingSystemOrder, - tradingEngineOrder, - previousBaseAssetSizeFilled, - previousQuotedAssetSizeFilled, - previousBaseAssetFeesPaid, - previousQuotedAssetFeesPaid - ) { - - await updateStageAssets() - await updateBalances() - - async function updateStageAssets() { - /* Stage Base Asset: Undo the previous accounting */ - tradingEngineStage.stageBaseAsset.sizeFilled.value = - tradingEngineStage.stageBaseAsset.sizeFilled.value - - previousBaseAssetSizeFilled - - tradingEngineStage.stageBaseAsset.feesPaid.value = - tradingEngineStage.stageBaseAsset.feesPaid.value - - previousBaseAssetFeesPaid - - /* Stage Base Asset: Account the current filling and fees */ - tradingEngineStage.stageBaseAsset.sizeFilled.value = - tradingEngineStage.stageBaseAsset.sizeFilled.value + - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - tradingEngineStage.stageBaseAsset.feesPaid.value = - tradingEngineStage.stageBaseAsset.feesPaid.value + - tradingEngineOrder.orderBaseAsset.feesPaid.value - - /* Stage Quote Asset: Undo the previous accounting */ - tradingEngineStage.stageQuotedAsset.sizeFilled.value = - tradingEngineStage.stageQuotedAsset.sizeFilled.value - - previousQuotedAssetSizeFilled - - tradingEngineStage.stageQuotedAsset.feesPaid.value = - tradingEngineStage.stageQuotedAsset.feesPaid.value - - previousQuotedAssetFeesPaid - - /* Stage Quote Asset: Account the current filling and fees */ - tradingEngineStage.stageQuotedAsset.sizeFilled.value = - tradingEngineStage.stageQuotedAsset.sizeFilled.value + - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - - tradingEngineStage.stageQuotedAsset.feesPaid.value = - tradingEngineStage.stageQuotedAsset.feesPaid.value + - tradingEngineOrder.orderQuotedAsset.feesPaid.value - - tradingEngineStage.stageBaseAsset.sizeFilled.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizeFilled.value, 10) - tradingEngineStage.stageBaseAsset.feesPaid.value = global.PRECISE(tradingEngineStage.stageBaseAsset.feesPaid.value, 10) - - tradingEngineStage.stageQuotedAsset.sizeFilled.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizeFilled.value, 10) - tradingEngineStage.stageQuotedAsset.feesPaid.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.feesPaid.value, 10) - } - - async function updateBalances() { - /* Balances Update */ - switch (true) { - /* - For Sell orders, the fees are being paid in Quote Asset. - */ - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - - /* Balance Base Asset: Undo the previous accounting */ - tradingEngine.current.episode.episodeBaseAsset.balance.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value + - previousBaseAssetSizeFilled - - /* Balance Base Asset: Account the current filling and fees */ - tradingEngine.current.episode.episodeBaseAsset.balance.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value - - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - /* Balance Quoted Asset: Undo the previous accounting */ - tradingEngine.current.episode.episodeQuotedAsset.balance.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value - - previousQuotedAssetSizeFilled + - previousQuotedAssetFeesPaid - - /* Balance Quoted Asset: Account the current filling and fees */ - tradingEngine.current.episode.episodeQuotedAsset.balance.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value + - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - - tradingEngineOrder.orderQuotedAsset.feesPaid.value - break - } - /* - Let's remember that for Buy orders, the fees are paid in Base Asset. - */ - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - - /* Balance Base Asset: Undo the previous accounting */ - tradingEngine.current.episode.episodeBaseAsset.balance.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value - - previousBaseAssetSizeFilled + - previousBaseAssetFeesPaid - - /* Balance Base Asset: Account the current filling and fees */ - tradingEngine.current.episode.episodeBaseAsset.balance.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value + - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - tradingEngineOrder.orderBaseAsset.feesPaid.value - - /* Balance Quoted Asset: Undo the previous accounting */ - tradingEngine.current.episode.episodeQuotedAsset.balance.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value + - previousQuotedAssetSizeFilled - - /* Balance Quoted Asset: Account the current filling and fees */ - tradingEngine.current.episode.episodeQuotedAsset.balance.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value - - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - break - } - } - tradingEngine.current.episode.episodeBaseAsset.balance.value = global.PRECISE(tradingEngine.current.episode.episodeBaseAsset.balance.value, 10) - tradingEngine.current.episode.episodeQuotedAsset.balance.value = global.PRECISE(tradingEngine.current.episode.episodeQuotedAsset.balance.value, 10) - } - } - - function simulateCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, exitType) { - - /* Filter by Session Type */ - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - break - } - case 'Live Trading Session': { - return - } - case 'Fordward Testing Session': { - return - } - case 'Paper Trading Session': { - break - } - } - - /* Close this Order */ - tradingEngineOrder.status.value = 'Closed' - tradingEngineOrder.exitType.value = exitType - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'simulateCancelOrder -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - - recalculateStageSize(tradingEngineStage, tradingEngineOrder) - } - - async function exchangeCancelOrder(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, exitType) { - - /* Filter by Session Type */ - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - return - } - case 'Live Trading Session': { - break - } - case 'Fordward Testing Session': { - break - } - case 'Paper Trading Session': { - return - } - } - - /* Check if we can cancel the order at the Exchange. */ - let result = await exchangeAPIModule.cancelOrder(tradingSystemOrder, tradingEngineOrder) - if (result === true) { - - /* At this point we know which is the exit type for this order */ - tradingEngineOrder.exitType.value = exitType - - /* - Perhaps the order was filled a bit more between the last time we checked and when it was cancelled. - To sync our accounting, we need to check the order one last time and if it changed, fix it. - */ - - let order = await exchangeAPIModule.getOrder(tradingSystemOrder, tradingEngineOrder) - - if (order === undefined) { - tradingSystem.warnings.push( - [ - [tradingSystemOrder.id, tradingEngineOrder.id], - 'Could not verify the status of this order at the exchange, and syncronize the accounting.' - ] - ) - return false - } - - /* - Close this Order. Note that we are not closing the order until we have the exchange - response with the order details that we can use to syncronize with our accoounting. - Otherwise if the connection to the exchange fails, we would have a closed order not - accounted in any way. - */ - tradingEngineOrder.status.value = 'Closed' - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.closeOrder.value = 1 - - await updateEndsWithCycle(tradingEngineOrder) - tradingSystem.infos.push([tradingSystemOrder.id, 'exchangeCancelOrder -> Closing Order with Exit Type ' + tradingEngineOrder.exitType.value]) - - await syncWithExchange(tradingEngineStage, tradingSystemOrder, tradingEngineOrder, order) - - await recalculateStageSize(tradingEngineStage, tradingEngineOrder) - } - } - - async function recalculateStageSize(tradingEngineStage, tradingEngineOrder) { - /* - Since the order is Cancelled, we need to adjust the stage sizePlaced. Remember that the Stage - Size Placed accumulates for each asset, the order size placed at the exchange. A cancelation means that - only the part filled can be considered placed, so we need to substract from the stage size - the remainder. To achieve this with the information we currently have, we are going first - to unaccount the order actual size, and the account only the sizeFilled + the feesPaid. - */ - tradingEngineStage.stageBaseAsset.sizePlaced.value = - tradingEngineStage.stageBaseAsset.sizePlaced.value - - tradingEngineOrder.orderBaseAsset.actualSize.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value - - tradingEngineOrder.orderQuotedAsset.actualSize.value - - tradingEngineStage.stageBaseAsset.sizePlaced.value = - tradingEngineStage.stageBaseAsset.sizePlaced.value + - tradingEngineOrder.orderBaseAsset.sizeFilled.value - - tradingEngineStage.stageQuotedAsset.sizePlaced.value = - tradingEngineStage.stageQuotedAsset.sizePlaced.value + - tradingEngineOrder.orderQuotedAsset.sizeFilled.value - - tradingEngineStage.stageBaseAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageBaseAsset.sizePlaced.value, 10) - tradingEngineStage.stageQuotedAsset.sizePlaced.value = global.PRECISE(tradingEngineStage.stageQuotedAsset.sizePlaced.value, 10) - } - - async function applyFeePercentage(feesNodePropertyName, tradingEngineOrder, tradingSystemOrder, feePercentage, percentageFilled) { - /* - The exchange fees are taken from the Base Asset or the Quoted Asset depending if we - are buying or selling. - */ - let feesNode - - switch (true) { - case tradingSystemOrder.type === 'Market Buy Order' || tradingSystemOrder.type === 'Limit Buy Order': { - /* - In this case the fees are taken from the Base Asset you receive as a result of the trade at the exchange. - */ - feesNode = tradingEngineOrder.orderBaseAsset[feesNodePropertyName] - feesNode.value = - tradingEngineOrder.orderBaseAsset.actualSize.value * - feePercentage / 100 * - percentageFilled / 100 - break - } - case tradingSystemOrder.type === 'Market Sell Order' || tradingSystemOrder.type === 'Limit Sell Order': { - /* - In this case the fees are taken from the Quoted Asset you receive as a result of the trade at the exchange. - */ - feesNode = tradingEngineOrder.orderQuotedAsset[feesNodePropertyName] - feesNode.value = - tradingEngineOrder.orderQuotedAsset.actualSize.value * - feePercentage / 100 * - percentageFilled / 100 - break - } - } - - feesNode.value = global.PRECISE(feesNode.value, 10) - feesNode.value = global.PRECISE(feesNode.value, 10) - } - - async function checkOrderEvent(event, order, executionAlgorithm, executionNode) { - if (event !== undefined) { - for (let k = 0; k < event.situations.length; k++) { - let situation = event.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(event.id) - tradingSystem.highlights.push(order.id) - tradingSystem.highlights.push(executionAlgorithm.id) - tradingSystem.highlights.push(executionNode.id) - - announcementsModule.makeAnnoucements(event) - return situation.name // if the event is triggered, we return the name of the situation that passed - } - } - } - } - - function updateEnds(tradingEngineOrder) { - if (tradingEngineOrder.status.value === 'Open') { - tradingEngineOrder.end.value = tradingEngine.current.episode.candle.end.value - } - } - - async function updateEndsWithCycle(tradingEngineOrder) { - tradingEngineOrder.end.value = tradingEngine.current.episode.cycle.end.value - } - - function updateCounters(tradingEngineOrder) { - if (tradingEngineOrder.status.value === 'Open') { - tradingEngineOrder.orderCounters.periods.value++ - } - } - - function updateStatistics(tradingEngineOrder) { - tradingEngineOrder.orderStatistics.days.value = tradingEngineOrder.orderCounters.periods.value * sessionParameters.timeFrame.config.value / global.ONE_DAY_IN_MILISECONDS - tradingEngineOrder.orderStatistics.days.value = global.PRECISE(tradingEngineOrder.orderStatistics.days.value, 10) - } - - function resetTradingEngineDataStructure(tradingEngineOrder, tradingSystemOrder, stageStatus) { - if (tradingEngineOrder.status.value === 'Closed') { - /* We reset the order data structure inside the Trading Engine to its initial value */ - tradingEngineModule.initializeNode(tradingEngineOrder) - if (tradingSystemOrder.config.spawnMultipleOrders !== true) { - /* - We close the lock so as to prevent this data structure to be used again during this same stage execution. - */ - if (stageStatus === 'Open') { - tradingEngineOrder.lock.value = 'Closed' - } - } - } - } - - function badDefinitionUnhandledException(err, message, node) { - tradingSystem.errors.push([node.id, message]) - - logger.write(MODULE_NAME, "[ERROR] -> " + message); - logger.write(MODULE_NAME, "[ERROR] -> node.name = " + node.name); - logger.write(MODULE_NAME, "[ERROR] -> node.type = " + node.type); - logger.write(MODULE_NAME, "[ERROR] -> node.config = " + JSON.stringify(node.config)); - if (err !== undefined) { - logger.write(MODULE_NAME, "[ERROR] -> err.stack = " + err.stack); - } - throw 'Please fix the problem and try again.' - } -} - diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOutput.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOutput.js deleted file mode 100644 index 7cd76c81c..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingOutput.js +++ /dev/null @@ -1,233 +0,0 @@ -exports.newTradingOutput = function newTradingOutput(bot, logger, tradingEngineModule, UTILITIES, FILE_STORAGE) { - /* - This module will load if necesary all the data outputs so that they can be appended with new - records if needed. After running the simulation, it will save all the data outputs. - */ - const MODULE_NAME = 'Trading Output' - - let thisObject = { - initialize: initialize, - finalize: finalize, - start: start - } - - let utilities = UTILITIES.newCloudUtilities(logger) - let fileStorage = FILE_STORAGE.newFileStorage(logger) - - return thisObject - - function finalize() { - thisObject = undefined - utilities = undefined - fileStorage = undefined - commons = undefined - } - - function initialize() { - - } - - async function start(chart, timeFrame, timeFrameLabel, tradingProcessDate) { - try { - - if (timeFrame > global.dailyFilePeriods[0][0]) { - bot.processingDailyFiles = false - } else { - bot.processingDailyFiles = true - } - - /* Preparing everything for the Simulation */ - const TRADING_SIMULATION = require('./TradingSimulation.js') - let tradingSimulation = TRADING_SIMULATION.newTradingSimulation(bot, logger, tradingEngineModule, UTILITIES) - - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - let outputDatasetsMap = new Map() - - if (bot.processingDailyFiles === true) { - /* - For Daily Files, we are going to initialize the outputs at the first execution - if we are not resuming, but also at every following execution except when - we are at the head of the market, because at the head of the market we need to - append more data to the same output files that already exists. - */ - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - await initializeOutputs() - } else { - if (bot.simulationState.tradingEngine.current.episode.headOfTheMarket.value === true) { - await readFiles() - } else { - await initializeOutputs() - } - } - } else { - /* - Form Market Files, we are only going to initialize the outputs at the first run - and if we are not resuming execution. Subsequent runs means that we are at the - head of the market. Remember that backtests finishes the session once the reach - the final datetime. - */ - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - await initializeOutputs() - } else { - await readFiles() - } - } - - await tradingSimulation.runSimulation( - chart, - outputDatasetsMap, - writeFiles - ) - - tradingSimulation.finalize() - return - - async function initializeOutputs() { - if (bot.processingDailyFiles) { - await initializeDailyFiles() - } else { - await initializeMarketFiles() - } - } - - async function initializeDailyFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Daily Files') { - outputDatasetsMap.set(dataset.parentNode.config.codeName, []) - } - } - } - - async function initializeMarketFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Market Files') { - outputDatasetsMap.set(dataset.parentNode.config.codeName, []) - } - } - } - - async function readFiles() { - /* - This bot have an output of files that it generates. At every call to the bot, it needs to read the previously generated - files in order to later append more information after the execution is over. Here in this function we are going to - read those output files and get them ready for appending content during the simulation. - */ - if (bot.processingDailyFiles) { - await readDailyFiles() - } else { - await readMarketFiles() - } - } - - async function readMarketFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Market Files') { - - let fileName = 'Data.json' - let filePath = bot.filePathRoot + '/Output/' + bot.TRADING_SESSION.folderName + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel - - await readOutputFile(fileName, filePath, dataset.parentNode.config.codeName) - } - } - } - - async function readDailyFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Daily Files') { - - let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + utilities.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(tradingProcessDate.getUTCDate(), 2); - let fileName = 'Data.json' - let filePath = bot.filePathRoot + '/Output/' + bot.TRADING_SESSION.folderName + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel + "/" + dateForPath - - await readOutputFile(fileName, filePath, dataset.parentNode.config.codeName) - } - } - } - - async function readOutputFile(fileName, filePath, productName) { - filePath += '/' + fileName - - let response = await fileStorage.asyncGetTextFile(filePath, true) - - if (response.err.message === 'File does not exist.') { - outputDatasetsMap.set(productName, []) - return - } - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw(response.err) - } - outputDatasetsMap.set(productName, JSON.parse(response.text)) - } - - async function writeFiles() { - /* - The output of files which were appended with information during the simulation execution, now needs to be saved. - */ - if (bot.processingDailyFiles) { - await writeDailyFiles() - } else { - await writeMarketFiles() - } - } - - async function writeMarketFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Market Files') { - - let fileName = 'Data.json' - let filePath = bot.filePathRoot + '/Output/' + bot.TRADING_SESSION.folderName + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel - - await writeOutputFile(fileName, filePath, dataset.parentNode.config.codeName) - } - } - } - - async function writeDailyFiles() { - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - - if (dataset.config.type === 'Daily Files') { - - let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + utilities.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(tradingProcessDate.getUTCDate(), 2); - let fileName = 'Data.json' - let filePath = bot.filePathRoot + '/Output/' + bot.TRADING_SESSION.folderName + '/' + dataset.parentNode.config.codeName + '/' + dataset.config.codeName + '/' + timeFrameLabel + "/" + dateForPath - - await writeOutputFile(fileName, filePath, dataset.parentNode.config.codeName) - } - } - } - - async function writeOutputFile(fileName, filePath, productName) { - filePath += '/' + fileName - let fileContent = JSON.stringify(outputDatasetsMap.get(productName)) - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent) - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw(response.err) - } - } - - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] start -> err = ' + err.stack) - throw(global.DEFAULT_FAIL_RESPONSE) - } - } -} - diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingPosition.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingPosition.js deleted file mode 100644 index 8c606d203..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingPosition.js +++ /dev/null @@ -1,432 +0,0 @@ -exports.newTradingPosition = function newTradingPosition(bot, logger, tradingEngineModule) { - /* - This module packages all functions related to Positions. - */ - const MODULE_NAME = 'Trading Position' - let thisObject = { - mantain: mantain, - reset: reset, - cycleBasedStatistics: cycleBasedStatistics, - openPosition: openPosition, - closingPosition: closingPosition, - closePosition: closePosition, - applyStopLossFormula: applyStopLossFormula, - applyTakeProfitFormula: applyTakeProfitFormula, - updateStopLoss: updateStopLoss, - updateTakeProfit: updateTakeProfit, - initialTargets: initialTargets, - updateEnds: updateEnds, - resetTradingEngineDataStructure: resetTradingEngineDataStructure, - updateCounters: updateCounters, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - } - - function finalize() { - tradingEngine = undefined - tradingSystem = undefined - sessionParameters = undefined - } - - function mantain() { - updateCounters() - updateEnds() - } - - function reset() { - resetTradingEngineDataStructure() - } - - function openPosition(situationName) { - - /* Starting begin and end */ - tradingEngine.current.position.begin.value = tradingEngine.current.episode.cycle.lastBegin.value - tradingEngine.current.position.end.value = tradingEngine.current.episode.cycle.lastEnd.value - - /* Recording the opening at the Trading Engine Data Structure */ - tradingEngine.current.position.status.value = 'Open' - tradingEngine.current.position.serialNumber.value = tradingEngine.current.episode.episodeCounters.positions.value + 1 - tradingEngine.current.position.identifier.value = global.UNIQUE_ID() - tradingEngine.current.position.beginRate.value = tradingEngine.current.episode.candle.close.value - tradingEngine.current.position.positionBaseAsset.beginBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.position.positionQuotedAsset.beginBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - tradingEngine.current.position.situationName.value = situationName - - /* Initializing Stop and Take Phase */ - tradingEngine.current.position.stopLoss.stopLossPhase.value = 1 - tradingEngine.current.position.takeProfit.takeProfitPhase.value = 1 - - /* Updating Episode Counters */ - tradingEngine.current.episode.episodeCounters.positions.value++ - - /* Inicializing this counter */ - tradingEngine.current.episode.distanceToEvent.takePosition.value = 1 - - /* Remember the balance we had before taking the position to later calculate profit or loss */ - tradingEngine.current.position.positionBaseAsset.beginBalance = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.position.positionQuotedAsset.beginBalance = tradingEngine.current.episode.episodeQuotedAsset.balance.value - } - - function closingPosition(exitType) { - tradingEngine.current.position.status.value = 'Closing' - tradingEngine.current.position.exitType.value = exitType - - /* - By the time we figured out that the stop loss or take profit were hit, or - for whatever reason the position needs to be closed, the take profit and - stop loss values for the next candle have already been calculated. In order - to avoid being plotted, we will put them in zero. - */ - tradingEngine.current.position.stopLoss.value = 0 - tradingEngine.current.position.takeProfit.value = 0 - } - - function closePosition() { - tradingEngine.current.position.status.value = 'Closed' - tradingEngine.current.position.end.value = tradingEngine.current.episode.cycle.lastEnd.value - tradingEngine.current.position.endRate.value = tradingEngine.current.episode.candle.close.value - tradingEngine.current.position.positionBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.position.positionQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - - /* - Now that the position is closed, it is the right time to move this position from current to last at the Trading Engine data structure. - */ - tradingEngineModule.cloneValues(tradingEngine.current.position, tradingEngine.last.position) - - cycleBasedStatistics() - - /* Updating Hits & Fails */ - if (tradingEngine.current.position.positionBaseAsset.profitLoss.value > 0) { - tradingEngine.current.episode.episodeBaseAsset.hits.value++ - } - if (tradingEngine.current.position.positionBaseAsset.profitLoss.value < 0) { - tradingEngine.current.episode.episodeBaseAsset.fails.value++ - } - if (tradingEngine.current.position.positionQuotedAsset.profitLoss.value > 0) { - tradingEngine.current.episode.episodeQuotedAsset.hits.value++ - } - if (tradingEngine.current.position.positionQuotedAsset.profitLoss.value < 0) { - tradingEngine.current.episode.episodeQuotedAsset.fails.value++ - } - } - - function applyStopLossFormula(formulas, formulaId) { - updateStopLossTakeProfitFinalValue(tradingEngine.current.position.stopLoss) - tradingEngine.current.position.stopLoss.value = formulas.get(formulaId) - updateStopLossTakeProfitInitialValue(tradingEngine.current.position.stopLoss) - updateStopLossTakeProfitBeginEnd(tradingEngine.current.position.stopLoss) - } - - function applyTakeProfitFormula(formulas, formulaId) { - updateStopLossTakeProfitFinalValue(tradingEngine.current.position.takeProfit) - tradingEngine.current.position.takeProfit.value = formulas.get(formulaId) - updateStopLossTakeProfitInitialValue(tradingEngine.current.position.takeProfit) - updateStopLossTakeProfitBeginEnd(tradingEngine.current.position.takeProfit) - } - - function updateStopLossTakeProfitInitialValue(node) { - /* - We store the first Stop Loss or Take Profit value in a separate node. - To know if it is the first one we compare its current value to the initial value. - */ - if (node.initialValue.value === node.initialValue.config.initialValue) { - node.initialValue.value = node.value - } - } - - function updateStopLossTakeProfitFinalValue(node) { - /* - We set the final value just before calcualting the new value, since the new calculated - value is going to be discarded if the position is closed after it is calculated, but - during the same candle. - */ - node.finalValue.value = node.value - } - - function updateStopLossTakeProfitBeginEnd(node) { - /* - Both the Stop Loss and the Take Profit have their own Begin and End. - Ther reason for this is because they represent targets to be checked - at the next candle, so it does not apply that they share the begin and - end of the position itself. - */ - node.begin.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value - node.end.value = - tradingEngine.current.episode.candle.end.value + - sessionParameters.timeFrame.config.value - } - - function updateStopLoss(phase) { - tradingEngine.current.position.stopLoss.stopLossPhase.value = phase - } - - function updateTakeProfit(phase) { - tradingEngine.current.position.takeProfit.takeProfitPhase.value = phase - } - - function initialTargets(tradingSystemStageNode, tradingEngineStageNode) { - - if (tradingSystemStageNode.initialTargets === undefined) { - const message = 'Stage without Initial Targets node. Add one please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode) - } - - setTargetRate() - setTargetSize() - - function setTargetRate() { - if (tradingSystemStageNode.initialTargets.targetRate === undefined) { - const message = 'Target Rate Node not Found. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets) - } - if (tradingSystemStageNode.initialTargets.targetRate.formula === undefined) { - const message = 'Formula of Target Rate Node not Found. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetRate) - } - - let value = tradingSystem.formulas.get(tradingSystemStageNode.initialTargets.targetRate.formula.id) - if (value === undefined) { - const message = 'Target Rate can not be undefined. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetRate.formula) - } - if (isNaN(value)) { - const message = 'Target Rate must be a number. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetRate.formula) - } - - switch (tradingSystemStageNode.type) { - case 'Open Stage': { - tradingEngine.current.position.entryTargetRate.value = global.PRECISE(value, 10) - break - } - case 'Close Stage': { - tradingEngine.current.position.exitTargetRate.value = global.PRECISE(value, 10) - break - } - } - } - - function setTargetSize() { - /* Basic Validation */ - if ( - tradingSystemStageNode.initialTargets.targetSizeInBaseAsset !== undefined && - tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset !== undefined - ) { - const message = 'Only Target Size In Base Asset or Target Size In Quoted Asset is allowed. Remove one of them please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode) - } - - /* Position In Base Asset */ - if (tradingSystemStageNode.initialTargets.targetSizeInBaseAsset !== undefined) { - if (tradingSystemStageNode.initialTargets.targetSizeInBaseAsset.formula !== undefined) { - let value = tradingSystem.formulas.get(tradingSystemStageNode.initialTargets.targetSizeInBaseAsset.formula.id) - if (value === undefined) { - const message = 'Target Size In Base Asset cannot be undefined. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInBaseAsset.formula) - } - if (value === 0) { - const message = 'Target Size In Base Asset cannot be zero. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInBaseAsset.formula) - } - - switch (tradingSystemStageNode.type) { - case 'Open Stage': { - tradingEngine.current.position.positionBaseAsset.entryTargetSize.value = global.PRECISE(value, 10) - tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value = - global.PRECISE(value * tradingEngine.current.position.entryTargetRate.value, 10) - break - } - case 'Close Stage': { - tradingEngine.current.position.positionBaseAsset.exitTargetSize.value = global.PRECISE(value, 10) - tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value = - global.PRECISE(value * tradingEngine.current.position.exitTargetRate.value, 10) - break - } - } - - /* Remember how the end user defined this stage. */ - tradingEngineStageNode.stageDefinedIn.value = 'Base Asset' - } else { - const message = 'You need to specify a Formula for this.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInBaseAsset) - } - } - - /* Position In Quoted Asset */ - if (tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset !== undefined) { - if (tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset.formula !== undefined) { - let value = tradingSystem.formulas.get(tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset.formula.id) - if (value === undefined) { - const message = 'Target Size In Quoted Asset cannot be undefined. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset.formula) - } - if (value === 0) { - const message = 'Target Size In Quoted Asset cannot be zero. Fix this please.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset.formula) - } - switch (tradingSystemStageNode.type) { - case 'Open Stage': { - tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value = global.PRECISE(value, 10) - tradingEngine.current.position.positionBaseAsset.entryTargetSize.value = - global.PRECISE(value / tradingEngine.current.position.entryTargetRate.value, 10) - break - } - case 'Close Stage': { - tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value = global.PRECISE(value, 10) - tradingEngine.current.position.positionBaseAsset.exitTargetSize.value = - global.PRECISE(value / tradingEngine.current.position.exitTargetRate.value, 10) - break - } - } - - /* Remember how the end user defined this stage. */ - tradingEngineStageNode.stageDefinedIn.value = 'Quoted Asset' - } else { - const message = 'You need to specify a Formula for this.' - badDefinitionUnhandledException(undefined, message, tradingSystemStageNode.initialTargets.targetSizeInQuotedAsset) - } - } - } - } - - function updateEnds() { - if (tradingEngine.current.position.status.value === 'Open') { - tradingEngine.current.position.end.value = tradingEngine.current.position.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.position.endRate.value = tradingEngine.current.episode.candle.close.value - tradingEngine.current.position.positionBaseAsset.endBalance.value = tradingEngine.current.episode.episodeBaseAsset.balance.value - tradingEngine.current.position.positionQuotedAsset.endBalance.value = tradingEngine.current.episode.episodeQuotedAsset.balance.value - } - } - - function resetTradingEngineDataStructure() { - if (tradingEngine.current.position.status.value === 'Closed') { - tradingEngineModule.initializeNode(tradingEngine.current.position) - } - } - - function updateCounters() { - if (tradingEngine.current.position.status.value === 'Open') { - tradingEngine.current.position.positionCounters.periods.value++ - } - } - - function cycleBasedStatistics() { - - calculateAssetsStatistics() - calculatePositionStatistics() - - function calculateAssetsStatistics() { - /* Profit Loss Calculation */ - tradingEngine.current.position.positionBaseAsset.profitLoss.value = - tradingEngine.current.episode.episodeBaseAsset.balance.value - - tradingEngine.current.position.positionBaseAsset.beginBalance - - tradingEngine.current.position.positionQuotedAsset.profitLoss.value = - tradingEngine.current.episode.episodeQuotedAsset.balance.value - - tradingEngine.current.position.positionQuotedAsset.beginBalance - - tradingEngine.current.position.positionBaseAsset.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionBaseAsset.profitLoss.value, 10) - tradingEngine.current.position.positionQuotedAsset.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionQuotedAsset.profitLoss.value, 10) - - /* ROI Calculation */ - tradingEngine.current.position.positionBaseAsset.ROI.value = - tradingEngine.current.position.positionBaseAsset.profitLoss.value * 100 / - tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value - - tradingEngine.current.position.positionQuotedAsset.ROI.value = - tradingEngine.current.position.positionQuotedAsset.profitLoss.value * 100 / - tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value - - tradingEngine.current.position.positionBaseAsset.ROI.value = global.PRECISE(tradingEngine.current.position.positionBaseAsset.ROI.value, 10) - tradingEngine.current.position.positionQuotedAsset.ROI.value = global.PRECISE(tradingEngine.current.position.positionQuotedAsset.ROI.value, 10) - - /* Hit Fail Calculation */ - if (tradingEngine.current.position.positionBaseAsset.ROI.value > 0) { - tradingEngine.current.position.positionBaseAsset.hitFail.value = 'Hit' - } - if (tradingEngine.current.position.positionBaseAsset.ROI.value < 0) { - tradingEngine.current.position.positionBaseAsset.hitFail.value = 'Fail' - } - if (tradingEngine.current.position.positionBaseAsset.ROI.value === 0) { - tradingEngine.current.position.positionBaseAsset.hitFail.value = 'Even' - } - if (tradingEngine.current.position.positionQuotedAsset.ROI.value > 0) { - tradingEngine.current.position.positionQuotedAsset.hitFail.value = 'Hit' - } - if (tradingEngine.current.position.positionQuotedAsset.ROI.value < 0) { - tradingEngine.current.position.positionQuotedAsset.hitFail.value = 'Fail' - } - if (tradingEngine.current.position.positionQuotedAsset.ROI.value === 0) { - tradingEngine.current.position.positionQuotedAsset.hitFail.value = 'Even' - } - } - - function calculatePositionStatistics() { - /* Profit Loss Calculation */ - tradingEngine.current.position.positionStatistics.profitLoss.value = - ( - tradingEngine.current.episode.episodeBaseAsset.profitLoss.value * tradingEngine.current.position.endRate.value + - tradingEngine.current.episode.episodeQuotedAsset.profitLoss.value - ) - - tradingEngine.current.position.positionStatistics.profitLoss.value = global.PRECISE(tradingEngine.current.position.positionStatistics.profitLoss.value, 10) - - /* ROI Calculation */ - tradingEngine.current.position.positionStatistics.ROI.value = - ( - tradingEngine.current.position.positionStatistics.profitLoss.value - ) - * 100 / - ( - tradingEngine.current.position.positionBaseAsset.beginBalance * tradingEngine.current.position.beginRate.value + - tradingEngine.current.position.positionQuotedAsset.beginBalance - ) - tradingEngine.current.position.positionStatistics.ROI.value = global.PRECISE(tradingEngine.current.position.positionStatistics.ROI.value, 10) - - /* Hit Fail Calculation */ - if (tradingEngine.current.position.positionStatistics.ROI.value > 0) { - tradingEngine.current.position.positionStatistics.hitFail.value = 'Hit' - } - if (tradingEngine.current.position.positionStatistics.ROI.value < 0) { - tradingEngine.current.position.positionStatistics.hitFail.value = 'Fail' - } - if (tradingEngine.current.position.positionStatistics.ROI.value === 0) { - tradingEngine.current.position.positionStatistics.hitFail.value = 'Even' - } - - /* Days Calculation */ - tradingEngine.current.position.positionStatistics.days.value = - tradingEngine.current.position.positionCounters.periods.value * - sessionParameters.timeFrame.config.value / global.ONE_DAY_IN_MILISECONDS - - tradingEngine.current.position.positionStatistics.days.value = global.PRECISE(tradingEngine.current.position.positionStatistics.days.value, 10) - } - } - - function badDefinitionUnhandledException(err, message, node) { - tradingSystem.errors.push([node.id, message]) - - logger.write(MODULE_NAME, "[ERROR] -> " + message); - logger.write(MODULE_NAME, "[ERROR] -> node.name = " + node.name); - logger.write(MODULE_NAME, "[ERROR] -> node.type = " + node.type); - logger.write(MODULE_NAME, "[ERROR] -> node.config = " + JSON.stringify(node.config)); - if (err !== undefined) { - logger.write(MODULE_NAME, "[ERROR] -> err.stack = " + err.stack); - } - throw 'Please fix the problem and try again.' - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingProcess.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingProcess.js deleted file mode 100644 index 1032c04ea..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingProcess.js +++ /dev/null @@ -1,786 +0,0 @@ -exports.newTradingProcess = function newTradingProcess(bot, logger, UTILITIES) { - /* - This Module will load all the process data dependencies from files and send them downstream. - After execution, will save the time range and status report of the process. - */ - const FULL_LOG = true; - const MODULE_NAME = "Trading Process"; - const GMT_SECONDS = ':00.000 GMT+0000'; - - thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(logger); - - let statusDependencies; - let dataDependenciesModule; - let dataFiles = new Map(); - let multiPeriodDataFiles = new Map(); - - const FILE_STORAGE = require('../FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - const TRADING_ENGINE_MODULE = require('./TradingEngine.js') - let tradingEngineModule = TRADING_ENGINE_MODULE.newTradingEngine(bot, logger) - - let TRADING_OUTPUT_MODULE = require("./TradingOutput") - let tradingOutputModule = TRADING_OUTPUT_MODULE.newTradingOutput(bot, logger, tradingEngineModule, UTILITIES, FILE_STORAGE) - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, pStatusDependencies, pDataDependencies, callBackFunction) { - try { - logger.fileName = MODULE_NAME - logger.initialize() - - statusDependencies = pStatusDependencies - dataDependenciesModule = pDataDependencies - processConfig = pProcessConfig - - tradingOutputModule.initialize() - - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - - tradingEngineModule.finalize() - tradingEngineModule = undefined - - tradingOutputModule.finalize() - tradingOutputModule = undefined - - dataFiles = undefined - multiPeriodDataFiles = undefined - statusDependencies = undefined - dataDependenciesModule = undefined - fileStorage = undefined - processConfig = undefined - thisObject = undefined - } - - async function start(callBackFunction) { - try { - let currentTimeFrame - let currentTimeFrameLabel - - /* Context Variables */ - let contextVariables = { - lastFile: undefined, // Datetime of the last file files sucessfully produced by this process. - dateBeginOfMarket: undefined, // Datetime of the first trade file in the whole market history. - dateEndOfMarket: undefined // Datetime of the last file available to be used as an input of this process. - }; - - getContextVariables() - - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - /* - Here is where the Trading Engine and Trading Systems received are moved to the simulation state. - */ - bot.simulationState.tradingEngine = bot.TRADING_ENGINE - bot.simulationState.tradingSystem = bot.TRADING_SYSTEM - } - - /* We set up the Trading Engine Module. */ - tradingEngineModule.initialize() - - /* Initializing the Trading Process Date */ - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - /* - This funcion is going to be called many times by the Trading Bot Loop. - Only during the first execution and when the User is not resuming the execution - of a stopped session / task; we are going to initialize the Process Date Time. - This variable tell us which day we are standing at, specially while working - with Daily Files. From this Date is that we are going to load the Daily Files. - */ - bot.simulationState.tradingEngine.current.episode.processDate.value = global.REMOVE_TIME(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime).valueOf() - } - - /* - This is the Date that is going to be used across the execution of this Trading Process. - We need this because it has a different life cycle than the processData stored at the - Trading Engine data structure. This date has to remain the same during the whole execution - of the Trading Process until the end, inclusind the writting of Data Ranges and Status Reports. - The processDate of the Trading Engine data structure on the other hand can be changed during - the simulation loop, once we discover that all candles from a certain date have benn processed. - Here is the point where we sync one and the other. - */ - let tradingProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) - await processSingleFiles() - - if (await processMarketFiles() === false) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be run') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - This is the Data Structure used at the Simulation with all indicator data. - We start creating it right here. - */ - let chart = {} - /* - Here we check if we need to get Daily Files or not. As an optimization, when - we are running on a Time Frame of 1hs or above, we are not going to load - dependencies on Daily Files. The way we recognize that is by checking if - we alreaady set a value to currentTimeFrame. We are also not going to loop - through days if we are processing market files. - */ - if (currentTimeFrame) { - /* We are processing Market Files */ - /* - With all the indicators data files loaded, we will build the chart object - data structure that will be used in user-defied conditions and formulas. - */ - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waking up') - buildCharts(chart) - - if (checkThereAreCandles(chart) === true) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Running') - await generateOutput(chart) - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Saving') - await writeProcessFiles() - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Sleeping') - } else { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be up to date. No candles found at.') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - } else { - /* We are processing Daily Files */ - do { - global.EMIT_SESSION_STATUS(bot.TRADING_SESSION_STATUS, bot.TRADING_SESSIONKey) - /* - We update the Trading Process Date with the date calculated at the simulation. - We will use this date to load indicator and output files. After that we will - use it to save Output Files and later the Data Ranges. This is the point where - the date calculated by the Simulation is applied at the Trading Process Level. - */ - tradingProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) - - if (checkStopTaskGracefully() === false) { break } - if (checkStopProcessing() === false) { break } - - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waking up') - if (await processDailyFiles() === false) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be run') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - With all the indicators data files loaded, we will build the chart object - data structure that will be used in user-defied conditions and formulas. - */ - buildCharts(chart) - /* - The process of generating the output includes the trading simulation. - */ - if (checkThereAreCandles(chart) === true) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Running') - await generateOutput(chart) - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Saving') - await writeProcessFiles() - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Sleeping') - } else { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be up to date') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - If for any reason the session was stopped, we will break this loop and exit the process. - */ - if (bot.STOP_SESSION === true) { break } - /* - When we get to the end of the market, we need to break this process loop in order - to let time pass, new information be collected from the exchange, new data built - into indicators, and eventually a new execution of this process. - */ - if (checkStopHeadOfTheMarket() === false) { break } - - } - while (true) - } - - checkIfSessionMustStop() - /* - Everything worked as expected. We return an OK code and wait for - the Bot Loop to call us again later. - */ - callBackFunction(global.DEFAULT_OK_RESPONSE) - - function checkThereAreCandles(chart) { - let sessionParameters = bot.TRADING_SESSION.tradingParameters - let propertyName = 'at' + sessionParameters.timeFrame.config.label.replace('-', '') - let candles = chart[propertyName].candles - - if (candles.length === 0) { - return false - } else { - return true - } - } - - function getContextVariables() { - try { - let thisReport; - let statusReport; - - /* We are going to use the start date as beging of market date. */ - contextVariables.dateBeginOfMarket = global.REMOVE_TIME(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime) - /* - Here we get the status report from the bot who knows which is the end of the market. - */ - statusReport = statusDependencies.reportsByMainUtility.get("Market Ending Point") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - thisReport = statusReport.file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> thisReport = " + JSON.stringify(thisReport)); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return - } - - contextVariables.dateEndOfMarket = new Date(thisReport.lastFile.valueOf()); - - /* Finally we get our own Status Report. */ - statusReport = statusDependencies.reportsByMainUtility.get("Self Reference") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - thisReport = statusReport.file; - bot.simulationState = thisReport.simulationState; - if (bot.simulationState === undefined) { bot.simulationState = {} } // This should happen only when there is no status report - - if (thisReport.lastFile !== undefined) { - if (bot.RESUME !== true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining because bot has just started and resume execution was true."); } - startFromBegining(); - return - } - contextVariables.lastFile = new Date(thisReport.lastFile); - return - - } else { - /* - We are here becuse either: - 1. There is no status report - 2. There is no Last File (this happens on Market Files) - */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining of the market because own status report not found or lastFile was undefined."); } - startFromBegining(); - return - } - - function startFromBegining() { - contextVariables.lastFile = new Date(contextVariables.dateBeginOfMarket.getUTCFullYear() + "-" + (contextVariables.dateBeginOfMarket.getUTCMonth() + 1) + "-" + contextVariables.dateBeginOfMarket.getUTCDate() + " " + "00:00" + GMT_SECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> startFromBegining -> contextVariables.lastFile = " + contextVariables.lastFile); } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - async function processSingleFiles() { - dataFiles = new Map(); - - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (datasetModule.node.config.codeName !== "Single-File") { - continue - } - - if (dataDependenciesModule.isItADepenency('atAnyTimeFrame', datasetModule.node.parentNode.config.singularVariableName) !== true) { - continue - } - - let fileName = "Data.json"; - let filePath = datasetModule.node.parentNode.config.codeName + '/' + datasetModule.node.config.codeName; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - dataFiles.set(dependency.id, dataFile); - } - - let mapKey = "Single Files" - multiPeriodDataFiles.set(mapKey, dataFiles) - } - - async function processMarketFiles() { - /* - We do market files first since if the simulation is run on daily files, there will - be a loop to get each of those files and we do not need that loop to reload market files. - - We will iterate through all posible timeFrames. - */ - for (let n = 0; n < global.marketFilesPeriods.length; n++) { - const timeFrame = global.marketFilesPeriods[n][0]; - const timeFrameLabel = global.marketFilesPeriods[n][1]; - - dataFiles = new Map(); - - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel) { - currentTimeFrame = global.marketFilesPeriods[n][0]; - currentTimeFrameLabel = global.marketFilesPeriods[n][1]; - } - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (dependency.referenceParent.config.codeName !== "Multi-Period-Market") { - continue - } - - if (dataDependenciesModule.isItADepenency(timeFrameLabel, datasetModule.node.parentNode.config.singularVariableName) !== true) { - if (!(bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel && datasetModule.node.parentNode.config.pluralVariableName === 'candles')) { - continue - } - } - - let fileName = "Data.json"; - let filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.message === 'File does not exist.') { - return false - } - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - let trimmedDataFile = trimDataFile(dataFile, datasetModule.node.parentNode.record) - dataFiles.set(dependency.id, trimmedDataFile); - - function trimDataFile(dataFile, recordDefinition) { - /* - Here we will discard all the records in a file that are outside of the current time range. - We will include the las element previous to the begining of the time range. This is needed - because during the simulation, the current period is not the open one, but the previous to - the open, and if we do not include the previous to the initial datetime there will be no - current objects at the begining of the simulation for many time frames. - */ - let beginIndex - let endIndex - let result = [] - for (let i = 0; i < recordDefinition.properties.length; i++) { - let property = recordDefinition.properties[i] - if (property.config.codeName === 'begin') { - beginIndex = i - } - if (property.config.codeName === 'end') { - endIndex = i - } - } - for (let i = 0; i < dataFile.length; i++) { - let dataRecord = dataFile[i] - let begin = dataRecord[beginIndex] - let end = dataRecord[endIndex] - if (end + timeFrame < bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime - 1) { continue } // /1 because we need the previous closed element - if (begin > bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime) { continue } - result.push(dataRecord) - } - return result - } - } - - let mapKey = global.marketFilesPeriods[n][1]; - multiPeriodDataFiles.set(mapKey, dataFiles) - } - return true - } - - async function processDailyFiles() { - /* Telling the world we are alive and doing well and which date we are processing right now. */ - let processingDateString = tradingProcessDate.getUTCFullYear() + '-' + utilities.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(tradingProcessDate.getUTCDate(), 2); - bot.processHeartBeat(processingDateString, undefined, "Running...") - - /* - We will iterate through all posible timeFrames. - */ - for (let n = 0; n < global.dailyFilePeriods.length; n++) { - const timeFrame = global.dailyFilePeriods[n][0]; - const timeFrameLabel = global.dailyFilePeriods[n][1]; - - if (processConfig.framework.validtimeFrames !== undefined) { - let validPeriod = false; - for (let i = 0; i < processConfig.framework.validtimeFrames.length; i++) { - let period = processConfig.framework.validtimeFrames[i]; - if (period === timeFrameLabel) { validPeriod = true } - } - if (validPeriod === false) { - continue - } - } - - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel) { - currentTimeFrame = global.dailyFilePeriods[n][0]; - currentTimeFrameLabel = global.dailyFilePeriods[n][1]; - } - - dataFiles = new Map(); - - /* - We will iterate through all dependencies, in order to load the - files that later will end up at the chart data structure. - */ - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (dependency.referenceParent.config.codeName !== "Multi-Period-Daily") { - continue - } - - if (dataDependenciesModule.isItADepenency(timeFrameLabel, datasetModule.node.parentNode.config.singularVariableName) !== true) { - if (!(bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel && datasetModule.node.parentNode.config.pluralVariableName === 'candles')) { - continue - } - } - - let dateForPath = tradingProcessDate.getUTCFullYear() + '/' + utilities.pad(tradingProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(tradingProcessDate.getUTCDate(), 2); - let filePath - if (dependency.referenceParent.config.codeName === "Multi-Period-Daily") { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath; - } else { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + dateForPath; - } - let fileName = "Data.json"; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.message === 'File does not exist.') { - return false - } - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - dataFiles.set(dependency.id, dataFile); - } - - let mapKey = global.dailyFilePeriods[n][1]; - multiPeriodDataFiles.set(mapKey, dataFiles) - } - return true - } - - function checkStopHeadOfTheMarket() { - /* - We need to check if we have reached the head of the market in order to know - when to break the Daily Files Process loop and give time for a new candles / - indicators to be built and continue the processing once this process is called - again. - */ - if (bot.simulationState.tradingEngine.current.episode.headOfTheMarket.value === true) { - return false - } - } - - function checkStopTaskGracefully() { - /* Validation that we dont need to stop. */ - if (global.STOP_TASK_GRACEFULLY === true) { - return false - } - } - - function checkStopProcessing() { - /* Validation that we dont need to stop. */ - if (bot.STOP_SESSION === true) { - return false - } - } - - function buildCharts(chart) { - const COMMONS = require('../Commons.js') - let commons = COMMONS.newCommons(bot, logger, UTILITIES, FILE_STORAGE) - - let mainDependency = {} - - /* The first phase here is about checking that we have everything we need at the definition level. */ - let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency') - /* - We will filter ourt declared dependencies that are not present in the workspace. - This will allow the user to have less Data Mines loaded at the workspace - that the ones that a Trading Mine depends on. - */ - dataDependencies = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(dataDependencies) - - if (commons.validateDataDependencies(dataDependencies, callBackFunction) !== true) { return } - - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - if (commons.validateOutputDatasets(outputDatasets, callBackFunction) !== true) { return } - - /* The second phase is about transforming the inputs into a format that can be used to apply the user defined code. */ - for (let j = 0; j < global.marketFilesPeriods.length; j++) { - let timeFrameLabel = marketFilesPeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(timeFrameLabel) - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'at' + timeFrameLabel.replace('-', '') - chart[propertyName] = products - } - } - - for (let j = 0; j < global.dailyFilePeriods.length; j++) { - let timeFrameLabel = global.dailyFilePeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(timeFrameLabel) - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'at' + timeFrameLabel.replace('-', '') - chart[propertyName] = products - } - } - - /* Single Files */ - let dataFiles = multiPeriodDataFiles.get('Single Files') - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'atAnyTimeFrame' - chart[propertyName] = products - } - } - - async function generateOutput(chart) { - await tradingOutputModule.start( - chart, - currentTimeFrame, - currentTimeFrameLabel, - tradingProcessDate - ) - - /* - From here on, all other loops executions wont be the first execution and also - we will consider that it is not resuming a previous execution as well. - */ - bot.FIRST_EXECUTION = false - bot.RESUME = false - } - - async function writeProcessFiles() { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - - await writeTimeFramesFiles(currentTimeFrame, currentTimeFrameLabel) - await writeDataRanges() - - if (currentTimeFrame > global.dailyFilePeriods[0][0]) { - await writeMarketStatusReport(currentTimeFrameLabel) - } else { - await writeDailyStatusReport(currentTimeFrameLabel) - } - - async function writeDataRanges() { - for ( - let outputDatasetIndex = 0; - outputDatasetIndex < outputDatasets.length; - outputDatasetIndex++ - ) { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - await writeDataRange(productCodeName); - } - - async function writeDataRange(productCodeName) { - let dataRange = { - begin: contextVariables.dateBeginOfMarket.valueOf(), - end: tradingProcessDate.valueOf() + global.ONE_DAY_IN_MILISECONDS - } - - let fileContent = JSON.stringify(dataRange); - let fileName = '/Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + bot.TRADING_SESSION.folderName + "/" + productCodeName + "/" + 'Multi-Period-Daily' + fileName; - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent + '\n') - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - /* - Raise the event that the Data Range was Updated. - */ - let key = bot.dataMine + "-" + bot.codeName + "-" + productCodeName + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - dateRange: dataRange - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Data Range Updated', event) - } - } - - async function writeTimeFramesFiles(currentTimeFrame, currentTimeFrameLabel) { - - for ( - let outputDatasetIndex = 0; - outputDatasetIndex < outputDatasets.length; - outputDatasetIndex++ - ) { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - await writeTimeFramesFile(currentTimeFrameLabel, productCodeName, 'Multi-Period-Daily') - await writeTimeFramesFile(currentTimeFrameLabel, productCodeName, 'Multi-Period-Market') - - async function writeTimeFramesFile(currentTimeFrameLabel, productCodeName, processType) { - - let timeFramesArray = [] - timeFramesArray.push(currentTimeFrameLabel) - - let fileContent = JSON.stringify(timeFramesArray) - let fileName = '/Time.Frames.json'; - - let filePath = bot.filePathRoot + "/Output/" + bot.TRADING_SESSION.folderName + "/" + productCodeName + "/" + processType + fileName; - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent + '\n') - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - } - } - } - - async function writeDailyStatusReport(currentTimeFrameLabel) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + bot.processNode.referenceParent.config.codeName - let thisReport = statusDependencies.statusReports.get(reportKey) - - thisReport.file.lastExecution = bot.currentDaytime - thisReport.file.lastFile = tradingProcessDate - thisReport.file.simulationState = bot.simulationState - thisReport.file.timeFrames = currentTimeFrameLabel - await thisReport.asyncSave() - } - - async function writeMarketStatusReport(currentTimeFrameLabel) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + bot.processNode.referenceParent.config.codeName - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime - thisReport.file.simulationState = bot.simulationState - thisReport.file.timeFrames = currentTimeFrameLabel - - logger.newInternalLoop(bot.codeName, bot.process, tradingProcessDate) - await thisReport.asyncSave() - } - } - - function checkIfSessionMustStop() { - - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - /* - Backtests needs only one execution of this process to complete. - */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') } - bot.TRADING_SESSION.stop('Backtesting Session Finished.') - } - } - } - catch (err) { - /* An unhandled exception occured. in this case we return Fail and log the stack. */ - if (err.stack) { - logger.write(MODULE_NAME, "[ERROR] start -> Unhandled Exception. Will Abort this process. err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - /* Some expected file was not found. We will return a RETRY code and move on. */ - if ((err.result === "Fail Because" && err.message === "File does not exist.") || err.code === 'The specified key does not exist.') { - logger.write(MODULE_NAME, "[ERROR] File not Found. Will Retry the Process Loop.") - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - /* Some other handled exception occured. We return Fail and move on. */ - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> Handled Exception. Will Abort this process. err = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } - - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - async function asyncGetDatasetFile(datasetModule, filePath, fileName) { - - let promise = new Promise((resolve, reject) => { - - datasetModule.getTextFile(filePath, fileName, onFileReceived); - function onFileReceived(err, text) { - - let response = { - err: err, - text: text - } - resolve(response) - } - }); - - return promise - } -} diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingRecords.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingRecords.js deleted file mode 100644 index 8777fc2b6..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingRecords.js +++ /dev/null @@ -1,419 +0,0 @@ -exports.newTradingRecords = function newTradingRecords(bot, logger) { - /* - This module facilitates the appending of records to the output of the process. - */ - const MODULE_NAME = 'Trading Records' - - let thisObject = { - appendRecords: appendRecords, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let tradingSystem - let sessionParameters - let outputDatasetsMap - - return thisObject - - function initialize(pOutputDatasetsMap) { - tradingEngine = bot.simulationState.tradingEngine - tradingSystem = bot.simulationState.tradingSystem - sessionParameters = bot.TRADING_SESSION.tradingParameters - outputDatasetsMap = pOutputDatasetsMap // These are the files turned into arrays, stored in a Map by Product codeName. - } - - function finalize() { - tradingEngine = undefined - tradingSystem = undefined - sessionParameters = undefined - outputDatasetsMap = undefined - } - - function appendRecords() { - /* - Here we add records to the output files. At the product config property nodePath - we have a pointer to the node that have the information we need to extract. - Later, based on the product record definition we will extract each individual value. - */ - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - - for (let i = 0; i < outputDatasets.length; i++) { - let outputDatasetNode = outputDatasets[i] - let dataset = outputDatasetNode.referenceParent - let product = dataset.parentNode - let outputDatasetArray = outputDatasetsMap.get(product.config.codeName) - - if (bot.processingDailyFiles === true && dataset.config.type === 'Daily Files') { - persistRecords() - } - - if (bot.processingDailyFiles === false && dataset.config.type === 'Market Files') { - persistRecords() - } - - function persistRecords() { - /* - There are a few products configured to be saved only at an specific cycle. - */ - if (product.config.saveAtCycle !== undefined) { - if (tradingEngine.current.episode.cycle.value !== product.config.saveAtCycle) { - return - } - } - - /* Clean the file from information of previous executions */ - //pruneOutputFile(product, outputDatasetArray, tradingEngine.current.episode.candle.end.value) - - /* Clean Open Records */ - if (product.config.saveAsObjects === true) { - for (let j = 0; j < product.record.properties.length; j++) { - let recordProperty = product.record.properties[j] - if (recordProperty.config.codeName === product.config.propertyNameThatDefinesObject) { - /* Remove Open Records */ - spliceOpenRecords(j, product, outputDatasetArray) - break - } - } - } - - /* - The product root can be a node or a node property of type array. - */ - let productRoot - try { - productRoot = eval(product.config.nodePath) - } catch (err) { - badDefinitionUnhandledException(err, 'Cannot get productRoot -> nodePath = ' + product.config.nodePath, product, undefined) - } - - if (product.config.nodePathType === 'array') { - /* - This means that the configured nodePath is not pointing to a node, but to a node property that is an array. - For that reason we will assume that each element of the array is a record to be outputed - */ - for (let index = 0; index < productRoot.length; index++) { - /* - The Product Root Node is the root of the node hiriarchy from where we are going to extract the record values. - */ - let productRootNode = productRoot[index] - let record = scanRecordDefinition(product, productRootNode, index) - if (record !== undefined) { - /* - We will add the index value to the record itself, so that the plotter can know to which - brach of the trading engine data structure it belongs. - */ - record.push(index) - persistIndividualRecord(record, product, outputDatasetArray) - } - } - } else { - /* - This means that the configured nodePath points to a single node, which is the one whose children constitutes - the record to be saved at the output file. - */ - /* - The Product Root Node is the root of the node hiriarchy from where we are going to extract the record values. - */ - let productRootNode = productRoot - let record = scanRecordDefinition(product, productRootNode) - if (record !== undefined) { - persistIndividualRecord(record, product, outputDatasetArray) - } - } - } - } - - function scanRecordDefinition(product, productRootNode, index) { - - let record = [] - for (let j = 0; j < product.record.properties.length; j++) { - let recordProperty = product.record.properties[j] - /* - The Property Root Node is the Root of the Hiriarchy branch we must find in order - to get the node where we are going to extract the value. Initially - we point it to the Product Root Node, because that is the default in case - a property does not have at its configuration a different nodePath configured - pointing to an specific Root for the property. - */ - let propertyRootNode = productRootNode - /* - If we find at the configuration a nodePath, then we take this path to find - the Root Node specifically for this property only. - */ - if (recordProperty.config.nodePath !== undefined) { - if (recordProperty.config.nodePath === "tradingEngine.exchangeOrders.marketBuyOrders.marketOrders[index].orderBaseAsset") { - let a = tradingEngine - } - try { - propertyRootNode = eval(recordProperty.config.nodePath) - } catch (err) { - badDefinitionUnhandledException(err, 'Error Evaluating Record Property nodePath -> nodePath = ' + recordProperty.config.nodePath, product, recordProperty) - } - } - /* - The Target Node is the node from where we are going to exctract the value. - We will use the codeName of the Record Property to match it with - any of the properties of the Root Node to get the Target Node. - */ - let targetNode - try { - targetNode = propertyRootNode[recordProperty.config.codeName] - } catch (err) { - badDefinitionUnhandledException(err, 'Error setting Target Node.', product, recordProperty) - } - /* - If the codeName of the Record Property can not match the name of the property at - the target node, the user can explicitly specify the property name at the configuration, - and in those cases we need to use that. This happens when there are many Record Properties - pointing to the same property at the Target Node. - */ - if (recordProperty.config.childProperty !== undefined) { - targetNode = propertyRootNode[recordProperty.config.childProperty] - } - /* - It can happen that intead of having a Node in targetNode what we have is an - array of nodes. We need to pick one of the elements of the array and for that - we use the Index value we find at the configuration of the Record Property. - */ - if (recordProperty.config.index !== undefined) { - try { - targetNode = targetNode[recordProperty.config.index] - } catch (err) { - badDefinitionUnhandledException(err, 'Error setting Target Node.', product, recordProperty) - } - } - /* - By Default the value is extracted from the value property of the Target Node. - But it might happen the the Target Node does not exist for example when there is an Array - of Nodes defined in the Record Properties but not all of them exist at the Root Node. - We filter out those cases by not extracting the value from the value property. - */ - let value = 0 // This is a default value, since we do not want null in files because it breakes JSON format. - if (targetNode !== undefined) { - if (targetNode.type !== undefined) { - /* - In this case the Target Node is really a node (since it has a type), so we extract the value - from its value property. - */ - value = targetNode.value - - if (recordProperty.config.decimals !== undefined) { - try { - value = Number(value.toFixed(recordProperty.config.decimals)) - } catch (err) { - badDefinitionUnhandledException(err, 'Error applying configured decimals.', product, recordProperty) - } - } - } else { - /* - In this case the Target Node is not really node, but the value itself. Se we return this as the - value of the Record Property. - */ - value = targetNode - } - } - - /* We are not going to add records where the begin or end are missing */ - if ( - recordProperty.config.codeName === 'begin' && value === 0 || - recordProperty.config.codeName === 'end' && value === 0 - ) { return } - - if (recordProperty.config.isString !== true && Array.isArray(value) !== true) { - value = safeNumericValue(value) - } - if (recordProperty.config.isString === true && Array.isArray(value) !== true) { - value = safeStringValue(value) - } - record.push(value) - } - return record - } - - function persistIndividualRecord(record, product, outputDatasetArray) { - - if (product.config.saveAsObjects === true) { - /* For saving objects we need to take care of a different set of rules. */ - for (let j = 0; j < product.record.properties.length; j++) { - let recordProperty = product.record.properties[j] - if (recordProperty.config.codeName === product.config.propertyNameThatDefinesObject) { - let propertyValue = record[j] - - if (bot.processingDailyFiles) { - if (product.config.doNotCutObjectInDays !== true) { - /* - By default we will cut objects in days. - */ - if (propertyValue !== product.config.propertyValueThatPreventsSavingObject) { - outputDatasetArray.push(record) - } - } else { - /* - When dealing with Daily Files, we need to avoid to write an open object at the last 'candle' of the day, - since the object will be duplicated on the next day. How do we know we are positioned at the last candle - of the day? Easy: the end of the candle must be 1 millisecod before the next day. That happens at any - time frame. - */ - let currentDay = new Date(tradingEngine.current.episode.candle.end.value) - let nextDay = new Date(tradingEngine.current.episode.candle.end.value + 1) - if (currentDay.getUTCDate() !== nextDay.getUTCDate()) { - /* - We will save the object only if it is closed, becasuse we are at the last candle of the day. - */ - if (propertyValue === product.config.propertyValueThatClosesObject) { - outputDatasetArray.push(record) - } - } else { - /* - When we are not at the end of the day, we will save the object normally, like in market files. - */ - if (propertyValue !== product.config.propertyValueThatPreventsSavingObject) { - outputDatasetArray.push(record) - } - } - } - } - else { - /* - For Market Files we will add a record everytime that proeprty value does not match this - */ - if (propertyValue !== product.config.propertyValueThatPreventsSavingObject) { - outputDatasetArray.push(record) - } - } - break - } - } - } else { - /* - When we are not dealing with objects, we add every record to the existing file except - for the ones that are filtered out at the Product Definition. - */ - if (product.config.codeName === "Trading-System-Errors") { - let a = 1 - } - if (product.config.propertyNameThatDefinesStatus !== undefined && product.config.propertyValueThatPreventsSavingObject !== undefined) { - for (let j = 0; j < product.record.properties.length; j++) { - let recordProperty = product.record.properties[j] - if (recordProperty.config.codeName === product.config.propertyNameThatDefinesStatus) { - let propertyValue = record[j] - - if (product.config.propertyValueThatPreventsSavingObject === "->Empty Array->" && propertyValue.length === 0) { - break - } - if (propertyValue !== product.config.propertyValueThatPreventsSavingObject) { - outputDatasetArray.push(record) - } - break - } - } - } else { - outputDatasetArray.push(record) - } - } - } - - function safeNumericValue(value) { - /* - The purpose of this function is to check that value variable does not have a value that - will later break the JSON format of files where this is going to be stored at. - */ - if (value === Infinity) { - value = Number.MAX_SAFE_INTEGER - } - if (value === undefined) { - value = 0 - } - if (value === null) { - value = 0 - } - if (isNaN(value)) { - value = 0 - } - return value - } - - function safeStringValue(value) { - /* - The purpose of this function is to check that value variable does not have a value that - will later break the JSON format of files where this is going to be stored at. - */ - if (value === undefined) { - value = '' - } - if (value === null) { - value = '' - } - return value - } - - function pruneOutputFile(product, outputFile, currentEnd) { - if (outputFile.isPrunned === true) { return } - /* - When a session is resumed, we will be potentially reading output files belonging to a previous session execution. - For that reason we need to prune all the records that are beyond the current candle. We do not delete everything - because we might be resuming a stopped session, which is fine. - */ - for (let i = 0; i < outputFile.length; i++) { - let record = outputFile[i] - - for (let j = 0; j < product.record.properties.length; j++) { - let recordProperty = product.record.properties[j] - if (recordProperty.config.codeName === 'end') { - let end = record[j] - if (end >= currentEnd) { - outputFile.splice(i, 1) - /* - This will execute the next prune call in the next iteration of the NodeJs event loop - allowing for other callbacks to be executed. It also prevents the error - 'Maximum call stack size exceeded', since the call is not placed at the call stack. - */ - setImmediate(pruneOutputFile, product, outputFile, currentEnd) - return - } - } - } - } - outputFile.isPrunned = true - } - - function spliceOpenRecords(j, product, outputDatasetArray) { - /* - Before adding records to the output file, we need to remove all open records, - because we will be adding the same records later with potentially - new or updated information. - */ - - for (let i = 0; i < outputDatasetArray.length; i++) { - let dataRecord = outputDatasetArray[i] - if (dataRecord !== undefined) { - let dataRecordValue = dataRecord[j] - if (dataRecordValue !== product.config.propertyValueThatClosesObject) { - outputDatasetArray.splice(i, 1) - spliceOpenRecords(j, product, outputDatasetArray) - return - } - } - } - } - } - - function badDefinitionUnhandledException(err, message, product, recordProperty) { - logger.write(MODULE_NAME, "[ERROR] appendRecords -> " + message); - logger.write(MODULE_NAME, "[ERROR] appendRecords -> product.name = " + product.name); - logger.write(MODULE_NAME, "[ERROR] appendRecords -> product.config = " + JSON.stringify(product.config)); - - if (recordProperty) { - logger.write(MODULE_NAME, "[ERROR] appendRecords -> recordProperty.name = " + recordProperty.name); - logger.write(MODULE_NAME, "[ERROR] appendRecords -> recordProperty.config.codeName = " + recordProperty.config.codeName); - logger.write(MODULE_NAME, "[ERROR] appendRecords -> recordProperty.config = " + JSON.stringify(recordProperty.config)); - } - - if (err) { - logger.write(MODULE_NAME, "[ERROR] appendRecords -> err.stack = " + err.stack); - } - throw 'Can not continue with a Definition Error like this.' - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSimulation.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSimulation.js deleted file mode 100644 index 3c262e76a..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSimulation.js +++ /dev/null @@ -1,538 +0,0 @@ -exports.newTradingSimulation = function newTradingSimulation(bot, logger, tradingEngineModule, UTILITIES) { - /* - This Module represents the trading simulacion. Escentially a loop through a set of candles and - the execution at each loop cycle of the Trading System Protocol. - */ - const FULL_LOG = true - const MODULE_NAME = 'Trading Simulation -> ' + bot.TRADING_SESSION.name - - let thisObject = { - finalize: finalize, - runSimulation: runSimulation - } - - let utilities = UTILITIES.newCloudUtilities(bot, logger) - - return thisObject - - function finalize() { - thisObject = undefined - } - - async function runSimulation( - chart, - outputDatasetsMap, - writeFiles, - ) { - try { - - let tradingSystem = bot.simulationState.tradingSystem - let tradingEngine = bot.simulationState.tradingEngine - let sessionParameters = bot.TRADING_SESSION.tradingParameters - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> initialDatetime = ' + sessionParameters.timeRange.config.initialDatetime) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> finalDatetime = ' + sessionParameters.timeRange.config.finalDatetime) } - - /* These are the Modules we will need to run the Simulation */ - const TRADING_RECORDS_MODULE = require('./TradingRecords.js') - let tradingRecordsModule = TRADING_RECORDS_MODULE.newTradingRecords(bot, logger) - tradingRecordsModule.initialize(outputDatasetsMap) - - const TRADING_SYSTEM_MODULE = require('./TradingSystem.js') - let tradingSystemModule = TRADING_SYSTEM_MODULE.newTradingSystem(bot, logger, tradingEngineModule) - tradingSystemModule.initialize() - - const TRADING_EPISODE_MODULE = require('./TradingEpisode.js') - let tradingEpisodeModule = TRADING_EPISODE_MODULE.newTradingEpisode(bot, logger, tradingEngineModule) - tradingEpisodeModule.initialize() - - /* Setting up the candles array: The whole simulation is based on the array of candles at the time-frame defined at the session parameters. */ - let propertyName = 'at' + sessionParameters.timeFrame.config.label.replace('-', '') - let candles = chart[propertyName].candles - - /* Variables needed for heartbeat functionality */ - let heartBeatDate - let previousHeartBeatDate - /* - Estimation of the Initial Candle to Process in this Run. - */ - let initialCandle - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - /* Estimate Initial Candle based on the timeRage configured for the session. */ - let firstEnd = candles[0].end - let targetEnd = sessionParameters.timeRange.config.initialDatetime - let diff = targetEnd - firstEnd - let amount = diff / sessionParameters.timeFrame.config.value - - initialCandle = Math.trunc(amount) - if (initialCandle < 0) { initialCandle = 0 } - if (initialCandle > candles.length - 1) { - /* - This will happen when the sessionParameters.timeRange.config.initialDatetime is beyond the last candle available, - meaning that the dataSet needs to be updated with more up-to-date data. - */ - bot.TRADING_SESSION.stop('Data is not up-to-date enough. Please start the Masters Data Mining Operation.') - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Data is not up-to-date enough. Stopping the Session now. ') } - return - } - } else { - - /* - In this case we already have at the last candle index the next candle to be - processed. We will just continue with this candle. - */ - initialCandle = tradingEngine.current.episode.candle.index.value - } - /* - Main Simulation Loop - */ - /* We are going to use this to exit the loop if needed. */ - let breakLoop = false - - /* - We will assume that we are at the head of the market here. We do this - because the loop could be empty and no validation is going to run. If the - loop is not empty, then the lascCandle() check will override this value - depending on if we really are at the head of the market or not. - */ - tradingEngine.current.episode.headOfTheMarket.value = true - /* - This is the main simulation loop. It will go through the initial candle - until one less than the last candle available. We will never process the last - candle available since it is not considered a closed candle, but a candle - that still can change. So effectively will be processing all closed candles. - */ - for (let i = initialCandle; i < candles.length - 1; i++) { - tradingEngine.current.episode.candle.index.value = i - - /* This is the current candle the Simulation is working at. */ - let candle = candles[tradingEngine.current.episode.candle.index.value] - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle Begin @ ' + (new Date(candle.begin)).toLocaleString()) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle End @ ' + (new Date(candle.end)).toLocaleString()) } - - tradingEngineModule.setCurrentCandle(candle) // We move the current candle we are standing at, to the trading engine data structure to make it available to anyone, including conditions and formulas. - - /* We emit a heart beat so that the UI can now where we are at the overal process.*/ - heartBeat() - - /* Opening the Episode, if needed. */ - tradingEpisodeModule.openEpisode() - - if (checkInitialDatetime() === false) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Candle Before the Initia Date Time @ ' + (new Date(candle.begin)).toLocaleString()) } - continue - } - - positionChartAtCurrentCandle() - - /* The chart was recalculated based on the current candle. */ - tradingSystemModule.updateChart(chart) - - /* - Do the stuff needed previous to the run like - Episode Counters and Statistics update. Mantaince is done - once per simulation candle. - */ - tradingSystemModule.mantain() - tradingEpisodeModule.mantain() - tradingEngineModule.mantain() - - /* - Run the first cycle of the Trading System. In this first cycle we - give some room so that orders can be canceled or filled and we can - write those records into the output memory. During this cycle new - orders can not be created, since otherwise the could be cancelled at - the second cycle without spending real time at the order book. - */ - tradingEngineModule.setCurrentCycle('First') - await runCycle() - - /* - We check if we need to stop before appending the records so that the stop - reason is also propery recorded. Note also that we check this after the first - cycle, where orders have not been submitted to the exchange yet, but we - had the chance to check for the status of placed orders or even cancel - the ones that needed cancellation. - */ - checkIfWeNeedToStopBetweenCycles() - - /* Add new records to the process output */ - tradingRecordsModule.appendRecords() - - if (breakLoop === true) { break } - /* - Run the second cycle of the Trading System. During this second run - some new orders might be created at slots freed up during the first - run. This allows for example for a Limit Order to be cancelled during the - first run, and the same Limit Order definition to spawn a new order - without the need to wait until the next candle. Orders can not be cancelled - during the second cycle. - */ - tradingEngineModule.setCurrentCycle('Second') - await runCycle() - - checkIfWeNeedToStopAfterBothCycles() - - /* Add new records to the process output */ - tradingRecordsModule.appendRecords() - - if (breakLoop === true) { break } - - async function runCycle() { - /* Reset Data Structures */ - tradingSystemModule.reset() - tradingEpisodeModule.reset() - tradingEngineModule.reset() - - let infoMessage = 'Processing candle # ' + tradingEngine.current.episode.candle.index.value + ' @ the ' + tradingEngine.current.episode.cycle.value + ' cycle.' - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> ' + infoMessage) } - tradingSystem.infos.push([tradingSystem.id, infoMessage]) - - await tradingSystemModule.run() - } - - function checkIfWeNeedToStopBetweenCycles() { - if (bot.STOP_SESSION === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> controlLoop -> We are going to stop here bacause we were requested to stop processing this session.') } - updateEpisode('Session Stopped') - breakLoop = true - return - } - - if (global.STOP_TASK_GRACEFULLY === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> controlLoop -> We are going to stop here bacause we were requested to stop processing this task.') } - updateEpisode('Task Stopped') - breakLoop = true - return - } - - if (checkFinalDatetime() === false) { - closeEpisode('Final Datetime Reached') - breakLoop = true - bot.TRADING_SESSION.stop('Final Datetime Reached') - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Final Datetime Reached. Stopping the Session now. ') } - return - } - - if (checkMinimunAndMaximunBalance() === false) { - closeEpisode('Min or Max Balance Reached') - breakLoop = true - bot.TRADING_SESSION.stop('Min or Max Balance Reached') - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] runSimulation -> Min or Max Balance Reached. Stopping the Session now. ') } - return - } - } - - function checkIfWeNeedToStopAfterBothCycles() { - if (checkNextCandle() === false) { - updateEpisode('All Candles Processed') - breakLoop = true - return - } - } - } - - tradingSystemModule.finalize() - tradingRecordsModule.finalize() - tradingEpisodeModule.finalize() - - tradingSystemModule = undefined - tradingRecordsModule = undefined - tradingEpisodeModule = undefined - - await writeFiles() - - function closeEpisode(exitType) { - tradingEpisodeModule.updateExitType(exitType) - tradingEpisodeModule.closeEpisode() - } - - function updateEpisode(exitType) { - tradingEpisodeModule.updateExitType(exitType) - } - - function heartBeat() { - let hartbeatText = '' - if (sessionParameters.heartbeats !== undefined) { - if (sessionParameters.heartbeats.config.date === true || sessionParameters.heartbeats.config.candleIndex === true) { - /* We will produce a simulation level heartbeat in order to inform the user this is running. */ - - heartBeatDate = new Date(Math.trunc(tradingEngine.current.episode.candle.begin.value / global.ONE_DAY_IN_MILISECONDS) * global.ONE_DAY_IN_MILISECONDS) - - let fromDate = new Date(sessionParameters.timeRange.config.initialDatetime) - let lastDate = new Date(sessionParameters.timeRange.config.finalDatetime) - - let currentDateString = heartBeatDate.getUTCFullYear() + '-' + utilities.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(heartBeatDate.getUTCDate(), 2) - let currentDate = new Date(heartBeatDate) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - - /* - Theere are a few tasks that we need to do only when the date changes, - otherwise it would be suboptimal. - */ - if (heartBeatDate.valueOf() !== previousHeartBeatDate) { - previousHeartBeatDate = heartBeatDate.valueOf() - - let processingDate = heartBeatDate.getUTCFullYear() + '-' + utilities.pad(heartBeatDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(heartBeatDate.getUTCDate(), 2) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> loop -> Simulation ' + bot.TRADING_SESSIONKey + ' Loop # ' + tradingEngine.current.episode.candle.index.value + ' @ ' + processingDate) } - - /* Logging to console and disk */ - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage) - } - - /* Date only hearbeat */ - if (sessionParameters.heartbeats.config.date === true && sessionParameters.heartbeats.config.candleIndex === false) { - hartbeatText = hartbeatText + currentDateString - bot.processHeartBeat(hartbeatText, percentage) - return - } - } - - /* - When the Candle Index nees to be shown, then we can not send the hearbet - only when the dates changes, we have to send it for every candle. - It might also contain the date information. - */ - if (sessionParameters.heartbeats.config.candleIndex === true) { - if (sessionParameters.heartbeats.config.date === true) { - hartbeatText = hartbeatText + currentDateString - } - hartbeatText = hartbeatText + ' Candle # ' + tradingEngine.current.episode.candle.index.value - bot.processHeartBeat(hartbeatText, percentage) - } - } - } - } - - function positionChartAtCurrentCandle() { - /* - In conditions and Formulas, we want users to have an easy sintax to refer to indicators. In order to achieve that, we need the user to have - easy access to the current candle for instance, or the current bollinger band, meaning the one the Simulation is currently standing at. - For that reason we do the following processing, to have at the chart data structure the current objects of each indicator / time frame. - */ - let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency') - dataDependencies = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(dataDependencies) - - /* Finding the Current Element on Market Files */ - if (bot.processingDailyFiles) { - for (let j = 0; j < global.dailyFilePeriods.length; j++) { - let mapKey = dailyFilePeriods[j][1] - let propertyName = 'at' + mapKey.replace('-', '') - let thisChart = chart[propertyName] - - for (let k = 0; k < dataDependencies.length; k++) { - let dataDependencyNode = dataDependencies[k] - if (dataDependencyNode.referenceParent.config.codeName !== 'Multi-Period-Daily') { continue } - let singularVariableName = dataDependencyNode.referenceParent.parentNode.config.singularVariableName - let pluralVariableName = dataDependencyNode.referenceParent.parentNode.config.pluralVariableName - if (thisChart[pluralVariableName] !== undefined) { - let currentElement = getElement(thisChart[pluralVariableName], 'Daily' + '-' + mapKey + '-' + pluralVariableName) - if (currentElement !== undefined) { - thisChart[singularVariableName] = currentElement - } - } - } - } - } - - /* Finding the Current Element on Market Files */ - for (let j = 0; j < global.marketFilesPeriods.length; j++) { - let mapKey = marketFilesPeriods[j][1] - let propertyName = 'at' + mapKey.replace('-', '') - let thisChart = chart[propertyName] - - for (let k = 0; k < dataDependencies.length; k++) { - let dataDependencyNode = dataDependencies[k] - if (dataDependencyNode.referenceParent.config.codeName !== 'Multi-Period-Market') { continue } - let singularVariableName = dataDependencyNode.referenceParent.parentNode.config.singularVariableName - let pluralVariableName = dataDependencyNode.referenceParent.parentNode.config.pluralVariableName - if (thisChart[pluralVariableName] !== undefined) { - let currentElement = getElement(thisChart[pluralVariableName], 'Market' + '-' + mapKey + '-' + pluralVariableName) - if (currentElement !== undefined) { - thisChart[singularVariableName] = currentElement - } - } - } - } - - /* Finding the Current Element At Single Files*/ - let propertyName = 'atAnyTimeFrame' - let thisChart = chart[propertyName] - - for (let k = 0; k < dataDependencies.length; k++) { - let dataDependencyNode = dataDependencies[k] - if (dataDependencyNode.referenceParent.config.codeName !== 'Single-File') { continue } - let singularVariableName = dataDependencyNode.referenceParent.parentNode.config.singularVariableName - let pluralVariableName = dataDependencyNode.referenceParent.parentNode.config.pluralVariableName - let elementArray = thisChart[pluralVariableName] - let currentElement - if (elementArray !== undefined) { - currentElement = elementArray[elementArray.length - 1] - } - thisChart[singularVariableName] = currentElement - } - } - - function getElement(pArray, datasetName) { - if (pArray === undefined) { return } - try { - let element - for (let i = 0; i < pArray.length; i++) { - element = pArray[i] - - if (tradingEngine.current.episode.candle.end.value === element.end) { // when there is an exact match at the end we take that element - return element - } else { - if ( - i > 0 && - element.end > tradingEngine.current.episode.candle.end.value - ) { - let previousElement = pArray[i - 1] - if (previousElement.end < tradingEngine.current.episode.candle.end.value) { - return previousElement // If one elements goes into the future of currentCandle, then we stop and take the previous element. - } else { - return - } - } - } - } - return - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> datasetName = ' + datasetName) - logger.write(MODULE_NAME, '[ERROR] runSimulation -> getElement -> err = ' + err.stack) - throw (global.DEFAULT_FAIL_RESPONSE) - } - } - - function checkNextCandle() { - /* - We need to check that the candle we have just processed it is not the last candle. - The candle at the head of the market is already skipped from the loop because it has not closed yet. - Note: for Daily Files, this means that the last candle of each day will never be processed. - - The first +1 is because array indexes are based on 0. - The second +1 is because we need to compare the next candle (remember that the loops allways avoid the - last candle of the dataset available.) - */ - if (tradingEngine.current.episode.candle.index.value + 1 + 1 === candles.length) { - /* - When processing daily files, we need a mechanism to turn from one day to the next one. - That mechanism is the one implemented here. If we detect that the next candle is the last candle of - the day, we will advance current process day one day. By doing so, during the next execution, the - simulation will receive the candles and indicators files of the next day. - */ - let candlesPerDay = global.ONE_DAY_IN_MILISECONDS / sessionParameters.timeFrame.config.value - if ( - bot.processingDailyFiles && - tradingEngine.current.episode.candle.index.value + 1 + 1 === candlesPerDay - ) { - /* - Here we found that the next candle of the dataset is the last candle of the day. - It is time to move to the next day so as to receive at the next execution, the indicator files from - the next day. At the same time we will reset the index to be pointing to - the first candle of the new dataset we shall receive. The first candle of the next day starts - at index 0, so we will position the index now at zero. - */ - tradingEngine.current.episode.candle.index.value = 0 - tradingEngine.current.episode.processDate.value = - tradingEngine.current.episode.processDate.value + global.ONE_DAY_IN_MILISECONDS - return false - } - - /* - We reached the head of the market but we are not at the last candle of a day during - Daily Files processing. We will advance to the next candle index anyways because in the - next execution it will likely have more candles at the dataset. And if it does not, - it will just wait there until it does. - */ - tradingEngine.current.episode.headOfTheMarket.value = true - tradingEngine.current.episode.candle.index.value++ - return false - } else { - - /* Wd did not reach the head of the market */ - tradingEngine.current.episode.headOfTheMarket.value = false - tradingEngine.current.episode.candle.index.value++ - return true - } - } - - function checkInitialDatetime() { - /* Here we check that the current candle is not before the initial datetime defined at the session parameters.*/ - if (tradingEngine.current.episode.candle.end.value < sessionParameters.timeRange.config.initialDatetime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle before the sessionParameters.timeRange.config.initialDatetime.') } - return false - } - return true - } - - function checkFinalDatetime() { - /* Here we check that the next candle is not after of the user-defined final datetime at the session parameters.*/ - if (tradingEngine.current.episode.candle.begin.value + sessionParameters.timeFrame.config.value > sessionParameters.timeRange.config.finalDatetime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[INFO] runSimulation -> checkInitialAndFinalDatetime -> Skipping Candle after the sessionParameters.timeRange.config.finalDatetime.') } - return false - } - return true - } - - function checkMinimunAndMaximunBalance() { - /* Checks for Minimun and Maximun Balance. We do the check while not inside any strategy only. */ - if ( - tradingEngine.current.strategy.index.value === tradingEngine.current.strategy.index.config.initialValue - ) { - /* - We will perform this check only when we are not inside a position, - because there the balances have shifted from their resting position. - */ - - let stopRunningDate = (new Date(tradingEngine.current.episode.candle.begin.value)).toLocaleString() - - if (sessionParameters.sessionBaseAsset.config.minimumBalance !== undefined) { - if (tradingEngine.current.episode.episodeBaseAsset.balance.value <= sessionParameters.sessionBaseAsset.config.minimumBalance) { - const errorMessage = 'Min Balance reached @ ' + stopRunningDate - tradingSystem.errors.push([tradingSystem.id, errorMessage]) - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) } - return false - } - } - - if (sessionParameters.sessionBaseAsset.config.maximumBalance !== undefined) { - if (tradingEngine.current.episode.episodeBaseAsset.balance.value >= sessionParameters.sessionBaseAsset.config.maximumBalance) { - const errorMessage = 'Max Balance reached @ ' + stopRunningDate - tradingSystem.errors.push([tradingSystem.id, errorMessage]) - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) } - return false - } - } - - if (sessionParameters.sessionQuotedAsset.config.minimumBalance !== undefined) { - if (tradingEngine.current.episode.episodeQuotedAsset.balance.value <= sessionParameters.sessionQuotedAsset.config.minimumBalance) { - const errorMessage = 'Min Balance reached @ ' + stopRunningDate - tradingSystem.errors.push([tradingSystem.id, errorMessage]) - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) } - return false - } - } - - if (sessionParameters.sessionQuotedAsset.config.maximumBalance !== undefined) { - if (tradingEngine.current.episode.episodeQuotedAsset.balance.value >= sessionParameters.sessionQuotedAsset.config.maximumBalance) { - const errorMessage = 'Max Balance reached @ ' + stopRunningDate - tradingSystem.errors.push([tradingSystem.id, errorMessage]) - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[WARN] runSimulation -> checkMinimunAndMaximunBalance -> ' + errorMessage) } - return false - } - } - - } - return true - } - } catch (err) { - logger.write(MODULE_NAME, '[ERROR] runSimulation -> err = ' + err.stack) - throw (global.DEFAULT_FAIL_RESPONSE) - } - } -} - diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStages.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStages.js deleted file mode 100644 index c62fd4b4c..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStages.js +++ /dev/null @@ -1,1086 +0,0 @@ -exports.newTradingStages = function newTradingStages(bot, logger, tradingEngineModule) { - /* - This module packages all functions related to Stages. - */ - const MODULE_NAME = 'Trading Stages' - let thisObject = { - updateChart: updateChart, - mantain: mantain, - reset: reset, - cycleBasedStatistics: cycleBasedStatistics, - runTriggerStage: runTriggerStage, - runOpenStage: runOpenStage, - runManageStage: runManageStage, - runCloseStage: runCloseStage, - updateEnds: updateEnds, - resetTradingEngineDataStructure: resetTradingEngineDataStructure, - updateCounters: updateCounters, - updateStatistics: updateStatistics, - initialize: initialize, - finalize: finalize - } - - const TRADING_STRATEGY_MODULE = require('./TradingStrategy.js') - let tradingStrategyModule = TRADING_STRATEGY_MODULE.newTradingStrategy(bot, logger, tradingEngineModule) - - const TRADING_POSITION_MODULE = require('./TradingPosition.js') - let tradingPositionModule = TRADING_POSITION_MODULE.newTradingPosition(bot, logger, tradingEngineModule) - - const TRADING_ENGINE_EXECUTION = require('./TradingExecution.js') - let tradingExecutionModule = TRADING_ENGINE_EXECUTION.newTradingExecution(bot, logger, tradingEngineModule) - - const ANNOUNCEMENTS_MODULE = require('./Announcements.js') - let announcementsModule = ANNOUNCEMENTS_MODULE.newAnnouncements(bot, logger) - - const SNAPSHOTS_MODULE = require('./Snapshots.js') - let snapshotsModule = SNAPSHOTS_MODULE.newSnapshots(bot, logger) - - const TRADING_EPISODE_MODULE = require('./TradingEpisode.js') - let tradingEpisodeModule = TRADING_EPISODE_MODULE.newTradingEpisode(bot, logger) - - let tradingEngine - let tradingSystem - let sessionParameters - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - - tradingStrategyModule.initialize() - tradingPositionModule.initialize() - announcementsModule.initialize() - snapshotsModule.initialize() - tradingExecutionModule.initialize() - tradingEpisodeModule.initialize() - } - - function finalize() { - tradingEngine = undefined - tradingSystem = undefined - sessionParameters = undefined - - tradingStrategyModule.finalize() - tradingStrategyModule = undefined - - tradingPositionModule.finalize() - tradingPositionModule = undefined - - announcementsModule.finalize() - announcementsModule = undefined - - snapshotsModule.finalize() - snapshotsModule = undefined - - tradingExecutionModule.finalize() - tradingExecutionModule = undefined - - tradingEpisodeModule.finalize() - tradingEpisodeModule = undefined - } - - function updateChart(pChart) { - snapshotsModule.updateChart(pChart) - } - - function mantain() { - tradingPositionModule.mantain() - tradingStrategyModule.mantain() - tradingExecutionModule.mantain() - - updateCounters() - updateEnds() - } - - function reset() { - tradingPositionModule.reset() - tradingStrategyModule.reset() - tradingExecutionModule.reset() - - resetTradingEngineDataStructure() - } - - function cycleBasedStatistics() { - tradingEpisodeModule.cycleBasedStatistics() - tradingPositionModule.cycleBasedStatistics() - } - - function runTriggerStage() { - /* - We check if we will be triggering on, off or taking position. - */ - checkTriggerOn() - checkTriggerOff() - checkTakePosition() - - function checkTriggerOn() { - if ( - tradingEngine.current.strategy.index.value === tradingEngine.current.strategy.index.config.initialValue - ) { - /* - To pick a new strategy we will check that any of the situations of the trigger on is true. - Once we enter into one strategy, we will ignore market conditions for others. However there is also - a strategy trigger off which can be hit before taking a position. If hit, we would - be outside a strategy again and looking for the conditions to enter all over again. - */ - tradingSystem.evalConditions(tradingSystem, 'Trigger On Event') - - for (let j = 0; j < tradingSystem.tradingStrategies.length; j++) { - if ( // If a strategy was already picked during the loop, we exit the loop - tradingEngine.current.strategy.index.value !== tradingEngine.current.strategy.index.config.initialValue - ) { continue } - - let strategy = tradingSystem.tradingStrategies[j] - let triggerStage = strategy.triggerStage - - if (triggerStage !== undefined) { - if (triggerStage.triggerOn !== undefined) { - for (let k = 0; k < triggerStage.triggerOn.situations.length; k++) { - let situation = triggerStage.triggerOn.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(triggerStage.triggerOn.id) - tradingSystem.highlights.push(triggerStage.id) - - tradingStrategyModule.openStrategy(j, situation.name, strategy.name) - - /* Initialize this */ - tradingEngine.current.episode.distanceToEvent.triggerOn.value = 1 - - announcementsModule.makeAnnoucements(triggerStage.triggerOn) - announcementsModule.makeAnnoucements(triggerStage) - - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.strategy === true) { - snapshotsModule.strategyEntry() - } - } - } - - changeStageStatus('Trigger Stage', 'Open') - } - } - } - } - } - } - } - - function checkTriggerOff() { - if (tradingEngine.current.strategyTriggerStage.status.value === 'Open') { - - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let triggerStage = strategy.triggerStage - - tradingSystem.evalConditions(strategy, 'Trigger Off Event') - - if (triggerStage !== undefined) { - if (triggerStage.triggerOff !== undefined) { - for (let k = 0; k < triggerStage.triggerOff.situations.length; k++) { - let situation = triggerStage.triggerOff.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(triggerStage.triggerOff.id) - tradingSystem.highlights.push(triggerStage.id) - - tradingEngine.current.episode.distanceToEvent.triggerOff.value = 1 - announcementsModule.makeAnnoucements(triggerStage.triggerOff) - changeStageStatus('Trigger Stage', 'Closed') - tradingStrategyModule.closeStrategy('Trigger Off') - } - } - } - } - } - } - - function checkTakePosition() { - if ( - tradingEngine.current.strategyTriggerStage.status.value === 'Open' - ) { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let triggerStage = strategy.triggerStage - - tradingSystem.evalConditions(strategy, 'Take Position Event') - tradingSystem.evalFormulas(strategy, 'Take Position Event') - - if (triggerStage !== undefined) { - if (triggerStage.takePosition !== undefined) { - for (let k = 0; k < triggerStage.takePosition.situations.length; k++) { - let situation = triggerStage.takePosition.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(triggerStage.takePosition.id) - tradingSystem.highlights.push(triggerStage.id) - - tradingPositionModule.openPosition(situation.name) - - announcementsModule.makeAnnoucements(triggerStage.takePosition) - announcementsModule.makeAnnoucements(strategy.openStage) - - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.position === true) { - snapshotsModule.positionEntry() - } - } - } - - changeStageStatus('Trigger Stage', 'Closed') - changeStageStatus('Open Stage', 'Opening') - changeStageStatus('Manage Stage', 'Opening') - } - } - } - } - } - } - } - - async function runOpenStage() { - - checkIfWeNeedToAbortTheStage() - runWhenStatusIsOpening() - await runWhenStatusIsOpen() - await runWhenStatusIsClosing() - - function checkIfWeNeedToAbortTheStage() { - /* Abort Open Stage Check */ - if (tradingEngine.current.strategyOpenStage.status.value === 'Open' && tradingEngine.current.strategyCloseStage.status.value === 'Open') { - /* - if the Close stage is opened while the open stage is still open that means that - we need to stop placing orders, check what happened to the orders already placed, - and cancel all unfilled limit orders. We call this the Closing status of the Open Stage. - */ - changeStageStatus('Open Stage', 'Closing') - } - } - - function runWhenStatusIsOpening() { - /* Opening Status Procedure */ - if (tradingEngine.current.strategyOpenStage.status.value === 'Opening') { - - /* This procedure is intended to run only once */ - let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].openStage - let tradingEngineStage = tradingEngine.current.strategyOpenStage - - /* Reset the Exchange Orders data structure to its initial value */ - tradingEngineModule.initializeNode(tradingEngine.exchangeOrders) - - /* Entry Position size and rate */ - tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets') - tradingPositionModule.initialTargets(tradingSystemStage, tradingEngineStage) - initializeStageTargetSize() - - /* From here on, the stage is officialy Open */ - changeStageStatus('Open Stage', 'Open') - } - } - - async function runWhenStatusIsOpen() { - /* Open Status Procedure */ - if (tradingEngine.current.strategyOpenStage.status.value === 'Open') { - /* - While the Open Stage is Open, we do our regular stuff: place orders and check - what happened to the orders already placed. - */ - let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].openStage - let tradingEngineStage = tradingEngine.current.strategyOpenStage - let executionNode = tradingSystemStage.openExecution - - /* Evaluate conditions and formulas so they are ready during the execution run */ - tradingSystem.evalConditions(executionNode, 'Open Execution') - tradingSystem.evalFormulas(executionNode, 'Open Execution') - - await tradingExecutionModule.runExecution( - executionNode, - tradingEngineStage - ) - checkIfStageNeedsToBeClosed(tradingEngineStage, tradingSystemStage, 'Open Stage') - } - } - - async function runWhenStatusIsClosing() { - /* Closing Status Procedure */ - if (tradingEngine.current.strategyOpenStage.status.value === 'Closing') { - /* - During the closing stage status, we do not place new orders, just check - if the ones placed were filled, and cancel the ones not filled. - */ - let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].openStage - let executionNode = tradingSystemStage.openExecution - - /* - Check if there are unfilled orders, we will check if they were executed, - and cancel the ones that were not. - */ - tradingSystem.evalConditions(tradingSystemStage, 'Open Execution') - tradingSystem.evalFormulas(tradingSystemStage, 'Open Execution') - - await tradingExecutionModule.runExecution( - executionNode, - tradingEngine.current.strategyOpenStage - ) - - /* - The Closing is finished when the sizeFilled + feesPaid reaches the sizePlaced. - This can happens either because we update the sizeFilled value when we see - at the exchange that orders were filled, or we reduce the sizePlaced when - we cancel not yet filled orders. Here it does not matter the targetSize since - this status represent a force closure of this stage. - */ - switch (tradingEngine.current.strategyOpenStage.stageDefinedIn.value) { - case 'Base Asset': { - if ( - tradingEngine.current.strategyOpenStage.stageBaseAsset.sizeFilled.value >= - tradingEngine.current.strategyOpenStage.stageBaseAsset.sizePlaced.value - ) { - changeStageStatus('Open Stage', 'Closed') - } - break - } - case 'Quoted Asset': { - if ( - tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizeFilled.value >= - tradingEngine.current.strategyOpenStage.stageQuotedAsset.sizePlaced.value - ) { - changeStageStatus('Open Stage', 'Closed') - } - break - } - } - } - } - - function initializeStageTargetSize() { - /* - Here we will transform the position size into targets for each asset of the stage. - */ - tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value = tradingEngine.current.position.positionBaseAsset.entryTargetSize.value - tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value = tradingEngine.current.position.positionQuotedAsset.entryTargetSize.value - - tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyOpenStage.stageBaseAsset.targetSize.value, 10) - tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyOpenStage.stageQuotedAsset.targetSize.value, 10) - } - } - - function runManageStage() { - - if (tradingEngine.current.episode.cycle.value !== 'First') { return } - - runWhenStatusIsOpening() - runWhenStatusIsOpen() - - function runWhenStatusIsOpening() { - /* Opening Status Procedure */ - if (tradingEngine.current.strategyManageStage.status.value === 'Opening') { - - /* Now we switch to the Open status. */ - changeStageStatus('Manage Stage', 'Open') - } - } - - function runWhenStatusIsOpen() { - /* Open Status Procedure */ - if (tradingEngine.current.strategyManageStage.status.value === 'Open') { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let manageStage = strategy.manageStage - - /* Evaluate all the stage conditions and formulas to have them ready */ - tradingSystem.evalConditions(manageStage, 'Manage Stage') - tradingSystem.evalFormulas(manageStage, 'Manage Stage') - - /* Stop Loss Management */ - checkStopPhasesEvents() - calculateStopLoss() - calculateStopLossPosition() - - /* Take Profit Management */ - checkTakeProfitPhaseEvents() - calculateTakeProfit() - calculateTakeProfitPosition() - - /* Checking if Stop or Take Profit were hit */ - checkStopLossOrTakeProfitWasHit() - } - - function calculateStopLoss() { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let manageStage = strategy.manageStage - let phase - - if (manageStage !== undefined) { - if (manageStage.managedStopLoss !== undefined) { - phase = manageStage.managedStopLoss.phases[tradingEngine.current.position.stopLoss.stopLossPhase.value - 1] - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - let previousValue = tradingEngine.current.position.stopLoss.value - tradingPositionModule.applyStopLossFormula(tradingSystem.formulas, phase.formula.id) - - if (tradingEngine.current.position.stopLoss.value !== previousValue) { - announcementsModule.makeAnnoucements(phase) - } - } - } - } - - function calculateTakeProfit() { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let manageStage = strategy.manageStage - let phase - - if (manageStage !== undefined) { - if (manageStage.managedTakeProfit !== undefined) { - phase = manageStage.managedTakeProfit.phases[tradingEngine.current.position.takeProfit.takeProfitPhase.value - 1] - } - } - - if (phase !== undefined) { - if (phase.formula !== undefined) { - let previousValue = tradingEngine.current.position.takeProfit.value - tradingPositionModule.applyTakeProfitFormula(tradingSystem.formulas, phase.formula.id) - - if (tradingEngine.current.position.takeProfit.value !== previousValue) { - announcementsModule.makeAnnoucements(phase) - } - } - } - } - - function calculateStopLossPosition() { - /* - The position of the Stop Loss (above or below the price) is needed in order to know - later if the price hit the Stop Loss or not at every Simulation candle. When we get - the first values of the simulation of the Stop Loss we check if it is above or below - the Position Rate, and we assign the values Above or Below to it. - */ - if (tradingEngine.current.position.stopLoss.stopLossPosition.value === tradingEngine.current.position.stopLoss.stopLossPosition.config.initialValue) { - if (tradingEngine.current.position.stopLoss.value > tradingEngine.current.position.entryTargetRate.value) { - tradingEngine.current.position.stopLoss.stopLossPosition.value = 'Above' - } else { - tradingEngine.current.position.stopLoss.stopLossPosition.value = 'Below' - } - } - } - - function calculateTakeProfitPosition() { - /* - The position of the Take Profit (above or below the price) is needed in order to know - later if the price hit the Take Profit or not at every Simulation candle. When we get - the first values of the simulation of the Take Profits we check if it is above or below - the Position Rates, and we assign the values Above or Below to it. - */ - if (tradingEngine.current.position.takeProfit.takeProfitPosition.value === tradingEngine.current.position.takeProfit.takeProfitPosition.config.initialValue) { - if (tradingEngine.current.position.takeProfit.value > tradingEngine.current.position.entryTargetRate.value) { - tradingEngine.current.position.takeProfit.takeProfitPosition.value = 'Above' - } else { - tradingEngine.current.position.takeProfit.takeProfitPosition.value = 'Below' - } - } - } - - function checkStopPhasesEvents() { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let manageStage = strategy.manageStage - let parentNode - let phaseIndex - let phase - let stopLoss - - if (manageStage !== undefined) { - if (manageStage.managedStopLoss !== undefined) { - parentNode = manageStage - phaseIndex = tradingEngine.current.position.stopLoss.stopLossPhase.value - 1 - stopLoss = manageStage.managedStopLoss - phase = stopLoss.phases[phaseIndex] - } - } - - if (parentNode !== undefined) { - if (phase === undefined) { return } // trying to jump to a phase that does not exists. - - /* Check the next Phase Event. */ - let nextPhaseEvent = phase.nextPhaseEvent - if (nextPhaseEvent !== undefined) { - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - let situation = nextPhaseEvent.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(nextPhaseEvent.id) - tradingSystem.highlights.push(phase.id) - tradingSystem.highlights.push(stopLoss.id) - tradingSystem.highlights.push(parentNode.id) - tradingSystem.highlights.push(manageStage.id) - - tradingPositionModule.updateStopLoss(tradingEngine.current.position.stopLoss.stopLossPhase.value + 1) - - announcementsModule.makeAnnoucements(nextPhaseEvent) - - /* Reset this counter */ - tradingEngine.current.episode.distanceToEvent.nextPhase.value = 1 - return // only one event can pass at the time - } - } - } - - /* Check the Move to Phase Events. */ - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n] - if (moveToPhaseEvent !== undefined) { - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - let situation = moveToPhaseEvent.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(moveToPhaseEvent.id) - tradingSystem.highlights.push(phase.id) - tradingSystem.highlights.push(stopLoss.id) - tradingSystem.highlights.push(parentNode.id) - tradingSystem.highlights.push(manageStage.id) - - let moveToPhase = moveToPhaseEvent.referenceParent - if (moveToPhase !== undefined) { - for (let q = 0; q < stopLoss.phases.length; q++) { - if (stopLoss.phases[q].id === moveToPhase.id) { - tradingPositionModule.updateStopLoss(q + 1) - } - } - } else { - tradingSystem.errors.push([moveToPhaseEvent.id, 'This Node needs to reference a Phase.']) - continue - } - - announcementsModule.makeAnnoucements(moveToPhaseEvent) - - /* Reset this counter */ - tradingEngine.current.episode.distanceToEvent.moveToPhase.value = 1 - return // only one event can pass at the time - } - } - } - } - } - } - - function checkTakeProfitPhaseEvents() { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - let openStage = strategy.openStage - let manageStage = strategy.manageStage - let parentNode - let phaseIndex - let phase - let takeProfit - - if (manageStage !== undefined) { - if (manageStage.managedTakeProfit !== undefined) { - parentNode = manageStage - phaseIndex = tradingEngine.current.position.takeProfit.takeProfitPhase.value - 1 - takeProfit = manageStage.managedTakeProfit - phase = takeProfit.phases[phaseIndex] - } - } - - if (parentNode !== undefined) { - if (phase === undefined) { return } // trying to jump to a phase that does not exists. - - /* Check the next Phase Event. */ - let nextPhaseEvent = phase.nextPhaseEvent - if (nextPhaseEvent !== undefined) { - for (let k = 0; k < nextPhaseEvent.situations.length; k++) { - let situation = nextPhaseEvent.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(nextPhaseEvent.id) - tradingSystem.highlights.push(phase.id) - tradingSystem.highlights.push(takeProfit.id) - tradingSystem.highlights.push(parentNode.id) - tradingSystem.highlights.push(manageStage.id) - - tradingPositionModule.updateTakeProfit(tradingEngine.current.position.takeProfit.takeProfitPhase.value + 1) - - announcementsModule.makeAnnoucements(nextPhaseEvent) - - /* Reset this counter */ - tradingEngine.current.episode.distanceToEvent.nextPhase.value = 1 - return // only one event can pass at the time - } - } - } - - /* Check the Move to Phase Events. */ - for (let n = 0; n < phase.moveToPhaseEvents.length; n++) { - let moveToPhaseEvent = phase.moveToPhaseEvents[n] - if (moveToPhaseEvent !== undefined) { - for (let k = 0; k < moveToPhaseEvent.situations.length; k++) { - let situation = moveToPhaseEvent.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(moveToPhaseEvent.id) - tradingSystem.highlights.push(phase.id) - tradingSystem.highlights.push(takeProfit.id) - tradingSystem.highlights.push(parentNode.id) - tradingSystem.highlights.push(manageStage.id) - - let moveToPhase = moveToPhaseEvent.referenceParent - if (moveToPhase !== undefined) { - for (let q = 0; q < takeProfit.phases.length; q++) { - if (takeProfit.phases[q].id === moveToPhase.id) { - tradingPositionModule.updateTakeProfit(q + 1) - } - } - } else { - tradingSystem.errors.push([moveToPhaseEvent.id, 'This Node needs to reference a Phase.']) - continue - } - - announcementsModule.makeAnnoucements(moveToPhaseEvent) - - /* Reset this counter */ - tradingEngine.current.episode.distanceToEvent.moveToPhase.value = 1 - return // only one event can pass at the time - } - } - } - } - } - } - - function checkStopLossOrTakeProfitWasHit() { - { - let strategy = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value] - /* - Checking what happened since the last execution. We need to know if the Stop Loss - or our Take Profit were hit. - */ - - /* Stop Loss condition: Here we verify if the Stop Loss was hitted or not. */ - if ( - ( - tradingEngine.current.position.stopLoss.stopLossPosition.value === 'Above' && - tradingEngine.current.episode.candle.max.value >= tradingEngine.current.position.stopLoss.value - ) || - ( - tradingEngine.current.position.stopLoss.stopLossPosition.value === 'Below' && - tradingEngine.current.episode.candle.min.value <= tradingEngine.current.position.stopLoss.value - ) - ) { - logger.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Stop Loss was hit.') - - tradingPositionModule.closingPosition('Stop Loss') - changeStageStatus('Close Stage', 'Opening') - changeStageStatus('Manage Stage', 'Closed') - announcementsModule.makeAnnoucements(strategy.closeStage) - return - } - - /* Take Profit condition: Here we verify if the Take Profit was hit or not. */ - if ( - ( - tradingEngine.current.position.takeProfit.takeProfitPosition.value === 'Below' && - tradingEngine.current.episode.candle.min.value <= tradingEngine.current.position.takeProfit.value - ) || - ( - tradingEngine.current.position.takeProfit.takeProfitPosition.value === 'Above' && - tradingEngine.current.episode.candle.max.value >= tradingEngine.current.position.takeProfit.value - ) - ) { - logger.write(MODULE_NAME, '[INFO] checkStopLossOrTakeProfitWasHit -> Take Profit was hit.') - - tradingPositionModule.closingPosition('Take Profit') - changeStageStatus('Close Stage', 'Opening') - changeStageStatus('Manage Stage', 'Closed') - announcementsModule.makeAnnoucements(strategy.closeStage) - return - } - return - } - } - } - } - - async function runCloseStage() { - - runWhenStatusIsOpening() - await runWhenStatusIsOpen() - - function runWhenStatusIsOpening() { - /* Opening Status Procedure */ - if (tradingEngine.current.strategyCloseStage.status.value === 'Opening') { - /* - This will happen only once, as soon as the Take Profit or Stop was hit. - */ - let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].closeStage - - /* Exit Position size and rate */ - tradingSystem.evalFormulas(tradingSystemStage, 'Initial Targets') - tradingPositionModule.initialTargets(tradingSystemStage, tradingEngine.current.strategyCloseStage) - - initializeStageTargetSize() - changeStageStatus('Close Stage', 'Open') - } - } - - async function runWhenStatusIsOpen() { - /* - The following code will run only when the Open Stage is closed. - The reason for that is that we need the final filled size of the Open Stage - to be known before we start placing orders at the Close Stage. - */ - if ( - tradingEngine.current.strategyCloseStage.status.value === 'Open' && - ( - tradingEngine.current.strategyOpenStage.status.value === 'Closed' || - tradingEngine.current.strategyOpenStage.status.value == tradingEngine.current.strategyOpenStage.status.config.initialValue - ) - ) { - /* - This will happen as long as the Close Stage is Open. - */ - let tradingSystemStage = tradingSystem.tradingStrategies[tradingEngine.current.strategy.index.value].closeStage - let tradingEngineStage = tradingEngine.current.strategyCloseStage - let executionNode = tradingSystemStage.closeExecution - - tradingSystem.evalConditions(tradingSystemStage, 'Close Execution') - tradingSystem.evalFormulas(tradingSystemStage, 'Close Execution') - - await tradingExecutionModule.runExecution( - executionNode, - tradingEngine.current.strategyCloseStage - ) - - checkIfStageNeedsToBeClosed(tradingEngineStage, tradingSystemStage, 'Close Stage') - } - - /* - Exit Position Validation: we need al the previous stages to be either closed - or at their initial default value. The last is becasue after Closed objects are - initialized to their defualts. - */ - if ( - ( - tradingEngine.current.strategyTriggerStage.status.value === 'Closed' || - tradingEngine.current.strategyTriggerStage.status.value === tradingEngine.current.strategyTriggerStage.status.config.initialValue - ) - && - ( - tradingEngine.current.strategyOpenStage.status.value === 'Closed' || - tradingEngine.current.strategyOpenStage.status.value === tradingEngine.current.strategyOpenStage.status.config.initialValue - ) - && - ( - tradingEngine.current.strategyManageStage.status.value === 'Closed' || - tradingEngine.current.strategyManageStage.status.value === tradingEngine.current.strategyManageStage.status.config.initialValue - ) - && - ( - tradingEngine.current.strategyCloseStage.status.value === 'Closed' - ) - ) { - - /* Closing Everything now. */ - closePositionAndStrategy() - } - } - - function initializeStageTargetSize() { - /* - Here we will transform the position size into targets for each asset of the stage. - */ - tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value = tradingEngine.current.position.positionBaseAsset.exitTargetSize.value - tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value = tradingEngine.current.position.positionQuotedAsset.exitTargetSize.value - - tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyCloseStage.stageBaseAsset.targetSize.value, 10) - tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value = global.PRECISE(tradingEngine.current.strategyCloseStage.stageQuotedAsset.targetSize.value, 10) - } - - function closePositionAndStrategy() { - /* Taking Position Snapshot */ - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.position === true) { - snapshotsModule.positionExit() - } - } - } - - /* Taking Strategy Snapshot */ - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (sessionParameters.snapshots !== undefined) { - if (sessionParameters.snapshots.config.strategy === true) { - snapshotsModule.strategyExit() - } - } - } - - /* Close the Position */ - tradingPositionModule.closePosition() - - /* Close the Strategy */ - tradingStrategyModule.closeStrategy('Position Closed') - - /* Distance to Events Updates */ - tradingEngine.current.episode.distanceToEvent.closePosition.value = 1 - tradingEngine.current.episode.distanceToEvent.triggerOff.value = 1 - - } - } - - function checkIfStageNeedsToBeClosed(tradingEngineStage, tradingSystemStage, stageName) { - /* - The Stage is closed when the fillSize + feesPaid reaches the targetSize. - - The Target Size is defined by the end user either in Base Asset or Quoted Asset. - Whatever the user chooses defines also the way we check if the Target was met. - Why? Because the counterparty target is estimated with the Target Rate and it - is not syncronized with the reality we later learn when the exchange tell us the - actual rate each of the orders where executed at. - - For the same reason that the user does not know exactly which is the rate the orders - will actually be filled, then we can not expect that the total filled will really - reach the target size, so we introduce a rounding factor so that when it is close - enough we will consider the target to have been reached. - */ - const ROUNDING_ERROR_CORRECTION_FACTOR = 1.001 - - switch (tradingEngineStage.stageDefinedIn.value) { - case 'Base Asset': { - if ( - ( - tradingEngineStage.stageBaseAsset.sizeFilled.value - ) - * ROUNDING_ERROR_CORRECTION_FACTOR - >= - tradingEngineStage.stageBaseAsset.targetSize.value - ) { - positionFilled() - } else { - checkCloseStageEvent(tradingSystemStage) - } - break - } - case 'Quoted Asset': { - if ( - ( - tradingEngineStage.stageQuotedAsset.sizeFilled.value - ) - * ROUNDING_ERROR_CORRECTION_FACTOR - >= - tradingEngineStage.stageQuotedAsset.targetSize.value - ) { - positionFilled() - } else { - checkCloseStageEvent(tradingSystemStage) - } - break - } - } - - function positionFilled() { - changeStageStatus(stageName, 'Closed', 'Position Size Filled') - } - - function checkCloseStageEvent(tradingSystemStage) { - /* Check the Close Stage Event */ - tradingSystem.evalConditions(tradingSystemStage, 'Close Stage Event') - if (checkStopStageEvent(tradingSystemStage) === true) { - changeStageStatus(stageName, 'Closing', 'Close Stage Event') - } - } - } - - function checkStopStageEvent(stage) { - /* Check the Close Stage Event. */ - let stopStageEvent = stage.stopStageEvent - if (stopStageEvent !== undefined) { - for (let k = 0; k < stopStageEvent.situations.length; k++) { - let situation = stopStageEvent.situations[k] - let passed - if (situation.conditions.length > 0) { - passed = true - } - - passed = tradingSystem.checkConditions(situation, passed) - - tradingSystem.values.push([situation.id, passed]) - if (passed) { - tradingSystem.highlights.push(situation.id) - tradingSystem.highlights.push(stopStageEvent.id) - tradingSystem.highlights.push(stage.id) - - announcementsModule.makeAnnoucements(stopStageEvent) - return true - } - } - } - } - - function changeStageStatus(stageName, newStatus, exitType) { - let stage - switch (stageName) { - case 'Trigger Stage': { - stage = tradingEngine.current.strategyTriggerStage - break - } - case 'Open Stage': { - stage = tradingEngine.current.strategyOpenStage - break - } - case 'Manage Stage': { - stage = tradingEngine.current.strategyManageStage - break - } - case 'Close Stage': { - stage = tradingEngine.current.strategyCloseStage - break - } - } - stage.status.value = newStatus - if (exitType !== undefined) { - stage.exitType.value = exitType - } - if (stage.status.value === 'Open') { - openStage(stage) - } - if (stage.status.value === 'Closed') { - closeStage(stage) - } - - /* - The way the begining and end of the Stages object works is as follows: - This object begins with the last cycle, that is the current cycle diplaced - backwards to the current candle. And it ends at the end of the last cycle. - During mantainance, we add the time frame of the candle, since we assume it - will survive the 2 cycles without the end being updated. If it closes, - then we update the end to the end of the last cycle, overrinding the - mantainance if needed. If we assume that in the same cycle there will be - no closing and opening of the same type of object, then there can be no - overlap. - */ - function openStage(stage) { - /* Recording the opening at the Trading Engine Data Structure */ - stage.begin.value = tradingEngine.current.episode.cycle.lastBegin.value - stage.end.value = tradingEngine.current.episode.cycle.lastEnd.value - stage.beginRate.value = tradingEngine.current.episode.candle.close.value - } - - function closeStage(stage) { - /* Recording the closing at the Trading Engine Data Structure */ - stage.end.value = tradingEngine.current.episode.cycle.lastEnd.value - stage.endRate.value = tradingEngine.current.episode.candle.close.value - } - } - - function updateEnds() { - /* - Note that we can not use the cycle here because this is executed via mantain - which in turn is executed before the first cycle for this candle is set. - */ - if (tradingEngine.current.strategyTriggerStage.status.value === 'Open') { - tradingEngine.current.strategyTriggerStage.end.value = tradingEngine.current.strategyTriggerStage.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.strategyTriggerStage.endRate.value = tradingEngine.current.episode.candle.close.value - } - if (tradingEngine.current.strategyOpenStage.status.value === 'Open') { - tradingEngine.current.strategyOpenStage.end.value = tradingEngine.current.strategyOpenStage.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.strategyOpenStage.endRate.value = tradingEngine.current.episode.candle.close.value - } - if (tradingEngine.current.strategyManageStage.status.value === 'Open') { - tradingEngine.current.strategyManageStage.end.value = tradingEngine.current.strategyManageStage.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.strategyManageStage.endRate.value = tradingEngine.current.episode.candle.close.value - } - if (tradingEngine.current.strategyCloseStage.status.value === 'Open') { - tradingEngine.current.strategyCloseStage.end.value = tradingEngine.current.strategyCloseStage.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.strategyCloseStage.endRate.value = tradingEngine.current.episode.candle.close.value - } - } - - function resetTradingEngineDataStructure() { - if (tradingEngine.current.strategyTriggerStage.status.value === 'Closed') { - resetStage(tradingEngine.current.strategyTriggerStage.status) - } - if (tradingEngine.current.strategyOpenStage.status.value === 'Closed') { - resetStage(tradingEngine.current.strategyOpenStage.status) - } - if (tradingEngine.current.strategyManageStage.status.value === 'Closed') { - resetStage(tradingEngine.current.strategyManageStage.status) - } - if (tradingEngine.current.strategyCloseStage.status.value === 'Closed') { - resetStage(tradingEngine.current.strategyTriggerStage) - resetStage(tradingEngine.current.strategyOpenStage) - resetStage(tradingEngine.current.strategyManageStage) - resetStage(tradingEngine.current.strategyCloseStage) - } - - function resetStage(stage) { - tradingEngineModule.initializeNode(stage) - } - } - - function updateCounters() { - - } - - function updateStatistics() { - - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStrategy.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStrategy.js deleted file mode 100644 index fbd170845..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingStrategy.js +++ /dev/null @@ -1,87 +0,0 @@ -exports.newTradingStrategy = function newTradingStrategy(bot, logger, tradingEngineModule) { - /* - This module packages all functions related to Strategies. - */ - const MODULE_NAME = 'Trading Strategy' - let thisObject = { - mantain: mantain, - reset: reset, - openStrategy: openStrategy, - closeStrategy: closeStrategy, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let sessionParameters - - return thisObject - - function initialize() { - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - } - - function finalize() { - tradingEngine = undefined - sessionParameters = undefined - } - - function mantain() { - updateCounters() - updateEnds() - } - - function reset() { - resetTradingEngineDataStructure() - } - - function openStrategy(index, situationName, strategyName) { - /* Starting begin and end */ - tradingEngine.current.strategy.begin.value = tradingEngine.current.episode.cycle.lastBegin.value - tradingEngine.current.strategy.end.value = tradingEngine.current.episode.cycle.lastEnd.value - - /* Recording the opening at the Trading Engine Data Structure */ - tradingEngine.current.strategy.status.value = 'Open' - tradingEngine.current.strategy.serialNumber.value = tradingEngine.current.episode.episodeCounters.strategies.value - tradingEngine.current.strategy.identifier.value = global.UNIQUE_ID() - tradingEngine.current.strategy.beginRate.value = tradingEngine.current.episode.candle.min.value - - tradingEngine.current.strategy.index.value = index - tradingEngine.current.strategy.situationName.value = situationName - tradingEngine.current.strategy.strategyName.value = strategyName - - /* Updating Episode Counters */ - tradingEngine.current.episode.episodeCounters.strategies.value++ - } - - function closeStrategy(exitType) { - tradingEngine.current.strategy.status.value = 'Closed' - tradingEngine.current.strategy.exitType.value = exitType - tradingEngine.current.strategy.end.value = tradingEngine.current.episode.cycle.lastEnd.value - tradingEngine.current.strategy.endRate.value = tradingEngine.current.episode.candle.min.value - /* - Now that the strategy is closed, it is the right time to move this strategy from current to last at the Trading Engine data structure. - */ - tradingEngineModule.cloneValues(tradingEngine.current.strategy, tradingEngine.last.strategy) - } - - function updateEnds() { - if (tradingEngine.current.strategy.status.value === 'Open') { - tradingEngine.current.strategy.end.value = tradingEngine.current.strategy.end.value + sessionParameters.timeFrame.config.value - tradingEngine.current.strategy.endRate.value = tradingEngine.current.episode.candle.close.value - } - } - - function resetTradingEngineDataStructure() { - if (tradingEngine.current.strategy.status.value === 'Closed') { - tradingEngineModule.initializeNode(tradingEngine.current.strategy) - } - } - - function updateCounters() { - if (tradingEngine.current.strategy.status.value === 'Open') { - tradingEngine.current.strategy.strategyCounters.periods.value++ - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSystem.js b/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSystem.js deleted file mode 100644 index ddafc6f33..000000000 --- a/Deprecated-Code/TaskServer/LowFrequencyTrading/TradingSystem.js +++ /dev/null @@ -1,313 +0,0 @@ -exports.newTradingSystem = function newTradingSystem(bot, logger, tradingEngineModule) { - /* - The Trading System is the user defined set of rules compliant with the Trading Protocol that - defines the trading logic to be applied during each cycle of the Simulation. - */ - const MODULE_NAME = 'Trading System' - let thisObject = { - mantain: mantain, - reset: reset, - run: run, - updateChart: updateChart, - initialize: initialize, - finalize: finalize - } - - let chart - let tradingSystem - let tradingEngine - let sessionParameters - let dynamicIndicators - - const TRADING_STAGES_MODULE = require('./TradingStages.js') - let tradingStagesModule = TRADING_STAGES_MODULE.newTradingStages(bot, logger, tradingEngineModule) - - - return thisObject - - function initialize() { - tradingSystem = bot.simulationState.tradingSystem - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.TRADING_SESSION.tradingParameters - - tradingSystem.conditions = new Map() - tradingSystem.formulas = new Map() - - tradingStagesModule.initialize() - - /* Adding Functions used elsewhere to Trading System Definition */ - tradingSystem.checkConditions = function (situation, passed) { - /* Given a Situation, we check if all children conditions are true or not */ - for (let m = 0; m < situation.conditions.length; m++) { - - let condition = situation.conditions[m] - let value = false - if (tradingSystem.conditions.get(condition.id) !== undefined) { - value = tradingSystem.conditions.get(condition.id) - } - if (value === true) { - tradingSystem.highlights.push(condition.id) - } - else { - passed = false - } - tradingSystem.values.push([condition.id, value]) - } - return passed - } - - tradingSystem.evalConditions = function (startingNode, descendentOfNodeType) { - evalNode(startingNode, 'Conditions', descendentOfNodeType) - } - - tradingSystem.evalFormulas = function (startingNode, descendentOfNodeType) { - evalNode(startingNode, 'Formulas', descendentOfNodeType) - } - - function isItInside(elementWithTimestamp, elementWithBeginEnd) { - /* - The function is to allow in Conditions and Formulas to easily know when an element with timestamp (like the ones of single files) are inside the time range - of an element with a time range, like a candle. - */ - if (elementWithTimestamp.timestamp >= elementWithBeginEnd.begin && elementWithTimestamp.timestamp <= elementWithBeginEnd.end) { - return true - } else { - return false - } - } - } - - function finalize() { - tradingStagesModule.finalize() - tradingStagesModule = undefined - - chart = undefined - - tradingSystem.conditions = undefined - tradingSystem.formulas = undefined - - tradingSystem.highlights = undefined - tradingSystem.errors = undefined - tradingSystem.warnings = undefined - tradingSystem.infos = undefined - tradingSystem.values = undefined - tradingSystem.status = undefined - tradingSystem.progress = undefined - tradingSystem.running = undefined - - tradingSystem = undefined - tradingEngine = undefined - sessionParameters = undefined - } - - function mantain() { - tradingStagesModule.mantain() - } - - function reset() { - tradingStagesModule.reset() - - tradingSystem.highlights = [] - tradingSystem.errors = [] - tradingSystem.warnings = [] - tradingSystem.infos = [] - tradingSystem.values = [] - tradingSystem.status = [] - tradingSystem.progress = [] - tradingSystem.running = [] - tradingSystem.announcements = [] - } - - function updateChart(pChart) { - chart = pChart // We need chat to be a local object accessible from conditions and formulas. - tradingStagesModule.updateChart(pChart) - } - - function buildDynamicIndicators() { - if (tradingSystem.dynamicIndicators !== undefined) { - dynamicIndicators = {} - /* Eval Dynamic Indicators */ - tradingSystem.evalFormulas(tradingSystem.dynamicIndicators, 'Indicator Function') - - for (let i = 0; i < tradingSystem.dynamicIndicators.indicatorFunctions.length; i++) { - let indicatorFunction = tradingSystem.dynamicIndicators.indicatorFunctions[i] - if (indicatorFunction.formula === undefined) { return } - if (indicatorFunction.config.codeName === undefined) { return } - dynamicIndicators[indicatorFunction.config.codeName] = tradingSystem.formulas.get(indicatorFunction.formula.id) - } - } - } - - async function run() { - try { - /* Dynamic Indicators */ - buildDynamicIndicators() - - /* Run the Trigger Stage */ - tradingStagesModule.runTriggerStage() - - /* Run the Open Stage */ - await tradingStagesModule.runOpenStage() - - /* Run the Manage Stage */ - tradingStagesModule.runManageStage() - - /* Run the Close Stage */ - await tradingStagesModule.runCloseStage() - - tradingStagesModule.cycleBasedStatistics() - - } catch (err) { - /* - If an error ocurred during execution, it was alreeady logged and - included at the errors array. That means we need to do nothing here, - just prevent the execution to be halted for not handling exceptions. - */ - if (typeof err === 'string' || err instanceof String) { - logger.write(MODULE_NAME, '[ERROR] runExecution -> err = ' + err) - } - if (err.stack !== undefined) { - logger.write(MODULE_NAME, '[ERROR] runExecution -> err = ' + err.stack) - } - } - } - - function evalNode(node, evaluating, descendentOfNodeType, isDescendent) { - if (node === undefined) { return } - - /* Verify if this node is decendent of the specified node type */ - if (isDescendent !== true) { - if (node.type === descendentOfNodeType) { - isDescendent = true - } - } - - /* Here we check if there is a codition to be evaluated */ - if (node.type === 'Condition' && evaluating === 'Conditions') { - /* We will eval this condition */ - if (isDescendent === true) { - evalCondition(node) - } - } - - /* Here we check if there is a formula to be evaluated */ - if ((node.type === 'Formula' || node.type === 'Announcement Formula') && evaluating === 'Formulas') { - if (node.code !== undefined) { - /* We will eval this formula */ - if (isDescendent === true) { - evalFormula(node) - } - } - } - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - evalNode(node[property.name], evaluating, descendentOfNodeType, isDescendent) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - evalNode(nodePropertyArray[m], evaluating, descendentOfNodeType, isDescendent) - } - } - break - } - } - } - } - } - - function evalCondition(node) { - let value - let error - /* - The code can be at the condition node if it was done with the Conditions Editor, or it can also be - at a Javascript Code node. If there is a Javascript object we will give it preference and take the code - from there. Otherwise we will take the code from the Condition node. - */ - let code = node.code - if (node.javascriptCode !== undefined) { - if (node.javascriptCode.code !== undefined) { - code = node.javascriptCode.code - } - } - - try { - logger.write(MODULE_NAME, '[INFO] evalCondition -> ' + node.name + ' -> code = ' + code) - value = eval(code) - } catch (err) { - /* - One possible error is that the conditions references a .previous that is undefined. This - will not be considered an error. - */ - value = false - error = err.message - } - - tradingSystem.conditions.set(node.id, value) - - if (value === true) { - tradingSystem.highlights.push(node.id) - } - if (error !== undefined) { - tradingSystem.errors.push([node.id, error]) - } - if (value !== undefined) { - tradingSystem.values.push([node.id, value]) - } - - logger.write(MODULE_NAME, '[INFO] evalCondition -> value = ' + value) - logger.write(MODULE_NAME, '[INFO] evalCondition -> error = ' + error) - } - - function evalFormula(node) { - let value - let error - - try { - logger.write(MODULE_NAME, '[INFO] evalFormula -> ' + node.name + ' -> code = ' + node.code) - value = eval(node.code) - } catch (err) { - /* - One possible error is that the formula references a .previous that is undefined. This - will not be considered an error. - */ - value = 0 - error = err.message - } - - if (error !== undefined) { - tradingSystem.errors.push([node.id, error]) - logger.write(MODULE_NAME, '[INFO] evalFormula -> error = ' + error) - return - } - if (value !== undefined) { - if (node.type === 'Formula' && isNaN(value)) { - tradingSystem.errors.push([node.id, 'Formula needs to return a number.']) - return - } - - tradingSystem.values.push([node.id, value]) - tradingSystem.formulas.set(node.id, value) - } - - logger.write(MODULE_NAME, '[INFO] evalFormula -> value = ' + value) - } -} - diff --git a/Deprecated-Code/TaskServer/MultiPeriodDaily.js b/Deprecated-Code/TaskServer/MultiPeriodDaily.js deleted file mode 100644 index 4d0e4b922..000000000 --- a/Deprecated-Code/TaskServer/MultiPeriodDaily.js +++ /dev/null @@ -1,570 +0,0 @@ -exports.newMultiPeriodDaily = function newMultiPeriodDaily(bot, logger, UTILITIES, FILE_STORAGE) { - const FULL_LOG = true; - const MODULE_NAME = "Multi Period Daily"; - const GMT_SECONDS = ':00.000 GMT+0000'; - - thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(logger) - let fileStorage = FILE_STORAGE.newFileStorage(logger) - - let statusDependencies; - let dataDependenciesModule; - let dataFiles = new Map; - let indicatorOutputModule; - - let bootstrappingTheProcess = false - - let processConfig; - let beginingOfMarket - - return thisObject; - - function initialize(pProcessConfig, pStatusDependencies, pDataDependencies, callBackFunction) { - logger.fileName = MODULE_NAME; - logger.initialize() - - statusDependencies = pStatusDependencies; - dataDependenciesModule = pDataDependencies; - processConfig = pProcessConfig; - - let INDICATOR_OUTPUT_MODULE = require("./IndicatorOutput") - - indicatorOutputModule = INDICATOR_OUTPUT_MODULE.newIndicatorOutput(bot, logger, UTILITIES, FILE_STORAGE) - indicatorOutputModule.initialize(callBackFunction) - } - - function finalize() { - dataFiles = undefined - statusDependencies = undefined - dataDependenciesModule = undefined - indicatorOutputModule = undefined - fileStorage = undefined - processConfig = undefined - thisObject = undefined - } - - function start(callBackFunction) { - try { - let market = bot.market; - - /* Context Variables */ - let contextVariables = { - lastFile: undefined, // Datetime of the last file files sucessfully produced by this process. - dateBeginOfMarket: undefined, // Datetime of the first trade file in the whole market history. - dateEndOfMarket: undefined // Datetime of the last file available to be used as an input of this process. - }; - - let previousDay; // Holds the date of the previous day relative to the processing date. - let interExecutionMemoryArray; - - getContextVariables() - - function getContextVariables() { - try { - let thisReport; - let statusReport; - /* - We look first for the bot who knows the begining of the market in order to get when the market starts. - */ - statusReport = statusDependencies.reportsByMainUtility.get("Market Starting Point") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Market Starting Point -> Status Report does not exist or Market Starting Point not defined. Retrying Later. ") - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ") - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - thisReport = statusReport.file; - - if (thisReport.beginingOfMarket === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> thisReport.beginingOfMarket === undefined ") - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> It is too early too run this process since the trade history of the market is not there yet.") - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency does not exist." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message) - callBackFunction(customOK) - return - } - - contextVariables.dateBeginOfMarket = new Date(thisReport.beginingOfMarket.year + "-" + thisReport.beginingOfMarket.month + "-" + thisReport.beginingOfMarket.days + " " + thisReport.beginingOfMarket.hours + ":" + thisReport.beginingOfMarket.minutes + GMT_SECONDS) - /* - Here we get the status report from the bot who knows which is the end of the market. - */ - statusReport = statusDependencies.reportsByMainUtility.get("Market Ending Point") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Market Ending Point -> Status Report does not exist or Market Ending Point not defined. Retrying Later. ") - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ") - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - thisReport = statusReport.file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> thisReport.lastFile === undefined") - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message) - callBackFunction(customOK) - return - } - - contextVariables.dateEndOfMarket = new Date(thisReport.lastFile.valueOf()) - - /* Finally we get our own Status Report. */ - statusReport = statusDependencies.reportsByMainUtility.get("Self Reference") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Self Reference -> Status Report does not exist or Self Reference not defined or badly configured. Check that at the Status Dependency you have chosen Self Reference at the config. Retrying Later. ") - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process.") - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - thisReport = statusReport.file; - - if (thisReport.lastFile !== undefined) { - - beginingOfMarket = new Date(thisReport.beginingOfMarket) - - if (beginingOfMarket.valueOf() !== contextVariables.dateBeginOfMarket.valueOf()) { // Reset Mechanism for Begining of the Market - logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated.") - - beginingOfMarket = new Date(contextVariables.dateBeginOfMarket.valueOf()) - startFromBegining() - return - } - - if (bot.hasTheBotJustStarted === true && processConfig.framework.startDate !== undefined && processConfig.framework.startDate.resumeExecution === false) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining because bot has just started and resume execution was true.") } - startFromBegining() - return - } - - contextVariables.lastFile = new Date(thisReport.lastFile) - interExecutionMemoryArray = thisReport.interExecutionMemoryArray; - - processTimeFrames() - } else { - - /* - In the case when there is no status report, we assume like the last processed file is the one on the date of Begining of Market. - */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining of the market because own status report not found or lastFile was undefined.") } - beginingOfMarket = new Date(contextVariables.dateBeginOfMarket.valueOf()) - startFromBegining() - } - - function startFromBegining() { - contextVariables.lastFile = new Date(contextVariables.dateBeginOfMarket.getUTCFullYear() + "-" + (contextVariables.dateBeginOfMarket.getUTCMonth() + 1) + "-" + contextVariables.dateBeginOfMarket.getUTCDate() + " " + "00:00" + GMT_SECONDS) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> startFromBegining -> contextVariables.lastFile = " + contextVariables.lastFile) } - /* - The first time the process is running is the right time to create the data structure that is going to be shared across different executions. - This data structure has one object per each timeFrame. - */ - interExecutionMemoryArray = [] - /* - Also, we will remember that we are bootstrapping the process, this will allow us, to advanceTime if necesary. - It can happen that a process depends on data from another process that does not produce a file during the first day, or even more days, - in that situation we want the process not to just wait for that data that will never arrive, but to advance time until it finds valid data. - */ - bootstrappingTheProcess = true - - for (let i = 0; i < global.dailyFilePeriods.length; i++) { - let emptyObject = {}; - interExecutionMemoryArray.push(emptyObject) - } - - processTimeFrames() - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack) - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. ") - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)) - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } - - function processTimeFrames() { - let n; - let botNeverRan = true; - - bot.multiPeriodDailyProcessDatetime = new Date(contextVariables.lastFile.valueOf() - ONE_DAY_IN_MILISECONDS) // Go back one day to start well when we advance time at the begining of the loop. - let fromDate = new Date(bot.multiPeriodDailyProcessDatetime.valueOf()) - let lastDate = new Date() - - advanceTime() - - function advanceTime() { - bot.multiPeriodDailyProcessDatetime = new Date(bot.multiPeriodDailyProcessDatetime.valueOf() + ONE_DAY_IN_MILISECONDS) - previousDay = new Date(bot.multiPeriodDailyProcessDatetime.valueOf() - ONE_DAY_IN_MILISECONDS) - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFrames -> advanceTime -> bot.multiPeriodDailyProcessDatetime = " + bot.multiPeriodDailyProcessDatetime) } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFrames -> advanceTime -> previousDay = " + previousDay) } - - /* Validation that we are not going past the head of the market. */ - if (bot.multiPeriodDailyProcessDatetime.valueOf() > contextVariables.dateEndOfMarket.valueOf()) { - - const logText = "Head of the market found @ " + previousDay.getUTCFullYear() + "/" + (previousDay.getUTCMonth() + 1) + "/" + previousDay.getUTCDate() + "."; - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFrames -> advanceTime -> " + logText) } - - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - - } - - /* Telling the world we are alive and doing well */ - let currentDateString = bot.multiPeriodDailyProcessDatetime.getUTCFullYear() + '-' + utilities.pad(bot.multiPeriodDailyProcessDatetime.getUTCMonth() + 1, 2) + '-' + utilities.pad(bot.multiPeriodDailyProcessDatetime.getUTCDate(), 2) - let currentDate = new Date(bot.multiPeriodDailyProcessDatetime) - let percentage = global.getPercentage(fromDate, currentDate, lastDate) - bot.processHeartBeat(currentDateString, percentage) - - if (global.areEqualDates(currentDate, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, currentDate, percentage) - } - checkStopTaskGracefully() - } - function checkStopTaskGracefully() { - /* Validation that we dont need to stop. */ - if (global.STOP_TASK_GRACEFULLY === true) { - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - timeFramesLoop() - } - - function timeFramesLoop() { - /* - We will iterate through all posible timeFrames. - */ - n = 0 // loop Variable representing each possible period as defined at the timeFrames array. - timeFramesLoopBody() - } - - function timeFramesLoopBody() { - - const timeFrame = global.dailyFilePeriods[n][0] - const timeFrameLabel = global.dailyFilePeriods[n][1] - - /* Check Time Frames Filter */ - if (bot.dailyTimeFrames !== undefined) { - if (bot.dailyTimeFrames.includes(timeFrameLabel) === false) { - /* We are not going to process this Time Frame */ - timeFramesControlLoop() - return - } - } - - if (processConfig.framework.validPeriods !== undefined) { - let validPeriod = false; - for (let i = 0; i < processConfig.framework.validPeriods.length; i++) { - let period = processConfig.framework.validPeriods[i] - if (period === timeFrameLabel) { validPeriod = true } - } - if (validPeriod === false) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFrames -> timeFramesLoopBody -> Discarding period for not being listed as a valid period. -> timeFrameLabel = " + timeFrameLabel) } - timeFramesControlLoop() - return - } - } - let dependencyIndex = 0 - dataFiles = new Map() - - dependencyLoopBody() - - function dependencyLoopBody() { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex] - if (dependency === undefined) { - - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> You need to add at least one Data Dependency to the process Multi Period Daily. Aborting process.") - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex] - let previousFile - let currentFile - - if (bot.multiPeriodDailyProcessDatetime.valueOf() > contextVariables.dateBeginOfMarket.valueOf()) { - getPreviousFile() - } else { - previousFile = [] - getCurrentFile() - } - - function getPreviousFile() { - let dateForPath = previousDay.getUTCFullYear() + '/' + utilities.pad(previousDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(previousDay.getUTCDate(), 2) - let filePath - if (dependency.referenceParent.config.codeName === "Multi-Period-Daily") { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath; - } else { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + dateForPath; - } - let fileName = "Data.json" - - datasetModule.getTextFile(filePath, fileName, onFileReceived) - - function onFileReceived(err, text) { - if ((err.message === "File does not exist." && botNeverRan === true) || err.code === 'The specified key does not exist.') { - /* - Sometimes one of the dependencies of an indicator for some reasons are not calculated from the begining of the market. - When that happens we can not find those files. What we do in this situation is to move the time fordward until we can find - all the dependencies and the first run of the bot is successful. - - After that, we will not accept more missing files on any of the dependencies, and if any is missing we will abort the processing. - */ - logger.write(MODULE_NAME, "[WARN] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getPreviousFile -> onFileReceived -> Skipping day because file " + filePath + "/" + fileName + " was not found.") - - advanceTime() - return - } - - if ((err.result === "Fail Because" && err.message === "File does not exist.") || err.code === 'The specified key does not exist.') { - - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getPreviousFile -> onFileReceived -> err = " + err.stack) - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getPreviousFile -> onFileReceived -> err = " + err.stack) - callBackFunction(err) - return - } - - previousFile = JSON.parse(text) - getCurrentFile() - } - - } - - function getCurrentFile() { - let dateForPath = bot.multiPeriodDailyProcessDatetime.getUTCFullYear() + '/' + utilities.pad(bot.multiPeriodDailyProcessDatetime.getUTCMonth() + 1, 2) + '/' + utilities.pad(bot.multiPeriodDailyProcessDatetime.getUTCDate(), 2) - let filePath - if (dependency.referenceParent.config.codeName === "Multi-Period-Daily") { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath; - } else { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + dateForPath; - } - let fileName = "Data.json"; - - datasetModule.getTextFile(filePath, fileName, onFileReceived) - - function onFileReceived(err, text) { - if ((err.result === "Fail Because" && err.message === "File does not exist.") || err.code === 'The specified key does not exist.') { - if (bootstrappingTheProcess === true) { - /* - In the special situation where we are running this process for the first time (no status report found), - we will consider the possibility that a depanant process does not produce a file during the first day of the market, - or even more than one day. That is why we are going to advance time here. - */ - advanceTime() - return - } - - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getCurrentFile -> onFileReceived -> err = " + err.code) - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getCurrentFile -> onFileReceived -> filePath = " + filePath) - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getCurrentFile -> onFileReceived -> fileName = " + fileName) - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getCurrentFile -> Not OK -> onFileReceived -> err = " + err.code) - callBackFunction(err) - return - } - - currentFile = JSON.parse(text) - let dataFile = previousFile.concat(currentFile) - dataFiles.set(dependency.id, dataFile) - dependencyControlLoop() - } - } - } - - function dependencyControlLoop() { - dependencyIndex++; - if (dependencyIndex < dataDependenciesModule.nodeArray.length) { - dependencyLoopBody() - } else { - generateOutput() - } - - function generateOutput() { - - indicatorOutputModule.start( - dataFiles, - timeFrame, - timeFrameLabel, - bot.multiPeriodDailyProcessDatetime, - interExecutionMemoryArray[n], - onOutputGenerated) - - function onOutputGenerated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - callBackFunction(err) - return - } - botNeverRan = false; - timeFramesControlLoop() - } - } - } - } - - function timeFramesControlLoop() { - n++ - if (n < global.dailyFilePeriods.length) { - timeFramesLoopBody() - } else { - n = 0; - writeDataRanges(onWritten) - - function onWritten(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> controlLoop -> onWritten -> err = " + err.stack) - callBackFunction(err) - return - } - writeStatusReport(bot.multiPeriodDailyProcessDatetime, advanceTime) - } - } - } - } - - function writeDataRanges(callBack) { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY (bot.processNode.referenceParent.processOutput, 'Output Dataset') - let outputDatasetIndex = -1; - controlLoop() - - function productLoopBody() { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - writeDataRange(contextVariables.dateBeginOfMarket, bot.multiPeriodDailyProcessDatetime, productCodeName, controlLoop) - } - - function controlLoop() { - outputDatasetIndex++ - if (outputDatasetIndex < outputDatasets.length) { - productLoopBody() - } else { - callBack(global.DEFAULT_OK_RESPONSE) - } - } - } - - function writeDataRange(pBegin, pEnd, productCodeName, callBack) { - let dataRange = { - begin: pBegin.valueOf(), - end: pEnd.valueOf() + ONE_DAY_IN_MILISECONDS - }; - let fileContent = JSON.stringify(dataRange) - let fileName = '/Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + productCodeName + "/" + bot.process + fileName; - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated) - - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeDataRange -> onFileCreated -> err = " + err.stack) - callBack(err) - return - } - let key = bot.dataMine + "-" + bot.codeName + "-" + productCodeName + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - dateRange: dataRange - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Data Range Updated', event) - writeTimeFramesFile(productCodeName, callBack) - } - } - - function writeTimeFramesFile(productCodeName, callBack) { - - let timeFramesArray = [] - for (let n = 0; n < global.dailyFilePeriods.length; n++) { - let timeFrameLabel = global.dailyFilePeriods[n][1] - - /* Check Time Frames Filter */ - if (bot.dailyTimeFrames !== undefined) { - if (bot.dailyTimeFrames.includes(timeFrameLabel) === true) { - timeFramesArray.push(timeFrameLabel) - } - } else { - timeFramesArray.push(timeFrameLabel) - } - } - - let fileContent = JSON.stringify(timeFramesArray) - let fileName = '/Time.Frames.json'; - let filePath = bot.filePathRoot + "/Output/" + productCodeName + "/" + bot.process + fileName; - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated) - - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTimeFramesFiles -> onFileCreated -> err = " + err.stack) - callBack(err) - return - } - callBack(global.DEFAULT_OK_RESPONSE) - } - } - - function writeStatusReport(lastFileDate, callBack) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + "Multi-Period-Daily" - let thisReport = statusDependencies.statusReports.get(reportKey) - - thisReport.file.lastExecution = bot.currentDaytime; - thisReport.file.lastFile = lastFileDate; - thisReport.file.interExecutionMemoryArray = interExecutionMemoryArray; - thisReport.file.beginingOfMarket = beginingOfMarket.toUTCString() - if (bot.dailyTimeFrames !== undefined) { - thisReport.file.timeFrames = bot.dailyTimeFrames - } - thisReport.save(callBack) - - bot.hasTheBotJustStarted = false; - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } -}; diff --git a/Deprecated-Code/TaskServer/MultiPeriodMarket.js b/Deprecated-Code/TaskServer/MultiPeriodMarket.js deleted file mode 100644 index 76ba55b28..000000000 --- a/Deprecated-Code/TaskServer/MultiPeriodMarket.js +++ /dev/null @@ -1,221 +0,0 @@ -exports.newMultiPeriodMarket = function newMultiPeriodMarket(bot, logger, UTILITIES, FILE_STORAGE) { - const MODULE_NAME = "Multi Period Market"; - thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(logger) - let fileStorage = FILE_STORAGE.newFileStorage(logger) - - let statusDependencies; - let dataDependenciesModule; - let dataFiles = new Map() - let indicatorOutputModule; - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, pStatusDependencies, pDataDependencies, callBackFunction) { - logger.fileName = MODULE_NAME; - logger.initialize() - - statusDependencies = pStatusDependencies; - dataDependenciesModule = pDataDependencies; - processConfig = pProcessConfig; - - let INDICATOR_OUTPUT_MODULE = require("./IndicatorOutput") - - indicatorOutputModule = INDICATOR_OUTPUT_MODULE.newIndicatorOutput(bot, logger, UTILITIES, FILE_STORAGE) - indicatorOutputModule.initialize(callBackFunction) - } - - function finalize() { - fileStorage = undefined - dataFiles = undefined - statusDependencies = undefined - dataDependenciesModule = undefined - indicatorOutputModule = undefined - processConfig = undefined - thisObject = undefined - } - - function start(callBackFunction) { - try { - processTimeFrames() - - function processTimeFrames() { - let n; - timeFramesLoop() - - function timeFramesLoop() { - /* We will iterate through all posible timeFrames.*/ - n = 0 // loop Variable representing each possible period as defined at the timeFrames array. - timeFramesLoopBody() - } - - function timeFramesLoopBody() { - const timeFrame = global.marketFilesPeriods[n][0] - const timeFrameLabel = global.marketFilesPeriods[n][1] - - /* Check Time Frames Filter */ - if (bot.marketTimeFrames !== undefined) { - if (bot.marketTimeFrames.includes(timeFrameLabel) === false) { - /* We are not going to process this Time Frame */ - timeFramesControlLoop() - return - } - } - - let dependencyIndex = 0; - dataFiles = new Map; - - dependencyLoopBody() - - function dependencyLoopBody() { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex] - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex] - - getFile() - - function getFile() { - let fileName = "Data.json"; - let filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel; - datasetModule.getTextFile(filePath, fileName, onFileReceived) - - function onFileReceived(err, text) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> processTimeFrames -> timeFramesLoopBody -> dependencyLoopBody -> getFile -> onFileReceived -> err = " + err.stack) - callBackFunction(err) - return; - } - - let dataFile = JSON.parse(text) - dataFiles.set(dependency.id, dataFile) - - dependencyControlLoop() - } - } - } - - function dependencyControlLoop() { - dependencyIndex++; - if (dependencyIndex < dataDependenciesModule.nodeArray.length) { - dependencyLoopBody() - } else { - generateOutput() - } - - function generateOutput() { - indicatorOutputModule.start( - dataFiles, - timeFrame, - timeFrameLabel, - undefined, - undefined, - onOutputGenerated) - - function onOutputGenerated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - callBackFunction(err) - return; - } - timeFramesControlLoop() - } - } - } - } - - function timeFramesControlLoop() { - n++; - if (n < global.marketFilesPeriods.length) { - timeFramesLoopBody() - } else { - writeTimeFramesFiles(onTimeFrameFilesWritten) - function onTimeFrameFilesWritten() { - writeStatusReport(callBackFunction) - } - } - } - } - - function writeTimeFramesFiles(callBack) { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY (bot.processNode.referenceParent.processOutput, 'Output Dataset') - let outputDatasetIndex = -1; - controlLoop() - - function productLoopBody() { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - writeTimeFramesFile(productCodeName, controlLoop) - } - - function controlLoop() { - outputDatasetIndex++ - if (outputDatasetIndex < outputDatasets.length) { - productLoopBody() - } else { - callBack() - } - } - } - - function writeTimeFramesFile(productCodeName, callBack) { - - let timeFramesArray = [] - for (let n = 0; n < global.marketFilesPeriods.length; n++) { - let timeFrameLabel = global.marketFilesPeriods[n][1] - - /* Check Time Frames Filter */ - if (bot.marketTimeFrames !== undefined) { - if (bot.marketTimeFrames.includes(timeFrameLabel) === true) { - timeFramesArray.push(timeFrameLabel) - } - } else { - timeFramesArray.push(timeFrameLabel) - } - } - - let fileContent = JSON.stringify(timeFramesArray) - let fileName = '/Time.Frames.json'; - let filePath = bot.filePathRoot + "/Output/" + productCodeName + "/" + bot.process + fileName; - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated) - - function onFileCreated(err) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> writeTimeFramesFile -> onFileCreated -> err = " + err.stack) - callBack(err) - return - } - callBack() - } - } - - function writeStatusReport(callBack) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + "Multi-Period-Market" - let thisReport = statusDependencies.statusReports.get(reportKey) - - thisReport.file.lastExecution = bot.processDatetime; - if (bot.marketTimeFrames !== undefined) { - thisReport.file.timeFrames = bot.marketTimeFrames - } - thisReport.save(callBack) - - if (global.areEqualDates(bot.processDatetime, new Date()) === false) { - logger.newInternalLoop(bot.codeName, bot.process, bot.processDatetime) - } - - /* Telling the world we are alive and doing well */ - let currentDateString = bot.processDatetime.getUTCFullYear() + '-' + utilities.pad(bot.processDatetime.getUTCMonth() + 1, 2) + '-' + utilities.pad(bot.processDatetime.getUTCDate(), 2) - let currentDate = new Date(bot.processDatetime) - let lastDate = new Date() - bot.processHeartBeat(currentDateString, global.getPercentage(currentDate, currentDate, lastDate)) - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack) - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } - } -} diff --git a/Deprecated-Code/TaskServer/ProcessExecutionEvents.js b/Deprecated-Code/TaskServer/ProcessExecutionEvents.js deleted file mode 100644 index ae74beee2..000000000 --- a/Deprecated-Code/TaskServer/ProcessExecutionEvents.js +++ /dev/null @@ -1,283 +0,0 @@ -exports.newProcessExecutionEvents = function newProcessExecutionEvents(BOT, logger) { - /* - Here we manage the process execution events. This allow us to emit events - when the process starts and finishes. Also to wait for a dependent event - of another process. - */ - const MODULE_NAME = "Process Execution Events"; - logger.fileName = MODULE_NAME - - let bot = BOT; - - let thisObject = { - networkNode: undefined, - initialize: initialize, - finalize: finalize, - start: start, - finish: finish - }; - - let processThisDependsOn; // This is the process this process needs to wait for it to finishes in order to start. - let currentProcessKey - - let EVENT_SERVER_CLIENT = require('./EventServerClient.js'); - let eventServerClient - - return thisObject; - - function initialize(processConfig, callBackFunction) { - try { - let name = 'Not Depends on any Process' - logger.fileName = MODULE_NAME + "." + name; - - if (bot.processNode.referenceParent === undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - logger.write(MODULE_NAME, "[ERROR] initialize -> Initialization Failed because the Process Instance needs to have a Reference Parent."); - return - } - - let market = bot.market.baseAsset + '/' + bot.market.quotedAsset - currentProcessKey = bot.processNode.referenceParent.name + "-" + bot.processNode.referenceParent.type + "-" + bot.processNode.referenceParent.id + "-" + bot.exchange + "-" + market - - /* - A process can depend for its own execution on another process to finish, and - this can be achieved in two different ways. The first one is by referencing - the Execution Started Event node from a Process Definition node to a Execution - Ended Event node of another Process Definition. The second way is when there is - a Execution Started Event node at a Process Instance. This allows the user to - override the definition created by the Data Mine for an specific task. - */ - - /* - Here we check if we can find this relationship at the Data Mine level. - */ - if (bot.processNode.referenceParent.executionStartedEvent !== undefined) { - if (bot.processNode.referenceParent.executionStartedEvent.referenceParent !== undefined) { - if (bot.processNode.referenceParent.executionStartedEvent.referenceParent.parentNode !== undefined) { - processThisDependsOn = bot.processNode.referenceParent.executionStartedEvent.referenceParent.parentNode - - name = processThisDependsOn.name - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> " + currentProcessKey + " based on the Data Mine depends on " + name); } - } - } - } - - /* - Here we check if at the task level if there is an overriding configuration. - */ - if (bot.processNode.executionStartedEvent !== undefined) { - if (bot.processNode.executionStartedEvent.referenceParent !== undefined) { - if (bot.processNode.executionStartedEvent.referenceParent.parentNode !== undefined) { - processThisDependsOn = bot.processNode.executionStartedEvent.referenceParent.parentNode - - name = processThisDependsOn.name - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> " + currentProcessKey + " based on the User's Task depends on " + name); } - } - } - } - - if (processThisDependsOn !== undefined) { - - /* We need to remember that this process waits for another process in order to start. */ - processConfig.waitsForExecutionFinishedEvent = true - - /* We need to find at which network node is running the process that we need to hear from when it finished. */ - let network = global.TASK_NETWORK - - /* - Notice that the first task that matches the dependency is going to be considered. - This means that if the same task, with the same process, pointing to the same - process definition in the same data mine, with the same exchange and market - configured, is at two different network nodes at the same time, the current task - is going to depend on the first one found, not necesarily the one running at the - same network node. If you need to control witch task specifically to depend on - and need to exactly the same task to exist, you should split the network in two - different networks, each one with unique tasks so as to avoid confussion. - */ - for (let i = 0; i < network.networkNodes.length; i++) { - let networkNode = network.networkNodes[i] - if (networkNode.dataMining !== undefined) { - for (let j = 0; j < networkNode.dataMining.exchangeDataTasks.length; j++) { - let exchangeTasks = networkNode.dataMining.exchangeDataTasks[j] - for (let p = 0; p < exchangeTasks.marketDataTasks.length; p++) { - let marketTasks = exchangeTasks.marketDataTasks[p] - if (marketTasks.referenceParent === undefined) { continue } - if (marketTasks.referenceParent.id !== global.MARKET_NODE.id) { continue } - for (let q = 0; q < marketTasks.dataMineTasks.length; q++) { - let mineTasks = marketTasks.dataMineTasks[q] - for (let k = 0; k < mineTasks.taskManagers.length; k++) { - let taskManager = mineTasks.taskManagers[k] - for (let m = 0; m < taskManager.tasks.length; m++) { - let task = taskManager.tasks[m] - if (task.bot !== undefined) { - for (let n = 0; n < task.bot.processes.length; n++) { - let process = task.bot.processes[n] - if (process.referenceParent !== undefined) { - let processDefinition = process.referenceParent - if (processThisDependsOn.id === processDefinition.id) { - /* - We found where the task that runs the process definition - we are waiting for is located on the network. - */ - thisObject.networkNode = networkNode - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { - logger.write(MODULE_NAME, - "[INFO] initialize -> Connecting to Websockets Server " + networkNode.name + - " -> host = " + networkNode.config.host + - ' -> port = ' + networkNode.config.webSocketsPort + '.'); - } - - eventServerClient = EVENT_SERVER_CLIENT.newEventsServerClient(networkNode.config.host, networkNode.config.webSocketsPort) - eventServerClient.initialize(onConnected) - - function onConnected() { - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { - logger.write(MODULE_NAME, "[INFO] initialize -> Connected to Websockets Server " + networkNode.name + - " -> host = " + networkNode.config.host + - ' -> port = ' + networkNode.config.webSocketsPort + '.'); - } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - return - } - } - } - } - } - } - } - } - } - } - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - logger.write(MODULE_NAME, "[ERROR] initialize -> Initialization Failed because we could not find where the task that runs the Process Definition we are waiting for is located within the network. Check the logs for more info."); - return - } - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - if (eventServerClient !== undefined) { - eventServerClient.finalize() - eventServerClient = undefined - } - - processThisDependsOn = undefined - currentProcessKey = undefined - thisObject.networkNode = undefined - bot = undefined - thisObject = undefined - } - - function start(callBackFunction) { - - try { - - if (processThisDependsOn !== undefined) { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> waitForDependantProcess -> Entering Code Block."); } - - /* This forces this process to wait until the process that this one depends on, emits its event signaling that the process execution has finished. */ - - let extraCallerId = '-' + Math.trunc(Math.random() * 10000) + '-' - - let market = bot.market.baseAsset + '/' + bot.market.quotedAsset - let key = processThisDependsOn.name + "-" + processThisDependsOn.type + "-" + processThisDependsOn.id + "-" + bot.exchange + "-" + market - let callerId = bot.dataMine + "-" + bot.codeName + "-" + bot.process + extraCallerId - - let subscriptionId - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> waitForDependantProcess -> started listening to Process Execution Finished. "); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> waitForDependantProcess -> key = " + key); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> waitForDependantProcess -> callerId = " + callerId); } - - eventServerClient.listenToEvent(key, 'Process Execution Finished', undefined, callerId, responseCallBack, eventsCallBack) - - bot.processHeartBeat(undefined, undefined, "Waiting for " + thisObject.networkNode.name + "->" + processThisDependsOn.parentNode.parentNode.name + "->" + processThisDependsOn.parentNode.config.codeName + "->" + processThisDependsOn.config.codeName) - - function responseCallBack(message) { - if (message.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> responseCallBack -> message = " + JSON.stringify(message)) - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } else { - subscriptionId = message.eventSubscriptionId - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> waitForDependantProcess -> subscriptionId = " + subscriptionId); } - } - } - - function eventsCallBack(message) { - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> eventsCallBack -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> eventsCallBack -> message = " + JSON.stringify(message)); } - - /* We continue the normal flow after we learn the dependent process has finished its execution. */ - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> eventsCallBack -> stopListening to Process Execution Finished. "); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> eventsCallBack -> subscriptionId = " + subscriptionId); } - eventServerClient.stopListening(key, 'Process Execution Finished', subscriptionId) - - if (message.event.err.result === global.DEFAULT_OK_RESPONSE.result) { - /* We emit our own event that the process started. */ - let event = { - err: global.DEFAULT_OK_RESPONSE - } - global.EVENT_SERVER_CLIENT.createEventHandler(currentProcessKey, 'Process Execution Started') - global.EVENT_SERVER_CLIENT.raiseEvent(currentProcessKey, 'Process Execution Started', event) - - bot.processHeartBeat(undefined, undefined, "Running...") - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> eventsCallBack -> " + currentProcessKey + " Process Execution Started because " + key + " Finished."); } - } - - callBackFunction(message.event.err); - } - } else { - /* In this case, the Process does not depends on a process which needs to wait for. */ - /* We emit our own event that the process started. */ - let event = { - err: global.DEFAULT_OK_RESPONSE - } - global.EVENT_SERVER_CLIENT.createEventHandler(currentProcessKey, 'Process Execution Started') - global.EVENT_SERVER_CLIENT.raiseEvent(currentProcessKey, 'Process Execution Started', event) - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] start -> " + currentProcessKey + " Process Execution Started "); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finish(callBackFunction) { - - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] finish -> Entering function."); } - - let event = { - err: global.DEFAULT_OK_RESPONSE - } - - global.EVENT_SERVER_CLIENT.createEventHandler(currentProcessKey, 'Process Execution Finished') - global.EVENT_SERVER_CLIENT.raiseEvent(currentProcessKey, 'Process Execution Finished', event) - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] finish -> " + currentProcessKey + " Process Execution Finished "); } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] finish -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -}; diff --git a/Deprecated-Code/TaskServer/ProcessOutput.js b/Deprecated-Code/TaskServer/ProcessOutput.js deleted file mode 100644 index c4751f557..000000000 --- a/Deprecated-Code/TaskServer/ProcessOutput.js +++ /dev/null @@ -1,184 +0,0 @@ -exports.newProcessOutput = function newProcessOutput(BOT, logger) { - - /* - Here we emit the events that signals that a Dataset was updated. - */ - - const MODULE_NAME = "Process Output"; - - let bot = BOT; - - let thisObject = { - raiseEvents: raiseEvents, - asyncRaiseEvents: asyncRaiseEvents - }; - - return thisObject; - - function raiseEvents(lastFile, timeFrames, callBackFunction) { - try { - /* We will reaise the events for the datasets impacted by the process that just finished. */ - - if (bot.processNode.referenceParent.processOutput !== undefined) { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - - for (let j = 0; j < outputDatasets.length; j++) { - let outputDataset = outputDatasets[j] - - let botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Indicator Bot') - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Trading Bot') - } - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Sensor Bot') - } - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Learning Bot') - } - - /* Some validations to verify that everything is in place. */ - if (outputDataset.referenceParent !== undefined) { - if (outputDataset.referenceParent.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Dataset Definition not defined. Dataset Definition = " + JSON.stringify(outputDataset.referenceParent)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (outputDataset.referenceParent.parentNode !== undefined) { - if (outputDataset.referenceParent.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Product not defined. Product = " + JSON.stringify(outputDataset.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (botNode !== undefined) { - if (botNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Bot not defined. Bot = " + JSON.stringify(botNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - if (botNode.parentNode !== undefined) { - if (botNode.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Data Mine not defined. Data Mine = " + JSON.stringify(botNode.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Bot not attached to a Data Mine or Trading Mine. Bot = " + JSON.stringify(botNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Product not attached to a Bot. Product = " + JSON.stringify(outputDataset.referenceParent.parentNode)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Dataset Definition not attached to a Product. Dataset Definition = " + JSON.stringify(outputDataset.referenceParent)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Output Dataset with no reference to a Dataset Definition. Output Dataset = " + JSON.stringify(outputDataset)); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - /* All good, lets emit the event. */ - - let dataMine = botNode.parentNode.config.codeName - let botName = botNode.config.codeName - let product = outputDataset.referenceParent.parentNode.config.codeName - let dataset = outputDataset.referenceParent.config.codeName - - let key = dataMine + "-" + botName + "-" + product + "-" + dataset + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - lastFile: lastFile, - timeFrames: timeFrames - } - global.EVENT_SERVER_CLIENT.createEventHandler(key, 'Dataset Updated') - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Dataset Updated', event) - } - } - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function asyncRaiseEvents(lastFile, timeFrames) { - - if (bot.processNode.referenceParent.processOutput !== undefined) { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - - for (let j = 0; j < outputDatasets.length; j++) { - let outputDataset = outputDatasets[j] - - let botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Indicator Bot') - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Trading Bot') - } - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Sensor Bot') - } - if (botNode === undefined) { - botNode = global.FIND_NODE_IN_NODE_MESH(outputDataset, 'Learning Bot') - } - - /* Some validations to verify that everything is in place. */ - if (outputDataset.referenceParent !== undefined) { - if (outputDataset.referenceParent.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Dataset Definition not defined. Dataset Definition = " + JSON.stringify(outputDataset.referenceParent)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - if (outputDataset.referenceParent.parentNode !== undefined) { - if (outputDataset.referenceParent.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Product not defined. Product = " + JSON.stringify(outputDataset.referenceParent.parentNode)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - if (botNode !== undefined) { - if (botNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Bot not defined. Bot = " + JSON.stringify(botNode)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - if (botNode.parentNode !== undefined) { - if (botNode.parentNode.config.codeName === undefined) { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> codeName at Mine not defined. Mine = " + JSON.stringify(botNode.parentNode)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Bot not attached to a Data Mine | Trading Mine | Learning Mine. Bot = " + JSON.stringify(botNode)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Product not attached to a Bot. Product = " + JSON.stringify(outputDataset.referenceParent.parentNode)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Dataset Definition not attached to a Product. Dataset Definition = " + JSON.stringify(outputDataset.referenceParent)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - } else { - logger.write(MODULE_NAME, "[ERROR] raiseEvents -> Output Dataset with no reference to a Dataset Definition. Output Dataset = " + JSON.stringify(outputDataset)); - throw (global.DEFAULT_FAIL_RESPONSE); - } - - /* All good, lets emit the event. */ - - let dataMine = botNode.parentNode.config.codeName - let botName = botNode.config.codeName - let product = outputDataset.referenceParent.parentNode.config.codeName - let dataset = outputDataset.referenceParent.config.codeName - - let key = dataMine + "-" + botName + "-" + product + "-" + dataset + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - lastFile: lastFile, - timeFrames: timeFrames - } - global.EVENT_SERVER_CLIENT.createEventHandler(key, 'Dataset Updated') - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Dataset Updated', event) - } - } - } -}; diff --git a/Deprecated-Code/TaskServer/README.md b/Deprecated-Code/TaskServer/README.md deleted file mode 100644 index 84271b1ec..000000000 --- a/Deprecated-Code/TaskServer/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Task Server - -This repo is one of the repositories built into Superalgos. For more information [read the docs](https://docs.superalgos.org/) or check the [Readme](https://github.com/Superalgos/Superalgos/) at the main repository of the project. - -## Copyright and License Notice - -© Copyright 2020 Superalgos. Please see the [License](/LICENSE) for information on how you can use this software. - -## Disclaimer - -THE SOFTWARE AND ITS ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL SUPERALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SOFTWARE, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -# Maintainer - -[![Luis-Fernando-Molina](https://avatars1.githubusercontent.com/u/9479367?s=130&v=4)](https://github.com/Luis-Fernando-Molina) | ----| -[Luis-Fernando-Molina](https://github.com/Luis-Fernando-Molina) | diff --git a/Deprecated-Code/TaskServer/ReinforcementLearning/LearningBot.js b/Deprecated-Code/TaskServer/ReinforcementLearning/LearningBot.js deleted file mode 100644 index ad887979f..000000000 --- a/Deprecated-Code/TaskServer/ReinforcementLearning/LearningBot.js +++ /dev/null @@ -1,685 +0,0 @@ -exports.newLearningBot = function newLearningBot(bot, parentLogger) { - - const MODULE_NAME = "Learning Bot"; - const FULL_LOG = true; - - const TRADING_PROCESS_MODULE = require(global.ROOT_DIR + '/LowFrequencyTrading/MachineLearningProcess.js'); - const FILE_STORAGE = require('./FileStorage.js'); - const SESSION = require(global.ROOT_DIR + 'TradingSession'); - - let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - let session = SESSION.newLearningSession(bot, parentLogger) - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - - let nextLoopTimeoutHandle; - - let thisObject = { - initialize: initialize, - run: run - }; - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - /* This function is exactly the same in the 3 modules representing the 2 different bot types loops. */ - try { - processConfig = pProcessConfig; - if (bot.definedByUI === true) { - /* The code of the bot is defined at the UI. No need to load a file with the code. */ - session.initialize(processConfig, callBackFunction) - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function run(callBackFunction) { - try { - /* Some initial values*/ - let fixedTimeLoopIntervalHandle; - bot.STOP_SESSION = true; - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] run -> Stopping the Session now. ') } - - /* Heartbeats sent to the UI */ - bot.processHeartBeat = processHeartBeat - - loop(); - - function loop() { - try { - processHeartBeat(undefined, undefined, "Running...") - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - /* For each loop we want to create a new log file. */ - if (logger !== undefined) { - logger.finalize() - } - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set(MODULE_NAME, logger) - logger.bot = bot; - logger.initialize(); - - bot.loopCounter++; - bot.loopStartTime = new Date().valueOf(); - - let nextWaitTime; - - /* We tell the UI that we are running. */ - processHeartBeat(undefined, undefined, "Running...") - - /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); - const DATA_DEPENDENCIES = require(global.ROOT_DIR + 'DataDependencies'); - const DATA_SET = require(global.ROOT_DIR + 'DataSet'); - const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); - - /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ - bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. - - /* High level log entry */ - console.log(new Date().toISOString() + " " + pad(bot.exchange, 20) + " " + pad(bot.market.baseAsset + '/' + bot.market.quotedAsset, 10) + " " + pad(bot.codeName, 30) + " " + pad(bot.process, 30) - + " Main Loop # " + pad(Number(bot.loopCounter), 8) + " " + bot.processNode.session.type + " " + bot.processNode.session.name) - - /* Checking if we need to need to emit any event */ - if (bot.SESSION_STATUS === 'Idle' && bot.STOP_SESSION === false) { - bot.SESSION_STATUS = 'Running' - } - - if (bot.SESSION_STATUS === 'Running' && bot.STOP_SESSION === true) { - bot.SESSION_STATUS = 'Stopped' - } - - global.EMIT_SESSION_STATUS (bot.SESSION_STATUS, bot.sessionKey) - - /* Checking if we should process this loop or not.*/ - if (bot.STOP_SESSION === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> Waiting for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run."); } - - console.log(new Date().toISOString() + " " + pad(bot.codeName, 20) + " " + pad(bot.process, 30) - + " Waiting for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run. "); - - nextWaitTime = 'Waiting for Session'; - loopControl(nextWaitTime); - return - } - - /* We will prepare first the infraestructure needed for the bot to run. There are 3 modules we need to sucessfullly initialize first. */ - - let processExecutionEvents - let userBot; - let processFramework; - let statusDependencies; - let dataDependencies; - - initializeProcessExecutionEvents(); - - function initializeProcessExecutionEvents() { - try { - processExecutionEvents = PROCESS_EXECUTION_EVENTS.newProcessExecutionEvents(bot, logger) - processExecutionEvents.initialize(processConfig, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Execution finished well."); - startProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessExecutionEvents() { - try { - processExecutionEvents.start(onStarted); - - function onStarted(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessExecutionEvents -> onStarted -> Execution finished well."); - - if (global.STOP_TASK_GRACEFULLY === true) { - loopControl() - return - } - - initializeStatusDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessExecutionEvents -> onStarted -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeStatusDependencies() { - try { - statusDependencies = STATUS_DEPENDENCIES.newStatusDependencies(bot, logger, STATUS_REPORT, UTILITIES, PROCESS_OUTPUT); - statusDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeStatusDependencies -> onInizialized -> Execution finished well."); - initializeDataDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeStatusDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeDataDependencies() { - try { - dataDependencies = DATA_DEPENDENCIES.newDataDependencies(bot, logger, DATA_SET); - dataDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well."); } - switch (processConfig.framework.name) { - case 'Low-Frequency-Trading-Process': { - processFramework = TRADING_PROCESS_MODULE.newMachineLearningProcess(bot, logger, UTILITIES); - intitializeProcessFramework(); - break; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework not Supported."); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework Name = " + processConfig.framework.name); - global.unexpectedError = err.message - processStopped() - return - } - } - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeDataDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function intitializeProcessFramework() { - try { - processFramework.initialize(processConfig, statusDependencies, dataDependencies, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> intitializeProcessFramework -> onInizialized -> Execution finished well."); - startProcessFramework(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> intitializeProcessFramework -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessFramework() { - try { - processFramework.start(onFinished); - - function onFinished(err) { - try { - processFramework.finalize() - processFramework = undefined - dataDependencies.finalize() - dataDependencies = undefined - statusDependencies.finalize() - statusDependencies = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessFramework -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - finishProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - case "Dependency does not exist.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency does not exist. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - case "Dependency not ready.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency not ready. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function finishProcessExecutionEvents() { - try { - processExecutionEvents.finish(onFinished); - - function onFinished(err) { - try { - processExecutionEvents.finalize() - processExecutionEvents = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> finishProcessExecutionEvents -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> finishProcessExecutionEvents -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function loopControl(nextWaitTime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> nextWaitTime = " + nextWaitTime); } - - /* We show we reached the end of the loop. */ - processHeartBeat(undefined, undefined, "Running...") - - /* Here we check if we must stop the loop gracefully. */ - shallWeStop(onStop, onContinue); - - function onStop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } - - if (global.WRITE_LOGS_TO_FILES === 'true') { - logger.persist(); - } - - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Stopped') - processStopped() - return; - } - - function onContinue() { - /* Indicator bots are going to be executed after a configured period of time after the last execution ended. This is to avoid overlapping executions. */ - switch (nextWaitTime) { - case 'Waiting for Session': { - let waitTime = processConfig.sessionRunWaitTime - nextLoopTimeoutHandle = setTimeout(loop, waitTime); - let waitingTime = waitTime / 1000 / 60 - let label = 'minute/s' - if (waitingTime < 1) { - waitingTime = waitTime / 1000 - label = 'seconds' - } - processHeartBeat(undefined, undefined, "Waiting " + waitingTime + " " + label + " for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run. ") - logger.persist(); - } - break - case 'Normal': { - let waitTime - if (processConfig.waitsForExecutionFinishedEvent === true) { - waitTime = 0 - } else { - switch (bot.LEARNING_SESSION.type) { - case 'Live Trading Session': { - waitTime = bot.LEARNING_SESSION.learningParameters.timeFrame.config.value - break - } - case 'Fordward Tessting Session': { - waitTime = bot.LEARNING_SESSION.learningParameters.timeFrame.config.value - break - } - case 'Paper Trading Session': { - waitTime = bot.LEARNING_SESSION.learningParameters.timeFrame.config.value - break - } - case 'Backtesting Session': { - waitTime = 0 - break - } - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (waitTime / 1000 / 60) + " minute/s."); } - nextLoopTimeoutHandle = setTimeout(loop, waitTime); - let waitingTime = waitTime / 1000 / 60 - let label = 'minute/s' - if (waitingTime < 1) { - waitingTime = waitTime / 1000 - label = 'seconds' - } - processHeartBeat(undefined, undefined, "Waiting " + waitingTime + " " + label + " for next execution.") - logger.persist(); - } - break; - case 'Retry': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); - processHeartBeat(undefined, undefined, "Trying to recover from some problem. Waiting " + processConfig.retryWaitTime / 1000 + " seconds for next execution.") - logger.persist(); - } - break; - case 'Sleep': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.sleepWaitTime / 60000 + " minutes for next execution.") - logger.persist(); - } - break; - case 'Coma': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.comaWaitTime / 3600000 + " hours for next execution.") - logger.persist(); - } - break; - } - } - } - - function shallWeStop(stopCallBack, continueCallBack) { - try { - /* IMPORTANT: This function is exactly the same on the 3 modules. */ - if (!global.STOP_TASK_GRACEFULLY) { - continueCallBack(); - } else { - stopCallBack(); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function processHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Heartbeat', event) - } - - function processStopped() { - if (global.unexpectedError !== undefined) { - global.PROCESS_ERROR(bot.processKey, undefined, "An unexpected error caused the Process to stop.") - } else { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Stopped') - } - sessionStopped() - logger.persist(); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - if (global.unexpectedError !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } else { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - } - - function sessionStopped() { - if (bot.SESSION_STATUS === 'Running') { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.sessionKey, 'Stopped') - bot.SESSION_STATUS = 'Stopped' - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.stack); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/ReinforcementLearning/LearningProcess.js b/Deprecated-Code/TaskServer/ReinforcementLearning/LearningProcess.js deleted file mode 100644 index 9cb44f672..000000000 --- a/Deprecated-Code/TaskServer/ReinforcementLearning/LearningProcess.js +++ /dev/null @@ -1,786 +0,0 @@ -exports.newLearningProcess = function newLearningProcess(bot, logger, UTILITIES) { - /* - This Module will load all the process data dependencies from files and send them downstream. - After execution, will save the time range and status report of the process. - */ - const FULL_LOG = true; - const MODULE_NAME = "Learning Process"; - const GMT_SECONDS = ':00.000 GMT+0000'; - - thisObject = { - initialize: initialize, - finalize: finalize, - start: start - }; - - let utilities = UTILITIES.newCloudUtilities(logger); - - let statusDependencies; - let dataDependenciesModule; - let dataFiles = new Map(); - let multiPeriodDataFiles = new Map(); - - const FILE_STORAGE = require('../FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(logger); - - const MARKOV_DECISION_PROCESS_MODULE = require('./MarkovDecisionProcess.js') - let markovDecisionProcessModule = MARKOV_DECISION_PROCESS_MODULE.newMarkovDecisionProcess(bot, logger) - - let ALGORITHM_MODULE = require("./Algorithm") - let algorithmModule = ALGORITHM_MODULE.newTradingOutput(bot, logger, markovDecisionProcessModule, UTILITIES, FILE_STORAGE) - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, pStatusDependencies, pDataDependencies, callBackFunction) { - try { - logger.fileName = MODULE_NAME - logger.initialize() - - statusDependencies = pStatusDependencies - dataDependenciesModule = pDataDependencies - processConfig = pProcessConfig - - algorithmModule.initialize() - - callBackFunction(global.DEFAULT_OK_RESPONSE) - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - - markovDecisionProcessModule.finalize() - markovDecisionProcessModule = undefined - - algorithmModule.finalize() - algorithmModule = undefined - - dataFiles = undefined - multiPeriodDataFiles = undefined - statusDependencies = undefined - dataDependenciesModule = undefined - fileStorage = undefined - processConfig = undefined - thisObject = undefined - } - - async function start(callBackFunction) { - try { - let currentTimeFrame - let currentTimeFrameLabel - - /* Context Variables */ - let contextVariables = { - lastFile: undefined, // Datetime of the last file files sucessfully produced by this process. - dateBeginOfMarket: undefined, // Datetime of the first trade file in the whole market history. - dateEndOfMarket: undefined // Datetime of the last file available to be used as an input of this process. - }; - - getContextVariables() - - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - /* - Here is where the Trading Engine and Trading Systems received are moved to the simulation state. - */ - bot.simulationState.tradingEngine = bot.TRADING_ENGINE - bot.simulationState.tradingSystem = bot.TRADING_SYSTEM - } - - /* We set up the Trading Engine Module. */ - markovDecisionProcessModule.initialize() - - /* Initializing the Trading Process Date */ - if (bot.FIRST_EXECUTION === true && bot.RESUME === false) { - /* - This funcion is going to be called many times by the Trading Bot Loop. - Only during the first execution and when the User is not resuming the execution - of a stopped session / task; we are going to initialize the Process Date Time. - This variable tell us which day we are standing at, specially while working - with Daily Files. From this Date is that we are going to load the Daily Files. - */ - bot.simulationState.tradingEngine.current.episode.processDate.value = global.REMOVE_TIME(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime).valueOf() - } - - /* - This is the Date that is going to be used across the execution of this Trading Process. - We need this because it has a different life cycle than the processData stored at the - Trading Engine data structure. This date has to remain the same during the whole execution - of the Trading Process until the end, inclusind the writting of Data Ranges and Status Reports. - The processDate of the Trading Engine data structure on the other hand can be changed during - the simulation loop, once we discover that all candles from a certain date have benn processed. - Here is the point where we sync one and the other. - */ - let LearningProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) - await processSingleFiles() - - if (await processMarketFiles() === false) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be run') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - This is the Data Structure used at the Simulation with all indicator data. - We start creating it right here. - */ - let chart = {} - /* - Here we check if we need to get Daily Files or not. As an optimization, when - we are running on a Time Frame of 1hs or above, we are not going to load - dependencies on Daily Files. The way we recognize that is by checking if - we alreaady set a value to currentTimeFrame. We are also not going to loop - through days if we are processing market files. - */ - if (currentTimeFrame) { - /* We are processing Market Files */ - /* - With all the indicators data files loaded, we will build the chart object - data structure that will be used in user-defied conditions and formulas. - */ - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waking up') - buildCharts(chart) - - if (checkThereAreCandles(chart) === true) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Running') - await generateOutput(chart) - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Saving') - await writeProcessFiles() - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Sleeping') - } else { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be up to date. No candles found at.') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - - } else { - /* We are processing Daily Files */ - do { - global.EMIT_SESSION_STATUS(bot.TRADING_SESSION_STATUS, bot.TRADING_SESSIONKey) - /* - We update the Trading Process Date with the date calculated at the simulation. - We will use this date to load indicator and output files. After that we will - use it to save Output Files and later the Data Ranges. This is the point where - the date calculated by the Simulation is applied at the Trading Process Level. - */ - LearningProcessDate = global.REMOVE_TIME(bot.simulationState.tradingEngine.current.episode.processDate.value) - - if (checkStopTaskGracefully() === false) { break } - if (checkStopProcessing() === false) { break } - - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waking up') - if (await processDailyFiles() === false) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be run') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - With all the indicators data files loaded, we will build the chart object - data structure that will be used in user-defied conditions and formulas. - */ - buildCharts(chart) - /* - The process of generating the output includes the trading simulation. - */ - if (checkThereAreCandles(chart) === true) { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Running') - await generateOutput(chart) - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Saving') - await writeProcessFiles() - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Sleeping') - } else { - bot.TRADING_SESSIONHeartBeat(undefined, undefined, 'Waiting for Data Mining to be up to date') - callBackFunction(global.DEFAULT_RETRY_RESPONSE) - return - } - /* - If for any reason the session was stopped, we will break this loop and exit the process. - */ - if (bot.STOP_SESSION === true) { break } - /* - When we get to the end of the market, we need to break this process loop in order - to let time pass, new information be collected from the exchange, new data built - into indicators, and eventually a new execution of this process. - */ - if (checkStopHeadOfTheMarket() === false) { break } - - } - while (true) - } - - checkIfSessionMustStop() - /* - Everything worked as expected. We return an OK code and wait for - the Bot Loop to call us again later. - */ - callBackFunction(global.DEFAULT_OK_RESPONSE) - - function checkThereAreCandles(chart) { - let sessionParameters = bot.TRADING_SESSION.tradingParameters - let propertyName = 'at' + sessionParameters.timeFrame.config.label.replace('-', '') - let candles = chart[propertyName].candles - - if (candles.length === 0) { - return false - } else { - return true - } - } - - function getContextVariables() { - try { - let thisReport; - let statusReport; - - /* We are going to use the start date as beging of market date. */ - contextVariables.dateBeginOfMarket = global.REMOVE_TIME(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime) - /* - Here we get the status report from the bot who knows which is the end of the market. - */ - statusReport = statusDependencies.reportsByMainUtility.get("Market Ending Point") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - thisReport = statusReport.file; - - if (thisReport.lastFile === undefined) { - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Undefined Last File. -> thisReport = " + JSON.stringify(thisReport)); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Dependency not ready." - } - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> customOK = " + customOK.message); - callBackFunction(customOK); - return - } - - contextVariables.dateEndOfMarket = new Date(thisReport.lastFile.valueOf()); - - /* Finally we get our own Status Report. */ - statusReport = statusDependencies.reportsByMainUtility.get("Self Reference") - - if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month. - logger.write(MODULE_NAME, "[WARN] start -> getContextVariables -> Status Report does not exist. Retrying Later. "); - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - if (statusReport.status === "Status Report is corrupt.") { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> Can not continue because self dependecy Status Report is corrupt. Aborting Process."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - thisReport = statusReport.file; - bot.simulationState = thisReport.simulationState; - if (bot.simulationState === undefined) { bot.simulationState = {} } // This should happen only when there is no status report - - if (thisReport.lastFile !== undefined) { - if (bot.RESUME !== true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining because bot has just started and resume execution was true."); } - startFromBegining(); - return - } - contextVariables.lastFile = new Date(thisReport.lastFile); - return - - } else { - /* - We are here becuse either: - 1. There is no status report - 2. There is no Last File (this happens on Market Files) - */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> Starting from the begining of the market because own status report not found or lastFile was undefined."); } - startFromBegining(); - return - } - - function startFromBegining() { - contextVariables.lastFile = new Date(contextVariables.dateBeginOfMarket.getUTCFullYear() + "-" + (contextVariables.dateBeginOfMarket.getUTCMonth() + 1) + "-" + contextVariables.dateBeginOfMarket.getUTCDate() + " " + "00:00" + GMT_SECONDS); - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> startFromBegining -> contextVariables.lastFile = " + contextVariables.lastFile); } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] start -> getContextVariables -> err = " + err.stack); - if (err.message === "Cannot read property 'file' of undefined") { - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Check the bot configuration to see if all of its statusDependencies declarations are correct. "); - logger.write(MODULE_NAME, "[HINT] start -> getContextVariables -> Dependencies loaded -> keys = " + JSON.stringify(statusDependencies.keys)); - } - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - async function processSingleFiles() { - dataFiles = new Map(); - - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (datasetModule.node.config.codeName !== "Single-File") { - continue - } - - if (dataDependenciesModule.isItADepenency('atAnyTimeFrame', datasetModule.node.parentNode.config.singularVariableName) !== true) { - continue - } - - let fileName = "Data.json"; - let filePath = datasetModule.node.parentNode.config.codeName + '/' + datasetModule.node.config.codeName; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - dataFiles.set(dependency.id, dataFile); - } - - let mapKey = "Single Files" - multiPeriodDataFiles.set(mapKey, dataFiles) - } - - async function processMarketFiles() { - /* - We do market files first since if the simulation is run on daily files, there will - be a loop to get each of those files and we do not need that loop to reload market files. - - We will iterate through all posible timeFrames. - */ - for (let n = 0; n < global.marketFilesPeriods.length; n++) { - const timeFrame = global.marketFilesPeriods[n][0]; - const timeFrameLabel = global.marketFilesPeriods[n][1]; - - dataFiles = new Map(); - - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel) { - currentTimeFrame = global.marketFilesPeriods[n][0]; - currentTimeFrameLabel = global.marketFilesPeriods[n][1]; - } - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (dependency.referenceParent.config.codeName !== "Multi-Period-Market") { - continue - } - - if (dataDependenciesModule.isItADepenency(timeFrameLabel, datasetModule.node.parentNode.config.singularVariableName) !== true) { - if (!(bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel && datasetModule.node.parentNode.config.pluralVariableName === 'candles')) { - continue - } - } - - let fileName = "Data.json"; - let filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.message === 'File does not exist.') { - return false - } - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - let trimmedDataFile = trimDataFile(dataFile, datasetModule.node.parentNode.record) - dataFiles.set(dependency.id, trimmedDataFile); - - function trimDataFile(dataFile, recordDefinition) { - /* - Here we will discard all the records in a file that are outside of the current time range. - We will include the las element previous to the begining of the time range. This is needed - because during the simulation, the current period is not the open one, but the previous to - the open, and if we do not include the previous to the initial datetime there will be no - current objects at the begining of the simulation for many time frames. - */ - let beginIndex - let endIndex - let result = [] - for (let i = 0; i < recordDefinition.properties.length; i++) { - let property = recordDefinition.properties[i] - if (property.config.codeName === 'begin') { - beginIndex = i - } - if (property.config.codeName === 'end') { - endIndex = i - } - } - for (let i = 0; i < dataFile.length; i++) { - let dataRecord = dataFile[i] - let begin = dataRecord[beginIndex] - let end = dataRecord[endIndex] - if (end + timeFrame < bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime - 1) { continue } // /1 because we need the previous closed element - if (begin > bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime) { continue } - result.push(dataRecord) - } - return result - } - } - - let mapKey = global.marketFilesPeriods[n][1]; - multiPeriodDataFiles.set(mapKey, dataFiles) - } - return true - } - - async function processDailyFiles() { - /* Telling the world we are alive and doing well and which date we are processing right now. */ - let processingDateString = LearningProcessDate.getUTCFullYear() + '-' + utilities.pad(LearningProcessDate.getUTCMonth() + 1, 2) + '-' + utilities.pad(LearningProcessDate.getUTCDate(), 2); - bot.processHeartBeat(processingDateString, undefined, "Running...") - - /* - We will iterate through all posible timeFrames. - */ - for (let n = 0; n < global.dailyFilePeriods.length; n++) { - const timeFrame = global.dailyFilePeriods[n][0]; - const timeFrameLabel = global.dailyFilePeriods[n][1]; - - if (processConfig.framework.validtimeFrames !== undefined) { - let validPeriod = false; - for (let i = 0; i < processConfig.framework.validtimeFrames.length; i++) { - let period = processConfig.framework.validtimeFrames[i]; - if (period === timeFrameLabel) { validPeriod = true } - } - if (validPeriod === false) { - continue - } - } - - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel) { - currentTimeFrame = global.dailyFilePeriods[n][0]; - currentTimeFrameLabel = global.dailyFilePeriods[n][1]; - } - - dataFiles = new Map(); - - /* - We will iterate through all dependencies, in order to load the - files that later will end up at the chart data structure. - */ - for (let dependencyIndex = 0; dependencyIndex < dataDependenciesModule.nodeArray.length; dependencyIndex++) { - let dependency = dataDependenciesModule.nodeArray[dependencyIndex]; - let datasetModule = dataDependenciesModule.dataSetsModulesArray[dependencyIndex]; - - if (dependency.referenceParent.config.codeName !== "Multi-Period-Daily") { - continue - } - - if (dataDependenciesModule.isItADepenency(timeFrameLabel, datasetModule.node.parentNode.config.singularVariableName) !== true) { - if (!(bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === timeFrameLabel && datasetModule.node.parentNode.config.pluralVariableName === 'candles')) { - continue - } - } - - let dateForPath = LearningProcessDate.getUTCFullYear() + '/' + utilities.pad(LearningProcessDate.getUTCMonth() + 1, 2) + '/' + utilities.pad(LearningProcessDate.getUTCDate(), 2); - let filePath - if (dependency.referenceParent.config.codeName === "Multi-Period-Daily") { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + timeFrameLabel + "/" + dateForPath; - } else { - filePath = dependency.referenceParent.parentNode.config.codeName + '/' + dependency.referenceParent.config.codeName + "/" + dateForPath; - } - let fileName = "Data.json"; - - /* We cut the async calls via callBacks at this point, so as to have a clearer code upstream */ - let response = await asyncGetDatasetFile(datasetModule, filePath, fileName) - - if (response.err.message === 'File does not exist.') { - return false - } - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - let dataFile = JSON.parse(response.text); - dataFiles.set(dependency.id, dataFile); - } - - let mapKey = global.dailyFilePeriods[n][1]; - multiPeriodDataFiles.set(mapKey, dataFiles) - } - return true - } - - function checkStopHeadOfTheMarket() { - /* - We need to check if we have reached the head of the market in order to know - when to break the Daily Files Process loop and give time for a new candles / - indicators to be built and continue the processing once this process is called - again. - */ - if (bot.simulationState.tradingEngine.current.episode.headOfTheMarket.value === true) { - return false - } - } - - function checkStopTaskGracefully() { - /* Validation that we dont need to stop. */ - if (global.STOP_TASK_GRACEFULLY === true) { - return false - } - } - - function checkStopProcessing() { - /* Validation that we dont need to stop. */ - if (bot.STOP_SESSION === true) { - return false - } - } - - function buildCharts(chart) { - const COMMONS = require('../Commons.js') - let commons = COMMONS.newCommons(bot, logger, UTILITIES, FILE_STORAGE) - - let mainDependency = {} - - /* The first phase here is about checking that we have everything we need at the definition level. */ - let dataDependencies = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processDependencies, 'Data Dependency') - /* - We will filter ourt declared dependencies that are not present in the workspace. - This will allow the user to have less Data Mines loaded at the workspace - that the ones that a Trading Mine depends on. - */ - dataDependencies = global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY(dataDependencies) - - if (commons.validateDataDependencies(dataDependencies, callBackFunction) !== true) { return } - - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - if (commons.validateOutputDatasets(outputDatasets, callBackFunction) !== true) { return } - - /* The second phase is about transforming the inputs into a format that can be used to apply the user defined code. */ - for (let j = 0; j < global.marketFilesPeriods.length; j++) { - let timeFrameLabel = marketFilesPeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(timeFrameLabel) - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'at' + timeFrameLabel.replace('-', '') - chart[propertyName] = products - } - } - - for (let j = 0; j < global.dailyFilePeriods.length; j++) { - let timeFrameLabel = global.dailyFilePeriods[j][1] - let dataFiles = multiPeriodDataFiles.get(timeFrameLabel) - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'at' + timeFrameLabel.replace('-', '') - chart[propertyName] = products - } - } - - /* Single Files */ - let dataFiles = multiPeriodDataFiles.get('Single Files') - let products = {} - - if (dataFiles !== undefined) { - commons.inflateDatafiles(dataFiles, dataDependencies, products, mainDependency, currentTimeFrame) - - let propertyName = 'atAnyTimeFrame' - chart[propertyName] = products - } - } - - async function generateOutput(chart) { - await algorithmModule.start( - chart, - currentTimeFrame, - currentTimeFrameLabel, - LearningProcessDate - ) - - /* - From here on, all other loops executions wont be the first execution and also - we will consider that it is not resuming a previous execution as well. - */ - bot.FIRST_EXECUTION = false - bot.RESUME = false - } - - async function writeProcessFiles() { - let outputDatasets = global.NODE_BRANCH_TO_ARRAY(bot.processNode.referenceParent.processOutput, 'Output Dataset') - - await writeTimeFramesFiles(currentTimeFrame, currentTimeFrameLabel) - await writeDataRanges() - - if (currentTimeFrame > global.dailyFilePeriods[0][0]) { - await writeMarketStatusReport(currentTimeFrameLabel) - } else { - await writeDailyStatusReport(currentTimeFrameLabel) - } - - async function writeDataRanges() { - for ( - let outputDatasetIndex = 0; - outputDatasetIndex < outputDatasets.length; - outputDatasetIndex++ - ) { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - await writeDataRange(productCodeName); - } - - async function writeDataRange(productCodeName) { - let dataRange = { - begin: contextVariables.dateBeginOfMarket.valueOf(), - end: LearningProcessDate.valueOf() + global.ONE_DAY_IN_MILISECONDS - } - - let fileContent = JSON.stringify(dataRange); - let fileName = '/Data.Range.json'; - let filePath = bot.filePathRoot + "/Output/" + bot.TRADING_SESSION.folderName + "/" + productCodeName + "/" + 'Multi-Period-Daily' + fileName; - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent + '\n') - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - /* - Raise the event that the Data Range was Updated. - */ - let key = bot.dataMine + "-" + bot.codeName + "-" + productCodeName + "-" + bot.exchange + "-" + bot.market.baseAsset + '/' + bot.market.quotedAsset - let event = { - dateRange: dataRange - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Data Range Updated', event) - } - } - - async function writeTimeFramesFiles(currentTimeFrame, currentTimeFrameLabel) { - - for ( - let outputDatasetIndex = 0; - outputDatasetIndex < outputDatasets.length; - outputDatasetIndex++ - ) { - let productCodeName = outputDatasets[outputDatasetIndex].referenceParent.parentNode.config.codeName; - await writeTimeFramesFile(currentTimeFrameLabel, productCodeName, 'Multi-Period-Daily') - await writeTimeFramesFile(currentTimeFrameLabel, productCodeName, 'Multi-Period-Market') - - async function writeTimeFramesFile(currentTimeFrameLabel, productCodeName, processType) { - - let timeFramesArray = [] - timeFramesArray.push(currentTimeFrameLabel) - - let fileContent = JSON.stringify(timeFramesArray) - let fileName = '/Time.Frames.json'; - - let filePath = bot.filePathRoot + "/Output/" + bot.TRADING_SESSION.folderName + "/" + productCodeName + "/" + processType + fileName; - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent + '\n') - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - } - } - } - - async function writeDailyStatusReport(currentTimeFrameLabel) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + bot.processNode.referenceParent.config.codeName - let thisReport = statusDependencies.statusReports.get(reportKey) - - thisReport.file.lastExecution = bot.currentDaytime - thisReport.file.lastFile = LearningProcessDate - thisReport.file.simulationState = bot.simulationState - thisReport.file.timeFrames = currentTimeFrameLabel - await thisReport.asyncSave() - } - - async function writeMarketStatusReport(currentTimeFrameLabel) { - let reportKey = bot.dataMine + "-" + bot.codeName + "-" + bot.processNode.referenceParent.config.codeName - let thisReport = statusDependencies.statusReports.get(reportKey); - - thisReport.file.lastExecution = bot.processDatetime - thisReport.file.simulationState = bot.simulationState - thisReport.file.timeFrames = currentTimeFrameLabel - - logger.newInternalLoop(bot.codeName, bot.process, LearningProcessDate) - await thisReport.asyncSave() - } - } - - function checkIfSessionMustStop() { - - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - /* - Backtests needs only one execution of this process to complete. - */ - if (FULL_LOG === true) { logger.write(MODULE_NAME, '[IMPORTANT] checkIfSessionMustStop -> Backtesting Session Finished. Stopping the Session now. ') } - bot.TRADING_SESSION.stop('Backtesting Session Finished.') - } - } - } - catch (err) { - /* An unhandled exception occured. in this case we return Fail and log the stack. */ - if (err.stack) { - logger.write(MODULE_NAME, "[ERROR] start -> Unhandled Exception. Will Abort this process. err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - - /* Some expected file was not found. We will return a RETRY code and move on. */ - if ((err.result === "Fail Because" && err.message === "File does not exist.") || err.code === 'The specified key does not exist.') { - logger.write(MODULE_NAME, "[ERROR] File not Found. Will Retry the Process Loop.") - callBackFunction(global.DEFAULT_RETRY_RESPONSE); - return - } - - /* Some other handled exception occured. We return Fail and move on. */ - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] start -> Handled Exception. Will Abort this process. err = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return - } - } - } - - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - async function asyncGetDatasetFile(datasetModule, filePath, fileName) { - - let promise = new Promise((resolve, reject) => { - - datasetModule.getTextFile(filePath, fileName, onFileReceived); - function onFileReceived(err, text) { - - let response = { - err: err, - text: text - } - resolve(response) - } - }); - - return promise - } -} diff --git a/Deprecated-Code/TaskServer/ReinforcementLearning/MarkovDecisionProcess.js b/Deprecated-Code/TaskServer/ReinforcementLearning/MarkovDecisionProcess.js deleted file mode 100644 index ca46398dc..000000000 --- a/Deprecated-Code/TaskServer/ReinforcementLearning/MarkovDecisionProcess.js +++ /dev/null @@ -1,218 +0,0 @@ -exports.newMarkovDecisionProcess = function newMarkovDecisionProcess(bot, logger) { - /* - We call the Trading Engine to the data structure that is needed in order to exevute the - trading protocol with the specific rules defined at the Trading System. - */ - const MODULE_NAME = 'Markov Decision Process' - let thisObject = { - mantain: mantain, - reset: reset, - getNodeById: getNodeById, - cloneValues: cloneValues, - setCurrentCandle: setCurrentCandle, - setCurrentCycle: setCurrentCycle, - initializeNode: initializeNode, - initialize: initialize, - finalize: finalize - } - - let tradingEngine - let sessionParameters - let nodesMap = new Map() - - return thisObject - - function initialize() { - - tradingEngine = bot.simulationState.tradingEngine - sessionParameters = bot.LEARNING_SESSION.learningParameters - - initializeNodeMap(tradingEngine) - - if (bot.FIRST_EXECUTION === true) { - /* - Here we will go through all the nodes in the Trading Engine hiriarchy and - apply the initial value to the value property when needed - */ - initializeNode(tradingEngine) - } - } - - function finalize() { - tradingEngine = undefined - sessionParameters = undefined - nodesMap = undefined - } - - function mantain() { - } - - function reset() { - - } - - function getNodeById(NodeId) { - return nodesMap.get(NodeId) - } - - function setCurrentCandle(candle) { - tradingEngine.current.episode.candle.begin.value = candle.begin - tradingEngine.current.episode.candle.end.value = candle.end - tradingEngine.current.episode.candle.open.value = candle.open - tradingEngine.current.episode.candle.close.value = candle.close - tradingEngine.current.episode.candle.min.value = candle.min - tradingEngine.current.episode.candle.max.value = candle.max - } - - function setCurrentCycle(cycle) { - tradingEngine.current.episode.cycle.value = cycle - tradingEngine.current.episode.cycle.lastBegin.value = tradingEngine.current.episode.cycle.begin.value - tradingEngine.current.episode.cycle.lastEnd.value = tradingEngine.current.episode.cycle.end.value - switch (cycle) { - case 'First': { - tradingEngine.current.episode.cycle.begin.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value - tradingEngine.current.episode.cycle.end.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value / 2 - 1 - break - } - case 'Second': { - tradingEngine.current.episode.cycle.begin.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value / 2 - tradingEngine.current.episode.cycle.end.value = - tradingEngine.current.episode.candle.begin.value + - sessionParameters.timeFrame.config.value + - sessionParameters.timeFrame.config.value * 4 / 4 - 1 - break - } - } - } - - function cloneValues(originNode, destinationNode) { - if (originNode === undefined) { return } - if (destinationNode === undefined) { return } - - /* Here copy the node value */ - destinationNode.value = originNode.value - - /* Now we go down through all the children of the origin node, assuming the destination node has the same children structure*/ - let nodeDefinition = global.APP_SCHEMA_MAP.get(originNode.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (originNode[property.name] !== undefined && destinationNode[property.name] !== undefined) { - cloneValues(originNode[property.name], destinationNode[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (originNode[property.name] !== undefined && destinationNode[property.name] !== undefined) { - let originNodePropertyArray = originNode[property.name] - let destinationNodePropertyArray = destinationNode[property.name] - for (let m = 0; m < originNodePropertyArray.length; m++) { - cloneValues(originNodePropertyArray[m], destinationNodePropertyArray[m]) - } - } - break - } - } - } - } - } - - function initializeNodeMap(node) { - if (node === undefined) { return } - /* Add to Node Map */ - nodesMap.set(node.id, node) - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - initializeNodeMap(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - initializeNodeMap(nodePropertyArray[m]) - } - } - break - } - } - } - } - } - - function initializeNode(node) { - if (node === undefined) { return } - - /* Here we initialize the node value */ - if (node.config !== undefined) { - if (node.config.initialValue !== undefined) { - node.value = node.config.initialValue - } - } - - /* Now we go down through all this node children */ - let nodeDefinition = global.APP_SCHEMA_MAP.get(node.type) - if (nodeDefinition === undefined) { return } - - if (nodeDefinition.properties !== undefined) { - let previousPropertyName // Since there are cases where there are many properties with the same name,because they can hold nodes of different types but only one at the time, we have to avoind counting each property of those as individual children. - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - if (property.name !== previousPropertyName) { - if (node[property.name] !== undefined) { - initializeNode(node[property.name]) - } - previousPropertyName = property.name - } - break - } - case 'array': { - if (node[property.name] !== undefined) { - let nodePropertyArray = node[property.name] - for (let m = 0; m < nodePropertyArray.length; m++) { - initializeNode(nodePropertyArray[m]) - } - } - break - } - } - } - } - } -} - diff --git a/Deprecated-Code/TaskServer/Root.js b/Deprecated-Code/TaskServer/Root.js deleted file mode 100644 index 198f15944..000000000 --- a/Deprecated-Code/TaskServer/Root.js +++ /dev/null @@ -1,644 +0,0 @@ -exports.newRoot = function newRoot() { - - /* This is the Execution Datetime */ - - global.EXECUTION_DATETIME = new Date(); - - /* Time Frames Definitions. */ - - global.marketFilesPeriods = - '[' + - '[' + 24 * 60 * 60 * 1000 + ',' + '"24-hs"' + ']' + ',' + - '[' + 12 * 60 * 60 * 1000 + ',' + '"12-hs"' + ']' + ',' + - '[' + 8 * 60 * 60 * 1000 + ',' + '"08-hs"' + ']' + ',' + - '[' + 6 * 60 * 60 * 1000 + ',' + '"06-hs"' + ']' + ',' + - '[' + 4 * 60 * 60 * 1000 + ',' + '"04-hs"' + ']' + ',' + - '[' + 3 * 60 * 60 * 1000 + ',' + '"03-hs"' + ']' + ',' + - '[' + 2 * 60 * 60 * 1000 + ',' + '"02-hs"' + ']' + ',' + - '[' + 1 * 60 * 60 * 1000 + ',' + '"01-hs"' + ']' + ']'; - - global.marketFilesPeriods = JSON.parse(global.marketFilesPeriods); - - global.dailyFilePeriods = - '[' + - '[' + 45 * 60 * 1000 + ',' + '"45-min"' + ']' + ',' + - '[' + 40 * 60 * 1000 + ',' + '"40-min"' + ']' + ',' + - '[' + 30 * 60 * 1000 + ',' + '"30-min"' + ']' + ',' + - '[' + 20 * 60 * 1000 + ',' + '"20-min"' + ']' + ',' + - '[' + 15 * 60 * 1000 + ',' + '"15-min"' + ']' + ',' + - '[' + 10 * 60 * 1000 + ',' + '"10-min"' + ']' + ',' + - '[' + 05 * 60 * 1000 + ',' + '"05-min"' + ']' + ',' + - '[' + 04 * 60 * 1000 + ',' + '"04-min"' + ']' + ',' + - '[' + 03 * 60 * 1000 + ',' + '"03-min"' + ']' + ',' + - '[' + 02 * 60 * 1000 + ',' + '"02-min"' + ']' + ',' + - '[' + 01 * 60 * 1000 + ',' + '"01-min"' + ']' + ']'; - - global.dailyFilePeriods = JSON.parse(global.dailyFilePeriods); - - const MODULE_NAME = "Root"; - const WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START = 10000 // This avoid a race condition that could happen if one process finished before all the other even started. - - let thisObject = { - initialize: initialize, - start: start - } - - const FULL_LOG = true; - - let logDisplace = "Task Server" + " "; - - return thisObject; - - function initialize(callBackFunction) { - - try { - - /* Global control of logging. */ - - global.LOG_CONTROL = { - "Status Report": { - logInfo: false, - logWarnings: false, - logErrors: true, - logContent: false, - intensiveLogging: false - }, - "Dataset": { - logInfo: false, - logWarnings: false, - logErrors: true, - logContent: false, - intensiveLogging: false - }, - "Process Execution Events": { - logInfo: false, - logWarnings: false, - logErrors: true, - logContent: false, - intensiveLogging: false - }, - "Process Output": { - logInfo: false, - logWarnings: false, - logErrors: true, - logContent: false, - intensiveLogging: false - } - }; - - callBackFunction(); - - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] initialize -> err = " + err.stack); - return; - } - } - - function start(processIndex) { - - try { - - /* Now we will run according to what we see at the config file. */ - - /* Small Function to fix numbers into strings in a cool way. */ - - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad("0" + str, max) : str; - } - - /* Process Loops Declarations. */ - - const INDICATOR_BOT_MODULE = require('./IndicatorBot'); - const SENSOR_BOT = require('./SensorBot'); - const TRADING_BOT_MODULE = require('./TradingBot'); - - let botConfig; - let processInstance = global.TASK_NODE.bot.processes[processIndex] - - /* Here we will check if we need to load the configuration and code of the bot from a file or we will take that from the UI. */ - if ( - processInstance.referenceParent.config.framework !== undefined && - (processInstance.referenceParent.config.framework.name === 'Multi-Period-Market' || - processInstance.referenceParent.config.framework.name === 'Multi-Period-Daily' || - processInstance.referenceParent.config.framework.name === 'Low-Frequency-Trading-Process') - ) { - botConfig = processInstance.referenceParent.parentNode.config - botConfig.definedByUI = true - bootingBot(processIndex) - return - } else { - getBotConfigFromFile(); - return - } - - function getBotConfigFromFile() { - - try { - - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(); - - let filePath = global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode.config.codeName + '/bots/' + processInstance.referenceParent.parentNode.config.repo + '/this.bot.config.json'; - - fileStorage.getTextFile(filePath, onFileReceived); - - function onFileReceived(err, text) { - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - console.log(logDisplace + "Root : [ERROR] start -> getBotConfigFromFile -> onInizialized -> onFileReceived -> err = " + JSON.stringify(err)); - console.log(logDisplace + "Root : [ERROR] start -> getBotConfigFromFile -> onInizialized -> onFileReceived -> filePath = " + filePath); - console.log(logDisplace + "Root : [ERROR] start -> getBotConfigFromFile -> onInizialized -> onFileReceived -> dataMine = " + global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode.config.codeName); - return; - } - - try { - botConfig = JSON.parse(text); - botConfig.repo = global.TASK_NODE.bot.config.repo; - bootingBot(processIndex); - } catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> getBotConfigFromFile -> onInizialized -> onFileReceived -> err = " + err.stack); - return; - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> getBotConfigFromFile -> err = " + err.stack); - return; - } - } - - function bootingBot(processIndex) { - - try { - - botConfig.process = global.TASK_NODE.bot.processes[processIndex].referenceParent.config.codeName - botConfig.debug = {}; - botConfig.processNode = global.TASK_NODE.bot.processes[processIndex] - - /* Logs Mantainance Stuff */ - botConfig.LOGS_TO_DELETE_QUEUE = [] - botConfig.DELETE_QUEUE_SIZE = 10 // This number represents how many log files can be at the queue at any point in time, which means how many logs are not still deleted. - - /* Simplifying the access to basic info */ - botConfig.dataMine = global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode.config.codeName - botConfig.exchange = global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name - botConfig.exchangeNode = global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode - botConfig.market = { - baseAsset: global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName, - quotedAsset: global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName - } - botConfig.uiStartDate = global.TASK_NODE.bot.config.startDate - botConfig.config = global.TASK_NODE.bot.config - - /* Loop Counter */ - botConfig.loopCounter = 0; - - /* File Path Root */ - botConfig.filePathRoot = botConfig.exchange + "/" + botConfig.market.baseAsset + "-" + botConfig.market.quotedAsset + "/" + botConfig.dataMine + "/" + botConfig.codeName; - - /* Process Key */ - botConfig.processKey = global.TASK_NODE.bot.processes[processIndex].name + '-' + global.TASK_NODE.bot.processes[processIndex].type + '-' + global.TASK_NODE.bot.processes[processIndex].id - - /* Bot Type */ - botConfig.type = global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.type - - /* Time Frame Filter */ - if (global.TASK_NODE.bot.timeFramesFilter !== undefined) { - botConfig.dailyTimeFrames = global.TASK_NODE.bot.timeFramesFilter.config.dailyTimeFrames - botConfig.marketTimeFrames = global.TASK_NODE.bot.timeFramesFilter.config.marketTimeFrames - } - - if (global.TASK_NODE.keyReference !== undefined) { - if (global.TASK_NODE.keyReference.referenceParent !== undefined) { - let key = global.TASK_NODE.keyReference.referenceParent - - botConfig.KEY = key.config.codeName - botConfig.SECRET = key.config.secret - } - } - - let processConfig = global.TASK_NODE.bot.processes[processIndex].referenceParent.config - - if (processConfig.framework !== undefined) { - if (processConfig.framework.name === "Multi-Period-Daily" || processConfig.framework.name === "Multi-Period-Market" || processConfig.framework.name === "Low-Frequency-Trading-Process") { - if (processConfig.framework.startDate !== undefined) { - processConfig.framework.startDate.resumeExecution = true; - if (processConfig.startMode.noTime !== undefined) { - if (processConfig.startMode.noTime.run === "true") { - if (processConfig.startMode.noTime.beginDatetime !== undefined) { - processConfig.framework.startDate.fixedDate = processConfig.startMode.noTime.beginDatetime; - processConfig.framework.startDate.resumeExecution = true; - } - } - } - } - if (processConfig.startMode !== undefined) { - if (processConfig.startMode.userDefined !== undefined) { - if (processConfig.startMode.userDefined.run === "true") { - if (processConfig.startMode.userDefined.beginDatetime !== undefined) { - processConfig.framework.startDate.fixedDate = processConfig.startMode.userDefined.beginDatetime; - processConfig.framework.startDate.resumeExecution = processConfig.startMode.userDefined.resumeExecution; - } - } - } - } - } - } - - try { - - if (processConfig.startMode === undefined) { // Default - - botConfig.hasTheBotJustStarted = true; - - switch (botConfig.type) { - case 'Sensor Bot': { - runSensorBot(botConfig, processConfig); - break; - } - case 'Indicator Bot': { - runIndicatorBot(botConfig, processConfig); - break; - } - case 'Trading Bot': { - runTradingBot(botConfig, processConfig); - break; - } - case 'Learning Bot': { - runLearningBot(botConfig, processConfig); - break; - } - default: { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> Unexpected bot type. -> botConfig.type = " + botConfig.type); - } - } - return - } - - if (processConfig.startMode.noTime !== undefined) { - - if (processConfig.startMode.noTime.run === "true") { - - if (processConfig.startMode.noTime.resumeExecution === true) { - botConfig.hasTheBotJustStarted = false; - } else { - botConfig.hasTheBotJustStarted = true; - } - - switch (botConfig.type) { - case 'Sensor Bot': { - runSensorBot(botConfig, processConfig); - break; - } - case 'Indicator Bot': { - runIndicatorBot(botConfig, processConfig); - break; - } - case 'Trading Bot': { - runTradingBot(botConfig, processConfig); - break; - } - case 'Learning Bot': { - runLearningBot(botConfig, processConfig); - break; - } - default: { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> Unexpected bot type. -> botConfig.type = " + botConfig.type); - } - } - } - } - - if (processConfig.startMode.fixedInterval !== undefined) { - - if (processConfig.startMode.fixedInterval.run === "true") { - - botConfig.runAtFixedInterval = true; - botConfig.fixedInterval = processConfig.startMode.fixedInterval.interval; - - switch (botConfig.type) { - case 'Sensor Bot': { - runSensorBot(botConfig, processConfig); - break; - } - default: { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> Unexpected bot type. -> botConfig.type = " + botConfig.type); - } - } - } - } - - if (processConfig.startMode.userDefined !== undefined) { - - if (processConfig.startMode.userDefined.run === "true") { - - botConfig.startMode = "User Defined"; - - if (processConfig.startMode.userDefined.resumeExecution === true) { - botConfig.hasTheBotJustStarted = false; - } else { - botConfig.hasTheBotJustStarted = true; - } - - switch (botConfig.type) { - case 'Trading Bot': { - runTradingBot(botConfig, processConfig); - break; - } - case 'Learning Bot': { - runLearningBot(botConfig, processConfig); - break; - } - default: { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> Unexpected bot type. -> botConfig.type = " + botConfig.type); - } - } - } - } - - } catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> Unexpected exception. -> err = " + err.stack); - } - - - function runSensorBot(pBotConfig, pProcessConfig) { - - try { - global.TOTAL_PROCESS_INSTANCES_CREATED++ - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; - - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set('runSensorBot', logger) - logger.bot = pBotConfig; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runSensorBot -> Entering function."); } - - let sensorBot = SENSOR_BOT.newSensorBot(pBotConfig, logger); - sensorBot.initialize(pProcessConfig, onInitializeReady); - - function onInitializeReady(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - sensorBot.run(whenRunFinishes); - - function whenRunFinishes(err) { - - pBotConfig.loopCounter = 0; - - let botId = pBotConfig.dataMine + "." + pBotConfig.codeName + "." + pBotConfig.process; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - - logger.persist(); - } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Bye."); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> whenStartFinishes -> Bot execution was aborted."); - logger.persist(); - } - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> Bot will not be started. "); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runSensorBot -> onInitializeReady -> err = " + err.message); - - logger.persist(); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runSensorBot -> err = " + err.stack); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - - function runIndicatorBot(pBotConfig, pProcessConfig) { - - try { - global.TOTAL_PROCESS_INSTANCES_CREATED++ - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; - - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set('runIndicatorBot', logger) - logger.bot = pBotConfig; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runIndicatorBot -> Entering function."); } - - let indicatorBot = INDICATOR_BOT_MODULE.newIndicatorBot(pBotConfig, logger); - indicatorBot.initialize(pProcessConfig, onInitializeReady); - - function onInitializeReady(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - indicatorBot.run(whenRunFinishes); - - function whenRunFinishes(err) { - - pBotConfig.loopCounter = 0; - - let botId = pBotConfig.dataMine + "." + pBotConfig.codeName + "." + pBotConfig.process; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - - logger.persist(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Bye."); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished with errors. Please check the logs."); - logger.persist(); - } - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> Failed to initialize the bot. "); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runIndicatorBot -> onInitializeReady -> err = " + err.message); - logger.persist(); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runIndicatorBot -> err = " + err.stack); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - - function runTradingBot(pBotConfig, pProcessConfig) { - - global.TOTAL_PROCESS_INSTANCES_CREATED++ - - try { - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; - - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set('runTradingBot', logger) - logger.bot = pBotConfig; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runTradingBot -> Entering function."); } - - let tradingBot = TRADING_BOT_MODULE.newTradingBot(pBotConfig, logger); - tradingBot.initialize(pProcessConfig, onInitializeReady); - - function onInitializeReady(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - tradingBot.run(whenRunFinishes); - - function whenRunFinishes(err) { - - pBotConfig.loopCounter = 0; - - let botId; - - botId = pBotConfig.dataMine + "." + pBotConfig.codeName + "." + pBotConfig.process; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - - logger.persist(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Bye."); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished with errors. Please check the logs."); - logger.persist(); - } - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> Failed to initialize the bot. "); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runTradingBot -> onInitializeReady -> err = " + err.message); - logger.persist(); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runTradingBot -> err = " + err.stack); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - - function runLearningBot(pBotConfig, pProcessConfig) { - - global.TOTAL_PROCESS_INSTANCES_CREATED++ - - try { - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; - - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set('runLearningBot', logger) - logger.bot = pBotConfig; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> Entering function."); } - - let learningBot = TRADING_BOT_MODULE.newLearningBot(pBotConfig, logger); - learningBot.initialize(pProcessConfig, onInitializeReady); - - function onInitializeReady(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - learningBot.run(whenRunFinishes); - - function whenRunFinishes(err) { - - pBotConfig.loopCounter = 0; - - let botId; - - botId = pBotConfig.dataMine + "." + pBotConfig.codeName + "." + pBotConfig.process; - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished sucessfully."); - logger.write(MODULE_NAME, "[INFO] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - - logger.persist(); - - } else { - - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Execution will be stopped. "); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bye."); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot Id = " + botId); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> whenStartFinishes -> Bot execution finished with errors. Please check the logs."); - logger.persist(); - } - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - - } else { - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> err = " + err.message); - logger.write(MODULE_NAME, "[ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> Failed to initialize the bot. "); - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> onInitializeReady -> err = " + err.message); - logger.persist(); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> runLearningBot -> err = " + err.stack); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - } - catch (err) { - console.log(logDisplace + "Root : [ERROR] start -> bootingBot -> err = " + err.stack); - setTimeout(exitProcessInstance, WAIT_TIME_FOR_ALL_PROCESS_INSTANCES_TO_START) - } - } - - function exitProcessInstance() { - - global.ENDED_PROCESSES_COUNTER++ - //console.log("[INFO] Task Server -> " + global.TASK_NODE.name + " -> exitProcessInstance -> Process #" + global.ENDED_PROCESSES_COUNTER + " from " + global.TOTAL_PROCESS_INSTANCES_CREATED + " exiting."); - - if (global.ENDED_PROCESSES_COUNTER === global.TOTAL_PROCESS_INSTANCES_CREATED) { - global.EXIT_NODE_PROCESS() - } - } - } catch (err) { - console.log("[ERROR] Task Server -> " + global.TASK_NODE.name + " -> Root -> Start -> Err = " + err.stack); - } - } -} - - - - diff --git a/Deprecated-Code/TaskServer/SensorBot.js b/Deprecated-Code/TaskServer/SensorBot.js deleted file mode 100644 index e4c1f6a70..000000000 --- a/Deprecated-Code/TaskServer/SensorBot.js +++ /dev/null @@ -1,595 +0,0 @@ -exports.newSensorBot = function newSensorBot(bot, parentLogger) { - - const MODULE_NAME = "Sensor Bot"; - const FULL_LOG = true; - - let USER_BOT_MODULE; - let COMMONS_MODULE; - - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - - let nextLoopTimeoutHandle; - - let thisObject = { - initialize: initialize, - run: run - }; - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - /* This function is exactly the same in the 3 modules representing the 2 different bot types loops. */ - try { - processConfig = pProcessConfig; - - if (bot.definedByUI === true) { - /* The code of the bot is defined at the UI. No need to load a file with the code. */ - callBackFunction(global.DEFAULT_OK_RESPONSE); - return - } - - let filePath = bot.dataMine + "/" + "bots" + "/" + bot.processNode.referenceParent.parentNode.config.repo + "/" + pProcessConfig.codeName - filePath += "/User.Bot.js" - - fileStorage.getTextFile(filePath, onBotDownloaded); - - function onBotDownloaded(err, text) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> onBotDownloaded -> err = " + err.message); - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> onBotDownloaded -> filePath = " + filePath); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - USER_BOT_MODULE = {} - - try { - USER_BOT_MODULE.newUserBot = eval(text); // TODO This needs to be changed function - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onBotDownloaded -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - - filePath = bot.dataMine + "/" + "bots" + "/" + bot.processNode.referenceParent.parentNode.config.repo; - filePath += "/Commons.js" - - fileStorage.getTextFile(filePath, onCommonsDownloaded); - - function onCommonsDownloaded(err, text) { - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - parentLogger.write(MODULE_NAME, "[WARN] initialize -> onBotDownloaded -> onCommonsDownloaded -> Commons not found: " + err.message); - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } - COMMONS_MODULE = {} - - COMMONS_MODULE.newCommons = eval(text); // TODO This needs to be changed function - - callBackFunction(global.DEFAULT_OK_RESPONSE); - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function run(callBackFunction) { - try { - let fixedTimeLoopIntervalHandle; - - /* Heartbeats sent to the UI */ - bot.processHeartBeat = processHeartBeat - - if (bot.runAtFixedInterval === true) { - fixedTimeLoopIntervalHandle = setInterval(loop, bot.fixedInterval); - loop(); // First run. - } else { - loop(); - } - - function loop() { - try { - processHeartBeat(undefined, undefined, "Running...") - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - /* For each loop we want to create a new log file. */ - if (logger !== undefined) { - logger.finalize() - } - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set(MODULE_NAME, logger) - logger.bot = bot; - logger.initialize(); - - bot.loopCounter++; - bot.loopStartTime = new Date().valueOf(); - - /* We tell the UI that we are running. */ - processHeartBeat() - - /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); - const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); - - /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ - bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. - - /* High level log entry */ - console.log(new Date().toISOString() + " " + pad(bot.exchange, 20) + " " + pad(bot.market.baseAsset + '/' + bot.market.quotedAsset, 10) + " " + pad(bot.codeName, 30) + " " + pad(bot.process, 30) - + " Main Loop # " + pad(Number(bot.loopCounter), 8)) - - /* We will prepare first the infraestructure needed for the bot to run. There are 4 modules we need to sucessfullly initialize first. */ - let processExecutionEvents - let userBot; - let statusDependencies; - let exchangeAPI; - - let nextWaitTime; - - initializeProcessExecutionEvents(); - - function initializeProcessExecutionEvents() { - try { - processExecutionEvents = PROCESS_EXECUTION_EVENTS.newProcessExecutionEvents(bot, logger) - processExecutionEvents.initialize(processConfig, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Execution finished well."); - startProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessExecutionEvents() { - try { - processExecutionEvents.start(onStarted); - - function onStarted(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessExecutionEvents -> onStarted -> Execution finished well."); - - if (global.STOP_TASK_GRACEFULLY === true) { - loopControl() - return - } - - initializeStatusDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessExecutionEvents -> onStarted -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeStatusDependencies() { - try { - statusDependencies = STATUS_DEPENDENCIES.newStatusDependencies(bot, logger, STATUS_REPORT, UTILITIES, PROCESS_OUTPUT); - statusDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeStatusDependencies -> onInizialized -> Execution finished well."); - initializeUserBot(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeStatusDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeUserBot() { - try { - usertBot = USER_BOT_MODULE.newUserBot(bot, logger, COMMONS_MODULE, UTILITIES, FILE_STORAGE, STATUS_REPORT, exchangeAPI); - usertBot.initialize(statusDependencies, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeUserBot -> onInizialized > Execution finished well."); - startUserBot(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeUserBot -> onInizialized > Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized > Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeUserBot -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startUserBot() { - try { - usertBot.start(onFinished); - - function onFinished(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startUserBot -> onFinished > Execution finished well."); - finishProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - case "Dependency does not exist.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > Dependency does not exist. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - case "Dependency not ready.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startUserBot -> onFinished > Dependency not ready. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished > Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startUserBot -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function finishProcessExecutionEvents() { - try { - processExecutionEvents.finish(onFinished); - - function onFinished(err) { - try { - processExecutionEvents.finalize() - processExecutionEvents = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> finishProcessExecutionEvents -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> finishProcessExecutionEvents -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function loopControl(nextWaitTime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> nextWaitTime = " + nextWaitTime); } - - /* We show we reached the end of the loop. */ - /* Here we check if we must stop the loop gracefully. */ - shallWeStop(onStop, onContinue); - - function onStop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } - processStopped() - return; - } - - function onContinue() { - /* Sensor bots are going to be executed after a configured period of time after the last execution ended. This is to avoid overlapping executions. */ - switch (nextWaitTime) { - case 'Normal': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.normalWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.normalWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.normalWaitTime / 1000 + " seconds for next execution.") - if (global.WRITE_LOGS_TO_FILES === 'true') { - logger.persist(); - } - } - break; - case 'Retry': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); - processHeartBeat(undefined, undefined, "Trying to recover from some problem. Waiting " + processConfig.retryWaitTime / 1000 + " seconds for next execution.") - logger.persist(); - } - break; - case 'Sleep': { - if (bot.runAtFixedInterval === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Fixed Interval Sleep exit point reached."); } - logger.persist(); - return; - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.sleepWaitTime / 60000 + " minutes for next execution.") - logger.persist(); - } - } - break; - case 'Coma': { - if (bot.runAtFixedInterval === true) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Fixed Interval Coma exit point reached."); } - logger.persist(); - return; - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.comaWaitTime / 3600000 + " hours for next execution.") - logger.persist(); - } - } - break; - } - } - } - - function shallWeStop(stopCallBack, continueCallBack) { - try { - /* IMPORTANT: This function is exactly the same on the 3 modules. */ - if (!global.STOP_TASK_GRACEFULLY) { - continueCallBack(); - } else { - stopCallBack(); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function processHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Heartbeat', event) - } - - function processStopped() { - if (global.unexpectedError !== undefined) { - global.PROCESS_ERROR(bot.processKey, undefined, "An unexpected error caused the Process to stop.") - } else { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Stopped') - } - logger.persist(); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - if (global.unexpectedError !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } else { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - } - } - - catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.stack); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/SocialBots.js b/Deprecated-Code/TaskServer/SocialBots.js deleted file mode 100644 index 4676a912f..000000000 --- a/Deprecated-Code/TaskServer/SocialBots.js +++ /dev/null @@ -1,71 +0,0 @@ -exports.newSocialBots = function newSocialBots(bot, logger) { - - const MODULE_NAME = 'Social Bots' - - let thisObject = { - sendMessage: sendMessage, - initialize: initialize, - finalize: finalize - } - - const TELEGRAM_BOT_MODULE = require('./TelegramBot.js') - - return thisObject - - function initialize() { - if (bot.TRADING_SESSION.socialBots !== undefined) { - if (bot.TRADING_SESSION.socialBots.bots !== undefined) { - for (let i = 0; i < bot.TRADING_SESSION.socialBots.bots.length; i++) { - let socialBot = bot.TRADING_SESSION.socialBots.bots[i] - if (socialBot.type === "Telegram Bot") { - let config = socialBot.config - socialBot.botInstance = TELEGRAM_BOT_MODULE.newTelegramBot(bot, logger) - socialBot.botInstance.initialize(config.botToken, config.chatId) - } - } - } - - function announce(text) { - if (bot.TRADING_SESSION.socialBots.bots !== undefined) { - for (let i = 0; i < bot.TRADING_SESSION.socialBots.bots.length; i++) { - let socialBot = bot.TRADING_SESSION.socialBots.bots[i] - try { - if (socialBot.type === "Telegram Bot") { - socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, text).catch(err => logger.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err)) - } - } catch (err) { - logger.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack); - } - } - } - } - - bot.TRADING_SESSION.socialBots.announce = announce - } - } - - function finalize() { - if (bot.TRADING_SESSION.socialBots === undefined) { return } - if (bot.TRADING_SESSION.socialBots.bots !== undefined) { - for (let i = 0; i < bot.TRADING_SESSION.socialBots.bots.length; i++) { - let socialBot = bot.TRADING_SESSION.socialBots.bots[i] - if (socialBot.type === "Telegram Bot") { - socialBot.botInstance.finalize() - } - } - } - } - - function sendMessage(message) { - if (bot.TRADING_SESSION.socialBots !== undefined) { - if (bot.TRADING_SESSION.socialBots.bots !== undefined) { - for (let i = 0; i < bot.TRADING_SESSION.socialBots.bots.length; i++) { - let socialBot = bot.TRADING_SESSION.socialBots.bots[i] - if (socialBot.type === "Telegram Bot") { - socialBot.botInstance.sendMessage(message) - } - } - } - } - } -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/StatusDependencies.js b/Deprecated-Code/TaskServer/StatusDependencies.js deleted file mode 100644 index 2b3615e32..000000000 --- a/Deprecated-Code/TaskServer/StatusDependencies.js +++ /dev/null @@ -1,171 +0,0 @@ -exports.newStatusDependencies = function newStatusDependencies(BOT, logger, STATUS_REPORT, UTILITIES, PROCESS_OUTPUT) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - const MODULE_NAME = "Status Dependencies"; - - let bot = BOT - - let thisObject = { - nodeArray: undefined, - statusReports: new Map(), - reportsByMainUtility: new Map(), - initialize: initialize, - finalize: finalize, - keys: [] - }; - - return thisObject; - - function initialize(callBackFunction) { - try { - /* Basic Valdidations */ - if (bot.processNode.referenceParent.processDependencies !== undefined) { - if (bot.processNode.referenceParent.processDependencies.statusDependencies !== undefined) { - thisObject.nodeArray = bot.processNode.referenceParent.processDependencies.statusDependencies - } else { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible to not have status dependencies at all."); - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - } - } else { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> It is not possible to not have process dependencies, which means not status dependencies."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - /*For each dependency we will initialize the status report, and load it as part of this initialization process.*/ - - let alreadyCalledBack = false; - let loadCount = 0; - let dependenciesToProcess = [] - for (let i = 0; i < thisObject.nodeArray.length; i++) { - let statusDependency = { - dependency: thisObject.nodeArray[i] - } - - dependenciesToProcess.push(statusDependency) - - } - - for (let i = 0; i < dependenciesToProcess.length; i++) { - - let statusReportModule = STATUS_REPORT.newStatusReport(BOT, logger, UTILITIES, PROCESS_OUTPUT); - - logger.write(MODULE_NAME, "[INFO] initialize -> onInitilized -> Initializing Status Report # " + (i + 1)); - let statusDependency = dependenciesToProcess[i] - statusReportModule.initialize(statusDependency.dependency, onInitilized); - - function onInitilized(err) { - - logger.write(MODULE_NAME, "[INFO] initialize -> onInitilized -> Initialized Status Report # " + (i + 1)); - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - if (alreadyCalledBack === false) { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> err = " + err.stack); - logger.write(MODULE_NAME, "[ERROR] initialize -> onInitilized -> err.message = " + err.message); - alreadyCalledBack = true; - callBackFunction(err); - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] initialize -> Can not call back because I already did."); } - } - return; - } - - logger.write(MODULE_NAME, "[INFO] initialize -> onInitilized -> Loading Status Report # " + (i + 1)); - statusReportModule.load(onLoad); - } - - function onLoad(err) { - - try { - logger.write(MODULE_NAME, "[INFO] initialize -> onLoad -> Loaded Status Report # " + (i + 1)); - statusReportModule.status = err.message; - - switch (err.message) { - case global.DEFAULT_OK_RESPONSE.message: { - addReport(); - return; - } - case "Status Report was never created.": { - - logger.write(MODULE_NAME, "[WARN] initialize -> onLoad -> err = " + err.stack); - logger.write(MODULE_NAME, "[WARN] initialize -> onLoad -> Report Not Found. -> Status Dependency = " + JSON.stringify(statusDependency.dependency)) - - addReport(); - return; - } - - case "Status Report is corrupt.": { - - logger.write(MODULE_NAME, "[WARN] initialize -> onLoad -> err = " + err.stack); - logger.write(MODULE_NAME, "[WARN] initialize -> onLoad -> Report Not Found. -> Status Dependency = " + JSON.stringify(statusDependency.dependency)) - - addReport(); - return; - } - default: - { - logger.write(MODULE_NAME, "[ERROR] initialize -> onLoad -> Operation Failed."); - - if (alreadyCalledBack === false) { - alreadyCalledBack = true; - callBackFunction(err); - } - return; - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> onLoad -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function addReport() { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> addReport -> Entering function."); } - logger.write(MODULE_NAME, "[INFO] initialize -> addReport -> Adding Status Report # " + (i + 1)); - - loadCount++; - logger.write(MODULE_NAME, "[INFO] initialize -> addReport -> Total Added = " + loadCount); - - let key = statusDependency.dependency.dataMine + "-" + statusDependency.dependency.bot + "-" + statusDependency.dependency.process - - thisObject.keys.push(key); - thisObject.statusReports.set(key, statusReportModule); - - if (statusReportModule.mainUtility !== undefined) { - thisObject.reportsByMainUtility.set(statusReportModule.mainUtility, statusReportModule) - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> addReport -> Report added to Map. -> key = " + key); } - - if (loadCount === dependenciesToProcess.length) { - if (alreadyCalledBack === false) { - alreadyCalledBack = true - callBackFunction(global.DEFAULT_OK_RESPONSE); - return; - } else { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[WARN] initialize -> addReport -> Can not call back because I already did."); } - } - } - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - thisObject.statusReports.forEach(forEachStatusDependency) - function forEachStatusDependency(statusDependency) { - statusDependency.finalize() - } - thisObject.statusReports = undefined - bot = undefined - thisObject = undefined - } -}; diff --git a/Deprecated-Code/TaskServer/StatusReport.js b/Deprecated-Code/TaskServer/StatusReport.js deleted file mode 100644 index 2a7699e55..000000000 --- a/Deprecated-Code/TaskServer/StatusReport.js +++ /dev/null @@ -1,416 +0,0 @@ -exports.newStatusReport = function newStatusReport(BOT, logger, UTILITIES, PROCESS_OUTPUT) { - - /* - - A Status Report is a file that every bot reads at the begining of its execution and saves after it finishes its job. - The purpose of the file is to record checkpoint information of what was the last thing done by the bot and helpfull enough to start the next execution. - It usually does not include business related context data. - - */ - - const MODULE_NAME = "Status Report"; - - let bot = BOT; - - let thisObject = { - networkNode: undefined, - mainUtility: undefined, - file: undefined, // Here we have the JSON object representing the file content. - initialize: initialize, - finalize: finalize, - load: load, - save: save, - asyncSave: asyncSave, - status: undefined - }; - - let statusDependencyNode; - - /* Utilities needed. */ - - let utilities = UTILITIES.newCloudUtilities(logger); - - /* Storage account to be used here. */ - - const FILE_STORAGE = require('./FileStorage.js'); - let fileStorage - - let sessionPath = '' - - return thisObject; - - function initialize(pStatusDependencyNode, callBackFunction) { - try { - statusDependencyNode = pStatusDependencyNode; - logger.fileName = MODULE_NAME + "." + statusDependencyNode.type + "." + statusDependencyNode.name + "." + statusDependencyNode.id; - - /* Some very basic validations that we have all the information needed. */ - if (statusDependencyNode.referenceParent === undefined) { - validationFailed(statusDependencyNode, "Status Dependency without Reference Parent.") - return - } - - if (statusDependencyNode.referenceParent.parentNode === undefined) { - validationFailed(statusDependencyNode.referenceParent, "Status Report not attached to a Process Definition.") - return - } - - if (statusDependencyNode.referenceParent.parentNode.config.codeName === undefined) { - validationFailed(statusDependencyNode.referenceParent.parentNode, "Process Definition witn no codeName defined.") - return - } - - if (statusDependencyNode.referenceParent.parentNode.parentNode === undefined) { - validationFailed(statusDependencyNode.referenceParent.parentNode, "Process Definition not attached to a Bot.") - return - } - - if (statusDependencyNode.referenceParent.parentNode.parentNode.config.codeName === undefined) { - validationFailed(statusDependencyNode.referenceParent.parentNode.parentNode, "Bot with no codeName defined.") - return - } - - if (statusDependencyNode.referenceParent.parentNode.parentNode.parentNode === undefined) { - validationFailed(statusDependencyNode.referenceParent.parentNode.parentNode, "Bot not attached to a Data Mine.") - return - } - - if (statusDependencyNode.referenceParent.parentNode.parentNode.parentNode.config.codeName === undefined) { - validationFailed(statusDependencyNode.referenceParent.parentNode.parentNode.parentNode, "Data Mine witn no codeName defined.") - return - } - - function validationFailed(errorInNode, errorMessage) { - let nodeString = JSON.stringify(errorInNode) - logger.write(MODULE_NAME, "[ERROR] initialize -> " + errorMessage + ' -> nodeString = ' + nodeString) - global.PROCESS_ERROR(bot.processKey, errorInNode, errorMessage) - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - - /* Simplifying the access to basic info */ - statusDependencyNode.bot = statusDependencyNode.referenceParent.parentNode.parentNode.config.codeName - statusDependencyNode.process = statusDependencyNode.referenceParent.parentNode.config.codeName - statusDependencyNode.bottype = statusDependencyNode.referenceParent.parentNode.parentNode.type - statusDependencyNode.dataMine = statusDependencyNode.referenceParent.parentNode.parentNode.parentNode.config.codeName - - /* We retrieve the report main utility */ - if (statusDependencyNode.config !== undefined) { - if (statusDependencyNode.config.mainUtility !== undefined) { - thisObject.mainUtility = statusDependencyNode.config.mainUtility - } - } - - if (bot.TRADING_SESSION !== undefined && statusDependencyNode.bottype === "Trading Bot") { - sessionPath = bot.TRADING_SESSION.folderName + "/" - } - - if (bot.LEARNING_SESSION !== undefined && statusDependencyNode.bottype === "Learning Bot") { - sessionPath = bot.LEARNING_SESSION.folderName + "/" - } - - /* Now we will see where do we need to fetch this status report from. */ - let network = global.TASK_NETWORK - let processThisDependsOn = statusDependencyNode.referenceParent.parentNode - - for (let i = 0; i < network.networkNodes.length; i++) { - let networkNode = network.networkNodes[i] - - if (checkThisDataBranch(networkNode.dataMining) === true) { return } - if (checkThisTradingBranch(networkNode.testingEnvironment) === true) { return } - if (checkThisTradingBranch(networkNode.productionEnvironment) === true) { return } - - function checkThisDataBranch(branch) { - if (branch === undefined) { return } - for (let j = 0; j < branch.exchangeDataTasks.length; j++) { - let exchangeTasks = branch.exchangeDataTasks[j] - for (let p = 0; p < exchangeTasks.marketDataTasks.length; p++) { - let marketTasks = exchangeTasks.marketDataTasks[p] - if (marketTasks.referenceParent === undefined) { continue } - if (marketTasks.referenceParent.id !== global.MARKET_NODE.id) { continue } - for (let q = 0; q < marketTasks.dataMineTasks.length; q++) { - let mineTasks = marketTasks.dataMineTasks[q] - for (let k = 0; k < mineTasks.taskManagers.length; k++) { - let taskManager = mineTasks.taskManagers[k] - for (let m = 0; m < taskManager.tasks.length; m++) { - let task = taskManager.tasks[m] - if (task.bot === undefined) { continue } - for (let n = 0; n < task.bot.processes.length; n++) { - let process = task.bot.processes[n] - if (process.referenceParent === undefined) { continue } - let processDefinition = process.referenceParent - if (processThisDependsOn.id === processDefinition.id) { - if (process.type === 'Trading Process Instance') { - if (process.session !== undefined) { - if (bot.processNode.session.id !== process.session.id) { - continue - } - } else { - continue - } - } - /* - We found where the task that runs the process definition this status report depends on - and where it is located on the network. - */ - thisObject.networkNode = networkNode - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.'); } - - fileStorage = FILE_STORAGE.newFileStorage(logger, networkNode.config.host, networkNode.config.webPort); - callBackFunction(global.DEFAULT_OK_RESPONSE); - return true - } - } - } - } - } - } - } - } - - function checkThisTradingBranch(branch) { - if (branch === undefined) { return } - for (let j = 0; j < branch.exchangeTradingTasks.length; j++) { - let exchangeTasks = branch.exchangeTradingTasks[j] - for (let p = 0; p < exchangeTasks.marketTradingTasks.length; p++) { - let marketTasks = exchangeTasks.marketTradingTasks[p] - if (marketTasks.referenceParent === undefined) { continue } - if (marketTasks.referenceParent.id !== global.MARKET_NODE.id) { continue } - for (let q = 0; q < marketTasks.tradingMineTasks.length; q++) { - let mineTasks = marketTasks.tradingMineTasks[q] - for (let k = 0; k < mineTasks.taskManagers.length; k++) { - let taskManager = mineTasks.taskManagers[k] - for (let m = 0; m < taskManager.tasks.length; m++) { - let task = taskManager.tasks[m] - if (task.bot === undefined) { continue } - for (let n = 0; n < task.bot.processes.length; n++) { - let process = task.bot.processes[n] - if (process.referenceParent === undefined) { continue } - let processDefinition = process.referenceParent - if (processThisDependsOn.id === processDefinition.id) { - if (process.type === 'Trading Process Instance') { - if (process.session !== undefined) { - if (bot.processNode.session.id !== process.session.id) { - continue - } - } else { - continue - } - } - /* - We found where the task that runs the process definition this status report depends on - and where it is located on the network. - */ - thisObject.networkNode = networkNode - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Retrieving status report from " + networkNode.name + " -> host = " + networkNode.config.host + ' -> port = ' + networkNode.config.webPort + '.'); } - - fileStorage = FILE_STORAGE.newFileStorage(logger, networkNode.config.host, networkNode.config.webPort); - callBackFunction(global.DEFAULT_OK_RESPONSE); - return true - } - } - } - } - } - } - } - } - } - - logger.write(MODULE_NAME, "[ERROR] initialize -> Initialization Failed because we could not find where the data of this status report is located within the network. Check the logs for more info."); - logger.write(MODULE_NAME, "[ERROR] initialize -> bot = " + statusDependencyNode.bot); - logger.write(MODULE_NAME, "[ERROR] initialize -> process = " + statusDependencyNode.process); - logger.write(MODULE_NAME, "[ERROR] initialize -> bottype = " + statusDependencyNode.bottype); - logger.write(MODULE_NAME, "[ERROR] initialize -> dataMine = " + statusDependencyNode.dataMine); - - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function finalize() { - fileStorage = undefined - thisObject.networkNode = undefined - bot = undefined - thisObject = undefined - } - - function load(callBackFunction) { - - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] load -> Entering function."); } - - let fileName = "Status.Report.json"; - let filePath; - - let ownerId = statusDependencyNode.dataMine + "-" + statusDependencyNode.bot + "-" + statusDependencyNode.process - let botId = bot.dataMine + "-" + bot.codeName + "-" + bot.process - - if (ownerId !== botId) { - - let rootPath = bot.exchange + "/" + bot.market.baseAsset + "-" + bot.market.quotedAsset + "/" + statusDependencyNode.dataMine + "/" + statusDependencyNode.bot - - filePath = rootPath + "/Reports/" + sessionPath + statusDependencyNode.process; - } else { - filePath = bot.filePathRoot + "/Reports/" + sessionPath + statusDependencyNode.process; - } - - filePath += '/' + fileName - - let canUserPrevious - /* - If we are funning Trading Engines, we can not allow ourselves to use a Status Report that is not the latest one, because it might contain - transactioinal information related to the context of the operations the trading engine is doing. - - On the contraty, if we are running a Sensor bot or an Indicator bot, we might, if necesary, use a previous version of a Status Report since - there will be no big impact, just some reprocessing. - */ - if (bot.TRADING_SESSION !== undefined || bot.LEARNING_SESSION !== undefined) { - canUserPrevious = false - } else { - canUserPrevious = true - } - - fileStorage.getTextFile(filePath, onFileReceived, undefined, canUserPrevious); - - function onFileReceived(err, text) { - - if (err.result === global.CUSTOM_FAIL_RESPONSE.result && (err.message === 'Folder does not exist.' || err.message === 'File does not exist.') - || err.code === "The specified key does not exist.") { - - logger.write(MODULE_NAME, "[INFO] load -> onFileReceived -> err = " + err.message); - - /* In this case we can assume that this is the first execution ever of this bot.*/ - - thisObject.file = JSON.parse('{}'); - - let customOK = { - result: global.CUSTOM_OK_RESPONSE.result, - message: "Status Report was never created." - }; - logger.write(MODULE_NAME, "[WARN] load -> onFileReceived -> customOK = " + customOK.message); - callBackFunction(customOK); - return; - } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] load -> onFileReceived -> err = " + err.message); - callBackFunction(err); - return; - } - - if (global.LOG_CONTROL[MODULE_NAME].logContent === true) { - logger.write(MODULE_NAME, "[INFO] load -> onFileReceived -> Content received = " + text); - } - - try { - - thisObject.file = JSON.parse(text); - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - - /* - It might happen that the file content is corrupt. We will consider this as a temporary situation, since sometimes the file - is being updated at the moment of the read. The bot can not run without a valid Status Report but we can request the platform to retry later. - */ - - logger.write(MODULE_NAME, "[ERROR] load -> onFileReceived -> Error Parsing the Status report. -> Err = " + err.message); - logger.write(MODULE_NAME, "[WARN] load -> onFileReceived -> Error Parsing the Status report. -> text = " + text); - - let customFail = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: "Status Report is corrupt." - }; - logger.write(MODULE_NAME, "[WARN] load -> onFileReceived -> customFail = " + customFail.message); - callBackFunction(customFail); - return; - } - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] load -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function save(callBackFunction) { - - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] save -> Entering function."); } - - let ownerId = statusDependencyNode.dataMine + "-" + statusDependencyNode.bot + "-" + statusDependencyNode.process - let botId = bot.dataMine + "-" + bot.codeName + "-" + bot.process - - if (ownerId !== botId && statusDependencyNode.process !== "Context") { // Context is a special case where the report is created by the Context.js module itself. - - let customErr = { - result: global.CUSTOM_FAIL_RESPONSE.result, - message: "Only bots owners of a Status Report can save them." - }; - logger.write(MODULE_NAME, "[ERROR] save -> customErr = " + customErr.message); - callBackFunction(customErr); - return; - } - - let fileName = "Status.Report.json"; - let filePath = bot.filePathRoot + "/Reports/" + sessionPath + statusDependencyNode.process; - - filePath += '/' + fileName - let fileContent = JSON.stringify(thisObject.file); - - fileStorage.createTextFile(filePath, fileContent + '\n', onFileCreated, true); - - function onFileCreated(err) { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] save -> onFileCreated -> Entering function."); } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - logger.write(MODULE_NAME, "[ERROR] save -> onFileCreated -> err = " + err.stack); - callBackFunction(err); - return; - } - - if (global.LOG_CONTROL[MODULE_NAME].logContent === true) { - logger.write(MODULE_NAME, "[INFO] save -> onFileCreated -> Content written = " + fileContent); - } - - /* All good, lets emit the event that means data has been updated. */ - - let processOutput = PROCESS_OUTPUT.newProcessOutput(bot, logger) - - processOutput.raiseEvents(thisObject.file.lastFile, thisObject.file.timeFrames, callBackFunction); - - return; - } - - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] save -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - async function asyncSave() { - - let fileName = "Status.Report.json"; - let filePath = bot.filePathRoot + "/Reports/" + sessionPath + statusDependencyNode.process; - - filePath += '/' + fileName - let fileContent = JSON.stringify(thisObject.file); - - let response = await fileStorage.asyncCreateTextFile(filePath, fileContent + '\n', true) - - if (response.err.result !== global.DEFAULT_OK_RESPONSE.result) { - throw (response.err) - } - - /* All good, lets emit the event that means data has been updated. */ - let processOutput = PROCESS_OUTPUT.newProcessOutput(bot, logger) - processOutput.asyncRaiseEvents(thisObject.file.lastFile, thisObject.file.timeFrames) - } -} diff --git a/Deprecated-Code/TaskServer/TelegramBot.js b/Deprecated-Code/TaskServer/TelegramBot.js deleted file mode 100644 index 79b7c5212..000000000 --- a/Deprecated-Code/TaskServer/TelegramBot.js +++ /dev/null @@ -1,51 +0,0 @@ -exports.newTelegramBot = function newTelegramBot(bot, logger) { - - const MODULE_NAME = 'Telegram Bot' - - let thisObject = { - telegramBot: undefined, - telegramAPI: undefined, - chatId: undefined, - sendMessage: sendMessage, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function initialize(botToken, chatId) { - /* Telegram Bot Initialization */ - try { - thisObject.chatId = chatId - - const Telegraf = require('telegraf') - - thisObject.telegramBot = new Telegraf(botToken) - thisObject.telegramBot.start((ctx) => ctx.reply('Hi! I am the Telegram Bot that will tell you what happens with your trading session.')) - thisObject.telegramBot.help((ctx) => ctx.reply('I can stop the session if you type STOP.')) - thisObject.telegramBot.hears('STOP', (ctx) => bot.TRADING_SESSION.stop(' by STOP command at Telegram.')) - thisObject.telegramBot.launch() - - const Telegram = require('telegraf/telegram') - - thisObject.telegramAPI = new Telegram(botToken) - - const message = "Telegram bot is starting." - thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] initializeTelegramBot -> Telegram API error -> err = " + err)) - - } catch (err) { - parentLogger.write(MODULE_NAME, "[WARN] initialize -> err = " + err.stack); - } - - } - - function finalize() { - const message = "Telegram bot is signing off." - thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] finalize -> Telegram API error -> err = " + err)) - } - - function sendMessage(message) { - thisObject.telegramAPI.sendMessage(thisObject.chatId, message).catch(err => parentLogger.write(MODULE_NAME, "[WARN] announce -> Telegram API error -> err = " + err)) - } - -} \ No newline at end of file diff --git a/Deprecated-Code/TaskServer/TradingBot.js b/Deprecated-Code/TaskServer/TradingBot.js deleted file mode 100644 index 064a3a3c2..000000000 --- a/Deprecated-Code/TaskServer/TradingBot.js +++ /dev/null @@ -1,685 +0,0 @@ -exports.newTradingBot = function newTradingBot(bot, parentLogger) { - - const MODULE_NAME = "Trading Bot"; - const FULL_LOG = true; - - const TRADING_PROCESS_MODULE = require(global.ROOT_DIR + '/LowFrequencyTrading/TradingProcess.js'); - const FILE_STORAGE = require('./FileStorage.js'); - const SESSION = require(global.ROOT_DIR + 'TradingSession'); - - let fileStorage = FILE_STORAGE.newFileStorage(parentLogger); - let session = SESSION.newTradingSession(bot, parentLogger) - - const DEBUG_MODULE = require(global.ROOT_DIR + 'DebugLog'); - let logger; // We need this here in order for the loopHealth function to work and be able to rescue the loop when it gets in trouble. - - let nextLoopTimeoutHandle; - - let thisObject = { - initialize: initialize, - run: run - }; - - let processConfig; - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - /* This function is exactly the same in the 3 modules representing the 2 different bot types loops. */ - try { - processConfig = pProcessConfig; - if (bot.definedByUI === true) { - /* The code of the bot is defined at the UI. No need to load a file with the code. */ - session.initialize(processConfig, callBackFunction) - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function run(callBackFunction) { - try { - /* Some initial values*/ - let fixedTimeLoopIntervalHandle; - bot.STOP_SESSION = true; - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] run -> Stopping the Session now. ') } - - /* Heartbeats sent to the UI */ - bot.processHeartBeat = processHeartBeat - - loop(); - - function loop() { - try { - processHeartBeat(undefined, undefined, "Running...") - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - - /* For each loop we want to create a new log file. */ - if (logger !== undefined) { - logger.finalize() - } - logger = DEBUG_MODULE.newDebugLog(); - global.LOGGER_MAP.set(MODULE_NAME, logger) - logger.bot = bot; - logger.initialize(); - - bot.loopCounter++; - bot.loopStartTime = new Date().valueOf(); - - let nextWaitTime; - - /* We tell the UI that we are running. */ - processHeartBeat(undefined, undefined, "Running...") - - /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ - const UTILITIES = require(global.ROOT_DIR + 'CloudUtilities'); - const STATUS_REPORT = require(global.ROOT_DIR + 'StatusReport'); - const STATUS_DEPENDENCIES = require(global.ROOT_DIR + 'StatusDependencies'); - const DATA_DEPENDENCIES = require(global.ROOT_DIR + 'DataDependencies'); - const DATA_SET = require(global.ROOT_DIR + 'DataSet'); - const PROCESS_EXECUTION_EVENTS = require(global.ROOT_DIR + 'ProcessExecutionEvents'); - const PROCESS_OUTPUT = require(global.ROOT_DIR + 'ProcessOutput'); - - /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ - bot.processDatetime = new Date(); // This will be considered the process date and time, so as to have it consistenly all over the execution. - - /* High level log entry */ - console.log(new Date().toISOString() + " " + pad(bot.exchange, 20) + " " + pad(bot.market.baseAsset + '/' + bot.market.quotedAsset, 10) + " " + pad(bot.codeName, 30) + " " + pad(bot.process, 30) - + " Main Loop # " + pad(Number(bot.loopCounter), 8) + " " + bot.processNode.session.type + " " + bot.processNode.session.name) - - /* Checking if we need to need to emit any event */ - if (bot.TRADING_SESSION_STATUS === 'Idle' && bot.STOP_SESSION === false) { - bot.TRADING_SESSION_STATUS = 'Running' - } - - if (bot.TRADING_SESSION_STATUS === 'Running' && bot.STOP_SESSION === true) { - bot.TRADING_SESSION_STATUS = 'Stopped' - } - - global.EMIT_SESSION_STATUS (bot.TRADING_SESSION_STATUS, bot.TRADING_SESSIONKey) - - /* Checking if we should process this loop or not.*/ - if (bot.STOP_SESSION === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> Waiting for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run."); } - - console.log(new Date().toISOString() + " " + pad(bot.codeName, 20) + " " + pad(bot.process, 30) - + " Waiting for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run. "); - - nextWaitTime = 'Waiting for Session'; - loopControl(nextWaitTime); - return - } - - /* We will prepare first the infraestructure needed for the bot to run. There are 3 modules we need to sucessfullly initialize first. */ - - let processExecutionEvents - let userBot; - let processFramework; - let statusDependencies; - let dataDependencies; - - initializeProcessExecutionEvents(); - - function initializeProcessExecutionEvents() { - try { - processExecutionEvents = PROCESS_EXECUTION_EVENTS.newProcessExecutionEvents(bot, logger) - processExecutionEvents.initialize(processConfig, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Execution finished well."); - startProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessExecutionEvents() { - try { - processExecutionEvents.start(onStarted); - - function onStarted(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessExecutionEvents -> onStarted -> Execution finished well."); - - if (global.STOP_TASK_GRACEFULLY === true) { - loopControl() - return - } - - initializeStatusDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessExecutionEvents -> onStarted -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> onStarted -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeStatusDependencies() { - try { - statusDependencies = STATUS_DEPENDENCIES.newStatusDependencies(bot, logger, STATUS_REPORT, UTILITIES, PROCESS_OUTPUT); - statusDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeStatusDependencies -> onInizialized -> Execution finished well."); - initializeDataDependencies(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeStatusDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeStatusDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function initializeDataDependencies() { - try { - dataDependencies = DATA_DEPENDENCIES.newDataDependencies(bot, logger, DATA_SET); - dataDependencies.initialize(onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> initializeDataDependencies -> onInizialized -> Execution finished well."); } - switch (processConfig.framework.name) { - case 'Low-Frequency-Trading-Process': { - processFramework = TRADING_PROCESS_MODULE.newTradingProcess(bot, logger, UTILITIES); - intitializeProcessFramework(); - break; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework not Supported."); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Process Framework Name = " + processConfig.framework.name); - global.unexpectedError = err.message - processStopped() - return - } - } - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> initializeDataDependencies -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> initializeDataDependencies -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function intitializeProcessFramework() { - try { - processFramework.initialize(processConfig, statusDependencies, dataDependencies, onInizialized); - - function onInizialized(err) { - try { - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> intitializeProcessFramework -> onInizialized -> Execution finished well."); - startProcessFramework(); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> intitializeProcessFramework -> onInizialized -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized > Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> onInizialized -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> intitializeProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function startProcessFramework() { - try { - processFramework.start(onFinished); - - function onFinished(err) { - try { - processFramework.finalize() - processFramework = undefined - dataDependencies.finalize() - dataDependencies = undefined - statusDependencies.finalize() - statusDependencies = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> startProcessFramework -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - finishProcessExecutionEvents() - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - case global.CUSTOM_OK_RESPONSE.result: { - - switch (err.message) { - case "Dependency does not exist.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency does not exist. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - case "Dependency not ready.": { - logger.write(MODULE_NAME, "[WARN] run -> loop -> startProcessFramework -> onFinished -> Dependency not ready. This Loop will go to sleep."); - nextWaitTime = 'Sleep'; - loopControl(nextWaitTime); - return; - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled custom response received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> startProcessFramework -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function finishProcessExecutionEvents() { - try { - processExecutionEvents.finish(onFinished); - - function onFinished(err) { - try { - processExecutionEvents.finalize() - processExecutionEvents = undefined - - switch (err.result) { - case global.DEFAULT_OK_RESPONSE.result: { - logger.write(MODULE_NAME, "[INFO] run -> loop -> finishProcessExecutionEvents -> onFinished -> Execution finished well."); - nextWaitTime = 'Normal'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_RETRY_RESPONSE.result: { // Something bad happened, but if we retry in a while it might go through the next time. - logger.write(MODULE_NAME, "[WARN] run -> loop -> finishProcessExecutionEvents -> onFinished -> Retry Later. Requesting Execution Retry."); - nextWaitTime = 'Retry'; - loopControl(nextWaitTime); - return; - } - case global.DEFAULT_FAIL_RESPONSE.result: { // This is an unexpected exception that we do not know how to handle. - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Operation Failed. Aborting the process."); - global.unexpectedError = err.message - processStopped() - return - } - default: { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err.result = " + err.result); - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> Unhandled err.result received. -> err = " + err.message); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> onFinished -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> finishProcessExecutionEvents -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function loopControl(nextWaitTime) { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> nextWaitTime = " + nextWaitTime); } - - /* We show we reached the end of the loop. */ - processHeartBeat(undefined, undefined, "Running...") - - /* Here we check if we must stop the loop gracefully. */ - shallWeStop(onStop, onContinue); - - function onStop() { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> onStop -> Stopping the Loop Gracefully. See you next time!"); } - - if (global.WRITE_LOGS_TO_FILES === 'true') { - logger.persist(); - } - - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Stopped') - processStopped() - return; - } - - function onContinue() { - /* Indicator bots are going to be executed after a configured period of time after the last execution ended. This is to avoid overlapping executions. */ - switch (nextWaitTime) { - case 'Waiting for Session': { - let waitTime = processConfig.sessionRunWaitTime - nextLoopTimeoutHandle = setTimeout(loop, waitTime); - let waitingTime = waitTime / 1000 / 60 - let label = 'minute/s' - if (waitingTime < 1) { - waitingTime = waitTime / 1000 - label = 'seconds' - } - processHeartBeat(undefined, undefined, "Waiting " + waitingTime + " " + label + " for " + bot.processNode.session.type + " " + bot.processNode.session.name + " to be run. ") - logger.persist(); - } - break - case 'Normal': { - let waitTime - if (processConfig.waitsForExecutionFinishedEvent === true) { - waitTime = 0 - } else { - switch (bot.TRADING_SESSION.type) { - case 'Live Trading Session': { - waitTime = bot.TRADING_SESSION.tradingParameters.timeFrame.config.value - break - } - case 'Fordward Tessting Session': { - waitTime = bot.TRADING_SESSION.tradingParameters.timeFrame.config.value - break - } - case 'Paper Trading Session': { - waitTime = bot.TRADING_SESSION.tradingParameters.timeFrame.config.value - break - } - case 'Backtesting Session': { - waitTime = 0 - break - } - } - } - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (waitTime / 1000 / 60) + " minute/s."); } - nextLoopTimeoutHandle = setTimeout(loop, waitTime); - let waitingTime = waitTime / 1000 / 60 - let label = 'minute/s' - if (waitingTime < 1) { - waitingTime = waitTime / 1000 - label = 'seconds' - } - processHeartBeat(undefined, undefined, "Waiting " + waitingTime + " " + label + " for next execution.") - logger.persist(); - } - break; - case 'Retry': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.retryWaitTime / 1000) + " seconds."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.retryWaitTime); - processHeartBeat(undefined, undefined, "Trying to recover from some problem. Waiting " + processConfig.retryWaitTime / 1000 + " seconds for next execution.") - logger.persist(); - } - break; - case 'Sleep': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.sleepWaitTime / 60000) + " minutes."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.sleepWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.sleepWaitTime / 60000 + " minutes for next execution.") - logger.persist(); - } - break; - case 'Coma': { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> loopControl -> Restarting Loop in " + (processConfig.comaWaitTime / 3600000) + " hours."); } - nextLoopTimeoutHandle = setTimeout(loop, processConfig.comaWaitTime); - processHeartBeat(undefined, undefined, "Waiting " + processConfig.comaWaitTime / 3600000 + " hours for next execution.") - logger.persist(); - } - break; - } - } - } - - function shallWeStop(stopCallBack, continueCallBack) { - try { - /* IMPORTANT: This function is exactly the same on the 3 modules. */ - if (!global.STOP_TASK_GRACEFULLY) { - continueCallBack(); - } else { - stopCallBack(); - } - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] run -> loop -> shallWeStop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> loop -> err = " + err.stack); - global.unexpectedError = err.message - processStopped() - return - } - } - - function processHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Heartbeat', event) - } - - function processStopped() { - if (global.unexpectedError !== undefined) { - global.PROCESS_ERROR(bot.processKey, undefined, "An unexpected error caused the Process to stop.") - } else { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.processKey, 'Stopped') - } - sessionStopped() - logger.persist(); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - if (global.unexpectedError !== undefined) { - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } else { - callBackFunction(global.DEFAULT_OK_RESPONSE) - } - } - - function sessionStopped() { - if (bot.TRADING_SESSION_STATUS === 'Running') { - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Stopped') - bot.TRADING_SESSION_STATUS = 'Stopped' - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] run -> err = " + err.stack); - clearInterval(fixedTimeLoopIntervalHandle); - clearTimeout(nextLoopTimeoutHandle); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/TradingSession.js b/Deprecated-Code/TaskServer/TradingSession.js deleted file mode 100644 index 5999d48dd..000000000 --- a/Deprecated-Code/TaskServer/TradingSession.js +++ /dev/null @@ -1,519 +0,0 @@ -exports.newTradingSession = function newTradingSession(bot, parentLogger) { - - const MODULE_NAME = "Trading Session" - const FULL_LOG = true; - - let thisObject = { - initialize: initialize - } - - const SOCIAL_BOTS_MODULE = require('./SocialBots.js') - let socialBotsModule = SOCIAL_BOTS_MODULE.newSocialBots(bot, parentLogger) - - return thisObject; - - function initialize(pProcessConfig, callBackFunction) { - try { - /* Initialize this info so that everything is logged propeerly */ - bot.TRADING_SESSION = { - name: bot.processNode.session.name, - id: bot.processNode.session.id - } - - /* Set the folderName for early logging */ - if (bot.processNode.session.config.folderName === undefined) { - bot.TRADING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.TRADING_SESSION.id - } else { - bot.TRADING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName - } - - /* Check if there is a session */ - if (bot.processNode.session === undefined) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> Cannot run without a Session."); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - return; - } - - /* Listen to event to start or stop the session. */ - bot.TRADING_SESSIONKey = bot.processNode.session.name + '-' + bot.processNode.session.type + '-' + bot.processNode.session.id - global.SESSION_MAP.set(bot.TRADING_SESSIONKey, bot.TRADING_SESSIONKey) - - global.EVENT_SERVER_CLIENT.listenToEvent(bot.TRADING_SESSIONKey, 'Trading Session Status', undefined, bot.TRADING_SESSIONKey, undefined, onSessionStatus) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.TRADING_SESSIONKey, 'Run Trading Session', undefined, bot.TRADING_SESSIONKey, undefined, onSessionRun) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.TRADING_SESSIONKey, 'Stop Trading Session', undefined, bot.TRADING_SESSIONKey, undefined, onSessionStop) - global.EVENT_SERVER_CLIENT.listenToEvent(bot.TRADING_SESSIONKey, 'Resume Trading Session', undefined, bot.TRADING_SESSIONKey, undefined, onSessionResume) - - /* Connect this here so that it is accesible from other places */ - bot.TRADING_SESSIONError = sessionError - bot.TRADING_SESSIONWarning = sessionWarning - bot.TRADING_SESSIONInfo = sessionInfo - - /* Heartbeats sent to the UI */ - bot.TRADING_SESSIONHeartBeat = sessionHeartBeat - - callBackFunction(global.DEFAULT_OK_RESPONSE) - return - - function onSessionStatus() { - if (bot.TRADING_SESSION_STATUS === 'Running') { - let event = { - status: 'Trading Session Runnning' - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Status Response', event) - } else { - let event = { - status: 'Trading Session Not Runnning' - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Status Response', event) - } - } - - function onSessionRun(message) { - try { - /* This happens when the UI is reloaded, the session was running and tries to run it again. */ - if (bot.TRADING_SESSION_STATUS === 'Idle' || bot.TRADING_SESSION_STATUS === 'Running') { - parentLogger.write(MODULE_NAME, "[WARN] onSessionRun -> Event received to run the Session while it was already running. ") - return - } - - /* We are going to run the Definition comming at the event. */ - bot.TRADING_SYSTEM = JSON.parse(message.event.tradingSystem) - bot.TRADING_ENGINE = JSON.parse(message.event.tradingEngine) - bot.TRADING_SESSION = JSON.parse(message.event.session) - bot.DEPENDENCY_FILTER = JSON.parse(message.event.dependencyFilter) - bot.RESUME = false - bot.FIRST_EXECUTION = true - bot.TRADING_SESSION.stop = stopSession // stop function - - setUpSessionFolderName() - - /* We validate all parameters received and complete some that might be missing if needed. */ - if (checkParemeters() === false) { return } - - socialBotsModule.initialize() - - let allGood - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - allGood = startBackTesting(message) - break - } - case 'Live Trading Session': { - allGood = startLiveTrading(message) - break - } - case 'Fordward Testing Session': { - allGood = startFordwardTesting(message) - break - } - case 'Paper Trading Session': { - allGood = startPaperTrading(message) - break - } - } - if (allGood === true) { - bot.TRADING_SESSION_STATUS = 'Idle' - bot.STOP_SESSION = false - } else { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] onSessionRun -> Stopping the Session now. ') } - } - - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + bot.TRADING_SESSION.name + "' is starting.") - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionRun -> err = " + err.stack); - } - } - - function onSessionStop() { - stopSession('Session Stopped From the User Interface.') - } - - function onSessionResume(message) { - try { - if (bot.TRADING_SESSION.stop === undefined) { - parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session that have never be ran before. ") - return - } - - /* This happens when the UI is reloaded, the session was running and tries to run it again. */ - if (bot.TRADING_SESSION_STATUS === 'Idle' || bot.TRADING_SESSION_STATUS === 'Running') { - parentLogger.write(MODULE_NAME, "[WARN] onSessionResume -> Event received to resume the Session while it was already running. ") - return - } - - bot.RESUME = true - bot.STOP_SESSION = false - - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + bot.TRADING_SESSION.name + "' is resuming.") - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> onSessionResume -> err = " + err.stack); - } - } - - function stopSession(commandOrigin) { - - socialBotsModule.sendMessage(bot.TRADING_SESSION.type + " '" + bot.TRADING_SESSION.name + "' is stopping " + commandOrigin) - socialBotsModule.finalize() - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] stopSession -> Stopping the Session now. ') } - sessionInfo(bot.TRADING_SESSION, commandOrigin) - } - - function setUpSessionFolderName() { - /* - The session object is overwritten when the session is run. For that reason we - need to setup again the folder name at the Session level. - Set the folderName for logging, reports, context and data output - */ - let config - if (bot.TRADING_SESSION.config !== undefined) { - config = bot.TRADING_SESSION.config - if (config.folderName === undefined) { - bot.TRADING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.TRADING_SESSION.id - } else { - bot.TRADING_SESSION.folderName = bot.processNode.session.type.replace(' ', '-').replace(' ', '-') + '-' + bot.processNode.session.config.folderName - } - } - } - - function checkParemeters() { - /* - Here we check all the Session Parameters received. If something critical is missing we abort returning false. If something - non critical is missing, we complete it with a default value. - */ - - if (bot.TRADING_SESSION.tradingParameters === undefined) { - let errorMessage = "Session Node with no Parameters." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION, errorMessage) - return false - } - - /* Time Range */ - if (bot.TRADING_SESSION.tradingParameters.timeRange === undefined) { // if the Time Range is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.timeRange = { - name: 'Missing Time Range', - type: 'Time Range', - config: { - initialDatetime: (new Date()).valueOf(), - finalDatetime: (new Date()).valueOf() + global.ONE_YEAR_IN_MILISECONDS - } - } - } else { - /* Check that we received valid dates */ - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (isNaN(new Date(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime)).valueOf()) { - let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters, errorMessage) - return false - } - } - if (isNaN(new Date(bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime)).valueOf()) { - let errorMessage = "sessionParameters.timeRange.config.initialDatetime is not a valid date." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters, errorMessage) - return false - } - } - - /* Session Type Forced Values */ - let today = (new Date()).valueOf() - let aYearAgo = today - global.ONE_YEAR_IN_MILISECONDS - let aYearFromNow = today + global.ONE_YEAR_IN_MILISECONDS - switch (bot.TRADING_SESSION.type) { - case 'Backtesting Session': { - useDefaultDatetimes(aYearAgo, today) - break - } - case 'Live Trading Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - case 'Fordward Testing Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - case 'Paper Trading Session': { - useDefaultDatetimes(today, aYearFromNow) - break - } - } - - function useDefaultDatetimes(initialDefault, finalDefault) { - /* - Note that inside the system, we are going to deal with these - dates in their numeric value representation. - */ - - /* Initial Datetime */ - if (bot.TRADING_SESSION.type === 'Backtesting Session') { - if (bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime === undefined) { - bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime = initialDefault - } else { - bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime = (new Date(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime)).valueOf() - } - } else { - /* Non backtest session can start from the past only if explicitly configured that way */ - if (bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime === undefined || bot.TRADING_SESSION.tradingParameters.timeRange.config.allowStartingFromThePast !== true) { - bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime = initialDefault - } else { - bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime = (new Date(bot.TRADING_SESSION.tradingParameters.timeRange.config.initialDatetime)).valueOf() - } - } - - /* Final Datetime */ - if (bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime === undefined) { - bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime = finalDefault - } else { - bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime = (new Date(bot.TRADING_SESSION.tradingParameters.timeRange.config.finalDatetime)).valueOf() - } - } - - /* Time Frame */ - if (bot.TRADING_SESSION.tradingParameters.timeFrame === undefined) { - let errorMessage = "Session Parameters Node with no Time Frame." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters, errorMessage) - return false - } - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.label === undefined) { - let errorMessage = "Session Parameters Node with no Time Frame Label configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters.timeFrame, errorMessage) - return false - } - bot.TRADING_SESSION.tradingParameters.timeFrame.config.value = getTimeFrameFromLabel(bot.TRADING_SESSION.tradingParameters.timeFrame.config.label) - if (bot.TRADING_SESSION.tradingParameters.timeFrame.config.value === undefined) { - let errorMessage = "Config error: label value not recognized. Try 01-min or 01-hs for example." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters.timeFrame, errorMessage) - return false - } - - /* Session Base Asset */ - if (bot.TRADING_SESSION.tradingParameters.sessionBaseAsset === undefined) { - let errorMessage = "Session Parameters Node with no Session Base Asset." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters, errorMessage) - return false - } - if (bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.initialBalance === undefined) { - let errorMessage = "Session Parameters Session Base Asset with no initialBalance configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters.sessionBaseAsset, errorMessage) - return false - } - - /* Session Quoted Asset */ - if (bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset === undefined) { - let errorMessage = "Session Parameters Node with no Session Quoted Asset." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters, errorMessage) - return false - } - if (bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.initialBalance === undefined) { - let errorMessage = "Session Parameters Session Quoted Asset with no initialBalance configuration." - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> checkParemeters -> " + errorMessage) - bot.TRADING_SESSIONError(bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset, errorMessage) - return false - } - - /* Slippage */ - if (bot.TRADING_SESSION.tradingParameters.slippage === undefined) { // if the Slippage is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.slippage = { - name: 'Missing Slippage', - type: 'Slippage', - config: { - marketOrderRate: 0, - stopLoss: 0, - takeProfit: 0 - } - } - } - if (bot.TRADING_SESSION.tradingParameters.slippage.config.marketOrderRate === undefined) { // if the marketOrderRate is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.slippage.config.marketOrderRate = 0 - } - if (bot.TRADING_SESSION.tradingParameters.slippage.config.stopLoss === undefined) { // if the stopLoss is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.slippage.config.stopLoss = 0 - } - if (bot.TRADING_SESSION.tradingParameters.slippage.config.takeProfit === undefined) { // if the takeProfit is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.slippage.config.takeProfit = 0 - } - - /* Fee Structure */ - if (bot.TRADING_SESSION.tradingParameters.feeStructure === undefined) { // if the Fee Structure is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.feeStructure = { - name: 'Missing Fee Structure', - type: 'Fee Structure', - config: { - maker: 0, - taker: 0 - } - } - } - if (bot.TRADING_SESSION.tradingParameters.feeStructure.config.maker === undefined) { // if the maker is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.feeStructure.config.maker = 0 - } - if (bot.TRADING_SESSION.tradingParameters.feeStructure.config.taker === undefined) { // if the taker is missing we create a default one. - bot.TRADING_SESSION.tradingParameters.feeStructure.config.taker = 0 - } - - return true - } - - function startBackTesting(message) { - return true - } - - function startLiveTrading(message) { - if (bot.KEY === undefined || bot.SECRET === undefined) { - let errorMessage = "Key 'codeName' or 'secret' not provided. Plese check that and try again." - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[ERROR] initialize -> startLiveTrading -> " + errorMessage); } - bot.TRADING_SESSIONError(bot.TRADING_SESSION, errorMessage) - return false - } - return true - } - - function startFordwardTesting(message) { - if (bot.KEY === undefined || bot.SECRET === undefined) { - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, "[WARN] initialize -> startFordwardTesting -> Key name or Secret not provided, not possible to run the process in Forward Testing mode."); } - console.log("Key 'codeName' or 'secret' not provided. Plese check that and try again.") - return false - } - - /* Reduce the balance */ - let balancePercentage = 1 // This is the default value - - if (bot.TRADING_SESSION.config.balancePercentage !== undefined) { - balancePercentage = bot.TRADING_SESSION.config.balancePercentage - } - - bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.initialBalance = bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.initialBalance * balancePercentage / 100 - bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.initialBalance = bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.initialBalance * balancePercentage / 100 - - bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.minimumBalance = bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.minimumBalance * balancePercentage / 100 - bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.minimumBalance = bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.minimumBalance * balancePercentage / 100 - - bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.maximumBalance = bot.TRADING_SESSION.tradingParameters.sessionBaseAsset.config.maximumBalance * balancePercentage / 100 - bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.maximumBalance = bot.TRADING_SESSION.tradingParameters.sessionQuotedAsset.config.maximumBalance * balancePercentage / 100 - - pProcessConfig.normalWaitTime = bot.TRADING_SESSION.tradingParameters.timeFrame.config.value - - return true - } - - function startPaperTrading(message) { - return true - } - - function getTimeFrameFromLabel(timeFrameLabel) { - - for (let i = 0; i < global.marketFilesPeriods.length; i++) { - let value = global.marketFilesPeriods[i][0] - let label = global.marketFilesPeriods[i][1] - - if (timeFrameLabel === label) { - return value - } - } - - for (let i = 0; i < global.dailyFilePeriods.length; i++) { - let value = global.dailyFilePeriods[i][0] - let label = global.dailyFilePeriods[i][1] - - if (timeFrameLabel === label) { - return value - } - } - } - - function sessionHeartBeat(processingDate, percentage, status) { - let event = { - seconds: (new Date()).getSeconds(), - processingDate: processingDate, - percentage: percentage, - status: status - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Heartbeat', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionHeartBeat -> Stopping the Session now. ') } - } - } - - function sessionError(node, errorMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - errorMessage: errorMessage - } - } else { - event = { - errorMessage: errorMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Error', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionError -> Stopping the Session now. ') } - } - } - - function sessionWarning(node, warningMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - warningMessage: warningMessage - } - } else { - event = { - warningMessage: warningMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Warning', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionWarning -> Stopping the Session now. ') } - } - } - - function sessionInfo(node, infoMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - infoMessage: infoMessage - } - } else { - event = { - infoMessage: infoMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(bot.TRADING_SESSIONKey, 'Info', event) - - if (global.STOP_TASK_GRACEFULLY === true) { - bot.STOP_SESSION = true - if (FULL_LOG === true) { parentLogger.write(MODULE_NAME, '[IMPORTANT] sessionInfo -> Stopping the Session now. ') } - } - } - - } catch (err) { - parentLogger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Deprecated-Code/TaskServer/package-lock.json b/Deprecated-Code/TaskServer/package-lock.json deleted file mode 100644 index fc670f1b4..000000000 --- a/Deprecated-Code/TaskServer/package-lock.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "@superalgos/taskserver", - "version": "2.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ccxt": { - "version": "1.27.45", - "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.27.45.tgz", - "integrity": "sha512-4ADlbcIWDzIWjtLvsrtux5jMFj7pU4kVuiqtI2Btq6NEhQ4r/4+LirXdEFlCF6/wIU3XSHabxMd/8nu8HC1KJw==" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "2.1.2" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "module-alias": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", - "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "sandwich-stream": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sandwich-stream/-/sandwich-stream-2.0.2.tgz", - "integrity": "sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ==" - }, - "telegraf": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/telegraf/-/telegraf-3.38.0.tgz", - "integrity": "sha512-va4VlrKWp64JrowFoZX/NPzzA6q38kvaIukVXOWFO1V+jR1G8+hCfgJy4TX8Z3rwLJzwaBEet1QhikHDRZWl3A==", - "requires": { - "debug": "4.1.1", - "minimist": "1.2.5", - "module-alias": "2.2.2", - "node-fetch": "2.6.0", - "sandwich-stream": "2.0.2", - "telegram-typings": "3.6.1" - } - }, - "telegram-typings": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/telegram-typings/-/telegram-typings-3.6.1.tgz", - "integrity": "sha512-njVv1EAhIZnmQVLocZEADYUyqA1WIXuVcDYlsp+mXua/XB0pxx+PKtMSPeZ/EE4wPWTw9h/hA9ASTT6yQelkiw==" - }, - "ws": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", - "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==" - } - } -} diff --git a/Deprecated-Code/TaskServer/package.json b/Deprecated-Code/TaskServer/package.json deleted file mode 100644 index 33f6c67e8..000000000 --- a/Deprecated-Code/TaskServer/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@superalgos/taskserver", - "version": "2.0.0", - "description": "Executes Tasks.", - "author": "Superalgos.org", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/Superalgos/TaskServer.git" - }, - "main": "Run.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "dependencies": { - "ccxt": "^1.25.80", - "dotenv": "^8.2.0", - "telegraf": "^3.37.0", - "ws": "^7.1.2" - } -} diff --git a/Deprecated-Code/TaskServer/server.js b/Deprecated-Code/TaskServer/server.js deleted file mode 100644 index e693dcad8..000000000 --- a/Deprecated-Code/TaskServer/server.js +++ /dev/null @@ -1,645 +0,0 @@ - -/* Callbacks default responses. */ -global.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" -}; - -global.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" -}; - -global.DEFAULT_RETRY_RESPONSE = { - result: "Retry", - message: "Retry Later" -}; - -global.CUSTOM_OK_RESPONSE = { - result: "Ok, but check Message", - message: "Custom Message" -}; - -global.CUSTOM_FAIL_RESPONSE = { - result: "Fail Because", - message: "Custom Message" -}; - -global.ROOT_DIR = './'; - -global.ONE_YEAR_IN_MILISECONDS = 365 * 24 * 60 * 60 * 1000 -global.ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000 -global.ONE_MIN_IN_MILISECONDS = 60 * 1000 -global.LOGGER_MAP = new Map() // We will put all the loggers in a map, so that we can eventually finalize them. -global.SESSION_MAP = new Map() // We will put all the sessions in a map, so that we can eventually finalize them. - -global.UNIQUE_ID = function () { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8) - return v.toString(16) - }) -} - -global.PRECISE = function (floatNumber, precision) { - return this.parseFloat(floatNumber.toFixed(precision)) -} - -global.REMOVE_TIME = function (datetime) { - const GMT_SECONDS = ':00.000 GMT+0000'; - let date = new Date(datetime) - return new Date(date.getUTCFullYear() + "-" + (date.getUTCMonth() + 1) + "-" + date.getUTCDate() + " " + "00:00" + GMT_SECONDS); -} - -global.PROCESS_ERROR = function (processKey, node, errorMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - errorMessage: errorMessage - } - } else { - event = { - errorMessage: errorMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(processKey, 'Error', event) -} - -global.PROCESS_WARNING = function (processKey, node, warningMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - warningMessage: warningMessage - } - } else { - event = { - warningMessage: warningMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(processKey, 'Warning', event) -} - -global.PROCESS_INFO = function (processKey, node, infoMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - infoMessage: infoMessage - } - } else { - event = { - infoMessage: infoMessage - } - } - global.EVENT_SERVER_CLIENT.raiseEvent(processKey, 'Info', event) -} - -global.NODE_BRANCH_TO_ARRAY = function (node, nodeType) { - let resultArray = [] - scanNodeBranch(node, nodeType) - return resultArray - - function scanNodeBranch(startingNode) { - let nodeDefinition = global.APP_SCHEMA_MAP.get(startingNode.type) - if (nodeDefinition === undefined) { return } - - if (startingNode.type === nodeType) { - resultArray.push(startingNode) - return - } - - if (nodeDefinition.properties === undefined) { return } - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - scanNodeBranch(startingNode[property.name]) - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - scanNodeBranch(startingNodePropertyArray[m]) - } - } - break - } - } - } - } -} - -global.FIND_NODE_IN_NODE_MESH = function (node, nodeType) { - /* - This function scans a node mesh for a certain node type and - returns the first instance found. - */ - let nodeFound - scanNodeMesh(node, nodeType) - return nodeFound - - function scanNodeMesh(startingNode) { - if (startingNode === undefined) { return } - if (nodeFound !== undefined) { return } - - let nodeDefinition = APP_SCHEMA_MAP.get(startingNode.type) - if (nodeDefinition === undefined) { return } - - if (startingNode.type === nodeType) { - nodeFound = startingNode - return - } - - /* We scan through this node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - scanNodeMesh(startingNode[property.name]) - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - scanNodeMesh(startingNodePropertyArray[m]) - } - } - break - } - } - } - } - /* We scan parents nodes. */ - if (startingNode.parentNode !== undefined) { - scanNodeMesh(startingNode.parentNode) - } - /* We scan reference parents too. */ - if (startingNode.referenceParent !== undefined) { - scanNodeMesh(startingNode.referenceParent) - } - } -} - -global.NODE_MESH_TO_PATH_ARRAY = function (node, nodeId) { - /* - This function scans a node mesh for a certain node if and - returns an array with the path within that mesh to the - requested node. - */ - let nodeArray = [] - scanNodeMesh(node) - return nodeArray - - function scanNodeMesh(startingNode) { - if (startingNode === undefined) { return } - - let nodeDefinition = APP_SCHEMA_MAP.get(startingNode.type) - if (nodeDefinition === undefined) { return } - - if (startingNode.id === nodeId) { - nodeArray.push(startingNode) - return - } - - /* We scan through this node children */ - if (nodeDefinition.properties !== undefined) { - for (let i = 0; i < nodeDefinition.properties.length; i++) { - let property = nodeDefinition.properties[i] - - switch (property.type) { - case 'node': { - scanNodeMesh(startingNode[property.name]) - if (nodeArray.length > 0) { - nodeArray.unshift(startingNode) - return - } - } - break - case 'array': { - let startingNodePropertyArray = startingNode[property.name] - if (startingNodePropertyArray !== undefined) { - for (let m = 0; m < startingNodePropertyArray.length; m++) { - scanNodeMesh(startingNodePropertyArray[m]) - if (nodeArray.length > 0) { - nodeArray.unshift(startingNode) - return - } - } - } - break - } - } - } - } - /* We scan parents nodes. */ - if (startingNode.parentNode !== undefined) { - scanNodeMesh(startingNode.parentNode) - if (nodeArray.length > 0) { - nodeArray.unshift(startingNode) - return - } - } - /* We scan reference parents too. */ - if (startingNode.referenceParent !== undefined) { - scanNodeMesh(startingNode.referenceParent) - if (nodeArray.length > 0) { - nodeArray.unshift(startingNode) - return - } - } - } -} - -global.FIND_NODE_IN_NODE_ARRAY = function (nodeArray, nodeType) { - for (let i=0; i < nodeArray.length; i++) { - let node = nodeArray[i] - if (node.type === nodeType) { - return node - } - } -} - -global.FILTER_OUT_NODES_WITHOUT_REFERENCE_PARENT_FROM_NODE_ARRAY = function (nodeArray) { - let filteredNodeArray = [] - for (let i = 0; i < nodeArray.length; i++) { - let arrayItem = nodeArray[i] - if (arrayItem.referenceParent === undefined) { - continue - } else { - filteredNodeArray.push(arrayItem) - } - } - return filteredNodeArray -} - -global.EMIT_SESSION_STATUS = function (status, key) { - switch(status) { - case 'Running': { - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Running') - break - } - case 'Stopped': { - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Stopped') - break - } - } -} - -process.on('uncaughtException', function (err) { - console.log('[ERROR] Task Server -> server -> uncaughtException -> err.message = ' + err.message) - console.log('[ERROR] Task Server -> server -> uncaughtException -> err.stack = ' + err.stack) - console.log(err.stack) - global.EXIT_NODE_PROCESS() -}) - -process.on('unhandledRejection', (reason, p) => { - console.log('[ERROR] Task Server -> server -> unhandledRejection -> reason = ' + JSON.stringify(reason)) - console.log('[ERROR] Task Server -> server -> unhandledRejection -> p = ' + JSON.stringify(p)) - console.log(reason.stack) - global.EXIT_NODE_PROCESS() -}) - -function finalizeLoggers() { - global.LOGGER_MAP.forEach(forEachLogger) - - function forEachLogger(logger) { - if (logger !== undefined) { - logger.finalize() - } - } -} - -function finalizeSessions() { - global.SESSION_MAP.forEach(forEachSession) - - function forEachSession(session) { - global.EVENT_SERVER_CLIENT.raiseEvent(session, 'Stopped') - } -} - -process.on('exit', function (config) { - - if (global.TASK_NODE !== undefined) { - /* We send an event signaling that the Task is being terminated. */ - let key = global.TASK_NODE.name + '-' + global.TASK_NODE.type + '-' + global.TASK_NODE.id - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Stopped') // Meaning Task Stopped - global.EVENT_SERVER_CLIENT.finalize() - global.EVENT_SERVER_CLIENT = undefined - } - - //console.log('[INFO] Task Server -> server -> process.on.exit -> About to exit -> config = ' + config) -}) - -/* Here we listen for the message to stop this Task / Process comming from the Task Manager, which is the paret of this node js process. */ -process.on('message', message => { - if (message === 'Stop this Task') { - - global.STOP_TASK_GRACEFULLY = true; - - /* - There are some process that might no be able to end grafully, for example the ones schedulle to process information in a future day or month. - In order to be sure that the process will be terminated, we schedulle one forced exit in 2 minutes from now. - */ - let key = global.TASK_NODE.name + '-' + global.TASK_NODE.type + '-' + global.TASK_NODE.id - console.log('[INFO] Task Server -> server -> process.on -> Stopping Task ' + key + '. Nodejs process will be exited in less than 1 minute.') - setTimeout(global.EXIT_NODE_PROCESS, 60000); - } -}); - - -let shuttingDownProcess = false -global.EXIT_NODE_PROCESS = function exitProcess() { - - if (global.unexpectedError !== undefined) { - global.taskError(undefined, "An unexpected error caused the Task to stop.") - } - - if (shuttingDownProcess === true) { return } - shuttingDownProcess = true - - /* Signal that all sessions are stopping. */ - finalizeSessions() - - /* Cleaning Before Exiting. */ - clearInterval(global.HEARTBEAT_INTERVAL_HANDLER) - - if (global.TASK_NODE !== undefined) { - for (let i = 0; i < global.TASK_NODE.bot.processes.length; i++) { - let config = global.TASK_NODE.bot.processes[i].config - let process = global.TASK_NODE.bot.processes[i] - - let key = process.name + '-' + process.type + '-' + process.id - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Stopped') // Meaning Process Stopped - } - } - - finalizeLoggers() - //console.log("[INFO] Task Server -> " + global.TASK_NODE.name + " -> EXIT_NODE_PROCESS -> Task Server will stop in 10 seconds."); - - setTimeout(process.exit, 10000) // We will give 10 seconds to logs be written on file -} - -require('dotenv').config(); - -global.WRITE_LOGS_TO_FILES = process.env.WRITE_LOGS_TO_FILES - -/* -We need to count how many process instances we deployd and how many of them have already finished their job, either -because they just finished or because there was a request to stop the proceses. In this way, once we reach the -amount of instances started, we can safelly destroy the rest of the objects running and let this nodejs process die. -*/ - -global.ENDED_PROCESSES_COUNTER = 0 -global.TOTAL_PROCESS_INSTANCES_CREATED = 0 - -/* - -We read the first string sent as an argument when the process was created by the Task Manager. There we will find the information of the identity -of this Task and know exactly what to run within this server instance. - -*/ -let taskId = process.argv[2] // reading what comes as an argument of the nodejs process. - -/* Setting up the global Event Handler */ - -let EVENT_SERVER_CLIENT = require('./EventServerClient.js'); - -global.EVENT_SERVER_CLIENT = EVENT_SERVER_CLIENT.newEventsServerClient() -global.EVENT_SERVER_CLIENT.initialize(preLoader) -global.STOP_TASK_GRACEFULLY = false; - -function preLoader() { - if (taskId !== undefined) { - /* The Task Manager sent the info via a process argument. In this case we listen to an event with the Task Info that should be emitted at the UI */ - try { - //console.log('[INFO] Task Server -> server -> preLoader -> Listening to starting event -> key = ' + 'Task Server - ' + taskId) - global.EVENT_SERVER_CLIENT.listenToEvent('Task Server - ' + taskId, 'Run Task', undefined, 'Task Server - ' + taskId, undefined, eventReceived) - global.EVENT_SERVER_CLIENT.raiseEvent('Task Manager - ' + taskId, 'Nodejs Process Ready for Task') - function eventReceived(message) { - try { - global.APP_SCHEMA_ARRAY = JSON.parse(message.event.appSchema) - setUpAppSchema() - global.TASK_NODE = JSON.parse(message.event.taskDefinition) - global.TASK_NETWORK = JSON.parse(message.event.networkDefinition) - bootLoader() - } catch(err) { - console.log('[ERROR] Task Server -> server -> preLoader -> eventReceived -> ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] Task Server -> server -> preLoader -> global.TASK_NODE -> ' + err.stack) - console.log('[ERROR] Task Server -> server -> preLoader -> global.TASK_NODE = ' + JSON.stringify(global.TASK_NODE).substring(0, 1000)) - } - } - else { /* This process was started not by the Task Manager, but independently (most likely for debugging purposes). In this case we listen to an event with the Task Info that should be emitted at the UI */ - try { - //console.log('[INFO] Task Server -> server -> preLoader -> Waiting for event to start debugging...') - global.EVENT_SERVER_CLIENT.listenToEvent('Task Server', 'Debug Task Started', undefined, 'Task Server', undefined, startDebugging) - function startDebugging(message) { - try { - global.APP_SCHEMA_ARRAY = JSON.parse(message.event.appSchema) - setUpAppSchema() - global.TASK_NODE = JSON.parse(message.event.taskDefinition) - global.TASK_NETWORK = JSON.parse(message.event.networkDefinition) - bootLoader() - - } catch(err) { - console.log('[ERROR] Task Server -> server -> preLoader -> startDebugging -> ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] Task Server -> server -> preLoader -> global.TASK_NODE -> ' + err.stack) - console.log('[ERROR] Task Server -> server -> preLoader -> global.TASK_NODE = ' + JSON.stringify(global.TASK_NODE).substring(0, 1000)) - } - } - - function setUpAppSchema() { - /* Setup the APP_SCHEMA_MAP based on the APP_SCHEMA_ARRAY */ - global.APP_SCHEMA_MAP = new Map() - for (let i = 0; i < global.APP_SCHEMA_ARRAY.length; i++) { - let nodeDefinition = global.APP_SCHEMA_ARRAY[i] - let key = nodeDefinition.type - global.APP_SCHEMA_MAP.set(key, nodeDefinition) - } - } -} - -function bootLoader() { - - /* Heartbeat sent to the UI */ - - let key = global.TASK_NODE.name + '-' + global.TASK_NODE.type + '-' + global.TASK_NODE.id - - global.EVENT_SERVER_CLIENT.createEventHandler(key) - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Running') // Meaning Task Running - global.HEARTBEAT_INTERVAL_HANDLER = setInterval(taskHearBeat, 1000) - - function taskHearBeat() { - - /* The heartbeat event is raised at the event handler of the instance of this task, created at the UI. */ - let event = { - seconds: (new Date()).getSeconds() - } - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Heartbeat', event) - } - - global.taskError = function taskError(node, errorMessage) { - let event - if (node !== undefined) { - event = { - nodeName: node.name, - nodeType: node.type, - nodeId: node.id, - errorMessage: errorMessage - } - } else { - event = { - errorMessage: errorMessage - } - } - - global.EVENT_SERVER_CLIENT.raiseEvent(key, 'Error', event) - } - - - for (let processIndex = 0; processIndex < global.TASK_NODE.bot.processes.length; processIndex++) { - let config = global.TASK_NODE.bot.processes[processIndex].config - - /* Validate that the minimun amount of input required are defined. */ - - if (global.TASK_NODE.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Task without a Task Manager. This process will not be executed. -> Process Instance = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex])); - continue - } - - if (global.TASK_NODE.parentNode.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Task Manager without Mine Tasks. This process will not be executed. -> Process Instance = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex])); - continue - } - - if (global.TASK_NODE.parentNode.parentNode.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Mine Tasks without Market Tasks. This process will not be executed. -> Process Instance = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex])); - continue - } - - if (global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Market Tasks without a Market. This process will not be executed. -> Process Instance = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex])); - continue - } - - global.MARKET_NODE = global.TASK_NODE.parentNode.parentNode.parentNode.referenceParent - - if (global.MARKET_NODE.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Market without a Parent. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE)); - continue - } - - if (global.MARKET_NODE.parentNode.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Exchange Markets without a Parent. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE.parentNode)); - continue - } - - if (global.MARKET_NODE.baseAsset === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Market without a Base Asset. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE)); - continue - } - - if (global.MARKET_NODE.quotedAsset === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Market without a Quoted Asset. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE)); - continue - } - - if (global.MARKET_NODE.baseAsset.referenceParent === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Base Asset without a Reference Parent. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE.baseAsset)); - continue - } - - if (global.MARKET_NODE.quotedAsset.referenceParent === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Quoted Asset without a Reference Parent. This process will not be executed. -> Process Instance = " + JSON.stringify(global.MARKET_NODE.quotedAsset)); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Process Instance without a Reference Parent. This process will not be executed. -> Process Instance = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex])); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Process Definition without parent Bot Definition. -> Process Definition = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex].referenceParent)); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Bot Definition without parent Data Mine. -> Bot Definition = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode)); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent.config.codeName === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Process Definition without a codeName defined. -> Process Definition = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex].referenceParent)); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.config.codeName === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Bot Definition without a codeName defined. -> Bot Definition = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode)); - continue - } - - if (global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode.config.codeName === undefined) { - console.log("[ERROR] Task Server -> server -> bootLoader -> Data Mine without a codeName defined. -> Data Mine Definition = " + JSON.stringify(global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode)); - continue - } - - startRoot(processIndex); - } -} - -function startRoot(processIndex) { - - // console.log('[INFO] Task Server -> server -> startRoot -> Entering function. ') - - const ROOT_MODULE = require('./Root') - let root = ROOT_MODULE.newRoot() - - root.initialize(onInitialized) - - function onInitialized() { - //console.log('[INFO] Task Server -> server -> startRoot -> onInitialized -> Entering function. ') - root.start(processIndex) - } -} - -global.getPercentage = function (fromDate, currentDate, lastDate) { - let fromDays = Math.trunc(fromDate.valueOf() / global.ONE_DAY_IN_MILISECONDS) - let currentDays = Math.trunc(currentDate.valueOf() / global.ONE_DAY_IN_MILISECONDS) - let lastDays = Math.trunc(lastDate.valueOf() / global.ONE_DAY_IN_MILISECONDS) - let percentage = (currentDays - fromDays) * 100 / (lastDays - fromDays) - if ((lastDays - fromDays) === 0) { - percentage = 100 - } - return percentage -} - -global.areEqualDates = function (date1, date2) { - let day1Days = Math.trunc(date1.valueOf() / global.ONE_DAY_IN_MILISECONDS) - let day2Days = Math.trunc(date2.valueOf() / global.ONE_DAY_IN_MILISECONDS) - - if (day1Days === day2Days) { - return true - } else { - return false - } -} - diff --git a/Deprecated-Code/TeamsModule/.gitignore b/Deprecated-Code/TeamsModule/.gitignore deleted file mode 100644 index aa2282e00..000000000 --- a/Deprecated-Code/TeamsModule/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/.cache -.vscode -docs/notes \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/CODE_OF_CONDUCT.md b/Deprecated-Code/TeamsModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/TeamsModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/TeamsModule/CONTRIBUTING.md b/Deprecated-Code/TeamsModule/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/TeamsModule/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/LICENSE b/Deprecated-Code/TeamsModule/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/TeamsModule/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/TeamsModule/README.md b/Deprecated-Code/TeamsModule/README.md deleted file mode 100644 index e90d84ee9..000000000 --- a/Deprecated-Code/TeamsModule/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Superalgos Team Module -[![npm client version](https://badge.fury.io/js/%40superalgos%2Fteams-client.svg)](https://badge.fury.io/js/%40superalgos%2Fteams-client) - -## Introduction - -The general purpose of the team module is - -This module explores crafting a strategic development pattern that upholds the Superalgos principles of rapid-evolution and automation built upon the values of collaboration, permissionless innovation, and accessibility. - -#### This is a monorepo containing the Team GraphQL API server, Team Client, and Team Prisma Schema - -## Quick Start - -Requirements: - -- NodeJS 8+ -- NPM (comes installed with NodeJS) -- [Github authorization via SSH](https://help.github.com/articles/connecting-to-github-with-ssh/): *optional* - removes need to authenticate every push or pull from GitHub especially as this is a private repo. - -1. Clone this repository `git clone https://github.com/Superalgos/TeamsModule.git` -2. `cd aa-team-module` -5. Navigate to desired package in /packages and look at its README.md for further instructions. - -## Getting Started - -_This repo is currently under heavy initial-phase development and is not representative of the more mature product. On that note, feel free to look around and keep an eye out as the development unfolds!_ - -1. Where we set sail — [to the docs!](./docs/README.md) diff --git a/Deprecated-Code/TeamsModule/api/.babelrc b/Deprecated-Code/TeamsModule/api/.babelrc deleted file mode 100644 index b527e371e..000000000 --- a/Deprecated-Code/TeamsModule/api/.babelrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "presets": ["@babel/preset-env"], - "plugins": [ - "@babel/plugin-proposal-throw-expressions", - ["@babel/plugin-proposal-class-properties", { "loose": true }], - ["@babel/plugin-transform-runtime", { "regenerator": true }] - ] -} diff --git a/Deprecated-Code/TeamsModule/api/.dockerignore b/Deprecated-Code/TeamsModule/api/.dockerignore deleted file mode 100644 index c01abdcc3..000000000 --- a/Deprecated-Code/TeamsModule/api/.dockerignore +++ /dev/null @@ -1,16 +0,0 @@ -# Ignore files to be uploaded to the image -.env -.env.dev -.env.prod -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output -/prod -/database diff --git a/Deprecated-Code/TeamsModule/api/.env.local b/Deprecated-Code/TeamsModule/api/.env.local deleted file mode 100644 index 72a8e4afe..000000000 --- a/Deprecated-Code/TeamsModule/api/.env.local +++ /dev/null @@ -1,16 +0,0 @@ -NODE_ENV=production -PORT=4001 - -PRESHARED_GATEWAY_KEY=teams_key - -PRISMA_SECRET=prisma_secret -PRISMA_ENDPOINT=http://prisma:4466 - -GENERATE_SOURCEMAP=true -SCHEMA_PATH=dist/generated/prisma.graphql - -PLATFORM_API_URL=http://localhost:4100/graphql -CHARTS_URL=http://saweb:4101 - - - diff --git a/Deprecated-Code/TeamsModule/api/.gitignore b/Deprecated-Code/TeamsModule/api/.gitignore deleted file mode 100644 index 4d7880f66..000000000 --- a/Deprecated-Code/TeamsModule/api/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -/.env -/.env.prod -/database/.env -/database/docker-compose.prisma.prod.yml -/database/*.zip -/database/data-archive -/docker-compose.prisma.prod.yml -/docker-compose.prod.yml -.graphqlconfig.prod.yml -dist -node_modules -.idea -.vscode -*.log diff --git a/Deprecated-Code/TeamsModule/api/.graphqlconfig.yml b/Deprecated-Code/TeamsModule/api/.graphqlconfig.yml deleted file mode 100644 index d65be026a..000000000 --- a/Deprecated-Code/TeamsModule/api/.graphqlconfig.yml +++ /dev/null @@ -1,12 +0,0 @@ -projects: - app: - schemaPath: src/schema.graphql - extensions: - endpoints: - dev1: - url: http://localhost:4001/graphql - - database: - schemaPath: src/generated/prisma.graphql - extensions: - prisma: database/prisma.yml diff --git a/Deprecated-Code/TeamsModule/api/CODE_OF_CONDUCT.md b/Deprecated-Code/TeamsModule/api/CODE_OF_CONDUCT.md deleted file mode 100644 index c71b685b4..000000000 --- a/Deprecated-Code/TeamsModule/api/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/TeamsModule/api/CONTRIBUTING.md b/Deprecated-Code/TeamsModule/api/CONTRIBUTING.md deleted file mode 100644 index 8eaa96740..000000000 --- a/Deprecated-Code/TeamsModule/api/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP � such as IP you created prior to working for the Project � into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sub-licensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. diff --git a/Deprecated-Code/TeamsModule/api/Dockerfile b/Deprecated-Code/TeamsModule/api/Dockerfile deleted file mode 100644 index 96ce896e9..000000000 --- a/Deprecated-Code/TeamsModule/api/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/teams-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/TeamsModule/api/Dockerfile.prod b/Deprecated-Code/TeamsModule/api/Dockerfile.prod deleted file mode 100644 index 3b0efa0d2..000000000 --- a/Deprecated-Code/TeamsModule/api/Dockerfile.prod +++ /dev/null @@ -1,23 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4001 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# RUN npm audit fix - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/TeamsModule/api/LICENSE b/Deprecated-Code/TeamsModule/api/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/TeamsModule/api/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/TeamsModule/api/README.md b/Deprecated-Code/TeamsModule/api/README.md deleted file mode 100644 index 1059d7ad2..000000000 --- a/Deprecated-Code/TeamsModule/api/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Superalgos Team GraphQL API Server - -This is the Superalgos Team Module server-side GraphQL API server. We use Webpack 4 + Docker to develop locally, then build to a distribution bundle that can then be uploaded via FTP, git or used with a continuous integration workflow. - -This modules client-side frontend is in the [client directory](../client#README). - -## Getting Started - -Run -``` - npm install -``` -then -``` - npm run dev -``` - -## Overview -The Superalgos/TeamModule API is a GraphQL server that serves the necessary queries and mutations for Superalgos teams to browser clients and the Superalgos platform. - -### Main Libraries - -- [*Prisma*](https://www.prisma.io/): GraphQL ORM for Postgres. -- [*Graphql*](https://graphql.org/): GraphQL is a query language for APIs and a runtime for fulfilling those queries. -- [*Apollo Server*](https://www.apollographql.com/docs/apollo-server/): Apollo Server is the best way to quickly build a production-ready, self-documenting API for GraphQL clients, using data from any source. -- [*Docker*](https://www.docker.com/what-docker) - -### File organization - -``` -. # Top level directory located at your choice -├── database # Database files for local Prisma development -├── src -│ ├── directives # Directives for role permissions -│ ├── errors # error handling -│ ├── generated # Auto-compile GraphQl schema from Prisma endpoint -│ ├── graphql # GraphQL API schema + resolvers -│ ├── logger # Utils for logging -│ ├── middleware # Server middleware -│ └── storage # Azure storage service -├── ApolloServer.js # Main Apollo Server setup -│ -└── index.js # Server API entrypoint - -``` diff --git a/Deprecated-Code/TeamsModule/api/database/datamodel.graphql b/Deprecated-Code/TeamsModule/api/database/datamodel.graphql deleted file mode 100644 index a846922e7..000000000 --- a/Deprecated-Code/TeamsModule/api/database/datamodel.graphql +++ /dev/null @@ -1,119 +0,0 @@ -enum Role { - OWNER - ADMIN - MEMBER -} - -enum Status { - ACTIVE - INACTIVE - APPLIED - INVITED - REMOVED -} - -enum FBType { - BOT - NET - ADVANCED -} - -enum FBKind { - TRADER - INDICATOR - EXTRACTOR - PLOTTER - Trader - Trading - Indicator - Sensor - Plotter -} - -type Team { - id: ID! @unique - name: String! @unique - slug: String! @unique - profile: TeamProfile - members: [TeamMembers!]! @relation (name: "TeamMembers", onDelete: SET_NULL) - owner: String! - wallet: Wallet - fb: [FinancialBeings!]! @relation (name: "TeamFinancialBeing", onDelete: SET_NULL) - status: [TeamStatus!]! - createdAt: DateTime! -} - -type TeamProfile { - id: ID! @unique - description: String - motto: String - avatar: String - banner: String - createdAt: DateTime! - updatedAt: DateTime! -} - -type TeamStatus { - id: ID! @unique - status: Status @Default(value: inactive) - reason: String - createdAt: DateTime! -} - -type TeamMembers { - id: ID! @unique - member: Member @relation (name: "MemberOnTeam", onDelete: SET_NULL) - team: Team @relation (name: "TeamMembers", onDelete: SET_NULL) - role: Role @default(value: MEMBER) - status: [TeamMemberStatus!]! - email: String @unique - createdAt: DateTime! -} - -type TeamMemberStatus { - id: ID! @unique - status: Status @Default(value: INACTIVE) - reason: String - createdAt: DateTime! -} - -type Member { - id: ID! @unique - alias: String - teams: [TeamMembers!]! @relation (name: "MemberOnTeam", onDelete: SET_NULL) - authId: String! @unique - visible: Boolean! @default(value: true) - status: [MemberStatus!]! - createdAt: DateTime! -} - -type MemberStatus { - id: ID! @unique - status: Status @Default(value: INACTIVE) - reason: String - createdAt: DateTime! -} - -type Wallet { - id: ID! @unique - balance: Float - createdAt: DateTime! -} - -type FinancialBeings { - id: ID! @unique - type: FBType - kind: FBKind - name: String! - slug: String! - avatar: String - team: Team @relation (name: "TeamFinancialBeing", onDelete: SET_NULL) - status: [FBStatus!]! -} - -type FBStatus { - id: ID! @unique - status: Status @Default(value: inactive) - reason: String - createdAt: DateTime! -} diff --git a/Deprecated-Code/TeamsModule/api/database/prisma.yml b/Deprecated-Code/TeamsModule/api/database/prisma.yml deleted file mode 100644 index 39994dc66..000000000 --- a/Deprecated-Code/TeamsModule/api/database/prisma.yml +++ /dev/null @@ -1,8 +0,0 @@ -secret: ${env:PRISMA_SECRET} -endpoint: ${env:PRISMA_ENDPOINT} -datamodel: datamodel.graphql - -hooks: - post-deploy: - - graphql get-schema --project database - - graphql prepare diff --git a/Deprecated-Code/TeamsModule/api/docker-compose.api.yml b/Deprecated-Code/TeamsModule/api/docker-compose.api.yml deleted file mode 100644 index b5835a14d..000000000 --- a/Deprecated-Code/TeamsModule/api/docker-compose.api.yml +++ /dev/null @@ -1,23 +0,0 @@ -version: '3' -services: - node: - build: - context: . - dockerfile: ./prod/Dockerfile.prod - env_file: ./.env.prod - container_name: sateamapi - tty: true - stdin_open: true - volumes: - - ./dist:/usr/src/app - - /usr/src/app/node_modules - working_dir: /usr/src/app - restart: always - command: node -r dotenv/config index.js - expose: - - 4001 - # network_mode: webproxy -# networks: -# default: -# external: -# name: webproxy diff --git a/Deprecated-Code/TeamsModule/api/docker-compose.prisma.yml b/Deprecated-Code/TeamsModule/api/docker-compose.prisma.yml deleted file mode 100644 index 52cbe03ae..000000000 --- a/Deprecated-Code/TeamsModule/api/docker-compose.prisma.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: '3' -services: - prisma: - image: prismagraphql/prisma:1.20 - restart: always - ports: - - "4466:4466" - environment: - PRISMA_CONFIG: | - managementApiSecret: ${PRISMA_SECRET} - port: 4466 - databases: - default: - connector: postgres - host: postgres - port: 5432 - user: prisma - password: prisma - migrations: true - postgres: - image: postgres - restart: always - environment: - POSTGRES_USER: prisma - POSTGRES_PASSWORD: prisma - volumes: - - postgres:/var/lib/postgresql/data -volumes: - postgres: diff --git a/Deprecated-Code/TeamsModule/api/docker-compose.yml b/Deprecated-Code/TeamsModule/api/docker-compose.yml deleted file mode 100644 index 57dc62ef6..000000000 --- a/Deprecated-Code/TeamsModule/api/docker-compose.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: '3' -services: - prisma: - image: prismagraphql/prisma:1.15.1 - depends_on: - - postgres - restart: always - ports: - - "4466:4466" - environment: - PRISMA_CONFIG: | - managementApiSecret: ${PRISMA_SECRET} - port: 4466 - databases: - default: - connector: postgres - host: postgres - port: 5432 - user: prisma - password: prisma - migrations: true - postgres: - image: postgres - restart: always - environment: - POSTGRES_USER: prisma - POSTGRES_PASSWORD: prisma - volumes: - - postgres:/var/lib/postgresql/data -volumes: - postgres: diff --git a/Deprecated-Code/TeamsModule/api/package-lock.json b/Deprecated-Code/TeamsModule/api/package-lock.json deleted file mode 100644 index cde0ed705..000000000 --- a/Deprecated-Code/TeamsModule/api/package-lock.json +++ /dev/null @@ -1,11065 +0,0 @@ -{ - "name": "@superalgos/teams-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@apollographql/apollo-tools": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.6.tgz", - "integrity": "sha512-j59jXpFACU1WY5+O2T7qg5OgIPIiOoynO+UlOsDWiazmqc1dOe597VlIraj1w+XClYrerx6NhhLY2yHXECYFVA==", - "requires": { - "apollo-env": "0.5.0" - } - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" - }, - "@azure/ms-rest-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.3.tgz", - "integrity": "sha512-eROQ034b+9v0Hd3wETKi/EwF5pqS3VRAk1Lm8iKVPOP8v30f6Zfzsi420MRfBMsbNCx/mE2N0L65Px7tvcGfVg==", - "requires": { - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - } - }, - "@azure/storage-blob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-10.3.0.tgz", - "integrity": "sha512-KZbJ3q8RpAdeIB5Em1lgXkiq7Mll9bSHHbHavOFMepkkF7HQa3Sez9FdkAVIkVVWK5YoBlshBGZ+mtiSQiS9Fw==", - "requires": { - "@azure/ms-rest-js": "1.2.3", - "events": "3.0.0", - "tslib": "^1.9.3" - } - }, - "@babel/cli": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.4.4.tgz", - "integrity": "sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==", - "dev": true, - "requires": { - "chokidar": "^2.0.4", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.11", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/node": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.2.2.tgz", - "integrity": "sha512-jPqgTycE26uFsuWpLika9Ohz9dmLQHWjOnMNxBOjYb1HXO+eLKxEr5FfKSXH/tBvFwwaw+pzke3gagnurGOfCA==", - "dev": true, - "requires": { - "@babel/polyfill": "^7.0.0", - "@babel/register": "^7.0.0", - "commander": "^2.8.1", - "lodash": "^4.17.10", - "v8flags": "^3.1.1" - } - }, - "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", - "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-throw-expressions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.2.0.tgz", - "integrity": "sha512-adsydM8DQF4i5DLNO4ySAU5VtHTPewOtNBV3u7F4lNMPADFF9bWQ+iDtUUe8+033cYCUz+bFlQdXQJmJOwoLpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-throw-expressions": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-throw-expressions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.2.0.tgz", - "integrity": "sha512-ngwynuqu1Rx0JUS9zxSDuPgW1K8TyVZCi2hHehrL4vyjqE7RGoNHWlZsS7KQT2vw9Yjk4YLa0+KldBXTRdPLRg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.4" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/polyfill": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", - "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/register": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz", - "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==", - "requires": { - "core-js": "^3.0.0", - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.11", - "mkdirp": "^0.5.1", - "pirates": "^4.0.0", - "source-map-support": "^0.5.9" - }, - "dependencies": { - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==" - } - } - }, - "@babel/runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", - "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "@heroku/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@heroku/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-qPeQp2DnALUwWKaL6ZXfnOw/lHp+zNg5V8whx5c/Y10HMWYjuQFqKupgoJgyuEYjnvYwoZTarW280+aOXWQLCQ==", - "dev": true - }, - "@kbrandwijk/swagger-to-graphql": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@kbrandwijk/swagger-to-graphql/-/swagger-to-graphql-2.4.3.tgz", - "integrity": "sha512-CNVsCrMge/jq6DCT5buNZ8PACY9RTvPJbCNoIcndfkJOCsNxOx9dnc5qw4pHZdHi8GS6l3qlgkuFKp33iD8J2Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.25.0", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.8.4", - "json-schema-ref-parser": "^3.1.2", - "lodash": "^4.16.4", - "node-request-by-swagger": "^1.0.6", - "request": "^2.75.0", - "request-promise": "^4.1.1", - "yargs": "^8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bson": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", - "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", - "requires": { - "@types/express": "*" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-jwt": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz", - "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=", - "requires": { - "@types/express": "*", - "@types/express-unless": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz", - "integrity": "sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/express-unless": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.1.tgz", - "integrity": "sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==", - "requires": { - "@types/express": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", - "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" - }, - "@types/methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.0.tgz", - "integrity": "sha512-ROomEm+QHlUmcQoDr3CBo3GRm0w4PVoFYjVT9YcfyBha/Per4deb1IpvHU7KTK7YBZCIvOYbSADoEyDnFgaWLA==", - "dev": true - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/mongodb": { - "version": "3.1.26", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.26.tgz", - "integrity": "sha512-i7+l95IbqnGLRW+AJ6F2nzqosLUgU022lDuoHhbQquMV7tgek0vNUg9RwC2Fn7ImBSQSFdCWeU394ciPEwSeaQ==", - "dev": true, - "requires": { - "@types/bson": "*", - "@types/node": "*" - } - }, - "@types/mysql": { - "version": "2.15.6", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.6.tgz", - "integrity": "sha512-PJBY2R3jGJwGrmFgGAJ+1nj4S/PLkF6nT+HvUygniq9ZcVht0mTH1TLAjjyfIXf9FfrELs8mbqOrWa/Tn89NCA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.1.tgz", - "integrity": "sha512-7sy7DKVJrCTbaAERJZq/CU12bzdmpjRr321/Ne9QmzhB3iZ//L16Cizcni5hHNbANxDbxwMb9EFoWkM8KPkp0A==" - }, - "@types/prettier": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.16.3.tgz", - "integrity": "sha512-5Ksgx9H/Yjz6oamDbmDZstWlJGPTao7shNfambjf8o7OkHxDwAi0AJLQcFwS9pDKI4gQPdiKZXze3nT1eCOViQ==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", - "dev": true - }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", - "requires": { - "@types/events": "*", - "@types/node": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "adm-zip": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", - "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", - "dev": true - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", - "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "apollo-cache-control": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.6.0.tgz", - "integrity": "sha512-66aCF6MHe0/FdD3knphwTv6CCIdb1ZxrMsiRpxP474qqyYVe2jAwBu6aJBn4emffZHZ7i6gp9dY6cPHThjnbKA==", - "requires": { - "apollo-server-env": "2.3.0", - "graphql-extensions": "0.6.0" - } - }, - "apollo-codegen": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/apollo-codegen/-/apollo-codegen-0.20.2.tgz", - "integrity": "sha512-f95fPGoQoj+XcR7JWgR35mUYrD7RWT4kHbtSLs3aHeRFOKUHEWW2nHUNTOtQbbIdLulRuxPQCTvSddT7fFwhrA==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0", - "apollo-codegen-flow": "^0.20.0", - "apollo-codegen-flow-legacy": "^0.20.0", - "apollo-codegen-scala": "^0.20.0", - "apollo-codegen-swift": "^0.20.0", - "apollo-codegen-typescript": "^0.20.0", - "apollo-codegen-typescript-legacy": "^0.20.0", - "glob": "^7.1.2", - "graphql": "^0.13.1", - "node-fetch": "^1.7.3", - "rimraf": "^2.6.2", - "source-map-support": "^0.5.0", - "yargs": "^10.0.3" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "dev": true, - "requires": { - "iterall": "^1.2.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" - } - }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "apollo-codegen-core": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/apollo-codegen-core/-/apollo-codegen-core-0.20.1.tgz", - "integrity": "sha512-sanUIqXWyyDpxY3fYOVU+Hsxwxdj5fmn3Zcy6CcMGnWmh9o7tautQAuod2a63wrDs1jcNQcFq3EKIpeB+2xECw==", - "dev": true, - "requires": { - "@babel/generator": "7.0.0-beta.38", - "@babel/types": "7.0.0-beta.38", - "common-tags": "^1.5.1", - "core-js": "^2.5.3", - "graphql-config": "^2.0.1" - }, - "dependencies": { - "@babel/generator": { - "version": "7.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.38.tgz", - "integrity": "sha512-aOHQPhsEyaB6p2n+AK981+onHoc+Ork9rcAQVSUJR33wUkGiWRpu6/C685knRyIZVsKeSdG5Q4xMiYeFUhuLzA==", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.38", - "jsesc": "^2.5.1", - "lodash": "^4.2.0", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/types": { - "version": "7.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.38.tgz", - "integrity": "sha512-SAtyEjmA7KiEoL2eAOAUM6M9arQJGWxJKK0S9x0WyPOosHS420RXoxPhn57u/8orRnK8Kxm0nHQQNTX203cP1Q==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "apollo-codegen-flow": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-flow/-/apollo-codegen-flow-0.20.0.tgz", - "integrity": "sha512-XgKE19B0Q74PBLVqHP/77NcCFrcvrN9wi3CcotH+FV8BeHTjvpHlilTsQMmd2STPt19cCvY2Qtz0EOeLXTUQ2Q==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0", - "change-case": "^3.0.1", - "inflected": "^2.0.3" - } - }, - "apollo-codegen-flow-legacy": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-flow-legacy/-/apollo-codegen-flow-legacy-0.20.0.tgz", - "integrity": "sha512-kGjJNkkkob9gGYSIhwfdgOzkj0PuN4/QPhng4ckSaSCE+8E4Awyvk0P8LiYPKauHzHVjmJzxWLSG6kI0PQTNgA==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0" - } - }, - "apollo-codegen-scala": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-scala/-/apollo-codegen-scala-0.20.0.tgz", - "integrity": "sha512-NbnMOfUXXovlTGRj4mIZGXB9HvidQhwKfAmdYHox5peHPkjjsqEzxGCIuWCSnubWiCF2uHZnQoIkg4sXWf0KLw==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0", - "change-case": "^3.0.1", - "inflected": "^2.0.3" - } - }, - "apollo-codegen-swift": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-swift/-/apollo-codegen-swift-0.20.0.tgz", - "integrity": "sha512-L9Y4StbXw0t/nuF+miz0ybSt/io6tsLc063Yeh1A8GCvhFFQyXE/yK0Rf3nO1Bl5Z9UZ5o8Aae9kK4GSWYIGNQ==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0", - "change-case": "^3.0.1", - "inflected": "^2.0.3" - } - }, - "apollo-codegen-typescript": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-typescript/-/apollo-codegen-typescript-0.20.0.tgz", - "integrity": "sha512-mzlIJXz+5WPwzeALqRHHR9aPPEf6IlhSrjCawpUHmFU1NK9hgwbguYCEYZv9mKkYBUUgDY+9cGFK1cafJX70AQ==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0", - "change-case": "^3.0.1", - "inflected": "^2.0.3" - } - }, - "apollo-codegen-typescript-legacy": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/apollo-codegen-typescript-legacy/-/apollo-codegen-typescript-legacy-0.20.0.tgz", - "integrity": "sha512-0/h5hce2FIGn6Y4+EHMeMINQxFwcgjw1vU+xV3KGaaEgyEAEQ3/n9pyz43M8mOm/JVgg8Eb4CtM1AtCkRQuFGw==", - "dev": true, - "requires": { - "apollo-codegen-core": "^0.20.0" - } - }, - "apollo-datasource": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.4.0.tgz", - "integrity": "sha512-6QkgnLYwQrW0qv+yXIf617DojJbGmza2XJXUlgnzrGGhxzfAynzEjaLyYkc8rYS1m82vjrl9EOmLHTcnVkvZAQ==", - "requires": { - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.3.0" - } - }, - "apollo-engine-reporting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.1.0.tgz", - "integrity": "sha512-Dj0BwgcluHL0QVUaquhAoYoLX9Z4DRP/n2REcIwO8d2iy52r+1wN5QqZLx97dEFh7CjhNjTWeysJzc8XMWKa1Q==", - "requires": { - "apollo-engine-reporting-protobuf": "0.3.0", - "apollo-graphql": "^0.2.1-alpha.1", - "apollo-server-core": "2.5.0", - "apollo-server-env": "2.3.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.6.0" - } - }, - "apollo-engine-reporting-protobuf": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.0.tgz", - "integrity": "sha512-PYowpx/E+TJT/8nKpp3JmJuKh3x1SZcxDF6Cquj0soV205TUpFFCZQMi91i5ACiEp2AkYvM/GDBIrw+rfIwzTg==", - "requires": { - "protobufjs": "^6.8.6" - } - }, - "apollo-env": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.0.tgz", - "integrity": "sha512-yzajZupxouVtSUJiqkjhiQZKnagfwZeHjqRHkgV+rTCNuJkfdcoskSQm7zk5hhcS1JMunuD6INC1l4PHq+o+wQ==", - "requires": { - "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - }, - "dependencies": { - "core-js": { - "version": "3.0.0-beta.13", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", - "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" - } - } - }, - "apollo-errors": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/apollo-errors/-/apollo-errors-1.9.0.tgz", - "integrity": "sha512-XVukHd0KLvgY6tNjsPS3/Re3U6RQlTKrTbIpqqeTMo2N34uQMr+H1UheV21o8hOZBAFosvBORVricJiP5vfmrw==", - "requires": { - "assert": "^1.4.1", - "extendable-error": "^0.1.5" - } - }, - "apollo-graphql": { - "version": "0.2.1-register.1", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.2.1-register.1.tgz", - "integrity": "sha512-Z2LOuvYomC9CN9K+mpFVcVQu6Ml5PIJlV+YOkGzFq73xeqWg1InxHqI3eEdCEhxTJq6H8rlWT8ATrMS+4sIhqw==", - "requires": { - "apollo-env": "0.4.1-register.1", - "lodash.sortby": "^4.7.0" - }, - "dependencies": { - "apollo-env": { - "version": "0.4.1-register.1", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.4.1-register.1.tgz", - "integrity": "sha512-fg1US7YZ6yW1N0tFq8g4HpCR3eJZmI+rIiHDiknYN9D1MTjvwYdmXYhi7VaPvQ21hV5nMRvfBUMqYXjP+6FsGQ==", - "requires": { - "core-js": "3.0.0-beta.13", - "node-fetch": "^2.2.0", - "sha.js": "^2.4.11" - } - }, - "core-js": { - "version": "3.0.0-beta.13", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", - "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" - } - } - }, - "apollo-link": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", - "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", - "requires": { - "apollo-utilities": "^1.2.1", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3", - "zen-observable-ts": "^0.8.18" - } - }, - "apollo-link-error": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.10.tgz", - "integrity": "sha512-itG5UV7mQqaalmRkuRsF0cUS4zW2ja8XCbxkMZnIEeN24X3yoJi5hpJeAaEkXf0KgYNsR0+rmtCQNruWyxDnZQ==", - "requires": { - "apollo-link": "^1.2.11", - "apollo-link-http-common": "^0.2.13", - "tslib": "^1.9.3" - } - }, - "apollo-link-http-common": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.13.tgz", - "integrity": "sha512-Uyg1ECQpTTA691Fwx5e6Rc/6CPSu4TB4pQRTGIpwZ4l5JDOQ+812Wvi/e3IInmzOZpwx5YrrOfXrtN8BrsDXoA==", - "requires": { - "apollo-link": "^1.2.11", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3" - } - }, - "apollo-link-ws": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/apollo-link-ws/-/apollo-link-ws-1.0.17.tgz", - "integrity": "sha512-0PKgahM2BOcUiI3QSJMYXOoUylWKzar5NTZLgMLEW4K/CczOTzC4CTXvKMjh/cx57Jto/U2xzKRy9BEoNfnK5Q==", - "requires": { - "apollo-link": "^1.2.11", - "tslib": "^1.9.3" - } - }, - "apollo-server-caching": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz", - "integrity": "sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==", - "requires": { - "lru-cache": "^5.0.0" - } - }, - "apollo-server-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.5.0.tgz", - "integrity": "sha512-7hyQ/Rt0hC38bUfxMQmLNHDBIGEBykFWo9EO0W+3o/cno/SqBKd1KKichrABVv+v+SCvZAUutX6gYS5l3G+ULQ==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6-alpha.1", - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.6.0", - "apollo-datasource": "0.4.0", - "apollo-engine-reporting": "1.1.0", - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.3.0", - "apollo-server-errors": "2.3.0", - "apollo-server-plugin-base": "0.4.0", - "apollo-tracing": "0.6.0", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "0.6.0", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - } - }, - "apollo-server-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.3.0.tgz", - "integrity": "sha512-WIwlkCM/gir0CkoYWPMTCH8uGCCKB/aM074U1bKayvkFOBVO2VgG5x2kgsfkyF05IMQq2/GOTsKhNY7RnUEhTA==", - "requires": { - "node-fetch": "^2.1.2", - "util.promisify": "^1.0.0" - } - }, - "apollo-server-errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz", - "integrity": "sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw==" - }, - "apollo-server-express": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.5.0.tgz", - "integrity": "sha512-2gd3VWIqji2jyDYMTTqKzVU4/znjEjugtLUmPgVl5SoBvJSMTsO7VgJv+roBubZGDK8jXXUEXr2a33RtIeHe4g==", - "requires": { - "@apollographql/graphql-playground-html": "^1.6.6", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.16.1", - "accepts": "^1.3.5", - "apollo-server-core": "2.5.0", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" - } - }, - "apollo-server-plugin-base": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.4.0.tgz", - "integrity": "sha512-iD7ARNtwnvHGd1EMPK0CuodM8d8hgDvFwTfIDzJY04QIQ6/KrBFaWhnCXJsy+HMb47GovwBbq67IK6eb2WJgBg==" - }, - "apollo-tracing": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.6.0.tgz", - "integrity": "sha512-OpYPHVBgcQ/HT2WLXJQWwhilzR1rrl01tZeMU2N7yinsp/oyKngF5aUSMtuvX1k/T3abilQo+w10oAQlBCGdPA==", - "requires": { - "apollo-server-env": "2.3.0", - "graphql-extensions": "0.6.0" - } - }, - "apollo-utilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", - "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.2.1", - "tslib": "^1.9.3" - }, - "dependencies": { - "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true - }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-retry": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", - "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==", - "requires": { - "retry": "0.12.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bignumber.js": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==", - "dev": true - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "dev": true - }, - "busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "requires": { - "dicer": "0.3.0" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-lite": { - "version": "1.0.30000967", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", - "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "cardinal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", - "integrity": "sha1-UOIcGwqjdyn5N33vGWtanOyTLuk=", - "dev": true, - "requires": { - "ansicolors": "~0.2.1", - "redeyed": "~1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-case": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", - "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "constant-case": "^2.0.0", - "dot-case": "^2.1.0", - "header-case": "^1.0.0", - "is-lower-case": "^1.1.0", - "is-upper-case": "^1.1.0", - "lower-case": "^1.1.1", - "lower-case-first": "^1.0.0", - "no-case": "^2.3.2", - "param-case": "^2.1.0", - "pascal-case": "^2.0.0", - "path-case": "^2.1.0", - "sentence-case": "^2.1.0", - "snake-case": "^2.1.0", - "swap-case": "^1.1.0", - "title-case": "^2.1.0", - "upper-case": "^1.1.1", - "upper-case-first": "^1.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "charm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", - "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", - "dev": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", - "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", - "dev": true, - "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz", - "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==", - "dev": true - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "configstore": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz", - "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==", - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "dev": true, - "requires": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" - }, - "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", - "dev": true, - "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", - "dev": true - }, - "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "creato": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/creato/-/creato-1.0.5.tgz", - "integrity": "sha512-bneB5jF+I0XNe4d3E6PYszPRb+5S8B3UQ3hDlY6ZSkfEU34RKqCfbUodxwwJn8DhmPYiuefEqEGxvstXEwXuUA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "inquirer": "^6.2.0", - "mkdirp": "^0.5.1", - "ora": "^3.0.0", - "parse-github-url": "^1.0.2", - "request": "^2.88.0", - "tar": "^4.4.7", - "tmp": "^0.1.0", - "update-notifier": "^2.5.0" - } - }, - "cross-fetch": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.2.tgz", - "integrity": "sha512-a4Z0EJ5Nck6QtMy9ZqloLfpvu2uMV3sBfMCR+CgSBCZc6z5KR4bfEiD3dkepH8iZgJMXQpTqf8FjMmvu/GMFkg==", - "requires": { - "node-fetch": "2.3.0", - "whatwg-fetch": "3.0.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" - }, - "cucumber-html-reporter": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cucumber-html-reporter/-/cucumber-html-reporter-3.0.4.tgz", - "integrity": "sha512-uit68jymdI8Z6m+kJ5YnJPeHf5IdYXt2j52l5xLwgpcLBQRhCvr1peV9UODaCN5nLnRN9nqh1qaw4iNp1rTpvQ==", - "dev": true, - "requires": { - "find": "^0.2.7", - "fs-extra": "^3.0.1", - "js-base64": "^2.3.2", - "jsonfile": "^3.0.0", - "lodash": "^4.17.2", - "open": "0.0.5" - }, - "dependencies": { - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dataloader": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deprecated-decorator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz", - "integrity": "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "requires": { - "streamsearch": "0.1.2" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "directory-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/directory-tree/-/directory-tree-2.2.1.tgz", - "integrity": "sha512-AWgnCDEKC2/oSAA/0Ae3RhXnMkvOZtNAVQu7wF2/qXF5Xm8LhjWnEXLV4Yza45SmWkNPvNlo4zWPhZjcVd4T5w==", - "dev": true - }, - "disparity": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", - "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", - "dev": true, - "requires": { - "ansi-styles": "^2.0.1", - "diff": "^1.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - } - } - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.133", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz", - "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "express-jwt": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz", - "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==", - "requires": { - "async": "^1.5.0", - "express-unless": "^0.3.0", - "jsonwebtoken": "^8.1.0", - "lodash.set": "^4.0.0" - } - }, - "express-request-proxy": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/express-request-proxy/-/express-request-proxy-2.2.2.tgz", - "integrity": "sha512-0Dzn6LQG0ohd2S+zJVMhsntwcDakEzm/uKJSZxH7B66ZBvTsB5LU/HvfO1dHG+RRiKuCg0aWfUa66PljnDjEdw==", - "dev": true, - "requires": { - "async": "^2.6.1", - "body-parser": "^1.18.3", - "camel-case": "^3.0.0", - "debug": "^3.1.0", - "lodash": "^4.17.10", - "lru-cache": "^4.1.3", - "path-to-regexp": "^1.1.1", - "request": "^2.87.0", - "simple-errors": "^1.0.1", - "through2": "^2.0.3", - "type-is": "^1.6.16", - "url-join": "4.0.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "express-unless": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", - "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA=" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extendable-error": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.5.tgz", - "integrity": "sha1-EiMIpwl7yJomOyxPvwiceBQOO20=" - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fast-xml-parser": { - "version": "3.12.16", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.12.16.tgz", - "integrity": "sha512-7ePrHTK4K9BLzY3+6ZOv2YEPOpdYJg3ohyMHxacG6kp1A0Y8KNyjrFfEHJuo8G4T7vT7cIlIXGWoHdIWu9U41A==", - "requires": { - "configstore": "^4.0.0", - "lodash": "^4.17.11", - "nimnjs": "^1.3.2" - } - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz", - "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=", - "dev": true, - "requires": { - "traverse-chain": "~0.1.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "flow-bin": { - "version": "0.87.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.87.0.tgz", - "integrity": "sha512-mnvBXXZkUp4y6A96bR5BHa3q1ioIIN2L10w5osxJqagAakTXFYZwjl0t9cT3y2aCEf1wnK6n91xgYypQS/Dqbw==", - "dev": true - }, - "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "format-util": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz", - "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-capacitor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", - "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graphcool-json-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/graphcool-json-schema/-/graphcool-json-schema-1.2.1.tgz", - "integrity": "sha1-bO+2yLUFQ2FebvpDu1T54/uygfM=", - "dev": true - }, - "graphcool-yml": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/graphcool-yml/-/graphcool-yml-0.4.15.tgz", - "integrity": "sha512-ZVbRfVI8l21+1JQkcG0XuRam9mgiVUh9/PIcluzCZca2+lZQg/e1WCDXpwsC69i2ZdPcZwpOCLFKQMg5rnulCA==", - "dev": true, - "requires": { - "ajv": "^5.5.1", - "bluebird": "^3.5.1", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^4.0.3", - "graphcool-json-schema": "1.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - } - } - }, - "graphql": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.3.0.tgz", - "integrity": "sha512-MdfI4v7kSNC3NhB7cF8KNijDsifuWO2XOtzpyququqaclO8wVuChYv+KogexDwgP5sp7nFI9Z6N4QHgoLkfjrg==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-binding": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/graphql-binding/-/graphql-binding-2.5.1.tgz", - "integrity": "sha512-9Lejxa7h/WcNZYyTvFQG12QUK8pkgbeEbEnMw3o/DsRhlIB8hrh+a+mbJgHpZ+dcUzSBGyTByiLAI3OLg7B//g==", - "requires": { - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", - "graphql-import": "^0.7.1", - "graphql-tools": "4.0.4", - "iterall": "1.2.2", - "object-path-immutable": "^3.0.0", - "resolve-cwd": "^2.0.0", - "ts-node": "^7.0.1", - "yargs": "^12.0.2" - } - }, - "graphql-cli": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graphql-cli/-/graphql-cli-3.0.11.tgz", - "integrity": "sha512-VK2lehlwL/PAA7aiUIouomV4ITIjjBA/Xxwr0AOvpAS0nE2q0STKBsGZ/ScMeS7Qv0bCyxKWXJ1dti8Hrfzd+Q==", - "dev": true, - "requires": { - "apollo-codegen": "^0.20.2", - "chalk": "^2.4.1", - "command-exists": "^1.2.8", - "creato": "^1.0.3", - "cross-spawn": "^6.0.5", - "disparity": "^2.0.0", - "dotenv": "^6.1.0", - "express": "^4.16.4", - "express-request-proxy": "^2.2.2", - "graphql": "^14.0.2", - "graphql-cli-prepare": "1.4.19", - "graphql-config": "2.2.1", - "graphql-config-extension-graphcool": "1.0.11", - "graphql-config-extension-prisma": "0.3.0", - "graphql-playground-middleware-express": "1.7.12", - "graphql-schema-linter": "0.2.0", - "inquirer": "6.2.0", - "is-url-superb": "2.0.0", - "js-yaml": "^3.12.0", - "lodash": "^4.17.11", - "mkdirp": "^0.5.1", - "node-fetch": "^2.3.0", - "npm-paths": "^1.0.0", - "npm-run": "4.1.2", - "opn": "^5.4.0", - "ora": "^3.0.0", - "rimraf": "2.6.3", - "source-map-support": "^0.5.9", - "tmp-graphql-config-extension-openapi": "^1.0.7", - "update-notifier": "^2.5.0", - "yargs": "12.0.5" - } - }, - "graphql-cli-prepare": { - "version": "1.4.19", - "resolved": "https://registry.npmjs.org/graphql-cli-prepare/-/graphql-cli-prepare-1.4.19.tgz", - "integrity": "sha512-PJFm9/DvfZwKz3h2Wyn/5Sr/sX35XsYzNO3olfm5V8qqueNIONI0g7sVqpF7wYdvhEtt/8YA9DjgrGclCbpMfA==", - "dev": true, - "requires": { - "chalk": "2.3.1", - "fs-extra": "5.0.0", - "graphql-import": "0.4.5", - "graphql-static-binding": "0.9.3", - "lodash": "4.17.5" - }, - "dependencies": { - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.2.0" - } - }, - "graphql-import": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.4.5.tgz", - "integrity": "sha512-G/+I08Qp6/QGTb9qapknCm3yPHV0ZL7wbaalWFpxsfR8ZhZoTBe//LsbsCKlbALQpcMegchpJhpTSKiJjhaVqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } - } - }, - "graphql-config": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-2.2.1.tgz", - "integrity": "sha512-U8+1IAhw9m6WkZRRcyj8ZarK96R6lQBQ0an4lp76Ps9FyhOXENC5YQOxOFGm5CxPrX2rD0g3Je4zG5xdNJjwzQ==", - "dev": true, - "requires": { - "graphql-import": "^0.7.1", - "graphql-request": "^1.5.0", - "js-yaml": "^3.10.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.4" - } - }, - "graphql-config-extension-graphcool": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/graphql-config-extension-graphcool/-/graphql-config-extension-graphcool-1.0.11.tgz", - "integrity": "sha512-uNhyMqj30M4KLkD/gGEEr6cPuVX/jtm0C9O5Bj9V2jFhN5IdHXWJx+fC/p/xxh82iOuR8uibKNCXzwA7R6F6IA==", - "dev": true, - "requires": { - "graphcool-yml": "0.4.15", - "graphql-config": "2.2.1" - } - }, - "graphql-config-extension-prisma": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/graphql-config-extension-prisma/-/graphql-config-extension-prisma-0.3.0.tgz", - "integrity": "sha512-bOufkkog0cSfHJ9gVD3Wy+KHmkSTHWcFfPaV/NVpIvfJx15gU0/CzuC6lcTjioWmn+UGzYdoqmP7OrJAWT57sw==", - "dev": true, - "requires": { - "graphql-config": "2.2.1", - "prisma-yml": "1.26.6" - } - }, - "graphql-extensions": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.6.0.tgz", - "integrity": "sha512-SshzmbD68fHXRv2q3St29olMOxHDLQ5e9TOh+Tz2BYxinrfhjFaPNcEefiK/vF295wW827Y58bdO11Xmhf8J+Q==", - "requires": { - "@apollographql/apollo-tools": "^0.3.6-alpha.1" - } - }, - "graphql-import": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/graphql-import/-/graphql-import-0.7.1.tgz", - "integrity": "sha512-YpwpaPjRUVlw2SN3OPljpWbVRWAhMAyfSba5U47qGMOSsPLi2gYeJtngGpymjm9nk57RFWEpjqwh4+dpYuFAPw==", - "requires": { - "lodash": "^4.17.4", - "resolve-from": "^4.0.0" - } - }, - "graphql-middleware": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/graphql-middleware/-/graphql-middleware-1.7.8.tgz", - "integrity": "sha512-FNl427I9fCZ9ZwuywPHPbpVJCgDiMS+7dbtaEZu7zJiMP8il2+2T0KRKCiXkfLDKefiGkZnl4qVIFbncCDaduA==", - "requires": { - "graphql-tools": "^4.0.2" - } - }, - "graphql-playground-html": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/graphql-playground-html/-/graphql-playground-html-1.6.12.tgz", - "integrity": "sha512-yOYFwwSMBL0MwufeL8bkrNDgRE7eF/kTHiwrqn9FiR9KLcNIl1xw9l9a+6yIRZM56JReQOHpbQFXTZn1IuSKRg==", - "dev": true - }, - "graphql-playground-middleware-express": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.12.tgz", - "integrity": "sha512-17szgonnVSxWVrgblLRHHLjWnMUONfkULIwSunaMvYx8k5oG3yL86cyGCbHuDFUFkyr2swLhdfYl4mDfDXuvOA==", - "dev": true, - "requires": { - "graphql-playground-html": "1.6.12" - } - }, - "graphql-request": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz", - "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==", - "dev": true, - "requires": { - "cross-fetch": "2.2.2" - }, - "dependencies": { - "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "dev": true, - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", - "dev": true - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - } - } - }, - "graphql-schema-linter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/graphql-schema-linter/-/graphql-schema-linter-0.2.0.tgz", - "integrity": "sha512-IXldy6nCmzAZgweBzQUGPLVO1aRLRy/n/jEm8h8pQHmMYoHv2hQgUcRQRaCbjcdNKYKToN1cfHvdgtGJ+DWSNQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "columnify": "^1.5.4", - "commander": "^2.11.0", - "cosmiconfig": "^4.0.0", - "figures": "^2.0.0", - "glob": "^7.1.2", - "graphql": "^14.0.0", - "lodash": "^4.17.4" - } - }, - "graphql-static-binding": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/graphql-static-binding/-/graphql-static-binding-0.9.3.tgz", - "integrity": "sha512-C8+EqwNCiQxUhbrWEokxN16oINAkhIDBzEpKHXeatBRaAyMczXm0J6HMaMSKOuQmk7P1PbDHIVW3FVZwXF2WJQ==", - "dev": true, - "requires": { - "cucumber-html-reporter": "^3.0.4" - } - }, - "graphql-subscriptions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", - "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", - "requires": { - "iterall": "^1.2.1" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "graphql-tools": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.4.tgz", - "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-utilities": "^1.0.1", - "deprecated-decorator": "^0.1.6", - "iterall": "^1.1.3", - "uuid": "^3.1.0" - } - }, - "graphql-upload": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.6.tgz", - "integrity": "sha512-cBRALMOvGBm2AD6M61b1QbSmKfCLXvgV+Z3wXT2JS1EQwGWQ1g5/sby4J/cpwAaGnq5P2eGp+N3HQI9cSn9Jfg==", - "requires": { - "busboy": "^0.3.1", - "fs-capacitor": "^2.0.1", - "http-errors": "^1.7.2", - "object-path": "^0.11.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-link-dataloader": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/http-link-dataloader/-/http-link-dataloader-0.1.6.tgz", - "integrity": "sha512-r9B/n+SR32k++Z3MIAumI+Kv6ucL3+3ZfqcvGECWVkUc2BmfUWKu6gkPH7+uR1UKyUUJyuZENOLS/RDXVyXVTA==", - "requires": { - "apollo-link": "^1.2.3", - "cross-fetch": "2.2.2", - "dataloader": "^1.4.0" - }, - "dependencies": { - "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - } - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflected": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.0.4.tgz", - "integrity": "sha512-HQPzFLTTUvwfeUH6RAGjD8cHS069mBqXG5n4qaxX7sJXBhVQrsGgF+0ZJGkSuN6a8pcUWB/GXStta11kKi/WvA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "dev": true, - "requires": { - "lower-case": "^1.1.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", - "dev": true, - "requires": { - "upper-case": "^1.1.0" - } - }, - "is-url-superb": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-2.0.0.tgz", - "integrity": "sha1-tyihjPaS5NFtprlMdAioEdsNBJI=", - "dev": true, - "requires": { - "url-regex": "^3.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-ref-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-3.3.1.tgz", - "integrity": "sha512-stQTMhec2R/p2L9dH4XXRlpNCP0mY8QrLd/9Kl+8SHJQmwHtE1nDfXH4wbsSM+GkJMl8t92yZbI0OIol432CIQ==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "debug": "^3.0.0", - "es6-promise": "^4.1.1", - "js-yaml": "^3.9.1", - "ono": "^4.0.2", - "z-schema": "^3.18.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jwks-rsa": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.5.0.tgz", - "integrity": "sha512-Te8gKgrBktDVsf5HB6nxCYYqjAkCiuHgiOa5ZUSN3rYO8CeRkQePZkegsxVA3xOXiJsapIE8nd+ejvA35k6yOg==", - "requires": { - "@types/express-jwt": "0.0.34", - "debug": "^2.2.0", - "limiter": "^1.1.0", - "lru-memoizer": "^1.6.0", - "ms": "^2.0.0", - "request": "^2.73.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - } - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==" - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lock": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz", - "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0=" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.ary": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.ary/-/lodash.ary-4.1.1.tgz", - "integrity": "sha1-ZgZfqRusx6A02cj85S+D08fkAhI=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.differenceby": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/lodash.differenceby/-/lodash.differenceby-4.8.0.tgz", - "integrity": "sha1-z9WelDU69d5R2l0wLKTr/zP6rFc=", - "dev": true - }, - "lodash.every": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.every/-/lodash.every-4.6.0.tgz", - "integrity": "sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", - "dev": true - }, - "lodash.identity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-3.0.0.tgz", - "integrity": "sha1-rXvGpOZH15yXLhuA/u968VYmeHY=", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.maxby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.maxby/-/lodash.maxby-4.6.0.tgz", - "integrity": "sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0=", - "dev": true - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.partial": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.partial/-/lodash.partial-4.2.1.tgz", - "integrity": "sha1-SfPYz9qjv/izqR0SfpIyRUGJYdQ=", - "dev": true - }, - "lodash.property": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.property/-/lodash.property-4.4.2.tgz", - "integrity": "sha1-2gcSSCHGQJ0CXzDbjfhRMUUVv/4=", - "dev": true - }, - "lodash.result": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.result/-/lodash.result-4.5.2.tgz", - "integrity": "sha1-y0Wyf7kU6qjY7m8M57KHC4fLcKo=", - "dev": true - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", - "dev": true, - "requires": { - "lower-case": "^1.1.2" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "lru-memoizer": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz", - "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=", - "requires": { - "lock": "~0.1.2", - "lodash": "^4.17.4", - "lru-cache": "~4.0.0", - "very-fast-args": "^1.1.0" - }, - "dependencies": { - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "^1.2.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz", - "integrity": "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==", - "dev": true - }, - "marked-terminal": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.2.0.tgz", - "integrity": "sha512-Yr1yVS0BbDG55vx7be1D0mdv+jGs9AW563o/Tt/7FTsId2J0yqhrTeXAqq/Q0DyyXltIn6CSxzesQuFqXgafjQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.1.0", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "cli-table": "^0.3.1", - "node-emoji": "^1.4.1", - "supports-hyperlinks": "^1.0.1" - }, - "dependencies": { - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - } - } - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dev": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "dev": true, - "optional": true - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "dev": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mongodb": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.4.tgz", - "integrity": "sha512-tjuwdRb89oyCamBG9lWkb7Sf4L/XJ0hsTC22NkbECl3j2X8n+rM+ZlK3dyIPdaJXdc4FOKIRd9dodVJgCtsYMA==", - "dev": true, - "requires": { - "mongodb-core": "3.2.4", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.4.tgz", - "integrity": "sha512-Ea/fjVntuj0nhLPuDPj54Kce+w4Ee6b1oSM2EvNB4OdwXJ5WIEh79st9/FRZVKwGnc2oB19P1SMSC1noOBXUCQ==", - "dev": true, - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "mysql": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", - "integrity": "sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==", - "dev": true, - "requires": { - "bignumber.js": "7.2.1", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "sqlstring": "2.3.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "nimn-date-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz", - "integrity": "sha512-1Nf+x3EeMvHUiHsVuEhiZnwA8RMeOBVTQWfB1S2n9+i6PYCofHd2HRMD+WOHIHYshy4T4Gk8wQoCol7Hq3av8Q==" - }, - "nimn_schema_builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz", - "integrity": "sha512-DK5/B8CM4qwzG2URy130avcwPev4uO0ev836FbQyKo1ms6I9z/i6EJyiZ+d9xtgloxUri0W+5gfR8YbPq7SheA==" - }, - "nimnjs": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/nimnjs/-/nimnjs-1.3.2.tgz", - "integrity": "sha512-TIOtI4iqkQrUM1tiM76AtTQem0c7e56SkDZ7sj1d1MfUsqRcq2ZWQvej/O+HBTZV7u/VKnwlKTDugK/75IRPPw==", - "requires": { - "nimn-date-parser": "^1.0.0", - "nimn_schema_builder": "^1.0.0" - } - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, - "node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==" - }, - "node-forge": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-request-by-swagger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/node-request-by-swagger/-/node-request-by-swagger-1.1.4.tgz", - "integrity": "sha512-hwaTaFPUwNKns5qXwGJpLQM3Z5zRluYeAxpYy1L8fWmWdT/DjLmsnW8/oGlSN8Vo4R28c2znfUoBUiB/RlPptw==", - "dev": true - }, - "nodemon": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.0.tgz", - "integrity": "sha512-NHKpb/Je0Urmwi3QPDHlYuFY9m1vaVfTsRZG5X73rY46xPj0JpNe8WhUGQdkDXQDOxrBNIU3JrcflE9Y44EcuA==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "dev": true, - "requires": { - "which": "^1.2.10" - } - }, - "npm-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-paths/-/npm-paths-1.0.0.tgz", - "integrity": "sha512-COlxSO5PK9UvZXIa7/sqJDZOlffWFx9+CKJJWkdbhUJMBwcf9sof2jxt4uiVsl+nY3sy0/XFGl4iGr8GoKfiXA==", - "dev": true, - "requires": { - "global-modules": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "npm-run": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-4.1.2.tgz", - "integrity": "sha1-EDDh7FaQjIn8w/o2bQOiwrqY65k=", - "dev": true, - "requires": { - "cross-spawn": "^5.1.0", - "minimist": "^1.2.0", - "npm-path": "^2.0.3", - "npm-which": "^3.0.1", - "serializerr": "^1.0.3", - "sync-exec": "^0.6.2" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-path-immutable": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/object-path-immutable/-/object-path-immutable-3.0.2.tgz", - "integrity": "sha512-Nbd/cacxfrzJrcKZoZFLCxGEpw3DlmTaGCeHsn7brqSfwQA0hRKt32SkIcYxUcGezQr64EIIoq7xSezSwcA3XQ==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } - } - }, - "ono": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz", - "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==", - "dev": true, - "requires": { - "format-util": "^1.0.3" - } - }, - "open": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "dev": true, - "requires": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pg": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.11.0.tgz", - "integrity": "sha512-YO4V7vCmEMGoF390LJaFaohWNKaA2ayoQOEZmiHVcAUF+YsRThpf/TaKCgSvsSE7cDm37Q/Cy3Gz41xiX/XjTw==", - "dev": true, - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "0.1.3", - "pg-pool": "^2.0.4", - "pg-types": "~2.0.0", - "pgpass": "1.x", - "semver": "4.3.2" - }, - "dependencies": { - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=", - "dev": true - } - } - }, - "pg-connection-string": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", - "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=", - "dev": true - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dev": true - }, - "pg-pool": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz", - "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g==", - "dev": true - }, - "pg-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.1.tgz", - "integrity": "sha512-b7y6QM1VF5nOeX9ukMQ0h8a9z89mojrBHXfJeSug4mhL0YpxNBm83ot2TROyoAmX/ZOX3UbwVO4EbH7i1ZZNiw==", - "dev": true, - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", - "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", - "dev": true, - "requires": { - "split": "^1.0.0" - } - }, - "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "popsicle": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-10.0.1.tgz", - "integrity": "sha512-IFVBRz+hc05+MiVDH+KH9QoeE6gjFOiIZNxKePIwz+JbH/yP9rLreUT9+GocxRweYBiRh7O9+MfI5X1zKfSH6Q==", - "dev": true, - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/methods": "^1.1.0", - "@types/tough-cookie": "^2.3.0", - "concat-stream": "^1.4.7", - "form-data": "^2.0.0", - "make-error-cause": "^1.2.1", - "tough-cookie": "^2.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dev": true - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "dev": true - }, - "postgres-date": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.4.tgz", - "integrity": "sha512-bESRvKVuTrjoBluEcpv2346+6kgB7UlnqWZsnbnCccTNq/pqfj1j6oBaN5+b/NrDXepYUT/HKadqv3iS9lJuVA==", - "dev": true - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dev": true, - "requires": { - "xtend": "^4.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", - "dev": true - }, - "prisma": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-1.32.2.tgz", - "integrity": "sha512-4rUiKErPzOEI3fBjxdFeNpfG03EOejNtIOelF46Ibwh2kiVFco0wHgv4Ij8MpliVheH5hQC9rzs6AJQrloH92g==", - "dev": true, - "requires": { - "fs-extra": "^7.0.0", - "prisma-cli-core": "1.32.2", - "prisma-cli-engine": "1.32.2", - "semver": "^5.4.1", - "source-map-support": "^0.4.18" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "prisma-binding": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/prisma-binding/-/prisma-binding-2.3.10.tgz", - "integrity": "sha512-muDleL1exsDttHE8WXciOKbsIfCsyh3UrCNwgl18CS6t5TuhUhatEJqLfkT57BLYycEZBBo1ou4cLVTp+3S9dQ==", - "requires": { - "apollo-link": "1.2.11", - "apollo-link-error": "1.1.10", - "apollo-link-ws": "1.0.17", - "cross-fetch": "3.0.2", - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", - "graphql-binding": "2.5.1", - "graphql-import": "0.7.1", - "graphql-tools": "4.0.4", - "http-link-dataloader": "^0.1.6", - "jsonwebtoken": "8.5.1", - "subscriptions-transport-ws": "0.9.16", - "yargs": "12.0.5" - } - }, - "prisma-cli-core": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-cli-core/-/prisma-cli-core-1.32.2.tgz", - "integrity": "sha512-uy+8dZHlVFuPcsnydUf8284Y4tP9aF38KXSzyp5UdXhn0jZJWI/n0nuDQXBNYFU/5raluvwJa8e1B2CW+C107g==", - "dev": true, - "requires": { - "@types/express": "^4.16.1", - "adm-zip": "^0.4.7", - "archiver": "^2.0.3", - "callsites": "^2.0.0", - "chalk": "^2.3.0", - "clipboardy": "^1.2.3", - "cross-spawn": "^5.1.0", - "express": "^4.16.3", - "express-request-proxy": "^2.0.0", - "figures": "^2.0.0", - "fs-extra": "^7.0.0", - "globby": "^8.0.1", - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", - "graphql-config": "2.2.1", - "graphql-config-extension-prisma": "0.2.5", - "graphql-playground-middleware-express": "^1.6.2", - "inquirer": "^6.2.0", - "js-yaml": "^3.9.1", - "lodash": "^4.17.4", - "lodash.differenceby": "^4.8.0", - "mongodb": "^3.1.10", - "multimatch": "^2.1.0", - "mysql": "^2.16.0", - "node-forge": "^0.7.1", - "npm-run": "4.1.2", - "opn": "^5.1.0", - "prisma-client-lib": "1.32.2", - "prisma-datamodel": "1.32.2", - "prisma-db-introspection": "1.32.2", - "prisma-generate-schema": "1.32.2", - "prisma-yml": "1.32.2", - "scuid": "^1.0.2", - "semver": "^5.6.0", - "sillyname": "^0.1.0", - "source-map-support": "^0.4.18", - "table": "^4.0.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graphql-config-extension-prisma": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/graphql-config-extension-prisma/-/graphql-config-extension-prisma-0.2.5.tgz", - "integrity": "sha512-7Qh3TzZS3hwZpJbTNfTHXBM6UbzV7DMik9Mc95Rz76yTAs7Wr83xBFsH4Ap1NWlqBgANfO3cLLI4YomDJmO5SA==", - "dev": true, - "requires": { - "graphql-config": "2.2.1", - "prisma-yml": "1.20.0-beta.18" - }, - "dependencies": { - "prisma-yml": { - "version": "1.20.0-beta.18", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.20.0-beta.18.tgz", - "integrity": "sha512-wI/lOQrD78de2+ZNzJlbEYcYiUANtpdyT0VzAS+YbF5+1/O+shOnpwYsBtjrVL5Er0RwMkwH7j+oZQM61ENBMQ==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - } - } - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "prisma-yml": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.32.2.tgz", - "integrity": "sha512-+b6MpaSF4MEz0YVdTFTa4sJZh/Rsx2bTl9fnKjk1LoSyiTB2Aw8isyCkJqnz8RMTw/C6TAsK/6fCyC/cQq2nsA==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "prisma-cli-engine": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-cli-engine/-/prisma-cli-engine-1.32.2.tgz", - "integrity": "sha512-SRNx6Kyg/CcjqXgjSgr05KD47vlByFBbOhgRxBb39jHBNbYY3pDG0Q8QFJrRyqPPqauzN55MgxQc+ilu/0aurw==", - "dev": true, - "requires": { - "@heroku/linewrap": "^1.0.0", - "ansi-escapes": "^3.0.0", - "ansi-styles": "^3.2.0", - "cardinal": "^1.0.0", - "chalk": "^2.3.0", - "charm": "^1.0.2", - "debug": "^3.1.0", - "directory-tree": "2.2.1", - "figures": "^2.0.0", - "find-up": "^3.0.0", - "fs-extra": "^7.0.0", - "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0", - "graphql-request": "^1.5.0", - "inquirer": "^6.2.0", - "isomorphic-fetch": "^2.2.1", - "jsonwebtoken": "^8.1.0", - "klaw-sync": "^6.0.0", - "lodash": "^4.17.4", - "lodash.ary": "^4.1.1", - "lodash.defaults": "^4.2.0", - "lodash.flatten": "^4.4.0", - "lodash.get": "^4.4.2", - "lodash.groupby": "^4.6.0", - "lodash.identity": "^3.0.0", - "lodash.maxby": "4.x", - "lodash.partial": "^4.2.1", - "lodash.property": "^4.4.2", - "lodash.result": "^4.5.2", - "lodash.uniqby": "^4.7.0", - "marked": "^0.5.1", - "marked-terminal": "^3.1.1", - "mkdirp": "^0.5.1", - "opn": "^5.1.0", - "prisma-json-schema": "0.1.3", - "prisma-yml": "1.32.2", - "raven": "2.6.4", - "rwlockfile": "^1.4.8", - "scuid": "^1.0.2", - "serialize-error": "^3.0.0", - "source-map-support": "^0.4.18", - "string-similarity": "^1.2.0", - "strip-ansi": "^4.0.0", - "supports-color": "^4.4.0", - "treeify": "^1.0.1", - "update-notifier": "^2.3.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "prisma-yml": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.32.2.tgz", - "integrity": "sha512-+b6MpaSF4MEz0YVdTFTa4sJZh/Rsx2bTl9fnKjk1LoSyiTB2Aw8isyCkJqnz8RMTw/C6TAsK/6fCyC/cQq2nsA==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "prisma-client-lib": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-client-lib/-/prisma-client-lib-1.32.2.tgz", - "integrity": "sha512-cYLOzD16UiWKj6MHeQMX63NUCfsStS7cXvOrKwYLbym2I3L/5u34WzyBWjDZbIHMcx9/9qLBVuExUU4br+O6XA==", - "dev": true, - "requires": { - "@types/node": "^10.12.0", - "@types/prettier": "^1.13.2", - "debug": "^4.1.0", - "flow-bin": "^0.87.0", - "graphql-tag": "^2.10.0", - "http-link-dataloader": "^0.1.6", - "jsonwebtoken": "^8.3.0", - "lodash.flatten": "^4.4.0", - "prettier": "1.16.4", - "prisma-datamodel": "1.32.2", - "prisma-generate-schema": "1.32.2", - "subscriptions-transport-ws": "^0.9.15", - "uppercamelcase": "^3.0.0", - "ws": "^6.1.0", - "zen-observable": "^0.8.10" - }, - "dependencies": { - "@types/node": { - "version": "10.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", - "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==", - "dev": true - } - } - }, - "prisma-datamodel": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-datamodel/-/prisma-datamodel-1.32.2.tgz", - "integrity": "sha512-EncLV056dYkwZIvo/dhE5SesmqAg3Ig60Uy+01v4LxTKdSswrjA3j3C+6NCVMGQc41C2Xs1Or8Ir8kuHwVNI3A==", - "dev": true, - "requires": { - "graphql": "^14.0.2", - "pluralize": "^7.0.0", - "popsicle": "10" - } - }, - "prisma-db-introspection": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-db-introspection/-/prisma-db-introspection-1.32.2.tgz", - "integrity": "sha512-B6Plb75nnoSIE6YimP49SeVGpJP+bpdBsRH+UP2Q72XLAytirRw0Zzf1cTk+6gBTTZnPnzoqbtUf4uZxJEUn1Q==", - "dev": true, - "requires": { - "@types/mongodb": "^3.1.14", - "@types/mysql": "^2.15.5", - "graphql-request": "^1.5.0", - "lodash": "^4.17.4", - "mongodb": "^3.1.10", - "mysql": "^2.16.0", - "pg": "^7.4.1", - "pluralize": "^7.0.0", - "prisma-datamodel": "1.32.2", - "prisma-yml": "1.32.2", - "scuid": "^1.0.2" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "prisma-yml": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.32.2.tgz", - "integrity": "sha512-+b6MpaSF4MEz0YVdTFTa4sJZh/Rsx2bTl9fnKjk1LoSyiTB2Aw8isyCkJqnz8RMTw/C6TAsK/6fCyC/cQq2nsA==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - } - } - } - }, - "prisma-generate-schema": { - "version": "1.32.2", - "resolved": "https://registry.npmjs.org/prisma-generate-schema/-/prisma-generate-schema-1.32.2.tgz", - "integrity": "sha512-YFZDlXb8RwyjAEobrBErZvv80i5ogpwKsYRABh3QpbTI1fglouFWodK9ToRwTIVUmEuak/P7zIO+5ZfDokGYUw==", - "dev": true, - "requires": { - "graphql": "^14.0.2", - "pluralize": "^7.0.0", - "popsicle": "10", - "prisma-datamodel": "1.32.2" - } - }, - "prisma-json-schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/prisma-json-schema/-/prisma-json-schema-0.1.3.tgz", - "integrity": "sha512-XZrf2080oR81mY8/OC8al68HiwBm0nXlFE727JIia0ZbNqwuV4MyRYk6E0+OIa6/9KEYxZrcAmoBs3EW1cCvnA==", - "dev": true - }, - "prisma-yml": { - "version": "1.26.6", - "resolved": "https://registry.npmjs.org/prisma-yml/-/prisma-yml-1.26.6.tgz", - "integrity": "sha512-dWBTeQbyWr/4d97ZKjxFPvIHytnNlBsNzgsJC1eew3qoZ9A8vtRIFhsnPiD3kYIf67w56i2QO2O5Infe2FzMww==", - "dev": true, - "requires": { - "ajv": "5", - "bluebird": "^3.5.1", - "chalk": "^2.3.0", - "debug": "^3.1.0", - "dotenv": "^4.0.0", - "fs-extra": "^7.0.0", - "graphql-request": "^1.5.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.10.0", - "json-stable-stringify": "^1.0.1", - "jsonwebtoken": "^8.1.0", - "lodash": "^4.17.4", - "prisma-json-schema": "0.1.3", - "replaceall": "^0.1.6", - "scuid": "^1.0.2", - "yaml-ast-parser": "^0.0.40" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", - "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" - } - } - }, - "protochain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", - "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "pstree.remy": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", - "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raven": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/raven/-/raven-2.6.4.tgz", - "integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==", - "dev": true, - "requires": { - "cookie": "0.3.1", - "md5": "^2.2.1", - "stack-trace": "0.0.10", - "timed-out": "4.0.1", - "uuid": "3.3.2" - } - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "redeyed": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-1.0.1.tgz", - "integrity": "sha1-6WwZO0DAgWsArshCaY5hGF5VSYo=", - "dev": true, - "requires": { - "esprima": "~3.0.0" - }, - "dependencies": { - "esprima": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.0.0.tgz", - "integrity": "sha1-U88kes2ncxPlUcOqLnM0LT+099k=", - "dev": true - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.4.tgz", - "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "requires": { - "lodash": "^4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", - "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "dev": true, - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - } - } - }, - "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rwlockfile": { - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/rwlockfile/-/rwlockfile-1.4.12.tgz", - "integrity": "sha1-QM7xfJFSB8QxXB9TWgBuDRVWvNg=", - "dev": true, - "requires": { - "fs-extra": "^5.0.0" - } - }, - "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "dev": true, - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scuid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "serialize-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz", - "integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==", - "dev": true - }, - "serializerr": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", - "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", - "dev": true, - "requires": { - "protochain": "^1.0.5" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "sillyname": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sillyname/-/sillyname-0.1.0.tgz", - "integrity": "sha1-z9mIWOJJhnE0d3Xv47tRQfRsh9Y=", - "dev": true - }, - "simple-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-errors/-/simple-errors-1.0.1.tgz", - "integrity": "sha1-sLvsrB8QgvE7OWKJS0qeiPOgye8=", - "dev": true, - "requires": { - "errno": "^0.1.1" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "dev": true, - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sqlstring": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", - "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-similarity": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.2.tgz", - "integrity": "sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ==", - "dev": true, - "requires": { - "lodash.every": "^4.6.0", - "lodash.flattendeep": "^4.4.0", - "lodash.foreach": "^4.5.0", - "lodash.map": "^4.6.0", - "lodash.maxby": "^4.6.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "subscriptions-transport-ws": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", - "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dev": true, - "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - } - } - }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", - "dev": true, - "requires": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "sync-exec": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.6.2.tgz", - "integrity": "sha1-cX0izFPwzh3vVZQ2LzqJouu5EQU=", - "dev": true - }, - "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", - "dev": true, - "requires": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "requires": { - "rimraf": "^2.6.3" - } - }, - "tmp-graphql-config-extension-openapi": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tmp-graphql-config-extension-openapi/-/tmp-graphql-config-extension-openapi-1.0.7.tgz", - "integrity": "sha512-NQPUaywaVC2hzWkBBsTX3sV2XfxU0mc409rJyrA7iCu5DSTjMLUqI+U4KJVSy/Ltp0zgbWMWua471R7zMql9Pw==", - "dev": true, - "requires": { - "@kbrandwijk/swagger-to-graphql": "2.4.3", - "graphql-config": "2.2.1" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "traverse-chain": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", - "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=", - "dev": true - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "ts-invariant": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", - "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", - "requires": { - "tslib": "^1.9.3" - } - }, - "ts-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", - "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", - "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "dev": true, - "requires": { - "upper-case": "^1.1.1" - } - }, - "uppercamelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uppercamelcase/-/uppercamelcase-3.0.0.tgz", - "integrity": "sha1-OAsyG41zy6Fv7E11KldRUtHvcxc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "very-fast-args": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz", - "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y=" - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - } - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "yaml-ast-parser": { - "version": "0.0.40", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.40.tgz", - "integrity": "sha1-CFNtTnPTIrHJziB6uN1w4E0grm4=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" - }, - "z-schema": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", - "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==", - "dev": true, - "requires": { - "commander": "^2.7.1", - "core-js": "^2.5.7", - "lodash.get": "^4.0.0", - "lodash.isequal": "^4.0.0", - "validator": "^10.0.0" - } - }, - "zen-observable": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", - "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" - }, - "zen-observable-ts": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.18.tgz", - "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", - "requires": { - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - } - } -} diff --git a/Deprecated-Code/TeamsModule/api/package.json b/Deprecated-Code/TeamsModule/api/package.json deleted file mode 100644 index 26cb34cd0..000000000 --- a/Deprecated-Code/TeamsModule/api/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "@superalgos/teams-api", - "version": "0.1.0", - "description": "Superalgos Teams backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/Superalgos/TeamsModule.git" - }, - "main": "src/index.js", - "scripts": { - "start": "node -r dotenv/config dist/index.js", - "debug": "nodemon src/index.js --watch ./src --exec \"node --require @babel/register --require dotenv/config\"", - "playground": "graphql playground --dotenv dotenv/config", - "dev": "npm-run-all --parallel debug playground", - "build": "npx babel src --out-dir ../dist --relative -D --presets=@babel/env --plugins=@babel/plugin-proposal-throw-expressions,@babel/plugin-proposal-class-properties" - }, - "dependencies": { - "@azure/storage-blob": "^10.3.0", - "@babel/polyfill": "^7.2.5", - "@babel/register": "^7.0.0", - "@babel/runtime": "^7.3.1", - "apollo-errors": "^1.9.0", - "apollo-server-express": "^2.4.0", - "axios": "^0.18.0", - "cors": "^2.8.5", - "dotenv": "^6.2.0", - "express": "^4.16.4", - "express-jwt": "^5.3.1", - "fast-xml-parser": "^3.12.12", - "graphql": "^14.1.1", - "graphql-import": "^0.7.1", - "graphql-middleware": "^1.7.8", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.10.1", - "graphql-tools": "^4.0.4", - "jsonwebtoken": "^8.4.0", - "jwks-rsa": "^1.4.0", - "lodash": "^4.17.11", - "prisma-binding": "^2.3.2", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "winston": "^3.2.1" - }, - "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/node": "^7.2.2", - "@babel/plugin-proposal-class-properties": "^7.3.0", - "@babel/plugin-proposal-throw-expressions": "^7.2.0", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.3.1", - "debug": "^4.1.1", - "graphql-cli": "^3.0.9", - "nodemon": "^1.18.10", - "npm-run-all": "4.1.5", - "prisma": "^1.26.4" - } -} diff --git a/Deprecated-Code/TeamsModule/api/prod/Dockerfile b/Deprecated-Code/TeamsModule/api/prod/Dockerfile deleted file mode 100644 index 26d7b313d..000000000 --- a/Deprecated-Code/TeamsModule/api/prod/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# ---- Base Node ---- -FROM node:carbon AS base -# Create app directory -WORKDIR /usr/src/app - -# ---- Dependencies ---- -FROM base AS dependencies -WORKDIR /usr/src/app -# A wildcard is used to ensure both package.json AND package-lock.json are copied -COPY package*.json ./ -# install app dependencies including 'devDependencies' -RUN npm install --only=production - -# ---- Copy Files/Build ---- -FROM dependencies AS build -WORKDIR /usr/src/app -COPY . /usr/src/app -RUN npm run build - -# --- Release with Alpine ---- -FROM mhart/alpine-node:8 AS release -# Create app directory -WORKDIR /usr/src/app - -COPY --from=build /usr/src/app/dist ./ -COPY --from=build /usr/src/app/node_modules ./node_modules -#CMD ["serve", "-s", "dist", "-p", "8080"] -CMD ["node", "dist/index.js"] diff --git a/Deprecated-Code/TeamsModule/api/src/ApolloServer.js b/Deprecated-Code/TeamsModule/api/src/ApolloServer.js deleted file mode 100644 index 0e16bc342..000000000 --- a/Deprecated-Code/TeamsModule/api/src/ApolloServer.js +++ /dev/null @@ -1,124 +0,0 @@ -import http from 'http' -import { ApolloServer, makeExecutableSchema } from 'apollo-server-express' -import { applyMiddleware as applyGraphQLMiddleware } from 'graphql-middleware' -import { moduleAuth } from './middleware' -import { logger } from './logger' - -export default function createApolloServer( - app, - { - // Main options - graphqlEndpoint = '', - typeDefs = {}, - resolvers = {}, - schemaDirectives = {}, - directiveResolvers = {}, - graphqlMiddlewares = [], - dataSources = () => ({}), - context = () => ({}), - // Subscriptions - subscriptionsEndpoint = '', - wsMiddlewares = [], - // Mocks - mocks, - // Apollo Engine - engineKey = '', - // HTTP options - cors = true, - timeout = 120000, - // Extra options for Apollo Server - apolloServerOptions = {}, - } -) { - const schema = makeExecutableSchema({ - typeDefs, - resolvers, - schemaDirectives, - directiveResolvers, - resolverValidationOptions: { - requireResolversForResolveType: false, - }, - }) - - // Apollo server options - const options = { - ...apolloServerOptions, - schema: applyGraphQLMiddleware(schema, ...graphqlMiddlewares), - tracing: true, - cacheControl: true, - introspection: true, - playground: true, - engine: engineKey ? { apiKey: engineKey } : false, - dataSources, - // Resolvers context in POST requests - context: async ({ req, connection }) => { - let contextData - try { - if (connection) { - contextData = { ...connection.context } - } else { - contextData = await context({ req, request: req }) - } - } catch (err) { - logger.error(err) - throw err - } - - return contextData - }, - // Resolvers context in WebSocket requests - subscriptions: { - path: subscriptionsEndpoint, - onConnect: async (connection, websocket) => { - const { authorization, userid } = connection - - let contextData = {} - try { - // Simulate `req` object for auth - const req = { headers: { authorization, userid } } - - // Call all middlewares in order and modify `req` - await new Promise((resolve, reject) => - wsMiddlewares.reduceRight( - (acc, m) => err => (err ? reject(err) : m(req, null, acc)), - err => (err ? reject(err) : resolve()) - )() - ) - - contextData = await context({ - connection, - websocket, - request: req, - req, - }) - } catch (err) { - logger.error(err) - } - - return contextData - }, - }, - } - - // Apollo Server - const server = new ApolloServer(options) - - // Express middleware - server.applyMiddleware({ - moduleAuth, - app, - cors, - path: graphqlEndpoint, - // gui: { - // endpoint: graphqlEndpoint, - // subscriptionEndpoint: graphqlSubscriptionsPath, - // }, - }) - - // Create HTTP server and add subscriptions - const httpServer = http.createServer(app) - httpServer.setTimeout(timeout) - server.installSubscriptionHandlers(httpServer) - - return httpServer -} diff --git a/Deprecated-Code/TeamsModule/api/src/directives/index.js b/Deprecated-Code/TeamsModule/api/src/directives/index.js deleted file mode 100644 index 9e9266f60..000000000 --- a/Deprecated-Code/TeamsModule/api/src/directives/index.js +++ /dev/null @@ -1,163 +0,0 @@ -import { SchemaDirectiveVisitor } from 'apollo-server-express' -import _get from 'lodash/get' -import { logger, AuthenticationError, DatabaseError } from '../logger' - -const memberLocationOnContext = 'request.user' -const userIdOnContext = 'request.headers.userid' -const bearerAccessToken = 'request.headers.authorization' - -const ctxUserId = ctx => _get(ctx, userIdOnContext) -const ctxMember = ctx => _get(ctx, memberLocationOnContext) -const ctxToken = ctx => _get(ctx, bearerAccessToken) - -const createMember = async (ctx, idToken, info) => { - logger.info(`createMember: ${idToken}`) - const member = await ctx.db.mutation.upsertMember({ - where: { - authId: idToken.sub, - }, - create: { - authId: idToken.sub, - alias: idToken.nickname - }, - update: { - authId: idToken.sub, - alias: idToken.nickname - } - }, info) - return member -} - -const isUserId = async ctx => { - logger.info(`isUserId 0: ${ctx.request.headers.userid}`) - logger.info(`isUserId 1: ${ctx.request}`) - let member = await ctxUserId(ctx) - logger.info(member) - if (!member) { - throw new AuthenticationError() - return - } else { - return member - } -} - -const isRequestingMemberAlsoOwner = ({ ctx, memberId, type, teamSlug }) => - ctx.db.exists[type]({ slug: teamSlug, owner: memberId }) -const isRequestingMember = ({ ctx, memberId }) => ctx.db.exists.Member({ authId: memberId }) - - -const getUser = ({ req = {}, request = {} }) => req.user || request.user || null -const hasRole = (roles, ctx) => { - const { role = '' } = getUser(ctx) || {} - return role && roles.includes(role) -} - -const assertAuth = ctx => { - if (!getUser(ctx)) { - throw new AuthenticationError('Access token is missing or expired') - } -} - -// Directive resolvers (apollo v1 syntax) -export const directiveResolvers = { - isAuthenticated: async (next, source, args, ctx) => { - let result = await isUserId(ctx) - logger.info('directive isAuthenticated: ') - logger.info(await result) - return next(result) - }, - hasRole: (next, source, { roles }, ctx) => { - const { role } = isUserId(ctx) - logger.info('directive hasRole: ', role) - if (roles.includes(role)) { - return next() - } - throw new AuthenticationError('Insufficient permissions') - }, - isOwner: async (next, source, { type }, ctx) => { - logger.info('directive isOwner: ', source, type, ctx) - logger.info(ctx.request.body.variables) - logger.info(type) - const { _v0_slug: typeId } = ctx.request.body.variables ? ctx.request.body.variables : { _v0_slug: null } - logger.info('typeId') - logger.info(typeId) - const userId = await isUserId(ctx) - const isOwner = - type === `Member` - ? memberId === typeId - : await isRequestingMemberAlsoOwner({ ctx, userId, type, typeId }) - logger.info('isOwner') - logger.info(isOwner) - if (isOwner) { - return next() - } - throw new AuthenticationError('Insufficient permissions') - }, - isOwnerOrHasRole: async (next, source, { roles, type }, ctx, ...p) => { - const userId = await isUserId(ctx) - logger.info('directive isOwnerOrHasRole 1: ', userId, roles, type) - if(userId === undefined && role=== undefined) throw new Error(`Not logged in`) - if (roles.includes(role)) { - return next() - } - - const { teamSlug } = ctx.request.body.variables - const isOwner = await isRequestingMemberAlsoOwner({ - ctx, - userId, - type, - teamSlug - }) - logger.info('directive isOwnerOrHasRole 2: ', teamSlug, userId, role, isOwner) - if (isOwner) { - return next() - } - - const hasRole = await isRequestingMember({ - ctx, - userId, - type, - teamSlug - }) - if(hasRole){ - return next() - } - throw new AuthenticationError('Insufficient permissions') - } -} - -export const defaultFieldResolver = (source, args, contextValue, info) => { - // ensure source is a value for which property access is acceptable. - if (typeof source === 'object' || typeof source === 'function') { - const property = source[info.fieldName] - if (typeof property === 'function') { - return source[info.fieldName](args, contextValue, info) - } - return property - } -} - -// Schema directives (apollo v2 syntax) -export const schemaDirectives = Object.keys(directiveResolvers).reduce( - (acc, directiveName) => ({ - ...acc, - [directiveName]: class extends SchemaDirectiveVisitor { - visitFieldDefinition(field) { - const resolver = directiveResolvers[directiveName] - const originalResolver = field.resolve || defaultFieldResolver - const directiveArgs = this.args - field.resolve = (...args) => { - const [source, , context, info] = args - return resolver( - async () => originalResolver.apply(field, args), - source, - directiveArgs, - context, - info - ) - } - } - }, - }), - {} -) diff --git a/Deprecated-Code/TeamsModule/api/src/errors/index.js b/Deprecated-Code/TeamsModule/api/src/errors/index.js deleted file mode 100644 index bb10ce39d..000000000 --- a/Deprecated-Code/TeamsModule/api/src/errors/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import { ApolloError } from 'apollo-server-express' -import { inspect } from 'util' -import { logger } from '../logger' - -export { - ApolloError, - AuthenticationError, - ForbiddenError, - SyntaxError, - UserInputError, - ValidationError, -} from 'apollo-server-express' - -export const formatError = (error) => { - // This can be used to send errors to third - // party services like Sentry or Stackdriver - logger.info('formatError') - logger.error(JSON.parse(JSON.stringify(inspect(error)))) - const originalError = searchOriginalError(error) - logger.error('originalError') - logger.error(originalError) - const { message, code } = originalError - return { message, code} -} - -const searchOriginalError = (error) => { - if (error.originalError) { - logger.error('Original Error') - logger.error(error.originalError) - return error.originalError - } - if (error.errors) { - logger.error('Errors') - logger.error(JSON.parse(JSON.stringify(inspect(error.errors)))) - return error.errors.map(searchOriginalError)[0] - } - logger.error('searchOriginalErrors') - logger.error(JSON.parse(JSON.stringify(inspect(error)))) - return error; -} - -// Define custom Apollo errors here -export class ExternalServiceError extends ApolloError { - constructor(message) { - super(message, 'EXTERNAL_SERVICE_UNAVAILABLE') - - Object.defineProperty(this, 'name', { value: this.constructor.name }) - } -} diff --git a/Deprecated-Code/TeamsModule/api/src/errors/notAllowed.json b/Deprecated-Code/TeamsModule/api/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/TeamsModule/api/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/TeamsModule/api/src/generated/prisma.graphql b/Deprecated-Code/TeamsModule/api/src/generated/prisma.graphql deleted file mode 100644 index 00145f52d..000000000 --- a/Deprecated-Code/TeamsModule/api/src/generated/prisma.graphql +++ /dev/null @@ -1,3380 +0,0 @@ -# source: http://localhost:4466 -# timestamp: Tue Nov 20 2018 09:55:31 GMT-0800 (Pacific Standard Time) - -type AggregateFBStatus { - count: Int! -} - -type AggregateFinancialBeings { - count: Int! -} - -type AggregateMember { - count: Int! -} - -type AggregateMemberStatus { - count: Int! -} - -type AggregateTeam { - count: Int! -} - -type AggregateTeamMembers { - count: Int! -} - -type AggregateTeamMemberStatus { - count: Int! -} - -type AggregateTeamProfile { - count: Int! -} - -type AggregateTeamStatus { - count: Int! -} - -type AggregateWallet { - count: Int! -} - -type BatchPayload { - """The number of nodes that have been affected by the Batch operation.""" - count: Long! -} - -scalar DateTime - -enum FBKind { - TRADER - INDICATOR - EXTRACTOR - PLOTTER - Trader - Trading - Indicator - Sensor - Plotter -} - -type FBStatus implements Node { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type FBStatusConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [FBStatusEdge]! - aggregate: AggregateFBStatus! -} - -input FBStatusCreateInput { - status: Status - reason: String -} - -input FBStatusCreateManyInput { - create: [FBStatusCreateInput!] - connect: [FBStatusWhereUniqueInput!] -} - -"""An edge in a connection.""" -type FBStatusEdge { - """The item at the end of the edge.""" - node: FBStatus! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum FBStatusOrderByInput { - id_ASC - id_DESC - status_ASC - status_DESC - reason_ASC - reason_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type FBStatusPreviousValues { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -type FBStatusSubscriptionPayload { - mutation: MutationType! - node: FBStatus - updatedFields: [String!] - previousValues: FBStatusPreviousValues -} - -input FBStatusSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [FBStatusSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [FBStatusSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [FBStatusSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: FBStatusWhereInput -} - -input FBStatusUpdateDataInput { - status: Status - reason: String -} - -input FBStatusUpdateInput { - status: Status - reason: String -} - -input FBStatusUpdateManyInput { - create: [FBStatusCreateInput!] - connect: [FBStatusWhereUniqueInput!] - disconnect: [FBStatusWhereUniqueInput!] - delete: [FBStatusWhereUniqueInput!] - update: [FBStatusUpdateWithWhereUniqueNestedInput!] - upsert: [FBStatusUpsertWithWhereUniqueNestedInput!] -} - -input FBStatusUpdateManyMutationInput { - status: Status - reason: String -} - -input FBStatusUpdateWithWhereUniqueNestedInput { - where: FBStatusWhereUniqueInput! - data: FBStatusUpdateDataInput! -} - -input FBStatusUpsertWithWhereUniqueNestedInput { - where: FBStatusWhereUniqueInput! - update: FBStatusUpdateDataInput! - create: FBStatusCreateInput! -} - -input FBStatusWhereInput { - """Logical AND on all given filters.""" - AND: [FBStatusWhereInput!] - - """Logical OR on all given filters.""" - OR: [FBStatusWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [FBStatusWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - status: Status - - """All values that are not equal to given value.""" - status_not: Status - - """All values that are contained in given list.""" - status_in: [Status!] - - """All values that are not contained in given list.""" - status_not_in: [Status!] - reason: String - - """All values that are not equal to given value.""" - reason_not: String - - """All values that are contained in given list.""" - reason_in: [String!] - - """All values that are not contained in given list.""" - reason_not_in: [String!] - - """All values less than the given value.""" - reason_lt: String - - """All values less than or equal the given value.""" - reason_lte: String - - """All values greater than the given value.""" - reason_gt: String - - """All values greater than or equal the given value.""" - reason_gte: String - - """All values containing the given string.""" - reason_contains: String - - """All values not containing the given string.""" - reason_not_contains: String - - """All values starting with the given string.""" - reason_starts_with: String - - """All values not starting with the given string.""" - reason_not_starts_with: String - - """All values ending with the given string.""" - reason_ends_with: String - - """All values not ending with the given string.""" - reason_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime -} - -input FBStatusWhereUniqueInput { - id: ID -} - -enum FBType { - BOT - NET - ADVANCED -} - -type FinancialBeings implements Node { - id: ID! - type: FBType - kind: FBKind - name: String! - slug: String! - avatar: String - team: Team - status(where: FBStatusWhereInput, orderBy: FBStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [FBStatus!] - updatedAt: DateTime! - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type FinancialBeingsConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [FinancialBeingsEdge]! - aggregate: AggregateFinancialBeings! -} - -input FinancialBeingsCreateInput { - type: FBType - kind: FBKind - name: String! - slug: String! - avatar: String - team: TeamCreateOneWithoutFbInput - status: FBStatusCreateManyInput -} - -input FinancialBeingsCreateManyWithoutTeamInput { - create: [FinancialBeingsCreateWithoutTeamInput!] - connect: [FinancialBeingsWhereUniqueInput!] -} - -input FinancialBeingsCreateWithoutTeamInput { - type: FBType - kind: FBKind - name: String! - slug: String! - avatar: String - status: FBStatusCreateManyInput -} - -"""An edge in a connection.""" -type FinancialBeingsEdge { - """The item at the end of the edge.""" - node: FinancialBeings! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum FinancialBeingsOrderByInput { - id_ASC - id_DESC - type_ASC - type_DESC - kind_ASC - kind_DESC - name_ASC - name_DESC - slug_ASC - slug_DESC - avatar_ASC - avatar_DESC - updatedAt_ASC - updatedAt_DESC - createdAt_ASC - createdAt_DESC -} - -type FinancialBeingsPreviousValues { - id: ID! - type: FBType - kind: FBKind - name: String! - slug: String! - avatar: String - updatedAt: DateTime! - createdAt: DateTime! -} - -type FinancialBeingsSubscriptionPayload { - mutation: MutationType! - node: FinancialBeings - updatedFields: [String!] - previousValues: FinancialBeingsPreviousValues -} - -input FinancialBeingsSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [FinancialBeingsSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [FinancialBeingsSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [FinancialBeingsSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: FinancialBeingsWhereInput -} - -input FinancialBeingsUpdateInput { - type: FBType - kind: FBKind - name: String - slug: String - avatar: String - team: TeamUpdateOneWithoutFbInput - status: FBStatusUpdateManyInput -} - -input FinancialBeingsUpdateManyMutationInput { - type: FBType - kind: FBKind - name: String - slug: String - avatar: String -} - -input FinancialBeingsUpdateManyWithoutTeamInput { - create: [FinancialBeingsCreateWithoutTeamInput!] - connect: [FinancialBeingsWhereUniqueInput!] - disconnect: [FinancialBeingsWhereUniqueInput!] - delete: [FinancialBeingsWhereUniqueInput!] - update: [FinancialBeingsUpdateWithWhereUniqueWithoutTeamInput!] - upsert: [FinancialBeingsUpsertWithWhereUniqueWithoutTeamInput!] -} - -input FinancialBeingsUpdateWithoutTeamDataInput { - type: FBType - kind: FBKind - name: String - slug: String - avatar: String - status: FBStatusUpdateManyInput -} - -input FinancialBeingsUpdateWithWhereUniqueWithoutTeamInput { - where: FinancialBeingsWhereUniqueInput! - data: FinancialBeingsUpdateWithoutTeamDataInput! -} - -input FinancialBeingsUpsertWithWhereUniqueWithoutTeamInput { - where: FinancialBeingsWhereUniqueInput! - update: FinancialBeingsUpdateWithoutTeamDataInput! - create: FinancialBeingsCreateWithoutTeamInput! -} - -input FinancialBeingsWhereInput { - """Logical AND on all given filters.""" - AND: [FinancialBeingsWhereInput!] - - """Logical OR on all given filters.""" - OR: [FinancialBeingsWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [FinancialBeingsWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - type: FBType - - """All values that are not equal to given value.""" - type_not: FBType - - """All values that are contained in given list.""" - type_in: [FBType!] - - """All values that are not contained in given list.""" - type_not_in: [FBType!] - kind: FBKind - - """All values that are not equal to given value.""" - kind_not: FBKind - - """All values that are contained in given list.""" - kind_in: [FBKind!] - - """All values that are not contained in given list.""" - kind_not_in: [FBKind!] - name: String - - """All values that are not equal to given value.""" - name_not: String - - """All values that are contained in given list.""" - name_in: [String!] - - """All values that are not contained in given list.""" - name_not_in: [String!] - - """All values less than the given value.""" - name_lt: String - - """All values less than or equal the given value.""" - name_lte: String - - """All values greater than the given value.""" - name_gt: String - - """All values greater than or equal the given value.""" - name_gte: String - - """All values containing the given string.""" - name_contains: String - - """All values not containing the given string.""" - name_not_contains: String - - """All values starting with the given string.""" - name_starts_with: String - - """All values not starting with the given string.""" - name_not_starts_with: String - - """All values ending with the given string.""" - name_ends_with: String - - """All values not ending with the given string.""" - name_not_ends_with: String - slug: String - - """All values that are not equal to given value.""" - slug_not: String - - """All values that are contained in given list.""" - slug_in: [String!] - - """All values that are not contained in given list.""" - slug_not_in: [String!] - - """All values less than the given value.""" - slug_lt: String - - """All values less than or equal the given value.""" - slug_lte: String - - """All values greater than the given value.""" - slug_gt: String - - """All values greater than or equal the given value.""" - slug_gte: String - - """All values containing the given string.""" - slug_contains: String - - """All values not containing the given string.""" - slug_not_contains: String - - """All values starting with the given string.""" - slug_starts_with: String - - """All values not starting with the given string.""" - slug_not_starts_with: String - - """All values ending with the given string.""" - slug_ends_with: String - - """All values not ending with the given string.""" - slug_not_ends_with: String - avatar: String - - """All values that are not equal to given value.""" - avatar_not: String - - """All values that are contained in given list.""" - avatar_in: [String!] - - """All values that are not contained in given list.""" - avatar_not_in: [String!] - - """All values less than the given value.""" - avatar_lt: String - - """All values less than or equal the given value.""" - avatar_lte: String - - """All values greater than the given value.""" - avatar_gt: String - - """All values greater than or equal the given value.""" - avatar_gte: String - - """All values containing the given string.""" - avatar_contains: String - - """All values not containing the given string.""" - avatar_not_contains: String - - """All values starting with the given string.""" - avatar_starts_with: String - - """All values not starting with the given string.""" - avatar_not_starts_with: String - - """All values ending with the given string.""" - avatar_ends_with: String - - """All values not ending with the given string.""" - avatar_not_ends_with: String - updatedAt: DateTime - - """All values that are not equal to given value.""" - updatedAt_not: DateTime - - """All values that are contained in given list.""" - updatedAt_in: [DateTime!] - - """All values that are not contained in given list.""" - updatedAt_not_in: [DateTime!] - - """All values less than the given value.""" - updatedAt_lt: DateTime - - """All values less than or equal the given value.""" - updatedAt_lte: DateTime - - """All values greater than the given value.""" - updatedAt_gt: DateTime - - """All values greater than or equal the given value.""" - updatedAt_gte: DateTime - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime - team: TeamWhereInput - status_every: FBStatusWhereInput - status_some: FBStatusWhereInput - status_none: FBStatusWhereInput -} - -input FinancialBeingsWhereUniqueInput { - id: ID -} - -""" -The `Long` scalar type represents non-fractional signed whole numeric values. -Long can represent values between -(2^63) and 2^63 - 1. -""" -scalar Long - -type Member implements Node { - id: ID! - alias: String - teams(where: TeamMembersWhereInput, orderBy: TeamMembersOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamMembers!] - authId: String! - visible: Boolean! - status(where: MemberStatusWhereInput, orderBy: MemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [MemberStatus!] - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type MemberConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [MemberEdge]! - aggregate: AggregateMember! -} - -input MemberCreateInput { - alias: String - authId: String! - visible: Boolean - teams: TeamMembersCreateManyWithoutMemberInput - status: MemberStatusCreateManyInput -} - -input MemberCreateOneWithoutTeamsInput { - create: MemberCreateWithoutTeamsInput - connect: MemberWhereUniqueInput -} - -input MemberCreateWithoutTeamsInput { - alias: String - authId: String! - visible: Boolean - status: MemberStatusCreateManyInput -} - -"""An edge in a connection.""" -type MemberEdge { - """The item at the end of the edge.""" - node: Member! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum MemberOrderByInput { - id_ASC - id_DESC - alias_ASC - alias_DESC - authId_ASC - authId_DESC - visible_ASC - visible_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type MemberPreviousValues { - id: ID! - alias: String - authId: String! - visible: Boolean! - createdAt: DateTime! -} - -type MemberStatus implements Node { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type MemberStatusConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [MemberStatusEdge]! - aggregate: AggregateMemberStatus! -} - -input MemberStatusCreateInput { - status: Status - reason: String -} - -input MemberStatusCreateManyInput { - create: [MemberStatusCreateInput!] - connect: [MemberStatusWhereUniqueInput!] -} - -"""An edge in a connection.""" -type MemberStatusEdge { - """The item at the end of the edge.""" - node: MemberStatus! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum MemberStatusOrderByInput { - id_ASC - id_DESC - status_ASC - status_DESC - reason_ASC - reason_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type MemberStatusPreviousValues { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -type MemberStatusSubscriptionPayload { - mutation: MutationType! - node: MemberStatus - updatedFields: [String!] - previousValues: MemberStatusPreviousValues -} - -input MemberStatusSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [MemberStatusSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [MemberStatusSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [MemberStatusSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: MemberStatusWhereInput -} - -input MemberStatusUpdateDataInput { - status: Status - reason: String -} - -input MemberStatusUpdateInput { - status: Status - reason: String -} - -input MemberStatusUpdateManyInput { - create: [MemberStatusCreateInput!] - connect: [MemberStatusWhereUniqueInput!] - disconnect: [MemberStatusWhereUniqueInput!] - delete: [MemberStatusWhereUniqueInput!] - update: [MemberStatusUpdateWithWhereUniqueNestedInput!] - upsert: [MemberStatusUpsertWithWhereUniqueNestedInput!] -} - -input MemberStatusUpdateManyMutationInput { - status: Status - reason: String -} - -input MemberStatusUpdateWithWhereUniqueNestedInput { - where: MemberStatusWhereUniqueInput! - data: MemberStatusUpdateDataInput! -} - -input MemberStatusUpsertWithWhereUniqueNestedInput { - where: MemberStatusWhereUniqueInput! - update: MemberStatusUpdateDataInput! - create: MemberStatusCreateInput! -} - -input MemberStatusWhereInput { - """Logical AND on all given filters.""" - AND: [MemberStatusWhereInput!] - - """Logical OR on all given filters.""" - OR: [MemberStatusWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [MemberStatusWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - status: Status - - """All values that are not equal to given value.""" - status_not: Status - - """All values that are contained in given list.""" - status_in: [Status!] - - """All values that are not contained in given list.""" - status_not_in: [Status!] - reason: String - - """All values that are not equal to given value.""" - reason_not: String - - """All values that are contained in given list.""" - reason_in: [String!] - - """All values that are not contained in given list.""" - reason_not_in: [String!] - - """All values less than the given value.""" - reason_lt: String - - """All values less than or equal the given value.""" - reason_lte: String - - """All values greater than the given value.""" - reason_gt: String - - """All values greater than or equal the given value.""" - reason_gte: String - - """All values containing the given string.""" - reason_contains: String - - """All values not containing the given string.""" - reason_not_contains: String - - """All values starting with the given string.""" - reason_starts_with: String - - """All values not starting with the given string.""" - reason_not_starts_with: String - - """All values ending with the given string.""" - reason_ends_with: String - - """All values not ending with the given string.""" - reason_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime -} - -input MemberStatusWhereUniqueInput { - id: ID -} - -type MemberSubscriptionPayload { - mutation: MutationType! - node: Member - updatedFields: [String!] - previousValues: MemberPreviousValues -} - -input MemberSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [MemberSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [MemberSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [MemberSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: MemberWhereInput -} - -input MemberUpdateInput { - alias: String - authId: String - visible: Boolean - teams: TeamMembersUpdateManyWithoutMemberInput - status: MemberStatusUpdateManyInput -} - -input MemberUpdateManyMutationInput { - alias: String - authId: String - visible: Boolean -} - -input MemberUpdateOneWithoutTeamsInput { - create: MemberCreateWithoutTeamsInput - connect: MemberWhereUniqueInput - disconnect: Boolean - delete: Boolean - update: MemberUpdateWithoutTeamsDataInput - upsert: MemberUpsertWithoutTeamsInput -} - -input MemberUpdateWithoutTeamsDataInput { - alias: String - authId: String - visible: Boolean - status: MemberStatusUpdateManyInput -} - -input MemberUpsertWithoutTeamsInput { - update: MemberUpdateWithoutTeamsDataInput! - create: MemberCreateWithoutTeamsInput! -} - -input MemberWhereInput { - """Logical AND on all given filters.""" - AND: [MemberWhereInput!] - - """Logical OR on all given filters.""" - OR: [MemberWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [MemberWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - alias: String - - """All values that are not equal to given value.""" - alias_not: String - - """All values that are contained in given list.""" - alias_in: [String!] - - """All values that are not contained in given list.""" - alias_not_in: [String!] - - """All values less than the given value.""" - alias_lt: String - - """All values less than or equal the given value.""" - alias_lte: String - - """All values greater than the given value.""" - alias_gt: String - - """All values greater than or equal the given value.""" - alias_gte: String - - """All values containing the given string.""" - alias_contains: String - - """All values not containing the given string.""" - alias_not_contains: String - - """All values starting with the given string.""" - alias_starts_with: String - - """All values not starting with the given string.""" - alias_not_starts_with: String - - """All values ending with the given string.""" - alias_ends_with: String - - """All values not ending with the given string.""" - alias_not_ends_with: String - authId: String - - """All values that are not equal to given value.""" - authId_not: String - - """All values that are contained in given list.""" - authId_in: [String!] - - """All values that are not contained in given list.""" - authId_not_in: [String!] - - """All values less than the given value.""" - authId_lt: String - - """All values less than or equal the given value.""" - authId_lte: String - - """All values greater than the given value.""" - authId_gt: String - - """All values greater than or equal the given value.""" - authId_gte: String - - """All values containing the given string.""" - authId_contains: String - - """All values not containing the given string.""" - authId_not_contains: String - - """All values starting with the given string.""" - authId_starts_with: String - - """All values not starting with the given string.""" - authId_not_starts_with: String - - """All values ending with the given string.""" - authId_ends_with: String - - """All values not ending with the given string.""" - authId_not_ends_with: String - visible: Boolean - - """All values that are not equal to given value.""" - visible_not: Boolean - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime - teams_every: TeamMembersWhereInput - teams_some: TeamMembersWhereInput - teams_none: TeamMembersWhereInput - status_every: MemberStatusWhereInput - status_some: MemberStatusWhereInput - status_none: MemberStatusWhereInput -} - -input MemberWhereUniqueInput { - id: ID - authId: String -} - -type Mutation { - createTeam(data: TeamCreateInput!): Team! - createTeamMembers(data: TeamMembersCreateInput!): TeamMembers! - createMember(data: MemberCreateInput!): Member! - createFinancialBeings(data: FinancialBeingsCreateInput!): FinancialBeings! - createTeamProfile(data: TeamProfileCreateInput!): TeamProfile! - createWallet(data: WalletCreateInput!): Wallet! - createMemberStatus(data: MemberStatusCreateInput!): MemberStatus! - createFBStatus(data: FBStatusCreateInput!): FBStatus! - createTeamMemberStatus(data: TeamMemberStatusCreateInput!): TeamMemberStatus! - createTeamStatus(data: TeamStatusCreateInput!): TeamStatus! - updateTeam(data: TeamUpdateInput!, where: TeamWhereUniqueInput!): Team - updateTeamMembers(data: TeamMembersUpdateInput!, where: TeamMembersWhereUniqueInput!): TeamMembers - updateMember(data: MemberUpdateInput!, where: MemberWhereUniqueInput!): Member - updateFinancialBeings(data: FinancialBeingsUpdateInput!, where: FinancialBeingsWhereUniqueInput!): FinancialBeings - updateTeamProfile(data: TeamProfileUpdateInput!, where: TeamProfileWhereUniqueInput!): TeamProfile - updateWallet(data: WalletUpdateInput!, where: WalletWhereUniqueInput!): Wallet - updateMemberStatus(data: MemberStatusUpdateInput!, where: MemberStatusWhereUniqueInput!): MemberStatus - updateFBStatus(data: FBStatusUpdateInput!, where: FBStatusWhereUniqueInput!): FBStatus - updateTeamMemberStatus(data: TeamMemberStatusUpdateInput!, where: TeamMemberStatusWhereUniqueInput!): TeamMemberStatus - updateTeamStatus(data: TeamStatusUpdateInput!, where: TeamStatusWhereUniqueInput!): TeamStatus - deleteTeam(where: TeamWhereUniqueInput!): Team - deleteTeamMembers(where: TeamMembersWhereUniqueInput!): TeamMembers - deleteMember(where: MemberWhereUniqueInput!): Member - deleteFinancialBeings(where: FinancialBeingsWhereUniqueInput!): FinancialBeings - deleteTeamProfile(where: TeamProfileWhereUniqueInput!): TeamProfile - deleteWallet(where: WalletWhereUniqueInput!): Wallet - deleteMemberStatus(where: MemberStatusWhereUniqueInput!): MemberStatus - deleteFBStatus(where: FBStatusWhereUniqueInput!): FBStatus - deleteTeamMemberStatus(where: TeamMemberStatusWhereUniqueInput!): TeamMemberStatus - deleteTeamStatus(where: TeamStatusWhereUniqueInput!): TeamStatus - upsertTeam(where: TeamWhereUniqueInput!, create: TeamCreateInput!, update: TeamUpdateInput!): Team! - upsertTeamMembers(where: TeamMembersWhereUniqueInput!, create: TeamMembersCreateInput!, update: TeamMembersUpdateInput!): TeamMembers! - upsertMember(where: MemberWhereUniqueInput!, create: MemberCreateInput!, update: MemberUpdateInput!): Member! - upsertFinancialBeings(where: FinancialBeingsWhereUniqueInput!, create: FinancialBeingsCreateInput!, update: FinancialBeingsUpdateInput!): FinancialBeings! - upsertTeamProfile(where: TeamProfileWhereUniqueInput!, create: TeamProfileCreateInput!, update: TeamProfileUpdateInput!): TeamProfile! - upsertWallet(where: WalletWhereUniqueInput!, create: WalletCreateInput!, update: WalletUpdateInput!): Wallet! - upsertMemberStatus(where: MemberStatusWhereUniqueInput!, create: MemberStatusCreateInput!, update: MemberStatusUpdateInput!): MemberStatus! - upsertFBStatus(where: FBStatusWhereUniqueInput!, create: FBStatusCreateInput!, update: FBStatusUpdateInput!): FBStatus! - upsertTeamMemberStatus(where: TeamMemberStatusWhereUniqueInput!, create: TeamMemberStatusCreateInput!, update: TeamMemberStatusUpdateInput!): TeamMemberStatus! - upsertTeamStatus(where: TeamStatusWhereUniqueInput!, create: TeamStatusCreateInput!, update: TeamStatusUpdateInput!): TeamStatus! - updateManyTeams(data: TeamUpdateManyMutationInput!, where: TeamWhereInput): BatchPayload! - updateManyTeamMemberses(data: TeamMembersUpdateManyMutationInput!, where: TeamMembersWhereInput): BatchPayload! - updateManyMembers(data: MemberUpdateManyMutationInput!, where: MemberWhereInput): BatchPayload! - updateManyFinancialBeingses(data: FinancialBeingsUpdateManyMutationInput!, where: FinancialBeingsWhereInput): BatchPayload! - updateManyTeamProfiles(data: TeamProfileUpdateManyMutationInput!, where: TeamProfileWhereInput): BatchPayload! - updateManyWallets(data: WalletUpdateManyMutationInput!, where: WalletWhereInput): BatchPayload! - updateManyMemberStatuses(data: MemberStatusUpdateManyMutationInput!, where: MemberStatusWhereInput): BatchPayload! - updateManyFBStatuses(data: FBStatusUpdateManyMutationInput!, where: FBStatusWhereInput): BatchPayload! - updateManyTeamMemberStatuses(data: TeamMemberStatusUpdateManyMutationInput!, where: TeamMemberStatusWhereInput): BatchPayload! - updateManyTeamStatuses(data: TeamStatusUpdateManyMutationInput!, where: TeamStatusWhereInput): BatchPayload! - deleteManyTeams(where: TeamWhereInput): BatchPayload! - deleteManyTeamMemberses(where: TeamMembersWhereInput): BatchPayload! - deleteManyMembers(where: MemberWhereInput): BatchPayload! - deleteManyFinancialBeingses(where: FinancialBeingsWhereInput): BatchPayload! - deleteManyTeamProfiles(where: TeamProfileWhereInput): BatchPayload! - deleteManyWallets(where: WalletWhereInput): BatchPayload! - deleteManyMemberStatuses(where: MemberStatusWhereInput): BatchPayload! - deleteManyFBStatuses(where: FBStatusWhereInput): BatchPayload! - deleteManyTeamMemberStatuses(where: TeamMemberStatusWhereInput): BatchPayload! - deleteManyTeamStatuses(where: TeamStatusWhereInput): BatchPayload! -} - -enum MutationType { - CREATED - UPDATED - DELETED -} - -"""An object with an ID""" -interface Node { - """The id of the object.""" - id: ID! -} - -"""Information about pagination in a connection.""" -type PageInfo { - """When paginating forwards, are there more items?""" - hasNextPage: Boolean! - - """When paginating backwards, are there more items?""" - hasPreviousPage: Boolean! - - """When paginating backwards, the cursor to continue.""" - startCursor: String - - """When paginating forwards, the cursor to continue.""" - endCursor: String -} - -type Query { - teams(where: TeamWhereInput, orderBy: TeamOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Team]! - teamMemberses(where: TeamMembersWhereInput, orderBy: TeamMembersOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamMembers]! - members(where: MemberWhereInput, orderBy: MemberOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Member]! - financialBeingses(where: FinancialBeingsWhereInput, orderBy: FinancialBeingsOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [FinancialBeings]! - teamProfiles(where: TeamProfileWhereInput, orderBy: TeamProfileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamProfile]! - wallets(where: WalletWhereInput, orderBy: WalletOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Wallet]! - memberStatuses(where: MemberStatusWhereInput, orderBy: MemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [MemberStatus]! - fBStatuses(where: FBStatusWhereInput, orderBy: FBStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [FBStatus]! - teamMemberStatuses(where: TeamMemberStatusWhereInput, orderBy: TeamMemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamMemberStatus]! - teamStatuses(where: TeamStatusWhereInput, orderBy: TeamStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamStatus]! - team(where: TeamWhereUniqueInput!): Team - teamMembers(where: TeamMembersWhereUniqueInput!): TeamMembers - member(where: MemberWhereUniqueInput!): Member - financialBeings(where: FinancialBeingsWhereUniqueInput!): FinancialBeings - teamProfile(where: TeamProfileWhereUniqueInput!): TeamProfile - wallet(where: WalletWhereUniqueInput!): Wallet - memberStatus(where: MemberStatusWhereUniqueInput!): MemberStatus - fBStatus(where: FBStatusWhereUniqueInput!): FBStatus - teamMemberStatus(where: TeamMemberStatusWhereUniqueInput!): TeamMemberStatus - teamStatus(where: TeamStatusWhereUniqueInput!): TeamStatus - teamsConnection(where: TeamWhereInput, orderBy: TeamOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): TeamConnection! - teamMembersesConnection(where: TeamMembersWhereInput, orderBy: TeamMembersOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): TeamMembersConnection! - membersConnection(where: MemberWhereInput, orderBy: MemberOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): MemberConnection! - financialBeingsesConnection(where: FinancialBeingsWhereInput, orderBy: FinancialBeingsOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): FinancialBeingsConnection! - teamProfilesConnection(where: TeamProfileWhereInput, orderBy: TeamProfileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): TeamProfileConnection! - walletsConnection(where: WalletWhereInput, orderBy: WalletOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): WalletConnection! - memberStatusesConnection(where: MemberStatusWhereInput, orderBy: MemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): MemberStatusConnection! - fBStatusesConnection(where: FBStatusWhereInput, orderBy: FBStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): FBStatusConnection! - teamMemberStatusesConnection(where: TeamMemberStatusWhereInput, orderBy: TeamMemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): TeamMemberStatusConnection! - teamStatusesConnection(where: TeamStatusWhereInput, orderBy: TeamStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): TeamStatusConnection! - - """Fetches an object given its ID""" - node( - """The ID of an object""" - id: ID! - ): Node -} - -enum Role { - OWNER - ADMIN - MEMBER -} - -enum Status { - ACTIVE - INACTIVE - APPLIED - INVITED - REMOVED -} - -type Subscription { - team(where: TeamSubscriptionWhereInput): TeamSubscriptionPayload - teamMembers(where: TeamMembersSubscriptionWhereInput): TeamMembersSubscriptionPayload - member(where: MemberSubscriptionWhereInput): MemberSubscriptionPayload - financialBeings(where: FinancialBeingsSubscriptionWhereInput): FinancialBeingsSubscriptionPayload - teamProfile(where: TeamProfileSubscriptionWhereInput): TeamProfileSubscriptionPayload - wallet(where: WalletSubscriptionWhereInput): WalletSubscriptionPayload - memberStatus(where: MemberStatusSubscriptionWhereInput): MemberStatusSubscriptionPayload - fBStatus(where: FBStatusSubscriptionWhereInput): FBStatusSubscriptionPayload - teamMemberStatus(where: TeamMemberStatusSubscriptionWhereInput): TeamMemberStatusSubscriptionPayload - teamStatus(where: TeamStatusSubscriptionWhereInput): TeamStatusSubscriptionPayload -} - -type Team implements Node { - id: ID! - name: String! - slug: String! - profile: TeamProfile - members(where: TeamMembersWhereInput, orderBy: TeamMembersOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamMembers!] - owner: String! - wallet: Wallet - fb(where: FinancialBeingsWhereInput, orderBy: FinancialBeingsOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [FinancialBeings!] - status(where: TeamStatusWhereInput, orderBy: TeamStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamStatus!] - createdAt: DateTime! - updatedAt: DateTime! -} - -"""A connection to a list of items.""" -type TeamConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [TeamEdge]! - aggregate: AggregateTeam! -} - -input TeamCreateInput { - name: String! - slug: String! - owner: String! - profile: TeamProfileCreateOneInput - members: TeamMembersCreateManyWithoutTeamInput - wallet: WalletCreateOneInput - fb: FinancialBeingsCreateManyWithoutTeamInput - status: TeamStatusCreateManyInput -} - -input TeamCreateOneWithoutFbInput { - create: TeamCreateWithoutFbInput - connect: TeamWhereUniqueInput -} - -input TeamCreateOneWithoutMembersInput { - create: TeamCreateWithoutMembersInput - connect: TeamWhereUniqueInput -} - -input TeamCreateWithoutFbInput { - name: String! - slug: String! - owner: String! - profile: TeamProfileCreateOneInput - members: TeamMembersCreateManyWithoutTeamInput - wallet: WalletCreateOneInput - status: TeamStatusCreateManyInput -} - -input TeamCreateWithoutMembersInput { - name: String! - slug: String! - owner: String! - profile: TeamProfileCreateOneInput - wallet: WalletCreateOneInput - fb: FinancialBeingsCreateManyWithoutTeamInput - status: TeamStatusCreateManyInput -} - -"""An edge in a connection.""" -type TeamEdge { - """The item at the end of the edge.""" - node: Team! - - """A cursor for use in pagination.""" - cursor: String! -} - -type TeamMembers implements Node { - id: ID! - member: Member - team: Team - role: Role - status(where: TeamMemberStatusWhereInput, orderBy: TeamMemberStatusOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [TeamMemberStatus!] - email: String - createdAt: DateTime! - updatedAt: DateTime! -} - -"""A connection to a list of items.""" -type TeamMembersConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [TeamMembersEdge]! - aggregate: AggregateTeamMembers! -} - -input TeamMembersCreateInput { - role: Role - email: String - member: MemberCreateOneWithoutTeamsInput - team: TeamCreateOneWithoutMembersInput - status: TeamMemberStatusCreateManyInput -} - -input TeamMembersCreateManyWithoutMemberInput { - create: [TeamMembersCreateWithoutMemberInput!] - connect: [TeamMembersWhereUniqueInput!] -} - -input TeamMembersCreateManyWithoutTeamInput { - create: [TeamMembersCreateWithoutTeamInput!] - connect: [TeamMembersWhereUniqueInput!] -} - -input TeamMembersCreateWithoutMemberInput { - role: Role - email: String - team: TeamCreateOneWithoutMembersInput - status: TeamMemberStatusCreateManyInput -} - -input TeamMembersCreateWithoutTeamInput { - role: Role - email: String - member: MemberCreateOneWithoutTeamsInput - status: TeamMemberStatusCreateManyInput -} - -"""An edge in a connection.""" -type TeamMembersEdge { - """The item at the end of the edge.""" - node: TeamMembers! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum TeamMembersOrderByInput { - id_ASC - id_DESC - role_ASC - role_DESC - email_ASC - email_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type TeamMembersPreviousValues { - id: ID! - role: Role - email: String - createdAt: DateTime! - updatedAt: DateTime! -} - -type TeamMembersSubscriptionPayload { - mutation: MutationType! - node: TeamMembers - updatedFields: [String!] - previousValues: TeamMembersPreviousValues -} - -input TeamMembersSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [TeamMembersSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamMembersSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamMembersSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: TeamMembersWhereInput -} - -type TeamMemberStatus implements Node { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type TeamMemberStatusConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [TeamMemberStatusEdge]! - aggregate: AggregateTeamMemberStatus! -} - -input TeamMemberStatusCreateInput { - status: Status - reason: String -} - -input TeamMemberStatusCreateManyInput { - create: [TeamMemberStatusCreateInput!] - connect: [TeamMemberStatusWhereUniqueInput!] -} - -"""An edge in a connection.""" -type TeamMemberStatusEdge { - """The item at the end of the edge.""" - node: TeamMemberStatus! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum TeamMemberStatusOrderByInput { - id_ASC - id_DESC - status_ASC - status_DESC - reason_ASC - reason_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type TeamMemberStatusPreviousValues { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -type TeamMemberStatusSubscriptionPayload { - mutation: MutationType! - node: TeamMemberStatus - updatedFields: [String!] - previousValues: TeamMemberStatusPreviousValues -} - -input TeamMemberStatusSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [TeamMemberStatusSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamMemberStatusSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamMemberStatusSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: TeamMemberStatusWhereInput -} - -input TeamMemberStatusUpdateDataInput { - status: Status - reason: String -} - -input TeamMemberStatusUpdateInput { - status: Status - reason: String -} - -input TeamMemberStatusUpdateManyInput { - create: [TeamMemberStatusCreateInput!] - connect: [TeamMemberStatusWhereUniqueInput!] - disconnect: [TeamMemberStatusWhereUniqueInput!] - delete: [TeamMemberStatusWhereUniqueInput!] - update: [TeamMemberStatusUpdateWithWhereUniqueNestedInput!] - upsert: [TeamMemberStatusUpsertWithWhereUniqueNestedInput!] -} - -input TeamMemberStatusUpdateManyMutationInput { - status: Status - reason: String -} - -input TeamMemberStatusUpdateWithWhereUniqueNestedInput { - where: TeamMemberStatusWhereUniqueInput! - data: TeamMemberStatusUpdateDataInput! -} - -input TeamMemberStatusUpsertWithWhereUniqueNestedInput { - where: TeamMemberStatusWhereUniqueInput! - update: TeamMemberStatusUpdateDataInput! - create: TeamMemberStatusCreateInput! -} - -input TeamMemberStatusWhereInput { - """Logical AND on all given filters.""" - AND: [TeamMemberStatusWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamMemberStatusWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamMemberStatusWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - status: Status - - """All values that are not equal to given value.""" - status_not: Status - - """All values that are contained in given list.""" - status_in: [Status!] - - """All values that are not contained in given list.""" - status_not_in: [Status!] - reason: String - - """All values that are not equal to given value.""" - reason_not: String - - """All values that are contained in given list.""" - reason_in: [String!] - - """All values that are not contained in given list.""" - reason_not_in: [String!] - - """All values less than the given value.""" - reason_lt: String - - """All values less than or equal the given value.""" - reason_lte: String - - """All values greater than the given value.""" - reason_gt: String - - """All values greater than or equal the given value.""" - reason_gte: String - - """All values containing the given string.""" - reason_contains: String - - """All values not containing the given string.""" - reason_not_contains: String - - """All values starting with the given string.""" - reason_starts_with: String - - """All values not starting with the given string.""" - reason_not_starts_with: String - - """All values ending with the given string.""" - reason_ends_with: String - - """All values not ending with the given string.""" - reason_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime -} - -input TeamMemberStatusWhereUniqueInput { - id: ID -} - -input TeamMembersUpdateInput { - role: Role - email: String - member: MemberUpdateOneWithoutTeamsInput - team: TeamUpdateOneWithoutMembersInput - status: TeamMemberStatusUpdateManyInput -} - -input TeamMembersUpdateManyMutationInput { - role: Role - email: String -} - -input TeamMembersUpdateManyWithoutMemberInput { - create: [TeamMembersCreateWithoutMemberInput!] - connect: [TeamMembersWhereUniqueInput!] - disconnect: [TeamMembersWhereUniqueInput!] - delete: [TeamMembersWhereUniqueInput!] - update: [TeamMembersUpdateWithWhereUniqueWithoutMemberInput!] - upsert: [TeamMembersUpsertWithWhereUniqueWithoutMemberInput!] -} - -input TeamMembersUpdateManyWithoutTeamInput { - create: [TeamMembersCreateWithoutTeamInput!] - connect: [TeamMembersWhereUniqueInput!] - disconnect: [TeamMembersWhereUniqueInput!] - delete: [TeamMembersWhereUniqueInput!] - update: [TeamMembersUpdateWithWhereUniqueWithoutTeamInput!] - upsert: [TeamMembersUpsertWithWhereUniqueWithoutTeamInput!] -} - -input TeamMembersUpdateWithoutMemberDataInput { - role: Role - email: String - team: TeamUpdateOneWithoutMembersInput - status: TeamMemberStatusUpdateManyInput -} - -input TeamMembersUpdateWithoutTeamDataInput { - role: Role - email: String - member: MemberUpdateOneWithoutTeamsInput - status: TeamMemberStatusUpdateManyInput -} - -input TeamMembersUpdateWithWhereUniqueWithoutMemberInput { - where: TeamMembersWhereUniqueInput! - data: TeamMembersUpdateWithoutMemberDataInput! -} - -input TeamMembersUpdateWithWhereUniqueWithoutTeamInput { - where: TeamMembersWhereUniqueInput! - data: TeamMembersUpdateWithoutTeamDataInput! -} - -input TeamMembersUpsertWithWhereUniqueWithoutMemberInput { - where: TeamMembersWhereUniqueInput! - update: TeamMembersUpdateWithoutMemberDataInput! - create: TeamMembersCreateWithoutMemberInput! -} - -input TeamMembersUpsertWithWhereUniqueWithoutTeamInput { - where: TeamMembersWhereUniqueInput! - update: TeamMembersUpdateWithoutTeamDataInput! - create: TeamMembersCreateWithoutTeamInput! -} - -input TeamMembersWhereInput { - """Logical AND on all given filters.""" - AND: [TeamMembersWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamMembersWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamMembersWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - role: Role - - """All values that are not equal to given value.""" - role_not: Role - - """All values that are contained in given list.""" - role_in: [Role!] - - """All values that are not contained in given list.""" - role_not_in: [Role!] - email: String - - """All values that are not equal to given value.""" - email_not: String - - """All values that are contained in given list.""" - email_in: [String!] - - """All values that are not contained in given list.""" - email_not_in: [String!] - - """All values less than the given value.""" - email_lt: String - - """All values less than or equal the given value.""" - email_lte: String - - """All values greater than the given value.""" - email_gt: String - - """All values greater than or equal the given value.""" - email_gte: String - - """All values containing the given string.""" - email_contains: String - - """All values not containing the given string.""" - email_not_contains: String - - """All values starting with the given string.""" - email_starts_with: String - - """All values not starting with the given string.""" - email_not_starts_with: String - - """All values ending with the given string.""" - email_ends_with: String - - """All values not ending with the given string.""" - email_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime - updatedAt: DateTime - - """All values that are not equal to given value.""" - updatedAt_not: DateTime - - """All values that are contained in given list.""" - updatedAt_in: [DateTime!] - - """All values that are not contained in given list.""" - updatedAt_not_in: [DateTime!] - - """All values less than the given value.""" - updatedAt_lt: DateTime - - """All values less than or equal the given value.""" - updatedAt_lte: DateTime - - """All values greater than the given value.""" - updatedAt_gt: DateTime - - """All values greater than or equal the given value.""" - updatedAt_gte: DateTime - member: MemberWhereInput - team: TeamWhereInput - status_every: TeamMemberStatusWhereInput - status_some: TeamMemberStatusWhereInput - status_none: TeamMemberStatusWhereInput -} - -input TeamMembersWhereUniqueInput { - id: ID - email: String -} - -enum TeamOrderByInput { - id_ASC - id_DESC - name_ASC - name_DESC - slug_ASC - slug_DESC - owner_ASC - owner_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type TeamPreviousValues { - id: ID! - name: String! - slug: String! - owner: String! - createdAt: DateTime! - updatedAt: DateTime! -} - -type TeamProfile implements Node { - id: ID! - description: String - motto: String - avatar: String - banner: String - updatedAt: DateTime! - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type TeamProfileConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [TeamProfileEdge]! - aggregate: AggregateTeamProfile! -} - -input TeamProfileCreateInput { - description: String - motto: String - avatar: String - banner: String -} - -input TeamProfileCreateOneInput { - create: TeamProfileCreateInput - connect: TeamProfileWhereUniqueInput -} - -"""An edge in a connection.""" -type TeamProfileEdge { - """The item at the end of the edge.""" - node: TeamProfile! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum TeamProfileOrderByInput { - id_ASC - id_DESC - description_ASC - description_DESC - motto_ASC - motto_DESC - avatar_ASC - avatar_DESC - banner_ASC - banner_DESC - updatedAt_ASC - updatedAt_DESC - createdAt_ASC - createdAt_DESC -} - -type TeamProfilePreviousValues { - id: ID! - description: String - motto: String - avatar: String - banner: String - updatedAt: DateTime! - createdAt: DateTime! -} - -type TeamProfileSubscriptionPayload { - mutation: MutationType! - node: TeamProfile - updatedFields: [String!] - previousValues: TeamProfilePreviousValues -} - -input TeamProfileSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [TeamProfileSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamProfileSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamProfileSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: TeamProfileWhereInput -} - -input TeamProfileUpdateDataInput { - description: String - motto: String - avatar: String - banner: String -} - -input TeamProfileUpdateInput { - description: String - motto: String - avatar: String - banner: String -} - -input TeamProfileUpdateManyMutationInput { - description: String - motto: String - avatar: String - banner: String -} - -input TeamProfileUpdateOneInput { - create: TeamProfileCreateInput - connect: TeamProfileWhereUniqueInput - disconnect: Boolean - delete: Boolean - update: TeamProfileUpdateDataInput - upsert: TeamProfileUpsertNestedInput -} - -input TeamProfileUpsertNestedInput { - update: TeamProfileUpdateDataInput! - create: TeamProfileCreateInput! -} - -input TeamProfileWhereInput { - """Logical AND on all given filters.""" - AND: [TeamProfileWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamProfileWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamProfileWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - description: String - - """All values that are not equal to given value.""" - description_not: String - - """All values that are contained in given list.""" - description_in: [String!] - - """All values that are not contained in given list.""" - description_not_in: [String!] - - """All values less than the given value.""" - description_lt: String - - """All values less than or equal the given value.""" - description_lte: String - - """All values greater than the given value.""" - description_gt: String - - """All values greater than or equal the given value.""" - description_gte: String - - """All values containing the given string.""" - description_contains: String - - """All values not containing the given string.""" - description_not_contains: String - - """All values starting with the given string.""" - description_starts_with: String - - """All values not starting with the given string.""" - description_not_starts_with: String - - """All values ending with the given string.""" - description_ends_with: String - - """All values not ending with the given string.""" - description_not_ends_with: String - motto: String - - """All values that are not equal to given value.""" - motto_not: String - - """All values that are contained in given list.""" - motto_in: [String!] - - """All values that are not contained in given list.""" - motto_not_in: [String!] - - """All values less than the given value.""" - motto_lt: String - - """All values less than or equal the given value.""" - motto_lte: String - - """All values greater than the given value.""" - motto_gt: String - - """All values greater than or equal the given value.""" - motto_gte: String - - """All values containing the given string.""" - motto_contains: String - - """All values not containing the given string.""" - motto_not_contains: String - - """All values starting with the given string.""" - motto_starts_with: String - - """All values not starting with the given string.""" - motto_not_starts_with: String - - """All values ending with the given string.""" - motto_ends_with: String - - """All values not ending with the given string.""" - motto_not_ends_with: String - avatar: String - - """All values that are not equal to given value.""" - avatar_not: String - - """All values that are contained in given list.""" - avatar_in: [String!] - - """All values that are not contained in given list.""" - avatar_not_in: [String!] - - """All values less than the given value.""" - avatar_lt: String - - """All values less than or equal the given value.""" - avatar_lte: String - - """All values greater than the given value.""" - avatar_gt: String - - """All values greater than or equal the given value.""" - avatar_gte: String - - """All values containing the given string.""" - avatar_contains: String - - """All values not containing the given string.""" - avatar_not_contains: String - - """All values starting with the given string.""" - avatar_starts_with: String - - """All values not starting with the given string.""" - avatar_not_starts_with: String - - """All values ending with the given string.""" - avatar_ends_with: String - - """All values not ending with the given string.""" - avatar_not_ends_with: String - banner: String - - """All values that are not equal to given value.""" - banner_not: String - - """All values that are contained in given list.""" - banner_in: [String!] - - """All values that are not contained in given list.""" - banner_not_in: [String!] - - """All values less than the given value.""" - banner_lt: String - - """All values less than or equal the given value.""" - banner_lte: String - - """All values greater than the given value.""" - banner_gt: String - - """All values greater than or equal the given value.""" - banner_gte: String - - """All values containing the given string.""" - banner_contains: String - - """All values not containing the given string.""" - banner_not_contains: String - - """All values starting with the given string.""" - banner_starts_with: String - - """All values not starting with the given string.""" - banner_not_starts_with: String - - """All values ending with the given string.""" - banner_ends_with: String - - """All values not ending with the given string.""" - banner_not_ends_with: String - updatedAt: DateTime - - """All values that are not equal to given value.""" - updatedAt_not: DateTime - - """All values that are contained in given list.""" - updatedAt_in: [DateTime!] - - """All values that are not contained in given list.""" - updatedAt_not_in: [DateTime!] - - """All values less than the given value.""" - updatedAt_lt: DateTime - - """All values less than or equal the given value.""" - updatedAt_lte: DateTime - - """All values greater than the given value.""" - updatedAt_gt: DateTime - - """All values greater than or equal the given value.""" - updatedAt_gte: DateTime - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime -} - -input TeamProfileWhereUniqueInput { - id: ID -} - -type TeamStatus implements Node { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -"""A connection to a list of items.""" -type TeamStatusConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [TeamStatusEdge]! - aggregate: AggregateTeamStatus! -} - -input TeamStatusCreateInput { - status: Status - reason: String -} - -input TeamStatusCreateManyInput { - create: [TeamStatusCreateInput!] - connect: [TeamStatusWhereUniqueInput!] -} - -"""An edge in a connection.""" -type TeamStatusEdge { - """The item at the end of the edge.""" - node: TeamStatus! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum TeamStatusOrderByInput { - id_ASC - id_DESC - status_ASC - status_DESC - reason_ASC - reason_DESC - createdAt_ASC - createdAt_DESC - updatedAt_ASC - updatedAt_DESC -} - -type TeamStatusPreviousValues { - id: ID! - status: Status - reason: String - createdAt: DateTime! -} - -type TeamStatusSubscriptionPayload { - mutation: MutationType! - node: TeamStatus - updatedFields: [String!] - previousValues: TeamStatusPreviousValues -} - -input TeamStatusSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [TeamStatusSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamStatusSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamStatusSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: TeamStatusWhereInput -} - -input TeamStatusUpdateDataInput { - status: Status - reason: String -} - -input TeamStatusUpdateInput { - status: Status - reason: String -} - -input TeamStatusUpdateManyInput { - create: [TeamStatusCreateInput!] - connect: [TeamStatusWhereUniqueInput!] - disconnect: [TeamStatusWhereUniqueInput!] - delete: [TeamStatusWhereUniqueInput!] - update: [TeamStatusUpdateWithWhereUniqueNestedInput!] - upsert: [TeamStatusUpsertWithWhereUniqueNestedInput!] -} - -input TeamStatusUpdateManyMutationInput { - status: Status - reason: String -} - -input TeamStatusUpdateWithWhereUniqueNestedInput { - where: TeamStatusWhereUniqueInput! - data: TeamStatusUpdateDataInput! -} - -input TeamStatusUpsertWithWhereUniqueNestedInput { - where: TeamStatusWhereUniqueInput! - update: TeamStatusUpdateDataInput! - create: TeamStatusCreateInput! -} - -input TeamStatusWhereInput { - """Logical AND on all given filters.""" - AND: [TeamStatusWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamStatusWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamStatusWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - status: Status - - """All values that are not equal to given value.""" - status_not: Status - - """All values that are contained in given list.""" - status_in: [Status!] - - """All values that are not contained in given list.""" - status_not_in: [Status!] - reason: String - - """All values that are not equal to given value.""" - reason_not: String - - """All values that are contained in given list.""" - reason_in: [String!] - - """All values that are not contained in given list.""" - reason_not_in: [String!] - - """All values less than the given value.""" - reason_lt: String - - """All values less than or equal the given value.""" - reason_lte: String - - """All values greater than the given value.""" - reason_gt: String - - """All values greater than or equal the given value.""" - reason_gte: String - - """All values containing the given string.""" - reason_contains: String - - """All values not containing the given string.""" - reason_not_contains: String - - """All values starting with the given string.""" - reason_starts_with: String - - """All values not starting with the given string.""" - reason_not_starts_with: String - - """All values ending with the given string.""" - reason_ends_with: String - - """All values not ending with the given string.""" - reason_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime -} - -input TeamStatusWhereUniqueInput { - id: ID -} - -type TeamSubscriptionPayload { - mutation: MutationType! - node: Team - updatedFields: [String!] - previousValues: TeamPreviousValues -} - -input TeamSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [TeamSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: TeamWhereInput -} - -input TeamUpdateInput { - name: String - slug: String - owner: String - profile: TeamProfileUpdateOneInput - members: TeamMembersUpdateManyWithoutTeamInput - wallet: WalletUpdateOneInput - fb: FinancialBeingsUpdateManyWithoutTeamInput - status: TeamStatusUpdateManyInput -} - -input TeamUpdateManyMutationInput { - name: String - slug: String - owner: String -} - -input TeamUpdateOneWithoutFbInput { - create: TeamCreateWithoutFbInput - connect: TeamWhereUniqueInput - disconnect: Boolean - delete: Boolean - update: TeamUpdateWithoutFbDataInput - upsert: TeamUpsertWithoutFbInput -} - -input TeamUpdateOneWithoutMembersInput { - create: TeamCreateWithoutMembersInput - connect: TeamWhereUniqueInput - disconnect: Boolean - delete: Boolean - update: TeamUpdateWithoutMembersDataInput - upsert: TeamUpsertWithoutMembersInput -} - -input TeamUpdateWithoutFbDataInput { - name: String - slug: String - owner: String - profile: TeamProfileUpdateOneInput - members: TeamMembersUpdateManyWithoutTeamInput - wallet: WalletUpdateOneInput - status: TeamStatusUpdateManyInput -} - -input TeamUpdateWithoutMembersDataInput { - name: String - slug: String - owner: String - profile: TeamProfileUpdateOneInput - wallet: WalletUpdateOneInput - fb: FinancialBeingsUpdateManyWithoutTeamInput - status: TeamStatusUpdateManyInput -} - -input TeamUpsertWithoutFbInput { - update: TeamUpdateWithoutFbDataInput! - create: TeamCreateWithoutFbInput! -} - -input TeamUpsertWithoutMembersInput { - update: TeamUpdateWithoutMembersDataInput! - create: TeamCreateWithoutMembersInput! -} - -input TeamWhereInput { - """Logical AND on all given filters.""" - AND: [TeamWhereInput!] - - """Logical OR on all given filters.""" - OR: [TeamWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [TeamWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - name: String - - """All values that are not equal to given value.""" - name_not: String - - """All values that are contained in given list.""" - name_in: [String!] - - """All values that are not contained in given list.""" - name_not_in: [String!] - - """All values less than the given value.""" - name_lt: String - - """All values less than or equal the given value.""" - name_lte: String - - """All values greater than the given value.""" - name_gt: String - - """All values greater than or equal the given value.""" - name_gte: String - - """All values containing the given string.""" - name_contains: String - - """All values not containing the given string.""" - name_not_contains: String - - """All values starting with the given string.""" - name_starts_with: String - - """All values not starting with the given string.""" - name_not_starts_with: String - - """All values ending with the given string.""" - name_ends_with: String - - """All values not ending with the given string.""" - name_not_ends_with: String - slug: String - - """All values that are not equal to given value.""" - slug_not: String - - """All values that are contained in given list.""" - slug_in: [String!] - - """All values that are not contained in given list.""" - slug_not_in: [String!] - - """All values less than the given value.""" - slug_lt: String - - """All values less than or equal the given value.""" - slug_lte: String - - """All values greater than the given value.""" - slug_gt: String - - """All values greater than or equal the given value.""" - slug_gte: String - - """All values containing the given string.""" - slug_contains: String - - """All values not containing the given string.""" - slug_not_contains: String - - """All values starting with the given string.""" - slug_starts_with: String - - """All values not starting with the given string.""" - slug_not_starts_with: String - - """All values ending with the given string.""" - slug_ends_with: String - - """All values not ending with the given string.""" - slug_not_ends_with: String - owner: String - - """All values that are not equal to given value.""" - owner_not: String - - """All values that are contained in given list.""" - owner_in: [String!] - - """All values that are not contained in given list.""" - owner_not_in: [String!] - - """All values less than the given value.""" - owner_lt: String - - """All values less than or equal the given value.""" - owner_lte: String - - """All values greater than the given value.""" - owner_gt: String - - """All values greater than or equal the given value.""" - owner_gte: String - - """All values containing the given string.""" - owner_contains: String - - """All values not containing the given string.""" - owner_not_contains: String - - """All values starting with the given string.""" - owner_starts_with: String - - """All values not starting with the given string.""" - owner_not_starts_with: String - - """All values ending with the given string.""" - owner_ends_with: String - - """All values not ending with the given string.""" - owner_not_ends_with: String - createdAt: DateTime - - """All values that are not equal to given value.""" - createdAt_not: DateTime - - """All values that are contained in given list.""" - createdAt_in: [DateTime!] - - """All values that are not contained in given list.""" - createdAt_not_in: [DateTime!] - - """All values less than the given value.""" - createdAt_lt: DateTime - - """All values less than or equal the given value.""" - createdAt_lte: DateTime - - """All values greater than the given value.""" - createdAt_gt: DateTime - - """All values greater than or equal the given value.""" - createdAt_gte: DateTime - updatedAt: DateTime - - """All values that are not equal to given value.""" - updatedAt_not: DateTime - - """All values that are contained in given list.""" - updatedAt_in: [DateTime!] - - """All values that are not contained in given list.""" - updatedAt_not_in: [DateTime!] - - """All values less than the given value.""" - updatedAt_lt: DateTime - - """All values less than or equal the given value.""" - updatedAt_lte: DateTime - - """All values greater than the given value.""" - updatedAt_gt: DateTime - - """All values greater than or equal the given value.""" - updatedAt_gte: DateTime - profile: TeamProfileWhereInput - members_every: TeamMembersWhereInput - members_some: TeamMembersWhereInput - members_none: TeamMembersWhereInput - wallet: WalletWhereInput - fb_every: FinancialBeingsWhereInput - fb_some: FinancialBeingsWhereInput - fb_none: FinancialBeingsWhereInput - status_every: TeamStatusWhereInput - status_some: TeamStatusWhereInput - status_none: TeamStatusWhereInput -} - -input TeamWhereUniqueInput { - id: ID - name: String - slug: String -} - -type Wallet implements Node { - id: ID! - balance: Float - updatedAt: DateTime! -} - -"""A connection to a list of items.""" -type WalletConnection { - """Information to aid in pagination.""" - pageInfo: PageInfo! - - """A list of edges.""" - edges: [WalletEdge]! - aggregate: AggregateWallet! -} - -input WalletCreateInput { - balance: Float -} - -input WalletCreateOneInput { - create: WalletCreateInput - connect: WalletWhereUniqueInput -} - -"""An edge in a connection.""" -type WalletEdge { - """The item at the end of the edge.""" - node: Wallet! - - """A cursor for use in pagination.""" - cursor: String! -} - -enum WalletOrderByInput { - id_ASC - id_DESC - balance_ASC - balance_DESC - updatedAt_ASC - updatedAt_DESC - createdAt_ASC - createdAt_DESC -} - -type WalletPreviousValues { - id: ID! - balance: Float - updatedAt: DateTime! -} - -type WalletSubscriptionPayload { - mutation: MutationType! - node: Wallet - updatedFields: [String!] - previousValues: WalletPreviousValues -} - -input WalletSubscriptionWhereInput { - """Logical AND on all given filters.""" - AND: [WalletSubscriptionWhereInput!] - - """Logical OR on all given filters.""" - OR: [WalletSubscriptionWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [WalletSubscriptionWhereInput!] - - """ - The subscription event gets dispatched when it's listed in mutation_in - """ - mutation_in: [MutationType!] - - """ - The subscription event gets only dispatched when one of the updated fields names is included in this list - """ - updatedFields_contains: String - - """ - The subscription event gets only dispatched when all of the field names included in this list have been updated - """ - updatedFields_contains_every: [String!] - - """ - The subscription event gets only dispatched when some of the field names included in this list have been updated - """ - updatedFields_contains_some: [String!] - node: WalletWhereInput -} - -input WalletUpdateDataInput { - balance: Float -} - -input WalletUpdateInput { - balance: Float -} - -input WalletUpdateManyMutationInput { - balance: Float -} - -input WalletUpdateOneInput { - create: WalletCreateInput - connect: WalletWhereUniqueInput - disconnect: Boolean - delete: Boolean - update: WalletUpdateDataInput - upsert: WalletUpsertNestedInput -} - -input WalletUpsertNestedInput { - update: WalletUpdateDataInput! - create: WalletCreateInput! -} - -input WalletWhereInput { - """Logical AND on all given filters.""" - AND: [WalletWhereInput!] - - """Logical OR on all given filters.""" - OR: [WalletWhereInput!] - - """Logical NOT on all given filters combined by AND.""" - NOT: [WalletWhereInput!] - id: ID - - """All values that are not equal to given value.""" - id_not: ID - - """All values that are contained in given list.""" - id_in: [ID!] - - """All values that are not contained in given list.""" - id_not_in: [ID!] - - """All values less than the given value.""" - id_lt: ID - - """All values less than or equal the given value.""" - id_lte: ID - - """All values greater than the given value.""" - id_gt: ID - - """All values greater than or equal the given value.""" - id_gte: ID - - """All values containing the given string.""" - id_contains: ID - - """All values not containing the given string.""" - id_not_contains: ID - - """All values starting with the given string.""" - id_starts_with: ID - - """All values not starting with the given string.""" - id_not_starts_with: ID - - """All values ending with the given string.""" - id_ends_with: ID - - """All values not ending with the given string.""" - id_not_ends_with: ID - balance: Float - - """All values that are not equal to given value.""" - balance_not: Float - - """All values that are contained in given list.""" - balance_in: [Float!] - - """All values that are not contained in given list.""" - balance_not_in: [Float!] - - """All values less than the given value.""" - balance_lt: Float - - """All values less than or equal the given value.""" - balance_lte: Float - - """All values greater than the given value.""" - balance_gt: Float - - """All values greater than or equal the given value.""" - balance_gte: Float - updatedAt: DateTime - - """All values that are not equal to given value.""" - updatedAt_not: DateTime - - """All values that are contained in given list.""" - updatedAt_in: [DateTime!] - - """All values that are not contained in given list.""" - updatedAt_not_in: [DateTime!] - - """All values less than the given value.""" - updatedAt_lt: DateTime - - """All values less than or equal the given value.""" - updatedAt_lte: DateTime - - """All values greater than the given value.""" - updatedAt_gt: DateTime - - """All values greater than or equal the given value.""" - updatedAt_gte: DateTime -} - -input WalletWhereUniqueInput { - id: ID -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBFragment.js b/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBFragment.js deleted file mode 100644 index 18e56ce13..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBFragment.js +++ /dev/null @@ -1,16 +0,0 @@ -import gql from 'graphql-tag' - -const FB_FRAGMENT = gql`{ - id - name - slug - avatar - kind - status { - status - reason - createdAt - } -}` - -module.exports = FB_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBTeamFragment.js b/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBTeamFragment.js deleted file mode 100644 index 510f5fabc..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/FBTeamFragment.js +++ /dev/null @@ -1,40 +0,0 @@ -import gql from 'graphql-tag' - -const FB_TEAM_FRAGMENT = gql`{ - edges{ - node{ - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - team { - id - name - slug - owner - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - } - } - } - } - } -}` - -module.exports = FB_TEAM_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamFBFragment.js b/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamFBFragment.js deleted file mode 100644 index b0f99c664..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamFBFragment.js +++ /dev/null @@ -1,34 +0,0 @@ -import gql from 'graphql-tag' - -const TEAM_FB_FRAGMENT = gql`{ - id - name - slug - members { - role - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } -}` - -module.exports = TEAM_FB_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsConnectionsFragment.js b/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsConnectionsFragment.js deleted file mode 100644 index f019dd02e..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsConnectionsFragment.js +++ /dev/null @@ -1,53 +0,0 @@ -import gql from 'graphql-tag' - -const TEAMS_CONNECTIONS_FRAGMENT = gql`{ - edges { - node { - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } - } - } -}` - -module.exports = TEAMS_CONNECTIONS_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsFragment.js b/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsFragment.js deleted file mode 100644 index 1dd527af9..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/fragments/TeamsFragment.js +++ /dev/null @@ -1,49 +0,0 @@ -import gql from 'graphql-tag' - -const TEAMS_FRAGMENT = gql`{ - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } -}` - -module.exports = TEAMS_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/Member.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/Member.js deleted file mode 100644 index 653764d4c..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/Member.js +++ /dev/null @@ -1,17 +0,0 @@ -export const createMember = async function (ctx, info, authId) { - logger.info('createMember', authId) - const member = await ctx.db.mutation.upsertMember({ - where: { - authId: authId, - }, - create: { - authId: authId, - alias: idToken.nickname - }, - update: { - authId: authId, - alias: idToken.nickname - } - }, info) - return member -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/Team.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/Team.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/TeamMember.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/TeamMember.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/createStrategy.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/createStrategy.js deleted file mode 100644 index 12e73c281..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/createStrategy.js +++ /dev/null @@ -1,40 +0,0 @@ -import axios from 'axios' - -import { logger, DatabaseError } from '../../../logger' - -export const createStrategy = fbSlug => { - logger.info('createStrategy') - logger.info(fbSlug) - return new Promise((resolve, reject) => { - try { - return axios.post(process.env.PLATFORM_API_URL, { - query: `mutation strategizer_CreateStrategy($fbSlug: String!) { - strategizer_CreateStrategy(fbSlug: $fbSlug){ - id - } - }`, - variables: { - fbSlug: fbSlug - } - }, { - headers: { - 'Content-Type': 'application/json' - } - }) - .then(res => { - logger.info('createStrategy result') - logger.info(res.data) - resolve(res.data) - }) - .catch(err => { - logger.error('createStrategy err') - logger.error(err) - reject(err) - }) - } catch (error) { - reject(error) - } - }) -} - -export default createStrategy diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/index.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/index.js deleted file mode 100644 index 703597165..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Mutation/index.js +++ /dev/null @@ -1,219 +0,0 @@ -import axios from 'axios' -import { ApolloError } from 'apollo-server-express' - -import { getUser } from '../../../middleware/getMember' -import { createStrategy } from './createStrategy' - -import { notifications_sendTeamCreateConfirmation, notifications_sendTeamMemberInvite, notifications_VerifyTeamMemberInviteToken } from '../notifications/sendgrid' - -import TEAMS_CONNECTIONS_FRAGMENT from '../../fragments/TeamsConnectionsFragment' -import TEAMS_FRAGMENT from '../../fragments/TeamsFragment' -import FB_FRAGMENT from '../../fragments/FBFragment' - -import { logger, AuthenticationError, ServiceUnavailableError, DatabaseError, ConflictError } from '../../../logger' - -export const resolvers = { - Mutation: { - async sendMemberInviteSG(parent, { email, teamId }, ctx, info) { - const team = await ctx.db.query.team({ where: { id: teamId } }, TEAMS_FRAGMENT) - const addMember = await ctx.db.mutation.upsertTeamMembers({ - where:{email: email}, - create:{role:'MEMBER', email:email, team: {connect: {id: teamId}}, status:{create:{status: 'INVITED', reason: `Invited by ${team.members[0].member.alias}`}}}, - update:{role: 'MEMBER', email: email, team: {connect: {id: teamId}}, status:{create:{status: 'INVITED', reason: `Invite resent by ${team.members[0].member.alias}`}}}}, - `{ id }`) - const sendInvite = await notifications_sendTeamMemberInvite(email, team) - return sendInvite - }, - async verifyTeamInvite(parent, { token }, ctx, info) { - let verifiedToken = null - let team = null - try { - verifiedToken = await notifications_VerifyTeamMemberInviteToken(token) - team = { - email: verifiedToken.email, - team: { - slug: verifiedToken.team - } - } - logger.info('verifyTeamInvite.token: ', await verifiedToken) - } catch (err) { - logger.debug('verifyTeamInvite. err: ', err) - throw new DatabaseError(err.message) - } - return team - }, - async createTeam(parent, { name, slug, botName, botSlug }, ctx, info) { - logger.info('createTeam ctx.request.user:') - logger.info(ctx.request.headers.userid) - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - const userData = await getUser(authId) - logger.info('userData:') - logger.info(JSON.stringify(await userData)) - const alias = await userData.data.users_User.alias - const email = await userData.data.users_User.email - const avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - const banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - - const createTeamUrl = encodeURI(`${slug}/${name}/${alias}/${botSlug}/${botName}`) - logger.info('createTeamUrl:') - logger.info(JSON.stringify(await createTeamUrl)) - - const chartsUrl = process.env.CHARTS_URL + '/AABrowserAPI/newTeam/' - - logger.info(`${chartsUrl}${createTeamUrl}/${authId}`) - const createPlatformTeam = await axios.get(`${chartsUrl}${createTeamUrl}/${authId}/${process.env.AAWEB_TEAM_SHARED_SECRET}`) - .then((result) => { - console.log('createPlatformTeam result:', result.data) - if(result.data.message === 'Team Name already taken'){ - return { error: 'Team already exist on AA Cloud.', code: 409 } - } - if(result.data.result === 'Fail'){ - return { error: `${result.data.message} - Creating team on AA Cloud has failed`, code: 404 } - } - return result - }) - - logger.info('createPlatformTeam') - logger.info(await createPlatformTeam) - logger.info('createPlatformTeam Error') - logger.error(await createPlatformTeam.error) - logger.info('createPlatformTeam Code') - logger.error(await createPlatformTeam.code) - - // if (await createPlatformTeam.error && await createPlatformTeam.code === 404) throw new ApolloError(await createPlatformTeam.error, 404) - // if (await createPlatformTeam.error && await createPlatformTeam.code === 409) throw new ApolloError(await createPlatformTeam.error, 409) - - const existingMember = await ctx.db.query.member({ where: { authId } }, `{id}`) - .catch((err) => { - logger.debug(err, 'existingMember error: ') - throw new DatabaseError(err) - }) - - logger.debug('existingMember:') - logger.debug(await existingMember) - - let createTeam - if(existingMember !== null && existingMember.id !== null){ - logger.info('createTeam with existingMember:') - createTeam = await ctx.db.mutation.createTeam({ data: {name: name, slug: slug, owner: authId, members: {create: {member: {connect: {authId: authId}}, role: 'OWNER', status: { create: { status: 'ACTIVE', reason: `Connected to Team ${name}`}}}}, profile: {create: {avatar: avatar, banner: banner}}, fb: {create: {name: botName, slug: botSlug, kind:'Trading', avatar: avatar, status: {create: {status: 'ACTIVE', reason: "Cloned on team creation"}}}}, status: {create: {status: 'ACTIVE', reason:"Team created"}}} }, TEAMS_FRAGMENT) - .catch((err) => { - logger.debug(err, 'createTeamMutation error: ') - return new DatabaseError(err) - }) - } else { - logger.info('createTeam without existingMember:') - createTeam = await ctx.db.mutation.createTeam({ data: {name: name, slug: slug, owner: authId, members: {create: {member: {create: {authId: authId, alias: alias, visible: true, status: { create: { status: 'ACTIVE', reason: `Created team ${name}`}}}}, role: 'OWNER', status: { create: { status: 'ACTIVE', reason: `Created with Team ${name}`}}}}, profile: {create: {avatar: avatar, banner: banner}}, fb: {create: {name: botName, slug: botSlug, kind:'Trading', avatar: avatar, status: {create: {status: 'ACTIVE', reason: "Cloned on team creation"}}}}, status: {create: {status: 'ACTIVE', reason:"Team created"}}} }, TEAMS_FRAGMENT) - .catch((err) => { - logger.debug(err, 'createTeamMutation error: ') - return new DatabaseError(err) - }) - - } - let createFB; - if(createTeam){ - createFB = await ctx.db.mutation.createFinancialBeings({ data:{ - type:'BOT', - kind:'Indicator', - name:'Simulator ' + botName, - slug:'simulator-' + botSlug, - avatar:avatar, - team: { - connect:{ - id:createTeam.id - } - } - } - }, FB_FRAGMENT) - .catch((err) => { - logger.debug(err, 'Error creating the simulator: ') - return new DatabaseError(err) - }) - logger.info('createTeam creating simulator success') - logger.info(JSON.stringify(await createFB)) - let createdStrategy - if(await createFB){ - logger.info('createStrategy:' + 'simulator-' + botSlug) - createdStrategy = await createStrategy('simulator-' + botSlug) - logger.info('createStrategy:') - logger.info(JSON.stringify(await createStrategy)) - } - } - /* **temporarily disable team creation confirmation - if(await createTeam && await createFB && await createStrategy){ - notifications_sendTeamCreateConfirmation(email, name, botName) - } - */ - return createTeam - }, - async updateTeamProfile(parent, { slug, owner, description, motto, avatar, banner }, ctx, info) { - return ctx.db.mutation.updateTeam({data:{profile: {update: {description: description, motto: motto, avatar: avatar, banner: banner}}}, where:{slug: slug}}, TEAMS_FRAGMENT) - .catch((err) => { - logger.debug('createTeam error: ', err) - throw new DatabaseError(`Team Profile Update Error: ${err}`) - }) - }, - async updateFB(parent, { fbId, avatar}, ctx, info) { - return ctx.db.mutation.updateFinancialBeings({data:{avatar:avatar}, where:{id:fbId}}, info) - .catch((err) => { - logger.debug('createTeam error: ', err) - throw new DatabaseError(`Update Financial Being Error: ${err}`) - }) - }, - async deleteTeam(parent, { slug, botSlug }, ctx, info) { - logger.info('deleteTeam ctx.request.user:') - logger.info(ctx.request.headers.userid) - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - logger.info(authId) - logger.info('getUser') - logger.info(getUser) - - return getUser(authId) - .then(async result => { - logger.info('deleteTeam axios:') - logger.info(await result) - - const alias = await result.data.users_User.alias - // const email = result.data.users_User.email - const deleteTeamUrl = encodeURI(`${slug}/${alias}/${botSlug}`) - logger.info('deleteTeamUrl:') - logger.info(JSON.stringify(await deleteTeamUrl)) - - const chartsUrl = process.env.CHARTS_URL + '/AABrowserAPI/deleteTeam/' - - logger.info(`${chartsUrl}${deleteTeamUrl}/${authId}`) - const deletePlatformTeam = await axios.get(`${chartsUrl}${deleteTeamUrl}/${authId}/${process.env.AAWEB_DELETE_TEAM_SHARED_SECRET}`) - .then((result) => { - console.log('deletePlatformTeam result:', result.data) - if(result.data.result === 'Fail'){ - throw new DatabaseError(result.data.message) - } - return result - }) - .catch(err =>{ - logger.debug('deletePlatformTeam err:') - logger.debug(err) - throw new DatabaseError(err) - }) - console.log('deletePlatformTeam returned: ', await deletePlatformTeam) - - return ctx.db.mutation.deleteTeam({ where: { slug } }, info) - .catch((res) => { - logger.info('deleteTeam error: ', res) - const errors = res.graphQLErrors.map((error) => { - throw new DatabaseError(error.message) - }) - }) - }) - .catch((err) => { - logger.debug('deleteTeam error: ') - throw new DatabaseError(err) - }) - } - } -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/FinancialBeing.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/FinancialBeing.js deleted file mode 100644 index 90f04486e..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/FinancialBeing.js +++ /dev/null @@ -1,34 +0,0 @@ -import { logger } from '../../../logger' - -import FB_FRAGMENT from '../../fragments/FBFragment' -import FB_TEAM_FRAGMENT from '../../fragments/FBTeamFragment' - -import { isDefined, isNull } from '../../../utils' - -export const fbByFbId = async (parent, { fbId }, ctx, info) => { - logger.info(`fbByFbId: ${fbId}`) - let FB = await ctx.db.query.financialBeings({where: {id: fbId}}, FB_FRAGMENT) - logger.info(`fbByFbId response: ${JSON.stringify(await FB)}`) - return FB -} - -export const fbByFbSlug = async (parent, { fbSlug }, ctx, info) => { - logger.info(`fbByFbSlug: ${fbSlug}`) - let FB = await ctx.db.query.financialBeingses({where: {slug: fbSlug}, first:1}, FB_FRAGMENT) - logger.info(`fbByFbSlug response: ${JSON.stringify(await FB)}`) - return FB[0] -} - -export const fbByOwner = async (parent, { fbId, fbSlug }, ctx, info) => { - logger.info('teamsByOwner') - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - return - } - if ((isDefined(fbId) && !isNull(fbId)) || (isDefined(fbSlug) && !isNull(fbSlug))){ - return ctx.db.query.financialBeingsesConnection({where: {AND:[{team:{members_every:{member:{authId: authId}}}},{OR:[{slug:fbSlug},{id:fbId}]}]}}, FB_TEAM_FRAGMENT) - } else { - return ctx.db.query.financialBeingsesConnection({where: {team:{members_every:{member:{authId: authId}}}}}, FB_TEAM_FRAGMENT) - } -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Member.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Member.js deleted file mode 100644 index 5f6e069b6..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Member.js +++ /dev/null @@ -1,31 +0,0 @@ -import { logger, AuthenticationError, DatabaseError } from '../../../logger' - -export const member = async (parent, arg, ctx, info) => { - logger.info(' --> resolver.member') - logger.info(ctx.request.headers.userid) - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - return ctx.db.query.member({ where: { authId } }, info) - .catch(err => { - logger.debug('resolver.member error: ') - logger.debug(err) - throw new DatabaseError(`Member Data Error: ${err.message}`) - }) -} - -export const owner = async (parent, args, ctx, info) => { - logger.info('resolver.query.owner ctx: ') - logger.info(ctx.request.headers.userid) - const authId = cctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - return ctx.db.query.member({ where: { authId: authId } }, info) - .catch(err => { - logger.debug('resolver.owner error: ') - logger.debug(err) - throw new DatabaseError(`Member Data Error: ${err.message}`) - }) -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Team.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Team.js deleted file mode 100644 index 9c9683148..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/Team.js +++ /dev/null @@ -1,77 +0,0 @@ -import { logger, AuthenticationError, DatabaseError } from '../../../logger' - -import TEAMS_CONNECTIONS_FRAGMENT from '../../fragments/TeamsConnectionsFragment' -import TEAMS_FRAGMENT from '../../fragments/TeamsFragment' - -export const teams = async (parent, args, ctx, info) => { - logger.info('teams') - return ctx.db.query.teamsConnection({}, TEAMS_CONNECTIONS_FRAGMENT) -} - -export const teamsByIds = async (parent, { teamIds }, ctx, info) => { - logger.info('teamsByIds') - logger.info(teamIds) - return ctx.db.query.teams({where: { id_in: teamIds } }, TEAMS_FRAGMENT) -} - -export const teamById = async (parent, { teamId }, ctx, info) => { - logger.info('teamById') - logger.info(teamId) - return ctx.db.query.team({ where: { id: teamId } }, TEAMS_FRAGMENT) -} - -export const teamByName = async (parent, { name }, ctx, info) => { - return ctx.db.query.team({ where: { name: name } }, TEAMS_FRAGMENT) -} - -export const teamBySlug= async (parent, { slug }, ctx, info) => { - logger.info('teamsBySlug') - logger.info(`slug: ${slug}`) - return ctx.db.query.team({ where: { slug: slug } }, TEAMS_FRAGMENT) -} - -export const teamWithRole = async (parent, { teamId, role }, ctx, info) => { - return ctx.db.query.teamsConnection({where: {AND: [{id: teamId},{members_some:{role: role}}]}, first:1}, info) -} - -export const teamAuthorization = async (parent, { teamId, role }, ctx, info) => { - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - return - } - if(role == undefined || role == null){ - return ctx.db.query.teamsConnection({where:{ AND:{id:teamId,members_some:{member:{authId:authId}, role_in:['OWNER','ADMIN']}}}, first:1}, info) - } else { - return ctx.db.query.teamsConnection({where:{ AND:{id:teamId,members_some:{member:{authId:authId}, role:role}}}, first:1}, info) - } -} - -export const teamsByOwner = async (parent, args, ctx, info) => { - logger.info('teamsByOwner') - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - return - } - return ctx.db.query.teams({where: { owner: authId }, orderBy:'createdAt_DESC'}, TEAMS_FRAGMENT) -} - -export const teamsByRole = async (parent, args, ctx, info) => { - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - let teamAdmin - try { - teamAdmin= await ctx.db.query.teams({where: {members_some: {AND: [{member: {authId: authId}, role_not:'MEMBER'}]}}}, TEAMS_FRAGMENT) - } catch (err) { - logger.debug('teamsByRole error: ') - logger.debug(err) - const errors = err.graphQLErrors.map((error) => { - throw new DatabaseError(error.message) - }) - } - logger.info('teamsByRole teamAdmin: ', teamAdmin) - return teamAdmin -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/TeamMember.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/TeamMember.js deleted file mode 100644 index bf81e66d9..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/TeamMember.js +++ /dev/null @@ -1,14 +0,0 @@ -import { logger } from '../../../logger' - -import TEAM_FB_FRAGMENT from '../../fragments/TeamFBFragment' - -export const fbByTeamMember = async (parent, args, ctx, info) => { - logger.info('fbByTeamMember: ', args, ctx.request, ctx.request.res.req.user) - const authId = ctx.request.headers.userid - if (!authId) { - throw new AuthenticationError() - } - let teamMemberFB = await ctx.db.query.teams({where: {members_some: {AND: [{member: {authId: authId}}]}}, orderBy: 'createdAt_DESC'}, TEAM_FB_FRAGMENT) - logger.info('fbByTeamMember response: ', await teamMemberFB[0]) - return teamMemberFB[0] -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/index.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/index.js deleted file mode 100644 index 22e9a08cc..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/Query/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import { logger } from '../../../logger' - -import { member, owner } from './Member' -import { teams, teamById, teamsByIds, teamByName, teamBySlug, teamWithRole, teamAuthorization, teamsByOwner, teamsByRole } from './Team' -import{ fbByTeamMember } from './TeamMember' -import{ fbByFbId, fbByFbSlug, fbByOwner } from './FinancialBeing' - -export const resolvers = { - Query: { - member: (parent, arg, ctx, info) => member(parent, arg, ctx, info), - teams: (parent, arg, ctx, info) => teams(parent, arg, ctx, info), - teamById: (parent, arg, ctx, info) => teamById(parent, arg, ctx, info), - teamsByIds: (parent, arg, ctx, info) => teamsByIds(parent, arg, ctx, info), - teamByName: (parent, arg, ctx, info) => teamByName(parent, arg, ctx, info), - teamBySlug: (parent, arg, ctx, info) => teamBySlug(parent, arg, ctx, info), - teamWithRole: (parent, arg, ctx, info) => teamWithRole(parent, arg, ctx, info), - teamAuthorization: (parent, arg, ctx, info) => teamAuthorization(parent, arg, ctx, info), - teamsByOwner: (parent, arg, ctx, info) => teamsByOwner(parent, arg, ctx, info), - teamsByRole: (parent, arg, ctx, info) => teamsByRole(parent, arg, ctx, info), - owner: (parent, arg, ctx, info) => owner(parent, arg, ctx, info), - fbByTeamMember: (parent, arg, ctx, info) => fbByTeamMember(parent, arg, ctx, info), - fbByOwner: (parent, arg, ctx, info) => fbByOwner(parent, arg, ctx, info), - fbByFbId: (parent, arg, ctx, info) => fbByFbId(parent, arg, ctx, info), - fbByFbSlug: (parent, arg, ctx, info) => fbByFbSlug(parent, arg, ctx, info) - } -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/index.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/index.js deleted file mode 100644 index 7e38a53f0..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import merge from 'lodash/merge' - -import { resolvers as queryResolvers } from './Query' -import { resolvers as mutationResolvers } from './Mutation' - -export const resolvers = merge(queryResolvers, mutationResolvers) diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/notifications/sendgrid.js b/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/notifications/sendgrid.js deleted file mode 100644 index 4fb8a69e3..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/resolvers/notifications/sendgrid.js +++ /dev/null @@ -1,125 +0,0 @@ -var jwt = require('jsonwebtoken') -var axios = require('axios') - -import { logger } from '../../../logger' - -export const notifications_sendTeamMemberInvite = (email, team) => { - logger.info('notifications_sendTeamMemberInvite') - logger.info(email) - logger.info(teamName) - return new Promise((resolve, reject) => { - try { - return axios.post(process.env.PLATFORM_API_URL, { - query: `mutation notifications_Teams_SendTeamMemberInvite($email:String!, $teamName:String!){ - notifications_Teams_SendTeamMemberInvite(email:$email, teamName:$teamName) - }`, - variables: { - email: email, - teamName: team.name - } - }, { - headers: { - 'Content-Type': 'application/json' - } - }) - .then(res => { - logger.info('sendTeamMemberInvite result') - logger.info(res.data) - resolve(res.data) - }) - .catch(err => { - logger.info('sendTeamMemberInvite err') - logger.info(err) - reject(err) - }) - } catch (error) { - reject(error) - } - }) -} - -export const notifications_sendTeamCreateConfirmation = (email, teamName, botName) => { - logger.info('notifications_sendTeamCreateConfirmation') - logger.info(email) - logger.info(teamName) - logger.info(botName) - return new Promise((resolve, reject) => { - try { - return axios.post(process.env.PLATFORM_API_URL, { - query: `mutation notifications_sendTeamCreateConfirmation($email: String!, $teamName: String!, $botName: String!){ - notifications_Teams_SendTeamCreateConfirmation(email: $email, teamName: $teamName, botName: $botName) - }`, - variables: { - email: email, - teamName: teamName, - botName: botName - } - }, { - headers: { - 'Content-Type': 'application/json' - } - }) - .then(res => { - logger.info('sendTeamCreateConfirmation result') - logger.info(res.data) - resolve(res.data) - }) - .catch(err => { - logger.info('sendTeamCreateConfirmation err') - logger.info(err) - reject(err) - }) - } catch (error) { - reject(error) - } - }) -} - -export const notifications_VerifyTeamMemberInviteToken = (token) => { - logger.info('notifications_VerifyTeamMemberInviteToken') - logger.info(token) - return new Promise((resolve, reject) => { - try { - return axios.post(process.env.PLATFORM_API_URL, { - query: `mutation notifications_VerifyTeamMemberInviteToken($token: String!){ - notifications_Teams_VerifyTeamMemberInviteToken(token: $token) - }`, - variables: { - token: token - } - }, { - headers: { - 'Content-Type': 'application/json' - } - }) - .then(res => { - logger.info('VerifyTeamMemberInviteToken result') - logger.info(res.data) - resolve(res.data) - }) - .catch(err => { - logger.info('VerifyTeamMemberInviteToken err') - logger.info(err) - reject(err) - }) - } catch (error) { - reject(error) - } - }) -} - -const verifyInviteToken = async function(token) { - const API_KEY = process.env.SG_APIKEY - let verifiedToken - try { - verifiedToken = await jwt.verify(token, API_KEY, {maxAge: '7d'}) - } catch(err) { - if (err.name === "TokenExpiredError"){ - throw new Error ("Error: Token Expired. Please request new invitation or apply to the team again") - } else { - throw new Error (`Error: Token error - ${err.message}`) - } - } - logger.info(`verifyInviteToken: ${verifiedToken}`) - return verifiedToken -} diff --git a/Deprecated-Code/TeamsModule/api/src/graphql/schema.graphql b/Deprecated-Code/TeamsModule/api/src/graphql/schema.graphql deleted file mode 100644 index e4bf0b0f7..000000000 --- a/Deprecated-Code/TeamsModule/api/src/graphql/schema.graphql +++ /dev/null @@ -1,53 +0,0 @@ -# import Query.TeamConnection, Query.FinancialBeingsConnection, Team, FinancialBeings from "../generated/prisma.graphql" - -directive @isAuthenticated on QUERY | FIELD | MUTATION | FIELD_DEFINITION -directive @hasRole(roles: [String]) on QUERY | FIELD | MUTATION | FIELD_DEFINITION -directive @isOwner(type: String) on QUERY | MUTATION | FIELD_DEFINITION -directive @isOwnerOrHasRole(type: String, roles: [String]) on QUERY | MUTATION | FIELD_DEFINITION - -type Query { - teams: TeamConnection - teamDetails: [Team!]! @isAuthenticated - teamByName(name: String!): Team - teamBySlug(slug: String!): Team - teamById(teamId: String!): Team - teamsByIds(teamIds: [ID!]): [Team] - teamWithRole(teamId: String!, role: String!): Team - teamAuthorization(teamId: String!, role: String): Team - teamsByOwner: [Team!]! @isAuthenticated - teamsByRole: [Team!]! @isAuthenticated - fbByTeamMember: Team @isAuthenticated - fbByOwner(fbId: String, fbSlug: String): FinancialBeingsConnection @isAuthenticated - fbByFbId(fbId: String!): FinancialBeings - fbByFbSlug(fbSlug: String!): FinancialBeings - owner: Member @isAuthenticated - member: Member @isAuthenticated -} - -type Mutation { - authenticate(idToken: String!): Member - verifyTeamInvite(token: String!): TeamMembers - createTeam(name: String!, slug: String!, botName: String!, botSlug: String!): Team @isAuthenticated - updateTeamProfile(slug: String!, description: String, motto: String, avatar: String, banner: String): Team @isAuthenticated - updateFB(fbId: String!, avatar: String): FinancialBeings @isAuthenticated - deleteTeam(slug: String!, botSlug: String!): Team @isAuthenticated @isOwner(type: "Team") - sendMemberInviteSG(email: String!, teamId: String!): String - confirmMember(token: String!): String - removeTeamMember(teamId: String!, memberId: String!): String -} - -fragment MemberInfo on Member { - id - authId - alias - visible - status { - ...MemberStatusInfo - } -} - -fragment MemberStatusInfo on MemberStatus { - status - reason - createdAt -} diff --git a/Deprecated-Code/TeamsModule/api/src/index.js b/Deprecated-Code/TeamsModule/api/src/index.js deleted file mode 100644 index 0cf524bc5..000000000 --- a/Deprecated-Code/TeamsModule/api/src/index.js +++ /dev/null @@ -1,88 +0,0 @@ -require("@babel/register"); -require("@babel/polyfill"); -import express from 'express' -import createApolloServer from './ApolloServer' -import { formatError } from './errors' -import { - Prisma, - extractFragmentReplacements, - forwardTo -} from 'prisma-binding' -import { makeExecutableSchema } from 'graphql-tools' -import { importSchema } from 'graphql-import' -import parser from 'fast-xml-parser' -import axios from 'axios' - -import { resolvers } from './graphql/resolvers' - -import { schemaDirectives } from './directives' - -import pubsub from './pubsub' -import { logger } from './logger' - -import wrongPreshared from './errors/notAllowed.json' - -const GRAPHQL_ENDPOINT = '/graphql' -const GRAPHQL_SUBSCRIPTIONS = '/graphql' -const PORT = process.env.PORT -const NODE_ENV = process.env.NODE_ENV -const SCHEMA_PATH = process.env.SCHEMA_PATH - -const db = new Prisma({ - fragmentReplacements: extractFragmentReplacements(resolvers), - typeDefs: importSchema(SCHEMA_PATH), - endpoint: process.env.PRISMA_ENDPOINT, - secret: process.env.PRISMA_SECRET, - debug: false -}) - -const app = express() - -app.post(GRAPHQL_ENDPOINT, (req, res, next) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - next(); - } else { - res.send(wrongPreshared); - } -}); - -app.post(GRAPHQL_ENDPOINT) - -const corsOptions = { - "origin": "*", - "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", - "preflightContinue": false, - "optionsSuccessStatus": 204 -} - -const options = { - port: 4001, - cors: corsOptions, - endpoint: '/graphql', - subscriptions: '/graphql', - playground: '/graphiql' -} - -const server = createApolloServer(app, { - graphqlEndpoint: GRAPHQL_ENDPOINT, - subscriptionsEndpoint: GRAPHQL_SUBSCRIPTIONS, - apolloServerOptions: { formatError }, - typeDefs: importSchema('src/graphql/schema.graphql'), - resolvers, - resolverValidationOptions: { requireResolversForResolveType: false }, - schemaDirectives, - context: req => ({ - ...req , - token: req.headers ? req.headers : undefined, - user: req.user ? req.user : undefined, - userId: (req.headers && req.headers.userid) ? req.headers.userid : undefined, - db, - pubsub - }) -}) - -server.listen({ port: PORT }, () => { - logger.info( - `🚀 GraphQL Server is running on http://localhost:${PORT}${GRAPHQL_ENDPOINT} in "${NODE_ENV}" mode\n` - ) -}) diff --git a/Deprecated-Code/TeamsModule/api/src/logger/errors.js b/Deprecated-Code/TeamsModule/api/src/logger/errors.js deleted file mode 100644 index 14615ad7d..000000000 --- a/Deprecated-Code/TeamsModule/api/src/logger/errors.js +++ /dev/null @@ -1,24 +0,0 @@ -export class AuthenticationError extends Error { - code = 401 - message = 'Not Authenticated - you have to be authenticated to perform this action' -} - -export class DatabaseError extends Error { - code = 404 - message = `Resource Error: ${this.message}` -} - -export class ApolloError extends Error { - code = 409 - message = `Resource already exists: ${this.message}` -} - -export class WrongArgumentsError extends Error { - code = 400 - message = 'Wrong arguments : ' + this.message -} - -export class ServiceUnavailableError extends Error { - code = 503 - message = 'At least one service is unresponding ' + this.message -} diff --git a/Deprecated-Code/TeamsModule/api/src/logger/index.js b/Deprecated-Code/TeamsModule/api/src/logger/index.js deleted file mode 100644 index e2b2cba06..000000000 --- a/Deprecated-Code/TeamsModule/api/src/logger/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import { createLogger, format, transports } from 'winston' -import { inspect } from 'util' - -import { AuthenticationError, ApolloError, DatabaseError, WrongArgumentsError, ServiceUnavailableError, ConflictError } from './errors' - -class LoggerService { - constructor() { - const winstonTransports = [ - new transports.Console({ - format: format.combine( - format.colorize(), - format.timestamp({ format: 'YY/MM/DD HH:mm' }), - format.printf( - info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}` - ) - ), - }), - ] - - const logger = createLogger({ - level: 'info', - transports: winstonTransports, - exceptionHandlers: winstonTransports, - }) - - return new Proxy(this, { - get: (target, propKey) => logger[propKey], - }) - } -} - -export const logger = new LoggerService() // Default logger -export { LoggerService, AuthenticationError, ApolloError, ConflictError, DatabaseError, WrongArgumentsError, ServiceUnavailableError } diff --git a/Deprecated-Code/TeamsModule/api/src/middleware/getMember.js b/Deprecated-Code/TeamsModule/api/src/middleware/getMember.js deleted file mode 100644 index d4b0457c6..000000000 --- a/Deprecated-Code/TeamsModule/api/src/middleware/getMember.js +++ /dev/null @@ -1,56 +0,0 @@ -import axios from 'axios' - -import { logger, DatabaseError } from '../logger' - -export const getMember = async (req, res, next, db) => { - if (!req.headers.userId) return next() - logger.info('getMember ') - logger.info(req.headers.userId) - try { - const member = await getUser(req.headers.userId) - req.user = await member - next() - } catch (err) { - next() - } - -} - -export const getUser = authId => { - logger.info('getUser MiddleWare') - logger.info(authId) - return new Promise((resolve, reject) => { - try { - return axios.post(process.env.PLATFORM_API_URL, { - query: `query users_User($userId: ID!) { - users_User(id: $userId){ - id - alias - email - } - }`, - variables: { - userId: authId - } - }, { - headers: { - 'Content-Type': 'application/json' - } - }) - .then(res => { - logger.info('getUser result') - logger.info(res.data) - resolve(res.data) - }) - .catch(err => { - logger.info('getUser err') - logger.info(err) - reject(err) - }) - } catch (error) { - reject(error) - } - }) -} - -export default getUser diff --git a/Deprecated-Code/TeamsModule/api/src/middleware/index.js b/Deprecated-Code/TeamsModule/api/src/middleware/index.js deleted file mode 100644 index c23d24ee0..000000000 --- a/Deprecated-Code/TeamsModule/api/src/middleware/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import moduleAuth from './moduleAuth' - -export { moduleAuth } diff --git a/Deprecated-Code/TeamsModule/api/src/middleware/jwt.js b/Deprecated-Code/TeamsModule/api/src/middleware/jwt.js deleted file mode 100644 index 0ff677156..000000000 --- a/Deprecated-Code/TeamsModule/api/src/middleware/jwt.js +++ /dev/null @@ -1,24 +0,0 @@ -const jwt = require('express-jwt') -const jwksRsa = require('jwks-rsa') -// Authentication middleware. When used, the -// if the access token exists, it be verified against -// the Auth0 JSON Web Key Set -const checkJwt = jwt({ - // Dynamically provide a signing key - // based on the kid in the header and - // the signing keys provided by the JWKS endpoint. - secret: jwksRsa.expressJwtSecret({ - cache: true, - rateLimit: true, - jwksRequestsPerMinute: 1, - jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json` - }), - - // Validate the audience and the issuer. - credentialsRequired: false, - audience: process.env.AUTH0_AUDIENCE, - issuer: process.env.AUTH0_ISSUER, - algorithms: [`RS256`] -}) - -module.exports = checkJwt diff --git a/Deprecated-Code/TeamsModule/api/src/middleware/moduleAuth.js b/Deprecated-Code/TeamsModule/api/src/middleware/moduleAuth.js deleted file mode 100644 index 6f1bb1509..000000000 --- a/Deprecated-Code/TeamsModule/api/src/middleware/moduleAuth.js +++ /dev/null @@ -1,13 +0,0 @@ -import { logger } from '../logger' - -export const moduleAuth = async (req, res, next, db) => { - if (req.headers.preshared === process.env.PRESHARED_GATEWAY_KEY) { - logger.info('Module authenticated') - next(); - } else { - logger.error('Module authentication error') - res.send(wrongPreshared); - } -} - -export default moduleAuth diff --git a/Deprecated-Code/TeamsModule/api/src/pubsub.js b/Deprecated-Code/TeamsModule/api/src/pubsub.js deleted file mode 100644 index df9481ea8..000000000 --- a/Deprecated-Code/TeamsModule/api/src/pubsub.js +++ /dev/null @@ -1,3 +0,0 @@ -import { PubSub } from 'graphql-subscriptions' - -export default new PubSub() diff --git a/Deprecated-Code/TeamsModule/api/src/storage/azure.js b/Deprecated-Code/TeamsModule/api/src/storage/azure.js deleted file mode 100644 index 9d3257b5b..000000000 --- a/Deprecated-Code/TeamsModule/api/src/storage/azure.js +++ /dev/null @@ -1,191 +0,0 @@ -const Azure = require("@azure/storage-blob") -const azureAccount = process.env.AZURE_STORAGE_ACCOUNT -const azureKey = process.env.AZURE_STORAGE_ACCESS_KEY -const azureStorageUrl = process.env.AZURE_STORAGE_URL - -/* Create Azure Storage pipeline -* @accountName: Azure Blob Storage account name (required) - Environment variable -* @accountKey: Azure Blob Storage storage key (required) - Environment variable -*/ -const createStoragePipline = async (accountName, accountKey) => { - return Azure.StorageURL.newPipeline( - new Azure.SharedKeyCredential(accountName, accountKey) - ) -} - -/* Create Azure Storage Service URL -* @storageURL: URL for Azure Storage endpoint (required) - Environment variable -* @pipeline: Azure Storage Pipline (required) - created using createStoragePipeline() -*/ -const createServiceURL = async (storageURL, pipeline) => { - return new Azure.ServiceURL( - storageURL, - pipeline - ) -} - -/* List containers -* @pipeline: Azure Storage Pipline (required) - created using createServiceURL -* @service_url: URL for Azure Storage endpoint (required) - Environment variable -*/ -const listContainers = async (serviceURL) => { - let marker; - do { - const listContainersResponse = await serviceURL.listContainersSegment( - Azure.Aborter.None, - marker, - ); - - marker = listContainersResponse.marker; - for (const container of listContainersResponse.containerItems) { - console.log(`Container: ${container.name}`); - } - } while (marker); -} - - -/* Create containers -* @serviceURL: URL for Azure Storage endpoint (required) - created using createServiceURL -* @containerName: Container Name -* Returns: containerURL -*/ -const createContainer = async (serviceURL, containerName) => { - const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName) - - const createContainerResponse = await containerURL.create(Aborter.None) - - console.log( - `Created container ${containerName} successfully`, - await createContainerResponse.requestId - ) - return containerURL -} - -/* Create containers -* @containerURL: continer URL (required) - created using createContainer -* @blobName: Blob Name -* Returns: blobURL -*/ -const createBlob = async (containerURL, blobName) => { - const blobURL = Azure.BlobURL.fromContainerURL(containerURL, blobName) - console.log(`created blob successfully`, await blobURL) - return blobURL -} - -/* Upload Blob -* @blobURL: blobURL (required) - created using createBlob -* @blobContent: Blob Content -* Returns: uploadBlobResponse -*/ -const uploadBlob = async (blobURL, blobContent) => { - const blockBlobURL = Azure.BlockBlobURL.fromBlobURL(blobURL) - const uploadBlobResponse = await blockBlobURL.upload( - Azure.Aborter.None, - blobContent, - blobContent.length - ); - console.log(`Upload block blob ${blobName} successfully`, await uploadBlobResponse) - return uploadBlobResponse -} - -/* Download Blob -* @blobURL: blobURL (required) - created using createBlob -* @blobContent: Blob Content -* Returns: downloadBlockBlobResponse -*/ -const downloadBlob = async (blobURL, blobContent) => { - const downloadBlockBlobResponse = await blobURL.download(Azure.Aborter.None, 0) - console.log( - "Downloaded blob content", - downloadBlockBlobResponse.readableStreamBody.read(content.length).toString() - ) - console.log(`BlockBlobResponse: ${downloadBlockBlobResponse}`) - return downloadBlockBlobResponse -} - -/* Delete Blob -* @blobURL: blobURL (required) - created using createBlob -* Returns: bool -*/ -const deleteBlob = async (blobrURL) => { - await blobrURL.delete(Azure.Aborter.None); - console.log("deleted blob", blobrURL); - return true -} - -/* Delete Container -* @containerURL: continer URL (required) - created using createContainer -* Returns: bool -*/ -const deleteContainer = async (containerURL) => { - await containerURL.delete(Azure.Aborter.None); - console.log("deleted container", containerURL); - return true -} - -const createSASQueryURL = async (containerName) => { - let today = new Date() - let week = new Date() - week.setDate(today.getDate() + 7) - // Create SharedKeyCredential and attach to pipline - const SKC = new Azure.SharedKeyCredential(azureAccount, azureKey) - const pipeline = Azure.StorageURL.newPipeline(SKC) - // Create container URL - const serviceURL = new Azure.ServiceURL(azureStorageUrl, pipeline) - const containerURL = Azure.ContainerURL.fromServiceURL(serviceURL, containerName) - - //list container and check if already exists. - let marker - let containerCheck = null - do { - const listContainersResponse = await serviceURL.listContainersSegment( - Azure.Aborter.None, - marker, - ) - // console.log(`ContainerCheck marker: `, listContainersResponse) - marker = listContainersResponse.marker; - for (const container of listContainersResponse.containerItems) { - console.log(`ContainerCheck: ${container.name} | ${containerName} | ${marker}`) - if(container.name === containerName){ - containerCheck = container.name - } - } - } while (marker) - - // if container doesn't exist, create one - let newContainer - if(containerCheck === null){ - newContainer = await containerURL.create(Azure.Aborter.None, { access: 'blob' }) - } - console.log('createSASQueryURL container: ', containerURL, containerCheck, newContainer) - - // Set permissions for service, resource types and containers - const SASContainerPerms = await Azure.AccountSASPermissions.parse('rwlacu') - const SASServicePerms = await Azure.AccountSASServices.parse('b') - const SASResourceTypes = await Azure.AccountSASResourceTypes.parse('co') - console.log('createSASQueryURL permissions: ', SASServicePerms, SASResourceTypes, SASContainerPerms) - // Generate SAS url - const SASQueryParameters = await Azure.generateBlobSASQueryParameters( - { - version: '2017-11-09', - protocol: 'https,http', - expiryTime: week, - permissions: 'rwlac', - containerName: containerName - }, SKC ) - console.log('createSASQueryURL SASQueryParameters: ', containerURL.url, SASQueryParameters) - return SASQueryParameters -} - -module.exports = { - createStoragePipline, - createServiceURL, - listContainers, - createContainer, - createBlob, - uploadBlob, - downloadBlob, - deleteBlob, - deleteContainer, - createSASQueryURL -} diff --git a/Deprecated-Code/TeamsModule/api/src/utils/index.js b/Deprecated-Code/TeamsModule/api/src/utils/index.js deleted file mode 100644 index e4649f06b..000000000 --- a/Deprecated-Code/TeamsModule/api/src/utils/index.js +++ /dev/null @@ -1,69 +0,0 @@ -export const toLocalTime = (epoch) => { - const localDate = new Date(0); - localDate.setUTCSeconds(epoch); - const options = { year: 'numeric', month: 'long', day: '2-digit' }; - return ( - `${localDate.toLocaleDateString(options) - } at ${ - localDate.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}` - ); -}; - -export const temporaryFunction = input => input; - -export function isDefined (d) { - return d !== null && typeof d !== 'undefined' -} - -export function isNull (d) { - return d === null -} - -export const isArray = Array.isArray - -export function isObject (d) { - return isDefined(d) && typeof d === 'object' && !Array.isArray(d) -} - -export function isEmpty (obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) return false - } - return true -} - -export function validObject (object, ...keys) { - return keys.reduce((a, b) => (a || { })[b], object) !== undefined -} - -export function mergeDeep (target, ...sources) { - if (!sources.length) return target - const source = sources.shift() - - if (isObject(target) && isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!target[key]) Object.assign(target, { [key]: {} }) - mergeDeep(target[key], source[key]) - } else { - Object.assign(target, { [key]: source[key] }) - } - } - } - return mergeDeep(target, ...sources) -} - -export function slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string.toString().toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text -} diff --git a/Deprecated-Code/TeamsModule/client/.babelrc b/Deprecated-Code/TeamsModule/client/.babelrc deleted file mode 100644 index 4da58d142..000000000 --- a/Deprecated-Code/TeamsModule/client/.babelrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "presets": ["@babel/preset-env", "@babel/preset-react"], - "env": { - "development": { - "presets": [["@babel/preset-react", { "development": true }]] - } - }, - "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-syntax-dynamic-import", "dynamic-import-node"] -} diff --git a/Deprecated-Code/TeamsModule/client/.env.sample b/Deprecated-Code/TeamsModule/client/.env.sample deleted file mode 100644 index 4a54c8fd9..000000000 --- a/Deprecated-Code/TeamsModule/client/.env.sample +++ /dev/null @@ -1,13 +0,0 @@ -PORT=3001 -NODE_ENV=development - -DEV_GRAPHQL=http://localhost:4001/graphql -PROD_GRAPHQL=https://production.com/graphql - -AUTH0_DOMAIN= -AUTH0_AUDIENCE= -AUTH0_ISSUER= -AUTH0_CLIENTID= -AUTH0_CALLBACKURL= - -AZURE_STORAGE_CONNECTION_STRING= diff --git a/Deprecated-Code/TeamsModule/client/.eslintrc b/Deprecated-Code/TeamsModule/client/.eslintrc deleted file mode 100644 index 033b03754..000000000 --- a/Deprecated-Code/TeamsModule/client/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "settings": { - "react": { - "pragma": "React", - "version": "16.0" - } - }, - "extends": ["standard", "standard-react"] -} diff --git a/Deprecated-Code/TeamsModule/client/.gitignore b/Deprecated-Code/TeamsModule/client/.gitignore deleted file mode 100644 index 4cdf4b15a..000000000 --- a/Deprecated-Code/TeamsModule/client/.gitignore +++ /dev/null @@ -1,76 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.prod - -# Build folder js files -build/ -dist/ - -# Visual Studio Code -.vscode - -# JetBrains ide -.idea - -#Mac specific files -.DS_Store - -#yalc npm link -.yalc -yalc.lock diff --git a/Deprecated-Code/TeamsModule/client/.npmignore b/Deprecated-Code/TeamsModule/client/.npmignore deleted file mode 100644 index fe9b85ca3..000000000 --- a/Deprecated-Code/TeamsModule/client/.npmignore +++ /dev/null @@ -1,15 +0,0 @@ -dist -build -node_modules -html -tools/docker -tools/webpack -.env -.env.prod -.env.sample -.eslintrc -docker-compose.yml -Dockerfile -postcss.config.js -webpack.config.js -.DS_Store diff --git a/Deprecated-Code/TeamsModule/client/CODE_OF_CONDUCT.md b/Deprecated-Code/TeamsModule/client/CODE_OF_CONDUCT.md deleted file mode 100644 index c71b685b4..000000000 --- a/Deprecated-Code/TeamsModule/client/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/TeamsModule/client/CONTRIBUTING.md b/Deprecated-Code/TeamsModule/client/CONTRIBUTING.md deleted file mode 100644 index 311653120..000000000 --- a/Deprecated-Code/TeamsModule/client/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Advanced Algos LTD is a startup, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Advanced Algos LTD ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Voluntary Works** All Company IP that you are involved with or create as part of your work for the Company is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Company to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/Dockerfile b/Deprecated-Code/TeamsModule/client/Dockerfile deleted file mode 100644 index fba49ad59..000000000 --- a/Deprecated-Code/TeamsModule/client/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM mhart/alpine-node - -ENV PORT=3001 -ENV NODE_ENV=development -ENV APP_PATH=/var/www/application - -RUN apk update && apk upgrade && \ - apk add --no-cache bash git - -# Create app directory -RUN mkdir -p $APP_PATH - -# Use app directory as current workdir -WORKDIR $APP_PATH - -# Copy package.json to workdir -COPY package.json . - -# Install dependencies -RUN npm install - -# Copy application code -COPY . . - -# Expose Port -EXPOSE $PORT - -# Run command -CMD npm run dev diff --git a/Deprecated-Code/TeamsModule/client/LICENSE b/Deprecated-Code/TeamsModule/client/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/TeamsModule/client/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/TeamsModule/client/README.md b/Deprecated-Code/TeamsModule/client/README.md deleted file mode 100644 index 25d2b170f..000000000 --- a/Deprecated-Code/TeamsModule/client/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Superalgos Team Client-side Application - -This is the Superalgos Team Module client-side web app a.k.a. single-page-application (SPA). We use Webpack 4 + Docker to develop locally, then build to a distribution bundle that can then be uploaded via FTP, git or used with a continuous integration workflow. - -This webapp's server-side component is the [apit directory](../api#README). - -## Getting Started - -Run -``` - npm install -``` -then -``` - npm run develop -``` - -### Using Docker - -Get latest Docker and Docker Compose: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) - -#### Using Docker container for Development - -To run starter kit in development mode with hot code reload execute: - -Run docker container in background: - -``` -docker-compose up -d -``` - -If image issues, try running: -``` -docker-compose up --build -``` -then run -``` -docker-compose up -d -``` - -To view logs -``` -docker-compose logs -f -t -``` -Hit Ctrl + c to exit logs without stopping service - -To stop service -``` -docker-compose down -``` - -### Main Libraries - -- [*Webpack 4*](https://webpack.js.org/):web application bundler. Allows us to us latest newer JS ECMA features that increase productivity and code clarity. Also allows additional libraries such as modular and programmable CSS via SASS/SCSS/LESS. Provides webserver for local development. -- [*React*](https://reactjs.org/): A JavaScript library for building user interfaces. -- [*Material UI*](https://material-ui.com/): React components that implement Google's Material Design. -- [*Docker*](https://www.docker.com/what-docker) diff --git a/Deprecated-Code/TeamsModule/client/docker-compose.yml b/Deprecated-Code/TeamsModule/client/docker-compose.yml deleted file mode 100644 index 5c837dd55..000000000 --- a/Deprecated-Code/TeamsModule/client/docker-compose.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3' - -services: - app: - build: - context: . - dockerfile: Dockerfile - environment: - NODE_ENV: development - ports: - - "3001:3001" - - "4536:4536" - expose: - - "3001" - - "4536" - volumes: - - .:/var/www/application - - /var/www/application/node_modules - container_name: aateam-client diff --git a/Deprecated-Code/TeamsModule/client/html/aa-logo.png b/Deprecated-Code/TeamsModule/client/html/aa-logo.png deleted file mode 100644 index 9701ee1c0..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/aa-logo.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/android-chrome-192x192.png b/Deprecated-Code/TeamsModule/client/html/android-chrome-192x192.png deleted file mode 100644 index 150043a06..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/android-chrome-192x192.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/android-chrome-512x512.png b/Deprecated-Code/TeamsModule/client/html/android-chrome-512x512.png deleted file mode 100644 index d98b9ce8d..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/android-chrome-512x512.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/apple-touch-icon.png b/Deprecated-Code/TeamsModule/client/html/apple-touch-icon.png deleted file mode 100644 index 95ec62746..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/apple-touch-icon.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/browserconfig.xml b/Deprecated-Code/TeamsModule/client/html/browserconfig.xml deleted file mode 100644 index b3930d0f0..000000000 --- a/Deprecated-Code/TeamsModule/client/html/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/Deprecated-Code/TeamsModule/client/html/favicon-16x16.png b/Deprecated-Code/TeamsModule/client/html/favicon-16x16.png deleted file mode 100644 index 99bda00af..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/favicon-16x16.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/favicon-32x32.png b/Deprecated-Code/TeamsModule/client/html/favicon-32x32.png deleted file mode 100644 index 08c2369b0..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/favicon-32x32.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/favicon.ico b/Deprecated-Code/TeamsModule/client/html/favicon.ico deleted file mode 100644 index cd2c5d6af..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/index.html b/Deprecated-Code/TeamsModule/client/html/index.html deleted file mode 100644 index 5a5bc2bd1..000000000 --- a/Deprecated-Code/TeamsModule/client/html/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - Advanced Algos Teams - - - - - - - - - - - - - - - - - - -
    - - diff --git a/Deprecated-Code/TeamsModule/client/html/manifest.webmanifest b/Deprecated-Code/TeamsModule/client/html/manifest.webmanifest deleted file mode 100644 index 002445914..000000000 --- a/Deprecated-Code/TeamsModule/client/html/manifest.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Advanced Algos", - "short_name": "Advanced Algos", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/Deprecated-Code/TeamsModule/client/html/mstile-150x150.png b/Deprecated-Code/TeamsModule/client/html/mstile-150x150.png deleted file mode 100644 index 78a06c05a..000000000 Binary files a/Deprecated-Code/TeamsModule/client/html/mstile-150x150.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/html/safari-pinned-tab.svg b/Deprecated-Code/TeamsModule/client/html/safari-pinned-tab.svg deleted file mode 100644 index db3ba7cde..000000000 --- a/Deprecated-Code/TeamsModule/client/html/safari-pinned-tab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/package-lock.json b/Deprecated-Code/TeamsModule/client/package-lock.json deleted file mode 100644 index 05f3dcc4e..000000000 --- a/Deprecated-Code/TeamsModule/client/package-lock.json +++ /dev/null @@ -1,16329 +0,0 @@ -{ - "name": "@superalgos/teams-client", - "version": "0.0.37", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@azure/ms-rest-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@azure/ms-rest-js/-/ms-rest-js-1.2.3.tgz", - "integrity": "sha512-eROQ034b+9v0Hd3wETKi/EwF5pqS3VRAk1Lm8iKVPOP8v30f6Zfzsi420MRfBMsbNCx/mE2N0L65Px7tvcGfVg==", - "requires": { - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - } - }, - "@azure/storage-blob": { - "version": "10.0.0-preview", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-10.0.0-preview.tgz", - "integrity": "sha512-PFXKm+gipKDfg5h08hPiEr0Za4RMiFzzte+ewh4ACZeRQa0XZK55NAZxW67ZytGBd7WXdQq6pcAgo5dBnwQANQ==", - "requires": { - "ms-rest-js": "0.21.413" - } - }, - "@babel/cli": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.1.2.tgz", - "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", - "dev": true, - "requires": { - "chokidar": "^2.0.3", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "optional": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.0.tgz", - "integrity": "sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helpers": "^7.4.0", - "@babel/parser": "^7.4.0", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", - "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", - "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "esutils": "^2.0.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0.tgz", - "integrity": "sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", - "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz", - "integrity": "sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - } - } - }, - "@babel/helper-define-map": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", - "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", - "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", - "dev": true, - "requires": { - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", - "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/types": "^7.2.2", - "lodash": "^4.17.10" - }, - "dependencies": { - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - }, - "dependencies": { - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", - "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - }, - "dependencies": { - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - } - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", - "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", - "dev": true, - "requires": { - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helpers": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.2.tgz", - "integrity": "sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg==", - "dev": true, - "requires": { - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@babel/parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0.tgz", - "integrity": "sha512-RgJhNdRinpO8zibnoHbzTTexNs4c8ROkXFBanNDZTLHjwbdLk8J5cJSKulx/bycWTLYmKVNCkxRtVCoJnqPk+g==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz", - "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz", - "integrity": "sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", - "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz", - "integrity": "sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz", - "integrity": "sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", - "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", - "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz", - "integrity": "sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz", - "integrity": "sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz", - "integrity": "sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - }, - "dependencies": { - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - } - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz", - "integrity": "sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", - "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz", - "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==", - "dev": true, - "requires": { - "regexp-tree": "^0.1.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", - "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz", - "integrity": "sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA==", - "dev": true, - "requires": { - "@babel/helper-call-delegate": "^7.4.0", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", - "integrity": "sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz", - "integrity": "sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ==", - "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", - "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz", - "integrity": "sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz", - "integrity": "sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.13.4" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" - } - }, - "@babel/preset-env": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.2.tgz", - "integrity": "sha512-OEz6VOZaI9LW08CWVS3d9g/0jZA6YCn1gsKIy/fut7yZCJti5Lm1/Hi+uo/U+ODm7g4I6gULrCP+/+laT8xAsA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.0", - "@babel/plugin-transform-classes": "^7.4.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.0", - "@babel/plugin-transform-modules-systemjs": "^7.4.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2", - "@babel/plugin-transform-new-target": "^7.4.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.0", - "@babel/plugin-transform-regenerator": "^7.4.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "@babel/types": "^7.4.0", - "browserslist": "^4.4.2", - "core-js-compat": "^3.0.0", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" - } - }, - "@babel/runtime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", - "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", - "requires": { - "regenerator-runtime": "^0.12.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - } - } - }, - "@babel/traverse": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.0.tgz", - "integrity": "sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "@babel/generator": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", - "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", - "dev": true, - "requires": { - "@babel/types": "^7.4.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/parser": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz", - "integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==", - "dev": true - }, - "@babel/template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", - "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.0", - "@babel/types": "^7.4.0" - } - }, - "@babel/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", - "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0.tgz", - "integrity": "sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - } - }, - "@bearcanrun/react-image-cropper": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@bearcanrun/react-image-cropper/-/react-image-cropper-1.3.6.tgz", - "integrity": "sha512-/6F2rNd/bNR7jB/Pxhan1T6KDF+CHl9hEeybumtOyZrYc2foxawMNjxgD4MW0Z3Wh6GxZKDM9dlsxaaC+/y0Zg==", - "requires": { - "deep-extend": "^0.6.0", - "npm-run-all": "^4.1.5", - "prop-types": "15.6.0", - "react": "16.5.2", - "react-dom": "16.5.2" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "react": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.5.2.tgz", - "integrity": "sha512-FDCSVd3DjVTmbEAjUNX6FgfAmQ+ypJfHUsqUJOYNCBUp1h8lqmtC+0mXJ+JjsWx4KAVTkk1vKd1hLQPvEviSuw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - }, - "dependencies": { - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } - } - } - } - }, - "react-dom": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.5.2.tgz", - "integrity": "sha512-RC8LDw8feuZOHVgzEf7f+cxBr/DnKdqp56VU0lAs1f4UfKc4cU8wU4fTq/mgnvynLQo8OtlPC19NUFh/zjZPuA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "schedule": "^0.5.0" - }, - "dependencies": { - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } - } - } - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - } - } - }, - "@material-ui/core": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.9.3.tgz", - "integrity": "sha512-REIj62+zEvTgI/C//YL4fZxrCVIySygmpZglsu/Nl5jPqy3CDjZv1F9ubBYorHqmRgeVPh64EghMMWqk4egmfg==", - "requires": { - "@babel/runtime": "^7.2.0", - "@material-ui/system": "^3.0.0-alpha.0", - "@material-ui/utils": "^3.0.0-alpha.2", - "@types/jss": "^9.5.6", - "@types/react-transition-group": "^2.0.8", - "brcast": "^3.0.1", - "classnames": "^2.2.5", - "csstype": "^2.5.2", - "debounce": "^1.1.0", - "deepmerge": "^3.0.0", - "dom-helpers": "^3.2.1", - "hoist-non-react-statics": "^3.2.1", - "is-plain-object": "^2.0.4", - "jss": "^9.8.7", - "jss-camel-case": "^6.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-nested": "^6.0.1", - "jss-props-sort": "^6.0.0", - "jss-vendor-prefixer": "^7.0.0", - "normalize-scroll-left": "^0.1.2", - "popper.js": "^1.14.1", - "prop-types": "^15.6.0", - "react-event-listener": "^0.6.2", - "react-transition-group": "^2.2.1", - "recompose": "0.28.0 - 0.30.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - } - } - }, - "@material-ui/icons": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.2.tgz", - "integrity": "sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==", - "requires": { - "@babel/runtime": "^7.2.0", - "recompose": "0.28.0 - 0.30.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - } - } - }, - "@material-ui/system": { - "version": "3.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz", - "integrity": "sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==", - "requires": { - "@babel/runtime": "^7.2.0", - "deepmerge": "^3.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "@material-ui/utils": { - "version": "3.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz", - "integrity": "sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "react-is": "^16.6.3" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - } - } - }, - "@sheerun/eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@sheerun/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha512-aalIRUtcR6nPf50kEwnYvepSJIdpulrbMeeNMwiOmFgBg4MgScCmlI7SqOmsGJNqaH65+benoqt0H4N0RR2Okg==", - "dev": true - }, - "@shellscape/koa-send": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@shellscape/koa-send/-/koa-send-4.1.3.tgz", - "integrity": "sha512-akNxJetq2ak8aj7U6ys+EYXfWY4k8keleDZJbHWvpuVDj0/PUbbOuPkeBYaie7C6d5fRNLK+0M1Puu8ywTlj3w==", - "dev": true, - "requires": { - "debug": "^2.6.3", - "http-errors": "^1.6.1", - "mz": "^2.6.0", - "resolve-path": "^1.3.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "@shellscape/koa-static": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@shellscape/koa-static/-/koa-static-4.0.5.tgz", - "integrity": "sha512-0T2g2NtaO2zhbqR8EBACIGtBy+haodKb8PuJ17RGDXAJwhjkgghUKLrLEnm05zuiwupfYm2APIax6D2TwLoflA==", - "dev": true, - "requires": { - "@shellscape/koa-send": "^4.1.0", - "debug": "^2.6.8" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "@superalgos/web-components": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@superalgos/web-components/-/web-components-0.0.20.tgz", - "integrity": "sha512-yH+oubFFLuWw1p62KDO8P5NS3Uh1pmSDNFxrz9cloCOTXBWRf6zmaLapum/146qCYE9OXtwJ6D49dNA6xr6Hng==", - "requires": { - "@azure/storage-blob": "^10.3.0", - "@bearcanrun/react-image-cropper": "^1.3.6", - "@material-ui/core": "^3.6.2", - "@material-ui/icons": "^3.0.1", - "apollo-client": "^2.5.1", - "blob-util": "^2.0.2", - "browser-image-resizer": "^2.0.1", - "graphql": "^14.2.1", - "graphql-tag": "^2.10.1", - "prop-types": "^15.7.2", - "react": "^16.8.6", - "react-apollo": "^2.5.4", - "react-dom": "^16.8.6", - "react-dropzone": "^10.1.3", - "react-helmet": "^5.2.0", - "react-router-dom": "^5.0.0" - }, - "dependencies": { - "@azure/storage-blob": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-10.3.0.tgz", - "integrity": "sha512-KZbJ3q8RpAdeIB5Em1lgXkiq7Mll9bSHHbHavOFMepkkF7HQa3Sez9FdkAVIkVVWK5YoBlshBGZ+mtiSQiS9Fw==", - "requires": { - "@azure/ms-rest-js": "1.2.3", - "events": "3.0.0", - "tslib": "^1.9.3" - } - }, - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "apollo-cache": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.2.1.tgz", - "integrity": "sha512-nzFmep/oKlbzUuDyz6fS6aYhRmfpcHWqNkkA9Bbxwk18RD6LXC4eZkuE0gXRX0IibVBHNjYVK+Szi0Yied4SpQ==", - "requires": { - "apollo-utilities": "^1.2.1", - "tslib": "^1.9.3" - } - }, - "apollo-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.5.1.tgz", - "integrity": "sha512-MNcQKiqLHdGmNJ0rZ0NXaHrToXapJgS/5kPk0FygXt+/FmDCdzqcujI7OPxEC6e9Yw5S/8dIvOXcRNuOMElHkA==", - "requires": { - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.2.1", - "apollo-link": "^1.0.0", - "apollo-link-dedup": "^1.0.0", - "apollo-utilities": "1.2.1", - "symbol-observable": "^1.0.2", - "ts-invariant": "^0.2.1", - "tslib": "^1.9.3", - "zen-observable": "^0.8.0" - } - }, - "apollo-utilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", - "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0", - "ts-invariant": "^0.2.1", - "tslib": "^1.9.3" - } - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" - }, - "graphql": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.2.1.tgz", - "integrity": "sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-tag": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", - "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" - }, - "history": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz", - "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^0.4.0" - } - }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react-apollo": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.5.4.tgz", - "integrity": "sha512-olH9zYijOXVfj14hD7bQlZ0POBJchxg2e+mfnxEiEdqZra4+58SfIY0KPhmM9jqbeeusc6J/P4zzWIHt5DdNDg==", - "requires": { - "apollo-utilities": "^1.2.1", - "hoist-non-react-statics": "^3.3.0", - "lodash.isequal": "^4.5.0", - "prop-types": "^15.7.2", - "ts-invariant": "^0.3.2", - "tslib": "^1.9.3" - }, - "dependencies": { - "ts-invariant": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", - "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", - "requires": { - "tslib": "^1.9.3" - } - } - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - }, - "react-router": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.0.tgz", - "integrity": "sha512-6EQDakGdLG/it2x9EaCt9ZpEEPxnd0OCLBHQ1AcITAAx7nCnyvnzf76jKWG1s2/oJ7SSviUgfWHofdYljFexsA==", - "requires": { - "@babel/runtime": "^7.1.2", - "create-react-context": "^0.2.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.0.tgz", - "integrity": "sha512-wSpja5g9kh5dIteZT3tUoggjnsa+TPFHSMrpHXMpFsaHhQkm/JNVGh2jiF9Dkh4+duj4MKCkwO6H08u6inZYgQ==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "@types/async": { - "version": "2.0.49", - "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.49.tgz", - "integrity": "sha512-Benr3i5odUkvpFkOpzGqrltGdbSs+EVCkEBGXbuR7uT0VzhXKIkhem6PDzHdx5EonA+rfbB3QvP6aDOw5+zp5Q==", - "optional": true - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/events": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", - "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" - }, - "@types/express": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz", - "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz", - "integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==", - "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/jss": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.8.tgz", - "integrity": "sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==", - "requires": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" - } - }, - "@types/mime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", - "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" - }, - "@types/node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.0.tgz", - "integrity": "sha512-hWzNviaVFIr1TqcRA8ou49JaSHp+Rfabmnqg2kNvusKqLhPU0rIsGPUj5WJJ7ld4Bb7qdgLmIhLfCD1qS08IVA==" - }, - "@types/prop-types": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz", - "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==" - }, - "@types/range-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", - "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" - }, - "@types/react": { - "version": "16.8.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.13.tgz", - "integrity": "sha512-otJ4ntMuHGrvm67CdDJMAls4WqotmAmW0g3HmWi9LCjSWXrxoXY/nHXrtmMfvPEEmGFNm6NdgMsJmnfH820Qaw==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-transition-group": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.8.0.tgz", - "integrity": "sha512-DHZrY4UBypeT/bD2WakC3MkdBHMOkhqWnRRCMqrtNknyhfkCfKmRlpKdxGlPkDKvNl2uDSHcdvmKy8JW0aNETA==", - "requires": { - "@types/react": "*" - } - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "@types/tapable": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-0.2.5.tgz", - "integrity": "sha512-dEoVvo/I9QFomyhY+4Q6Qk+I+dhG59TYceZgC6Q0mCifVPErx6Y83PNTKGDS5e9h9Eti6q0S2mm16BU6iQK+3w==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.2.tgz", - "integrity": "sha512-o8hU2+4xsyGC27Vujoklvxl88Ew5zmJuTBYMX1Uro2rYUt4HEFJKL6fuq8aGykvS+ssIsIzerWWP2DRxonownQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/uuid": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.4.tgz", - "integrity": "sha512-tPIgT0GUmdJQNSHxp0X2jnpQfBSTfGxUMc/2CXBU2mnyTFVYVa2ojpoQ74w0U2yn2vw3jnC640+77lkFFpdVDw==", - "requires": { - "@types/node": "*" - } - }, - "@types/webpack": { - "version": "3.8.12", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.12.tgz", - "integrity": "sha512-Q8ro/vCAyE8piwBvRgzeerrVkGy3XBmK2O2bk5g+NBHDqR0R2qZGwpBsz+js5mBH9PvvenQCojqB9nZC9Gz4MQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^0", - "@types/uglify-js": "*", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/zen-observable": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", - "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" - }, - "@webassemblyjs/ast": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.8.tgz", - "integrity": "sha512-dOrtdtEyB8sInpl75yLPNksY4sRl0j/+t6aHyB/YA+ab9hV3Fo7FmG12FHzP+2MvWVAJtDb+6eXR5EZbZJ+uVg==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/wast-parser": "1.7.8" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz", - "integrity": "sha512-kn2zNKGsbql5i56VAgRYkpG+VazqHhQQZQycT2uXAazrAEDs23gy+Odkh5VblybjnwX2/BITkDtNmSO76hdIvQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz", - "integrity": "sha512-xUwxDXsd1dUKArJEP5wWM5zxgCSwZApSOJyP1XO7M8rNUChUDblcLQ4FpzTpWG2YeylMwMl1MlP5Ztryiz1x4g==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz", - "integrity": "sha512-WXiIMnuvuwlhWvVOm8xEXU9DnHaa3AgAU0ZPfvY8vO1cSsmYb2WbGbHnMLgs43vXnA7XAob9b56zuZaMkxpCBg==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz", - "integrity": "sha512-TLQxyD9qGOIdX5LPQOPo0Ernd88U5rHkFb8WAjeMIeA0sPjCHeVPaGqUGGIXjUcblUkjuDAc07bruCcNHUrHDA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.8" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz", - "integrity": "sha512-TjK0CnD8hAPkV5mbSp5aWl6SO1+H3WFcjWtixWoy8EMA99YnNzYhpc/WSYWhf7yrhpzkq5tZB0tvLK3Svr3IXA==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz", - "integrity": "sha512-uCutAKR7Nm0VsFixcvnB4HhAyHouNbj0Dx1p7eRjFjXGGZ+N7ftTaG1ZbWCasAEbtwGj54LP8+lkBZdTCPmLGg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz", - "integrity": "sha512-AdCCE3BMW6V34WYaKUmPgVHa88t2Z14P4/0LjLwuGkI0X6pf7nzp0CehzVVk51cKm2ymVXjl9dCG+gR1yhITIQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz", - "integrity": "sha512-BkBhYQuzyl4hgTGOKo87Vdw6f9nj8HhI7WYpI0MCC5qFa5ahrAPOGgyETVdnRbv+Rjukl9MxxfDmVcVC435lDg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz", - "integrity": "sha512-tOarWChdG1a3y1yqCX0JMDKzrat5tQe4pV6K/TX19BcXsBLYxFQOL1DEDa5KG9syeyvCrvZ+i1+Mv1ExngvktQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.8.tgz", - "integrity": "sha512-GCYeGPgUFWJiZuP4NICbcyUQNxNLJIf476Ei+K+jVuuebtLpfvwkvYT6iTUE7oZYehhkor4Zz2g7SJ/iZaPudQ==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.8.tgz", - "integrity": "sha512-9X+f0VV+xNXW2ujfIRSXBJENGE6Qh7bNVKqu3yDjTFB3ar3nsThsGBBKdTG58aXOm2iUH6v28VIf88ymPXODHA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz", - "integrity": "sha512-6D3Hm2gFixrfyx9XjSON4ml1FZTugqpkIz5Awvrou8fnpyprVzcm4X8pyGRtA2Piixjl3DqmX/HB1xdWyE097A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/helper-wasm-section": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8", - "@webassemblyjs/wasm-opt": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8", - "@webassemblyjs/wast-printer": "1.7.8" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz", - "integrity": "sha512-a7O/wE6eBeVKKUYgpMK7NOHmMADD85rSXLe3CqrWRDwWff5y3cSVbzpN6Qv3z6C4hdkpq9qyij1Ga1kemOZGvQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/ieee754": "1.7.8", - "@webassemblyjs/leb128": "1.7.8", - "@webassemblyjs/utf8": "1.7.8" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz", - "integrity": "sha512-3lbQ0PT81NHCdi1sR/7+SNpZadM4qYcTSr62nFFAA7e5lFwJr14M1Gi+A/Y3PgcDWOHYjsaNGPpPU0H03N6Blg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-buffer": "1.7.8", - "@webassemblyjs/wasm-gen": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz", - "integrity": "sha512-rZ/zlhp9DHR/05zh1MbAjT2t624sjrPP/OkJCjXqzm7ynH+nIdNcn9Ixc+qzPMFXhIrk0rBoQ3to6sEIvHh9jQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-api-error": "1.7.8", - "@webassemblyjs/helper-wasm-bytecode": "1.7.8", - "@webassemblyjs/ieee754": "1.7.8", - "@webassemblyjs/leb128": "1.7.8", - "@webassemblyjs/utf8": "1.7.8" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz", - "integrity": "sha512-Q/zrvtUvzWuSiJMcSp90fi6gp2nraiHXjTV2VgAluVdVapM4gy1MQn7akja2p6eSBDQpKJPJ6P4TxRkghRS5dg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/floating-point-hex-parser": "1.7.8", - "@webassemblyjs/helper-api-error": "1.7.8", - "@webassemblyjs/helper-code-frame": "1.7.8", - "@webassemblyjs/helper-fsm": "1.7.8", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz", - "integrity": "sha512-GllIthRtwTxRDAURRNXscu7Napzmdf1jt1gpiZiK/QN4fH0lSGs3OTmvdfsMNP7tqI4B3ZtfaaWRlNIQug6Xyg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/wast-parser": "1.7.8", - "@xtuc/long": "4.2.1" - } - }, - "@webpack-contrib/config-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz", - "integrity": "sha512-C7XsS6bXft0aRlyt7YCLg+fm97Mb3tWd+i5fVVlEl0NW5HKy8LoXVKj3mB7ECcEHNEEdHhgzg8gxP+Or8cMj8Q==", - "dev": true, - "requires": { - "@webpack-contrib/schema-utils": "^1.0.0-beta.0", - "chalk": "^2.1.0", - "cosmiconfig": "^5.0.2", - "is-plain-obj": "^1.1.0", - "loud-rejection": "^1.6.0", - "merge-options": "^1.0.1", - "minimist": "^1.2.0", - "resolve": "^1.6.0", - "webpack-log": "^1.1.2" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "@webpack-contrib/schema-utils": { - "version": "1.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz", - "integrity": "sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chalk": "^2.3.2", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "webpack-log": "^1.1.2" - }, - "dependencies": { - "ajv": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", - "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "dependencies": { - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "ajv-errors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", - "dev": true - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-colors": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.0.5.tgz", - "integrity": "sha512-VVjWpkfaphxUBFarydrQ3n26zX5nIK7hcbT3/ielrvwDDyBBjuh2vuSw1P9zkPq0cfqvdw7lkYHnu+OLSfIBsg==", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "apollo-cache": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.17.tgz", - "integrity": "sha512-7sp24n2HZO4vXgTaKNomLyIfGxG4gDdDkBB0jkRzRi7HhnKmfwhiF/RCiKNbgLdrPX151INdls0KwIVliD0dHQ==", - "requires": { - "apollo-utilities": "^1.0.21" - } - }, - "apollo-cache-inmemory": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.3.5.tgz", - "integrity": "sha512-CD4Dl9vcCp7N05KUqR3rNDj2WJ1DQNNfeyBUIo5T6XTiUhfBQp5x+CL7S+ezy5mPp+xo4TnwFzLFh/vy2LdDog==", - "requires": { - "apollo-cache": "^1.1.17", - "apollo-utilities": "^1.0.21", - "optimism": "^0.6.6" - } - }, - "apollo-client": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.4.2.tgz", - "integrity": "sha512-g1z23umaVSoKLj9xNl0aAnk2KBF4JeBi7MeKFc9CGTixH7TkqeQUQtxcjrC7j2h4KmDbuhOAHOFUGf8YshN+ag==", - "requires": { - "@types/async": "2.0.49", - "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.1.17", - "apollo-link": "^1.0.0", - "apollo-link-dedup": "^1.0.0", - "apollo-utilities": "1.0.21", - "symbol-observable": "^1.0.2", - "zen-observable": "^0.8.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "apollo-link": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.3.tgz", - "integrity": "sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw==", - "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.10" - } - }, - "apollo-link-context": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/apollo-link-context/-/apollo-link-context-1.0.9.tgz", - "integrity": "sha512-gcC1WH7mTyNtS0bF4fPijepXqnERwZjm1JCkuOT6ADBTpDTXIqK+Ec+/QkVawDO26EV9OX5ujWe4kI1qC6T6tA==", - "requires": { - "apollo-link": "^1.2.3" - } - }, - "apollo-link-dedup": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/apollo-link-dedup/-/apollo-link-dedup-1.0.9.tgz", - "integrity": "sha512-RbuEKpmSHVMtoREMPh2wUFTeh65q+0XPVeqgaOP/rGEAfvLyOMvX0vT2nVaejMohoMxuUnfZwpldXaDFWnlVbg==", - "requires": { - "apollo-link": "^1.2.2" - } - }, - "apollo-link-error": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.1.tgz", - "integrity": "sha512-/yPcaQWcBdB94vpJ4FsiCJt1dAGGRm+6Tsj3wKwP+72taBH+UsGRQQZk7U/1cpZwl1yqhHZn+ZNhVOebpPcIlA==", - "requires": { - "apollo-link": "^1.2.3" - } - }, - "apollo-link-http": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.5.tgz", - "integrity": "sha512-C5N6N/mRwmepvtzO27dgMEU3MMtRKSqcljBkYNZmWwH11BxkUQ5imBLPM3V4QJXNE7NFuAQAB5PeUd4ligivTQ==", - "requires": { - "apollo-link": "^1.2.3", - "apollo-link-http-common": "^0.2.5" - } - }, - "apollo-link-http-common": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.5.tgz", - "integrity": "sha512-6FV1wr5AqAyJ64Em1dq5hhGgiyxZE383VJQmhIoDVc3MyNcFL92TkhxREOs4rnH2a9X2iJMko7nodHSGLC6d8w==", - "requires": { - "apollo-link": "^1.2.3" - } - }, - "apollo-link-ws": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/apollo-link-ws/-/apollo-link-ws-1.0.9.tgz", - "integrity": "sha512-CtKwLE61bCJTW5jrucOMm5PubeAlCl/9i45pg4GKKlAbl0zR4i2dww8TJkYoIY6iCyj4qjKW/uqGD6v5/aVwhg==", - "requires": { - "apollo-link": "^1.2.3" - } - }, - "apollo-utilities": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.21.tgz", - "integrity": "sha512-ZcxELlEl+sDCYBgEMdNXJAsZtRVm8wk4HIA58bMsqYfd1DSAJQEtZ93F0GZgYNAGy3QyaoBeZtbb0/01++G8JQ==", - "requires": { - "fast-json-stable-stringify": "^2.0.0", - "fclone": "^1.0.11" - } - }, - "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "attr-accept": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz", - "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==", - "requires": { - "core-js": "^2.5.0" - } - }, - "auth0-js": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.8.0.tgz", - "integrity": "sha512-rQtsnwR+J3vitiPjy14KFIIJc/jBq7CAwA1MHghEHeoQRT7Gw1JW9/E4dFZCiSYwz/Y94bGg6v6k9XirozxfCQ==", - "requires": { - "base64-js": "^1.2.0", - "idtoken-verifier": "^1.2.0", - "js-cookie": "^2.2.0", - "qs": "^6.4.0", - "superagent": "^3.8.2", - "url-join": "^1.1.0", - "winchan": "^0.2.1" - }, - "dependencies": { - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" - } - } - }, - "auth0-lock": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/auth0-lock/-/auth0-lock-11.10.0.tgz", - "integrity": "sha512-Do8UPbs9tgLEUBXID5IlbQaOEU2T0K9GaYxdlsMdD1Kv6PWs5/HygxH83sWJ+y5Kgy1VUz4qTgJWOmF+gN9h2g==", - "requires": { - "auth0-js": "^9.8.0", - "auth0-password-policies": "^1.0.1", - "blueimp-md5": "2.3.1", - "fbjs": "^0.3.1", - "immutable": "^3.7.3", - "jsonp": "^0.2.0", - "password-sheriff": "^1.1.0", - "prop-types": "^15.6.0", - "react": "^15.6.2", - "react-dom": "^15.6.2", - "react-transition-group": "^2.2.1", - "trim": "0.0.1", - "url-join": "^1.1.0" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "react": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz", - "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=", - "requires": { - "create-react-class": "^15.6.0", - "fbjs": "^0.8.9", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0", - "prop-types": "^15.5.10" - }, - "dependencies": { - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "react-dom": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz", - "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=", - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.0", - "prop-types": "^15.5.10" - }, - "dependencies": { - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" - } - } - }, - "auth0-password-policies": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/auth0-password-policies/-/auth0-password-policies-1.0.1.tgz", - "integrity": "sha512-R1Kx8uo/Bl8Kp+kbtYugnvLVd4EmL6my1ZyP7FFXah6FYM8DumZh3Ks7aVM2/p95s/Z3La0uAVvZy0bzXf/KrQ==", - "requires": { - "password-sheriff": "^1.1.0" - } - }, - "autoprefixer": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", - "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", - "dev": true, - "requires": { - "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000864", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.23", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true - }, - "babel-eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", - "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "dev": true, - "requires": { - "babylon": "^6.18.0" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" - } - }, - "babel-helper-evaluate-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz", - "integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw==", - "dev": true - }, - "babel-helper-flip-expressions": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz", - "integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw==", - "dev": true - }, - "babel-helper-is-nodes-equiv": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", - "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=", - "dev": true - }, - "babel-helper-is-void-0": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.3.0.tgz", - "integrity": "sha512-JVqdX8y7Rf/x4NwbqtUI7mdQjL9HWoDnoAEQ8Gv8oxzjvbJv+n75f7l36m9Y8C7sCUltX3V5edndrp7Hp1oSXQ==", - "dev": true - }, - "babel-helper-mark-eval-scopes": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.3.0.tgz", - "integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ==", - "dev": true - }, - "babel-helper-remove-or-void": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz", - "integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ==", - "dev": true - }, - "babel-helper-to-multiple-sequence-expressions": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz", - "integrity": "sha512-1uCrBD+EAaMnAYh7hc944n8Ga19y3daEnoXWPYDvFVsxMCc1l8aDjksApaCEaNSSuewq8BEcff47Cy1PbLg2Gw==", - "dev": true - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-loader": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz", - "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", - "dev": true, - "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-minify-webpack-plugin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-minify-webpack-plugin/-/babel-minify-webpack-plugin-0.3.1.tgz", - "integrity": "sha512-Johg6Ju0Gxevk2R55eutMqnyXwlyUzCtwunBpiyNzoxGnKum+x5nfNuYZYHGd5Bmc1gmhjwzb7GkxHWOtYWmtQ==", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-preset-minify": "^0.3.0", - "webpack-sources": "^1.0.1" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz", - "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0" - } - }, - "babel-plugin-minify-builtins": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz", - "integrity": "sha512-MqhSHlxkmgURqj3144qPksbZ/qof1JWdumcbucc4tysFcf3P3V3z3munTevQgKEFNMd8F5/ECGnwb63xogLjAg==", - "dev": true, - "requires": { - "babel-helper-evaluate-path": "^0.3.0" - } - }, - "babel-plugin-minify-constant-folding": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.3.0.tgz", - "integrity": "sha512-1XeRpx+aY1BuNY6QU/cm6P+FtEi3ar3XceYbmC+4q4W+2Ewq5pL7V68oHg1hKXkBIE0Z4/FjSoHz6vosZLOe/A==", - "dev": true, - "requires": { - "babel-helper-evaluate-path": "^0.3.0" - } - }, - "babel-plugin-minify-dead-code-elimination": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.3.0.tgz", - "integrity": "sha512-SjM2Fzg85YZz+q/PNJ/HU4O3W98FKFOiP9K5z3sfonlamGOzvZw3Eup2OTiEBsbbqTeY8yzNCAv3qpJRYCgGmw==", - "dev": true, - "requires": { - "babel-helper-evaluate-path": "^0.3.0", - "babel-helper-mark-eval-scopes": "^0.3.0", - "babel-helper-remove-or-void": "^0.3.0", - "lodash.some": "^4.6.0" - } - }, - "babel-plugin-minify-flip-comparisons": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.3.0.tgz", - "integrity": "sha512-B8lK+ekcpSNVH7PZpWDe5nC5zxjRiiT4nTsa6h3QkF3Kk6y9qooIFLemdGlqBq6j0zALEnebvCpw8v7gAdpgnw==", - "dev": true, - "requires": { - "babel-helper-is-void-0": "^0.3.0" - } - }, - "babel-plugin-minify-guarded-expressions": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.3.0.tgz", - "integrity": "sha512-O+6CvF5/Ttsth3LMg4/BhyvVZ82GImeKMXGdVRQGK/8jFiP15EjRpdgFlxv3cnqRjqdYxLCS6r28VfLpb9C/kA==", - "dev": true, - "requires": { - "babel-helper-flip-expressions": "^0.3.0" - } - }, - "babel-plugin-minify-infinity": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.3.0.tgz", - "integrity": "sha512-Sj8ia3/w9158DWieUxU6/VvnYVy59geeFEkVgLZYBE8EBP+sN48tHtBM/jSgz0ejEdBlcfqJ6TnvPmVXTzR2BQ==", - "dev": true - }, - "babel-plugin-minify-mangle-names": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.3.0.tgz", - "integrity": "sha512-PYTonhFWURsfAN8achDwvR5Xgy6EeTClLz+fSgGRqjAIXb0OyFm3/xfccbQviVi1qDXmlSnt6oJhBg8KE4Fn7Q==", - "dev": true, - "requires": { - "babel-helper-mark-eval-scopes": "^0.3.0" - } - }, - "babel-plugin-minify-numeric-literals": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.3.0.tgz", - "integrity": "sha512-TgZj6ay8zDw74AS3yiIfoQ8vRSNJisYO/Du60S8nPV7EW7JM6fDMx5Sar6yVHlVuuwNgvDUBh191K33bVrAhpg==", - "dev": true - }, - "babel-plugin-minify-replace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.3.0.tgz", - "integrity": "sha512-VR6tTg2Lt0TicHIOw04fsUtpPw7RaRP8PC8YzSFwEixnzvguZjZJoL7TgG7ZyEWQD1cJ96UezswECmFNa815bg==", - "dev": true - }, - "babel-plugin-minify-simplify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.3.0.tgz", - "integrity": "sha512-2M16ytQOCqBi7bYMu4DCWn8e6KyFCA108F6+tVrBJxOmm5u2sOmTFEa8s94tR9RHRRNYmcUf+rgidfnzL3ik9Q==", - "dev": true, - "requires": { - "babel-helper-flip-expressions": "^0.3.0", - "babel-helper-is-nodes-equiv": "^0.0.1", - "babel-helper-to-multiple-sequence-expressions": "^0.3.0" - } - }, - "babel-plugin-minify-type-constructors": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.3.0.tgz", - "integrity": "sha512-XRXpvsUCPeVw9YEUw+9vSiugcSZfow81oIJT0yR9s8H4W7yJ6FHbImi5DJHoL8KcDUjYnL9wYASXk/fOkbyR6Q==", - "dev": true, - "requires": { - "babel-helper-is-void-0": "^0.3.0" - } - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-inline-consecutive-adds": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz", - "integrity": "sha512-iZsYAIjYLLfLK0yN5WVT7Xf7Y3wQ9Z75j9A8q/0IglQSpUt2ppTdHlwl/GeaXnxdaSmsxBu861klbTBbv2n+RA==", - "dev": true - }, - "babel-plugin-transform-member-expression-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", - "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=", - "dev": true - }, - "babel-plugin-transform-merge-sibling-variables": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz", - "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=", - "dev": true - }, - "babel-plugin-transform-minify-booleans": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", - "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=", - "dev": true - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-property-literals": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", - "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, - "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regexp-constructors": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz", - "integrity": "sha512-h92YHzyl042rb0naKO8frTHntpRFwRgKkfWD8602kFHoQingjJNtbvZzvxqHncJ6XmKVyYvfrBpDOSkCTDIIxw==", - "dev": true - }, - "babel-plugin-transform-remove-console": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", - "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=", - "dev": true - }, - "babel-plugin-transform-remove-debugger": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", - "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=", - "dev": true - }, - "babel-plugin-transform-remove-undefined": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.3.0.tgz", - "integrity": "sha512-TYGQucc8iP3LJwN3kDZLEz5aa/2KuFrqpT+s8f8NnHsBU1sAgR3y8Opns0xhC+smyDYWscqFCKM1gbkWQOhhnw==", - "dev": true, - "requires": { - "babel-helper-evaluate-path": "^0.3.0" - } - }, - "babel-plugin-transform-simplify-comparison-operators": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", - "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=", - "dev": true - }, - "babel-plugin-transform-undefined-to-void": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", - "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=", - "dev": true - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - } - } - }, - "babel-preset-minify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz", - "integrity": "sha512-+VV2GWEyak3eDOmzT1DDMuqHrw3VbE9nBNkx2LLVs4pH/Me32ND8DRpVDd8IRvk1xX5p75nygyRPtkMh6GIAbQ==", - "dev": true, - "requires": { - "babel-plugin-minify-builtins": "^0.3.0", - "babel-plugin-minify-constant-folding": "^0.3.0", - "babel-plugin-minify-dead-code-elimination": "^0.3.0", - "babel-plugin-minify-flip-comparisons": "^0.3.0", - "babel-plugin-minify-guarded-expressions": "^0.3.0", - "babel-plugin-minify-infinity": "^0.3.0", - "babel-plugin-minify-mangle-names": "^0.3.0", - "babel-plugin-minify-numeric-literals": "^0.3.0", - "babel-plugin-minify-replace": "^0.3.0", - "babel-plugin-minify-simplify": "^0.3.0", - "babel-plugin-minify-type-constructors": "^0.3.0", - "babel-plugin-transform-inline-consecutive-adds": "^0.3.0", - "babel-plugin-transform-member-expression-literals": "^6.9.0", - "babel-plugin-transform-merge-sibling-variables": "^6.9.0", - "babel-plugin-transform-minify-booleans": "^6.9.0", - "babel-plugin-transform-property-literals": "^6.9.0", - "babel-plugin-transform-regexp-constructors": "^0.3.0", - "babel-plugin-transform-remove-console": "^6.9.0", - "babel-plugin-transform-remove-debugger": "^6.9.0", - "babel-plugin-transform-remove-undefined": "^0.3.0", - "babel-plugin-transform-simplify-comparison-operators": "^6.9.0", - "babel-plugin-transform-undefined-to-void": "^6.9.0", - "lodash.isplainobject": "^4.0.6" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - } - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", - "dev": true - }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "blueimp-md5": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.3.1.tgz", - "integrity": "sha1-mSpnN3M7naHt1kFVDcOsqy6c/Fo=" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brcast": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz", - "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-image-resizer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/browser-image-resizer/-/browser-image-resizer-2.0.1.tgz", - "integrity": "sha512-0fVKk7duXkvqZXdK96LpRii2v1rQfvPXSt7Ow5z1neoAmYZPnO66y1XAy8dRExjWPtSGk34Ehtk+w814iDAOWg==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.2.tgz", - "integrity": "sha512-zmJVLiKLrzko0iszd/V4SsjTaomFeoVzQGYYOYgRgsbh7WNh95RgDB0CmBdFWYs/3MyFSt69NypjL/h3iaddKQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000951", - "electron-to-chromium": "^1.3.116", - "node-releases": "^1.1.11" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30000951", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000951.tgz", - "integrity": "sha512-eRhP+nQ6YUkIcNQ6hnvdhMkdc7n3zadog0KXNRxAZTT2kHjUb1yGn71OrPhSn8MOvlX97g5CR97kGVj8fMsXWg==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.119", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.119.tgz", - "integrity": "sha512-3mtqcAWa4HgG+Djh/oNXlPH0cOH6MmtwxN1nHSaReb9P0Vn51qYPqYwLeoSuAX9loU1wrOBhFbiX3CkeIxPfgg==", - "dev": true - } - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", - "dev": true, - "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } - } - }, - "caniuse-db": { - "version": "1.0.30000847", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000847.tgz", - "integrity": "sha1-/0BypUaICf7ArprDtANe+JHlsUQ=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000883", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000883.tgz", - "integrity": "sha512-ovvb0uya4cKJct8Rj9Olstz0LaWmyJhCp3NawRG5fVigka8pEhIIwipF7zyYd2Q58UZb5YfIt52pVF444uj2kQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", - "dev": true - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", - "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", - "dev": true, - "requires": { - "chalk": "^1.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "dev": true, - "requires": { - "source-map": "0.5.x" - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", - "dev": true, - "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } - }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" - } - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "common-tags": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", - "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "cookies": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz", - "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", - "dev": true, - "requires": { - "depd": "~1.1.1", - "keygrip": "~1.0.2" - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" - }, - "core-js-compat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.0.tgz", - "integrity": "sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==", - "dev": true, - "requires": { - "browserslist": "^4.5.1", - "core-js": "3.0.0", - "core-js-pure": "3.0.0", - "semver": "^5.6.0" - }, - "dependencies": { - "core-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", - "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.0.tgz", - "integrity": "sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "create-react-context": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", - "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", - "requires": { - "fbjs": "^0.8.0", - "gud": "^1.0.0" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, - "cross-fetch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.2.tgz", - "integrity": "sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - }, - "dependencies": { - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-js": { - "version": "3.1.9-1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", - "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-loader": { - "version": "0.28.11", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", - "dev": true, - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - } - } - }, - "css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", - "requires": { - "is-in-browser": "^1.0.2" - } - }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - }, - "dependencies": { - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", - "dev": true, - "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" - } - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } - } - }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, - "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - } - }, - "csstype": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz", - "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==" - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz", - "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==" - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dlv": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz", - "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", - "dev": true, - "requires": { - "utila": "~0.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "dom-helpers": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", - "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" - }, - "dotenv-webpack": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.5.7.tgz", - "integrity": "sha1-xEOVqyHR/SjXmpCUKnsUsd69FF8=", - "requires": { - "dotenv": "^5.0.1" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.47", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz", - "integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=", - "dev": true - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-inject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", - "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=", - "dev": true - }, - "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" - } - }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.3.tgz", - "integrity": "sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - } - } - }, - "eslint-config-prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.1.0.tgz", - "integrity": "sha512-QYGfmzuc4q4J6XIhlp8vRKdI/fI0tQfQPy1dME3UOLprE+v4ssH/3W9LM2Q7h5qBcy5m0ehCrBDU2YF8q6OY8w==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - } - } - }, - "eslint-config-standard": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", - "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", - "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", - "dev": true - }, - "eslint-config-standard-react": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-7.0.2.tgz", - "integrity": "sha512-Zv/vubIfrwx4IbRXAggRjaswLXKdfFeuGfN365cVTaRmfpAy/7dIxMvJRZkUT99zEx8FOjTXL0KC4psfDjK/+w==", - "dev": true, - "requires": { - "eslint-config-standard-jsx": "^6.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "eslint-plugin-es": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz", - "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==", - "dev": true, - "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", - "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", - "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^4.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, - "eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", - "dev": true, - "requires": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" - } - }, - "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" - }, - "dependencies": { - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - } - } - }, - "eslint-plugin-standard": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", - "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", - "dev": true - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true - }, - "fbjs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.3.2.tgz", - "integrity": "sha1-AzpUBZUIS13jUJpAXQbxoqjlufs=", - "requires": { - "core-js": "^1.0.0", - "loose-envify": "^1.0.0", - "promise": "^7.0.3", - "ua-parser-js": "^0.7.9", - "whatwg-fetch": "^0.9.0" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "whatwg-fetch": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz", - "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA=" - } - } - }, - "fbjs-css-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.1.tgz", - "integrity": "sha512-IM+v/C40MNZWqsLErc32e0TyIk/NhkkQZL0QmjBh6zi1eXv0/GeVKmKmueQX7nn9SXQBQbTUcB8zuexIF3/88w==" - }, - "fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "file-loader": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^0.4.5" - } - }, - "file-selector": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.1.11.tgz", - "integrity": "sha512-NopCegJ7QuoqVzUdSLcZb0M9IFO69CSFZzuZhZBasfQxepNwa1ehL6L9UKe3EyBof3EUeraccfJocLCRAvtxdg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", - "dev": true - }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz", - "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==", - "requires": { - "debug": "=3.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", - "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", - "dev": true - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules-path": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz", - "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==", - "dev": true - }, - "globals": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", - "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graphql": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.2.1.tgz", - "integrity": "sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==", - "requires": { - "iterall": "^1.2.2" - } - }, - "graphql-tag": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz", - "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==" - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "gzip-size": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.0.tgz", - "integrity": "sha512-wfSnvypBDRW94v5W3ckvvz/zFUNdJ81VgOP6tE4bPpRUcc0wGqU+y0eZjJEvKxwubJFix6P84sE8M51YWLT7rQ==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "requires": { - "function-bind": "^1.0.2" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", - "requires": { - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" - }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "html-minifier": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", - "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.15.x", - "he": "1.1.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.3.x" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.3.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", - "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", - "dev": true, - "requires": { - "commander": "~2.15.0", - "source-map": "~0.6.1" - } - } - } - }, - "html-webpack-harddisk-plugin": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-0.2.0.tgz", - "integrity": "sha1-RlQUpTQhm2nB/YEntYX42GiX+y0=", - "dev": true, - "requires": { - "@types/webpack": "^3.0.5", - "mkdirp": "^0.5.1" - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "http-assert": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz", - "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", - "dev": true, - "requires": { - "deep-equal": "~1.0.1", - "http-errors": "~1.6.1" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - } - } - }, - "http-errors": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.0.tgz", - "integrity": "sha512-hz3BtSHB7Z6dNWzYc+gUbWqG4dIpJedwwOhe1cvGUq5tGmcTTIRkPiAbyh/JlZx+ksSJyGJlgcHo5jGahiXnKw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "hyphenate-style-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", - "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "idtoken-verifier": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.2.0.tgz", - "integrity": "sha512-8jmmFHwdPz8L73zGNAXHHOV9yXNC+Z0TUBN5rafpoaFaLFltlIFr1JkQa3FYAETP23eSsulVw0sBiwrE8jqbUg==", - "requires": { - "base64-js": "^1.2.0", - "crypto-js": "^3.1.9-1", - "jsbn": "^0.1.0", - "superagent": "^3.8.2", - "url-join": "^1.1.0" - }, - "dependencies": { - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", - "dev": true - }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" - }, - "immutable-tuple": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/immutable-tuple/-/immutable-tuple-0.4.8.tgz", - "integrity": "sha512-1m29EVSrF+LJJAyVo1v12NsIalVKjyi4HNQVQDBx+LNCIuRXnfeMCHuLao5CyN1m3Sn0T63U5JEkmPArPCipQA==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indefinite-observable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.2.tgz", - "integrity": "sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==", - "requires": { - "symbol-observable": "1.2.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" - }, - "is-ci": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", - "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", - "dev": true, - "requires": { - "ci-info": "^1.3.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isemail": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.3.tgz", - "integrity": "sha512-5xbsG5wYADIcB+mfLsd+nst1V/D+I7EU7LEZPo2GOIMu4JzfcRs5yQoypP4avA7QtUqgxYLKBYNv4IdzBmbhdw==", - "dev": true, - "requires": { - "punycode": "2.x.x" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "joi": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", - "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", - "dev": true, - "requires": { - "hoek": "4.x.x", - "isemail": "3.x.x", - "topo": "2.x.x" - } - }, - "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", - "dev": true - }, - "js-cookie": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", - "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", - "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", - "integrity": "sha1-pltPoPEL2nGaBUQep7lMVfPhW64=", - "requires": { - "debug": "^2.1.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", - "requires": { - "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", - "requires": { - "hyphenate-style-name": "^1.0.2" - } - }, - "jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==" - }, - "jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==" - }, - "jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", - "requires": { - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-props-sort": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", - "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==" - }, - "jss-vendor-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", - "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", - "requires": { - "css-vendor": "^0.3.8" - } - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - }, - "keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=", - "dev": true - }, - "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "koa": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.5.2.tgz", - "integrity": "sha512-MoVGWre9g3p35pCqXNhOT/a4trwK5CGvalIoPi7qOA2RCZaep3GCsa/G/tD9QMjQI7bmVWn3XF3SOau8RkPh6w==", - "dev": true, - "requires": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.7.1", - "debug": "^3.1.0", - "delegates": "^1.0.0", - "depd": "^1.1.2", - "destroy": "^1.0.4", - "error-inject": "^1.0.0", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", - "koa-is-json": "^1.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "koa-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/koa-connect/-/koa-connect-2.0.1.tgz", - "integrity": "sha512-MNaiK5og8aj4I+tx8l+jSW24QX7aaQyZemV821VPY+AOJ8XUbrrAj9AzrpZKDQp5jTmylAZW2sXhTz2+SRqZog==", - "dev": true - }, - "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", - "dev": true, - "requires": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "dev": true, - "requires": { - "any-promise": "^1.1.0" - } - } - } - }, - "koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", - "dev": true - }, - "koa-webpack": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-webpack/-/koa-webpack-4.0.0.tgz", - "integrity": "sha512-P+j2TzeZAqFwscd/dlLykk/sxwr6wQ5Tp3FYDhqv1+y9aRIffTPnu2zK+1BhfM+Kyh8bepU1jFR420maE+Vajw==", - "dev": true, - "requires": { - "app-root-path": "^2.0.1", - "merge-options": "^1.0.0", - "webpack-dev-middleware": "^3.0.0", - "webpack-hot-client": "^3.0.0", - "webpack-log": "^1.1.1" - }, - "dependencies": { - "webpack-hot-client": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz", - "integrity": "sha512-6k91015hZ4Okkz8u6OzRgJygEL+3J3ay6HVZhWBF3tT2P0rZJ0mgca39dotJxngggUm3S8707c0vrcynn1IzEQ==", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1", - "loglevelnext": "^1.0.2", - "strip-ansi": "^4.0.0", - "uuid": "^3.1.0", - "webpack-log": "^1.1.1", - "ws": "^4.0.0" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - } - } - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.flowright": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flowright/-/lodash.flowright-3.5.0.tgz", - "integrity": "sha1-K1//OZcW1+fcVyT+k0n2cGUYTWc=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", - "dev": true - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "loglevel-colored-level-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "loglevel": "^1.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "loglevelnext": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", - "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", - "dev": true, - "requires": { - "es6-symbol": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "^3.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-plural": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.2.0.tgz", - "integrity": "sha512-zhDAr/erfvZtE1A66DIQ7ZNdGlexVGNDP1P1kvLZprRE0meA0zmxNbp6xmXzNRuZmgW0Ui4ibbaMPYPFHVRMkQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", - "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.1" - } - }, - "messageformat": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.1.1.tgz", - "integrity": "sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==", - "dev": true, - "requires": { - "glob": "~7.0.6", - "make-plural": "^4.1.1", - "messageformat-parser": "^1.1.0", - "nopt": "~3.0.6", - "reserved-words": "^0.1.2" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "messageformat-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz", - "integrity": "sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "microee": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/microee/-/microee-0.0.6.tgz", - "integrity": "sha1-oSvbAQNoHosSapsHHrpMRnx4//4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-css-extract-plugin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz", - "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minilog": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minilog/-/minilog-3.1.0.tgz", - "integrity": "sha1-0tDxiHyjY9Gs8OqG1cTfKTs/tnU=", - "requires": { - "microee": "0.0.6" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "ms-rest-js": { - "version": "0.21.413", - "resolved": "https://registry.npmjs.org/ms-rest-js/-/ms-rest-js-0.21.413.tgz", - "integrity": "sha512-eX+M98Y9s+zo85Unt83TYkpuJkW4d0wuiHrpWjAxx/7YzZd3uVq8HRhJHXGDqCd22nlEvtwlchfgwILmBcWnOg==", - "requires": { - "@types/express": "^4.11.1", - "@types/form-data": "^2.2.1", - "@types/node": "^9.4.6", - "@types/uuid": "^3.4.3", - "axios": "^0.18.0", - "form-data": "^2.3.2", - "tough-cookie": "^2.4.3", - "tslib": "^1.9.2", - "uuid": "^3.2.1", - "xml2js": "^0.4.19" - }, - "dependencies": { - "@types/node": { - "version": "9.6.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.31.tgz", - "integrity": "sha512-kIVlvUBizL51ALNMPbmcZoM7quHyB7J6fLRwQe22JsMp39nrVSHdBeVVS3fnQCK1orxI3O8LScmb8cuiihkAfA==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - } - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=", - "dev": true - }, - "nanobus": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/nanobus/-/nanobus-4.3.3.tgz", - "integrity": "sha512-4/uzl+LkMGoVv/9eMzH2QFvefmlJErT0KR7EmuYbmht2QvxSEqTjhFFOZ/KHE6chH58fKL3njrOcEwbYV0h9Yw==", - "dev": true, - "requires": { - "nanotiming": "^7.2.0", - "remove-array-items": "^1.0.0" - } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - } - } - }, - "nanoscheduler": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/nanoscheduler/-/nanoscheduler-1.0.3.tgz", - "integrity": "sha512-jBbrF3qdU9321r8n9X7yu18DjP31Do2ItJm3mWrt90wJTrnDO+HXpoV7ftaUglAtjgj9s+OaCxGufbvx6pvbEQ==", - "dev": true, - "requires": { - "nanoassert": "^1.1.0" - } - }, - "nanotiming": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/nanotiming/-/nanotiming-7.3.1.tgz", - "integrity": "sha512-l3lC7v/PfOuRWQa8vV29Jo6TG10wHtnthLElFXs4Te4Aas57Fo4n1Q8LH9n+NDh9riOzTVvb2QNBhTS4JUKNjw==", - "dev": true, - "requires": { - "nanoassert": "^1.1.0", - "nanoscheduler": "^1.0.2" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" - } - }, - "node-releases": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.11.tgz", - "integrity": "sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.11", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-scroll-left": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", - "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "dependencies": { - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - } - } - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - } - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", - "dev": true - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimism": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.6.6.tgz", - "integrity": "sha512-1Y6LY7pYbXP5y6yeXYfXhxJi9hsxYAZWpt7bBp4seAwfcYtaN7tq9wot/pdrhyI809/K4gDm3BcZcEkmwGevjg==", - "requires": { - "immutable-tuple": "^0.4.4" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.3.tgz", - "integrity": "sha512-iOfMsuGMPbM/bZZ731gwtAXfXjIkR97BXqUXsPGIzBaQzpvqajsoIFlR+z+Q7FLcq2TmV4JFGo80d98ttfRzhA==", - "dev": true, - "requires": { - "cssnano": "^3.10.0", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "ora": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", - "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.0.1", - "log-symbols": "^2.1.0" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "password-sheriff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/password-sheriff/-/password-sheriff-1.1.0.tgz", - "integrity": "sha1-/bPD2EWgo8kt5CKyrZNGzginFBM=" - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", - "dev": true, - "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - } - }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", - "dev": true, - "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" - } - }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", - "dev": true, - "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" - } - }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", - "dev": true, - "requires": { - "postcss": "^5.0.14" - } - }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", - "dev": true, - "requires": { - "postcss": "^5.0.14" - } - }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", - "dev": true, - "requires": { - "postcss": "^5.0.16" - } - }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", - "dev": true, - "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" - } - }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", - "dev": true, - "requires": { - "cosmiconfig": "^4.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", - "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^6.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^0.4.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", - "dev": true, - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - } - }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", - "dev": true, - "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true - }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", - "dev": true, - "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" - } - }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" - } - }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", - "dev": true, - "requires": { - "postcss": "^5.0.5" - } - }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" - } - }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", - "dev": true, - "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" - } - }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", - "dev": true, - "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - } - }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", - "dev": true, - "requires": { - "postcss": "^5.0.4" - } - }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", - "dev": true, - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" - } - }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", - "dev": true, - "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" - } - }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", - "dev": true, - "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "prettier": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", - "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", - "dev": true - }, - "prettier-eslint": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", - "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", - "dlv": "^1.1.0", - "eslint": "^4.0.0", - "indent-string": "^3.2.0", - "lodash.merge": "^4.6.0", - "loglevel-colored-level-prefix": "^1.0.0", - "prettier": "^1.7.0", - "pretty-format": "^23.0.1", - "require-relative": "^0.8.7", - "typescript": "^2.5.1", - "typescript-eslint-parser": "^16.0.0", - "vue-eslint-parser": "^2.0.2" - }, - "dependencies": { - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } - } - } - } - }, - "prettier-standard": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/prettier-standard/-/prettier-standard-8.0.1.tgz", - "integrity": "sha512-egiIKvmlizoXuRkh83myjB4elmdIahCaUACLDaZyCgvspZQyps0fUayQpvcv4/gW/XahMTu95a3f9Fu8ouGYZw==", - "dev": true, - "requires": { - "@sheerun/eslint-config-standard": "^10.2.1", - "babel-eslint": ">=7.2.3", - "babel-runtime": "^6.23.0", - "chalk": "^2.3.0", - "core-js": "^2.5.3", - "eslint": "^4.7.2", - "find-up": "^2.1.0", - "get-stdin": "^5.0.1", - "glob": "^7.1.2", - "ignore": "^3.3.3", - "indent-string": "^3.1.0", - "lodash.memoize": "^4.1.2", - "loglevel-colored-level-prefix": "^1.0.0", - "messageformat": "^1.0.2", - "minimist": "1.2.0", - "prettier": "1.9.x", - "prettier-eslint": "^8.1.1", - "regenerator-runtime": "^0.11.1", - "rxjs": "^5.4.0" - }, - "dependencies": { - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "eslint": { - "version": "4.19.1", - "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "prettier": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz", - "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } - } - } - } - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.2.0.tgz", - "integrity": "sha512-5wupExkIt8RYL4h/FE+WTg3JHk62e6fFPWtAZA9J5IWK1PfTfKkMS93HBUHcFpeYi9KsY5pFbh+ldvEyaz5MyA==", - "requires": { - "decode-uri-component": "^0.2.0", - "strict-uri-encode": "^2.0.0" - }, - "dependencies": { - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" - } - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "dependencies": { - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "react-apollo": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.2.4.tgz", - "integrity": "sha512-haS5R30Qvteb65ZLfWomUZQh47VU4ld4Kof3zlqdbLOrYPt3/DdVZC8ZFPZSxd5zPeIJtZqpUfAxD1WHVoMPIA==", - "requires": { - "fbjs": "^1.0.0", - "hoist-non-react-statics": "^3.0.0", - "invariant": "^2.2.2", - "lodash.flowright": "^3.5.0", - "lodash.isequal": "^4.5.0", - "prop-types": "^15.6.0" - }, - "dependencies": { - "fbjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", - "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", - "requires": { - "core-js": "^2.4.1", - "fbjs-css-vars": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "hoist-non-react-statics": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.0.1.tgz", - "integrity": "sha512-1kXwPsOi0OGQIZNVMPvgWJ9tSnGMiMfJdihqEzrPEXlHOBh9AAHXX/QYmAJTXztnz/K+PQ8ryCb4eGaN6HlGbQ==", - "requires": { - "react-is": "^16.3.2" - } - } - } - }, - "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "dependencies": { - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "react-dropzone": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-10.1.3.tgz", - "integrity": "sha512-ry17scg+B/itdBJn0Qd2UxYQIeQyuTgLDyb1o+BM1jQ6CAgtuaYo4W/UA+UK9VnzwvFuwMcmZJjjju2rMFPMLg==", - "requires": { - "attr-accept": "^1.1.3", - "file-selector": "^0.1.11", - "prop-types": "^15.7.2" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - } - } - }, - "react-event-listener": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", - "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - } - } - }, - "react-helmet": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.0.tgz", - "integrity": "sha1-qBgR3yExOm1VxfBYxK66XW89l6c=", - "requires": { - "deep-equal": "^1.0.1", - "object-assign": "^4.1.1", - "prop-types": "^15.5.4", - "react-side-effect": "^1.1.0" - } - }, - "react-hot-loader": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.3.11.tgz", - "integrity": "sha512-T0G5jURyTsFLoiW6MTr5Q35UHC/B2pmYJ7+VBjk8yMDCEABRmCGy4g6QwxoB4pWg4/xYvVTa/Pbqnsgx/+NLuA==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2" - } - }, - "react-is": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.2.tgz", - "integrity": "sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - } - }, - "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - } - }, - "react-side-effect": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz", - "integrity": "sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw==", - "requires": { - "exenv": "^1.2.1", - "shallowequal": "^1.0.1" - } - }, - "react-transition-group": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.0.tgz", - "integrity": "sha512-qYB3JBF+9Y4sE4/Mg/9O6WFpdoYjeeYqx0AFb64PTazVy8RPMiE3A47CG9QmM4WJ/mzDiZYslV+Uly6O1Erlgw==", - "requires": { - "dom-helpers": "^3.3.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "recompose": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", - "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", - "dev": true, - "requires": { - "balanced-match": "^0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", - "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", - "dev": true, - "requires": { - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", - "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", - "dev": true - }, - "regexpp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", - "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==", - "dev": true - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - } - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-array-items": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remove-array-items/-/remove-array-items-1.0.0.tgz", - "integrity": "sha1-B79CyzMvTPboXq2DteToltIyayE=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "~0.1", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "~0.3" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", - "dev": true - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "dev": true, - "requires": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - } - } - }, - "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, - "rxjs": { - "version": "5.5.11", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz", - "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - } - }, - "sass-loader": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", - "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", - "dev": true, - "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "schedule": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/schedule/-/schedule-0.5.0.tgz", - "integrity": "sha512-HUcJicG5Ou8xfR//c2rPT0lPIRR09vVvN81T9fqfVgBmhERUbDEQoYKjpBxbueJnCPpSu2ujXzOnRQt6x9o/jw==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - }, - "dependencies": { - "ajv": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", - "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^4.2.1" - } - }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - } - } - }, - "script-ext-html-webpack-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-kUH+XhpjG95ABMnWeKCguM7NCOqSrGlYEnJQKgvPIyq5+FzQuACMLzWOB/Lp7t0sKqKLWNLu8i6MmLRKRo1IUw==", - "dev": true, - "requires": { - "debug": "^3.1.0" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", - "dev": true - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", - "dev": true, - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz", - "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^2.0.1", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "dev": true, - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-loader": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" - } - }, - "subscriptions-transport-ws": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz", - "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==", - "requires": { - "backo2": "^1.0.2", - "eventemitter3": "^3.1.0", - "iterall": "^1.2.1", - "symbol-observable": "^1.0.4", - "ws": "^5.2.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - } - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", - "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - } - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", - "dev": true, - "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "time-fix-plugin": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.3.tgz", - "integrity": "sha512-5StGdiXCiBsq2+RdBQ0NrunFeKqVX0f2Myn8s1YqOxRS+kmuiHcdpPm27ucbM6FYawBKGTOOYxPnqxIBZyiqEg==", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-invariant": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.4.tgz", - "integrity": "sha512-lMhRd/djQJ3MoaHEBrw8e2/uM4rs9YMNk0iOr8rHQ0QdbM7D4l0gFl3szKdeixrlyfm9Zqi4dxHCM2qVG8ND5g==" - }, - "tiny-warning": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", - "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", - "requires": { - "tslib": "^1.9.3" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "typescript-eslint-parser": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", - "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - } - }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-join": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-3.0.0.tgz", - "integrity": "sha1-JugROs4ZXqMND8OBhuRUAPnOpnI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - } - } - }, - "warning": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", - "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - } - }, - "webpack": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.20.2.tgz", - "integrity": "sha512-75WFUMblcWYcocjSLlXCb71QuGyH7egdBZu50FtBGl2Nso8CK3Ej+J7bTZz2FPFq5l6fzCisD9modB7t30ikuA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.8", - "@webassemblyjs/helper-module-context": "1.7.8", - "@webassemblyjs/wasm-edit": "1.7.8", - "@webassemblyjs/wasm-parser": "1.7.8", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", - "dev": true - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", - "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", - "dev": true - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-cli": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", - "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "global-modules-path": "^2.3.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", - "dev": true, - "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz", - "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", - "dev": true, - "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "url-join": "^4.0.0", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - } - } - }, - "webpack-hot-client": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-4.1.1.tgz", - "integrity": "sha512-Gu3hEkFJIsvC+2Dg86FvAzIL8KSR88Ptk0QnV4wEucObB0c9aMIYbjSA9oPTV4X5OZRH6ftrk4FcSGsZmTLiWA==", - "dev": true, - "requires": { - "@webpack-contrib/schema-utils": "^1.0.0-beta.0", - "json-stringify-safe": "^5.0.1", - "loglevelnext": "^1.0.2", - "merge-options": "^1.0.1", - "strip-ansi": "^4.0.0", - "uuid": "^3.1.0", - "webpack-log": "^1.1.1", - "ws": "^4.0.0" - }, - "dependencies": { - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - } - } - }, - "webpack-log": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", - "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "loglevelnext": "^1.0.1", - "uuid": "^3.1.0" - } - }, - "webpack-merge": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", - "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", - "dev": true, - "requires": { - "lodash": "^4.17.5" - } - }, - "webpack-serve": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/webpack-serve/-/webpack-serve-1.0.4.tgz", - "integrity": "sha512-WhI9PMY2YLFliZhDsQFE5Os/On5Py6DGZpeBJyDM8xl0cspxgvXmWFywACn2YWWDgowqIxRqveyGh2RwdFWTNQ==", - "dev": true, - "requires": { - "@shellscape/koa-static": "^4.0.4", - "@webpack-contrib/config-loader": "^1.1.1", - "chalk": "^2.3.0", - "clipboardy": "^1.2.2", - "cosmiconfig": "^5.0.2", - "debug": "^3.1.0", - "find-up": "^2.1.0", - "get-port": "^3.2.0", - "import-local": "^1.0.0", - "killable": "^1.0.0", - "koa": "^2.4.1", - "koa-webpack": "^4.0.0", - "lodash": "^4.17.5", - "loud-rejection": "^1.6.0", - "meow": "^5.0.0", - "nanobus": "^4.3.1", - "opn": "^5.1.0", - "resolve": "^1.6.0", - "time-fix-plugin": "^2.0.0", - "update-notifier": "^2.3.0", - "url-join": "3.0.0", - "v8-compile-cache": "^2.0.0", - "webpack-hot-client": "^3.0.0", - "webpack-log": "^1.1.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "cosmiconfig": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", - "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0", - "yargs-parser": "^10.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - }, - "webpack-hot-client": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz", - "integrity": "sha512-6k91015hZ4Okkz8u6OzRgJygEL+3J3ay6HVZhWBF3tT2P0rZJ0mgca39dotJxngggUm3S8707c0vrcynn1IzEQ==", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1", - "loglevelnext": "^1.0.2", - "strip-ansi": "^4.0.0", - "uuid": "^3.1.0", - "webpack-log": "^1.1.1", - "ws": "^4.0.0" - } - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", - "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winchan": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/winchan/-/winchan-0.2.1.tgz", - "integrity": "sha512-QrG9q+ObfmZBxScv0HSCqFm/owcgyR5Sgpiy1NlCZPpFXhbsmNHhTiLWoogItdBUi0fnU7Io/5ABEqRta5/6Dw==" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "workbox-background-sync": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.2.tgz", - "integrity": "sha512-K34wiTM50gSpzJUuRmGRqbd91IpJj0vwMBSHCpixw/jiTg10uytSfnixMNGzeTK0i7LTd/bkA8ptx4HXP+MliA==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-broadcast-cache-update": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.2.tgz", - "integrity": "sha512-wmN3k94Kv3/lYOqRy08ymp8RyTPCpgLI9UW/BrQ1XuZHJyFejWnBoy/pCKk9mRZYZX7EyvnzA4O1PLILgLC43g==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-build": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.6.2.tgz", - "integrity": "sha512-PYw4SRbfbUE/+DDhb89zbspDLBi86hpra+l6SsX7yBqCthw4sHyH8IIQw5MMHI04HPV5ZDYru8A5SNLXVDGMcg==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.2", - "joi": "^11.1.1", - "lodash.template": "^4.4.0", - "pretty-bytes": "^4.0.2", - "stringify-object": "^3.2.2", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^3.6.2", - "workbox-broadcast-cache-update": "^3.6.2", - "workbox-cache-expiration": "^3.6.2", - "workbox-cacheable-response": "^3.6.2", - "workbox-core": "^3.6.2", - "workbox-google-analytics": "^3.6.2", - "workbox-navigation-preload": "^3.6.2", - "workbox-precaching": "^3.6.2", - "workbox-range-requests": "^3.6.2", - "workbox-routing": "^3.6.2", - "workbox-strategies": "^3.6.2", - "workbox-streams": "^3.6.2", - "workbox-sw": "^3.6.2" - } - }, - "workbox-cache-expiration": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.2.tgz", - "integrity": "sha512-LJLYfqG7ItYucppun5I92fcN21kDZFEVqZ8uAOz5t8piOsHh1ThAiiLv/4ubG/d7CUgqW/1bmcX6DM4xqackzg==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-cacheable-response": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.2.tgz", - "integrity": "sha512-WvICMN3SfEi48C96KEfkLDIqnU0rkQeajdLjYXuzbUID3EX31gzUVlIbqQGrc+9xtIlvxs2+ZoaTR3Rjdtbh/Q==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-cli": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-3.6.2.tgz", - "integrity": "sha512-H15VXwzZKr0hfdSyn+LPXcsQREJcnpMfX2qkZm8FSSEhItkbfeMwiGlZkm+gs0LtmPVHK2AxrI1/jJWDcbYMkw==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "common-tags": "^1.4.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.2", - "inquirer": "^3.3.0", - "meow": "^3.7.0", - "ora": "^1.3.0", - "pretty-bytes": "^4.0.2", - "update-notifier": "^2.3.0", - "workbox-build": "^3.6.2" - } - }, - "workbox-core": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.2.tgz", - "integrity": "sha512-5T5WBFy5nMm7zx+P2RwdzEVu5CK++bqwiEsGF+INwUxsOKpH9oXUlUdJE/KfUaMsKcZtHXEb74mMB6vvE88a/w==", - "dev": true - }, - "workbox-google-analytics": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.2.tgz", - "integrity": "sha512-NXBbo9xyHQvkHcvYoZkNJw7DB53dJUnmusKdSPg138A6HGt2ilycwTUuXNDWpkXXp3YHxcslrBMdptolwbzidg==", - "dev": true, - "requires": { - "workbox-background-sync": "^3.6.2", - "workbox-core": "^3.6.2", - "workbox-routing": "^3.6.2", - "workbox-strategies": "^3.6.2" - } - }, - "workbox-navigation-preload": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.2.tgz", - "integrity": "sha512-fN/CWSFZiySQH/OEJQsIizAM4ob6IgZVDfWvA58jAwiyI5QziqfFtL/EiHHNvmIa5jTdcoXfuNNv1WUdpRV18A==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-precaching": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.2.tgz", - "integrity": "sha512-oQmBfvCzCUfLcwTokfbVhIIcyNS9aF692EhdqAz/SB2e40ehUgcctAUhQOezsedZFqBBnwphJQUhs+hD3mu72A==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-range-requests": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.2.tgz", - "integrity": "sha512-y1MFB97ydbT8PxBiihndLzG66sNIRzL0lkyoeaWPGfaPGWTP8ghMe4SkGqqdiY+E54rhd7lTdb7RZdv3Av1lTg==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-routing": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.2.tgz", - "integrity": "sha512-rhoH1AlETUfffJXJSlc0/T5rBB6vatxpD/8IZgxgHByBnYokV+/HxO7It6wBbxIzdO31UrWVroYm0iVa5sO7Jw==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-strategies": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.2.tgz", - "integrity": "sha512-4jAyL3n0Fl1BLB3QDUoUoBTzBsE8FwH0K7He1JvLzFiDtYp1ewcKjDecYCNZyTsFVgaLL7WClEQCOKSBquBfOg==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-streams": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.2.tgz", - "integrity": "sha512-lKTh5fOAf+Qae7GHYXZve40ZXULCf9kxlkrWjTXqGcTh6cxeibuWl6Mnt4aroChNB8jOEbHfGOy0iaG0R159ew==", - "dev": true, - "requires": { - "workbox-core": "^3.6.2" - } - }, - "workbox-sw": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.2.tgz", - "integrity": "sha512-EwQZaeGB+tEogABMj9FaEDuszaSBQgjAUEqTFiizZWSU8owZrt0BFfi69TMAhILOfWLFh3aASMzQnPMDY7id4w==", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", - "dev": true - }, - "zen-observable": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.8.tgz", - "integrity": "sha512-HnhhyNnwTFzS48nihkCZIJGsWGFcYUz+XPDlPK5W84Ifji8SksC6m7sQWOf8zdCGhzQ4tDYuMYGu5B0N1dXTtg==" - }, - "zen-observable-ts": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz", - "integrity": "sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ==", - "requires": { - "zen-observable": "^0.8.0" - } - } - } -} diff --git a/Deprecated-Code/TeamsModule/client/package.json b/Deprecated-Code/TeamsModule/client/package.json deleted file mode 100644 index af6268ae6..000000000 --- a/Deprecated-Code/TeamsModule/client/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "@superalgos/teams-client", - "version": "0.0.37", - "description": "Superalgos Project Team client-side web app", - "author": "Barry Low ", - "license": "Apache-2.0", - "repository": "https://github.com/Superalgos/TeamsModule.git", - "main": "src/index.js", - "scripts": { - "dev": "NODE_ENV=development PORT=3001 webpack-serve --config ./webpack.config.js", - "build": "NODE_ENV=production webpack --mode production --config ./webpack.config.js", - "lint": "prettier-standard 'src/**/*.js'", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "react", - "apollo", - "graphql" - ], - "devDependencies": { - "@babel/cli": "^7.1.2", - "@babel/core": "^7.4.0", - "@babel/plugin-proposal-class-properties": "^7.4.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/preset-env": "^7.4.2", - "@babel/preset-react": "^7.0.0", - "autoprefixer": "^8.6.5", - "babel-core": "^7.0.0-bridge.0", - "babel-eslint": "^9.0.0", - "babel-loader": "^7.1.5", - "babel-minify-webpack-plugin": "^0.3.1", - "babel-plugin-dynamic-import-node": "^1.2.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "connect-history-api-fallback": "^1.5.0", - "css-loader": "^0.28.11", - "eslint": "^5.15.3", - "eslint-config-prettier": "^3.1.0", - "eslint-config-standard": "^12.0.0", - "eslint-config-standard-react": "^7.0.2", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^7.0.1", - "eslint-plugin-prettier": "^2.7.0", - "eslint-plugin-promise": "^4.0.1", - "eslint-plugin-react": "^7.11.1", - "eslint-plugin-standard": "^4.0.0", - "file-loader": "^1.1.11", - "html-webpack-harddisk-plugin": "^0.2.0", - "html-webpack-plugin": "^3.2.0", - "koa-connect": "^2.0.1", - "mini-css-extract-plugin": "^0.4.4", - "node-sass": "^4.12.0", - "optimize-css-assets-webpack-plugin": "^4.0.3", - "postcss-loader": "^2.1.6", - "prettier": "^1.14.3", - "prettier-standard": "^8.0.1", - "react-hot-loader": "^4.3.11", - "sass-loader": "^6.0.7", - "script-ext-html-webpack-plugin": "^2.0.1", - "style-loader": "^0.21.0", - "uglifyjs-webpack-plugin": "^1.3.0", - "webpack": "^4.20.2", - "webpack-bundle-analyzer": "^3.3.2", - "webpack-cli": "^3.1.2", - "webpack-hot-client": "^4.1.1", - "webpack-merge": "^4.1.4", - "webpack-serve": "^1.0.4", - "workbox-build": "^3.6.2", - "workbox-cli": "^3.6.2" - }, - "dependencies": { - "@azure/storage-blob": "^10.0.0-preview", - "@superalgos/web-components": "0.0.20", - "apollo-cache-inmemory": "^1.3.5", - "apollo-client": "^2.4.2", - "apollo-link": "^1.2.3", - "apollo-link-context": "^1.0.9", - "apollo-link-error": "^1.1.1", - "apollo-link-http": "^1.5.5", - "apollo-link-ws": "^1.0.9", - "apollo-utilities": "^1.0.21", - "auth0-lock": "^11.10.0", - "babel-polyfill": "^6.26.0", - "blob-util": "^2.0.2", - "classnames": "^2.2.6", - "cross-fetch": "^2.2.2", - "dotenv-webpack": "^1.5.7", - "graphql": "^14.2.1", - "graphql-tag": "^2.10.0", - "minilog": "^3.1.0", - "prop-types": "^15.6.2", - "query-string": "^6.2.0", - "react": "^16.8.4", - "react-apollo": "^2.2.4", - "react-dom": "^16.8.4", - "react-router-dom": "^4.3.1", - "recompose": "^0.30.0", - "subscriptions-transport-ws": "^0.9.15" - }, - "peerDependencies": { - "@material-ui/core": "^3.6.2", - "@material-ui/icons": "^3.0.1", - "ajv": "^6.10.0" - }, - "standard": { - "parser": "babel-eslint", - "ignore": [ - "dist/", - "build/" - ] - } -} diff --git a/Deprecated-Code/TeamsModule/client/postcss.config.js b/Deprecated-Code/TeamsModule/client/postcss.config.js deleted file mode 100644 index 88752c6cb..000000000 --- a/Deprecated-Code/TeamsModule/client/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - require('autoprefixer') - ] -} diff --git a/Deprecated-Code/TeamsModule/client/src/assets/AlgonetWebPlatform.jpg b/Deprecated-Code/TeamsModule/client/src/assets/AlgonetWebPlatform.jpg deleted file mode 100644 index 7f5176e33..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/AlgonetWebPlatform.jpg and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-dark.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-dark.svg deleted file mode 100644 index 479feeb86..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-dark.svg +++ /dev/null @@ -1 +0,0 @@ -aa-logo-dark \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-vert.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-vert.svg deleted file mode 100644 index 442e9a7fd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo-vert.svg +++ /dev/null @@ -1 +0,0 @@ -aa-logo-vert \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo.png deleted file mode 100644 index 9701ee1c0..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/aa-logo.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png deleted file mode 100644 index 150043a06..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png deleted file mode 100644 index d98b9ce8d..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png deleted file mode 100644 index 95ec62746..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/apple-touch-icon.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/browserconfig.xml b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/browserconfig.xml deleted file mode 100644 index b3930d0f0..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png deleted file mode 100644 index 99bda00af..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-16x16.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png deleted file mode 100644 index 08c2369b0..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon-32x32.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon.ico b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon.ico deleted file mode 100644 index cd2c5d6af..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/html_code.html b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/html_code.html deleted file mode 100644 index a66b72bb6..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/html_code.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png deleted file mode 100644 index 78a06c05a..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/mstile-150x150.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/safari-pinned-tab.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/safari-pinned-tab.svg deleted file mode 100644 index db3ba7cde..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/safari-pinned-tab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/site.webmanifest b/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/site.webmanifest deleted file mode 100644 index 002445914..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/advanced-algos/favicon/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Advanced Algos", - "short_name": "Advanced Algos", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-dark.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-dark.svg deleted file mode 100644 index 1fc7d8615..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-dark.svg +++ /dev/null @@ -1 +0,0 @@ -Superalgos-logo-horz-dark \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-sm-t.png b/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-sm-t.png deleted file mode 100644 index 995d19538..000000000 Binary files a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz-sm-t.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz.svg deleted file mode 100644 index a96f0a5ee..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-horz.svg +++ /dev/null @@ -1 +0,0 @@ -Superalgos-logo-horz \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert-dark.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert-dark.svg deleted file mode 100644 index d6d2619dd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert-dark.svg +++ /dev/null @@ -1 +0,0 @@ -Superalgos-logo-vert-dark \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert.svg b/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert.svg deleted file mode 100644 index 603af5ac3..000000000 --- a/Deprecated-Code/TeamsModule/client/src/assets/logos/superalgos/Superalgos-logo-vert.svg +++ /dev/null @@ -1 +0,0 @@ -Superalgos-logo-vert_1 \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/members/GetCurrentMemberQuery.js b/Deprecated-Code/TeamsModule/client/src/graphql/members/GetCurrentMemberQuery.js deleted file mode 100644 index 18dfc7d6d..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/members/GetCurrentMemberQuery.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const GetCurrentMember = gql` - query currentMember { - teams_CurrentMember { - ...MemberInfo - } - } -` - -export default GetCurrentMember diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/members/Member.graphql b/Deprecated-Code/TeamsModule/client/src/graphql/members/Member.graphql deleted file mode 100644 index 3a3262bfd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/members/Member.graphql +++ /dev/null @@ -1,12 +0,0 @@ -#import "./Profile.graphql" - -fragment MemberInfo on Member { - id - authId - alias - role - isActive - profile { - ...MemberProfileInfo - } -} diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/members/Profile.graphql b/Deprecated-Code/TeamsModule/client/src/graphql/members/Profile.graphql deleted file mode 100644 index 4c343553c..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/members/Profile.graphql +++ /dev/null @@ -1,9 +0,0 @@ -fragment MemberProfileInfo on MemberProfile { - firstName - lastName - email - avatar - role { - name - } -} diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/members/index.js b/Deprecated-Code/TeamsModule/client/src/graphql/members/index.js deleted file mode 100644 index a53b48a41..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/members/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import { GetCurrentMember } from './GetCurrentMemberQuery' - -export { GetCurrentMember } diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/CreateTeamMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/CreateTeamMutation.js deleted file mode 100644 index 66586982c..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/CreateTeamMutation.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -const CREATE_TEAM = gql` - mutation CreateTeamMutation($name: String!, $slug: String!, $botName: String!, $botSlug: String!) { - teams_CreateTeam(name: $name, slug: $slug, botName: $botName, botSlug: $botSlug) { - id - name - slug - owner - members { - role - member { - authId - alias - } - } - } - } -` - -export default CREATE_TEAM diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/DeleteTeamMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/DeleteTeamMutation.js deleted file mode 100644 index ce02bc213..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/DeleteTeamMutation.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const DELETE_TEAM = gql` - mutation deleteTeam($slug: String!, $botSlug: String!) { - teams_DeleteTeam(slug: $slug, botSlug: $botSlug) { - id - } - } -` - -export default DELETE_TEAM diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetAllTeamsQuery.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetAllTeamsQuery.js deleted file mode 100644 index 1417f997e..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetAllTeamsQuery.js +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const GET_ALL_TEAMS_QUERY = gql` - query teamsQuery { - teams_Teams { - edges { - node { - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } - } - } - } - } -` - -export default GET_ALL_TEAMS_QUERY diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetTeamsByOwnerQuery.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetTeamsByOwnerQuery.js deleted file mode 100644 index 730769d8b..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/GetTeamsByOwnerQuery.js +++ /dev/null @@ -1,54 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const GET_TEAMS_BY_OWNER = gql` - query teamsByOwnerQuery { - teams_TeamsByOwner { - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } - } - } -` - -export default GET_TEAMS_BY_OWNER diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/RemoveTeamMemberMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/RemoveTeamMemberMutation.js deleted file mode 100644 index 26b9cda60..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/RemoveTeamMemberMutation.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const REMOVE_TEAM_MEMBER = gql` - mutation removeTeamMember($teamId: String!, $memberId: String!) { - teams_RemoveTeamMember(teamId: $teamId, memberId: $memberId) { - id - } - } -` - -export default REMOVE_TEAM_MEMBER diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/SendMemberInvite.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/SendMemberInvite.js deleted file mode 100644 index b18f0c93e..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/SendMemberInvite.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const SEND_MEMBER_INVITE = gql` - mutation sendMemberInvite($email: String!, $teamId: String!) { - teams_SendMemberInviteSG(email: $email, teamId: $teamId) - } -` - -export default SEND_MEMBER_INVITE diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/SetTeamMemberRoleMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/SetTeamMemberRoleMutation.js deleted file mode 100644 index 560185ce9..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/SetTeamMemberRoleMutation.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const SET_TEAM_MEMBER_ROLE = gql` - mutation setTeamMemberRole($teamId: String!, $memberId: String!, $role: String!) { - teams_SetTeamMemberRole(teamId: $teamId, memberId: $memberId, role: $role) { - id - } - } -` - -export default SET_TEAM_MEMBER_ROLE diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/Teams.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/Teams.js deleted file mode 100644 index 82bf7bfa7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/Teams.js +++ /dev/null @@ -1,52 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const TEAMS_FRAGMENT = gql` - fragment TeamsResponse on teams { - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } - } -` - -export default TEAMS_FRAGMENT diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UniqueTeamnameQuery.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/UniqueTeamnameQuery.js deleted file mode 100644 index 9f32df4f8..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UniqueTeamnameQuery.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -export const UniqueTeamnameQuery = gql` - query uniqueTeamname($name: String!) { - teams_TeamByName(name: $name) { - name - } - } -` - -export default UniqueTeamnameQuery diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateFBMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateFBMutation.js deleted file mode 100644 index b190dc2da..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateFBMutation.js +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -const UPDATE_FB = gql` - mutation UpdateFBMutation($fbId: String!, $avatar: String) { - teams_UpdateFB(fbId: $fbId, avatar: $avatar) { - id - name - slug - avatar - kind - } - } -` - -export default UPDATE_FB diff --git a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateTeamProfileMutation.js b/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateTeamProfileMutation.js deleted file mode 100644 index f26925aa7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/graphql/teams/UpdateTeamProfileMutation.js +++ /dev/null @@ -1,54 +0,0 @@ -/* eslint-disable no-unused-vars */ -import gql from 'graphql-tag' - -const UPDATE_TEAM_PROFILE = gql` - mutation UpdateTeamProfileMutation( - $slug: String!, - $description: String, - $motto: String, - $avatar: String, - $banner: String - ) { - teams_UpdateTeamProfile( - slug: $slug, - description: $description, - motto: $motto - avatar: $avatar, - banner: $banner - ) { - id - name - slug - owner - status { - status - reason - createdAt - } - createdAt - profile { - avatar - banner - description - motto - updatedAt - } - members { - role - email - member { - alias - authId - } - status { - id - status - reason - createdAt - } - } - } - } -` - -export default UPDATE_TEAM_PROFILE diff --git a/Deprecated-Code/TeamsModule/client/src/index.js b/Deprecated-Code/TeamsModule/client/src/index.js deleted file mode 100644 index 8a49f1b22..000000000 --- a/Deprecated-Code/TeamsModule/client/src/index.js +++ /dev/null @@ -1,79 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Route, Switch } from 'react-router-dom' -import { hot } from 'react-hot-loader' - -import { withStyles } from '@material-ui/core/styles' -import { - AcceptTeamInvite, - ManageTeams, - TeamMembers, - Settings, - Teams, - Landing, - globalStyles -} from './views' - -import { getItem } from './utils/local-storage' - -class App extends Component { - constructor (props) { - super(props) - this.state = { - user: null - } - } - - async componentDidMount () { - let user = await getItem('user') - - if (user !== null && user !== undefined && user !== 'undefined') { - user = JSON.parse(user) - this.setState({ user: user }) - } - } - - render () { - return ( -
    - - - - } - /> - } - /> - } - /> - } - /> - } - /> - - -
    - ) - } -} - -App.propTypes = { - auth: PropTypes.object -} - -const StyledApp = withStyles(globalStyles)(App) -export default hot(module)(StyledApp) diff --git a/Deprecated-Code/TeamsModule/client/src/utils/graphql-errors.js b/Deprecated-Code/TeamsModule/client/src/utils/graphql-errors.js deleted file mode 100644 index 1532260fd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/utils/graphql-errors.js +++ /dev/null @@ -1,19 +0,0 @@ -import log from './log' - -const ErrorResponse = { - 'unique constraint': 'Sorry, already taken! Please create a unique ' -} - -export const checkGraphQLError = error => { - log.debug('checkGraphQLError ', ErrorResponse, error) - const errorString = JSON.stringify(error) - /* - if (error.search(/unique constraint/)) { - const field = error.substring(error.indexOf('=') + 1) - log.debug('unique constraint', field.replace(/ +/g, '')) - } - */ - return errorString -} - -export default checkGraphQLError diff --git a/Deprecated-Code/TeamsModule/client/src/utils/js-helpers.js b/Deprecated-Code/TeamsModule/client/src/utils/js-helpers.js deleted file mode 100644 index 916f3bda9..000000000 --- a/Deprecated-Code/TeamsModule/client/src/utils/js-helpers.js +++ /dev/null @@ -1,80 +0,0 @@ -export function isDefined (d) { - return d !== null && typeof d !== 'undefined' -} - -export function isNotDefined (d) { - return !isDefined(d) -} - -export const isArray = Array.isArray - -export function isObject (d) { - return isDefined(d) && typeof d === 'object' && !Array.isArray(d) -} - -export function isEmpty (obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key)) return false - } - return true -} - -export function isString (value) { - return typeof value === 'string' || value instanceof String -} - -export function validObject (object, ...keys) { - return keys.reduce((a, b) => (a || {})[b], object) !== undefined -} - -export function mergeDeep (target, ...sources) { - if (!sources.length) return target - const source = sources.shift() - - if (isObject(target) && isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!target[key]) Object.assign(target, { [key]: {} }) - mergeDeep(target[key], source[key]) - } else { - Object.assign(target, { [key]: source[key] }) - } - } - } - return mergeDeep(target, ...sources) -} - -export function deleteCookie (c) { - document.cookie.split(';').forEach(function (c) { - document.cookie = c - .replace(/^ +/, '') - .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/') - }) -} - -export function slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text -} - -export function parse (queryString) { - var query = {} - var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&') - for (var i = 0; i < pairs.length; i++) { - var pair = pairs[i].split('=') - query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '') - } - return query -} diff --git a/Deprecated-Code/TeamsModule/client/src/utils/local-storage.js b/Deprecated-Code/TeamsModule/client/src/utils/local-storage.js deleted file mode 100644 index 963ba0f36..000000000 --- a/Deprecated-Code/TeamsModule/client/src/utils/local-storage.js +++ /dev/null @@ -1,9 +0,0 @@ -const getItem = async name => window.localStorage.getItem(name) -const setItem = async (name, value) => window.localStorage.setItem(name, value) -const removeItem = async name => window.localStorage.removeItem(name) - -export { - getItem, - setItem, - removeItem -} diff --git a/Deprecated-Code/TeamsModule/client/src/utils/log.js b/Deprecated-Code/TeamsModule/client/src/utils/log.js deleted file mode 100644 index 47e819934..000000000 --- a/Deprecated-Code/TeamsModule/client/src/utils/log.js +++ /dev/null @@ -1,7 +0,0 @@ -import minilog from 'minilog' - -if (process.env.NODE_ENV === 'development') minilog.enable() - -const log = minilog('frontend') - -export default log diff --git a/Deprecated-Code/TeamsModule/client/src/views/common/components/BannerTopBar.js b/Deprecated-Code/TeamsModule/client/src/views/common/components/BannerTopBar.js deleted file mode 100644 index 866cbfe2a..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/common/components/BannerTopBar.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import Typography from '@material-ui/core/Typography' - -const BannerTopBar = ({ - size, - backgroundUrl, - title, - text -}) => ( -
    -
    - {title} - {text} -
    -
    -) - -BannerTopBar.propTypes = { - backgroundUrl: PropTypes.string, - size: PropTypes.string, - title: PropTypes.string, - text: PropTypes.string -} - -export default BannerTopBar diff --git a/Deprecated-Code/TeamsModule/client/src/views/common/components/TeamBar.js b/Deprecated-Code/TeamsModule/client/src/views/common/components/TeamBar.js deleted file mode 100644 index 992f188fc..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/common/components/TeamBar.js +++ /dev/null @@ -1,152 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import classNames from 'classnames' -import AppBar from '@material-ui/core/AppBar' -import Toolbar from '@material-ui/core/Toolbar' -import Typography from '@material-ui/core/Typography' -import Button from '@material-ui/core/Button' - -// icons -import GroupIcon from '@material-ui/icons/Group' -import UsersIcon from '@material-ui/icons/People' -import SearchIcon from '@material-ui/icons/Search' -import AdbIcon from '@material-ui/icons/Adb' -// import SettingsApplicationsIcon from '@material-ui/icons/SettingsApplications' -import BugReportIcon from '@material-ui/icons/BugReport' - -import { Link } from 'react-router-dom' - -import log from '../../../utils/log' - -// const SettingsLink = props => -const FBLink = props => -const MembersLink = props => -const ManageLink = props => -const ViewLink = props => - -/* - -*/ - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - flex: { - flexGrow: 1, - marginLeft: 30 - }, - menuButton: { - marginLeft: -12, - marginRight: 20 - }, - cssRoot: { - color: '#FFFFFF', - backgroundColor: theme.palette.secondary, - '&:hover': { - backgroundColor: theme.palette.dark - }, - whiteSpace: 'nowrap', - paddingRight: 2 * theme.spacing.unit, - paddingLeft: 2 * theme.spacing.unit - }, - button: { - margin: theme.spacing.unit - }, - leftIcon: { - marginRight: theme.spacing.unit - }, - rightIcon: { - marginLeft: theme.spacing.unit - }, - iconSmall: { - fontSize: 20 - } -}) - -class TeamBar extends Component { - render () { - const { classes, user, match } = this.props - log.debug('TeamBar: ', user, match) - return ( -
    - - - - Teams - - - - - - - - -
    - ) - } -} - -TeamBar.propTypes = { - classes: PropTypes.object.isRequired, - user: PropTypes.object, - match: PropTypes.object -} - -export default withStyles(styles)(TeamBar) diff --git a/Deprecated-Code/TeamsModule/client/src/views/common/components/TopBarStyles.js b/Deprecated-Code/TeamsModule/client/src/views/common/components/TopBarStyles.js deleted file mode 100644 index 816d907e1..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/common/components/TopBarStyles.js +++ /dev/null @@ -1,39 +0,0 @@ -const styles = () => ({ - rootBig: { - backgroundImage: 'url(https://aacorporatesitedevelop.azurewebsites.net/img/photos/connect.jpg)', - width: '100%', - height: '100vh' - }, - rootMedium: { - backgroundImage: 'url(https://aacorporatesitedevelop.azurewebsites.net/img/photos/connect.jpg)', - width: '100%', - height: '50vh' - }, - rootSmall: { - backgroundImage: 'url(https://aacorporatesitedevelop.azurewebsites.net/img/photos/connect.jpg)', - width: '100%', - height: '220px' - }, - captions: { - position: 'relative', - top: '50%', - transform: 'translateY(-50%)' - }, - title: { - fontFamily: 'Saira', - color: 'white', - fontSize: '64px', - lineHeight: '78px', - fontWeight: 100 - }, - text: { - fontFamily: 'Saira', - color: 'white', - fontSize: '20px', - lineHeight: '30px', - fontWeight: 600, - padding: '20px 0 0.5em 0' - } -}) - -export default styles diff --git a/Deprecated-Code/TeamsModule/client/src/views/common/index.js b/Deprecated-Code/TeamsModule/client/src/views/common/index.js deleted file mode 100644 index cc64107b2..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/common/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import TeamBar from './components/TeamBar' -import BannerTopBar from './components/BannerTopBar' - -export { TeamBar, BannerTopBar } diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/FinancialBeings.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/FinancialBeings.js deleted file mode 100644 index fba9ce00d..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/FinancialBeings.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import ManageFBList from './components/ManageFBList' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -const FinancialBeings = ({ classes }) => ( -
    - - Financial Beings - - -
    -) - -FinancialBeings.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(FinancialBeings) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/ManageTeams.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/ManageTeams.js deleted file mode 100644 index e6582254f..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/ManageTeams.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import ManageTeamsList from './components/ManageTeamsList' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -const ManageTeams = ({ classes }) => ( -
    - - Manage Your Teams - - -
    -) - -ManageTeams.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(ManageTeams) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/Overview.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/Overview.js deleted file mode 100644 index 87aa217bf..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/Overview.js +++ /dev/null @@ -1,63 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' - -import DashTeam from './components/DashTeam' -import DashEditor from './components/DashEditor' - -const styles = theme => ({ - root: { - display: 'flex' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 160, - height: 160, - justifyContent: 'flex-start' - }, - buttonRight: { - justifyContent: 'flex-end' - }, - aawebMedia: { - width: '100%', - height: 320 - }, - dashLink: { - float: 'right', - color: '#111', - fontSize: 16, - textDecoration: 'none', - paddingRight: '1em' - } -}) - -export class Overview extends Component { - render () { - const { classes } = this.props - return ( - - - - - ) - } -} - -Overview.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(Overview) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/TeamMembers.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/TeamMembers.js deleted file mode 100644 index 45aa825cd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/TeamMembers.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -// import ManageTeamMembersList from './components/ManageTeamMembersList' -import { MessageCard } from '@superalgos/web-components' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -const TeamMembers = ({ classes }) => ( -
    - - Team Members - - - -
    -) - -TeamMembers.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(TeamMembers) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeam.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeam.js deleted file mode 100644 index 5e655ccf1..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeam.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' - -import Typography from '@material-ui/core/Typography' - -import { getItem } from '../../../utils/local-storage' -import { checkGraphQLError } from '../../../utils/graphql-errors' - -import CREATE_TEAM from '../../../graphql/teams/CreateTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -const CreateTeam = ({ authId }) => { - let input - log.debug('CreateTeam', authId) - - return ( - - {(createTeam, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = Submitting team... - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    -
    { - handleSubmit(e, createTeam, input) - }} - > - { - input = node - }} - /> - -
    - {loader} - {errors} -
    - ) - }} -
    - ) -} - -CreateTeam.propTypes = { - authId: PropTypes.any -} - -const handleSubmit = async (e, createTeam, input) => { - e.preventDefault() - const currentUser = await getItem('user') - let authId = JSON.parse(currentUser) - authId = authId.authId - log.debug('createTeam submit: ', authId) - const name = input.value - const slug = slugify(name) - await createTeam({ variables: { name, slug, owner: authId } }) - input.value = '' -} - -const slugify = string => { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text -} - -export default CreateTeam diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamDialog.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamDialog.js deleted file mode 100644 index 6c9ce0113..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamDialog.js +++ /dev/null @@ -1,262 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import AddIcon from '@material-ui/icons/Add' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import FormHelperText from '@material-ui/core/FormHelperText' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import { isEmpty } from '../../../utils/js-helpers' - -import CREATE_TEAM from '../../../graphql/teams/CreateTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - dialogStyle: { - padding: '3em' - }, - textField: { - width: '60%', - marginLeft: '20%', - marginBottom: 10 - }, - buttonRight: { - // position: 'absolute', - // right: '3em' - marginTop: '1em', - marginRight: 'auto', - marginLeft: 'auto', - display: 'block', - lineHeight: '1em' - } -}) - -export class CreateTeamDialog extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - this.slugify = this.slugify.bind(this) - - this.state = { - open: false, - name: '', - botName: '', - nameError: '', - botNameError: '' - } - } - - render () { - const { classes, authId } = this.props - return ( - - {(createTeam, { loading, error, data }) => { - let errors - let loader = null - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - // const displayMessage = checkGraphQLError(message) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - Create a Team - - - Create a name for your team - - {this.state.nameError !== '' && ( - {this.state.nameError} - )} -
    - Create a name for your teams bot. -
    - - (Temporary: In the future, creating multiple Financial Beings
    - will occur in a separate module)
    -
    - - {this.state.botNameError !== '' && ( - {this.state.botNameError} - )} - {error && {errors}} - {loader} -
    -
    - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - let id = e.target.id - let value = e.target.value - let error = this.validate({ id, value }) - switch (id) { - case 'name': - if (!isEmpty(error)) this.setState({ nameError: error }) - this.setState({ name: value }) - break - case 'botName': - if (!isEmpty(error)) this.setState({ botNameError: error }) - this.setState({ botName: value }) - break - default: - } - } - - async handleSubmit (e, createTeam, name, botName) { - e.preventDefault() - log.debug('createTeam submit: ', name, botName) - const slug = this.slugify(name) - const botSlug = this.slugify(botName) - await createTeam({ variables: { name, slug, botName, botSlug } }) - this.setState({ name: '', open: false }) - } - - validate (data) { - const errors = {} - switch (data.id) { - case 'name': - if (data.value === '') { - this.setState({ nameError: 'Please enter a team name' }) - } else { - this.setState({ nameError: '' }) - } - break - case 'botName': - if (data.value === '') { - this.setState({ botNameError: 'Please enter a bot name' }) - } else { - this.setState({ botNameError: '' }) - } - break - default: - } - return errors - } - - slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text - } -} - -CreateTeamDialog.propTypes = { - classes: PropTypes.object.isRequired, - authId: PropTypes.string -} - -export default withStyles(styles)(CreateTeamDialog) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamForm.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamForm.js deleted file mode 100644 index ebdbaf358..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamForm.js +++ /dev/null @@ -1,151 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withRouter } from 'react-router-dom' -import Button from '@material-ui/core/Button' -import AddIcon from '@material-ui/icons/Add' -import TextField from '@material-ui/core/TextField' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogContentText from '@material-ui/core/DialogContentText' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import log from '../../../utils/log' - -export class CreateTeamDialog extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handlePost = this.handlePost.bind(this) - this.slugify = this.slugify.bind(this) - this.handleChange = this.handleChange.bind(this) - - this.state = { - open: false, - name: '', - botName: '' - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - let value = e.target.value - switch (e.target.id) { - case 'name': - this.setState({ name: value }) - break - case 'botName': - this.setState({ botName: value }) - break - default: - } - } - - render () { - log.debug(this.props) - return ( -
    - - - Subscribe - - Team Creation - Name your team! - - Create a name for you teams bot. (Temporary: In the future, creating multiple Financial Beings will occur in a separate module) - - - - - - - -
    - ) - } - - slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text - } - - async handlePost (e) { - e.preventDefault() - const { name, botName } = this.state - const slug = this.slugify(name) - const botSlug = this.slugify(botName) - - await this.props.createTeamMutation({ - variables: { - name, - slug, - botName, - botSlug - } - }) - this.setState({ open: false, name: '', botName: '' }) - } -} - -CreateTeamDialog.propTypes = { - classes: PropTypes.object.isRequired, - createTeamMutation: PropTypes.function -} - -export default withRouter(CreateTeamDialog) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamWrapper.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamWrapper.js deleted file mode 100644 index 68750bffc..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/CreateTeamWrapper.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' - -import CreateTeam from './CreateTeam' - -const styles = theme => ({ - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 160, - height: 160, - justifyContent: 'flex-start' - } -}) - -const CreateTeamWrapper = ({ classes, authId }) => ( - - - -
    - - - -
    -
    -
    -
    -) - -CreateTeamWrapper.propTypes = { - classes: PropTypes.object.isRequired, - authId: PropTypes.string -} - -export default withStyles(styles)(CreateTeamWrapper) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashEditor.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashEditor.js deleted file mode 100644 index e985ef4aa..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashEditor.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardMedia from '@material-ui/core/CardMedia' -import CardActions from '@material-ui/core/CardActions' -import Button from '@material-ui/core/Button' - -import aaweb from '../../../assets/AlgonetWebPlatform.jpg' - -export const DashEditor = ({ classes }) => ( - - - Develop - - - - - - - - - - - - - - -) - -DashEditor.propTypes = { - classes: PropTypes.object.isRequired -} - -export default DashEditor diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeam.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeam.js deleted file mode 100644 index 225f41cfa..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeam.js +++ /dev/null @@ -1,125 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' -import { withStateHandlers, lifecycle, compose } from 'recompose' -import { Link } from 'react-router-dom' - -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import DashTeamItem from './DashTeamItem' -import CreateTeamDialog from './CreateTeamDialog' -import { MessageCard } from '@superalgos/web-components' - -import { isDefined, isString } from '../../../utils/js-helpers' -import { getItem } from '../../../utils/local-storage' - -import log from '../../../utils/log' - -export const DashTeam = ({ classes, user = null }) => { - let owner - let authId = null - log.debug('DashTeam: ', user) - if (user !== null && isString(user)) { - owner = JSON.parse(user) - if (isDefined(owner.authId)) authId = owner.authId - } - log.debug('DashTeam 2: ', owner, authId) - - if (authId === undefined || authId === null) { - return ( - - - Teams - - Loading... - - ) - } - return ( - - - Teams{' '} - - Manage Teams - - - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - let errors - let queryLoader - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return ( - - {message} - - ) - }) - } - if (!loading && !error) { - if (data.teamsByOwner.length > 0) { - return ( - - {!loading && - data.teamsByOwner.map(team => ( - - ))} - {queryLoader} - {errors} - - ) - } else { - return ( - - - - - - - - ) - } - } else { - return ( - - - Loading... - - {queryLoader} - {errors} - - ) - } - }} - - - ) -} - -DashTeam.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired -} - -const getUserOnMount = lifecycle({ - componentDidMount () { - getItem('user').then(user => { - this.setState({ user }) - }) // Set user to state - } -}) - -const mapStateToProps = withStateHandlers(() => ({ user: null }), { - user: ({ user }) => () => ({ user }) -}) - -const DashTeamAuthId = compose( - mapStateToProps, - getUserOnMount -)(DashTeam) - -export default DashTeamAuthId diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeamItem.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeamItem.js deleted file mode 100644 index 9f45155bd..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/DashTeamItem.js +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import CardActions from '@material-ui/core/CardActions' - -import ManageTeamDetails from './ManageTeamDetails' - -const styles = theme => ({ - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 160, - height: 160, - justifyContent: 'flex-start' - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -const placeholder = 'data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%22288%22%20height%3D%22225%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20288%20225%22%20preserveAspectRatio%3D%22none%22%3E%3Cdefs%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%23holder_164edaf95ee%20text%20%7B%20fill%3A%23eceeef%3Bfont-weight%3Abold%3Bfont-family%3AArial%2C%20Helvetica%2C%20Open%20Sans%2C%20sans-serif%2C%20monospace%3Bfont-size%3A14pt%20%7D%20%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22holder_164edaf95ee%22%3E%3Crect%20width%3D%22288%22%20height%3D%22225%22%20fill%3D%22%2355595c%22%3E%3C%2Frect%3E%3Cg%3E%3Ctext%20x%3D%2296.32500076293945%22%20y%3D%22118.8%22%3EThumbnail%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E' // eslint-disable-line max-len - -export const DashTeamItem = ({ classes, team }) => ( - - -
    - - - {team.name} - - {team.createdAt} - - - Members: {team.members.length} - - - - - -
    -
    -
    -) - -DashTeamItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(DashTeamItem) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/InviteMemberDialog.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/InviteMemberDialog.js deleted file mode 100644 index a81b26a72..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/InviteMemberDialog.js +++ /dev/null @@ -1,207 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import AddIcon from '@material-ui/icons/Add' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import FormHelperText from '@material-ui/core/FormHelperText' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import { isEmpty } from '../../../utils/js-helpers' - -import SEND_MEMBER_INVITE from '../../../graphql/teams/SendMemberInvite' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogStyle: { - padding: '3em' - }, - buttonRight: { - // position: 'absolute', - // right: '3em' - marginTop: '1em', - marginRight: 'auto', - marginLeft: 'auto', - display: 'block', - lineHeight: '1em' - } -}) - -export class InviteMemberDialog extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - - this.state = { - open: false, - email: '', - errors: { - email: '' - } - } - } - - render () { - const { classes, teamId } = this.props - - if (this.state.open) { - return ( - - {(sendMemberInvite, { loading, error, data }) => { - log.debug('sendMemberInvite: ', data) - let errors - let loader = null - if (loading) { - loader = ( - Submitting invitation... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - // const displayMessage = checkGraphQLError(message) - return ( - - {message} - - ) - }) - } - return ( -
    - - - Invite a New Team Member - - {(data === undefined || data.sendMemberInviteSG !== 'Success') && ( - - this.handleChange(e)} - error={this.state.errors.email !== ''} - /> - {this.state.errors.email !== '' && ( - {this.state.errors.email} - )} - {error && {errors}} - {loader} - - )} - {data !== undefined && data.sendMemberInviteSG === 'Success' && ( - Invitation successfully sent! - )} - - - {(data === undefined || data.sendMemberInviteSG !== 'Success') && ( - - - - - )} - {data !== undefined && data.sendMemberInviteSG === 'Success' && ( - - )} - - -
    - ) - }} -
    - ) - } else { - return ( - - ) - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - const errors = this.validate(e.target.value) - if (isEmpty(errors)) { - this.setState({ errors: { email: '' } }) - this.setState({ email: e.target.value }) - } else { - this.setState({ errors: errors }) - this.setState({ email: e.target.value }) - } - } - - async handleSubmit (e, sendMemberInvite, email, teamId) { - e.preventDefault() - log.debug('sendMemberInvite submit: ', email, teamId) - await sendMemberInvite({ variables: { email, teamId } }) - this.setState({ email: '' }) - } - - validate (data) { - const errors = {} - if (data === '') errors.email = 'Please enter an email address' - return errors - } -} - -InviteMemberDialog.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string -} - -export default withStyles(styles)(InviteMemberDialog) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBEdit.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBEdit.js deleted file mode 100644 index cf6d17d6d..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBEdit.js +++ /dev/null @@ -1,225 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' -import TextField from '@material-ui/core/TextField' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogContentText from '@material-ui/core/DialogContentText' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import { MessageCard, ImageUpload } from '@superalgos/web-components' - -import UPDATE_FB from '../../../graphql/teams/UpdateFBMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' - -import log from '../../../utils/log' - -import GET_AZURE_SAS from '../../../graphql/teams/GetAzureSASMutation' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageFBEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - - const avatar = props.fb.avatar || '' - this.authId = props.authId - - this.state = { - open: false, - avatar: avatar - } - } - - render () { - log.debug('ManageFBEdit ', this.props, this.props.slug, this.props.fb) - const { classes, fb, slug } = this.props - return ( - - {(updateFB, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Edit Financial Being - - - - {(getAzureSAS, { loading, error, data }) => { - log.debug('getAzureSAS: ', loading, error, data, fb) - const AzureStorageUrl = process.env.AZURE_STORAGE_URL - const containerName = slug - let AzureSASURL - if (!loading && data !== undefined) { - AzureSASURL = data.getAzureSAS - } else { - getAzureSAS({ variables: { teamSlug: containerName } }) - } - - let avatar = null - if (fb.avatar !== undefined && fb.avatar !== null) avatar = fb.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - if (this.state.avatar === null && fb.avatar === undefined) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - - if (loading || data === undefined) { - return () - } else { - return ( - - Update Financial Beings's Avatar - - - ) - } - }} - - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - async handleSubmit (e, updateFB, fbId, slug) { - log.debug('handleSubmit: ', this.state) - e.preventDefault() - - await updateFB({ - variables: { - fbId, - avatar: this.state.avatar - } - }) - this.setState({ open: false }) - } -} - -ManageFBEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - fb: PropTypes.object, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageFBEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBItem.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBItem.js deleted file mode 100644 index ea881a173..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBItem.js +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActions from '@material-ui/core/CardActions' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' - -import ManageFBEdit from './ManageFBEdit' - -import log from '../../../utils/log' - -export const ManageFBItem = ({ classes, team, authId }) => { - log.debug('ManageFBItem', team, team.fb[0], team.profile.avatar) - let avatar - if (team.fb[0].avatar !== undefined && team.fb[0].avatar !== 'a') { - avatar = team.fb[0].avatar - } else { - avatar = process.env.STORAGE_URL+'/module-teams/module-default/aa-avatar-default.png' - } - return ( - - -
    - - - - {team.fb[0].name} - - - {team.fb[0].kind} - - - - - -
    -
    -
    - ) -} - -ManageFBItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - authId: PropTypes.string.isRequired -} - -export default ManageFBItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBList.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBList.js deleted file mode 100644 index e3692f81d..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageFBList.js +++ /dev/null @@ -1,152 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' -import { withStateHandlers, lifecycle, compose } from 'recompose' - -import Grid from '@material-ui/core/Grid' -import { MessageCard } from '@superalgos/web-components' -import { withStyles } from '@material-ui/core/styles' - -import { isDefined, isString } from '../../../utils/js-helpers' -import { getItem } from '../../../utils/local-storage' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -import ManageFBItem from './ManageFBItem' -import CreateTeamDialog from './CreateTeamDialog' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageFBList = ({ classes, user = null }) => { - let owner - let authId = null - log.debug('ManageTeamsList: ', user) - if (user !== null && isString(user)) { - owner = JSON.parse(user) - if (isDefined(owner.authId)) authId = owner.authId - } - log.debug('ManageTeamsList 2: ', owner, authId) - if (authId === undefined || authId === null) { - return ( - - - - - - ) - } else { - return ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teamsByOwner.length > 0) { - return ( - - - {!loading && - data.teamsByOwner.map(team => ( - - ))} - {errors} - - - ) - } else { - return ( - - - - - - - - ) - } - } else { - return ( - - - - {errors !== null && } - - - ) - } - }} - - ) - } -} - -ManageFBList.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired -} - -const getUserOnMount = lifecycle({ - componentDidMount () { - getItem('user').then(user => { - this.setState({ user }) - }) // Set user to state - } -}) - -const mapStateToProps = withStateHandlers(() => ({ user: null }), { - user: ({ user }) => () => ({ user }) -}) - -const ManageFBListAuthId = compose( - mapStateToProps, - getUserOnMount -)(ManageFBList) - -export default withStyles(styles)(ManageFBListAuthId) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberDelete.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberDelete.js deleted file mode 100644 index e7e731703..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberDelete.js +++ /dev/null @@ -1,153 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import PersonAddDisabledIcon from '@material-ui/icons/PersonAddDisabled' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import REMOVE_TEAM_MEMBER from '../../../graphql/teams/RemoveTeamMemberMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageMemberDelete extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.teamId) - const { classes, teamId, authId } = this.props - return ( - - {(deleteTeam, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( - - - -
    - - Remove Team Member - - - - DANGER - Removing your team cannot be undone - - - Are you sure you want to remove this team member? - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, deleteTeam, teamId, memberId) { - e.preventDefault() - await deleteTeam({ variables: { teamId, memberId } }) - this.setState({ open: false }) - } -} - -ManageMemberDelete.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string -} - -export default withStyles(styles)(ManageMemberDelete) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberRole.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberRole.js deleted file mode 100644 index 08823d3b7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberRole.js +++ /dev/null @@ -1,170 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import AssignmentIndIcon from '@material-ui/icons/AssignmentInd' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import TextField from '@material-ui/core/TextField' -import MenuItem from '@material-ui/core/MenuItem' - -import SET_TEAM_MEMBER_ROLE from '../../../graphql/teams/SetTeamMemberRoleMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -const roles = [ - { role: 'Admin' }, - { role: 'Member' } -] - -export class ManageMemberRole extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false, - role: '' - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.teamId) - const { classes, teamId, authId } = this.props - return ( - - {(setTeamMemberRole, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( - - - -
    - - Set Team Member Role - - - - Admin members can approve new team members, send team invitations, and remove team members. - - this.setState({ role: e.target.value })} - fullWidth - > - {roles.map(role => ( - {role.role} - ))} - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, setTeamMemberRole, teamId, authId) { - e.preventDefault() - const role = this.state.role - await setTeamMemberRole({ variables: { teamId, memberId: authId, role: role } }) - this.setState({ open: false }) - } -} - -ManageMemberRole.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageMemberRole) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberStatus.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberStatus.js deleted file mode 100644 index b5267f098..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMemberStatus.js +++ /dev/null @@ -1,101 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import HistoryIcon from '@material-ui/icons/History' -import Dialog from '@material-ui/core/Dialog' -import Typography from '@material-ui/core/Typography' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardActions from '@material-ui/core/CardActions' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageMemberStatus extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - - this.state = { - open: false, - role: '' - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.status) - const { classes, status } = this.props - return ( -
    - - -
    - - - - Member Status Details - - {status !== null && status.map(stat => { - return ( - - {stat.status} | {stat.reason} | {stat.createdAt} - - ) - })} - - - - - -
    -
    -
    - ) - } -} - -ManageMemberStatus.propTypes = { - classes: PropTypes.object.isRequired, - status: PropTypes.array -} - -export default withStyles(styles)(ManageMemberStatus) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersItem.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersItem.js deleted file mode 100644 index 268a3f5ec..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersItem.js +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Typography from '@material-ui/core/Typography' - -import ManageMemberDelete from './ManageMemberDelete' -import ManageMemberRole from './ManageMemberRole' -import ManageMemberStatus from './ManageMemberStatus' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -export const ManageMembersItem = ({ classes, member, teamId, authId }) => { - log.debug('ManageMembersItem', member) - let profile = null - let email = null - let memberStatus = null - if (member.member !== null) { - profile = member.member - } - if (member.member === null && member.email !== null) { - email = member.email - } - if (member.status.length > 0) memberStatus = member.status - if (profile !== null || email !== null) { - return ( - - - - {profile !== null ? profile.alias : email} - - - - - {email !== null ? `${memberStatus[memberStatus.length - 1].status} | Sent: ${memberStatus[memberStatus.length - 1].createdAt}` : `${member.role} | Member since: `} - - - - { profile !== null && member.role !== 'OWNER' && ( - - )} - {(email !== null || member.role !== 'OWNER') && ( - - )} - {(email !== null || member.role !== 'OWNER') && ( - - )} - - - ) - } else { - return ( - - ) - } -} - -ManageMembersItem.propTypes = { - classes: PropTypes.object.isRequired, - member: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string.isRequired -} - -export default ManageMembersItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersTeamItem.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersTeamItem.js deleted file mode 100644 index 8738b9108..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageMembersTeamItem.js +++ /dev/null @@ -1,118 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' - -import InviteMemberDialog from './InviteMemberDialog' -import ManageMembersItem from './ManageMembersItem' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - }, - cardMemberMedia: { - flex: 1, - width: 36, - height: 36, - maxWidth: 36, - justifyContent: 'flex-start' - }, - memberContainer: { - margin: 10, - padding: 6 - } -}) - -export const ManageMembersTeamItem = ({ classes, team, authId }) => { - log.debug('ManageMembersItem', team, team.profile, team.profile.avatar) - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== 'a') { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - if (team.members.length > 0) { - return ( - - - -
    - - - - - - - - {team.name} - - - - - - - {team.members.length > 0 && team.members.map((member, index) => ( - - ))} - -
    -
    -
    -
    - ) - } else { - return - } -} - -ManageMembersTeamItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageMembersTeamItem) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDelete.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDelete.js deleted file mode 100644 index 60ffc3d62..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDelete.js +++ /dev/null @@ -1,157 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import DeleteIcon from '@material-ui/icons/Delete' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import DELETE_TEAM from '../../../graphql/teams/DeleteTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageTeamDelete extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.slug) - const { classes, authId } = this.props - return ( - - {(deleteTeam, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Delete Team Team - - - - DANGER - Deleting your team cannot be undone - - - Are you sure you want to delete this team? - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, deleteTeam, slug) { - e.preventDefault() - await deleteTeam({ variables: { slug } }) - this.setState({ open: false }) - } -} - -ManageTeamDelete.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageTeamDelete) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDetails.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDetails.js deleted file mode 100644 index b37e68d52..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamDetails.js +++ /dev/null @@ -1,173 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import DetailsIcon from '@material-ui/icons/Details' -import Dialog from '@material-ui/core/Dialog' -import Typography from '@material-ui/core/Typography' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardActions from '@material-ui/core/CardActions' -import CardMedia from '@material-ui/core/CardMedia' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardAvatarMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - }, - cardBannerMedia: { - flex: 1, - width: 600, - height: 150, - justifyContent: 'flex-start' - } -}) - -export class ManageTeamDetails extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - - this.state = { - open: false - } - } - - render () { - log.debug(this.props.team) - const { classes } = this.props - const { name, members, profile, createdAt } = this.props.team - let avatar - let banner - if (profile.avatar !== undefined && profile.avatar !== null) { - avatar = profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - if (profile.banner !== undefined && profile.banner !== null) { - banner = profile.banner - } else { - banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - } - return ( -
    - - -
    - - - - {name} Team Details - - - - - {name} - - - {createdAt} - - - Motto: {profile.motto} - - - Description: {profile.description} - - - Members: {members.length} - - - Team Admin:  - {members.map(member => { - if (member.role === 'OWNER' || member.role === 'ADMIN') { - if (member.member !== null && - member.member.alias !== undefined && - member.member.alias !== null - ) { - return member.member.alias - } - } - })} - - - - - - -
    -
    -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } -} - -ManageTeamDetails.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.any -} - -export default withStyles(styles)(ManageTeamDetails) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamEdit.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamEdit.js deleted file mode 100644 index 23e1411c3..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamEdit.js +++ /dev/null @@ -1,301 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' -import TextField from '@material-ui/core/TextField' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogContentText from '@material-ui/core/DialogContentText' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import { MessageCard, ImageUpload } from '@superalgos/web-components' - -import log from '../../../utils/log' - -import UPDATE_TEAM_PROFILE from '../../../graphql/teams/UpdateTeamProfileMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' - -import GET_AZURE_SAS from '../../../graphql/teams/GetAzureSASMutation' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageTeamEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - this.handleBanner = this.handleBanner.bind(this) - - log.debug('ManageTeamEdit', props.team) - const motto = props.team.profile.motto || '' - const description = props.team.profile.description || '' - const avatar = props.team.profile.avatar || '' - const banner = props.team.profile.banner || '' - this.authId = props.authId - - this.state = { - open: false, - motto: motto, - description: description, - avatar: avatar, - banner: banner - } - } - - render () { - log.debug('ManageTeamEdit ', this.props, this.props.slug, this.props.team) - const { classes, team } = this.props - return ( - - {(updateTeamProfile, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Edit Team Details - - - - {(getAzureSAS, { loading, error, data }) => { - log.debug('getAzureSAS: ', loading, error, data, team.profile) - const AzureStorageUrl = process.env.AZURE_STORAGE_URL - const containerName = team.slug - let AzureSASURL - if (!loading && data !== undefined) { - AzureSASURL = data.getAzureSAS - } else { - getAzureSAS({ variables: { teamSlug: containerName } }) - } - - let avatar = null - if (team.profile !== null && team.profile.avatar !== undefined && team.profile.avatar !== null) avatar = team.profile.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - if (this.state.avatar === null && team.profile !== null && team.profile.avatar === undefined) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - let banner = null - if (team.profile !== null && team.profile.banner !== undefined && team.profile.banner !== null) banner = team.profile.banner - if (this.state.banner !== null) banner = this.state.banner - if (this.state.banner === null && team.profile !== null && team.profile.banner === undefined) banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - log.debug('team images: ', avatar, banner) - - if (loading || data === undefined) { - return () - } else { - return ( - - - - - ) - } - }} - - - - Team description: - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - switch (e.target.id) { - case 'motto': - this.setState({ motto: e.target.value }) - break - case 'description': - this.setState({ description: e.target.value }) - break - default: - } - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - handleBanner (bannerUrl) { - log.debug('handleBanner: ', bannerUrl) - this.setState({ banner: `${bannerUrl}?${Math.random()}` }) - } - - async handleSubmit (e, updateTeamProfile, slug) { - log.debug('handleSubmit: ', this.state) - e.preventDefault() - - await updateTeamProfile({ - variables: { - slug, - owner: this.authId, - description: this.state.description, - motto: this.state.motto, - avatar: this.state.avatar, - banner: this.state.banner - } - }) - this.setState({ description: '', motto: '', open: false }) - } -} - -ManageTeamEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - team: PropTypes.object, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageTeamEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamMembersList.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamMembersList.js deleted file mode 100644 index 426974926..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamMembersList.js +++ /dev/null @@ -1,144 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' -import { withStateHandlers, lifecycle, compose } from 'recompose' - -import Grid from '@material-ui/core/Grid' -import { withStyles } from '@material-ui/core/styles' - -import { isDefined, isString } from '../../../utils/js-helpers' -import { getItem } from '../../../utils/local-storage' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import ManageMembersTeamItem from './ManageMembersTeamItem' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageTeamMembersList = ({ classes, user = null }) => { - let owner - let authId = null - log.debug('ManageTeamsList: ', user) - if (user !== null && isString(user)) { - owner = JSON.parse(user) - if (isDefined(owner.authId)) authId = owner.authId - } - log.debug('ManageTeamsList 2: ', owner, authId) - if (authId === undefined || authId === null) { - return ( - - - - - - ) - } else { - return ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teamsByOwner.length > 0) { - return ( - - - {!loading && - data.teamsByOwner.map(team => ( - - )) - } - {errors} - - - ) - } else { - return ( - - - - - - ) - } - } else { - return ( - - - - {errors !== null && } - - - ) - } - }} - - ) - } -} - -ManageTeamMembersList.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired -} - -const getUserOnMount = lifecycle({ - componentDidMount () { - getItem('user').then(user => { - this.setState({ user }) - }) // Set user to state - } -}) - -const mapStateToProps = withStateHandlers(() => ({ user: null }), { - user: ({ user }) => () => ({ user }) -}) - -const ManageTeamMembersListAuthId = compose( - mapStateToProps, - getUserOnMount -)(ManageTeamMembersList) - -export default withStyles(styles)(ManageTeamMembersListAuthId) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsItem.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsItem.js deleted file mode 100644 index 759132275..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsItem.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActions from '@material-ui/core/CardActions' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' - -import ManageTeamDetails from './ManageTeamDetails' -import ManageTeamDelete from './ManageTeamDelete' -import ManageTeamEdit from './ManageTeamEdit' - -import log from '../../../utils/log' - -export const ManageTeamsItem = ({ classes, team, authId }) => { - log.debug('ManageTeamsItem', team, team.profile, team.profile.avatar) - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== 'a') { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - return ( - - -
    - - - - {team.name} - - - {team.createdAt} | Members: {team.members.length} - - - - - - - -
    -
    -
    - ) -} - -ManageTeamsItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - authId: PropTypes.string.isRequired -} - -export default ManageTeamsItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsList.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsList.js deleted file mode 100644 index 187798cef..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/ManageTeamsList.js +++ /dev/null @@ -1,152 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' -import { withStateHandlers, lifecycle, compose } from 'recompose' - -import Grid from '@material-ui/core/Grid' -import { MessageCard } from '@superalgos/web-components' -import { withStyles } from '@material-ui/core/styles' - -import { isDefined, isString } from '../../../utils/js-helpers' -import { getItem } from '../../../utils/local-storage' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import ManageTeamsItem from './ManageTeamsItem' -import CreateTeamDialog from './CreateTeamDialog' - -import log from '../../../utils/log' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageTeamsList = ({ classes, user = null }) => { - let owner - let authId = null - log.debug('ManageTeamsList: ', user) - if (user !== null && isString(user)) { - owner = JSON.parse(user) - if (isDefined(owner.authId)) authId = owner.authId - } - log.debug('ManageTeamsList 2: ', owner, authId) - if (authId === undefined || authId === null) { - return ( - - - - - - ) - } else { - return ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teamsByOwner.length > 0) { - return ( - - - {!loading && - data.teamsByOwner.map(team => ( - - ))} - {errors} - - - ) - } else { - return ( - - - - - - - - ) - } - } else { - return ( - - - - {errors !== null && } - - - ) - } - }} - - ) - } -} - -ManageTeamsList.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired -} - -const getUserOnMount = lifecycle({ - componentDidMount () { - getItem('user').then(user => { - this.setState({ user }) - }) // Set user to state - } -}) - -const mapStateToProps = withStateHandlers(() => ({ user: null }), { - user: ({ user }) => () => ({ user }) -}) - -const ManageTeamsListAuthId = compose( - mapStateToProps, - getUserOnMount -)(ManageTeamsList) - -export default withStyles(styles)(ManageTeamsListAuthId) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/TeamTable.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/TeamTable.js deleted file mode 100644 index 1dec0c165..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/components/TeamTable.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import Table from '@material-ui/core/Table' -import TableBody from '@material-ui/core/TableBody' -import TableCell from '@material-ui/core/TableCell' -import TableHead from '@material-ui/core/TableHead' -import TableRow from '@material-ui/core/TableRow' -import Paper from '@material-ui/core/Paper' - -let id = 0 -const createData = (name, calories, fat, carbs, protein) => { - id += 1 - return { id, name, calories, fat, carbs, protein } -} - -const data = [ - createData('Frozen yoghurt', 159, 6.0, 24, 4.0), - createData('Ice cream sandwich', 237, 9.0, 37, 4.3), - createData('Eclair', 262, 16.0, 24, 6.0), - createData('Cupcake', 305, 3.7, 67, 4.3), - createData('Gingerbread', 356, 16.0, 49, 3.9) -] - -export const TeamTable = () => ( - - - - - Dessert (100g serving) - Calories - Fat (g) - Carbs (g) - Protein (g) - - - - {data.map(n => { - return ( - - - {n.name} - - {n.calories} - {n.fat} - {n.carbs} - {n.protein} - - ) - })} - -
    -
    -) - -export default TeamTable diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/index.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/index.js deleted file mode 100644 index 27aa8816e..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/index.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Route, Switch } from 'react-router-dom' -import { lifecycle } from 'recompose' - -import { withStyles } from '@material-ui/core/styles' -import Drawer from '@material-ui/core/Drawer' -import List from '@material-ui/core/List' -import Divider from '@material-ui/core/Divider' - -import { MainDrawerItems, SecondaryDrawerItems } from './components/DrawerLinks' - -import Overview from './Overview' -import ManageTeams from './ManageTeams' -import FinancialBeings from './FinancialBeings' -import TeamMembers from './TeamMembers' -import Settings from './settings' - -import log from '../../utils/log' - -const drawerWidth = 240 - -const styles = theme => ({ - root: { - display: 'flex' - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - appBar: { - zIndex: theme.zIndex.drawer + 1 - }, - drawerPaper: { - position: 'relative', - width: drawerWidth, - whiteSpace: 'nowrap', - zIndex: 1000 - }, - content: { - flexGrow: 1, - backgroundColor: theme.palette.background.default, - padding: theme.spacing.unit * 3, - height: '100vh', - overflow: 'auto', - width: `calc(90% - ${drawerWidth}px)` - }, - appBarSpacer: theme.mixins.toolbar -}) - -const Dashboard = ({ classes }) => ( -
    - -
    - {MainDrawerItems} - - {SecondaryDrawerItems} - -
    -
    - - - - - - - -
    -
    -) - -Dashboard.propTypes = { - classes: PropTypes.object.isRequired -} - -const DashboardCheckSession = lifecycle({ - async componentDidMount () { - try { - const authenticated = await this.props.auth.isAuthenticated() - log.debug('DashboardCheckSession res: ', authenticated) - } catch (err) { - log.debug('DashboardCheckSession err: ', err) - } - } -})(Dashboard) - -export default withStyles(styles)(DashboardCheckSession) diff --git a/Deprecated-Code/TeamsModule/client/src/views/dashboard/settings.js b/Deprecated-Code/TeamsModule/client/src/views/dashboard/settings.js deleted file mode 100644 index 339bc486f..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/dashboard/settings.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import { MessageCard } from '@superalgos/web-components' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -export const Settings = ({ classes }) => ( -
    - - Settings - -
    - -
    -
    -) - -Settings.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(Settings) diff --git a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBEdit.js b/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBEdit.js deleted file mode 100644 index 492be0071..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBEdit.js +++ /dev/null @@ -1,204 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' -import TextField from '@material-ui/core/TextField' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogContentText from '@material-ui/core/DialogContentText' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import { ImageUpload } from '@superalgos/web-components' - -import UPDATE_FB from '../../../graphql/teams/UpdateFBMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageFBEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - - const avatar = props.fb.avatar || '' - - this.state = { - open: false, - avatar: avatar - } - } - - render () { - log.debug('ManageFBEdit ', this.props, this.props.slug, this.props.fb) - const { classes, fb, slug } = this.props - return ( - - {(updateFB, { loading, error, data }) => { - const AzureStorageUrl = process.env.AZURE_STORAGE_URL_TEAMS - const AzureStorageSAS = process.env.AZURE_STORAGE_SAS_TEAMS - const containerName = slug - - let avatar = null - if (this.state.avatar === null && fb.avatar === undefined) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - if (fb.avatar !== undefined && fb.avatar !== null) avatar = fb.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Edit Financial Being - - - Update Financial Beings's Avatar - - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - async handleSubmit (e, updateFB, fbId, slug) { - log.debug('handleSubmit: ', this.state) - e.preventDefault() - - await updateFB({ - variables: { - fbId, - avatar: this.state.avatar - } - }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ open: false }) - } -} - -ManageFBEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - fb: PropTypes.object -} - -export default withStyles(styles)(ManageFBEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBItem.js b/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBItem.js deleted file mode 100644 index bd1fb2cc3..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBItem.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActions from '@material-ui/core/CardActions' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' - -import ManageFBEdit from './ManageFBEdit' - -import log from '../../../utils/log' - -export const ManageFBItem = ({ classes, team }) => { - log.debug('ManageFBItem', team, team.fb[0], team.profile.avatar) - let avatar - if (team.fb[0].avatar !== undefined && team.fb[0].avatar !== 'a') { - avatar = team.fb[0].avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - return ( - - -
    - - - - {team.fb[0].name} - - - {team.fb[0].kind} - - - - - -
    -
    -
    - ) -} - -ManageFBItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default ManageFBItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBList.js b/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBList.js deleted file mode 100644 index d17018a25..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/components/ManageFBList.js +++ /dev/null @@ -1,128 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' - -import Grid from '@material-ui/core/Grid' -import Paper from '@material-ui/core/Paper' -import Typography from '@material-ui/core/Typography' -import { MessageCard } from '@superalgos/web-components' -import { withStyles } from '@material-ui/core/styles' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -import ManageFBItem from './ManageFBItem' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - heroContent: { - maxWidth: 800, - margin: `${theme.spacing.unit * 4}px auto`, - padding: 0 - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageFBList = ({ classes }) => ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teams_TeamsByOwner.length > 0) { - return ( -
    -
    - - {!loading && - data.teams_TeamsByOwner.map(team => ( - - ))} - {errors} - -
    -
    - ) - } else { - return ( - - - - - You don’t have any financial being. To create one, create a team first! - - - After you create a team, a default trading algobot will be cloned and added to your team so - that you can begin experimenting right away. - - - - - ) - } - } else { - return ( - - - {errors === null && - - Loading... - - } - {errors !== null && - - {errors} - - } - - - ) - } - }} -
    -) - -ManageFBList.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(ManageFBList) diff --git a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/index.js b/Deprecated-Code/TeamsModule/client/src/views/financial-beings/index.js deleted file mode 100644 index 5cdfde9b5..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/financial-beings/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withStyles } from '@material-ui/core/styles' - -import { BannerTopBar } from '../common' -import ManageFBList from './components/ManageFBList' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -const FinancialBeings = ({ classes }) => ( -
    - - -
    -) - -FinancialBeings.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(FinancialBeings) diff --git a/Deprecated-Code/TeamsModule/client/src/views/index.js b/Deprecated-Code/TeamsModule/client/src/views/index.js deleted file mode 100644 index 3521019a1..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import ManageTeams from './manage-teams' -import TeamMembers from './team-members' -import FinancialBeings from './financial-beings' -import Settings from './settings' -import Teams from './teams' -import AcceptTeamInvite from './teams/AcceptTeamInvite' -import Landing from './landing' - -import { TeamBar } from './common' - -import { theme, globalStyles } from './theme' - -export { - AcceptTeamInvite, - ManageTeams, - TeamMembers, - FinancialBeings, - Settings, - Teams, - TeamBar, - Landing, - theme, - globalStyles -} diff --git a/Deprecated-Code/TeamsModule/client/src/views/landing/index.js b/Deprecated-Code/TeamsModule/client/src/views/landing/index.js deleted file mode 100644 index a76331c31..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/landing/index.js +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import { BannerTopBar } from '../common' - -const styles = theme => ({ - container: { - width: 'auto', - marginTop: theme.spacing.unit * 3, - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - } -}) - -const Landing = ({ classes, ...props }) => ( - - -
    - - Welcome to the Teams Module! - - - Multidisciplinary groups of humans joining forces to breed financial beings and compete. - -
    - - One of the core propositions of the Superalgos projects revolves around people teaming up to breed financial beings and compete in algorithmic trading competitions. Both developing and competing are team activities. - -
    -
    - - You may join and participate in as many teams as you wish. - - - When you create your own team, you become the team’s owner and may allow more people in the team at your sole discretion. It has been shown that larger teams tend to become more intelligent. - -
    -
    -
    -) - -Landing.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(Landing) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamDialog.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamDialog.js deleted file mode 100644 index d99eaa966..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamDialog.js +++ /dev/null @@ -1,256 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Button from '@material-ui/core/Button' -import AddIcon from '@material-ui/icons/Add' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import FormHelperText from '@material-ui/core/FormHelperText' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import { isEmpty } from '../../../utils/js-helpers' - -import CREATE_TEAM from '../../../graphql/teams/CreateTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - dialogStyle: { - padding: '3em' - }, - textField: { - width: '60%', - marginLeft: '20%', - marginBottom: 10 - }, - buttonFab: { - backgroundColor: '#CCCCCC' - } -}) - -export class CreateTeamDialog extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - this.slugify = this.slugify.bind(this) - - this.state = { - open: false, - name: '', - botName: '', - nameError: '', - botNameError: '' - } - } - - render () { - const { classes } = this.props - return ( - - {(createTeam, { loading, error, data }) => { - let errors - let loader = null - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - // const displayMessage = checkGraphQLError(message) - return ( - - {message} - - ) - }) - } - return ( - - - -
    - Create a Team - - - Create a name for your team - - {this.state.nameError !== '' && ( - {this.state.nameError} - )} -
    - Create a name for your teams bot. -
    - - (Temporary: In the future, creating multiple Financial Beings
    - will occur in a separate module)
    -
    - - {this.state.botNameError !== '' && ( - {this.state.botNameError} - )} - {error && {errors}} - {loader} -
    -
    - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - let id = e.target.id - let value = e.target.value - let error = this.validate({ id, value }) - switch (id) { - case 'name': - if (!isEmpty(error)) this.setState({ nameError: error }) - this.setState({ name: value }) - break - case 'botName': - if (!isEmpty(error)) this.setState({ botNameError: error }) - this.setState({ botName: value }) - break - default: - } - } - - async handleSubmit (e, createTeam, name, botName) { - e.preventDefault() - log.debug('createTeam submit: ', name, botName) - const slug = this.slugify(name) - const botSlug = this.slugify(botName) - await createTeam({ variables: { name, slug, botName, botSlug } }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ name: '', open: false }) - } - - validate (data) { - const errors = {} - switch (data.id) { - case 'name': - if (data.value === '') { - this.setState({ nameError: 'Please enter a team name' }) - } else { - this.setState({ nameError: '' }) - } - break - case 'botName': - if (data.value === '') { - this.setState({ botNameError: 'Please enter a bot name' }) - } else { - this.setState({ botNameError: '' }) - } - break - default: - } - return errors - } - - slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text - } -} - -CreateTeamDialog.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(CreateTeamDialog) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamForm.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamForm.js deleted file mode 100644 index 20942895f..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/CreateTeamForm.js +++ /dev/null @@ -1,238 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import FormHelperText from '@material-ui/core/FormHelperText' -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import { isEmpty } from '../../../utils/js-helpers' - -import CREATE_TEAM from '../../../graphql/teams/CreateTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import log from '../../../utils/log' - -const styles = theme => ({ - formContainer: { - width: '100%', - margin: '3em 0 1em' - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40 - }, - dialogStyle: { - padding: '3em' - }, - textField: { - width: '80%', - marginLeft: '10%', - marginTop: 25 - }, - submitButton: { - margin: theme.spacing.unit, - marginTop: theme.spacing.unit * 3 - } -}) - -export class CreateTeamForm extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - this.slugify = this.slugify.bind(this) - - this.state = { - open: false, - name: '', - botName: '', - nameError: '', - botNameError: '' - } - } - - render () { - const { classes } = this.props - return ( - - {(createTeam, { loading, error, data }) => { - let errors - let loader = null - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - // const displayMessage = checkGraphQLError(message) - return ( - - {message} - - ) - }) - } - return ( - - - Give a nice and memorable name to your team. - - - - {this.state.nameError !== '' && ( - {this.state.nameError} - )} - - Give a name for to the bot you are forking. - - - - - - {this.state.botNameError !== '' && ( - {this.state.botNameError} - )} - {error && {errors}} - {loader} - - - - - - - - - ) - }} - - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - let id = e.target.id - let value = e.target.value - let error = this.validate({ id, value }) - switch (id) { - case 'name': - if (!isEmpty(error)) this.setState({ nameError: error }) - this.setState({ name: value }) - break - case 'botName': - if (!isEmpty(error)) this.setState({ botNameError: error }) - this.setState({ botName: value }) - break - default: - } - } - - async handleSubmit (e, createTeam, name, botName) { - e.preventDefault() - log.debug('createTeam submit: ', name, botName) - const slug = this.slugify(name) - const botSlug = this.slugify(botName) - await createTeam({ variables: { name, slug, botName, botSlug } }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ name: '', open: false }) - } - - validate (data) { - const errors = {} - switch (data.id) { - case 'name': - if (data.value === '') { - this.setState({ nameError: 'Please enter a team name' }) - } else { - this.setState({ nameError: '' }) - } - break - case 'botName': - if (data.value === '') { - this.setState({ botNameError: 'Please enter a bot name' }) - } else { - this.setState({ botNameError: '' }) - } - break - default: - } - return errors - } - - slugify (string) { - const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' - const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' - const p = new RegExp(a.split('').join('|'), 'g') - - return string - .toString() - .toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, '-and-') // Replace & with 'and' - .replace(/[^\w-]+/g, '') // Remove all non-word characters - .replace(/--+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, '') // Trim - from end of text - } -} - -CreateTeamForm.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(CreateTeamForm) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDelete.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDelete.js deleted file mode 100644 index 711eb95c0..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDelete.js +++ /dev/null @@ -1,157 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import DeleteIcon from '@material-ui/icons/Delete' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import DELETE_TEAM from '../../../graphql/teams/DeleteTeamMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageTeamDelete extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.slug) - const { classes } = this.props - return ( - - {(deleteTeam, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Deleting team and financial being... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - log.debug('deleteTeam error:', message) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Delete Team Team - - - - DANGER - Deleting your team cannot be undone - - - Are you sure you want to delete this team? - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, deleteTeam, slug, botSlug) { - e.preventDefault() - await deleteTeam({ variables: { slug, botSlug } }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ open: false }) - } -} - -ManageTeamDelete.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - botSlug: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageTeamDelete) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDetails.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDetails.js deleted file mode 100644 index b37e68d52..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamDetails.js +++ /dev/null @@ -1,173 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import DetailsIcon from '@material-ui/icons/Details' -import Dialog from '@material-ui/core/Dialog' -import Typography from '@material-ui/core/Typography' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardActions from '@material-ui/core/CardActions' -import CardMedia from '@material-ui/core/CardMedia' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardAvatarMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - }, - cardBannerMedia: { - flex: 1, - width: 600, - height: 150, - justifyContent: 'flex-start' - } -}) - -export class ManageTeamDetails extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - - this.state = { - open: false - } - } - - render () { - log.debug(this.props.team) - const { classes } = this.props - const { name, members, profile, createdAt } = this.props.team - let avatar - let banner - if (profile.avatar !== undefined && profile.avatar !== null) { - avatar = profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - if (profile.banner !== undefined && profile.banner !== null) { - banner = profile.banner - } else { - banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - } - return ( -
    - - -
    - - - - {name} Team Details - - - - - {name} - - - {createdAt} - - - Motto: {profile.motto} - - - Description: {profile.description} - - - Members: {members.length} - - - Team Admin:  - {members.map(member => { - if (member.role === 'OWNER' || member.role === 'ADMIN') { - if (member.member !== null && - member.member.alias !== undefined && - member.member.alias !== null - ) { - return member.member.alias - } - } - })} - - - - - - -
    -
    -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } -} - -ManageTeamDetails.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.any -} - -export default withStyles(styles)(ManageTeamDetails) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamEdit.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamEdit.js deleted file mode 100644 index ca84d1388..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamEdit.js +++ /dev/null @@ -1,281 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' -import TextField from '@material-ui/core/TextField' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogContentText from '@material-ui/core/DialogContentText' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import { ImageUpload } from '@superalgos/web-components' - -import UPDATE_TEAM_PROFILE from '../../../graphql/teams/UpdateTeamProfileMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageTeamEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - this.handleBanner = this.handleBanner.bind(this) - - log.debug('ManageTeamEdit', props.team) - const motto = props.team.profile.motto || '' - const description = props.team.profile.description || '' - const avatar = props.team.profile.avatar || null - const banner = props.team.profile.banner || null - - this.state = { - open: false, - motto: motto, - description: description, - avatar: avatar, - banner: banner - } - } - - render () { - const { classes, team, match } = this.props - log.debug('ManageTeamEdit ', this.props, this.props.slug, this.props.team, match) - return ( - - {(updateTeamProfile, { loading, error, data }) => { - const AzureStorageUrl = process.env.AZURE_STORAGE_URL_TEAMS - const AzureStorageSAS = process.env.AZURE_STORAGE_SAS_TEAMS - const containerName = team.slug - let avatar = null - if (this.state.avatar === null && team.profile !== null && (team.profile.avatar === undefined || team.profile.avatar === null)) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - if (team.profile !== null && team.profile.avatar !== undefined && team.profile.avatar !== null) avatar = team.profile.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - - let banner = null - if (this.state.banner === null && team.profile !== null && (team.profile.banner === undefined || team.profile.banner === null)) banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - if (team.profile !== null && team.profile.banner !== undefined && team.profile.banner !== null) banner = team.profile.banner - if (this.state.banner !== null) banner = this.state.banner - log.debug('team images: ', avatar, banner) - - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( -
    - - -
    - - Edit Team Details - - - - - - - Team description: - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - switch (e.target.id) { - case 'motto': - this.setState({ motto: e.target.value }) - break - case 'description': - this.setState({ description: e.target.value }) - break - default: - } - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - handleBanner (bannerUrl) { - log.debug('handleBanner: ', bannerUrl) - this.setState({ banner: `${bannerUrl}?${Math.random()}` }) - } - - async handleSubmit (e, updateTeamProfile, slug) { - log.debug('handleSubmit: ', this.state) - e.preventDefault() - - await updateTeamProfile({ - variables: { - slug, - owner: this.authId, - description: this.state.description, - motto: this.state.motto, - avatar: this.state.avatar, - banner: this.state.banner - } - }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ description: '', motto: '', open: false }) - } -} - -ManageTeamEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - team: PropTypes.object, - match: PropTypes.object -} - -export default withStyles(styles)(ManageTeamEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamMembersList.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamMembersList.js deleted file mode 100644 index 7b68b8006..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamMembersList.js +++ /dev/null @@ -1,143 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' -import { withStateHandlers, lifecycle, compose } from 'recompose' - -import Grid from '@material-ui/core/Grid' -import { withStyles } from '@material-ui/core/styles' - -import { isDefined, isString } from '../../../utils/js-helpers' -import { getItem } from '../../../utils/local-storage' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import ManageMembersTeamItem from './ManageMembersTeamItem' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageTeamMembersList = ({ classes, user = null }) => { - let owner - let authId = null - log.debug('ManageTeamsList: ', user) - if (user !== null && isString(user)) { - owner = JSON.parse(user) - if (isDefined(owner.authId)) authId = owner.authId - } - log.debug('ManageTeamsList 2: ', owner, authId) - if (authId === undefined || authId === null) { - return ( - - - - - - ) - } else { - return ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teams_TeamsByOwner.length > 0) { - return ( - - - {!loading && - data.teams_TeamsByOwner.map(team => ( - - )) - } - {errors} - - - ) - } else { - return ( - - - - - - ) - } - } else { - return ( - - - - {errors !== null && } - - - ) - } - }} - - ) - } -} - -ManageTeamMembersList.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired -} - -const getUserOnMount = lifecycle({ - componentDidMount () { - getItem('user').then(user => { - this.setState({ user }) - }) // Set user to state - } -}) - -const mapStateToProps = withStateHandlers(() => ({ user: null }), { - user: ({ user }) => () => ({ user }) -}) - -const ManageTeamMembersListAuthId = compose( - mapStateToProps, - getUserOnMount -)(ManageTeamMembersList) - -export default withStyles(styles)(ManageTeamMembersListAuthId) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfile.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfile.js deleted file mode 100644 index 51297cbc9..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfile.js +++ /dev/null @@ -1,180 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' - -import Paper from '@material-ui/core/Paper' -import Grid from '@material-ui/core/Grid' -import Button from '@material-ui/core/Button' -import { withStyles } from '@material-ui/core/styles' - -import { Link } from 'react-router-dom' - -import ManageTeamProfileView from './ManageTeamProfileView' -import ManageTeamProfileEdit from './ManageTeamProfileEdit' - -import log from '../../../utils/log' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - paper: { - marginTop: 0, - marginBottom: theme.spacing.unit * 1, - padding: 0, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - marginTop: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 2, - padding: `0 0 ${theme.spacing.unit * 2}px` - } - }, - heroContent: { - maxWidth: 800, - margin: '0 auto', - padding: 0 - }, - teamContent: { - margin: `${theme.spacing.unit * 1}px ${theme.spacing.unit * 3}px 0 0` - }, - banner: { - maxWidth: '100%', - height: 'auto' - }, - avatar: { - maxWidth: 100, - height: 100, - margin: `${theme.spacing.unit * 1}px 0 0 ${theme.spacing.unit * 3}px ` - }, - profileButtons: { - width: '90%', - margin: `${theme.spacing.unit * 3}px auto 0`, - padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit * 2}px 0`, - borderTop: '1px solid #CCCCCC' - } -}) - -export class ManageTeamProfile extends Component { - constructor (props) { - super(props) - - this.toggleEdit = this.toggleEdit.bind(this) - this.handleSave = this.handleSave.bind(this) - this.handleUpdate = this.handleUpdate.bind(this) - - this.state = { - edit: false, - save: false - } - } - - render () { - const { classes, team, slug, match } = this.props - log.debug('ManageTeamProfile render', this.state) - return ( -
    -
    - -
    - {!this.state.edit && } - {this.state.edit && - - } - - {!this.state.edit && - - - - - - - - - } - {this.state.edit && - - - - - - - - - } - -
    -
    -
    -
    - ) - } - - toggleEdit () { - this.setState({ edit: !this.state.edit }) - } - - handleSave (e) { - e.preventDefault() - log.debug('handleSave') - this.setState({ save: true }) - } - - handleUpdate () { - log.debug('handleUpdate') - this.setState({ edit: false, save: false }) - } -} - -ManageTeamProfile.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - match: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageTeamProfile) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileEdit.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileEdit.js deleted file mode 100644 index 096e394ab..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileEdit.js +++ /dev/null @@ -1,379 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import TextField from '@material-ui/core/TextField' -import Typography from '@material-ui/core/Typography' - -import { ImageUpload } from '@superalgos/web-components' - -import UPDATE_TEAM_PROFILE from '../../../graphql/teams/UpdateTeamProfileMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: '100%', - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - paper: { - marginTop: 0, - marginBottom: theme.spacing.unit * 3, - padding: 0, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - marginTop: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - padding: `0 0 ${theme.spacing.unit * 2}px` - } - }, - heroContent: { - maxWidth: 800, - margin: '0 auto', - padding: `0 0 ${theme.spacing.unit * 2}px` - }, - editContentContainer: { - marginBottom: `${theme.spacing.unit * 3}px` - }, - metaContainer: { - marginTop: `${theme.spacing.unit * 1}px`, - alignSelf: 'stretch', - borderRight: '1px solid #CCCCCC' - }, - teamMeta: { - margin: `${theme.spacing.unit * 3}px 0 0`, - paddingLeft: `${theme.spacing.unit * 2}px`, - textAlign: 'center', - height: '100%' - }, - teamContent: { - '& h2': { - padding: `${theme.spacing.unit * 4}px ${theme.spacing.unit * 3}px 0` - }, - '& h4': { - padding: `0 ${theme.spacing.unit * 3}px 0` - }, - '& h6': { - padding: `0 ${theme.spacing.unit * 3}px 0` - } - }, - editInput: { - padding: `0 ${theme.spacing.unit * 3}px ${theme.spacing.unit * 2}px`, - '& label': { - display: 'none', - padding: `0 ${theme.spacing.unit * 4}px 0` - } - }, - banner: { - maxWidth: '100%', - height: 'auto', - width: '100%' - }, - avatar: { - maxWidth: 125, - height: 125, - margin: `0 auto ${theme.spacing.unit * 2}px`, - verticalAlign: 'middle', - borderRadius: '50%' - } -}) - -export class ManageTeamProfileEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - this.handleBanner = this.handleBanner.bind(this) - this.startSave = this.startSave.bind(this) - - log.debug('ManageTeamProfileEdit constructor', props.team) - const motto = props.team.profile.motto || '' - const description = props.team.profile.description || '' - const avatar = props.team.profile.avatar || null - const banner = props.team.profile.banner || null - - this.state = { - open: false, - motto: motto, - description: description, - avatar: avatar, - banner: banner, - save: false - } - } - - render () { - const { classes, team, match, save, handleUpdate } = this.props - log.debug('ManageTeamProfileEdit render', this.props, this.props.slug, this.props.team, match) - - const created = new Date(team.createdAt) - - return ( - - {(updateTeamProfile, { loading, error, data }) => { - const AzureStorageUrl = process.env.AZURE_STORAGE_URL_TEAMS - const AzureStorageSAS = process.env.AZURE_STORAGE_SAS_TEAMS - const containerName = team.slug - let avatar = null - if (this.state.avatar === null && team.profile !== null && (team.profile.avatar === undefined || team.profile.avatar === null)) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - if (team.profile !== null && team.profile.avatar !== undefined && team.profile.avatar !== null) avatar = team.profile.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - - let banner = null - if (this.state.banner === null && team.profile !== null && (team.profile.banner === undefined || team.profile.banner === null)) banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - if (team.profile !== null && team.profile.banner !== undefined && team.profile.banner !== null) banner = team.profile.banner - if (this.state.banner !== null) banner = this.state.banner - log.debug('team images: ', avatar, banner) - log.debug('saving profile status: ', save) - if (save && !this.state.save) { - log.debug('saving profile: ', save) - this.startSave(updateTeamProfile, team.slug, handleUpdate) - } - - let errors - let loader - if (loading) { - loader = ( - Updating profile... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( - - - - - - - - - - Members: {team.members.length} - - - Financial Beings: 1 - - - Created: {created.toLocaleDateString()} - - - - - - - {team.name} - - - Motto: - - - - Description: - - - - {loader} - {errors} - - - - - - ) - }} - - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - log.debug('handleChange: ', e.target.id, e.target.value) - switch (e.target.id) { - case 'motto': - this.setState({ motto: e.target.value }) - break - case 'description': - this.setState({ description: e.target.value }) - break - default: - } - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - handleBanner (bannerUrl) { - log.debug('handleBanner: ', bannerUrl) - this.setState({ banner: `${bannerUrl}?${Math.random()}` }) - } - - startSave (updateTeamProfile, slug, handleUpdate) { - this.setState({ save: 'done' }) - this.handleSubmit(updateTeamProfile, slug, handleUpdate) - } - - async handleSubmit (updateTeamProfile, slug, handleUpdate) { - log.debug('updateTeamProfile, handleSubmit: ', this.state) - await updateTeamProfile({ - variables: { - slug, - owner: this.authId, - description: this.state.description, - motto: this.state.motto, - avatar: this.state.avatar, - banner: this.state.banner - } - }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - handleUpdate() - } -} - -ManageTeamProfileEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - team: PropTypes.object, - match: PropTypes.object, - save: PropTypes.bool, - handleUpdate: PropTypes.func -} - -export default withStyles(styles)(ManageTeamProfileEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBEdit.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBEdit.js deleted file mode 100644 index 01bcedc85..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBEdit.js +++ /dev/null @@ -1,210 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' -import Dialog from '@material-ui/core/Dialog' -import DialogContent from '@material-ui/core/DialogContent' -import Typography from '@material-ui/core/Typography' - -import { ImageUpload } from '@superalgos/web-components' - -import UPDATE_FB from '../../../graphql/teams/UpdateFBMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogTitle: { - textAlign: 'center', - paddingBottom: `${theme.spacing.unit * 2}px` - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageTeamProfileFBEdit extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.handleAvatar = this.handleAvatar.bind(this) - - const avatar = props.fb.avatar || '' - - this.state = { - open: false, - avatar: avatar - } - } - - render () { - log.debug('ManageTeamProfileFBEdit ', this.props, this.props.slug, this.props.fb) - const { classes, fb, slug } = this.props - return ( - - {(updateFB, { loading, error, data }) => { - const AzureStorageUrl = process.env.AZURE_STORAGE_URL_TEAMS - const AzureStorageSAS = process.env.AZURE_STORAGE_SAS_TEAMS - const containerName = slug - - let avatar = null - if (this.state.avatar === null && fb.avatar === undefined) avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - if (fb.avatar !== undefined && fb.avatar !== null) avatar = fb.avatar - if (this.state.avatar !== null) avatar = this.state.avatar - - let errors - let loader - if (loading) { - loader = ( - Updating avatar... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('updateTeamProfile error:', displayMessage) - return ( - - {message} - - ) - }) - } - log.debug('ManageTeamProfileFBEdit mutation:', classes) - return ( -
    - - - - - - - Edit Financial Being - - - - {loader} - {errors} - - - - - - - -
    - ) - }} -
    - ) - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleAvatar (avatarUrl) { - log.debug('handleAvatar: ', avatarUrl) - this.setState({ avatar: `${avatarUrl}?${Math.random()}` }) - } - - async handleSubmit (e, updateFB, fbId, slug) { - log.debug('handleSubmit: ', this.state) - e.preventDefault() - - await updateFB({ - variables: { - fbId, - avatar: this.state.avatar - } - }) - window.canvasApp.eventHandler.raiseEvent('User Profile Changed') - this.setState({ open: false }) - } -} - -ManageTeamProfileFBEdit.propTypes = { - classes: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired, - fb: PropTypes.object -} - -export default withStyles(styles)(ManageTeamProfileFBEdit) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBView.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBView.js deleted file mode 100644 index 9e496b18e..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileFBView.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardActions from '@material-ui/core/CardActions' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import ManageTeamProfileFBEdit from './ManageTeamProfileFBEdit' - -import log from '../../../utils/log' - -const styles = theme => ({ - fbContainer: { - margin: `0 0 ${theme.spacing.unit * 2}px` - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const ManageTeamProvileFBView = ({ classes, team }) => { - log.debug('ManageTeamProvileFBView', team, team.fb[0], team.fb[0].avatar) - - let fbs = team.fb; - return fbs.map((fb, index) => { - let avatar = (fb.avatar !== undefined && fb.avatar !== null) ? fb.avatar : process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - return ( - - -
    - - - - {fb.name} - - - {fb.kind} - - - - - -
    -
    -
    - ) - }) -} - -ManageTeamProvileFBView.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(ManageTeamProvileFBView) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileView.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileView.js deleted file mode 100644 index 370c197d5..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamProfileView.js +++ /dev/null @@ -1,155 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import { withStyles } from '@material-ui/core/styles' - -import ManageTeamProfileFBView from './ManageTeamProfileFBView' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: '100%', - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - paper: { - marginTop: 0, - marginBottom: theme.spacing.unit * 3, - padding: 0, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - marginTop: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - padding: `0 0 ${theme.spacing.unit * 2}px` - } - }, - heroContent: { - maxWidth: 800, - margin: '0 auto', - padding: `0 0 ${theme.spacing.unit * 2}px` - }, - metaContainer: { - marginTop: `${theme.spacing.unit * 1}px`, - alignSelf: 'stretch', - borderRight: '1px solid #CCCCCC' - }, - teamMeta: { - margin: `${theme.spacing.unit * 3}px 0 0`, - paddingLeft: `${theme.spacing.unit * 2}px`, - textAlign: 'center' - }, - teamContent: { - '& h2': { - padding: `${theme.spacing.unit * 4}px ${theme.spacing.unit * 3}px 0` - }, - '& h4': { - padding: `0 ${theme.spacing.unit * 3}px ${theme.spacing.unit * 1}px` - }, - '& h6': { - padding: `0 ${theme.spacing.unit * 3}px 0` - } - }, - fbContent: { - borderTop: '1px solid #CCCCCC', - width: '90%', - margin: `${theme.spacing.unit * 3}px auto`, - paddingTop: `${theme.spacing.unit * 3}px` - }, - banner: { - maxWidth: '100%', - height: 'auto', - width: '100%' - }, - avatar: { - maxWidth: 125, - height: 125, - margin: `0 auto ${theme.spacing.unit * 2}px`, - verticalAlign: 'middle', - borderRadius: '50%' - }, - backLink: { - display: 'block', - textDecoration: 'none', - margin: `${theme.spacing.unit * 3}px 0 0`, - color: theme.palette.secondary.main - } -}) - -const ManageTeamProfileView = ({ classes, team }) => { - let avatar = team.profile.avatar || process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - let banner = team.profile.banner || process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - - const created = new Date(team.createdAt) - - return ( - - {team.name} - - - - {team.name} - - Members: {team.members.length} - - - Financial Beings: 1 - - - Created: {created.toLocaleDateString()} - - - - - - - {team.name} - - - Motto: {team.profile.motto} - - - Description: {team.profile.description} - - - - - Financial Beings - - - - - - - ) -} - -ManageTeamProfileView.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(ManageTeamProfileView) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsCreateTeam.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsCreateTeam.js deleted file mode 100644 index f3fc3fb94..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsCreateTeam.js +++ /dev/null @@ -1,121 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' - -import Paper from '@material-ui/core/Paper' -import Grid from '@material-ui/core/Grid' -import Button from '@material-ui/core/Button' -import { withStyles } from '@material-ui/core/styles' - -import { Link } from 'react-router-dom' - -import CreateTeamForm from './CreateTeamForm' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - paper: { - marginTop: 0, - marginBottom: theme.spacing.unit * 3, - padding: 0, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - marginTop: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - padding: `0 0 ${theme.spacing.unit * 6}px` - } - }, - heroContent: { - maxWidth: 800, - margin: '0 auto', - padding: 0 - }, - teamContent: { - margin: `${theme.spacing.unit * 1}px ${theme.spacing.unit * 3}px 0 0` - }, - banner: { - maxWidth: '100%', - height: 'auto' - }, - avatar: { - maxWidth: 100, - height: 100, - margin: `${theme.spacing.unit * 1}px 0 0 ${theme.spacing.unit * 3}px ` - }, - backLink: { - display: 'block', - textDecoration: 'none', - margin: `${theme.spacing.unit * 3}px 0 0`, - color: theme.palette.secondary.main - } -}) - -export class ManageTeamProfile extends Component { - constructor (props) { - super(props) - - this.toggleEdit = this.toggleEdit.bind(this) - this.handleSave = this.handleSave.bind(this) - - this.state = { - edit: false, - save: false - } - } - - render () { - const { classes, team, slug, match } = this.props - - return ( -
    - - - - - You don’t have any teams. Create one! - - - To begin developing on the Superalgos platform, as well as participate in Algobot competitions, - you'll need to create a team. A default trading algobot will be cloned and added to your team so - that you can begin experimenting right away. - - - - - -
    - ) - } - - toggleEdit () { - this.setState({ edit: !this.state.edit }) - } - - handleSave () { - this.setState({ save: !this.state.edit }) - } -} - -ManageTeamProfile.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - match: PropTypes.object.isRequired, - slug: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageTeamProfile) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsItem.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsItem.js deleted file mode 100644 index db7c75648..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsItem.js +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActions from '@material-ui/core/CardActions' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' -import Button from '@material-ui/core/Button' -import EditIcon from '@material-ui/icons/Edit' - -import { Link } from 'react-router-dom' - -import ManageTeamDelete from './ManageTeamDelete' - -import log from '../../../utils/log' - -export const ManageTeamsItem = ({ classes, team, match, ...props }) => { - log.debug('ManageTeamsItem', team, team.profile, team.profile.avatar) - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== 'a') { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - return ( - - -
    - - - - {team.name} - - - Members: {team.members.length} | Financial Beings: {1} - - - - - - - - -
    -
    -
    - ) -} - -ManageTeamsItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - match: PropTypes.object -} - -export default ManageTeamsItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsList.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsList.js deleted file mode 100644 index 208b440fe..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/components/ManageTeamsList.js +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' - -import Grid from '@material-ui/core/Grid' -import Paper from '@material-ui/core/Paper' -import Typography from '@material-ui/core/Typography' -import { MessageCard } from '@superalgos/web-components' -import { withStyles } from '@material-ui/core/styles' - -import { isEmpty } from '../../../utils/js-helpers' - -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import ManageTeamsItem from './ManageTeamsItem' -import ManageTeamProfile from './ManageTeamProfile' -import CreateTeamForm from './CreateTeamForm' - -import log from '../../../utils/log' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40 - }, - heroContent: { - maxWidth: 800, - margin: `${theme.spacing.unit * 4}px auto`, - padding: 0 - }, - newTeamContainer: { - padding: `${theme.spacing.unit * 4}px 0` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - }, - paper: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - } -}) - -export const ManageTeamsList = ({ classes, match, ...props }) => ( - - {({ loading, error, data }) => { - log.debug('GET_TEAMS_BY_OWNER: ', loading, error, data) - let slug = null - if (!isEmpty(match.params) && match.params.slug) slug = match.params.slug - - let errors = null - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return - }) - } - if (!loading && !error) { - if (data.teams_TeamsByOwner.length > 0) { - return ( -
    -
    - - {!loading && - data.teams_TeamsByOwner.map(team => { - if (slug === team.slug) { - return ( - - ) - } else { - return ( - - ) - } - })} - {errors} - -
    -
    - ) - } else { - return ( -
    - - - - Your First Team - - - - Whether you are a trader willing to try out the Strategizer or a developer with more complex aspirations, the first thing you will need is to create a Team. - - - At the time of Team creation, the platform will fork two template Finacial Beings to get you started. - - - - -
    - - ) - } - } else { - return ( -
    - - - {errors === null && - - Loading... - - } - {errors !== null && - - {errors} - - } - - -
    - ) - } - }} -
    -) - -ManageTeamsList.propTypes = { - user: PropTypes.any, - classes: PropTypes.object.isRequired, - match: PropTypes.object -} - -export default withStyles(styles)(ManageTeamsList) diff --git a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/index.js b/Deprecated-Code/TeamsModule/client/src/views/manage-teams/index.js deleted file mode 100644 index 6483e5a0c..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/manage-teams/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { BannerTopBar } from '../common' -import ManageTeamsList from './components/ManageTeamsList' - -const ManageTeams = ({ match, ...props }) => ( -
    - -
    - -
    -
    -) - -ManageTeams.propTypes = { - match: PropTypes.object -} - -export default ManageTeams diff --git a/Deprecated-Code/TeamsModule/client/src/views/settings/index.js b/Deprecated-Code/TeamsModule/client/src/views/settings/index.js deleted file mode 100644 index 2963580a0..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/settings/index.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import { MessageCard } from '@superalgos/web-components' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const Settings = ({ classes }) => ( - - - - Settings - -
    - -
    -
    -
    -) - -Settings.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(Settings) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/InviteMemberDialog.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/InviteMemberDialog.js deleted file mode 100644 index 422eab16c..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/InviteMemberDialog.js +++ /dev/null @@ -1,207 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { Mutation } from 'react-apollo' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import AddIcon from '@material-ui/icons/Add' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import FormHelperText from '@material-ui/core/FormHelperText' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import { isEmpty } from '../../../utils/js-helpers' - -import SEND_MEMBER_INVITE from '../../../graphql/teams/SendMemberInvite' - -// import { checkGraphQLError } from '../../../utils/graphql-errors' - -const styles = theme => ({ - dialogStyle: { - padding: '3em' - }, - buttonRight: { - // position: 'absolute', - // right: '3em' - marginTop: '1em', - marginRight: 'auto', - marginLeft: 'auto', - display: 'block', - lineHeight: '1em' - } -}) - -export class InviteMemberDialog extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - this.validate = this.validate.bind(this) - - this.state = { - open: false, - email: '', - errors: { - email: '' - } - } - } - - render () { - const { classes, teamId } = this.props - - if (this.state.open) { - return ( - - {(sendMemberInvite, { loading, error, data }) => { - console.log('sendMemberInvite: ', data) - let errors - let loader = null - if (loading) { - loader = ( - Submitting invitation... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - // const displayMessage = checkGraphQLError(message) - return ( - - {message} - - ) - }) - } - return ( -
    - - - Invite a New Team Member - - {(data === undefined || data.sendMemberInviteSG !== 'Success') && ( - - this.handleChange(e)} - error={this.state.errors.email !== ''} - /> - {this.state.errors.email !== '' && ( - {this.state.errors.email} - )} - {error && {errors}} - {loader} - - )} - {data !== undefined && data.sendMemberInviteSG === 'Success' && ( - Invitation successfully sent! - )} - - - {(data === undefined || data.sendMemberInviteSG !== 'Success') && ( - - - - - )} - {data !== undefined && data.sendMemberInviteSG === 'Success' && ( - - )} - - -
    - ) - }} -
    - ) - } else { - return ( - - ) - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - const errors = this.validate(e.target.value) - if (isEmpty(errors)) { - this.setState({ errors: { email: '' } }) - this.setState({ email: e.target.value }) - } else { - this.setState({ errors: errors }) - this.setState({ email: e.target.value }) - } - } - - async handleSubmit (e, sendMemberInvite, email, teamId) { - e.preventDefault() - console.log('sendMemberInvite submit: ', email, teamId) - await sendMemberInvite({ variables: { email, teamId } }) - this.setState({ email: '' }) - } - - validate (data) { - const errors = {} - if (data === '') errors.email = 'Please enter an email address' - return errors - } -} - -InviteMemberDialog.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string -} - -export default withStyles(styles)(InviteMemberDialog) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberDelete.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberDelete.js deleted file mode 100644 index e7e731703..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberDelete.js +++ /dev/null @@ -1,153 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import PersonAddDisabledIcon from '@material-ui/icons/PersonAddDisabled' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' - -import REMOVE_TEAM_MEMBER from '../../../graphql/teams/RemoveTeamMemberMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageMemberDelete extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.teamId) - const { classes, teamId, authId } = this.props - return ( - - {(deleteTeam, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( - - - -
    - - Remove Team Member - - - - DANGER - Removing your team cannot be undone - - - Are you sure you want to remove this team member? - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, deleteTeam, teamId, memberId) { - e.preventDefault() - await deleteTeam({ variables: { teamId, memberId } }) - this.setState({ open: false }) - } -} - -ManageMemberDelete.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string -} - -export default withStyles(styles)(ManageMemberDelete) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberRole.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberRole.js deleted file mode 100644 index 08823d3b7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberRole.js +++ /dev/null @@ -1,170 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' -import { Mutation } from 'react-apollo' - -import Button from '@material-ui/core/Button' -import AssignmentIndIcon from '@material-ui/icons/AssignmentInd' -import Dialog from '@material-ui/core/Dialog' -import DialogActions from '@material-ui/core/DialogActions' -import DialogContent from '@material-ui/core/DialogContent' -import DialogTitle from '@material-ui/core/DialogTitle' -import Typography from '@material-ui/core/Typography' -import TextField from '@material-ui/core/TextField' -import MenuItem from '@material-ui/core/MenuItem' - -import SET_TEAM_MEMBER_ROLE from '../../../graphql/teams/SetTeamMemberRoleMutation' -import GET_TEAMS_BY_OWNER from '../../../graphql/teams/GetTeamsByOwnerQuery' - -import { checkGraphQLError } from '../../../utils/graphql-errors' -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -const roles = [ - { role: 'Admin' }, - { role: 'Member' } -] - -export class ManageMemberRole extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - this.handleChange = this.handleChange.bind(this) - this.handleSubmit = this.handleSubmit.bind(this) - - this.state = { - open: false, - role: '' - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.teamId) - const { classes, teamId, authId } = this.props - return ( - - {(setTeamMemberRole, { loading, error, data }) => { - let errors - let loader - if (loading) { - loader = ( - Submitting team... - ) - } - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - const displayMessage = checkGraphQLError(message) - log.debug('createTeam error:', displayMessage) - return ( - - {message} - - ) - }) - } - return ( - - - -
    - - Set Team Member Role - - - - Admin members can approve new team members, send team invitations, and remove team members. - - this.setState({ role: e.target.value })} - fullWidth - > - {roles.map(role => ( - {role.role} - ))} - - {loader} - {errors} - - - - - -
    -
    -
    - ) - }} -
    - ) - } - - async handleSubmit (e, setTeamMemberRole, teamId, authId) { - e.preventDefault() - const role = this.state.role - await setTeamMemberRole({ variables: { teamId, memberId: authId, role: role } }) - this.setState({ open: false }) - } -} - -ManageMemberRole.propTypes = { - classes: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageMemberRole) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberStatus.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberStatus.js deleted file mode 100644 index b5267f098..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMemberStatus.js +++ /dev/null @@ -1,101 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Button from '@material-ui/core/Button' -import HistoryIcon from '@material-ui/icons/History' -import Dialog from '@material-ui/core/Dialog' -import Typography from '@material-ui/core/Typography' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardActions from '@material-ui/core/CardActions' - -import log from '../../../utils/log' - -const styles = theme => ({ - dialogContainer: { - display: 'block', - margin: '3em', - minWidth: 400 - }, - buttonRight: { - justifyContent: 'flex-end' - } -}) - -export class ManageMemberStatus extends Component { - constructor (props) { - super(props) - - this.handleClickOpen = this.handleClickOpen.bind(this) - this.handleClose = this.handleClose.bind(this) - - this.state = { - open: false, - role: '' - } - } - - handleClickOpen () { - this.setState({ open: true }) - } - - handleClose () { - this.setState({ open: false }) - } - - handleChange (e) { - this.setState({ name: e.target.value }) - } - - render () { - log.debug(this.props, this.props.status) - const { classes, status } = this.props - return ( -
    - - -
    - - - - Member Status Details - - {status !== null && status.map(stat => { - return ( - - {stat.status} | {stat.reason} | {stat.createdAt} - - ) - })} - - - - - -
    -
    -
    - ) - } -} - -ManageMemberStatus.propTypes = { - classes: PropTypes.object.isRequired, - status: PropTypes.array -} - -export default withStyles(styles)(ManageMemberStatus) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersItem.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersItem.js deleted file mode 100644 index 268a3f5ec..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersItem.js +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Typography from '@material-ui/core/Typography' - -import ManageMemberDelete from './ManageMemberDelete' -import ManageMemberRole from './ManageMemberRole' -import ManageMemberStatus from './ManageMemberStatus' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -export const ManageMembersItem = ({ classes, member, teamId, authId }) => { - log.debug('ManageMembersItem', member) - let profile = null - let email = null - let memberStatus = null - if (member.member !== null) { - profile = member.member - } - if (member.member === null && member.email !== null) { - email = member.email - } - if (member.status.length > 0) memberStatus = member.status - if (profile !== null || email !== null) { - return ( - - - - {profile !== null ? profile.alias : email} - - - - - {email !== null ? `${memberStatus[memberStatus.length - 1].status} | Sent: ${memberStatus[memberStatus.length - 1].createdAt}` : `${member.role} | Member since: `} - - - - { profile !== null && member.role !== 'OWNER' && ( - - )} - {(email !== null || member.role !== 'OWNER') && ( - - )} - {(email !== null || member.role !== 'OWNER') && ( - - )} - - - ) - } else { - return ( - - ) - } -} - -ManageMembersItem.propTypes = { - classes: PropTypes.object.isRequired, - member: PropTypes.object.isRequired, - teamId: PropTypes.string.isRequired, - authId: PropTypes.string.isRequired -} - -export default ManageMembersItem diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersTeamItem.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersTeamItem.js deleted file mode 100644 index 8738b9108..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/components/ManageMembersTeamItem.js +++ /dev/null @@ -1,118 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { withStyles } from '@material-ui/core/styles' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' - -import InviteMemberDialog from './InviteMemberDialog' -import ManageMembersItem from './ManageMembersItem' -import { MessageCard } from '@superalgos/web-components' - -import log from '../../../utils/log' - -const styles = theme => ({ - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardGrid: { - padding: `${theme.spacing.unit * 8}px 0` - }, - buttonRight: { - justifyContent: 'flex-end' - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - }, - cardMemberMedia: { - flex: 1, - width: 36, - height: 36, - maxWidth: 36, - justifyContent: 'flex-start' - }, - memberContainer: { - margin: 10, - padding: 6 - } -}) - -export const ManageMembersTeamItem = ({ classes, team, authId }) => { - log.debug('ManageMembersItem', team, team.profile, team.profile.avatar) - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== 'a') { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - if (team.members.length > 0) { - return ( - - - -
    - - - - - - - - {team.name} - - - - - - - {team.members.length > 0 && team.members.map((member, index) => ( - - ))} - -
    -
    -
    -
    - ) - } else { - return - } -} - -ManageMembersTeamItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired, - authId: PropTypes.string.isRequired -} - -export default withStyles(styles)(ManageMembersTeamItem) diff --git a/Deprecated-Code/TeamsModule/client/src/views/team-members/index.js b/Deprecated-Code/TeamsModule/client/src/views/team-members/index.js deleted file mode 100644 index 4a97162f9..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/team-members/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withStyles } from '@material-ui/core/styles' - -// import ManageTeamMembersList from './components/ManageTeamMembersList' -import { BannerTopBar } from '../common' - -const styles = theme => ({ - tableContainer: { - height: 320 - } -}) - -const TeamMembers = ({ classes }) => ( -
    - -
    -) - -TeamMembers.propTypes = { - classes: PropTypes.object.isRequired -} - -export default withStyles(styles)(TeamMembers) diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/AcceptTeamInvite.js b/Deprecated-Code/TeamsModule/client/src/views/teams/AcceptTeamInvite.js deleted file mode 100644 index 7850a46d5..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/AcceptTeamInvite.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' - -import { parse } from '../../utils/js-helpers' -import log from '../../utils/log' - -import { MessageCard } from '@superalgos/web-components' - -class AcceptTeamInvite extends Component { - render () { - const { location, auth } = this.props - const param = parse(location.search) - log.debug(param, auth) - - if (auth === undefined) { - return - } - - auth.loginInvite(param.token) - - return ( - - ) - } -} - -AcceptTeamInvite.propTypes = { - location: PropTypes.object.isRequired, - auth: PropTypes.object -} - -export default AcceptTeamInvite diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsDetails.js b/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsDetails.js deleted file mode 100644 index 4d3e84705..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsDetails.js +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Typography from '@material-ui/core/Typography' -import Paper from '@material-ui/core/Paper' -import Grid from '@material-ui/core/Grid' -import { withStyles } from '@material-ui/core/styles' - -import { Link } from 'react-router-dom' - -import TeamsFBView from './TeamsFBView' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: '100%', - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - width: 800, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - paper: { - marginTop: 0, - marginBottom: theme.spacing.unit * 3, - padding: 0, - [theme.breakpoints.up(800 + theme.spacing.unit * 3 * 2)]: { - marginTop: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - padding: `0 0 ${theme.spacing.unit * 2}px` - } - }, - heroContent: { - maxWidth: 800, - margin: '0 auto', - padding: `0 0 ${theme.spacing.unit * 2}px` - }, - metaContainer: { - marginTop: `${theme.spacing.unit * 1}px`, - alignSelf: 'stretch', - borderRight: '1px solid #CCCCCC' - }, - teamMeta: { - margin: `${theme.spacing.unit * 3}px 0 0`, - paddingLeft: `${theme.spacing.unit * 2}px`, - textAlign: 'center' - }, - teamContent: { - '& h2': { - padding: `${theme.spacing.unit * 4}px ${theme.spacing.unit * 3}px ${theme.spacing.unit * 2}px` - }, - '& h4': { - padding: `0 ${theme.spacing.unit * 3}px ${theme.spacing.unit * 2}px` - }, - '& h6': { - padding: `0 ${theme.spacing.unit * 3}px 0` - } - }, - fbContent: { - borderTop: '1px solid #CCCCCC', - width: '90%', - margin: `${theme.spacing.unit * 3}px auto`, - paddingTop: `${theme.spacing.unit * 3}px` - }, - banner: { - maxWidth: '100%', - height: 'auto', - width: '100%' - }, - avatar: { - maxWidth: 125, - height: 125, - margin: `0 auto ${theme.spacing.unit * 2}px`, - verticalAlign: 'middle', - borderRadius: '50%' - }, - backLink: { - display: 'block', - textDecoration: 'none', - margin: `${theme.spacing.unit * 3}px 0 0`, - color: theme.palette.secondary.main - } -}) - -const TeamsDetails = ({ classes, team }) => { - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== null) { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - let banner - if (team.profile.banner !== undefined && team.profile.banner !== null) { - banner = team.profile.banner - } else { - banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - } - - const created = new Date(team.createdAt) - - return ( -
    -
    - ← Back to all teams - -
    - {team.name} - - - - {team.name} - - Members: {team.members.length} - - - Financial Beings: 1 - - - Created: {created.toLocaleDateString()} - - - - - - - {team.name} - - - Motto: {team.profile.motto} - - - Description: {team.profile.description} - - - - - Financial Beings - - - - - -
    -
    -
    -
    - ) -} -TeamsDetails.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(TeamsDetails) diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsFBView.js b/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsFBView.js deleted file mode 100644 index 326db6105..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsFBView.js +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import log from '../../../utils/log' - -const styles = theme => ({ - fbContainer: { - margin: `0 0 ${theme.spacing.unit * 2}px` - }, - card: { - display: 'flex', - width: '100%' - }, - cardDetails: { - display: 'flex', - flex: 1 - }, - cardContent: { - flex: 1 - }, - cardMedia: { - flex: 1, - width: 100, - height: 100, - maxWidth: 100, - justifyContent: 'flex-start' - } -}) - -export const TeamsFBView = ({ classes, team }) => { - log.debug('ManageTeamProvileFBView', team, team.fb[0]) - let avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - if (team.fb.length > 0) { - avatar = team.fb[0].avatar - - return ( - - -
    - - - - {team.fb[0].name} - - - {team.fb[0].kind} - - -
    -
    -
    - ) - } else { - return ( - - -
    - - - No Financial Beings - - -
    -
    -
    - ) - } -} - -TeamsFBView.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(TeamsFBView) diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsItem.js b/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsItem.js deleted file mode 100644 index 666a4fcf7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsItem.js +++ /dev/null @@ -1,104 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActionArea from '@material-ui/core/CardActionArea' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' -import { withStyles } from '@material-ui/core/styles' - -import { Link } from 'react-router-dom' -// const TeamDetailsLink = ({ teamSlug, ...props }) => - -const styles = theme => ({ - card: { - height: '100%', - display: 'flex', - flexDirection: 'column' - }, - cardMedia: { - paddingTop: '25%', // 16:9 - width: '100%' - }, - cardContent: { - flexGrow: 1 - }, - avatar: { - maxWidth: 65, - height: 65, - margin: '0 0.875em 0 0', - borderRadius: '50%', - verticalAlign: 'middle', - alignSelf: 'flex-start' - }, - buttonRight: { - textDecoration: 'none' - } -}) - -export const TeamsItem = ({ classes, team }) => { - let avatar - if (team.profile.avatar !== undefined && team.profile.avatar !== 'a') { - avatar = team.profile.avatar - } else { - avatar = process.env.STORAGE_URL + '/module-teams/module-default/aa-avatar-default.png' - } - let banner - if (team.profile.banner !== undefined && team.profile.banner !== null) { - banner = team.profile.banner - } else { - banner = process.env.STORAGE_URL + '/module-teams/module-default/aa-banner-default.png' - } - return ( - - - - - - - - {team.name} - - - - - - {team.name} - - - - - - - Members: 1 - - - - - Financial Beings: 1 - - - - - - - - - - - - ) -} - -TeamsItem.propTypes = { - classes: PropTypes.object.isRequired, - team: PropTypes.object.isRequired -} - -export default withStyles(styles)(TeamsItem) diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsList.js b/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsList.js deleted file mode 100644 index c8a316dc7..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/components/TeamsList.js +++ /dev/null @@ -1,101 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import { Query } from 'react-apollo' - -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import { withStyles } from '@material-ui/core/styles' -import { MessageCard } from '@superalgos/web-components' - -import GET_ALL_TEAMS_QUERY from '../../../graphql/teams/GetAllTeamsQuery' - -import { isEmpty } from '../../../utils/js-helpers' -import log from '../../../utils/log' - -import TeamsItem from './TeamsItem' -import TeamsDetails from './TeamsDetails' - -const styles = theme => ({ - teamListsContainer: { - margin: `${theme.spacing.unit * 3}px 0 ${theme.spacing.unit * 6}px` - } -}) - -export const TeamsList = ({ classes, match }) => ( - - {({ loading, error, data, ...props }) => { - log.debug('GET_ALL_TEAMS: ', loading, error, data, match, props) - let slug = null - if (!isEmpty(match.params) && match.params.slug) slug = match.params.slug - - let errors - let queryLoader - if (error) { - errors = error.graphQLErrors.map(({ message }, i) => { - return ( - - {message} - - ) - }) - } - if (!loading && !error) { - if (data.teams_Teams.edges.length > 0) { - if (slug !== null) { - return ( - - {!loading && - data.teams_Teams.edges.map(team => { - if (team.node.slug === slug) { - return ( - - ) - } - })} - {queryLoader} - {errors} - - ) - } else { - return ( -
    - - {!loading && - data.teams_Teams.edges.map(team => ( - - ))} - {queryLoader} - {errors} - -
    - ) - } - } else { - return ( - - - - ) - } - } else { - return ( - - - {queryLoader} - {errors} - - ) - } - }} -
    -) - -TeamsList.propTypes = { - classes: PropTypes.object.isRequired, - match: PropTypes.object -} - -export default withStyles(styles)(TeamsList) diff --git a/Deprecated-Code/TeamsModule/client/src/views/teams/index.js b/Deprecated-Code/TeamsModule/client/src/views/teams/index.js deleted file mode 100644 index bec9b1368..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/teams/index.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { withStyles } from '@material-ui/core/styles' - -import { BannerTopBar } from '../common' -import TeamsList from './components/TeamsList' - -const styles = theme => ({ - root: { - flexGrow: 1 - }, - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - layout: { - width: 'auto', - marginTop: theme.spacing.unit * 3, - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - marginBottom: theme.spacing.unit * 6, - [theme.breakpoints.up(1200 + theme.spacing.unit * 3 * 2)]: { - width: 1200, - marginLeft: 'auto', - marginRight: 'auto' - } - } -}) - -const Teams = ({ classes, match }) => ( - - -
    - -
    -
    -) - -Teams.propTypes = { - classes: PropTypes.object.isRequired, - match: PropTypes.object -} - -export default withStyles(styles)(Teams) diff --git a/Deprecated-Code/TeamsModule/client/src/views/theme.js b/Deprecated-Code/TeamsModule/client/src/views/theme.js deleted file mode 100644 index 81d977e9b..000000000 --- a/Deprecated-Code/TeamsModule/client/src/views/theme.js +++ /dev/null @@ -1,72 +0,0 @@ -import { createMuiTheme } from '@material-ui/core/styles' -import indigo from '@material-ui/core/colors/indigo' -// import red from '@material-ui/core/colors/red' - -export const theme = createMuiTheme({ - palette: { - primary: { main: '#303036' }, - secondary: indigo - }, - typography: { - fontFamily: '"Saira","Saira Condensed", sans-serif' - }, - overrides: { - Paper: { - root: { - backgroundColor: '#ffffff' - }, - elevation: 0, - square: true - } - } -}) - -export const globalStyles = theme => ({ - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - appBar: { - position: 'relative' - }, - toolbarTitle: { - flex: 1 - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - [theme.breakpoints.up(900 + theme.spacing.unit * 3 * 2)]: { - width: 900, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardHeader: { - backgroundColor: theme.palette.grey[200] - }, - cardPricing: { - display: 'flex', - justifyContent: 'center', - alignItems: 'baseline', - marginBottom: theme.spacing.unit * 2 - }, - cardActions: { - [theme.breakpoints.up('sm')]: { - paddingBottom: theme.spacing.unit * 2 - } - }, - footer: { - marginTop: theme.spacing.unit * 8, - borderTop: `1px solid ${theme.palette.divider}`, - padding: `${theme.spacing.unit * 6}px 0` - } -}) - -export default theme diff --git a/Deprecated-Code/TeamsModule/client/tools/docker/Deploy.md b/Deprecated-Code/TeamsModule/client/tools/docker/Deploy.md deleted file mode 100644 index 4d12cb315..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/docker/Deploy.md +++ /dev/null @@ -1,16 +0,0 @@ -# Deploying Algo Community Portal to Linux VM - -Using Docker reverse-proxied by Docker-NGINX-LetsEncrypt [base setup](https://github.com/evertramos/docker-compose-letsencrypt-nginx-proxy-companion) - -In project root: -``` -mkdir build -cp tools/docker/deploy.yml build/deploy.yml && \ - tools/docker/Dockerfile build/Dockerfile && \ - tools/docker/nginx.conf build/nginx.conf && \ - -npm run build -cd build - -docker-compose -f deploy.yml up -d -``` \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/tools/docker/Dockerfile b/Deprecated-Code/TeamsModule/client/tools/docker/Dockerfile deleted file mode 100644 index 649483ec8..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/docker/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM nginx:1.15.0-alpine -RUN rm -rf /usr/share/nginx/html -COPY --chown=nginx:nginx . /usr/share/nginx/html -COPY nginx.conf /etc/nginx/nginx.conf -EXPOSE 80 \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/tools/docker/deploy.yml b/Deprecated-Code/TeamsModule/client/tools/docker/deploy.yml deleted file mode 100644 index 03d13005a..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/docker/deploy.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '3' -services: - node: - build: - context: ./build - dockerfile: ./build/Dockerfile - environment: - - NODE_ENV=production - - VIRTUAL_HOST=algocommunity.org - - LETSENCRYPT_HOST=algocommunity.org - - LETSENCRYPT_EMAIL=barry@algocommunity.org - - VIRTUAL_PORT=80 - container_name: algocommportal - expose: - - 80 diff --git a/Deprecated-Code/TeamsModule/client/tools/docker/nginx.conf b/Deprecated-Code/TeamsModule/client/tools/docker/nginx.conf deleted file mode 100644 index afac717f4..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/docker/nginx.conf +++ /dev/null @@ -1,17 +0,0 @@ -events {} - -http { - server { - listen 80; - - root /usr/share/nginx/html; - index index.html; - - location / { - include /etc/nginx/mime.types; - try_files $uri $uri/ /index.html; - } - - try_files $uri $uri/ /index.html; - } -} \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.common.config.js b/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.common.config.js deleted file mode 100644 index 172203a81..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.common.config.js +++ /dev/null @@ -1,25 +0,0 @@ -const pathConfig = require('./webpack.path.config') - -module.exports = { - context: pathConfig.context, - - entry: ['babel-polyfill', './src/index.js'], - - module: { - rules: [ - { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }, - { - test: /\.(png|svg|jpg|gif)$/, - use: [{ loader: 'file-loader' } - ] - }, - { - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: 'babel-loader' - } - } - ] - } -} diff --git a/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.path.config.js b/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.path.config.js deleted file mode 100644 index 4971b1cdc..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/webpack/helpers/webpack.path.config.js +++ /dev/null @@ -1,7 +0,0 @@ -const path = require('path') - -const context = path.resolve(__dirname, '../../..') - -module.exports = { - context -} diff --git a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.dev.config.js b/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.dev.config.js deleted file mode 100644 index 53c56c517..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.dev.config.js +++ /dev/null @@ -1,66 +0,0 @@ -const webpack = require('webpack') -const Dotenv = require('dotenv-webpack') -const path = require('path') -const merge = require('webpack-merge') -const history = require('connect-history-api-fallback') -const convert = require('koa-connect') -const commonConfig = require('./helpers/webpack.common.config') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') - -module.exports = merge(commonConfig, { - mode: 'development', - devtool: 'inline-sourcemap', - - output: { - path: path.resolve(__dirname, '../../build'), - filename: 'script.js' - }, - - plugins: [ - new Dotenv({ - path: '.env' - }), - new webpack.NamedModulesPlugin(), - new webpack.HotModuleReplacementPlugin({ multiStep: false }), - new HtmlWebpackPlugin({ - template: 'html/index.html', - alwaysWriteToDisk: true - }), - new ScriptExtHtmlWebpackPlugin({ - defaultAttribute: 'async' - }), - new HtmlWebpackHarddiskPlugin() - ], - module: { - rules: [ - { - test: /\.js$/, - exclude: [ - /(node_modules|bower_components)/, - ], - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/preset-react'] - } - }, - { - test: /\.s?[ac]ss$/, - loader: 'style-loader!css-loader!postcss-loader!sass-loader' - } - ] - }, - target: 'web' -}) - -module.exports.serve = { - hot: { - port: 4536 - }, - host: 'localhost', - port: 3001, - add: (app, middleware, options) => { - app.use(convert(history())) - } -} diff --git a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.npm.config.js b/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.npm.config.js deleted file mode 100644 index 67831f7cc..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.npm.config.js +++ /dev/null @@ -1,29 +0,0 @@ -const path = require('path') -const nodeExternals = require('webpack-node-externals') - -module.exports = { - entry: path.resolve(__dirname, './src/lib/index.js'), - output: { - path: path.resolve(__dirname, './dist/lib'), - filename: 'index.js', - library: '', - libraryTarget: 'commonjs' - }, - externals: [nodeExternals()], - module: { - rules: [ - { - test: /\.js$/, - exclude: /(node_modules|bower_components)/, - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/preset-react'] - } - }, - { - test: /\.css$/, - use: ['style-loader', 'css-loader'] - } - ] - } -} diff --git a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.prod.config.js b/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.prod.config.js deleted file mode 100644 index 0e543df23..000000000 --- a/Deprecated-Code/TeamsModule/client/tools/webpack/webpack.prod.config.js +++ /dev/null @@ -1,89 +0,0 @@ -const webpack = require('webpack') -const path = require('path') -const merge = require('webpack-merge') -const commonConfig = require('./helpers/webpack.common.config') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const UglifyJsPlugin = require('uglifyjs-webpack-plugin') -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin') -const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin') -const Dotenv = require('dotenv-webpack') -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') - .BundleAnalyzerPlugin - -module.exports = merge(commonConfig, { - mode: 'production', - devtool: 'inline-sourcemap', - output: { - path: path.resolve(__dirname, '../../build'), - filename: 'script.js' - }, - - optimization: { - minimizer: [ - new UglifyJsPlugin({ - cache: true, - parallel: true, - sourceMap: false - }), - new OptimizeCSSAssetsPlugin({}) - ], - splitChunks: { - cacheGroups: { - styles: { - name: 'styles', - test: /\.css$/, - chunks: 'all', - enforce: true - } - } - } - }, - plugins: [ - new Dotenv(), - new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: '[id].css' - }), - new HtmlWebpackPlugin({ - template: 'html/index.html', - alwaysWriteToDisk: true - }), - new ScriptExtHtmlWebpackPlugin({ - defaultAttribute: 'async' - }), - new HtmlWebpackHarddiskPlugin(), - new webpack.DefinePlugin({ - 'process.env.NODE_ENV': JSON.stringify('production') - }), - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - reportFilename: 'report.html' - }) - ], - module: { - rules: [ - { - test: /\.js$/, - exclude: [ - /(node_modules|bower_components)/ - ], - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/preset-react'] - } - }, - { - test: /\.scss$/, - use: [ - MiniCssExtractPlugin.loader, - { loader: 'css-loader', options: { importLoaders: 2 } }, - 'postcss-loader', - { loader: 'sass-loader' } - ] - } - ] - }, - target: 'web' -}) diff --git a/Deprecated-Code/TeamsModule/client/webpack.config.js b/Deprecated-Code/TeamsModule/client/webpack.config.js deleted file mode 100644 index 2589e2f07..000000000 --- a/Deprecated-Code/TeamsModule/client/webpack.config.js +++ /dev/null @@ -1,9 +0,0 @@ -let config = null - -if (process.env.NODE_ENV === 'production') { - config = require('./tools/webpack/webpack.prod.config.js') -} else { - config = require('./tools/webpack/webpack.dev.config.js') -} - -module.exports = config diff --git a/Deprecated-Code/TeamsModule/docs/Auth0.md b/Deprecated-Code/TeamsModule/docs/Auth0.md deleted file mode 100644 index d5e6a56c6..000000000 --- a/Deprecated-Code/TeamsModule/docs/Auth0.md +++ /dev/null @@ -1,198 +0,0 @@ -### Auth0 Integration - -[Auth0](https://auth0.com/) is a third-party service that simplifies integrating authentication into a web application. - -The main use of Auth0 will be for [Oauth 2.0](https://auth0.com/docs/protocols/oauth2) authentication requesting an [*implicit grant*](https://tools.ietf.org/html/rfc6749#section-1.3.2) flow. Auth0 also hosts the login/oauth authentication forms. - -While Auth0 provides a depth of user-security services such as authorization (scopes/roles), multi-factor authentication, currently only basic authentication will be used. - -#### Auth0 Function Flow -![Auth0 Function Flow](./assets/AATeamAuth0FunctionFlow.svg) - -Following a likely User Experience flow and revealing the Auth0 API functionality below: - -1. **User loads AAWeb app and clicks login**. App should initially check session/local storage on-load to see if user is already logged-in. For Single-sign on, can use [Auth0.checkSession](https://auth0.github.io/auth0.js/global.html#checkSession). Otherwise, a first action could be for user to click on the login button to initiate the authentication flow. -2. **AAWeb app sends authorize call to Auth0 and display universal login screen** The login screen is hosted by Auth0. A user can choose to login or signup using email/password or Oauth2 login through strategy provider like Github. After user submits and Auth0 authenticates user, it returns a callback address to the web app. -3. **AAWeb receives callback address and replies to that callback address.** -4. **Auth0 now sends back a JSON Web Token (JWT) back to AAWeb** AAWeb parses JWT and extracts id_token for user information. Saves access_token, id_token and token expiration for future authentication checks. AAWeb can make an `authenticate` mutation query to the API to create an initial account store in the database. -5. **After login, AAWeb checks for user's team information by making request to GraphQL API.** Sends a POST request with an `Authorization: Bearing `header, AAWeb queries API for `teamByOwner` using Auth0 user_info *idTokenPayload.sub* as the owner_id. -6. **GraphQL API receives query request** API parses authentication token and verifies user, compares user_id to existing user or creates a new one. Searches for any teams owned by user. Returns data in JSON format. -7. **User does not have a team and clicks on `Create Team` button** -8. User is redirected to team module client. Session is checked and if user previously logged-in, then user is automatically signed in, otherwise user has to sign-in again. *Note 1: Single-sign-on (SSO) is just a convenience function that shows a single button in login form as opposed to some "auto-login" function.* *Note 2: If user signs in with different method (ie email/pass instead of social[github]) is treated as a new user.* -9. **Auth0 sends new access_token, id_token, expiration, etc** Web app should store values for future api calls. -10. **Make authenticated API class - same as step 5** Once logged in, user can create teams, edit profile, invite others to their team, etc. -11. **Data or errors returned** Both data and errors are returned in JSON format. Data usually returned with HTTP status 204 and errors returned with status 400. - -## Integration - -There are three main areas to consider for integrating Auth0 into your client and server. - -1. **The client** — The main entry point for the user to authenticate with Auth0. This entails using the Auth0 Lock API/library that provides the login/signup screens and other supporting auth functionalities. The main mechanism for authenticating a user is enable by, upon successful login, the provisioning of an access_token — a javascript web token (JWT). -2. **Authenticating between API and Client** - While, the client may be authenticated, we still have to reconfirm that the user is who they are. This requires us to send the logged-in users access_token to the API to be reconfirm. Also, The client needs to reconfirm their authentication if the API server returns an error such as 'Not logged in' or 'JWT expired.' -3. **The API** – On the server, once we have the access token, we need to reconfirm with Auth0 that the client is who they say they are and then capture their auth0id. - -### Client -Using the Auth0 Lock package which has less "features" but allows for a more seamless experience by - -``` -npm i auth0-lock --save -``` - -On the client, I have all my auth0 logic in an [auth folder](../packages/aateam-client/src/auth) - -1. First, pull in your auth config info from your .env. -``` -export const AUTH_CONFIG = { - api_audience: process.env.AUTH0_AUDIENCE, - domain: process.env.AUTH0_DOMAIN, - clientId: process.env.AUTH0_CLIENTID, - callbackUrl: process.env.AUTH0_CALLBACK_URL, - logoutUrl: process.env.AUTH0_LOGOUT_URL -} -``` -2. Then setup the main Auth0 Lock object: -``` -const lock = new Auth0Lock(AUTH_CONFIG.clientId, AUTH_CONFIG.domain, { - oidcConformant: true, - autoclose: true, - auth: { - sso: true, - redirectUrl: window.location.origin + '/callback', - responseType: 'token id_token', - audience: `${AUTH_CONFIG.api_audience}`, - params: { - scope: `openid profile email user_metadata app_metadata picture` - } - } -}) -``` - -3. Finally, we need an Auth class that initializes the authentication process and binds it to our API. -``` -class Auth { - constructor (cb, apolloClient) { - this.handleAuthentication() - // binds functions to keep this context - this.apolloClient = apolloClient - this.cb = cb.bind(this) - this.login = this.login.bind(this) - this.logout = this.logout.bind(this) - this.isAuthenticated = this.isAuthenticated.bind(this) - this.checkSession = this.checkSession.bind(this) - } - - login () { - // Call the show method to display the widget. - lock.show() - } - - handleAuthentication () { - // Add a callback for Lock's `authenticated` event - lock.on('authenticated', this.setSession.bind(this)) - // Add a callback for Lock's `authorization_error` event - lock.on('authorization_error', err => { - console.log(err) - const data = { status: `error`, errMessage: err.error } - this.cb(data) - }) - } - - checkSession () { - // check for valid session - } - - setSession (authResult) { - // If authenticated, set session otherwise signin or create account - } - - async signinOrCreateAccount ({ accessToken, idToken, expiresAt }) { - // if session expired, sign in, and if needed, also create account - } - - logout () { - // Clear access token and ID token from local storage - ... - } - - async isAuthenticated () { - // check session and run Auth0 SS0 - ... - } -} -``` - -Once we have the auth0 library installed, configured and integrated, we need to send the auth0 access_token with our API calls and handle any auth related responses. - -For this we attach middlewares to our Apollo GraphQL client. - -1. **AuthRetryLink - Apollo Error Link:** -``` -const authRetryLink = onError(({ graphQLErrors, networkError, operation, forward }) => { - //check for GraphQL errors - if (graphQLErrors) { - // User access token has expired - // console.log('authLink: ', graphQLErrors) // check for error message to intercept and resend with Auth0 access token - if (graphQLErrors[0].message === 'Not logged in') { - // We assume we have auth0 access token needed to run the async request - // Let's refresh token through async request - return new Observable(observer => { - getItem('access_token') - .then(accessToken => { - operation.setContext(({ headers = {} }) => ({ - headers: { - // Re-add old headers - ...headers, - // Switch out old access token for new one - Authorization: `Bearer ${accessToken}` || null - } - })) - }) - .then(() => { - const subscriber = { - next: observer.next.bind(observer), - error: observer.error.bind(observer), - complete: observer.complete.bind(observer) - } - - // Retry last failed request - forward(operation).subscribe(subscriber) - }) - .catch(error => { - // No auth0 access token available, we force user to login - observer.error(error) - }) - }) - } - } -}) -``` - -2. ***AuthLink - Apollo Link:** -``` -const authLink = setContext((_, { headers }) => { - // get the authentication token from local storage if it exists - const token = window.localStorage.getItem('access_token') - // return the headers to the context so httpLink can read them - return { - headers: { - ...headers, - Authorization: token ? `Bearer ${token}` : `` - } - } -}) -``` - -Finally, we bind to Apollo client: -3. -``` -let apolloClient - -const cache = new InMemoryCache().restore(window.__APOLLO_STATE__) - -export const client = new ApolloClient({ - link: ApolloLink.from([authRetryLink, authLink, link]), - cache, - connectToDevTools: true -}) - -``` diff --git a/Deprecated-Code/TeamsModule/docs/CodeStyle.md b/Deprecated-Code/TeamsModule/docs/CodeStyle.md deleted file mode 100644 index 483afda50..000000000 --- a/Deprecated-Code/TeamsModule/docs/CodeStyle.md +++ /dev/null @@ -1,5 +0,0 @@ -# Code Styling and Formatting - -``` -npm install --save-dev eslint-config-standard eslint-config-standard-react eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node eslint-plugin-react -``` diff --git a/Deprecated-Code/TeamsModule/docs/README.md b/Deprecated-Code/TeamsModule/docs/README.md deleted file mode 100644 index 03dfbdd36..000000000 --- a/Deprecated-Code/TeamsModule/docs/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# AA Team Module Documentation - -## Architecture -Single-Page App (SPA) Modules are NodeJS applications that consist of a client-side application that loads and runs within a users browsers. While a SPA is a fully functional application and doesn't need backend support, it easily meets its limitations when relegated to solely the resources of a web browser. - -Single-page apps are able to expand their capabilities by connecting to external datasources or other services, usually through a web API(application programming interface). These APIs allow the web app to pull in curated data from other sources like trade exchanges or movie information, connect to functionality that allows the app to authenticate, create, manage and save information in databases and much more. - -### Overview -![AA Team Module Demo Architecture](./assets/AATeamDemoArchiteture.svg) - -1. Postgres Database: relational data store -2. Prisma GraphQL service: wrap Postgres as a Relational Database Manager (RDBM) -3. GraphQL API server: Provides backend support with connections to data storage and other datasources -4. NGinx Web Server: Serves the front-end web applications. HTTPS provided by LetsEncrypt. -5. https://api.algocommunity.org: The API endpoint -6. https://aaweb.algocommunity.org: The aaweb demo endpoint -7. https://algocommunity.org: the team module front-end demo endpoint -8. Auth0: Third-party service providing authentication to front-end clients and Graphql API server. -9. User Web Browser: Location where front-end web apps are loaded to - -### GraphQL -This module uses a GraphQL API server as its backend support providing it with the ability to query stored data on AA teams and members as well as create and manage that data. - -[GraphQL](https://graphql.org/) is a specification and query language for APIs and is implemented by using the [Apollo Server](https://www.apollographql.com/) platform. Behind the GraphQL API server is a Prisma service that connects to a Postgres relational database. The Prisma service acts as a lower-level GraphQL relational-database-manager wrapping the Postgres DB. - -A simple comparison between GraphQL and REST can be found at [howtographql.com](https://www.howtographql.com/basics/1-graphql-is-the-better-rest/) - -In short, this combination allows - -- rapid database development by simply creating a GraphQL schema -- connecting multiple datasource endpoints and wrapping them into a single endpoint (Postgres DB, Azure storage API, other micro-services and apis (like Sendgrid or even other AA modules) -- a single endpoint simplifies caching and authentication - -### Auth0 Integration - -[Auth0](https://auth0.com/) is a third-party service that simplifies integrating authentication into a web application. - -The main use of Auth0 will be for [Oauth 2.0](https://auth0.com/docs/protocols/oauth2) authentication requesting an [*implicit grant*](https://tools.ietf.org/html/rfc6749#section-1.3.2) flow. Auth0 also hosts the login/oauth authentication forms. - -While Auth0 provides a depth of user-security services such as authorization (scopes/roles), multi-factor authentication, currently only basic authentication will be used. - -#### Auth0 Function Flow -![Auth0 Function Flow](./assets/AATeamAuth0FunctionFlow.svg) - -Following a likely User Experience flow and revealing the Auth0 API functionality below: - -1. **User loads AAWeb app and clicks login**. App should initially check session/local storage on-load to see if user is already logged-in. For Single-sign on, can use [Auth0.checkSession](https://auth0.github.io/auth0.js/global.html#checkSession). Otherwise, a first action could be for user to click on the login button to initiate the authentication flow. -2. **AAWeb app sends authorize call to Auth0 and display universal login screen** The login screen is hosted by Auth0. A user can choose to login or signup using email/password or Oauth2 login through strategy provider like Github. After user submits and Auth0 authenticates user, it returns a callback address to the web app. -3. **AAWeb receives callback address and replies to that callback address.** -4. **Auth0 now sends back a JSON Web Token (JWT) back to AAWeb** AAWeb parses JWT and extracts id_token for user information. Saves access_token, id_token and token expiration for future authentication checks. AAWeb can make an `authenticate` mutation query to the API to create an initial account store in the database. -5. **After login, AAWeb checks for user's team information by making request to GraphQL API.** Sends a POST request with an `Authorization: Bearing `header, AAWeb queries API for `teamByOwner` using Auth0 user_info *idTokenPayload.sub* as the owner_id. -6. **GraphQL API receives query request** API parses authentication token and verifies user, compares user_id to existing user or creates a new one. Searches for any teams owned by user. Returns data in JSON format. -7. **User does not have a team and clicks on `Create Team` button** -8. User is redirected to team module client. Session is checked and if user previously logged-in, then user is automatically signed in, otherwise user has to sign-in again. *Note 1: Single-sign-on (SSO) is just a convenience function that shows a single button in login form as opposed to some "auto-login" function.* *Note 2: If user signs in with different method (ie email/pass instead of social[github]) is treated as a new user.* -9. **Auth0 sends new access_token, id_token, expiration, etc** Web app should store values for future api calls. -10. **Make authenticated API class - same as step 5** Once logged in, user can create teams, edit profile, invite others to their team, etc. -11. **Data or errors returned** Both data and errors are returned in JSON format. Data usually returned with HTTP status 204 and errors returned with status 400. - -## Working with GraphQL - -If you're unfamiliar with working with GraphQL, the best way to start is learning the [Core Concepts](https://www.howtographql.com/basics/2-core-concepts/) and reading through some of the introduction on [HowToGraphql](https://www.howtographql.com/). - -The next step is to start playing with queries in a GraphQL playground. Browse around this one: [https://api.algocommunity.org/playground](https://api.algocommunity.org/playground) - -![GraphQL Playground](./assets/AAGraphQLPlayground.png) - -1. The main query builder area. GraphQL schemas can be introspected, so auto-suggestion and linting is built in. -2. The response area: where data and errors will show up. -3. The schema documentation: The format of a GraphQL schema allows it to be "Self-documenting" showing the various queries and mutations along with their expected parameters and response forms. -4. Query Variables or Headers can be set. Especially the Authorization Header for queries/mutations that require authentication. The Bearer token is the Auth0 access_token. - -### GraphQL tutorial -1. In the playground, let's make a first query. Right now, there's really only one call that doesn't require authenticated: getting teams list. -2. A GraphQL query is written in a JSON-like format of nested layers between brackets. The main searching function is called a "query" and is started by typing **`query {}`** Go ahead an enter that in the query builder section. -3. You should notice some syntax highlighting where the last bracket is marked red and if you hover your mouse over the red, you should see a message like `Syntax Error: Expected Name.` This is useful for letting you know that your query is malformed and it this case it's just telling you that it needs a Name to query — or to be more specific, a Name of a Type to query. -4. To know what our options are, click the Schema tab on the right-hand side. We are going to query the teams and you should see a **Query called teams:TeamConnection**. -5. Go ahead and **click on the query**. What's being show is that the `query teams` returns the type TeamConnection. There are no parameters. But we can somewhat choose what shape of response we get. -6. You'll notice this query returns three main TeamConnection items: pageInfo, edges, and aggregate. **Click on Edges** You should see a type of Edges with item `node: Team` Go ahead and explore the Team item down to see our query options. [Edges/node?](https://blog.apollographql.com/explaining-graphql-connections-c48b7c3d6976) -7. Back in the query builder, let's start building our query. Since we are querying `teams` add it to your query like so: ``` query { teams }``` Notice an autocomplete will pop up to help you figure out what to type. -8. `teams` will be red, and the syntax highlighting should give you a hint. That's right, we need to tell the query what we want returned. After `teams` add `{ }` -9. The cool thing about GraphQL is we can shape our response. We could return all three main query items, but if we really only need one, then we can tell it to return one item. In this case, start typing `edges` Autocomplete will help you again, and you can hit the [Tab] key to take advantage of the suggestions. -11. You probably clicked through a fair amount of pages when exploring the teams schema. Each slideout could be thought of as another layer of brackets and you working your way down the graph until you hit the end of a connection that ends in some type of scalar like String, Int, Boolean or custom ones you defined like Date or Role. -12. So using the syntax highlighting and schema, finish creating a query. No red is usually a sign that the query form is correct. Here's an example: - -``` -query { - teams { - edges { - node { - name - owner { - nickname - } - profile { - avatar - } - } - } - } -} -``` -Go ahead and hit the large triangle button and see what you get! - -Congrats, you've created your first GraphQL query. - -### GraqphQL schema - -The Teams Module graphql schema: - -``` -enum Role { - OWNER - MANAGER - MEMBER -} - -type Team { - id: ID! @unique - createdAt: DateTime! - name: String! - slug: String! @unique - owner: Member! @relation (name: "TeamOwner", onDelete: CASCADE) - profile: TeamProfile - members: [TeamMembers!]! @relation (name: "TeamMembers", onDelete: SET_NULL) - anonymous: Boolean! @default(value: true) -} - -type TeamMembers { - id: ID! @unique - member: Member @relation (name: "MemberOnTeam", onDelete: SET_NULL) - team: Team @relation (name: "TeamMembers", onDelete: SET_NULL) - role: Role @default(value: MEMBER) -} - -type TeamProfile { - id: ID! @unique - createdAt: DateTime! - description: String - motto: String - avatar: String -} - -type Member { - id: ID! @unique - nickname: String - teams: [TeamMembers!]! @relation (name: "MemberOnTeam", onDelete: SET_NULL) - profile: MemberProfile - auth0id: String! @unique - visible: Boolean! @default(value: false) - anonymous: Boolean! @default(value: true) -} - -type MemberProfile { - id: ID! @unique - createdAt: DateTime! - bio: String - status: String - avatar: String - repo: String - email: String -} -``` diff --git a/Deprecated-Code/TeamsModule/docs/assets/AAGraphQLPlayground.png b/Deprecated-Code/TeamsModule/docs/assets/AAGraphQLPlayground.png deleted file mode 100644 index 6377de2f1..000000000 Binary files a/Deprecated-Code/TeamsModule/docs/assets/AAGraphQLPlayground.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow.svg b/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow.svg deleted file mode 100644 index 1b24c09d4..000000000 --- a/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow.svg +++ /dev/null @@ -1 +0,0 @@ -AATeamAuth0FunctionFlowAA Team Module Auth0 Function FlowAUTH0api.algocommunity.orgDOMAIN:advancedalgos1.eu.auth0.comalgocommunity.org (SPA)AAWeb.algocommunity.org (SPA) GRAPHQLAPI SERVER1573298111046 \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow@2x.png b/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow@2x.png deleted file mode 100644 index e117e23f7..000000000 Binary files a/Deprecated-Code/TeamsModule/docs/assets/AATeamAuth0FunctionFlow@2x.png and /dev/null differ diff --git a/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture.svg b/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture.svg deleted file mode 100644 index 82a58c820..000000000 --- a/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture.svg +++ /dev/null @@ -1 +0,0 @@ -AATeamDemoArchitetureAA Team Module Demo ArchitecturePRISMA GRAPHQLSERVICEPOSTGRES DBNGINX WEB SERVERAUTH0Virtual Machineteam-api2.algocommunity.orgapi.algocommunity.orgAAWeb.algocommunity.orgalgocommunity.org GRAPHQLAPI SERVERVirtual MachineUser Web BrowserSingle-Page Web App (SPA)123456798 \ No newline at end of file diff --git a/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture@2x.png b/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture@2x.png deleted file mode 100644 index 069212acd..000000000 Binary files a/Deprecated-Code/TeamsModule/docs/assets/AATeamDemoArchiteture@2x.png and /dev/null differ diff --git a/Deprecated-Code/UI/.gitattributes b/Deprecated-Code/UI/.gitattributes deleted file mode 100644 index eba1110b5..000000000 --- a/Deprecated-Code/UI/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto \ No newline at end of file diff --git a/Deprecated-Code/UI/.gitignore b/Deprecated-Code/UI/.gitignore deleted file mode 100644 index f1d32b8c8..000000000 --- a/Deprecated-Code/UI/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ - -.vs/* -obj/* -bin/* - -node_modules/* -this.server.config.json diff --git a/Deprecated-Code/UI/.vscode/settings.json b/Deprecated-Code/UI/.vscode/settings.json deleted file mode 100644 index 1bcba0f85..000000000 --- a/Deprecated-Code/UI/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.detectIndentation": false -} \ No newline at end of file diff --git a/Deprecated-Code/UI/Animation.js b/Deprecated-Code/UI/Animation.js deleted file mode 100644 index 6278b3f69..000000000 --- a/Deprecated-Code/UI/Animation.js +++ /dev/null @@ -1,174 +0,0 @@ - -function newAnimation() { - const MODULE_NAME = 'Animation' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - /* - - Essentially, what the animation object does, is to call several functions in order to draw the content of each frame. - To do that, it has an array of functions that need to be called, and it just goes one by one through them. His parent object - is responsible for providing more functions to call, or removing functions from its list when they are not longer needed. - - */ - - let animationLoopHandle // This is the handle to the animation loop. With this handle we can cancel the loop, for instance. - let callBackFunctions = new Map() - - let thisObject = { - start: start, - stop: stop, - addCallBackFunction: addCallBackFunction, - removeCallBackFunction: removeCallBackFunction, - initialize: initialize, - finalize: finalize - } - - let totalConsumption = 0 - let totalCounter = 0 - let pointerIcon - let videoRecorder - return thisObject - - function finalize() { - thisObject.stop() - pointerIcon = undefined - videoRecorder = undefined - } - - function initialize() { - videoRecorder = newVideoRecorder() - } - - function start() { - animationLoop() // Inside this function the animation process is started, and at the same time it creates a loop. - } - - function stop() { - window.cancelAnimationFrame(animationLoopHandle) - } - - function addCallBackFunction(key, callBack) { - callBackFunctions.set(key, callBack) - } - - function removeCallBackFunction(key) { - callBackFunctions.delete(key) - } - - function animationLoop() { - try { - /* First thing is to clear the actual canvas */ - clearBrowserCanvas() - - /* We loop through the callback functions collections and execute them all. */ - let performanceMap = new Map() - let totalTimeConsumed = 0 - let totalElements = 0 - let chanceToExecute - let randomNumber - let mustExecute - - // console.clear() - let row = 0 - for (const [key, callBackFunction] of callBackFunctions.entries()) { - row++ - switch (key) { - case 'Floating Space Physics': - chanceToExecute = 50 - randomNumber = Math.random() * 100 * chanceToExecute - if (randomNumber > 100 - chanceToExecute) { mustExecute = true } else { mustExecute = false } - break - default: { - mustExecute = true - } - - } - let timeConsumed = 0 - if (mustExecute === true) { - let t0 = performance.now() - callBackFunction() - let t1 = performance.now() - timeConsumed = t1 - t0 - if (key === 'Charting Space Draw') { - if (Math.random() * 100 > 99) { - totalConsumption = 0 - totalCounter = 0 - } - - totalConsumption = totalConsumption + timeConsumed - totalCounter = totalCounter + 1 - } - performanceMap.set(key, timeConsumed) - totalTimeConsumed = totalTimeConsumed + timeConsumed - totalElements++ - } - } - - /* Frame per Seconds */ - - ANIMATION_FRAME_PER_SECONDS = Math.trunc(1000 / totalTimeConsumed) - - /* Performance Check */ - if (SHOW_ANIMATION_PERFORMACE === true) { - row = 0 - for (const [key, timeConsumed] of performanceMap.entries()) { - row++ - let labelToPrint = key + ' ' + timeConsumed.toFixed(4) - UI.projects.superalgos.utilities.drawPrint.printLabel(labelToPrint, 10, 100 + row * 30, 1, 20, UI_COLOR.RED) - let percentage = timeConsumed * 100 / totalTimeConsumed - labelToPrint = key + ' ' + percentage.toFixed(1) + '%' - UI.projects.superalgos.utilities.drawPrint.printLabel(labelToPrint, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - } - - /* Other Variables */ - row++ - UI.projects.superalgos.utilities.drawPrint.printLabel(DEBUG.variable1, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - row++ - UI.projects.superalgos.utilities.drawPrint.printLabel(DEBUG.variable2, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - row++ - UI.projects.superalgos.utilities.drawPrint.printLabel(DEBUG.variable3, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - row++ - UI.projects.superalgos.utilities.drawPrint.printLabel(DEBUG.variable4, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - row++ - UI.projects.superalgos.utilities.drawPrint.printLabel('Animation Frame Per Seconds: ' + ANIMATION_FRAME_PER_SECONDS, 300, 100 + row * 30, 1, 20, UI_COLOR.RED) - } - - /* Video Recording */ - videoRecorder.physics() - if (ARE_WE_RECORDING_A_VIDEO === true) { - videoRecorder.recordCanvas() - } - - /* Panorama Recording */ - if (ARE_WE_RECORDING_A_MARKET_PANORAMA === true) { - if (PANORAMA_WAS_PANNED === true) { - UI.projects.superalgos.utilities.download.addToMarketPanorama() - PANORAMA_WAS_PANNED = false - } - } - - /* We request the next frame to be drawn, and stablishing a loop */ - - /* Use this code for full animation speed. */ - animationLoopHandle = window.requestAnimationFrame(animationLoop) - - /* Use this code for max 10 frames per second animation speed, if the app is consumming too much of your CPU. */ - /* - setTimeout(nextLoop, 100) - function nextLoop () { - animationLoopHandle = window.requestAnimationFrame(animationLoop) - } - */ - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] animationLoop -> err = ' + err.stack) } - } - } - - function clearBrowserCanvas() { - if (CAN_SPACES_DRAW === false) { return } - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.clearRect(0, 0, browserCanvas.width, browserCanvas.height) - } -} diff --git a/Deprecated-Code/UI/AppLoader.js b/Deprecated-Code/UI/AppLoader.js deleted file mode 100644 index 904f7aab1..000000000 --- a/Deprecated-Code/UI/AppLoader.js +++ /dev/null @@ -1,190 +0,0 @@ -let postLoader - -function newAppLoader() { - const MODULE_NAME = 'App Loader' - const INFO_LOG = false - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - loadModules: loadModules - } - - return thisObject - - async function loadModules() { - try { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Entering function.') } - - let plotters - let modulesArray = [] - - plotters = defaultPlotters() - - modulesArray = modulesArray.concat([ - - 'Globals.js', - 'Workspace.js', - - 'Files/SingleFile.js', - 'Files/FileCloud.js', - 'Files/MarketFiles.js', - 'Files/DailyFiles.js', - 'Files/FileCursor.js', - 'Files/FileSequence.js', - 'Files/FileStorage.js', - - 'EventsServerClient.js', - - 'LegacyPlotter.js', - 'PlotterPanel.js', - - 'VideoRecorder.js', - 'ProductStorage.js', - 'Canvas.js', - 'EventHandler.js', - 'Frame.js', - 'Animation.js', - 'Container.js', - 'Utilities.js', - 'AppPostLoader.js' - ]) - - modulesArray = modulesArray.concat(plotters) - - functionLibraries() - - function functionLibraries() { - let url = 'ListFunctionLibraries' - callWebServer(undefined, url, onResponse) - - function onResponse(err, fileList) { - let urlArray = [] - let fileArray = JSON.parse(fileList) - for (let i = 0; i < fileArray.length; i++) { - let item = fileArray[i] - - project = item[0] - fileName = item[1] - urlArray.push('Projects' + '/' + project + '/' + 'Function-Libraries' + '/' + fileName) - } - - modulesArray = modulesArray.concat(urlArray) - utilities() - } - } - - function utilities() { - let url = 'ListUtilitiesFiles' - callWebServer(undefined, url, onResponse) - - function onResponse(err, fileList) { - let urlArray = [] - let fileArray = JSON.parse(fileList) - for (let i = 0; i < fileArray.length; i++) { - let item = fileArray[i] - - project = item[0] - fileName = item[1] - urlArray.push('Projects' + '/' + project + '/' + 'Utilities' + '/' + fileName) - } - - modulesArray = modulesArray.concat(urlArray) - globals() - } - } - - function globals() { - let url = 'ListGlobalFiles' - callWebServer(undefined, url, onResponse) - - function onResponse(err, fileList) { - let urlArray = [] - let fileArray = JSON.parse(fileList) - for (let i = 0; i < fileArray.length; i++) { - let item = fileArray[i] - - project = item[0] - fileName = item[1] - urlArray.push('Projects' + '/' + project + '/' + 'Globals' + '/' + fileName) - } - - modulesArray = modulesArray.concat(urlArray) - spaces() - } - } - - function spaces() { - let url = 'ListSpaceFiles' - callWebServer(undefined, url, onResponse) - - function onResponse(err, fileList) { - let urlArray = [] - let fileArray = JSON.parse(fileList) - for (let i = 0; i < fileArray.length; i++) { - let path = fileArray[i] - urlArray.push('Projects' + '/' + path) - } - - modulesArray = modulesArray.concat(urlArray) - downloadIncludedFiles() - } - } - - function downloadIncludedFiles() { - - let downloadedCounter = 0 - - for (let i = 0; i < modulesArray.length; i++) { - let path = modulesArray[i] - - REQUIREJS([path], onRequired) - - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Module Requested.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> path = ' + path) } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> total requested = ' + (i + 1)) } - - function onRequired(pModule) { - try { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Entering function.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Module Downloaded.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> path = ' + path) } - - downloadedCounter++ - - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> downloadedCounter = ' + downloadedCounter) } - - if (downloadedCounter === modulesArray.length) { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Starting Advanced Algos Platform.') } - setTimeout(() => { - postLoader = newAppPostLoader() - postLoader.start() - }, 500) - - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> onRequired -> err = ' + err.stack) } - } - } - } - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> err = ' + err.stack) } - } - } - - function defaultPlotters() { - return [ - 'Plotters/Masters/Plotters-Candles-Volumes/Candles.js', - 'Plotters/Masters/Plotters-Candles-Volumes/CandlePanel.js', - 'Plotters/Masters/Plotters-Candles-Volumes/Volumes.js', - 'Plotters/Masters/Plotters-Candles-Volumes/VolumePanel.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBands.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBandsPanel.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/PercentageBandwidth.js' - ] - } -} - diff --git a/Deprecated-Code/UI/AppPostLoader.js b/Deprecated-Code/UI/AppPostLoader.js deleted file mode 100644 index cfb5488db..000000000 --- a/Deprecated-Code/UI/AppPostLoader.js +++ /dev/null @@ -1,147 +0,0 @@ - - -function newAppPostLoader() { - const MODULE_NAME = 'Post Loader' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - start: start - } - - return thisObject - - function start() { - try { - /* Moving PROJECTS_ARRAY to the global variable */ - PROJECTS_ARRAY = window.PROJECTS - window.PROJECTS = undefined - - setBrowserEvents() - setupProjectsSchema() - - function setupProjectsSchema() { - callWebServer(undefined, 'ProjectsSchema', onResponse) - - function onResponse(err, file) { - PROJECTS_SCHEMA = JSON.parse(file) - setupSchemas() - } - } - - function setupSchemas() { - - let totalWebServerCalls = 0 - let webServerResponses = 0 - - for (let i = 0; i < PROJECTS_ARRAY.length; i++) { - let project = PROJECTS_ARRAY[i] - let schemas = { - array: { - appSchema: [], - docSchema: [], - conceptSchema: [] - }, - map: { - appSchema: new Map(), - docSchema: new Map(), - conceptSchema: new Map() - } - } - SCHEMAS_BY_PROJECT.set(project, schemas) - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/AppSchema', onResponseAppSchema) - - function onResponseAppSchema(err, schema) { - try { - schemas.array.appSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.appSchema.length; j++) { - let nodeDefinition = schemas.array.appSchema[j] - let key = nodeDefinition.type - schemas.map.appSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/DocSchema', onResponseDocSchema) - - function onResponseDocSchema(err, schema) { - try { - schemas.array.docSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.docSchema.length; j++) { - let nodeDefinition = schemas.array.docSchema[j] - let key = nodeDefinition.type - schemas.map.docSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/ConceptSchema', onResponseConceptSchema) - - function onResponseConceptSchema(err, schema) { - try { - schemas.array.conceptSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.conceptSchema.length; j++) { - let nodeDefinition = schemas.array.conceptSchema[j] - let key = nodeDefinition.type - schemas.map.conceptSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - } - } - - function startCanvas() { - /* If this method is executed for a second time, it should finalize the current execution structure */ - if (canvas !== undefined) { canvas.finalize() } - - canvas = newCanvas() - canvas.initialize() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] start -> err = ' + err.stack) } - } - } - - function setBrowserEvents() { - window.onbeforeunload = saveWorkspace - - /* handles backspace and refresh(F5) from keyboard */ - window.manageBackRefresh = function (event) { - var tag = event.target.tagName.toLowerCase() - if (event.keyCode === 8 && tag !== 'input' && tag !== 'textarea') { // Backbutton pressed - saveWorkspace() - } else if (event.keyCode === 116) { // F5 pressed - saveWorkspace() - } - } - - window.addEventListener('keydown', window.manageBackRefresh) - - function saveWorkspace() { - UI.projects.superalgos.spaces.designSpace.workspace.save() - } - } -} diff --git a/Deprecated-Code/UI/AppPreLoader.js b/Deprecated-Code/UI/AppPreLoader.js deleted file mode 100644 index 2e9df25c5..000000000 --- a/Deprecated-Code/UI/AppPreLoader.js +++ /dev/null @@ -1,158 +0,0 @@ - -/* Callbacks default responses. */ - -let GLOBAL = {}; - -GLOBAL.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" -}; - -GLOBAL.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" -}; - -GLOBAL.DEFAULT_RETRY_RESPONSE = { - result: "Retry", - message: "Retry Later" -}; - -GLOBAL.CUSTOM_OK_RESPONSE = { - result: "Ok, but check Message", - message: "Custom Message" -}; - -GLOBAL.CUSTOM_FAIL_RESPONSE = { - result: "Fail Because", - message: "Custom Message" -}; - -let browserCanvas; // This is the canvas object of the browser. - -function spacePad(str, max) { - str = str.toString(); - return str.length < max ? spacePad(" " + str, max) : str; -} - -function loadSuperalgos() { - - const MODULE_NAME = "App Pre-Loader"; - const INFO_LOG = false; - - setupHTMLTextArea() - setupHTMLInput() - setupHTMLCanvas() - loadDebugModule() - - function setupHTMLTextArea() { - let textArea = document.createElement('textarea'); - textArea.id = "textArea"; - textArea.spellcheck = false; - textArea.style = 'resize: none;' + - ' border: none;' + - ' outline: none;' + - 'box-shadow: none;' + - 'overflow:hidden;' + - 'font-family: ' + 'Saira' + ';' + - 'font-size: 12px;' + - 'background-color: rgb(255, 255, 255);' + - 'color:rgb(255, 255, 255);' + - 'width: ' + 600 + 'px;' + - 'height: ' + 400 + 'px' - - let textAreaDiv = document.getElementById('textAreaDiv'); - textAreaDiv.appendChild(textArea); - textAreaDiv.style = 'position:fixed; top:' + -1500 + 'px; left:' + 500 + 'px; z-index:10; ' - } - - function setupHTMLInput() { - let input = document.createElement('input'); - input.id = "input"; - input.spellcheck = false; - input.style = "border: none; outline: none; box-shadow: none; overflow:hidden; width: 0px; height: 0px;"; - - let inputDiv = document.getElementById('inputDiv'); - inputDiv.appendChild(input); - } - - function setupHTMLCanvas() { - let canvas = document.createElement('canvas'); - - canvas.id = "canvas"; - canvas.width = 1400; - canvas.height = 600; - canvas.style.border = "0"; - canvas.style = "position:absolute; top:0px; left:0px; z-index:1"; - - let canvasApp = document.getElementById('canvasApp'); - canvasApp.appendChild(canvas); - - browserCanvas = document.getElementById('canvas'); - - browserCanvas.width = window.innerWidth; - browserCanvas.height = window.innerHeight; - browserCanvas.style.border = "none"; - - browserCanvas.style.top = 0 + 'px'; - } - - function loadDebugModule() { - let path = "WebDebugLog.js"; - REQUIREJS([path], onRequired); - - function onRequired(pModule) { - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] " + path + " downloaded."); } - setUpProjects(); - } - } - - function setUpProjects() { - let url = 'ProjectNames' - callWebServer(undefined, url, onResponse) - - function onResponse(err, projects) { - window.PROJECTS = JSON.parse(projects) - loadModules() - } - } - - /* And Finally, we start loading all the scripts we will inmediatelly need. */ - function loadModules() { - let path = "AppLoader.js"; - REQUIREJS([path], onRequired); - - function onRequired(pModule) { - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] " + path + " downloaded."); } - let APP_LOADER_MODULE = newAppLoader(); - APP_LOADER_MODULE.loadModules(); - } - } -} - -function callWebServer(pContentToSend, pPath, callBackFunction) { - let xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function () { - if (this.readyState === 4 && this.status === 200) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, xhttp.responseText); - return; - } else if (this.readyState === 4 && this.status === 404) { - callBackFunction({ result: "Fail", message: xhttp.responseText.trim(), code: xhttp.responseText.trim() }); - return; - } - }; - - if (pContentToSend === undefined) { - xhttp.open("GET", pPath, true); - xhttp.send(); - } else { - try { - let blob = new Blob([pContentToSend], { type: 'text/plain' }); - xhttp.open("POST", pPath, true); - xhttp.send(blob); - } catch (err) { - if (ERROR_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] callServer -> err.message = " & err.message); } - callBackFunction({ result: "Fail", message: err.message }) - } - } -} diff --git a/Deprecated-Code/UI/CODE_OF_CONDUCT.md b/Deprecated-Code/UI/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/UI/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/UI/CONTRIBUTING.md b/Deprecated-Code/UI/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/UI/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/UI/Canvas.js b/Deprecated-Code/UI/Canvas.js deleted file mode 100644 index d39333ada..000000000 --- a/Deprecated-Code/UI/Canvas.js +++ /dev/null @@ -1,1082 +0,0 @@ - -let browserCanvasContext // The context of the canvas object. - -function newCanvas() { - const MODULE_NAME = 'Canvas' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - /* Mouse event related variables. */ - - let containerDragStarted = false - let floatingObjectDragStarted = false - let containerBeingDragged - let viewPortBeingDragged = false - let ignoreNextClick = false - - let dragVector = { - downX: 0, - downY: 0, - upX: 0, - upY: 0 - } - - /* canvas object */ - - let thisObject = { - eventHandler: undefined, - animation: undefined, - mouse: undefined, - shorcutNumbers: new Map(), - onKeyDown: onKeyDown, - initialize: initialize, - finalize: finalize - } - - thisObject.eventHandler = newEventHandler() - - let lastContainerMouseOver - - thisObject.mouse = { - position: { - x: 0, - y: 0 - }, - action: '' - } - - return thisObject - - function finalize() { - try { - UI.projects.superalgos.spaces.tutorialSpace.finalize() - UI.projects.superalgos.spaces.docSpace.finalize() - //thisObject.chatSpace.finalize() - UI.projects.superalgos.spaces.sideSpace.finalize() - UI.projects.superalgos.spaces.chartingSpace.finalize() - UI.projects.superalgos.spaces.floatingSpace.finalize() - thisObject.shorcutNumbers = undefined - - if (browserCanvas.removeEventListener) { - browserCanvas.removeEventListener('mousewheel', onMouseWheel, false)// IE9, Chrome, Safari, Opera - browserCanvas.removeEventListener('DOMMouseScroll', onMouseWheel, false) // Firefox - browserCanvas.removeEventListener('mousedown', onMouseDown, false) - browserCanvas.removeEventListener('mouseup', onMouseUp, false) - browserCanvas.removeEventListener('mousemove', onMouseMove, false) - browserCanvas.removeEventListener('click', onMouseClick, false) - browserCanvas.removeEventListener('mouseout', onMouseOut, false) - - browserCanvas.removeEventListener('dragenter', onDragEnter, false) - browserCanvas.removeEventListener('dragleave', onDragLeave, false) - browserCanvas.removeEventListener('dragover', onDragOver, false) - browserCanvas.removeEventListener('drop', onDragDrop, false) - - browserCanvas.removeEventListener('keydown', onKeyDown, false) - browserCanvas.removeEventListener('keyup', onKeyUp, false) - } else { - browserCanvas.detachEvent('onmousewheel', onMouseWheel) // IE 6/7/8 - } - - lastContainerMouseOver = undefined - - thisObject.mouse = undefined - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize() { - try { - - browserResized() - initializeBrowserCanvas() - addCanvasEvents() - - thisObject.animation = newAnimation() - thisObject.animation.initialize() - - /* - Here we will setup the UI object, with all the - projects and spaces. - */ - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - UI.projects[projectDefinition.propertyName] = {} - let projectInstance = UI.projects[projectDefinition.propertyName] - projectInstance.spaces = {} - projectInstance.events = {} - projectInstance.utilities = {} - projectInstance.globals = {} - - projectInstance.events.onMouseWheelMap = new Map() - projectInstance.events.onMouseOverMap = new Map() - projectInstance.events.onMouseClickMap = new Map() - projectInstance.events.onMouseDownMap = new Map() - - let spaceInitializationMap = new Map() - let spaceAnimationPhysicsMap = new Map() - let spaceDefinitionPhysicsMap = new Map() - let spaceAnimationDrawMap = new Map() - let spaceDefinitionDrawMap = new Map() - - /* Space Instantiation */ - if (projectDefinition.spaces === undefined) { continue } - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceDefinition = projectDefinition.spaces[j] - projectInstance.spaces[spaceDefinition.propertyName] = eval(spaceDefinition.functionName + '()') - let spaceInstance = projectInstance.spaces[spaceDefinition.propertyName] - spaceInstance.definition = spaceDefinition - - if (spaceDefinition.initializationIndex !== undefined) { - spaceInitializationMap.set(spaceDefinition.initializationIndex, spaceInstance) - } - - if (spaceDefinition.animationPhysicsIndex !== undefined) { - spaceAnimationPhysicsMap.set(spaceDefinition.animationPhysicsIndex, spaceInstance) - spaceDefinitionPhysicsMap.set(spaceDefinition.animationPhysicsIndex, spaceDefinition) - } - - if (spaceDefinition.animationDrawIndex !== undefined) { - spaceAnimationDrawMap.set(spaceDefinition.animationDrawIndex, spaceInstance) - spaceDefinitionDrawMap.set(spaceDefinition.animationDrawIndex, spaceDefinition) - } - - /* Build the maps that defines the secuence of execution of different events. */ - if (spaceDefinition.onMouseWheelIndex !== undefined) { - projectInstance.events.onMouseWheelMap.set(spaceDefinition.onMouseWheelIndex, spaceInstance) - } - if (spaceDefinition.onMouseOverIndex !== undefined) { - projectInstance.events.onMouseOverMap.set(spaceDefinition.onMouseOverIndex, spaceInstance) - } - if (spaceDefinition.onMouseOverIndex !== undefined) { - projectInstance.events.onMouseClickMap.set(spaceDefinition.onMouseClickIndex, spaceInstance) - } - if (spaceDefinition.onMouseDownIndex !== undefined) { - projectInstance.events.onMouseDownMap.set(spaceDefinition.onMouseDownIndex, spaceInstance) - } - } - - /* Space Initialization */ - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = spaceInitializationMap.get(j) - if (spaceInstance !== undefined) { - spaceInstance.initialize() - } - } - - /* Space Animation Physics */ - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = spaceAnimationPhysicsMap.get(j) - let spaceDefinition = spaceDefinitionPhysicsMap.get(j) - if (spaceInstance === undefined || spaceDefinition === undefined) { continue } - if (spaceInstance.physics !== undefined) { - thisObject.animation.addCallBackFunction(spaceDefinition.name + ' ' + 'Physics', spaceInstance.physics) - } - } - - /* Space Animation Drawing*/ - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = spaceAnimationDrawMap.get(j) - let spaceDefinition = spaceDefinitionDrawMap.get(j) - if (spaceInstance === undefined || spaceDefinition === undefined) { continue } - if (spaceInstance.draw !== undefined) { - thisObject.animation.addCallBackFunction(spaceDefinition.name + ' ' + 'Draw', spaceInstance.draw) - } - } - - /* Set up Utilities of this Project */ - if (projectDefinition.utilities === undefined) { continue } - for (let j = 0; j < projectDefinition.utilities.length; j++) { - let utilityDefinition = projectDefinition.utilities[j] - - projectInstance.utilities[utilityDefinition.propertyName] = eval(utilityDefinition.functionName + '()') - } - - /* Set up Globals of this Project */ - if (projectDefinition.globals === undefined) { continue } - for (let j = 0; j < projectDefinition.globals.length; j++) { - let globalDefinition = projectDefinition.globals[j] - - projectInstance.globals[globalDefinition.propertyName] = eval(globalDefinition.functionName + '()') - } - } - thisObject.animation.start() - - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - } - } - - function initializeBrowserCanvas() { - try { - browserCanvasContext = browserCanvas.getContext('2d') - browserCanvasContext.font = 'Saira Condensed' - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initializeBrowserCanvas -> err = ' + err.stack) } - } - } - - function addCanvasEvents() { - try { - /* Keyboard events */ - window.addEventListener('keydown', onKeyDown, true) - window.addEventListener('keyup', onKeyUp, true) - - if (browserCanvas.addEventListener) { - canvas.eventHandler.listenToEvent('Browser Resized', browserResized) - - /* Mouse Events */ - browserCanvas.addEventListener('mousedown', onMouseDown, false) - browserCanvas.addEventListener('mouseup', onMouseUp, false) - browserCanvas.addEventListener('mousemove', onMouseMove, false) - browserCanvas.addEventListener('click', onMouseClick, false) - browserCanvas.addEventListener('mouseout', onMouseOut, false) - - browserCanvas.addEventListener('mousewheel', onMouseWheel, false) // IE9, Chrome, Safari, Opera - browserCanvas.addEventListener('DOMMouseScroll', onMouseWheel, false) // Firefox - - /* Dragging Files Over the Canvas */ - browserCanvas.addEventListener('dragenter', onDragEnter, false) - browserCanvas.addEventListener('dragleave', onDragLeave, false) - browserCanvas.addEventListener('dragover', onDragOver, false) - browserCanvas.addEventListener('drop', onDragDrop, false) - - } else browserCanvas.attachEvent('onmousewheel', onMouseWheel)// IE 6/7/8 - - // Disables the context menu when you right mouse click the canvas. - browserCanvas.oncontextmenu = function (e) { - e.preventDefault() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] addCanvasEvents -> err = ' + err.stack) } - } - } - - function browserResized() { - browserCanvas = document.getElementById('canvas') - - browserCanvas.width = window.innerWidth - browserCanvas.height = window.innerHeight - CURRENT_TOP_MARGIN - browserCanvas.style = "position:absolute; top:0px; left:0px; z-index:1" - } - - function checkMediaRecording(event) { - if ((event.ctrlKey === true || event.metaKey === true)) { - let constructorParams - switch (event.keyCode) { - case 113: { // F2 - browserCanvas.width = 400 * 3 - browserCanvas.height = 580 * 3 - centerCanvas() - DISABLE_BROWSER_RESIZE_EVENT = true - return - break - } - case 114: { // F2 - browserCanvas.width = 400 * 2 - browserCanvas.height = 580 * 2 - centerCanvas() - DISABLE_BROWSER_RESIZE_EVENT = true - return - break - } - case 115: { // F3 - browserCanvas.width = 400 * 1.5 - browserCanvas.height = 580 * 1.5 - centerCanvas() - DISABLE_BROWSER_RESIZE_EVENT = true - return - break - } - case 116: { // F5 - browserCanvas.width = 400 * 1 - browserCanvas.height = 580 * 1 - centerCanvas() - DISABLE_BROWSER_RESIZE_EVENT = true - return - break - } - case 117: { // F6 - browserCanvas.width = window.innerWidth - browserCanvas.height = window.innerHeight - CURRENT_TOP_MARGIN - centerCanvas() - DISABLE_BROWSER_RESIZE_EVENT = false - return - break - } - case 118: { // F7 - UI.projects.superalgos.utilities.download.downloadPanorama('Superalgos.Market.Panorama') - return - break - } - case 119: { // F8 - UI.projects.superalgos.utilities.download.downloadCanvas('Superalgos.Image.Capture', browserCanvas) - return - break - } - case 120: { // F9 - console.log('Recording gid with framerate = ' + 24) - constructorParams = { format: 'gif', workersPath: 'externalScripts/', framerate: 24, name: 'Superalgos.Video.Capture' } - break - } - case 121: { // F10 - console.log('Recording gid with framerate = ' + 24) - constructorParams = { format: 'webm', framerate: 24, name: 'Superalgos.Video.Capture' } - break - } - default: return - } - - if (ARE_WE_RECORDING_A_VIDEO === false) { - console.log('RECORDING', constructorParams.format) - mediaRecorder = new CCapture(constructorParams) - mediaRecorder.start() - ARE_WE_RECORDING_A_VIDEO = true - } else { - console.log('SAVING', constructorParams.format) - ARE_WE_RECORDING_A_VIDEO = false - mediaRecorder.stop() - mediaRecorder.save() - } - } - - function centerCanvas() { - return - let top = (window.innerHeight - browserCanvas.height) / 2 - let left = (window.innerWidth - browserCanvas.width) / 2 - browserCanvas.style = "position:absolute; top:" + top + "px; left:" + left + "px; z-index:1" - } - } - - function onKeyUp(event) { - thisObject.mouse.event = event - thisObject.mouse.action = 'key up' - } - - async function onKeyDown(event) { - if (EDITOR_ON_FOCUS === true) { return } - thisObject.mouse.event = event - thisObject.mouse.action = 'key down' - - checkMediaRecording(event) - UI.projects.superalgos.spaces.chartingSpace.onKeyPressed(event) - - /* Shourcuts to Menu Items */ - if ((event.keyCode >= 48 && event.keyCode <= 57)) { - let number = event.key - if (MENU_ITEM_ON_FOCUS !== undefined) { - let menuItem = thisObject.shorcutNumbers.get(number) - if (menuItem !== undefined) { - menuItem.shorcutNumber = undefined - } - thisObject.shorcutNumbers.set(number, MENU_ITEM_ON_FOCUS) - MENU_ITEM_ON_FOCUS.shorcutNumber = number - } else { - let menuItem = thisObject.shorcutNumbers.get(number) - if (menuItem !== undefined) { - menuItem.internalClick() - } - } - } - - if (event.key === 'Escape' && UI.projects.superalgos.spaces.floatingSpace.inMapMode === true) { - UI.projects.superalgos.spaces.floatingSpace.exitMapMode() - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && (event.key === 'M' || event.key === 'm')) { - UI.projects.superalgos.spaces.floatingSpace.toggleMapMode() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && (event.key === 'R' || event.key === 'r')) { - UI.projects.superalgos.spaces.floatingSpace.toggleDrawReferenceLines() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && (event.key === 'C' || event.key === 'c')) { - UI.projects.superalgos.spaces.floatingSpace.toggleDrawChainLines() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && (event.key === 'S' || event.key === 's')) { - UI.projects.superalgos.spaces.designSpace.workspace.save() - if (event.preventDefault !== undefined) { - event.preventDefault() - } - return - } - - let nodeOnFocus = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeThatIsOnFocus() - if (nodeOnFocus !== undefined) { - if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { - return - } - } - if (nodeOnFocus.payload.uiObject.configEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.configEditor.visible === true) { - return - } - } - if (nodeOnFocus.payload.uiObject.formulaEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.formulaEditor.visible === true) { - return - } - } - if (nodeOnFocus.payload.uiObject.conditionEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.conditionEditor.visible === true) { - return - } - } - if (nodeOnFocus.payload.uiObject.uiObjectTitle !== undefined) { - if (nodeOnFocus.payload.uiObject.uiObjectTitle.editMode === true) { - return - } - } - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.altKey === true && event.shiftKey === true && event.keyCode === 123) { // Dev Tool when used with F12 - if (nodeOnFocus !== undefined) { - console.log(nodeOnFocus) - return - } - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.altKey === true && event.shiftKey === true && event.keyCode === 122) { // Dev Tool when used with F11 - if (SHOW_ANIMATION_PERFORMACE === false) { - SHOW_ANIMATION_PERFORMACE = true - } else { - SHOW_ANIMATION_PERFORMACE = false - } - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowUp') { - UI.projects.superalgos.spaces.cockpitSpace.toTop() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowDown') { - UI.projects.superalgos.spaces.cockpitSpace.toBottom() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowLeft') { - UI.projects.superalgos.spaces.cockpitSpace.moveUp() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowRight') { - UI.projects.superalgos.spaces.cockpitSpace.moveDown() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === false && event.metaKey === false) && event.code === 'ArrowLeft') { - UI.projects.superalgos.spaces.chartingSpace.oneScreenLeft() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === false && event.metaKey === false) && event.code === 'ArrowRight') { - UI.projects.superalgos.spaces.chartingSpace.oneScreenRight() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === false && event.metaKey === false) && event.code === 'ArrowUp') { - UI.projects.superalgos.spaces.chartingSpace.oneScreenUp() - event.preventDefault() - return - } - - if (event.shiftKey === true && (event.ctrlKey === false && event.metaKey === false) && event.code === 'ArrowDown') { - UI.projects.superalgos.spaces.chartingSpace.oneScreenDown() - event.preventDefault() - return - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.shiftKey === false && event.code === 'ArrowLeft') { - let displaceVector = UI.projects.superalgos.spaces.floatingSpace.oneScreenLeft() - if (displaceVector !== undefined) { - dragVector.downX = dragVector.downX + displaceVector.x - dragVector.downY = dragVector.downY + displaceVector.y - checkDrag() - } - event.preventDefault() - return - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.shiftKey === false && event.code === 'ArrowRight') { - let displaceVector = UI.projects.superalgos.spaces.floatingSpace.oneScreenRight() - if (displaceVector !== undefined) { - dragVector.downX = dragVector.downX + displaceVector.x - dragVector.downY = dragVector.downY + displaceVector.y - checkDrag() - } - event.preventDefault() - return - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.shiftKey === false && event.code === 'ArrowUp') { - let displaceVector = UI.projects.superalgos.spaces.floatingSpace.oneScreenUp() - if (displaceVector !== undefined) { - dragVector.downX = dragVector.downX + displaceVector.x - dragVector.downY = dragVector.downY + displaceVector.y - checkDrag() - } - event.preventDefault() - return - } - - if ((event.ctrlKey === true || event.metaKey === true) && event.shiftKey === false && event.code === 'ArrowDown') { - let displaceVector = UI.projects.superalgos.spaces.floatingSpace.oneScreenDown() - if (displaceVector !== undefined) { - dragVector.downX = dragVector.downX + displaceVector.x - dragVector.downY = dragVector.downY + displaceVector.y - checkDrag() - } - event.preventDefault() - return - } - - if (event.code === 'Period') { - if (nodeOnFocus !== undefined) { - nodeOnFocus.payload.uiObject.valueAtAngle = false - nodeOnFocus.payload.uiObject.setValue('Id: ' + nodeOnFocus.id) - return - } - } - if ((event.ctrlKey === true || event.metaKey === true) && event.altKey === true) { - /* Shortcuts to nodes */ - if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 65 && event.keyCode <= 90)) { - /* From here we prevent the default behaviour. Putting it earlier prevents imput box and text area to receive keystrokes */ - event.preventDefault() - let nodeUsingThisKey = await UI.projects.superalgos.spaces.designSpace.workspace.getNodeByShortcutKey(event.key) - - if (nodeUsingThisKey !== undefined) { - if (nodeOnFocus !== undefined) { - if (nodeUsingThisKey.id === nodeOnFocus.id) { - nodeOnFocus.payload.uiObject.shortcutKey = '' - nodeOnFocus.payload.uiObject.valueAtAngle = false - nodeOnFocus.payload.uiObject.setValue('Shortcut Key Removed ') - } else { - nodeUsingThisKey.payload.uiObject.shortcutKey = '' - nodeUsingThisKey = undefined - nodeOnFocus.payload.uiObject.shortcutKey = event.key - nodeOnFocus.payload.uiObject.valueAtAngle = false - nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + Alt + ' + event.key) - } - } else { - UI.projects.superalgos.spaces.floatingSpace.positionAtNode(nodeUsingThisKey) - } - return - } else { - if (nodeOnFocus !== undefined) { - nodeOnFocus.payload.uiObject.shortcutKey = event.key - nodeOnFocus.payload.uiObject.valueAtAngle = false - nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + Alt + ' + event.key) - } - } - } - } - if ((event.ctrlKey === true || event.metaKey === true) && event.altKey === true && nodeOnFocus !== undefined) { - if (nodeOnFocus.payload.uiObject.shortcutKey !== undefined && nodeOnFocus.payload.uiObject.shortcutKey !== '') { - nodeOnFocus.payload.uiObject.valueAtAngle = false - nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + Alt + ' + nodeOnFocus.payload.uiObject.shortcutKey) - } - } - } - - function onDragEnter(event) { - try { - event.preventDefault() - event.stopPropagation() - UI.projects.superalgos.spaces.cockpitSpace.toTop() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDragEnter -> err = ' + err.stack) } - } - } - - function onDragLeave(event) { - try { - event.preventDefault() - event.stopPropagation() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDragLeave -> err = ' + err.stack) } - } - } - - function onDragOver(event) { - try { - event.preventDefault() - event.stopPropagation() - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDragOver -> err = ' + err.stack) } - } - } - - function onDragDrop(event) { - try { - event.preventDefault() - event.stopPropagation() - - let files = event.dataTransfer.files - - handleFiles(files) - function handleFiles(files) { - ([...files]).forEach(loadFileData) - } - - function loadFileData(file) { - let reader = new FileReader() - reader.readAsText(file) - reader.onloadend = function () { - let mousePosition = { - x: event.x, - y: event.y - } - UI.projects.superalgos.spaces.designSpace.workspace.spawn(reader.result, mousePosition) - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onDragDrop -> err = ' + err.stack) } - } - } - - function onMouseDown(event) { - try { - thisObject.mouse.event = event - thisObject.mouse.position.x = event.pageX - thisObject.mouse.position.y = event.pageY - CURRENT_TOP_MARGIN - switch (event.buttons) { - case 1: { - thisObject.mouse.action = 'clicking with left button' - break - } - case 2: { - thisObject.mouse.action = 'clicking with right button' - break - } - } - - let point = event - point.x = event.pageX - point.y = event.pageY - CURRENT_TOP_MARGIN - - dragVector.downX = point.x - dragVector.downY = point.y - - let container - /* - We will go through all the spaces defined at the project schema for each project - and we are going to query each space to see if they have the container that is at - the mouse position. We will order firt the spaces by the sequence order defined - at the project schema specifically for this mouse event. - */ - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - let projectInstance = UI.projects[projectDefinition.propertyName] - - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = projectInstance.events.onMouseDownMap.get(j) - if (spaceInstance === undefined) { continue } - - /* - Here we manage a few exceptional behaviours. Specifically with the - charting space and the floating space, since they have a non standard - way of handling this event. - */ - if (spaceInstance.definition.name === 'Charting Space') { - /* we check if it is over any of the existing containers at the Charting Space. */ - container = spaceInstance.getContainer(point, GET_CONTAINER_PURPOSE.DRAGGING) - - if (container !== undefined) { - if (container.isDraggeable === true) { - containerBeingDragged = container - containerDragStarted = true - containerBeingDragged.eventHandler.raiseEvent('onDragStarted', point) - return - } else { - if (container.isClickeable === false) { - viewPortBeingDragged = true - } - return - } - } - continue - } - - if (spaceInstance.definition.name === 'Floating Space') { - /* we check if it is over any of the existing containers at the Floating Space. */ - container = spaceInstance.getContainer(point) - - if (container !== undefined && container.isDraggeable === true) { - containerBeingDragged = container - containerDragStarted = true - floatingObjectDragStarted = true - containerBeingDragged.eventHandler.raiseEvent('onDragStarted', point) - - if (event.candelDragging === true) { - containerBeingDragged = undefined - containerDragStarted = false - floatingObjectDragStarted = false - } - return - } - - if (container !== undefined && container.isClickeable === true) { - /* We dont want to mess up with the click */ - return - } - continue - } - - /* Next is what happens to all non exceptional behaviour */ - if (spaceInstance.getContainer === undefined) { continue } - container = spaceInstance.getContainer(point) - - if (container !== undefined && container.isDraggeable === true) { - containerBeingDragged = container - containerDragStarted = true - containerBeingDragged.eventHandler.raiseEvent('onDragStarted', point) - return - } - - if (container !== undefined && container.isDraggeable === false) { - return - } - - if (container !== undefined && container.isClickeable === true) { - /* We dont want to mess up with the click */ - return - } - } - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMouseDown -> err = ' + err.stack) } - } - } - - function onMouseClick(event) { - try { - if (ignoreNextClick === true) { - ignoreNextClick = false - return - } - - let point = event - point.x = event.pageX - point.y = event.pageY - CURRENT_TOP_MARGIN - - let container - /* - We will go through all the spaces defined at the project schema for each project - and we are going to query each space to see if they have the container that is at - the mouse position. We will order firt the spaces by the sequence order defined - at the project schema specifically for this mouse event. - */ - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - let projectInstance = UI.projects[projectDefinition.propertyName] - - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = projectInstance.events.onMouseClickMap.get(j) - if (spaceInstance === undefined) { continue } - - if (spaceInstance.getContainer === undefined) { continue } - container = spaceInstance.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_CLICK) - - if (container !== undefined && container.isClickeable === true) { - container.eventHandler.raiseEvent('onMouseClick', point) - return - } - } - } - - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMouseClick -> err = ' + err.stack) } - } - } - - function onMouseOut(event) { - deactivateDragging(event) - - /* When the mouse leaves the canvas, our elements needs to react to the fact that the mouse is over a far away place */ - let thisEvent = { - pageX: VERY_LARGE_NUMBER, - pageY: VERY_LARGE_NUMBER - } - onMouseOver(thisEvent) - } - - function onMouseUp(event) { - deactivateDragging(event) - } - - function onMouseMove(event) { - try { - thisObject.mouse.event = event - thisObject.mouse.position.x = event.pageX - thisObject.mouse.position.y = event.pageY - CURRENT_TOP_MARGIN - thisObject.mouse.action = 'moving' - - /* Processing the event */ - let point = event - point.x = event.pageX - point.y = event.pageY - CURRENT_TOP_MARGIN - - if (UI.projects.superalgos.spaces.chartingSpace.viewport !== undefined) { - UI.projects.superalgos.spaces.chartingSpace.viewport.mousePosition.x = point.x - UI.projects.superalgos.spaces.chartingSpace.viewport.mousePosition.y = point.y - } - - if (containerDragStarted === true || floatingObjectDragStarted === true || viewPortBeingDragged === true) { - if (floatingObjectDragStarted === true) { - let targetContainer = UI.projects.superalgos.spaces.floatingSpace.getContainer(point) - if (targetContainer !== undefined) { - if (targetContainer.id !== containerBeingDragged.id) { - containerBeingDragged.eventHandler.raiseEvent('onDragFinished', point) - containerBeingDragged = undefined - containerDragStarted = false - floatingObjectDragStarted = false - browserCanvas.style.cursor = 'auto' - ignoreNextClick = true - return - } - } else { - containerBeingDragged.eventHandler.raiseEvent('onDragFinished', point) - containerDragStarted = false - containerBeingDragged = undefined - floatingObjectDragStarted = false - browserCanvas.style.cursor = 'auto' - ignoreNextClick = true - return - } - } - - dragVector.upX = point.x - dragVector.upY = point.y - - checkDrag(event) - } - onMouseOver(event) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMouseMove -> err = ' + err.stack) } - } - } - - function onMouseOver(event) { - try { - let point = event - point.x = event.pageX - point.y = event.pageY - CURRENT_TOP_MARGIN - - if (containerDragStarted === true) { - containerBeingDragged.eventHandler.raiseEvent('onMouseOver', point) - return - } - - /* Then we check who is the current object underneeth the mounse. */ - - let container - - /* - We will go through all the spaces defined at the project schema for each project - and we are going to query each space to see if they have the container that is at - the mouse position. We will order firt the spaces by the sequence order defined - at the project schema specifically for this mouse event. - */ - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - let projectInstance = UI.projects[projectDefinition.propertyName] - - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = projectInstance.events.onMouseOverMap.get(j) - if (spaceInstance === undefined) { continue } - - if (spaceInstance.getContainer === undefined) { continue } - container = spaceInstance.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_OVER) - - if (container !== undefined && container.detectMouseOver === true) { - containerFound() - return - } - } - } - - function containerFound() { - if (lastContainerMouseOver !== undefined) { - if (container.id !== lastContainerMouseOver.id) { - lastContainerMouseOver.eventHandler.raiseEvent('onMouseNotOver', point) - } - } - container.eventHandler.raiseEvent('onMouseOver', point) - lastContainerMouseOver = container - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMouseOver -> err = ' + err.stack) } - } - } - - function onMouseWheel(event) { - try { - thisObject.mouse.event = event - thisObject.mouse.position.x = event.pageX - thisObject.mouse.position.y = event.pageY - CURRENT_TOP_MARGIN - thisObject.mouse.action = 'wheel' - - // cross-browser wheel delta - var event = window.event || event // old IE support - event.delta = Math.max(-1, Math.min(1, event.wheelDelta || -event.detail)) - if (IS_MAC) { - event.delta = event.delta / MAC_AMOUNT_FACTOR - } - - let point = { - x: event.pageX, - y: event.pageY - CURRENT_TOP_MARGIN - } - - event.mousePosition = point - let container - - /* - We will go through all the spaces defined at the project schema for each project - and we are going to query each space to see if they have the container that is at - the mouse position. We will order firt the spaces by the sequence order defined - at the project schema specifically for this mouse event. - */ - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - let projectInstance = UI.projects[projectDefinition.propertyName] - - for (let j = 0; j < projectDefinition.spaces.length; j++) { - let spaceInstance = projectInstance.events.onMouseWheelMap.get(j) - if (spaceInstance === undefined) { continue } - - if (spaceInstance.getContainer === undefined) { continue } - container = spaceInstance.getContainer({ x: point.x, y: point.y }, GET_CONTAINER_PURPOSE.MOUSE_WHEEL) - - if (container !== undefined && container.isWheelable === true) { - container.eventHandler.raiseEvent('onMouseWheel', event) - return false // This instructs the browser not to take the event and scroll the page. - } - } - } - - return false - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] onMouseWheel -> err = ' + err.stack) } - } - } - - function deactivateDragging(event) { - try { - if (containerDragStarted || viewPortBeingDragged || floatingObjectDragStarted) { - thisObject.eventHandler.raiseEvent('Drag Finished', undefined) - } - - if ( - containerDragStarted || - floatingObjectDragStarted || - viewPortBeingDragged - ) { - ignoreNextClick = false - } - /* Turn off all the possible things that can be dragged. */ - - containerDragStarted = false - floatingObjectDragStarted = false - viewPortBeingDragged = false - - if (containerBeingDragged !== undefined) { - containerBeingDragged.eventHandler.raiseEvent('onDragFinished', event) - containerBeingDragged = undefined - } - - browserCanvas.style.cursor = 'auto' - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] deactivateDragging -> err = ' + err.stack) } - } - } - - function checkDrag(event) { - try { - if (containerDragStarted === true || floatingObjectDragStarted === true || viewPortBeingDragged === true) { - if (event !== undefined) { - thisObject.mouse.event = event - thisObject.mouse.position.x = event.pageX - thisObject.mouse.position.y = event.pageY - CURRENT_TOP_MARGIN - thisObject.mouse.action = 'dragging' - } - - browserCanvas.style.cursor = 'grabbing' - thisObject.eventHandler.raiseEvent('Dragging', undefined) - - if (viewPortBeingDragged) { - let displaceVector = { - x: dragVector.upX - dragVector.downX, - y: dragVector.upY - dragVector.downY - } - - UI.projects.superalgos.spaces.chartingSpace.viewport.displace(displaceVector) - } - if (containerDragStarted) { - if (containerBeingDragged !== undefined) { - if (containerBeingDragged.space === 'Charting Space') { - let downCopy = { - x: dragVector.downX, - y: dragVector.downY - } - - let downNoZoom - downNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(downCopy) - - let upCopy = { - x: dragVector.upX, - y: dragVector.upY - } - - let upNoZoom - upNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(upCopy) - - displaceVector = { - x: upNoZoom.x - downNoZoom.x, - y: upNoZoom.y - downNoZoom.y - } - - let moveSucceed = containerBeingDragged.displace(displaceVector) - if (moveSucceed === false) { - deactivateDragging(event) - } - } else { - let displaceVector = { - x: dragVector.upX - dragVector.downX, - y: dragVector.upY - dragVector.downY - } - let moveSucceed = containerBeingDragged.displace(displaceVector) - if (moveSucceed === false) { - deactivateDragging(event) - } - } - } - } - - /* Finally we set the starting point of the new dragVector at this current point. */ - dragVector.downX = dragVector.upX - dragVector.downY = dragVector.upY - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] checkDrag -> err = ' + err.stack) } - } - } -} diff --git a/Deprecated-Code/UI/Container.js b/Deprecated-Code/UI/Container.js deleted file mode 100644 index f3afb66e5..000000000 --- a/Deprecated-Code/UI/Container.js +++ /dev/null @@ -1,262 +0,0 @@ - -function newContainer() { - let thisObject = { - id: newUniqueId(), - type: 'Rectangle', - frame: undefined, - eventHandler: undefined, - parentContainer: undefined, - isDraggeable: true, - notDraggingOnX: false, - notDraggingOnY: false, - isClickeable: false, - isWheelable: false, - detectMouseOver: false, - name: undefined, - fitFunction: undefined, - isVisibleFunction: undefined, - displace: displace, - initialize: initialize, - finalize: finalize, - connectToParent: connectToParent, - isForThisPurpose: isForThisPurpose - } - - let connectedToParentWidth = false - let connectedToParentHeight = false - let connectedToParentRadius = false - - let onDimmensionsChangedParentEvent = false - let onMouseOverParentEvent = false - let onMouseNotOverParentEvent = false - let onFocusParentEvent = false - let onNotFocusParentEvent = false - let onDisplaceParentEvent = false - let onDragStartedParentEvent = false - let onDragFinishedParentEvent = false - - let isConnectedToParent = false - - let dimensionsChangedEventSubscriptionId - let onMouseOverEventSubscriptionId - let onMouseNotOverEventSubscriptionId - let onFocusEventSubscriptionId - let onNotFocusEventSubscriptionId - let onDisplaceEventSubscriptionId - let onDragStartedEventSubscriptionId - let onDragFinishedEventSubscriptionId - - return thisObject - - function finalize() { - if (isConnectedToParent === true) { - thisObject.parentContainer.eventHandler.stopListening(dimensionsChangedEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onMouseOverEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onMouseNotOverEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onFocusEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onNotFocusEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onDisplaceEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onDragStartedEventSubscriptionId) - thisObject.parentContainer.eventHandler.stopListening(onDragFinishedEventSubscriptionId) - - thisObject.parentContainer = undefined - thisObject.eventHandler.finalize() - - thisObject.frame.finalize() - } - } - - function initialize(pName, pType) { - thisObject.name = pName - thisObject.type = pType - - thisObject.frame = newFrame() - thisObject.frame.initialize(pType) - if (pName !== undefined) { - thisObject.frame.containerName = pName - } - thisObject.frame.container = thisObject - - thisObject.eventHandler = newEventHandler() - thisObject.eventHandler.name = pName - } - - function connectToParent( - parentContainer, - onWidth, - onHeight, - onRadius, - onDimmensionsChangedEvent, - onMouseOverEvent, - onMouseNotOverEvent, - onFocusEvent, - onNotFocusEvent, - onDisplaceEvent, - onDragStartedEvent, - onDragFinishedEvent - ) { - connectedToParentWidth = onWidth - connectedToParentHeight = onHeight - connectedToParentRadius = onRadius - - onDimmensionsChangedParentEvent = onDimmensionsChangedEvent - onMouseOverParentEvent = onMouseOverEvent - onMouseNotOverParentEvent = onMouseNotOverEvent - onFocusParentEvent = onFocusEvent - onNotFocusParentEvent = onNotFocusEvent - onDisplaceParentEvent = onDisplaceEvent - onDragStartedParentEvent = onDragStartedEvent - onDragFinishedParentEvent = onDragFinishedEvent - - isConnectedToParent = true - - thisObject.frame.parentFrame = parentContainer.frame - thisObject.parentContainer = parentContainer - - if (onDimmensionsChangedParentEvent === true) { - dimensionsChangedEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('Dimmensions Changed', onParentDimmensionsChanged) - } - if (onMouseOverParentEvent === true) { - onMouseOverEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onMouseOver', onMouseOver) - } - if (onMouseNotOverParentEvent === true) { - onMouseNotOverEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver) - } - if (onFocusParentEvent === true) { - onFocusEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onFocus', onFocus) - } - if (onNotFocusParentEvent === true) { - onNotFocusEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onNotFocus', onNotFocus) - } - if (onDisplaceParentEvent === true) { - onDisplaceEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onDisplace', onDisplace) - } - if (onDragStartedParentEvent === true) { - onDragStartedEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onDragStarted', onDragStarted) - } - if (onDragFinishedParentEvent === true) { - onDragFinishedEventSubscriptionId = thisObject.parentContainer.eventHandler.listenToEvent('onDragFinished', onDragFinished) - } - - if (connectedToParentWidth) { - thisObject.frame.width = thisObject.parentContainer.frame.width - } - if (connectedToParentHeight) { - thisObject.frame.height = thisObject.parentContainer.frame.height - } - if (connectedToParentRadius) { - thisObject.frame.radius = thisObject.parentContainer.frame.radius - } - } - - function onParentDimmensionsChanged(event) { - let dimmensionsChanged = false - if (connectedToParentWidth) { - thisObject.frame.width = thisObject.parentContainer.frame.width - dimmensionsChanged = true - } - if (connectedToParentHeight) { - thisObject.frame.height = thisObject.parentContainer.frame.height - dimmensionsChanged = true - } - if (connectedToParentRadius) { - thisObject.frame.radius = thisObject.parentContainer.frame.radius - dimmensionsChanged = true - } - - if (dimmensionsChanged) { - thisObject.eventHandler.raiseEvent('Dimmensions Changed', event) - } - } - - function onMouseOver(event) { - thisObject.eventHandler.raiseEvent('onMouseOver', event) - } - - function onMouseNotOver(event) { - thisObject.eventHandler.raiseEvent('onMouseNotOver', event) - } - - function onFocus(event) { - thisObject.eventHandler.raiseEvent('onFocus', event) - } - - function onNotFocus(event) { - thisObject.eventHandler.raiseEvent('onNotFocus', event) - } - - function onDisplace(event) { - thisObject.eventHandler.raiseEvent('onDisplace', event) - } - - function onDragStarted(event) { - thisObject.eventHandler.raiseEvent('onDragStarted', event) - } - - function onDragFinished(event) { - thisObject.eventHandler.raiseEvent('onDragFinished', event) - } - - function isForThisPurpose(purpose) { - if (purpose !== undefined) { - switch (purpose) { - case GET_CONTAINER_PURPOSE.MOUSE_OVER: - if (thisObject.detectMouseOver === true) { - return true - } - break - case GET_CONTAINER_PURPOSE.MOUSE_WHEEL: - if (thisObject.isWheelable === true) { - return true - } - break - case GET_CONTAINER_PURPOSE.MOUSE_CLICK: - if (thisObject.isClickeable === true) { - return true - } - break - case GET_CONTAINER_PURPOSE.DRAGGING: - if (thisObject.isDraggeable === true) { - return true - } - break - default: { return false } - - } - } - return false - } - - function displace(point) { - /* This function will move the container according to the vector received. If it has a visible function will use it - to see if the container can be moved there or not. It wont if the center will not be visible. - - Returns true if move was possible, false if not. */ - - let checkPoint = {} - - if (thisObject.isVisibleFunction === undefined) { - drag() - return true - } else { - checkPoint.x = thisObject.frame.position.x + point.x + thisObject.frame.width / 2 - checkPoint.y = thisObject.frame.position.y + point.y + thisObject.frame.height / 2 - let isVisible = thisObject.isVisibleFunction(checkPoint) - if (isVisible === true) { - drag() - return true - } else { - return false - } - } - function drag() { - if (thisObject.notDraggingOnX === false) { - thisObject.frame.position.x = thisObject.frame.position.x + point.x - } - if (thisObject.notDraggingOnY === false) { - thisObject.frame.position.y = thisObject.frame.position.y + point.y - } - thisObject.eventHandler.raiseEvent('onDisplace', event) - } - } -} diff --git a/Deprecated-Code/UI/EventHandler.js b/Deprecated-Code/UI/EventHandler.js deleted file mode 100644 index 3820a8242..000000000 --- a/Deprecated-Code/UI/EventHandler.js +++ /dev/null @@ -1,46 +0,0 @@ - -function newEventHandler() { - let thisObject = { - name: undefined, // This is for debugging purposes only. - listenToEvent: listenToEvent, - stopListening: stopListening, - raiseEvent: raiseEvent, - finalize: finalize - } - - let eventHandlers = [] // Here we store all the functions we will call when an event is raiseed. - - return thisObject - - function finalize() { - eventHandlers = [] - } - - function listenToEvent(eventType, handler, extraData) { - let eventSubscriptionId = newUniqueId() - eventHandlers.push([eventType, handler, extraData, eventSubscriptionId]) - return eventSubscriptionId - } - - function stopListening(pEventSubscriptionId) { - for (let i = 0; i < eventHandlers.length; i++) { - if (pEventSubscriptionId === eventHandlers[i][3]) { - eventHandlers.splice(i, 1) - return - } - } - } - - function raiseEvent(eventType, event) { - for (var i = 0; i < eventHandlers.length; i++) { - /* We will execute all the functions listening to this event type. */ - - if (eventHandlers[i][0] === eventType) { - let handler = eventHandlers[i][1] - let extraData = eventHandlers[i][2] - - handler(event, extraData) - } - } - } -} diff --git a/Deprecated-Code/UI/EventsServerClient.js b/Deprecated-Code/UI/EventsServerClient.js deleted file mode 100644 index 71002ce23..000000000 --- a/Deprecated-Code/UI/EventsServerClient.js +++ /dev/null @@ -1,292 +0,0 @@ - -function newEventsServerClient(networkNode) { - /* Web Sockets Connection */ - - const MODULE_NAME = 'System Event Handler' - const ERROR_LOG = true - const INFO_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let WEB_SOCKETS_CONNECTION - - let thisObject = { - isConnected: isConnected, - initialize: initialize, - finalize: finalize, - physics: physics, - createEventHandler: createEventHandler, - deleteEventHandler: deleteEventHandler, - listenToEvent: listenToEvent, - stopListening: stopListening, - raiseEvent: raiseEvent - } - - let eventListeners = new Map() - let responseWaiters = new Map() - let commandsWaitingConfirmation = new Map() - let commandsSentByTimestamp = new Map() - let nonce = 0 - let lastTryToReconnectDatetime - - return thisObject - - function initialize(callBackFunction) { - setuptWebSockets(callBackFunction) - } - - function finalize() { - WEB_SOCKETS_CONNECTION.close() - WEB_SOCKETS_CONNECTION.onerror = undefined - WEB_SOCKETS_CONNECTION.onmessage = undefined - WEB_SOCKETS_CONNECTION.onopen = undefined - WEB_SOCKETS_CONNECTION = undefined - - eventListeners = undefined - responseWaiters = undefined - commandsWaitingConfirmation = undefined - commandsSentByTimestamp = undefined - nonce = undefined - thisObject = undefined - } - - function isConnected() { - if (WEB_SOCKETS_CONNECTION !== undefined) { - if (WEB_SOCKETS_CONNECTION.readyState === 1) { - return true - } - } - } - - function sendCommand(command, responseCallBack, eventsCallBack) { - if (command.action === 'listenToEvent') { - let key - if (command.callerId !== undefined) { - key = command.eventHandlerName + '-' + command.eventType + '-' + command.callerId - } else { - key = command.eventHandlerName + '-' + command.eventType - } - eventListeners.set(key, eventsCallBack) - } - if (command.callerId && responseCallBack) { - responseWaiters.set(command.callerId, responseCallBack) - } - - sendToWebSocketServer(command) - } - - function sendToWebSocketServer(command) { - if (commandsWaitingConfirmation === undefined) {return} // object already finalized - - nonce++ - let stringNonce = nonce.toString() - let timestamp = (new Date()).valueOf() - commandsWaitingConfirmation.set(stringNonce, command) - commandsSentByTimestamp.set(stringNonce, timestamp) - - let messageToWebSocketServer = 'Web Browser' + '|*|' + stringNonce + '|*|' + JSON.stringify(command) - - if (WEB_SOCKETS_CONNECTION.readyState === 1) { - WEB_SOCKETS_CONNECTION.send(messageToWebSocketServer) - } else { - //console.log('WebSocket message could not be sent because the connection was not ready. Will retry soon. Message = ' + JSON.stringify(command)) - } - } - - function createEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'createEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function deleteEventHandler(eventHandlerName, callerId, responseCallBack) { - let eventCommand = { - action: 'deleteEventHandler', - eventHandlerName: eventHandlerName, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function listenToEvent(eventHandlerName, eventType, extraData, callerId, responseCallBack, eventsCallBack) { - let eventCommand = { - action: 'listenToEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - extraData: extraData, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack, eventsCallBack) - } - - function stopListening(eventHandlerName, eventSubscriptionId, callerId, responseCallBack) { - let eventCommand = { - action: 'stopListening', - eventHandlerName: eventHandlerName, - eventSubscriptionId: eventSubscriptionId, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function raiseEvent(eventHandlerName, eventType, event, callerId, responseCallBack) { - let eventCommand = { - action: 'raiseEvent', - eventHandlerName: eventHandlerName, - eventType: eventType, - event: event, - callerId: callerId - } - sendCommand(eventCommand, responseCallBack) - } - - function retryCommandsPhysics() { - commandsSentByTimestamp.forEach(checkTimestamp) - - function checkTimestamp(timestamp, nonce) { - const MILISECONDS_TO_WAIT_FOR_RETRYING_A_COMMAND = 10000 - let now = (new Date()).valueOf() - - if ((now - timestamp) > MILISECONDS_TO_WAIT_FOR_RETRYING_A_COMMAND) { - let command = commandsWaitingConfirmation.get(nonce) - commandsWaitingConfirmation.delete(nonce) - commandsSentByTimestamp.delete(nonce) - - sendToWebSocketServer(command) - } - } - } - - function physics() { - if (WEB_SOCKETS_CONNECTION !== undefined) { - if (WEB_SOCKETS_CONNECTION.readyState === 3) { - /* - Connection closed. May happen after computer goes to sleep. - We will try to reconnect, but we will do it no more that once - a minute. - */ - if (lastTryToReconnectDatetime === undefined) { - setuptWebSockets(onOpen) - lastTryToReconnectDatetime = (new Date()).valueOf() - } else { - let now = (new Date()).valueOf() - if (now - lastTryToReconnectDatetime > 60000) { - setuptWebSockets(onOpen) - } - } - - function onOpen() { - if (INFO_LOG === true) { logger.write('[INFO] setuptWebSockets -> Found Web Sockets Connection Closed. Reconnected to WebSockets Server.') } - } - } - } else { - /* - If there is a problem with the configuration then we go through - this path, retrying this until the configuration is fixed. - */ - setuptWebSockets(onOpen) - } - - if (thisObject.isConnected() !== true ) { - if ( lastTryToReconnectDatetime !== undefined) { - if (networkNode !== undefined) { - if (networkNode.payload !== undefined) { - if (networkNode.payload.uiObject !== undefined) { - networkNode.payload.uiObject.setErrorMessage('Failed to Connect to Superalgos Backend via WebSockets. Retrying in 1 minute.') - } - } - } - } - } else { - if (networkNode !== undefined) { - if (networkNode.payload !== undefined) { - if (networkNode.payload.uiObject !== undefined) { - networkNode.payload.uiObject.setStatus('Connected to Superalgos Backend via WebSockets.') - retryCommandsPhysics() - } - } - } - } - - DEBUG.variable4 = 'Commands Waiting For Confirmation from WS Server: ' + commandsWaitingConfirmation.size - } - - function setuptWebSockets(callBackFunction) { - try { - let host - let port - /* At this point the node does not have the payload property yet, that is why we have to do this manually */ - try { - let config = JSON.parse(networkNode.config) - host = config.host - port = config.webSocketsPort - - /* Check if we really have to stablish the connection. */ - if (config.autoConnect === false) {return} - } catch (err) { - networkNode.payload.uiObject.setErrorMessage('Bad configuration. Cannot know the host name or the webSocketsPort.') - return - } - - if (host === undefined) { - networkNode.payload.uiObject.setErrorMessage('Bad configuration. You need to have a host property.') - return - } - - if (port === undefined) { - networkNode.payload.uiObject.setErrorMessage('Bad configuration. You need to have a webSocketsPort property.') - return - } - - const WEB_SOCKETS_URL = 'ws://' + host + ':' + port + '' - - WEB_SOCKETS_CONNECTION = new WebSocket(WEB_SOCKETS_URL) - WEB_SOCKETS_CONNECTION.onerror = error => { - console.log('WebSocket error:' + JSON.stringify(error)) - } - WEB_SOCKETS_CONNECTION.onopen = () => { - if (callBackFunction !== undefined) { - callBackFunction() - } - } - WEB_SOCKETS_CONNECTION.onmessage = e => { - // console.log('Websoked Message Received: ' + e.data) - - let message = JSON.parse(e.data) - - if (message.action === 'Event Raised') { - let key - if (message.callerId !== undefined) { - key = message.eventHandlerName + '-' + message.eventType + '-' + message.callerId - } else { - key = message.eventHandlerName + '-' + message.eventType - } - let handler = eventListeners.get(key) - if (handler) { - handler(message) - } - return - } - - if (message.action === 'Event Server Response') { - let handler = responseWaiters.get(message.callerId) - if (handler) { - handler(message) - } - return - } - - if (message.action === 'Acknowledge') { - commandsWaitingConfirmation.delete(message.nonce) - commandsSentByTimestamp.delete(message.nonce) - return - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] setuptWebSockets -> err = ' + err.stack) } - } - } -} diff --git a/Deprecated-Code/UI/Frame.js b/Deprecated-Code/UI/Frame.js deleted file mode 100644 index 5176f9927..000000000 --- a/Deprecated-Code/UI/Frame.js +++ /dev/null @@ -1,537 +0,0 @@ - -function newFrame() { - const PANEL_CORNERS_RADIUS = 5 - const TITLE_BAR_HEIGHT = 15 // this must be grater than radius - - let thisObject = { - type: 'Rectangle', - containerName: '', // This is for debugging purposes only. - parentFrame: undefined, // Here we store the parent cointainer zoom object. - radius: 0, - offset: undefined, - position: undefined, - container: undefined, - width: browserCanvas.width, - height: browserCanvas.height, - getBodyHeight: getBodyHeight, - draw: draw, - fitIntoFrame: fitIntoFrame, - frameThisPoint: frameThisPoint, // This function changes the actual frame coordinate system to the screen coordinate system. - unframeThisPoint: unframeThisPoint, - isThisPointHere: isThisPointHere, // This function return true is the point received as parameter lives within this frame. - isThisScreenPointHere: isThisScreenPointHere, - isInViewPort: isInViewPort, - isCenterInViewPort: isCenterInViewPort, - initialize: initialize, - finalize: finalize - } - - return thisObject - - function finalize() { - thisObject.parentFrame = undefined - thisObject.position = undefined - thisObject.offset = undefined - } - - function initialize(pType) { - if (pType !== undefined) { thisObject.type = pType } - - thisObject.position = { - x: 0, - y: 0 - } - - thisObject.offset = { - x: 0, - y: 0 - } - } - - function getBodyHeight() { - return thisObject.height - TITLE_BAR_HEIGHT - } - - function isInViewPort() { - /* This function is usefull to know if the object who has this frame is currently appearing at least in part at the UI.projects.superalgos.spaces.chartingSpace.viewport */ - - point1 = { - x: 0, - y: 0 - } - - point3 = { - x: thisObject.width, - y: thisObject.height - } - - /* Now the transformations. */ - - point1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container) - point3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container) - - if (point1.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x && point1.y < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y && point3.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x && point3.y > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y) { - return true - } else { - return false - } - } - - function isCenterInViewPort() { - /* This function is usefull to know if the object who has this frame is currently appearing at least in part at the UI.projects.superalgos.spaces.chartingSpace.viewport */ - - point1 = { - x: thisObject.width * 40 / 100, - y: thisObject.height * 40 / 100 - } - - point3 = { - x: thisObject.width * 40 / 100, - y: thisObject.height * 40 / 100 - } - - /* Now the transformations. */ - - point1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container) - point3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container) - - if (point1.x < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topRight.x && point1.y < UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomRight.y && point3.x > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.bottomLeft.x && point3.y > UI.projects.superalgos.spaces.chartingSpace.viewport.visibleArea.topLeft.y) { - return true - } else { - return false - } - } - - function frameThisPoint(point) { - /* We need not to modify the point received, so me make a copy of it. */ - - let checkPoint = { - x: point.x, - y: point.y - } - - let parentPoint = { - x: 0, - y: 0 - } - - let returnPoint = { - x: 0, - y: 0 - } - - if (thisObject.parentFrame !== undefined) { - parentPoint = thisObject.parentFrame.frameThisPoint(checkPoint) - - returnPoint.x = parentPoint.x + thisObject.position.x + thisObject.offset.x - returnPoint.y = parentPoint.y + thisObject.position.y + thisObject.offset.y - } else { - returnPoint.x = checkPoint.x + thisObject.position.x + thisObject.offset.x - returnPoint.y = checkPoint.y + thisObject.position.y + thisObject.offset.y - } - - return returnPoint - } - - function unframeThisPoint(point) { - /* We need not to modify the point received, so me make a copy of it. */ - - let checkPoint = { - x: point.x, - y: point.y - } - - let parentPoint = { - x: 0, - y: 0 - } - - let returnPoint = { - x: 0, - y: 0 - } - - if (thisObject.parentFrame !== undefined) { - parentPoint = thisObject.parentFrame.unframeThisPoint(checkPoint) - - returnPoint.x = parentPoint.x - thisObject.position.x - returnPoint.y = parentPoint.y - thisObject.position.y - } else { - returnPoint.x = checkPoint.x - thisObject.position.x - returnPoint.y = checkPoint.y - thisObject.position.y - } - - return returnPoint - } - - function fitIntoFrame(point) { - /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ - - if (point.x > thisObject.width) { - point.x = thisObject.width - } - - if (point.x < 0) { - point.x = 0 - } - - if (point.y > thisObject.height) { - point.y = thisObject.height - } - - if (point.y < 0) { - point.y = 0 - } - - return point - } - - function isThisPointHere(point, outsideViewPort, dontTransform, padding) { - // The second parameter is usefull when you want to check a point that you already know is outside the viewport. - // The padding is a distance to the borders of the container. Can be either negative (outside, to increase the cointainer size) or positive (inside to decrease the cointainer size) - - if (padding === undefined) { padding = 0 } - - /* We need not to modify the point received, so me make a copy of it. */ - let checkPoint = { - x: point.x, - y: point.y - } - - /* The point received is on the screen coordinates system, which already has zoom and displacement applied. We need to remove the zoom and displacement - in order to have the point on the containers coordinate system and be able to compare it with its dimmensions. */ - if (dontTransform === false || dontTransform === undefined) { - if (outsideViewPort === true) { - checkPoint = thisObject.container.frame.unframeThisPoint(checkPoint) - } else { - checkPoint = UI.projects.superalgos.utilities.coordinateTransformations.unTransformThisPoint(checkPoint, thisObject.container) - } - } - - /* Now we check if the resulting point is whin the current Frame. */ - if (isNaN(checkPoint.x) || isNaN(checkPoint.y)) { return false } - if (thisObject.type === 'Circle') { - let distance = Math.sqrt(Math.pow(thisObject.position.x - checkPoint.x, 2) + Math.pow(thisObject.position.y - checkPoint.y, 2)) - - if (distance < thisObject.radius) { - return true - } else { - return false - } - } - - if (thisObject.type === 'Rectangle') { - if (checkPoint.x < 0 + padding || checkPoint.y < 0 + padding || checkPoint.x > thisObject.width - padding || checkPoint.y > thisObject.height - padding) { - return false - } else { - return true - } - } - } - - function isThisScreenPointHere(point) { - let checkPoint = { - x: point.x, - y: point.y - } - - let thisPoint = { - x: thisObject.position.x, - y: thisObject.position.y - } - - if (thisObject.parentFrame !== undefined) { - thisPoint = thisObject.parentFrame.frameThisPoint(thisPoint) - } - - /* Now we check if the resulting point is whin the current Frame. */ - - if (thisObject.type === 'Circle') { - let distance = Math.sqrt(Math.pow(thisPoint.x - checkPoint.x, 2) + Math.pow(thisPoint.y - checkPoint.y, 2)) - - if (distance < thisObject.radius) { - return true - } else { - return false - } - } - - if (thisObject.type === 'Rectangle') { - if (checkPoint.x < 0 || checkPoint.y < 0 || checkPoint.x > thisObject.width || checkPoint.y > thisObject.height) { - return false - } else { - return true - } - } - } - - function draw(drawGrid, drawBorders, drawBackground, fitFunction, style) { - if (drawBorders === true) { - borders(fitFunction, style) - } - - if (drawGrid === true) { - grid(fitFunction) - } - - if (drawBackground === true) { - background(fitFunction) - } - } - - function background(fitFunction) { - let params = { - cornerRadius: 5, - lineWidth: 0.1, - opacity: 0.75, - container: thisObject.container, - borderColor: UI_COLOR.DARK, - backgroundColor: UI_COLOR.WHITE, - fitFunction: fitFunction - } - - UI.projects.superalgos.utilities.drawPrint.roundedCornersBackground(params) - - titleBarPoint1 = { - x: 0, - y: TITLE_BAR_HEIGHT - } - - titleBarPoint2 = { - x: thisObject.width, - y: TITLE_BAR_HEIGHT - } - - /* Now the transformations. */ - - titleBarPoint1 = frameThisPoint(titleBarPoint1) - titleBarPoint2 = frameThisPoint(titleBarPoint2) - - if (fitFunction !== undefined) { - titleBarPoint1 = fitFunction(titleBarPoint1) - titleBarPoint2 = fitFunction(titleBarPoint2) - } - - /* We paint the title bar now */ - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.DARK + ', 1)' - browserCanvasContext.beginPath() - - browserCanvasContext.moveTo(titleBarPoint1.x, titleBarPoint1.y) - browserCanvasContext.lineTo(borderPoint1.x - PANEL_CORNERS_RADIUS, borderPoint1.y) - browserCanvasContext.arc(borderPoint1.x, borderPoint1.y, PANEL_CORNERS_RADIUS, 1.0 * Math.PI, 1.5 * Math.PI) - browserCanvasContext.lineTo(borderPoint2.x, borderPoint2.y - PANEL_CORNERS_RADIUS) - browserCanvasContext.arc(borderPoint2.x, borderPoint2.y, PANEL_CORNERS_RADIUS, 1.5 * Math.PI, 2.0 * Math.PI) - browserCanvasContext.lineTo(titleBarPoint2.x, titleBarPoint2.y) - - browserCanvasContext.closePath() - browserCanvasContext.fill() - - browserCanvasContext.lineWidth = 0.1 - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.MANGANESE_PURPLE + ', 0.75)' - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke() - - /* print the title */ - - let labelPoint - let fontSize = 10 - - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - - let label = thisObject.containerName - - let xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO - let yOffset = (TITLE_BAR_HEIGHT - fontSize) / 2 + 2 - - labelPoint = { - x: thisObject.width / 2 - xOffset, - y: TITLE_BAR_HEIGHT - yOffset - } - - labelPoint = thisObject.frameThisPoint(labelPoint) - - if (fitFunction !== undefined) { - labelPoint = fitFunction(labelPoint) - } - - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', 1)' - browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) - } - - function borders(fitFunction, style) { - /* Lest get the important points of the drawing so as to apply the needed transformations. */ - - let point1 - let point2 - let point3 - let point4 - - point1 = { - x: 0, - y: 0 - } - - point2 = { - x: thisObject.width, - y: 0 - } - - point3 = { - x: thisObject.width, - y: thisObject.height - } - - point4 = { - x: 0, - y: thisObject.height - } - - /* Now the transformations. */ - point1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container) - point2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container) - point3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container) - point4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container) - - if (fitFunction !== undefined) { - point1 = fitFunction(point1) - point2 = fitFunction(point2) - point3 = fitFunction(point3) - point4 = fitFunction(point4) - } - - /* Lets start the drawing. */ - browserCanvasContext.beginPath() - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - browserCanvasContext.lineTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - browserCanvasContext.lineTo(point1.x, point1.y) - browserCanvasContext.closePath() - - browserCanvasContext.strokeStyle = 'rgba(' + style.color + ', ' + style.opacity + ')' - browserCanvasContext.lineWidth = style.lineWidth - browserCanvasContext.setLineDash(style.lineDash) - browserCanvasContext.stroke() - - browserCanvasContext.closePath() - } - - function grid(fitFunction, smallLines) { - if (smallLines === true) { - /* Small Lines */ - - let step = thisObject.width / 100 - - browserCanvasContext.beginPath() - - for (let i = 0; i < thisObject.width; i = i + step) { - for (let j = 0; j < thisObject.height; j = j + step) { - let point1 = { - x: 0, - y: j - } - - let point2 = { - x: thisObject.width, - y: j - } - - point1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container) - point2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container) - - if (fitFunction !== undefined) { - point1 = fitFunction(point1) - point2 = fitFunction(point2) - } - - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - } - - let point3 = { - x: thisObject.width, - y: thisObject.height - } - - let point4 = { - x: 0, - y: thisObject.height - } - - point3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container) - point4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container) - - if (fitFunction !== undefined) { - point3 = fitFunction(point3) - point4 = fitFunction(point4) - } - - browserCanvasContext.moveTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - } - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(150, 150, 150, 0.1)' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke() - } - - /* Main Lines */ - - let step = thisObject.width / 20 - - browserCanvasContext.beginPath() - - for (let i = 0; i < thisObject.width; i = i + step) { - for (let j = 0; j < thisObject.height; j = j + step) { - let point1 = { - x: 0, - y: j - } - - let point2 = { - x: thisObject.width, - y: j - } - - point1 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point1, thisObject.container) - point2 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point2, thisObject.container) - - if (fitFunction !== undefined) { - point1 = fitFunction(point1) - point2 = fitFunction(point2) - } - - browserCanvasContext.moveTo(point1.x, point1.y) - browserCanvasContext.lineTo(point2.x, point2.y) - } - - let point3 = { - x: i, - y: 0 - } - - let point4 = { - x: i, - y: thisObject.height - } - - point3 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point3, thisObject.container) - point4 = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(point4, thisObject.container) - - if (fitFunction !== undefined) { - point3 = fitFunction(point3) - point4 = fitFunction(point4) - } - - browserCanvasContext.moveTo(point3.x, point3.y) - browserCanvasContext.lineTo(point4.x, point4.y) - } - browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(100, 100, 100, 0.2)' - browserCanvasContext.lineWidth = 1 - browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.stroke() - } -} diff --git a/Deprecated-Code/UI/Globals.js b/Deprecated-Code/UI/Globals.js deleted file mode 100644 index a2d19421e..000000000 --- a/Deprecated-Code/UI/Globals.js +++ /dev/null @@ -1,230 +0,0 @@ - -let canvas -let PROJECTS_ARRAY -let PROJECTS_SCHEMA -let SCHEMAS_BY_PROJECT = new Map() -/* New Root object*/ -let UI = { - projects: {} -} - -/* User Interface Colors */ -const UI_COLOR = { - DARK: "48, 48, 54", - LIGHT: "234, 226, 222", - GREY: "150, 150, 150", - LIGHT_GREY: "247, 247, 247", - WHITE: "255, 255, 255", - BLACK: "0, 0, 0", - GOLDEN_ORANGE: "240, 162, 2", - RUSTED_RED: "204, 88, 53", - GREEN: "188, 214, 67", - RED: "223, 70, 60", - PATINATED_TURQUOISE: "27,153,139", - TITANIUM_YELLOW: "244,228,9", - MANGANESE_PURPLE: "91,80,122", - TURQUOISE: "74,207,217", - DARK_TURQUOISE: "2,149,170" -}; - -/* User Interface Fonts */ -const UI_FONT = { - PRIMARY: "Saira Condensed", - SECONDARY: "Source Code Pro" -}; - -const MAC_AMOUNT_FACTOR = 5 -const IS_MAC = navigator.platform.toUpperCase().indexOf('MAC') >= 0 - -const DEBUG = {} - -let FONT_ASPECT_RATIO = 0.32; -let ANIMATION_FRAME_PER_SECONDS - -let DISABLE_BROWSER_RESIZE_EVENT = false - -const GET_CONTAINER_PURPOSE = { - MOUSE_OVER: 1, - MOUSE_WHEEL: 2, - MOUSE_CLICK: 3, - DRAGGING: 4 -} - -const ANGLE_TO_PARENT = { - NOT_FIXED: 0, - RANGE_360: 1, - RANGE_180: 2, - RANGE_90: 3, - RANGE_45: 4 -} - -const DISTANCE_TO_PARENT = { - NOT_FIXED: 0, - PARENT_025X: 1, - PARENT_050X: 2, - PARENT_100X: 3, - PARENT_150X: 4, - PARENT_200X: 5 -} - -const ARRANGEMENT_STYLE = { - CONCAVE: 0, - CONVEX: 1, - VERTICAL_RIGHT: 2, - VERTICAL_LEFT: 3, - HORIZONTAL_BOTTOM: 4, - HORIZONTAL_TOP: 5 -} - -/* User Interface Panels */ - -const UI_PANEL = { - WIDTH: { - SMALL: 100, - NORMAL: 150, - MEDIUM: 200, - LARGE: 250, - X_LARGE: 350 - }, - HEIGHT: { - SMALL: 65, - MEDIUM: 90, - NORMAL: 300, - LARGE: 450 - } -}; - - -let marketFilesPeriods = - '[' + - '[' + 24 * 60 * 60 * 1000 + ',' + '"24-hs"' + ']' + ',' + - '[' + 12 * 60 * 60 * 1000 + ',' + '"12-hs"' + ']' + ',' + - '[' + 8 * 60 * 60 * 1000 + ',' + '"08-hs"' + ']' + ',' + - '[' + 6 * 60 * 60 * 1000 + ',' + '"06-hs"' + ']' + ',' + - '[' + 4 * 60 * 60 * 1000 + ',' + '"04-hs"' + ']' + ',' + - '[' + 3 * 60 * 60 * 1000 + ',' + '"03-hs"' + ']' + ',' + - '[' + 2 * 60 * 60 * 1000 + ',' + '"02-hs"' + ']' + ',' + - '[' + 1 * 60 * 60 * 1000 + ',' + '"01-hs"' + ']' + ']'; - -marketFilesPeriods = JSON.parse(marketFilesPeriods); - -let dailyFilePeriods = - '[' + - '[' + 45 * 60 * 1000 + ',' + '"45-min"' + ']' + ',' + - '[' + 40 * 60 * 1000 + ',' + '"40-min"' + ']' + ',' + - '[' + 30 * 60 * 1000 + ',' + '"30-min"' + ']' + ',' + - '[' + 20 * 60 * 1000 + ',' + '"20-min"' + ']' + ',' + - '[' + 15 * 60 * 1000 + ',' + '"15-min"' + ']' + ',' + - '[' + 10 * 60 * 1000 + ',' + '"10-min"' + ']' + ',' + - '[' + 05 * 60 * 1000 + ',' + '"05-min"' + ']' + ',' + - '[' + 04 * 60 * 1000 + ',' + '"04-min"' + ']' + ',' + - '[' + 03 * 60 * 1000 + ',' + '"03-min"' + ']' + ',' + - '[' + 02 * 60 * 1000 + ',' + '"02-min"' + ']' + ',' + - '[' + 01 * 60 * 1000 + ',' + '"01-min"' + ']' + ']'; - -dailyFilePeriods = JSON.parse(dailyFilePeriods); - -let SHOW_ANIMATION_PERFORMACE = false; -let MENU_ITEM_ON_FOCUS -let EDITOR_ON_FOCUS - -let testUser = window.localStorage.getItem("test_user") -let LOGGED_IN_USER_LOCAL_STORAGE_KEY -let LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY - -if (testUser !== null) { - LOGGED_IN_USER_LOCAL_STORAGE_KEY = "test_user" - LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY = "test_access_token" -} else { - LOGGED_IN_USER_LOCAL_STORAGE_KEY = "user" - LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY = "access_token" -} - -const MAX_DEFAULT_RATE_SCALE_VALUE = 35000; // This is needed to know the scale of the market time line. - -const WIDHTER_VOLUME_BAR_BASE_FACTOR = 2.5; -const LESS_WIDHTER_VOLUME_BAR_TOP_FACTOR = 1 / 4; - -const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000; -const _12_HOURS_IN_MILISECONDS = 12 * 60 * 60 * 1000; -const _8_HOURS_IN_MILISECONDS = 8 * 60 * 60 * 1000; -const _6_HOURS_IN_MILISECONDS = 6 * 60 * 60 * 1000; -const _4_HOURS_IN_MILISECONDS = 4 * 60 * 60 * 1000; -const _3_HOURS_IN_MILISECONDS = 3 * 60 * 60 * 1000; -const _2_HOURS_IN_MILISECONDS = 2 * 60 * 60 * 1000; -const _1_HOUR_IN_MILISECONDS = 1 * 60 * 60 * 1000; - -const _45_MINUTES_IN_MILISECONDS = 45 * 60 * 1000; -const _40_MINUTES_IN_MILISECONDS = 40 * 60 * 1000; -const _30_MINUTES_IN_MILISECONDS = 30 * 60 * 1000; -const _20_MINUTES_IN_MILISECONDS = 20 * 60 * 1000; -const _15_MINUTES_IN_MILISECONDS = 15 * 60 * 1000; -const _10_MINUTES_IN_MILISECONDS = 10 * 60 * 1000; -const _5_MINUTES_IN_MILISECONDS = 5 * 60 * 1000; -const _4_MINUTES_IN_MILISECONDS = 4 * 60 * 1000; -const _3_MINUTES_IN_MILISECONDS = 3 * 60 * 1000; -const _2_MINUTES_IN_MILISECONDS = 2 * 60 * 1000; -const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000; - - - -let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the UI.projects.superalgos.spaces.chartingSpace.viewport.initialize if the user had a prevous session with this same browser. -let INITIAL_ZOOM_LEVEL = -28.25 // This is the zoom level at the view port in which the APP starts. -let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the UI.projects.superalgos.spaces.chartingSpace.viewport.initialize if the user had a prevous session with this same browser. -let VERY_LARGE_NUMBER = 100000000000000 - -const TOP_MARGIN = 0 -let CURRENT_TOP_MARGIN = TOP_MARGIN -let AT_FULL_SCREEN_MODE = false - -let maxDate = new Date(); -maxDate.setMilliseconds(0); -maxDate.setDate(maxDate.getDate() + 365 * 1); // We might have charts that projects data into the future. - -const MIN_PLOTABLE_DATE = new Date(2015, 0, 1, 0, 0, 0); -const MAX_PLOTABLE_DATE = maxDate; - -const TOP_SPACE_HEIGHT = 40 -const COCKPIT_SPACE_HEIGHT = 40; -const SIDE_PANEL_WIDTH = 350 -let COCKPIT_SPACE_POSITION = browserCanvas.height - COCKPIT_SPACE_HEIGHT - -const LAYER_STATUS = { - ON: 'on', - LOADING: 'loading', - OFF: 'off' -}; - -let spawnPosition // this is used in several places. - -/* Here we list the valid Time Periods: */ - -const PERIOD_24_HS = "24-hs"; -const PERIOD_12_HS = "12-hs"; -const PERIOD_06_HS = "06-hs"; -const PERIOD_03_HS = "03-hs"; -const PERIOD_01_HS = "01-hs"; -const PERIOD_30_MIN = "30-min"; -const PERIOD_10_MIN = "10-min"; -const PERIOD_05_MIN = "05-min"; -const PERIOD_01_MIN = "01-min"; - -/* -We define here the size of the chartingSpace. It has to bee enough big in order to accomodate all the charts we expect to display in this space. -*/ - -const TIME_MACHINE_WIDTH = 8; -const TIME_MACHINE_HEIGHT = 8; - -let mediaRecorder // to downloadText canvas animation as a mediaRecorder -let marketPanoramaCanvas -let ARE_WE_RECORDING_A_VIDEO = false -let ARE_WE_RECORDING_A_MARKET_PANORAMA = false -let PANORAMA_WAS_PANNED = false -let CURRENT_PANORAMA_POSITION = 0 - -let CAN_SPACES_DRAW = false // This global variable regulates when spaces can or can not draw their contents. - -function toRadians(angle) { - return angle * (Math.PI / 180); -} diff --git a/Deprecated-Code/UI/LICENSE b/Deprecated-Code/UI/LICENSE deleted file mode 100644 index faea7fc57..000000000 --- a/Deprecated-Code/UI/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work plugins a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/UI/PostLoader.js b/Deprecated-Code/UI/PostLoader.js deleted file mode 100644 index cfb5488db..000000000 --- a/Deprecated-Code/UI/PostLoader.js +++ /dev/null @@ -1,147 +0,0 @@ - - -function newAppPostLoader() { - const MODULE_NAME = 'Post Loader' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - start: start - } - - return thisObject - - function start() { - try { - /* Moving PROJECTS_ARRAY to the global variable */ - PROJECTS_ARRAY = window.PROJECTS - window.PROJECTS = undefined - - setBrowserEvents() - setupProjectsSchema() - - function setupProjectsSchema() { - callWebServer(undefined, 'ProjectsSchema', onResponse) - - function onResponse(err, file) { - PROJECTS_SCHEMA = JSON.parse(file) - setupSchemas() - } - } - - function setupSchemas() { - - let totalWebServerCalls = 0 - let webServerResponses = 0 - - for (let i = 0; i < PROJECTS_ARRAY.length; i++) { - let project = PROJECTS_ARRAY[i] - let schemas = { - array: { - appSchema: [], - docSchema: [], - conceptSchema: [] - }, - map: { - appSchema: new Map(), - docSchema: new Map(), - conceptSchema: new Map() - } - } - SCHEMAS_BY_PROJECT.set(project, schemas) - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/AppSchema', onResponseAppSchema) - - function onResponseAppSchema(err, schema) { - try { - schemas.array.appSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.appSchema.length; j++) { - let nodeDefinition = schemas.array.appSchema[j] - let key = nodeDefinition.type - schemas.map.appSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/DocSchema', onResponseDocSchema) - - function onResponseDocSchema(err, schema) { - try { - schemas.array.docSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.docSchema.length; j++) { - let nodeDefinition = schemas.array.docSchema[j] - let key = nodeDefinition.type - schemas.map.docSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - - totalWebServerCalls++ - callWebServer(undefined, 'Schema/' + project + '/ConceptSchema', onResponseConceptSchema) - - function onResponseConceptSchema(err, schema) { - try { - schemas.array.conceptSchema = JSON.parse(schema) - - for (let j = 0; j < schemas.array.conceptSchema.length; j++) { - let nodeDefinition = schemas.array.conceptSchema[j] - let key = nodeDefinition.type - schemas.map.conceptSchema.set(key, nodeDefinition) - } - } catch (err) { - console.log(err.stack) - } - - webServerResponses++ - if (webServerResponses === totalWebServerCalls) { startCanvas() } - } - } - } - - function startCanvas() { - /* If this method is executed for a second time, it should finalize the current execution structure */ - if (canvas !== undefined) { canvas.finalize() } - - canvas = newCanvas() - canvas.initialize() - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] start -> err = ' + err.stack) } - } - } - - function setBrowserEvents() { - window.onbeforeunload = saveWorkspace - - /* handles backspace and refresh(F5) from keyboard */ - window.manageBackRefresh = function (event) { - var tag = event.target.tagName.toLowerCase() - if (event.keyCode === 8 && tag !== 'input' && tag !== 'textarea') { // Backbutton pressed - saveWorkspace() - } else if (event.keyCode === 116) { // F5 pressed - saveWorkspace() - } - } - - window.addEventListener('keydown', window.manageBackRefresh) - - function saveWorkspace() { - UI.projects.superalgos.spaces.designSpace.workspace.save() - } - } -} diff --git a/Deprecated-Code/UI/ProductStorage.js b/Deprecated-Code/UI/ProductStorage.js deleted file mode 100644 index 55d48088f..000000000 --- a/Deprecated-Code/UI/ProductStorage.js +++ /dev/null @@ -1,333 +0,0 @@ - -function newProductStorage(name) { - const MODULE_NAME = 'Product Storage' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - /* - - This object will initialize children objects that will end up loading the data of each set defined at each product of the bot received at initialization. - Once all the underlaying objects are fully initialized it will callback. - - At the same time it will raise an event for each underlaying file being loaded, so that the UI can reflect the progress to the end user. - - Product Storage - | - |-----> SingleFile - | - |-----> FileSequence - | - |-----> DailyFiles -----> FileCursor - | - |-----> MarketFiles - - */ - - let thisObject = { - eventHandler: undefined, - marketFiles: [], - dailyFiles: [], - singleFile: [], - fileSequences: [], - setDatetime: setDatetime, - setTimeFrame: setTimeFrame, - initialize: initialize, - finalize: finalize - } - - thisObject.eventHandler = newEventHandler() - - /* We name the event Handler to easy debugging. */ - - thisObject.eventHandler.name = 'Storage-' + name - - let datetime - let timeFrame - - return thisObject - - function finalize() { - try { - for (let i = 0; i < thisObject.marketFiles.length; i++) { - let marketFile = thisObject.marketFiles[i] - marketFile.finalize() - } - - thisObject.marketFiles = undefined - - for (let i = 0; i < thisObject.dailyFiles.length; i++) { - let dailyFile = thisObject.dailyFiles[i] - dailyFile.finalize() - } - - thisObject.dailyFiles = undefined - - for (let i = 0; i < thisObject.fileSequences.length; i++) { - let fileSequence = thisObject.fileSequences[i] - fileSequence.finalize() - } - - thisObject.fileSequences = undefined - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } - } - } - - function initialize(mine, bot, session, product, exchange, market, pDatetime, pTimeFrame, host, port, eventsServerClient, callBackFunction) { - try { - datetime = pDatetime - timeFrame = pTimeFrame - - let dataSetsToLoad = 0 - let dataSetsLoaded = 0 - - for (let i = 0; i < product.datasets.length; i++) { - let dataset = product.datasets[i] - - switch (dataset.config.type) { - case 'Market Files': { - dataSetsToLoad++ - - let marketFiles = newMarketFiles() - marketFiles.initialize(mine, bot, session, product, dataset, exchange, market, host, port, eventsServerClient, onMarketFileReady) - thisObject.marketFiles.push(marketFiles) - } - break - - case 'Daily Files': { - dataSetsToLoad++ - - let dailyFiles = newDailyFiles() - dailyFiles.initialize(mine, bot, session, product, dataset, exchange, market, pDatetime, pTimeFrame, host, port, eventsServerClient, onDailyFileReady) - thisObject.dailyFiles.push(dailyFiles) - } - break - - case 'Single File': { - dataSetsToLoad++ - - let singleFile = newSingleFile() - singleFile.initialize(mine, bot, session, product, dataset, exchange, market, host, port, eventsServerClient, onSingleFileReady) - thisObject.singleFile.push(singleFile) - } - break - - case 'File Sequence': { - dataSetsToLoad++ - - let fileSequences = newFileSequence() - fileSequences.initialize(mine, bot, session, product, dataset, exchange, market, host, port, eventsServerClient, onFileSequenceReady) - thisObject.fileSequences.push(fileSequences) - } - break - default: - if (ERROR_LOG === true) { logger.write('[WARN] initialize -> dataset with no type defined or type not supported -> dataset.config.type = ' + dataset.config.type) } - } - - function onMarketFileReady(err, pCaller) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - } - let event = { - totalValue: pCaller.getExpectedFiles(), - currentValue: pCaller.getFilesLoaded(), - filesNotLoaded: pCaller.getFilesNotLoaded() - } - - thisObject.eventHandler.raiseEvent('Market File Loaded', event) - - if (event.filesNotLoaded === event.totalValue) { - dataSetsToLoad-- - checkInitializeComplete() - return - } - - if (event.currentValue + event.filesNotLoaded === event.totalValue) { - dataSetsLoaded++ - checkInitializeComplete() - } - } catch (err) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function onDailyFileReady(err, pCaller) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - if (err.message === 'Dataset Unavailable.') { - dataSetsToLoad-- - checkInitializeComplete() - return - } else { - callBackFunction(err) - return - } - } - default: { - callBackFunction(err) - return - } - } - - let event = { - totalValue: pCaller.getExpectedFiles(), - currentValue: pCaller.getFilesLoaded() - } - - thisObject.eventHandler.raiseEvent('Daily File Loaded', event) - - if (event.currentValue === event.totalValue) { - dataSetsLoaded++ - checkInitializeComplete() - } - } catch (err) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function onSingleFileReady(err, pCaller) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - callBackFunction(err) - return - } - - default: { - callBackFunction(err) - return - } - } - let event = { - totalValue: 1, - currentValue: 1 - } - thisObject.eventHandler.raiseEvent('Single File Loaded', event) - - if (event.currentValue === event.totalValue) { - dataSetsLoaded++ - checkInitializeComplete() - } - } catch (err) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function onFileSequenceReady(err, pCaller) { - try { - switch (err.result) { - case GLOBAL.DEFAULT_OK_RESPONSE.result: { - break - } - case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - return - } - case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { - callBackFunction(err) - return - } - default: { - callBackFunction(err) - return - } - } - let event - if (pCaller !== undefined) { - event = { - totalValue: pCaller.getExpectedFiles(), - currentValue: pCaller.getFilesLoaded() - } - } else { // When there are no data the reference to the caller wont arrive here. - event = { - totalValue: 1, - currentValue: 1 - } - } - - thisObject.eventHandler.raiseEvent('File Sequence Loaded', event) - - if (event.currentValue === event.totalValue) { - dataSetsLoaded++ - checkInitializeComplete() - } - } catch (err) { - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function checkInitializeComplete() { - try { - if (dataSetsLoaded === dataSetsToLoad) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE) - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> checkInitializeComplete -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } - callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE) - } - } - - function setDatetime(pDatetime) { - /* If there is a change in the day, then we take some actions, otherwise, we dont. */ - - let currentDate = Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS) - let newDate = Math.trunc(pDatetime.valueOf() / ONE_DAY_IN_MILISECONDS) - - datetime = new Date(pDatetime) - - if (currentDate !== newDate) { - if (timeFrame <= _1_HOUR_IN_MILISECONDS) { - for (let i = 0; i < thisObject.dailyFiles.length; i++) { - thisObject.dailyFiles[i].setDatetime(pDatetime) - } - } - } - } - - function setTimeFrame(pTimeFrame) { - /* We are going to filter out the cases in which the timeFrame received is the same that the one we already know. */ - - if (timeFrame !== pTimeFrame) { - timeFrame = pTimeFrame - - if (timeFrame <= _1_HOUR_IN_MILISECONDS) { - for (let i = 0; i < thisObject.dailyFiles.length; i++) { - thisObject.dailyFiles[i].setTimeFrame(pTimeFrame, datetime) - } - } - } - } -} diff --git a/Deprecated-Code/UI/Project.njsproj b/Deprecated-Code/UI/Project.njsproj deleted file mode 100644 index 299f685a9..000000000 --- a/Deprecated-Code/UI/Project.njsproj +++ /dev/null @@ -1,226 +0,0 @@ - - - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - browser - Debug|Any CPU - - - - Debug - 2.0 - 3ef11619-de26-4b8b-819d-a413df220b76 - - - - - - - . - . - v4.0 - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - 1337 - true - - - true - - - true - - - - - Code - - - Code - - - Code - - - Code - - - Code - - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - - - - - - - - Code - - - - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - diff --git a/Deprecated-Code/UI/README.md b/Deprecated-Code/UI/README.md deleted file mode 100644 index ebef6da4c..000000000 --- a/Deprecated-Code/UI/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Web App UI - -This repo is one of the repositories built into Superalgos. For more information [read the docs](https://docs.superalgos.org/) or check the [Readme](https://github.com/Superalgos/Superalgos/) at the main repository of the project. - -## Copyright and License Notice - -© Copyright 2020 Superalgos. Please see the [License](/LICENSE) for information on how you can use this software. - -## Disclaimer - -THE SOFTWARE AND ITS ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. - -IN NO EVENT WILL SUPERALGOS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SOFTWARE, OR ANY OTHER ASSOCIATED SERVICE OR WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS INTERRUPTION, LOSS OF FUNDS, PROGRAMS OR OTHER DATA OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -# Maintainer - -[![Luis-Fernando-Molina](https://avatars1.githubusercontent.com/u/9479367?s=130&v=4)](https://github.com/Luis-Fernando-Molina) | ----| -[Luis-Fernando-Molina](https://github.com/Luis-Fernando-Molina) | - diff --git a/Deprecated-Code/UI/Utilities.js b/Deprecated-Code/UI/Utilities.js deleted file mode 100644 index c3104adad..000000000 --- a/Deprecated-Code/UI/Utilities.js +++ /dev/null @@ -1,131 +0,0 @@ -function getNodeDefinition(node, project) { - if (project === undefined) { project = node.project } - - let APP_SCHEMA = SCHEMAS_BY_PROJECT.get(project) - if (APP_SCHEMA !== undefined) { - return SCHEMAS_BY_PROJECT.get(project).map.appSchema.get(node.type) - } else { - console.log('[Error] Could not get APP Scchema for project ' + node.project) - } -} - -function dynamicDecimals(value, minDecimals) { - if (minDecimals === undefined) { - minDecimals = 0 - } - let decimals = 0 - if (value < 1) { decimals = 2 } - - if (Math.abs(Math.trunc(value * 10)) < 1) { decimals = 4 } - if (Math.abs(Math.trunc(value * 100)) < 1) { decimals = 5 } - if (Math.abs(Math.trunc(value * 1000)) < 1) { decimals = 6 } - if (Math.abs(Math.trunc(value * 10000)) < 1) { decimals = 7 } - if (Math.abs(Math.trunc(value * 100000)) < 1) { decimals = 8 } - if (Math.abs(Math.trunc(value * 1000000)) < 1) { decimals = 9 } - if (Math.abs(Math.trunc(value * 10000000)) < 1) { decimals = 10 } - if (Math.abs(Math.trunc(value * 100000000000)) < 1) { value = 0; decimals = 0 } - - if (decimals < minDecimals) { decimals = minDecimals } - - let returnValue = Number(value).toFixed(decimals) - return returnValue -} - -function convertTimeFrameToName(pTimeFrame) { - for (let i = 0; i < dailyFilePeriods.length; i++) { - let period = dailyFilePeriods[i] - if (period[0] === pTimeFrame) { - return period[1] - } - } - - for (let i = 0; i < marketFilesPeriods.length; i++) { - let period = marketFilesPeriods[i] - if (period[0] === pTimeFrame) { - return period[1] - } - } -} - -function nextPorwerOf10(number) { - for (let i = -10; i <= 10; i++) { - if (number < Math.pow(10, i)) { - return Math.pow(10, i) - } - } -} - -function pad(str, max) { - str = str.toString() - return str.length < max ? pad('0' + str, max) : str -} - -function moveToUserPosition(container, currentDate, currentRate, coordinateSystem, ignoreX, ignoreY, mousePosition, fitFunction) { - let targetPoint = { - x: currentDate.valueOf(), - y: currentRate - } - - /* Put this point in the coordinate system of the UI.projects.superalgos.spaces.chartingSpace.viewport */ - targetPoint = coordinateSystem.transformThisPoint(targetPoint) - targetPoint = UI.projects.superalgos.utilities.coordinateTransformations.transformThisPoint(targetPoint, container) - - let displaceVector - - let targetNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(targetPoint) - let mouseNoZoom = UI.projects.superalgos.spaces.chartingSpace.viewport.unTransformThisPoint(mousePosition) - - displaceVector = { - x: mouseNoZoom.x - targetNoZoom.x, - y: mouseNoZoom.y - targetNoZoom.y - } - - if (ignoreX) { displaceVector.x = 0 } - if (ignoreY) { displaceVector.y = 0 } - - container.displace(displaceVector) -} - -function removeTime(datetime) { - if (datetime === undefined) { return } - - let dateOnly = new Date(Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS) - - return dateOnly -} - -function newUniqueId() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8) - return v.toString(16) - }) -} - -function splitTextIntoPhrases(text, wordsPerLine) { - let splittedLabel = text.split(' ') - let phrases = [] - let phrase = '' - let wordCount = 0 - for (let i = 0; i < splittedLabel.length; i++) { - phrase = phrase + splittedLabel[i] - wordCount++ - - if (i < splittedLabel.length - 1 && wordCount < wordsPerLine) { - phrase = phrase + ' ' - } - if (wordCount >= wordsPerLine) { - phrases.push(phrase) - phrase = '' - wordCount = 0 - } - } - if (wordCount > 0) { - phrases.push(phrase) - } - return phrases -} - -function getTextWidth(text) { - var metrics = browserCanvasContext.measureText(text); - return metrics.width; -} \ No newline at end of file diff --git a/Deprecated-Code/UI/VideoRecorder.js b/Deprecated-Code/UI/VideoRecorder.js deleted file mode 100644 index 829e59e72..000000000 --- a/Deprecated-Code/UI/VideoRecorder.js +++ /dev/null @@ -1,218 +0,0 @@ -function newVideoRecorder() { - let thisObject = { - recordCanvas: recordCanvas, - physics: physics - } - let lastAction - let wheelAnimationCounter = 0 - let lastWheelPointerIcon - return thisObject - - function physics() { - wheelAnimationCounter-- - if (wheelAnimationCounter < 0) { - wheelAnimationCounter = 0 - } - } - - function recordCanvas() { - { - const DISTANCE_BETWEEN_ICONS = 35 - const ICON_SIZES = 50 - - let mousePointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-pointer') - let draggingIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'hand-drag') - - let leftClickIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-left-click') - let rightClickIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-right-click') - let wheelClickIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-wheel-click') - - let imagePosition - let buttonPressedIcon - - if (canvas.mouse.action === 'key down' && lastAction === 'dragging') { - canvas.mouse.action = 'dragging' - } - switch (canvas.mouse.action) { - case 'moving': { - pointerIcon = mousePointerIcon - break - } - case 'dragging': { - pointerIcon = draggingIcon - break - } - case 'wheel': { - wheelAnimationCounter = 25 - if (canvas.mouse.event.delta > 0) { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-wheel-up') - lastWheelPointerIcon = pointerIcon - } else { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'mouse-wheel-down') - lastWheelPointerIcon = pointerIcon - } - - break - } - case 'key down': { - if (wheelAnimationCounter > 0) { - pointerIcon = lastWheelPointerIcon - } else { - pointerIcon = mousePointerIcon - } - let key = canvas.mouse.event.key - if (key === undefined) { break } - switch (key.toLowerCase()) { - case 'escape': - { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-m') - break - } - case 'm': - { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-m') - break - } - case 'a': - { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-a') - break - } - case 'r': - { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-r') - break - } - case 'c': - { - pointerIcon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-r') - break - } - } - break - } - case 'key up': { - pointerIcon = mousePointerIcon - break - } - } - - lastAction = canvas.mouse.action - - imagePosition = { - x: canvas.mouse.position.x, - y: canvas.mouse.position.y - } - drawMousePointer(pointerIcon, imagePosition, ICON_SIZES) - - switch (canvas.mouse.event.buttons) { - case 0: { - buttonPressedIcon = undefined - break - } - case 1: { - buttonPressedIcon = leftClickIcon - break - } - case 2: { - buttonPressedIcon = rightClickIcon - break - } - case 3: { - buttonPressedIcon = undefined - break - } - case 4: { - buttonPressedIcon = wheelClickIcon - break - } - } - - let firstRow = DISTANCE_BETWEEN_ICONS * 1 + ICON_SIZES * 1 - let secondRow = DISTANCE_BETWEEN_ICONS * 1 + ICON_SIZES * 2 - let icon - - imagePosition = { - x: canvas.mouse.position.x + DISTANCE_BETWEEN_ICONS * 2, - y: canvas.mouse.position.y - } - drawMousePointer(buttonPressedIcon, imagePosition, ICON_SIZES) - - if (canvas.mouse.event.shiftKey === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-shift') - imagePosition = { - x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 3, - y: canvas.mouse.position.y + firstRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.ctrlKey === true || canvas.mouse.event.metaKey === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-ctrl') - imagePosition = { - x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 3, - y: canvas.mouse.position.y + secondRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.altKey === true) { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-alt') - imagePosition = { - x: canvas.mouse.position.x + DISTANCE_BETWEEN_ICONS * 3 + ICON_SIZES * 0, - y: canvas.mouse.position.y + secondRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.code === 'ArrowUp') { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-up') - imagePosition = { - x: canvas.mouse.position.x - 0, - y: canvas.mouse.position.y + firstRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.code === 'ArrowDown') { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-down') - imagePosition = { - x: canvas.mouse.position.x - 0, - y: canvas.mouse.position.y + secondRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.code === 'ArrowLeft') { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-left') - imagePosition = { - x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 0 - ICON_SIZES * 1, - y: canvas.mouse.position.y + secondRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - if (canvas.mouse.event.code === 'ArrowRight') { - icon = UI.projects.superalgos.spaces.designSpace.getIconByProjectAndName( 'Superalgos', 'key-right') - imagePosition = { - x: canvas.mouse.position.x + DISTANCE_BETWEEN_ICONS * 0 + ICON_SIZES * 1, - y: canvas.mouse.position.y + secondRow - } - drawMousePointer(icon, imagePosition, ICON_SIZES) - } - - function drawMousePointer(icon, imagePosition, imageSize) { - if (icon !== undefined) { - if (icon.canDrawIcon === true) { - browserCanvasContext.drawImage( - icon, imagePosition.x, - imagePosition.y, - imageSize, - imageSize) - } - } - } - mediaRecorder.capture(browserCanvas) - } - } -} diff --git a/Deprecated-Code/UI/WebDebugLog.js b/Deprecated-Code/UI/WebDebugLog.js deleted file mode 100644 index 2a6bc1af1..000000000 --- a/Deprecated-Code/UI/WebDebugLog.js +++ /dev/null @@ -1,21 +0,0 @@ -function newWebDebugLog() { - try { - let thisObject = { - write: write, - fileName: 'undefined' - } - - return thisObject - - function write(pText) { - console.log(spacePad(thisObject.fileName, 50) + ' : ' + pText) - - function spacePad(str, max) { - str = str.toString() - return str.length < max ? spacePad(' ' + str, max) : str - } - } - } catch (err) { - console.log(spacePad(MODULE_NAME, 50) + ' : ' + '[ERROR] WebDebugLog --> err = ' + err.stack) - } -} diff --git a/Deprecated-Code/UsersModule/.gitattributes b/Deprecated-Code/UsersModule/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/Deprecated-Code/UsersModule/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/Deprecated-Code/UsersModule/CODE_OF_CONDUCT.md b/Deprecated-Code/UsersModule/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/UsersModule/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/UsersModule/CONTRIBUTING.md b/Deprecated-Code/UsersModule/CONTRIBUTING.md deleted file mode 100644 index 67e80047c..000000000 --- a/Deprecated-Code/UsersModule/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regard. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Superalgos.org ("Project"). - -**What is this?** This is the Project's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Project. - -**Why is this?** The Project needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Project having the legal rights to the products and services it is providing so that the Project can continue operating and doing business. - -The Project also believes that it's important to be clear on what it doesn't own. The Project doesn't want you looking over your shoulder every time you work on something personal or worrying that the Project will someday seize your open source non-lethal mousetrap simulation software. In other words, the Project isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Project cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Project's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Project owns.** The Project owns any IP ("Project IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Project product or service at the time you developed, invented, or created it, (ii) developed for use by the Project, or (iii) developed or promoted with existing Project IP or with the Project's endorsement. You hereby grant and assign, and will grant and assign, to the Project all rights and interests in all Project IP. - - "Project IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Project doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Project doesn't own it. In other words, the Project doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Project projects.** If you include your own IP – such as IP you created prior to working for the Project – into a Project product or service, it's still yours, of course, but you grant the Project a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Project would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Project projects.** The Project recognizes that you may be engaged in work that requires you to submit IP to entities other than the Project, such as open source projects used by the Project. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Project and so should be run through Legal first. - -5. **Voluntary Works** All Project IP that you are involved with or create as part of your work for the Project is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Project to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Project might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Project IP or IP under License (together, "All IP"), and, if the Project asks, to provide those records to the Project. You agree to help the Project secure and defend its rights in All IP. For your help the Project will compensate you at a reasonable rate. If the Project is unable to secure your help, you authorize the Project to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Project, you will have access to sensitive confidential information that is important to the Project's business. You are responsible for keeping this information confidential, including after you end your work for the Project. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Project because it is not publicly known. - - The Project's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Project's Confidential Information for the purpose of performing your contribution and for the benefit of the Project. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. diff --git a/Deprecated-Code/UsersModule/LICENSE b/Deprecated-Code/UsersModule/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/UsersModule/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/UsersModule/README.md b/Deprecated-Code/UsersModule/README.md deleted file mode 100644 index d148bc8e8..000000000 --- a/Deprecated-Code/UsersModule/README.md +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/Deprecated-Code/UsersModule/client/.gitignore b/Deprecated-Code/UsersModule/client/.gitignore deleted file mode 100644 index 529a62da1..000000000 --- a/Deprecated-Code/UsersModule/client/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. -/node_modules -/coverage diff --git a/Deprecated-Code/UsersModule/client/.npnignore b/Deprecated-Code/UsersModule/client/.npnignore deleted file mode 100644 index 567609b12..000000000 --- a/Deprecated-Code/UsersModule/client/.npnignore +++ /dev/null @@ -1 +0,0 @@ -build/ diff --git a/Deprecated-Code/UsersModule/client/CODE_OF_CONDUCT.md b/Deprecated-Code/UsersModule/client/CODE_OF_CONDUCT.md deleted file mode 100644 index c71b685b4..000000000 --- a/Deprecated-Code/UsersModule/client/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/UsersModule/client/CONTRIBUTING.md b/Deprecated-Code/UsersModule/client/CONTRIBUTING.md deleted file mode 100644 index 311653120..000000000 --- a/Deprecated-Code/UsersModule/client/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Advanced Algos LTD is a startup, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Advanced Algos LTD ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Voluntary Works** All Company IP that you are involved with or create as part of your work for the Company is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Company to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/UsersModule/client/LICENSE b/Deprecated-Code/UsersModule/client/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/UsersModule/client/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/UsersModule/client/README.md b/Deprecated-Code/UsersModule/client/README.md deleted file mode 100644 index 5bbfc5f67..000000000 --- a/Deprecated-Code/UsersModule/client/README.md +++ /dev/null @@ -1,2486 +0,0 @@ -This project was bootstrapped with [Create React App](https://github.com/facebookincubator/create-react-app). - -Below you will find some information on how to perform common tasks.
    -You can find the most recent version of this guide [here](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md). - -## Table of Contents - -- [Updating to New Releases](#updating-to-new-releases) -- [Sending Feedback](#sending-feedback) -- [Folder Structure](#folder-structure) -- [Available Scripts](#available-scripts) - - [npm start](#npm-start) - - [npm test](#npm-test) - - [npm run build](#npm-run-build) - - [npm run eject](#npm-run-eject) -- [Supported Browsers](#supported-browsers) -- [Supported Language Features and Polyfills](#supported-language-features-and-polyfills) -- [Syntax Highlighting in the Editor](#syntax-highlighting-in-the-editor) -- [Displaying Lint Output in the Editor](#displaying-lint-output-in-the-editor) -- [Debugging in the Editor](#debugging-in-the-editor) -- [Formatting Code Automatically](#formatting-code-automatically) -- [Changing the Page ``](#changing-the-page-title) -- [Installing a Dependency](#installing-a-dependency) -- [Importing a Component](#importing-a-component) -- [Code Splitting](#code-splitting) -- [Adding a Stylesheet](#adding-a-stylesheet) -- [Post-Processing CSS](#post-processing-css) -- [Adding a CSS Preprocessor (Sass, Less etc.)](#adding-a-css-preprocessor-sass-less-etc) -- [Adding Images, Fonts, and Files](#adding-images-fonts-and-files) -- [Using the `public` Folder](#using-the-public-folder) - - [Changing the HTML](#changing-the-html) - - [Adding Assets Outside of the Module System](#adding-assets-outside-of-the-module-system) - - [When to Use the `public` Folder](#when-to-use-the-public-folder) -- [Using Global Variables](#using-global-variables) -- [Adding Bootstrap](#adding-bootstrap) - - [Using a Custom Theme](#using-a-custom-theme) -- [Adding Flow](#adding-flow) -- [Adding a Router](#adding-a-router) -- [Adding Custom Environment Variables](#adding-custom-environment-variables) - - [Referencing Environment Variables in the HTML](#referencing-environment-variables-in-the-html) - - [Adding Temporary Environment Variables In Your Shell](#adding-temporary-environment-variables-in-your-shell) - - [Adding Development Environment Variables In `.env`](#adding-development-environment-variables-in-env) -- [Can I Use Decorators?](#can-i-use-decorators) -- [Fetching Data with AJAX Requests](#fetching-data-with-ajax-requests) -- [Integrating with an API Backend](#integrating-with-an-api-backend) - - [Node](#node) - - [Ruby on Rails](#ruby-on-rails) -- [Proxying API Requests in Development](#proxying-api-requests-in-development) - - ["Invalid Host Header" Errors After Configuring Proxy](#invalid-host-header-errors-after-configuring-proxy) - - [Configuring the Proxy Manually](#configuring-the-proxy-manually) - - [Configuring a WebSocket Proxy](#configuring-a-websocket-proxy) -- [Using HTTPS in Development](#using-https-in-development) -- [Generating Dynamic `<meta>` Tags on the Server](#generating-dynamic-meta-tags-on-the-server) -- [Pre-Rendering into Static HTML Files](#pre-rendering-into-static-html-files) -- [Injecting Data from the Server into the Page](#injecting-data-from-the-server-into-the-page) -- [Running Tests](#running-tests) - - [Filename Conventions](#filename-conventions) - - [Command Line Interface](#command-line-interface) - - [Version Control Integration](#version-control-integration) - - [Writing Tests](#writing-tests) - - [Testing Components](#testing-components) - - [Using Third Party Assertion Libraries](#using-third-party-assertion-libraries) - - [Initializing Test Environment](#initializing-test-environment) - - [Focusing and Excluding Tests](#focusing-and-excluding-tests) - - [Coverage Reporting](#coverage-reporting) - - [Continuous Integration](#continuous-integration) - - [Disabling jsdom](#disabling-jsdom) - - [Snapshot Testing](#snapshot-testing) - - [Editor Integration](#editor-integration) -- [Debugging Tests](#debugging-tests) - - [Debugging Tests in Chrome](#debugging-tests-in-chrome) - - [Debugging Tests in Visual Studio Code](#debugging-tests-in-visual-studio-code) -- [Developing Components in Isolation](#developing-components-in-isolation) - - [Getting Started with Storybook](#getting-started-with-storybook) - - [Getting Started with Styleguidist](#getting-started-with-styleguidist) -- [Publishing Components to npm](#publishing-components-to-npm) -- [Making a Progressive Web App](#making-a-progressive-web-app) - - [Opting Out of Caching](#opting-out-of-caching) - - [Offline-First Considerations](#offline-first-considerations) - - [Progressive Web App Metadata](#progressive-web-app-metadata) -- [Analyzing the Bundle Size](#analyzing-the-bundle-size) -- [Deployment](#deployment) - - [Static Server](#static-server) - - [Other Solutions](#other-solutions) - - [Serving Apps with Client-Side Routing](#serving-apps-with-client-side-routing) - - [Building for Relative Paths](#building-for-relative-paths) - - [Azure](#azure) - - [Firebase](#firebase) - - [GitHub Pages](#github-pages) - - [Heroku](#heroku) - - [Netlify](#netlify) - - [Now](#now) - - [S3 and CloudFront](#s3-and-cloudfront) - - [Surge](#surge) -- [Advanced Configuration](#advanced-configuration) -- [Troubleshooting](#troubleshooting) - - [`npm start` doesn’t detect changes](#npm-start-doesnt-detect-changes) - - [`npm test` hangs on macOS Sierra](#npm-test-hangs-on-macos-sierra) - - [`npm run build` exits too early](#npm-run-build-exits-too-early) - - [`npm run build` fails on Heroku](#npm-run-build-fails-on-heroku) - - [`npm run build` fails to minify](#npm-run-build-fails-to-minify) - - [Moment.js locales are missing](#momentjs-locales-are-missing) -- [Alternatives to Ejecting](#alternatives-to-ejecting) -- [Something Missing?](#something-missing) - -## Updating to New Releases - -Create React App is divided into two packages: - -* `create-react-app` is a global command-line utility that you use to create new projects. -* `react-scripts` is a development dependency in the generated projects (including this one). - -You almost never need to update `create-react-app` itself: it delegates all the setup to `react-scripts`. - -When you run `create-react-app`, it always creates the project with the latest version of `react-scripts` so you’ll get all the new features and improvements in newly created apps automatically. - -To update an existing project to a new version of `react-scripts`, [open the changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md), find the version you’re currently on (check `package.json` in this folder if you’re not sure), and apply the migration instructions for the newer versions. - -In most cases bumping the `react-scripts` version in `package.json` and running `npm install` in this folder should be enough, but it’s good to consult the [changelog](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md) for potential breaking changes. - -We commit to keeping the breaking changes minimal so you can upgrade `react-scripts` painlessly. - -## Sending Feedback - -We are always open to [your feedback](https://github.com/facebookincubator/create-react-app/issues). - -## Folder Structure - -After creation, your project should look like this: - -``` -my-app/ - README.md - node_modules/ - package.json - public/ - index.html - favicon.ico - src/ - App.css - App.js - App.test.js - index.css - index.js - logo.svg -``` - -For the project to build, **these files must exist with exact filenames**: - -* `public/index.html` is the page template; -* `src/index.js` is the JavaScript entry point. - -You can delete or rename the other files. - -You may create subdirectories inside `src`. For faster rebuilds, only files inside `src` are processed by Webpack.<br> -You need to **put any JS and CSS files inside `src`**, otherwise Webpack won’t see them. - -Only files inside `public` can be used from `public/index.html`.<br> -Read instructions below for using assets from JavaScript and HTML. - -You can, however, create more top-level directories.<br> -They will not be included in the production build so you can use them for things like documentation. - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.<br> -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.<br> -You will also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.<br> -See the section about [running tests](#running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.<br> -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.<br> -Your app is ready to be deployed! - -See the section about [deployment](#deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Supported Browsers - -By default, the generated project uses the latest version of React. - -You can refer [to the React documentation](https://reactjs.org/docs/react-dom.html#browser-support) for more information about supported browsers. - -## Supported Language Features and Polyfills - -This project supports a superset of the latest JavaScript standard.<br> -In addition to [ES6](https://github.com/lukehoban/es6features) syntax features, it also supports: - -* [Exponentiation Operator](https://github.com/rwaldron/exponentiation-operator) (ES2016). -* [Async/await](https://github.com/tc39/ecmascript-asyncawait) (ES2017). -* [Object Rest/Spread Properties](https://github.com/sebmarkbage/ecmascript-rest-spread) (stage 3 proposal). -* [Dynamic import()](https://github.com/tc39/proposal-dynamic-import) (stage 3 proposal) -* [Class Fields and Static Properties](https://github.com/tc39/proposal-class-public-fields) (part of stage 3 proposal). -* [JSX](https://facebook.github.io/react/docs/introducing-jsx.html) and [Flow](https://flowtype.org/) syntax. - -Learn more about [different proposal stages](https://babeljs.io/docs/plugins/#presets-stage-x-experimental-presets-). - -While we recommend using experimental proposals with some caution, Facebook heavily uses these features in the product code, so we intend to provide [codemods](https://medium.com/@cpojer/effective-javascript-codemods-5a6686bb46fb) if any of these proposals change in the future. - -Note that **the project only includes a few ES6 [polyfills](https://en.wikipedia.org/wiki/Polyfill)**: - -* [`Object.assign()`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) via [`object-assign`](https://github.com/sindresorhus/object-assign). -* [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) via [`promise`](https://github.com/then/promise). -* [`fetch()`](https://developer.mozilla.org/en/docs/Web/API/Fetch_API) via [`whatwg-fetch`](https://github.com/github/fetch). - -If you use any other ES6+ features that need **runtime support** (such as `Array.from()` or `Symbol`), make sure you are including the appropriate polyfills manually, or that the browsers you are targeting already support them. - -Also note that using some newer syntax features like `for...of` or `[...nonArrayValue]` causes Babel to emit code that depends on ES6 runtime features and might not work without a polyfill. When in doubt, use [Babel REPL](https://babeljs.io/repl/) to see what any specific syntax compiles down to. - -## Syntax Highlighting in the Editor - -To configure the syntax highlighting in your favorite text editor, head to the [relevant Babel documentation page](https://babeljs.io/docs/editors) and follow the instructions. Some of the most popular editors are covered. - -## Displaying Lint Output in the Editor - ->Note: this feature is available with `react-scripts@0.2.0` and higher.<br> ->It also only works with npm 3 or higher. - -Some editors, including Sublime Text, Atom, and Visual Studio Code, provide plugins for ESLint. - -They are not required for linting. You should see the linter output right in your terminal as well as the browser console. However, if you prefer the lint results to appear right in your editor, there are some extra steps you can do. - -You would need to install an ESLint plugin for your editor first. Then, add a file called `.eslintrc` to the project root: - -```js -{ - "extends": "react-app" -} -``` - -Now your editor should report the linting warnings. - -Note that even if you edit your `.eslintrc` file further, these changes will **only affect the editor integration**. They won’t affect the terminal and in-browser lint output. This is because Create React App intentionally provides a minimal set of rules that find common mistakes. - -If you want to enforce a coding style for your project, consider using [Prettier](https://github.com/jlongster/prettier) instead of ESLint style rules. - -## Debugging in the Editor - -**This feature is currently only supported by [Visual Studio Code](https://code.visualstudio.com) and [WebStorm](https://www.jetbrains.com/webstorm/).** - -Visual Studio Code and WebStorm support debugging out of the box with Create React App. This enables you as a developer to write and debug your React code without leaving the editor, and most importantly it enables you to have a continuous development workflow, where context switching is minimal, as you don’t have to switch between tools. - -### Visual Studio Code - -You would need to have the latest version of [VS Code](https://code.visualstudio.com) and VS Code [Chrome Debugger Extension](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) installed. - -Then add the block below to your `launch.json` file and put it inside the `.vscode` folder in your app’s root directory. - -```json -{ - "version": "0.2.0", - "configurations": [{ - "name": "Chrome", - "type": "chrome", - "request": "launch", - "url": "http://localhost:3000", - "webRoot": "${workspaceRoot}/src", - "sourceMapPathOverrides": { - "webpack:///src/*": "${webRoot}/*" - } - }] -} -``` ->Note: the URL may be different if you've made adjustments via the [HOST or PORT environment variables](#advanced-configuration). - -Start your app by running `npm start`, and start debugging in VS Code by pressing `F5` or by clicking the green debug icon. You can now write code, set breakpoints, make changes to the code, and debug your newly modified code—all from your editor. - -Having problems with VS Code Debugging? Please see their [troubleshooting guide](https://github.com/Microsoft/vscode-chrome-debug/blob/master/README.md#troubleshooting). - -### WebStorm - -You would need to have [WebStorm](https://www.jetbrains.com/webstorm/) and [JetBrains IDE Support](https://chrome.google.com/webstore/detail/jetbrains-ide-support/hmhgeddbohgjknpmjagkdomcpobmllji) Chrome extension installed. - -In the WebStorm menu `Run` select `Edit Configurations...`. Then click `+` and select `JavaScript Debug`. Paste `http://localhost:3000` into the URL field and save the configuration. - ->Note: the URL may be different if you've made adjustments via the [HOST or PORT environment variables](#advanced-configuration). - -Start your app by running `npm start`, then press `^D` on macOS or `F9` on Windows and Linux or click the green debug icon to start debugging in WebStorm. - -The same way you can debug your application in IntelliJ IDEA Ultimate, PhpStorm, PyCharm Pro, and RubyMine. - -## Formatting Code Automatically - -Prettier is an opinionated code formatter with support for JavaScript, CSS and JSON. With Prettier you can format the code you write automatically to ensure a code style within your project. See the [Prettier's GitHub page](https://github.com/prettier/prettier) for more information, and look at this [page to see it in action](https://prettier.github.io/prettier/). - -To format our code whenever we make a commit in git, we need to install the following dependencies: - -```sh -npm install --save husky lint-staged prettier -``` - -Alternatively you may use `yarn`: - -```sh -yarn add husky lint-staged prettier -``` - -* `husky` makes it easy to use githooks as if they are npm scripts. -* `lint-staged` allows us to run scripts on staged files in git. See this [blog post about lint-staged to learn more about it](https://medium.com/@okonetchnikov/make-linting-great-again-f3890e1ad6b8). -* `prettier` is the JavaScript formatter we will run before commits. - -Now we can make sure every file is formatted correctly by adding a few lines to the `package.json` in the project root. - -Add the following line to `scripts` section: - -```diff - "scripts": { -+ "precommit": "lint-staged", - "start": "react-scripts start", - "build": "react-scripts build", -``` - -Next we add a 'lint-staged' field to the `package.json`, for example: - -```diff - "dependencies": { - // ... - }, -+ "lint-staged": { -+ "src/**/*.{js,jsx,json,css}": [ -+ "prettier --single-quote --write", -+ "git add" -+ ] -+ }, - "scripts": { -``` - -Now, whenever you make a commit, Prettier will format the changed files automatically. You can also run `./node_modules/.bin/prettier --single-quote --write "src/**/*.{js,jsx,json,css}"` to format your entire project for the first time. - -Next you might want to integrate Prettier in your favorite editor. Read the section on [Editor Integration](https://prettier.io/docs/en/editors.html) on the Prettier GitHub page. - -## Changing the Page `<title>` - -You can find the source HTML file in the `public` folder of the generated project. You may edit the `<title>` tag in it to change the title from “React App” to anything else. - -Note that normally you wouldn’t edit files in the `public` folder very often. For example, [adding a stylesheet](#adding-a-stylesheet) is done without touching the HTML. - -If you need to dynamically update the page title based on the content, you can use the browser [`document.title`](https://developer.mozilla.org/en-US/docs/Web/API/Document/title) API. For more complex scenarios when you want to change the title from React components, you can use [React Helmet](https://github.com/nfl/react-helmet), a third party library. - -If you use a custom server for your app in production and want to modify the title before it gets sent to the browser, you can follow advice in [this section](#generating-dynamic-meta-tags-on-the-server). Alternatively, you can pre-build each page as a static HTML file which then loads the JavaScript bundle, which is covered [here](#pre-rendering-into-static-html-files). - -## Installing a Dependency - -The generated project includes React and ReactDOM as dependencies. It also includes a set of scripts used by Create React App as a development dependency. You may install other dependencies (for example, React Router) with `npm`: - -```sh -npm install --save react-router -``` - -Alternatively you may use `yarn`: - -```sh -yarn add react-router -``` - -This works for any library, not just `react-router`. - -## Importing a Component - -This project setup supports ES6 modules thanks to Babel.<br> -While you can still use `require()` and `module.exports`, we encourage you to use [`import` and `export`](http://exploringjs.com/es6/ch_modules.html) instead. - -For example: - -### `Button.js` - -```js -import React, { Component } from 'react'; - -class Button extends Component { - render() { - // ... - } -} - -export default Button; // Don’t forget to use export default! -``` - -### `DangerButton.js` - - -```js -import React, { Component } from 'react'; -import Button from './Button'; // Import a component from another file - -class DangerButton extends Component { - render() { - return <Button color="red" />; - } -} - -export default DangerButton; -``` - -Be aware of the [difference between default and named exports](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281). It is a common source of mistakes. - -We suggest that you stick to using default imports and exports when a module only exports a single thing (for example, a component). That’s what you get when you use `export default Button` and `import Button from './Button'`. - -Named exports are useful for utility modules that export several functions. A module may have at most one default export and as many named exports as you like. - -Learn more about ES6 modules: - -* [When to use the curly braces?](http://stackoverflow.com/questions/36795819/react-native-es-6-when-should-i-use-curly-braces-for-import/36796281#36796281) -* [Exploring ES6: Modules](http://exploringjs.com/es6/ch_modules.html) -* [Understanding ES6: Modules](https://leanpub.com/understandinges6/read#leanpub-auto-encapsulating-code-with-modules) - -## Code Splitting - -Instead of downloading the entire app before users can use it, code splitting allows you to split your code into small chunks which you can then load on demand. - -This project setup supports code splitting via [dynamic `import()`](http://2ality.com/2017/01/import-operator.html#loading-code-on-demand). Its [proposal](https://github.com/tc39/proposal-dynamic-import) is in stage 3. The `import()` function-like form takes the module name as an argument and returns a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) which always resolves to the namespace object of the module. - -Here is an example: - -### `moduleA.js` - -```js -const moduleA = 'Hello'; - -export { moduleA }; -``` -### `App.js` - -```js -import React, { Component } from 'react'; - -class App extends Component { - handleClick = () => { - import('./moduleA') - .then(({ moduleA }) => { - // Use moduleA - }) - .catch(err => { - // Handle failure - }); - }; - - render() { - return ( - <div> - <button onClick={this.handleClick}>Load</button> - </div> - ); - } -} - -export default App; -``` - -This will make `moduleA.js` and all its unique dependencies as a separate chunk that only loads after the user clicks the 'Load' button. - -You can also use it with `async` / `await` syntax if you prefer it. - -### With React Router - -If you are using React Router check out [this tutorial](http://serverless-stack.com/chapters/code-splitting-in-create-react-app.html) on how to use code splitting with it. You can find the companion GitHub repository [here](https://github.com/AnomalyInnovations/serverless-stack-demo-client/tree/code-splitting-in-create-react-app). - -Also check out the [Code Splitting](https://reactjs.org/docs/code-splitting.html) section in React documentation. - -## Adding a Stylesheet - -This project setup uses [Webpack](https://webpack.js.org/) for handling all assets. Webpack offers a custom way of “extending” the concept of `import` beyond JavaScript. To express that a JavaScript file depends on a CSS file, you need to **import the CSS from the JavaScript file**: - -### `Button.css` - -```css -.Button { - padding: 20px; -} -``` - -### `Button.js` - -```js -import React, { Component } from 'react'; -import './Button.css'; // Tell Webpack that Button.js uses these styles - -class Button extends Component { - render() { - // You can use them as regular CSS styles - return <div className="Button" />; - } -} -``` - -**This is not required for React** but many people find this feature convenient. You can read about the benefits of this approach [here](https://medium.com/seek-blog/block-element-modifying-your-javascript-components-d7f99fcab52b). However you should be aware that this makes your code less portable to other build tools and environments than Webpack. - -In development, expressing dependencies this way allows your styles to be reloaded on the fly as you edit them. In production, all CSS files will be concatenated into a single minified `.css` file in the build output. - -If you are concerned about using Webpack-specific semantics, you can put all your CSS right into `src/index.css`. It would still be imported from `src/index.js`, but you could always remove that import if you later migrate to a different build tool. - -## Post-Processing CSS - -This project setup minifies your CSS and adds vendor prefixes to it automatically through [Autoprefixer](https://github.com/postcss/autoprefixer) so you don’t need to worry about it. - -For example, this: - -```css -.App { - display: flex; - flex-direction: row; - align-items: center; -} -``` - -becomes this: - -```css -.App { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -``` - -If you need to disable autoprefixing for some reason, [follow this section](https://github.com/postcss/autoprefixer#disabling). - -## Adding a CSS Preprocessor (Sass, Less etc.) - -Generally, we recommend that you don’t reuse the same CSS classes across different components. For example, instead of using a `.Button` CSS class in `<AcceptButton>` and `<RejectButton>` components, we recommend creating a `<Button>` component with its own `.Button` styles, that both `<AcceptButton>` and `<RejectButton>` can render (but [not inherit](https://facebook.github.io/react/docs/composition-vs-inheritance.html)). - -Following this rule often makes CSS preprocessors less useful, as features like mixins and nesting are replaced by component composition. You can, however, integrate a CSS preprocessor if you find it valuable. In this walkthrough, we will be using Sass, but you can also use Less, or another alternative. - -First, let’s install the command-line interface for Sass: - -```sh -npm install --save node-sass-chokidar -``` - -Alternatively you may use `yarn`: - -```sh -yarn add node-sass-chokidar -``` - -Then in `package.json`, add the following lines to `scripts`: - -```diff - "scripts": { -+ "build-css": "node-sass-chokidar src/ -o src/", -+ "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test --env=jsdom", -``` - ->Note: To use a different preprocessor, replace `build-css` and `watch-css` commands according to your preprocessor’s documentation. - -Now you can rename `src/App.css` to `src/App.scss` and run `npm run watch-css`. The watcher will find every Sass file in `src` subdirectories, and create a corresponding CSS file next to it, in our case overwriting `src/App.css`. Since `src/App.js` still imports `src/App.css`, the styles become a part of your application. You can now edit `src/App.scss`, and `src/App.css` will be regenerated. - -To share variables between Sass files, you can use Sass imports. For example, `src/App.scss` and other component style files could include `@import "./shared.scss";` with variable definitions. - -To enable importing files without using relative paths, you can add the `--include-path` option to the command in `package.json`. - -``` -"build-css": "node-sass-chokidar --include-path ./src --include-path ./node_modules src/ -o src/", -"watch-css": "npm run build-css && node-sass-chokidar --include-path ./src --include-path ./node_modules src/ -o src/ --watch --recursive", -``` - -This will allow you to do imports like - -```scss -@import 'styles/_colors.scss'; // assuming a styles directory under src/ -@import 'nprogress/nprogress'; // importing a css file from the nprogress node module -``` - -At this point you might want to remove all CSS files from the source control, and add `src/**/*.css` to your `.gitignore` file. It is generally a good practice to keep the build products outside of the source control. - -As a final step, you may find it convenient to run `watch-css` automatically with `npm start`, and run `build-css` as a part of `npm run build`. You can use the `&&` operator to execute two scripts sequentially. However, there is no cross-platform way to run two scripts in parallel, so we will install a package for this: - -```sh -npm install --save npm-run-all -``` - -Alternatively you may use `yarn`: - -```sh -yarn add npm-run-all -``` - -Then we can change `start` and `build` scripts to include the CSS preprocessor commands: - -```diff - "scripts": { - "build-css": "node-sass-chokidar src/ -o src/", - "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", -- "start": "react-scripts start", -- "build": "react-scripts build", -+ "start-js": "react-scripts start", -+ "start": "npm-run-all -p watch-css start-js", -+ "build-js": "react-scripts build", -+ "build": "npm-run-all build-css build-js", - "test": "react-scripts test --env=jsdom", - "eject": "react-scripts eject" - } -``` - -Now running `npm start` and `npm run build` also builds Sass files. - -**Why `node-sass-chokidar`?** - -`node-sass` has been reported as having the following issues: - -- `node-sass --watch` has been reported to have *performance issues* in certain conditions when used in a virtual machine or with docker. - -- Infinite styles compiling [#1939](https://github.com/facebookincubator/create-react-app/issues/1939) - -- `node-sass` has been reported as having issues with detecting new files in a directory [#1891](https://github.com/sass/node-sass/issues/1891) - - `node-sass-chokidar` is used here as it addresses these issues. - -## Adding Images, Fonts, and Files - -With Webpack, using static assets like images and fonts works similarly to CSS. - -You can **`import` a file right in a JavaScript module**. This tells Webpack to include that file in the bundle. Unlike CSS imports, importing a file gives you a string value. This value is the final path you can reference in your code, e.g. as the `src` attribute of an image or the `href` of a link to a PDF. - -To reduce the number of requests to the server, importing images that are less than 10,000 bytes returns a [data URI](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) instead of a path. This applies to the following file extensions: bmp, gif, jpg, jpeg, and png. SVG files are excluded due to [#1153](https://github.com/facebookincubator/create-react-app/issues/1153). - -Here is an example: - -```js -import React from 'react'; -import logo from './logo.png'; // Tell Webpack this JS file uses this image - -console.log(logo); // /logo.84287d09.png - -function Header() { - // Import result is the URL of your image - return <img src={logo} alt="Logo" />; -} - -export default Header; -``` - -This ensures that when the project is built, Webpack will correctly move the images into the build folder, and provide us with correct paths. - -This works in CSS too: - -```css -.Logo { - background-image: url(./logo.png); -} -``` - -Webpack finds all relative module references in CSS (they start with `./`) and replaces them with the final paths from the compiled bundle. If you make a typo or accidentally delete an important file, you will see a compilation error, just like when you import a non-existent JavaScript module. The final filenames in the compiled bundle are generated by Webpack from content hashes. If the file content changes in the future, Webpack will give it a different name in production so you don’t need to worry about long-term caching of assets. - -Please be advised that this is also a custom feature of Webpack. - -**It is not required for React** but many people enjoy it (and React Native uses a similar mechanism for images).<br> -An alternative way of handling static assets is described in the next section. - -## Using the `public` Folder - ->Note: this feature is available with `react-scripts@0.5.0` and higher. - -### Changing the HTML - -The `public` folder contains the HTML file so you can tweak it, for example, to [set the page title](#changing-the-page-title). -The `<script>` tag with the compiled code will be added to it automatically during the build process. - -### Adding Assets Outside of the Module System - -You can also add other assets to the `public` folder. - -Note that we normally encourage you to `import` assets in JavaScript files instead. -For example, see the sections on [adding a stylesheet](#adding-a-stylesheet) and [adding images and fonts](#adding-images-fonts-and-files). -This mechanism provides a number of benefits: - -* Scripts and stylesheets get minified and bundled together to avoid extra network requests. -* Missing files cause compilation errors instead of 404 errors for your users. -* Result filenames include content hashes so you don’t need to worry about browsers caching their old versions. - -However there is an **escape hatch** that you can use to add an asset outside of the module system. - -If you put a file into the `public` folder, it will **not** be processed by Webpack. Instead it will be copied into the build folder untouched. To reference assets in the `public` folder, you need to use a special variable called `PUBLIC_URL`. - -Inside `index.html`, you can use it like this: - -```html -<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> -``` - -Only files inside the `public` folder will be accessible by `%PUBLIC_URL%` prefix. If you need to use a file from `src` or `node_modules`, you’ll have to copy it there to explicitly specify your intention to make this file a part of the build. - -When you run `npm run build`, Create React App will substitute `%PUBLIC_URL%` with a correct absolute path so your project works even if you use client-side routing or host it at a non-root URL. - -In JavaScript code, you can use `process.env.PUBLIC_URL` for similar purposes: - -```js -render() { - // Note: this is an escape hatch and should be used sparingly! - // Normally we recommend using `import` for getting asset URLs - // as described in “Adding Images and Fonts” above this section. - return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />; -} -``` - -Keep in mind the downsides of this approach: - -* None of the files in `public` folder get post-processed or minified. -* Missing files will not be called at compilation time, and will cause 404 errors for your users. -* Result filenames won’t include content hashes so you’ll need to add query arguments or rename them every time they change. - -### When to Use the `public` Folder - -Normally we recommend importing [stylesheets](#adding-a-stylesheet), [images, and fonts](#adding-images-fonts-and-files) from JavaScript. -The `public` folder is useful as a workaround for a number of less common cases: - -* You need a file with a specific name in the build output, such as [`manifest.webmanifest`](https://developer.mozilla.org/en-US/docs/Web/Manifest). -* You have thousands of images and need to dynamically reference their paths. -* You want to include a small script like [`pace.js`](http://github.hubspot.com/pace/docs/welcome/) outside of the bundled code. -* Some library may be incompatible with Webpack and you have no other option but to include it as a `<script>` tag. - -Note that if you add a `<script>` that declares global variables, you also need to read the next section on using them. - -## Using Global Variables - -When you include a script in the HTML file that defines global variables and try to use one of these variables in the code, the linter will complain because it cannot see the definition of the variable. - -You can avoid this by reading the global variable explicitly from the `window` object, for example: - -```js -const $ = window.$; -``` - -This makes it obvious you are using a global variable intentionally rather than because of a typo. - -Alternatively, you can force the linter to ignore any line by adding `// eslint-disable-line` after it. - -## Adding Bootstrap - -You don’t have to use [React Bootstrap](https://react-bootstrap.github.io) together with React but it is a popular library for integrating Bootstrap with React apps. If you need it, you can integrate it with Create React App by following these steps: - -Install React Bootstrap and Bootstrap from npm. React Bootstrap does not include Bootstrap CSS so this needs to be installed as well: - -```sh -npm install --save react-bootstrap bootstrap@3 -``` - -Alternatively you may use `yarn`: - -```sh -yarn add react-bootstrap bootstrap@3 -``` - -Import Bootstrap CSS and optionally Bootstrap theme CSS in the beginning of your ```src/index.js``` file: - -```js -import 'bootstrap/dist/css/bootstrap.css'; -import 'bootstrap/dist/css/bootstrap-theme.css'; -// Put any other imports below so that CSS from your -// components takes precedence over default styles. -``` - -Import required React Bootstrap components within ```src/App.js``` file or your custom component files: - -```js -import { Navbar, Jumbotron, Button } from 'react-bootstrap'; -``` - -Now you are ready to use the imported React Bootstrap components within your component hierarchy defined in the render method. Here is an example [`App.js`](https://gist.githubusercontent.com/gaearon/85d8c067f6af1e56277c82d19fd4da7b/raw/6158dd991b67284e9fc8d70b9d973efe87659d72/App.js) redone using React Bootstrap. - -### Using a Custom Theme - -Sometimes you might need to tweak the visual styles of Bootstrap (or equivalent package).<br> -We suggest the following approach: - -* Create a new package that depends on the package you wish to customize, e.g. Bootstrap. -* Add the necessary build steps to tweak the theme, and publish your package on npm. -* Install your own theme npm package as a dependency of your app. - -Here is an example of adding a [customized Bootstrap](https://medium.com/@tacomanator/customizing-create-react-app-aa9ffb88165) that follows these steps. - -## Adding Flow - -Flow is a static type checker that helps you write code with fewer bugs. Check out this [introduction to using static types in JavaScript](https://medium.com/@preethikasireddy/why-use-static-types-in-javascript-part-1-8382da1e0adb) if you are new to this concept. - -Recent versions of [Flow](http://flowtype.org/) work with Create React App projects out of the box. - -To add Flow to a Create React App project, follow these steps: - -1. Run `npm install --save flow-bin` (or `yarn add flow-bin`). -2. Add `"flow": "flow"` to the `scripts` section of your `package.json`. -3. Run `npm run flow init` (or `yarn flow init`) to create a [`.flowconfig` file](https://flowtype.org/docs/advanced-configuration.html) in the root directory. -4. Add `// @flow` to any files you want to type check (for example, to `src/App.js`). - -Now you can run `npm run flow` (or `yarn flow`) to check the files for type errors. -You can optionally use an IDE like [Nuclide](https://nuclide.io/docs/languages/flow/) for a better integrated experience. -In the future we plan to integrate it into Create React App even more closely. - -To learn more about Flow, check out [its documentation](https://flowtype.org/). - -## Adding a Router - -Create React App doesn't prescribe a specific routing solution, but [React Router](https://reacttraining.com/react-router/) is the most popular one. - -To add it, run: - -```sh -npm install --save react-router-dom -``` - -Alternatively you may use `yarn`: - -```sh -yarn add react-router-dom -``` - -To try it, delete all the code in `src/App.js` and replace it with any of the examples on its website. The [Basic Example](https://reacttraining.com/react-router/web/example/basic) is a good place to get started. - -Note that [you may need to configure your production server to support client-side routing](#serving-apps-with-client-side-routing) before deploying your app. - -## Adding Custom Environment Variables - ->Note: this feature is available with `react-scripts@0.2.3` and higher. - -Your project can consume variables declared in your environment as if they were declared locally in your JS files. By -default you will have `NODE_ENV` defined for you, and any other environment variables starting with -`REACT_APP_`. - -**The environment variables are embedded during the build time**. Since Create React App produces a static HTML/CSS/JS bundle, it can’t possibly read them at runtime. To read them at runtime, you would need to load HTML into memory on the server and replace placeholders in runtime, just like [described here](#injecting-data-from-the-server-into-the-page). Alternatively you can rebuild the app on the server anytime you change them. - ->Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid accidentally [exposing a private key on the machine that could have the same name](https://github.com/facebookincubator/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running. - -These environment variables will be defined for you on `process.env`. For example, having an environment -variable named `REACT_APP_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_SECRET_CODE`. - -There is also a special built-in environment variable called `NODE_ENV`. You can read it from `process.env.NODE_ENV`. When you run `npm start`, it is always equal to `'development'`, when you run `npm test` it is always equal to `'test'`, and when you run `npm run build` to make a production bundle, it is always equal to `'production'`. **You cannot override `NODE_ENV` manually.** This prevents developers from accidentally deploying a slow development build to production. - -These environment variables can be useful for displaying information conditionally based on where the project is -deployed or consuming sensitive data that lives outside of version control. - -First, you need to have environment variables defined. For example, let’s say you wanted to consume a secret defined -in the environment inside a `<form>`: - -```jsx -render() { - return ( - <div> - <small>You are running this application in <b>{process.env.NODE_ENV}</b> mode.</small> - <form> - <input type="hidden" defaultValue={process.env.REACT_APP_SECRET_CODE} /> - </form> - </div> - ); -} -``` - -During the build, `process.env.REACT_APP_SECRET_CODE` will be replaced with the current value of the `REACT_APP_SECRET_CODE` environment variable. Remember that the `NODE_ENV` variable will be set for you automatically. - -When you load the app in the browser and inspect the `<input>`, you will see its value set to `abcdef`, and the bold text will show the environment provided when using `npm start`: - -```html -<div> - <small>You are running this application in <b>development</b> mode.</small> - <form> - <input type="hidden" value="abcdef" /> - </form> -</div> -``` - -The above form is looking for a variable called `REACT_APP_SECRET_CODE` from the environment. In order to consume this -value, we need to have it defined in the environment. This can be done using two ways: either in your shell or in -a `.env` file. Both of these ways are described in the next few sections. - -Having access to the `NODE_ENV` is also useful for performing actions conditionally: - -```js -if (process.env.NODE_ENV !== 'production') { - analytics.disable(); -} -``` - -When you compile the app with `npm run build`, the minification step will strip out this condition, and the resulting bundle will be smaller. - -### Referencing Environment Variables in the HTML - ->Note: this feature is available with `react-scripts@0.9.0` and higher. - -You can also access the environment variables starting with `REACT_APP_` in the `public/index.html`. For example: - -```html -<title>%REACT_APP_WEBSITE_NAME% -``` - -Note that the caveats from the above section apply: - -* Apart from a few built-in variables (`NODE_ENV` and `PUBLIC_URL`), variable names must start with `REACT_APP_` to work. -* The environment variables are injected at build time. If you need to inject them at runtime, [follow this approach instead](#generating-dynamic-meta-tags-on-the-server). - -### Adding Temporary Environment Variables In Your Shell - -Defining environment variables can vary between OSes. It’s also important to know that this manner is temporary for the -life of the shell session. - -#### Windows (cmd.exe) - -```cmd -set "REACT_APP_SECRET_CODE=abcdef" && npm start -``` - -(Note: Quotes around the variable assignment are required to avoid a trailing whitespace.) - -#### Windows (Powershell) - -```Powershell -($env:REACT_APP_SECRET_CODE = "abcdef") -and (npm start) -``` - -#### Linux, macOS (Bash) - -```bash -REACT_APP_SECRET_CODE=abcdef npm start -``` - -### Adding Development Environment Variables In `.env` - ->Note: this feature is available with `react-scripts@0.5.0` and higher. - -To define permanent environment variables, create a file called `.env` in the root of your project: - -``` -REACT_APP_SECRET_CODE=abcdef -``` ->Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid [accidentally exposing a private key on the machine that could have the same name](https://github.com/facebookincubator/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running. - -`.env` files **should be** checked into source control (with the exclusion of `.env*.local`). - -#### What other `.env` files can be used? - ->Note: this feature is **available with `react-scripts@1.0.0` and higher**. - -* `.env`: Default. -* `.env.local`: Local overrides. **This file is loaded for all environments except test.** -* `.env.development`, `.env.test`, `.env.production`: Environment-specific settings. -* `.env.development.local`, `.env.test.local`, `.env.production.local`: Local overrides of environment-specific settings. - -Files on the left have more priority than files on the right: - -* `npm start`: `.env.development.local`, `.env.development`, `.env.local`, `.env` -* `npm run build`: `.env.production.local`, `.env.production`, `.env.local`, `.env` -* `npm test`: `.env.test.local`, `.env.test`, `.env` (note `.env.local` is missing) - -These variables will act as the defaults if the machine does not explicitly set them.
    -Please refer to the [dotenv documentation](https://github.com/motdotla/dotenv) for more details. - ->Note: If you are defining environment variables for development, your CI and/or hosting platform will most likely need -these defined as well. Consult their documentation how to do this. For example, see the documentation for [Travis CI](https://docs.travis-ci.com/user/environment-variables/) or [Heroku](https://devcenter.heroku.com/articles/config-vars). - -#### Expanding Environment Variables In `.env` - ->Note: this feature is available with `react-scripts@1.1.0` and higher. - -Expand variables already on your machine for use in your `.env` file (using [dotenv-expand](https://github.com/motdotla/dotenv-expand)). - -For example, to get the environment variable `npm_package_version`: - -``` -REACT_APP_VERSION=$npm_package_version -# also works: -# REACT_APP_VERSION=${npm_package_version} -``` - -Or expand variables local to the current `.env` file: - -``` -DOMAIN=www.example.com -REACT_APP_FOO=$DOMAIN/foo -REACT_APP_BAR=$DOMAIN/bar -``` - -## Can I Use Decorators? - -Many popular libraries use [decorators](https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841) in their documentation.
    -Create React App doesn’t support decorator syntax at the moment because: - -* It is an experimental proposal and is subject to change. -* The current specification version is not officially supported by Babel. -* If the specification changes, we won’t be able to write a codemod because we don’t use them internally at Facebook. - -However in many cases you can rewrite decorator-based code without decorators just as fine.
    -Please refer to these two threads for reference: - -* [#214](https://github.com/facebookincubator/create-react-app/issues/214) -* [#411](https://github.com/facebookincubator/create-react-app/issues/411) - -Create React App will add decorator support when the specification advances to a stable stage. - -## Fetching Data with AJAX Requests - -React doesn't prescribe a specific approach to data fetching, but people commonly use either a library like [axios](https://github.com/axios/axios) or the [`fetch()` API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) provided by the browser. Conveniently, Create React App includes a polyfill for `fetch()` so you can use it without worrying about the browser support. - -The global `fetch` function allows to easily makes AJAX requests. It takes in a URL as an input and returns a `Promise` that resolves to a `Response` object. You can find more information about `fetch` [here](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch). - -This project also includes a [Promise polyfill](https://github.com/then/promise) which provides a full implementation of Promises/A+. A Promise represents the eventual result of an asynchronous operation, you can find more information about Promises [here](https://www.promisejs.org/) and [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). Both axios and `fetch()` use Promises under the hood. You can also use the [`async / await`](https://davidwalsh.name/async-await) syntax to reduce the callback nesting. - -You can learn more about making AJAX requests from React components in [the FAQ entry on the React website](https://reactjs.org/docs/faq-ajax.html). - -## Integrating with an API Backend - -These tutorials will help you to integrate your app with an API backend running on another port, -using `fetch()` to access it. - -### Node -Check out [this tutorial](https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/). -You can find the companion GitHub repository [here](https://github.com/fullstackreact/food-lookup-demo). - -### Ruby on Rails - -Check out [this tutorial](https://www.fullstackreact.com/articles/how-to-get-create-react-app-to-work-with-your-rails-api/). -You can find the companion GitHub repository [here](https://github.com/fullstackreact/food-lookup-demo-rails). - -## Proxying API Requests in Development - ->Note: this feature is available with `react-scripts@0.2.3` and higher. - -People often serve the front-end React app from the same host and port as their backend implementation.
    -For example, a production setup might look like this after the app is deployed: - -``` -/ - static server returns index.html with React app -/todos - static server returns index.html with React app -/api/todos - server handles any /api/* requests using the backend implementation -``` - -Such setup is **not** required. However, if you **do** have a setup like this, it is convenient to write requests like `fetch('/api/todos')` without worrying about redirecting them to another host or port during development. - -To tell the development server to proxy any unknown requests to your API server in development, add a `proxy` field to your `package.json`, for example: - -```js - "proxy": "http://localhost:4000", -``` - -This way, when you `fetch('/api/todos')` in development, the development server will recognize that it’s not a static asset, and will proxy your request to `http://localhost:4000/api/todos` as a fallback. The development server will **only** attempt to send requests without `text/html` in its `Accept` header to the proxy. - -Conveniently, this avoids [CORS issues](http://stackoverflow.com/questions/21854516/understanding-ajax-cors-and-security-considerations) and error messages like this in development: - -``` -Fetch API cannot load http://localhost:4000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. -``` - -Keep in mind that `proxy` only has effect in development (with `npm start`), and it is up to you to ensure that URLs like `/api/todos` point to the right thing in production. You don’t have to use the `/api` prefix. Any unrecognized request without a `text/html` accept header will be redirected to the specified `proxy`. - -The `proxy` option supports HTTP, HTTPS and WebSocket connections.
    -If the `proxy` option is **not** flexible enough for you, alternatively you can: - -* [Configure the proxy yourself](#configuring-the-proxy-manually) -* Enable CORS on your server ([here’s how to do it for Express](http://enable-cors.org/server_expressjs.html)). -* Use [environment variables](#adding-custom-environment-variables) to inject the right server host and port into your app. - -### "Invalid Host Header" Errors After Configuring Proxy - -When you enable the `proxy` option, you opt into a more strict set of host checks. This is necessary because leaving the backend open to remote hosts makes your computer vulnerable to DNS rebinding attacks. The issue is explained in [this article](https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a) and [this issue](https://github.com/webpack/webpack-dev-server/issues/887). - -This shouldn’t affect you when developing on `localhost`, but if you develop remotely like [described here](https://github.com/facebookincubator/create-react-app/issues/2271), you will see this error in the browser after enabling the `proxy` option: - ->Invalid Host header - -To work around it, you can specify your public development host in a file called `.env.development` in the root of your project: - -``` -HOST=mypublicdevhost.com -``` - -If you restart the development server now and load the app from the specified host, it should work. - -If you are still having issues or if you’re using a more exotic environment like a cloud editor, you can bypass the host check completely by adding a line to `.env.development.local`. **Note that this is dangerous and exposes your machine to remote code execution from malicious websites:** - -``` -# NOTE: THIS IS DANGEROUS! -# It exposes your machine to attacks from the websites you visit. -DANGEROUSLY_DISABLE_HOST_CHECK=true -``` - -We don’t recommend this approach. - -### Configuring the Proxy Manually - ->Note: this feature is available with `react-scripts@1.0.0` and higher. - -If the `proxy` option is **not** flexible enough for you, you can specify an object in the following form (in `package.json`).
    -You may also specify any configuration value [`http-proxy-middleware`](https://github.com/chimurai/http-proxy-middleware#options) or [`http-proxy`](https://github.com/nodejitsu/node-http-proxy#options) supports. -```js -{ - // ... - "proxy": { - "/api": { - "target": "", - "ws": true - // ... - } - } - // ... -} -``` - -All requests matching this path will be proxies, no exceptions. This includes requests for `text/html`, which the standard `proxy` option does not proxy. - -If you need to specify multiple proxies, you may do so by specifying additional entries. -Matches are regular expressions, so that you can use a regexp to match multiple paths. -```js -{ - // ... - "proxy": { - // Matches any request starting with /api - "/api": { - "target": "", - "ws": true - // ... - }, - // Matches any request starting with /foo - "/foo": { - "target": "", - "ssl": true, - "pathRewrite": { - "^/foo": "/foo/beta" - } - // ... - }, - // Matches /bar/abc.html but not /bar/sub/def.html - "/bar/[^/]*[.]html": { - "target": "", - // ... - }, - // Matches /baz/abc.html and /baz/sub/def.html - "/baz/.*/.*[.]html": { - "target": "" - // ... - } - } - // ... -} -``` - -### Configuring a WebSocket Proxy - -When setting up a WebSocket proxy, there are a some extra considerations to be aware of. - -If you’re using a WebSocket engine like [Socket.io](https://socket.io/), you must have a Socket.io server running that you can use as the proxy target. Socket.io will not work with a standard WebSocket server. Specifically, don't expect Socket.io to work with [the websocket.org echo test](http://websocket.org/echo.html). - -There’s some good documentation available for [setting up a Socket.io server](https://socket.io/docs/). - -Standard WebSockets **will** work with a standard WebSocket server as well as the websocket.org echo test. You can use libraries like [ws](https://github.com/websockets/ws) for the server, with [native WebSockets in the browser](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket). - -Either way, you can proxy WebSocket requests manually in `package.json`: - -```js -{ - // ... - "proxy": { - "/socket": { - // Your compatible WebSocket server - "target": "ws://", - // Tell http-proxy-middleware that this is a WebSocket proxy. - // Also allows you to proxy WebSocket requests without an additional HTTP request - // https://github.com/chimurai/http-proxy-middleware#external-websocket-upgrade - "ws": true - // ... - } - } - // ... -} -``` - -## Using HTTPS in Development - ->Note: this feature is available with `react-scripts@0.4.0` and higher. - -You may require the dev server to serve pages over HTTPS. One particular case where this could be useful is when using [the "proxy" feature](#proxying-api-requests-in-development) to proxy requests to an API server when that API server is itself serving HTTPS. - -To do this, set the `HTTPS` environment variable to `true`, then start the dev server as usual with `npm start`: - -#### Windows (cmd.exe) - -```cmd -set HTTPS=true&&npm start -``` - -#### Windows (Powershell) - -```Powershell -($env:HTTPS = $true) -and (npm start) -``` - -(Note: the lack of whitespace is intentional.) - -#### Linux, macOS (Bash) - -```bash -HTTPS=true npm start -``` - -Note that the server will use a self-signed certificate, so your web browser will almost definitely display a warning upon accessing the page. - -## Generating Dynamic `` Tags on the Server - -Since Create React App doesn’t support server rendering, you might be wondering how to make `` tags dynamic and reflect the current URL. To solve this, we recommend to add placeholders into the HTML, like this: - -```html - - - - - -``` - -Then, on the server, regardless of the backend you use, you can read `index.html` into memory and replace `__OG_TITLE__`, `__OG_DESCRIPTION__`, and any other placeholders with values depending on the current URL. Just make sure to sanitize and escape the interpolated values so that they are safe to embed into HTML! - -If you use a Node server, you can even share the route matching logic between the client and the server. However duplicating it also works fine in simple cases. - -## Pre-Rendering into Static HTML Files - -If you’re hosting your `build` with a static hosting provider you can use [react-snapshot](https://www.npmjs.com/package/react-snapshot) or [react-snap](https://github.com/stereobooster/react-snap) to generate HTML pages for each route, or relative link, in your application. These pages will then seamlessly become active, or “hydrated”, when the JavaScript bundle has loaded. - -There are also opportunities to use this outside of static hosting, to take the pressure off the server when generating and caching routes. - -The primary benefit of pre-rendering is that you get the core content of each page _with_ the HTML payload—regardless of whether or not your JavaScript bundle successfully downloads. It also increases the likelihood that each route of your application will be picked up by search engines. - -You can read more about [zero-configuration pre-rendering (also called snapshotting) here](https://medium.com/superhighfives/an-almost-static-stack-6df0a2791319). - -## Injecting Data from the Server into the Page - -Similarly to the previous section, you can leave some placeholders in the HTML that inject global variables, for example: - -```js - - - - -``` - -Then, on the server, you can replace `__SERVER_DATA__` with a JSON of real data right before sending the response. The client code can then read `window.SERVER_DATA` to use it. **Make sure to [sanitize the JSON before sending it to the client](https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0) as it makes your app vulnerable to XSS attacks.** - -## Running Tests - ->Note: this feature is available with `react-scripts@0.3.0` and higher.
    ->[Read the migration guide to learn how to enable it in older projects!](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md#migrating-from-023-to-030) - -Create React App uses [Jest](https://facebook.github.io/jest/) as its test runner. To prepare for this integration, we did a [major revamp](https://facebook.github.io/jest/blog/2016/09/01/jest-15.html) of Jest so if you heard bad things about it years ago, give it another try. - -Jest is a Node-based runner. This means that the tests always run in a Node environment and not in a real browser. This lets us enable fast iteration speed and prevent flakiness. - -While Jest provides browser globals such as `window` thanks to [jsdom](https://github.com/tmpvar/jsdom), they are only approximations of the real browser behavior. Jest is intended to be used for unit tests of your logic and your components rather than the DOM quirks. - -We recommend that you use a separate tool for browser end-to-end tests if you need them. They are beyond the scope of Create React App. - -### Filename Conventions - -Jest will look for test files with any of the following popular naming conventions: - -* Files with `.js` suffix in `__tests__` folders. -* Files with `.test.js` suffix. -* Files with `.spec.js` suffix. - -The `.test.js` / `.spec.js` files (or the `__tests__` folders) can be located at any depth under the `src` top level folder. - -We recommend to put the test files (or `__tests__` folders) next to the code they are testing so that relative imports appear shorter. For example, if `App.test.js` and `App.js` are in the same folder, the test just needs to `import App from './App'` instead of a long relative path. Colocation also helps find tests more quickly in larger projects. - -### Command Line Interface - -When you run `npm test`, Jest will launch in the watch mode. Every time you save a file, it will re-run the tests, just like `npm start` recompiles the code. - -The watcher includes an interactive command-line interface with the ability to run all tests, or focus on a search pattern. It is designed this way so that you can keep it open and enjoy fast re-runs. You can learn the commands from the “Watch Usage” note that the watcher prints after every run: - -![Jest watch mode](http://facebook.github.io/jest/img/blog/15-watch.gif) - -### Version Control Integration - -By default, when you run `npm test`, Jest will only run the tests related to files changed since the last commit. This is an optimization designed to make your tests run fast regardless of how many tests you have. However it assumes that you don’t often commit the code that doesn’t pass the tests. - -Jest will always explicitly mention that it only ran tests related to the files changed since the last commit. You can also press `a` in the watch mode to force Jest to run all tests. - -Jest will always run all tests on a [continuous integration](#continuous-integration) server or if the project is not inside a Git or Mercurial repository. - -### Writing Tests - -To create tests, add `it()` (or `test()`) blocks with the name of the test and its code. You may optionally wrap them in `describe()` blocks for logical grouping but this is neither required nor recommended. - -Jest provides a built-in `expect()` global function for making assertions. A basic test could look like this: - -```js -import sum from './sum'; - -it('sums numbers', () => { - expect(sum(1, 2)).toEqual(3); - expect(sum(2, 2)).toEqual(4); -}); -``` - -All `expect()` matchers supported by Jest are [extensively documented here](https://facebook.github.io/jest/docs/en/expect.html#content).
    -You can also use [`jest.fn()` and `expect(fn).toBeCalled()`](https://facebook.github.io/jest/docs/en/expect.html#tohavebeencalled) to create “spies” or mock functions. - -### Testing Components - -There is a broad spectrum of component testing techniques. They range from a “smoke test” verifying that a component renders without throwing, to shallow rendering and testing some of the output, to full rendering and testing component lifecycle and state changes. - -Different projects choose different testing tradeoffs based on how often components change, and how much logic they contain. If you haven’t decided on a testing strategy yet, we recommend that you start with creating simple smoke tests for your components: - -```js -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -it('renders without crashing', () => { - const div = document.createElement('div'); - ReactDOM.render(, div); -}); -``` - -This test mounts a component and makes sure that it didn’t throw during rendering. Tests like this provide a lot of value with very little effort so they are great as a starting point, and this is the test you will find in `src/App.test.js`. - -When you encounter bugs caused by changing components, you will gain a deeper insight into which parts of them are worth testing in your application. This might be a good time to introduce more specific tests asserting specific expected output or behavior. - -If you’d like to test components in isolation from the child components they render, we recommend using [`shallow()` rendering API](http://airbnb.io/enzyme/docs/api/shallow.html) from [Enzyme](http://airbnb.io/enzyme/). To install it, run: - -```sh -npm install --save enzyme enzyme-adapter-react-16 react-test-renderer -``` - -Alternatively you may use `yarn`: - -```sh -yarn add enzyme enzyme-adapter-react-16 react-test-renderer -``` - -As of Enzyme 3, you will need to install Enzyme along with an Adapter corresponding to the version of React you are using. (The examples above use the adapter for React 16.) - -The adapter will also need to be configured in your [global setup file](#initializing-test-environment): - -#### `src/setupTests.js` -```js -import { configure } from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; - -configure({ adapter: new Adapter() }); -``` - ->Note: Keep in mind that if you decide to "eject" before creating `src/setupTests.js`, the resulting `package.json` file won't contain any reference to it. [Read here](#initializing-test-environment) to learn how to add this after ejecting. - -Now you can write a smoke test with it: - -```js -import React from 'react'; -import { shallow } from 'enzyme'; -import App from './App'; - -it('renders without crashing', () => { - shallow(); -}); -``` - -Unlike the previous smoke test using `ReactDOM.render()`, this test only renders `` and doesn’t go deeper. For example, even if `` itself renders a ` -
      -
    • - -
    • -
    • - -
    • -
    • - -
    • -
    • - -
    • -
    - - - ) - } else { - return ( -
    - ) - } - } - - componentDidMount () { - - } - - render () { - if (this.loggedInUserStored !== true) { - let user = this.props.data.users_UserByAuthId - - if (user !== undefined) { - localStorage.setItem('loggedInUser', JSON.stringify(this.props.data.users_UserByAuthId)) - this.loggedInUserStored = true - } - } - - return ( - - {this.displayLoggedInUser()} - - ) - } -} - -export default compose( - graphql(getUserByAuthIdQuery, { // What follows is the way to pass a parameter to a query. - options: (props) => { - return { - variables: { - authId: props.authId - } - } - } - }), - withStyles(styles) -)(LoggedInUser) diff --git a/Deprecated-Code/UsersModule/client/src/components/ProfileImages.js b/Deprecated-Code/UsersModule/client/src/components/ProfileImages.js deleted file mode 100644 index 2a7788304..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/ProfileImages.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { Component } from 'react' -import { compose } from 'recompose' -import { withStyles } from '@material-ui/core/styles' -import Paper from '@material-ui/core/Paper' -import Typography from '@material-ui/core/Typography' - -const styles = theme => ({ - root: { - width: '50%', - flexGrow: 1, - padding: 10, - marginLeft: '25%', - marginTop: '5%', - marginBottom: '10%' - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - marginBottom: 40 - } -}) - -class ProfileImages extends Component { - - render () { - const { classes } = this.props - return ( - - - - Comming Soon - - - - ) - } -} - -export default compose( - withStyles(styles) -)(ProfileImages) diff --git a/Deprecated-Code/UsersModule/client/src/components/ProfileSheet.js b/Deprecated-Code/UsersModule/client/src/components/ProfileSheet.js deleted file mode 100644 index 3e75bc881..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/ProfileSheet.js +++ /dev/null @@ -1,525 +0,0 @@ -import React, { Component } from 'react' -import {graphql, compose} from 'react-apollo' -import {getRolesQuery, updateUserMutation, getUsersQuery} from '../queries/queries' - -// Material-ui - -import { withStyles } from '@material-ui/core/styles' -import MenuItem from '@material-ui/core/MenuItem' -import TextField from '@material-ui/core/TextField' -import FormControl from '@material-ui/core/FormControl' -import InputLabel from '@material-ui/core/InputLabel' -import Input from '@material-ui/core/Input' -import Button from '@material-ui/core/Button' -import FormControlLabel from '@material-ui/core/FormControlLabel' -import Checkbox from '@material-ui/core/Checkbox' -import FormGroup from '@material-ui/core/FormGroup' -import Select from '@material-ui/core/Select' -import FormHelperText from '@material-ui/core/FormHelperText' -import Paper from '@material-ui/core/Paper' -import Grid from '@material-ui/core/Grid' -import Typography from '@material-ui/core/Typography' - -// Images -import GithubLogo from '../img/github-logo.png' -import Auth0Logo from '../img/auth0-logo.png' -import AALogo from '../img/aa-logo.png' - -const styles = theme => ({ - root: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25 - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40 - }, - checkbox: { - width: 150, - marginLeft: '0%', - marginTop: 20 - }, - selectEmpty: { - marginTop: theme.spacing.unit * 2 - }, - button: { - margin: theme.spacing.unit, - marginTop: theme.spacing.unit * 3 - }, - img: { - display: 'block', - marginTop: 20, - maxWidth: 120, - maxHeight: 24 - } -}) - -class ProfileSheet extends Component { - - constructor (props) { - super(props) - - this.defaultValuesSet = false - - this.state = { - id: '', - firstName: '', - middleName: '', - lastName: '', - bio: '', - email: '', - emailVerified: 0, - isDeveloper: 0, - isTrader: 0, - isDataAnalyst: 0, - roleId: '1', - firstNameError: false, - middleNameError: false, - lastNameError: false, - bioError: false, - updated: false - } - } - - displayRoles () { - var data = this.props.getRolesQuery // When there is more than one query binded to a single componente 'data' is replaced by thename of the query given below at the binding operation. - if (data.loading) { - return ( - Loading roles - ) - } else { - return data.users_Roles.map(role => { - return ( - { role.name } - ) - }) - } - } - - submitForm (e) { - e.preventDefault() - this.props.updateUserMutation({ - variables: { - firstName: this.state.firstName, - middleName: this.state.middleName, - lastName: this.state.lastName, - bio: this.state.bio, - isDeveloper: this.state.isDeveloper, - isTrader: this.state.isTrader, - isDataAnalyst: this.state.isDataAnalyst, - roleId: this.state.roleId - }, - refetchQueries: [{ query: getUsersQuery}] // This allow us to re run whatever queries are necesary after the mutation. - }) - - /* Before we are done, we need to update the state of the local storage. */ - - let user = JSON.parse(localStorage.getItem('loggedInUser')) - - user.firstName = this.state.firstName - user.middleName = this.state.middleName - user.lastName = this.state.lastName - user.bio = this.state.bio - user.isDeveloper = this.state.isDeveloper - user.isTrader = this.state.isTrader - user.isDataAnalyst = this.state.isDataAnalyst - user.role.id = this.state.roleId - - localStorage.setItem('loggedInUser', JSON.stringify(user)) - - this.setState({updated: true}) - } - - handleCheckBoxes (e) { - let fieldValue - if (e.target.checked === true) { - fieldValue = 1 - } else { - fieldValue = 0 - - /* When the user unchecks one of the checkboxes, we need to make sure that that Role is not the one selected at the SELECT, - and if it is, then we need to automatically select another one */ - - switch (e.target.id) { - case 'isDeveloper': - if (this.state.roleId === '2') { - this.setState({ roleId: '1'}) - } - break - - case 'isTrader': - if (this.state.roleId === '3') { - this.setState({ roleId: '1'}) - } - break - - case 'isDataAnalyst': - if (this.state.roleId === '4') { - this.setState({ roleId: '1'}) - } - break - default: - } - } - this.setState({ [e.target.id]: fieldValue}) - } - - handleSelect (e) { - /* - Whenever the select component changes its value, we need to activate the type of role selected. - To do so, we change the state of the corresponding type of role here. - */ - - switch (e.target.value) { - case '2': - this.setState({ isDeveloper: 1}) - break - case '3': - this.setState({ isTrader: 1}) - break - case '4': - this.setState({ isDataAnalyst: 1}) - break - default: - } - - this.setState({ roleId: e.target.value }) - } - - handleTextField (e) { - /* - We will do some basic input validations here. If something is wrong we will turn on the error sign on the textfield. - */ - - let value = e.target.value - - switch (e.target.id) { - case 'firstName': - if (value.length > 30) { - this.setState({firstNameError: true}) - } else { - this.setState({firstNameError: false, firstName: value}) - } - break - case 'middleName': - if (value.length > 30) { - this.setState({middleNameError: true}) - } else { - this.setState({middleNameError: false, middleName: value}) - } - break - case 'lastName': - if (value.length > 50) { - this.setState({lastNameError: true}) - } else { - this.setState({lastNameError: false, lastName: value}) - } - break - case 'bio': - if (value.length > 250) { - this.setState({bioError: true}) - } else { - this.setState({bioError: false, bio: value}) - } - break - default: - } - } - - rightCheckboxValue (stateValue) { - if (stateValue === 1) { - return true - } else { return false } - } - - componentWillMount () { - if (this.defaultValuesSet === false) { - let authUser = JSON.parse(localStorage.getItem('user')) - let authId = authUser.authId - let userData = localStorage.getItem('loggedInUser') - - if (userData === 'undefined' || userData === null) { return } - - let user = JSON.parse(userData) - this.defaultValuesSet = true - - /* To avoid console warning, we need to take care of the fields that are null. */ - - if (user.firstName === null) { user.firstName = '' } - if (user.middleName === null) { user.middleName = '' } - if (user.lastName === null) { user.lastName = '' } - if (user.bio === null) { user.bio = '' } - - /* Now we are ready to set the initial state. */ - - this.setState({ - id: user.id, - alias: user.alias, - email: user.email, - emailVerified: user.emailVerified, - firstName: user.firstName, - middleName: user.middleName, - lastName: user.lastName, - bio: user.bio, - isDeveloper: user.isDeveloper, - isTrader: user.isTrader, - isDataAnalyst: user.isDataAnalyst, - roleId: user.role.id, - authId: authId - }) - } - } - - displayIdentityProvider () { - const { classes } = this.props - let authId = this.state.authId - - if (authId !== undefined && authId !== null) { - let authArray = this.state.authId.split('|') - let identityProvider = authArray[0] - - switch (identityProvider) { - case 'github': - return ( - Github - ) - break - case 'auth0': - return ( - Auth0 - ) - break - default: - - } - } - } - - displayButtonTitle () { - if (this.state.updated === true) { - return 'Updated' - } else { - return 'Update' - } - } - - addForm () { - const { classes } = this.props - return ( - - -
    - - - Profile Sheet - - - - Use this form to control the information you keep at the Advanced Algos system about yourself. - - - - - {this.displayIdentityProvider()} - - - - - This is your basic information we have gotten from the identity provider you used to sign up. This information can not be changed. - - - - - - - - } - label='Email Verified' - /> - - - - Advanced Algos - - - - - Complete your profile with the following optional information. Providing your real name might help other users trust you more. - - - - - - - - - - If you wish, you can add a short paragraph with your Bio or anything you would like to communicate to whoever finds your user profile. - - - - - - Check the following options to enable specialized tools designed for each role. You can allways come back and change these settings later. - - - - - - - } - label='Developer' - /> - - - - } - label='Trader' - /> - - - - } - label='Data Analyst' - /> - - - - -

    Your current role determines how the system is going to optimize its user interface to best serves your current needs.

    - - - - Current Role - - - Select from the list your current role - - - - - - - - -
    - ) - } - render () { - return ( - -
    - {this.addForm()} -
    -
    - ) - } -} - -export default compose( - graphql(getRolesQuery, {name: 'getRolesQuery'}), - graphql(updateUserMutation, {name: 'updateUserMutation'}), - withStyles(styles) -)(ProfileSheet) // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/components/Search.js b/Deprecated-Code/UsersModule/client/src/components/Search.js deleted file mode 100644 index afccaded6..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/Search.js +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Component } from 'react' -import UserSearch from './UserSearch' -import {compose} from 'react-apollo' -import Paper from '@material-ui/core/Paper' -import BannerTopBar from './BannerTopBar' - -// Materia UI - -import { withStyles } from '@material-ui/core/styles' - -const styles = theme => ({ - root: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - } -}) - -class Search extends Component { - - render () { - const { classes } = this.props - return ( - - -
    - - - -
    -
    - ) - } -} - -export default compose( - withStyles(styles) -)(Search) diff --git a/Deprecated-Code/UsersModule/client/src/components/User.js b/Deprecated-Code/UsersModule/client/src/components/User.js deleted file mode 100644 index 7f3aaf53d..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/User.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import UserTabs from './UserTabs' -import BannerTopBar from './BannerTopBar' - -const User = () => { - return ( - - - - - ) -} - -export default User diff --git a/Deprecated-Code/UsersModule/client/src/components/UserList.js b/Deprecated-Code/UsersModule/client/src/components/UserList.js deleted file mode 100644 index 462ecd1b4..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/UserList.js +++ /dev/null @@ -1,185 +0,0 @@ -import React, { Component } from 'react'; -import {graphql, compose} from 'react-apollo'; -import {getUsersQuery} from '../queries/queries'; - -// Materia UI - -import { withStyles } from '@material-ui/core/styles'; -import Card from '@material-ui/core/Card'; -import CardActionArea from '@material-ui/core/CardActionArea'; -import CardActions from '@material-ui/core/CardActions'; -import CardContent from '@material-ui/core/CardContent'; -import CardMedia from '@material-ui/core/CardMedia'; -import Button from '@material-ui/core/Button'; -import Typography from '@material-ui/core/Typography'; -import Grid from '@material-ui/core/Grid'; -import Paper from '@material-ui/core/Paper'; - -// Full screen dialog imports (still Material UI) - -import PropTypes from 'prop-types'; -import Dialog from '@material-ui/core/Dialog'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import IconButton from '@material-ui/core/IconButton'; - -import CloseIcon from '@material-ui/icons/Close'; -import Slide from '@material-ui/core/Slide'; - -// components -import UserProfile from './UserProfile'; - -// Images -import UserDefaultPicture from '../img/user-default-pic.jpg' - -const styles = theme => ({ - root: { - paddingTop:30, - paddingBottom:30, - flexGrow: 1 - }, - card: { - maxWidth: 345, - minWidth: 300, - paddingTop:'30' - }, - media: { - height: 0, - paddingTop: '56.25%', // 16:9, - marginTop:'30', - minWidth: 300 - }, - typography: { - maxWidth: 345, - minWidth: 300, - paddingTop:'30' - }, - appBar: { - position: 'relative', - }, - flex: { - flex: 1, - }, - grid: { - paddingTop: 30, - marginTop:'30' - }, -}); - -function Transition(props) { - return ; -} - -class UserList extends Component { - - constructor(props){ - super(props); - this.state = { - selected: null, - open: false - } - } - - handleClickOpen = () => { - this.setState({ open: true }); - }; - - handleClose = () => { - this.setState({ open: false }); - }; - - displayUsers(){ - - let data = this.props.getUsersQuery; - const { classes } = this.props; - - if(data.loading){ - return (
    Loading Users...
    ); - } else { - return data.users_Users.map(user => { - - return ( - - - { - this.setState({ selected: user.id}); - } - }> - - - - - {user.alias} - - - {user.bio} - - - - - - - - - - - - - - - User Profile - - - - - - - - - - - - - - - - - ) - }); - } - } - - render() { - const { classes } = this.props; - return ( - - - {this.displayUsers()} - - - ); - } -} - -UserList.propTypes = { - classes: PropTypes.object.isRequired, -}; - -export default compose( - graphql(getUsersQuery, {name: "getUsersQuery"}), - withStyles(styles) -) (UserList); // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/components/UserProfile.js b/Deprecated-Code/UsersModule/client/src/components/UserProfile.js deleted file mode 100644 index a94f23ba5..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/UserProfile.js +++ /dev/null @@ -1,155 +0,0 @@ -import React, { Component } from 'react' -import {graphql, compose} from 'react-apollo' -import {getUserProfileQuery} from '../queries/queries' - -// Materia UI - -import { withStyles } from '@material-ui/core/styles' -import Grid from '@material-ui/core/Grid' -import Card from '@material-ui/core/Card' -import CardActionArea from '@material-ui/core/CardActionArea' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Typography from '@material-ui/core/Typography' -import Divider from '@material-ui/core/Divider' - -// Images -import UserDefaultPicture from '../img/user-default-pic.jpg' - -const styles = theme => ({ - root: { - flexGrow: 1, - padding: 60, - margin: 2 - }, - card: { - maxWidth: 500, - minWidth: 500, - paddingTop: '30' - }, - media: { - height: 0, - paddingTop: '56.25%', // 16:9, - marginTop: '30', - minWidth: '80%' - }, - grid: { - paddingTop: '30', - marginTop: '30' - }, - typography: { - width: '100%', - marginTop: 20, - marginBottom: 20 - } - -}) - -class UserProfile extends Component { - - displayNames () { - const user = this.props.data.users_User - const { classes } = this.props - - if (user.firstName !== null && user.lastName !== null) { - return ( - - { user.firstName + ' ' + user.lastName} - - ) - } - } - - displayRole () { - const user = this.props.data.users_User - const { classes } = this.props - - if (user.role.name !== null && user.role.name !== 'Not Defined') { - return ( -
    - - - { user.role.name } - -
    - ) - } - } - - displayBio () { - const user = this.props.data.users_User - const { classes } = this.props - - if (user.bio !== null && user.bio !== '') { - return ( -
    - - - { user.bio } - -
    - ) - } - } - - displayUserProfile () { - const user = this.props.data.users_User - const { classes } = this.props - - if (user) { - return ( - - - { - this.setState({ selected: user.id}) - } - }> - - - - - {this.displayNames()} - - - {user.alias} - - - {this.displayRole()} - {this.displayBio()} - - - - - - ) - } else { - return (
    No User selected...
    ) - } - } - - render () { - return ( - - {this.displayUserProfile()} - - ) - } -} - -export default compose( - graphql(getUserProfileQuery, { // What follows is the way to pass a parameter to a query. - options: (props) => { - return { - variables: { - name: 'getUserProfileQuery', - id: props.userId - } - } - }}), - withStyles(styles) -)(UserProfile) // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/components/UserSearch.js b/Deprecated-Code/UsersModule/client/src/components/UserSearch.js deleted file mode 100644 index 80587ac54..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/UserSearch.js +++ /dev/null @@ -1,275 +0,0 @@ -import React, { Component } from 'react' -import {graphql, compose} from 'react-apollo' -import {getUsersBySearchFields} from '../queries/queries' - -// Materia UI - -import { withStyles } from '@material-ui/core/styles' -import Card from '@material-ui/core/Card' -import CardActionArea from '@material-ui/core/CardActionArea' -import CardActions from '@material-ui/core/CardActions' -import CardContent from '@material-ui/core/CardContent' -import CardMedia from '@material-ui/core/CardMedia' -import Button from '@material-ui/core/Button' -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' - -import TextField from '@material-ui/core/TextField' - -// Images -import UserDefaultPicture from '../img/user-default-pic.jpg' - -const styles = theme => ({ - card: { - maxWidth: 150, - minWidth: 150, - paddingTop: '30', - marginBottom: 40 - }, - media: { - height: 0, - paddingTop: '56.25%', // 16:9, - marginTop: '30', - minWidth: 300 - }, - typography: { - maxWidth: 345, - minWidth: 300, - paddingTop: '30' - }, - appBar: { - position: 'relative' - }, - flex: { - flex: 1 - }, - grid: { - width: '80%', - marginLeft: '10%', - paddingTop: '30', - marginTop: 30 - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25 - }, - formTypography: { - width: '80%', - marginLeft: '10%', - marginTop: 40 - }, - button: { - margin: theme.spacing.unit, - marginTop: theme.spacing.unit * 3 - } -}) - -class UserSearch extends Component { - - constructor (props) { - super(props) - - this.state = { - alias: '', - firstName: '', - middleName: '', - lastName: '' - } - } - - submitForm (e) { - e.preventDefault() - - this.props.getUsersBySearchFields.variables.alias = this.state.alias - this.props.getUsersBySearchFields.variables.firstName = this.state.firstName - this.props.getUsersBySearchFields.variables.middleName = this.state.middleName - this.props.getUsersBySearchFields.variables.lastName = this.state.lastName - - this.props.getUsersBySearchFields.refetch({}) - } - - handleTextField (e) { - /* - We will do some basic input validations here. If something is wrong we will turn on the error sign on the textfield. - */ - - let value = e.target.value - - switch (e.target.id) { - case 'alias': - if (value.length > 30) { - this.setState({aliasError: true}) - } else { - this.setState({aliasError: false, alias: value}) - } - break - case 'firstName': - if (value.length > 30) { - this.setState({firstNameError: true}) - } else { - this.setState({firstNameError: false, firstName: value}) - } - break - case 'middleName': - if (value.length > 30) { - this.setState({middleNameError: true}) - } else { - this.setState({middleNameError: false, middleName: value}) - } - break - case 'lastName': - if (value.length > 50) { - this.setState({lastNameError: true}) - } else { - this.setState({lastNameError: false, lastName: value}) - } - break - default: - } - } - - selectText () { - if (this.props.selectButton === true) { - return ({this.props.selectText}) - } else { - return () - } - } - - selectButton (user) { - if (this.props.selectButton === true) { - return ( - - ) - } else { - return (
    ) - } - } - - displayUsers () { - let data = this.props.getUsersBySearchFields - const { classes } = this.props - - if (data.loading) { - return (
    Loading Users...
    ) - } else { - if (data.users_UsersSearch === undefined) { - return (
    No Users to Display
    ) - } else { - return data.users_UsersSearch.map(user => { - return ( - - - { - this.setState({ selected: user.id}) - } - }> - - - - - {user.alias} - - - - - - - {this.selectButton(user)} - - - - - - - ) - }) - } - } - } - - componentDidMount () { - window.dispatchEvent(new Event('load')) // This is a workaround to solve the problem that the slider does not show up - } - - render () { - const { classes } = this.props - return ( - -
    -
    - - - Use any of these fileds to search for users. {this.selectText()} - - - - - - - - - - - - - - - - - - - {this.displayUsers()} - -
    - - ) - } -} - -export default compose( - graphql(getUsersBySearchFields, {name: 'getUsersBySearchFields'}), - withStyles(styles) -)(UserSearch) // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/components/UserTabs.js b/Deprecated-Code/UsersModule/client/src/components/UserTabs.js deleted file mode 100644 index 7821ed19e..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/UserTabs.js +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { withStyles } from '@material-ui/core/styles'; -import AppBar from '@material-ui/core/AppBar'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import ProfileSheetIcon from '@material-ui/icons/Create'; -import ProfileImagesIcon from '@material-ui/icons/Wallpaper'; -import YourReferrerIcon from '@material-ui/icons/AccessibilityNew'; -import DescendentsIcon from '@material-ui/icons/DeviceHub'; -import Typography from '@material-ui/core/Typography'; - -// Components - -import ProfileSheet from './ProfileSheet'; -import ProfileImages from './ProfileImages'; -import YourReferrer from './YourReferrer'; -import YourDescendents from './YourDescendents'; - -function TabContainer(props) { - return ( - - {props.children} - - ); -} - -TabContainer.propTypes = { - children: PropTypes.node.isRequired, -}; - -const styles = theme => ({ - root: { - flexGrow: 1, - width: '100%', - backgroundColor: theme.palette.background.paper, - padding: 0, - margin: 0, - }, -}); - -class UserTabs extends React.Component { - state = { - value: 0 - }; - - handleChange = (event, value) => { - this.setState({ value }); - }; - - render() { - const { classes } = this.props; - const { value } = this.state; - - return ( -
    - - - } /> - } /> - } /> - } /> - - - {value === 0 && } - {value === 1 && } - {value === 2 && } - {value === 3 && } -
    - ); - } -} - -UserTabs.propTypes = { - classes: PropTypes.object.isRequired, -}; - -export default withStyles(styles)(UserTabs); diff --git a/Deprecated-Code/UsersModule/client/src/components/YourDescendents.js b/Deprecated-Code/UsersModule/client/src/components/YourDescendents.js deleted file mode 100644 index 8427fb313..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/YourDescendents.js +++ /dev/null @@ -1,96 +0,0 @@ -import React, { Component } from 'react' -import {compose} from 'react-apollo' - -// Materia UI - -import { withStyles } from '@material-ui/core/styles' -import Typography from '@material-ui/core/Typography' -import Grid from '@material-ui/core/Grid' -import Paper from '@material-ui/core/Paper' - -// components -import DescendentsTree from './DescendentsTree' - -const styles = theme => ({ - root: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - marginBottom: 40 - }, - grid: { - paddingTop: '30', - marginTop: 30 - } -}) - -class YourDescendents extends Component { - - constructor (props) { - super(props) - - this.defaultValuesSet = false - - this.state = { - id: '' - } - } - - componentWillMount () { - if (this.defaultValuesSet === false) { - let userData = localStorage.getItem('loggedInUser') - - if (userData === 'undefined') { return } - - let user = JSON.parse(userData) - this.defaultValuesSet = true - - /* Now we are ready to set the initial state. */ - this.setState({ - id: user.id - }) - } - } - - addForm () { - const { classes } = this.props - return ( - - - - Your Decendents - - - - These are your decendents within the project. Your children referred you as the one who brought them to the project, while - your grandchildren referred your children and so on. In order to be able to see your descendents, the users who you referred - must first point to you as your referrer. - - - - - - ) - } - - render () { - return ( - -
    - {this.addForm()} -
    -
    - ) - } -} - -export default compose( - withStyles(styles) -)(YourDescendents) // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/components/YourReferrer.js b/Deprecated-Code/UsersModule/client/src/components/YourReferrer.js deleted file mode 100644 index 5b9865a89..000000000 --- a/Deprecated-Code/UsersModule/client/src/components/YourReferrer.js +++ /dev/null @@ -1,154 +0,0 @@ -import React, { Component } from 'react' -import {graphql, compose} from 'react-apollo' -import {updateReferrerMutation} from '../queries/queries' - -// components - -import UserSearch from './UserSearch' -import UserProfile from './UserProfile' - -// Material-ui - -import { withStyles } from '@material-ui/core/styles' -import Paper from '@material-ui/core/Paper' -import Typography from '@material-ui/core/Typography' - -const styles = theme => ({ - root: { - width: '100%', - flexGrow: 1, - padding: 10, - marginTop: '5%', - marginBottom: '10%' - }, - typography: { - width: '80%', - marginLeft: '10%', - marginTop: 40, - marginBottom: 40 - }, - button: { - margin: theme.spacing.unit, - marginTop: theme.spacing.unit * 3 - }, - inputField: { - width: '80%', - marginLeft: '10%', - marginTop: 25 - } -}) - -class YourReferrer extends Component { - - constructor (props) { - super(props) - - this.defaultValuesSet = false - - this.state = { - id: '', - referrerId: '', - firstNameError: false, - middleNameError: false, - lastNameError: false, - aliasError: false - } - } - - userSelected (referrerUser) { - this.setState({referrerId: referrerUser.id}) - - this.props.updateReferrerMutation({ - variables: { - referrerId: referrerUser.id - } - }) - - /* Before we are done, we need to update the state of the local storage. */ - - let user = JSON.parse(localStorage.getItem('loggedInUser')) - - user.referrerId = referrerUser.id - - localStorage.setItem('loggedInUser', JSON.stringify(user)) - } - - renderMode () { - const { classes } = this.props - - if (this.state.referrerId !== null) { - return ( -
    - - This is the user who introduced you to the project. - - - - - - This information can not be changed. - -
    - ) - } else { - return ( -
    - - We know that a group often becomes more intelligent when the number of people in the group increases. - To incentivize members of the community to invite more people to join we have developed this referral - program in which you can specify who referred you to the project, and see the members who pointed at - you as their referrer. Later this information will be available at your user profile and add to your - overall reputation within the project. - - - -
    - ) - } - } - - componentWillMount () { - if (this.defaultValuesSet === false) { - let userData = localStorage.getItem('loggedInUser') - - if (userData === 'undefined') { return } - - let user = JSON.parse(userData) - this.defaultValuesSet = true - - /* Now we are ready to set the initial state. */ - - this.setState({ - id: user.id, - referrerId: user.referrerId - }) - } - } - - addForm () { - const { classes } = this.props - return ( - - - Your Referrer - - {this.renderMode()} - - ) - } - - render () { - return ( - -
    - {this.addForm()} -
    -
    - ) - } -} - -export default compose( - graphql(updateReferrerMutation, {name: 'updateReferrerMutation'}), - withStyles(styles) -)(YourReferrer) // This technique binds more than one query to a single component. diff --git a/Deprecated-Code/UsersModule/client/src/img/aa-logo-dark-8.png b/Deprecated-Code/UsersModule/client/src/img/aa-logo-dark-8.png deleted file mode 100644 index a6bcfcb90..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/aa-logo-dark-8.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/aa-logo.png b/Deprecated-Code/UsersModule/client/src/img/aa-logo.png deleted file mode 100644 index 9701ee1c0..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/aa-logo.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/auth0-logo.png b/Deprecated-Code/UsersModule/client/src/img/auth0-logo.png deleted file mode 100644 index ba4c72724..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/auth0-logo.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/email.png b/Deprecated-Code/UsersModule/client/src/img/email.png deleted file mode 100644 index 93b2edf0c..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/email.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/github-head-negative.png b/Deprecated-Code/UsersModule/client/src/img/github-head-negative.png deleted file mode 100644 index 1a1d757b1..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/github-head-negative.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/github-head.png b/Deprecated-Code/UsersModule/client/src/img/github-head.png deleted file mode 100644 index a815207a3..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/github-head.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/github-logo.png b/Deprecated-Code/UsersModule/client/src/img/github-logo.png deleted file mode 100644 index 336861716..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/github-logo.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/github-negative.png b/Deprecated-Code/UsersModule/client/src/img/github-negative.png deleted file mode 100644 index 967efa057..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/github-negative.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/github.png b/Deprecated-Code/UsersModule/client/src/img/github.png deleted file mode 100644 index 92d3c954b..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/github.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/img/user-default-pic.jpg b/Deprecated-Code/UsersModule/client/src/img/user-default-pic.jpg deleted file mode 100644 index 4709ae9b1..000000000 Binary files a/Deprecated-Code/UsersModule/client/src/img/user-default-pic.jpg and /dev/null differ diff --git a/Deprecated-Code/UsersModule/client/src/index.js b/Deprecated-Code/UsersModule/client/src/index.js deleted file mode 100644 index c2f66af6d..000000000 --- a/Deprecated-Code/UsersModule/client/src/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react' -import { Route, Switch } from 'react-router-dom' - -import { MuiPickersUtilsProvider } from 'material-ui-pickers' -import LuxonUtils from 'material-ui-pickers/utils/luxon-utils' - -import Home from './components/Home' -import User from './components/User' -import Browse from './components/Browse' -import Search from './components/Search' - -const App = () => ( - - - - - - - - -) - -export default App - diff --git a/Deprecated-Code/UsersModule/client/src/queries/queries.js b/Deprecated-Code/UsersModule/client/src/queries/queries.js deleted file mode 100644 index 50eb8fdbd..000000000 --- a/Deprecated-Code/UsersModule/client/src/queries/queries.js +++ /dev/null @@ -1,164 +0,0 @@ -import gql from 'graphql-tag' - -const getUsersQuery = gql` -{ - users_Users { - id - alias - firstName - middleName - lastName - bio - role { - id - name - } - } -} -` -const getUserProfileQuery = gql` -query($id: ID){ - users_User (id: $id){ - id - alias - firstName - middleName - lastName - bio - avatarHandle - role { - id - name - } - } -} -` -const getUserByAuthIdQuery = gql` -query($authId: String){ - users_UserByAuthId (authId: $authId){ - id - referrerId - alias - firstName - middleName - lastName - bio - email - emailVerified - isDeveloper - isDataAnalyst - isTrader - avatarHandle - avatarChangeDate - role { - id - } - } -} -` -const getUsersBySearchFields = gql` -query( - $alias: String, - $firstName: String, - $middleName: String, - $lastName: String -){ - users_UsersSearch (alias: $alias, firstName: $firstName, middleName: $middleName, lastName: $lastName){ - id - alias - firstName - middleName - lastName - } -} -` -const getDescendentsQuery = gql` -query( - $id: String -){ - users_Descendents (id: $id){ - id - alias - firstName - middleName - lastName - referrerId - descendents { - id - alias - firstName - middleName - lastName - referrerId - descendents { - id - alias - firstName - middleName - lastName - referrerId - } - } - } -} -` -const getRolesQuery = gql` -{ - users_Roles { - id - name - } -} -` -const updateUserMutation = gql` -mutation( - $firstName:String, - $middleName:String, - $lastName:String, - $bio:String, - $isDeveloper:Int, - $isTrader:Int, - $isDataAnalyst:Int, - $roleId:String! -) - { - users_UpdateUser ( - firstName:$firstName, - middleName: $middleName, - lastName: $lastName, - bio: $bio, - isDeveloper: $isDeveloper, - isTrader: $isTrader, - isDataAnalyst: $isDataAnalyst, - roleId: $roleId - ) - { - id - alias - } -} -` -const updateReferrerMutation = gql` -mutation( - $referrerId:String! -) - { - users_UpdateUserReferrer ( - referrerId:$referrerId - ) - { - id - referrerId - } -} -` -export { - getUsersQuery, - getUserByAuthIdQuery, - getRolesQuery, - getUserProfileQuery, - getUsersBySearchFields, - getDescendentsQuery, - updateUserMutation, - updateReferrerMutation -} diff --git a/Deprecated-Code/UsersModule/client/src/theme.js b/Deprecated-Code/UsersModule/client/src/theme.js deleted file mode 100644 index 96492c48c..000000000 --- a/Deprecated-Code/UsersModule/client/src/theme.js +++ /dev/null @@ -1,65 +0,0 @@ -import { createMuiTheme } from '@material-ui/core/styles' - -export const theme = createMuiTheme({ - palette: { - primary: { main: '#303036' }, // DARK. - secondary: { main: '#CC5835' } // RUSTED_RED. - }, - typography: { - fontFamily: '"Saira","Saira Condenses", sans-serif' - }, - overrides: { - Paper: { - root: { - backgroundColor: '#ffffff' - }, - elevation: 0, - square: true - } - } -}) - -export const globalStyles = theme => ({ - '@global': { - body: { - backgroundColor: theme.palette.common.white - } - }, - appBar: { - position: 'relative' - }, - toolbarTitle: { - flex: 1 - }, - layout: { - width: 'auto', - marginLeft: theme.spacing.unit * 3, - marginRight: theme.spacing.unit * 3, - [theme.breakpoints.up(900 + theme.spacing.unit * 3 * 2)]: { - width: 900, - marginLeft: 'auto', - marginRight: 'auto' - } - }, - heroContent: { - maxWidth: 600, - margin: '0 auto', - padding: `${theme.spacing.unit * 8}px 0 ${theme.spacing.unit * 6}px` - }, - cardHeader: { - backgroundColor: theme.palette.grey[200] - }, - cardPricing: { - display: 'flex', - justifyContent: 'center', - alignItems: 'baseline', - marginBottom: theme.spacing.unit * 2 - }, - cardActions: { - [theme.breakpoints.up('sm')]: { - paddingBottom: theme.spacing.unit * 2 - } - } -}) - -export default theme diff --git a/Deprecated-Code/UsersModule/client/src/utils/local-storage.js b/Deprecated-Code/UsersModule/client/src/utils/local-storage.js deleted file mode 100644 index 963ba0f36..000000000 --- a/Deprecated-Code/UsersModule/client/src/utils/local-storage.js +++ /dev/null @@ -1,9 +0,0 @@ -const getItem = async name => window.localStorage.getItem(name) -const setItem = async (name, value) => window.localStorage.setItem(name, value) -const removeItem = async name => window.localStorage.removeItem(name) - -export { - getItem, - setItem, - removeItem -} diff --git a/Deprecated-Code/UsersModule/image.png b/Deprecated-Code/UsersModule/image.png deleted file mode 100644 index 5f2f14c34..000000000 Binary files a/Deprecated-Code/UsersModule/image.png and /dev/null differ diff --git a/Deprecated-Code/UsersModule/server/.dockerignore b/Deprecated-Code/UsersModule/server/.dockerignore deleted file mode 100644 index fe24f1c90..000000000 --- a/Deprecated-Code/UsersModule/server/.dockerignore +++ /dev/null @@ -1,14 +0,0 @@ -# Ignore files to be uploaded to the image -.env -.env.dev -.env.prod -.git -.gitignore -Dockerfile -Dockerfile.prod -README.md -CODE_OF_CONDUCT.md -CONTRIBUTING.md - -/coverage -/.nyc_output diff --git a/Deprecated-Code/UsersModule/server/.env.local b/Deprecated-Code/UsersModule/server/.env.local deleted file mode 100644 index 907ef740a..000000000 --- a/Deprecated-Code/UsersModule/server/.env.local +++ /dev/null @@ -1,13 +0,0 @@ -NODE_ENV=production -PORT=4000 - -MONGO_URL=mongodb://mongo/users - -GATEWAY_ENDPOINT=http://master-app-api:4100/graphql -USERS_API_PRESHARED=users_key - -GENERATE_SOURCEMAP=true -ERROR_LOG=true -INFO_LOG=true - - diff --git a/Deprecated-Code/UsersModule/server/.gitignore b/Deprecated-Code/UsersModule/server/.gitignore deleted file mode 100644 index 6fee4cec7..000000000 --- a/Deprecated-Code/UsersModule/server/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. -.env -.env.dev - -/node_modules -/coverage diff --git a/Deprecated-Code/UsersModule/server/CODE_OF_CONDUCT.md b/Deprecated-Code/UsersModule/server/CODE_OF_CONDUCT.md deleted file mode 100644 index c71b685b4..000000000 --- a/Deprecated-Code/UsersModule/server/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at feedback at advancedalgos dot org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/UsersModule/server/CONTRIBUTING.md b/Deprecated-Code/UsersModule/server/CONTRIBUTING.md deleted file mode 100644 index 311653120..000000000 --- a/Deprecated-Code/UsersModule/server/CONTRIBUTING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Advanced Algos LTD is a startup, currently at a very early stage. Although this repository is not open source software yet, we do welcome contributions from the community. - -Contributions are deemed _voluntary work_. There might be incentives in place for certain kinds of contributions. Contact us for more information in this regards. - -In any case, contributors agree to provide an express grant of patent rights for their contributions. Submitting Pull Requests to this repository represents an express agreement with the terms of our Balanced Contributor Intellectual Property Agreement. This agreement is a direct implementation of GitHub's [Balanced Employee Intellectual Property Agreement 1.0.1](https://github.com/github/balanced-employee-ip-agreement/blob/master/Balanced_Employee_IP_Agreement.md). - -# Balanced Contributor Intellectual Property Agreement 1.0.1 - -This BALANCED CONTRIBUTOR INTELLECTUAL PROPERTY AGREEMENT is between person or team submitting Pull Requests to this repository and Advanced Algos LTD ("Company"). - -**What is this?** This is the Company's Intellectual Property Agreement ("Agreement"). If you've worked in the technology space before, there's a good chance that you've run across one or more of these in the past. This document is the official, entire and exclusive agreement on what intellectual property ("IP") is yours, and what belongs to the Company. - -**Why is this?** The Company needs to be clear on what IP it owns and has rights to. Its customers, contributors, and investors depend on the Company having the legal rights to the products and services it is providing so that the Company can continue operating and doing business. - -The Company also believes that it's important to be clear on what it doesn't own. The Company doesn't want you looking over your shoulder every time you work on something personal or worrying that the Company will someday seize your open source non-lethal mousetrap simulation software. In other words, the Company isn't interested in appropriating your personal projects. - -**Read this.** Please read this document and be sure you understand it before you submit any Pull Requests. Due to legal risk and corporate obligations, the Company cannot, by and large, negotiate its terms. If you feel you have a particular circumstance that keeps you from signing, please let the Company's legal department ("Legal") know. And, of course, you're always free and encouraged to get your own legal counsel to explain anything you're not clear on. - -Cool? Then, by submitting your first Pull Request, and as a condition of your contribution, you agree to the following: - -1. **What the Company owns.** The Company owns any IP ("Company IP") that you create, or help create _as its contributor_, but only if it meets one or more of these additional conditions: The IP was (i) related to an existing or prospective Company product or service at the time you developed, invented, or created it, (ii) developed for use by the Company, or (iii) developed or promoted with existing Company IP or with the Company's endorsement. You hereby grant and assign, and will grant and assign, to the Company all rights and interests in all Company IP. - - "Company IP" includes concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, and works of authorship. - -2. **What the Company doesn't own.** If you create IP that doesn't fit into one of the categories listed above, the Company doesn't own it. In other words, the Company doesn't own concepts, designs, developments, discoveries, ideas, improvements, inventions, trade secrets, trademarks, or works of authorship that you develop, invent, or create that do not meet any of the conditions in Section 1. - -3. **Contribution of your IP to Company projects.** If you include your own IP – such as IP you created prior to working for the Company – into a Company product or service, it's still yours, of course, but you grant the Company a non-exclusive, irrevocable, fully paid-up, royalty-free, perpetual, sublicensable, transferable, worldwide license to use it without restriction in any way or implementation, in modified form, or as is, by itself, or incorporated into another product or service ("License"). If you include your name in any project over which the Company would have rights under this Agreement, such as in a copyright notice or a comment in code or documentation, then the License covers the rights associated with that use of your name as well. - -4. **Your contributions to non-Company projects.** The Company recognizes that you may be engaged in work that requires you to submit IP to entities other than the Company, such as open source projects used by the Company. Please make sure that Legal is aware of what you're working on so that Legal can help with any licensing issues. If any project asks you to sign a contribution agreement, you should check with Legal before doing so. These agreements may be legally binding on the Company and so should be run through Legal first. - -5. **Voluntary Works** All Company IP that you are involved with or create as part of your work for the Company is voluntary work which does not require compensation. There might be incentives in place for certain kinds of contributions. Feel free to contact the Company to learn more. - -6. **No conflicts.** You agree that you don't have any outstanding agreements or obligations that conflict with those in this Agreement, and that you won't enter into conflicting agreements in the future. - -7. **IP protection.** The Company might someday need to show the work that went into the development of IP that it uses or has used, or to make government filings to establish that it owns the IP or has rights over it. To help in those situations, you agree not to destroy any records you maintain relating to the development of any Company IP or IP under License (together, "All IP"), and, if the Company asks, to provide those records to the Company. You agree to help the Company secure and defend its rights in All IP. For your help the Company will compensate you at a reasonable rate. If the Company is unable to secure your help, you authorize the Company to act on your behalf (as your agent and attorney-in-fact) in securing all rights related to All IP. - -8. **Confidentiality.** As an contributor or contractor of the Company, you will have access to sensitive confidential information that is important to the Company's business. You are responsible for keeping this information confidential, including after you end your work for the Company. - - "Confidential Information" includes non-public technical details about our products or services, financial information, business strategies and forecasts, customer data, or any other information, data or know-how that is valuable to the Company because it is not publicly known. - - The Company's Confidential Information is sensitive and we expect that you'll treat it as such. You agree to only use the Company's Confidential Information for the purpose of performing your contribution and for the benefit of the Company. You will do your best to keep Confidential Information secret. If you are not sure if something is Confidential Information, you should assume that it is, until you can confirm otherwise. \ No newline at end of file diff --git a/Deprecated-Code/UsersModule/server/Dockerfile b/Deprecated-Code/UsersModule/server/Dockerfile deleted file mode 100644 index c407f9d27..000000000 --- a/Deprecated-Code/UsersModule/server/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM mhart/alpine-node:12 - -# Directory where the service will be installed -ARG API_DIR=/usr/src/users-api - -# Prepare required directories -RUN mkdir -p ${API_DIR} - -# Use app directory as current workdir -WORKDIR ${API_DIR} - -# Copy package.json to workdir -COPY . ${API_DIR}/ - -# Install dependencies -RUN npm install --production - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/UsersModule/server/Dockerfile.prod b/Deprecated-Code/UsersModule/server/Dockerfile.prod deleted file mode 100644 index 0295fd18a..000000000 --- a/Deprecated-Code/UsersModule/server/Dockerfile.prod +++ /dev/null @@ -1,21 +0,0 @@ -FROM mhart/alpine-node:8 - -ENV PORT=4000 - -RUN mkdir -p /var/www/app && \ - mkdir -p /var/www/app/node_modules - -# Use app directory as current workdir -WORKDIR /var/www/app -ENV PATH /var/www/app/node_modules/.bin:$PATH -# Copy package.json to workdir -COPY package.json /var/www/app/package.json - -# Install dependencies -RUN npm install - -# Copy application code -COPY . /var/www/app - -# Expose Port -EXPOSE $PORT diff --git a/Deprecated-Code/UsersModule/server/LICENSE b/Deprecated-Code/UsersModule/server/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/UsersModule/server/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/UsersModule/server/docker-compose.prod.yml b/Deprecated-Code/UsersModule/server/docker-compose.prod.yml deleted file mode 100644 index 8e1e3fbb5..000000000 --- a/Deprecated-Code/UsersModule/server/docker-compose.prod.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3' -services: - node: - image: aausersapi-dev:v1 - build: - context: . - dockerfile: ./Dockerfile.prod - env_file: ./.env - container_name: aausersapi - tty: true - stdin_open: true - volumes: - - ./:/var/www/app - - /var/www/app/node_modules - working_dir: /var/www/app - restart: always - command: npm start - expose: - - 4000 - network_mode: webproxy -networks: - default: - external: - name: webproxy diff --git a/Deprecated-Code/UsersModule/server/package-lock.json b/Deprecated-Code/UsersModule/server/package-lock.json deleted file mode 100644 index ff33f7ba9..000000000 --- a/Deprecated-Code/UsersModule/server/package-lock.json +++ /dev/null @@ -1,5750 +0,0 @@ -{ - "name": "@superalgos/users-api", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-jwt": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz", - "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=", - "requires": { - "@types/express": "*", - "@types/express-unless": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.3.tgz", - "integrity": "sha512-HFgBmRDTvdnrRFXqBr2NM2NUCu6fIpzJsUTlRVENF8lxvstof7cl9Fxfwq5S0kJbO/FsPVcjlxpOM3ZxIkn7Rw==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/express-unless": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.1.tgz", - "integrity": "sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==", - "requires": { - "@types/express": "*" - } - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, - "@types/node": { - "version": "11.13.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", - "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "dev": true, - "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bson": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", - "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000963", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz", - "integrity": "sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.127", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.127.tgz", - "integrity": "sha512-1o25iFRf/dbgauTWalEzmD1EmRN3a2CzP/K7UVpYLEBduk96LF0FyUdCcf4Ry2mAWJ1VxyblFjC93q6qlLwA2A==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "express-graphql": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/express-graphql/-/express-graphql-0.6.12.tgz", - "integrity": "sha512-ouLWV0hRw4hnaLtXzzwhdC79ewxKbY2PRvm05mPc/zOH5W5WVCHDQ1SmNxEPBQdUeeSNh29aIqW9zEQkA3kMuA==", - "requires": { - "accepts": "^1.3.0", - "content-type": "^1.0.4", - "http-errors": "^1.3.0", - "raw-body": "^2.3.2" - } - }, - "express-jwt": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.1.tgz", - "integrity": "sha512-1C9RNq0wMp/JvsH/qZMlg3SIPvKu14YkZ4YYv7gJQ1Vq+Dv8LH9tLKenS5vMNth45gTlEUGx+ycp9IHIlaHP/g==", - "requires": { - "async": "^1.5.0", - "express-unless": "^0.3.0", - "jsonwebtoken": "^8.1.0", - "lodash.set": "^4.0.0" - } - }, - "express-unless": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", - "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA=" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", - "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graphql": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.2.1.tgz", - "integrity": "sha512-2PL1UbvKeSjy/lUeJqHk+eR9CvuErXoCNwJI4jm3oNFEeY+9ELqHNKO1ZuSxAkasPkpWbmT/iMRMFxd3cEL3tQ==", - "requires": { - "iterall": "^1.2.2" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jwks-rsa": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.4.0.tgz", - "integrity": "sha512-6aUc+oTuqsLwIarfq3A0FqoD5LFSgveW5JO1uX2s0J8TJuOEcDc4NIMZAmVHO8tMHDw7CwOPzXF/9QhfOpOElA==", - "requires": { - "@types/express-jwt": "0.0.34", - "debug": "^2.2.0", - "limiter": "^1.1.0", - "lru-memoizer": "^1.6.0", - "ms": "^2.0.0", - "request": "^2.73.0" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kareem": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", - "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==" - }, - "lock": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz", - "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0=" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "requires": { - "pseudomap": "^1.0.1", - "yallist": "^2.0.0" - } - }, - "lru-memoizer": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz", - "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=", - "requires": { - "lock": "~0.1.2", - "lodash": "^4.17.4", - "lru-cache": "~4.0.0", - "very-fast-args": "^1.1.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true, - "optional": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mongodb": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.2.tgz", - "integrity": "sha512-xQ6apOOV+w7VFApdaJpWhYhzartpjIDFQjG0AwgJkLh7dBs7PTsq4A3Bia2QWpDohmAzTBIdQVLMqqLy0mwt3Q==", - "requires": { - "mongodb-core": "3.2.2", - "safe-buffer": "^5.1.2" - } - }, - "mongodb-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.2.tgz", - "integrity": "sha512-YRgC39MuzKL0uoGoRdTmV1e9m47NbMnYmuEx4IOkgWAGXPSEzRY7cwb3N0XMmrDMnD9vp7MysNyAriIIeGgIQg==", - "requires": { - "bson": "^1.1.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.5.4.tgz", - "integrity": "sha512-xzS7fJtXGjCOZozCtlyFS8graMub1L9knp37+1dJCDmWzOtXVHeLjV2XIC9tX0sE54cxeG5rHvSmIkLpeHjjmA==", - "requires": { - "async": "2.6.1", - "bson": "~1.1.1", - "kareem": "2.3.0", - "mongodb": "3.2.2", - "mongodb-core": "3.2.2", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.5.2", - "mquery": "3.2.0", - "ms": "2.1.1", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sift": "7.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "requires": { - "lodash": "^4.17.10" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "mpath": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.2.tgz", - "integrity": "sha512-NOeCoW6AYc3hLi30npe7uzbD9b4FQZKH40YKABUCCvaKKL5agj6YzvHoNx8jQpDMNPgIa5bvSZQbQpWBAVD0Kw==" - }, - "mquery": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz", - "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "0.0.1", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nodemon": { - "version": "1.18.11", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.11.tgz", - "integrity": "sha512-KdN3tm1zkarlqNo4+W9raU3ihM4H15MVMSE/f9rYDZmFgDHAfAJsomYrHhApAkuUemYjFyEeXlpCOQ2v5gtBEw==", - "dev": true, - "requires": { - "chokidar": "^2.1.5", - "debug": "^3.1.0", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.6", - "semver": "^5.5.0", - "supports-color": "^5.2.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "pstree.remy": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", - "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-clone": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", - "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "very-fast-args": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz", - "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y=" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - } - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - } - } -} diff --git a/Deprecated-Code/UsersModule/server/package.json b/Deprecated-Code/UsersModule/server/package.json deleted file mode 100644 index 7ff38dae1..000000000 --- a/Deprecated-Code/UsersModule/server/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@superalgos/users-api", - "version": "0.1.0", - "description": "Superalgos Users backend API", - "author": "Superalgos, ltd.", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/Superalgos/UsersModule.git" - }, - "main": "src/index.js", - "scripts": { - "start": "nodemon --exec babel-node --presets env,stage-2 src/index.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-preset-env": "^1.7.0", - "babel-preset-stage-2": "^6.24.1", - "nodemon": "^1.18.10" - }, - "dependencies": { - "cors": "^2.8.4", - "dotenv": "^6.0.0", - "express": "^4.16.3", - "express-graphql": "^0.6.12", - "express-jwt": "^5.3.1", - "graphql": "^14.0.0", - "jsonwebtoken": "^8.3.0", - "jwks-rsa": "^1.3.0", - "lodash": "^4.17.10", - "mongoose": "^5.2.12", - "winston": "^3.1.0" - } -} diff --git a/Deprecated-Code/UsersModule/server/sessions.js b/Deprecated-Code/UsersModule/server/sessions.js deleted file mode 100644 index 9ba7d9aef..000000000 --- a/Deprecated-Code/UsersModule/server/sessions.js +++ /dev/null @@ -1,16 +0,0 @@ -/* - -Global in-memory Sessions - -Here, we are going to store some information associated to the logged in user, after it was -succesfully authenticated. This will prevent cheating, since we will use the in-Session -user-id for any transaction belonging to the user instead of whatever user id it provides -from the client app. - -The key to access the in-Session information will allways be the authenticatioin token received -at the authentication transaction. This token should always come at the header of each -transactional functionality supported by this server module. - -*/ - -global.Sessions = new Map(); diff --git a/Deprecated-Code/UsersModule/server/src/auth/jwt.js b/Deprecated-Code/UsersModule/server/src/auth/jwt.js deleted file mode 100644 index 21c88e8c9..000000000 --- a/Deprecated-Code/UsersModule/server/src/auth/jwt.js +++ /dev/null @@ -1,26 +0,0 @@ - -const jwt = require('express-jwt') -const jwksRsa = require('jwks-rsa') - -// Authentication middleware. When used, the -// if the access token exists, it be verified against -// the Auth0 JSON Web Key Set -const checkJwt = jwt({ - // Dynamically provide a signing key - // based on the kid in the header and - // the signing keys provided by the JWKS endpoint. - secret: jwksRsa.expressJwtSecret({ - cache: true, - rateLimit: true, - jwksRequestsPerMinute: 1, - jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json` - }), - - // Validate the audience and the issuer. - credentialsRequired: false, - audience: process.env.AUTH0_AUDIENCE, - issuer: process.env.AUTH0_ISSUER, - algorithms: [`RS256`] -}) - -module.exports = checkJwt diff --git a/Deprecated-Code/UsersModule/server/src/auth/token-decoder.js b/Deprecated-Code/UsersModule/server/src/auth/token-decoder.js deleted file mode 100644 index 44c90c839..000000000 --- a/Deprecated-Code/UsersModule/server/src/auth/token-decoder.js +++ /dev/null @@ -1,81 +0,0 @@ -const MODULE_NAME = 'token-decoder' - -/* - JSON Web Token (JWT) is a compact, URL-safe means of representing - claims to be transferred between two parties. The claims in a JWT - are encoded as a JSON object that is used as the payload of a JSON - Web Signature (JWS) structure or as the plaintext of a JSON Web - Encryption (JWE) structure, enabling the claims to be digitally - signed or integrity protected with a Message Authentication Code - (MAC) and/or encrypted. -*/ - -const JSONWebToken = require('jsonwebtoken') // A library to deal with JSON Web Tokens. -const webTokenLibrary = require('jwks-rsa') // A library to retrieve RSA signing keys from a JWKS (JSON Web Key Set) endpoint. - -const decoder = webTokenLibrary({ - cache: true, - rateLimit: true, - jwksRequestsPerMinute: 1, - jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json` -}) - -function decodeToken (token, callBackFunction) { - try { - if (process.env.INFO_LOG === true) { console.log('[INFO] ' + MODULE_NAME + ' -> decodeToken -> Entering function.') } - - const decoded = JSONWebToken.decode(token, { complete: true }) - const header = decoded.header - const payload = decoded.payload - - if ( - header === null || - header.kid === null || - payload === null - ) { - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> Invalid Token. ') } - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> token = ' + token) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - decoder.getSigningKey(header.kid, onKeyReady) - - function onKeyReady (err, key) { - if (process.env.INFO_LOG === true) { console.log('[INFO] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> Entering function.') } - - if (err) { - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> Error getting the key. ') } - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> key = ' + key) } - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> err = ' + err) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - JSONWebToken.verify( - token, - key.publicKey, - { algorithms: ['RS256'] }, - onVerified) - - function onVerified (err, decoded) { - if (process.env.INFO_LOG === true) { console.log('[INFO] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> onVerified -> Entering function.') } - - if (err) { - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> onVerified -> Error verifying. ') } - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> onVerified -> decoded = ' + decoded) } - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> onKeyReady -> onVerified -> err = ' + err) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - return - } - - callBackFunction(global.DEFAULT_OK_RESPONSE, decoded) - } - } - } catch (err) { - if (process.env.ERROR_LOG === true) { console.log('[ERROR] ' + MODULE_NAME + ' -> decodeToken -> err = ' + err) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE) - } -} - -module.exports = decodeToken diff --git a/Deprecated-Code/UsersModule/server/src/errors/notAllowed.json b/Deprecated-Code/UsersModule/server/src/errors/notAllowed.json deleted file mode 100644 index b76604aa2..000000000 --- a/Deprecated-Code/UsersModule/server/src/errors/notAllowed.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "errors": [ - { - "code": 401, - "message": "Wait, you're not supposed to be here, go through the gate as everyone else" - } - ] -} diff --git a/Deprecated-Code/UsersModule/server/src/globals.js b/Deprecated-Code/UsersModule/server/src/globals.js deleted file mode 100644 index 3a9aa2fae..000000000 --- a/Deprecated-Code/UsersModule/server/src/globals.js +++ /dev/null @@ -1,27 +0,0 @@ - -/* Callbacks default responses. */ - -global.DEFAULT_OK_RESPONSE = { - result: 'Ok', - message: 'Operation Succeeded' -} - -global.DEFAULT_FAIL_RESPONSE = { - result: 'Fail', - message: 'Operation Failed' -} - -global.DEFAULT_RETRY_RESPONSE = { - result: 'Retry', - message: 'Retry Later' -} - -global.CUSTOM_OK_RESPONSE = { - result: 'Ok, but check Message', - message: 'Custom Message' -} - -global.CUSTOM_FAIL_RESPONSE = { - result: 'Fail Because', - message: 'Custom Message' -} diff --git a/Deprecated-Code/UsersModule/server/src/index.js b/Deprecated-Code/UsersModule/server/src/index.js deleted file mode 100644 index 4532272b8..000000000 --- a/Deprecated-Code/UsersModule/server/src/index.js +++ /dev/null @@ -1,65 +0,0 @@ - -/* This module imports */ - -import 'dotenv/config' -import './globals' -import logger from './logger' -import express from 'express' -import graphqlHTTP from 'express-graphql' -import schema from './schema/schema' -import mongoose from 'mongoose' -import checkJwt from './auth/jwt' -import wrongPreshared from './errors/notAllowed.json' -import cors from 'cors' - -require('dotenv').config() - -const app = express() - - // Checking preshared key -app.post('/graphql', (req, res, next) => { - if (req.headers.preshared === process.env.USERS_API_PRESHARED) { - next() - } else { - logger.error('Wrong Pre-Shared Received', req.headers.preshared) - res.send(wrongPreshared) - } -}) - - // Allow crosss-origin requests -app.use(cors()) - - // Database Connection - mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true }) - -mongoose.connection.once('open', () => { - logger.info('Connected to the DB.') -}) - - /* Here we bind all requests to this endpoint to be procecced by the GraphQL Library. */ - -app.get('/graphql', graphqlHTTP({ - schema, - graphiql: true -})) - -app.post('/graphql', graphqlHTTP(req => { - return { - schema, - graphiql: false, - context: { - user: req.user, - userId: req.headers.userid - } - } -})) - -app.post('/graphql', checkJwt, (err, req, res, next) => { - if (err) return res.status(401).send(`[Authenticate Token Error] ${err.message}`) - next() -}) - -app.listen(4000, () => { - logger.info('Now listening for requests on port 4000') -}) - diff --git a/Deprecated-Code/UsersModule/server/src/logger/index.js b/Deprecated-Code/UsersModule/server/src/logger/index.js deleted file mode 100644 index dcd5f6b9a..000000000 --- a/Deprecated-Code/UsersModule/server/src/logger/index.js +++ /dev/null @@ -1,41 +0,0 @@ -import { createLogger, format, transports } from 'winston' -const { combine, timestamp, simple } = format -import { inspect } from 'util' - -const options = { - file: { - level: 'info', - filename: '../logs/app.log', - handleExceptions: true, - json: true, - maxsize: 5242880, // 5MB - maxFiles: 5, - colorize: false, - timestamp: true - }, - console: { - level: 'debug', - handleExceptions: true, - json: false, - colorize: true, - timestamp: true - } -} - -const logger = createLogger({ - level: 'info', - format: format.combine( - format.colorize(), - format.timestamp({ format: 'YY/MM/DD HH:mm' }), - format.printf( - info => `${info.timestamp} - ${info.level}: ${JSON.parse(JSON.stringify(inspect(info.message)))}` - ) - ), - transports: [ - new transports.File(options.file), - new transports.Console(options.console) - ], - exitOnError: false // do not exit on handled exceptions -}) - -export default logger diff --git a/Deprecated-Code/UsersModule/server/src/models/user.js b/Deprecated-Code/UsersModule/server/src/models/user.js deleted file mode 100644 index 2cda26c76..000000000 --- a/Deprecated-Code/UsersModule/server/src/models/user.js +++ /dev/null @@ -1,28 +0,0 @@ - -/* This is the database schema definition for the User Collection in Mongo DB */ - -const mongoose = require('mongoose') -const Schema = mongoose.Schema - -const userSchema = new Schema({ - authId: String, - referrerId: String, - creationDate: Number, - alias: String, - firstName: String, - middleName: String, - lastName: String, - email: String, - emailVerified: Boolean, - bio: String, - isDeveloper: Boolean, - isTrader: Boolean, - isDataAnalyst: Boolean, - roleId: String, - avatarHandle: String, - avatarChangeDate: String, - sessionToken: String -}) - -global.UserSchema = global.UserSchema || mongoose.model('User', userSchema) -module.exports = global.UserSchema diff --git a/Deprecated-Code/UsersModule/server/src/schema/schema.js b/Deprecated-Code/UsersModule/server/src/schema/schema.js deleted file mode 100644 index 6e7cdd49e..000000000 --- a/Deprecated-Code/UsersModule/server/src/schema/schema.js +++ /dev/null @@ -1,468 +0,0 @@ -const MODULE_NAME = 'schema' - -import logger from '../logger' -import _ from 'lodash' -import User from '../models/user' -import tokenDecoder from '../auth/token-decoder' - -const graphql = require('graphql') - -const { - GraphQLObjectType, - GraphQLString, - GraphQLSchema, - GraphQLID, - GraphQLInt, - GraphQLList, - GraphQLNonNull -} = graphql // Destructuring this variables from inside the package. - -let roles = [ - {id: '1', name: 'Not Defined'}, - {id: '2', name: 'Developer'}, - {id: '3', name: 'Trader'}, - {id: '4', name: 'Data Analyst'} -] - -// Types - -const UserType = new GraphQLObjectType({ - name: 'User', - fields: () => ({ - id: { type: GraphQLID}, - authId: { type: GraphQLString}, - referrerId: {type: GraphQLString}, - alias: {type: GraphQLString}, - firstName: {type: GraphQLString}, - middleName: {type: GraphQLString}, - lastName: {type: GraphQLString}, - bio: {type: GraphQLString}, - email: {type: GraphQLString}, - emailVerified: {type: GraphQLInt}, - isDeveloper: {type: GraphQLInt}, - isTrader: {type: GraphQLInt}, - isDataAnalyst: {type: GraphQLInt}, - avatarHandle: {type: GraphQLString}, - avatarChangeDate: {type: GraphQLString}, - sessionToken: {type: GraphQLString}, - role: { - type: RoleType, - resolve (parent, args) { - return _.find(roles, {id: parent.roleId}) - } - } - }) -}) - -const DescendentType = new GraphQLObjectType({ - name: 'Descendent', - fields: () => ({ - id: { type: GraphQLID}, - referrerId: {type: GraphQLString}, - alias: {type: GraphQLString}, - firstName: {type: GraphQLString}, - middleName: {type: GraphQLString}, - lastName: {type: GraphQLString}, - descendents: { - type: new GraphQLList(DescendentType), - resolve (parent, args) { - return User.find({referrerId: parent.id}) - } - } - }) -}) - -const RoleType = new GraphQLObjectType({ - name: 'Role', - fields: () => ({ - id: { type: GraphQLID}, - name: {type: GraphQLString}, - users: { - type: new GraphQLList(UserType), - resolve (parent, args) { - return User.find({roleId: parent.id}) - } - } - }) -}) - -// RootQueries - -const RootQuery = new GraphQLObjectType({ - name: 'RootQueryType', - fields: { - user: { - type: UserType, - args: {id: {type: GraphQLID}}, - resolve (parent, args) { - // Code to get data from data source. - return User.findById(args.id) - } - }, - userByAuthId: { - type: UserType, - args: {authId: {type: GraphQLString}}, - resolve (parent, args) { - // Code to get data from data source. - - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Entering function.') } - - /* In order to be able to wait for asyc calls to the database, we need to return a promise to GraphQL. */ - - const promiseToGraphQL = new Promise((resolve, reject) => { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Promise -> Entering function.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Promise -> args.authId = ' + args.authId) } - - findUserByAuthId(args.authId, onUserFound) - - function onUserFound (err, responseToGraphQL) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Promise -> onUserFound -> Entering function.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Promise -> onUserFound -> responseToGraphQL = ' + JSON.stringify(responseToGraphQL)) } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> RootQuery -> userByAuthId -> resolve -> Promise -> onUserFound -> err.message = ' + err.message) } - reject(responseToGraphQL) - } else { - resolve(responseToGraphQL) - } - } - }) - - return promiseToGraphQL - } - }, - role: { - type: RoleType, - args: {id: {type: GraphQLID}}, - resolve (parent, args) { - // Code to get data from data source. - return _.find(roles, {id: args.id}) - } - }, - users: { - type: new GraphQLList(UserType), - resolve (parent, args) { - return User.find({}) - } - }, - roles: { - type: new GraphQLList(RoleType), - resolve (parent, args) { - return roles - } - }, - usersSearch: { - type: new GraphQLList(UserType), - args: {alias: {type: GraphQLString}, firstName: {type: GraphQLString}, middleName: {type: GraphQLString}, lastName: {type: GraphQLString}}, - resolve (parent, args) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> usersSearch -> resolve -> Entering function.') } - - let mongoQuery = { $or: [] } - - if (args.alias !== null && args.alias !== '') { mongoQuery.$or.push({alias: args.alias}) } - if (args.firstName !== null && args.firstName !== '') { mongoQuery.$or.push({firstName: args.firstName}) } - if (args.middleName !== null && args.middleName !== '') { mongoQuery.$or.push({middleName: args.middleName}) } - if (args.lastName !== null && args.lastName !== '') { mongoQuery.$or.push({lastName: args.lastName}) } - - if (mongoQuery.$or.length === 0) { mongoQuery = {} } - - return User.find(mongoQuery) - } - }, - descendents: { - type: new GraphQLList(DescendentType), - args: {id: {type: GraphQLString}}, - resolve (parent, args) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> RootQuery -> descendents -> resolve -> Entering function.') } - - return User.find({referrerId: args.id}) - } - } - } -}) - -// Mutations - -const Mutation = new GraphQLObjectType({ - name: 'Mutation', - fields: { - authenticate: { - type: UserType, - args: { - idToken: {type: new GraphQLNonNull(GraphQLString)} - }, - resolve (parent, args) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> Mutation -> authenticate -> resolve -> Entering function.') } - - /* In order to be able to wait for asyc calls to the database, and authorization authority, we need to return a promise to GraphQL. */ - - const promiseToGraphQL = new Promise((resolve, reject) => { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> Mutation -> authenticate -> resolve -> Promise -> Entering function.') } - authenticate(args.idToken, onAuthenticated) - - function onAuthenticated (err, responseToGraphQL) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> Mutation -> authenticate -> resolve -> Promise -> onAuthenticated -> Entering function.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> Mutation -> authenticate -> resolve -> Promise -> onAuthenticated -> responseToGraphQL = ' + JSON.stringify(responseToGraphQL)) } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> Mutation -> authenticate -> resolve -> Promise -> onAuthenticated -> err.message = ' + err.message) } - reject(responseToGraphQL) - } else { - resolve(responseToGraphQL) - } - } - }) - - return promiseToGraphQL - } - }, - updateUser: { - type: UserType, - args: { - firstName: {type: GraphQLString}, - middleName: {type: GraphQLString}, - lastName: {type: GraphQLString}, - bio: {type: GraphQLString}, - isDeveloper: {type: GraphQLInt}, - isTrader: {type: GraphQLInt}, - isDataAnalyst: {type: GraphQLInt}, - roleId: {type: new GraphQLNonNull(GraphQLString)} - }, - resolve (parent, args, context) { - let key = { - _id: context.userId - } - - let updatedUser = { - firstName: args.firstName, - middleName: args.middleName, - lastName: args.lastName, - bio: args.bio, - isDeveloper: args.isDeveloper, - isTrader: args.isTrader, - isDataAnalyst: args.isDataAnalyst, - roleId: args.roleId - } - - return User.update(key, updatedUser) - } - }, - updateUserReferrer: { - type: UserType, - args: { - referrerId: {type: GraphQLString} - }, - resolve (parent, args, context) { - let key = { - _id: context.userId, - referrerId: null - } - - let updatedUser = { - referrerId: args.referrerId - } - - return User.update(key, updatedUser) - } - }, - updateSessionToken: { - type: UserType, - args: { - userId: {type: GraphQLString}, - sessionToken: {type: GraphQLString} - }, - resolve (parent, args) { - let key = { - _id: decodeURI(args.userId) - } - - let updatedUser = { - sessionToken: args.sessionToken - } - - return User.update(key, updatedUser) - } - } - } -}) - -function findUserByAuthId (authId, callBackFunction) { - try { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> Entering function.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> authId = ' + authId) } - - if (authId === null || authId === undefined) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> User requested not specified.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> args.authId = ' + authId) } - - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: 'Bad Request' }) - return - } - - User.findOne({authId: authId}, onUserReceived) - - function onUserReceived (err, user) { - if (err) { - if (ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> Database Error.') } - if (ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> err = ' + err) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - } else { - if (user === null) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> User not found at Database.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> args.authId = ' + authId) } - - let customResponse = { - result: global.CUSTOM_OK_RESPONSE.result, - message: 'User Not Found' - } - - callBackFunction(customResponse, { error: customResponse.message }) - return - } - - if (user.authId === authId && user.authId !== undefined) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> User found at Database.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> args.authId = ' + authId) } - - callBackFunction(global.DEFAULT_OK_RESPONSE, user) - return - } else { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> User found at Database is not the user requested.') } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> args.authId = ' + authId) } - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> findUserByAuthId -> onUserReceived -> user.authId = ' + user.authId) } - - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - return - } - } - } - } catch (err) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> findUserByAuthId -> err.message = ' + err.message) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - } -} - -function authenticate (encodedToken, callBackFunction) { - try { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> Entering function.') } - - let authId = '' - let alias = '' - let email = '' - let emailVerified = false - - tokenDecoder(encodedToken, onValidated) - - function onValidated (err, decodedToken) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> Entering function.') } - - if (err.result !== global.DEFAULT_OK_RESPONSE.result) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> onValidated -> err.message = ' + err.message) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - return - } - - /* - - Ok, the user was correctly authenticated. Next we need to know if this logged in user - has already been added to this module's database or not yet. - - */ - - authId = decodedToken.sub - alias = decodedToken.nickname - email = decodedToken.email - emailVerified = decodedToken.email_verified - - findUserByAuthId(authId, onUserFound) - - function onUserFound (err, user) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> Entering function.') } - - if (err.result === global.DEFAULT_FAIL_RESPONSE.result) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> err.message = ' + err.message) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - return - } - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> User already exists at database') } - - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> Existing User: ' + JSON.stringify(user)) } - - callBackFunction(global.DEFAULT_OK_RESPONSE, { authId: authId, alias: user.alias }) - return - } - - if ( - err.result === global.CUSTOM_OK_RESPONSE.result && - err.message === 'User Not Found' - ) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> User does not exist at database') } - - /* - - The authenticated user is NOT at our module database. We need to add him. - We will take from the authentication provider the basic information it knows about the logged in users - and save it as an initial set of data, which can later be modified. - - */ - - /* The user can sign up with many different possible social accounts. Currently this module only supports Github only. */ - - let authArray = authId.split('|') - let socialAccountProvider = authArray[0] - - if ( - socialAccountProvider !== 'github' && - socialAccountProvider !== 'auth0' - ) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> Social Account Provider not Supoorted. ') } - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> socialAccountProvider = ' + socialAccountProvider) } - - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - return - } - - let localDate = new Date() - let creationDate = localDate.valueOf() - - let newUser = new User({ - alias: alias, - authId: authId, - creationDate: creationDate, - email: email, - emailVerified: emailVerified, - roleId: '1' - }) - - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> ' + alias + ' being added to the database') } - - newUser.save(onSaved) - - function onSaved (err, savedUser) { - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> onSaved -> Entering function.') } - - if (err) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> onSaved -> err = ' + err) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - return - } - - if (process.env.INFO_LOG === true) { logger.debug('[INFO] ' + MODULE_NAME + ' -> authenticate -> onValidated -> onUserFound -> onSaved -> Saved User: ' + JSON.stringify(savedUser)) } - - callBackFunction(global.DEFAULT_OK_RESPONSE, { authId, alias }) - } - } - } - } - } catch (err) { - if (process.env.ERROR_LOG === true) { logger.error('[ERROR] ' + MODULE_NAME + ' -> authenticate -> err.message = ' + err.message) } - callBackFunction(global.DEFAULT_FAIL_RESPONSE, { error: err }) - } -} - -module.exports = new GraphQLSchema({ - query: RootQuery, - mutation: Mutation -}) diff --git a/Deprecated-Code/UsersModule/server/src/utils/local-storage.js b/Deprecated-Code/UsersModule/server/src/utils/local-storage.js deleted file mode 100644 index 963ba0f36..000000000 --- a/Deprecated-Code/UsersModule/server/src/utils/local-storage.js +++ /dev/null @@ -1,9 +0,0 @@ -const getItem = async name => window.localStorage.getItem(name) -const setItem = async (name, value) => window.localStorage.setItem(name, value) -const removeItem = async name => window.localStorage.removeItem(name) - -export { - getItem, - setItem, - removeItem -} diff --git a/Deprecated-Code/WebServer/.gitattributes b/Deprecated-Code/WebServer/.gitattributes deleted file mode 100644 index eba1110b5..000000000 --- a/Deprecated-Code/WebServer/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto \ No newline at end of file diff --git a/Deprecated-Code/WebServer/.gitignore b/Deprecated-Code/WebServer/.gitignore deleted file mode 100644 index e5336e0d8..000000000 --- a/Deprecated-Code/WebServer/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ - -.vs/* -obj/* -bin/* -/.vscode - -.env -.env.dev - -/node_modules -/dependency - -/.nyc_output -/coverage -debug.log -package-lock.json - diff --git a/Deprecated-Code/WebServer/.gitmodules b/Deprecated-Code/WebServer/.gitmodules deleted file mode 100644 index 7e1eb1e2d..000000000 --- a/Deprecated-Code/WebServer/.gitmodules +++ /dev/null @@ -1,36 +0,0 @@ -[submodule "Plotters/AAMasters/plotters/Plotters-Trading-Simulation"] - path = Plotters/AAMasters/plotters/Plotters-Trading-Simulation - url = https://github.com/AAMasters/Plotters-Trading-Simulation.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Candles-Volumes"] - path = Plotters/AAMasters/plotters/Plotters-Candles-Volumes - url = https://github.com/AAMasters/Plotters-Candles-Volumes.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Bollinger-Channels"] - path = Plotters/AAMasters/plotters/Plotters-Bollinger-Channels - url = https://github.com/AAMasters/Plotters-Bollinger-Channels.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Bollinger-Bands"] - path = Plotters/AAMasters/plotters/Plotters-Bollinger-Bands - url = https://github.com/AAMasters/Plotters-Bollinger-Bands.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Stairs-Patterns"] - path = Plotters/AAMasters/plotters/Plotters-Stairs-Patterns - url = https://github.com/AAMasters/Plotters-Stairs-Patterns.git - branch = develop -[submodule "Plotters/AAMasters/plotters/Plotters-Trading"] - path = Plotters/AAMasters/plotters/Plotters-Trading - url = https://github.com/AAMasters/Plotters-Trading.git - branch = develop -[submodule "Plotters/AAVikings/plotters/Plotters-Linear-Regression-Curve"] - path = Plotters/AAVikings/plotters/Plotters-Linear-Regression-Curve - url = https://github.com/AAVikings/Plotters-Linear-Regression-Curve.git - branch = master -[submodule "Files-Component"] - path = Files-Component - url = https://github.com/Superalgos/Files-Component.git - branch = develop -[submodule "CanvasApp"] - path = CanvasApp - url = https://github.com/Superalgos/CanvasApp.git - branch = develop \ No newline at end of file diff --git a/Deprecated-Code/WebServer/CODE_OF_CONDUCT.md b/Deprecated-Code/WebServer/CODE_OF_CONDUCT.md deleted file mode 100644 index 4b37b0e16..000000000 --- a/Deprecated-Code/WebServer/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team using the online form in the contacts page of the superalgos.org website. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Deprecated-Code/WebServer/CONTRIBUTING.md b/Deprecated-Code/WebServer/CONTRIBUTING.md deleted file mode 100644 index 1d1736260..000000000 --- a/Deprecated-Code/WebServer/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Contributing - -We are thrilled you are interested in contributing to this repository. Your help may be essential to the project's success and we want you in! - -Superalgos is a collective project, currently at a very early stage. We not only welcome contributions but may even choose to incentivize relevant contributions via the project's native crypto token. - -Please read the [Join the Dev Team]( https://superalgos.org/developers-join-dev-team.shtml) page in our website to learn more about how you may become a relevant member of the Community and even make a living out of contributing code to the project. - -Contributions are deemed _voluntary work_, irrespective of the incentives that may be in place, and are subject to the conditions described in the LICENSE \ No newline at end of file diff --git a/Deprecated-Code/WebServer/LICENSE b/Deprecated-Code/WebServer/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/Deprecated-Code/WebServer/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Deprecated-Code/WebServer/Project.njsproj b/Deprecated-Code/WebServer/Project.njsproj deleted file mode 100644 index cde4bcfb1..000000000 --- a/Deprecated-Code/WebServer/Project.njsproj +++ /dev/null @@ -1,91 +0,0 @@ - - - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - Project - browser - Debug|Any CPU - - - - Debug - 2.0 - 3ef11619-de26-4b8b-819d-a413df220b76 - - - server.js - - - . - . - v4.0 - {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD} - - - False - - - true - - - true - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - False - True - 0 - / - http://localhost:48022/ - False - True - http://localhost:1337 - False - - - - - - - CurrentPage - True - False - False - False - - - - - - - - - False - False - - - - - \ No newline at end of file diff --git a/Deprecated-Code/WebServer/README.md b/Deprecated-Code/WebServer/README.md deleted file mode 100644 index 027ae6239..000000000 --- a/Deprecated-Code/WebServer/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Superalgos Web Server - -The main function of this Web Server is to serve the js files needed at the browser to run the Canvas App. - -## Current Status - -Web Server is under development, evolving from a prototype to a working MVP to an alpha stage module. - -## Installation - -This repo is included at the Superalgos Desktop App and you can play with it once you install the full Desktop App via downloading the latest release, which currently runs on code. - -In case you want to individually play specifically with this module, clone it and then: - -``` -npm install -``` - -You will need to clone these repos which contains the actual scripts of the Canvas App and one of its components. - -1. https://github.com/Superalgos/CanvasApp -2. https://github.com/Superalgos/Files-Component - -At the configuration file, you must verify that this is pointing to the place where you clonned the 2 previous repositories: - -``` - "pathToFilesComponent": "../Files-Component/src" -``` - -It is highly recommended that you download and unzip the Desktop App release which includes everything you need to set up your local environment in a few clicks. - -## Execution - -There is a Visual Studio solution already setup for quick debugging. Otherwise, you could do: - -``` -node.exe server.js -``` - -## Usage - -Running the Web Server will create a Noode.js server at port 1337. Navigate with your browser there and the Canvas App should show up. - -For more information, continue reading here: https://github.com/Superalgos/DesktopApp/blob/master/README.md - diff --git a/Deprecated-Code/WebServer/WebServer.sln b/Deprecated-Code/WebServer/WebServer.sln deleted file mode 100644 index b1c7e011c..000000000 --- a/Deprecated-Code/WebServer/WebServer.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "Project", "Project.njsproj", "{3EF11619-DE26-4B8B-819D-A413DF220B76}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3EF11619-DE26-4B8B-819D-A413DF220B76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EF11619-DE26-4B8B-819D-A413DF220B76}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EF11619-DE26-4B8B-819D-A413DF220B76}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EF11619-DE26-4B8B-819D-A413DF220B76}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {92DF2F3B-B37A-407F-B313-3897AEFCCAFC} - EndGlobalSection -EndGlobal diff --git a/Deprecated-Code/WebServer/WebServer/AppLoader.js b/Deprecated-Code/WebServer/WebServer/AppLoader.js deleted file mode 100644 index e11ac4c3c..000000000 --- a/Deprecated-Code/WebServer/WebServer/AppLoader.js +++ /dev/null @@ -1,249 +0,0 @@ -let dashboard - -function newAppLoader() { - const MODULE_NAME = 'App Loader' - const INFO_LOG = false - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - loadModules: loadModules - } - - return thisObject - - async function loadModules() { - try { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Entering function.') } - - let plotters - let modulesArray = [] - - plotters = defaultPlotters() - - modulesArray = modulesArray.concat([ - 'ChartingSpace/Viewport.js', - - 'Globals.js', - - 'AppSchema.js', - 'Workspace.js', - - 'ChartingSpace/EdgeEditor.js', - 'ChartingSpace/ChartUtilities.js', - 'ChartingSpace/PlottersManager.js', - 'ChartingSpace/TimelineChart.js', - 'ChartingSpace/TimeMachine.js', - 'ChartingSpace/CoordinateSystem.js', - - 'DesignSpace/Workspace/Workspace.js', - 'DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js', - 'DesignSpace/Workspace/FunctionLibraries/ChainAttachDetach.js', - 'DesignSpace/Workspace/FunctionLibraries/ReferenceAttachDetach.js', - 'DesignSpace/Workspace/FunctionLibraries/NodeDeleter.js', - 'DesignSpace/Workspace/FunctionLibraries/ProtocolNode.js', - 'DesignSpace/Workspace/FunctionLibraries/NodeCloning.js', - 'DesignSpace/Workspace/FunctionLibraries/NodeChildren.js', - 'DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js', - 'DesignSpace/Workspace/FunctionLibraries/SessionFunctions.js', - 'DesignSpace/Workspace/FunctionLibraries/ShortcutKeys.js', - 'DesignSpace/Workspace/FunctionLibraries/OnFocus.js', - 'DesignSpace/Workspace/FunctionLibraries/SuperScripts.js', - 'DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js', - - 'Utilities/RoundedCornersBackground.js', - - 'Panels/LayersPanel.js', - 'Panels/UpDownButton.js', - 'Panels/LeftRightButton.js', - 'Panels/Layer.js', - 'Panels/PlotterPanel.js', - 'Panels/PanelsVisibleButton.js', - - 'ControlsToolBox/SidePanel.js', - 'ControlsToolBox/SidePanelTab.js', - - 'Spaces/CockpitSpace.js', - 'Spaces/TopSpace.js', - 'Spaces/PanelsSpace.js', - 'Spaces/ChartingSpace.js', - 'Spaces/FloatingSpace.js', - 'Spaces/DesignSpace.js', - - 'Files/SingleFile.js', - 'Files/FileCloud.js', - 'Files/MarketFiles.js', - 'Files/DailyFiles.js', - 'Files/FileCursor.js', - 'Files/FileSequence.js', - 'Files/FileStorage.js', - - 'FloatingSpace/FloatingObject.js', - 'FloatingSpace/FloatingLayer.js', - 'FloatingSpace/UiObjectConstructor.js', - 'FloatingSpace/UiObject.js', - 'FloatingSpace/UiObjectTitle.js', - 'FloatingSpace/CircularMenu.js', - 'FloatingSpace/CircularMenuItem.js', - 'FloatingSpace/CircularProgressBar.js', - 'FloatingSpace/BusyProgressBar.js', - 'FloatingSpace/CodeEditor.js', - 'FloatingSpace/ConfigEditor.js', - 'FloatingSpace/ConditionEditor.js', - 'FloatingSpace/FormulaEditor.js', - - 'Scales/RateScale.js', - 'Scales/TimeScale.js', - 'Scales/TimeFrameScale.js', - 'Scales/Commons.js', - 'Scales/AutoScaleButton.js', - - 'CockpitSpace/AssetBalances.js', - 'CockpitSpace/Speedometer.js', - 'CockpitSpace/FullScreen.js', - - 'EventsServerClient.js', - - 'VideoRecorder.js', - 'Plotter.js', - 'LegacyPlotter.js', - 'PlotterPanel.js', - - 'ProductStorage.js', - - 'SplashScreen.js', - 'Canvas.js', - 'EventHandler.js', - 'Frame.js', - - 'Animation.js', - - 'Container.js', - - 'Utilities.js', - 'PostLoader.js' - ]) - - modulesArray = modulesArray.concat(plotters) - - let downloadedCounter = 0 - let versionParam = window.canvasApp.version - if (versionParam === undefined) { versionParam = '' } else { - versionParam = '?' + versionParam - } - - for (let i = 0; i < modulesArray.length; i++) { - let path = window.canvasApp.urlPrefix + modulesArray[i] + versionParam - - REQUIREJS([path], onRequired) - - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> Module Requested.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> path = ' + path) } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> total requested = ' + (i + 1)) } - - function onRequired(pModule) { - try { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Entering function.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Module Downloaded.') } - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> path = ' + path) } - - downloadedCounter++ - - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> downloadedCounter = ' + downloadedCounter) } - - if (downloadedCounter === modulesArray.length) { - if (INFO_LOG === true) { logger.write('[INFO] loadModules -> onRequired -> Starting Advanced Algos Platform.') } - setTimeout(() => { - dashboard = newDashboard() - dashboard.start() - }, 500) - - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> onRequired -> err = ' + err.stack) } - } - } - } - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] loadModules -> err = ' + err.stack) } - } - } - - function defaultPlotters() { - return [ - 'Plotters/Masters/Plotters-Candles-Volumes/Candles.js', - 'Plotters/Masters/Plotters-Candles-Volumes/CandlePanel.js', - 'Plotters/Masters/Plotters-Candles-Volumes/Volumes.js', - 'Plotters/Masters/Plotters-Candles-Volumes/VolumePanel.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBands.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBandsPanel.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/PercentageBandwidth.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulation.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationAssetBalancesPanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationCurrentPositionPanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationPartialResultsPanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Conditions.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Strategies.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Trades.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/SimulationExecution.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/SimulationExecutionPanel.js' - ] - } - - function getPlotters(ecosystem) { - if (INFO_LOG === true) { console.log('[INFO] server -> onBrowserRequest -> onFileRead -> addPlotters -> Entering function.') } - - let plotters = [] - let dataMines = ecosystem.dataMines - let hosts = ecosystem.hosts - - plotters = plotters.concat(addScript(dataMines)) - plotters = plotters.concat(addScript(hosts)) - - return plotters - } - - function addScript(pDataMinesOrHosts) { - if (INFO_LOG === true) { console.log('[INFO] server -> onBrowserRequest -> onFileRead -> addPlotters -> addScript -> Entering function.') } - const htmlLinePlotter = 'Plotters/@dataMine@/@repo@/@module@.js' - const htmlLinePlotterPanel = 'PlotterPanels/@dataMine@/@repo@/@module@.js' - let plotters = [] - - for (let i = 0; i < pDataMinesOrHosts.length; i++) { - let dataMine = pDataMinesOrHosts[i] - for (let j = 0; j < dataMine.plotters.length; j++) { - let plotter = dataMine.plotters[j] - if (plotter.modules !== undefined) { - for (let k = 0; k < plotter.modules.length; k++) { - let module = plotter.modules[k] - let htmlLineCopy = htmlLinePlotter - - let stringToInsert - stringToInsert = htmlLineCopy.replace('@dataMine@', dataMine.codeName) - stringToInsert = stringToInsert.replace('@repo@', plotter.repo) - stringToInsert = stringToInsert.replace('@module@', module.moduleName) - - plotters.push(stringToInsert) - - if (module.panels !== undefined) { - for (let l = 0; l < module.panels.length; l++) { - let panel = module.panels[l] - let htmlLineCopy = htmlLinePlotterPanel - - let stringToInsert - stringToInsert = htmlLineCopy.replace('@dataMine@', dataMine.codeName) - stringToInsert = stringToInsert.replace('@repo@', plotter.repo) - stringToInsert = stringToInsert.replace('@module@', panel.moduleName) - - plotters.push(stringToInsert) - } - } - } - } - } - } - return plotters - } -} - diff --git a/Deprecated-Code/WebServer/WebServer/AppPreLoader.js b/Deprecated-Code/WebServer/WebServer/AppPreLoader.js deleted file mode 100644 index 2e150a408..000000000 --- a/Deprecated-Code/WebServer/WebServer/AppPreLoader.js +++ /dev/null @@ -1,174 +0,0 @@ - -/* Callbacks default responses. */ - -let GLOBAL = {}; - -GLOBAL.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" -}; - -GLOBAL.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" -}; - -GLOBAL.DEFAULT_RETRY_RESPONSE = { - result: "Retry", - message: "Retry Later" -}; - -GLOBAL.CUSTOM_OK_RESPONSE = { - result: "Ok, but check Message", - message: "Custom Message" -}; - -GLOBAL.CUSTOM_FAIL_RESPONSE = { - result: "Fail Because", - message: "Custom Message" -}; - -let browserCanvas; // This is the canvas object of the browser. - -function spacePad(str, max) { - str = str.toString(); - return str.length < max ? spacePad(" " + str, max) : str; -} - -function loadSuperalgos() { - - const MODULE_NAME = "App Pre-Loader"; - const INFO_LOG = false; - const ERROR_LOG = true; - - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] loadSuperalgos -> Entering function."); } - - /* The first thing to do here is to add the canvas where all the action is going to happen. */ - - - let textArea = document.createElement('textarea'); - textArea.id = "textArea"; - textArea.spellcheck = false; - textArea.style = 'resize: none;' + - ' border: none;' + - ' outline: none;' + - 'box-shadow: none;' + - 'overflow:hidden;' + - 'font-family: ' + 'Saira' + ';' + - 'font-size: 12px;' + - 'background-color: rgb(255, 255, 255);' + - 'color:rgb(255, 255, 255);' + - 'width: ' + 800 + 'px;' + - 'height: ' + 600 + 'px' - - let textAreaDiv = document.getElementById('textAreaDiv'); - textAreaDiv.appendChild(textArea); - textAreaDiv.style = 'position:fixed; top:' + -1500 + 'px; left:' + 500 + 'px; z-index:10; ' - - let input = document.createElement('input'); - input.id = "input"; - input.spellcheck = false; - input.style = "border: none; outline: none; box-shadow: none; overflow:hidden; width: 0px; height: 0px;"; - - let inputDiv = document.getElementById('inputDiv'); - inputDiv.appendChild(input); - - - let canvas = document.createElement('canvas'); - - canvas.id = "canvas"; - canvas.width = 1400; - canvas.height = 600; - canvas.style.border = "0"; - canvas.style = "position:absolute; top:0px; left:0px; z-index:1"; - - let canvasApp = document.getElementById('canvasApp'); - canvasApp.appendChild(canvas); - - browserCanvas = document.getElementById('canvas'); - - browserCanvas.width = window.innerWidth; - browserCanvas.height = window.innerHeight - window.canvasApp.topMargin; - browserCanvas.style.border = "none"; - - browserCanvas.style.top = window.canvasApp.topMargin + 'px'; - - - - loadDebugModule(); - - function loadDebugModule() { - - try { - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] loadDebugModule -> Entering function."); } - - let path = window.canvasApp.urlPrefix + "WebDebugLog.js"; - - REQUIREJS([path], onRequired); - - function onRequired(pModule) { - - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] " + path + " downloaded."); } - - loadModules(); - - } - } - catch (err) { - console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] loadDebugModule --> " + path + " --> err = " + err.stack); - } - } - - /* And Finally, we start loading all the scripts we will inmediatelly need. */ - - function loadModules() { - - try { - - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] loadModules -> Entering function."); } - - let path = window.canvasApp.urlPrefix + "WebServer/AppLoader.js"; - - REQUIREJS([path], onRequired); - - function onRequired(pModule) { - - if (INFO_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[INFO] " + path + " downloaded."); } - - let APP_LOADER_MODULE = newAppLoader(); - APP_LOADER_MODULE.loadModules(); - - } - } - catch (err) { - console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] loadModules --> " + path + " --> err = " + err.stack); - } - } -} - -function callServer(pContentToSend, pPath, callBackFunction) { - let xhttp = new XMLHttpRequest(); - xhttp.onreadystatechange = function () { - if (this.readyState === 4 && this.status === 200) { - callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, xhttp.responseText); - return; - } else if (this.readyState === 4 && this.status === 404) { - callBackFunction({ result: "Fail", message: xhttp.responseText.trim(), code: xhttp.responseText.trim() }); - return; - } - }; - - if (pContentToSend === undefined) { - xhttp.open("GET", pPath, true); - xhttp.send(); - } else { - try { - let blob = new Blob([pContentToSend], { type: 'text/plain' }); - xhttp.open("POST", pPath, true); - xhttp.send(blob); - } catch (err) { - if (ERROR_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] callServer -> err.message = " & err.message); } - callBackFunction({ result: "Fail", message: err.message }) - } - } -} diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/150-next-phase-event.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/150-next-phase-event.png deleted file mode 100644 index fe469f85f..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/150-next-phase-event.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis-1.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis-1.png deleted file mode 100644 index 8b3d61b9e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis-1.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis.png deleted file mode 100644 index 80ede07af..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/analysis.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-000.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-000.png deleted file mode 100644 index 23b3aee31..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-000.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-045.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-045.png deleted file mode 100644 index cd495d5bd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-045.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-090.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-090.png deleted file mode 100644 index 6c94bc491..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-090.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-180.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-180.png deleted file mode 100644 index b04398af2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-180.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-360.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-360.png deleted file mode 100644 index d66118a75..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/angle-to-parent-360.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/approve.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/approve.png deleted file mode 100644 index 2145a1626..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/approve.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-concave.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-concave.png deleted file mode 100644 index 4c6cc7854..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-concave.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-convex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-convex.png deleted file mode 100644 index 217eae0bd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-convex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-bottom.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-bottom.png deleted file mode 100644 index 8400c2249..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-bottom.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-top.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-top.png deleted file mode 100644 index 37111540e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-horizontal-top.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-left.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-left.png deleted file mode 100644 index 9e8316511..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-left.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-right.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-right.png deleted file mode 100644 index ff70010bd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/arrangement-vertical-right.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/asset.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/asset.png deleted file mode 100644 index ce6d5b5d8..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/asset.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attach.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attach.png deleted file mode 100644 index 678806e32..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attach.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attractive.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attractive.png deleted file mode 100644 index 62e6fe2e7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/attractive.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/band.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/band.png deleted file mode 100644 index de6aa8c55..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/band.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance-coin.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance-coin.png deleted file mode 100644 index 60e7bd4c2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance-coin.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance.png deleted file mode 100644 index 8f4f71952..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/binance.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin-cash.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin-cash.png deleted file mode 100644 index a1fdc4f69..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin-cash.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin.png deleted file mode 100644 index a4ee2a209..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitcoin.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitfinex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitfinex.png deleted file mode 100644 index d5d3db0e2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitfinex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitmex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitmex.png deleted file mode 100644 index 4ae5662db..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bitmex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bittrex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bittrex.png deleted file mode 100644 index b11a8e692..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bittrex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-indicator.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-indicator.png deleted file mode 100644 index 96a7d7fd1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-indicator.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-sensor.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-sensor.png deleted file mode 100644 index 650a239d6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-sensor.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-trading.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-trading.png deleted file mode 100644 index 8ba2a5668..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/bot-trading.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/brainstorming.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/brainstorming.png deleted file mode 100644 index 993bf0ec2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/brainstorming.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/broken-link.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/broken-link.png deleted file mode 100644 index 1d13ad8ac..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/broken-link.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/calculations-procedure.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/calculations-procedure.png deleted file mode 100644 index 0883d961e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/calculations-procedure.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/candles.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/candles.png deleted file mode 100644 index 8db4abd30..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/candles.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/cardano.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/cardano.png deleted file mode 100644 index 68b542366..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/cardano.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point-formula.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point-formula.png deleted file mode 100644 index c1ebd1072..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point-formula.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point.png deleted file mode 100644 index 9069eee60..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-point.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-points.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-points.png deleted file mode 100644 index 7ad931273..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chart-points.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/charting-space.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/charting-space.png deleted file mode 100644 index b3e320916..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/charting-space.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chat.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chat.png deleted file mode 100644 index 0b424a267..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chat.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chronometer.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chronometer.png deleted file mode 100644 index 9f4821359..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/chronometer.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/clone.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/clone.png deleted file mode 100644 index 9b3b41696..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/clone.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/compass.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/compass.png deleted file mode 100644 index e9b80e7b7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/compass.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/competition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/competition.png deleted file mode 100644 index 96082a10d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/competition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/content.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/content.png deleted file mode 100644 index b46362501..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/content.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchange.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchange.png deleted file mode 100644 index 8c3dc3f12..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchange.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchanges.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchanges.png deleted file mode 100644 index e94ca97b7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/crypto-exchanges.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dash.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dash.png deleted file mode 100644 index 755214b1e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dash.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dashboard.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dashboard.png deleted file mode 100644 index 9e579ab06..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dashboard.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-building-procedure.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-building-procedure.png deleted file mode 100644 index 63de055e5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-building-procedure.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-dependency.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-dependency.png deleted file mode 100644 index 822adf1fd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-dependency.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-entry.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-entry.png deleted file mode 100644 index 47f1740f8..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-entry.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-formula.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-formula.png deleted file mode 100644 index 58eca845b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-formula.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mine.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mine.png deleted file mode 100644 index 5987d984c..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mine.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mining.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mining.png deleted file mode 100644 index 069479644..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-mining.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-product.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-product.png deleted file mode 100644 index a56737af4..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-product.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-storage.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-storage.png deleted file mode 100644 index 0371317db..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/data-storage.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset-definition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset-definition.png deleted file mode 100644 index 0f4735f92..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset-definition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset.png deleted file mode 100644 index 8059cb8b5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/dataset.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delete.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delete.png deleted file mode 100644 index a26ebea98..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delete.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delink.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delink.png deleted file mode 100644 index 47f06ff61..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/delink.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/design-tool.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/design-tool.png deleted file mode 100644 index 7eb24f192..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/design-tool.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/detach.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/detach.png deleted file mode 100644 index 31aa781a3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/detach.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-000.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-000.png deleted file mode 100644 index 65e87718a..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-000.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-025.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-025.png deleted file mode 100644 index bf08c48ac..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-025.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-050.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-050.png deleted file mode 100644 index b5553349c..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-050.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-100.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-100.png deleted file mode 100644 index 44ad9bb60..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-100.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-150.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-150.png deleted file mode 100644 index c83632189..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-150.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-200.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-200.png deleted file mode 100644 index 537db0065..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/distance-to-parent-200.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/eos.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/eos.png deleted file mode 100644 index d78e25ddd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/eos.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum-classic.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum-classic.png deleted file mode 100644 index dc7089844..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum-classic.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum.png deleted file mode 100644 index 33b2853a1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/ethereum.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-asset.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-asset.png deleted file mode 100644 index 083125690..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-asset.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-key.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-key.png deleted file mode 100644 index 2df386906..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-account-key.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-accounts.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-accounts.png deleted file mode 100644 index 3ac313f88..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-accounts.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-assets.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-assets.png deleted file mode 100644 index e5131939d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-assets.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-markets.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-markets.png deleted file mode 100644 index 98e70efc1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/exchange-markets.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-finished-event.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-finished-event.png deleted file mode 100644 index a50061daf..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-finished-event.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-started-event.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-started-event.png deleted file mode 100644 index 4389a6f16..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/execution-started-event.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/grid.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/grid.png deleted file mode 100644 index b68f70a44..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/grid.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hand-drag.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hand-drag.png deleted file mode 100644 index 44f0683e2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hand-drag.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/headphones.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/headphones.png deleted file mode 100644 index d7c099510..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/headphones.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/help.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/help.png deleted file mode 100644 index 1fe2a4b34..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/help.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/histogram.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/histogram.png deleted file mode 100644 index 6c5711764..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/histogram.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hitbtc.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hitbtc.png deleted file mode 100644 index 0a2f39624..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/hitbtc.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/html.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/html.png deleted file mode 100644 index fa46b2b7b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/html.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/image.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/image.png deleted file mode 100644 index 60b436b12..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/image.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/initial-definition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/initial-definition.png deleted file mode 100644 index d6e3db3d5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/initial-definition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-a.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-a.png deleted file mode 100644 index 8809841e7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-a.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-alt.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-alt.png deleted file mode 100644 index b5ad38990..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-alt.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-ctrl.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-ctrl.png deleted file mode 100644 index 95a97ba22..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-ctrl.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-down.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-down.png deleted file mode 100644 index cea62f2c6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-down.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-left.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-left.png deleted file mode 100644 index d359dc5a9..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-left.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-m.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-m.png deleted file mode 100644 index 9415cb746..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-m.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-r.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-r.png deleted file mode 100644 index 3079372a7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-r.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-right.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-right.png deleted file mode 100644 index 9bb0c39c2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-right.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-shift.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-shift.png deleted file mode 100644 index 2d0f76800..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-shift.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-up.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-up.png deleted file mode 100644 index 0442350e0..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/key-up.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kraken.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kraken.png deleted file mode 100644 index cf7e2d59e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kraken.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kucoin.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kucoin.png deleted file mode 100644 index c24a5e5c8..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/kucoin.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layer-manager.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layer-manager.png deleted file mode 100644 index 831267126..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layer-manager.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layout.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layout.png deleted file mode 100644 index eb93ce845..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/layout.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/liquid.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/liquid.png deleted file mode 100644 index 4dac18e6b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/liquid.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/litecoin.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/litecoin.png deleted file mode 100644 index 27080fd75..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/litecoin.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/loading.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/loading.png deleted file mode 100644 index 845c02cbd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/loading.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/login.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/login.png deleted file mode 100644 index 16a99c7b1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/login.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/market.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/market.png deleted file mode 100644 index ba224734d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/market.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/master-script.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/master-script.png deleted file mode 100644 index 9afac1eb8..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/master-script.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-backup.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-backup.png deleted file mode 100644 index 142a2fa80..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-backup.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-pinned.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-pinned.png deleted file mode 100644 index ba637d28d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-pinned.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-unpinned.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-unpinned.png deleted file mode 100644 index c574c5b19..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-fix-unpinned.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-freeze.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-freeze.png deleted file mode 100644 index fd89c6208..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-freeze.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-unfreeze.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-unfreeze.png deleted file mode 100644 index df97739ca..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-mobility-unfreeze.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-share.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-share.png deleted file mode 100644 index c4998af5e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-share.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-fixed-angles.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-fixed-angles.png deleted file mode 100644 index 9fe32b7a2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-fixed-angles.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-free-angles.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-free-angles.png deleted file mode 100644 index 2fdd02cca..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tensor-free-angles.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-minus.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-minus.png deleted file mode 100644 index 2a8158670..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-minus.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-plus.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-plus.png deleted file mode 100644 index 637282507..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/menu-tree-plus.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/monero.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/monero.png deleted file mode 100644 index eb938c3f7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/monero.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-left-click.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-left-click.png deleted file mode 100644 index be3e72840..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-left-click.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-pointer.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-pointer.png deleted file mode 100644 index 08b2ead5e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-pointer.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-right-click.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-right-click.png deleted file mode 100644 index 0e1a287b3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-right-click.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-click.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-click.png deleted file mode 100644 index 6dab9a4ff..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-click.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-down.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-down.png deleted file mode 100644 index 58386b47d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-down.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-up.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-up.png deleted file mode 100644 index a11479633..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel-up.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel.png deleted file mode 100644 index c26a3517a..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/mouse-wheel.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/moving-average.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/moving-average.png deleted file mode 100644 index 5d62c67e3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/moving-average.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/neo.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/neo.png deleted file mode 100644 index ab608f9f9..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/neo.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network-node.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network-node.png deleted file mode 100644 index 30782f8e3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network-node.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network.png deleted file mode 100644 index 0880e7e8d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/network.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/next-phase-event.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/next-phase-event.png deleted file mode 100644 index efc14dbd0..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/next-phase-event.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/oscillator.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/oscillator.png deleted file mode 100644 index 7c4f9445a..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/oscillator.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/output-dataset.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/output-dataset.png deleted file mode 100644 index a8a34710a..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/output-dataset.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pantone.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pantone.png deleted file mode 100644 index 0ea9cae40..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pantone.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/paper-plane.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/paper-plane.png deleted file mode 100644 index b61292bbc..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/paper-plane.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/photo-camera.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/photo-camera.png deleted file mode 100644 index 77336bdff..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/photo-camera.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/piggy-bank.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/piggy-bank.png deleted file mode 100644 index 5fe9f5062..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/piggy-bank.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pipette.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pipette.png deleted file mode 100644 index 5d854018c..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pipette.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pixel.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pixel.png deleted file mode 100644 index 0dd36069e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pixel.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/placeholder.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/placeholder.png deleted file mode 100644 index b9d3765cf..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/placeholder.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/planning.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/planning.png deleted file mode 100644 index d6e3db3d5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/planning.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-module.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-module.png deleted file mode 100644 index 476f02301..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-module.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-panel.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-panel.png deleted file mode 100644 index 001875359..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter-panel.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter.png deleted file mode 100644 index 5b1a23445..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/plotter.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/poloniex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/poloniex.png deleted file mode 100644 index 2e29586a3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/poloniex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-initialization.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-initialization.png deleted file mode 100644 index 9adc971cf..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-initialization.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-loop.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-loop.png deleted file mode 100644 index bd5b5990a..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/procedure-loop.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-definition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-definition.png deleted file mode 100644 index bd89e9373..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-definition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-dependencies.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-dependencies.png deleted file mode 100644 index dc000d321..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-dependencies.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-output.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-output.png deleted file mode 100644 index f415f81a7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process-output.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process.png deleted file mode 100644 index bf6e71161..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/process.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/product-definition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/product-definition.png deleted file mode 100644 index 80ef1048d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/product-definition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/production-environment.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/production-environment.png deleted file mode 100644 index 75c356de6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/production-environment.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/promotion.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/promotion.png deleted file mode 100644 index 2d38a607d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/promotion.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pyramid.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pyramid.png deleted file mode 100644 index 4b940968b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/pyramid.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/qtum.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/qtum.png deleted file mode 100644 index c8df5a140..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/qtum.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/quality.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/quality.png deleted file mode 100644 index 10ee8b6bd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/quality.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/rate-scale.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/rate-scale.png deleted file mode 100644 index 7471b89ff..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/rate-scale.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-definition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-definition.png deleted file mode 100644 index 364d300c0..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-definition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-property.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-property.png deleted file mode 100644 index 3bc17e408..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/record-property.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/responsive.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/responsive.png deleted file mode 100644 index 3de364530..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/responsive.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/schedule.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/schedule.png deleted file mode 100644 index cf928a0ea..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/schedule.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/scripts-library.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/scripts-library.png deleted file mode 100644 index 8133ebb5b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/scripts-library.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/search.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/search.png deleted file mode 100644 index 595845f03..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/search.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/security.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/security.png deleted file mode 100644 index cc32f2462..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/security.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-backtesting.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-backtesting.png deleted file mode 100644 index 25170c9e9..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-backtesting.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-based-data.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-based-data.png deleted file mode 100644 index cd3e2bd5b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-based-data.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-forward-testing.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-forward-testing.png deleted file mode 100644 index d32066568..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-forward-testing.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-independent-data.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-independent-data.png deleted file mode 100644 index 1b69e88d5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-independent-data.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-live-trading.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-live-trading.png deleted file mode 100644 index 02d91af01..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-live-trading.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-paper-trading.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-paper-trading.png deleted file mode 100644 index 5e8413e7e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-paper-trading.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-reference.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-reference.png deleted file mode 100644 index d3c017532..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/session-reference.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/settings.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/settings.png deleted file mode 100644 index 878a9aa46..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/settings.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-body.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-body.png deleted file mode 100644 index 33a546c98..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-body.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-border.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-border.png deleted file mode 100644 index b8b56d398..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-border.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-vertex.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-vertex.png deleted file mode 100644 index 2eaa6c232..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon-vertex.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon.png deleted file mode 100644 index 5b7ac0185..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes-polygon.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes.png deleted file mode 100644 index 67644126d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/shapes.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/single-market-data.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/single-market-data.png deleted file mode 100644 index d88dbefb3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/single-market-data.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/sitemap.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/sitemap.png deleted file mode 100644 index 0c864590f..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/sitemap.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/social-bot.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/social-bot.png deleted file mode 100644 index 1df5bcc28..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/social-bot.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-close.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-close.png deleted file mode 100644 index beb6dc1bd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-close.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-position-size.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-position-size.png deleted file mode 100644 index 7eab6812e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-position-size.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-postion-rate.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-postion-rate.png deleted file mode 100644 index ea634cd71..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-postion-rate.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-take-profit.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-take-profit.png deleted file mode 100644 index c3db5908e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open-take-profit.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open.png deleted file mode 100644 index 0a66b09e9..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-open.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-take-position.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-take-position.png deleted file mode 100644 index 5e03218d2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-take-position.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-off.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-off.png deleted file mode 100644 index cb1076837..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-off.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-on.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-on.png deleted file mode 100644 index e56d56f64..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger-trigger-on.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger.png deleted file mode 100644 index 83a87e2d6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stage-trigger.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/startup.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/startup.png deleted file mode 100644 index 7ed8d6cb0..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/startup.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-dependency.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-dependency.png deleted file mode 100644 index cb318dee5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-dependency.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-report.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-report.png deleted file mode 100644 index f3361a6e9..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/status-report.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stellar.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stellar.png deleted file mode 100644 index d853f8e51..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stellar.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stop.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stop.png deleted file mode 100644 index 65fff4f18..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/stop.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style-condition.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style-condition.png deleted file mode 100644 index eb9a065c1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style-condition.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style.png deleted file mode 100644 index 4ae248158..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/style.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-action.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-action.png deleted file mode 100644 index a3dc332fd..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-action.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-scripts.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-scripts.png deleted file mode 100644 index 12e17e118..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/super-scripts.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/support.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/support.png deleted file mode 100644 index fcafb34f3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/support.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tap.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tap.png deleted file mode 100644 index 7f958daf5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tap.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/targeting.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/targeting.png deleted file mode 100644 index ef53bb1e6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/targeting.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task-manager.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task-manager.png deleted file mode 100644 index ee8d2bc25..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task-manager.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task.png deleted file mode 100644 index e85e1ba2b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/task.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-script.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-script.png deleted file mode 100644 index fbbc921f1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-script.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-structure.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-structure.png deleted file mode 100644 index 212baedf4..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-structure.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-target.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-target.png deleted file mode 100644 index 233628a94..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/template-target.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing-environment.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing-environment.png deleted file mode 100644 index d634fbc0e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing-environment.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing.png deleted file mode 100644 index 2c3a28848..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/testing.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tether.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tether.png deleted file mode 100644 index af6e43f43..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tether.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/text.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/text.png deleted file mode 100644 index 959e64e90..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/text.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-frame-scale.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-frame-scale.png deleted file mode 100644 index 7aeece127..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-frame-scale.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-line-chart.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-line-chart.png deleted file mode 100644 index 3525af058..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-line-chart.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-machine.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-machine.png deleted file mode 100644 index f10e3dda7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-machine.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-period.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-period.png deleted file mode 100644 index 15ea83404..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-period.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-scale.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-scale.png deleted file mode 100644 index 462140c6b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/time-scale.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/timeline.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/timeline.png deleted file mode 100644 index 8a7051d9f..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/timeline.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-max.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-max.png deleted file mode 100644 index fa8168e6c..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-max.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min-max.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min-max.png deleted file mode 100644 index e7549e1e6..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min-max.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min.png deleted file mode 100644 index 22e67cda5..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-auto-min.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-manual.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-manual.png deleted file mode 100644 index 282f4dbac..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-scale-manual.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-max.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-max.png deleted file mode 100644 index 37b6f77b2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-max.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min-max.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min-max.png deleted file mode 100644 index a193213f7..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min-max.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min.png deleted file mode 100644 index 7c4a26043..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-auto-min.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-manual.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-manual.png deleted file mode 100644 index a8da7ca60..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-auto-time-scale-manual.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-panel-off.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-panel-off.png deleted file mode 100644 index 032a33409..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/toggle-panel-off.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tools.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tools.png deleted file mode 100644 index a22d7f0a3..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tools.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/trend.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/trend.png deleted file mode 100644 index 1a57bb1a1..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/trend.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tron.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tron.png deleted file mode 100644 index 65ebcbd98..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/tron.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upbit.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upbit.png deleted file mode 100644 index 6e3cb476d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upbit.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upload.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upload.png deleted file mode 100644 index 50e4d79c2..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/upload.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/us-dollar.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/us-dollar.png deleted file mode 100644 index ba31d4f09..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/us-dollar.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-account.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-account.png deleted file mode 100644 index 8c3b677da..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-account.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-assets.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-assets.png deleted file mode 100644 index bf9f73b4e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-assets.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-keys.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-keys.png deleted file mode 100644 index 906fe456f..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/user-keys.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/vector.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/vector.png deleted file mode 100644 index b9b1e7a02..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/vector.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/video-player.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/video-player.png deleted file mode 100644 index b382fe80e..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/video-player.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/viewport.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/viewport.png deleted file mode 100644 index 1365ecd7b..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/viewport.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/volume.png b/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/volume.png deleted file mode 100644 index 60d213b6d..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/Icons/style-01/volume.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/favicon.ico b/Deprecated-Code/WebServer/WebServer/Images/favicon.ico deleted file mode 100644 index cd2c5d6af..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/favicon.ico and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/superalgos-header-background.png b/Deprecated-Code/WebServer/WebServer/Images/superalgos-header-background.png deleted file mode 100644 index 5c980aa38..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/superalgos-header-background.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo-for-color-background.png b/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo-for-color-background.png deleted file mode 100644 index 40f8de2ab..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo-for-color-background.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo.png b/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo.png deleted file mode 100644 index 995d19538..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/superalgos-logo.png and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/Images/superalgos-platform.jpg b/Deprecated-Code/WebServer/WebServer/Images/superalgos-platform.jpg deleted file mode 100644 index 7aecf4958..000000000 Binary files a/Deprecated-Code/WebServer/WebServer/Images/superalgos-platform.jpg and /dev/null differ diff --git a/Deprecated-Code/WebServer/WebServer/LegacyPlotter.js b/Deprecated-Code/WebServer/WebServer/LegacyPlotter.js deleted file mode 100644 index cb4e49753..000000000 --- a/Deprecated-Code/WebServer/WebServer/LegacyPlotter.js +++ /dev/null @@ -1,6 +0,0 @@ -function getNewPlotter(pDataMineOrHost, pPlotter, pModule) { - let functionName = pDataMineOrHost + pPlotter + pModule; - functionName = functionName.replace(/-/g, ""); - functionName = 'new' + functionName - return window[functionName](); -} diff --git a/Deprecated-Code/WebServer/WebServer/PlotterPanel.js b/Deprecated-Code/WebServer/WebServer/PlotterPanel.js deleted file mode 100644 index 75e63863e..000000000 --- a/Deprecated-Code/WebServer/WebServer/PlotterPanel.js +++ /dev/null @@ -1,6 +0,0 @@ -function getNewPlotterPanel(pDataMineOrHost, pPlotter, pModule, pPanel) { - let functionName = pDataMineOrHost + pPlotter + pModule + pPanel; - functionName = functionName.replace(/-/g, ""); - functionName = 'new' + functionName - return window[functionName](); -} diff --git a/Deprecated-Code/WebServer/WebServer/externalScripts/CCapture.all.min.js b/Deprecated-Code/WebServer/WebServer/externalScripts/CCapture.all.min.js deleted file mode 100644 index bda376d9f..000000000 --- a/Deprecated-Code/WebServer/WebServer/externalScripts/CCapture.all.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";function download(t,e,i){function n(t){var e=t.split(/[:;,]/),i=e[1],n="base64"==e[2]?atob:decodeURIComponent,r=n(e.pop()),o=r.length,a=0,s=new Uint8Array(o);for(a;a>8,this.data[this.pos++]=t},t.prototype.writeDoubleBE=function(t){for(var e=new Uint8Array(new Float64Array([t]).buffer),i=e.length-1;i>=0;i--)this.writeByte(e[i])},t.prototype.writeFloatBE=function(t){for(var e=new Uint8Array(new Float32Array([t]).buffer),i=e.length-1;i>=0;i--)this.writeByte(e[i])},t.prototype.writeString=function(t){for(var e=0;e>8),this.writeU8(t);break;case 3:this.writeU8(32|t>>16),this.writeU8(t>>8),this.writeU8(t);break;case 4:this.writeU8(16|t>>24),this.writeU8(t>>16),this.writeU8(t>>8),this.writeU8(t);break;case 5:this.writeU8(8|t/4294967296&7),this.writeU8(t>>24),this.writeU8(t>>16),this.writeU8(t>>8),this.writeU8(t);break;default:throw new RuntimeException("Bad EBML VINT size "+e)}},t.prototype.measureEBMLVarInt=function(t){if(t<127)return 1;if(t<16383)return 2;if(t<2097151)return 3;if(t<268435455)return 4;if(t<34359738367)return 5;throw new RuntimeException("EBML VINT size not supported "+t)},t.prototype.writeEBMLVarInt=function(t){this.writeEBMLVarIntWidth(t,this.measureEBMLVarInt(t))},t.prototype.writeUnsignedIntBE=function(t,e){switch(void 0===e&&(e=this.measureUnsignedInt(t)),e){case 5:this.writeU8(Math.floor(t/4294967296));case 4:this.writeU8(t>>24);case 3:this.writeU8(t>>16);case 2:this.writeU8(t>>8);case 1:this.writeU8(t);break;default:throw new RuntimeException("Bad UINT size "+e)}},t.prototype.measureUnsignedInt=function(t){return t<256?1:t<65536?2:t<1<<24?3:t<4294967296?4:5},t.prototype.getAsDataArray=function(){if(this.posthis.length)throw"Seeking beyond the end of file is not allowed";this.pos=t},this.write=function(e){var i={offset:this.pos,data:e,length:r(e)},f=i.offset>=this.length;this.pos+=i.length,this.length=Math.max(this.length,this.pos),a=a.then(function(){if(h)return new Promise(function(e,r){n(i.data).then(function(n){var r=0,o=Buffer.from(n.buffer),a=function(n,o,s){r+=o,r>=s.length?e():t.write(h,s,r,s.length-r,i.offset+r,a)};t.write(h,o,0,o.length,i.offset,a)})});if(s)return new Promise(function(t,e){s.onwriteend=t,s.seek(i.offset),s.write(new Blob([i.data]))});if(!f)for(var e=0;e=r.offset+r.length)){if(i.offsetr.offset+r.length)throw new Error("Overwrite crosses blob boundaries");return i.offset==r.offset&&i.length==r.length?void(r.data=i.data):n(r.data).then(function(t){return r.data=t,n(i.data)}).then(function(t){i.data=t,r.data.set(i.data,i.offset-r.offset)})}}o.push(i)})},this.complete=function(t){return a=h||s?a.then(function(){return null}):a.then(function(){for(var e=[],i=0;i0&&e.trackNumber<127))throw"TrackNumber must be > 0 and < 127";return i.writeEBMLVarInt(e.trackNumber),i.writeU16BE(e.timecode),i.writeByte(128),{id:163,data:[i.getAsDataArray(),e.frame]}}function l(t){return{id:524531317,data:[{id:231,data:Math.round(t.timecode)}]}}function c(t,e,i){_.push({id:187,data:[{id:179,data:e},{id:183,data:[{id:247,data:t},{id:241,data:a(i)}]}]})}function p(){var e={id:475249515,data:_},i=new t(16+32*_.length);h(i,S.pos,e),S.write(i.getAsDataArray()),D.Cues.positionEBML.data=a(e.offset)}function m(){if(0!=T.length){for(var e=0,i=0;i=E&&m()}function y(){var e=new t(x.size),i=S.pos;h(e,x.dataOffset,x.data),S.seek(x.dataOffset),S.write(e.getAsDataArray()),S.seek(i)}function v(){var e=new t(8),i=S.pos;e.writeDoubleBE(U),S.seek(M.dataOffset),S.write(e.getAsDataArray()),S.seek(i)}var b,k,B,x,E=5e3,A=1,L=!1,T=[],U=0,F=0,I={quality:.95,fileWriter:null,fd:null,frameDuration:null,frameRate:null},D={Cues:{id:new Uint8Array([28,83,187,107]),positionEBML:null},SegmentInfo:{id:new Uint8Array([21,73,169,102]),positionEBML:null},Tracks:{id:new Uint8Array([22,84,174,107]),positionEBML:null}},M={id:17545,data:new s(0)},_=[],S=new e(n.fileWriter||n.fd);this.addFrame=function(t){if(L){if(t.width!=b||t.height!=k)throw"Frame size differs from previous frames"}else b=t.width,k=t.height,u(),L=!0;var e=r(t,{quality:n.quality});if(!e)throw"Couldn't decode WebP frame, does the browser support WebP?";g({frame:o(e),duration:n.frameDuration})},this.complete=function(){return m(),p(),y(),v(),S.complete("video/webm")},this.getWrittenSize=function(){return S.length},n=i(I,n||{}),w()}};"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t(require("./ArrayBufferDataStream"),require("./BlobBuffer")):window.WebMWriter=t(ArrayBufferDataStream,BlobBuffer)}(),function(){function t(t){var e,i=new Uint8Array(t);for(e=0;e>18&63]+o[t>>12&63]+o[t>>6&63]+o[63&t]}var i,n,r,a=t.length%3,s="";for(i=0,r=t.length-a;in&&(e.push({blocks:o,length:i}),o=[],i=0),o.push(t),i+=t.headerLength+t.inputLength}),e.push({blocks:o,length:i}),e.forEach(function(e){var i=new Uint8Array(e.length),n=0;e.blocks.forEach(function(t){i.set(t.header,n),n+=t.headerLength,i.set(t.input,n),n+=t.inputLength}),t.push(i)}),t.push(new Uint8Array(2*r)),new Blob(t,{type:"octet/stream"})},t.prototype.clear=function(){this.written=0,this.out=n.clean(e)},window.Tar=t}(),function(t){function e(t,i){if({}.hasOwnProperty.call(e.cache,t))return e.cache[t];var n=e.resolve(t);if(!n)throw new Error("Failed to resolve module "+t);var r={id:t,require:e,filename:t,exports:{},loaded:!1,parent:i,children:[]};i&&i.children.push(r);var o=t.slice(0,t.lastIndexOf("/")+1);return e.cache[t]=r.exports,n.call(r.exports,r,r.exports,o,t),r.loaded=!0,e.cache[t]=r.exports}e.modules={},e.cache={},e.resolve=function(t){return{}.hasOwnProperty.call(e.modules,t)?e.modules[t]:void 0},e.define=function(t,i){e.modules[t]=i};var i=function(e){return e="/",{title:"browser",version:"v0.10.26",browser:!0,env:{},argv:[],nextTick:t.setImmediate||function(t){setTimeout(t,0)},cwd:function(){return e},chdir:function(t){e=t}}}();e.define("/gif.coffee",function(t,i,n,r){function o(t,e){return{}.hasOwnProperty.call(t,e)}function a(t,e){for(var i=0,n=e.length;ithis.frames.length;0<=this.frames.length?++e:--e)t.push(e);return t}.apply(this,arguments),n=0,r=i.length;ne;0<=e?++i:--i)t.push(i);return t}.apply(this,arguments),n=0,r=i.length;nt;this.freeWorkers.length<=t?++i:--i)e.push(i);return e}.apply(this,arguments).forEach(function(t){return function(e){var i;return console.log("spawning worker "+e),i=new Worker(t.options.workerScript),i.onmessage=function(t){return function(e){return t.activeWorkers.splice(t.activeWorkers.indexOf(i),1),t.freeWorkers.push(i),t.frameFinished(e.data)}}(t),t.freeWorkers.push(i)}}(this)),t},e.prototype.frameFinished=function(t){return console.log("frame "+t.index+" finished - "+this.activeWorkers.length+" active"),this.finishedFrames++,this.emit("progress",this.finishedFrames/this.frames.length),this.imageParts[t.index]=t,a(null,this.imageParts)?this.renderNextFrame():this.finishRendering()},e.prototype.finishRendering=function(){var t,e,i,n,r,o,a;r=0;for(var s=0,h=this.imageParts.length;s=this.frames.length?void 0:(t=this.frames[this.nextFrame++],i=this.freeWorkers.shift(),e=this.getTask(t),console.log("starting frame "+(e.index+1)+" of "+this.frames.length),this.activeWorkers.push(i),i.postMessage(e))},e.prototype.getContextData=function(t){return t.getImageData(0,0,this.options.width,this.options.height).data},e.prototype.getImageData=function(t){var e;return null!=this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.width=this.options.width,this._canvas.height=this.options.height),e=this._canvas.getContext("2d"),e.setFill=this.options.background,e.fillRect(0,0,this.options.width,this.options.height),e.drawImage(t,0,0),this.getContextData(e)},e.prototype.getTask=function(t){var e,i;if(e=this.frames.indexOf(t),i={index:e,last:e===this.frames.length-1,delay:t.delay,transparent:t.transparent,width:this.options.width,height:this.options.height,quality:this.options.quality,repeat:this.options.repeat,canTransfer:"chrome"===h.name},null!=t.data)i.data=t.data;else if(null!=t.context)i.data=this.getContextData(t.context);else{if(null==t.image)throw new Error("Invalid frame");i.data=this.getImageData(t.image)}return i},e}(u),t.exports=l}),e.define("/browser.coffee",function(t,e,i,n){var r,o,a,s,h;s=navigator.userAgent.toLowerCase(),a=navigator.platform.toLowerCase(),h=s.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/)||[null,"unknown",0],o="ie"===h[1]&&document.documentMode,r={name:"version"===h[1]?h[3]:h[1],version:o||parseFloat("opera"===h[1]&&h[4]?h[4]:h[2]),platform:{name:s.match(/ip(?:ad|od|hone)/)?"ios":(s.match(/(?:webos|android)/)||a.match(/mac|win|linux/)||["other"])[0]}},r[r.name]=!0,r[r.name+parseInt(r.version,10)]=!0,r.platform[r.platform.name]=!0,t.exports=r}),e.define("events",function(t,e,n,r){i.EventEmitter||(i.EventEmitter=function(){});var o=e.EventEmitter=i.EventEmitter,a="function"==typeof Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},s=10;o.prototype.setMaxListeners=function(t){this._events||(this._events={}),this._events.maxListeners=t},o.prototype.emit=function(t){if("error"===t&&(!this._events||!this._events.error||a(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:new Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var e=this._events[t];if(!e)return!1;if("function"!=typeof e){if(a(e)){for(var i=Array.prototype.slice.call(arguments,1),n=e.slice(),r=0,o=n.length;r0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),console.trace())}this._events[t].push(e)}else this._events[t]=[this._events[t],e];else this._events[t]=e;return this},o.prototype.on=o.prototype.addListener,o.prototype.once=function(t,e){var i=this;return i.on(t,function n(){i.removeListener(t,n),e.apply(this,arguments)}),this},o.prototype.removeListener=function(t,e){if("function"!=typeof e)throw new Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var i=this._events[t];if(a(i)){var n=i.indexOf(e);if(n<0)return this;i.splice(n,1),0==i.length&&delete this._events[t]}else this._events[t]===e&&delete this._events[t];return this},o.prototype.removeAllListeners=function(t){return t&&this._events&&this._events[t]&&(this._events[t]=null),this},o.prototype.listeners=function(t){return this._events||(this._events={}),this._events[t]||(this._events[t]=[]),a(this._events[t])||(this._events[t]=[this._events[t]]),this._events[t]}}),t.GIF=e("/gif.coffee")}.call(this,this),function(){function t(t){return t&&t.Object===Object?t:null}function e(t){return String("0000000"+t).slice(-7)}function i(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()}function n(t){var e={};this.settings=t,this.on=function(t,i){e[t]=i},this.emit=function(t){var i=e[t];i&&i.apply(null,Array.prototype.slice.call(arguments,1))},this.filename=t.name||i(),this.extension="",this.mimeType=""}function r(t){n.call(this,t),this.extension=".tar",this.mimeType="application/x-tar",this.fileExtension="",this.baseFilename=this.filename,this.tape=null,this.count=0,this.part=1,this.frames=0}function o(t){r.call(this,t),this.type="image/png",this.fileExtension=".png"}function a(t){r.call(this,t),this.type="image/jpeg",this.fileExtension=".jpg",this.quality=t.quality/100||.8}function s(t){var e=document.createElement("canvas");"image/webp"!==e.toDataURL("image/webp").substr(5,10)&&console.log("WebP not supported - try another export format"),n.call(this,t),this.quality=t.quality/100||.8,this.extension=".webm",this.mimeType="video/webm",this.baseFilename=this.filename,this.framerate=t.framerate,this.frames=0,this.part=1,this.videoWriter=new WebMWriter({quality:this.quality,fileWriter:null,fd:null,frameRate:this.framerate})}function h(t){n.call(this,t),t.quality=t.quality/100||.8,this.encoder=new FFMpegServer.Video(t),this.encoder.on("process",function(){this.emit("process")}.bind(this)),this.encoder.on("finished",function(t,e){var i=this.callback;i&&(this.callback=void 0,i(t,e))}.bind(this)),this.encoder.on("progress",function(t){this.settings.onProgress&&this.settings.onProgress(t)}.bind(this)),this.encoder.on("error",function(t){alert(JSON.stringify(t,null,2))}.bind(this))}function f(t){n.call(this,t),this.framerate=this.settings.framerate,this.type="video/webm",this.extension=".webm",this.stream=null,this.mediaRecorder=null,this.chunks=[]}function u(t){n.call(this,t),t.quality=31-(30*t.quality/100||10),t.workers=t.workers||4,this.extension=".gif",this.mimeType="image/gif",this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.sizeSet=!1,this.encoder=new GIF({workers:t.workers,quality:t.quality,workerScript:t.workersPath+"gif.worker.js"}),this.encoder.on("progress",function(t){this.settings.onProgress&&this.settings.onProgress(t)}.bind(this)),this.encoder.on("finished",function(t){var e=this.callback;e&&(this.callback=void 0,e(t))}.bind(this))}function d(t){function e(){function t(){return this._hooked||(this._hooked=!0,this._hookedTime=this.currentTime||0,this.pause(),it.push(this)),this._hookedTime+M.startTime}b("Capturer start"),U=window.Date.now(),T=U+M.startTime,I=window.performance.now(),F=I+M.startTime,window.Date.prototype.getTime=function(){return T},window.Date.now=function(){return T},window.setTimeout=function(t,e){var i={callback:t,time:e,triggerTime:T+e};return _.push(i),b("Timeout set to "+i.time),i},window.clearTimeout=function(t){for(var e=0;e<_.length;e++)_[e]!=t||(_.splice(e,1),b("Timeout cleared"))},window.setInterval=function(t,e){var i={callback:t,time:e,triggerTime:T+e};return S.push(i),b("Interval set to "+i.time),i},window.clearInterval=function(t){return b("clear Interval"),null},window.requestAnimationFrame=function(t){W.push(t)},window.performance.now=function(){return F};try{Object.defineProperty(HTMLVideoElement.prototype,"currentTime",{get:t}),Object.defineProperty(HTMLAudioElement.prototype,"currentTime",{get:t})}catch(t){b(t)}}function i(){e(),D.start(),R=!0}function n(){R=!1,D.stop(),l()}function r(t,e){Z(t,0,e)}function d(){r(y)}function l(){b("Capturer stop"),window.setTimeout=Z,window.setInterval=J,window.clearInterval=Y,window.clearTimeout=$,window.requestAnimationFrame=Q,window.Date.prototype.getTime=et,window.Date.now=X,window.performance.now=tt}function c(){var t=C/M.framerate;(M.frameLimit&&C>=M.frameLimit||M.timeLimit&&t>=M.timeLimit)&&(n(),v());var e=new Date(null);e.setSeconds(t),M.motionBlurFrames>2?j.textContent="CCapture "+M.format+" | "+C+" frames ("+O+" inter) | "+e.toISOString().substr(11,8):j.textContent="CCapture "+M.format+" | "+C+" frames | "+e.toISOString().substr(11,8)}function p(t){N.width===t.width&&N.height===t.height||(N.width=t.width,N.height=t.height,z=new Uint16Array(N.height*N.width*4),V.fillStyle="#0",V.fillRect(0,0,N.width,N.height))}function m(t){V.drawImage(t,0,0),q=V.getImageData(0,0,N.width,N.height);for(var e=0;e2?(p(t),m(t),O>=.5*M.motionBlurFrames?w():d()):(D.add(t),C++,b("Full Frame! "+C)))}function y(){var t=1e3/M.framerate,e=(C+O/M.motionBlurFrames)*t;T=U+e,F=I+e,it.forEach(function(t){t._hookedTime=e/1e3}),c(),b("Frame: "+C+" "+O);for(var i=0;i<_.length;i++)T>=_[i].triggerTime&&(r(_[i].callback),_.splice(i,1));for(var i=0;i=S[i].triggerTime&&(r(S[i].callback),S[i].triggerTime+=S[i].time);W.forEach(function(t){r(t,T-k)}),W=[]}function v(t){t||(t=function(t){return download(t,D.filename+D.extension,D.mimeType),!1}),D.save(t)}function b(t){A&&console.log(t)}function B(t,e){P[t]=e}function x(t){var e=P[t];e&&e.apply(null,Array.prototype.slice.call(arguments,1))}function E(t){x("progress",t)}var A,L,T,U,F,I,d,D,M=t||{},_=(new Date,[]),S=[],C=0,O=0,W=[],R=!1,P={};M.framerate=M.framerate||60,M.motionBlurFrames=2*(M.motionBlurFrames||1),A=M.verbose||!1,L=M.display||!1,M.step=1e3/M.framerate,M.timeLimit=M.timeLimit||0,M.frameLimit=M.frameLimit||0,M.startTime=M.startTime||0;var j=document.createElement("div");j.style.position="absolute",j.style.left=j.style.top=0,j.style.backgroundColor="black",j.style.fontFamily="monospace",j.style.fontSize="11px",j.style.padding="5px",j.style.color="red",j.style.zIndex=1e5,M.display&&document.body.appendChild(j);var z,q,N=document.createElement("canvas"),V=N.getContext("2d");b("Step is set to "+M.step+"ms");var G={gif:u,webm:s,ffmpegserver:h,png:o,jpg:a,"webm-mediarecorder":f},H=G[M.format];if(!H)throw"Error: Incorrect or missing format: Valid formats are "+Object.keys(G).join(", ");if(D=new H(M),D.step=d,D.on("process",y),D.on("progress",E),"performance"in window==0&&(window.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in window.performance==0){var K=Date.now();performance.timing&&performance.timing.navigationStart&&(K=performance.timing.navigationStart),window.performance.now=function(){return Date.now()-K}}var Z=window.setTimeout,J=window.setInterval,Y=window.clearInterval,$=window.clearTimeout,Q=window.requestAnimationFrame,X=window.Date.now,tt=window.performance.now,et=window.Date.prototype.getTime,it=[];return{start:i,capture:g,stop:n,save:v,on:B}}var l={function:!0,object:!0},c=(parseFloat,parseInt,l[typeof exports]&&exports&&!exports.nodeType?exports:void 0),p=l[typeof module]&&module&&!module.nodeType?module:void 0,m=p&&p.exports===c?c:void 0,w=t(c&&p&&"object"==typeof global&&global),g=t(l[typeof self]&&self),y=t(l[typeof window]&&window),v=t(l[typeof this]&&this),b=w||y!==(v&&v.window)&&y||g||v||Function("return this")();"gc"in window||(window.gc=function(){}),HTMLCanvasElement.prototype.toBlob||Object.defineProperty(HTMLCanvasElement.prototype,"toBlob",{value:function(t,e,i){for(var n=atob(this.toDataURL(e,i).split(",")[1]),r=n.length,o=new Uint8Array(r),a=0;a0&&this.frames/this.settings.framerate>=this.settings.autoSaveTime?this.save(function(t){this.filename=this.baseFilename+"-part-"+e(this.part),download(t,this.filename+this.extension,this.mimeType);var i=this.count;this.dispose(),this.count=i+1,this.part++,this.filename=this.baseFilename+"-part-"+e(this.part),this.frames=0,this.step()}.bind(this)):(this.count++,this.frames++,this.step())}.bind(this),i.readAsArrayBuffer(t)},r.prototype.save=function(t){t(this.tape.save())},r.prototype.dispose=function(){this.tape=new Tar,this.count=0},o.prototype=Object.create(r.prototype),o.prototype.add=function(t){t.toBlob(function(t){r.prototype.add.call(this,t)}.bind(this),this.type)},a.prototype=Object.create(r.prototype),a.prototype.add=function(t){t.toBlob(function(t){r.prototype.add.call(this,t)}.bind(this),this.type,this.quality)},s.prototype=Object.create(n.prototype),s.prototype.start=function(t){this.dispose()},s.prototype.add=function(t){this.videoWriter.addFrame(t),this.settings.autoSaveTime>0&&this.frames/this.settings.framerate>=this.settings.autoSaveTime?this.save(function(t){this.filename=this.baseFilename+"-part-"+e(this.part),download(t,this.filename+this.extension,this.mimeType),this.dispose(),this.part++,this.filename=this.baseFilename+"-part-"+e(this.part),this.step()}.bind(this)):(this.frames++,this.step())},s.prototype.save=function(t){this.videoWriter.complete().then(t)},s.prototype.dispose=function(t){this.frames=0,this.videoWriter=new WebMWriter({quality:this.quality,fileWriter:null,fd:null,frameRate:this.framerate})},h.prototype=Object.create(n.prototype),h.prototype.start=function(){this.encoder.start(this.settings)},h.prototype.add=function(t){this.encoder.add(t)},h.prototype.save=function(t){this.callback=t,this.encoder.end()},h.prototype.safeToProceed=function(){return this.encoder.safeToProceed()},f.prototype=Object.create(n.prototype),f.prototype.add=function(t){this.stream||(this.stream=t.captureStream(this.framerate),this.mediaRecorder=new MediaRecorder(this.stream),this.mediaRecorder.start(),this.mediaRecorder.ondataavailable=function(t){this.chunks.push(t.data)}.bind(this)),this.step()},f.prototype.save=function(t){this.mediaRecorder.onstop=function(e){var i=new Blob(this.chunks,{type:"video/webm"});this.chunks=[],t(i)}.bind(this),this.mediaRecorder.stop()},u.prototype=Object.create(n.prototype),u.prototype.add=function(t){this.sizeSet||(this.encoder.setOption("width",t.width),this.encoder.setOption("height",t.height),this.sizeSet=!0),this.canvas.width=t.width,this.canvas.height=t.height,this.ctx.drawImage(t,0,0),this.encoder.addFrame(this.ctx,{copy:!0,delay:this.settings.step}),this.step()},u.prototype.save=function(t){this.callback=t,this.encoder.render()},(y||g||{}).CCapture=d,"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return d}):c&&p?(m&&((p.exports=d).CCapture=d),c.CCapture=d):b.CCapture=d}(); \ No newline at end of file diff --git a/Deprecated-Code/WebServer/WebServer/externalScripts/gif.worker.js b/Deprecated-Code/WebServer/WebServer/externalScripts/gif.worker.js deleted file mode 100644 index 269624e61..000000000 --- a/Deprecated-Code/WebServer/WebServer/externalScripts/gif.worker.js +++ /dev/null @@ -1,3 +0,0 @@ -// gif.worker.js 0.2.0 - https://github.com/jnordberg/gif.js -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=ByteArray.pageSize)this.newPage();this.pages[this.page][this.cursor++]=val};ByteArray.prototype.writeUTFBytes=function(string){for(var l=string.length,i=0;i=0)this.dispose=disposalCode};GIFEncoder.prototype.setRepeat=function(repeat){this.repeat=repeat};GIFEncoder.prototype.setTransparent=function(color){this.transparent=color};GIFEncoder.prototype.addFrame=function(imageData){this.image=imageData;this.colorTab=this.globalPalette&&this.globalPalette.slice?this.globalPalette:null;this.getImagePixels();this.analyzePixels();if(this.globalPalette===true)this.globalPalette=this.colorTab;if(this.firstFrame){this.writeLSD();this.writePalette();if(this.repeat>=0){this.writeNetscapeExt()}}this.writeGraphicCtrlExt();this.writeImageDesc();if(!this.firstFrame&&!this.globalPalette)this.writePalette();this.writePixels();this.firstFrame=false};GIFEncoder.prototype.finish=function(){this.out.writeByte(59)};GIFEncoder.prototype.setQuality=function(quality){if(quality<1)quality=1;this.sample=quality};GIFEncoder.prototype.setDither=function(dither){if(dither===true)dither="FloydSteinberg";this.dither=dither};GIFEncoder.prototype.setGlobalPalette=function(palette){this.globalPalette=palette};GIFEncoder.prototype.getGlobalPalette=function(){return this.globalPalette&&this.globalPalette.slice&&this.globalPalette.slice(0)||this.globalPalette};GIFEncoder.prototype.writeHeader=function(){this.out.writeUTFBytes("GIF89a")};GIFEncoder.prototype.analyzePixels=function(){if(!this.colorTab){this.neuQuant=new NeuQuant(this.pixels,this.sample);this.neuQuant.buildColormap();this.colorTab=this.neuQuant.getColormap()}if(this.dither){this.ditherPixels(this.dither.replace("-serpentine",""),this.dither.match(/-serpentine/)!==null)}else{this.indexPixels()}this.pixels=null;this.colorDepth=8;this.palSize=7;if(this.transparent!==null){this.transIndex=this.findClosest(this.transparent,true)}};GIFEncoder.prototype.indexPixels=function(imgq){var nPix=this.pixels.length/3;this.indexedPixels=new Uint8Array(nPix);var k=0;for(var j=0;j=0&&x1+x=0&&y1+y>16,(c&65280)>>8,c&255,used)};GIFEncoder.prototype.findClosestRGB=function(r,g,b,used){if(this.colorTab===null)return-1;if(this.neuQuant&&!used){return this.neuQuant.lookupRGB(r,g,b)}var c=b|g<<8|r<<16;var minpos=0;var dmin=256*256*256;var len=this.colorTab.length;for(var i=0,index=0;i=0){disp=dispose&7}disp<<=2;this.out.writeByte(0|disp|0|transp);this.writeShort(this.delay);this.out.writeByte(this.transIndex);this.out.writeByte(0)};GIFEncoder.prototype.writeImageDesc=function(){this.out.writeByte(44);this.writeShort(0);this.writeShort(0);this.writeShort(this.width);this.writeShort(this.height);if(this.firstFrame||this.globalPalette){this.out.writeByte(0)}else{this.out.writeByte(128|0|0|0|this.palSize)}};GIFEncoder.prototype.writeLSD=function(){this.writeShort(this.width);this.writeShort(this.height);this.out.writeByte(128|112|0|this.palSize);this.out.writeByte(0);this.out.writeByte(0)};GIFEncoder.prototype.writeNetscapeExt=function(){this.out.writeByte(33);this.out.writeByte(255);this.out.writeByte(11);this.out.writeUTFBytes("NETSCAPE2.0");this.out.writeByte(3);this.out.writeByte(1);this.writeShort(this.repeat);this.out.writeByte(0)};GIFEncoder.prototype.writePalette=function(){this.out.writeBytes(this.colorTab);var n=3*256-this.colorTab.length;for(var i=0;i>8&255)};GIFEncoder.prototype.writePixels=function(){var enc=new LZWEncoder(this.width,this.height,this.indexedPixels,this.colorDepth);enc.encode(this.out)};GIFEncoder.prototype.stream=function(){return this.out};module.exports=GIFEncoder},{"./LZWEncoder.js":2,"./TypedNeuQuant.js":3}],2:[function(require,module,exports){var EOF=-1;var BITS=12;var HSIZE=5003;var masks=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535];function LZWEncoder(width,height,pixels,colorDepth){var initCodeSize=Math.max(2,colorDepth);var accum=new Uint8Array(256);var htab=new Int32Array(HSIZE);var codetab=new Int32Array(HSIZE);var cur_accum,cur_bits=0;var a_count;var free_ent=0;var maxcode;var clear_flg=false;var g_init_bits,ClearCode,EOFCode;function char_out(c,outs){accum[a_count++]=c;if(a_count>=254)flush_char(outs)}function cl_block(outs){cl_hash(HSIZE);free_ent=ClearCode+2;clear_flg=true;output(ClearCode,outs)}function cl_hash(hsize){for(var i=0;i=0){disp=hsize_reg-i;if(i===0)disp=1;do{if((i-=disp)<0)i+=hsize_reg;if(htab[i]===fcode){ent=codetab[i];continue outer_loop}}while(htab[i]>=0)}output(ent,outs);ent=c;if(free_ent<1<0){outs.writeByte(a_count);outs.writeBytes(accum,0,a_count);a_count=0}}function MAXCODE(n_bits){return(1<0)cur_accum|=code<=8){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}if(free_ent>maxcode||clear_flg){if(clear_flg){maxcode=MAXCODE(n_bits=g_init_bits);clear_flg=false}else{++n_bits;if(n_bits==BITS)maxcode=1<0){char_out(cur_accum&255,outs);cur_accum>>=8;cur_bits-=8}flush_char(outs)}}this.encode=encode}module.exports=LZWEncoder},{}],3:[function(require,module,exports){var ncycles=100;var netsize=256;var maxnetpos=netsize-1;var netbiasshift=4;var intbiasshift=16;var intbias=1<>betashift;var betagamma=intbias<>3;var radiusbiasshift=6;var radiusbias=1<>3);var i,v;for(i=0;i>=netbiasshift;network[i][1]>>=netbiasshift;network[i][2]>>=netbiasshift;network[i][3]=i}}function altersingle(alpha,i,b,g,r){network[i][0]-=alpha*(network[i][0]-b)/initalpha;network[i][1]-=alpha*(network[i][1]-g)/initalpha;network[i][2]-=alpha*(network[i][2]-r)/initalpha}function alterneigh(radius,i,b,g,r){var lo=Math.abs(i-radius);var hi=Math.min(i+radius,netsize);var j=i+1;var k=i-1;var m=1;var p,a;while(jlo){a=radpower[m++];if(jlo){p=network[k--];p[0]-=a*(p[0]-b)/alpharadbias;p[1]-=a*(p[1]-g)/alpharadbias;p[2]-=a*(p[2]-r)/alpharadbias}}}function contest(b,g,r){var bestd=~(1<<31);var bestbiasd=bestd;var bestpos=-1;var bestbiaspos=bestpos;var i,n,dist,biasdist,betafreq;for(i=0;i>intbiasshift-netbiasshift);if(biasdist>betashift;freq[i]-=betafreq;bias[i]+=betafreq<>1;for(j=previouscol+1;j>1;for(j=previouscol+1;j<256;j++)netindex[j]=maxnetpos}function inxsearch(b,g,r){var a,p,dist;var bestd=1e3;var best=-1;var i=netindex[g];var j=i-1;while(i=0){if(i=bestd)i=netsize;else{i++;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist=0){p=network[j];dist=g-p[1];if(dist>=bestd)j=-1;else{j--;if(dist<0)dist=-dist;a=p[0]-b;if(a<0)a=-a;dist+=a;if(dist>radiusbiasshift;if(rad<=1)rad=0;for(i=0;i=lengthcount)pix-=lengthcount;i++;if(delta===0)delta=1;if(i%delta===0){alpha-=alpha/alphadec;radius-=radius/radiusdec;rad=radius>>radiusbiasshift;if(rad<=1)rad=0;for(j=0;j - - - - - Superalgos - - - - - - - - - - - - - - - - - - -
    -
    -
    -
     
    - - - diff --git a/Deprecated-Code/WebServer/WebServer/require.js b/Deprecated-Code/WebServer/WebServer/require.js deleted file mode 100644 index f9476f532..000000000 --- a/Deprecated-Code/WebServer/WebServer/require.js +++ /dev/null @@ -1,2145 +0,0 @@ -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.3.5 Copyright jQuery Foundation and other contributors. - * Released under MIT license, https://github.com/REQUIREJS/REQUIREJS/blob/master/LICENSE - */ -//Not using strict: uneven strict support in browsers, #392, and causes -//problems with REQUIREJS.exec()/transpiler plugins that may not be strict. -/*jslint regexp: true, nomen: true, sloppy: true */ -/*global window, navigator, document, importScripts, setTimeout, opera */ - -var REQUIREJS, REQUIRE, DEFINE; -(function (global, setTimeout) { - var req, s, head, baseElement, dataMain, src, - interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.3.5', - commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, - cjsRequireRegExp = /[^.]\s*REQUIRE\s*\(\s*["']([^'"\s]+)["']\s*\)/g, - jsSuffixRegExp = /\.js$/, - currDirRegExp = /^\.\//, - op = Object.prototype, - ostring = op.toString, - hasOwn = op.hasOwnProperty, - isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), - isWebWorker = !isBrowser && typeof importScripts !== 'undefined', - //PS3 indicates loaded and complete, but need to wait for complete - //specifically. Sequence is 'loading', 'loaded', execution, - // then 'complete'. The UA check is unfortunate, but not sure how - //to feature test w/o causing perf issues. - readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? - /^complete$/ : /^(complete|loaded)$/, - defContextName = '_', - //Oh the tragedy, detecting opera. See the usage of isOpera for reason. - isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', - contexts = {}, - cfg = {}, - globalDefQueue = [], - useInteractive = false; - - //Could match something like ')//comment', do not lose the prefix to comment. - function commentReplace(match, singlePrefix) { - return singlePrefix || ''; - } - - function isFunction(it) { - return ostring.call(it) === '[object Function]'; - } - - function isArray(it) { - return ostring.call(it) === '[object Array]'; - } - - /** - * Helper function for iterating over an array. If the func returns - * a true value, it will break out of the loop. - */ - function each(ary, func) { - if (ary) { - var i; - for (i = 0; i < ary.length; i += 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - /** - * Helper function for iterating over an array backwards. If the func - * returns a true value, it will break out of the loop. - */ - function eachReverse(ary, func) { - if (ary) { - var i; - for (i = ary.length - 1; i > -1; i -= 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - - function hasProp(obj, prop) { - return hasOwn.call(obj, prop); - } - - function getOwn(obj, prop) { - return hasProp(obj, prop) && obj[prop]; - } - - /** - * Cycles over properties in an object and calls a function for each - * property value. If the function returns a truthy value, then the - * iteration is stopped. - */ - function eachProp(obj, func) { - var prop; - for (prop in obj) { - if (hasProp(obj, prop)) { - if (func(obj[prop], prop)) { - break; - } - } - } - } - - /** - * Simple function to mix in properties from source into target, - * but only if target does not already have a property of the same name. - */ - function mixin(target, source, force, deepStringMixin) { - if (source) { - eachProp(source, function (value, prop) { - if (force || !hasProp(target, prop)) { - if (deepStringMixin && typeof value === 'object' && value && - !isArray(value) && !isFunction(value) && - !(value instanceof RegExp)) { - - if (!target[prop]) { - target[prop] = {}; - } - mixin(target[prop], value, force, deepStringMixin); - } else { - target[prop] = value; - } - } - }); - } - return target; - } - - //Similar to Function.prototype.bind, but the 'this' object is specified - //first, since it is easier to read/figure out what 'this' will be. - function bind(obj, fn) { - return function () { - return fn.apply(obj, arguments); - }; - } - - function scripts() { - return document.getElementsByTagName('script'); - } - - function defaultOnError(err) { - throw err; - } - - //Allow getting a global that is expressed in - //dot notation, like 'a.b.c'. - function getGlobal(value) { - if (!value) { - return value; - } - var g = global; - each(value.split('.'), function (part) { - g = g[part]; - }); - return g; - } - - /** - * Constructs an error with a pointer to an URL with more information. - * @param {String} id the error ID that maps to an ID on a web page. - * @param {String} message human readable error. - * @param {Error} [err] the original error, if there is one. - * - * @returns {Error} - */ - function makeError(id, msg, err, requireModules) { - var e = new Error(msg + '\nhttp://REQUIREJS.org/docs/errors.html#' + id); - e.requireType = id; - e.requireModules = requireModules; - if (err) { - e.originalError = err; - } - return e; - } - - if (typeof DEFINE !== 'undefined') { - //If a DEFINE is already in play via another AMD loader, - //do not overwrite. - return; - } - - if (typeof REQUIREJS !== 'undefined') { - if (isFunction(REQUIREJS)) { - //Do not overwrite an existing REQUIREJS instance. - return; - } - cfg = REQUIREJS; - REQUIREJS = undefined; - } - - //Allow for a REQUIRE config object - if (typeof REQUIRE !== 'undefined' && !isFunction(REQUIRE)) { - //assume it is a config object. - cfg = REQUIRE; - REQUIRE = undefined; - } - - function newContext(contextName) { - var inCheckLoaded, Module, context, handlers, - checkLoadedTimeoutId, - config = { - //Defaults. Do not set a default for map - //config to speed up normalize(), which - //will run faster if there is no default. - waitSeconds: 60, - baseUrl: './', - paths: {}, - bundles: {}, - pkgs: {}, - shim: {}, - config: {} - }, - registry = {}, - //registry of just enabled modules, to speed - //cycle breaking code when lots of modules - //are registered, but not activated. - enabledRegistry = {}, - undefEvents = {}, - defQueue = [], - defined = {}, - urlFetched = {}, - bundlesMap = {}, - requireCounter = 1, - unnormalizedCounter = 1; - - /** - * Trims the . and .. from an array of path segments. - * It will keep a leading path segment if a .. will become - * the first path segment, to help with module name lookups, - * which act like paths, but can be remapped. But the end result, - * all paths that use this function should look normalized. - * NOTE: this method MODIFIES the input array. - * @param {Array} ary the array of path segments. - */ - function trimDots(ary) { - var i, part; - for (i = 0; i < ary.length; i++) { - part = ary[i]; - if (part === '.') { - ary.splice(i, 1); - i -= 1; - } else if (part === '..') { - // If at the start, or previous value is still .., - // keep them so that when converted to a path it may - // still work when converted to a path, even though - // as an ID it is less than ideal. In larger point - // releases, may be better to just kick out an error. - if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { - continue; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - - /** - * Given a relative module name, like ./something, normalize it to - * a real name that can be mapped to a path. - * @param {String} name the relative name - * @param {String} baseName a real name that the name arg is relative - * to. - * @param {Boolean} applyMap apply the map config to the value. Should - * only be done if this normalization is for a dependency ID. - * @returns {String} normalized name - */ - function normalize(name, baseName, applyMap) { - var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, - foundMap, foundI, foundStarMap, starI, normalizedBaseParts, - baseParts = (baseName && baseName.split('/')), - map = config.map, - starMap = map && map['*']; - - //Adjust any relative paths. - if (name) { - name = name.split('/'); - lastIndex = name.length - 1; - - // If wanting node ID compatibility, strip .js from end - // of IDs. Have to do this here, and not in nameToUrl - // because node allows either .js or non .js to map - // to same file. - if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { - name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); - } - - // Starts with a '.' so need the baseName - if (name[0].charAt(0) === '.' && baseParts) { - //Convert baseName to array, and lop off the last part, - //so that . matches that 'directory' and not name of the baseName's - //module. For instance, baseName of 'one/two/three', maps to - //'one/two/three.js', but we want the directory, 'one/two' for - //this normalization. - normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); - name = normalizedBaseParts.concat(name); - } - - trimDots(name); - name = name.join('/'); - } - - //Apply map config if available. - if (applyMap && map && (baseParts || starMap)) { - nameParts = name.split('/'); - - outerLoop: for (i = nameParts.length; i > 0; i -= 1) { - nameSegment = nameParts.slice(0, i).join('/'); - - if (baseParts) { - //Find the longest baseName segment match in the config. - //So, do joins on the biggest to smallest lengths of baseParts. - for (j = baseParts.length; j > 0; j -= 1) { - mapValue = getOwn(map, baseParts.slice(0, j).join('/')); - - //baseName segment has config, find if it has one for - //this name. - if (mapValue) { - mapValue = getOwn(mapValue, nameSegment); - if (mapValue) { - //Match, update name to the new value. - foundMap = mapValue; - foundI = i; - break outerLoop; - } - } - } - } - - //Check for a star map match, but just hold on to it, - //if there is a shorter segment match later in a matching - //config, then favor over this star map. - if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { - foundStarMap = getOwn(starMap, nameSegment); - starI = i; - } - } - - if (!foundMap && foundStarMap) { - foundMap = foundStarMap; - foundI = starI; - } - - if (foundMap) { - nameParts.splice(0, foundI, foundMap); - name = nameParts.join('/'); - } - } - - // If the name points to a package's name, use - // the package main instead. - pkgMain = getOwn(config.pkgs, name); - - return pkgMain ? pkgMain : name; - } - - function removeScript(name) { - if (isBrowser) { - each(scripts(), function (scriptNode) { - if (scriptNode.getAttribute('data-requiremodule') === name && - scriptNode.getAttribute('data-requirecontext') === context.contextName) { - scriptNode.parentNode.removeChild(scriptNode); - return true; - } - }); - } - } - - function hasPathFallback(id) { - var pathConfig = getOwn(config.paths, id); - if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { - //Pop off the first array value, since it failed, and - //retry - pathConfig.shift(); - context.REQUIRE.undef(id); - - //Custom REQUIRE that does not do map translation, since - //ID is "absolute", already mapped/resolved. - context.makeRequire(null, { - skipMap: true - })([id]); - - return true; - } - } - - //Turns a plugin!resource to [plugin, resource] - //with the plugin being undefined if the name - //did not have a plugin prefix. - function splitPrefix(name) { - var prefix, - index = name ? name.indexOf('!') : -1; - if (index > -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - return [prefix, name]; - } - - /** - * Creates a module mapping that includes plugin prefix, module - * name, and path. If parentModuleMap is provided it will - * also normalize the name via REQUIRE.normalize() - * - * @param {String} name the module name - * @param {String} [parentModuleMap] parent module map - * for the module name, used to resolve relative names. - * @param {Boolean} isNormalized: is the ID already normalized. - * This is true if this call is done for a DEFINE() module ID. - * @param {Boolean} applyMap: apply the map config to the ID. - * Should only be true if this map is for a dependency. - * - * @returns {Object} - */ - function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { - var url, pluginModule, suffix, nameParts, - prefix = null, - parentName = parentModuleMap ? parentModuleMap.name : null, - originalName = name, - isDefine = true, - normalizedName = ''; - - //If no name, then it means it is a REQUIRE call, generate an - //internal name. - if (!name) { - isDefine = false; - name = '_@r' + (requireCounter += 1); - } - - nameParts = splitPrefix(name); - prefix = nameParts[0]; - name = nameParts[1]; - - if (prefix) { - prefix = normalize(prefix, parentName, applyMap); - pluginModule = getOwn(defined, prefix); - } - - //Account for relative paths if there is a base name. - if (name) { - if (prefix) { - if (isNormalized) { - normalizedName = name; - } else if (pluginModule && pluginModule.normalize) { - //Plugin is loaded, use its normalize method. - normalizedName = pluginModule.normalize(name, function (name) { - return normalize(name, parentName, applyMap); - }); - } else { - // If nested plugin references, then do not try to - // normalize, as it will not normalize correctly. This - // places a restriction on resourceIds, and the longer - // term solution is not to normalize until plugins are - // loaded and all normalizations to allow for async - // loading of a loader plugin. But for now, fixes the - // common uses. Details in #1131 - normalizedName = name.indexOf('!') === -1 ? - normalize(name, parentName, applyMap) : - name; - } - } else { - //A regular module. - normalizedName = normalize(name, parentName, applyMap); - - //Normalized name may be a plugin ID due to map config - //application in normalize. The map config values must - //already be normalized, so do not need to redo that part. - nameParts = splitPrefix(normalizedName); - prefix = nameParts[0]; - normalizedName = nameParts[1]; - isNormalized = true; - - url = context.nameToUrl(normalizedName); - } - } - - //If the id is a plugin id that cannot be determined if it needs - //normalization, stamp it with a unique ID so two matching relative - //ids that may conflict can be separate. - suffix = prefix && !pluginModule && !isNormalized ? - '_unnormalized' + (unnormalizedCounter += 1) : - ''; - - return { - prefix: prefix, - name: normalizedName, - parentMap: parentModuleMap, - unnormalized: !!suffix, - url: url, - originalName: originalName, - isDefine: isDefine, - id: (prefix ? - prefix + '!' + normalizedName : - normalizedName) + suffix - }; - } - - function getModule(depMap) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (!mod) { - mod = registry[id] = new context.Module(depMap); - } - - return mod; - } - - function on(depMap, name, fn) { - var id = depMap.id, - mod = getOwn(registry, id); - - if (hasProp(defined, id) && - (!mod || mod.defineEmitComplete)) { - if (name === 'defined') { - fn(defined[id]); - } - } else { - mod = getModule(depMap); - if (mod.error && name === 'error') { - fn(mod.error); - } else { - mod.on(name, fn); - } - } - } - - function onError(err, errback) { - var ids = err.requireModules, - notified = false; - - if (errback) { - errback(err); - } else { - each(ids, function (id) { - var mod = getOwn(registry, id); - if (mod) { - //Set error on module, so it skips timeout checks. - mod.error = err; - if (mod.events.error) { - notified = true; - mod.emit('error', err); - } - } - }); - - if (!notified) { - req.onError(err); - } - } - } - - /** - * Internal method to transfer globalQueue items to this context's - * defQueue. - */ - function takeGlobalQueue() { - //Push all the globalDefQueue items into the context's defQueue - if (globalDefQueue.length) { - each(globalDefQueue, function(queueItem) { - var id = queueItem[0]; - if (typeof id === 'string') { - context.defQueueMap[id] = true; - } - defQueue.push(queueItem); - }); - globalDefQueue = []; - } - } - - handlers = { - 'REQUIRE': function (mod) { - if (mod.REQUIRE) { - return mod.REQUIRE; - } else { - return (mod.REQUIRE = context.makeRequire(mod.map)); - } - }, - 'exports': function (mod) { - mod.usingExports = true; - if (mod.map.isDefine) { - if (mod.exports) { - return (defined[mod.map.id] = mod.exports); - } else { - return (mod.exports = defined[mod.map.id] = {}); - } - } - }, - 'module': function (mod) { - if (mod.module) { - return mod.module; - } else { - return (mod.module = { - id: mod.map.id, - uri: mod.map.url, - config: function () { - return getOwn(config.config, mod.map.id) || {}; - }, - exports: mod.exports || (mod.exports = {}) - }); - } - } - }; - - function cleanRegistry(id) { - //Clean up machinery used for waiting modules. - delete registry[id]; - delete enabledRegistry[id]; - } - - function breakCycle(mod, traced, processed) { - var id = mod.map.id; - - if (mod.error) { - mod.emit('error', mod.error); - } else { - traced[id] = true; - each(mod.depMaps, function (depMap, i) { - var depId = depMap.id, - dep = getOwn(registry, depId); - - //Only force things that have not completed - //being defined, so still in the registry, - //and only if it has not been matched up - //in the module already. - if (dep && !mod.depMatched[i] && !processed[depId]) { - if (getOwn(traced, depId)) { - mod.defineDep(i, defined[depId]); - mod.check(); //pass false? - } else { - breakCycle(dep, traced, processed); - } - } - }); - processed[id] = true; - } - } - - function checkLoaded() { - var err, usingPathFallback, - waitInterval = config.waitSeconds * 1000, - //It is possible to disable the wait interval by using waitSeconds of 0. - expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), - noLoads = [], - reqCalls = [], - stillLoading = false, - needCycleCheck = true; - - //Do not bother if this call was a result of a cycle break. - if (inCheckLoaded) { - return; - } - - inCheckLoaded = true; - - //Figure out the state of all the modules. - eachProp(enabledRegistry, function (mod) { - var map = mod.map, - modId = map.id; - - //Skip things that are not enabled or in error state. - if (!mod.enabled) { - return; - } - - if (!map.isDefine) { - reqCalls.push(mod); - } - - if (!mod.error) { - //If the module should be executed, and it has not - //been inited and time is up, remember it. - if (!mod.inited && expired) { - if (hasPathFallback(modId)) { - usingPathFallback = true; - stillLoading = true; - } else { - noLoads.push(modId); - removeScript(modId); - } - } else if (!mod.inited && mod.fetched && map.isDefine) { - stillLoading = true; - if (!map.prefix) { - //No reason to keep looking for unfinished - //loading. If the only stillLoading is a - //plugin resource though, keep going, - //because it may be that a plugin resource - //is waiting on a non-plugin cycle. - return (needCycleCheck = false); - } - } - } - }); - - if (expired && noLoads.length) { - //If wait time expired, throw error of unloaded modules. - err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); - err.contextName = context.contextName; - return onError(err); - } - - //Not expired, check for a cycle. - if (needCycleCheck) { - each(reqCalls, function (mod) { - breakCycle(mod, {}, {}); - }); - } - - //If still waiting on loads, and the waiting load is something - //other than a plugin resource, or there are still outstanding - //scripts, then just try back later. - if ((!expired || usingPathFallback) && stillLoading) { - //Something is still waiting to load. Wait for it, but only - //if a timeout is not already in effect. - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function () { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - } - - inCheckLoaded = false; - } - - Module = function (map) { - this.events = getOwn(undefEvents, map.id) || {}; - this.map = map; - this.shim = getOwn(config.shim, map.id); - this.depExports = []; - this.depMaps = []; - this.depMatched = []; - this.pluginMaps = {}; - this.depCount = 0; - - /* this.exports this.factory - this.depMaps = [], - this.enabled, this.fetched - */ - }; - - Module.prototype = { - init: function (depMaps, factory, errback, options) { - options = options || {}; - - //Do not do more inits if already done. Can happen if there - //are multiple DEFINE calls for the same module. That is not - //a normal, common case, but it is also not unexpected. - if (this.inited) { - return; - } - - this.factory = factory; - - if (errback) { - //Register for errors on this module. - this.on('error', errback); - } else if (this.events.error) { - //If no errback already, but there are error listeners - //on this module, set up an errback to pass to the deps. - errback = bind(this, function (err) { - this.emit('error', err); - }); - } - - //Do a copy of the dependency array, so that - //source inputs are not modified. For example - //"shim" deps are passed in here directly, and - //doing a direct modification of the depMaps array - //would affect that config. - this.depMaps = depMaps && depMaps.slice(0); - - this.errback = errback; - - //Indicate this module has be initialized - this.inited = true; - - this.ignore = options.ignore; - - //Could have option to init this module in enabled mode, - //or could have been previously marked as enabled. However, - //the dependencies are not known until init is called. So - //if enabled previously, now trigger dependencies as enabled. - if (options.enabled || this.enabled) { - //Enable this module and dependencies. - //Will call this.check() - this.enable(); - } else { - this.check(); - } - }, - - defineDep: function (i, depExports) { - //Because of cycles, defined callback for a given - //export can be called more than once. - if (!this.depMatched[i]) { - this.depMatched[i] = true; - this.depCount -= 1; - this.depExports[i] = depExports; - } - }, - - fetch: function () { - if (this.fetched) { - return; - } - this.fetched = true; - - context.startTime = (new Date()).getTime(); - - var map = this.map; - - //If the manager is for a plugin managed resource, - //ask the plugin to load it now. - if (this.shim) { - context.makeRequire(this.map, { - enableBuildCallback: true - })(this.shim.deps || [], bind(this, function () { - return map.prefix ? this.callPlugin() : this.load(); - })); - } else { - //Regular dependency. - return map.prefix ? this.callPlugin() : this.load(); - } - }, - - load: function () { - var url = this.map.url; - - //Regular dependency. - if (!urlFetched[url]) { - urlFetched[url] = true; - context.load(this.map.id, url); - } - }, - - /** - * Checks if the module is ready to DEFINE itself, and if so, - * DEFINE it. - */ - check: function () { - if (!this.enabled || this.enabling) { - return; - } - - var err, cjsModule, - id = this.map.id, - depExports = this.depExports, - exports = this.exports, - factory = this.factory; - - if (!this.inited) { - // Only fetch if not already in the defQueue. - if (!hasProp(context.defQueueMap, id)) { - this.fetch(); - } - } else if (this.error) { - this.emit('error', this.error); - } else if (!this.defining) { - //The factory could trigger another REQUIRE call - //that would result in checking this module to - //DEFINE itself again. If already in the process - //of doing that, skip this work. - this.defining = true; - - if (this.depCount < 1 && !this.defined) { - if (isFunction(factory)) { - //If there is an error listener, favor passing - //to that instead of throwing an error. However, - //only do it for DEFINE()'d modules. REQUIRE - //errbacks should not be called for failures in - //their callbacks (#699). However if a global - //onError is set, use that. - if ((this.events.error && this.map.isDefine) || - req.onError !== defaultOnError) { - try { - exports = context.execCb(id, factory, depExports, exports); - } catch (e) { - err = e; - } - } else { - exports = context.execCb(id, factory, depExports, exports); - } - - // Favor return value over exports. If node/cjs in play, - // then will not have a return value anyway. Favor - // module.exports assignment over exports object. - if (this.map.isDefine && exports === undefined) { - cjsModule = this.module; - if (cjsModule) { - exports = cjsModule.exports; - } else if (this.usingExports) { - //exports already set the defined value. - exports = this.exports; - } - } - - if (err) { - err.requireMap = this.map; - err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? 'DEFINE' : 'REQUIRE'; - return onError((this.error = err)); - } - - } else { - //Just a literal value - exports = factory; - } - - this.exports = exports; - - if (this.map.isDefine && !this.ignore) { - defined[id] = exports; - - if (req.onResourceLoad) { - var resLoadMaps = []; - each(this.depMaps, function (depMap) { - resLoadMaps.push(depMap.normalizedMap || depMap); - }); - req.onResourceLoad(context, this.map, resLoadMaps); - } - } - - //Clean up - cleanRegistry(id); - - this.defined = true; - } - - //Finished the DEFINE stage. Allow calling check again - //to allow DEFINE notifications below in the case of a - //cycle. - this.defining = false; - - if (this.defined && !this.defineEmitted) { - this.defineEmitted = true; - this.emit('defined', this.exports); - this.defineEmitComplete = true; - } - - } - }, - - callPlugin: function () { - var map = this.map, - id = map.id, - //Map already normalized the prefix. - pluginMap = makeModuleMap(map.prefix); - - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(pluginMap); - - on(pluginMap, 'defined', bind(this, function (plugin) { - var load, normalizedMap, normalizedMod, - bundleId = getOwn(bundlesMap, this.map.id), - name = this.map.name, - parentName = this.map.parentMap ? this.map.parentMap.name : null, - localRequire = context.makeRequire(map.parentMap, { - enableBuildCallback: true - }); - - //If current map is not normalized, wait for that - //normalized name to load instead of continuing. - if (this.map.unnormalized) { - //Normalize the ID if the plugin allows it. - if (plugin.normalize) { - name = plugin.normalize(name, function (name) { - return normalize(name, parentName, true); - }) || ''; - } - - //prefix and name should already be normalized, no need - //for applying map config again either. - normalizedMap = makeModuleMap(map.prefix + '!' + name, - this.map.parentMap, - true); - on(normalizedMap, - 'defined', bind(this, function (value) { - this.map.normalizedMap = normalizedMap; - this.init([], function () { return value; }, null, { - enabled: true, - ignore: true - }); - })); - - normalizedMod = getOwn(registry, normalizedMap.id); - if (normalizedMod) { - //Mark this as a dependency for this plugin, so it - //can be traced for cycles. - this.depMaps.push(normalizedMap); - - if (this.events.error) { - normalizedMod.on('error', bind(this, function (err) { - this.emit('error', err); - })); - } - normalizedMod.enable(); - } - - return; - } - - //If a paths config, then just load that file instead to - //resolve the plugin, as it is built into that paths layer. - if (bundleId) { - this.map.url = context.nameToUrl(bundleId); - this.load(); - return; - } - - load = bind(this, function (value) { - this.init([], function () { return value; }, null, { - enabled: true - }); - }); - - load.error = bind(this, function (err) { - this.inited = true; - this.error = err; - err.requireModules = [id]; - - //Remove temp unnormalized modules for this module, - //since they will never be resolved otherwise now. - eachProp(registry, function (mod) { - if (mod.map.id.indexOf(id + '_unnormalized') === 0) { - cleanRegistry(mod.map.id); - } - }); - - onError(err); - }); - - //Allow plugins to load other code without having to know the - //context or how to 'complete' the load. - load.fromText = bind(this, function (text, textAlt) { - /*jslint evil: true */ - var moduleName = map.name, - moduleMap = makeModuleMap(moduleName), - hasInteractive = useInteractive; - - //As of 2.1.0, support just passing the text, to reinforce - //fromText only being called once per resource. Still - //support old style of passing moduleName but discard - //that moduleName in favor of the internal ref. - if (textAlt) { - text = textAlt; - } - - //Turn off interactive script matching for IE for any DEFINE - //calls in the text, then turn it back on at the end. - if (hasInteractive) { - useInteractive = false; - } - - //Prime the system by creating a module instance for - //it. - getModule(moduleMap); - - //Transfer any config to this other module. - if (hasProp(config.config, id)) { - config.config[moduleName] = config.config[id]; - } - - try { - req.exec(text); - } catch (e) { - return onError(makeError('fromtexteval', - 'fromText eval for ' + id + - ' failed: ' + e, - e, - [id])); - } - - if (hasInteractive) { - useInteractive = true; - } - - //Mark this as a dependency for the plugin - //resource - this.depMaps.push(moduleMap); - - //Support anonymous modules. - context.completeLoad(moduleName); - - //Bind the value of that module to the value for this - //resource ID. - localRequire([moduleName], load); - }); - - //Use parentName here since the plugin's name is not reliable, - //could be some weird string with no path that actually wants to - //reference the parentName's path. - plugin.load(map.name, localRequire, load, config); - })); - - context.enable(pluginMap, this); - this.pluginMaps[pluginMap.id] = pluginMap; - }, - - enable: function () { - enabledRegistry[this.map.id] = this; - this.enabled = true; - - //Set flag mentioning that the module is enabling, - //so that immediate calls to the defined callbacks - //for dependencies do not trigger inadvertent load - //with the depCount still being zero. - this.enabling = true; - - //Enable each dependency - each(this.depMaps, bind(this, function (depMap, i) { - var id, mod, handler; - - if (typeof depMap === 'string') { - //Dependency needs to be converted to a depMap - //and wired up to this module. - depMap = makeModuleMap(depMap, - (this.map.isDefine ? this.map : this.map.parentMap), - false, - !this.skipMap); - this.depMaps[i] = depMap; - - handler = getOwn(handlers, depMap.id); - - if (handler) { - this.depExports[i] = handler(this); - return; - } - - this.depCount += 1; - - on(depMap, 'defined', bind(this, function (depExports) { - if (this.undefed) { - return; - } - this.defineDep(i, depExports); - this.check(); - })); - - if (this.errback) { - on(depMap, 'error', bind(this, this.errback)); - } else if (this.events.error) { - // No direct errback on this module, but something - // else is listening for errors, so be sure to - // propagate the error correctly. - on(depMap, 'error', bind(this, function(err) { - this.emit('error', err); - })); - } - } - - id = depMap.id; - mod = registry[id]; - - //Skip special modules like 'REQUIRE', 'exports', 'module' - //Also, don't call enable if it is already enabled, - //important in circular dependency cases. - if (!hasProp(handlers, id) && mod && !mod.enabled) { - context.enable(depMap, this); - } - })); - - //Enable each plugin that is used in - //a dependency - eachProp(this.pluginMaps, bind(this, function (pluginMap) { - var mod = getOwn(registry, pluginMap.id); - if (mod && !mod.enabled) { - context.enable(pluginMap, this); - } - })); - - this.enabling = false; - - this.check(); - }, - - on: function (name, cb) { - var cbs = this.events[name]; - if (!cbs) { - cbs = this.events[name] = []; - } - cbs.push(cb); - }, - - emit: function (name, evt) { - each(this.events[name], function (cb) { - cb(evt); - }); - if (name === 'error') { - //Now that the error handler was triggered, remove - //the listeners, since this broken Module instance - //can stay around for a while in the registry. - delete this.events[name]; - } - } - }; - - function callGetModule(args) { - //Skip modules already defined. - if (!hasProp(defined, args[0])) { - getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); - } - } - - function removeListener(node, func, name, ieName) { - //Favor detachEvent because of IE9 - //issue, see attachEvent/addEventListener comment elsewhere - //in this file. - if (node.detachEvent && !isOpera) { - //Probably IE. If not it will throw an error, which will be - //useful to know. - if (ieName) { - node.detachEvent(ieName, func); - } - } else { - node.removeEventListener(name, func, false); - } - } - - /** - * Given an event from a script node, get the REQUIREJS info from it, - * and then removes the event listeners on the node. - * @param {Event} evt - * @returns {Object} - */ - function getScriptData(evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - var node = evt.currentTarget || evt.srcElement; - - //Remove the listeners once here. - removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); - removeListener(node, context.onScriptError, 'error'); - - return { - node: node, - id: node && node.getAttribute('data-requiremodule') - }; - } - - function intakeDefines() { - var args; - - //Any defined modules in the global queue, intake them now. - takeGlobalQueue(); - - //Make sure any remaining defQueue items get properly processed. - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return onError(makeError('mismatch', 'Mismatched anonymous DEFINE() module: ' + - args[args.length - 1])); - } else { - //args are id, deps, factory. Should be normalized by the - //DEFINE() function. - callGetModule(args); - } - } - context.defQueueMap = {}; - } - - context = { - config: config, - contextName: contextName, - registry: registry, - defined: defined, - urlFetched: urlFetched, - defQueue: defQueue, - defQueueMap: {}, - Module: Module, - makeModuleMap: makeModuleMap, - nextTick: req.nextTick, - onError: onError, - - /** - * Set a configuration for the context. - * @param {Object} cfg config object to integrate. - */ - configure: function (cfg) { - //Make sure the baseUrl ends in a slash. - if (cfg.baseUrl) { - if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { - cfg.baseUrl += '/'; - } - } - - // Convert old style urlArgs string to a function. - if (typeof cfg.urlArgs === 'string') { - var urlArgs = cfg.urlArgs; - cfg.urlArgs = function(id, url) { - return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; - }; - } - - //Save off the paths since they REQUIRE special processing, - //they are additive. - var shim = config.shim, - objs = { - paths: true, - bundles: true, - config: true, - map: true - }; - - eachProp(cfg, function (value, prop) { - if (objs[prop]) { - if (!config[prop]) { - config[prop] = {}; - } - mixin(config[prop], value, true, true); - } else { - config[prop] = value; - } - }); - - //Reverse map the bundles - if (cfg.bundles) { - eachProp(cfg.bundles, function (value, prop) { - each(value, function (v) { - if (v !== prop) { - bundlesMap[v] = prop; - } - }); - }); - } - - //Merge shim - if (cfg.shim) { - eachProp(cfg.shim, function (value, id) { - //Normalize the structure - if (isArray(value)) { - value = { - deps: value - }; - } - if ((value.exports || value.init) && !value.exportsFn) { - value.exportsFn = context.makeShimExports(value); - } - shim[id] = value; - }); - config.shim = shim; - } - - //Adjust packages if necessary. - if (cfg.packages) { - each(cfg.packages, function (pkgObj) { - var location, name; - - pkgObj = typeof pkgObj === 'string' ? {name: pkgObj} : pkgObj; - - name = pkgObj.name; - location = pkgObj.location; - if (location) { - config.paths[name] = pkgObj.location; - } - - //Save pointer to main module ID for pkg name. - //Remove leading dot in main, so main paths are normalized, - //and remove any trailing .js, since different package - //envs have different conventions: some use a module name, - //some use a file name. - config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') - .replace(currDirRegExp, '') - .replace(jsSuffixRegExp, ''); - }); - } - - //If there are any "waiting to execute" modules in the registry, - //update the maps for them, since their info, like URLs to load, - //may have changed. - eachProp(registry, function (mod, id) { - //If module already has init called, since it is too - //late to modify them, and ignore unnormalized ones - //since they are transient. - if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id, null, true); - } - }); - - //If a deps array or a config callback is specified, then call - //REQUIRE with those args. This is useful when REQUIRE is defined as a - //config object before REQUIRE.js is loaded. - if (cfg.deps || cfg.callback) { - context.REQUIRE(cfg.deps || [], cfg.callback); - } - }, - - makeShimExports: function (value) { - function fn() { - var ret; - if (value.init) { - ret = value.init.apply(global, arguments); - } - return ret || (value.exports && getGlobal(value.exports)); - } - return fn; - }, - - makeRequire: function (relMap, options) { - options = options || {}; - - function localRequire(deps, callback, errback) { - var id, map, requireMod; - - if (options.enableBuildCallback && callback && isFunction(callback)) { - callback.__requireJsBuild = true; - } - - if (typeof deps === 'string') { - if (isFunction(callback)) { - //Invalid call - return onError(makeError('requireargs', 'Invalid REQUIRE call'), errback); - } - - //If REQUIRE|exports|module are requested, get the - //value for them from the special handlers. Caveat: - //this only works while module is being defined. - if (relMap && hasProp(handlers, deps)) { - return handlers[deps](registry[relMap.id]); - } - - //Synchronous access to one module. If REQUIRE.get is - //available (as in the Node adapter), prefer that. - if (req.get) { - return req.get(context, deps, relMap, localRequire); - } - - //Normalize module name, if it contains . or .. - map = makeModuleMap(deps, relMap, false, true); - id = map.id; - - if (!hasProp(defined, id)) { - return onError(makeError('notloaded', 'Module name "' + - id + - '" has not been loaded yet for context: ' + - contextName + - (relMap ? '' : '. Use REQUIRE([])'))); - } - return defined[id]; - } - - //Grab defines waiting in the global queue. - intakeDefines(); - - //Mark all the dependencies as needing to be loaded. - context.nextTick(function () { - //Some defines could have been added since the - //REQUIRE call, collect them. - intakeDefines(); - - requireMod = getModule(makeModuleMap(null, relMap)); - - //Store if map config should be applied to this REQUIRE - //call for dependencies. - requireMod.skipMap = options.skipMap; - - requireMod.init(deps, callback, errback, { - enabled: true - }); - - checkLoaded(); - }); - - return localRequire; - } - - mixin(localRequire, { - isBrowser: isBrowser, - - /** - * Converts a module name + .extension into an URL path. - * *Requires* the use of a module name. It does not support using - * plain URLs like nameToUrl. - */ - toUrl: function (moduleNamePlusExt) { - var ext, - index = moduleNamePlusExt.lastIndexOf('.'), - segment = moduleNamePlusExt.split('/')[0], - isRelative = segment === '.' || segment === '..'; - - //Have a file extension alias, and it is not the - //dots from a relative path. - if (index !== -1 && (!isRelative || index > 1)) { - ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - - return context.nameToUrl(normalize(moduleNamePlusExt, - relMap && relMap.id, true), ext, true); - }, - - defined: function (id) { - return hasProp(defined, makeModuleMap(id, relMap, false, true).id); - }, - - specified: function (id) { - id = makeModuleMap(id, relMap, false, true).id; - return hasProp(defined, id) || hasProp(registry, id); - } - }); - - //Only allow undef on top level REQUIRE calls - if (!relMap) { - localRequire.undef = function (id) { - //Bind any waiting DEFINE() calls to this context, - //fix for #408 - takeGlobalQueue(); - - var map = makeModuleMap(id, relMap, true), - mod = getOwn(registry, id); - - mod.undefed = true; - removeScript(id); - - delete defined[id]; - delete urlFetched[map.url]; - delete undefEvents[id]; - - //Clean queued defines too. Go backwards - //in array so that the splices do not - //mess up the iteration. - eachReverse(defQueue, function(args, i) { - if (args[0] === id) { - defQueue.splice(i, 1); - } - }); - delete context.defQueueMap[id]; - - if (mod) { - //Hold on to listeners in case the - //module will be attempted to be reloaded - //using a different config. - if (mod.events.defined) { - undefEvents[id] = mod.events; - } - - cleanRegistry(id); - } - }; - } - - return localRequire; - }, - - /** - * Called to enable a module if it is still in the registry - * awaiting enablement. A second arg, parent, the parent module, - * is passed in for context, when this method is overridden by - * the optimizer. Not shown here to keep code compact. - */ - enable: function (depMap) { - var mod = getOwn(registry, depMap.id); - if (mod) { - getModule(depMap).enable(); - } - }, - - /** - * Internal method used by environment adapters to complete a load event. - * A load event could be a script load or just a load pass from a synchronous - * load call. - * @param {String} moduleName the name of the module to potentially complete. - */ - completeLoad: function (moduleName) { - var found, args, mod, - shim = getOwn(config.shim, moduleName) || {}, - shExports = shim.exports; - - takeGlobalQueue(); - - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - args[0] = moduleName; - //If already found an anonymous module and bound it - //to this name, then this is some other anon module - //waiting for its completeLoad to fire. - if (found) { - break; - } - found = true; - } else if (args[0] === moduleName) { - //Found matching DEFINE call for this script! - found = true; - } - - callGetModule(args); - } - context.defQueueMap = {}; - - //Do this after the cycle of callGetModule in case the result - //of those calls/init calls changes the registry. - mod = getOwn(registry, moduleName); - - if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { - if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { - if (hasPathFallback(moduleName)) { - return; - } else { - return onError(makeError('nodefine', - 'No DEFINE call for ' + moduleName, - null, - [moduleName])); - } - } else { - //A script that does not call DEFINE(), so just simulate - //the call for it. - callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); - } - } - - checkLoaded(); - }, - - /** - * Converts a module name to a file path. Supports cases where - * moduleName may actually be just an URL. - * Note that it **does not** call normalize on the moduleName, - * it is assumed to have already been normalized. This is an - * internal API, not a public one. Use toUrl for the public API. - */ - nameToUrl: function (moduleName, ext, skipExt) { - var paths, syms, i, parentModule, url, - parentPath, bundleId, - pkgMain = getOwn(config.pkgs, moduleName); - - if (pkgMain) { - moduleName = pkgMain; - } - - bundleId = getOwn(bundlesMap, moduleName); - - if (bundleId) { - return context.nameToUrl(bundleId, ext, skipExt); - } - - //If a colon is in the URL, it indicates a protocol is used and it is just - //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) - //or ends with .js, then assume the user meant to use an url and not a module id. - //The slash is important for protocol-less URLs as well as full paths. - if (req.jsExtRegExp.test(moduleName)) { - //Just a plain path, not module name lookup, so just return it. - //Add extension if it is included. This is a bit wonky, only non-.js things pass - //an extension, this method probably needs to be reworked. - url = moduleName + (ext || ''); - } else { - //A module that needs to be converted to a path. - paths = config.paths; - - syms = moduleName.split('/'); - //For each module name segment, see if there is a path - //registered for it. Start with most specific name - //and work up from it. - for (i = syms.length; i > 0; i -= 1) { - parentModule = syms.slice(0, i).join('/'); - - parentPath = getOwn(paths, parentModule); - if (parentPath) { - //If an array, it means there are a few choices, - //Choose the one that is desired - if (isArray(parentPath)) { - parentPath = parentPath[0]; - } - syms.splice(0, i, parentPath); - break; - } - } - - //Join the path parts together, then figure out if baseUrl is needed. - url = syms.join('/'); - url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); - url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; - } - - return config.urlArgs && !/^blob\:/.test(url) ? - url + config.urlArgs(moduleName, url) : url; - }, - - //Delegates to req.load. Broken out as a separate function to - //allow overriding in the optimizer. - load: function (id, url) { - req.load(context, id, url); - }, - - /** - * Executes a module callback function. Broken out as a separate function - * solely to allow the build system to sequence the files in the built - * layer in the right sequence. - * - * @private - */ - execCb: function (name, callback, args, exports) { - return callback.apply(exports, args); - }, - - /** - * callback for script loads, used to check status of loading. - * - * @param {Event} evt the event from the browser for the script - * that was loaded. - */ - onScriptLoad: function (evt) { - //Using currentTarget instead of target for Firefox 2.0's sake. Not - //all old browsers will be supported, but this one was easy enough - //to support and still makes sense. - if (evt.type === 'load' || - (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { - //Reset interactive script so a script node is not held onto for - //to long. - interactiveScript = null; - - //Pull out the name of the module and the context. - var data = getScriptData(evt); - context.completeLoad(data.id); - } - }, - - /** - * Callback for script errors. - */ - onScriptError: function (evt) { - var data = getScriptData(evt); - if (!hasPathFallback(data.id)) { - var parents = []; - eachProp(registry, function(value, key) { - if (key.indexOf('_@r') !== 0) { - each(value.depMaps, function(depMap) { - if (depMap.id === data.id) { - parents.push(key); - return true; - } - }); - } - }); - return onError(makeError('scripterror', 'Script error for "' + data.id + - (parents.length ? - '", needed by: ' + parents.join(', ') : - '"'), evt, [data.id])); - } - } - }; - - context.REQUIRE = context.makeRequire(); - return context; - } - - /** - * Main entry point. - * - * If the only argument to REQUIRE is a string, then the module that - * is represented by that string is fetched for the appropriate context. - * - * If the first argument is an array, then it will be treated as an array - * of dependency string names to fetch. An optional function callback can - * be specified to execute when all of those dependencies are available. - * - * Make a local req variable to help Caja compliance (it assumes things - * on a REQUIRE that are not standardized), and to give a short - * name for minification/local scope use. - */ - req = REQUIREJS = function (deps, callback, errback, optional) { - - //Find the right context, use default - var context, config, - contextName = defContextName; - - // Determine if have config object in the call. - if (!isArray(deps) && typeof deps !== 'string') { - // deps is a config object - config = deps; - if (isArray(callback)) { - // Adjust args if there are dependencies - deps = callback; - callback = errback; - errback = optional; - } else { - deps = []; - } - } - - if (config && config.context) { - contextName = config.context; - } - - context = getOwn(contexts, contextName); - if (!context) { - context = contexts[contextName] = req.s.newContext(contextName); - } - - if (config) { - context.configure(config); - } - - return context.REQUIRE(deps, callback, errback); - }; - - /** - * Support REQUIRE.config() to make it easier to cooperate with other - * AMD loaders on globally agreed names. - */ - req.config = function (config) { - return req(config); - }; - - /** - * Execute something after the current tick - * of the event loop. Override for other envs - * that have a better solution than setTimeout. - * @param {Function} fn function to execute later. - */ - req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { - setTimeout(fn, 4); - } : function (fn) { fn(); }; - - /** - * Export REQUIRE as a global, but only if it does not already exist. - */ - if (!REQUIRE) { - REQUIRE = req; - } - - req.version = version; - - //Used to filter out dependencies that are already paths. - req.jsExtRegExp = /^\/|:|\?|\.js$/; - req.isBrowser = isBrowser; - s = req.s = { - contexts: contexts, - newContext: newContext - }; - - //Create default context. - req({}); - - //Exports some context-sensitive methods on global REQUIRE. - each([ - 'toUrl', - 'undef', - 'defined', - 'specified' - ], function (prop) { - //Reference from contexts instead of early binding to default context, - //so that during builds, the latest instance of the default context - //with its config gets used. - req[prop] = function () { - var ctx = contexts[defContextName]; - return ctx.REQUIRE[prop].apply(ctx, arguments); - }; - }); - - if (isBrowser) { - head = s.head = document.getElementsByTagName('head')[0]; - //If BASE tag is in play, using appendChild is a problem for IE6. - //When that browser dies, this can be removed. Details in this jQuery bug: - //http://dev.jquery.com/ticket/2709 - baseElement = document.getElementsByTagName('base')[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - - /** - * Any errors that REQUIRE explicitly generates will be passed to this - * function. Intercept/override it if you want custom error handling. - * @param {Error} err the error object. - */ - req.onError = defaultOnError; - - /** - * Creates the node for the load command. Only used in browser envs. - */ - req.createNode = function (config, moduleName, url) { - var node = config.xhtml ? - document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : - document.createElement('script'); - node.type = config.scriptType || 'text/javascript'; - node.charset = 'utf-8'; - node.async = true; - return node; - }; - - /** - * Does the request to load a module for the browser case. - * Make this a separate function to allow other environments - * to override it. - * - * @param {Object} context the REQUIRE context to find state. - * @param {String} moduleName the name of the module. - * @param {Object} url the URL to the module. - */ - req.load = function (context, moduleName, url) { - var config = (context && context.config) || {}, - node; - if (isBrowser) { - //In the browser so use a script tag - node = req.createNode(config, moduleName, url); - - node.setAttribute('data-requirecontext', context.contextName); - node.setAttribute('data-requiremodule', moduleName); - - //Set up load listener. Test attachEvent first because IE9 has - //a subtle issue in its addEventListener and script onload firings - //that do not match the behavior of all other browsers with - //addEventListener support, which fire the onload event for a - //script right after the script execution. See: - //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution - //UNFORTUNATELY Opera implements attachEvent but does not follow the script - //script execution mode. - if (node.attachEvent && - //Check if node.attachEvent is artificially added by custom script or - //natively supported by browser - //read https://github.com/REQUIREJS/REQUIREJS/issues/187 - //if we can NOT find [native code] then it must NOT natively supported. - //in IE8, node.attachEvent does not have toString() - //Note the test for "[native code" with no closing brace, see: - //https://github.com/REQUIREJS/REQUIREJS/issues/273 - !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && - !isOpera) { - //Probably IE. IE (at least 6-8) do not fire - //script onload right after executing the script, so - //we cannot tie the anonymous DEFINE call to a name. - //However, IE reports the script as being in 'interactive' - //readyState at the time of the DEFINE call. - useInteractive = true; - - node.attachEvent('onreadystatechange', context.onScriptLoad); - //It would be great to add an error handler here to catch - //404s in IE9+. However, onreadystatechange will fire before - //the error handler, so that does not help. If addEventListener - //is used, then IE will fire error before load, but we cannot - //use that pathway given the connect.microsoft.com issue - //mentioned above about not doing the 'script execute, - //then fire the script load event listener before execute - //next script' that other browsers do. - //Best hope: IE10 fixes the issues, - //and then destroys all installs of IE 6-9. - //node.attachEvent('onerror', context.onScriptError); - } else { - node.addEventListener('load', context.onScriptLoad, false); - node.addEventListener('error', context.onScriptError, false); - } - node.src = url; - - //Calling onNodeCreated after all properties on the node have been - //set, but before it is placed in the DOM. - if (config.onNodeCreated) { - config.onNodeCreated(node, config, moduleName, url); - } - - //For some cache cases in IE 6-8, the script executes before the end - //of the appendChild execution, so to tie an anonymous DEFINE - //call to the module name (which is stored on the node), hold on - //to a reference to this node, but clear after the DOM insertion. - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - - return node; - } else if (isWebWorker) { - try { - //In a web worker, use importScripts. This is not a very - //efficient use of importScripts, importScripts will block until - //its script is downloaded and evaluated. However, if web workers - //are in play, the expectation is that a build has been done so - //that only one script needs to be loaded anyway. This may need - //to be reevaluated if other use cases become common. - - // Post a task to the event loop to work around a bug in WebKit - // where the worker gets garbage-collected after calling - // importScripts(): https://webkit.org/b/153317 - setTimeout(function() {}, 0); - importScripts(url); - - //Account for anonymous modules - context.completeLoad(moduleName); - } catch (e) { - context.onError(makeError('importscripts', - 'importScripts failed for ' + - moduleName + ' at ' + url, - e, - [moduleName])); - } - } - }; - - function getInteractiveScript() { - if (interactiveScript && interactiveScript.readyState === 'interactive') { - return interactiveScript; - } - - eachReverse(scripts(), function (script) { - if (script.readyState === 'interactive') { - return (interactiveScript = script); - } - }); - return interactiveScript; - } - - //Look for a data-main script attribute, which could also adjust the baseUrl. - if (isBrowser && !cfg.skipDataMain) { - //Figure out baseUrl. Get it from the script tag with REQUIRE.js in it. - eachReverse(scripts(), function (script) { - //Set the 'head' where we can append children by - //using the script's parent. - if (!head) { - head = script.parentNode; - } - - //Look for a data-main attribute to set main script for the page - //to load. If it is there, the path to data main becomes the - //baseUrl, if it is not already set. - dataMain = script.getAttribute('data-main'); - if (dataMain) { - //Preserve dataMain in case it is a path (i.e. contains '?') - mainScript = dataMain; - - //Set final baseUrl if there is not already an explicit one, - //but only do so if the data-main value is not a loader plugin - //module ID. - if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { - //Pull off the directory of data-main for use as the - //baseUrl. - src = mainScript.split('/'); - mainScript = src.pop(); - subPath = src.length ? src.join('/') + '/' : './'; - - cfg.baseUrl = subPath; - } - - //Strip off any trailing .js since mainScript is now - //like a module name. - mainScript = mainScript.replace(jsSuffixRegExp, ''); - - //If mainScript is still a path, fall back to dataMain - if (req.jsExtRegExp.test(mainScript)) { - mainScript = dataMain; - } - - //Put the data-main script in the files to load. - cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; - - return true; - } - }); - } - - /** - * The function that handles definitions of modules. Differs from - * REQUIRE() in that a string for the module should be the first argument, - * and the function to execute after dependencies are loaded should - * return a value to DEFINE the module corresponding to the first argument's - * name. - */ - DEFINE = function (name, deps, callback) { - var node, context; - - //Allow for anonymous modules - if (typeof name !== 'string') { - //Adjust args appropriately - callback = deps; - deps = name; - name = null; - } - - //This module may not have dependencies - if (!isArray(deps)) { - callback = deps; - deps = null; - } - - //If no name, and callback is a function, then figure out if it a - //CommonJS thing with dependencies. - if (!deps && isFunction(callback)) { - deps = []; - //Remove comments from the callback string, - //look for REQUIRE calls, and pull them into the dependencies, - //but only if there are function args. - if (callback.length) { - callback - .toString() - .replace(commentRegExp, commentReplace) - .replace(cjsRequireRegExp, function (match, dep) { - deps.push(dep); - }); - - //May be a CommonJS thing even without REQUIRE calls, but still - //could use exports, and module. Avoid doing exports and module - //work though if it just needs REQUIRE. - //REQUIRES the function to expect the CommonJS variables in the - //order listed below. - deps = (callback.length === 1 ? ['REQUIRE'] : ['REQUIRE', 'exports', 'module']).concat(deps); - } - } - - //If in IE 6-8 and hit an anonymous DEFINE() call, do the interactive - //work. - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute('data-requiremodule'); - } - context = contexts[node.getAttribute('data-requirecontext')]; - } - } - - //Always save off evaluating the def call until the script onload handler. - //This allows multiple modules to be in a file without prematurely - //tracing dependencies, and allows for anonymous module support, - //where the module name is not known until the script onload event - //occurs. If no context, use the global queue, and get it processed - //in the onscript load callback. - if (context) { - context.defQueue.push([name, deps, callback]); - context.defQueueMap[name] = true; - } else { - globalDefQueue.push([name, deps, callback]); - } - }; - - DEFINE.amd = { - jQuery: true - }; - - /** - * Executes the text. Normally just uses eval, but can be modified - * to use a better, environment-specific call. Only used for transpiling - * loader plugins, not for plain JS modules. - * @param {String} text the text to execute/evaluate. - */ - req.exec = function (text) { - /*jslint evil: true */ - return eval(text); - }; - - //Set up with config info. - req(cfg); -}(this, (typeof setTimeout === 'undefined' ? undefined : setTimeout))); diff --git a/Deprecated-Code/WebServer/package.json b/Deprecated-Code/WebServer/package.json deleted file mode 100644 index e3c6ed743..000000000 --- a/Deprecated-Code/WebServer/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "WebServer", - "version": "0.1.0", - "description": "Superalgos Web Server", - "main": "server.js", - "author": "Superalgos", - "license": "Apache-2.0", - "repository": { - "type": "git", - "url": "https://github.com/Superalgos/WebServer.git" - }, - "dependencies": { - "axios": "0.19.0", - "ccxt": "^1.23.67", - "dotenv": "8.0.0", - "open": "^6.4.0", - "rimraf": "^3.0.2" - } -} diff --git a/Deprecated-Code/WebServer/webServer.js b/Deprecated-Code/WebServer/webServer.js deleted file mode 100644 index e0134a845..000000000 --- a/Deprecated-Code/WebServer/webServer.js +++ /dev/null @@ -1,653 +0,0 @@ - -require('dotenv').config() -const { fork } = require('child_process') -const open = require('open') - -CONSOLE_LOG = process.env.CONSOLE_LOG === 'true' -CONSOLE_ERROR_LOG = process.env.CONSOLE_ERROR_LOG === 'true' -LOG_FILE_CONTENT = process.env.LOG_FILE_CONTENT === 'true' - -global.DEFAULT_OK_RESPONSE = { - result: 'Ok', - message: 'Operation Succeeded' -} - -global.DEFAULT_FAIL_RESPONSE = { - result: 'Fail', - message: 'Operation Failed' -} - -global.DEFAULT_RETRY_RESPONSE = { - result: 'Retry', - message: 'Retry Later' -} - -global.CUSTOM_OK_RESPONSE = { - result: 'Ok, but check Message', - message: 'Custom Message' -} - -global.CUSTOM_FAIL_RESPONSE = { - result: 'Fail Because', - message: 'Custom Message' -} - -let port = process.env.WEB_SERVER_PORT - -process.on('uncaughtException', function (err) { - if (err.message.indexOf("EADDRINUSE") > 0) { - console.log("Superalgos Web Server cannot be started. Reason: the port " + port + " is already in use by another application. The web server cannot be started until either you stop the other application or you change the port number at the WebServer/.env file for an unused one. (variable name WEB_SERVER_PORT)") - return - } - console.log('[ERROR] Web Server -> server -> uncaughtException -> err.message = ' + err.message) - console.log('[ERROR] Web Server -> server -> uncaughtException -> err.stack = ' + err.stack) - process.exit(1) -}) - -process.on('unhandledRejection', (reason, p) => { - console.log('[ERROR] Web Server -> server -> unhandledRejection -> reason = ' + JSON.stringify(reason)) - console.log('[ERROR] Web Server -> server -> unhandledRejection -> p = ' + JSON.stringify(p)) - process.exit(1) -}) - -let http = require('http') -let isHttpServerStarted = false -let cloneExecutorChildProcess - -startHtttpServer() - -function startHtttpServer () { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> startHtttpServer -> Entering function.') } - - try { - if (isHttpServerStarted === false) { - gWebServer = http.createServer(onBrowserRequest).listen(port) - isHttpServerStarted = true - open('http://localhost:' + port) - console.log('Web Server Started.') - } - } catch (err) { - console.log('[ERROR] server -> startHtttpServer -> Error = ' + err.stack) - } -} - -function startCloneExecutor () { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> startCloneExecutor -> Entering function.') }; - - if (process.env.RUN_CLON_EXECUTOR !== 'true') { return } - - let path = process.env.CLONE_EXECUTOR_PATH + '/run.js' - cloneExecutorChildProcess = fork(path, [], { stdio: 'inherit' }) - - cloneExecutorChildProcess.on('error', (err) => { - console.log(`[ERROR] server -> startCloneExecutor -> Clone Executor exited with error ${err}`) - }) - cloneExecutorChildProcess.on('close', (code, signal) => { - console.log(`[INFO] CloneExecutor process terminated.`) - }) -} - -function stopCloneExecutor () { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> stopCloneExecutor -> Entering function.') }; - - if (cloneExecutorChildProcess) { - cloneExecutorChildProcess.send('STOP'); - } -} - -function onBrowserRequest (request, response) { - if (CONSOLE_LOG === true && request.url.indexOf('NO-LOG') === -1) { console.log('[INFO] server -> onBrowserRequest -> request.url = ' + request.url) } - - let requestParameters = request.url.split('/') - - if (requestParameters[1].indexOf('index.html') >= 0) { - /* - We use this to solve the problem when someone is arriving to the site with a sessionToken in the queryString. We extract here that - token, that will be sent later embedded into the HTML code, so that it can enter into the stardard circuit where any site can put - the sessionToken into their HTML code and from there the Browser app will log the user in. - */ - - let queryString = requestParameters[1].split('?') - - requestParameters[1] = '' - requestParameters[2] = queryString[1] - homePage() - - return - } - - requestParameters = request.url.split('?') // Remove version information - requestParameters = requestParameters[0].split('/') - - switch (requestParameters[1]) { - - case 'CCXT': - { - getBody(processRequest) - - function getBody(callback) { - let body = '' - - request.on('data', function (data) { - body += data - // Too much POST data - if (body.length > 1e6) { - request.connection.destroy() - } - }) - - request.on('end', function () { - callback(body) - }) - } - async function processRequest(body) { - try { - let params = JSON.parse(body) - - const ccxt = require('ccxt') - - switch (params.method) { - case 'fetchMarkets': { - - const exchangeClass = ccxt[params.exchangeId] - const exchangeConstructorParams = { - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - } - - let ccxtExchange = new exchangeClass(exchangeConstructorParams) - let ccxtMarkets = [] - - if (ccxtExchange.has.fetchMarkets === true) { - ccxtMarkets = await ccxtExchange.fetchMarkets() - } - respondWithContent(JSON.stringify(ccxtMarkets), response) - return - } - case 'listExchanges': { - let exchanges = [] - for (let i = 0; i < ccxt.exchanges.length; i++) { - let exchangeId = ccxt.exchanges[i] - - const exchangeClass = ccxt[exchangeId] - const exchangeConstructorParams = { - 'timeout': 30000, - 'enableRateLimit': true, - verbose: false - } - let ccxtExchange - try { ccxtExchange = new exchangeClass(exchangeConstructorParams)} - catch (err) {} - if (ccxtExchange === undefined) {continue} - - - if (ccxtExchange.has.fetchOHLCV === params.has.fetchOHLCV) { - if (ccxtExchange.has.fetchMarkets === params.has.fetchMarkets) { - if (ccxtExchange.timeframes['1m'] !== undefined) { - let exchange = { - name: ccxtExchange.name, - id: ccxtExchange.id - } - exchanges.push(exchange) - } - } - } - } - respondWithContent(JSON.stringify(exchanges), response) - return - } - } - - let content = { - err: global.DEFAULT_FAIL_RESPONSE // method not supported - } - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> CCXT FetchMarkets -> Could not fetch markets.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - } - break - } - - case 'ResetLogsAndData': - { - try { - let rimraf = require('rimraf') - rimraf.sync(process.env.STORAGE_PATH + '/Masters/Masters/AAJason.1.0') - rimraf.sync(process.env.LOG_PATH) - - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> ResetLogsAndData -> Could not delete Logs and Data.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - break - } - case 'RestartCloneExecutor': - { - try { - stopCloneExecutor() - startCloneExecutor() - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> ResetLogsAndData -> Could not restart Clone Executor.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - - break - } - case 'StopCloneExecutor': - { - try { - stopCloneExecutor() - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) - } catch (err) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> ResetLogsAndData -> Could not Stop Clone Executor.') } - let error = { - result: 'Fail Because', - message: err.message - } - respondWithContent(JSON.stringify(error), response) - } - break - } - - case 'LegacyPlotter.js': - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/LegacyPlotter.js', response) - } - break - - case 'PlotterPanel.js': - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/PlotterPanel.js', response) - } - break - - case 'Images': // This means the Images folder. - { - let path = process.env.PATH_TO_WEB_SERVER + 'WebServer/Images/' + requestParameters[2] - - if (requestParameters[3] !== undefined) { - path = path + '/' + requestParameters[3] - } - - if (requestParameters[4] !== undefined) { - path = path + '/' + requestParameters[4] - } - - if (requestParameters[5] !== undefined) { - path = path + '/' + requestParameters[5] - } - - path = unescape(path) - - respondWithImage(path, response) - } - break - - case 'favicon.ico': // This means the Scripts folder. - { - respondWithImage(process.env.PATH_TO_WEB_SERVER + 'WebServer/Images/' + 'favicon.ico', response) - } - break - - case 'CockpitSpace': // This means the CockpitSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/CockpitSpace/' + requestParameters[2], response) - } - break - - case 'TopSpace': // This means the TopSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/TopSpace/' + requestParameters[2], response) - } - break - - case 'DesignSpace': // This means the DesignSpace folder. - - { - if (requestParameters[3] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2], response) - return - } - if (requestParameters[4] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3], response) - return - } - if (requestParameters[5] === undefined) { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response) - return - } - } - break - - case 'ControlsToolBox': // This means the DesignSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/ControlsToolBox/' + requestParameters[2], response) - } - break - - case 'Utilities': // This means the DesignSpace folder. - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/Utilities/' + requestParameters[2], response) - } - break - - case 'WebServer': // This means the WebServer folder. - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/' + requestParameters[2], response) - } - break - - case 'externalScripts': // This means the WebServer folder. - { - respondWithFile(process.env.PATH_TO_WEB_SERVER + 'WebServer/externalScripts/' + requestParameters[2], response) - } - break - - case 'Plotters': // This means the plotter folder, not to be confused with the Plotters script! - { - let dataMine = requestParameters[2] - let codeName = requestParameters[3] - let moduleName = requestParameters[4] - let filePath = process.env.PLOTTERS_PATH + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName - respondWithFile(filePath, response) - } - break - - case 'PlotterPanels': // This means the PlotterPanels folder, not to be confused with the Plotter Panels scripts! - { - let dataMine = requestParameters[2] - let codeName = requestParameters[3] - let moduleName = requestParameters[4] - let filePath = process.env.PLOTTERS_PATH + '/' + dataMine + '/plotters/' + codeName + '/' + moduleName - respondWithFile(filePath, response) - } - break - case 'Panels': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'ChartLayers': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Spaces': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Scales': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'Files': - { - respondWithFile(process.env.PATH_TO_FILES_COMPONENT + '/' + requestParameters[2], response) - } - break - - case 'FloatingSpace': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'ChartingSpace': - { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) - } - break - - case 'AppSchema.js': - { - let fs = require('fs') - - try { - let filePath = process.env.APP_SCHEMA_PATH + 'AppSchema.json' - fs.readFile(filePath, onFileRead) - } catch (e) { - console.log('[ERROR] Error reading the App Schema.', e) - } - - function onFileRead(err, appSchema) { - if (err) { - respondWithContent(undefined, response) - } else { - let responseContent = 'function getAppSchema(){ return ' + appSchema + '}' - respondWithContent(responseContent, response) - } - } - } - break - - case 'Workspace.js': - { - let fs = require('fs') - - try { - let filePath = process.env.WORKSPACE_PATH + 'Workspace.json' - fs.readFile(filePath, onFileRead) - } catch (e) { - console.log('[ERROR] Error reading the Workspace.', e) - } - - function onFileRead(err, workspace) { - if (err) { - respondWithContent(undefined, response) - } else { - let responseContent = 'function getWorkspace(){ return ' + workspace + '}' - respondWithContent(responseContent, response) - } - } - } - break - - case 'DataMines': - { - respondWithFile(process.env.DATA_MINES_PATH + '/' + requestParameters[2] + '.json', response) - } - break - - case 'TradingSystems': - { - respondWithFile(process.env.TRADING_SYSTEMS_PATH + '/' + requestParameters[2] + '.json', response) - } - break - - case 'SuperScripts': - { - respondWithFile(process.env.SUPER_SCRIPTS_PATH + '/' + requestParameters[2] + '.json', response) - } - break - - case 'Storage': - { - respondWithFile(process.env.STORAGE_PATH + '/' + request.url.substring(9), response) - } - break - - case 'GetDefinition': - { - respondWithFile(process.env.INTER_PROCESS_FILES_PATH + '/definition.json', response) - } - break - - case 'SaveDefinition': - { - let fs = require('fs') - let body = '' - - request.on('data', function (data) { - body += data - // Too much POST data - if (body.length > 1e6) { - request.connection.destroy() - } - }) - - request.on('end', function () { - try { - let filePath = process.env.INTER_PROCESS_FILES_PATH + '/definition.json' - fs.writeFile(filePath, body, onFileWrite) - } catch (e) { - console.log('[ERROR] Error writing user config.', e) - respondWithContent(undefined, response) - } - - function onFileWrite (err) { - if (err) { - respondWithContent(undefined, response) - } else { - let responseContent = 'User config updated.' - respondWithContent(responseContent, response) - } - } - }) - } - break - - default: - { - homePage() - } - } - - function homePage () { - if (requestParameters[1] === '') { - let fs = require('fs') - try { - let fileName = process.env.PATH_TO_WEB_SERVER + 'WebServer/index.html' - fs.readFile(fileName, onFileRead) - - function onFileRead (err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> onBrowserRequest -> onFileRead -> Entering function.') } - - try { - let fileContent = file.toString() - - fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) - respondWithContent(fileContent, response) - } catch (err) { - console.log('[ERROR] server -> onBrowserRequest -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log(err) - } - } else { - respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1], response) - } - } -} - -function respondWithFile (fileName, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithFile -> Entering function.') } - - let fs = require('fs') - if (fileName.indexOf('undefined') > 0) { - console.log('[WRN] server -> respondWithFile -> Received request for undefined file. ') - respondWithContent(undefined, response) - } else { - try { - fs.readFile(fileName, onFileRead) - - function onFileRead (err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithFile -> onFileRead -> Entering function.') } - if (!err) { - respondWithContent(file.toString(), response) - } else { - respondWithContent(undefined, response) - } - } - } catch (err) { - returnEmptyArray() - } - } -} - -function respondWithContent (content, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithContent -> Entering function.') } - - try { - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. - - if (content !== undefined) { - response.writeHead(200, { 'Content-Type': 'text/html' }) - response.write(content) - } else { - response.writeHead(404, { 'Content-Type': 'text/html' }) - response.write('The specified key does not exist.') - } - response.end('\n') - } catch (err) { - returnEmptyArray(response) - } -} - -function respondWithImage (fileName, response) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithImage -> Entering function.') } - - let fs = require('fs') - try { - fs.readFile(fileName, onFileRead) - - function onFileRead (err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithImage -> onFileRead -> Entering function.') } - - try { - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. - - response.writeHead(200, { 'Content-Type': 'image/png' }) - response.end(file, 'binary') - } catch (err) { - console.log('[ERROR] server -> respondWithImage -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) - } - } - } catch (err) { - console.log('[ERROR] server -> respondWithImage -> err = ' + err.stack) - } -} - -function returnEmptyArray (response) { - try { - if (CONSOLE_LOG === true) { console.log('[INFO] server -> respondWithFile -> returnEmptyArray -> Entering function.') } - - response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. - response.setHeader('Pragma', 'no-cache') // HTTP 1.0. - response.setHeader('Expires', '0') // Proxies. - - response.writeHead(200, { 'Content-Type': 'text/html' }) - response.write('[]') - response.end('\n') - } catch (err) { - console.log('[ERROR] server -> returnEmptyArray -> err.message ' + err.message) - } -}